[Mesa-dev] [PATCH] radeonsi: don't ignore pitch for imported textures

Nicolai Hähnle nhaehnle at gmail.com
Mon Jan 22 13:09:39 UTC 2018


On 10.01.2018 20:49, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>

Please add a bug report or reference to what fails without it.

It does make sense though, so

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


> 
> Cc: 17.2 17.3 <mesa-stable at lists.freedesktop.org>
> ---
>   src/gallium/drivers/radeon/r600_texture.c | 14 ++++++++++++--
>   1 file changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c
> index 34b3ab0..36eff40 100644
> --- a/src/gallium/drivers/radeon/r600_texture.c
> +++ b/src/gallium/drivers/radeon/r600_texture.c
> @@ -291,25 +291,35 @@ static int r600_init_surface(struct si_screen *sscreen,
>   		flags |= RADEON_SURF_IMPORTED | RADEON_SURF_SHAREABLE;
>   	if (!(ptex->flags & R600_RESOURCE_FLAG_FORCE_TILING))
>   		flags |= RADEON_SURF_OPTIMIZE_FOR_SPACE;
>   
>   	r = sscreen->ws->surface_init(sscreen->ws, ptex, flags, bpe,
>   				      array_mode, surface);
>   	if (r) {
>   		return r;
>   	}
>   
> +	unsigned pitch = pitch_in_bytes_override / bpe;
> +
>   	if (sscreen->info.chip_class >= GFX9) {
> -		assert(!pitch_in_bytes_override ||
> -		       pitch_in_bytes_override == surface->u.gfx9.surf_pitch * bpe);
> +		if (pitch) {
> +			surface->u.gfx9.surf_pitch = pitch;
> +			surface->u.gfx9.surf_slice_size =
> +				(uint64_t)pitch * surface->u.gfx9.surf_height * bpe;
> +		}
>   		surface->u.gfx9.surf_offset = offset;
>   	} else {
> +		if (pitch) {
> +			surface->u.legacy.level[0].nblk_x = pitch;
> +			surface->u.legacy.level[0].slice_size_dw =
> +				((uint64_t)pitch * surface->u.legacy.level[0].nblk_y * bpe) / 4;
> +		}
>   		if (offset) {
>   			for (i = 0; i < ARRAY_SIZE(surface->u.legacy.level); ++i)
>   				surface->u.legacy.level[i].offset += offset;
>   		}
>   	}
>   	return 0;
>   }
>   
>   static void r600_texture_init_metadata(struct si_screen *sscreen,
>   				       struct r600_texture *rtex,
> 


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list