drm/amdgpu: add syncobj create/destroy/import/export apis
PATCH 1/2 drm/amdgpu: add syncobj create/destroy/import/export apis
From: Dave Airlie <[email protected]>
These are just wrappers using the amdgpu device handle.
--- amdgpu/amdgpu.h | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++- amdgpu/amdgpu_cs.c | 38 +++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-)
amdgpu/amdgpu.h +54 -1
@@ -1328,8 +1328,61 @@ int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem);*/ const char *amdgpu_get_marketing_name (amdgpu_device_handle dev); +/** +* Create kernel sync object +* +* \param dev - \c [in] device handle +* \param syncobj - \c [out] sync object handle +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +int amdgpu_cs_create_syncobj (amdgpu_device_handle dev, +uint32_t *syncobj); +/** +* Destroy kernel sync object +* +* \param dev - \c [in] device handle +* \param syncobj - \c [in] sync object handle +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +int amdgpu_cs_destroy_syncobj (amdgpu_device_handle dev, +uint32_t syncobj); + +/** +* Export kernel sync object to shareable fd. +* +* \param dev - \c [in] device handle +* \param syncobj - \c [in] sync object handle +* \param shared_fd - \c [out] shared file descriptor. +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +int amdgpu_cs_export_syncobj (amdgpu_device_handle dev, +uint32_t syncobj, +int *shared_fd); +/** +* Import kernel sync object from shareable fd. +* +* \param dev - \c [in] device handle +* \param shared_fd - \c [in] shared file descriptor. +* \param syncobj - \c [out] sync object handle +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +int amdgpu_cs_import_syncobj (amdgpu_device_handle dev, +int shared_fd, +uint32_t *syncobj); +#ifdef __cplusplus }#endif -#endif /* #ifdef _AMDGPU_H_ */
amdgpu/amdgpu_cs.c +38 -0
@@ -596,3 +596,41 @@ int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem) {return amdgpu_cs_unreference_sem (sem); } + +int amdgpu_cs_create_syncobj (amdgpu_device_handle dev, +uint32_t *handle) +{ +if (NULL == dev) +return -EINVAL ; + +return drmSyncobjCreate (dev->fd,0 , handle); +} + +int amdgpu_cs_destroy_syncobj (amdgpu_device_handle dev, +uint32_t handle) +{ +if (NULL == dev) +return -EINVAL ; + +return drmSyncobjDestroy (dev->fd, handle); +} + +int amdgpu_cs_export_syncobj (amdgpu_device_handle dev, +uint32_t handle, +int *shared_fd) +{ +if (NULL == dev) +return -EINVAL ; + +return drmSyncobjHandleToFD (dev->fd, handle, shared_fd); +} + +int amdgpu_cs_import_syncobj (amdgpu_device_handle dev, +int shared_fd, +uint32_t *handle) +{ +if (NULL == dev) +return -EINVAL ; + +return drmSyncobjFDToHandle (dev->fd, shared_fd, handle); +}
Signature · 6 lines
2.9.4 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
A message that is not in the archive (sent off-list or not yet received): 20170718004832.21206-1-airlied-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
PATCH 2/2 drm/amdgpu: add new low overhead command submission API.
From: Dave Airlie <[email protected]>
This just sends chunks to the kernel API for a single command stream.
This should provide a more future proof and extensible API for command submission.
--- amdgpu/amdgpu.h | 21 +++++++++++++++++++++ amdgpu/amdgpu_cs.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+)
amdgpu/amdgpu.h +21 -0
@@ -1382,6 +1382,27 @@ int amdgpu_cs_import_syncobj(amdgpu_device_handle dev,int shared_fd, uint32_t *syncobj); +/** +* Submit raw command submission to kernel +* +* \param dev - \c [in] device handle +* \param context - \c [in] context handle for context id +* \param bo_list_handle - \c [in] request bo list handle (0 for none) +* \param num_chunks - \c [in] number of CS chunks to submit +* \param chunks - \c [in] array of CS chunks +* \param seq_no - \c [out] output sequence number for submission. +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +struct drm_amdgpu_cs_chunk ; +int amdgpu_cs_submit_raw (amdgpu_device_handle dev, +amdgpu_context_handle context, +uint32_t bo_list_handle, +int num_chunks, +struct drm_amdgpu_cs_chunk *chunks, +uint64_t *seq_no); #ifdef __cplusplus }#endif
amdgpu/amdgpu_cs.c +30 -0
@@ -634,3 +634,33 @@ int amdgpu_cs_import_syncobj(amdgpu_device_handle dev,return drmSyncobjFDToHandle (dev->fd, shared_fd, handle); } + +int amdgpu_cs_submit_raw (amdgpu_device_handle dev, +amdgpu_context_handle context, +uint32_t bo_list_handle, +int num_chunks, +struct drm_amdgpu_cs_chunk *chunks, +uint64_t *seq_no) +{ +union drm_amdgpu_cs cs = {0 }; +uint64_t *chunk_array; +int i, r; +if (num_chunks ==0 ) +return -EINVAL ; + + chunk_array =alloca (sizeof (uint64_t ) * num_chunks); +for (i =0 ; i < num_chunks; i++) + chunk_array[i] = (uint64_t )(uintptr_t )&chunks[i]; + cs.in.chunks = (uint64_t )(uintptr_t )chunk_array; + cs.in.ctx_id = context->id; + cs.in.bo_list_handle = bo_list_handle; + cs.in.num_chunks = num_chunks; + r =drmCommandWriteRead (dev->fd,DRM_AMDGPU_CS , + &cs,sizeof (cs)); +if (r) +return r; + +if (seq_no) + *seq_no = cs.out.handle; +return 0 ; +}
Signature · 6 lines
2.9.4 _______________________________________________ amd-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH libdrm 2/2] drm/amdgpu: add new low overhead command submission API.
Am 18.07.2017 um 02:48 schrieb Dave Airlie:
Quoted 30 lines
From: Dave Airlie <[email protected]>
This just sends chunks to the kernel API for a single command stream.
This should provide a more future proof and extensible API for command submission.
Signed-off-by Dave Airlie <[email protected]>--- amdgpu/amdgpu.h | 21 +++++++++++++++++++++ amdgpu/amdgpu_cs.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+)amdgpu/amdgpu.h +8
-0@@ -1382,6 +1382,27 @@ int amdgpu_cs_import_syncobj(amdgpu_device_handle dev,int shared_fd, uint32_t *syncobj); +/** +* Submit raw command submission to kernel +* +* \param dev - \c [in] device handle +* \param context - \c [in] context handle for context id +* \param bo_list_handle - \c [in] request bo list handle (0 for none) +* \param num_chunks - \c [in] number of CS chunks to submit +* \param chunks - \c [in] array of CS chunks
amdgpu/amdgpu.h int amdgpu_cs_import_syncobj(amdgpu_device_handle dev, · line 1402
Quoted 10 lines
amdgpu/amdgpu.h +10
-0+* \param seq_no - \c [out] output sequence number for submission. +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +struct drm_amdgpu_cs_chunk ; +int amdgpu_cs_submit_raw(amdgpu_device_handle dev, + amdgpu_context_handle context, + uint32_t bo_list_handle,
Why is bo_list_handle an uint32_t here?
Apart from that it looks good to me,
Christian.
Quoted 34 lines
amdgpu/amdgpu.h +3
-0+int num_chunks, + struct drm_amdgpu_cs_chunk *chunks, + uint64_t *seq_no); #ifdef __cplusplus }#endif amdgpu/amdgpu_cs.c +20
-0@@ -634,3 +634,33 @@ int amdgpu_cs_import_syncobj(amdgpu_device_handle dev,return drmSyncobjFDToHandle (dev->fd, shared_fd, handle); } + +int amdgpu_cs_submit_raw (amdgpu_device_handle dev, +amdgpu_context_handle context, +uint32_t bo_list_handle, +int num_chunks, +struct drm_amdgpu_cs_chunk *chunks, +uint64_t *seq_no) +{ +union drm_amdgpu_cs cs = {0 }; +uint64_t *chunk_array; +int i, r; +if (num_chunks ==0 ) +return -EINVAL ; + + chunk_array =alloca (sizeof (uint64_t ) * num_chunks); +for (i =0 ; i < num_chunks; i++) + chunk_array[i] = (uint64_t )(uintptr_t )&chunks[i]; + cs.in.chunks = (uint64_t )(uintptr_t )chunk_array; + cs.in.ctx_id = context->id; + cs.in.bo_list_handle = bo_list_handle;
amdgpu/amdgpu_cs.c int amdgpu_cs_import_syncobj(amdgpu_device_handle dev, · line 666
Quoted 10 lines
amdgpu/amdgpu_cs.c +10
-0+ cs.in.num_chunks = num_chunks; + r =drmCommandWriteRead (dev->fd,DRM_AMDGPU_CS , + &cs,sizeof (cs)); +if (r) +return r; + +if (seq_no) + *seq_no = cs.out.handle; +return 0 ; +}
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
zhoucm1
Acked-by Chunming ZhouQuoted 5 lines · Dave Airlie
From: Dave Airlie <[email protected]>
These are just wrappers using the amdgpu device handle.
Signed-off-by Dave Airlie <[email protected]>
Quoted 108 lines
--- amdgpu/amdgpu.h | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++- amdgpu/amdgpu_cs.c | 38 +++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-)amdgpu/amdgpu.h +54
-1@@ -1328,8 +1328,61 @@ int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem);*/ const char *amdgpu_get_marketing_name (amdgpu_device_handle dev); +/** +* Create kernel sync object +* +* \param dev - \c [in] device handle +* \param syncobj - \c [out] sync object handle +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +int amdgpu_cs_create_syncobj (amdgpu_device_handle dev, +uint32_t *syncobj); +/** +* Destroy kernel sync object +* +* \param dev - \c [in] device handle +* \param syncobj - \c [in] sync object handle +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +int amdgpu_cs_destroy_syncobj (amdgpu_device_handle dev, +uint32_t syncobj); + +/** +* Export kernel sync object to shareable fd. +* +* \param dev - \c [in] device handle +* \param syncobj - \c [in] sync object handle +* \param shared_fd - \c [out] shared file descriptor. +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +int amdgpu_cs_export_syncobj (amdgpu_device_handle dev, +uint32_t syncobj, +int *shared_fd); +/** +* Import kernel sync object from shareable fd. +* +* \param dev - \c [in] device handle +* \param shared_fd - \c [in] shared file descriptor. +* \param syncobj - \c [out] sync object handle +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +int amdgpu_cs_import_syncobj (amdgpu_device_handle dev, +int shared_fd, +uint32_t *syncobj); +#ifdef __cplusplus }#endif -#endif /* #ifdef _AMDGPU_H_ */ amdgpu/amdgpu_cs.c +28
-0@@ -596,3 +596,41 @@ int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem) {return amdgpu_cs_unreference_sem (sem); } + +int amdgpu_cs_create_syncobj (amdgpu_device_handle dev, +uint32_t *handle) +{ +if (NULL == dev) +return -EINVAL ; + +return drmSyncobjCreate (dev->fd,0 , handle); +} + +int amdgpu_cs_destroy_syncobj (amdgpu_device_handle dev, +uint32_t handle) +{ +if (NULL == dev) +return -EINVAL ; + +return drmSyncobjDestroy (dev->fd, handle); +} + +int amdgpu_cs_export_syncobj (amdgpu_device_handle dev, +uint32_t handle, +int *shared_fd) +{ +if (NULL == dev) +return -EINVAL ; + +return drmSyncobjHandleToFD (dev->fd, handle, shared_fd); +}
amdgpu/amdgpu_cs.c int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem) · line 636
Quoted 10 lines
amdgpu/amdgpu_cs.c +10
-0+ +int amdgpu_cs_import_syncobj (amdgpu_device_handle dev, +int shared_fd, +uint32_t *handle) +{ +if (NULL == dev) +return -EINVAL ; + +return drmSyncobjFDToHandle (dev->fd, shared_fd, handle); +}
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Am 18.07.2017 um 02:48 schrieb Dave Airlie:
Quoted 5 lines
From: Dave Airlie <[email protected]>
These are just wrappers using the amdgpu device handle.
Signed-off-by Dave Airlie <[email protected]>
Quoted 108 lines
--- amdgpu/amdgpu.h | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++- amdgpu/amdgpu_cs.c | 38 +++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-)amdgpu/amdgpu.h +54
-1@@ -1328,8 +1328,61 @@ int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem);*/ const char *amdgpu_get_marketing_name (amdgpu_device_handle dev); +/** +* Create kernel sync object +* +* \param dev - \c [in] device handle +* \param syncobj - \c [out] sync object handle +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +int amdgpu_cs_create_syncobj (amdgpu_device_handle dev, +uint32_t *syncobj); +/** +* Destroy kernel sync object +* +* \param dev - \c [in] device handle +* \param syncobj - \c [in] sync object handle +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +int amdgpu_cs_destroy_syncobj (amdgpu_device_handle dev, +uint32_t syncobj); + +/** +* Export kernel sync object to shareable fd. +* +* \param dev - \c [in] device handle +* \param syncobj - \c [in] sync object handle +* \param shared_fd - \c [out] shared file descriptor. +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +int amdgpu_cs_export_syncobj (amdgpu_device_handle dev, +uint32_t syncobj, +int *shared_fd); +/** +* Import kernel sync object from shareable fd. +* +* \param dev - \c [in] device handle +* \param shared_fd - \c [in] shared file descriptor. +* \param syncobj - \c [out] sync object handle +* +* \return 0 on success\n +* <0 - Negative POSIX Error code +* +*/ +int amdgpu_cs_import_syncobj (amdgpu_device_handle dev, +int shared_fd, +uint32_t *syncobj); +#ifdef __cplusplus }#endif -#endif /* #ifdef _AMDGPU_H_ */ amdgpu/amdgpu_cs.c +28
-0@@ -596,3 +596,41 @@ int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem) {return amdgpu_cs_unreference_sem (sem); } + +int amdgpu_cs_create_syncobj (amdgpu_device_handle dev, +uint32_t *handle) +{ +if (NULL == dev) +return -EINVAL ; + +return drmSyncobjCreate (dev->fd,0 , handle); +} + +int amdgpu_cs_destroy_syncobj (amdgpu_device_handle dev, +uint32_t handle) +{ +if (NULL == dev) +return -EINVAL ; + +return drmSyncobjDestroy (dev->fd, handle); +} + +int amdgpu_cs_export_syncobj (amdgpu_device_handle dev, +uint32_t handle, +int *shared_fd) +{ +if (NULL == dev) +return -EINVAL ; + +return drmSyncobjHandleToFD (dev->fd, handle, shared_fd); +}
amdgpu/amdgpu_cs.c int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem) · line 636
Quoted 10 lines
amdgpu/amdgpu_cs.c +10
-0+ +int amdgpu_cs_import_syncobj (amdgpu_device_handle dev, +int shared_fd, +uint32_t *handle) +{ +if (NULL == dev) +return -EINVAL ; + +return drmSyncobjFDToHandle (dev->fd, shared_fd, handle); +}
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel