From 6b2978d9a6f3f65523dd60fef19771ec584db8de Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Sun, 8 May 2016 10:19:14 +1200 Subject: layers: Fix usage flags validation of CreateImageView We need to validate the flags before calling down into the ICD. At least one ICD (Anvil) asserts if it sees bad flags. Signed-off-by: Chris Forbes --- layers/core_validation.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'layers/core_validation.cpp') diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 28e1ea64..19cb0a30 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -5586,21 +5586,30 @@ static void ResolveRemainingLevelsLayers(layer_data *dev_data, uint32_t *levels, VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(VkDevice device, const VkImageViewCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkImageView *pView) { + bool skipCall = false; + VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; + layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); - VkResult result = dev_data->device_dispatch_table->CreateImageView(device, pCreateInfo, pAllocator, pView); + { + // Validate that img has correct usage flags set + std::lock_guard lock(global_lock); + skipCall |= validate_image_usage_flags(dev_data, pCreateInfo->image, + VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | + VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, + false, "vkCreateImageView()", "VK_IMAGE_USAGE_[SAMPLED|STORAGE|COLOR_ATTACHMENT]_BIT"); + } + + if (!skipCall) { + result = dev_data->device_dispatch_table->CreateImageView(device, pCreateInfo, pAllocator, pView); + } + if (VK_SUCCESS == result) { std::lock_guard lock(global_lock); VkImageViewCreateInfo localCI = VkImageViewCreateInfo(*pCreateInfo); ResolveRemainingLevelsLayers(dev_data, &localCI.subresourceRange, pCreateInfo->image); dev_data->imageViewMap[*pView] = localCI; -#if MTMERGESOURCE - // Validate that img has correct usage flags set - validate_image_usage_flags(dev_data, pCreateInfo->image, - VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | - VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - false, "vkCreateImageView()", "VK_IMAGE_USAGE_[SAMPLED|STORAGE|COLOR_ATTACHMENT]_BIT"); -#endif } + return result; } -- cgit v1.2.3