From d4e97fddd10559adff99c29751c8779b73ddffe0 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Wed, 30 Nov 2016 12:55:40 +1300 Subject: layers: Track precision for interface block members too Signed-off-by: Chris Forbes --- layers/core_validation.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'layers') 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 member_components; + std::unordered_map 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; } } -- cgit v1.2.3