mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 02:40:11 +01:00
i965/nir: Add hooks for testing nir_shader_clone
This commit adds code for testing nir_shader_clone by running it after each and every optimization pass and throwing away the old shader. Testing nir_shader_clone is hidden behind a new INTEL_CLONE_NIR environment variable. Reviewed-by: Rob Clark <robclark@freedesktop.org> Acked-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
9fbd390dd4
commit
0bee3acc2a
1 changed files with 26 additions and 9 deletions
|
|
@ -171,11 +171,26 @@ brw_nir_lower_outputs(nir_shader *nir, bool is_scalar)
|
|||
}
|
||||
}
|
||||
|
||||
#define _OPT(do_pass) (({ \
|
||||
bool this_progress = true; \
|
||||
do_pass \
|
||||
nir_validate_shader(nir); \
|
||||
this_progress; \
|
||||
static bool
|
||||
should_clone_nir()
|
||||
{
|
||||
static int should_clone = -1;
|
||||
if (should_clone < 1)
|
||||
should_clone = brw_env_var_as_boolean("NIR_TEST_CLONE", false);
|
||||
|
||||
return should_clone;
|
||||
}
|
||||
|
||||
#define _OPT(do_pass) (({ \
|
||||
bool this_progress = true; \
|
||||
do_pass \
|
||||
nir_validate_shader(nir); \
|
||||
if (should_clone_nir()) { \
|
||||
nir_shader *clone = nir_shader_clone(ralloc_parent(nir), nir); \
|
||||
ralloc_free(nir); \
|
||||
nir = clone; \
|
||||
} \
|
||||
this_progress; \
|
||||
}))
|
||||
|
||||
#define OPT(pass, ...) _OPT( \
|
||||
|
|
@ -191,7 +206,7 @@ brw_nir_lower_outputs(nir_shader *nir, bool is_scalar)
|
|||
pass(nir, ##__VA_ARGS__); \
|
||||
)
|
||||
|
||||
static void
|
||||
static nir_shader *
|
||||
nir_optimize(nir_shader *nir, bool is_scalar)
|
||||
{
|
||||
bool progress;
|
||||
|
|
@ -219,6 +234,8 @@ nir_optimize(nir_shader *nir, bool is_scalar)
|
|||
OPT(nir_opt_remove_phis);
|
||||
OPT(nir_opt_undef);
|
||||
} while (progress);
|
||||
|
||||
return nir;
|
||||
}
|
||||
|
||||
nir_shader *
|
||||
|
|
@ -260,13 +277,13 @@ brw_create_nir(struct brw_context *brw,
|
|||
|
||||
OPT(nir_split_var_copies);
|
||||
|
||||
nir_optimize(nir, is_scalar);
|
||||
nir = nir_optimize(nir, is_scalar);
|
||||
|
||||
/* Lower a bunch of stuff */
|
||||
OPT_V(nir_lower_var_copies);
|
||||
|
||||
/* Get rid of split copies */
|
||||
nir_optimize(nir, is_scalar);
|
||||
nir = nir_optimize(nir, is_scalar);
|
||||
|
||||
OPT_V(brw_nir_lower_inputs, devinfo, is_scalar);
|
||||
OPT_V(brw_nir_lower_outputs, is_scalar);
|
||||
|
|
@ -287,7 +304,7 @@ brw_create_nir(struct brw_context *brw,
|
|||
OPT_V(nir_lower_atomics, shader_prog);
|
||||
}
|
||||
|
||||
nir_optimize(nir, is_scalar);
|
||||
nir = nir_optimize(nir, is_scalar);
|
||||
|
||||
if (brw->gen >= 6) {
|
||||
/* Try and fuse multiply-adds */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue