r600g,radeonsi: set resource domains in one place (v2)
v2: This doesn't change the behavior. It only moves the tiling check to r600_init_resource and removes the usage parameter. Reviewed-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
parent
c6dbcf10df
commit
2be5bbdd97
|
@ -2179,8 +2179,8 @@ static void r600_invalidate_buffer(struct pipe_context *ctx, struct pipe_resourc
|
|||
pb_reference(&rbuffer->buf, NULL);
|
||||
|
||||
/* Create a new one in the same pipe_resource. */
|
||||
r600_init_resource(&rctx->screen->b, rbuffer, rbuffer->b.b.width0, alignment,
|
||||
TRUE, rbuffer->b.b.usage);
|
||||
r600_init_resource(&rctx->screen->b, rbuffer, rbuffer->b.b.width0,
|
||||
alignment, TRUE);
|
||||
|
||||
/* We changed the buffer, now we need to bind it where the old one was bound. */
|
||||
/* Vertex buffers. */
|
||||
|
|
|
@ -103,42 +103,41 @@ void *r600_buffer_map_sync_with_rings(struct r600_common_context *ctx,
|
|||
bool r600_init_resource(struct r600_common_screen *rscreen,
|
||||
struct r600_resource *res,
|
||||
unsigned size, unsigned alignment,
|
||||
bool use_reusable_pool, unsigned usage)
|
||||
bool use_reusable_pool)
|
||||
{
|
||||
uint32_t initial_domain, domains;
|
||||
struct r600_texture *rtex = (struct r600_texture*)res;
|
||||
|
||||
switch(usage) {
|
||||
switch (res->b.b.usage) {
|
||||
case PIPE_USAGE_STAGING:
|
||||
case PIPE_USAGE_DYNAMIC:
|
||||
case PIPE_USAGE_STREAM:
|
||||
/* These 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;
|
||||
/* Transfers are likely to occur more often with these resources. */
|
||||
res->domains = RADEON_DOMAIN_GTT;
|
||||
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;
|
||||
/* Not listing GTT here improves performance in some apps. */
|
||||
res->domains = RADEON_DOMAIN_VRAM;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Tiled textures are unmappable. Always put them in VRAM. */
|
||||
if (res->b.b.target != PIPE_BUFFER &&
|
||||
rtex->surface.level[0].mode >= RADEON_SURF_MODE_1D) {
|
||||
res->domains = RADEON_DOMAIN_VRAM;
|
||||
}
|
||||
|
||||
/* Allocate the resource. */
|
||||
res->buf = rscreen->ws->buffer_create(rscreen->ws, size, alignment,
|
||||
use_reusable_pool,
|
||||
initial_domain);
|
||||
res->domains);
|
||||
if (!res->buf) {
|
||||
return false;
|
||||
}
|
||||
|
||||
res->cs_buf = rscreen->ws->buffer_get_cs_handle(res->buf);
|
||||
res->domains = domains;
|
||||
util_range_set_empty(&res->valid_buffer_range);
|
||||
|
||||
if (rscreen->debug_flags & DBG_VM && res->b.b.target == PIPE_BUFFER) {
|
||||
|
@ -327,7 +326,7 @@ struct pipe_resource *r600_buffer_create(struct pipe_screen *screen,
|
|||
rbuffer->b.vtbl = &r600_buffer_vtbl;
|
||||
util_range_init(&rbuffer->valid_buffer_range);
|
||||
|
||||
if (!r600_init_resource(rscreen, rbuffer, templ->width0, alignment, TRUE, templ->usage)) {
|
||||
if (!r600_init_resource(rscreen, rbuffer, templ->width0, alignment, TRUE)) {
|
||||
FREE(rbuffer);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -321,7 +321,7 @@ void *r600_buffer_map_sync_with_rings(struct r600_common_context *ctx,
|
|||
bool r600_init_resource(struct r600_common_screen *rscreen,
|
||||
struct r600_resource *res,
|
||||
unsigned size, unsigned alignment,
|
||||
bool use_reusable_pool, unsigned usage);
|
||||
bool use_reusable_pool);
|
||||
struct pipe_resource *r600_buffer_create(struct pipe_screen *screen,
|
||||
const struct pipe_resource *templ,
|
||||
unsigned alignment);
|
||||
|
|
|
@ -616,11 +616,8 @@ r600_texture_create_object(struct pipe_screen *screen,
|
|||
|
||||
/* Now create the backing buffer. */
|
||||
if (!buf) {
|
||||
unsigned base_align = rtex->surface.bo_alignment;
|
||||
unsigned usage = rtex->surface.level[0].mode >= RADEON_SURF_MODE_1D ?
|
||||
PIPE_USAGE_STATIC : base->usage;
|
||||
|
||||
if (!r600_init_resource(rscreen, resource, rtex->size, base_align, FALSE, usage)) {
|
||||
if (!r600_init_resource(rscreen, resource, rtex->size,
|
||||
rtex->surface.bo_alignment, FALSE)) {
|
||||
FREE(rtex);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -706,8 +706,8 @@ static void si_invalidate_buffer(struct pipe_context *ctx, struct pipe_resource
|
|||
pb_reference(&rbuffer->buf, NULL);
|
||||
|
||||
/* Create a new one in the same pipe_resource. */
|
||||
r600_init_resource(&sctx->screen->b, rbuffer, rbuffer->b.b.width0, alignment,
|
||||
TRUE, rbuffer->b.b.usage);
|
||||
r600_init_resource(&sctx->screen->b, rbuffer, rbuffer->b.b.width0,
|
||||
alignment, TRUE);
|
||||
|
||||
/* We changed the buffer, now we need to bind it where the old one
|
||||
* was bound. This consists of 2 things:
|
||||
|
|
Loading…
Reference in New Issue