[Mesa-dev] [RFC] r600g/radeonsi: Use caching buffer manager for textures as well

Grigori Goronzy greg at chown.ath.cx
Thu Apr 10 05:16:00 PDT 2014


On 10.04.2014 11:23, Michel Dänzer wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> ---
>
> This is just an RFC; if other developers approve of this approach, I can
> make a more extensive patch removing the use_reusable_pool parameters.
>
> The x11perf numbers below compare ShmGet/PutImage before and after this
> change with glamor from keithp's glamor-server xserver branch on a Kaveri
> APU. The change also reduces the total runtime of the gtkperf tests from
> about 3.5s to about 3s.
>

I have done some similar experiments. I also see a noticeable speedup 
with glamor. AFAIR Marek had some objections because texture buffers can 
be quite large and too many and too big buffers might end up congesting 
the cache for a long time.

Maybe it makes sense to only use caching for texture BOs smaller than a 
certain threshold? I have such a change in my Mesa tree and it seems to 
work well. I cache all texture BOs <= 512KB.

Best regards
Grigori

> 1: x11perf-baseline.txt
> 2: x11perf-caching.txt
>
>      1              2           Operation
> --------   -----------------   -----------------
>    9070.0    48500.0 (  5.35)   ShmPutImage 10x10 square
>    5670.0    27700.0 (  4.89)   ShmPutImage 100x100 square
>     758.0     2350.0 (  3.10)   ShmPutImage 500x500 square
>    3600.0     5360.0 (  1.49)   ShmGetImage 10x10 square
>    2960.0     5720.0 (  1.93)   ShmGetImage 100x100 square
>     346.0     1140.0 (  3.29)   ShmGetImage 500x500 square
>
>   src/gallium/drivers/radeon/r600_texture.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c
> index e39b9ec..293eeaa 100644
> --- a/src/gallium/drivers/radeon/r600_texture.c
> +++ b/src/gallium/drivers/radeon/r600_texture.c
> @@ -633,7 +633,7 @@ r600_texture_create_object(struct pipe_screen *screen,
>   	/* Now create the backing buffer. */
>   	if (!buf) {
>   		if (!r600_init_resource(rscreen, resource, rtex->size,
> -					rtex->surface.bo_alignment, FALSE)) {
> +					rtex->surface.bo_alignment, TRUE)) {
>   			FREE(rtex);
>   			return NULL;
>   		}
>



More information about the mesa-dev mailing list