diff options
author | Tony-LunarG <tony@lunarg.com> | 2019-08-23 09:57:10 -0600 |
---|---|---|
committer | Tony Barbour <tony@lunarg.com> | 2019-08-27 09:20:56 -0600 |
commit | d6744bcd32aa7a4154d3cfdd74d83a23d8b66077 (patch) | |
tree | 7fbf84977ac3ada96d648630ec0d2a346ece7fbf | |
parent | c8887f81511c334468b66a01e6fc333de8b18984 (diff) | |
download | vulkan-validation-layers-d6744bcd32aa7a4154d3cfdd74d83a23d8b66077.tar.gz |
layers: Error if iub extension not enabled
Change-Id: I9a026fcbf8a84af9bcea9963f1cd951f2b7fa4b4
-rw-r--r-- | layers/core_validation.cpp | 2 | ||||
-rw-r--r-- | layers/descriptor_sets.cpp | 30 | ||||
-rw-r--r-- | layers/descriptor_sets.h | 3 |
3 files changed, 22 insertions, 13 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 2a818d81b..3de906ff7 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -5401,7 +5401,7 @@ bool CoreChecks::PreCallValidateCreateDescriptorSetLayout(VkDevice device, const return cvdescriptorset::ValidateDescriptorSetLayoutCreateInfo( report_data, pCreateInfo, device_extensions.vk_khr_push_descriptor, phys_dev_ext_props.max_push_descriptors, device_extensions.vk_ext_descriptor_indexing, &enabled_features.descriptor_indexing, &enabled_features.inline_uniform_block, - &phys_dev_ext_props.inline_uniform_block_props); + &phys_dev_ext_props.inline_uniform_block_props, &device_extensions); } void ValidationStateTracker::PostCallRecordCreateDescriptorSetLayout(VkDevice device, diff --git a/layers/descriptor_sets.cpp b/layers/descriptor_sets.cpp index 2b394e9de..8dcdf8b44 100644 --- a/layers/descriptor_sets.cpp +++ b/layers/descriptor_sets.cpp @@ -318,7 +318,7 @@ bool cvdescriptorset::ValidateDescriptorSetLayoutCreateInfo( const uint32_t max_push_descriptors, const bool descriptor_indexing_ext, const VkPhysicalDeviceDescriptorIndexingFeaturesEXT *descriptor_indexing_features, const VkPhysicalDeviceInlineUniformBlockFeaturesEXT *inline_uniform_block_features, - const VkPhysicalDeviceInlineUniformBlockPropertiesEXT *inline_uniform_block_props) { + const VkPhysicalDeviceInlineUniformBlockPropertiesEXT *inline_uniform_block_props, const DeviceExtensions *device_extensions) { bool skip = false; std::unordered_set<uint32_t> bindings; uint64_t total_descriptors = 0; @@ -370,16 +370,24 @@ bool cvdescriptorset::ValidateDescriptorSetLayoutCreateInfo( } if (binding_info.descriptorType == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT) { - if ((binding_info.descriptorCount % 4) != 0) { - skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, - "VUID-VkDescriptorSetLayoutBinding-descriptorType-02209", - "descriptorCount =(%" PRIu32 ") must be a multiple of 4", binding_info.descriptorCount); - } - if (binding_info.descriptorCount > inline_uniform_block_props->maxInlineUniformBlockSize) { - skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, - "VUID-VkDescriptorSetLayoutBinding-descriptorType-02210", - "descriptorCount =(%" PRIu32 ") must be less than or equal to maxInlineUniformBlockSize", - binding_info.descriptorCount); + if (!device_extensions->vk_ext_inline_uniform_block) { + skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, 0, + "UNASSIGNED-Extension not enabled", + "Creating VkDescriptorSetLayout with descriptor type VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT " + "but extension %s is missing", + VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME); + } else { + if ((binding_info.descriptorCount % 4) != 0) { + skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, + "VUID-VkDescriptorSetLayoutBinding-descriptorType-02209", + "descriptorCount =(%" PRIu32 ") must be a multiple of 4", binding_info.descriptorCount); + } + if (binding_info.descriptorCount > inline_uniform_block_props->maxInlineUniformBlockSize) { + skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, + "VUID-VkDescriptorSetLayoutBinding-descriptorType-02210", + "descriptorCount =(%" PRIu32 ") must be less than or equal to maxInlineUniformBlockSize", + binding_info.descriptorCount); + } } } diff --git a/layers/descriptor_sets.h b/layers/descriptor_sets.h index dadf702b3..598f4395e 100644 --- a/layers/descriptor_sets.h +++ b/layers/descriptor_sets.h @@ -379,7 +379,8 @@ bool ValidateDescriptorSetLayoutCreateInfo(const debug_report_data *report_data, const bool descriptor_indexing_ext, const VkPhysicalDeviceDescriptorIndexingFeaturesEXT *descriptor_indexing_features, const VkPhysicalDeviceInlineUniformBlockFeaturesEXT *inline_uniform_block_features, - const VkPhysicalDeviceInlineUniformBlockPropertiesEXT *inline_uniform_block_props); + const VkPhysicalDeviceInlineUniformBlockPropertiesEXT *inline_uniform_block_props, + const DeviceExtensions *device_extensions); class SamplerDescriptor : public Descriptor { public: |