mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 07:10:09 +01:00
nir: Change nir_shader_get_entrypoint to return an impl.
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. v2: Fix one call I missed in ir3_compiler (caught by Eric). Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
parent
8479b03c58
commit
93bfa1d7a2
7 changed files with 14 additions and 18 deletions
|
|
@ -1902,7 +1902,7 @@ typedef struct nir_shader {
|
||||||
gl_shader_stage stage;
|
gl_shader_stage stage;
|
||||||
} nir_shader;
|
} nir_shader;
|
||||||
|
|
||||||
static inline nir_function *
|
static inline nir_function_impl *
|
||||||
nir_shader_get_entrypoint(nir_shader *shader)
|
nir_shader_get_entrypoint(nir_shader *shader)
|
||||||
{
|
{
|
||||||
assert(exec_list_length(&shader->functions) == 1);
|
assert(exec_list_length(&shader->functions) == 1);
|
||||||
|
|
@ -1910,7 +1910,8 @@ nir_shader_get_entrypoint(nir_shader *shader)
|
||||||
nir_function *func = exec_node_data(nir_function, func_node, node);
|
nir_function *func = exec_node_data(nir_function, func_node, node);
|
||||||
assert(func->return_type == glsl_void_type());
|
assert(func->return_type == glsl_void_type());
|
||||||
assert(func->num_params == 0);
|
assert(func->num_params == 0);
|
||||||
return func;
|
assert(func->impl);
|
||||||
|
return func->impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define nir_foreach_function(func, shader) \
|
#define nir_foreach_function(func, shader) \
|
||||||
|
|
@ -2378,7 +2379,8 @@ bool nir_lower_indirect_derefs(nir_shader *shader, nir_variable_mode modes);
|
||||||
|
|
||||||
bool nir_lower_locals_to_regs(nir_shader *shader);
|
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);
|
bool outputs, bool inputs);
|
||||||
|
|
||||||
void nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint);
|
void nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint);
|
||||||
|
|
|
||||||
|
|
@ -128,12 +128,7 @@ void
|
||||||
nir_lower_bitmap(nir_shader *shader,
|
nir_lower_bitmap(nir_shader *shader,
|
||||||
const nir_lower_bitmap_options *options)
|
const nir_lower_bitmap_options *options)
|
||||||
{
|
{
|
||||||
nir_function *function;
|
|
||||||
|
|
||||||
assert(shader->stage == MESA_SHADER_FRAGMENT);
|
assert(shader->stage == MESA_SHADER_FRAGMENT);
|
||||||
|
|
||||||
function = nir_shader_get_entrypoint(shader);
|
lower_bitmap_impl(nir_shader_get_entrypoint(shader), options);
|
||||||
|
|
||||||
if (function->impl)
|
|
||||||
lower_bitmap_impl(function->impl, options);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ create_shadow_temp(struct lower_io_state *state, nir_variable *var)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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)
|
bool outputs, bool inputs)
|
||||||
{
|
{
|
||||||
struct lower_io_state state;
|
struct lower_io_state state;
|
||||||
|
|
@ -157,7 +157,7 @@ nir_lower_io_to_temporaries(nir_shader *shader, nir_function *entrypoint,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
state.shader = shader;
|
state.shader = shader;
|
||||||
state.entrypoint = entrypoint->impl;
|
state.entrypoint = entrypoint;
|
||||||
|
|
||||||
if (inputs)
|
if (inputs)
|
||||||
exec_list_move_nodes_to(&shader->inputs, &state.old_inputs);
|
exec_list_move_nodes_to(&shader->inputs, &state.old_inputs);
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,5 @@ lower_impl(nir_function_impl *impl)
|
||||||
|
|
||||||
void nir_lower_passthrough_edgeflags(nir_shader *shader)
|
void nir_lower_passthrough_edgeflags(nir_shader *shader)
|
||||||
{
|
{
|
||||||
nir_function *function = nir_shader_get_entrypoint(shader);
|
lower_impl(nir_shader_get_entrypoint(shader));
|
||||||
if (function->impl)
|
|
||||||
lower_impl(function->impl);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2151,7 +2151,7 @@ static void
|
||||||
emit_instructions(struct ir3_compile *ctx)
|
emit_instructions(struct ir3_compile *ctx)
|
||||||
{
|
{
|
||||||
unsigned ninputs, noutputs;
|
unsigned ninputs, noutputs;
|
||||||
nir_function_impl *fxn = nir_shader_get_entrypoint(ctx->s)->impl;
|
nir_function_impl *fxn = nir_shader_get_entrypoint(ctx->s);
|
||||||
|
|
||||||
ninputs = (max_drvloc(&ctx->s->inputs) + 1) * 4;
|
ninputs = (max_drvloc(&ctx->s->inputs) + 1) * 4;
|
||||||
noutputs = (max_drvloc(&ctx->s->outputs) + 1) * 4;
|
noutputs = (max_drvloc(&ctx->s->outputs) + 1) * 4;
|
||||||
|
|
|
||||||
|
|
@ -168,7 +168,8 @@ anv_shader_compile_to_nir(struct anv_device *device,
|
||||||
nir_propagate_invariant(nir);
|
nir_propagate_invariant(nir);
|
||||||
nir_validate_shader(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_lower_system_values(nir);
|
||||||
nir_validate_shader(nir);
|
nir_validate_shader(nir);
|
||||||
|
|
@ -616,7 +617,7 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline,
|
||||||
|
|
||||||
unsigned num_rts = 0;
|
unsigned num_rts = 0;
|
||||||
struct anv_pipeline_binding rt_bindings[8];
|
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) {
|
nir_foreach_variable_safe(var, &nir->outputs) {
|
||||||
if (var->data.location < FRAG_RESULT_DATA0)
|
if (var->data.location < FRAG_RESULT_DATA0)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@ brw_blorp_compile_nir_shader(struct brw_context *brw, struct nir_shader *nir,
|
||||||
|
|
||||||
nir = brw_preprocess_nir(compiler, nir);
|
nir = brw_preprocess_nir(compiler, nir);
|
||||||
nir_remove_dead_variables(nir, nir_var_shader_in);
|
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
|
/* Uniforms are required to be lowered before going into compile_fs. For
|
||||||
* BLORP, we'll assume that whoever builds the shader sets the location
|
* BLORP, we'll assume that whoever builds the shader sets the location
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue