mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 11:41:09 +00:00
vkphysicaldevice: fetch queue family video codec operations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351>
This commit is contained in:
parent
dde60fab37
commit
83160fb47c
2 changed files with 36 additions and 4 deletions
|
@ -260,6 +260,7 @@ gst_vulkan_physical_device_finalize (GObject * object)
|
|||
g_free (priv->available_extensions);
|
||||
priv->available_extensions = NULL;
|
||||
|
||||
g_free (device->queue_family_video_ops);
|
||||
g_free (device->queue_family_props);
|
||||
device->queue_family_props = NULL;
|
||||
|
||||
|
@ -559,10 +560,11 @@ dump_queue_properties (GstVulkanPhysicalDevice * device, GError ** error)
|
|||
queue_family_props[i].queueFlags);
|
||||
GST_LOG_OBJECT (device,
|
||||
"queue family at index %i supports %i queues "
|
||||
"with flags (0x%x) \'%s\', %" G_GUINT32_FORMAT " timestamp bits and "
|
||||
"a minimum image transfer granuality of %" GST_VULKAN_EXTENT3D_FORMAT,
|
||||
i, device->queue_family_props[i].queueCount,
|
||||
"with flags (0x%x) \'%s\', video operations (0x%x), %" G_GUINT32_FORMAT
|
||||
" timestamp bits and a minimum image transfer granuality of %"
|
||||
GST_VULKAN_EXTENT3D_FORMAT, i, device->queue_family_props[i].queueCount,
|
||||
device->queue_family_props[i].queueFlags, queue_flags_str,
|
||||
device->queue_family_video_ops[i],
|
||||
device->queue_family_props[i].timestampValidBits,
|
||||
GST_VULKAN_EXTENT3D_ARGS (device->
|
||||
queue_family_props[i].minImageTransferGranularity));
|
||||
|
@ -1003,22 +1005,43 @@ gst_vulkan_physical_device_fill_info (GstVulkanPhysicalDevice * device,
|
|||
if (device->n_queue_families > 0) {
|
||||
VkQueueFamilyProperties2 *props;
|
||||
int i;
|
||||
void *next = NULL;
|
||||
#if GST_VULKAN_HAVE_VIDEO_EXTENSIONS
|
||||
VkQueueFamilyVideoPropertiesKHR *queue_family_video_props;
|
||||
|
||||
queue_family_video_props =
|
||||
g_new0 (VkQueueFamilyVideoPropertiesKHR, device->n_queue_families);
|
||||
#endif
|
||||
props = g_new0 (VkQueueFamilyProperties2, device->n_queue_families);
|
||||
for (i = 0; i < device->n_queue_families; i++) {
|
||||
#if GST_VULKAN_HAVE_VIDEO_EXTENSIONS
|
||||
queue_family_video_props[i].sType =
|
||||
VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR;
|
||||
next = &queue_family_video_props[i];
|
||||
#endif
|
||||
props[i].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2;
|
||||
props[i].pNext = NULL;
|
||||
props[i].pNext = next;
|
||||
}
|
||||
|
||||
get_queue_props2 (device->device, &device->n_queue_families, props);
|
||||
|
||||
device->queue_family_props =
|
||||
g_new0 (VkQueueFamilyProperties, device->n_queue_families);
|
||||
device->queue_family_video_ops =
|
||||
g_new (guint32, device->n_queue_families);
|
||||
for (i = 0; i < device->n_queue_families; i++) {
|
||||
memcpy (&device->queue_family_props[i], &props[i].queueFamilyProperties,
|
||||
sizeof (device->queue_family_props[i]));
|
||||
|
||||
#if GST_VULKAN_HAVE_VIDEO_EXTENSIONS
|
||||
device->queue_family_video_ops[i] =
|
||||
queue_family_video_props[i].videoCodecOperations;
|
||||
#endif
|
||||
}
|
||||
g_free (props);
|
||||
#if GST_VULKAN_HAVE_VIDEO_EXTENSIONS
|
||||
g_free (queue_family_video_props);
|
||||
#endif
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
|
|
|
@ -65,6 +65,15 @@ struct _GstVulkanPhysicalDevice
|
|||
VkQueueFamilyProperties *queue_family_props;
|
||||
guint32 n_queue_families;
|
||||
|
||||
/**
|
||||
* GstVulkanPhysicalDevice.queue_family_video_ops:
|
||||
*
|
||||
* vulkan video operations allowed per queue family
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
guint32 *queue_family_video_ops;
|
||||
|
||||
/* <private> */
|
||||
gpointer _reserved [GST_PADDING];
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue