mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 15:40:11 +01:00
intel/nir: Break the linking code into a helper in brw_nir.c
Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com> Cc: mesa-stable@lists.freedesktop.org
This commit is contained in:
parent
7364f080f9
commit
3e63cf893f
3 changed files with 40 additions and 34 deletions
|
|
@ -675,6 +675,38 @@ brw_preprocess_nir(const struct brw_compiler *compiler, nir_shader *nir)
|
|||
return nir;
|
||||
}
|
||||
|
||||
void
|
||||
brw_nir_link_shaders(const struct brw_compiler *compiler,
|
||||
nir_shader **producer, nir_shader **consumer)
|
||||
{
|
||||
NIR_PASS_V(*producer, nir_remove_dead_variables, nir_var_shader_out);
|
||||
NIR_PASS_V(*consumer, nir_remove_dead_variables, nir_var_shader_in);
|
||||
|
||||
if (nir_remove_unused_varyings(*producer, *consumer)) {
|
||||
NIR_PASS_V(*producer, nir_lower_global_vars_to_local);
|
||||
NIR_PASS_V(*consumer, nir_lower_global_vars_to_local);
|
||||
|
||||
nir_variable_mode indirect_mask = (nir_variable_mode) 0;
|
||||
if (compiler->glsl_compiler_options[(*producer)->info.stage].EmitNoIndirectTemp)
|
||||
indirect_mask = nir_var_local;
|
||||
|
||||
/* The backend might not be able to handle indirects on
|
||||
* temporaries so we need to lower indirects on any of the
|
||||
* varyings we have demoted here.
|
||||
*/
|
||||
NIR_PASS_V(*producer, nir_lower_indirect_derefs, indirect_mask);
|
||||
NIR_PASS_V(*consumer, nir_lower_indirect_derefs, indirect_mask);
|
||||
|
||||
const bool p_is_scalar =
|
||||
compiler->scalar_stage[(*producer)->info.stage];
|
||||
*producer = brw_nir_optimize(*producer, compiler, p_is_scalar);
|
||||
|
||||
const bool c_is_scalar =
|
||||
compiler->scalar_stage[(*producer)->info.stage];
|
||||
*consumer = brw_nir_optimize(*consumer, compiler, c_is_scalar);
|
||||
}
|
||||
}
|
||||
|
||||
/* Prepare the given shader for codegen
|
||||
*
|
||||
* This function is intended to be called right before going into the actual
|
||||
|
|
|
|||
|
|
@ -95,6 +95,10 @@ void brw_nir_analyze_boolean_resolves(nir_shader *nir);
|
|||
nir_shader *brw_preprocess_nir(const struct brw_compiler *compiler,
|
||||
nir_shader *nir);
|
||||
|
||||
void
|
||||
brw_nir_link_shaders(const struct brw_compiler *compiler,
|
||||
nir_shader **producer, nir_shader **consumer);
|
||||
|
||||
bool brw_nir_lower_cs_intrinsics(nir_shader *nir,
|
||||
unsigned dispatch_width);
|
||||
void brw_nir_lower_vs_inputs(nir_shader *nir,
|
||||
|
|
|
|||
|
|
@ -282,40 +282,10 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg)
|
|||
if (shProg->_LinkedShaders[i] == NULL)
|
||||
continue;
|
||||
|
||||
nir_shader *producer = shProg->_LinkedShaders[i]->Program->nir;
|
||||
nir_shader *consumer = shProg->_LinkedShaders[next]->Program->nir;
|
||||
|
||||
NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out);
|
||||
NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in);
|
||||
|
||||
if (nir_remove_unused_varyings(producer, consumer)) {
|
||||
NIR_PASS_V(producer, nir_lower_global_vars_to_local);
|
||||
NIR_PASS_V(consumer, nir_lower_global_vars_to_local);
|
||||
|
||||
nir_variable_mode indirect_mask = (nir_variable_mode) 0;
|
||||
if (compiler->glsl_compiler_options[i].EmitNoIndirectTemp)
|
||||
indirect_mask = (nir_variable_mode) nir_var_local;
|
||||
|
||||
/* The backend might not be able to handle indirects on
|
||||
* temporaries so we need to lower indirects on any of the
|
||||
* varyings we have demoted here.
|
||||
*/
|
||||
NIR_PASS_V(producer, nir_lower_indirect_derefs, indirect_mask);
|
||||
NIR_PASS_V(consumer, nir_lower_indirect_derefs, indirect_mask);
|
||||
|
||||
const bool p_is_scalar =
|
||||
compiler->scalar_stage[producer->info.stage];
|
||||
producer = brw_nir_optimize(producer, compiler, p_is_scalar);
|
||||
|
||||
const bool c_is_scalar =
|
||||
compiler->scalar_stage[producer->info.stage];
|
||||
consumer = brw_nir_optimize(consumer, compiler, c_is_scalar);
|
||||
}
|
||||
|
||||
shProg->_LinkedShaders[i]->Program->nir = producer;
|
||||
shProg->_LinkedShaders[next]->Program->nir = consumer;
|
||||
|
||||
next = i;
|
||||
brw_nir_link_shaders(compiler,
|
||||
&shProg->_LinkedShaders[i]->Program->nir,
|
||||
&shProg->_LinkedShaders[next]->Program->nir);
|
||||
next = i;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue