[Mesa-dev] [PATCH 2/8] glsl: Override the # of varying slots for ClipDistance and TessLevel*.

Marek Olšák maraeo at gmail.com
Sat Jan 7 15:17:50 UTC 2017


Hi, this breaks drawing for Qt apps on radeonsi. I won't look into it
right now, maybe next week. Any idea what's wrong here?

Marek

On Wed, Jan 4, 2017 at 12:07 PM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> Right now, this shouldn't have any effect, as all drivers use
> LowerClipDist and LowerTessFactors to turn the float[] arrays into
> vectors.
>
> However, it should help make it possible for drivers to avoid that
> lowering.
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/compiler/glsl/ir.cpp | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/src/compiler/glsl/ir.cpp b/src/compiler/glsl/ir.cpp
> index a77b9a9d857..69f1f1a7e5d 100644
> --- a/src/compiler/glsl/ir.cpp
> +++ b/src/compiler/glsl/ir.cpp
> @@ -1621,6 +1621,24 @@ ir_variable::get_extension_warning() const
>  unsigned
>  ir_variable::count_attribute_slots(bool is_vertex_stage) const
>  {
> +   /* GLSL contains several built-in arrays that control fixed-function
> +    * hardware, and are somewhat special.  Clip distances and tessellation
> +    * factors are exposed as float[] arrays, but typically are packed
> +    * tightly.  We want to expose these as taking a single varying slot
> +    * and let drivers handle laying them out appropriately.
> +    *
> +    * Skip this override if the arrays were lowered to vectors.
> +    */
> +   if (type->without_array()->is_scalar() &&
> +       (data.mode == ir_var_shader_in || data.mode == ir_var_shader_out) &&
> +       (data.location == VARYING_SLOT_CLIP_DIST0 ||
> +        data.location == VARYING_SLOT_CULL_DIST0 ||
> +        data.location == VARYING_SLOT_TESS_LEVEL_OUTER ||
> +        data.location == VARYING_SLOT_TESS_LEVEL_INNER)) {
> +      return type->length / 4;
> +   }
> +
> +   /* For normal variables, simply consult the type. */
>     bool is_vs_input = is_vertex_stage && this->data.mode == ir_var_shader_in;
>     return this->type->count_attribute_slots(is_vs_input);
>  }
> --
> 2.11.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list