From 34d4b3e36765ff89db68c15464656167a2e9d79f Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Mon, 22 Apr 2019 16:33:38 +0200 Subject: [PATCH] glsl: Set default precision on record members MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Record types have their own slot to store the precision for each member in glsl_struct_field. Previously if the member didn’t have an explicit precision qualifier this was being left as GLSL_PRECISION_NONE. This patch makes it take into account the type’s default precision qualifier like it does for regular variables in apply_type_qualifier_to_variable. This has the additional benefit of correctly reporting an error when a float type is used in a struct without declaring the default type. Reviewed-by: Eric Anholt --- src/compiler/glsl/ast_to_hir.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index 4f062ba1543..26f72fc0925 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -7360,7 +7360,6 @@ ast_process_struct_or_iface_block_members(exec_list *instructions, fields[i].centroid = qual->flags.q.centroid ? 1 : 0; fields[i].sample = qual->flags.q.sample ? 1 : 0; fields[i].patch = qual->flags.q.patch ? 1 : 0; - fields[i].precision = qual->precision; fields[i].offset = -1; fields[i].explicit_xfb_buffer = explicit_xfb_buffer; fields[i].xfb_buffer = xfb_buffer; @@ -7558,6 +7557,16 @@ ast_process_struct_or_iface_block_members(exec_list *instructions, } } + /* Precision qualifiers do not hold any meaning in Desktop GLSL */ + if (state->es_shader) { + fields[i].precision = select_gles_precision(qual->precision, + field_type, + state, + &loc); + } else { + fields[i].precision = qual->precision; + } + i++; } }