Browse Source

gallium/radeon: set texture metadata only once

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
tags/12.0-branchpoint
Marek Olšák 9 years ago
parent
commit
f914779c75

+ 1
- 0
src/gallium/drivers/radeon/r600_buffer_common.c View File

@@ -455,6 +455,7 @@ r600_alloc_buffer_struct(struct pipe_screen *screen,
rbuffer->b.vtbl = &r600_buffer_vtbl;
rbuffer->buf = NULL;
rbuffer->TC_L2_dirty = false;
rbuffer->is_shared = false;
util_range_init(&rbuffer->valid_buffer_range);
return rbuffer;
}

+ 3
- 0
src/gallium/drivers/radeon/r600_pipe_common.h View File

@@ -166,6 +166,9 @@ struct r600_resource {
* use TC L2.
*/
bool TC_L2_dirty;

/* Whether the resource has been exported via resource_get_handle. */
bool is_shared;
};

struct r600_transfer {

+ 5
- 2
src/gallium/drivers/radeon/r600_texture.c View File

@@ -259,8 +259,11 @@ static boolean r600_texture_get_handle(struct pipe_screen* screen,
struct r600_texture *rtex = (struct r600_texture*)resource;
struct radeon_bo_metadata metadata;

r600_texture_init_metadata(rtex, &metadata);
rscreen->ws->buffer_set_metadata(res->buf, &metadata);
if (!res->is_shared) {
res->is_shared = true;
r600_texture_init_metadata(rtex, &metadata);
rscreen->ws->buffer_set_metadata(res->buf, &metadata);
}

return rscreen->ws->buffer_get_handle(res->buf,
rtex->surface.level[0].pitch_bytes,

Loading…
Cancel
Save