From 110b3088418e6c79f1c9dd7c2f3697d3a89b285f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 2 Dec 2024 21:23:36 -0500 Subject: [PATCH] radeonsi: make nir->info and si_shader_info::base identical so that we can use nir->info instead of the latter. Reviewed-by: Qiang Yu Part-of: --- src/gallium/drivers/radeonsi/si_compute.c | 2 ++ src/gallium/drivers/radeonsi/si_shader.h | 2 +- src/gallium/drivers/radeonsi/si_shader_info.c | 24 ++++++++++--------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c index 75d161880cc..95c173a92f2 100644 --- a/src/gallium/drivers/radeonsi/si_compute.c +++ b/src/gallium/drivers/radeonsi/si_compute.c @@ -239,6 +239,8 @@ static void *si_create_compute_state(struct pipe_context *ctx, const struct pipe sel->nir = (struct nir_shader *)cso->prog; } + sel->nir->info.shared_size = cso->static_shared_mem; + if (si_can_dump_shader(sscreen, sel->stage, SI_DUMP_INIT_NIR)) nir_print_shader(sel->nir, stderr); diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h index 6ddde209322..07333d4eb8d 100644 --- a/src/gallium/drivers/radeonsi/si_shader.h +++ b/src/gallium/drivers/radeonsi/si_shader.h @@ -1081,7 +1081,7 @@ unsigned si_get_shader_prefetch_size(struct si_shader *shader); unsigned si_get_shader_binary_size(struct si_screen *screen, struct si_shader *shader); /* si_shader_info.c */ -void si_nir_scan_shader(struct si_screen *sscreen, const struct nir_shader *nir, +void si_nir_scan_shader(struct si_screen *sscreen, struct nir_shader *nir, struct si_shader_info *info); /* si_shader_nir.c */ diff --git a/src/gallium/drivers/radeonsi/si_shader_info.c b/src/gallium/drivers/radeonsi/si_shader_info.c index 3725a373f96..b92167b9d1c 100644 --- a/src/gallium/drivers/radeonsi/si_shader_info.c +++ b/src/gallium/drivers/radeonsi/si_shader_info.c @@ -523,23 +523,28 @@ static void scan_instruction(const struct nir_shader *nir, struct si_shader_info } } -void si_nir_scan_shader(struct si_screen *sscreen, const struct nir_shader *nir, +void si_nir_scan_shader(struct si_screen *sscreen, struct nir_shader *nir, struct si_shader_info *info) { - memset(info, 0, sizeof(*info)); - info->base = nir->info; - bool force_use_aco = false; if (sscreen->force_shader_use_aco) { - if (!memcmp(sscreen->use_aco_shader_blake, info->base.source_blake3, + if (!memcmp(sscreen->use_aco_shader_blake, nir->info.source_blake3, sizeof(sscreen->use_aco_shader_blake))) { force_use_aco = true; } } - info->base.use_aco_amd = aco_is_gpu_supported(&sscreen->info) && - (sscreen->use_aco || nir->info.use_aco_amd || force_use_aco) && - sscreen->info.has_image_opcodes; + nir->info.use_aco_amd = aco_is_gpu_supported(&sscreen->info) && + (sscreen->use_aco || nir->info.use_aco_amd || force_use_aco) && + sscreen->info.has_image_opcodes; + + if (nir->info.stage == MESA_SHADER_FRAGMENT) { + /* post_depth_coverage implies early_fragment_tests */ + nir->info.fs.early_fragment_tests |= nir->info.fs.post_depth_coverage; + } + + memset(info, 0, sizeof(*info)); + info->base = nir->info; /* Get options from shader profiles. */ for (unsigned i = 0; i < ARRAY_SIZE(si_shader_profiles); i++) { @@ -550,9 +555,6 @@ void si_nir_scan_shader(struct si_screen *sscreen, const struct nir_shader *nir, } if (nir->info.stage == MESA_SHADER_FRAGMENT) { - /* post_depth_coverage implies early_fragment_tests */ - info->base.fs.early_fragment_tests |= info->base.fs.post_depth_coverage; - info->color_interpolate[0] = nir->info.fs.color0_interp; info->color_interpolate[1] = nir->info.fs.color1_interp; for (unsigned i = 0; i < 2; i++) {