aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan/vk_scheduler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_scheduler.cpp')
-rw-r--r--src/video_core/renderer_vulkan/vk_scheduler.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp
index cd5793746b..4e56055f97 100644
--- a/src/video_core/renderer_vulkan/vk_scheduler.cpp
+++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp
@@ -13,6 +13,7 @@
#include "common/thread.h"
#include "video_core/renderer_vulkan/vk_command_pool.h"
+#include "video_core/renderer_vulkan/vk_graphics_pipeline.h"
#include "video_core/renderer_vulkan/vk_master_semaphore.h"
#include "video_core/renderer_vulkan/vk_scheduler.h"
#include "video_core/renderer_vulkan/vk_state_tracker.h"
@@ -130,9 +131,27 @@ void Scheduler::RequestOutsideRenderPassOperationContext() {
bool Scheduler::UpdateGraphicsPipeline(GraphicsPipeline* pipeline) {
if (state.graphics_pipeline == pipeline) {
+ if (pipeline && pipeline->UsesExtendedDynamicState() &&
+ state.needs_state_enable_refresh) {
+ state_tracker.InvalidateStateEnableFlag();
+ state.needs_state_enable_refresh = false;
+ }
return false;
}
+
state.graphics_pipeline = pipeline;
+
+ if (!pipeline) {
+ return true;
+ }
+
+ if (!pipeline->UsesExtendedDynamicState()) {
+ state.needs_state_enable_refresh = true;
+ } else if (state.needs_state_enable_refresh) {
+ state_tracker.InvalidateStateEnableFlag();
+ state.needs_state_enable_refresh = false;
+ }
+
return true;
}