From ffb06194c4792cf350d7fa5737fda6e8e38cb0de Mon Sep 17 00:00:00 2001 From: Mark Young Date: Fri, 1 Jul 2016 15:18:27 -0600 Subject: [PATCH] loader: gh888 Add KHR/EXT extensions in vulkan.h Add the KHR_display_swapchain device extension to the loader and the core_validation layers. This fulfills the work required in JIRA LOAD-7 and gh 90. Add debug_marker to the extension list. Change-Id: I1fb70e5d44bc8c1f70fd6d1cfbd106a155081b25 --- include/vulkan/vk_layer.h | 6 ++ layers/core_validation.cpp | 25 ++++++++- layers/swapchain.cpp | 66 +++++++++++++++++++++- layers/swapchain.h | 3 + loader/LoaderAndLayerInterface.md | 2 - loader/table_ops.h | 12 ++++ loader/wsi.c | 19 +++++++ vulkan.py | 115 +++++++++++++++++++++++++++++++++----- 8 files changed, 228 insertions(+), 20 deletions(-) diff --git a/include/vulkan/vk_layer.h b/include/vulkan/vk_layer.h index 195ea35..78f6372 100644 --- a/include/vulkan/vk_layer.h +++ b/include/vulkan/vk_layer.h @@ -167,6 +167,12 @@ typedef struct VkLayerDispatchTable_ { #ifdef VK_USE_PLATFORM_WIN32_KHR PFN_vkGetMemoryWin32HandleNV GetMemoryWin32HandleNV; #endif + PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR; + PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT; + PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT; + PFN_vkCmdDebugMarkerBeginEXT CmdDebugMarkerBeginEXT; + PFN_vkCmdDebugMarkerEndEXT CmdDebugMarkerEndEXT; + PFN_vkCmdDebugMarkerInsertEXT CmdDebugMarkerInsertEXT; } VkLayerDispatchTable; typedef struct VkLayerInstanceDispatchTable_ { diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 1630386..13b3d4b 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -86,6 +86,7 @@ static const VkDeviceMemory MEMTRACKER_SWAP_CHAIN_IMAGE_KEY = (VkDeviceMemory)(- struct devExts { bool wsi_enabled; + bool wsi_display_swapchain_enabled; unordered_map> swapchainMap; unordered_map imageToSwapchainMap; }; @@ -4220,10 +4221,13 @@ static void checkDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo, // by more than one thread? layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); dev_data->device_extensions.wsi_enabled = false; + dev_data->device_extensions.wsi_display_swapchain_enabled = false; for (i = 0; i < pCreateInfo->enabledExtensionCount; i++) { if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) dev_data->device_extensions.wsi_enabled = true; + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME) == 0) + dev_data->device_extensions.wsi_display_swapchain_enabled = true; } } @@ -10995,6 +10999,16 @@ VKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(VkQueue queue, const VkPresentInf return result; } +VKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount, + const VkSwapchainCreateInfoKHR *pCreateInfos, + const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchains) { + layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); + std::unique_lock lock(global_lock); + VkResult result = + dev_data->device_dispatch_table->CreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains); + return result; +} + VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t *pImageIndex) { layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); @@ -11433,9 +11447,10 @@ intercept_khr_swapchain_command(const char *name, VkDevice dev) { { "vkAcquireNextImageKHR", reinterpret_cast(AcquireNextImageKHR) }, { "vkQueuePresentKHR", reinterpret_cast(QueuePresentKHR) }, }; + layer_data *dev_data = nullptr; if (dev) { - layer_data *dev_data = get_my_data_ptr(get_dispatch_key(dev), layer_data_map); + dev_data = get_my_data_ptr(get_dispatch_key(dev), layer_data_map); if (!dev_data->device_extensions.wsi_enabled) return nullptr; } @@ -11445,6 +11460,14 @@ intercept_khr_swapchain_command(const char *name, VkDevice dev) { return khr_swapchain_commands[i].proc; } + if (dev_data) { + if (!dev_data->device_extensions.wsi_display_swapchain_enabled) + return nullptr; + } + + if (!strcmp("vkCreateSharedSwapchainsKHR", name)) + return reinterpret_cast(CreateSharedSwapchainsKHR); + return nullptr; } diff --git a/layers/swapchain.cpp b/layers/swapchain.cpp index 2449625..792b063 100644 --- a/layers/swapchain.cpp +++ b/layers/swapchain.cpp @@ -64,15 +64,18 @@ static void checkDeviceRegisterExtensions(VkPhysicalDevice physicalDevice, const } my_device_data->deviceMap[device].device = device; my_device_data->deviceMap[device].swapchainExtensionEnabled = false; + my_device_data->deviceMap[device].displaySwapchainExtensionEnabled = false; // Record whether the WSI device extension was enabled for this VkDevice. // No need to check if the extension was advertised by // vkEnumerateDeviceExtensionProperties(), since the loader handles that. for (i = 0; i < pCreateInfo->enabledExtensionCount; i++) { if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) { - my_device_data->deviceMap[device].swapchainExtensionEnabled = true; } + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME) == 0) { + my_device_data->deviceMap[device].displaySwapchainExtensionEnabled = true; + } } } @@ -2247,7 +2250,66 @@ VKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(VkQueue queue, const VkPresentInf return VK_ERROR_VALIDATION_FAILED_EXT; } -VKAPI_ATTR void VKAPI_CALL GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue *pQueue) { +VKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount, + const VkSwapchainCreateInfoKHR *pCreateInfos, + const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchains) { + VkResult result = VK_SUCCESS; + bool skip_call = false; + layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); + std::unique_lock lock(global_lock); + SwpDevice *pDevice = nullptr; + { + auto it = my_data->deviceMap.find(device); + pDevice = (it == my_data->deviceMap.end()) ? nullptr : &it->second; + } + + // Validate that the swapchain extension was enabled: + if (pDevice && !pDevice->displaySwapchainExtensionEnabled) { + skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, + reinterpret_cast(device), __LINE__, SWAPCHAIN_EXT_NOT_ENABLED_BUT_USED, swapchain_layer_name, + "vkCreateSharedSwapchainsKHR() called even though the %s extension was not enabled for this VkDevice.", + VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME); + } + if (!pCreateInfos || !pSwapchains) { + skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, + reinterpret_cast(device), __LINE__, SWAPCHAIN_NULL_POINTER, swapchain_layer_name, + "vkCreateSharedSwapchainsKHR() called with NULL pointer"); + } + if (swapchainCount == 0) { + skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, + reinterpret_cast(device), __LINE__, SWAPCHAIN_INVALID_COUNT, swapchain_layer_name, + "vkCreateSharedSwapchainsKHR() called with invalid swapchain count of %d.", swapchainCount); + } else { + SwpSwapchain *pSwapchain = nullptr; + for (uint32_t iii = 0; iii < swapchainCount; iii++) { + if (pCreateInfos[iii].sType != VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR) { + skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, + reinterpret_cast(device), __LINE__, SWAPCHAIN_WRONG_STYPE, swapchain_layer_name, + "vkCreateSharedSwapchainsKHR() called with invalid stype in pCreateInfos[%d].", iii); + } + auto it = my_data->swapchainMap.find(pSwapchains[iii]); + pSwapchain = (it == my_data->swapchainMap.end()) ? nullptr : &it->second; + if (nullptr == pSwapchain) { + skip_call |= + log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, + reinterpret_cast(device), __LINE__, SWAPCHAIN_INVALID_HANDLE, swapchain_layer_name, + "vkCreateSharedSwapchainsKHR() called with invalid Swapchain Handle in pCreateInfos[%d].", iii); + } + } + } + lock.unlock(); + + if (!skip_call) { + // Call down the call chain: + result = my_data->device_dispatch_table->CreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, + pSwapchains); + return result; + } + return VK_ERROR_VALIDATION_FAILED_EXT; +} + +VKAPI_ATTR void VKAPI_CALL +GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue *pQueue) { bool skip_call = false; layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); diff --git a/layers/swapchain.h b/layers/swapchain.h index 1f739f6..9b84f20 100644 --- a/layers/swapchain.h +++ b/layers/swapchain.h @@ -221,6 +221,9 @@ struct SwpDevice { // Set to true if VK_KHR_SWAPCHAIN_EXTENSION_NAME was enabled: bool swapchainExtensionEnabled; + // Set to true if VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME was enabled: + bool displaySwapchainExtensionEnabled; + // When vkCreateSwapchainKHR is called, the VkSwapchainKHR's are // remembered: unordered_map swapchains; diff --git a/loader/LoaderAndLayerInterface.md b/loader/LoaderAndLayerInterface.md index c3abd9f..8bb07d5 100644 --- a/loader/LoaderAndLayerInterface.md +++ b/loader/LoaderAndLayerInterface.md @@ -333,8 +333,6 @@ No! Most extension functionality only affects a device and not an instance or a device. Thus, the overwhelming majority of extensions will be device extensions rather than instance extensions. -
- ## Vulkan Installable Client Driver interface with the loader ## diff --git a/loader/table_ops.h b/loader/table_ops.h index 5a9abf1..2b4d6d4 100644 --- a/loader/table_ops.h +++ b/loader/table_ops.h @@ -276,6 +276,18 @@ static inline void loader_init_device_extension_dispatch_table( table->GetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV)gpa(dev, "vkGetMemoryWin32HandleNV"); #endif // VK_USE_PLATFORM_WIN32_KHR + table->CreateSharedSwapchainsKHR = + (PFN_vkCreateSharedSwapchainsKHR)gpa(dev, "vkCreateSharedSwapchainsKHR"); + table->DebugMarkerSetObjectTagEXT = + (PFN_vkDebugMarkerSetObjectTagEXT)gpa(dev, "vkDebugMarkerSetObjectTagEXT"); + table->DebugMarkerSetObjectNameEXT = + (PFN_vkDebugMarkerSetObjectNameEXT)gpa(dev, "vkDebugMarkerSetObjectNameEXT"); + table->CmdDebugMarkerBeginEXT = + (PFN_vkCmdDebugMarkerBeginEXT)gpa(dev, "vkCmdDebugMarkerBeginEXT"); + table->CmdDebugMarkerEndEXT = + (PFN_vkCmdDebugMarkerEndEXT)gpa(dev, "vkCmdDebugMarkerEndEXT"); + table->CmdDebugMarkerInsertEXT = + (PFN_vkCmdDebugMarkerInsertEXT)gpa(dev, "vkCmdDebugMarkerInsertEXT"); } static inline void * diff --git a/loader/wsi.c b/loader/wsi.c index 539dbac..10c5260 100644 --- a/loader/wsi.c +++ b/loader/wsi.c @@ -1262,6 +1262,18 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayPlaneSurfaceKHR( return VK_SUCCESS; } +// This is the trampoline entrypoint +// for CreateSharedSwapchainsKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR( + VkDevice device, uint32_t swapchainCount, + const VkSwapchainCreateInfoKHR *pCreateInfos, + const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchains) { + const VkLayerDispatchTable *disp; + disp = loader_get_dispatch(device); + return disp->CreateSharedSwapchainsKHR( + device, swapchainCount, pCreateInfos, pAllocator, pSwapchains); +} + bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr) { *addr = NULL; @@ -1458,5 +1470,12 @@ bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, : NULL; return true; } + + // Functions for KHR_display_swapchain extension: + if (!strcmp("vkCreateSharedSwapchainsKHR", name)) { + *addr = (void *)vkCreateSharedSwapchainsKHR; + return true; + } + return false; } diff --git a/vulkan.py b/vulkan.py index 29dc240..8923598 100644 --- a/vulkan.py +++ b/vulkan.py @@ -1195,6 +1195,20 @@ ext_khr_device_swapchain = Extension( ], ) +ext_khr_display_swapchain = Extension( + name="VK_KHR_display_swapchain", + headers=["vulkan/vulkan.h"], + objects=["VkDisplayPresentInfoKHR"], + protos=[ + Proto("VkResult", "CreateSharedSwapchainsKHR", + [Param("VkDevice", "device"), + Param("uint32_t", "swapchainCount"), + Param("const VkSwapchainCreateInfoKHR*", "pCreateInfos"), + Param("const VkAllocationCallbacks*", "pAllocator"), + Param("VkSwapchainKHR*", "pSwapchains")]), + ], +) + ext_khr_xcb_surface = Extension( name="VK_KHR_xcb_surface", headers=["vulkan/vulkan.h"], @@ -1294,7 +1308,7 @@ ext_khr_win32_surface = Extension( Param("uint32_t", "queueFamilyIndex")]), ], ) -lunarg_debug_report = Extension( +ext_debug_report = Extension( name="VK_EXT_debug_report", headers=["vulkan/vulkan.h"], objects=[ @@ -1323,33 +1337,104 @@ lunarg_debug_report = Extension( Param("const char *", "pMsg")]), ], ) +ext_debug_marker = Extension( + name="VK_EXT_debug_marker", + headers=["vulkan/vulkan.h"], + objects=[ + "VkDebugMarkerObjectNameInfoEXT", + "VkDebugMarkerObjectTagInfoEXT", + "VkDebugMarkerMarkerInfoEXT" + ], + protos=[ + Proto("VkResult", "DebugMarkerSetObjectTagEXT", + [Param("VkDevice", "device"), + Param("VkDebugMarkerObjectTagInfoEXT*", "pTagInfo")]), + + Proto("VkResult", "DebugMarkerSetObjectNameEXT", + [Param("VkDevice", "device"), + Param("VkDebugMarkerObjectNameInfoEXT*", "pNameInfo")]), + + Proto("void", "CmdDebugMarkerBeginEXT", + [Param("VkCommandBuffer", "commandBuffer"), + Param("VkDebugMarkerMarkerInfoEXT*", "pMarkerInfo")]), + + Proto("void", "CmdDebugMarkerEndEXT", + [Param("VkCommandBuffer*", "commandBuffer")]), + + Proto("void", "CmdDebugMarkerInsertEXT", + [Param("VkCommandBuffer", "commandBuffer"), + Param("VkDebugMarkerMarkerInfoEXT*", "pMarkerInfo")]), + ], +) import sys if sys.argv[1] == 'AllPlatforms': - extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_win32_surface, ext_khr_xcb_surface, ext_khr_xlib_surface, ext_khr_wayland_surface, ext_khr_mir_surface, ext_khr_display, ext_khr_android_surface, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, ext_nv_external_memory_win32] - extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_win32_surface, ext_khr_xcb_surface, ext_khr_xlib_surface, ext_khr_wayland_surface, ext_khr_mir_surface, ext_khr_display, ext_khr_android_surface, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, ext_nv_external_memory_win32, lunarg_debug_report] + extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_win32_surface, ext_khr_xcb_surface, + ext_khr_xlib_surface, ext_khr_wayland_surface, ext_khr_mir_surface, ext_khr_display, + ext_khr_android_surface, ext_amd_extension_draw_indirect_count, + ext_nv_external_memory_capabilities, ext_nv_external_memory_win32, + ext_khr_display_swapchain] + extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_win32_surface, + ext_khr_xcb_surface, ext_khr_xlib_surface, ext_khr_wayland_surface, ext_khr_mir_surface, + ext_khr_display, ext_khr_android_surface, ext_amd_extension_draw_indirect_count, + ext_nv_external_memory_capabilities, ext_nv_external_memory_win32, + ext_khr_display_swapchain, ext_debug_report, ext_debug_marker] else : if len(sys.argv) > 3: if sys.platform.startswith('win32') and sys.argv[1] != 'Android': - extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_win32_surface, ext_khr_display, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, ext_nv_external_memory_win32] - extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_win32_surface, ext_khr_display, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, ext_nv_external_memory_win32, lunarg_debug_report] + extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_win32_surface, + ext_khr_display, ext_amd_extension_draw_indirect_count, + ext_nv_external_memory_capabilities, ext_nv_external_memory_win32, + ext_khr_display_swapchain] + extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_win32_surface, + ext_khr_display, ext_amd_extension_draw_indirect_count, + ext_nv_external_memory_capabilities, ext_nv_external_memory_win32, + ext_khr_display_swapchain, ext_debug_report, ext_debug_marker] elif sys.platform.startswith('linux') and sys.argv[1] != 'Android': - extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_xcb_surface, ext_khr_xlib_surface, ext_khr_wayland_surface, ext_khr_mir_surface, ext_khr_display, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities] - extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_xcb_surface, ext_khr_xlib_surface, ext_khr_wayland_surface, ext_khr_mir_surface, ext_khr_display, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, lunarg_debug_report] + extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_xcb_surface, + ext_khr_xlib_surface, ext_khr_wayland_surface, ext_khr_mir_surface, ext_khr_display, + ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, + ext_khr_display_swapchain] + extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_xcb_surface, + ext_khr_xlib_surface, ext_khr_wayland_surface, ext_khr_mir_surface, + ext_khr_display, ext_amd_extension_draw_indirect_count, + ext_nv_external_memory_capabilities, ext_khr_display_swapchain, + ext_debug_report, ext_debug_marker] else: # android - extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_android_surface, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities] - extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_android_surface, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, lunarg_debug_report] + extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_android_surface, + ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, + ext_khr_display_swapchain] + extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_android_surface, + ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, + ext_khr_display_swapchain, ext_debug_report, ext_debug_marker] else : if sys.argv[1] == 'Win32': - extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_win32_surface, ext_khr_display, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, ext_nv_external_memory_win32] - extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_win32_surface, ext_khr_display, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, ext_nv_external_memory_win32, lunarg_debug_report] + extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_win32_surface, + ext_khr_display, ext_amd_extension_draw_indirect_count, + ext_nv_external_memory_capabilities, ext_nv_external_memory_win32, + ext_khr_display_swapchain] + extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_win32_surface, + ext_khr_display, ext_amd_extension_draw_indirect_count, + ext_nv_external_memory_capabilities, ext_nv_external_memory_win32, + ext_khr_display_swapchain, ext_debug_report, ext_debug_marker] elif sys.argv[1] == 'Android': - extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_android_surface, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities] - extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_android_surface, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, lunarg_debug_report] + extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_android_surface, + ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, + ext_khr_display_swapchain] + extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_android_surface, + ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities, + ext_khr_display_swapchain, ext_debug_report, ext_debug_marker] elif sys.argv[1] == 'Xcb' or sys.argv[1] == 'Xlib' or sys.argv[1] == 'Wayland' or sys.argv[1] == 'Mir' or sys.argv[1] == 'Display': - extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_xcb_surface, ext_khr_xlib_surface, ext_khr_wayland_surface, ext_khr_mir_surface, ext_khr_display, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities] - extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_xcb_surface, ext_khr_xlib_surface, ext_khr_wayland_surface, ext_khr_mir_surface, ext_khr_display, lunarg_debug_report, ext_amd_extension_draw_indirect_count, ext_nv_external_memory_capabilities] + extensions = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_xcb_surface, + ext_khr_xlib_surface, ext_khr_wayland_surface, ext_khr_mir_surface, + ext_khr_display, ext_amd_extension_draw_indirect_count, + ext_nv_external_memory_capabilities, ext_khr_display_swapchain] + extensions_all = [core, ext_khr_surface, ext_khr_device_swapchain, ext_khr_xcb_surface, + ext_khr_xlib_surface, ext_khr_wayland_surface, ext_khr_mir_surface, + ext_khr_display, ext_amd_extension_draw_indirect_count, + ext_nv_external_memory_capabilities, ext_khr_display_swapchain, + ext_debug_report, ext_debug_marker] else: print('Error: Undefined DisplayServer') extensions = [] -- 2.7.4