aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
authorChris Forbes <chrisf@ijw.co.nz>2016-05-08 10:19:14 +1200
committerTobin Ehlis <tobine@google.com>2016-05-09 08:29:29 -0600
commit6b2978d9a6f3f65523dd60fef19771ec584db8de (patch)
treee09e6fead9e96e74925c9667161c289a80035780 /layers/core_validation.cpp
parent3a7c13e0813ae642d1413f52d2d5e2245b238e90 (diff)
downloadusermoji-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.cpp25
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;
}