annotate SDL3/SDL_vulkan.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 Simple DirectMedia Layer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 Copyright (C) 2017, Mark Callow
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 This software is provided 'as-is', without any express or implied
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 warranty. In no event will the authors be held liable for any damages
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 arising from the use of this software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 Permission is granted to anyone to use this software for any purpose,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 including commercial applications, and to alter it and redistribute it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 freely, subject to the following restrictions:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 1. The origin of this software must not be misrepresented; you must not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 claim that you wrote the original software. If you use this software
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 in a product, an acknowledgment in the product documentation would be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 appreciated but is not required.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 2. Altered source versions must be plainly marked as such, and must not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 misrepresented as being the original software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 3. This notice may not be removed or altered from any source distribution.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 * # CategoryVulkan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 * Functions for creating Vulkan surfaces on SDL windows.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 * For the most part, Vulkan operates independent of SDL, but it benefits from
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 * a little support during setup.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 * Use SDL_Vulkan_GetInstanceExtensions() to get platform-specific bits for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 * creating a VkInstance, then SDL_Vulkan_GetVkGetInstanceProcAddr() to get
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 * the appropriate function for querying Vulkan entry points. Then
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 * SDL_Vulkan_CreateSurface() will get you the final pieces you need to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 * prepare for rendering into an SDL_Window with Vulkan.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 * Unlike OpenGL, most of the details of "context" creation and window buffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 * swapping are handled by the Vulkan API directly, so SDL doesn't provide
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 * Vulkan equivalents of SDL_GL_SwapWindow(), etc; they aren't necessary.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 #ifndef SDL_vulkan_h_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 #define SDL_vulkan_h_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 #include <SDL3/SDL_stdinc.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 #include <SDL3/SDL_error.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 #include <SDL3/SDL_video.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 #include <SDL3/SDL_begin_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 /* Set up for C function definitions, even when using C++ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 extern "C" {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 /* Avoid including vulkan_core.h, don't define VkInstance if it's already included */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 #ifdef VULKAN_CORE_H_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 #define NO_SDL_VULKAN_TYPEDEFS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 #ifndef NO_SDL_VULKAN_TYPEDEFS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__)) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) || (defined(__riscv) && __riscv_xlen == 64)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 VK_DEFINE_HANDLE(VkInstance)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 VK_DEFINE_HANDLE(VkPhysicalDevice)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 struct VkAllocationCallbacks;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 /* Make sure to undef to avoid issues in case of later vulkan include */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 #undef VK_DEFINE_HANDLE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 #undef VK_DEFINE_NON_DISPATCHABLE_HANDLE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 #endif /* !NO_SDL_VULKAN_TYPEDEFS */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 * \name Vulkan support functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 /* @{ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 * Dynamically load the Vulkan loader library.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 * This should be called after initializing the video driver, but before
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 * creating any Vulkan windows. If no Vulkan loader library is loaded, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 * default library will be loaded upon creation of the first Vulkan window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 * SDL keeps a counter of how many times this function has been successfully
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 * called, so it is safe to call this function multiple times, so long as it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 * is eventually paired with an equivalent number of calls to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 * SDL_Vulkan_UnloadLibrary. The `path` argument is ignored unless there is no
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 * library currently loaded, and and the library isn't actually unloaded until
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 * there have been an equivalent number of calls to SDL_Vulkan_UnloadLibrary.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 * It is fairly common for Vulkan applications to link with libvulkan instead
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 * of explicitly loading it at run time. This will work with SDL provided the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 * application links to a dynamic library and both it and SDL use the same
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 * search path.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 * If you specify a non-NULL `path`, an application should retrieve all of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 * Vulkan functions it uses from the dynamic library using
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 * SDL_Vulkan_GetVkGetInstanceProcAddr unless you can guarantee `path` points
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 * to the same vulkan loader library the application linked to.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 * On Apple devices, if `path` is NULL, SDL will attempt to find the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 * `vkGetInstanceProcAddr` address within all the Mach-O images of the current
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 * process. This is because it is fairly common for Vulkan applications to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 * link with libvulkan (and historically MoltenVK was provided as a static
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 * library). If it is not found, on macOS, SDL will attempt to load
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 * `vulkan.framework/vulkan`, `libvulkan.1.dylib`,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 * `MoltenVK.framework/MoltenVK`, and `libMoltenVK.dylib`, in that order. On
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 * iOS, SDL will attempt to load `libMoltenVK.dylib`. Applications using a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 * dynamic framework or .dylib must ensure it is included in its application
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 * bundle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 * On non-Apple devices, application linking with a static libvulkan is not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 * supported. Either do not link to the Vulkan loader or link to a dynamic
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 * library version.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 * \param path the platform dependent Vulkan loader library name or NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 * \returns true on success or false on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 * \threadsafety This function is not thread safe.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 * \sa SDL_Vulkan_GetVkGetInstanceProcAddr
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 * \sa SDL_Vulkan_UnloadLibrary
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 extern SDL_DECLSPEC bool SDLCALL SDL_Vulkan_LoadLibrary(const char *path);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 * Get the address of the `vkGetInstanceProcAddr` function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 * This should be called after either calling SDL_Vulkan_LoadLibrary() or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 * creating an SDL_Window with the `SDL_WINDOW_VULKAN` flag.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 * The actual type of the returned function pointer is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 * PFN_vkGetInstanceProcAddr, but that isn't available because the Vulkan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 * headers are not included here. You should cast the return value of this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 * function to that type, e.g.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 * `vkGetInstanceProcAddr =
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 * (PFN_vkGetInstanceProcAddr)SDL_Vulkan_GetVkGetInstanceProcAddr();`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 * \returns the function pointer for `vkGetInstanceProcAddr` or NULL on
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 * failure; call SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 extern SDL_DECLSPEC SDL_FunctionPointer SDLCALL SDL_Vulkan_GetVkGetInstanceProcAddr(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 * Unload the Vulkan library previously loaded by SDL_Vulkan_LoadLibrary().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 * SDL keeps a counter of how many times this function has been called, so it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 * is safe to call this function multiple times, so long as it is paired with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 * an equivalent number of calls to SDL_Vulkan_LoadLibrary. The library isn't
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 * actually unloaded until there have been an equivalent number of calls to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 * SDL_Vulkan_UnloadLibrary.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 * Once the library has actually been unloaded, if any Vulkan instances
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 * remain, they will likely crash the program. Clean up any existing Vulkan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 * resources, and destroy appropriate windows, renderers and GPU devices
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 * before calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 * \threadsafety This function is not thread safe.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 * \sa SDL_Vulkan_LoadLibrary
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 extern SDL_DECLSPEC void SDLCALL SDL_Vulkan_UnloadLibrary(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 * Get the Vulkan instance extensions needed for vkCreateInstance.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 * This should be called after either calling SDL_Vulkan_LoadLibrary() or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 * creating an SDL_Window with the `SDL_WINDOW_VULKAN` flag.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 * On return, the variable pointed to by `count` will be set to the number of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 * elements returned, suitable for using with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 * VkInstanceCreateInfo::enabledExtensionCount, and the returned array can be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 * used with VkInstanceCreateInfo::ppEnabledExtensionNames, for calling
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 * Vulkan's vkCreateInstance API.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 * You should not free the returned array; it is owned by SDL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 * \param count a pointer filled in with the number of extensions returned.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 * \returns an array of extension name strings on success, NULL on failure;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 * call SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 * \sa SDL_Vulkan_CreateSurface
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 extern SDL_DECLSPEC char const * const * SDLCALL SDL_Vulkan_GetInstanceExtensions(Uint32 *count);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 * Create a Vulkan rendering surface for a window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 * The `window` must have been created with the `SDL_WINDOW_VULKAN` flag and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 * `instance` must have been created with extensions returned by
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 * SDL_Vulkan_GetInstanceExtensions() enabled.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 * If `allocator` is NULL, Vulkan will use the system default allocator. This
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 * argument is passed directly to Vulkan and isn't used by SDL itself.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 * \param window the window to which to attach the Vulkan surface.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 * \param instance the Vulkan instance handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 * \param allocator a VkAllocationCallbacks struct, which lets the app set the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 * allocator that creates the surface. Can be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 * \param surface a pointer to a VkSurfaceKHR handle to output the newly
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 * created surface.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 * \returns true on success or false on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 * \sa SDL_Vulkan_GetInstanceExtensions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 * \sa SDL_Vulkan_DestroySurface
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 extern SDL_DECLSPEC bool SDLCALL SDL_Vulkan_CreateSurface(SDL_Window *window,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 VkInstance instance,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 const struct VkAllocationCallbacks *allocator,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 VkSurfaceKHR *surface);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 * Destroy the Vulkan rendering surface of a window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 * This should be called before SDL_DestroyWindow, if SDL_Vulkan_CreateSurface
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 * was called after SDL_CreateWindow.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 * The `instance` must have been created with extensions returned by
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 * SDL_Vulkan_GetInstanceExtensions() enabled and `surface` must have been
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239 * created successfully by an SDL_Vulkan_CreateSurface() call.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 * If `allocator` is NULL, Vulkan will use the system default allocator. This
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 * argument is passed directly to Vulkan and isn't used by SDL itself.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244 * \param instance the Vulkan instance handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 * \param surface vkSurfaceKHR handle to destroy.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 * \param allocator a VkAllocationCallbacks struct, which lets the app set the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 * allocator that destroys the surface. Can be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 * \sa SDL_Vulkan_GetInstanceExtensions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 * \sa SDL_Vulkan_CreateSurface
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 extern SDL_DECLSPEC void SDLCALL SDL_Vulkan_DestroySurface(VkInstance instance,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 VkSurfaceKHR surface,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 const struct VkAllocationCallbacks *allocator);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 * Query support for presentation via a given physical device and queue
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260 * family.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 * The `instance` must have been created with extensions returned by
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 * SDL_Vulkan_GetInstanceExtensions() enabled.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 * \param instance the Vulkan instance handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266 * \param physicalDevice a valid Vulkan physical device handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 * \param queueFamilyIndex a valid queue family index for the given physical
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 * device.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 * \returns true if supported, false if unsupported or an error occurred.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 * \sa SDL_Vulkan_GetInstanceExtensions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275 extern SDL_DECLSPEC bool SDLCALL SDL_Vulkan_GetPresentationSupport(VkInstance instance,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 VkPhysicalDevice physicalDevice,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 Uint32 queueFamilyIndex);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 /* @} *//* Vulkan support functions */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 /* Ends C function definitions when using C++ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 #include <SDL3/SDL_close_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 #endif /* SDL_vulkan_h_ */