From 231601763c4717f8d7978341994a479e4283fa3d Mon Sep 17 00:00:00 2001 From: ReinUsesLisp Date: Mon, 30 Dec 2019 01:20:08 -0300 Subject: gl_state_tracker: Implement dirty flags for fragment color clamp --- src/video_core/renderer_opengl/gl_rasterizer.cpp | 10 ++++++++-- src/video_core/renderer_opengl/gl_state_tracker.cpp | 5 +++++ src/video_core/renderer_opengl/gl_state_tracker.h | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) (limited to 'src/video_core') diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 4cb050da6..7ffb8fa09 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -1149,8 +1149,14 @@ void RasterizerOpenGL::SyncMultiSampleState() { } void RasterizerOpenGL::SyncFragmentColorClampState() { - const auto& regs = system.GPU().Maxwell3D().regs; - glClampColor(GL_CLAMP_FRAGMENT_COLOR, regs.frag_color_clamp ? GL_TRUE : GL_FALSE); + auto& gpu = system.GPU().Maxwell3D(); + auto& flags = gpu.dirty.flags; + if (!flags[Dirty::FragmentClampColor]) { + return; + } + flags[Dirty::FragmentClampColor] = false; + + glClampColor(GL_CLAMP_FRAGMENT_COLOR, gpu.regs.frag_color_clamp ? GL_TRUE : GL_FALSE); } void RasterizerOpenGL::SyncBlendState() { diff --git a/src/video_core/renderer_opengl/gl_state_tracker.cpp b/src/video_core/renderer_opengl/gl_state_tracker.cpp index d6ad25ee9..538ab97e0 100644 --- a/src/video_core/renderer_opengl/gl_state_tracker.cpp +++ b/src/video_core/renderer_opengl/gl_state_tracker.cpp @@ -201,6 +201,10 @@ void SetupDirtyLogicOp(Tables& tables) { FillBlock(tables[0], OFF(logic_op), NUM(logic_op), LogicOp); } +void SetupDirtyFragmentClampColor(Tables& tables) { + tables[0][OFF(frag_color_clamp)] = FragmentClampColor; +} + void SetupDirtyMisc(Tables& tables) { auto& table = tables[0]; @@ -236,6 +240,7 @@ void StateTracker::Initialize() { SetupDirtyRasterizeEnable(tables); SetupDirtyFramebufferSRGB(tables); SetupDirtyLogicOp(tables); + SetupDirtyFragmentClampColor(tables); SetupDirtyMisc(tables); 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 9901d2b0d..db92a2e5c 100644 --- a/src/video_core/renderer_opengl/gl_state_tracker.h +++ b/src/video_core/renderer_opengl/gl_state_tracker.h @@ -69,6 +69,7 @@ enum : u8 { RasterizeEnable, FramebufferSRGB, LogicOp, + FragmentClampColor, Last }; -- cgit v1.2.3