diff options
| author | 2021-07-29 14:19:51 -0400 | |
|---|---|---|
| committer | 2021-11-16 22:11:29 +0100 | |
| commit | 9bc7b04ca587a349a9fc865d05e30966d6a84d65 (patch) | |
| tree | b5bef9b90abf783634d950f4cf852637145e9632 /src | |
| parent | gl_graphics_pipeline: Add downscale factor to shader uniforms (diff) | |
| download | yuzu-9bc7b04ca587a349a9fc865d05e30966d6a84d65.tar.gz yuzu-9bc7b04ca587a349a9fc865d05e30966d6a84d65.tar.xz yuzu-9bc7b04ca587a349a9fc865d05e30966d6a84d65.zip | |
gl_rasterizer: Fix rescale dirty state checking
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index b91e7edf8..615704711 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -533,7 +533,8 @@ void RasterizerOpenGL::SyncViewport() { | |||
| 533 | auto& flags = maxwell3d.dirty.flags; | 533 | auto& flags = maxwell3d.dirty.flags; |
| 534 | const auto& regs = maxwell3d.regs; | 534 | const auto& regs = maxwell3d.regs; |
| 535 | 535 | ||
| 536 | const bool dirty_viewport = flags[Dirty::Viewports]; | 536 | const bool rescale_viewports = flags[VideoCommon::Dirty::RescaleViewports]; |
| 537 | const bool dirty_viewport = flags[Dirty::Viewports] || rescale_viewports; | ||
| 537 | const bool dirty_clip_control = flags[Dirty::ClipControl]; | 538 | const bool dirty_clip_control = flags[Dirty::ClipControl]; |
| 538 | 539 | ||
| 539 | if (dirty_clip_control || flags[Dirty::FrontFace]) { | 540 | if (dirty_clip_control || flags[Dirty::FrontFace]) { |
| @@ -574,8 +575,9 @@ void RasterizerOpenGL::SyncViewport() { | |||
| 574 | if (dirty_viewport) { | 575 | if (dirty_viewport) { |
| 575 | flags[Dirty::Viewports] = false; | 576 | flags[Dirty::Viewports] = false; |
| 576 | 577 | ||
| 577 | const bool force = flags[Dirty::ViewportTransform]; | 578 | const bool force = flags[Dirty::ViewportTransform] || rescale_viewports; |
| 578 | flags[Dirty::ViewportTransform] = false; | 579 | flags[Dirty::ViewportTransform] = false; |
| 580 | flags[VideoCommon::Dirty::RescaleViewports] = false; | ||
| 579 | 581 | ||
| 580 | const auto& resolution = Settings::values.resolution_info; | 582 | const auto& resolution = Settings::values.resolution_info; |
| 581 | const auto scale_up = [&](u32 value) -> u32 { | 583 | const auto scale_up = [&](u32 value) -> u32 { |
| @@ -911,11 +913,14 @@ void RasterizerOpenGL::SyncLogicOpState() { | |||
| 911 | 913 | ||
| 912 | void RasterizerOpenGL::SyncScissorTest() { | 914 | void RasterizerOpenGL::SyncScissorTest() { |
| 913 | auto& flags = maxwell3d.dirty.flags; | 915 | auto& flags = maxwell3d.dirty.flags; |
| 914 | if (!flags[Dirty::Scissors]) { | 916 | if (!flags[Dirty::Scissors] && !flags[VideoCommon::Dirty::RescaleScissors]) { |
| 915 | return; | 917 | return; |
| 916 | } | 918 | } |
| 917 | flags[Dirty::Scissors] = false; | 919 | flags[Dirty::Scissors] = false; |
| 918 | 920 | ||
| 921 | const bool force = flags[VideoCommon::Dirty::RescaleScissors]; | ||
| 922 | flags[VideoCommon::Dirty::RescaleScissors] = false; | ||
| 923 | |||
| 919 | const auto& regs = maxwell3d.regs; | 924 | const auto& regs = maxwell3d.regs; |
| 920 | 925 | ||
| 921 | const auto& resolution = Settings::values.resolution_info; | 926 | const auto& resolution = Settings::values.resolution_info; |
| @@ -927,7 +932,7 @@ void RasterizerOpenGL::SyncScissorTest() { | |||
| 927 | return std::max<u32>(converted_value, 1U); | 932 | return std::max<u32>(converted_value, 1U); |
| 928 | }; | 933 | }; |
| 929 | for (std::size_t index = 0; index < Maxwell::NumViewports; ++index) { | 934 | for (std::size_t index = 0; index < Maxwell::NumViewports; ++index) { |
| 930 | if (!flags[Dirty::Scissor0 + index]) { | 935 | if (!force && !flags[Dirty::Scissor0 + index]) { |
| 931 | continue; | 936 | continue; |
| 932 | } | 937 | } |
| 933 | flags[Dirty::Scissor0 + index] = false; | 938 | flags[Dirty::Scissor0 + index] = false; |