diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2017-01-27 14:50:23 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2017-01-31 09:55:10 -0700 |
| commit | 33dc2b9e2c0b56dd81868eb66a29e959c15caf5b (patch) | |
| tree | 30629aee8fbfc3bdca8d0e3811d4b68161b8a21c | |
| parent | c1b9d6d28618ccd48a7fd07501dfe62a610b272f (diff) | |
| download | usermoji-33dc2b9e2c0b56dd81868eb66a29e959c15caf5b.tar.xz | |
layers: Move CreateRenderPass format check to PV
Format validation check was in image layer -- removed the API
completely and moved check to parameter_validation. Also updated
to use the VU ID and noted it in the database.
Change-Id: I339925be7615777cfb1214ffe456a2498c676177
| -rw-r--r-- | layers/core_validation.cpp | 1 | ||||
| -rw-r--r-- | layers/image.cpp | 24 | ||||
| -rw-r--r-- | layers/image.h | 3 | ||||
| -rw-r--r-- | layers/parameter_validation.cpp | 10 | ||||
| -rw-r--r-- | layers/vk_validation_error_database.txt | 2 |
5 files changed, 11 insertions, 29 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index ed456339..4b8c7a95 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -10588,7 +10588,6 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass(VkDevice device, const VkRenderP layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); std::unique_lock<std::mutex> lock(global_lock); - // TODO: As part of wrapping up the mem_tracker/core_validation merge the following routine should be consolidated with // ValidateLayouts. skip_call |= ValidateRenderpassAttachmentUsage(dev_data, pCreateInfo); diff --git a/layers/image.cpp b/layers/image.cpp index c823eed8..25c67c5d 100644 --- a/layers/image.cpp +++ b/layers/image.cpp @@ -241,29 +241,6 @@ VKAPI_ATTR void VKAPI_CALL DestroyImage(VkDevice device, VkImage image, const Vk device_data->device_dispatch_table->DestroyImage(device, image, pAllocator); } -VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo, - const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass) { - layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); - bool skip_call = false; - - for (uint32_t i = 0; i < pCreateInfo->attachmentCount; ++i) { - if (pCreateInfo->pAttachments[i].format == VK_FORMAT_UNDEFINED) { - std::stringstream ss; - ss << "vkCreateRenderPass: pCreateInfo->pAttachments[" << i << "].format is VK_FORMAT_UNDEFINED"; - skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, - IMAGE_RENDERPASS_INVALID_ATTACHMENT, "IMAGE", "%s", ss.str().c_str()); - } - } - - if (skip_call) { - return VK_ERROR_VALIDATION_FAILED_EXT; - } - - VkResult result = my_data->device_dispatch_table->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass); - - return result; -} - VKAPI_ATTR void VKAPI_CALL CmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue *pColor, uint32_t rangeCount, const VkImageSubresourceRange *pRanges) { @@ -1174,7 +1151,6 @@ static PFN_vkVoidFunction intercept_core_device_command(const char *name) { {"vkDestroyDevice", reinterpret_cast<PFN_vkVoidFunction>(DestroyDevice)}, {"vkCreateImage", reinterpret_cast<PFN_vkVoidFunction>(CreateImage)}, {"vkDestroyImage", reinterpret_cast<PFN_vkVoidFunction>(DestroyImage)}, - {"vkCreateRenderPass", reinterpret_cast<PFN_vkVoidFunction>(CreateRenderPass)}, {"vkCmdClearColorImage", reinterpret_cast<PFN_vkVoidFunction>(CmdClearColorImage)}, {"vkCmdClearDepthStencilImage", reinterpret_cast<PFN_vkVoidFunction>(CmdClearDepthStencilImage)}, {"vkCmdClearAttachments", reinterpret_cast<PFN_vkVoidFunction>(CmdClearAttachments)}, diff --git a/layers/image.h b/layers/image.h index 002b9812..9c319c27 100644 --- a/layers/image.h +++ b/layers/image.h @@ -29,9 +29,6 @@ enum IMAGE_ERROR { IMAGE_NONE, // Used for INFO & other non-error messages IMAGE_FORMAT_UNSUPPORTED, // Request to create Image or RenderPass with a format that is not supported - IMAGE_RENDERPASS_INVALID_ATTACHMENT, // Invalid image layouts and/or load/storeOps for an attachment when creating RenderPass - IMAGE_RENDERPASS_INVALID_DS_ATTACHMENT, // If no depth/stencil attachment for a RenderPass, verify that subpass DS attachment - // is set to UNUSED IMAGE_INVALID_IMAGE_ASPECT, // Image aspect mask bits are invalid for this API call IMAGE_MISMATCHED_IMAGE_ASPECT, // Image aspect masks for source and dest images do not match IMAGE_VIEW_CREATE_ERROR, // Error occurred trying to create Image View diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp index 6ee96657..8b12c341 100644 --- a/layers/parameter_validation.cpp +++ b/layers/parameter_validation.cpp @@ -3754,6 +3754,16 @@ static bool PreCreateRenderPass(layer_data *dev_data, const VkRenderPassCreateIn bool skip = false; uint32_t max_color_attachments = dev_data->device_limits.maxColorAttachments; + for (uint32_t i = 0; i < pCreateInfo->attachmentCount; ++i) { + if (pCreateInfo->pAttachments[i].format == VK_FORMAT_UNDEFINED) { + std::stringstream ss; + ss << "vkCreateRenderPass: pCreateInfo->pAttachments[" << i << "].format is VK_FORMAT_UNDEFINED. " + << validation_error_map[VALIDATION_ERROR_00336]; + skip |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, + VALIDATION_ERROR_00336, "IMAGE", "%s", ss.str().c_str()); + } + } + for (uint32_t i = 0; i < pCreateInfo->subpassCount; ++i) { if (pCreateInfo->pSubpasses[i].colorAttachmentCount > max_color_attachments) { skip |= diff --git a/layers/vk_validation_error_database.txt b/layers/vk_validation_error_database.txt index 14045a12..f28a6661 100644 --- a/layers/vk_validation_error_database.txt +++ b/layers/vk_validation_error_database.txt @@ -337,7 +337,7 @@ VALIDATION_ERROR_00332~^~N~^~Unknown~^~vkCreateRenderPass~^~For more information VALIDATION_ERROR_00333~^~N~^~Unknown~^~vkCreateRenderPass~^~For more information refer to Vulkan Spec Section '7.1. Render Pass Creation' which states 'subpassCount must be greater than 0' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkRenderPassCreateInfo)~^~implicit VALIDATION_ERROR_00334~^~N~^~Unknown~^~vkCreateRenderPass~^~For more information refer to Vulkan Spec Section '7.1. Render Pass Creation' which states 'finalLayout must not be VK_IMAGE_LAYOUT_UNDEFINED or VK_IMAGE_LAYOUT_PREINITIALIZED' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkAttachmentStoreOp)~^~ VALIDATION_ERROR_00335~^~N~^~Unknown~^~vkCreateRenderPass~^~For more information refer to Vulkan Spec Section '7.1. Render Pass Creation' which states 'flags must be a valid combination of VkAttachmentDescriptionFlagBits values' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkAttachmentStoreOp)~^~implicit, TBD in parameter validation layer. -VALIDATION_ERROR_00336~^~N~^~Unknown~^~vkCreateRenderPass~^~For more information refer to Vulkan Spec Section '7.1. Render Pass Creation' which states 'format must be a valid VkFormat value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkAttachmentStoreOp)~^~implicit +VALIDATION_ERROR_00336~^~Y~^~Unknown~^~vkCreateRenderPass~^~For more information refer to Vulkan Spec Section '7.1. Render Pass Creation' which states 'format must be a valid VkFormat value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkAttachmentStoreOp)~^~implicit VALIDATION_ERROR_00337~^~Y~^~Unknown~^~vkCreateRenderPass~^~For more information refer to Vulkan Spec Section '7.1. Render Pass Creation' which states 'samples must be a valid VkSampleCountFlagBits value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkAttachmentStoreOp)~^~implicit VALIDATION_ERROR_00338~^~N~^~Unknown~^~vkCreateRenderPass~^~For more information refer to Vulkan Spec Section '7.1. Render Pass Creation' which states 'loadOp must be a valid VkAttachmentLoadOp value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkAttachmentStoreOp)~^~implicit VALIDATION_ERROR_00339~^~N~^~Unknown~^~vkCreateRenderPass~^~For more information refer to Vulkan Spec Section '7.1. Render Pass Creation' which states 'storeOp must be a valid VkAttachmentStoreOp value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkAttachmentStoreOp)~^~implicit |
