diff options
| author | 2019-12-30 00:49:19 -0300 | |
|---|---|---|
| committer | 2020-02-28 17:56:42 -0300 | |
| commit | d8f5c450516c3956b422f0487293ea02620a3518 (patch) | |
| tree | 06c933a0abd3679f73cbc869529952c86e71a0cc /src | |
| parent | gl_state_tracker: Implement dirty flags for multisample (diff) | |
| download | yuzu-d8f5c450516c3956b422f0487293ea02620a3518.tar.gz yuzu-d8f5c450516c3956b422f0487293ea02620a3518.tar.xz yuzu-d8f5c450516c3956b422f0487293ea02620a3518.zip | |
gl_state_tracker: Implement dirty flags for rasterize enable
Diffstat (limited to 'src')
5 files changed, 21 insertions, 2 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index e4875608a..a650113ca 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -1090,8 +1090,14 @@ void RasterizerOpenGL::SyncStencilTestState() { | |||
| 1090 | } | 1090 | } |
| 1091 | 1091 | ||
| 1092 | void RasterizerOpenGL::SyncRasterizeEnable() { | 1092 | void RasterizerOpenGL::SyncRasterizeEnable() { |
| 1093 | const auto& regs = system.GPU().Maxwell3D().regs; | 1093 | auto& gpu = system.GPU().Maxwell3D(); |
| 1094 | oglEnable(GL_RASTERIZER_DISCARD, regs.rasterize_enable == 0); | 1094 | auto& flags = gpu.dirty.flags; |
| 1095 | if (!flags[Dirty::RasterizeEnable]) { | ||
| 1096 | return; | ||
| 1097 | } | ||
| 1098 | flags[Dirty::RasterizeEnable] = false; | ||
| 1099 | |||
| 1100 | oglEnable(GL_RASTERIZER_DISCARD, gpu.regs.rasterize_enable == 0); | ||
| 1095 | } | 1101 | } |
| 1096 | 1102 | ||
| 1097 | void RasterizerOpenGL::SyncColorMask() { | 1103 | void RasterizerOpenGL::SyncColorMask() { |
diff --git a/src/video_core/renderer_opengl/gl_state_tracker.cpp b/src/video_core/renderer_opengl/gl_state_tracker.cpp index c979046a3..ebfb1945f 100644 --- a/src/video_core/renderer_opengl/gl_state_tracker.cpp +++ b/src/video_core/renderer_opengl/gl_state_tracker.cpp | |||
| @@ -189,6 +189,10 @@ void SetupDirtyMultisampleControl(Tables& tables) { | |||
| 189 | FillBlock(tables[0], OFF(multisample_control), NUM(multisample_control), MultisampleControl); | 189 | FillBlock(tables[0], OFF(multisample_control), NUM(multisample_control), MultisampleControl); |
| 190 | } | 190 | } |
| 191 | 191 | ||
| 192 | void SetupDirtyRasterizeEnable(Tables& tables) { | ||
| 193 | tables[0][OFF(rasterize_enable)] = RasterizeEnable; | ||
| 194 | } | ||
| 195 | |||
| 192 | void SetupDirtyMisc(Tables& tables) { | 196 | void SetupDirtyMisc(Tables& tables) { |
| 193 | auto& table = tables[0]; | 197 | auto& table = tables[0]; |
| 194 | 198 | ||
| @@ -221,6 +225,7 @@ void StateTracker::Initialize() { | |||
| 221 | SetupDirtyPrimitiveRestart(tables); | 225 | SetupDirtyPrimitiveRestart(tables); |
| 222 | SetupDirtyPolygonOffset(tables); | 226 | SetupDirtyPolygonOffset(tables); |
| 223 | SetupDirtyMultisampleControl(tables); | 227 | SetupDirtyMultisampleControl(tables); |
| 228 | SetupDirtyRasterizeEnable(tables); | ||
| 224 | SetupDirtyMisc(tables); | 229 | SetupDirtyMisc(tables); |
| 225 | 230 | ||
| 226 | auto& store = dirty.on_write_stores; | 231 | auto& store = dirty.on_write_stores; |
diff --git a/src/video_core/renderer_opengl/gl_state_tracker.h b/src/video_core/renderer_opengl/gl_state_tracker.h index afa8efc28..73a63d31d 100644 --- a/src/video_core/renderer_opengl/gl_state_tracker.h +++ b/src/video_core/renderer_opengl/gl_state_tracker.h | |||
| @@ -66,6 +66,7 @@ enum : u8 { | |||
| 66 | PrimitiveRestart, | 66 | PrimitiveRestart, |
| 67 | PolygonOffset, | 67 | PolygonOffset, |
| 68 | MultisampleControl, | 68 | MultisampleControl, |
| 69 | RasterizeEnable, | ||
| 69 | 70 | ||
| 70 | Last | 71 | Last |
| 71 | }; | 72 | }; |
| @@ -147,6 +148,11 @@ public: | |||
| 147 | flags[OpenGL::Dirty::PolygonOffset] = true; | 148 | flags[OpenGL::Dirty::PolygonOffset] = true; |
| 148 | } | 149 | } |
| 149 | 150 | ||
| 151 | void NotifyRasterizeEnable() { | ||
| 152 | auto& flags = system.GPU().Maxwell3D().dirty.flags; | ||
| 153 | flags[OpenGL::Dirty::RasterizeEnable] = true; | ||
| 154 | } | ||
| 155 | |||
| 150 | private: | 156 | private: |
| 151 | Core::System& system; | 157 | Core::System& system; |
| 152 | }; | 158 | }; |
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index 46572eb43..81ab95604 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp | |||
| @@ -522,6 +522,7 @@ void TextureCacheOpenGL::ImageBlit(View& src_view, View& dst_view, | |||
| 522 | state_tracker.NotifyScissor0(); | 522 | state_tracker.NotifyScissor0(); |
| 523 | state_tracker.NotifyBlend0(); | 523 | state_tracker.NotifyBlend0(); |
| 524 | state_tracker.NotifyFramebuffer(); | 524 | state_tracker.NotifyFramebuffer(); |
| 525 | state_tracker.NotifyRasterizeEnable(); | ||
| 525 | 526 | ||
| 526 | if (dst_params.srgb_conversion) { | 527 | if (dst_params.srgb_conversion) { |
| 527 | glEnable(GL_FRAMEBUFFER_SRGB); | 528 | glEnable(GL_FRAMEBUFFER_SRGB); |
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index 1be7e491a..41378978d 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp | |||
| @@ -587,6 +587,7 @@ void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) { | |||
| 587 | state_tracker.NotifyDepthTest(); | 587 | state_tracker.NotifyDepthTest(); |
| 588 | state_tracker.NotifyStencilTest(); | 588 | state_tracker.NotifyStencilTest(); |
| 589 | state_tracker.NotifyPolygonOffset(); | 589 | state_tracker.NotifyPolygonOffset(); |
| 590 | state_tracker.NotifyRasterizeEnable(); | ||
| 590 | 591 | ||
| 591 | program_manager.UseVertexShader(vertex_program.handle); | 592 | program_manager.UseVertexShader(vertex_program.handle); |
| 592 | program_manager.UseGeometryShader(0); | 593 | program_manager.UseGeometryShader(0); |