aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2017-01-27 14:50:23 -0700
committerMark Lobodzinski <mark@lunarg.com>2017-01-31 09:55:10 -0700
commit33dc2b9e2c0b56dd81868eb66a29e959c15caf5b (patch)
tree30629aee8fbfc3bdca8d0e3811d4b68161b8a21c
parentc1b9d6d28618ccd48a7fd07501dfe62a610b272f (diff)
downloadusermoji-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.cpp1
-rw-r--r--layers/image.cpp24
-rw-r--r--layers/image.h3
-rw-r--r--layers/parameter_validation.cpp10
-rw-r--r--layers/vk_validation_error_database.txt2
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