aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Forbes <chrisforbes@google.com>2018-02-16 16:59:23 -0800
committerTobin Ehlis <tobine@google.com>2018-02-22 17:34:46 -0700
commit89b3c4ad7109b671ab238a57bac6ba3b1ce056c7 (patch)
treedbf54f31c99ec29e0506ca056321d85e35d2686a
parentb1d2ae349099c4628407b22390e7ef79cf08209d (diff)
downloadusermoji-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.cpp10
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;
}