vk_state_tracker: Implement dirty flags for depth bounds
This commit is contained in:
		| @@ -1037,6 +1037,9 @@ void RasterizerVulkan::UpdateBlendConstants(Tegra::Engines::Maxwell3D& gpu) { | ||||
| } | ||||
|  | ||||
| void RasterizerVulkan::UpdateDepthBounds(Tegra::Engines::Maxwell3D& gpu) { | ||||
|     if (!state_tracker.TouchDepthBounds()) { | ||||
|         return; | ||||
|     } | ||||
|     const auto& regs = gpu.regs; | ||||
|     scheduler.Record([min = regs.depth_bounds[0], max = regs.depth_bounds[1]]( | ||||
|                          auto cmdbuf, auto& dld) { cmdbuf.setDepthBounds(min, max, dld); }); | ||||
|   | ||||
| @@ -32,6 +32,7 @@ Flags MakeInvalidationFlags() { | ||||
|     flags[Scissors] = true; | ||||
|     flags[DepthBias] = true; | ||||
|     flags[BlendConstants] = true; | ||||
|     flags[DepthBounds] = true; | ||||
|     return flags; | ||||
| } | ||||
|  | ||||
| @@ -89,6 +90,10 @@ void SetupDirtyBlendConstants(Tables& tables) { | ||||
|     FillBlock(tables[0], OFF(blend_color), NUM(blend_color), BlendConstants); | ||||
| } | ||||
|  | ||||
| void SetupDirtyDepthBounds(Tables& tables) { | ||||
|     FillBlock(tables[0], OFF(depth_bounds), NUM(depth_bounds), DepthBounds); | ||||
| } | ||||
|  | ||||
| } // Anonymous namespace | ||||
|  | ||||
| StateTracker::StateTracker(Core::System& system) | ||||
| @@ -102,6 +107,7 @@ void StateTracker::Initialize() { | ||||
|     SetupDirtyScissors(tables); | ||||
|     SetupDirtyDepthBias(tables); | ||||
|     SetupDirtyBlendConstants(tables); | ||||
|     SetupDirtyDepthBounds(tables); | ||||
|  | ||||
|     auto& store = dirty.on_write_stores; | ||||
|     store[RenderTargets] = true; | ||||
|   | ||||
| @@ -23,6 +23,7 @@ enum : u8 { | ||||
|     Scissors, | ||||
|     DepthBias, | ||||
|     BlendConstants, | ||||
|     DepthBounds, | ||||
| }; | ||||
|  | ||||
| } // namespace Dirty | ||||
| @@ -51,6 +52,10 @@ public: | ||||
|         return Exchange(Dirty::BlendConstants, false); | ||||
|     } | ||||
|  | ||||
|     bool TouchDepthBounds() { | ||||
|         return Exchange(Dirty::DepthBounds, false); | ||||
|     } | ||||
|  | ||||
| private: | ||||
|     using Flags = std::remove_reference_t<decltype(Tegra::Engines::Maxwell3D::dirty.flags)>; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user