diff options
| author | Dustin Graves <dustin@lunarg.com> | 2016-04-27 17:44:56 -0600 |
|---|---|---|
| committer | Dustin Graves <dustin@lunarg.com> | 2016-05-12 11:30:00 -0600 |
| commit | ee6a14954bda0c9fa298da38cce3c1536d905136 (patch) | |
| tree | a91b15d8e2a6c46613ee7195ddcf8a6086447ee6 /layers/parameter_validation.cpp | |
| parent | 37c4c06347ad58d2a259b693e17efc7d646449fc (diff) | |
| download | usermoji-ee6a14954bda0c9fa298da38cce3c1536d905136.tar.xz | |
layers: Additional vkCreateImageView validation
Add more vkCreateImageView parameter validation, based on the valid
usage section for VkImageViewCreateInfo in the Vulkan specification.
Issues-Addressed: LX #502
Change-Id: I7fd743312f43a8ff36f2db9f6b50569d630f9dca
Diffstat (limited to 'layers/parameter_validation.cpp')
| -rw-r--r-- | layers/parameter_validation.cpp | 50 |
1 files changed, 47 insertions, 3 deletions
diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp index c8b70406..20676b4a 100644 --- a/layers/parameter_validation.cpp +++ b/layers/parameter_validation.cpp @@ -2501,13 +2501,57 @@ vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubreso VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(VkDevice device, const VkImageViewCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkImageView *pView) { VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; - bool skipCall = false; + bool skip_call = false; layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); assert(my_data != NULL); + debug_report_data *report_data = my_data->report_data; - skipCall |= parameter_validation_vkCreateImageView(my_data->report_data, pCreateInfo, pAllocator, pView); + skip_call |= parameter_validation_vkCreateImageView(report_data, pCreateInfo, pAllocator, pView); - if (!skipCall) { + if (pCreateInfo != nullptr) { + if ((pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_1D) || (pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_2D)) { + if (pCreateInfo->subresourceRange.layerCount != 1) { + skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, + LayerName, "vkCreateImageView: if pCreateInfo->viewType is VK_IMAGE_TYPE_%dD, " + "pCreateInfo->subresourceRange.layerCount must be 1", + ((pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_1D) ? 1 : 2)); + } + } else if ((pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_1D_ARRAY) || + (pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_1D_ARRAY)) { + if (pCreateInfo->subresourceRange.layerCount < 1) { + skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, + LayerName, "vkCreateImageView: if pCreateInfo->viewType is VK_IMAGE_TYPE_%dD_ARRAY, " + "pCreateInfo->subresourceRange.layerCount must be >= 1", + ((pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_1D_ARRAY) ? 1 : 2)); + } + } else if (pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_CUBE) { + if (pCreateInfo->subresourceRange.layerCount != 6) { + skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, + LayerName, "vkCreateImageView: if pCreateInfo->viewType is VK_IMAGE_TYPE_CUBE, " + "pCreateInfo->subresourceRange.layerCount must be 6"); + } + } else if (pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY) { + if ((pCreateInfo->subresourceRange.layerCount == 0) || ((pCreateInfo->subresourceRange.layerCount % 6) != 0)) { + skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, + LayerName, "vkCreateImageView: if pCreateInfo->viewType is VK_IMAGE_TYPE_CUBE_ARRAY, " + "pCreateInfo->subresourceRange.layerCount must be a multiple of 6"); + } + } else if (pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_3D) { + if (pCreateInfo->subresourceRange.baseArrayLayer != 0) { + skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, + LayerName, "vkCreateImageView: if pCreateInfo->viewType is VK_IMAGE_TYPE_3D, " + "pCreateInfo->subresourceRange.baseArrayLayer must be 0"); + } + + if (pCreateInfo->subresourceRange.layerCount != 1) { + skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, + LayerName, "vkCreateImageView: if pCreateInfo->viewType is VK_IMAGE_TYPE_3D, " + "pCreateInfo->subresourceRange.layerCount must be 1"); + } + } + } + + if (!skip_call) { result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView); validate_result(my_data->report_data, "vkCreateImageView", result); |
