Revert "layers: Fix Graphics Pipeline pointers not ignored"

This caused segfaults on Intel Skylake, NexusPlayer, and
Samsung Galaxy S8 (Mali).

This reverts commit 367d276ffe5c0748ff9d8e2b3551d4a00c9fc3c2.
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index b210f8f..78e72aa 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -4514,8 +4514,8 @@
 
     for (i = 0; i < count; i++) {
         pipe_state.push_back(std::unique_ptr<PIPELINE_STATE>(new PIPELINE_STATE));
-        pipe_state[i]->render_pass_ci.initialize(GetRenderPassState(dev_data, pCreateInfos[i].renderPass)->createInfo.ptr());
         pipe_state[i]->initGraphicsPipeline(&pCreateInfos[i]);
+        pipe_state[i]->render_pass_ci.initialize(GetRenderPassState(dev_data, pCreateInfos[i].renderPass)->createInfo.ptr());
         pipe_state[i]->pipeline_layout = *getPipelineLayout(dev_data, pCreateInfos[i].layout);
     }
 
diff --git a/layers/core_validation_types.h b/layers/core_validation_types.h
index 610539a..928583c 100644
--- a/layers/core_validation_types.h
+++ b/layers/core_validation_types.h
@@ -576,23 +576,7 @@
           pipeline_layout() {}
 
     void initGraphicsPipeline(const VkGraphicsPipelineCreateInfo *pCreateInfo) {
-        bool uses_color_attachment = false;
-        bool uses_depthstencil_attachment = false;
-        if (pCreateInfo->subpass < render_pass_ci.subpassCount) {
-            const auto &subpass = render_pass_ci.pSubpasses[pCreateInfo->subpass];
-
-            for (uint32_t i = 0; i < subpass.colorAttachmentCount; ++i) {
-                if (subpass.pColorAttachments[i].attachment != VK_ATTACHMENT_UNUSED) {
-                    uses_color_attachment = true;
-                    break;
-                }
-            }
-
-            if (subpass.pDepthStencilAttachment && subpass.pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) {
-                uses_depthstencil_attachment = true;
-            }
-        }
-        graphicsPipelineCI.initialize(pCreateInfo, uses_color_attachment, uses_depthstencil_attachment);
+        graphicsPipelineCI.initialize(pCreateInfo);
         // Make sure compute pipeline is null
         VkComputePipelineCreateInfo emptyComputeCI = {};
         computePipelineCI.initialize(&emptyComputeCI);
@@ -601,15 +585,15 @@
             this->duplicate_shaders |= this->active_shaders & pPSSCI->stage;
             this->active_shaders |= pPSSCI->stage;
         }
