From d5337edf1f5ceb054204f7be5b49e4eecef7062b Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 3 Nov 2013 17:17:04 -0800 Subject: [PATCH 1/2] Force 5 byte jumps to avoid jump target issues. Some with 16-bit colors were too far. --- GPU/GLES/VertexDecoder.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GPU/GLES/VertexDecoder.cpp b/GPU/GLES/VertexDecoder.cpp index 4ea39f6e4c..14a31e2f2d 100644 --- a/GPU/GLES/VertexDecoder.cpp +++ b/GPU/GLES/VertexDecoder.cpp @@ -1127,7 +1127,7 @@ JittedVertexDecoder VertexDecoderJitCache::Compile(const VertexDecoder &dec) { ADD(32, R(dstReg), Imm32(dec.decFmt.stride)); #endif SUB(32, R(counterReg), Imm8(1)); - J_CC(CC_NZ, loopStart); + J_CC(CC_NZ, loopStart, true); #ifdef _M_IX86 // Restore register values From a1fa65f631542ab354bd57032204eb74c4e20e68 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 3 Nov 2013 18:43:24 -0800 Subject: [PATCH 2/2] Stupid typos, broke 4444 and 565. --- GPU/GLES/TransformPipeline.cpp | 4 +--- GPU/GLES/VertexDecoder.cpp | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/GPU/GLES/TransformPipeline.cpp b/GPU/GLES/TransformPipeline.cpp index 91fa056e98..0682cc1db3 100644 --- a/GPU/GLES/TransformPipeline.cpp +++ b/GPU/GLES/TransformPipeline.cpp @@ -1081,9 +1081,7 @@ u32 TransformDrawEngine::ComputeHash() { } } if (uvScale) { - for (int i = 0; i < numDrawCalls; i++) { - fullhash += XXH32(&uvScale[i], sizeof(uvScale[0]), 0x0123e658); - } + fullhash += XXH32(&uvScale[0], sizeof(uvScale[0]) * numDrawCalls, 0x0123e658); } return fullhash; diff --git a/GPU/GLES/VertexDecoder.cpp b/GPU/GLES/VertexDecoder.cpp index 14a31e2f2d..82dc877850 100644 --- a/GPU/GLES/VertexDecoder.cpp +++ b/GPU/GLES/VertexDecoder.cpp @@ -1248,7 +1248,7 @@ void VertexDecoderJitCache::Jit_Color4444() { // tempReg1 -> ABGR0000, then double A backwards. SHL(32, R(tempReg1), Imm8(8)); MOV(32, R(tempReg3), R(tempReg1)); - AND(32, R(tempReg3), Imm32(0xF000000)); + AND(32, R(tempReg3), Imm32(0xF0000000)); OR(32, R(tempReg2), R(tempReg3)); SHR(32, R(tempReg3), Imm8(4)); OR(32, R(tempReg2), R(tempReg3)); @@ -1276,7 +1276,7 @@ void VertexDecoderJitCache::Jit_Color565() { AND(32, R(tempReg2), Imm32(0x00FF00FF)); // Now's as good a time to put in A as any. - OR(32, R(tempReg2), Imm8(0xFF000000)); + OR(32, R(tempReg2), Imm32(0xFF000000)); // Last, we need to align, extract, and expand G. // 3 to align to G, and then 2 to expand to 8.