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 <kenn...@whitecape.org> Reviewed-by: Jason Ekstrand <ja...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev