[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