Browse Source

vk_pipeline_cache: Skip cached pipelines with different dynamic state

ReinUsesLisp 5 years ago
parent
commit
41cca8b8ad
1 changed files with 6 additions and 0 deletions
  1. 6 0
      src/video_core/renderer_vulkan/vk_pipeline_cache.cpp

+ 6 - 0
src/video_core/renderer_vulkan/vk_pipeline_cache.cpp

@@ -391,10 +391,16 @@ void PipelineCache::LoadDiskResources(u64 title_id, std::stop_token stop_loading
         });
         ++state.total;
     }};
+    const bool extended_dynamic_state = device.IsExtExtendedDynamicStateSupported();
+    const bool dynamic_vertex_input = device.IsExtVertexInputDynamicStateSupported();
     const auto load_graphics{[&](std::ifstream& file, std::vector<FileEnvironment> envs) {
         GraphicsPipelineCacheKey key;
         file.read(reinterpret_cast<char*>(&key), sizeof(key));
 
+        if ((key.state.extended_dynamic_state != 0) != extended_dynamic_state ||
+            (key.state.dynamic_vertex_input != 0) != dynamic_vertex_input) {
+            return;
+        }
         workers.QueueWork([this, key, envs = std::move(envs), &state, &callback]() mutable {
             ShaderPools pools;
             boost::container::static_vector<Shader::Environment*, 5> env_ptrs;