diff --git a/GPU/Common/SoftwareTransformCommon.cpp b/GPU/Common/SoftwareTransformCommon.cpp index 93a72e07da..08d0fc7244 100644 --- a/GPU/Common/SoftwareTransformCommon.cpp +++ b/GPU/Common/SoftwareTransformCommon.cpp @@ -555,8 +555,6 @@ void SoftwareTransform::BuildDrawingParams(int prim, int vertexCount, u32 vertTy FramebufferManagerCommon *fbman = params_.fbman; bool useBufferedRendering = fbman->UseBufferedRendering(); - bool flippedY = g_Config.iGPUBackend == (int)GPUBackend::OPENGL && !useBufferedRendering; - if (prim != GE_PRIM_RECTANGLES) { // We can simply draw the unexpanded buffer. numTrans = vertexCount; @@ -570,7 +568,7 @@ void SoftwareTransform::BuildDrawingParams(int prim, int vertexCount, u32 vertTy if (!throughmode) { memcpy(&flippedMatrix, gstate.projMatrix, 16 * sizeof(float)); - const bool invertedY = flippedY ? (gstate_c.vpHeight < 0) : (gstate_c.vpHeight > 0); + const bool invertedY = params_.flippedY ? (gstate_c.vpHeight < 0) : (gstate_c.vpHeight > 0); if (invertedY) { flippedMatrix[1] = -flippedMatrix[1]; flippedMatrix[5] = -flippedMatrix[5]; @@ -640,7 +638,7 @@ void SoftwareTransform::BuildDrawingParams(int prim, int vertexCount, u32 vertTy if (!gstate.isDepthClampEnabled() && (tlOutside || brOutside)) continue; - RotateUV(trans, tl, br, flippedY); + RotateUV(trans, tl, br, params_.flippedY); } // Triangle: BR-TR-TL diff --git a/GPU/Common/SoftwareTransformCommon.h b/GPU/Common/SoftwareTransformCommon.h index 98250afbea..e1acd1cab5 100644 --- a/GPU/Common/SoftwareTransformCommon.h +++ b/GPU/Common/SoftwareTransformCommon.h @@ -56,6 +56,7 @@ struct SoftwareTransformParams { bool allowClear; bool allowSeparateAlphaClear; bool provokeFlatFirst; + bool flippedY; }; class SoftwareTransform { diff --git a/GPU/D3D11/DrawEngineD3D11.cpp b/GPU/D3D11/DrawEngineD3D11.cpp index 6dc47766fb..12dd8284ff 100644 --- a/GPU/D3D11/DrawEngineD3D11.cpp +++ b/GPU/D3D11/DrawEngineD3D11.cpp @@ -586,6 +586,7 @@ rotateVBO: params.allowClear = true; params.allowSeparateAlphaClear = false; // D3D11 doesn't support separate alpha clears params.provokeFlatFirst = true; + params.flippedY = false; int maxIndex = indexGen.MaxIndex(); SoftwareTransform swTransform(params); diff --git a/GPU/Directx9/DrawEngineDX9.cpp b/GPU/Directx9/DrawEngineDX9.cpp index 377d2164f4..64a6659968 100644 --- a/GPU/Directx9/DrawEngineDX9.cpp +++ b/GPU/Directx9/DrawEngineDX9.cpp @@ -555,6 +555,7 @@ rotateVBO: params.allowClear = true; params.allowSeparateAlphaClear = false; params.provokeFlatFirst = true; + params.flippedY = false; int maxIndex = indexGen.MaxIndex(); SoftwareTransform swTransform(params); diff --git a/GPU/GLES/DrawEngineGLES.cpp b/GPU/GLES/DrawEngineGLES.cpp index 122222be69..64ae8ac1f2 100644 --- a/GPU/GLES/DrawEngineGLES.cpp +++ b/GPU/GLES/DrawEngineGLES.cpp @@ -563,6 +563,7 @@ void DrawEngineGLES::DoFlush() { params.allowClear = true; params.allowSeparateAlphaClear = true; params.provokeFlatFirst = false; + params.flippedY = !framebufferManager_->UseBufferedRendering(); int maxIndex = indexGen.MaxIndex(); int vertexCount = indexGen.VertexCount(); diff --git a/GPU/Vulkan/DrawEngineVulkan.cpp b/GPU/Vulkan/DrawEngineVulkan.cpp index 628f133f98..2f65b18c92 100644 --- a/GPU/Vulkan/DrawEngineVulkan.cpp +++ b/GPU/Vulkan/DrawEngineVulkan.cpp @@ -909,6 +909,7 @@ void DrawEngineVulkan::DoFlush() { params.allowClear = framebufferManager_->UseBufferedRendering(); params.allowSeparateAlphaClear = false; params.provokeFlatFirst = true; + params.flippedY = false; // We need to update the viewport early because it's checked for flipping in SoftwareTransform. // We don't have a "DrawStateEarly" in vulkan, so...