Selaa lähdekoodia

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>
tags/11.2-branchpoint
Rob Clark 9 vuotta sitten
vanhempi
commit
317628dbb3
2 muutettua tiedostoa jossa 43 lisäystä ja 36 poistoa
  1. 34
    0
      src/glsl/nir/nir.h
  2. 9
    36
      src/mesa/drivers/dri/i965/brw_nir.c

+ 34
- 0
src/glsl/nir/nir.h Näytä tiedosto

@@ -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);


+ 9
- 36
src/mesa/drivers/dri/i965/brw_nir.c Näytä tiedosto

@@ -405,42 +405,15 @@ brw_nir_lower_uniforms(nir_shader *nir, bool is_scalar)
}
}

#include "util/debug.h"

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(pass, ...) ({ \
bool this_progress = false; \
NIR_PASS(this_progress, nir, pass, ##__VA_ARGS__); \
if (this_progress) \
progress = true; \
this_progress; \
})

#define OPT_V(pass, ...) NIR_PASS_V(nir, pass, ##__VA_ARGS__)

static nir_shader *
nir_optimize(nir_shader *nir, bool is_scalar)

Loading…
Peruuta
Tallenna