[FFmpeg-devel] [PATCH] avutil/hwcontext_vulkan: fix run on macOS

Zhao Zhili quinkblack at foxmail.com
Tue Nov 7 16:01:07 EET 2023


> On Nov 7, 2023, at 20:46, epirat07 at gmail.com wrote:
> 
> 
> 
> On 7 Nov 2023, at 12:42, Lynne wrote:
> 
>> Nov 7, 2023, 12:25 by quinkblack at foxmail.com:
>> 
>>> Ping.
>>> 
>>>> 在 2023年10月30日,下午4:17,Zhao Zhili <quinkblack at foxmail.com> 写道:
>>>> 
>>>> From: Zhao Zhili <zhilizhao at tencent.com>
>>>> 
>>>> VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME is required on macOS,
>>>> and VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR flag should
>>>> be set.
>>>> ---
>>>> libavutil/hwcontext_vulkan.c | 9 ++++++++-
>>>> 1 file changed, 8 insertions(+), 1 deletion(-)
>>>> 
>>>> diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c
>>>> index 8481427b42..9fbf61ee70 100644
>>>> --- a/libavutil/hwcontext_vulkan.c
>>>> +++ b/libavutil/hwcontext_vulkan.c
>>>> @@ -405,7 +405,6 @@ typedef struct VulkanOptExtension {
>>>> } VulkanOptExtension;
>>>> 
>>>> static const VulkanOptExtension optional_instance_exts[] = {
>>>> -    /* Pointless, here avoid zero-sized structs */
>>>> { VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME,          FF_VK_EXT_NO_FLAG                },
>>>> };
>>>> 
>>>> @@ -784,6 +783,14 @@ static int create_instance(AVHWDeviceContext *ctx, AVDictionary *opts)
>>>> inst_props.pNext = &validation_features;
>>>> }
>>>> 
>>>> +    for (int i = 0; i < inst_props.enabledExtensionCount; i++) {
>>>> +        if (!strcmp(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME,
>>>> +                    inst_props.ppEnabledExtensionNames[i])) {
>>>> +            inst_props.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;
>>>> +            break;
>>>> +        }
>>>> +    }
>>>> +
>>>> /* Try to create the instance */
>>>> ret = vk->CreateInstance(&inst_props, hwctx->alloc, &hwctx->inst);
>>>> 
>> 
>> Pong. It is a bit incorrect - from memory,
>> VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR requires that
>> only Vulkan 1.1 features are enabled, while we require 1.3.
>> But if it works, sure. Could you ifdef it out everywhere outside of OSX?
> 
> I wonder, how is this working given that MoltenVK does not provide Vulkan 1.3
> but only 1.2?

I haven't checked the details. It looks like all hwcontext required features are available in
MoltenVK, although it doesn’t provide full 1.3 implementation.

libplacebo does the same 
https://github.com/haasn/libplacebo/pull/129/files

Progress of MoltenVK to support 1.3
https://github.com/KhronosGroup/MoltenVK/issues/1930

> 
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org <mailto:ffmpeg-devel at ffmpeg.org>
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>> 
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org <mailto:ffmpeg-devel-request at ffmpeg.org> with subject "unsubscribe".
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org <mailto:ffmpeg-devel at ffmpeg.org>
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org <mailto:ffmpeg-devel-request at ffmpeg.org> with subject "unsubscribe".



More information about the ffmpeg-devel mailing list