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

Reviewed-by: Timothy Arceri <tarc...@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)
  {

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

Reply via email to