diff options
author | Ameer J <52414509+ameerj@users.noreply.github.com> | 2021-10-24 00:02:23 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-24 00:02:23 +0200 |
commit | 494e34af6a247ebe18baaa237d6aab547feb3fba (patch) | |
tree | 60c61302d9ffc00b398ce6fbb53b7b74bbe17d51 /src/video_core/renderer_vulkan | |
parent | Merge pull request #7217 from yuzu-emu/revert-6515-gc_thread_safe (diff) | |
parent | Vulran Rasterizer: address feedback. (diff) | |
download | yuzu-494e34af6a247ebe18baaa237d6aab547feb3fba.tar yuzu-494e34af6a247ebe18baaa237d6aab547feb3fba.tar.gz yuzu-494e34af6a247ebe18baaa237d6aab547feb3fba.tar.bz2 yuzu-494e34af6a247ebe18baaa237d6aab547feb3fba.tar.lz yuzu-494e34af6a247ebe18baaa237d6aab547feb3fba.tar.xz yuzu-494e34af6a247ebe18baaa237d6aab547feb3fba.tar.zst yuzu-494e34af6a247ebe18baaa237d6aab547feb3fba.zip |
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 16 | ||||
-rw-r--r-- | src/video_core/renderer_vulkan/vk_state_tracker.h | 3 |
2 files changed, 16 insertions, 3 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 3bcd6d6cc..30b47a7a0 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -627,9 +627,21 @@ void RasterizerVulkan::UpdateDepthBias(Tegra::Engines::Maxwell3D::Regs& regs) { if (!state_tracker.TouchDepthBias()) { return; } - scheduler.Record([constant = regs.polygon_offset_units, clamp = regs.polygon_offset_clamp, + float units = regs.polygon_offset_units / 2.0f; + const bool is_d24 = regs.zeta.format == Tegra::DepthFormat::S8_UINT_Z24_UNORM || + regs.zeta.format == Tegra::DepthFormat::D24X8_UNORM || + regs.zeta.format == Tegra::DepthFormat::D24S8_UNORM || + regs.zeta.format == Tegra::DepthFormat::D24C8_UNORM; + if (is_d24 && !device.SupportsD24DepthBuffer()) { + // the base formulas can be obtained from here: + // https://docs.microsoft.com/en-us/windows/win32/direct3d11/d3d10-graphics-programming-guide-output-merger-stage-depth-bias + const double rescale_factor = + static_cast<double>(1ULL << (32 - 24)) / (static_cast<double>(0x1.ep+127)); + units = static_cast<float>(static_cast<double>(units) * rescale_factor); + } + scheduler.Record([constant = units, clamp = regs.polygon_offset_clamp, factor = regs.polygon_offset_factor](vk::CommandBuffer cmdbuf) { - cmdbuf.SetDepthBias(constant, clamp, factor / 2.0f); + cmdbuf.SetDepthBias(constant, clamp, factor); }); } diff --git a/src/video_core/renderer_vulkan/vk_state_tracker.h b/src/video_core/renderer_vulkan/vk_state_tracker.h index d90935f52..2f2d6b31f 100644 --- a/src/video_core/renderer_vulkan/vk_state_tracker.h +++ b/src/video_core/renderer_vulkan/vk_state_tracker.h @@ -79,7 +79,8 @@ public: } bool TouchDepthBias() { - return Exchange(Dirty::DepthBias, false); + return Exchange(Dirty::DepthBias, false) || + Exchange(VideoCommon::Dirty::DepthBiasGlobal, false); } bool TouchBlendConstants() { |