diff options
| author | 2019-12-30 00:53:53 -0300 | |
|---|---|---|
| committer | 2020-02-28 17:56:42 -0300 | |
| commit | 13afd0e5b0a5e84f2a979515185ece5b54d3fed4 (patch) | |
| tree | 5ba4ca0ea6ff81a9e82adb40978752c7aeaa18fd | |
| parent | gl_state_tracker: Implement dirty flags for rasterize enable (diff) | |
| download | yuzu-13afd0e5b0a5e84f2a979515185ece5b54d3fed4.tar.gz yuzu-13afd0e5b0a5e84f2a979515185ece5b54d3fed4.tar.xz yuzu-13afd0e5b0a5e84f2a979515185ece5b54d3fed4.zip | |
gl_state_tracker: Implement dirty flags for sRGB
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 a650113ca..47ad834aa 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -1301,8 +1301,14 @@ void RasterizerOpenGL::SyncAlphaTest() { | |||
| 1301 | } | 1301 | } |
| 1302 | 1302 | ||
| 1303 | void RasterizerOpenGL::SyncFramebufferSRGB() { | 1303 | void RasterizerOpenGL::SyncFramebufferSRGB() { |
| 1304 | const auto& regs = system.GPU().Maxwell3D().regs; | 1304 | auto& gpu = system.GPU().Maxwell3D(); |
| 1305 | oglEnable(GL_FRAMEBUFFER_SRGB, regs.framebuffer_srgb); | 1305 | auto& flags = gpu.dirty.flags; |
| 1306 | if (!flags[Dirty::FramebufferSRGB]) { | ||
| 1307 | return; | ||
| 1308 | } | ||
| 1309 | flags[Dirty::FramebufferSRGB] = false; | ||
| 1310 | |||
| 1311 | oglEnable(GL_FRAMEBUFFER_SRGB, gpu.regs.framebuffer_srgb); | ||
| 1306 | } | 1312 | } |
| 1307 | 1313 | ||
| 1308 | } // namespace OpenGL | 1314 | } // namespace OpenGL |
diff --git a/src/video_core/renderer_opengl/gl_state_tracker.cpp b/src/video_core/renderer_opengl/gl_state_tracker.cpp index ebfb1945f..a99a94aff 100644 --- a/src/video_core/renderer_opengl/gl_state_tracker.cpp +++ b/src/video_core/renderer_opengl/gl_state_tracker.cpp | |||
| @@ -193,6 +193,10 @@ void SetupDirtyRasterizeEnable(Tables& tables) { | |||
| 193 | tables[0][OFF(rasterize_enable)] = RasterizeEnable; | 193 | tables[0][OFF(rasterize_enable)] = RasterizeEnable; |
| 194 | } | 194 | } |
| 195 | 195 | ||
| 196 | void SetupDirtyFramebufferSRGB(Tables& tables) { | ||
| 197 | tables[0][OFF(framebuffer_srgb)] = FramebufferSRGB; | ||
| 198 | } | ||
| 199 | |||
| 196 | void SetupDirtyMisc(Tables& tables) { | 200 | void SetupDirtyMisc(Tables& tables) { |
| 197 | auto& table = tables[0]; | 201 | auto& table = tables[0]; |
| 198 | 202 | ||
| @@ -226,6 +230,7 @@ void StateTracker::Initialize() { | |||
| 226 | SetupDirtyPolygonOffset(tables); | 230 | SetupDirtyPolygonOffset(tables); |
| 227 | SetupDirtyMultisampleControl(tables); | 231 | SetupDirtyMultisampleControl(tables); |
| 228 | SetupDirtyRasterizeEnable(tables); | 232 | SetupDirtyRasterizeEnable(tables); |
| 233 | SetupDirtyFramebufferSRGB(tables); | ||
| 229 | SetupDirtyMisc(tables); | 234 | SetupDirtyMisc(tables); |
| 230 | 235 | ||
| 231 | auto& store = dirty.on_write_stores; | 236 | 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 73a63d31d..7cba66359 100644 --- a/src/video_core/renderer_opengl/gl_state_tracker.h +++ b/src/video_core/renderer_opengl/gl_state_tracker.h | |||
| @@ -67,6 +67,7 @@ enum : u8 { | |||
| 67 | PolygonOffset, | 67 | PolygonOffset, |
| 68 | MultisampleControl, | 68 | MultisampleControl, |
| 69 | RasterizeEnable, | 69 | RasterizeEnable, |
| 70 | FramebufferSRGB, | ||
| 70 | 71 | ||
| 71 | Last | 72 | Last |
| 72 | }; | 73 | }; |
| @@ -153,6 +154,11 @@ public: | |||
| 153 | flags[OpenGL::Dirty::RasterizeEnable] = true; | 154 | flags[OpenGL::Dirty::RasterizeEnable] = true; |
| 154 | } | 155 | } |
| 155 | 156 | ||
| 157 | void NotifyFramebufferSRGB() { | ||
| 158 | auto& flags = system.GPU().Maxwell3D().dirty.flags; | ||
| 159 | flags[OpenGL::Dirty::FramebufferSRGB] = true; | ||
| 160 | } | ||
| 161 | |||
| 156 | private: | 162 | private: |
| 157 | Core::System& system; | 163 | Core::System& system; |
| 158 | }; | 164 | }; |
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index 81ab95604..d8a2bf9eb 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp | |||
| @@ -523,6 +523,7 @@ void TextureCacheOpenGL::ImageBlit(View& src_view, View& dst_view, | |||
| 523 | state_tracker.NotifyBlend0(); | 523 | state_tracker.NotifyBlend0(); |
| 524 | state_tracker.NotifyFramebuffer(); | 524 | state_tracker.NotifyFramebuffer(); |
| 525 | state_tracker.NotifyRasterizeEnable(); | 525 | state_tracker.NotifyRasterizeEnable(); |
| 526 | state_tracker.NotifyFramebufferSRGB(); | ||
| 526 | 527 | ||
| 527 | if (dst_params.srgb_conversion) { | 528 | if (dst_params.srgb_conversion) { |
| 528 | glEnable(GL_FRAMEBUFFER_SRGB); | 529 | 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 41378978d..f8b6f98f7 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp | |||
| @@ -588,6 +588,7 @@ void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) { | |||
| 588 | state_tracker.NotifyStencilTest(); | 588 | state_tracker.NotifyStencilTest(); |
| 589 | state_tracker.NotifyPolygonOffset(); | 589 | state_tracker.NotifyPolygonOffset(); |
| 590 | state_tracker.NotifyRasterizeEnable(); | 590 | state_tracker.NotifyRasterizeEnable(); |
| 591 | state_tracker.NotifyFramebufferSRGB(); | ||
| 591 | 592 | ||
| 592 | program_manager.UseVertexShader(vertex_program.handle); | 593 | program_manager.UseVertexShader(vertex_program.handle); |
| 593 | program_manager.UseGeometryShader(0); | 594 | program_manager.UseGeometryShader(0); |