diff options
Diffstat (limited to 'include/yasl/vulkan.h')
| -rw-r--r-- | include/yasl/vulkan.h | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/include/yasl/vulkan.h b/include/yasl/vulkan.h index afa1089..1a1c5be 100644 --- a/include/yasl/vulkan.h +++ b/include/yasl/vulkan.h @@ -1,4 +1,4 @@ -/** @file Vulkan WSI only; application owns all Vulkan objects. */ +/** @file Vulkan WSI; YASL tracks the WSI handle, the application owns rendering. */ #ifndef YASL_VULKAN_H #define YASL_VULKAN_H #include "yasl/yasl.h" @@ -6,13 +6,27 @@ #ifdef __cplusplus extern "C" { #endif -YASL_API bool yasl_vulkan_init(PFN_vkGetInstanceProcAddr loader); -/** Borrowed list through shutdown; merge with app extensions before instance creation. */ -YASL_API const char *const *yasl_vulkan_instance_extensions(const yasl_surface *surface, uint32_t *count); -YASL_API VkInstanceCreateFlags yasl_vulkan_instance_flags(const yasl_surface *surface); -/** Uses injected loader; destroy returned VkSurfaceKHR before YASL surface. */ +YASL_API int yasl_vulkan_init(PFN_vkGetInstanceProcAddr loader); +struct yasl_vulkan_requirements { + const char *const *extensions; + uint32_t extension_count; + VkInstanceCreateFlags flags; +}; +/** Initialize the loader first. Borrowed extensions live through shutdown; + * merge them with application extensions before creating the instance. + * Clears out on failure. */ +YASL_API int yasl_vulkan_get_requirements(const yasl_surface *surface, + struct yasl_vulkan_requirements *out); +/** WSI creation retains VkResult semantics. Uses the injected loader. + * One live VkSurfaceKHR per window; destroy it with yasl_vulkan_destroy_surface + * before destroying the YASL surface. The application owns swapchains/devices. */ YASL_API VkResult yasl_vulkan_create_surface(yasl_surface *surface, VkInstance instance, - const VkAllocationCallbacks *allocator, VkSurfaceKHR *out); + const VkAllocationCallbacks *allocator, + VkSurfaceKHR *out); +/** Destroy the WSI surface (including while disconnected), releasing the window + * for another renderer. Destroy dependent swapchains first. Uses the instance + * and allocation callbacks recorded at creation. No live WSI surface is a no-op. */ +YASL_API int yasl_vulkan_destroy_surface(yasl_surface *surface); #ifdef __cplusplus } #endif |
