diff options
| author | Chris Forbes <chrisf@ijw.co.nz> | 2015-06-10 08:37:27 +1200 |
|---|---|---|
| committer | Chris Forbes <chrisf@ijw.co.nz> | 2015-06-10 10:29:45 +1200 |
| commit | 0a3802c418b065da061478dfcb5d79921ade5a98 (patch) | |
| tree | fb79fae7ba5e407d188ea5459a35f5997277b19e /layers/shader_checker.cpp | |
| parent | 0491aff6576b8606093dedc5ca2cd62c98506f9d (diff) | |
| download | usermoji-0a3802c418b065da061478dfcb5d79921ade5a98.tar.xz | |
shader_checker: fix invalid iterator dereference (LunarXchange #60)
V2: Fix broken logic; fix another case of the same problem in
interface between shader stages.
Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Diffstat (limited to 'layers/shader_checker.cpp')
| -rw-r--r-- | layers/shader_checker.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/layers/shader_checker.cpp b/layers/shader_checker.cpp index 63a56b3e..c5f42736 100644 --- a/layers/shader_checker.cpp +++ b/layers/shader_checker.cpp @@ -518,8 +518,8 @@ validate_interface_between_stages(shader_source const *producer, char const *pro while ((outputs.size() > 0 && a_it != outputs.end()) || ( inputs.size() && b_it != inputs.end())) { bool a_at_end = outputs.size() == 0 || a_it == outputs.end(); bool b_at_end = inputs.size() == 0 || b_it == inputs.end(); - auto a_first = (outputs.size() > 0 ? a_it->first : 0); - auto b_first = (inputs.size() > 0 ? b_it->first : 0); + auto a_first = a_at_end ? 0 : a_it->first; + auto b_first = b_at_end ? 0 : b_it->first; if (b_at_end || a_first < b_first) { sprintf(str, "%s writes to output location %d which is not consumed by %s\n", @@ -669,8 +669,8 @@ validate_vi_against_vs_inputs(VkPipelineVertexInputCreateInfo const *vi, shader_ while ((attribs.size() > 0 && it_a != attribs.end()) || (inputs.size() > 0 && it_b != inputs.end())) { bool a_at_end = attribs.size() == 0 || it_a == attribs.end(); bool b_at_end = inputs.size() == 0 || it_b == inputs.end(); - auto a_first = (attribs.size() > 0 ? it_a->first : 0); - auto b_first = (inputs.size() > 0 ? it_b->first : 0); + auto a_first = a_at_end ? 0 : it_a->first; + auto b_first = b_at_end ? 0 : it_b->first; if (b_at_end || a_first < b_first) { sprintf(str, "Vertex attribute at location %d not consumed by VS", a_first); layerCbMsg(VK_DBG_MSG_WARNING, VK_VALIDATION_LEVEL_0, NULL, 0, SHADER_CHECKER_OUTPUT_NOT_CONSUMED, "SC", str); |
