@ -28,6 +28,7 @@
# include "internal.h"
# include <stdlib.h>
# include <string.h>
static void applySizeLimits ( _GLFWwindow * window , int * width , int * height )
{
@ -699,13 +700,18 @@ int _glfwGetKeyScancodeNull(int key)
void _glfwGetRequiredInstanceExtensionsNull ( char * * extensions )
{
if ( ! _glfw . vk . KHR_surface | | ! _glfw . vk . EXT_headless_surface )
return ;
extensions [ 0 ] = " VK_KHR_surface " ;
extensions [ 1 ] = " VK_EXT_headless_surface " ;
}
GLFWbool _glfwGetPhysicalDevicePresentationSupportNull ( VkInstance instance ,
VkPhysicalDevice device ,
uint32_t queuefamily )
{
return GLFW_FALS E ;
return GLFW_TRU E ;
}
VkResult _glfwCreateWindowSurfaceNull ( VkInstance instance ,
@ -713,7 +719,28 @@ VkResult _glfwCreateWindowSurfaceNull(VkInstance instance,
const VkAllocationCallbacks * allocator ,
VkSurfaceKHR * surface )
{
// This seems like the most appropriate error to return here
return VK_ERROR_EXTENSION_NOT_PRESENT ;
PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT =
( PFN_vkCreateHeadlessSurfaceEXT )
vkGetInstanceProcAddr ( instance , " vkCreateHeadlessSurfaceEXT " ) ;
if ( ! vkCreateHeadlessSurfaceEXT )
{
_glfwInputError ( GLFW_API_UNAVAILABLE ,
" Null: Vulkan instance missing VK_EXT_headless_surface extension " ) ;
return VK_ERROR_EXTENSION_NOT_PRESENT ;
}
VkHeadlessSurfaceCreateInfoEXT sci ;
memset ( & sci , 0 , sizeof ( sci ) ) ;
sci . sType = VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT ;
const VkResult err = vkCreateHeadlessSurfaceEXT ( instance , & sci , allocator , surface ) ;
if ( err )
{
_glfwInputError ( GLFW_PLATFORM_ERROR ,
" Null: Failed to create Vulkan surface: %s " ,
_glfwGetVulkanResultString ( err ) ) ;
}
return err ;
}