On 12/07/2017 08:12 AM, Jason Ekstrand wrote:
> ---
>  src/compiler/spirv/spirv_to_nir.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/src/compiler/spirv/spirv_to_nir.c 
> b/src/compiler/spirv/spirv_to_nir.c
> index 11c8c2a..4b93b11 100644
> --- a/src/compiler/spirv/spirv_to_nir.c
> +++ b/src/compiler/spirv/spirv_to_nir.c
> @@ -934,7 +934,11 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode,
>        struct vtn_type *base = vtn_value(b, w[2], vtn_value_type_type)->type;
>        unsigned elems = w[3];
>  
> -      vtn_assert(glsl_type_is_scalar(base->type));
> +      vtn_fail_if(base->base_type != vtn_base_type_scalar,
> +                  "Base type for OpTypeVector must be a scalar");
> +      vtn_fail_if(elems < 2 || elems > 4,
> +                  "Invalid component count for OpTypeVector");
> +
>        val->type->base_type = vtn_base_type_vector;
>        val->type->type = glsl_vector_type(glsl_get_base_type(base->type), 
> elems);
>        val->type->length = elems;
> @@ -947,12 +951,16 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode,
>        struct vtn_type *base = vtn_value(b, w[2], vtn_value_type_type)->type;
>        unsigned columns = w[3];
>  
> -      vtn_assert(glsl_type_is_vector(base->type));
> +      vtn_fail_if(columns < 2 || columns > 4,
> +                  "Invalid column count for OpTypeMatrix");
> +

I think we should still check glsl_type_is_vector here.  The
glsl_type_is_error check below will catch that case, but we'll give a
better error message with the explicit check here.

>        val->type->base_type = vtn_base_type_matrix;
>        val->type->type = glsl_matrix_type(glsl_get_base_type(base->type),
>                                           
> glsl_get_vector_elements(base->type),
>                                           columns);
> -      vtn_assert(!glsl_type_is_error(val->type->type));
> +      vtn_fail_if(glsl_type_is_error(val->type->type),
> +                  "Unsupported base type for OpTypeMatrix");
> +      assert(!glsl_type_is_error(val->type->type));
>        val->type->length = columns;
>        val->type->array_element = base;
>        val->type->row_major = false;
> 

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to