Skip to content

Commit

Permalink
GPU: Update viewport params before sw transform.
Browse files Browse the repository at this point in the history
  • Loading branch information
unknownbrackets committed Oct 31, 2021
1 parent 3730460 commit f35c7d0
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 2 deletions.
9 changes: 9 additions & 0 deletions GPU/D3D11/DrawEngineD3D11.cpp
Expand Up @@ -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);
Expand Down
9 changes: 9 additions & 0 deletions GPU/Directx9/DrawEngineDX9.cpp
Expand Up @@ -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);
Expand Down
8 changes: 8 additions & 0 deletions GPU/GLES/DrawEngineGLES.cpp
Expand Up @@ -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();

Expand Down
7 changes: 5 additions & 2 deletions GPU/Vulkan/DrawEngineVulkan.cpp
Expand Up @@ -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();
Expand Down

0 comments on commit f35c7d0

Please sign in to comment.