Re: [Mesa-dev] [PATCH v2 04/11] glsl: Pack integer and double varyings as flat even if interpolation mode is none
On Thursday, June 16, 2016 12:07:36 PM PDT Ian Romanick wrote: > From: Ian Romanick > > v2: Also update varying_matches::compute_packing_class(). Suggested by > Timothy Arceri. > > Signed-off-by: Ian Romanick > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96358 > Cc: "12.0" > Cc: Gregory Hainaut > Cc: Ilia Mirkin Reviewed-by: Kenneth Graunke signature.asc Description: This is a digitally signed message part. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH v2 04/11] glsl: Pack integer and double varyings as flat even if interpolation mode is none
ping On 06/16/2016 12:07 PM, Ian Romanick wrote: > From: Ian Romanick > > v2: Also update varying_matches::compute_packing_class(). Suggested by > Timothy Arceri. > > Signed-off-by: Ian Romanick > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96358 > Cc: "12.0" > Cc: Gregory Hainaut > Cc: Ilia Mirkin > --- > src/compiler/glsl/ir.h | 7 +++ > src/compiler/glsl/link_varyings.cpp | 3 ++- > src/compiler/glsl/lower_packed_varyings.cpp | 11 ++- > 3 files changed, 15 insertions(+), 6 deletions(-) > > diff --git a/src/compiler/glsl/ir.h b/src/compiler/glsl/ir.h > index 3629356..e5b8154 100644 > --- a/src/compiler/glsl/ir.h > +++ b/src/compiler/glsl/ir.h > @@ -590,6 +590,13 @@ public: >return this->u.state_slots; > } > > + inline bool is_interpolation_flat() const > + { > + return this->data.interpolation == INTERP_QUALIFIER_FLAT || > + this->type->contains_integer() || > + this->type->contains_double(); > + } > + > inline bool is_name_ralloced() const > { >return this->name != ir_variable::tmp_name; > diff --git a/src/compiler/glsl/link_varyings.cpp > b/src/compiler/glsl/link_varyings.cpp > index ef8bdbe..84686ee 100644 > --- a/src/compiler/glsl/link_varyings.cpp > +++ b/src/compiler/glsl/link_varyings.cpp > @@ -1610,7 +1610,8 @@ varying_matches::compute_packing_class(const > ir_variable *var) > unsigned packing_class = var->data.centroid | (var->data.sample << 1) | > (var->data.patch << 2); > packing_class *= 4; > - packing_class += var->data.interpolation; > + packing_class += var->is_interpolation_flat() > + ? INTERP_QUALIFIER_FLAT : data.interpolation; > return packing_class; > } > > diff --git a/src/compiler/glsl/lower_packed_varyings.cpp > b/src/compiler/glsl/lower_packed_varyings.cpp > index 130b8f6..9aa463c 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_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; > ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH v2 04/11] glsl: Pack integer and double varyings as flat even if interpolation mode is none
On 06/16/2016 12:07 PM, Ian Romanick wrote: > From: Ian Romanick > > v2: Also update varying_matches::compute_packing_class(). Suggested by > Timothy Arceri. > > Signed-off-by: Ian Romanick > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96358 > Cc: "12.0" > Cc: Gregory Hainaut > Cc: Ilia Mirkin > --- > src/compiler/glsl/ir.h | 7 +++ > src/compiler/glsl/link_varyings.cpp | 3 ++- > src/compiler/glsl/lower_packed_varyings.cpp | 11 ++- > 3 files changed, 15 insertions(+), 6 deletions(-) > > diff --git a/src/compiler/glsl/ir.h b/src/compiler/glsl/ir.h > index 3629356..e5b8154 100644 > --- a/src/compiler/glsl/ir.h > +++ b/src/compiler/glsl/ir.h > @@ -590,6 +590,13 @@ public: >return this->u.state_slots; > } > > + inline bool is_interpolation_flat() const > + { > + return this->data.interpolation == INTERP_QUALIFIER_FLAT || > + this->type->contains_integer() || > + this->type->contains_double(); > + } > + > inline bool is_name_ralloced() const > { >return this->name != ir_variable::tmp_name; > diff --git a/src/compiler/glsl/link_varyings.cpp > b/src/compiler/glsl/link_varyings.cpp > index ef8bdbe..84686ee 100644 > --- a/src/compiler/glsl/link_varyings.cpp > +++ b/src/compiler/glsl/link_varyings.cpp > @@ -1610,7 +1610,8 @@ varying_matches::compute_packing_class(const > ir_variable *var) > unsigned packing_class = var->data.centroid | (var->data.sample << 1) | > (var->data.patch << 2); > packing_class *= 4; > - packing_class += var->data.interpolation; > + packing_class += var->is_interpolation_flat() > + ? INTERP_QUALIFIER_FLAT : data.interpolation; I had fixed the two bugs in this line, but I didn't squash the !fixup patch before sending this out. This should obviously be: packing_class += var->is_interpolation_flat() ? unsigned(INTERP_QUALIFIER_FLAT) : var->data.interpolation; D'oh! > return packing_class; > } > > diff --git a/src/compiler/glsl/lower_packed_varyings.cpp > b/src/compiler/glsl/lower_packed_varyings.cpp > index 130b8f6..9aa463c 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_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; > ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH v2 04/11] glsl: Pack integer and double varyings as flat even if interpolation mode is none
From: Ian Romanick v2: Also update varying_matches::compute_packing_class(). Suggested by Timothy Arceri. Signed-off-by: Ian Romanick Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96358 Cc: "12.0" Cc: Gregory Hainaut Cc: Ilia Mirkin --- src/compiler/glsl/ir.h | 7 +++ src/compiler/glsl/link_varyings.cpp | 3 ++- src/compiler/glsl/lower_packed_varyings.cpp | 11 ++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/compiler/glsl/ir.h b/src/compiler/glsl/ir.h index 3629356..e5b8154 100644 --- a/src/compiler/glsl/ir.h +++ b/src/compiler/glsl/ir.h @@ -590,6 +590,13 @@ public: return this->u.state_slots; } + inline bool is_interpolation_flat() const + { + return this->data.interpolation == INTERP_QUALIFIER_FLAT || + this->type->contains_integer() || + this->type->contains_double(); + } + inline bool is_name_ralloced() const { return this->name != ir_variable::tmp_name; diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp index ef8bdbe..84686ee 100644 --- a/src/compiler/glsl/link_varyings.cpp +++ b/src/compiler/glsl/link_varyings.cpp @@ -1610,7 +1610,8 @@ varying_matches::compute_packing_class(const ir_variable *var) unsigned packing_class = var->data.centroid | (var->data.sample << 1) | (var->data.patch << 2); packing_class *= 4; - packing_class += var->data.interpolation; + packing_class += var->is_interpolation_flat() + ? INTERP_QUALIFIER_FLAT : data.interpolation; return packing_class; } diff --git a/src/compiler/glsl/lower_packed_varyings.cpp b/src/compiler/glsl/lower_packed_varyings.cpp index 130b8f6..9aa463c 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_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; -- 2.5.5 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev