From d6f69e14dc555cd410fa69d88ffbe9953cb33f16 Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Sat, 26 Sep 2026 14:59:01 -0400 Subject: [PATCH] experiment with depth ranges --- src/video_core/renderer_vulkan/vk_rasterizer.cpp | 10 +++++++++- src/video_core/renderer_vulkan/vk_rasterizer.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 37b8774f18..ec30f2fa84 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -1299,10 +1299,18 @@ void RasterizerVulkan::UpdateScissorsState(Tegra::Engines::Maxwell3D::Regs& regs } void RasterizerVulkan::UpdateDepthBias(Tegra::Engines::Maxwell3D::Regs& regs) { - if (!state_tracker.TouchDepthBias()) { + const bool zeta_changed = + std::exchange(depth_bias_zeta_format, regs.zeta.format) != regs.zeta.format; + const bool bias_changed = state_tracker.TouchDepthBias(); + if (!bias_changed && !zeta_changed) { return; } float units = regs.depth_bias / 2.0f; + const bool is_float = regs.zeta.format == Tegra::DepthFormat::Z32_FLOAT || + regs.zeta.format == Tegra::DepthFormat::Z32_FLOAT_X24S8_UINT; + if (is_float && !device.IsExtDepthBiasControlSupported()) { + units *= 256.0f; + } const bool is_d24 = regs.zeta.format == Tegra::DepthFormat::Z24_UNORM_S8_UINT || regs.zeta.format == Tegra::DepthFormat::X8Z24_UNORM || regs.zeta.format == Tegra::DepthFormat::S8Z24_UNORM || diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h index 2c45c6c081..e1f14cdbf3 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.h +++ b/src/video_core/renderer_vulkan/vk_rasterizer.h @@ -225,6 +225,7 @@ private: boost::container::static_vector sampler_handles; u32 draw_counter = 0; + Tegra::DepthFormat depth_bias_zeta_format{}; }; } // namespace Vulkan