diff options
author | Marek Olšák <[email protected]> | 2016-03-01 21:50:25 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2016-03-09 15:02:27 +0100 |
commit | 970b979da1639d57e89169f96cc0064db9dae43a (patch) | |
tree | 1417f5a6303f226ff91be085e28339cd754c247d /src/gallium/drivers/radeon | |
parent | abac6bf67a85310908c79187d102a86ee8fe6dd6 (diff) |
gallium/radeon: eliminate fast color clear before sharing
Reviewed-by: Michel Dänzer <[email protected]>
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeon')
-rw-r--r-- | src/gallium/drivers/radeon/r600_texture.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c index 229fa5efa78..ec2f2454b1c 100644 --- a/src/gallium/drivers/radeon/r600_texture.c +++ b/src/gallium/drivers/radeon/r600_texture.c @@ -249,6 +249,17 @@ static void r600_texture_init_metadata(struct r600_texture *rtex, metadata->scanout = (surface->flags & RADEON_SURF_SCANOUT) != 0; } +static void r600_eliminate_fast_color_clear(struct r600_common_screen *rscreen, + struct r600_texture *rtex) +{ + struct pipe_context *ctx = rscreen->aux_context; + + pipe_mutex_lock(rscreen->aux_context_lock); + ctx->flush_resource(ctx, &rtex->resource.b.b); + ctx->flush(ctx, NULL, 0); + pipe_mutex_unlock(rscreen->aux_context_lock); +} + static boolean r600_texture_get_handle(struct pipe_screen* screen, struct pipe_resource *resource, struct winsys_handle *whandle, @@ -271,6 +282,11 @@ static boolean r600_texture_get_handle(struct pipe_screen* screen, res->external_usage = usage; if (resource->target != PIPE_BUFFER) { + if (!(usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH)) { + /* Eliminate fast clear (both CMASK and DCC) */ + r600_eliminate_fast_color_clear(rscreen, rtex); + } + r600_texture_init_metadata(rtex, &metadata); rscreen->ws->buffer_set_metadata(res->buf, &metadata); } |