summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/vk_state_tracker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_state_tracker.cpp')
-rw-r--r--src/video_core/renderer_vulkan/vk_state_tracker.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/video_core/renderer_vulkan/vk_state_tracker.cpp b/src/video_core/renderer_vulkan/vk_state_tracker.cpp
index bfea503de..e5cf97472 100644
--- a/src/video_core/renderer_vulkan/vk_state_tracker.cpp
+++ b/src/video_core/renderer_vulkan/vk_state_tracker.cpp
@@ -33,6 +33,9 @@ Flags MakeInvalidationFlags() {
BlendConstants,
DepthBounds,
StencilProperties,
+ StencilReference,
+ StencilWriteMask,
+ StencilCompare,
LineWidth,
CullMode,
DepthBoundsEnable,
@@ -99,14 +102,17 @@ void SetupDirtyDepthBounds(Tables& tables) {
}
void SetupDirtyStencilProperties(Tables& tables) {
- auto& table = tables[0];
- table[OFF(stencil_two_side_enable)] = StencilProperties;
- table[OFF(stencil_front_ref)] = StencilProperties;
- table[OFF(stencil_front_mask)] = StencilProperties;
- table[OFF(stencil_front_func_mask)] = StencilProperties;
- table[OFF(stencil_back_ref)] = StencilProperties;
- table[OFF(stencil_back_mask)] = StencilProperties;
- table[OFF(stencil_back_func_mask)] = StencilProperties;
+ const auto setup = [&](size_t position, u8 flag) {
+ tables[0][position] = flag;
+ tables[1][position] = StencilProperties;
+ };
+ tables[0][OFF(stencil_two_side_enable)] = StencilProperties;
+ setup(OFF(stencil_front_ref), StencilReference);
+ setup(OFF(stencil_front_mask), StencilWriteMask);
+ setup(OFF(stencil_front_func_mask), StencilCompare);
+ setup(OFF(stencil_back_ref), StencilReference);
+ setup(OFF(stencil_back_mask), StencilWriteMask);
+ setup(OFF(stencil_back_func_mask), StencilCompare);
}
void SetupDirtyLineWidth(Tables& tables) {
@@ -238,9 +244,11 @@ void StateTracker::ChangeChannel(Tegra::Control::ChannelState& channel_state) {
void StateTracker::InvalidateState() {
flags->set();
+ current_topology = INVALID_TOPOLOGY;
+ stencil_reset = true;
}
StateTracker::StateTracker()
: flags{&default_flags}, default_flags{}, invalidation_flags{MakeInvalidationFlags()} {}
-} // namespace Vulkan
+} // namespace Vulkan \ No newline at end of file