aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony-LunarG <tony@lunarg.com>2019-08-23 09:57:10 -0600
committerTony Barbour <tony@lunarg.com>2019-08-27 09:20:56 -0600
commitd6744bcd32aa7a4154d3cfdd74d83a23d8b66077 (patch)
tree7fbf84977ac3ada96d648630ec0d2a346ece7fbf
parentc8887f81511c334468b66a01e6fc333de8b18984 (diff)
downloadvulkan-validation-layers-d6744bcd32aa7a4154d3cfdd74d83a23d8b66077.tar.gz
layers: Error if iub extension not enabled
Change-Id: I9a026fcbf8a84af9bcea9963f1cd951f2b7fa4b4
-rw-r--r--layers/core_validation.cpp2
-rw-r--r--layers/descriptor_sets.cpp30
-rw-r--r--layers/descriptor_sets.h3
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: