vulkan/operation: retrieve function pointers directly from the device

The instance API version supported may not be of the same version supported by
the device. It is possible that the function that is returned may be non-0
but not functional due to the requested API version of the instance limiting the
availability of calling the returned function.

Can be reproduced by running a pipeline with GST_VULKAN_INSTANCE_API_VERSION=1.1

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8554>
This commit is contained in:
Matthew Waters 2025-02-25 21:17:57 +11:00 committed by GStreamer Marge Bot
parent 7452589ff8
commit e7b8ac099f

View File

@ -163,21 +163,19 @@ gst_vulkan_operation_constructed (GObject * object)
VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME);
if (priv->has_sync2) {
priv->QueueSubmit2 = gst_vulkan_instance_get_proc_address (device->instance,
priv->QueueSubmit2 = gst_vulkan_device_get_proc_address (device,
"vkQueueSubmit2");
if (!priv->QueueSubmit2) {
priv->QueueSubmit2 =
gst_vulkan_instance_get_proc_address (device->instance,
"vkQueueSubmit2KHR");
gst_vulkan_device_get_proc_address (device, "vkQueueSubmit2KHR");
}
if (!priv->CmdPipelineBarrier2) {
priv->CmdPipelineBarrier2 =
gst_vulkan_instance_get_proc_address (device->instance,
"vkCmdPipelineBarrier2");
gst_vulkan_device_get_proc_address (device, "vkCmdPipelineBarrier2");
if (!priv->CmdPipelineBarrier2) {
priv->CmdPipelineBarrier2 =
gst_vulkan_instance_get_proc_address (device->instance,
gst_vulkan_device_get_proc_address (device,
"vkCmdPipelineBarrier2KHR");
}
}