gl_state_tracker: Implement dirty flags for depth clamp enabling
This commit is contained in:
		| @@ -493,6 +493,7 @@ void RasterizerOpenGL::Draw(bool is_indexed, bool is_instanced) { | ||||
|     SyncFragmentColorClampState(); | ||||
|     SyncMultiSampleState(); | ||||
|     SyncDepthTestState(); | ||||
|     SyncDepthClamp(); | ||||
|     SyncStencilTestState(); | ||||
|     SyncBlendState(); | ||||
|     SyncLogicOpState(); | ||||
| @@ -967,11 +968,16 @@ void RasterizerOpenGL::SyncViewport() { | ||||
| } | ||||
|  | ||||
| void RasterizerOpenGL::SyncDepthClamp() { | ||||
|     const auto& regs = system.GPU().Maxwell3D().regs; | ||||
|     const auto& state = regs.view_volume_clip_control; | ||||
|     auto& gpu = system.GPU().Maxwell3D(); | ||||
|     auto& flags = gpu.dirty.flags; | ||||
|     if (!flags[Dirty::DepthClampEnabled]) { | ||||
|         return; | ||||
|     } | ||||
|     flags[Dirty::DepthClampEnabled] = false; | ||||
|  | ||||
|     const auto& state = gpu.regs.view_volume_clip_control; | ||||
|     UNIMPLEMENTED_IF_MSG(state.depth_clamp_far != state.depth_clamp_near, | ||||
|                          "Unimplemented Depth clamp separation!"); | ||||
|                          "Unimplemented depth clamp separation!"); | ||||
|  | ||||
|     oglEnable(GL_DEPTH_CLAMP, state.depth_clamp_far || state.depth_clamp_near); | ||||
| } | ||||
|   | ||||
| @@ -217,6 +217,10 @@ void SetupDirtyClipControl(Tables& tables) { | ||||
|     table[OFF(depth_mode)] = ClipControl; | ||||
| } | ||||
|  | ||||
| void SetupDirtyDepthClampEnabled(Tables& tables) { | ||||
|     tables[0][OFF(view_volume_clip_control)] = DepthClampEnabled; | ||||
| } | ||||
|  | ||||
| void SetupDirtyMisc(Tables& tables) { | ||||
|     auto& table = tables[0]; | ||||
|  | ||||
| @@ -255,6 +259,7 @@ void StateTracker::Initialize() { | ||||
|     SetupDirtyFragmentClampColor(tables); | ||||
|     SetupDirtyPointSize(tables); | ||||
|     SetupDirtyClipControl(tables); | ||||
|     SetupDirtyDepthClampEnabled(tables); | ||||
|     SetupDirtyMisc(tables); | ||||
|  | ||||
|     auto& store = dirty.on_write_stores; | ||||
|   | ||||
| @@ -75,6 +75,7 @@ enum : u8 { | ||||
|     FragmentClampColor, | ||||
|     PointSize, | ||||
|     ClipControl, | ||||
|     DepthClampEnabled, | ||||
|  | ||||
|     Last | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user