summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2020-02-20 22:19:57 -0300
committerGravatar ReinUsesLisp2020-02-28 17:56:43 -0300
commit42f18749658bb4f3ce2e6be7677596d41ac8cd6c (patch)
tree6bfc16e7f768e1d0d2462104bf61bb8e52278ea4 /src
parentvk_state_tracker: Initial implementation (diff)
downloadyuzu-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.cpp3
-rw-r--r--src/video_core/renderer_vulkan/vk_state_tracker.cpp6
-rw-r--r--src/video_core/renderer_vulkan/vk_state_tracker.h5
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
1000void RasterizerVulkan::UpdateScissorsState(Tegra::Engines::Maxwell3D& gpu) { 1000void 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)>;
29Flags MakeInvalidationFlags() { 29Flags 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
75void SetupDirtyScissors(Tables& tables) {
76 FillBlock(tables[0], OFF(scissor_test), NUM(scissor_test), Scissors);
77}
78
74} // Anonymous namespace 79} // Anonymous namespace
75 80
76StateTracker::StateTracker(Core::System& system) 81StateTracker::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
39private: 44private:
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