From 2ed9eb1b633f214ff8900ab3be9e639f87cebaef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 11 Jul 2022 00:57:09 -0400 Subject: [PATCH] radeonsi/gfx11: enable shader prefetch except for initial chip revisions Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/amd/common/ac_gpu_info.c | 2 ++ src/amd/common/ac_gpu_info.h | 1 + src/gallium/drivers/radeonsi/si_state_shaders.cpp | 7 +++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/amd/common/ac_gpu_info.c b/src/amd/common/ac_gpu_info.c index 0c3163806b9..c3ed0f1dfc0 100644 --- a/src/amd/common/ac_gpu_info.c +++ b/src/amd/common/ac_gpu_info.c @@ -873,6 +873,7 @@ bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info) info->family_id = device_info.family; info->chip_external_rev = device_info.external_rev; + info->chip_rev = device_info.chip_rev; info->marketing_name = amdgpu_get_marketing_name(dev); info->is_pro_graphics = info->marketing_name && (strstr(info->marketing_name, "Pro") || strstr(info->marketing_name, "PRO") || @@ -1451,6 +1452,7 @@ void ac_print_gpu_info(struct radeon_info *info, FILE *f) fprintf(f, " gfx_level = %i\n", info->gfx_level); fprintf(f, " family_id = %i\n", info->family_id); fprintf(f, " chip_external_rev = %i\n", info->chip_external_rev); + fprintf(f, " chip_rev = %i\n", info->chip_rev); fprintf(f, "Flags:\n"); fprintf(f, " is_pro_graphics = %u\n", info->is_pro_graphics); diff --git a/src/amd/common/ac_gpu_info.h b/src/amd/common/ac_gpu_info.h index d956beb0648..41838b41923 100644 --- a/src/amd/common/ac_gpu_info.h +++ b/src/amd/common/ac_gpu_info.h @@ -82,6 +82,7 @@ struct radeon_info { enum amd_gfx_level gfx_level; uint32_t family_id; uint32_t chip_external_rev; + uint32_t chip_rev; /* 0 = A0, 1 = A1, etc. */ /* Flags. */ bool is_pro_graphics; diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.cpp b/src/gallium/drivers/radeonsi/si_state_shaders.cpp index 0156813e817..ffad77f72d5 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.cpp +++ b/src/gallium/drivers/radeonsi/si_state_shaders.cpp @@ -668,8 +668,11 @@ static unsigned si_get_vs_vgpr_comp_cnt(struct si_screen *sscreen, struct si_sha unsigned si_get_shader_prefetch_size(struct si_shader *shader) { - /* TODO: Disable for now. */ - if (shader->selector->screen->info.gfx_level == GFX11) + /* Return 0 for some A0 chips only. Other chips don't need it. */ + if ((shader->selector->screen->info.family == CHIP_GFX1100 || + shader->selector->screen->info.family == CHIP_GFX1102 || + shader->selector->screen->info.family == CHIP_GFX1103) && + shader->selector->screen->info.chip_rev == 0) return 0; /* inst_pref_size is calculated in cache line size granularity */