Message ID | tencent_E37C7AAC8A39CDC271B63069AE01F9692A0A@qq.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] avutil/hwcontext_vulkan: fix run on macOS | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
Ping. > 在 2023年10月30日,下午4:17,Zhao Zhili <quinkblack@foxmail.com> 写道: > > From: Zhao Zhili <zhilizhao@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); > > -- > 2.42.0 >
Nov 7, 2023, 12:25 by quinkblack@foxmail.com: > Ping. > >> 在 2023年10月30日,下午4:17,Zhao Zhili <quinkblack@foxmail.com> 写道: >> >> From: Zhao Zhili <zhilizhao@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?
On 7 Nov 2023, at 12:42, Lynne wrote: > Nov 7, 2023, 12:25 by quinkblack@foxmail.com: > >> Ping. >> >>> 在 2023年10月30日,下午4:17,Zhao Zhili <quinkblack@foxmail.com> 写道: >>> >>> From: Zhao Zhili <zhilizhao@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? > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
> On Nov 7, 2023, at 20:46, epirat07@gmail.com wrote: > > > > On 7 Nov 2023, at 12:42, Lynne wrote: > >> Nov 7, 2023, 12:25 by quinkblack@foxmail.com: >> >>> Ping. >>> >>>> 在 2023年10月30日,下午4:17,Zhao Zhili <quinkblack@foxmail.com> 写道: >>>> >>>> From: Zhao Zhili <zhilizhao@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@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org> >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> To unsubscribe, visit link above, or email >> ffmpeg-devel-request@ffmpeg.org <mailto:ffmpeg-devel-request@ffmpeg.org> with subject "unsubscribe". > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org <mailto:ffmpeg-devel-request@ffmpeg.org> with subject "unsubscribe".
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);
From: Zhao Zhili <zhilizhao@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(-)