On Wed, Oct 31, 2012 at 8:05 PM, Marek Olšák <mar...@gmail.com> wrote: > The problem was we set VRAM|GTT for relocations of STATIC resources. > Setting just VRAM increases the framerate 4 times on my machine. > > I rewrote the switch statement and adjusted the domains for window > framebuffers too.
Reviewed-by: Alex Deucher <alexander.deuc...@amd.com> Stable branches? > --- > src/gallium/drivers/r600/r600_buffer.c | 42 > ++++++++++++++++--------------- > src/gallium/drivers/r600/r600_texture.c | 3 ++- > 2 files changed, 24 insertions(+), 21 deletions(-) > > diff --git a/src/gallium/drivers/r600/r600_buffer.c > b/src/gallium/drivers/r600/r600_buffer.c > index f4566ee..116ab51 100644 > --- a/src/gallium/drivers/r600/r600_buffer.c > +++ b/src/gallium/drivers/r600/r600_buffer.c > @@ -206,29 +206,31 @@ bool r600_init_resource(struct r600_screen *rscreen, > { > uint32_t initial_domain, domains; > > - /* Staging resources particpate in transfers and blits only > - * and are used for uploads and downloads from regular > - * resources. We generate them internally for some transfers. > - */ > - if (usage == PIPE_USAGE_STAGING) { > + switch(usage) { > + case PIPE_USAGE_STAGING: > + /* Staging resources participate in transfers, i.e. are used > + * for uploads and downloads from regular resources. > + * We generate them internally for some transfers. > + */ > + initial_domain = RADEON_DOMAIN_GTT; > domains = RADEON_DOMAIN_GTT; > + break; > + case PIPE_USAGE_DYNAMIC: > + case PIPE_USAGE_STREAM: > + /* Default to GTT, but allow the memory manager to move it to > VRAM. */ > initial_domain = RADEON_DOMAIN_GTT; > - } else { > domains = RADEON_DOMAIN_GTT | RADEON_DOMAIN_VRAM; > - > - switch(usage) { > - case PIPE_USAGE_DYNAMIC: > - case PIPE_USAGE_STREAM: > - case PIPE_USAGE_STAGING: > - initial_domain = RADEON_DOMAIN_GTT; > - break; > - case PIPE_USAGE_DEFAULT: > - case PIPE_USAGE_STATIC: > - case PIPE_USAGE_IMMUTABLE: > - default: > - initial_domain = RADEON_DOMAIN_VRAM; > - break; > - } > + break; > + case PIPE_USAGE_DEFAULT: > + case PIPE_USAGE_STATIC: > + case PIPE_USAGE_IMMUTABLE: > + default: > + /* Don't list GTT here, because the memory manager would put > some > + * resources to GTT no matter what the initial domain is. > + * Not listing GTT in the domains improves performance a lot. > */ > + initial_domain = RADEON_DOMAIN_VRAM; > + domains = RADEON_DOMAIN_VRAM; > + break; > } > > res->buf = rscreen->ws->buffer_create(rscreen->ws, size, alignment, > bind, initial_domain); > diff --git a/src/gallium/drivers/r600/r600_texture.c > b/src/gallium/drivers/r600/r600_texture.c > index 785eeff..2df390d 100644 > --- a/src/gallium/drivers/r600/r600_texture.c > +++ b/src/gallium/drivers/r600/r600_texture.c > @@ -421,9 +421,10 @@ r600_texture_create_object(struct pipe_screen *screen, > return NULL; > } > } else if (buf) { > + /* This is usually the window framebuffer. We want it in > VRAM, always. */ > resource->buf = buf; > resource->cs_buf = rscreen->ws->buffer_get_cs_handle(buf); > - resource->domains = RADEON_DOMAIN_GTT | RADEON_DOMAIN_VRAM; > + resource->domains = RADEON_DOMAIN_VRAM; > } > > if (rtex->cmask_size) { > -- > 1.7.9.5 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev