[Mesa-dev] [PATCH 4/4] radeonsi: enable distributed tess on multi-SE parts only

Nicolai Hähnle nhaehnle at gmail.com
Wed Jun 29 14:10:04 UTC 2016


For the series:

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

On 28.06.2016 19:53, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> ported from Vulkan
> ---
>   src/gallium/drivers/radeonsi/si_pipe.c          | 4 ++++
>   src/gallium/drivers/radeonsi/si_pipe.h          | 1 +
>   src/gallium/drivers/radeonsi/si_state_draw.c    | 2 +-
>   src/gallium/drivers/radeonsi/si_state_shaders.c | 2 +-
>   4 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
> index f38ecc1..633d4bb 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.c
> +++ b/src/gallium/drivers/radeonsi/si_pipe.c
> @@ -712,6 +712,10 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws)
>   	sscreen->tess_offchip_block_dw_size =
>   		sscreen->b.family == CHIP_HAWAII ? 4096 : 8192;
>
> +	sscreen->has_distributed_tess =
> +		sscreen->b.chip_class >= VI &&
> +		sscreen->b.info.max_se >= 2;
> +
>   	sscreen->b.has_cp_dma = true;
>   	sscreen->b.has_streamout = true;
>   	pipe_mutex_init(sscreen->shader_parts_mutex);
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
> index ee64ecc..3aff0ac 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.h
> +++ b/src/gallium/drivers/radeonsi/si_pipe.h
> @@ -83,6 +83,7 @@ struct si_screen {
>   	struct r600_common_screen	b;
>   	unsigned			gs_table_depth;
>   	unsigned			tess_offchip_block_dw_size;
> +	bool				has_distributed_tess;
>
>   	/* Whether shaders are monolithic (1-part) or separate (3-part). */
>   	bool				use_monolithic_shaders;
> diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c
> index 3558510..ce8def4 100644
> --- a/src/gallium/drivers/radeonsi/si_state_draw.c
> +++ b/src/gallium/drivers/radeonsi/si_state_draw.c
> @@ -274,7 +274,7 @@ static unsigned si_get_ia_multi_vgt_param(struct si_context *sctx,
>   			partial_vs_wave = true;
>
>   		/* Needed for 028B6C_DISTRIBUTION_MODE != 0 */
> -		if (sctx->b.chip_class >= VI) {
> +		if (sctx->screen->has_distributed_tess) {
>   			if (sctx->gs_shader.cso)
>   				partial_es_wave = true;
>   			else
> diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
> index 9aa4a7c..4bcdeb6 100644
> --- a/src/gallium/drivers/radeonsi/si_state_shaders.c
> +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
> @@ -300,7 +300,7 @@ static void si_set_tesseval_regs(struct si_screen *sscreen,
>   	else
>   		topology = V_028B6C_OUTPUT_TRIANGLE_CW;
>
> -	if (sscreen->b.chip_class >= VI) {
> +	if (sscreen->has_distributed_tess) {
>   		if (sscreen->b.family == CHIP_FIJI ||
>   		    sscreen->b.family >= CHIP_POLARIS10)
>   			distribution_mode = V_028B6C_DISTRIBUTION_MODE_TRAPEZOIDS;
>


More information about the mesa-dev mailing list