diff options
| author | Chris Forbes <chrisforbes@google.com> | 2016-11-30 12:55:40 +1300 |
|---|---|---|
| committer | Chris Forbes <chrisforbes@google.com> | 2016-12-02 09:46:33 +1300 |
| commit | d4e97fddd10559adff99c29751c8779b73ddffe0 (patch) | |
| tree | 2a8d2a244d09e7bf5418aa2c35698cd630b643ad /layers | |
| parent | 5401d6c2e26983f080566a507927054c07cc8015 (diff) | |
| download | usermoji-d4e97fddd10559adff99c29751c8779b73ddffe0.tar.xz | |
layers: Track precision for interface block members too
Signed-off-by: Chris Forbes <chrisforbes@google.com>
Diffstat (limited to 'layers')
| -rw-r--r-- | layers/core_validation.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index f6fb7b0f..ea852852 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -1449,6 +1449,7 @@ static void collect_interface_block_members(shader_module const *src, } std::unordered_map<unsigned, unsigned> member_components; + std::unordered_map<unsigned, unsigned> member_relaxed_precision; /* Walk all the OpMemberDecorate for type's result id -- first pass, collect components. */ for (auto insn : *src) { @@ -1459,6 +1460,10 @@ static void collect_interface_block_members(shader_module const *src, unsigned component = insn.word(4); member_components[member_index] = component; } + + if (insn.word(3) == spv::DecorationRelaxedPrecision) { + member_relaxed_precision[member_index] = 1; + } } } @@ -1473,6 +1478,7 @@ static void collect_interface_block_members(shader_module const *src, unsigned num_locations = get_locations_consumed_by_type(src, member_type_id, false); auto component_it = member_components.find(member_index); unsigned component = component_it == member_components.end() ? 0 : component_it->second; + bool is_relaxed_precision = member_relaxed_precision.find(member_index) != member_relaxed_precision.end(); for (unsigned int offset = 0; offset < num_locations; offset++) { interface_var v = {}; @@ -1482,6 +1488,7 @@ static void collect_interface_block_members(shader_module const *src, v.offset = offset; v.is_patch = is_patch; v.is_block_member = true; + v.is_relaxed_precision = is_relaxed_precision; (*out)[std::make_pair(location + offset, component)] = v; } } |
