gallium/radeon: check that handle usage doesn't change for a resource
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
6b187bbd9f
commit
c034d3dde0
|
@ -169,6 +169,7 @@ struct r600_resource {
|
||||||
|
|
||||||
/* Whether the resource has been exported via resource_get_handle. */
|
/* Whether the resource has been exported via resource_get_handle. */
|
||||||
bool is_shared;
|
bool is_shared;
|
||||||
|
unsigned external_usage; /* PIPE_HANDLE_USAGE_* */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct r600_transfer {
|
struct r600_transfer {
|
||||||
|
|
|
@ -261,11 +261,14 @@ static boolean r600_texture_get_handle(struct pipe_screen* screen,
|
||||||
|
|
||||||
if (!res->is_shared) {
|
if (!res->is_shared) {
|
||||||
res->is_shared = true;
|
res->is_shared = true;
|
||||||
|
res->external_usage = usage;
|
||||||
|
|
||||||
if (resource->target != PIPE_BUFFER) {
|
if (resource->target != PIPE_BUFFER) {
|
||||||
r600_texture_init_metadata(rtex, &metadata);
|
r600_texture_init_metadata(rtex, &metadata);
|
||||||
rscreen->ws->buffer_set_metadata(res->buf, &metadata);
|
rscreen->ws->buffer_set_metadata(res->buf, &metadata);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
assert(res->external_usage == usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rscreen->ws->buffer_get_handle(res->buf,
|
return rscreen->ws->buffer_get_handle(res->buf,
|
||||||
|
|
Loading…
Reference in New Issue