summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2019-12-30 00:49:19 -0300
committerGravatar ReinUsesLisp2020-02-28 17:56:42 -0300
commitd8f5c450516c3956b422f0487293ea02620a3518 (patch)
tree06c933a0abd3679f73cbc869529952c86e71a0cc /src
parentgl_state_tracker: Implement dirty flags for multisample (diff)
downloadyuzu-d8f5c450516c3956b422f0487293ea02620a3518.tar.gz
yuzu-d8f5c450516c3956b422f0487293ea02620a3518.tar.xz
yuzu-d8f5c450516c3956b422f0487293ea02620a3518.zip
gl_state_tracker: Implement dirty flags for rasterize enable
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp10
-rw-r--r--src/video_core/renderer_opengl/gl_state_tracker.cpp5
-rw-r--r--src/video_core/renderer_opengl/gl_state_tracker.h6
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp1
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp1
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
1092void RasterizerOpenGL::SyncRasterizeEnable() { 1092void 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
1097void RasterizerOpenGL::SyncColorMask() { 1103void 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
192void SetupDirtyRasterizeEnable(Tables& tables) {
193 tables[0][OFF(rasterize_enable)] = RasterizeEnable;
194}
195
192void SetupDirtyMisc(Tables& tables) { 196void 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
150private: 156private:
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);