I was tempted to suggest to add a comment somewhere mentioning this policy change, but there are so many functions that Im not sure what would be that somewhere. Ramblings apart:
Reviewed-by: Alejandro Piñeiro <[email protected]> On 10/11/18 09:17, Kenneth Graunke wrote: > This moves nir_shader_clone() to the driver-specific compile function, > rather than the shared src/intel/compiler code. This allows i965 to do > key-specific passes before calling brw_compile_*. Vulkan should not > need this cloning as it doesn't compile multiple variants. > > We do need to continue cloning in the compute shader code because we > lower various things in NIR based on the SIMD width. > --- > src/intel/compiler/brw_compiler.h | 10 +++++----- > src/intel/compiler/brw_fs.cpp | 3 +-- > src/intel/compiler/brw_shader.cpp | 3 +-- > src/intel/compiler/brw_vec4.cpp | 3 +-- > src/intel/compiler/brw_vec4_gs_visitor.cpp | 3 +-- > src/intel/compiler/brw_vec4_tcs.cpp | 3 +-- > src/mesa/drivers/dri/i965/brw_cs.c | 2 +- > src/mesa/drivers/dri/i965/brw_gs.c | 2 +- > src/mesa/drivers/dri/i965/brw_tcs.c | 2 +- > src/mesa/drivers/dri/i965/brw_tes.c | 3 ++- > src/mesa/drivers/dri/i965/brw_vs.c | 2 +- > src/mesa/drivers/dri/i965/brw_wm.c | 2 +- > 12 files changed, 17 insertions(+), 21 deletions(-) > > diff --git a/src/intel/compiler/brw_compiler.h > b/src/intel/compiler/brw_compiler.h > index d8c9499065f..1daf935d7fe 100644 > --- a/src/intel/compiler/brw_compiler.h > +++ b/src/intel/compiler/brw_compiler.h > @@ -1238,7 +1238,7 @@ brw_compile_vs(const struct brw_compiler *compiler, > void *log_data, > void *mem_ctx, > const struct brw_vs_prog_key *key, > struct brw_vs_prog_data *prog_data, > - const struct nir_shader *shader, > + struct nir_shader *shader, > int shader_time_index, > char **error_str); > > @@ -1253,7 +1253,7 @@ brw_compile_tcs(const struct brw_compiler *compiler, > void *mem_ctx, > const struct brw_tcs_prog_key *key, > struct brw_tcs_prog_data *prog_data, > - const struct nir_shader *nir, > + struct nir_shader *nir, > int shader_time_index, > char **error_str); > > @@ -1268,7 +1268,7 @@ brw_compile_tes(const struct brw_compiler *compiler, > void *log_data, > const struct brw_tes_prog_key *key, > const struct brw_vue_map *input_vue_map, > struct brw_tes_prog_data *prog_data, > - const struct nir_shader *shader, > + struct nir_shader *shader, > struct gl_program *prog, > int shader_time_index, > char **error_str); > @@ -1283,7 +1283,7 @@ brw_compile_gs(const struct brw_compiler *compiler, > void *log_data, > void *mem_ctx, > const struct brw_gs_prog_key *key, > struct brw_gs_prog_data *prog_data, > - const struct nir_shader *shader, > + struct nir_shader *shader, > struct gl_program *prog, > int shader_time_index, > char **error_str); > @@ -1330,7 +1330,7 @@ brw_compile_fs(const struct brw_compiler *compiler, > void *log_data, > void *mem_ctx, > const struct brw_wm_prog_key *key, > struct brw_wm_prog_data *prog_data, > - const struct nir_shader *shader, > + struct nir_shader *shader, > struct gl_program *prog, > int shader_time_index8, > int shader_time_index16, > diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp > index 3e083723471..aa29c8a4deb 100644 > --- a/src/intel/compiler/brw_fs.cpp > +++ b/src/intel/compiler/brw_fs.cpp > @@ -7119,7 +7119,7 @@ brw_compile_fs(const struct brw_compiler *compiler, > void *log_data, > void *mem_ctx, > const struct brw_wm_prog_key *key, > struct brw_wm_prog_data *prog_data, > - const nir_shader *src_shader, > + nir_shader *shader, > struct gl_program *prog, > int shader_time_index8, int shader_time_index16, > int shader_time_index32, bool allow_spilling, > @@ -7128,7 +7128,6 @@ brw_compile_fs(const struct brw_compiler *compiler, > void *log_data, > { > const struct gen_device_info *devinfo = compiler->devinfo; > > - nir_shader *shader = nir_shader_clone(mem_ctx, src_shader); > shader = brw_nir_apply_sampler_key(shader, compiler, &key->tex, true); > brw_nir_lower_fs_inputs(shader, devinfo, key); > brw_nir_lower_fs_outputs(shader); > diff --git a/src/intel/compiler/brw_shader.cpp > b/src/intel/compiler/brw_shader.cpp > index 798c799a828..b77bd798d17 100644 > --- a/src/intel/compiler/brw_shader.cpp > +++ b/src/intel/compiler/brw_shader.cpp > @@ -1189,7 +1189,7 @@ brw_compile_tes(const struct brw_compiler *compiler, > const struct brw_tes_prog_key *key, > const struct brw_vue_map *input_vue_map, > struct brw_tes_prog_data *prog_data, > - const nir_shader *src_shader, > + nir_shader *nir, > struct gl_program *prog, > int shader_time_index, > char **error_str) > @@ -1198,7 +1198,6 @@ brw_compile_tes(const struct brw_compiler *compiler, > const bool is_scalar = compiler->scalar_stage[MESA_SHADER_TESS_EVAL]; > const unsigned *assembly; > > - nir_shader *nir = nir_shader_clone(mem_ctx, src_shader); > nir->info.inputs_read = key->inputs_read; > nir->info.patch_inputs_read = key->patch_inputs_read; > > diff --git a/src/intel/compiler/brw_vec4.cpp b/src/intel/compiler/brw_vec4.cpp > index 74a4d09fc79..6ed07b72f31 100644 > --- a/src/intel/compiler/brw_vec4.cpp > +++ b/src/intel/compiler/brw_vec4.cpp > @@ -2828,12 +2828,11 @@ brw_compile_vs(const struct brw_compiler *compiler, > void *log_data, > void *mem_ctx, > const struct brw_vs_prog_key *key, > struct brw_vs_prog_data *prog_data, > - const nir_shader *src_shader, > + nir_shader *shader, > int shader_time_index, > char **error_str) > { > const bool is_scalar = compiler->scalar_stage[MESA_SHADER_VERTEX]; > - nir_shader *shader = nir_shader_clone(mem_ctx, src_shader); > shader = brw_nir_apply_sampler_key(shader, compiler, &key->tex, > is_scalar); > > const unsigned *assembly = NULL; > diff --git a/src/intel/compiler/brw_vec4_gs_visitor.cpp > b/src/intel/compiler/brw_vec4_gs_visitor.cpp > index c4c876a0d03..63ff27e5e08 100644 > --- a/src/intel/compiler/brw_vec4_gs_visitor.cpp > +++ b/src/intel/compiler/brw_vec4_gs_visitor.cpp > @@ -615,7 +615,7 @@ brw_compile_gs(const struct brw_compiler *compiler, void > *log_data, > void *mem_ctx, > const struct brw_gs_prog_key *key, > struct brw_gs_prog_data *prog_data, > - const nir_shader *src_shader, > + nir_shader *shader, > struct gl_program *prog, > int shader_time_index, > char **error_str) > @@ -625,7 +625,6 @@ brw_compile_gs(const struct brw_compiler *compiler, void > *log_data, > c.key = *key; > > const bool is_scalar = compiler->scalar_stage[MESA_SHADER_GEOMETRY]; > - nir_shader *shader = nir_shader_clone(mem_ctx, src_shader); > > /* The GLSL linker will have already matched up GS inputs and the outputs > * of prior stages. The driver does extend VS outputs in some cases, but > diff --git a/src/intel/compiler/brw_vec4_tcs.cpp > b/src/intel/compiler/brw_vec4_tcs.cpp > index 18c6dae8c10..be0969dda12 100644 > --- a/src/intel/compiler/brw_vec4_tcs.cpp > +++ b/src/intel/compiler/brw_vec4_tcs.cpp > @@ -378,7 +378,7 @@ brw_compile_tcs(const struct brw_compiler *compiler, > void *mem_ctx, > const struct brw_tcs_prog_key *key, > struct brw_tcs_prog_data *prog_data, > - const nir_shader *src_shader, > + nir_shader *nir, > int shader_time_index, > char **error_str) > { > @@ -387,7 +387,6 @@ brw_compile_tcs(const struct brw_compiler *compiler, > const bool is_scalar = compiler->scalar_stage[MESA_SHADER_TESS_CTRL]; > const unsigned *assembly; > > - nir_shader *nir = nir_shader_clone(mem_ctx, src_shader); > nir->info.outputs_written = key->outputs_written; > nir->info.patch_outputs_written = key->patch_outputs_written; > > diff --git a/src/mesa/drivers/dri/i965/brw_cs.c > b/src/mesa/drivers/dri/i965/brw_cs.c > index 3ae54830f78..4d968c26656 100644 > --- a/src/mesa/drivers/dri/i965/brw_cs.c > +++ b/src/mesa/drivers/dri/i965/brw_cs.c > @@ -58,7 +58,7 @@ brw_codegen_cs_prog(struct brw_context *brw, > struct brw_cs_prog_data prog_data; > bool start_busy = false; > double start_time = 0; > - nir_shader *nir = cp->program.nir; > + nir_shader *nir = nir_shader_clone(mem_ctx, cp->program.nir); > > memset(&prog_data, 0, sizeof(prog_data)); > > diff --git a/src/mesa/drivers/dri/i965/brw_gs.c > b/src/mesa/drivers/dri/i965/brw_gs.c > index 55c2923bded..a35ce97db3e 100644 > --- a/src/mesa/drivers/dri/i965/brw_gs.c > +++ b/src/mesa/drivers/dri/i965/brw_gs.c > @@ -89,7 +89,7 @@ brw_codegen_gs_prog(struct brw_context *brw, > > void *mem_ctx = ralloc_context(NULL); > > - nir_shader *nir = gp->program.nir; > + nir_shader *nir = nir_shader_clone(mem_ctx, gp->program.nir); > > assign_gs_binding_table_offsets(devinfo, &gp->program, &prog_data); > > diff --git a/src/mesa/drivers/dri/i965/brw_tcs.c > b/src/mesa/drivers/dri/i965/brw_tcs.c > index 6e60a44fc10..86c09b92168 100644 > --- a/src/mesa/drivers/dri/i965/brw_tcs.c > +++ b/src/mesa/drivers/dri/i965/brw_tcs.c > @@ -84,7 +84,7 @@ brw_codegen_tcs_prog(struct brw_context *brw, struct > brw_program *tcp, > > void *mem_ctx = ralloc_context(NULL); > if (tcp) { > - nir = tcp->program.nir; > + nir = nir_shader_clone(mem_ctx, tcp->program.nir); > } else { > const nir_shader_compiler_options *options = > ctx->Const.ShaderCompilerOptions[MESA_SHADER_TESS_CTRL].NirOptions; > diff --git a/src/mesa/drivers/dri/i965/brw_tes.c > b/src/mesa/drivers/dri/i965/brw_tes.c > index 8f8f68530b7..567fed6f808 100644 > --- a/src/mesa/drivers/dri/i965/brw_tes.c > +++ b/src/mesa/drivers/dri/i965/brw_tes.c > @@ -70,7 +70,6 @@ brw_codegen_tes_prog(struct brw_context *brw, > const struct brw_compiler *compiler = brw->screen->compiler; > const struct gen_device_info *devinfo = &brw->screen->devinfo; > struct brw_stage_state *stage_state = &brw->tes.base; > - nir_shader *nir = tep->program.nir; > struct brw_tes_prog_data prog_data; > bool start_busy = false; > double start_time = 0; > @@ -79,6 +78,8 @@ brw_codegen_tes_prog(struct brw_context *brw, > > void *mem_ctx = ralloc_context(NULL); > > + nir_shader *nir = nir_shader_clone(mem_ctx, tep->program.nir); > + > brw_assign_common_binding_table_offsets(devinfo, &tep->program, > &prog_data.base.base, 0); > > diff --git a/src/mesa/drivers/dri/i965/brw_vs.c > b/src/mesa/drivers/dri/i965/brw_vs.c > index d557e82f9fc..01ddf9a4851 100644 > --- a/src/mesa/drivers/dri/i965/brw_vs.c > +++ b/src/mesa/drivers/dri/i965/brw_vs.c > @@ -174,7 +174,7 @@ brw_codegen_vs_prog(struct brw_context *brw, > > mem_ctx = ralloc_context(NULL); > > - nir_shader *nir = vp->program.nir; > + nir_shader *nir = nir_shader_clone(mem_ctx, vp->program.nir); > > brw_assign_common_binding_table_offsets(devinfo, &vp->program, > &prog_data.base.base, 0); > diff --git a/src/mesa/drivers/dri/i965/brw_wm.c > b/src/mesa/drivers/dri/i965/brw_wm.c > index 1ed66ed55dc..9e0b350eeca 100644 > --- a/src/mesa/drivers/dri/i965/brw_wm.c > +++ b/src/mesa/drivers/dri/i965/brw_wm.c > @@ -139,7 +139,7 @@ brw_codegen_wm_prog(struct brw_context *brw, > bool start_busy = false; > double start_time = 0; > > - nir_shader *nir = fp->program.nir; > + nir_shader *nir = nir_shader_clone(mem_ctx, fp->program.nir); > > memset(&prog_data, 0, sizeof(prog_data)); > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
