summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2020-02-21 00:37:29 -0300
committerGravatar ReinUsesLisp2020-02-28 17:56:43 -0300
commitcd0e28c9ecb2ecd4579ad9abb8899255f60334da (patch)
tree1e8182da026f075b66b5047d1bb89076e3e317b2 /src
parentvk_state_tracker: Implement dirty flags for depth bias (diff)
downloadyuzu-cd0e28c9ecb2ecd4579ad9abb8899255f60334da.tar.gz
yuzu-cd0e28c9ecb2ecd4579ad9abb8899255f60334da.tar.xz
yuzu-cd0e28c9ecb2ecd4579ad9abb8899255f60334da.zip
vk_state_tracker: Implement dirty flags for blend constants
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 be2c4d149..958f90f99 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -1026,6 +1026,9 @@ void RasterizerVulkan::UpdateDepthBias(Tegra::Engines::Maxwell3D& gpu) {
1026} 1026}
1027 1027
1028void RasterizerVulkan::UpdateBlendConstants(Tegra::Engines::Maxwell3D& gpu) { 1028void RasterizerVulkan::UpdateBlendConstants(Tegra::Engines::Maxwell3D& gpu) {
1029 if (!state_tracker.TouchBlendConstants()) {
1030 return;
1031 }
1029 const std::array blend_color = {gpu.regs.blend_color.r, gpu.regs.blend_color.g, 1032 const std::array blend_color = {gpu.regs.blend_color.r, gpu.regs.blend_color.g,
1030 gpu.regs.blend_color.b, gpu.regs.blend_color.a}; 1033 gpu.regs.blend_color.b, gpu.regs.blend_color.a};
1031 scheduler.Record([blend_color](auto cmdbuf, auto& dld) { 1034 scheduler.Record([blend_color](auto cmdbuf, auto& dld) {
diff --git a/src/video_core/renderer_vulkan/vk_state_tracker.cpp b/src/video_core/renderer_vulkan/vk_state_tracker.cpp
index c75caaa56..c7e54c68b 100644
--- a/src/video_core/renderer_vulkan/vk_state_tracker.cpp
+++ b/src/video_core/renderer_vulkan/vk_state_tracker.cpp
@@ -31,6 +31,7 @@ Flags MakeInvalidationFlags() {
31 flags[Viewports] = true; 31 flags[Viewports] = true;
32 flags[Scissors] = true; 32 flags[Scissors] = true;
33 flags[DepthBias] = true; 33 flags[DepthBias] = true;
34 flags[BlendConstants] = true;
34 return flags; 35 return flags;
35} 36}
36 37
@@ -84,6 +85,10 @@ void SetupDirtyDepthBias(Tables& tables) {
84 table[OFF(polygon_offset_factor)] = DepthBias; 85 table[OFF(polygon_offset_factor)] = DepthBias;
85} 86}
86 87
88void SetupDirtyBlendConstants(Tables& tables) {
89 FillBlock(tables[0], OFF(blend_color), NUM(blend_color), BlendConstants);
90}
91
87} // Anonymous namespace 92} // Anonymous namespace
88 93
89StateTracker::StateTracker(Core::System& system) 94StateTracker::StateTracker(Core::System& system)
@@ -96,6 +101,7 @@ void StateTracker::Initialize() {
96 SetupDirtyViewports(tables); 101 SetupDirtyViewports(tables);
97 SetupDirtyScissors(tables); 102 SetupDirtyScissors(tables);
98 SetupDirtyDepthBias(tables); 103 SetupDirtyDepthBias(tables);
104 SetupDirtyBlendConstants(tables);
99 105
100 auto& store = dirty.on_write_stores; 106 auto& store = dirty.on_write_stores;
101 store[RenderTargets] = true; 107 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 088b47145..a0493813a 100644
--- a/src/video_core/renderer_vulkan/vk_state_tracker.h
+++ b/src/video_core/renderer_vulkan/vk_state_tracker.h
@@ -22,6 +22,7 @@ enum : u8 {
22 Viewports, 22 Viewports,
23 Scissors, 23 Scissors,
24 DepthBias, 24 DepthBias,
25 BlendConstants,
25}; 26};
26 27
27} // namespace Dirty 28} // namespace Dirty
@@ -46,6 +47,10 @@ public:
46 return Exchange(Dirty::DepthBias, false); 47 return Exchange(Dirty::DepthBias, false);
47 } 48 }
48 49
50 bool TouchBlendConstants() {
51 return Exchange(Dirty::BlendConstants, false);
52 }
53
49private: 54private:
50 using Flags = std::remove_reference_t<decltype(Tegra::Engines::Maxwell3D::dirty.flags)>; 55 using Flags = std::remove_reference_t<decltype(Tegra::Engines::Maxwell3D::dirty.flags)>;
51 56