diff options
| author | 2020-02-20 22:19:57 -0300 | |
|---|---|---|
| committer | 2020-02-28 17:56:43 -0300 | |
| commit | 42f18749658bb4f3ce2e6be7677596d41ac8cd6c (patch) | |
| tree | 6bfc16e7f768e1d0d2462104bf61bb8e52278ea4 /src | |
| parent | vk_state_tracker: Initial implementation (diff) | |
| download | yuzu-42f18749658bb4f3ce2e6be7677596d41ac8cd6c.tar.gz yuzu-42f18749658bb4f3ce2e6be7677596d41ac8cd6c.tar.xz yuzu-42f18749658bb4f3ce2e6be7677596d41ac8cd6c.zip | |
vk_state_tracker: Implement dirty flags for scissors
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_state_tracker.cpp | 6 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_state_tracker.h | 5 |
3 files changed, 14 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 41cbf4134..207ef0f0d 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp | |||
| @@ -998,6 +998,9 @@ void RasterizerVulkan::UpdateViewportsState(Tegra::Engines::Maxwell3D& gpu) { | |||
| 998 | } | 998 | } |
| 999 | 999 | ||
| 1000 | void RasterizerVulkan::UpdateScissorsState(Tegra::Engines::Maxwell3D& gpu) { | 1000 | void RasterizerVulkan::UpdateScissorsState(Tegra::Engines::Maxwell3D& gpu) { |
| 1001 | if (!state_tracker.TouchScissors()) { | ||
| 1002 | return; | ||
| 1003 | } | ||
| 1001 | const auto& regs = gpu.regs; | 1004 | const auto& regs = gpu.regs; |
| 1002 | const std::array scissors = { | 1005 | const std::array scissors = { |
| 1003 | GetScissorState(regs, 0), GetScissorState(regs, 1), GetScissorState(regs, 2), | 1006 | GetScissorState(regs, 0), GetScissorState(regs, 1), GetScissorState(regs, 2), |
diff --git a/src/video_core/renderer_vulkan/vk_state_tracker.cpp b/src/video_core/renderer_vulkan/vk_state_tracker.cpp index d44992dc9..0e00a9079 100644 --- a/src/video_core/renderer_vulkan/vk_state_tracker.cpp +++ b/src/video_core/renderer_vulkan/vk_state_tracker.cpp | |||
| @@ -29,6 +29,7 @@ using Flags = std::remove_reference_t<decltype(Maxwell3D::dirty.flags)>; | |||
| 29 | Flags MakeInvalidationFlags() { | 29 | Flags MakeInvalidationFlags() { |
| 30 | Flags flags{}; | 30 | Flags flags{}; |
| 31 | flags[Viewports] = true; | 31 | flags[Viewports] = true; |
| 32 | flags[Scissors] = true; | ||
| 32 | return flags; | 33 | return flags; |
| 33 | } | 34 | } |
| 34 | 35 | ||
| @@ -71,6 +72,10 @@ void SetupDirtyViewports(Tables& tables) { | |||
| 71 | tables[0][OFF(viewport_transform_enabled)] = Viewports; | 72 | tables[0][OFF(viewport_transform_enabled)] = Viewports; |
| 72 | } | 73 | } |
| 73 | 74 | ||
| 75 | void SetupDirtyScissors(Tables& tables) { | ||
| 76 | FillBlock(tables[0], OFF(scissor_test), NUM(scissor_test), Scissors); | ||
| 77 | } | ||
| 78 | |||
| 74 | } // Anonymous namespace | 79 | } // Anonymous namespace |
| 75 | 80 | ||
| 76 | StateTracker::StateTracker(Core::System& system) | 81 | StateTracker::StateTracker(Core::System& system) |
| @@ -81,6 +86,7 @@ void StateTracker::Initialize() { | |||
| 81 | auto& tables = dirty.tables; | 86 | auto& tables = dirty.tables; |
| 82 | SetupDirtyRenderTargets(tables); | 87 | SetupDirtyRenderTargets(tables); |
| 83 | SetupDirtyViewports(tables); | 88 | SetupDirtyViewports(tables); |
| 89 | SetupDirtyScissors(tables); | ||
| 84 | 90 | ||
| 85 | auto& store = dirty.on_write_stores; | 91 | auto& store = dirty.on_write_stores; |
| 86 | store[RenderTargets] = true; | 92 | store[RenderTargets] = true; |
diff --git a/src/video_core/renderer_vulkan/vk_state_tracker.h b/src/video_core/renderer_vulkan/vk_state_tracker.h index 9ec7b5136..ba8f3a854 100644 --- a/src/video_core/renderer_vulkan/vk_state_tracker.h +++ b/src/video_core/renderer_vulkan/vk_state_tracker.h | |||
| @@ -20,6 +20,7 @@ enum : u8 { | |||
| 20 | First = VideoCommon::Dirty::LastCommonEntry, | 20 | First = VideoCommon::Dirty::LastCommonEntry, |
| 21 | 21 | ||
| 22 | Viewports, | 22 | Viewports, |
| 23 | Scissors, | ||
| 23 | }; | 24 | }; |
| 24 | 25 | ||
| 25 | } // namespace Dirty | 26 | } // namespace Dirty |
| @@ -36,6 +37,10 @@ public: | |||
| 36 | return Exchange(Dirty::Viewports, false); | 37 | return Exchange(Dirty::Viewports, false); |
| 37 | } | 38 | } |
| 38 | 39 | ||
| 40 | bool TouchScissors() { | ||
| 41 | return Exchange(Dirty::Scissors, false); | ||
| 42 | } | ||
| 43 | |||
| 39 | private: | 44 | private: |
| 40 | using Flags = std::remove_reference_t<decltype(Tegra::Engines::Maxwell3D::dirty.flags)>; | 45 | using Flags = std::remove_reference_t<decltype(Tegra::Engines::Maxwell3D::dirty.flags)>; |
| 41 | 46 | ||