diff options
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 15 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state_tracker.cpp | 5 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state_tracker.h | 4 |
3 files changed, 19 insertions, 5 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index bc4542b69..ebb072d91 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -1017,10 +1017,19 @@ void RasterizerOpenGL::SyncCullMode() { | |||
| 1017 | } | 1017 | } |
| 1018 | 1018 | ||
| 1019 | void RasterizerOpenGL::SyncPrimitiveRestart() { | 1019 | void RasterizerOpenGL::SyncPrimitiveRestart() { |
| 1020 | const auto& regs = system.GPU().Maxwell3D().regs; | 1020 | auto& gpu = system.GPU().Maxwell3D(); |
| 1021 | auto& flags = gpu.dirty.flags; | ||
| 1022 | if (!flags[Dirty::PrimitiveRestart]) { | ||
| 1023 | return; | ||
| 1024 | } | ||
| 1025 | flags[Dirty::PrimitiveRestart] = false; | ||
| 1021 | 1026 | ||
| 1022 | oglEnable(GL_PRIMITIVE_RESTART, regs.primitive_restart.enabled); | 1027 | if (gpu.regs.primitive_restart.enabled) { |
| 1023 | glPrimitiveRestartIndex(regs.primitive_restart.index); | 1028 | glEnable(GL_PRIMITIVE_RESTART); |
| 1029 | glPrimitiveRestartIndex(gpu.regs.primitive_restart.index); | ||
| 1030 | } else { | ||
| 1031 | glDisable(GL_PRIMITIVE_RESTART); | ||
| 1032 | } | ||
| 1024 | } | 1033 | } |
| 1025 | 1034 | ||
| 1026 | void RasterizerOpenGL::SyncDepthTestState() { | 1035 | void RasterizerOpenGL::SyncDepthTestState() { |
diff --git a/src/video_core/renderer_opengl/gl_state_tracker.cpp b/src/video_core/renderer_opengl/gl_state_tracker.cpp index eae47827b..c07b7f136 100644 --- a/src/video_core/renderer_opengl/gl_state_tracker.cpp +++ b/src/video_core/renderer_opengl/gl_state_tracker.cpp | |||
| @@ -164,6 +164,10 @@ void SetupDirtyBlend(Tables& tables) { | |||
| 164 | FillBlock(tables[1], OFF(blend), NUM(blend), BlendStates); | 164 | FillBlock(tables[1], OFF(blend), NUM(blend), BlendStates); |
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | void SetupDirtyPrimitiveRestart(Tables& tables) { | ||
| 168 | FillBlock(tables[0], OFF(primitive_restart), NUM(primitive_restart), PrimitiveRestart); | ||
| 169 | } | ||
| 170 | |||
| 167 | void SetupDirtyMisc(Tables& tables) { | 171 | void SetupDirtyMisc(Tables& tables) { |
| 168 | auto& table = tables[0]; | 172 | auto& table = tables[0]; |
| 169 | 173 | ||
| @@ -192,6 +196,7 @@ void StateTracker::Initialize() { | |||
| 192 | SetupDirtyDepthTest(tables); | 196 | SetupDirtyDepthTest(tables); |
| 193 | SetupDirtyStencilTest(tables); | 197 | SetupDirtyStencilTest(tables); |
| 194 | SetupDirtyBlend(tables); | 198 | SetupDirtyBlend(tables); |
| 199 | SetupDirtyPrimitiveRestart(tables); | ||
| 195 | SetupDirtyMisc(tables); | 200 | SetupDirtyMisc(tables); |
| 196 | 201 | ||
| 197 | auto& store = dirty.on_write_stores; | 202 | 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 2eaec2a0d..af50b1a29 100644 --- a/src/video_core/renderer_opengl/gl_state_tracker.h +++ b/src/video_core/renderer_opengl/gl_state_tracker.h | |||
| @@ -56,13 +56,13 @@ enum : u8 { | |||
| 56 | Shaders, | 56 | Shaders, |
| 57 | ClipDistances, | 57 | ClipDistances, |
| 58 | 58 | ||
| 59 | ColorMask, | ||
| 59 | FrontFace, | 60 | FrontFace, |
| 60 | CullTest, | 61 | CullTest, |
| 61 | DepthMask, | 62 | DepthMask, |
| 62 | DepthTest, | 63 | DepthTest, |
| 63 | PrimitiveRestart, | ||
| 64 | StencilTest, | 64 | StencilTest, |
| 65 | ColorMask, | 65 | PrimitiveRestart, |
| 66 | PolygonOffset, | 66 | PolygonOffset, |
| 67 | 67 | ||
| 68 | Last | 68 | Last |