[Mesa-dev] [PATCH 03/11] spirv: add vtn_builder_create

Timothy Arceri tarceri at itsqueeze.com
Fri Mar 16 10:24:34 UTC 2018


nit: can we rename it vtn_builder_create -> vtn_create_builder with that.

Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>

On 08/03/18 19:19, Alejandro PiƱeiro wrote:
> Refactored from spirv_to_nir, in order to be reused later.
> ---
>   src/compiler/spirv/spirv_to_nir.c | 48 ++++++++++++++++++++++++++-------------
>   src/compiler/spirv/vtn_private.h  |  4 ++++
>   2 files changed, 36 insertions(+), 16 deletions(-)
>
> diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
> index 6a358c59731..fb63df209ce 100644
> --- a/src/compiler/spirv/spirv_to_nir.c
> +++ b/src/compiler/spirv/spirv_to_nir.c
> @@ -3945,12 +3945,10 @@ vtn_handle_body_instruction(struct vtn_builder *b, SpvOp opcode,
>      return true;
>   }
>   
> -nir_function *
> -spirv_to_nir(const uint32_t *words, size_t word_count,
> -             struct nir_spirv_specialization *spec, unsigned num_spec,
> -             gl_shader_stage stage, const char *entry_point_name,
> -             const struct spirv_to_nir_options *options,
> -             const nir_shader_compiler_options *nir_options)
> +struct vtn_builder*
> +vtn_builder_create(const uint32_t *words, size_t word_count,
> +                   gl_shader_stage stage, const char *entry_point_name,
> +                   const struct spirv_to_nir_options *options)
>   {
>      /* Initialize the stn_builder object */
>      struct vtn_builder *b = rzalloc(NULL, struct vtn_builder);
> @@ -3964,14 +3962,6 @@ spirv_to_nir(const uint32_t *words, size_t word_count,
>      b->entry_point_name = entry_point_name;
>      b->options = options;
>   
> -   /* See also _vtn_fail() */
> -   if (setjmp(b->fail_jump)) {
> -      ralloc_free(b);
> -      return NULL;
> -   }
> -
> -   const uint32_t *word_end = words + word_count;
> -
>      /* Handle the SPIR-V header (first 4 dwords)  */
>      vtn_assert(word_count > 5);
>   
> @@ -3981,11 +3971,37 @@ spirv_to_nir(const uint32_t *words, size_t word_count,
>      unsigned value_id_bound = words[3];
>      vtn_assert(words[4] == 0);
>   
> -   words+= 5;
> -
>      b->value_id_bound = value_id_bound;
>      b->values = rzalloc_array(b, struct vtn_value, value_id_bound);
>   
> +   return b;
> +}
> +
> +nir_function *
> +spirv_to_nir(const uint32_t *words, size_t word_count,
> +             struct nir_spirv_specialization *spec, unsigned num_spec,
> +             gl_shader_stage stage, const char *entry_point_name,
> +             const struct spirv_to_nir_options *options,
> +             const nir_shader_compiler_options *nir_options)
> +
> +{
> +   const uint32_t *word_end = words + word_count;
> +
> +   struct vtn_builder *b = vtn_builder_create(words, word_count,
> +                                              stage, entry_point_name,
> +                                              options);
> +
> +   if (b == NULL)
> +      return NULL;
> +
> +   /* See also _vtn_fail() */
> +   if (setjmp(b->fail_jump)) {
> +      ralloc_free(b);
> +      return NULL;
> +   }
> +
> +   words+= 5;
> +
>      /* Handle all the preamble instructions */
>      words = vtn_foreach_instruction(b, words, word_end,
>                                      vtn_handle_preamble_instruction);
> diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h
> index a8fa612384f..a0934158df8 100644
> --- a/src/compiler/spirv/vtn_private.h
> +++ b/src/compiler/spirv/vtn_private.h
> @@ -719,6 +719,10 @@ void vtn_handle_subgroup(struct vtn_builder *b, SpvOp opcode,
>   bool vtn_handle_glsl450_instruction(struct vtn_builder *b, uint32_t ext_opcode,
>                                       const uint32_t *words, unsigned count);
>   
> +struct vtn_builder* vtn_builder_create(const uint32_t *words, size_t word_count,
> +                                       gl_shader_stage stage, const char *entry_point_name,
> +                                       const struct spirv_to_nir_options *options);
> +
>   static inline uint32_t
>   vtn_align_u32(uint32_t v, uint32_t a)
>   {



More information about the mesa-dev mailing list