[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