-        if (graphicsPipelineCI.pVertexInputState) {
-            const auto pVICI = graphicsPipelineCI.pVertexInputState;
+        if (pCreateInfo->pVertexInputState) {
+            const VkPipelineVertexInputStateCreateInfo *pVICI = pCreateInfo->pVertexInputState;
             if (pVICI->vertexBindingDescriptionCount) {
                 this->vertexBindingDescriptions = std::vector<VkVertexInputBindingDescription>(
                     pVICI->pVertexBindingDescriptions, pVICI->pVertexBindingDescriptions + pVICI->vertexBindingDescriptionCount);
             }
         }
-        if (graphicsPipelineCI.pColorBlendState) {
-            const auto pCBCI = graphicsPipelineCI.pColorBlendState;
+        if (pCreateInfo->pColorBlendState) {
+            const VkPipelineColorBlendStateCreateInfo *pCBCI = pCreateInfo->pColorBlendState;
             if (pCBCI->attachmentCount) {
                 this->attachments = std::vector<VkPipelineColorBlendAttachmentState>(pCBCI->pAttachments,
                                                                                      pCBCI->pAttachments + pCBCI->attachmentCount);
@@ -621,7 +605,7 @@
         computePipelineCI.initialize(pCreateInfo);
         // Make sure gfx pipeline is null
         VkGraphicsPipelineCreateInfo emptyGraphicsCI = {};
-        graphicsPipelineCI.initialize(&emptyGraphicsCI, false, false);
+        graphicsPipelineCI.initialize(&emptyGraphicsCI);
         switch (computePipelineCI.stage.stage) {
             case VK_SHADER_STAGE_COMPUTE_BIT:
                 this->active_shaders |= VK_SHADER_STAGE_COMPUTE_BIT;
diff --git a/layers/parameter_validation.h b/layers/parameter_validation.h
index b9d153c..6ef3de2 100644
--- a/layers/parameter_validation.h
+++ b/layers/parameter_validation.h
@@ -25,9 +25,8 @@
 #include <cstdlib>
 #include <string>
 #include <bitset>
-#include <unordered_map>
-#include <unordered_set>
 #include <mutex>
+#include <unordered_set>
 
 #include "vulkan/vulkan.h"
 #include "vk_enum_string_helper.h"
@@ -81,13 +80,6 @@
     VkDevice device = VK_NULL_HANDLE;
     DeviceExtensions extensions;
 
-    struct SubpassesUsageStates {
-        std::unordered_set<uint32_t> subpasses_using_color_attachment;
-        std::unordered_set<uint32_t> subpasses_using_depthstencil_attachment;
-    };
-
-    std::unordered_map<VkRenderPass, SubpassesUsageStates> renderpasses_states;
-
     VkLayerDispatchTable dispatch_table = {};
 };
 
diff --git a/layers/parameter_validation_utils.cpp b/layers/parameter_validation_utils.cpp
index 11706cd..4f6f5b8 100644
--- a/layers/parameter_validation_utils.cpp
+++ b/layers/parameter_validation_utils.cpp
@@ -82,10 +82,6 @@
                                                                  const VkAllocationCallbacks *pAllocator);
 extern bool parameter_validation_vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo *pCreateInfo,
                                                      const VkAllocationCallbacks *pAllocator, VkCommandPool *pCommandPool);
-extern bool parameter_validation_vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo,
-                                                    const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass);
-extern bool parameter_validation_vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass,
-                                                     const VkAllocationCallbacks *pAllocator);
 
 // TODO : This can be much smarter, using separate locks for separate global data
 std::mutex global_lock;
@@ -594,78 +590,6 @@
     return result;
 }
 
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo,
-                                                  const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass) {
-    layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
-    bool skip = false;
-    VkResult result = VK_ERROR_VALIDATION_FAILED_EXT;
-
-    {
-        std::unique_lock<std::mutex> lock(global_lock);
-        skip |= parameter_validation_vkCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
-
-        typedef bool (*PFN_manual_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo,
-                                                      const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass);
-        PFN_manual_vkCreateRenderPass custom_func = (PFN_manual_vkCreateRenderPass)custom_functions["vkCreateRenderPass"];
-        if (custom_func != nullptr) {
-            skip |= custom_func(device, pCreateInfo, pAllocator, pRenderPass);
-        }
-    }
-
-    if (!skip) {
-        result = device_data->dispatch_table.CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
-
-        // track the state necessary for checking vkCreateGraphicsPipeline (subpass usage of depth and color attachments)
-        if (result == VK_SUCCESS) {
-            std::unique_lock<std::mutex> lock(global_lock);
-            const auto renderPass = *pRenderPass;
-            auto &renderpass_state = device_data->renderpasses_states[renderPass];
-
-            for (uint32_t subpass = 0; subpass < pCreateInfo->subpassCount; ++subpass) {
-                bool uses_color = false;
-                for (uint32_t i = 0; i < pCreateInfo->pSubpasses[subpass].colorAttachmentCount && !uses_color; ++i)
-                    if (pCreateInfo->pSubpasses[subpass].pColorAttachments[i].attachment != VK_ATTACHMENT_UNUSED) uses_color = true;
-
-                bool uses_depthstencil = false;
-                if (pCreateInfo->pSubpasses[subpass].pDepthStencilAttachment)
-                    if (pCreateInfo->pSubpasses[subpass].pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED)
-                        uses_depthstencil = true;
-
-                if (uses_color) renderpass_state.subpasses_using_color_attachment.insert(subpass);
-                if (uses_depthstencil) renderpass_state.subpasses_using_depthstencil_attachment.insert(subpass);
-            }
-        }
-    }
-    return result;
-}
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks *pAllocator) {
-    layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
-    bool skip = false;
-
-    {
-        std::unique_lock<std::mutex> lock(global_lock);
-        skip |= parameter_validation_vkDestroyRenderPass(device, renderPass, pAllocator);
-
-        typedef bool (*PFN_manual_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass,
-                                                       const VkAllocationCallbacks *pAllocator);
-        PFN_manual_vkDestroyRenderPass custom_func = (PFN_manual_vkDestroyRenderPass)custom_functions["vkDestroyRenderPass"];
-        if (custom_func != nullptr) {
-            skip |= custom_func(device, renderPass, pAllocator);
-        }
-    }
-
-    if (!skip) {
-        device_data->dispatch_table.DestroyRenderPass(device, renderPass, pAllocator);
-
-        // track the state necessary for checking vkCreateGraphicsPipeline (subpass usage of depth and color attachments)
-        {
-            std::unique_lock<std::mutex> lock(global_lock);
-            device_data->renderpasses_states.erase(renderPass);
-        }
-    }
-}
-
 bool pv_vkCreateBuffer(VkDevice device, const VkBufferCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator,
                        VkBuffer *pBuffer) {
     bool skip = false;
@@ -1283,20 +1207,8 @@
                     }
                 }
 
