layers: Apply previous fixes to CV CreateComputePipelines
authorChris Forbes <chrisforbes@google.com>
Wed, 30 Nov 2016 01:44:03 +0000 (14:44 +1300)
committerChris Forbes <chrisforbes@google.com>
Thu, 1 Dec 2016 18:48:08 +0000 (07:48 +1300)
Compute pipeline creation can partially fail in the same way as graphics
pipeline creation. Handle it exactly the same way in CV.

Signed-off-by: Chris Forbes <chrisforbes@google.com>
layers/core_validation.cpp

index 5e0a7c9..d86bc27 100644 (file)
@@ -6921,6 +6921,7 @@ CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t
         for (i = 0; i < count; i++) {
             // Clean up any locally allocated data structures
             delete pPipeState[i];
+            pPipelines[i] = VK_NULL_HANDLE;
         }
         return VK_ERROR_VALIDATION_FAILED_EXT;
     }
@@ -6929,8 +6930,13 @@ CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t
     auto result = dev_data->dispatch_table.CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
     lock.lock();
     for (i = 0; i < count; i++) {
-        pPipeState[i]->pipeline = pPipelines[i];
-        dev_data->pipelineMap[pPipeState[i]->pipeline] = pPipeState[i];
+        if (pPipelines[i] == VK_NULL_HANDLE) {
+            delete pPipeState[i];
+        }
+        else {
+            pPipeState[i]->pipeline = pPipelines[i];
+            dev_data->pipelineMap[pPipeState[i]->pipeline] = pPipeState[i];
+        }
     }
 
     return result;