summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorAmeer J <52414509+ameerj@users.noreply.github.com>2021-10-24 00:02:23 +0200
committerGitHub <noreply@github.com>2021-10-24 00:02:23 +0200
commit494e34af6a247ebe18baaa237d6aab547feb3fba (patch)
tree60c61302d9ffc00b398ce6fbb53b7b74bbe17d51 /src/video_core/renderer_vulkan
parentMerge pull request #7217 from yuzu-emu/revert-6515-gc_thread_safe (diff)
parentVulran Rasterizer: address feedback. (diff)
downloadyuzu-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.cpp16
-rw-r--r--src/video_core/renderer_vulkan/vk_state_tracker.h3
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() {