diff --git a/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_manager.cpp b/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_manager.cpp index b85d2a94..bf0aabb2 100644 --- a/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_manager.cpp +++ b/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_manager.cpp @@ -565,6 +565,15 @@ namespace skyline::gpu::interconnect::maxwell3d { storageBufferViews.resize(descriptorInfo.totalStorageBufferCount); } + void Pipeline::SyncCachedStorageBufferViews(u32 executionNumber) { + if (lastExecutionNumber != executionNumber) { + for (auto &view : storageBufferViews) + view.PurgeCaches(); + + lastExecutionNumber = executionNumber; + } + } + Pipeline *Pipeline::LookupNext(const PackedPipelineState &packedState) { auto it{std::find_if(transitionCache.begin(), transitionCache.end(), [&packedState](auto pipeline) { if (pipeline && pipeline->sourcePackedState == packedState) diff --git a/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_manager.h b/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_manager.h index d202b731..025780cf 100644 --- a/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_manager.h +++ b/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_manager.h @@ -85,6 +85,7 @@ namespace skyline::gpu::interconnect::maxwell3d { private: std::vector storageBufferViews; + u32 lastExecutionNumber{}; //!< The last execution number this pipeline was used at std::array shaderStages; DescriptorInfo descriptorInfo; cache::GraphicsPipelineCache::CompiledPipeline compiledPipeline; @@ -94,6 +95,8 @@ namespace skyline::gpu::interconnect::maxwell3d { tsl::robin_map bindingMatchCache; //!< Cache of which pipelines have bindings that match this pipeline + void SyncCachedStorageBufferViews(u32 executionNumber); + public: PackedPipelineState sourcePackedState;