diff --git a/src/amd/vulkan/radv_radeon_winsys.h b/src/amd/vulkan/radv_radeon_winsys.h index 2fbe3680e1e..047e07afa22 100644 --- a/src/amd/vulkan/radv_radeon_winsys.h +++ b/src/amd/vulkan/radv_radeon_winsys.h @@ -283,26 +283,6 @@ struct radeon_winsys { int (*surface_init)(struct radeon_winsys *ws, const struct ac_surf_info *surf_info, struct radeon_surf *surf); - int (*create_syncobj)(struct radeon_winsys *ws, bool create_signaled, uint32_t *handle); - void (*destroy_syncobj)(struct radeon_winsys *ws, uint32_t handle); - - void (*reset_syncobj)(struct radeon_winsys *ws, uint32_t handle); - void (*signal_syncobj)(struct radeon_winsys *ws, uint32_t handle, uint64_t point); - VkResult (*query_syncobj)(struct radeon_winsys *ws, uint32_t handle, uint64_t *point); - bool (*wait_syncobj)(struct radeon_winsys *ws, const uint32_t *handles, uint32_t handle_count, - bool wait_all, uint64_t timeout); - VkResult (*wait_timeline_syncobj)(struct radeon_winsys *ws, const uint32_t *handles, - const uint64_t *points, uint32_t handle_count, bool wait_all, - bool available, uint64_t timeout); - - int (*export_syncobj)(struct radeon_winsys *ws, uint32_t syncobj, int *fd); - int (*import_syncobj)(struct radeon_winsys *ws, int fd, uint32_t *syncobj); - - int (*export_syncobj_to_sync_file)(struct radeon_winsys *ws, uint32_t syncobj, int *fd); - - /* Note that this, unlike the normal import, uses an existing syncobj. */ - int (*import_syncobj_from_sync_file)(struct radeon_winsys *ws, uint32_t syncobj, int fd); - int (*get_fd)(struct radeon_winsys *ws); const struct vk_sync_type *const *(*get_sync_types)(struct radeon_winsys *ws); diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c index 1000d819f1c..2f9a230a033 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c @@ -1738,140 +1738,6 @@ error_out: return result; } -static int -radv_amdgpu_create_syncobj(struct radeon_winsys *_ws, bool create_signaled, uint32_t *handle) -{ - struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws); - uint32_t flags = 0; - - if (create_signaled) - flags |= DRM_SYNCOBJ_CREATE_SIGNALED; - - return amdgpu_cs_create_syncobj2(ws->dev, flags, 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 void -radv_amdgpu_reset_syncobj(struct radeon_winsys *_ws, uint32_t handle) -{ - struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws); - amdgpu_cs_syncobj_reset(ws->dev, &handle, 1); -} - -static void -radv_amdgpu_signal_syncobj(struct radeon_winsys *_ws, uint32_t handle, uint64_t point) -{ - struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws); - if (point) - amdgpu_cs_syncobj_timeline_signal(ws->dev, &handle, &point, 1); - else - amdgpu_cs_syncobj_signal(ws->dev, &handle, 1); -} - -static VkResult -radv_amdgpu_query_syncobj(struct radeon_winsys *_ws, uint32_t handle, uint64_t *point) -{ - struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws); - int ret = amdgpu_cs_syncobj_query(ws->dev, &handle, point, 1); - if (ret == 0) - return VK_SUCCESS; - else if (ret == -ENOMEM) - return VK_ERROR_OUT_OF_HOST_MEMORY; - else { - /* Remaining error are driver internal issues: EFAULT for - * dangling pointers and ENOENT for non-existing syncobj. */ - fprintf(stderr, "amdgpu: internal error in radv_amdgpu_query_syncobj. (%d)\n", ret); - return VK_ERROR_UNKNOWN; - } -} - -static bool -radv_amdgpu_wait_syncobj(struct radeon_winsys *_ws, const uint32_t *handles, uint32_t handle_count, - bool wait_all, uint64_t timeout) -{ - struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws); - uint32_t tmp; - - /* The timeouts are signed, while vulkan timeouts are unsigned. */ - timeout = MIN2(timeout, INT64_MAX); - - int ret = amdgpu_cs_syncobj_wait( - ws->dev, (uint32_t *)handles, handle_count, timeout, - DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT | (wait_all ? DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL : 0), - &tmp); - if (ret == 0) { - return true; - } else if (ret == -ETIME) { - return false; - } else { - fprintf(stderr, "amdgpu: radv_amdgpu_wait_syncobj failed! (%d)\n", ret); - return false; - } -} - -static VkResult -radv_amdgpu_wait_timeline_syncobj(struct radeon_winsys *_ws, const uint32_t *handles, - const uint64_t *points, uint32_t handle_count, bool wait_all, - bool available, uint64_t timeout) -{ - struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws); - - /* The timeouts are signed, while vulkan timeouts are unsigned. */ - timeout = MIN2(timeout, INT64_MAX); - - int ret = amdgpu_cs_syncobj_timeline_wait( - ws->dev, (uint32_t *)handles, (uint64_t *)points, handle_count, timeout, - DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT | (wait_all ? DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL : 0) | - (available ? DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE : 0), - NULL); - if (ret == 0) { - return VK_SUCCESS; - } else if (ret == -ETIME) { - return VK_TIMEOUT; - } else { - fprintf(stderr, "amdgpu: radv_amdgpu_wait_timeline_syncobj failed! (%d)\n", ret); - return VK_ERROR_UNKNOWN; - } -} - -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); -} - -static int -radv_amdgpu_export_syncobj_to_sync_file(struct radeon_winsys *_ws, uint32_t syncobj, int *fd) -{ - struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws); - - return amdgpu_cs_syncobj_export_sync_file(ws->dev, syncobj, fd); -} - -static int -radv_amdgpu_import_syncobj_from_sync_file(struct radeon_winsys *_ws, uint32_t syncobj, int fd) -{ - struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws); - - return amdgpu_cs_syncobj_import_sync_file(ws->dev, syncobj, fd); -} - void radv_amdgpu_cs_init_functions(struct radv_amdgpu_winsys *ws) { @@ -1888,15 +1754,4 @@ radv_amdgpu_cs_init_functions(struct radv_amdgpu_winsys *ws) ws->base.cs_execute_secondary = radv_amdgpu_cs_execute_secondary; ws->base.cs_submit = radv_amdgpu_winsys_cs_submit; ws->base.cs_dump = radv_amdgpu_winsys_cs_dump; - ws->base.create_syncobj = radv_amdgpu_create_syncobj; - ws->base.destroy_syncobj = radv_amdgpu_destroy_syncobj; - ws->base.reset_syncobj = radv_amdgpu_reset_syncobj; - ws->base.signal_syncobj = radv_amdgpu_signal_syncobj; - ws->base.query_syncobj = radv_amdgpu_query_syncobj; - ws->base.wait_syncobj = radv_amdgpu_wait_syncobj; - ws->base.wait_timeline_syncobj = radv_amdgpu_wait_timeline_syncobj; - ws->base.export_syncobj = radv_amdgpu_export_syncobj; - ws->base.import_syncobj = radv_amdgpu_import_syncobj; - ws->base.export_syncobj_to_sync_file = radv_amdgpu_export_syncobj_to_sync_file; - ws->base.import_syncobj_from_sync_file = radv_amdgpu_import_syncobj_from_sync_file; }