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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user