summaryrefslogtreecommitdiff
path: root/src/amd/vulkan
diff options
context:
space:
mode:
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>2022-01-13 17:30:38 +0100
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>2022-01-17 08:38:29 +0100
commit88f191891990b8554aa2cd7528b723d36bb745d2 (patch)
tree26701b042f9eabd7b15c39d2a45f22033f36c6a6 /src/amd/vulkan
parentf6ffefba3e466a71a1a3099e1385bee09920e088 (diff)
radv/winsys: fix zero submit if no timeline semaphore support
Kernels that don't support timeline semaphores also don't support transferring syncobjs. Use export/import instead. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5845 Fixes: 967fc415fc4 ("radv: Add new submission path for use by the common sync framework.") Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14538>
Diffstat (limited to 'src/amd/vulkan')
-rw-r--r--src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
index 2f9a230a033..aab6edc82e5 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
@@ -1248,10 +1248,24 @@ radv_amdgpu_cs_submit_zero(struct radv_amdgpu_ctx *ctx, enum ring_type ring_type
}
for (unsigned i = 0; i < sem_info->signal.syncobj_count; ++i) {
- ret = amdgpu_cs_syncobj_transfer(ctx->ws->dev, sem_info->signal.syncobj[i], 0, queue_syncobj,
- 0, 0);
- if (ret < 0)
- return VK_ERROR_DEVICE_LOST;
+ uint32_t dst_handle = sem_info->signal.syncobj[i];
+ uint32_t src_handle = queue_syncobj;
+
+ if (ctx->ws->info.has_timeline_syncobj) {
+ ret = amdgpu_cs_syncobj_transfer(ctx->ws->dev, dst_handle, 0, src_handle, 0, 0);
+ if (ret < 0)
+ return VK_ERROR_DEVICE_LOST;
+ } else {
+ int fd;
+ ret = amdgpu_cs_syncobj_export_sync_file(ctx->ws->dev, src_handle, &fd);
+ if (ret < 0)
+ return VK_ERROR_DEVICE_LOST;
+
+ ret = amdgpu_cs_syncobj_import_sync_file(ctx->ws->dev, dst_handle, fd);
+ close(fd);
+ if (ret < 0)
+ return VK_ERROR_DEVICE_LOST;
+ }
}
for (unsigned i = 0; i < sem_info->signal.timeline_syncobj_count; ++i) {
ret = amdgpu_cs_syncobj_transfer(ctx->ws->dev,