diff options
author | Dave Airlie <[email protected]> | 2017-07-18 06:00:44 +0100 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2017-07-21 21:31:54 +0100 |
commit | b5670beb31d3e6cfb8fff6f14e5fd5ec03ec16e9 (patch) | |
tree | 68d408340a1a277811ad9fbbd65d6c4443bf6e2e | |
parent | 80562f2b77bfff224cb469ef475912222e5d8a9c (diff) |
radv/winsys: add syncobj hooks
This just adds syncobj create/destroy/export/import paths into
the winsys interface.
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
-rw-r--r-- | src/amd/vulkan/radv_radeon_winsys.h | 8 | ||||
-rw-r--r-- | src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c | 36 |
2 files changed, 44 insertions, 0 deletions
diff --git a/src/amd/vulkan/radv_radeon_winsys.h b/src/amd/vulkan/radv_radeon_winsys.h index cdcaeca46ec..2f3990c891c 100644 --- a/src/amd/vulkan/radv_radeon_winsys.h +++ b/src/amd/vulkan/radv_radeon_winsys.h @@ -221,9 +221,17 @@ struct radeon_winsys { bool absolute, uint64_t timeout); + /* old semaphores - non shareable */ struct radeon_winsys_sem *(*create_sem)(struct radeon_winsys *ws); void (*destroy_sem)(struct radeon_winsys_sem *sem); + /* new shareable sync objects */ + int (*create_syncobj)(struct radeon_winsys *ws, uint32_t *handle); + void (*destroy_syncobj)(struct radeon_winsys *ws, uint32_t handle); + + int (*export_syncobj)(struct radeon_winsys *ws, uint32_t syncobj, int *fd); + int (*import_syncobj)(struct radeon_winsys *ws, int fd, uint32_t *syncobj); + }; static inline void radeon_emit(struct radeon_winsys_cs *cs, uint32_t value) diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c index 93243dfd135..6ed8f32604f 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c @@ -1172,6 +1172,38 @@ error_out: return r; } +static int radv_amdgpu_create_syncobj(struct radeon_winsys *_ws, + uint32_t *handle) +{ + struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws); + return amdgpu_cs_create_syncobj(ws->dev, handle); +} + +static void radv_amdgpu_destroy_syncobj(struct radeon_winsys *_ws, + uint32_t handle) +{ + struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws); + amdgpu_cs_destroy_syncobj(ws->dev, handle); +} + +static int radv_amdgpu_export_syncobj(struct radeon_winsys *_ws, + uint32_t syncobj, + int *fd) +{ + struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws); + + return amdgpu_cs_export_syncobj(ws->dev, syncobj, fd); +} + +static int radv_amdgpu_import_syncobj(struct radeon_winsys *_ws, + int fd, + uint32_t *syncobj) +{ + struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws); + + return amdgpu_cs_import_syncobj(ws->dev, fd, syncobj); +} + void radv_amdgpu_cs_init_functions(struct radv_amdgpu_winsys *ws) { ws->base.ctx_create = radv_amdgpu_ctx_create; @@ -1190,5 +1222,9 @@ void radv_amdgpu_cs_init_functions(struct radv_amdgpu_winsys *ws) ws->base.destroy_fence = radv_amdgpu_destroy_fence; ws->base.create_sem = radv_amdgpu_create_sem; ws->base.destroy_sem = radv_amdgpu_destroy_sem; + ws->base.create_syncobj = radv_amdgpu_create_syncobj; + ws->base.destroy_syncobj = radv_amdgpu_destroy_syncobj; + ws->base.export_syncobj = radv_amdgpu_export_syncobj; + ws->base.import_syncobj = radv_amdgpu_import_syncobj; ws->base.fence_wait = radv_amdgpu_fence_wait; } |