aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index bba96b7a..6356897e 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -5812,14 +5812,25 @@ VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineLayout(VkDevice device, const VkPip
}
// TODO : Add warning if ranges overlap
}
+
+ if (skipCall)
+ return VK_ERROR_VALIDATION_FAILED_EXT;
+
VkResult result = dev_data->device_dispatch_table->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
if (VK_SUCCESS == result) {
std::lock_guard<std::mutex> lock(global_lock);
- // TODOSC : Merge capture of the setLayouts per pipeline
PIPELINE_LAYOUT_NODE &plNode = dev_data->pipelineLayoutMap[*pPipelineLayout];
plNode.descriptorSetLayouts.resize(pCreateInfo->setLayoutCount);
+ plNode.setLayouts.resize(pCreateInfo->setLayoutCount);
for (i = 0; i < pCreateInfo->setLayoutCount; ++i) {
plNode.descriptorSetLayouts[i] = pCreateInfo->pSetLayouts[i];
+ auto set_layout_it = dev_data->descriptorSetLayoutMap.find(pCreateInfo->pSetLayouts[i]);
+ if (set_layout_it != dev_data->descriptorSetLayoutMap.end()) {
+ plNode.setLayouts[i] = set_layout_it->second;
+ }
+ else {
+ plNode.setLayouts[i] = nullptr;
+ }
}
plNode.pushConstantRanges.resize(pCreateInfo->pushConstantRangeCount);
for (i = 0; i < pCreateInfo->pushConstantRangeCount; ++i) {