mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 05:10:17 +01:00
nir: extract out helper macros for running passes
Note these are a bit uglier, due to avoidance of GNU C extensions. But drivers which do not need to be built with compilers that don't support the extension can wrap these macros with their own. Signed-off-by: Rob Clark <robclark@freedesktop.org> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
23bd6affb2
commit
317628dbb3
2 changed files with 42 additions and 35 deletions
|
|
@ -1903,12 +1903,46 @@ nir_shader * nir_shader_clone(void *mem_ctx, const nir_shader *s);
|
|||
void nir_validate_shader(nir_shader *shader);
|
||||
void nir_metadata_set_validation_flag(nir_shader *shader);
|
||||
void nir_metadata_check_validation_flag(nir_shader *shader);
|
||||
|
||||
#include "util/debug.h"
|
||||
static inline bool
|
||||
should_clone_nir(void)
|
||||
{
|
||||
static int should_clone = -1;
|
||||
if (should_clone < 0)
|
||||
should_clone = env_var_as_boolean("NIR_TEST_CLONE", false);
|
||||
|
||||
return should_clone;
|
||||
}
|
||||
#else
|
||||
static inline void nir_validate_shader(nir_shader *shader) { (void) shader; }
|
||||
static inline void nir_metadata_set_validation_flag(nir_shader *shader) { (void) shader; }
|
||||
static inline void nir_metadata_check_validation_flag(nir_shader *shader) { (void) shader; }
|
||||
static inline bool should_clone_nir(void) { return false; }
|
||||
#endif /* DEBUG */
|
||||
|
||||
#define _PASS(nir, do_pass) do { \
|
||||
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; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define NIR_PASS(progress, nir, pass, ...) _PASS(nir, \
|
||||
nir_metadata_set_validation_flag(nir); \
|
||||
if (pass(nir, ##__VA_ARGS__)) { \
|
||||
progress = true; \
|
||||
nir_metadata_check_validation_flag(nir); \
|
||||
} \
|
||||
)
|
||||
|
||||
#define NIR_PASS_V(nir, pass, ...) _PASS(nir, \
|
||||
pass(nir, ##__VA_ARGS__); \
|
||||
)
|
||||
|
||||
void nir_calc_dominance_impl(nir_function_impl *impl);
|
||||
void nir_calc_dominance(nir_shader *shader);
|
||||
|
||||
|
|
|
|||
|
|
@ -405,42 +405,15 @@ brw_nir_lower_uniforms(nir_shader *nir, bool is_scalar)
|
|||
}
|
||||
}
|
||||
|
||||
#include "util/debug.h"
|
||||
#define OPT(pass, ...) ({ \
|
||||
bool this_progress = false; \
|
||||
NIR_PASS(this_progress, nir, pass, ##__VA_ARGS__); \
|
||||
if (this_progress) \
|
||||
progress = true; \
|
||||
this_progress; \
|
||||
})
|
||||
|
||||
static bool
|
||||
should_clone_nir()
|
||||
{
|
||||
static int should_clone = -1;
|
||||
if (should_clone < 1)
|
||||
should_clone = 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( \
|
||||
nir_metadata_set_validation_flag(nir); \
|
||||
this_progress = pass(nir ,##__VA_ARGS__); \
|
||||
if (this_progress) { \
|
||||
progress = true; \
|
||||
nir_metadata_check_validation_flag(nir); \
|
||||
} \
|
||||
)
|
||||
|
||||
#define OPT_V(pass, ...) _OPT( \
|
||||
pass(nir, ##__VA_ARGS__); \
|
||||
)
|
||||
#define OPT_V(pass, ...) NIR_PASS_V(nir, pass, ##__VA_ARGS__)
|
||||
|
||||
static nir_shader *
|
||||
nir_optimize(nir_shader *nir, bool is_scalar)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue