[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