hwcontext_vulkan: expose the enabled device features

With this, the puzzle 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.
pull/338/head
Lynne 5 years ago
parent 01c7539f30
commit ea1a7f6064
No known key found for this signature in database
GPG Key ID: A2FEA5F03F034464
  1. 11
      libavutil/hwcontext_vulkan.c
  2. 7
      libavutil/hwcontext_vulkan.h

@ -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,10 +816,12 @@ 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,
};
hwctx->device_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
ctx->free = vulkan_device_free;
/* Create an instance if not given one */
@ -839,6 +842,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;

@ -94,6 +94,13 @@ typedef struct AVVulkanDeviceContext {
*/
const char * const *enabled_dev_extensions;
int nb_enabled_dev_extensions;
/**
* This structure should be set to the set of features that present and enabled
* during device creation. When a device is created by FFmpeg, it will default to
* enabling all that are present of the shaderImageGatherExtended,
* fragmentStoresAndAtomics, shaderInt64 and vertexPipelineStoresAndAtomics features.
*/
VkPhysicalDeviceFeatures2 device_features;
} AVVulkanDeviceContext;
/**

Loading…
Cancel
Save