mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 02:38:04 +02:00
r600: Make NIR the default shader IR
By default sb is disabled, to enable it one can set R600_DEBUG=nirsb TGSI can be enabled by using R600_DEBUG=use_tgsi In this case "sb" will be enabled, but one can use the TGSI backend without sb by setting R600_DEBUG=use_tgsi,sb Closes: #6858 Signed-off-by: Gert Wollny <gert.wollny@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18753>
This commit is contained in:
parent
ad74cd3c3f
commit
6be7c2ef51
7 changed files with 11 additions and 18 deletions
|
|
@ -2735,8 +2735,7 @@ void *r600_create_vertex_fetch_shader(struct pipe_context *ctx,
|
||||||
uint32_t *bytecode;
|
uint32_t *bytecode;
|
||||||
int i, j, r, fs_size;
|
int i, j, r, fs_size;
|
||||||
struct r600_fetch_shader *shader;
|
struct r600_fetch_shader *shader;
|
||||||
unsigned no_sb = rctx->screen->b.debug_flags & DBG_NO_SB ||
|
unsigned no_sb = rctx->screen->b.debug_flags & (DBG_NO_SB | DBG_NIR);
|
||||||
(rctx->screen->b.debug_flags & DBG_NIR);
|
|
||||||
unsigned sb_disasm = !no_sb || (rctx->screen->b.debug_flags & DBG_SB_DISASM);
|
unsigned sb_disasm = !no_sb || (rctx->screen->b.debug_flags & DBG_SB_DISASM);
|
||||||
|
|
||||||
assert(count < 32);
|
assert(count < 32);
|
||||||
|
|
|
||||||
|
|
@ -245,8 +245,7 @@ fail:
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_nir_enabled(struct r600_common_screen *screen) {
|
static bool is_nir_enabled(struct r600_common_screen *screen) {
|
||||||
return (screen->debug_flags & DBG_NIR_PREFERRED); /* &&
|
return !(screen->debug_flags & DBG_USE_TGSI);
|
||||||
screen->family >= CHIP_CEDAR);*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -319,7 +318,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PIPE_CAP_NIR_ATOMICS_AS_DEREF:
|
case PIPE_CAP_NIR_ATOMICS_AS_DEREF:
|
||||||
return rscreen->b.debug_flags & DBG_NIR_PREFERRED;
|
return is_nir_enabled(&rscreen->b);
|
||||||
|
|
||||||
case PIPE_CAP_TEXTURE_TRANSFER_MODES:
|
case PIPE_CAP_TEXTURE_TRANSFER_MODES:
|
||||||
return PIPE_TEXTURE_TRANSFER_BLIT;
|
return PIPE_TEXTURE_TRANSFER_BLIT;
|
||||||
|
|
|
||||||
|
|
@ -270,8 +270,6 @@ struct r600_gs_rings_state {
|
||||||
#define DBG_NIR_SB (1 << 28)
|
#define DBG_NIR_SB (1 << 28)
|
||||||
#define DBG_USE_TGSI (1 << 29)
|
#define DBG_USE_TGSI (1 << 29)
|
||||||
|
|
||||||
#define DBG_NIR_PREFERRED (DBG_NIR_SB | DBG_NIR)
|
|
||||||
|
|
||||||
struct r600_screen {
|
struct r600_screen {
|
||||||
struct r600_common_screen b;
|
struct r600_common_screen b;
|
||||||
bool has_msaa;
|
bool has_msaa;
|
||||||
|
|
|
||||||
|
|
@ -775,10 +775,7 @@ static void r600_disk_cache_create(struct r600_common_screen *rscreen)
|
||||||
|
|
||||||
/* These flags affect shader compilation. */
|
/* These flags affect shader compilation. */
|
||||||
uint64_t shader_debug_flags =
|
uint64_t shader_debug_flags =
|
||||||
rscreen->debug_flags &
|
rscreen->debug_flags & DBG_USE_TGSI;
|
||||||
(DBG_NIR |
|
|
||||||
DBG_NIR_PREFERRED |
|
|
||||||
DBG_USE_TGSI);
|
|
||||||
|
|
||||||
rscreen->disk_shader_cache =
|
rscreen->disk_shader_cache =
|
||||||
disk_cache_create(r600_get_family_name(rscreen),
|
disk_cache_create(r600_get_family_name(rscreen),
|
||||||
|
|
@ -1392,7 +1389,7 @@ bool r600_common_screen_init(struct r600_common_screen *rscreen,
|
||||||
nir_lower_dtrunc;
|
nir_lower_dtrunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(rscreen->debug_flags & DBG_NIR_PREFERRED)) {
|
if (rscreen->debug_flags & DBG_USE_TGSI) {
|
||||||
|
|
||||||
rscreen->nir_options.lower_fpow = false;
|
rscreen->nir_options.lower_fpow = false;
|
||||||
/* TGSI is vector, and NIR-to-TGSI doesn't like it when the
|
/* TGSI is vector, and NIR-to-TGSI doesn't like it when the
|
||||||
|
|
|
||||||
|
|
@ -179,14 +179,15 @@ int r600_pipe_shader_create(struct pipe_context *ctx,
|
||||||
pipe_shader_type_from_mesa(sel->nir->info.stage);
|
pipe_shader_type_from_mesa(sel->nir->info.stage);
|
||||||
|
|
||||||
bool dump = r600_can_dump_shader(&rctx->screen->b, processor);
|
bool dump = r600_can_dump_shader(&rctx->screen->b, processor);
|
||||||
unsigned use_sb = !(rctx->screen->b.debug_flags & DBG_NO_SB) ||
|
unsigned use_sb = (rctx->screen->b.debug_flags & DBG_USE_TGSI &&
|
||||||
|
!(rctx->screen->b.debug_flags & DBG_NO_SB)) ||
|
||||||
(rctx->screen->b.debug_flags & DBG_NIR_SB);
|
(rctx->screen->b.debug_flags & DBG_NIR_SB);
|
||||||
unsigned sb_disasm;
|
unsigned sb_disasm;
|
||||||
unsigned export_shader;
|
unsigned export_shader;
|
||||||
|
|
||||||
shader->shader.bc.isa = rctx->isa;
|
shader->shader.bc.isa = rctx->isa;
|
||||||
|
|
||||||
if (!(rscreen->b.debug_flags & DBG_NIR_PREFERRED)) {
|
if (rscreen->b.debug_flags & DBG_USE_TGSI) {
|
||||||
assert(sel->ir_type == PIPE_SHADER_IR_TGSI);
|
assert(sel->ir_type == PIPE_SHADER_IR_TGSI);
|
||||||
r = r600_shader_from_tgsi(rctx, shader, key);
|
r = r600_shader_from_tgsi(rctx, shader, key);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
|
@ -223,7 +224,7 @@ int r600_pipe_shader_create(struct pipe_context *ctx,
|
||||||
tgsi_dump(sel->tokens, 0);
|
tgsi_dump(sel->tokens, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rscreen->b.debug_flags & (DBG_NIR_PREFERRED)) {
|
if (!(rscreen->b.debug_flags & DBG_USE_TGSI)) {
|
||||||
fprintf(stderr, "--NIR --------------------------------------------------------\n");
|
fprintf(stderr, "--NIR --------------------------------------------------------\n");
|
||||||
nir_print_shader(sel->nir, stderr);
|
nir_print_shader(sel->nir, stderr);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -992,7 +992,7 @@ struct r600_pipe_shader_selector *r600_create_shader_state_tokens(struct pipe_co
|
||||||
} else if (ir == PIPE_SHADER_IR_NIR){
|
} else if (ir == PIPE_SHADER_IR_NIR){
|
||||||
nir_shader *s = (nir_shader *)prog;
|
nir_shader *s = (nir_shader *)prog;
|
||||||
|
|
||||||
if (!(rscreen->b.debug_flags & DBG_NIR_PREFERRED)) {
|
if (rscreen->b.debug_flags & DBG_USE_TGSI) {
|
||||||
sel->tokens = (void *)nir_to_tgsi(s, ctx->screen);
|
sel->tokens = (void *)nir_to_tgsi(s, ctx->screen);
|
||||||
ir = PIPE_SHADER_IR_TGSI;
|
ir = PIPE_SHADER_IR_TGSI;
|
||||||
tgsi_scan_shader(sel->tokens, &sel->info);
|
tgsi_scan_shader(sel->tokens, &sel->info);
|
||||||
|
|
|
||||||
|
|
@ -801,8 +801,7 @@ int r600_shader_from_nir(struct r600_context *rctx,
|
||||||
NIR_PASS_V(sh, nir_convert_from_ssa, true);
|
NIR_PASS_V(sh, nir_convert_from_ssa, true);
|
||||||
NIR_PASS_V(sh, nir_opt_dce);
|
NIR_PASS_V(sh, nir_opt_dce);
|
||||||
|
|
||||||
if ((rctx->screen->b.debug_flags & DBG_NIR_PREFERRED) &&
|
if (rctx->screen->b.debug_flags & DBG_ALL_SHADERS) {
|
||||||
(rctx->screen->b.debug_flags & DBG_ALL_SHADERS)) {
|
|
||||||
fprintf(stderr, "-- NIR --------------------------------------------------------\n");
|
fprintf(stderr, "-- NIR --------------------------------------------------------\n");
|
||||||
struct nir_function *func = (struct nir_function *)exec_list_get_head(&sh->functions);
|
struct nir_function *func = (struct nir_function *)exec_list_get_head(&sh->functions);
|
||||||
nir_index_ssa_defs(func->impl);
|
nir_index_ssa_defs(func->impl);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue