diff --git a/GPU/D3D11/DrawEngineD3D11.cpp b/GPU/D3D11/DrawEngineD3D11.cpp index 12dd8284ff8c..4426572efaeb 100644 --- a/GPU/D3D11/DrawEngineD3D11.cpp +++ b/GPU/D3D11/DrawEngineD3D11.cpp @@ -588,6 +588,15 @@ void DrawEngineD3D11::DoFlush() { params.provokeFlatFirst = true; params.flippedY = false; + // We need correct viewport values in gstate_c already. + if (gstate_c.IsDirty(DIRTY_VIEWPORTSCISSOR_STATE)) { + ViewportAndScissor vpAndScissor; + ConvertViewportAndScissor(framebufferManager_->UseBufferedRendering(), + framebufferManager_->GetRenderWidth(), framebufferManager_->GetRenderHeight(), + framebufferManager_->GetTargetBufferWidth(), framebufferManager_->GetTargetBufferHeight(), + vpAndScissor); + } + int maxIndex = indexGen.MaxIndex(); SoftwareTransform swTransform(params); swTransform.Decode(prim, dec_->VertexType(), dec_->GetDecVtxFmt(), maxIndex, &result); diff --git a/GPU/Directx9/DrawEngineDX9.cpp b/GPU/Directx9/DrawEngineDX9.cpp index 64a66599687f..712a1f14e47f 100644 --- a/GPU/Directx9/DrawEngineDX9.cpp +++ b/GPU/Directx9/DrawEngineDX9.cpp @@ -557,6 +557,15 @@ void DrawEngineDX9::DoFlush() { params.provokeFlatFirst = true; params.flippedY = false; + // We need correct viewport values in gstate_c already. + if (gstate_c.IsDirty(DIRTY_VIEWPORTSCISSOR_STATE)) { + ViewportAndScissor vpAndScissor; + ConvertViewportAndScissor(framebufferManager_->UseBufferedRendering(), + framebufferManager_->GetRenderWidth(), framebufferManager_->GetRenderHeight(), + framebufferManager_->GetTargetBufferWidth(), framebufferManager_->GetTargetBufferHeight(), + vpAndScissor); + } + int maxIndex = indexGen.MaxIndex(); SoftwareTransform swTransform(params); swTransform.Decode(prim, dec_->VertexType(), dec_->GetDecVtxFmt(), maxIndex, &result); diff --git a/GPU/GLES/DrawEngineGLES.cpp b/GPU/GLES/DrawEngineGLES.cpp index 64ae8ac1f258..4efdd09102f2 100644 --- a/GPU/GLES/DrawEngineGLES.cpp +++ b/GPU/GLES/DrawEngineGLES.cpp @@ -565,6 +565,14 @@ void DrawEngineGLES::DoFlush() { params.provokeFlatFirst = false; params.flippedY = !framebufferManager_->UseBufferedRendering(); + // We need correct viewport values in gstate_c already. + if (gstate_c.IsDirty(DIRTY_VIEWPORTSCISSOR_STATE)) { + ConvertViewportAndScissor(framebufferManager_->UseBufferedRendering(), + framebufferManager_->GetRenderWidth(), framebufferManager_->GetRenderHeight(), + framebufferManager_->GetTargetBufferWidth(), framebufferManager_->GetTargetBufferHeight(), + vpAndScissor); + } + int maxIndex = indexGen.MaxIndex(); int vertexCount = indexGen.VertexCount(); diff --git a/GPU/Vulkan/DrawEngineVulkan.cpp b/GPU/Vulkan/DrawEngineVulkan.cpp index 2f65b18c9210..fcfb09bfbeef 100644 --- a/GPU/Vulkan/DrawEngineVulkan.cpp +++ b/GPU/Vulkan/DrawEngineVulkan.cpp @@ -915,8 +915,11 @@ void DrawEngineVulkan::DoFlush() { // We don't have a "DrawStateEarly" in vulkan, so... // TODO: Probably should eventually refactor this and feed the vp size into SoftwareTransform directly (Unknown's idea). if (gstate_c.IsDirty(DIRTY_VIEWPORTSCISSOR_STATE)) { - gstate_c.vpWidth = gstate.getViewportXScale() * 2.0f; - gstate_c.vpHeight = gstate.getViewportYScale() * 2.0f; + ViewportAndScissor vpAndScissor; + ConvertViewportAndScissor(framebufferManager_->UseBufferedRendering(), + framebufferManager_->GetRenderWidth(), framebufferManager_->GetRenderHeight(), + framebufferManager_->GetTargetBufferWidth(), framebufferManager_->GetTargetBufferHeight(), + vpAndScissor); } int maxIndex = indexGen.MaxIndex();