summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2019-12-30 00:22:43 -0300
committerGravatar ReinUsesLisp2020-02-28 17:56:42 -0300
commit9e46953580eab7b5b1e7b813db0284a9d2f78f27 (patch)
tree24d2afbe0569e069f680d02664819ce15b2b4fc9 /src
parentgl_state_tracker: Implement dirty flags for primitive restart (diff)
downloadyuzu-9e46953580eab7b5b1e7b813db0284a9d2f78f27.tar.gz
yuzu-9e46953580eab7b5b1e7b813db0284a9d2f78f27.tar.xz
yuzu-9e46953580eab7b5b1e7b813db0284a9d2f78f27.zip
gl_state_tracker: Implement dirty flags for polygon offsets
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp9
-rw-r--r--src/video_core/renderer_opengl/gl_state_tracker.cpp11
-rw-r--r--src/video_core/renderer_opengl/gl_state_tracker.h5
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp1
4 files changed, 24 insertions, 2 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index ebb072d91..78838b8d1 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -1249,9 +1249,14 @@ void RasterizerOpenGL::SyncPointState() {
1249} 1249}
1250 1250
1251void RasterizerOpenGL::SyncPolygonOffset() { 1251void RasterizerOpenGL::SyncPolygonOffset() {
1252 auto& maxwell3d = system.GPU().Maxwell3D(); 1252 auto& gpu = system.GPU().Maxwell3D();
1253 const auto& regs = maxwell3d.regs; 1253 auto& flags = gpu.dirty.flags;
1254 if (!flags[Dirty::PolygonOffset]) {
1255 return;
1256 }
1257 flags[Dirty::PolygonOffset] = false;
1254 1258
1259 const auto& regs = gpu.regs;
1255 oglEnable(GL_POLYGON_OFFSET_FILL, regs.polygon_offset_fill_enable); 1260 oglEnable(GL_POLYGON_OFFSET_FILL, regs.polygon_offset_fill_enable);
1256 oglEnable(GL_POLYGON_OFFSET_LINE, regs.polygon_offset_line_enable); 1261 oglEnable(GL_POLYGON_OFFSET_LINE, regs.polygon_offset_line_enable);
1257 oglEnable(GL_POLYGON_OFFSET_POINT, regs.polygon_offset_point_enable); 1262 oglEnable(GL_POLYGON_OFFSET_POINT, regs.polygon_offset_point_enable);
diff --git a/src/video_core/renderer_opengl/gl_state_tracker.cpp b/src/video_core/renderer_opengl/gl_state_tracker.cpp
index c07b7f136..7cb874ac9 100644
--- a/src/video_core/renderer_opengl/gl_state_tracker.cpp
+++ b/src/video_core/renderer_opengl/gl_state_tracker.cpp
@@ -168,6 +168,16 @@ void SetupDirtyPrimitiveRestart(Tables& tables) {
168 FillBlock(tables[0], OFF(primitive_restart), NUM(primitive_restart), PrimitiveRestart); 168 FillBlock(tables[0], OFF(primitive_restart), NUM(primitive_restart), PrimitiveRestart);
169} 169}
170 170
171void SetupDirtyPolygonOffset(Tables& tables) {
172 auto& table = tables[0];
173 table[OFF(polygon_offset_fill_enable)] = PolygonOffset;
174 table[OFF(polygon_offset_line_enable)] = PolygonOffset;
175 table[OFF(polygon_offset_point_enable)] = PolygonOffset;
176 table[OFF(polygon_offset_factor)] = PolygonOffset;
177 table[OFF(polygon_offset_units)] = PolygonOffset;
178 table[OFF(polygon_offset_clamp)] = PolygonOffset;
179}
180
171void SetupDirtyMisc(Tables& tables) { 181void SetupDirtyMisc(Tables& tables) {
172 auto& table = tables[0]; 182 auto& table = tables[0];
173 183
@@ -197,6 +207,7 @@ void StateTracker::Initialize() {
197 SetupDirtyStencilTest(tables); 207 SetupDirtyStencilTest(tables);
198 SetupDirtyBlend(tables); 208 SetupDirtyBlend(tables);
199 SetupDirtyPrimitiveRestart(tables); 209 SetupDirtyPrimitiveRestart(tables);
210 SetupDirtyPolygonOffset(tables);
200 SetupDirtyMisc(tables); 211 SetupDirtyMisc(tables);
201 212
202 auto& store = dirty.on_write_stores; 213 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 af50b1a29..20c63595c 100644
--- a/src/video_core/renderer_opengl/gl_state_tracker.h
+++ b/src/video_core/renderer_opengl/gl_state_tracker.h
@@ -140,6 +140,11 @@ public:
140 flags[OpenGL::Dirty::StencilTest] = true; 140 flags[OpenGL::Dirty::StencilTest] = true;
141 } 141 }
142 142
143 void NotifyPolygonOffset() {
144 auto& flags = system.GPU().Maxwell3D().dirty.flags;
145 flags[OpenGL::Dirty::PolygonOffset] = true;
146 }
147
143private: 148private:
144 Core::System& system; 149 Core::System& system;
145}; 150};
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp
index 2449e28ac..630406044 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp
@@ -586,6 +586,7 @@ void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) {
586 state_tracker.NotifyCullTest(); 586 state_tracker.NotifyCullTest();
587 state_tracker.NotifyDepthTest(); 587 state_tracker.NotifyDepthTest();
588 state_tracker.NotifyStencilTest(); 588 state_tracker.NotifyStencilTest();
589 state_tracker.NotifyPolygonOffset();
589 590
590 program_manager.UseVertexShader(vertex_program.handle); 591 program_manager.UseVertexShader(vertex_program.handle);
591 program_manager.UseGeometryShader(0); 592 program_manager.UseGeometryShader(0);