[Mesa-dev] [PATCH 2/3] nir: Change nir_shader_get_entrypoint to return an impl.

Kenneth Graunke kenneth at whitecape.org
Thu Aug 25 04:15:23 UTC 2016


Jason suggested adding an assert(function->impl) here.  All callers
of this function actually want ->impl, so I decided just to change
the API.

We also change the nir_lower_io_to_temporaries API here.  All but one
caller passed nir_shader_get_entrypoint(), and with the previous commit,
it now uses a nir_function_impl internally.  Folding this change in
avoids the need to change it and change it back.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
---
 src/compiler/nir/nir.h                             | 8 +++++---
 src/compiler/nir/nir_lower_bitmap.c                | 7 +------
 src/compiler/nir/nir_lower_io_to_temporaries.c     | 4 ++--
 src/compiler/nir/nir_lower_passthrough_edgeflags.c | 4 +---
 src/intel/vulkan/anv_pipeline.c                    | 5 +++--
 src/mesa/drivers/dri/i965/blorp.c                  | 2 +-
 6 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index 5e527d8..36deb6c 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -1893,7 +1893,7 @@ typedef struct nir_shader {
    gl_shader_stage stage;
 } nir_shader;
 
-static inline nir_function *
+static inline nir_function_impl *
 nir_shader_get_entrypoint(nir_shader *shader)
 {
    assert(exec_list_length(&shader->functions) == 1);
@@ -1901,7 +1901,8 @@ nir_shader_get_entrypoint(nir_shader *shader)
    nir_function *func = exec_node_data(nir_function, func_node, node);
    assert(func->return_type == glsl_void_type());
    assert(func->num_params == 0);
-   return func;
+   assert(func->impl);
+   return func->impl;
 }
 
 #define nir_foreach_function(func, shader) \
@@ -2369,7 +2370,8 @@ bool nir_lower_indirect_derefs(nir_shader *shader, nir_variable_mode modes);
 
 bool nir_lower_locals_to_regs(nir_shader *shader);
 
-void nir_lower_io_to_temporaries(nir_shader *shader, nir_function *entrypoint,
+void nir_lower_io_to_temporaries(nir_shader *shader,
+                                 nir_function_impl *entrypoint,
                                  bool outputs, bool inputs);
 
 void nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint);
diff --git a/src/compiler/nir/nir_lower_bitmap.c b/src/compiler/nir/nir_lower_bitmap.c
index e182579..bd5c30f 100644
--- a/src/compiler/nir/nir_lower_bitmap.c
+++ b/src/compiler/nir/nir_lower_bitmap.c
@@ -128,12 +128,7 @@ void
 nir_lower_bitmap(nir_shader *shader,
                  const nir_lower_bitmap_options *options)
 {
-   nir_function *function;
-
    assert(shader->stage == MESA_SHADER_FRAGMENT);
 
-   function = nir_shader_get_entrypoint(shader);
-
-   if (function->impl)
-      lower_bitmap_impl(function->impl, options);
+   lower_bitmap_impl(nir_shader_get_entrypoint(shader), options);
 }
diff --git a/src/compiler/nir/nir_lower_io_to_temporaries.c b/src/compiler/nir/nir_lower_io_to_temporaries.c
index 80c352a..6cbc96e 100644
--- a/src/compiler/nir/nir_lower_io_to_temporaries.c
+++ b/src/compiler/nir/nir_lower_io_to_temporaries.c
@@ -127,7 +127,7 @@ create_shadow_temp(struct lower_io_state *state, nir_variable *var)
 }
 
 void
-nir_lower_io_to_temporaries(nir_shader *shader, nir_function *entrypoint,
+nir_lower_io_to_temporaries(nir_shader *shader, nir_function_impl *entrypoint,
                             bool outputs, bool inputs)
 {
    struct lower_io_state state;
@@ -136,7 +136,7 @@ nir_lower_io_to_temporaries(nir_shader *shader, nir_function *entrypoint,
       return;
 
    state.shader = shader;
-   state.entrypoint = entrypoint->impl;
+   state.entrypoint = entrypoint;
 
    if (inputs)
       exec_list_move_nodes_to(&shader->inputs, &state.old_inputs);
diff --git a/src/compiler/nir/nir_lower_passthrough_edgeflags.c b/src/compiler/nir/nir_lower_passthrough_edgeflags.c
index c570c8e..f34078c 100644
--- a/src/compiler/nir/nir_lower_passthrough_edgeflags.c
+++ b/src/compiler/nir/nir_lower_passthrough_edgeflags.c
@@ -52,7 +52,5 @@ lower_impl(nir_function_impl *impl)
 
 void nir_lower_passthrough_edgeflags(nir_shader *shader)
 {
-   nir_function *function = nir_shader_get_entrypoint(shader);
-   if (function->impl)
-      lower_impl(function->impl);
+   lower_impl(nir_shader_get_entrypoint(shader));
 }
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index 57e1bdd..2d35307 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -168,7 +168,8 @@ anv_shader_compile_to_nir(struct anv_device *device,
       nir_propagate_invariant(nir);
       nir_validate_shader(nir);
 
-      nir_lower_io_to_temporaries(entry_point->shader, entry_point, true, false);
+      nir_lower_io_to_temporaries(entry_point->shader, entry_point->impl,
+                                  true, false);
 
       nir_lower_system_values(nir);
       nir_validate_shader(nir);
@@ -613,7 +614,7 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline,
 
       unsigned num_rts = 0;
       struct anv_pipeline_binding rt_bindings[8];
-      nir_function_impl *impl = nir_shader_get_entrypoint(nir)->impl;
+      nir_function_impl *impl = nir_shader_get_entrypoint(nir);
       nir_foreach_variable_safe(var, &nir->outputs) {
          if (var->data.location < FRAG_RESULT_DATA0)
             continue;
diff --git a/src/mesa/drivers/dri/i965/blorp.c b/src/mesa/drivers/dri/i965/blorp.c
index 3100615..de627de 100644
--- a/src/mesa/drivers/dri/i965/blorp.c
+++ b/src/mesa/drivers/dri/i965/blorp.c
@@ -174,7 +174,7 @@ brw_blorp_compile_nir_shader(struct brw_context *brw, struct nir_shader *nir,
 
    nir = brw_preprocess_nir(compiler, nir);
    nir_remove_dead_variables(nir, nir_var_shader_in);
-   nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir)->impl);
+   nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir));
 
    /* Uniforms are required to be lowered before going into compile_fs.  For
     * BLORP, we'll assume that whoever builds the shader sets the location
-- 
2.9.3



More information about the mesa-dev mailing list