[Mesa-dev] [PATCH] ac/radv/radeonsi: add ac_get_num_physical_sgprs() helper

Samuel Pitoiset samuel.pitoiset at gmail.com
Fri Feb 1 10:36:22 UTC 2019


Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

On 2/1/19 11:28 AM, Timothy Arceri wrote:
> ---
>   src/amd/common/ac_gpu_info.h             | 6 ++++++
>   src/amd/vulkan/radv_device.c             | 2 +-
>   src/amd/vulkan/radv_shader.c             | 4 ++--
>   src/amd/vulkan/radv_shader.h             | 6 ------
>   src/gallium/drivers/radeonsi/si_shader.c | 7 +++----
>   5 files changed, 12 insertions(+), 13 deletions(-)
>
> diff --git a/src/amd/common/ac_gpu_info.h b/src/amd/common/ac_gpu_info.h
> index a7dc1094c05..b1ef9c53734 100644
> --- a/src/amd/common/ac_gpu_info.h
> +++ b/src/amd/common/ac_gpu_info.h
> @@ -172,6 +172,12 @@ static inline unsigned ac_get_max_simd_waves(enum radeon_family family)
>   	}
>   }
>   
> +static inline uint32_t
> +ac_get_num_physical_sgprs(enum chip_class chip_class)
> +{
> +	return chip_class >= VI ? 800 : 512;
> +}
> +
>   #ifdef __cplusplus
>   }
>   #endif
> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
> index 34d93b262f8..b8ef93d0cd2 100644
> --- a/src/amd/vulkan/radv_device.c
> +++ b/src/amd/vulkan/radv_device.c
> @@ -1129,7 +1129,7 @@ void radv_GetPhysicalDeviceProperties2(
>   
>   			/* SGPR. */
>   			properties->sgprsPerSimd =
> -				radv_get_num_physical_sgprs(pdevice);
> +				ac_get_num_physical_sgprs(pdevice->rad_info.chip_class);
>   			properties->minSgprAllocation =
>   				pdevice->rad_info.chip_class >= VI ? 16 : 8;
>   			properties->maxSgprAllocation =
> diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
> index 42efaf9c581..07450ff236b 100644
> --- a/src/amd/vulkan/radv_shader.c
> +++ b/src/amd/vulkan/radv_shader.c
> @@ -762,7 +762,7 @@ generate_shader_stats(struct radv_device *device,
>   	if (conf->num_sgprs)
>   		max_simd_waves =
>   			MIN2(max_simd_waves,
> -			     radv_get_num_physical_sgprs(device->physical_device) / conf->num_sgprs);
> +			     ac_get_num_physical_sgprs(device->physical_device->rad_info.chip_class) / conf->num_sgprs);
>   
>   	if (conf->num_vgprs)
>   		max_simd_waves =
> @@ -847,7 +847,7 @@ radv_GetShaderInfoAMD(VkDevice _device,
>   			VkShaderStatisticsInfoAMD statistics = {};
>   			statistics.shaderStageMask = shaderStage;
>   			statistics.numPhysicalVgprs = RADV_NUM_PHYSICAL_VGPRS;
> -			statistics.numPhysicalSgprs = radv_get_num_physical_sgprs(device->physical_device);
> +			statistics.numPhysicalSgprs = ac_get_num_physical_sgprs(device->physical_device->rad_info.chip_class);
>   			statistics.numAvailableSgprs = statistics.numPhysicalSgprs;
>   
>   			if (stage == MESA_SHADER_COMPUTE) {
> diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h
> index 3652a811e80..b67cd2b4f15 100644
> --- a/src/amd/vulkan/radv_shader.h
> +++ b/src/amd/vulkan/radv_shader.h
> @@ -407,10 +407,4 @@ static inline unsigned shader_io_get_unique_index(gl_varying_slot slot)
>   	unreachable("illegal slot in get unique index\n");
>   }
>   
> -static inline uint32_t
> -radv_get_num_physical_sgprs(struct radv_physical_device *physical_device)
> -{
> -	return physical_device->rad_info.chip_class >= VI ? 800 : 512;
> -}
> -
>   #endif
> diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
> index a2ed899b58f..efae02ee91c 100644
> --- a/src/gallium/drivers/radeonsi/si_shader.c
> +++ b/src/gallium/drivers/radeonsi/si_shader.c
> @@ -5380,10 +5380,9 @@ static void si_calculate_max_simd_waves(struct si_shader *shader)
>   
>   	/* Compute the per-SIMD wave counts. */
>   	if (conf->num_sgprs) {
> -		if (sscreen->info.chip_class >= VI)
> -			max_simd_waves = MIN2(max_simd_waves, 800 / conf->num_sgprs);
> -		else
> -			max_simd_waves = MIN2(max_simd_waves, 512 / conf->num_sgprs);
> +		max_simd_waves =
> +			MIN2(max_simd_waves,
> +			     ac_get_num_physical_sgprs(sscreen->info.chip_class) / conf->num_sgprs);
>   	}
>   
>   	if (conf->num_vgprs)


More information about the mesa-dev mailing list