summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp15
-rw-r--r--src/video_core/renderer_opengl/gl_state_tracker.cpp5
-rw-r--r--src/video_core/renderer_opengl/gl_state_tracker.h4
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
1019void RasterizerOpenGL::SyncPrimitiveRestart() { 1019void 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
1026void RasterizerOpenGL::SyncDepthTestState() { 1035void 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
167void SetupDirtyPrimitiveRestart(Tables& tables) {
168 FillBlock(tables[0], OFF(primitive_restart), NUM(primitive_restart), PrimitiveRestart);
169}
170
167void SetupDirtyMisc(Tables& tables) { 171void 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