diff options
| author | Chris Forbes <chrisforbes@google.com> | 2018-02-16 16:59:23 -0800 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2018-02-22 17:34:46 -0700 |
| commit | 89b3c4ad7109b671ab238a57bac6ba3b1ce056c7 (patch) | |
| tree | dbf54f31c99ec29e0506ca056321d85e35d2686a | |
| parent | b1d2ae349099c4628407b22390e7ef79cf08209d (diff) | |
| download | usermoji-89b3c4ad7109b671ab238a57bac6ba3b1ce056c7.tar.xz | |
layers: Fix validation of shader pipelines when a stage is broken
Present-but-broken stages need to still be considered present for
the purposes of walking `producer` forward. Otherwise a broken GS will
for example cause us to get confused and try to match the VS interface
against the FS.
Bug: #1600, others.
| -rw-r--r-- | layers/shader_validation.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/layers/shader_validation.cpp b/layers/shader_validation.cpp index aa3ec8a4..8cbc2407 100644 --- a/layers/shader_validation.cpp +++ b/layers/shader_validation.cpp @@ -1507,10 +1507,12 @@ bool validate_and_capture_pipeline_shader_state(layer_data *dev_data, PIPELINE_S for (; producer != fragment_stage && consumer <= fragment_stage; consumer++) { assert(shaders[producer]); - if (shaders[consumer] && shaders[consumer]->has_valid_spirv && shaders[producer]->has_valid_spirv) { - skip |= validate_interface_between_stages(report_data, shaders[producer], entrypoints[producer], - &shader_stage_attribs[producer], shaders[consumer], entrypoints[consumer], - &shader_stage_attribs[consumer]); + if (shaders[consumer]) { + if (shaders[consumer]->has_valid_spirv && shaders[producer]->has_valid_spirv) { + skip |= validate_interface_between_stages(report_data, shaders[producer], entrypoints[producer], + &shader_stage_attribs[producer], shaders[consumer], entrypoints[consumer], + &shader_stage_attribs[consumer]); + } producer = consumer; } |
