diff options
| author | 2020-02-21 00:37:29 -0300 | |
|---|---|---|
| committer | 2020-02-28 17:56:43 -0300 | |
| commit | cd0e28c9ecb2ecd4579ad9abb8899255f60334da (patch) | |
| tree | 1e8182da026f075b66b5047d1bb89076e3e317b2 /src | |
| parent | vk_state_tracker: Implement dirty flags for depth bias (diff) | |
| download | yuzu-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.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 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 | ||
| 1028 | void RasterizerVulkan::UpdateBlendConstants(Tegra::Engines::Maxwell3D& gpu) { | 1028 | void 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 | ||
| 88 | void SetupDirtyBlendConstants(Tables& tables) { | ||
| 89 | FillBlock(tables[0], OFF(blend_color), NUM(blend_color), BlendConstants); | ||
| 90 | } | ||
| 91 | |||
| 87 | } // Anonymous namespace | 92 | } // Anonymous namespace |
| 88 | 93 | ||
| 89 | StateTracker::StateTracker(Core::System& system) | 94 | StateTracker::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 | |||
| 49 | private: | 54 | private: |
| 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 | ||