From ba15b1b58b80852f774b490e0af68cdba8d08710 Mon Sep 17 00:00:00 2001 From: Maciej Jesionowski Date: Wed, 14 Dec 2016 11:01:21 +0100 Subject: layers: GH1260, SPARSE_BINDING_BIT validation - add error message for size (error 00663) - add error messages for buffer and image flags (error 00669 and 02160) - remove obsolete TODOs - fix a typo in vkCreateImage validation, add error code Change-Id: I50d6111c4aed1b348119a9664ec299f7c2cb7884 --- layers/parameter_validation.cpp | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'layers/parameter_validation.cpp') diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp index 36dd87dc..62963294 100644 --- a/layers/parameter_validation.cpp +++ b/layers/parameter_validation.cpp @@ -2332,20 +2332,13 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateBuffer(VkDevice device, const VkBufferCreat assert(device_data != nullptr); debug_report_data *report_data = device_data->report_data; - // TODO: Add check for VALIDATION_ERROR_00660 - // TODO: Add check for VALIDATION_ERROR_00661 - // TODO: Add check for VALIDATION_ERROR_00662 - // TODO: Add check for VALIDATION_ERROR_00670 - // TODO: Add check for VALIDATION_ERROR_00671 - // TODO: Add check for VALIDATION_ERROR_00672 - // TODO: Add check for VALIDATION_ERROR_00673 - // TODO: Add check for VALIDATION_ERROR_00674 - // TODO: Add check for VALIDATION_ERROR_00675 - // TODO: Note that the above errors need to be generated from the next function, which is codegened. - // TODO: Add check for VALIDATION_ERROR_00663 skip |= parameter_validation_vkCreateBuffer(report_data, pCreateInfo, pAllocator, pBuffer); if (pCreateInfo != nullptr) { + // Buffer size must be greater than 0 (error 00663) + skip |= + ValidateGreaterThan(report_data, "vkCreateBuffer", "pCreateInfo->size", static_cast(pCreateInfo->size), 0u); + // Validation for parameters excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml if (pCreateInfo->sharingMode == VK_SHARING_MODE_CONCURRENT) { // If sharingMode is VK_SHARING_MODE_CONCURRENT, queueFamilyIndexCount must be greater than 1 @@ -2372,6 +2365,17 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateBuffer(VkDevice device, const VkBufferCreat skip |= validate_queue_family_indices(device_data, "vkCreateBuffer", "pCreateInfo->pQueueFamilyIndices", pCreateInfo->queueFamilyIndexCount, pCreateInfo->pQueueFamilyIndices); } + + // If flags contains VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT or VK_BUFFER_CREATE_SPARSE_ALIASED_BIT, it must also contain + // VK_BUFFER_CREATE_SPARSE_BINDING_BIT + if (((pCreateInfo->flags & (VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT | VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)) != 0) && + ((pCreateInfo->flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) != VK_BUFFER_CREATE_SPARSE_BINDING_BIT)) { + skip |= + log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, + __LINE__, VALIDATION_ERROR_00669, LayerName, + "vkCreateBuffer: if pCreateInfo->flags contains VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT or " + "VK_BUFFER_CREATE_SPARSE_ALIASED_BIT, it must also contain VK_BUFFER_CREATE_SPARSE_BINDING_BIT"); + } } if (!skip) { @@ -2511,8 +2515,9 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateImage(VkDevice device, const VkImageCreateI if (((pCreateInfo->flags & (VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT | VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)) != 0) && ((pCreateInfo->flags & VK_IMAGE_CREATE_SPARSE_BINDING_BIT) != VK_IMAGE_CREATE_SPARSE_BINDING_BIT)) { skip |= - log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, LayerName, - "vkCreateImage: pCreateInfo->flags contains VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or " + log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, + __LINE__, VALIDATION_ERROR_02160, LayerName, + "vkCreateImage: if pCreateInfo->flags contains VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or " "VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must also contain VK_IMAGE_CREATE_SPARSE_BINDING_BIT"); } } -- cgit v1.2.3