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:
Unknown W. Brackets committed 2019-09-14 11:23:12 -07:00
1 parent 1d528d6f3b
commit 59062ca7bc
4 files changed
+62 -7

No files matched your search

+20 -6
View File
@@ -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_);
}