diff options
author | Ian Romanick <[email protected]> | 2016-06-14 14:38:04 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2016-07-05 16:58:27 -0700 |
commit | 3119871bd9558e5881466b70a4c366d2f83bba82 (patch) | |
tree | badc9fd39f6832a0fbcd8ae973b42cd6d5d3067d /src/compiler/glsl/lower_packed_varyings.cpp | |
parent | 73a6a4ce4975016d4f86d644b31d30bb6d3a38f8 (diff) |
glsl: Pack integer and double varyings as flat even if interpolation mode is none
v2: Also update varying_matches::compute_packing_class(). Suggested by
Timothy Arceri.
Signed-off-by: Ian Romanick <[email protected]>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96358
Reviewed-by: Kenneth Graunke <[email protected]>
Cc: "12.0" <[email protected]>
Cc: Gregory Hainaut <[email protected]>
Cc: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src/compiler/glsl/lower_packed_varyings.cpp')
-rw-r--r-- | src/compiler/glsl/lower_packed_varyings.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/compiler/glsl/lower_packed_varyings.cpp b/src/compiler/glsl/lower_packed_varyings.cpp index a897d2fb59b..2b347399cea 100644 --- a/src/compiler/glsl/lower_packed_varyings.cpp +++ b/src/compiler/glsl/lower_packed_varyings.cpp @@ -273,11 +273,11 @@ lower_packed_varyings_visitor::run(struct gl_linked_shader *shader) continue; /* This lowering pass is only capable of packing floats and ints - * together when their interpolation mode is "flat". Therefore, to be - * safe, caller should ensure that integral varyings always use flat - * interpolation, even when this is not required by GLSL. + * together when their interpolation mode is "flat". Treat integers as + * being flat when the interpolation mode is none. */ assert(var->data.interpolation == INTERP_QUALIFIER_FLAT || + var->data.interpolation == INTERP_QUALIFIER_NONE || !var->type->contains_integer()); /* Clone the variable for program resource list before @@ -607,7 +607,7 @@ lower_packed_varyings_visitor::get_packed_varying_deref( if (this->packed_varyings[slot] == NULL) { char *packed_name = ralloc_asprintf(this->mem_ctx, "packed:%s", name); const glsl_type *packed_type; - if (unpacked_var->data.interpolation == INTERP_QUALIFIER_FLAT) + if (unpacked_var->is_interpolation_flat()) packed_type = glsl_type::ivec4_type; else packed_type = glsl_type::vec4_type; @@ -627,7 +627,8 @@ lower_packed_varyings_visitor::get_packed_varying_deref( packed_var->data.centroid = unpacked_var->data.centroid; packed_var->data.sample = unpacked_var->data.sample; packed_var->data.patch = unpacked_var->data.patch; - packed_var->data.interpolation = unpacked_var->data.interpolation; + packed_var->data.interpolation = packed_type == glsl_type::ivec4_type + ? unsigned(INTERP_QUALIFIER_FLAT) : unpacked_var->data.interpolation; packed_var->data.location = location; packed_var->data.precision = unpacked_var->data.precision; packed_var->data.always_active_io = unpacked_var->data.always_active_io; |