radeonsi: Export signalled sync file instead of -1.
-1 is considered an error for EGL_ANDROID_native_fence_sync, so
we need to actually create a sync file.
Fixes: f536f45250
"radeonsi: implement sync_file import/export"
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
db682b8f0e
commit
5a3404d443
|
@ -610,6 +610,11 @@ struct radeon_winsys {
|
|||
int (*fence_export_sync_file)(struct radeon_winsys *ws,
|
||||
struct pipe_fence_handle *fence);
|
||||
|
||||
/**
|
||||
* Return a sync file FD that is already signalled.
|
||||
*/
|
||||
int (*export_signalled_sync_file)(struct radeon_winsys *ws);
|
||||
|
||||
/**
|
||||
* Initialize surface
|
||||
*
|
||||
|
|
|
@ -356,6 +356,8 @@ static int si_fence_get_fd(struct pipe_screen *screen,
|
|||
|
||||
/* If we don't have FDs at this point, it means we don't have fences
|
||||
* either. */
|
||||
if (sdma_fd == -1 && gfx_fd == -1)
|
||||
return ws->export_signalled_sync_file(ws);
|
||||
if (sdma_fd == -1)
|
||||
return gfx_fd;
|
||||
if (gfx_fd == -1)
|
||||
|
|
|
@ -114,6 +114,27 @@ static int amdgpu_fence_export_sync_file(struct radeon_winsys *rws,
|
|||
return fd;
|
||||
}
|
||||
|
||||
static int amdgpu_export_signalled_sync_file(struct radeon_winsys *rws)
|
||||
{
|
||||
struct amdgpu_winsys *ws = amdgpu_winsys(rws);
|
||||
uint32_t syncobj;
|
||||
int fd = -1;
|
||||
|
||||
int r = amdgpu_cs_create_syncobj2(ws->dev, DRM_SYNCOBJ_CREATE_SIGNALED,
|
||||
&syncobj);
|
||||
if (r) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
r = amdgpu_cs_syncobj_export_sync_file(ws->dev, syncobj, &fd);
|
||||
if (r) {
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
amdgpu_cs_destroy_syncobj(ws->dev, syncobj);
|
||||
return fd;
|
||||
}
|
||||
|
||||
static void amdgpu_fence_submitted(struct pipe_fence_handle *fence,
|
||||
uint64_t seq_no,
|
||||
uint64_t *user_fence_cpu_address)
|
||||
|
@ -1560,4 +1581,5 @@ void amdgpu_cs_init_functions(struct amdgpu_winsys *ws)
|
|||
ws->base.fence_reference = amdgpu_fence_reference;
|
||||
ws->base.fence_import_sync_file = amdgpu_fence_import_sync_file;
|
||||
ws->base.fence_export_sync_file = amdgpu_fence_export_sync_file;
|
||||
ws->base.export_signalled_sync_file = amdgpu_export_signalled_sync_file;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue