diff options
| author | Chris Forbes <chrisforbes@google.com> | 2018-03-07 11:38:08 -0800 |
|---|---|---|
| committer | Chris Forbes <chrisf@ijw.co.nz> | 2018-03-08 09:12:03 -0800 |
| commit | 7bced67a7092676ec262a436ddd9e227dc5aa201 (patch) | |
| tree | 1d059bcf29014f66198413fde2b5af6bea291fbe /layers/shader_validation.cpp | |
| parent | 0cb687f3aa6d6afd205857eecbd61d5974d4b57e (diff) | |
| download | usermoji-7bced67a7092676ec262a436ddd9e227dc5aa201.tar.xz | |
layers: Require appropriate feature enabled for writable descriptors
Diffstat (limited to 'layers/shader_validation.cpp')
| -rw-r--r-- | layers/shader_validation.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/layers/shader_validation.cpp b/layers/shader_validation.cpp index 2c45bb3a..019d1a76 100644 --- a/layers/shader_validation.cpp +++ b/layers/shader_validation.cpp @@ -1175,7 +1175,8 @@ static bool require_extension(debug_report_data const *report_data, bool extensi return false; } -static bool validate_shader_capabilities(layer_data *dev_data, shader_module const *src) { +static bool validate_shader_capabilities(layer_data *dev_data, shader_module const *src, VkShaderStageFlagBits stage, + bool has_writable_descriptor) { bool skip = false; auto report_data = GetReportData(dev_data); @@ -1289,6 +1290,22 @@ static bool validate_shader_capabilities(layer_data *dev_data, shader_module con } } + if (has_writable_descriptor) { + switch (stage) { + case VK_SHADER_STAGE_COMPUTE_BIT: + /* No feature requirements for writes and atomics from compute + * stage */ + break; + case VK_SHADER_STAGE_FRAGMENT_BIT: + skip |= require_feature(report_data, enabledFeatures->fragmentStoresAndAtomics, "fragmentStoresAndAtomics"); + break; + default: + skip |= + require_feature(report_data, enabledFeatures->vertexPipelineStoresAndAtomics, "vertexPipelineStoresAndAtomics"); + break; + } + } + return skip; } @@ -1361,9 +1378,6 @@ static bool validate_pipeline_shader_stage(layer_data *dev_data, VkPipelineShade } } - // Validate shader capabilities against enabled device features - skip |= validate_shader_capabilities(dev_data, module); - // Mark accessible ids auto accessible_ids = mark_accessible_ids(module, entrypoint); @@ -1371,6 +1385,9 @@ static bool validate_pipeline_shader_stage(layer_data *dev_data, VkPipelineShade bool has_writable_descriptor = false; auto descriptor_uses = collect_interface_by_descriptor_slot(report_data, module, accessible_ids, &has_writable_descriptor); + // Validate shader capabilities against enabled device features + skip |= validate_shader_capabilities(dev_data, module, pStage->stage, has_writable_descriptor); + skip |= validate_specialization_offsets(report_data, pStage); skip |= validate_push_constant_usage(report_data, pipeline->pipeline_layout.push_constant_ranges.get(), module, accessible_ids, pStage->stage); |
