diff options
-rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 3 | ||||
-rw-r--r-- | src/video_core/renderer_vulkan/vk_state_tracker.cpp | 6 | ||||
-rw-r--r-- | src/video_core/renderer_vulkan/vk_state_tracker.h | 5 |
3 files changed, 14 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 958f90f99..7029b3d5e 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -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); }); diff --git a/src/video_core/renderer_vulkan/vk_state_tracker.cpp b/src/video_core/renderer_vulkan/vk_state_tracker.cpp index c7e54c68b..b55180dd8 100644 --- a/src/video_core/renderer_vulkan/vk_state_tracker.cpp +++ b/src/video_core/renderer_vulkan/vk_state_tracker.cpp @@ -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; diff --git a/src/video_core/renderer_vulkan/vk_state_tracker.h b/src/video_core/renderer_vulkan/vk_state_tracker.h index a0493813a..25b5c647b 100644 --- a/src/video_core/renderer_vulkan/vk_state_tracker.h +++ b/src/video_core/renderer_vulkan/vk_state_tracker.h @@ -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)>; |