Re: [Mesa-dev] [PATCH v2 04/11] glsl: Pack integer and double varyings as flat even if interpolation mode is none

2016-06-30 Thread Kenneth Graunke
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

2016-06-23 Thread Ian Romanick
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

2016-06-16 Thread Ian Romanick
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

2016-06-16 Thread Ian Romanick
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