summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2022-12-07 00:28:35 +0100
committerGravatar Fernando Sahmkow2023-01-01 16:43:58 -0500
commit581a7d785bb4936c92d320f17d3d824e244eee5a (patch)
treef378a4075f924ad9b5a775195e0b32e5ca032c7a /src/video_core/renderer_vulkan
parentRasterizerMemory: Add filtering for flushing/invalidation operations. (diff)
downloadyuzu-581a7d785bb4936c92d320f17d3d824e244eee5a.tar.gz
yuzu-581a7d785bb4936c92d320f17d3d824e244eee5a.tar.xz
yuzu-581a7d785bb4936c92d320f17d3d824e244eee5a.zip
Rasterizer: Setup skeleton for Host Conditional rendering
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp28
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.h1
2 files changed, 23 insertions, 6 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index 463c49f9c..3ab2defa2 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -600,6 +600,21 @@ void RasterizerVulkan::TickFrame() {
600 } 600 }
601} 601}
602 602
603bool RasterizerVulkan::AccelerateConditionalRendering() {
604 if (Settings::IsGPULevelHigh()) {
605 // TODO(Blinkhawk): Reimplement Host conditional rendering.
606 return false;
607 }
608 // Medium / Low Hack: stub any checks on queries writen into the buffer cache.
609 const GPUVAddr condition_address{maxwell3d->regs.render_enable.Address()};
610 Maxwell::ReportSemaphore::Compare cmp;
611 if (gpu_memory->IsMemoryDirty(condition_address, sizeof(cmp),
612 VideoCommon::CacheType::BufferCache)) {
613 return true;
614 }
615 return false;
616}
617
603bool RasterizerVulkan::AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src, 618bool RasterizerVulkan::AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src,
604 const Tegra::Engines::Fermi2D::Surface& dst, 619 const Tegra::Engines::Fermi2D::Surface& dst,
605 const Tegra::Engines::Fermi2D::Config& copy_config) { 620 const Tegra::Engines::Fermi2D::Config& copy_config) {
@@ -995,7 +1010,8 @@ void RasterizerVulkan::UpdateDepthBiasEnable(Tegra::Engines::Maxwell3D::Regs& re
995 }; 1010 };
996 const u32 topology_index = static_cast<u32>(maxwell3d->draw_manager->GetDrawState().topology); 1011 const u32 topology_index = static_cast<u32>(maxwell3d->draw_manager->GetDrawState().topology);
997 const u32 enable = enabled_lut[POLYGON_OFFSET_ENABLE_LUT[topology_index]]; 1012 const u32 enable = enabled_lut[POLYGON_OFFSET_ENABLE_LUT[topology_index]];
998 scheduler.Record([enable](vk::CommandBuffer cmdbuf) { cmdbuf.SetDepthBiasEnableEXT(enable != 0); }); 1013 scheduler.Record(
1014 [enable](vk::CommandBuffer cmdbuf) { cmdbuf.SetDepthBiasEnableEXT(enable != 0); });
999} 1015}
1000 1016
1001void RasterizerVulkan::UpdateLogicOpEnable(Tegra::Engines::Maxwell3D::Regs& regs) { 1017void RasterizerVulkan::UpdateLogicOpEnable(Tegra::Engines::Maxwell3D::Regs& regs) {
@@ -1012,11 +1028,11 @@ void RasterizerVulkan::UpdateDepthClampEnable(Tegra::Engines::Maxwell3D::Regs& r
1012 return; 1028 return;
1013 } 1029 }
1014 bool is_enabled = !(regs.viewport_clip_control.geometry_clip == 1030 bool is_enabled = !(regs.viewport_clip_control.geometry_clip ==
1015 Maxwell::ViewportClipControl::GeometryClip::Passthrough || 1031 Maxwell::ViewportClipControl::GeometryClip::Passthrough ||
1016 regs.viewport_clip_control.geometry_clip == 1032 regs.viewport_clip_control.geometry_clip ==
1017 Maxwell::ViewportClipControl::GeometryClip::FrustumXYZ || 1033 Maxwell::ViewportClipControl::GeometryClip::FrustumXYZ ||
1018 regs.viewport_clip_control.geometry_clip == 1034 regs.viewport_clip_control.geometry_clip ==
1019 Maxwell::ViewportClipControl::GeometryClip::FrustumZ); 1035 Maxwell::ViewportClipControl::GeometryClip::FrustumZ);
1020 scheduler.Record( 1036 scheduler.Record(
1021 [is_enabled](vk::CommandBuffer cmdbuf) { cmdbuf.SetDepthClampEnableEXT(is_enabled); }); 1037 [is_enabled](vk::CommandBuffer cmdbuf) { cmdbuf.SetDepthClampEnableEXT(is_enabled); });
1022} 1038}
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h
index 82b28a54a..c06182807 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.h
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.h
@@ -96,6 +96,7 @@ public:
96 void TiledCacheBarrier() override; 96 void TiledCacheBarrier() override;
97 void FlushCommands() override; 97 void FlushCommands() override;
98 void TickFrame() override; 98 void TickFrame() override;
99 bool AccelerateConditionalRendering() override;
99 bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src, 100 bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src,
100 const Tegra::Engines::Fermi2D::Surface& dst, 101 const Tegra::Engines::Fermi2D::Surface& dst,
101 const Tegra::Engines::Fermi2D::Config& copy_config) override; 102 const Tegra::Engines::Fermi2D::Config& copy_config) override;