mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-28 20:58:35 +01:00
Vulkan: Clear caches when deleting shaders.
As noticed by iota97 in #12317, we're not clearing these. If a pointer gets reused by the Vulkan driver, we have to be careful not to reuse a pipeline.
This commit is contained in:
1 parent
1d528d6f3b
commit
59062ca7bc
4 files changed
+62
-7
No files matched your search
@@ -137,24 +137,36 @@ void FramebufferManagerVulkan::DestroyDeviceObjects() {
|
||||
delete drawPixelsTex_;
|
||||
drawPixelsTex_ = nullptr;
|
||||
|
||||
if (fsBasicTex_ != VK_NULL_HANDLE)
|
||||
if (fsBasicTex_ != VK_NULL_HANDLE) {
|
||||
vulkan2D_->PurgeFragmentShader(fsBasicTex_);
|
||||
vulkan_->Delete().QueueDeleteShaderModule(fsBasicTex_);
|
||||
if (vsBasicTex_ != VK_NULL_HANDLE)
|
||||
}
|
||||
if (vsBasicTex_ != VK_NULL_HANDLE) {
|
||||
vulkan2D_->PurgeVertexShader(vsBasicTex_);
|
||||
vulkan_->Delete().QueueDeleteShaderModule(vsBasicTex_);
|
||||
if (stencilFs_ != VK_NULL_HANDLE)
|
||||
}
|
||||
if (stencilFs_ != VK_NULL_HANDLE) {
|
||||
vulkan2D_->PurgeFragmentShader(stencilFs_);
|
||||
vulkan_->Delete().QueueDeleteShaderModule(stencilFs_);
|
||||
if (stencilVs_ != VK_NULL_HANDLE)
|
||||
}
|
||||
if (stencilVs_ != VK_NULL_HANDLE) {
|
||||
vulkan2D_->PurgeVertexShader(stencilVs_);
|
||||
vulkan_->Delete().QueueDeleteShaderModule(stencilVs_);
|
||||
}
|
||||
|
||||
if (linearSampler_ != VK_NULL_HANDLE)
|
||||
vulkan_->Delete().QueueDeleteSampler(linearSampler_);
|
||||
if (nearestSampler_ != VK_NULL_HANDLE)
|
||||
vulkan_->Delete().QueueDeleteSampler(nearestSampler_);
|
||||
|
||||
if (postVs_)
|
||||
if (postVs_) {
|
||||
vulkan2D_->PurgeVertexShader(postVs_);
|
||||
vulkan_->Delete().QueueDeleteShaderModule(postVs_);
|
||||
if (postFs_)
|
||||
}
|
||||
if (postFs_) {
|
||||
vulkan2D_->PurgeFragmentShader(postFs_);
|
||||
vulkan_->Delete().QueueDeleteShaderModule(postFs_);
|
||||
}
|
||||
pipelinePostShader_ = VK_NULL_HANDLE; // actual pipeline should get destroyed by vulkan2d.
|
||||
}
|
||||
|
||||
@@ -586,9 +598,11 @@ void FramebufferManagerVulkan::Resized() {
|
||||
|
||||
void FramebufferManagerVulkan::CompilePostShader() {
|
||||
if (postVs_) {
|
||||
vulkan2D_->PurgeVertexShader(postVs_);
|
||||
vulkan_->Delete().QueueDeleteShaderModule(postVs_);
|
||||
}
|
||||
if (postFs_) {
|
||||
vulkan2D_->PurgeFragmentShader(postFs_);
|
||||
vulkan_->Delete().QueueDeleteShaderModule(postFs_);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user