May 13, 2020, 17:45 by ffm...@haasn.xyz:

> Hi, I guess you already know this but just as a reminder:
>
> On Wed, 13 May 2020 17:53:33 +0200 (CEST), Lynne <d...@lynne.ee> wrote:
>
>> +    vkGetPhysicalDeviceFeatures(hwctx->phys_dev, &dev_features);
>> +#define COPY_FEATURE(DST, NAME) (DST).NAME = dev_features.NAME;
>> +    COPY_FEATURE(hwctx->device_features, shaderImageGatherExtended)
>> +    COPY_FEATURE(hwctx->device_features, shaderStorageImageExtendedFormats)
>> +    COPY_FEATURE(hwctx->device_features, fragmentStoresAndAtomics)
>> +    COPY_FEATURE(hwctx->device_features, vertexPipelineStoresAndAtomics)
>> +    COPY_FEATURE(hwctx->device_features, shaderInt64)
>> +#undef COPY_FEATURE
>>
>
> Enabling shaderStorageImageExtendedFormats makes no sense, because it's
> specified that enabling this feature does nothing. It only exists for
> informational purposes.
>
> I realize you copied this code from libplacebo, but libplacebo had the
> same issue and I removed it after verifying that it made no difference.
> It seems to have been a legacy leftover from a bug in the validation
> layers or something.
>

Yes, I forgot about that even though I told you about it :)
Removed.



> Rest LGTM, although note that libplacebo has switched to
> VkPhysicalDeviceFeatures2KHR in the meantime, to avoid API breaks if I
> decide to use extension features in the future. It's not a huge deal
> since that struct is almost identical to VkPhysicalDeviceFeatures and
> therefore it's trivially interoperable with you code whether you decide
> to use it as well or not.
>

Switched over here as well.

New patch attached.
The API bump and APIchanges for the 2 commits will happen in a 3rd commit,
which I'll make as I'm pushing these patches.

>From 8a629c8d89db7becc4d71dec7893d7cc306fcfa0 Mon Sep 17 00:00:00 2001
From: Lynne <d...@lynne.ee>
Date: Wed, 13 May 2020 16:39:00 +0100
Subject: [PATCH 2/4] hwcontext_vulkan: expose the enabled device features

With this, the puzze of making libplacebo, ffmpeg and any other Vulkan
API users interoperable is complete.
Users of both libraries can initialize one another's contexts without having
to create a new one.
---
 libavutil/hwcontext_vulkan.c | 10 ++++++++++
 libavutil/hwcontext_vulkan.h |  7 +++++++
 2 files changed, 17 insertions(+)

diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c
index 82ceb7013a..cd1f0f0dd5 100644
--- a/libavutil/hwcontext_vulkan.c
+++ b/libavutil/hwcontext_vulkan.c
@@ -807,6 +807,7 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx,
     AVDictionaryEntry *opt_d;
     VulkanDevicePriv *p = ctx->internal->priv;
     AVVulkanDeviceContext *hwctx = ctx->hwctx;
+    VkPhysicalDeviceFeatures dev_features = { 0 };
     VkDeviceQueueCreateInfo queue_create_info[3] = {
         { .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, },
         { .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, },
@@ -815,6 +816,7 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx,
 
     VkDeviceCreateInfo dev_info = {
         .sType                = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
+        .pNext                = &hwctx->device_features,
         .pQueueCreateInfos    = queue_create_info,
         .queueCreateInfoCount = 0,
     };
@@ -839,6 +841,14 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx,
     av_log(ctx, AV_LOG_VERBOSE, "    minMemoryMapAlignment:              %li\n",
            p->props.limits.minMemoryMapAlignment);
 
+    vkGetPhysicalDeviceFeatures(hwctx->phys_dev, &dev_features);
+#define COPY_FEATURE(DST, NAME) (DST).features.NAME = dev_features.NAME;
+    COPY_FEATURE(hwctx->device_features, shaderImageGatherExtended)
+    COPY_FEATURE(hwctx->device_features, fragmentStoresAndAtomics)
+    COPY_FEATURE(hwctx->device_features, vertexPipelineStoresAndAtomics)
+    COPY_FEATURE(hwctx->device_features, shaderInt64)
+#undef COPY_FEATURE
+
     /* Search queue family */
     if ((err = search_queue_families(ctx, &dev_info)))
         goto end;
diff --git a/libavutil/hwcontext_vulkan.h b/libavutil/hwcontext_vulkan.h
index 9fbe8b9dcb..bf564fa04b 100644
--- a/libavutil/hwcontext_vulkan.h
+++ b/libavutil/hwcontext_vulkan.h
@@ -94,6 +94,13 @@ typedef struct AVVulkanDeviceContext {
      */
     const char * const *enabled_dev_extensions;
     int nb_enabled_dev_extensions;
+    /**
+     * This structure lists all device features that are present and enabled
+     * during device creation. By default, if present, shaderImageGatherExtended,
+     * fragmentStoresAndAtomics, shaderInt64 and vertexPipelineStoresAndAtomics
+     * are enabled. The pNext member may be used to indicate any future extensions.
+     */
+    VkPhysicalDeviceFeatures2 device_features;
 } AVVulkanDeviceContext;
 
 /**
-- 
2.26.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-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to