diff options
| author | Chris Forbes <chrisf@ijw.co.nz> | 2016-05-08 10:19:14 +1200 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-05-09 08:29:29 -0600 |
| commit | 6b2978d9a6f3f65523dd60fef19771ec584db8de (patch) | |
| tree | e09e6fead9e96e74925c9667161c289a80035780 /layers/core_validation.cpp | |
| parent | 3a7c13e0813ae642d1413f52d2d5e2245b238e90 (diff) | |
| download | usermoji-6b2978d9a6f3f65523dd60fef19771ec584db8de.tar.xz | |
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 <chrisf@ijw.co.nz>
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
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<std::mutex> 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<std::mutex> 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; } |
