diff options
Diffstat (limited to 'layers/unique_objects.cpp')
| -rw-r--r-- | layers/unique_objects.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/layers/unique_objects.cpp b/layers/unique_objects.cpp index 0d81c809..3a0945a8 100644 --- a/layers/unique_objects.cpp +++ b/layers/unique_objects.cpp @@ -428,13 +428,15 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(VkDevice device, VkPipelin VkResult result = my_device_data->device_dispatch_table->CreateComputePipelines( device, pipelineCache, createInfoCount, (const VkComputePipelineCreateInfo *)local_pCreateInfos, pAllocator, pPipelines); delete[] local_pCreateInfos; - if (VK_SUCCESS == result) { + { uint64_t unique_id = 0; std::lock_guard<std::mutex> lock(global_lock); for (uint32_t i = 0; i < createInfoCount; ++i) { - unique_id = global_unique_id++; - my_device_data->unique_id_mapping[unique_id] = reinterpret_cast<uint64_t &>(pPipelines[i]); - pPipelines[i] = reinterpret_cast<VkPipeline &>(unique_id); + if (pPipelines[i] != VK_NULL_HANDLE) { + unique_id = global_unique_id++; + my_device_data->unique_id_mapping[unique_id] = reinterpret_cast<uint64_t &>(pPipelines[i]); + pPipelines[i] = reinterpret_cast<VkPipeline &>(unique_id); + } } } return result; @@ -484,13 +486,15 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateGraphicsPipelines(VkDevice device, VkPipeli VkResult result = my_device_data->device_dispatch_table->CreateGraphicsPipelines( device, pipelineCache, createInfoCount, (const VkGraphicsPipelineCreateInfo *)local_pCreateInfos, pAllocator, pPipelines); delete[] local_pCreateInfos; - if (VK_SUCCESS == result) { + { uint64_t unique_id = 0; std::lock_guard<std::mutex> lock(global_lock); for (uint32_t i = 0; i < createInfoCount; ++i) { - unique_id = global_unique_id++; - my_device_data->unique_id_mapping[unique_id] = reinterpret_cast<uint64_t &>(pPipelines[i]); - pPipelines[i] = reinterpret_cast<VkPipeline &>(unique_id); + if (pPipelines[i] != VK_NULL_HANDLE) { + unique_id = global_unique_id++; + my_device_data->unique_id_mapping[unique_id] = reinterpret_cast<uint64_t &>(pPipelines[i]); + pPipelines[i] = reinterpret_cast<VkPipeline &>(unique_id); + } } } return result; |
