gl_state_tracker: Implement dirty flags for fragment color clamp
This commit is contained in:
		| @@ -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() { | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
| @@ -69,6 +69,7 @@ enum : u8 { | ||||
|     RasterizeEnable, | ||||
|     FramebufferSRGB, | ||||
|     LogicOp, | ||||
|     FragmentClampColor, | ||||
|  | ||||
|     Last | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user