Currently, v3d only supports single in/out syncobj per submission (in v3d_submit_cl, there are two in_sync, one for bin and another for render job); however, Vulkan queue submit operations expect multiples wait and signal semaphores. This series extends v3d interface and job dependency operations to handle more than one in/out syncobj. The main difference from the RFC series[1] is that here I already worked on top of Daniel Vetter's work for drm/scheduler[2] (even if the series is missing a few acks). The first patch just decouples the steps to lookup and add job dependency from the job init code, since the operation repeats for every syncobj that a job should wait before starting. So, the third patch of this series will reuse it to handle multiples wait for semaphores. The second patch extends our interface by using a generic extension. This approach was inspired by i915_user_extension[3] and amd_cs_chunks[4] to give a little more flexibility in adding other submission features in the future. Therefore, the list of extensions would work as a hub of features that use an id to determine the corresponding feature data type. With this base, the third patch adds multiple wait/signal semaphores support. For this, we add to the list of the generic extensions a new data type (drm_v3d_multi_sync) that points to two arrays of syncobjs (in/out) and also determines (flags) if the dependencies must be added to the bin job or render job (in the case of v3d_submit_cl). An auxiliary struct (v3d_submit_ext) is used when parsing submission extensions. Finally, we reserve some space in the semaphore struct (drm_v3d_sem) to accommodate timeline semaphores that we aim to add support soon (same reason for already defining v3d_submit_outsync). [1] https://patchwork.freedesktop.org/series/93388/ [2] https://patchwork.freedesktop.org/series/93413/ [3] https://cgit.freedesktop.org/drm/drm-misc/commit/drivers/gpu/drm/i915/i915_user_extensions.c?id=9d1305ef80b95dde0337106ed8b826604e2155ad [4] https://cgit.freedesktop.org/drm/drm-misc/tree/include/uapi/drm/amdgpu_drm.h#n556 In the mesa side, the work related to this series is available at https://gitlab.freedesktop.org/mwen/mesa/-/commit/77bd2b21f61a9caeced934bd13b99e675a428398 where I checked these changes using Mesa CI. Melissa Wen (3): drm/v3d: decouple adding job dependencies steps from job init drm/v3d: add generic ioctl extension drm/v3d: add multiple syncobjs support drivers/gpu/drm/v3d/v3d_drv.c | 7 +- drivers/gpu/drm/v3d/v3d_drv.h | 14 ++ drivers/gpu/drm/v3d/v3d_gem.c | 303 ++++++++++++++++++++++++++++------ include/uapi/drm/v3d_drm.h | 76 ++++++++- 4 files changed, 350 insertions(+), 50 deletions(-) -- 2.30.2
Attachment:
signature.asc
Description: PGP signature