-                bool uses_color_attachment = false;
-                bool uses_depthstencil_attachment = false;
-                {
-                    const auto subpasses_uses_it = device_data->renderpasses_states.find(pCreateInfos[i].renderPass);
-                    if (subpasses_uses_it != device_data->renderpasses_states.end()) {
-                        const auto &subpasses_uses = subpasses_uses_it->second;
-                        if (subpasses_uses.subpasses_using_color_attachment.count(pCreateInfos[i].subpass))
-                            uses_color_attachment = true;
-                        if (subpasses_uses.subpasses_using_depthstencil_attachment.count(pCreateInfos[i].subpass))
-                            uses_depthstencil_attachment = true;
-                    }
-                }
-
-                if (pCreateInfos[i].pDepthStencilState != nullptr && uses_depthstencil_attachment) {
+                // TODO: Conditional NULL check based on subpass depth/stencil attachment
+                if (pCreateInfos[i].pDepthStencilState != nullptr) {
                     skip |= validate_struct_pnext(
                         report_data, "vkCreateGraphicsPipelines",
                         ParameterName("pCreateInfos[%i].pDepthStencilState->pNext", ParameterName::IndexVector{i}), NULL,
@@ -1390,7 +1302,8 @@
                     }
                 }
 
-                if (pCreateInfos[i].pColorBlendState != nullptr && uses_color_attachment) {
+                // TODO: Conditional NULL check based on subpass color attachment
+                if (pCreateInfos[i].pColorBlendState != nullptr) {
                     skip |= validate_struct_pnext(
                         report_data, "vkCreateGraphicsPipelines",
                         ParameterName("pCreateInfos[%i].pColorBlendState->pNext", ParameterName::IndexVector{i}), NULL,
diff --git a/layers/unique_objects.cpp b/layers/unique_objects.cpp
index 8af7772..d324ce4 100644
--- a/layers/unique_objects.cpp
+++ b/layers/unique_objects.cpp
@@ -328,22 +328,7 @@
         local_pCreateInfos = new safe_VkGraphicsPipelineCreateInfo[createInfoCount];
         std::lock_guard<std::mutex> lock(global_lock);
         for (uint32_t idx0 = 0; idx0 < createInfoCount; ++idx0) {
-            bool uses_color_attachment = false;
-            bool uses_depthstencil_attachment = false;
-            {
-                const auto subpasses_uses_it =
-                    device_data->renderpasses_states.find(Unwrap(device_data, pCreateInfos[idx0].renderPass));
-                if (subpasses_uses_it != device_data->renderpasses_states.end()) {
-                    const auto &subpasses_uses = subpasses_uses_it->second;
-                    if (subpasses_uses.subpasses_using_color_attachment.count(pCreateInfos[idx0].subpass))
-                        uses_color_attachment = true;
-                    if (subpasses_uses.subpasses_using_depthstencil_attachment.count(pCreateInfos[idx0].subpass))
-                        uses_depthstencil_attachment = true;
-                }
-            }
-
-            local_pCreateInfos[idx0].initialize(&pCreateInfos[idx0], uses_color_attachment, uses_depthstencil_attachment);
-
+            local_pCreateInfos[idx0].initialize(&pCreateInfos[idx0]);
             if (pCreateInfos[idx0].basePipelineHandle) {
                 local_pCreateInfos[idx0].basePipelineHandle = Unwrap(device_data, pCreateInfos[idx0].basePipelineHandle);
             }
@@ -381,55 +366,6 @@
     return result;
 }
 
-static void PostCallCreateRenderPass(layer_data *dev_data, const VkRenderPassCreateInfo *pCreateInfo, VkRenderPass renderPass) {
-    auto &renderpass_state = dev_data->renderpasses_states[renderPass];
-
-    for (uint32_t subpass = 0; subpass < pCreateInfo->subpassCount; ++subpass) {
-        bool uses_color = false;
-        for (uint32_t i = 0; i < pCreateInfo->pSubpasses[subpass].colorAttachmentCount && !uses_color; ++i)
-            if (pCreateInfo->pSubpasses[subpass].pColorAttachments[i].attachment != VK_ATTACHMENT_UNUSED) uses_color = true;
-
-        bool uses_depthstencil = false;
-        if (pCreateInfo->pSubpasses[subpass].pDepthStencilAttachment)
-            if (pCreateInfo->pSubpasses[subpass].pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED)
-                uses_depthstencil = true;
-
-        if (uses_color) renderpass_state.subpasses_using_color_attachment.insert(subpass);
-        if (uses_depthstencil) renderpass_state.subpasses_using_depthstencil_attachment.insert(subpass);
-    }
-}
-
-VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo,
-                                                const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass) {
-    layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
-    VkResult result = dev_data->dispatch_table.CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
-    if (VK_SUCCESS == result) {
-        std::lock_guard<std::mutex> lock(global_lock);
-
-        PostCallCreateRenderPass(dev_data, pCreateInfo, *pRenderPass);
-
-        *pRenderPass = WrapNew(dev_data, *pRenderPass);
-    }
-    return result;
-}
-
-static void PostCallDestroyRenderPass(layer_data *dev_data, VkRenderPass renderPass) {
-    dev_data->renderpasses_states.erase(renderPass);
-}
-
-VKAPI_ATTR void VKAPI_CALL DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks *pAllocator) {
-    layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
-    std::unique_lock<std::mutex> lock(global_lock);
-    uint64_t renderPass_id = reinterpret_cast<uint64_t &>(renderPass);
-    renderPass = (VkRenderPass)dev_data->unique_id_mapping[renderPass_id];
-    dev_data->unique_id_mapping.erase(renderPass_id);
-    lock.unlock();
-    dev_data->dispatch_table.DestroyRenderPass(device, renderPass, pAllocator);
-
-    lock.lock();
-    PostCallDestroyRenderPass(dev_data, renderPass);
-}
-
 VKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo,
                                                   const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain) {
     layer_data *my_map_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
diff --git a/layers/unique_objects.h b/layers/unique_objects.h
index e604e91..57b9dbf 100644
--- a/layers/unique_objects.h
+++ b/layers/unique_objects.h
@@ -21,9 +21,6 @@
 
 #include "vulkan/vulkan.h"
 
-#include <unordered_map>
-#include <unordered_set>
-
 #include "vk_layer_data.h"
 #include "vk_safe_struct.h"
 #include "vk_layer_utils.h"
@@ -72,13 +69,6 @@
     std::unordered_map<uint64_t, uint64_t> unique_id_mapping;  // Map uniqueID to actual object handle
     VkPhysicalDevice gpu;
 
-    struct SubpassesUsageStates {
-        std::unordered_set<uint32_t> subpasses_using_color_attachment;
-        std::unordered_set<uint32_t> subpasses_using_depthstencil_attachment;
-    };
-    // uses unwrapped handles
-    std::unordered_map<VkRenderPass, SubpassesUsageStates> renderpasses_states;
-
     layer_data() : wsi_enabled(false), gpu(VK_NULL_HANDLE){};
 };