gallium/radeon: unwrap a context if we get a wrapped one
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
This commit is contained in:
parent
42fe45b451
commit
8b5485957e
|
@ -1220,10 +1220,12 @@ static boolean r600_fence_finish(struct pipe_screen *screen,
|
||||||
{
|
{
|
||||||
struct radeon_winsys *rws = ((struct r600_common_screen*)screen)->ws;
|
struct radeon_winsys *rws = ((struct r600_common_screen*)screen)->ws;
|
||||||
struct r600_multi_fence *rfence = (struct r600_multi_fence *)fence;
|
struct r600_multi_fence *rfence = (struct r600_multi_fence *)fence;
|
||||||
struct r600_common_context *rctx =
|
struct r600_common_context *rctx;
|
||||||
ctx ? (struct r600_common_context*)ctx : NULL;
|
|
||||||
int64_t abs_timeout = os_time_get_absolute_timeout(timeout);
|
int64_t abs_timeout = os_time_get_absolute_timeout(timeout);
|
||||||
|
|
||||||
|
ctx = threaded_context_unwrap_sync(ctx);
|
||||||
|
rctx = ctx ? (struct r600_common_context*)ctx : NULL;
|
||||||
|
|
||||||
if (rfence->sdma) {
|
if (rfence->sdma) {
|
||||||
if (!rws->fence_wait(rws, rfence->sdma, timeout))
|
if (!rws->fence_wait(rws, rfence->sdma, timeout))
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -530,14 +530,16 @@ static boolean r600_texture_get_handle(struct pipe_screen* screen,
|
||||||
unsigned usage)
|
unsigned usage)
|
||||||
{
|
{
|
||||||
struct r600_common_screen *rscreen = (struct r600_common_screen*)screen;
|
struct r600_common_screen *rscreen = (struct r600_common_screen*)screen;
|
||||||
struct r600_common_context *rctx = (struct r600_common_context*)
|
struct r600_common_context *rctx;
|
||||||
(ctx ? ctx : rscreen->aux_context);
|
|
||||||
struct r600_resource *res = (struct r600_resource*)resource;
|
struct r600_resource *res = (struct r600_resource*)resource;
|
||||||
struct r600_texture *rtex = (struct r600_texture*)resource;
|
struct r600_texture *rtex = (struct r600_texture*)resource;
|
||||||
struct radeon_bo_metadata metadata;
|
struct radeon_bo_metadata metadata;
|
||||||
bool update_metadata = false;
|
bool update_metadata = false;
|
||||||
unsigned stride, offset, slice_size;
|
unsigned stride, offset, slice_size;
|
||||||
|
|
||||||
|
ctx = threaded_context_unwrap_sync(ctx);
|
||||||
|
rctx = (struct r600_common_context*)(ctx ? ctx : rscreen->aux_context);
|
||||||
|
|
||||||
/* This is not supported now, but it might be required for OpenCL
|
/* This is not supported now, but it might be required for OpenCL
|
||||||
* interop in the future.
|
* interop in the future.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -155,7 +155,7 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen,
|
||||||
sscreen->record_llvm_ir = true; /* racy but not critical */
|
sscreen->record_llvm_ir = true; /* racy but not critical */
|
||||||
|
|
||||||
sctx->b.b.screen = screen; /* this must be set first */
|
sctx->b.b.screen = screen; /* this must be set first */
|
||||||
sctx->b.b.priv = priv;
|
sctx->b.b.priv = NULL;
|
||||||
sctx->b.b.destroy = si_destroy_context;
|
sctx->b.b.destroy = si_destroy_context;
|
||||||
sctx->b.b.emit_string_marker = si_emit_string_marker;
|
sctx->b.b.emit_string_marker = si_emit_string_marker;
|
||||||
sctx->b.set_atom_dirty = (void *)si_set_atom_dirty;
|
sctx->b.set_atom_dirty = (void *)si_set_atom_dirty;
|
||||||
|
|
Loading…
Reference in New Issue