summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhao Zhili <quinkblack@foxmail.com>2022-01-27 11:39:45 +0800
committerLynne <dev@lynne.ee>2022-02-01 22:54:24 +0100
commitb5a8b3d45a292746a08317752ac01d216077e948 (patch)
treeca573dc0b7af3be7103c984d7a84a296c0126f47
parent61b104caaace2dd182b0cb3a51265342b323eb2c (diff)
hwcontext_vulkan: use VkPhysicalDeviceTimelineSemaphoreFeatures
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.
-rw-r--r--libavutil/hwcontext_vulkan.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c
index ae19fc2ab6..0c942fbc96 100644
--- a/libavutil/hwcontext_vulkan.c
+++ b/libavutil/hwcontext_vulkan.c
@@ -1321,8 +1321,18 @@ 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 +1376,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;