diff mbox series

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

Message ID tencent_434FAE5542A75738DF160FCD51201BCD8907@qq.com
State New
Headers show
Series [FFmpeg-devel] hwcontext_vulkan: use VkPhysicalDeviceTimelineSemaphoreFeatures to check for timeline semaphore supporting | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished
andriy/make_armv7_RPi4 success Make finished
andriy/make_fate_armv7_RPi4 success Make fate finished
andriy/make_aarch64_jetson success Make finished
andriy/make_fate_aarch64_jetson success Make fate finished

Commit Message

zhilizhao(赵志立) Jan. 27, 2022, 3:39 a.m. UTC
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(-)

Comments

Lynne Feb. 1, 2022, 10 p.m. UTC | #1
27 Jan 2022, 04:39 by quinkblack@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.
diff mbox series

Patch

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;