layers: Handle partial failure in vkCreate*Pipelines

This applies to vkCreate*Pipelines creating multiple objects with
a single call.

Creation of *some* pipelines may fail and an error code will be
returned. In this case invalid handles will be set to NULL, and
the remaining handles must be managed properly.
diff --git a/layers/unique_objects.cpp b/layers/unique_objects.cpp
index 0d81c80..3a0945a 100644
--- a/layers/unique_objects.cpp
+++ b/layers/unique_objects.cpp
@@ -428,13 +428,15 @@
     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 @@
     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;