vulkan: Add GDK_VULKAN_FEATURE_WIN32

We will use this for import/export of Win32-specific resources.

So far it's set up for d3d12 texture import.
This commit is contained in:
Benjamin Otte
2024-11-02 19:37:50 +01:00
parent 9f9d8f59bd
commit a6d30b1694
2 changed files with 20 additions and 5 deletions

View File

@@ -47,11 +47,12 @@ typedef struct _GdkDisplayClass GdkDisplayClass;
typedef enum {
GDK_VULKAN_FEATURE_DMABUF = 1 << 0,
GDK_VULKAN_FEATURE_YCBCR = 1 << 1,
GDK_VULKAN_FEATURE_SEMAPHORE_EXPORT = 1 << 2,
GDK_VULKAN_FEATURE_SEMAPHORE_IMPORT = 1 << 3,
GDK_VULKAN_FEATURE_INCREMENTAL_PRESENT = 1 << 4,
GDK_VULKAN_FEATURE_SWAPCHAIN_MAINTENANCE = 1 << 5,
GDK_VULKAN_FEATURE_WIN32 = 1 << 1,
GDK_VULKAN_FEATURE_YCBCR = 1 << 2,
GDK_VULKAN_FEATURE_SEMAPHORE_EXPORT = 1 << 3,
GDK_VULKAN_FEATURE_SEMAPHORE_IMPORT = 1 << 4,
GDK_VULKAN_FEATURE_INCREMENTAL_PRESENT = 1 << 5,
GDK_VULKAN_FEATURE_SWAPCHAIN_MAINTENANCE = 1 << 6,
} GdkVulkanFeatures;
#define GDK_VULKAN_N_FEATURES 6

View File

@@ -37,6 +37,7 @@
#ifdef GDK_RENDERING_VULKAN
const GdkDebugKey gdk_vulkan_feature_keys[] = {
{ "dmabuf", GDK_VULKAN_FEATURE_DMABUF, "Never import Dmabufs" },
{ "win32", GDK_VULKAN_FEATURE_WIN32, "Never import Windows resources" },
{ "ycbcr", GDK_VULKAN_FEATURE_YCBCR, "Do not support Ycbcr textures (also disables dmabufs)" },
{ "semaphore-export", GDK_VULKAN_FEATURE_SEMAPHORE_EXPORT, "Disable sync of exported dmabufs" },
{ "semaphore-import", GDK_VULKAN_FEATURE_SEMAPHORE_IMPORT, "Disable sync of imported dmabufs" },
@@ -631,6 +632,11 @@ physical_device_check_features (VkPhysicalDevice device)
physical_device_supports_extension (device, VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME))
features |= GDK_VULKAN_FEATURE_DMABUF;
#ifdef GDK_WINDOWING_WIN32
if (physical_device_supports_extension (device, VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME))
features |= GDK_VULKAN_FEATURE_WIN32;
#endif
if (physical_device_supports_extension (device, VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME))
{
if (semaphore_props.externalSemaphoreFeatures & VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT)
@@ -1573,6 +1579,14 @@ gdk_display_create_vulkan_device (GdkDisplay *display,
g_ptr_array_add (device_extensions, (gpointer) VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME);
g_ptr_array_add (device_extensions, (gpointer) VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME);
}
#ifdef GDK_WINDOWING_WIN32
if (features & GDK_VULKAN_FEATURE_WIN32)
{
if (!(features & GDK_VULKAN_FEATURE_DMABUF))
g_ptr_array_add (device_extensions, (gpointer) VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME);
g_ptr_array_add (device_extensions, (gpointer) VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME);
}
#endif
if (features & (GDK_VULKAN_FEATURE_SEMAPHORE_IMPORT | GDK_VULKAN_FEATURE_SEMAPHORE_EXPORT))
{
g_ptr_array_add (device_extensions, (gpointer) VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME);