mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02:00
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> (cherry picked from commit5a3404d443)
This commit is contained in:
parent
305b0b1356
commit
a5bdf2abf9
3 changed files with 29 additions and 0 deletions
|
|
@ -610,6 +610,11 @@ struct radeon_winsys {
|
||||||
int (*fence_export_sync_file)(struct radeon_winsys *ws,
|
int (*fence_export_sync_file)(struct radeon_winsys *ws,
|
||||||
struct pipe_fence_handle *fence);
|
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
|
* 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
|
/* If we don't have FDs at this point, it means we don't have fences
|
||||||
* either. */
|
* either. */
|
||||||
|
if (sdma_fd == -1 && gfx_fd == -1)
|
||||||
|
return ws->export_signalled_sync_file(ws);
|
||||||
if (sdma_fd == -1)
|
if (sdma_fd == -1)
|
||||||
return gfx_fd;
|
return gfx_fd;
|
||||||
if (gfx_fd == -1)
|
if (gfx_fd == -1)
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,27 @@ static int amdgpu_fence_export_sync_file(struct radeon_winsys *rws,
|
||||||
return fd;
|
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,
|
static void amdgpu_fence_submitted(struct pipe_fence_handle *fence,
|
||||||
uint64_t seq_no,
|
uint64_t seq_no,
|
||||||
uint64_t *user_fence_cpu_address)
|
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_reference = amdgpu_fence_reference;
|
||||||
ws->base.fence_import_sync_file = amdgpu_fence_import_sync_file;
|
ws->base.fence_import_sync_file = amdgpu_fence_import_sync_file;
|
||||||
ws->base.fence_export_sync_file = amdgpu_fence_export_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…
Add table
Reference in a new issue