Mask block transfer stride correctly per tests.

1024 is valid, but nothing higher.

May help graphics in some games.
This commit is contained in:
Unknown W. Brackets committed 2013-11-25 01:53:33 -08:00
1 parent 5ff589a0d9
commit 7a86ca2890
1 file changed
+4 -2
+4 -2
View File
@@ -384,11 +384,13 @@ struct GPUgstate
// Transfers
u32 getTransferSrcAddress() const { return (transfersrc & 0xFFFFF0) | ((transfersrcw & 0xFF0000) << 8); }
u32 getTransferSrcStride() const { return transfersrcw & 0x3F8; }
// Bits 0xf800 are ignored, > 0x400 is treated as 0.
u32 getTransferSrcStride() const { int stride = transfersrcw & 0x7F8; return stride > 0x400 ? 0 : stride; }
int getTransferSrcX() const { return (transfersrcpos >> 0) & 0x3FF; }
int getTransferSrcY() const { return (transfersrcpos >> 10) & 0x3FF; }
u32 getTransferDstAddress() const { return (transferdst & 0xFFFFF0) | ((transferdstw & 0xFF0000) << 8); }
u32 getTransferDstStride() const { return transferdstw & 0x3F8; }
// Bits 0xf800 are ignored, > 0x400 is treated as 0.
u32 getTransferDstStride() const { int stride = transferdstw & 0x7F8; return stride > 0x400 ? 0 : stride; }
int getTransferDstX() const { return (transferdstpos >> 0) & 0x3FF; }
int getTransferDstY() const { return (transferdstpos >> 10) & 0x3FF; }
int getTransferWidth() const { return ((transfersize >> 0) & 0x3FF) + 1; }