diff options
| author | 2022-12-07 00:28:35 +0100 | |
|---|---|---|
| committer | 2023-01-01 16:43:58 -0500 | |
| commit | 581a7d785bb4936c92d320f17d3d824e244eee5a (patch) | |
| tree | f378a4075f924ad9b5a775195e0b32e5ca032c7a /src/video_core/renderer_vulkan | |
| parent | RasterizerMemory: Add filtering for flushing/invalidation operations. (diff) | |
| download | yuzu-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.cpp | 28 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.h | 1 |
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 | ||
| 603 | bool 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 | |||
| 603 | bool RasterizerVulkan::AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src, | 618 | bool 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 | ||
| 1001 | void RasterizerVulkan::UpdateLogicOpEnable(Tegra::Engines::Maxwell3D::Regs& regs) { | 1017 | void 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; |