From a2d830e51b723c4e36e54f573cbb70693e112b89 Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Fri, 13 Feb 2026 21:18:49 -0400 Subject: [PATCH] [vulkan] BindVertexBuffers2EXT reset per pipeline configuration --- src/video_core/renderer_vulkan/vk_scheduler.cpp | 4 ++++ src/video_core/renderer_vulkan/vk_state_tracker.h | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp index 2a69d6d244..c8410b94c0 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.cpp +++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp @@ -168,6 +168,10 @@ bool Scheduler::UpdateGraphicsPipeline(GraphicsPipeline* pipeline) { return true; } + if (pipeline->UsesExtendedDynamicState() && !pipeline->HasDynamicVertexInput()) { + state_tracker.InvalidateVertexBufferState(); + } + if (!pipeline->UsesExtendedDynamicState()) { state.needs_state_enable_refresh = true; } else if (state.needs_state_enable_refresh) { diff --git a/src/video_core/renderer_vulkan/vk_state_tracker.h b/src/video_core/renderer_vulkan/vk_state_tracker.h index 74bae9e181..ae232d3123 100644 --- a/src/video_core/renderer_vulkan/vk_state_tracker.h +++ b/src/video_core/renderer_vulkan/vk_state_tracker.h @@ -101,6 +101,13 @@ public: (*flags)[Dirty::StateEnable] = true; } + void InvalidateVertexBufferState() { + (*flags)[Dirty::VertexBuffers] = true; + for (int index = Dirty::VertexBuffer0; index <= Dirty::VertexBuffer31; ++index) { + (*flags)[index] = true; + } + } + bool TouchViewports() { const bool dirty_viewports = Exchange(Dirty::Viewports, false); const bool rescale_viewports = Exchange(VideoCommon::Dirty::RescaleViewports, false);