[Mesa-dev] [PATCH v2] glsl: disallow implicit conversions in ESSL shaders

Timothy Arceri t_arceri at yahoo.com.au
Wed Jan 27 15:59:59 PST 2016


On Wed, 2016-01-27 at 17:18 -0500, Ilia Mirkin wrote:
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>

Surprising the CTS or deqp hasn't flushed this out already. I ran this
through Intels CI system and the only change in test results was the
bad piglit test.

Looks corrent to me.

Reviewed-by: Timothy Arceri <timothy.arceri at collabora.com>

> ---
> 
> OK, ran piglit on all of this and noticed the issue with state ==
> NULL in
> can_implicitly_convert_to. With that fixed, the only piglit
> regression is
> 
> spec/arb_blend_func_extended/arb_blend_func_extended-fbo-extended-
> blend-pattern_gles3: pass fail
> 
> Which is precisely the piglit that spurred this whole discussion.
> 
> (Piglit run was tests/quick.py on i965/hsw + gbm.)
> 
>  src/compiler/glsl/ast_to_hir.cpp | 4 ++++
>  src/compiler/glsl_types.cpp      | 7 +++++++
>  2 files changed, 11 insertions(+)
> 
> diff --git a/src/compiler/glsl/ast_to_hir.cpp
> b/src/compiler/glsl/ast_to_hir.cpp
> index dfd3196..3fca18a 100644
> --- a/src/compiler/glsl/ast_to_hir.cpp
> +++ b/src/compiler/glsl/ast_to_hir.cpp
> @@ -291,6 +291,10 @@ apply_implicit_conversion(const glsl_type *to,
> ir_rvalue * &from,
>     if (!state->is_version(120, 0))
>        return false;
>  
> +   /* ESSL does not allow implicit conversions */
> +   if (state->es_shader)
> +      return false;
> +
>     /* From page 27 (page 33 of the PDF) of the GLSL 1.50 spec:
>      *
>      *    "There are no implicit array or structure conversions. For
> diff --git a/src/compiler/glsl_types.cpp
> b/src/compiler/glsl_types.cpp
> index 17ebf07..ef6c3c6 100644
> --- a/src/compiler/glsl_types.cpp
> +++ b/src/compiler/glsl_types.cpp
> @@ -1139,6 +1139,13 @@ glsl_type::can_implicitly_convert_to(const
> glsl_type *desired,
>     if (this == desired)
>        return true;
>  
> +   /* ESSL does not allow implicit conversions. If there is no
> state, we're
> +    * doing intra-stage function linking where these checks have
> already been
> +    * done.
> +    */
> +   if (state && state->es_shader)
> +      return false;
> +
>     /* There is no conversion among matrix types. */
>     if (this->matrix_columns > 1 || desired->matrix_columns > 1)
>        return false;


More information about the mesa-dev mailing list