From e362bc8357fe369599e3eb31af48c810102ae6fa Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 6 Jul 2013 22:37:37 +0800 Subject: [PATCH 1/4] Fall back to use region instead of viewport to estimate framebuffer drawing size --- GPU/GLES/Framebuffer.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/GPU/GLES/Framebuffer.cpp b/GPU/GLES/Framebuffer.cpp index bef01ed5d..6289b9ad5 100644 --- a/GPU/GLES/Framebuffer.cpp +++ b/GPU/GLES/Framebuffer.cpp @@ -430,16 +430,16 @@ void FramebufferManager::SetRenderFrameBuffer() { int z_stride = gstate.zbwidth & 0x3C0; // Yeah this is not completely right. but it'll do for now. - //int drawing_width = ((gstate.region2) & 0x3FF) + 1; - //int drawing_height = ((gstate.region2 >> 10) & 0x3FF) + 1; + int drawing_width = ((gstate.region2) & 0x3FF) + 1; + int drawing_height = ((gstate.region2 >> 10) & 0x3FF) + 1; // As there are no clear "framebuffer width" and "framebuffer height" registers, // we need to infer the size of the current framebuffer somehow. Let's try the viewport. int fmt = gstate.framebufpixformat & 3; - int drawing_width, drawing_height; - GuessDrawingSize(drawing_width, drawing_height); + //int drawing_width, drawing_height; + //GuessDrawingSize(drawing_width, drawing_height); int buffer_width = drawing_width; int buffer_height = drawing_height; From 23a22a4931252397baccbf4723802065a8e2658b Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 6 Jul 2013 22:47:35 +0800 Subject: [PATCH 2/4] HW : revert multiple with 2.0 --- GPU/GLES/VertexShaderGenerator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GPU/GLES/VertexShaderGenerator.cpp b/GPU/GLES/VertexShaderGenerator.cpp index c7001b880..2ccf958c7 100644 --- a/GPU/GLES/VertexShaderGenerator.cpp +++ b/GPU/GLES/VertexShaderGenerator.cpp @@ -553,7 +553,7 @@ void GenerateVertexShader(int prim, char *buffer, bool useHWTransform) { } if (flipV) - WRITE(p, " v_texcoord.y = 1.0 - v_texcoord.y;\n"); + WRITE(p, " v_texcoord.y = 1.0 - v_texcoord.y * 2.0;\n"); } // Compute fogdepth From 5ecaf4b8bcec84fe8e1eecc7fce3241019ec70da Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 6 Jul 2013 22:48:24 +0800 Subject: [PATCH 3/4] SW : revert multiple with 2.0 --- GPU/GLES/TransformPipeline.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GPU/GLES/TransformPipeline.cpp b/GPU/GLES/TransformPipeline.cpp index ce5acb209..d6e2b4090 100644 --- a/GPU/GLES/TransformPipeline.cpp +++ b/GPU/GLES/TransformPipeline.cpp @@ -717,7 +717,7 @@ void TransformDrawEngine::SoftwareTransformAndDraw( memcpy(&transformed[index].u, uv, 3 * sizeof(float)); if (gstate_c.flipTexture) - transformed[index].v = 1.0f - transformed[index].v; + transformed[index].v = 1.0f - transformed[index].v * 2.0f; for (int i = 0; i < 4; i++) { transformed[index].color0[i] = c0[i] * 255.0f; From e318e49061aba49e11e4ec8daef8d2d85d030233 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 7 Jul 2013 00:47:25 +0800 Subject: [PATCH 4/4] Apply scissor() , Last Ranker need it to render correctly --- GPU/GLES/Framebuffer.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/GPU/GLES/Framebuffer.cpp b/GPU/GLES/Framebuffer.cpp index 6289b9ad5..fbdbc7ac1 100644 --- a/GPU/GLES/Framebuffer.cpp +++ b/GPU/GLES/Framebuffer.cpp @@ -433,6 +433,11 @@ void FramebufferManager::SetRenderFrameBuffer() { int drawing_width = ((gstate.region2) & 0x3FF) + 1; int drawing_height = ((gstate.region2 >> 10) & 0x3FF) + 1; + if (drawing_width > gstate.getScissorX2() + 1) + drawing_width = gstate.getScissorX2() + 1; + if (drawing_height > gstate.getScissorY2() + 1) + drawing_height = gstate.getScissorY2() + 1; + // As there are no clear "framebuffer width" and "framebuffer height" registers, // we need to infer the size of the current framebuffer somehow. Let's try the viewport.