Am 30.04.19 um 14:03 schrieb Sahu, Satyajit:
On 4/30/2019 5:02 PM, Christian König wrote:
[CAUTION: External Email]
Am 30.04.19 um 13:12 schrieb Sahu, Satyajit:
On 4/30/2019 4:29 PM, Christian König wrote:
[CAUTION: External Email]
Am 30.04.19 um 12:51 schrieb Sahu, Satyajit:
Query the max uvd handles and used uvd handles.
NAK, please use the generic amdgpu_query_info() function for this.
Regards, Christian.
Currently amdgpu_query_info does not provide an option to specify the hw_ip_type. For AMDGPU_INFO_NUM_HANDLES the hw_ip_type needs to be AMDGPU_HW_IP_UVD, otherwise the kernel returns error.
Ok, that makes sense.
But please still add a generic query function which takes query and hw_ip_type instead of hard coding those values.
Should I add a new parameter in amdgpu_query_info or add a new query_info?
Add a new one and please double check if there isn't something existing which can be used.
BTW: What do you need this for? The number returned is pretty useless on newer hardware.
On stoney chromebook when simultaneous used uvd handles exceeds max supported uvd handles, there is a failure which is not handled. Thatswhy there is a need to check it before allocation so that we can fallback to software decoding.
Well that is still racy, e.g. two processes can at the same time query that there is only 1 handle slot left and then both try to use it.
Better would be to add the missing handling that we can't create an UVD context in this case.
Christian.
Regards, Christian.
Regards,
Satyajit
Regards,
Satyajit
Signed-off-by: Satyajit Sahu satyajit.sahu@amd.com
amdgpu/amdgpu.h | 14 ++++++++++++++ amdgpu/amdgpu_gpu_info.c | 15 +++++++++++++++ 2 files changed, 29 insertions(+)
diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h index c44a495a..407b5fae 100644 --- a/amdgpu/amdgpu.h +++ b/amdgpu/amdgpu.h @@ -1174,6 +1174,20 @@ int amdgpu_query_gpu_info(amdgpu_device_handle dev, int amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id, unsigned size, void *value);
+/**
- Query uvd handles info.
- \param dev - \c [in] Device handle. See
#amdgpu_device_initialize()
- \param size - \c [in] Size of the returned value.
- \param value - \c [out] Pointer to the return value.
- \return 0 on success\n
- * <0 - Negative POSIX error code
+*/ +int amdgpu_query_uvd_handles(amdgpu_device_handle dev, + unsigned size, void *value); /** * Query hardware or driver information. * diff --git a/amdgpu/amdgpu_gpu_info.c b/amdgpu/amdgpu_gpu_info.c index 777087f2..253c4da7 100644 --- a/amdgpu/amdgpu_gpu_info.c +++ b/amdgpu/amdgpu_gpu_info.c @@ -44,6 +44,21 @@ drm_public int amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id, sizeof(struct drm_amdgpu_info)); }
+drm_public int amdgpu_query_uvd_handles(amdgpu_device_handle dev, + unsigned size, void *value) +{ + struct drm_amdgpu_info request;
+ memset(&request, 0, sizeof(request)); + request.return_pointer = (uintptr_t)value; + request.return_size = size; + request.query = AMDGPU_INFO_NUM_HANDLES; + request.query_hw_ip.type = AMDGPU_HW_IP_UVD;
+ return drmCommandWrite(dev->fd, DRM_AMDGPU_INFO, &request, + sizeof(struct drm_amdgpu_info)); +}
drm_public int amdgpu_query_crtc_from_id(amdgpu_device_handle dev, unsigned id, int32_t *result) {
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel