[Mesa-dev] [PATCH v1] nir: Length of boolean vtn_value now is 1

apinheiro apinheiro at igalia.com
Thu Jan 17 10:34:41 UTC 2019


I was waiting Jason to chime in, but just in case he is too busy I took 
a look in detail to the patch. It LGTM, so assuming it passes intel CI:

Reviewed-by: Alejandro PiƱeiro <apinheiro at igalia.com>

On 15/1/19 12:08, Sergii Romantsov wrote:
> During conversion type-length was lost due to math.
>
> CC: Jason Ekstrand <jason.ekstrand at intel.com>
> Fixes: 44227453ec03 (nir: Switch to using 1-bit Booleans for almost everything)
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109353
> Signed-off-by: Sergii Romantsov <sergii.romantsov at globallogic.com>
> ---
>   src/compiler/spirv/spirv_to_nir.c | 9 ++++++---
>   1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
> index e3dc619..faad771 100644
> --- a/src/compiler/spirv/spirv_to_nir.c
> +++ b/src/compiler/spirv/spirv_to_nir.c
> @@ -1042,14 +1042,16 @@ vtn_type_layout_std430(struct vtn_builder *b, struct vtn_type *type,
>   {
>      switch (type->base_type) {
>      case vtn_base_type_scalar: {
> -      uint32_t comp_size = glsl_get_bit_size(type->type) / 8;
> +      uint32_t comp_size = glsl_type_is_boolean(type->type)
> +         ? 1 : glsl_get_bit_size(type->type) / 8;
>         *size_out = comp_size;
>         *align_out = comp_size;
>         return type;
>      }
>   
>      case vtn_base_type_vector: {
> -      uint32_t comp_size = glsl_get_bit_size(type->type) / 8;
> +      uint32_t comp_size = glsl_type_is_boolean(type->type)
> +         ? 1 : glsl_get_bit_size(type->type) / 8;
>         unsigned align_comps = type->length == 3 ? 4 : type->length;
>         *size_out = comp_size * type->length,
>         *align_out = comp_size * align_comps;
> @@ -1168,7 +1170,8 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode,
>         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;
> -      val->type->stride = glsl_get_bit_size(base->type) / 8;
> +      val->type->stride = glsl_type_is_boolean(val->type->type)
> +         ? 1 : glsl_get_bit_size(base->type) / 8;
>         val->type->array_element = base;
>         break;
>      }


More information about the mesa-dev mailing list