[FFmpeg-devel] [PATCH] hwcontext_vulkan: use VkPhysicalDeviceTimelineSemaphoreFeatures to check for timeline semaphore supporting

Lynne dev at lynne.ee
Wed Feb 2 00:00:41 EET 2022


27 Jan 2022, 04:39 by quinkblack at foxmail.com:

> VkPhysicalDeviceVulkan12Features isn't implemented on MoltenVK yet.
> VkPhysicalDeviceTimelineSemaphoreFeatures is less versatile but
> simple. None of device_features_1_1 nor device_features_1_2 has real
> usage yet, keep the code for future.
> ---
>  libavutil/hwcontext_vulkan.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c
> index ae19fc2ab6..2e219511c9 100644
> --- a/libavutil/hwcontext_vulkan.c
> +++ b/libavutil/hwcontext_vulkan.c
> @@ -1321,8 +1321,16 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx,
>  VulkanDevicePriv *p = ctx->internal->priv;
>  FFVulkanFunctions *vk = &p->vkfn;
>  AVVulkanDeviceContext *hwctx = ctx->hwctx;
> +    /* VkPhysicalDeviceVulkan12Features has a timelineSemaphore field, but
> +     * MoltenVK doesn't implement VkPhysicalDeviceVulkan12Features yet, so we
> +     * use VkPhysicalDeviceTimelineSemaphoreFeatures directly.
> +     */
> +    VkPhysicalDeviceTimelineSemaphoreFeatures timeline_features = {
> +        .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES,
> +    };
>  VkPhysicalDeviceVulkan12Features dev_features_1_2 = {
>  .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
> +        .pNext = &timeline_features,
>  };
>  VkPhysicalDeviceVulkan11Features dev_features_1_1 = {
>  .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES,
> @@ -1366,7 +1374,7 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx,
>  #undef COPY_FEATURE
>  
>  /* We require timeline semaphores */
> -    if (!dev_features_1_2.timelineSemaphore) {
> +    if (!timeline_features.timelineSemaphore) {
>  av_log(ctx, AV_LOG_ERROR, "Device does not support timeline semaphores!\n");
>  err = AVERROR(ENOSYS);
>  goto end;
>

I didn't have a strong opinion on this, and on my nvidia testing machine,
VkPhysicalDeviceVulkan12Features.timelineSemaphore isn't set for
some reason (despite alleged 1.2 compliance), so this may help there.
Pushed, thanks.


More information about the ffmpeg-devel mailing list