annotate SDL3/SDL_gpu.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) 1997-2025 Sam Lantinga <slouken@libsdl.org>
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 /* WIKI CATEGORY: GPU */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23
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 * # CategoryGPU
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 * The GPU API offers a cross-platform way for apps to talk to modern graphics
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 * hardware. It offers both 3D graphics and compute support, in the style of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 * Metal, Vulkan, and Direct3D 12.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 * A basic workflow might be something like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 * The app creates a GPU device with SDL_CreateGPUDevice(), and assigns it to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 * a window with SDL_ClaimWindowForGPUDevice()--although strictly speaking you
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 * can render offscreen entirely, perhaps for image processing, and not use a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 * window at all.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 * Next, the app prepares static data (things that are created once and used
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 * over and over). For example:
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 * - Shaders (programs that run on the GPU): use SDL_CreateGPUShader().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 * - Vertex buffers (arrays of geometry data) and other rendering data: use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 * SDL_CreateGPUBuffer() and SDL_UploadToGPUBuffer().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 * - Textures (images): use SDL_CreateGPUTexture() and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 * SDL_UploadToGPUTexture().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 * - Samplers (how textures should be read from): use SDL_CreateGPUSampler().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 * - Render pipelines (precalculated rendering state): use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 * SDL_CreateGPUGraphicsPipeline()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 * To render, the app creates one or more command buffers, with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 * SDL_AcquireGPUCommandBuffer(). Command buffers collect rendering
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 * instructions that will be submitted to the GPU in batch. Complex scenes can
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 * use multiple command buffers, maybe configured across multiple threads in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 * parallel, as long as they are submitted in the correct order, but many apps
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 * will just need one command buffer per frame.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 * Rendering can happen to a texture (what other APIs call a "render target")
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 * or it can happen to the swapchain texture (which is just a special texture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 * that represents a window's contents). The app can use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 * SDL_WaitAndAcquireGPUSwapchainTexture() to render to the window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 * Rendering actually happens in a Render Pass, which is encoded into a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 * command buffer. One can encode multiple render passes (or alternate between
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 * render and compute passes) in a single command buffer, but many apps might
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 * simply need a single render pass in a single command buffer. Render Passes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 * can render to up to four color textures and one depth texture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 * simultaneously. If the set of textures being rendered to needs to change,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 * the Render Pass must be ended and a new one must be begun.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 * The app calls SDL_BeginGPURenderPass(). Then it sets states it needs for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 * each draw:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 * - SDL_BindGPUGraphicsPipeline()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 * - SDL_SetGPUViewport()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 * - SDL_BindGPUVertexBuffers()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 * - SDL_BindGPUVertexSamplers()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 * - etc
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 * Then, make the actual draw commands with these states:
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 * - SDL_DrawGPUPrimitives()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 * - SDL_DrawGPUPrimitivesIndirect()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 * - SDL_DrawGPUIndexedPrimitivesIndirect()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 * - etc
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 * After all the drawing commands for a pass are complete, the app should call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 * SDL_EndGPURenderPass(). Once a render pass ends all render-related state is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 * reset.
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 * The app can begin new Render Passes and make new draws in the same command
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 * buffer until the entire scene is rendered.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 * Once all of the render commands for the scene are complete, the app calls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 * SDL_SubmitGPUCommandBuffer() to send it to the GPU for processing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 * If the app needs to read back data from texture or buffers, the API has an
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 * efficient way of doing this, provided that the app is willing to tolerate
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 * some latency. When the app uses SDL_DownloadFromGPUTexture() or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 * SDL_DownloadFromGPUBuffer(), submitting the command buffer with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 * SDL_SubmitGPUCommandBufferAndAcquireFence() will return a fence handle that
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 * the app can poll or wait on in a thread. Once the fence indicates that the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 * command buffer is done processing, it is safe to read the downloaded data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 * Make sure to call SDL_ReleaseGPUFence() when done with the fence.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 * The API also has "compute" support. The app calls SDL_BeginGPUComputePass()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 * with compute-writeable textures and/or buffers, which can be written to in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 * a compute shader. Then it sets states it needs for the compute dispatches:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 * - SDL_BindGPUComputePipeline()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 * - SDL_BindGPUComputeStorageBuffers()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 * - SDL_BindGPUComputeStorageTextures()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 * Then, dispatch compute work:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 * - SDL_DispatchGPUCompute()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 * For advanced users, this opens up powerful GPU-driven workflows.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 * Graphics and compute pipelines require the use of shaders, which as
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 * mentioned above are small programs executed on the GPU. Each backend
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 * (Vulkan, Metal, D3D12) requires a different shader format. When the app
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 * creates the GPU device, the app lets the device know which shader formats
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 * the app can provide. It will then select the appropriate backend depending
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 * on the available shader formats and the backends available on the platform.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 * When creating shaders, the app must provide the correct shader format for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 * the selected backend. If you would like to learn more about why the API
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 * works this way, there is a detailed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 * [blog post](https://moonside.games/posts/layers-all-the-way-down/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 * explaining this situation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 * It is optimal for apps to pre-compile the shader formats they might use,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 * but for ease of use SDL provides a separate project,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 * [SDL_shadercross](https://github.com/libsdl-org/SDL_shadercross)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 * , for performing runtime shader cross-compilation. It also has a CLI
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 * interface for offline precompilation as well.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 * This is an extremely quick overview that leaves out several important
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 * details. Already, though, one can see that GPU programming can be quite
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 * complex! If you just need simple 2D graphics, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 * [Render API](https://wiki.libsdl.org/SDL3/CategoryRender)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 * is much easier to use but still hardware-accelerated. That said, even for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 * 2D applications the performance benefits and expressiveness of the GPU API
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 * are significant.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 * The GPU API targets a feature set with a wide range of hardware support and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 * ease of portability. It is designed so that the app won't have to branch
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 * itself by querying feature support. If you need cutting-edge features with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 * limited hardware support, this API is probably not for you.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 * Examples demonstrating proper usage of this API can be found
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 * [here](https://github.com/TheSpydog/SDL_gpu_examples)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 * .
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 * ## Performance considerations
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 * Here are some basic tips for maximizing your rendering performance.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 * - Beginning a new render pass is relatively expensive. Use as few render
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 * passes as you can.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 * - Minimize the amount of state changes. For example, binding a pipeline is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 * relatively cheap, but doing it hundreds of times when you don't need to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 * will slow the performance significantly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 * - Perform your data uploads as early as possible in the frame.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 * - Don't churn resources. Creating and releasing resources is expensive.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 * It's better to create what you need up front and cache it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 * - Don't use uniform buffers for large amounts of data (more than a matrix
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 * or so). Use a storage buffer instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 * - Use cycling correctly. There is a detailed explanation of cycling further
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 * below.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 * - Use culling techniques to minimize pixel writes. The less writing the GPU
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 * has to do the better. Culling can be a very advanced topic but even
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 * simple culling techniques can boost performance significantly.
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 * In general try to remember the golden rule of performance: doing things is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 * more expensive than not doing things. Don't Touch The Driver!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 * ## FAQ
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 * **Question: When are you adding more advanced features, like ray tracing or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 * mesh shaders?**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 * Answer: We don't have immediate plans to add more bleeding-edge features,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 * but we certainly might in the future, when these features prove worthwhile,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 * and reasonable to implement across several platforms and underlying APIs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 * So while these things are not in the "never" category, they are definitely
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 * not "near future" items either.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 * **Question: Why is my shader not working?**
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 * Answer: A common oversight when using shaders is not properly laying out
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 * the shader resources/registers correctly. The GPU API is very strict with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 * how it wants resources to be laid out and it's difficult for the API to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 * automatically validate shaders to see if they have a compatible layout. See
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 * the documentation for SDL_CreateGPUShader() and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 * SDL_CreateGPUComputePipeline() for information on the expected layout.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 * Another common issue is not setting the correct number of samplers,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 * textures, and buffers in SDL_GPUShaderCreateInfo. If possible use shader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 * reflection to extract the required information from the shader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 * automatically instead of manually filling in the struct's values.
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 * **Question: My application isn't performing very well. Is this the GPU
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 * API's fault?**
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 * Answer: No. Long answer: The GPU API is a relatively thin layer over the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 * underlying graphics API. While it's possible that we have done something
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 * inefficiently, it's very unlikely especially if you are relatively
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 * inexperienced with GPU rendering. Please see the performance tips above and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 * make sure you are following them. Additionally, tools like
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 * [RenderDoc](https://renderdoc.org/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 * can be very helpful for diagnosing incorrect behavior and performance
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 * issues.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 * ## System Requirements
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 * ### Vulkan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 * SDL driver name: "vulkan" (for use in SDL_CreateGPUDevice() and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 * SDL_PROP_GPU_DEVICE_CREATE_NAME_STRING)
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 * Supported on Windows, Linux, Nintendo Switch, and certain Android devices.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 * Requires Vulkan 1.0 with the following extensions and device features:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 * - `VK_KHR_swapchain`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 * - `VK_KHR_maintenance1`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 * - `independentBlend`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 * - `imageCubeArray`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 * - `depthClamp`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 * - `shaderClipDistance`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 * - `drawIndirectFirstInstance`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 * - `sampleRateShading`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 * You can remove some of these requirements to increase compatibility with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 * Android devices by using these properties when creating the GPU device with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 * SDL_CreateGPUDeviceWithProperties():
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 * - SDL_PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 * - SDL_PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239 * - SDL_PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 * - SDL_PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 * ### D3D12
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 * SDL driver name: "direct3d12"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 * Supported on Windows 10 or newer, Xbox One (GDK), and Xbox Series X|S
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 * (GDK). Requires a GPU that supports DirectX 12 Feature Level 11_0 and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 * Resource Binding Tier 2 or above.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 * You can remove the Tier 2 resource binding requirement to support Intel
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 * Haswell and Broadwell GPUs by using this property when creating the GPU
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 * device with SDL_CreateGPUDeviceWithProperties():
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 * - SDL_PROP_GPU_DEVICE_CREATE_D3D12_ALLOW_FEWER_RESOURCE_SLOTS_BOOLEAN
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 * ### Metal
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 * SDL driver name: "metal"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260 * Supported on macOS 10.14+ and iOS/tvOS 13.0+. Hardware requirements vary by
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 * operating system:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 * - macOS requires an Apple Silicon or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 * [Intel Mac2 family](https://developer.apple.com/documentation/metal/mtlfeatureset/mtlfeatureset_macos_gpufamily2_v1?language=objc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 * GPU
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266 * - iOS/tvOS requires an A9 GPU or newer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 * - iOS Simulator and tvOS Simulator are unsupported
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 * ## Coordinate System
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 * The GPU API uses a left-handed coordinate system, following the convention
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 * of D3D12 and Metal. Specifically:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 * - **Normalized Device Coordinates:** The lower-left corner has an x,y
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275 * coordinate of `(-1.0, -1.0)`. The upper-right corner is `(1.0, 1.0)`. Z
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 * values range from `[0.0, 1.0]` where 0 is the near plane.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 * - **Viewport Coordinates:** The top-left corner has an x,y coordinate of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278 * `(0, 0)` and extends to the bottom-right corner at `(viewportWidth,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 * viewportHeight)`. +Y is down.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 * - **Texture Coordinates:** The top-left corner has an x,y coordinate of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 * `(0, 0)` and extends to the bottom-right corner at `(1.0, 1.0)`. +Y is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 * down.
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 * If the backend driver differs from this convention (e.g. Vulkan, which has
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 * an NDC that assumes +Y is down), SDL will automatically convert the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286 * coordinate system behind the scenes, so you don't need to perform any
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 * coordinate flipping logic in your shaders.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289 * ## Uniform Data
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291 * Uniforms are for passing data to shaders. The uniform data will be constant
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292 * across all executions of the shader.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294 * There are 4 available uniform slots per shader stage (where the stages are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 * vertex, fragment, and compute). Uniform data pushed to a slot on a stage
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 * keeps its value throughout the command buffer until you call the relevant
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 * Push function on that slot again.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299 * For example, you could write your vertex shaders to read a camera matrix
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300 * from uniform binding slot 0, push the camera matrix at the start of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301 * command buffer, and that data will be used for every subsequent draw call.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 * It is valid to push uniform data during a render or compute pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305 * Uniforms are best for pushing small amounts of data. If you are pushing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306 * more than a matrix or two per call you should consider using a storage
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307 * buffer instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 * ## A Note On Cycling
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311 * When using a command buffer, operations do not occur immediately - they
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 * occur some time after the command buffer is submitted.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314 * When a resource is used in a pending or active command buffer, it is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 * considered to be "bound". When a resource is no longer used in any pending
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 * or active command buffers, it is considered to be "unbound".
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 * If data resources are bound, it is unspecified when that data will be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319 * unbound unless you acquire a fence when submitting the command buffer and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320 * wait on it. However, this doesn't mean you need to track resource usage
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 * manually.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 * All of the functions and structs that involve writing to a resource have a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324 * "cycle" bool. SDL_GPUTransferBuffer, SDL_GPUBuffer, and SDL_GPUTexture all
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325 * effectively function as ring buffers on internal resources. When cycle is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 * true, if the resource is bound, the cycle rotates to the next unbound
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327 * internal resource, or if none are available, a new one is created. This
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 * means you don't have to worry about complex state tracking and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 * synchronization as long as cycling is correctly employed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331 * For example: you can call SDL_MapGPUTransferBuffer(), write texture data,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 * SDL_UnmapGPUTransferBuffer(), and then SDL_UploadToGPUTexture(). The next
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333 * time you write texture data to the transfer buffer, if you set the cycle
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 * param to true, you don't have to worry about overwriting any data that is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 * not yet uploaded.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 * Another example: If you are using a texture in a render pass every frame,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 * this can cause a data dependency between frames. If you set cycle to true
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339 * in the SDL_GPUColorTargetInfo struct, you can prevent this data dependency.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341 * Cycling will never undefine already bound data. When cycling, all data in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342 * the resource is considered to be undefined for subsequent commands until
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343 * that data is written again. You must take care not to read undefined data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
344 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 * Note that when cycling a texture, the entire texture will be cycled, even
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346 * if only part of the texture is used in the call, so you must consider the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347 * entire texture to contain undefined data after cycling.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349 * You must also take care not to overwrite a section of data that has been
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350 * referenced in a command without cycling first. It is OK to overwrite
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351 * unreferenced data in a bound resource without cycling, but overwriting a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352 * section of data that has already been referenced will produce unexpected
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353 * results.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355 * ## Debugging
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357 * At some point of your GPU journey, you will probably encounter issues that
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358 * are not traceable with regular debugger - for example, your code compiles
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359 * but you get an empty screen, or your shader fails in runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361 * For debugging such cases, there are tools that allow visually inspecting
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362 * the whole GPU frame, every drawcall, every bound resource, memory buffers,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363 * etc. They are the following, per platform:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365 * * For Windows/Linux, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
366 * [RenderDoc](https://renderdoc.org/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
367 * * For MacOS (Metal), use Xcode built-in debugger (Open XCode, go to Debug >
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368 * Debug Executable..., select your application, set "GPU Frame Capture" to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
369 * "Metal" in scheme "Options" window, run your app, and click the small
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
370 * Metal icon on the bottom to capture a frame)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
372 * Aside from that, you may want to enable additional debug layers to receive
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
373 * more detailed error messages, based on your GPU backend:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 * * For D3D12, the debug layer is an optional feature that can be installed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376 * via "Windows Settings -> System -> Optional features" and adding the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377 * "Graphics Tools" optional feature.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378 * * For Vulkan, you will need to install Vulkan SDK on Windows, and on Linux,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 * you usually have some sort of `vulkan-validation-layers` system package
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380 * that should be installed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 * * For Metal, it should be enough just to run the application from XCode to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
382 * receive detailed errors or warnings in the output.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
383 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384 * Don't hesitate to use tools as RenderDoc when encountering runtime issues
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385 * or unexpected output on screen, quick GPU frame inspection can usually help
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386 * you fix the majority of such problems.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 #ifndef SDL_gpu_h_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 #define SDL_gpu_h_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392 #include <SDL3/SDL_stdinc.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393 #include <SDL3/SDL_pixels.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394 #include <SDL3/SDL_properties.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395 #include <SDL3/SDL_rect.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396 #include <SDL3/SDL_surface.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
397 #include <SDL3/SDL_video.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
398
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399 #include <SDL3/SDL_begin_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 extern "C" {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 #endif /* __cplusplus */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404 /* Type Declarations */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407 * An opaque handle representing the SDL_GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
410 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
411 typedef struct SDL_GPUDevice SDL_GPUDevice;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
413 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
414 * An opaque handle representing a buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
416 * Used for vertices, indices, indirect draw commands, and general compute
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
417 * data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
419 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
420 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421 * \sa SDL_CreateGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 * \sa SDL_UploadToGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
423 * \sa SDL_DownloadFromGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
424 * \sa SDL_CopyGPUBufferToBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 * \sa SDL_BindGPUVertexBuffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
426 * \sa SDL_BindGPUIndexBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
427 * \sa SDL_BindGPUVertexStorageBuffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 * \sa SDL_BindGPUFragmentStorageBuffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429 * \sa SDL_DrawGPUPrimitivesIndirect
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430 * \sa SDL_DrawGPUIndexedPrimitivesIndirect
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431 * \sa SDL_BindGPUComputeStorageBuffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432 * \sa SDL_DispatchGPUComputeIndirect
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433 * \sa SDL_ReleaseGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435 typedef struct SDL_GPUBuffer SDL_GPUBuffer;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
437 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
438 * An opaque handle representing a transfer buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440 * Used for transferring data to and from the device.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 * \sa SDL_CreateGPUTransferBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445 * \sa SDL_MapGPUTransferBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446 * \sa SDL_UnmapGPUTransferBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447 * \sa SDL_UploadToGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448 * \sa SDL_UploadToGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
449 * \sa SDL_DownloadFromGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
450 * \sa SDL_DownloadFromGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451 * \sa SDL_ReleaseGPUTransferBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453 typedef struct SDL_GPUTransferBuffer SDL_GPUTransferBuffer;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
455 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
456 * An opaque handle representing a texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
457 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
458 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
459 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
460 * \sa SDL_CreateGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
461 * \sa SDL_UploadToGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
462 * \sa SDL_DownloadFromGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
463 * \sa SDL_CopyGPUTextureToTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
464 * \sa SDL_BindGPUVertexSamplers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
465 * \sa SDL_BindGPUVertexStorageTextures
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
466 * \sa SDL_BindGPUFragmentSamplers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
467 * \sa SDL_BindGPUFragmentStorageTextures
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
468 * \sa SDL_BindGPUComputeStorageTextures
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
469 * \sa SDL_GenerateMipmapsForGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
470 * \sa SDL_BlitGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
471 * \sa SDL_ReleaseGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
472 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
473 typedef struct SDL_GPUTexture SDL_GPUTexture;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
474
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
475 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
476 * An opaque handle representing a sampler.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
477 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
478 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
479 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
480 * \sa SDL_CreateGPUSampler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
481 * \sa SDL_BindGPUVertexSamplers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
482 * \sa SDL_BindGPUFragmentSamplers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
483 * \sa SDL_ReleaseGPUSampler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
484 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
485 typedef struct SDL_GPUSampler SDL_GPUSampler;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
486
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
487 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
488 * An opaque handle representing a compiled shader object.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
489 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
490 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
491 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
492 * \sa SDL_CreateGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
493 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
494 * \sa SDL_ReleaseGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
495 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
496 typedef struct SDL_GPUShader SDL_GPUShader;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
497
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
498 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
499 * An opaque handle representing a compute pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
500 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
501 * Used during compute passes.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
502 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
503 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
504 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
505 * \sa SDL_CreateGPUComputePipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
506 * \sa SDL_BindGPUComputePipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
507 * \sa SDL_ReleaseGPUComputePipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
508 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
509 typedef struct SDL_GPUComputePipeline SDL_GPUComputePipeline;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
510
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
511 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
512 * An opaque handle representing a graphics pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
513 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
514 * Used during render passes.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
515 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
516 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
517 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
518 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
519 * \sa SDL_BindGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
520 * \sa SDL_ReleaseGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
521 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
522 typedef struct SDL_GPUGraphicsPipeline SDL_GPUGraphicsPipeline;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
523
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
524 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
525 * An opaque handle representing a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
526 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
527 * Most state is managed via command buffers. When setting state using a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
528 * command buffer, that state is local to the command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
529 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
530 * Commands only begin execution on the GPU once SDL_SubmitGPUCommandBuffer is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
531 * called. Once the command buffer is submitted, it is no longer valid to use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
532 * it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
533 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
534 * Command buffers are executed in submission order. If you submit command
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
535 * buffer A and then command buffer B all commands in A will begin executing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
536 * before any command in B begins executing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
537 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
538 * In multi-threading scenarios, you should only access a command buffer on
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
539 * the thread you acquired it from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
540 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
541 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
542 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
543 * \sa SDL_AcquireGPUCommandBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
544 * \sa SDL_SubmitGPUCommandBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
545 * \sa SDL_SubmitGPUCommandBufferAndAcquireFence
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
546 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
547 typedef struct SDL_GPUCommandBuffer SDL_GPUCommandBuffer;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
548
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
549 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
550 * An opaque handle representing a render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
551 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
552 * This handle is transient and should not be held or referenced after
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
553 * SDL_EndGPURenderPass is called.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
554 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
555 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
556 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
557 * \sa SDL_BeginGPURenderPass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
558 * \sa SDL_EndGPURenderPass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
559 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
560 typedef struct SDL_GPURenderPass SDL_GPURenderPass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
561
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
562 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
563 * An opaque handle representing a compute pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
564 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
565 * This handle is transient and should not be held or referenced after
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
566 * SDL_EndGPUComputePass is called.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
567 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
568 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
569 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
570 * \sa SDL_BeginGPUComputePass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
571 * \sa SDL_EndGPUComputePass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
572 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
573 typedef struct SDL_GPUComputePass SDL_GPUComputePass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
574
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
575 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
576 * An opaque handle representing a copy pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
577 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
578 * This handle is transient and should not be held or referenced after
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
579 * SDL_EndGPUCopyPass is called.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
580 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
581 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
582 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
583 * \sa SDL_BeginGPUCopyPass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
584 * \sa SDL_EndGPUCopyPass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
585 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
586 typedef struct SDL_GPUCopyPass SDL_GPUCopyPass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
587
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
588 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
589 * An opaque handle representing a fence.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
590 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
591 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
592 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
593 * \sa SDL_SubmitGPUCommandBufferAndAcquireFence
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
594 * \sa SDL_QueryGPUFence
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
595 * \sa SDL_WaitForGPUFences
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
596 * \sa SDL_ReleaseGPUFence
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
597 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
598 typedef struct SDL_GPUFence SDL_GPUFence;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
599
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
600 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
601 * Specifies the primitive topology of a graphics pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
602 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
603 * If you are using POINTLIST you must include a point size output in the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
604 * vertex shader.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
605 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
606 * - For HLSL compiling to SPIRV you must decorate a float output with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
607 * [[vk::builtin("PointSize")]].
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
608 * - For GLSL you must set the gl_PointSize builtin.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
609 * - For MSL you must include a float output with the [[point_size]]
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
610 * decorator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
611 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
612 * Note that sized point topology is totally unsupported on D3D12. Any size
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
613 * other than 1 will be ignored. In general, you should avoid using point
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
614 * topology for both compatibility and performance reasons. You WILL regret
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
615 * using it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
616 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
617 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
618 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
619 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
620 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
621 typedef enum SDL_GPUPrimitiveType
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
622 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
623 SDL_GPU_PRIMITIVETYPE_TRIANGLELIST, /**< A series of separate triangles. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
624 SDL_GPU_PRIMITIVETYPE_TRIANGLESTRIP, /**< A series of connected triangles. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
625 SDL_GPU_PRIMITIVETYPE_LINELIST, /**< A series of separate lines. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
626 SDL_GPU_PRIMITIVETYPE_LINESTRIP, /**< A series of connected lines. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
627 SDL_GPU_PRIMITIVETYPE_POINTLIST /**< A series of separate points. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
628 } SDL_GPUPrimitiveType;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
629
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
630 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
631 * Specifies how the contents of a texture attached to a render pass are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
632 * treated at the beginning of the render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
633 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
634 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
635 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
636 * \sa SDL_BeginGPURenderPass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
637 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
638 typedef enum SDL_GPULoadOp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
639 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
640 SDL_GPU_LOADOP_LOAD, /**< The previous contents of the texture will be preserved. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
641 SDL_GPU_LOADOP_CLEAR, /**< The contents of the texture will be cleared to a color. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
642 SDL_GPU_LOADOP_DONT_CARE /**< The previous contents of the texture need not be preserved. The contents will be undefined. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
643 } SDL_GPULoadOp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
644
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
645 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
646 * Specifies how the contents of a texture attached to a render pass are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
647 * treated at the end of the render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
648 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
649 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
650 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
651 * \sa SDL_BeginGPURenderPass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
652 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
653 typedef enum SDL_GPUStoreOp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
654 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
655 SDL_GPU_STOREOP_STORE, /**< The contents generated during the render pass will be written to memory. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
656 SDL_GPU_STOREOP_DONT_CARE, /**< The contents generated during the render pass are not needed and may be discarded. The contents will be undefined. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
657 SDL_GPU_STOREOP_RESOLVE, /**< The multisample contents generated during the render pass will be resolved to a non-multisample texture. The contents in the multisample texture may then be discarded and will be undefined. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
658 SDL_GPU_STOREOP_RESOLVE_AND_STORE /**< The multisample contents generated during the render pass will be resolved to a non-multisample texture. The contents in the multisample texture will be written to memory. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
659 } SDL_GPUStoreOp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
660
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
661 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
662 * Specifies the size of elements in an index buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
663 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
664 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
665 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
666 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
667 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
668 typedef enum SDL_GPUIndexElementSize
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
669 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
670 SDL_GPU_INDEXELEMENTSIZE_16BIT, /**< The index elements are 16-bit. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
671 SDL_GPU_INDEXELEMENTSIZE_32BIT /**< The index elements are 32-bit. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
672 } SDL_GPUIndexElementSize;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
673
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
674 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
675 * Specifies the pixel format of a texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
676 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
677 * Texture format support varies depending on driver, hardware, and usage
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
678 * flags. In general, you should use SDL_GPUTextureSupportsFormat to query if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
679 * a format is supported before using it. However, there are a few guaranteed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
680 * formats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
681 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
682 * FIXME: Check universal support for 32-bit component formats FIXME: Check
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
683 * universal support for SIMULTANEOUS_READ_WRITE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
684 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
685 * For SAMPLER usage, the following formats are universally supported:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
686 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
687 * - R8G8B8A8_UNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
688 * - B8G8R8A8_UNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
689 * - R8_UNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
690 * - R8_SNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
691 * - R8G8_UNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
692 * - R8G8_SNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
693 * - R8G8B8A8_SNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
694 * - R16_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
695 * - R16G16_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
696 * - R16G16B16A16_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
697 * - R32_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
698 * - R32G32_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
699 * - R32G32B32A32_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
700 * - R11G11B10_UFLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
701 * - R8G8B8A8_UNORM_SRGB
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
702 * - B8G8R8A8_UNORM_SRGB
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
703 * - D16_UNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
704 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
705 * For COLOR_TARGET usage, the following formats are universally supported:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
706 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
707 * - R8G8B8A8_UNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
708 * - B8G8R8A8_UNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
709 * - R8_UNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
710 * - R16_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
711 * - R16G16_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
712 * - R16G16B16A16_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
713 * - R32_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
714 * - R32G32_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
715 * - R32G32B32A32_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
716 * - R8_UINT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
717 * - R8G8_UINT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
718 * - R8G8B8A8_UINT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
719 * - R16_UINT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
720 * - R16G16_UINT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
721 * - R16G16B16A16_UINT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
722 * - R8_INT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
723 * - R8G8_INT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
724 * - R8G8B8A8_INT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
725 * - R16_INT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
726 * - R16G16_INT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
727 * - R16G16B16A16_INT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
728 * - R8G8B8A8_UNORM_SRGB
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
729 * - B8G8R8A8_UNORM_SRGB
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
730 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
731 * For STORAGE usages, the following formats are universally supported:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
732 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
733 * - R8G8B8A8_UNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
734 * - R8G8B8A8_SNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
735 * - R16G16B16A16_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
736 * - R32_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
737 * - R32G32_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
738 * - R32G32B32A32_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
739 * - R8G8B8A8_UINT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
740 * - R16G16B16A16_UINT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
741 * - R8G8B8A8_INT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
742 * - R16G16B16A16_INT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
743 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
744 * For DEPTH_STENCIL_TARGET usage, the following formats are universally
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
745 * supported:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
746 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
747 * - D16_UNORM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
748 * - Either (but not necessarily both!) D24_UNORM or D32_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
749 * - Either (but not necessarily both!) D24_UNORM_S8_UINT or D32_FLOAT_S8_UINT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
750 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
751 * Unless D16_UNORM is sufficient for your purposes, always check which of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
752 * D24/D32 is supported before creating a depth-stencil texture!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
753 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
754 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
755 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
756 * \sa SDL_CreateGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
757 * \sa SDL_GPUTextureSupportsFormat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
758 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
759 typedef enum SDL_GPUTextureFormat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
760 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
761 SDL_GPU_TEXTUREFORMAT_INVALID,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
762
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
763 /* Unsigned Normalized Float Color Formats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
764 SDL_GPU_TEXTUREFORMAT_A8_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
765 SDL_GPU_TEXTUREFORMAT_R8_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
766 SDL_GPU_TEXTUREFORMAT_R8G8_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
767 SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
768 SDL_GPU_TEXTUREFORMAT_R16_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
769 SDL_GPU_TEXTUREFORMAT_R16G16_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
770 SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
771 SDL_GPU_TEXTUREFORMAT_R10G10B10A2_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
772 SDL_GPU_TEXTUREFORMAT_B5G6R5_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
773 SDL_GPU_TEXTUREFORMAT_B5G5R5A1_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
774 SDL_GPU_TEXTUREFORMAT_B4G4R4A4_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
775 SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
776 /* Compressed Unsigned Normalized Float Color Formats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
777 SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
778 SDL_GPU_TEXTUREFORMAT_BC2_RGBA_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
779 SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
780 SDL_GPU_TEXTUREFORMAT_BC4_R_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
781 SDL_GPU_TEXTUREFORMAT_BC5_RG_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
782 SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
783 /* Compressed Signed Float Color Formats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
784 SDL_GPU_TEXTUREFORMAT_BC6H_RGB_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
785 /* Compressed Unsigned Float Color Formats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
786 SDL_GPU_TEXTUREFORMAT_BC6H_RGB_UFLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
787 /* Signed Normalized Float Color Formats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
788 SDL_GPU_TEXTUREFORMAT_R8_SNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
789 SDL_GPU_TEXTUREFORMAT_R8G8_SNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
790 SDL_GPU_TEXTUREFORMAT_R8G8B8A8_SNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
791 SDL_GPU_TEXTUREFORMAT_R16_SNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
792 SDL_GPU_TEXTUREFORMAT_R16G16_SNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
793 SDL_GPU_TEXTUREFORMAT_R16G16B16A16_SNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
794 /* Signed Float Color Formats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
795 SDL_GPU_TEXTUREFORMAT_R16_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
796 SDL_GPU_TEXTUREFORMAT_R16G16_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
797 SDL_GPU_TEXTUREFORMAT_R16G16B16A16_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
798 SDL_GPU_TEXTUREFORMAT_R32_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
799 SDL_GPU_TEXTUREFORMAT_R32G32_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
800 SDL_GPU_TEXTUREFORMAT_R32G32B32A32_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
801 /* Unsigned Float Color Formats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
802 SDL_GPU_TEXTUREFORMAT_R11G11B10_UFLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
803 /* Unsigned Integer Color Formats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
804 SDL_GPU_TEXTUREFORMAT_R8_UINT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
805 SDL_GPU_TEXTUREFORMAT_R8G8_UINT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
806 SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UINT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
807 SDL_GPU_TEXTUREFORMAT_R16_UINT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
808 SDL_GPU_TEXTUREFORMAT_R16G16_UINT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
809 SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UINT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
810 SDL_GPU_TEXTUREFORMAT_R32_UINT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
811 SDL_GPU_TEXTUREFORMAT_R32G32_UINT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
812 SDL_GPU_TEXTUREFORMAT_R32G32B32A32_UINT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
813 /* Signed Integer Color Formats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
814 SDL_GPU_TEXTUREFORMAT_R8_INT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
815 SDL_GPU_TEXTUREFORMAT_R8G8_INT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
816 SDL_GPU_TEXTUREFORMAT_R8G8B8A8_INT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
817 SDL_GPU_TEXTUREFORMAT_R16_INT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
818 SDL_GPU_TEXTUREFORMAT_R16G16_INT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
819 SDL_GPU_TEXTUREFORMAT_R16G16B16A16_INT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
820 SDL_GPU_TEXTUREFORMAT_R32_INT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
821 SDL_GPU_TEXTUREFORMAT_R32G32_INT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
822 SDL_GPU_TEXTUREFORMAT_R32G32B32A32_INT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
823 /* SRGB Unsigned Normalized Color Formats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
824 SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
825 SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
826 /* Compressed SRGB Unsigned Normalized Color Formats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
827 SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
828 SDL_GPU_TEXTUREFORMAT_BC2_RGBA_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
829 SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
830 SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
831 /* Depth Formats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
832 SDL_GPU_TEXTUREFORMAT_D16_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
833 SDL_GPU_TEXTUREFORMAT_D24_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
834 SDL_GPU_TEXTUREFORMAT_D32_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
835 SDL_GPU_TEXTUREFORMAT_D24_UNORM_S8_UINT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
836 SDL_GPU_TEXTUREFORMAT_D32_FLOAT_S8_UINT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
837 /* Compressed ASTC Normalized Float Color Formats*/
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
838 SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
839 SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
840 SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
841 SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
842 SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
843 SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
844 SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
845 SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
846 SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
847 SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
848 SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
849 SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
850 SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
851 SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
852 /* Compressed SRGB ASTC Normalized Float Color Formats*/
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
853 SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
854 SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
855 SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
856 SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
857 SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
858 SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
859 SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
860 SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
861 SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
862 SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
863 SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
864 SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
865 SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
866 SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
867 /* Compressed ASTC Signed Float Color Formats*/
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
868 SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
869 SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
870 SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
871 SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
872 SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
873 SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
874 SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
875 SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
876 SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
877 SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
878 SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
879 SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
880 SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
881 SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
882 } SDL_GPUTextureFormat;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
883
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
884 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
885 * Specifies how a texture is intended to be used by the client.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
886 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
887 * A texture must have at least one usage flag. Note that some usage flag
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
888 * combinations are invalid.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
889 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
890 * With regards to compute storage usage, READ | WRITE means that you can have
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
891 * shader A that only writes into the texture and shader B that only reads
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
892 * from the texture and bind the same texture to either shader respectively.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
893 * SIMULTANEOUS means that you can do reads and writes within the same shader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
894 * or compute pass. It also implies that atomic ops can be used, since those
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
895 * are read-modify-write operations. If you use SIMULTANEOUS, you are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
896 * responsible for avoiding data races, as there is no data synchronization
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
897 * within a compute pass. Note that SIMULTANEOUS usage is only supported by a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
898 * limited number of texture formats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
899 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
900 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
901 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
902 * \sa SDL_CreateGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
903 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
904 typedef Uint32 SDL_GPUTextureUsageFlags;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
905
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
906 #define SDL_GPU_TEXTUREUSAGE_SAMPLER (1u << 0) /**< Texture supports sampling. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
907 #define SDL_GPU_TEXTUREUSAGE_COLOR_TARGET (1u << 1) /**< Texture is a color render target. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
908 #define SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET (1u << 2) /**< Texture is a depth stencil target. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
909 #define SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ (1u << 3) /**< Texture supports storage reads in graphics stages. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
910 #define SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ (1u << 4) /**< Texture supports storage reads in the compute stage. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
911 #define SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_WRITE (1u << 5) /**< Texture supports storage writes in the compute stage. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
912 #define SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_SIMULTANEOUS_READ_WRITE (1u << 6) /**< Texture supports reads and writes in the same compute shader. This is NOT equivalent to READ | WRITE. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
913
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
914 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
915 * Specifies the type of a texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
916 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
917 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
918 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
919 * \sa SDL_CreateGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
920 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
921 typedef enum SDL_GPUTextureType
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
922 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
923 SDL_GPU_TEXTURETYPE_2D, /**< The texture is a 2-dimensional image. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
924 SDL_GPU_TEXTURETYPE_2D_ARRAY, /**< The texture is a 2-dimensional array image. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
925 SDL_GPU_TEXTURETYPE_3D, /**< The texture is a 3-dimensional image. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
926 SDL_GPU_TEXTURETYPE_CUBE, /**< The texture is a cube image. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
927 SDL_GPU_TEXTURETYPE_CUBE_ARRAY /**< The texture is a cube array image. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
928 } SDL_GPUTextureType;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
929
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
930 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
931 * Specifies the sample count of a texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
932 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
933 * Used in multisampling. Note that this value only applies when the texture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
934 * is used as a render target.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
935 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
936 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
937 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
938 * \sa SDL_CreateGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
939 * \sa SDL_GPUTextureSupportsSampleCount
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
940 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
941 typedef enum SDL_GPUSampleCount
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
942 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
943 SDL_GPU_SAMPLECOUNT_1, /**< No multisampling. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
944 SDL_GPU_SAMPLECOUNT_2, /**< MSAA 2x */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
945 SDL_GPU_SAMPLECOUNT_4, /**< MSAA 4x */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
946 SDL_GPU_SAMPLECOUNT_8 /**< MSAA 8x */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
947 } SDL_GPUSampleCount;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
948
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
949
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
950 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
951 * Specifies the face of a cube map.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
952 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
953 * Can be passed in as the layer field in texture-related structs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
954 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
955 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
956 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
957 typedef enum SDL_GPUCubeMapFace
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
958 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
959 SDL_GPU_CUBEMAPFACE_POSITIVEX,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
960 SDL_GPU_CUBEMAPFACE_NEGATIVEX,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
961 SDL_GPU_CUBEMAPFACE_POSITIVEY,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
962 SDL_GPU_CUBEMAPFACE_NEGATIVEY,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
963 SDL_GPU_CUBEMAPFACE_POSITIVEZ,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
964 SDL_GPU_CUBEMAPFACE_NEGATIVEZ
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
965 } SDL_GPUCubeMapFace;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
966
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
967 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
968 * Specifies how a buffer is intended to be used by the client.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
969 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
970 * A buffer must have at least one usage flag. Note that some usage flag
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
971 * combinations are invalid.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
972 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
973 * Unlike textures, READ | WRITE can be used for simultaneous read-write
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
974 * usage. The same data synchronization concerns as textures apply.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
975 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
976 * If you use a STORAGE flag, the data in the buffer must respect std140
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
977 * layout conventions. In practical terms this means you must ensure that vec3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
978 * and vec4 fields are 16-byte aligned.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
979 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
980 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
981 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
982 * \sa SDL_CreateGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
983 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
984 typedef Uint32 SDL_GPUBufferUsageFlags;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
985
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
986 #define SDL_GPU_BUFFERUSAGE_VERTEX (1u << 0) /**< Buffer is a vertex buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
987 #define SDL_GPU_BUFFERUSAGE_INDEX (1u << 1) /**< Buffer is an index buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
988 #define SDL_GPU_BUFFERUSAGE_INDIRECT (1u << 2) /**< Buffer is an indirect buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
989 #define SDL_GPU_BUFFERUSAGE_GRAPHICS_STORAGE_READ (1u << 3) /**< Buffer supports storage reads in graphics stages. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
990 #define SDL_GPU_BUFFERUSAGE_COMPUTE_STORAGE_READ (1u << 4) /**< Buffer supports storage reads in the compute stage. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
991 #define SDL_GPU_BUFFERUSAGE_COMPUTE_STORAGE_WRITE (1u << 5) /**< Buffer supports storage writes in the compute stage. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
992
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
993 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
994 * Specifies how a transfer buffer is intended to be used by the client.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
995 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
996 * Note that mapping and copying FROM an upload transfer buffer or TO a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
997 * download transfer buffer is undefined behavior.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
998 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
999 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1000 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1001 * \sa SDL_CreateGPUTransferBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1002 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1003 typedef enum SDL_GPUTransferBufferUsage
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1004 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1005 SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1006 SDL_GPU_TRANSFERBUFFERUSAGE_DOWNLOAD
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1007 } SDL_GPUTransferBufferUsage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1008
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1009 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1010 * Specifies which stage a shader program corresponds to.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1011 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1012 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1013 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1014 * \sa SDL_CreateGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1015 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1016 typedef enum SDL_GPUShaderStage
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1017 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1018 SDL_GPU_SHADERSTAGE_VERTEX,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1019 SDL_GPU_SHADERSTAGE_FRAGMENT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1020 } SDL_GPUShaderStage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1021
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1022 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1023 * Specifies the format of shader code.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1024 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1025 * Each format corresponds to a specific backend that accepts it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1026 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1027 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1028 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1029 * \sa SDL_CreateGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1030 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1031 typedef Uint32 SDL_GPUShaderFormat;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1032
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1033 #define SDL_GPU_SHADERFORMAT_INVALID 0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1034 #define SDL_GPU_SHADERFORMAT_PRIVATE (1u << 0) /**< Shaders for NDA'd platforms. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1035 #define SDL_GPU_SHADERFORMAT_SPIRV (1u << 1) /**< SPIR-V shaders for Vulkan. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1036 #define SDL_GPU_SHADERFORMAT_DXBC (1u << 2) /**< DXBC SM5_1 shaders for D3D12. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1037 #define SDL_GPU_SHADERFORMAT_DXIL (1u << 3) /**< DXIL SM6_0 shaders for D3D12. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1038 #define SDL_GPU_SHADERFORMAT_MSL (1u << 4) /**< MSL shaders for Metal. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1039 #define SDL_GPU_SHADERFORMAT_METALLIB (1u << 5) /**< Precompiled metallib shaders for Metal. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1040
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1041 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1042 * Specifies the format of a vertex attribute.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1043 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1044 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1045 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1046 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1047 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1048 typedef enum SDL_GPUVertexElementFormat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1049 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1050 SDL_GPU_VERTEXELEMENTFORMAT_INVALID,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1051
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1052 /* 32-bit Signed Integers */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1053 SDL_GPU_VERTEXELEMENTFORMAT_INT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1054 SDL_GPU_VERTEXELEMENTFORMAT_INT2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1055 SDL_GPU_VERTEXELEMENTFORMAT_INT3,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1056 SDL_GPU_VERTEXELEMENTFORMAT_INT4,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1057
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1058 /* 32-bit Unsigned Integers */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1059 SDL_GPU_VERTEXELEMENTFORMAT_UINT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1060 SDL_GPU_VERTEXELEMENTFORMAT_UINT2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1061 SDL_GPU_VERTEXELEMENTFORMAT_UINT3,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1062 SDL_GPU_VERTEXELEMENTFORMAT_UINT4,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1063
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1064 /* 32-bit Floats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1065 SDL_GPU_VERTEXELEMENTFORMAT_FLOAT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1066 SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1067 SDL_GPU_VERTEXELEMENTFORMAT_FLOAT3,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1068 SDL_GPU_VERTEXELEMENTFORMAT_FLOAT4,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1069
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1070 /* 8-bit Signed Integers */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1071 SDL_GPU_VERTEXELEMENTFORMAT_BYTE2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1072 SDL_GPU_VERTEXELEMENTFORMAT_BYTE4,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1073
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1074 /* 8-bit Unsigned Integers */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1075 SDL_GPU_VERTEXELEMENTFORMAT_UBYTE2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1076 SDL_GPU_VERTEXELEMENTFORMAT_UBYTE4,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1077
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1078 /* 8-bit Signed Normalized */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1079 SDL_GPU_VERTEXELEMENTFORMAT_BYTE2_NORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1080 SDL_GPU_VERTEXELEMENTFORMAT_BYTE4_NORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1081
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1082 /* 8-bit Unsigned Normalized */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1083 SDL_GPU_VERTEXELEMENTFORMAT_UBYTE2_NORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1084 SDL_GPU_VERTEXELEMENTFORMAT_UBYTE4_NORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1085
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1086 /* 16-bit Signed Integers */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1087 SDL_GPU_VERTEXELEMENTFORMAT_SHORT2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1088 SDL_GPU_VERTEXELEMENTFORMAT_SHORT4,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1089
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1090 /* 16-bit Unsigned Integers */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1091 SDL_GPU_VERTEXELEMENTFORMAT_USHORT2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1092 SDL_GPU_VERTEXELEMENTFORMAT_USHORT4,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1093
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1094 /* 16-bit Signed Normalized */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1095 SDL_GPU_VERTEXELEMENTFORMAT_SHORT2_NORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1096 SDL_GPU_VERTEXELEMENTFORMAT_SHORT4_NORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1097
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1098 /* 16-bit Unsigned Normalized */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1099 SDL_GPU_VERTEXELEMENTFORMAT_USHORT2_NORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1100 SDL_GPU_VERTEXELEMENTFORMAT_USHORT4_NORM,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1101
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1102 /* 16-bit Floats */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1103 SDL_GPU_VERTEXELEMENTFORMAT_HALF2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1104 SDL_GPU_VERTEXELEMENTFORMAT_HALF4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1105 } SDL_GPUVertexElementFormat;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1106
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1107 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1108 * Specifies the rate at which vertex attributes are pulled from buffers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1109 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1110 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1111 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1112 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1113 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1114 typedef enum SDL_GPUVertexInputRate
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1115 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1116 SDL_GPU_VERTEXINPUTRATE_VERTEX, /**< Attribute addressing is a function of the vertex index. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1117 SDL_GPU_VERTEXINPUTRATE_INSTANCE /**< Attribute addressing is a function of the instance index. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1118 } SDL_GPUVertexInputRate;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1119
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1120 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1121 * Specifies the fill mode of the graphics pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1122 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1123 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1124 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1125 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1126 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1127 typedef enum SDL_GPUFillMode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1128 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1129 SDL_GPU_FILLMODE_FILL, /**< Polygons will be rendered via rasterization. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1130 SDL_GPU_FILLMODE_LINE /**< Polygon edges will be drawn as line segments. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1131 } SDL_GPUFillMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1132
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1133 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1134 * Specifies the facing direction in which triangle faces will be culled.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1135 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1136 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1137 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1138 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1139 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1140 typedef enum SDL_GPUCullMode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1141 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1142 SDL_GPU_CULLMODE_NONE, /**< No triangles are culled. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1143 SDL_GPU_CULLMODE_FRONT, /**< Front-facing triangles are culled. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1144 SDL_GPU_CULLMODE_BACK /**< Back-facing triangles are culled. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1145 } SDL_GPUCullMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1146
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1147 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1148 * Specifies the vertex winding that will cause a triangle to be determined to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1149 * be front-facing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1150 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1151 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1152 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1153 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1154 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1155 typedef enum SDL_GPUFrontFace
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1156 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1157 SDL_GPU_FRONTFACE_COUNTER_CLOCKWISE, /**< A triangle with counter-clockwise vertex winding will be considered front-facing. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1158 SDL_GPU_FRONTFACE_CLOCKWISE /**< A triangle with clockwise vertex winding will be considered front-facing. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1159 } SDL_GPUFrontFace;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1160
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1161 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1162 * Specifies a comparison operator for depth, stencil and sampler operations.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1163 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1164 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1165 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1166 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1167 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1168 typedef enum SDL_GPUCompareOp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1169 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1170 SDL_GPU_COMPAREOP_INVALID,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1171 SDL_GPU_COMPAREOP_NEVER, /**< The comparison always evaluates false. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1172 SDL_GPU_COMPAREOP_LESS, /**< The comparison evaluates reference < test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1173 SDL_GPU_COMPAREOP_EQUAL, /**< The comparison evaluates reference == test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1174 SDL_GPU_COMPAREOP_LESS_OR_EQUAL, /**< The comparison evaluates reference <= test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1175 SDL_GPU_COMPAREOP_GREATER, /**< The comparison evaluates reference > test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1176 SDL_GPU_COMPAREOP_NOT_EQUAL, /**< The comparison evaluates reference != test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1177 SDL_GPU_COMPAREOP_GREATER_OR_EQUAL, /**< The comparison evaluates reference >= test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1178 SDL_GPU_COMPAREOP_ALWAYS /**< The comparison always evaluates true. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1179 } SDL_GPUCompareOp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1180
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1181 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1182 * Specifies what happens to a stored stencil value if stencil tests fail or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1183 * pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1184 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1185 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1186 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1187 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1188 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1189 typedef enum SDL_GPUStencilOp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1190 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1191 SDL_GPU_STENCILOP_INVALID,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1192 SDL_GPU_STENCILOP_KEEP, /**< Keeps the current value. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1193 SDL_GPU_STENCILOP_ZERO, /**< Sets the value to 0. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1194 SDL_GPU_STENCILOP_REPLACE, /**< Sets the value to reference. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1195 SDL_GPU_STENCILOP_INCREMENT_AND_CLAMP, /**< Increments the current value and clamps to the maximum value. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1196 SDL_GPU_STENCILOP_DECREMENT_AND_CLAMP, /**< Decrements the current value and clamps to 0. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1197 SDL_GPU_STENCILOP_INVERT, /**< Bitwise-inverts the current value. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1198 SDL_GPU_STENCILOP_INCREMENT_AND_WRAP, /**< Increments the current value and wraps back to 0. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1199 SDL_GPU_STENCILOP_DECREMENT_AND_WRAP /**< Decrements the current value and wraps to the maximum value. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1200 } SDL_GPUStencilOp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1201
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1202 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1203 * Specifies the operator to be used when pixels in a render target are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1204 * blended with existing pixels in the texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1205 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1206 * The source color is the value written by the fragment shader. The
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1207 * destination color is the value currently existing in the texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1208 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1209 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1210 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1211 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1212 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1213 typedef enum SDL_GPUBlendOp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1214 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1215 SDL_GPU_BLENDOP_INVALID,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1216 SDL_GPU_BLENDOP_ADD, /**< (source * source_factor) + (destination * destination_factor) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1217 SDL_GPU_BLENDOP_SUBTRACT, /**< (source * source_factor) - (destination * destination_factor) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1218 SDL_GPU_BLENDOP_REVERSE_SUBTRACT, /**< (destination * destination_factor) - (source * source_factor) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1219 SDL_GPU_BLENDOP_MIN, /**< min(source, destination) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1220 SDL_GPU_BLENDOP_MAX /**< max(source, destination) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1221 } SDL_GPUBlendOp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1222
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1223 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1224 * Specifies a blending factor to be used when pixels in a render target are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1225 * blended with existing pixels in the texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1226 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1227 * The source color is the value written by the fragment shader. The
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1228 * destination color is the value currently existing in the texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1229 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1230 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1231 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1232 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1233 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1234 typedef enum SDL_GPUBlendFactor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1235 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1236 SDL_GPU_BLENDFACTOR_INVALID,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1237 SDL_GPU_BLENDFACTOR_ZERO, /**< 0 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1238 SDL_GPU_BLENDFACTOR_ONE, /**< 1 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1239 SDL_GPU_BLENDFACTOR_SRC_COLOR, /**< source color */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1240 SDL_GPU_BLENDFACTOR_ONE_MINUS_SRC_COLOR, /**< 1 - source color */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1241 SDL_GPU_BLENDFACTOR_DST_COLOR, /**< destination color */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1242 SDL_GPU_BLENDFACTOR_ONE_MINUS_DST_COLOR, /**< 1 - destination color */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1243 SDL_GPU_BLENDFACTOR_SRC_ALPHA, /**< source alpha */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1244 SDL_GPU_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, /**< 1 - source alpha */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1245 SDL_GPU_BLENDFACTOR_DST_ALPHA, /**< destination alpha */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1246 SDL_GPU_BLENDFACTOR_ONE_MINUS_DST_ALPHA, /**< 1 - destination alpha */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1247 SDL_GPU_BLENDFACTOR_CONSTANT_COLOR, /**< blend constant */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1248 SDL_GPU_BLENDFACTOR_ONE_MINUS_CONSTANT_COLOR, /**< 1 - blend constant */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1249 SDL_GPU_BLENDFACTOR_SRC_ALPHA_SATURATE /**< min(source alpha, 1 - destination alpha) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1250 } SDL_GPUBlendFactor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1251
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1252 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1253 * Specifies which color components are written in a graphics pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1254 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1255 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1256 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1257 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1258 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1259 typedef Uint8 SDL_GPUColorComponentFlags;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1260
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1261 #define SDL_GPU_COLORCOMPONENT_R (1u << 0) /**< the red component */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1262 #define SDL_GPU_COLORCOMPONENT_G (1u << 1) /**< the green component */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1263 #define SDL_GPU_COLORCOMPONENT_B (1u << 2) /**< the blue component */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1264 #define SDL_GPU_COLORCOMPONENT_A (1u << 3) /**< the alpha component */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1265
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1266 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1267 * Specifies a filter operation used by a sampler.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1268 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1269 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1270 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1271 * \sa SDL_CreateGPUSampler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1272 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1273 typedef enum SDL_GPUFilter
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1274 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1275 SDL_GPU_FILTER_NEAREST, /**< Point filtering. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1276 SDL_GPU_FILTER_LINEAR /**< Linear filtering. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1277 } SDL_GPUFilter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1278
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1279 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1280 * Specifies a mipmap mode used by a sampler.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1281 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1282 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1283 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1284 * \sa SDL_CreateGPUSampler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1285 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1286 typedef enum SDL_GPUSamplerMipmapMode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1287 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1288 SDL_GPU_SAMPLERMIPMAPMODE_NEAREST, /**< Point filtering. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1289 SDL_GPU_SAMPLERMIPMAPMODE_LINEAR /**< Linear filtering. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1290 } SDL_GPUSamplerMipmapMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1291
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1292 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1293 * Specifies behavior of texture sampling when the coordinates exceed the 0-1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1294 * range.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1295 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1296 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1297 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1298 * \sa SDL_CreateGPUSampler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1299 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1300 typedef enum SDL_GPUSamplerAddressMode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1301 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1302 SDL_GPU_SAMPLERADDRESSMODE_REPEAT, /**< Specifies that the coordinates will wrap around. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1303 SDL_GPU_SAMPLERADDRESSMODE_MIRRORED_REPEAT, /**< Specifies that the coordinates will wrap around mirrored. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1304 SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE /**< Specifies that the coordinates will clamp to the 0-1 range. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1305 } SDL_GPUSamplerAddressMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1306
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1307 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1308 * Specifies the timing that will be used to present swapchain textures to the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1309 * OS.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1310 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1311 * VSYNC mode will always be supported. IMMEDIATE and MAILBOX modes may not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1312 * supported on certain systems.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1313 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1314 * It is recommended to query SDL_WindowSupportsGPUPresentMode after claiming
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1315 * the window if you wish to change the present mode to IMMEDIATE or MAILBOX.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1316 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1317 * - VSYNC: Waits for vblank before presenting. No tearing is possible. If
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1318 * there is a pending image to present, the new image is enqueued for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1319 * presentation. Disallows tearing at the cost of visual latency.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1320 * - IMMEDIATE: Immediately presents. Lowest latency option, but tearing may
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1321 * occur.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1322 * - MAILBOX: Waits for vblank before presenting. No tearing is possible. If
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1323 * there is a pending image to present, the pending image is replaced by the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1324 * new image. Similar to VSYNC, but with reduced visual latency.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1325 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1326 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1327 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1328 * \sa SDL_SetGPUSwapchainParameters
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1329 * \sa SDL_WindowSupportsGPUPresentMode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1330 * \sa SDL_WaitAndAcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1331 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1332 typedef enum SDL_GPUPresentMode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1333 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1334 SDL_GPU_PRESENTMODE_VSYNC,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1335 SDL_GPU_PRESENTMODE_IMMEDIATE,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1336 SDL_GPU_PRESENTMODE_MAILBOX
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1337 } SDL_GPUPresentMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1338
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1339 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1340 * Specifies the texture format and colorspace of the swapchain textures.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1341 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1342 * SDR will always be supported. Other compositions may not be supported on
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1343 * certain systems.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1344 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1345 * It is recommended to query SDL_WindowSupportsGPUSwapchainComposition after
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1346 * claiming the window if you wish to change the swapchain composition from
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1347 * SDR.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1348 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1349 * - SDR: B8G8R8A8 or R8G8B8A8 swapchain. Pixel values are in sRGB encoding.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1350 * - SDR_LINEAR: B8G8R8A8_SRGB or R8G8B8A8_SRGB swapchain. Pixel values are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1351 * stored in memory in sRGB encoding but accessed in shaders in "linear
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1352 * sRGB" encoding which is sRGB but with a linear transfer function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1353 * - HDR_EXTENDED_LINEAR: R16G16B16A16_FLOAT swapchain. Pixel values are in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1354 * extended linear sRGB encoding and permits values outside of the [0, 1]
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1355 * range.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1356 * - HDR10_ST2084: A2R10G10B10 or A2B10G10R10 swapchain. Pixel values are in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1357 * BT.2020 ST2084 (PQ) encoding.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1358 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1359 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1360 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1361 * \sa SDL_SetGPUSwapchainParameters
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1362 * \sa SDL_WindowSupportsGPUSwapchainComposition
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1363 * \sa SDL_WaitAndAcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1364 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1365 typedef enum SDL_GPUSwapchainComposition
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1366 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1367 SDL_GPU_SWAPCHAINCOMPOSITION_SDR,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1368 SDL_GPU_SWAPCHAINCOMPOSITION_SDR_LINEAR,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1369 SDL_GPU_SWAPCHAINCOMPOSITION_HDR_EXTENDED_LINEAR,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1370 SDL_GPU_SWAPCHAINCOMPOSITION_HDR10_ST2084
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1371 } SDL_GPUSwapchainComposition;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1372
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1373 /* Structures */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1374
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1375 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1376 * A structure specifying a viewport.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1377 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1378 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1379 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1380 * \sa SDL_SetGPUViewport
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1381 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1382 typedef struct SDL_GPUViewport
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1383 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1384 float x; /**< The left offset of the viewport. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1385 float y; /**< The top offset of the viewport. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1386 float w; /**< The width of the viewport. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1387 float h; /**< The height of the viewport. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1388 float min_depth; /**< The minimum depth of the viewport. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1389 float max_depth; /**< The maximum depth of the viewport. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1390 } SDL_GPUViewport;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1391
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1392 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1393 * A structure specifying parameters related to transferring data to or from a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1394 * texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1395 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1396 * If either of `pixels_per_row` or `rows_per_layer` is zero, then width and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1397 * height of passed SDL_GPUTextureRegion to SDL_UploadToGPUTexture or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1398 * SDL_DownloadFromGPUTexture are used as default values respectively and data
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1399 * is considered to be tightly packed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1400 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1401 * **WARNING**: Direct3D 12 requires texture data row pitch to be 256 byte
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1402 * aligned, and offsets to be aligned to 512 bytes. If they are not, SDL will
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1403 * make a temporary copy of the data that is properly aligned, but this adds
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1404 * overhead to the transfer process. Apps can avoid this by aligning their
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1405 * data appropriately, or using a different GPU backend than Direct3D 12.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1406 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1407 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1408 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1409 * \sa SDL_UploadToGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1410 * \sa SDL_DownloadFromGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1411 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1412 typedef struct SDL_GPUTextureTransferInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1413 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1414 SDL_GPUTransferBuffer *transfer_buffer; /**< The transfer buffer used in the transfer operation. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1415 Uint32 offset; /**< The starting byte of the image data in the transfer buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1416 Uint32 pixels_per_row; /**< The number of pixels from one row to the next. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1417 Uint32 rows_per_layer; /**< The number of rows from one layer/depth-slice to the next. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1418 } SDL_GPUTextureTransferInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1419
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1420 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1421 * A structure specifying a location in a transfer buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1422 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1423 * Used when transferring buffer data to or from a transfer buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1424 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1425 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1426 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1427 * \sa SDL_UploadToGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1428 * \sa SDL_DownloadFromGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1429 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1430 typedef struct SDL_GPUTransferBufferLocation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1431 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1432 SDL_GPUTransferBuffer *transfer_buffer; /**< The transfer buffer used in the transfer operation. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1433 Uint32 offset; /**< The starting byte of the buffer data in the transfer buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1434 } SDL_GPUTransferBufferLocation;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1435
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1436 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1437 * A structure specifying a location in a texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1438 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1439 * Used when copying data from one texture to another.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1440 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1441 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1442 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1443 * \sa SDL_CopyGPUTextureToTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1444 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1445 typedef struct SDL_GPUTextureLocation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1446 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1447 SDL_GPUTexture *texture; /**< The texture used in the copy operation. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1448 Uint32 mip_level; /**< The mip level index of the location. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1449 Uint32 layer; /**< The layer index of the location. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1450 Uint32 x; /**< The left offset of the location. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1451 Uint32 y; /**< The top offset of the location. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1452 Uint32 z; /**< The front offset of the location. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1453 } SDL_GPUTextureLocation;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1454
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1455 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1456 * A structure specifying a region of a texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1457 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1458 * Used when transferring data to or from a texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1459 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1460 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1461 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1462 * \sa SDL_UploadToGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1463 * \sa SDL_DownloadFromGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1464 * \sa SDL_CreateGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1465 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1466 typedef struct SDL_GPUTextureRegion
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1467 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1468 SDL_GPUTexture *texture; /**< The texture used in the copy operation. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1469 Uint32 mip_level; /**< The mip level index to transfer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1470 Uint32 layer; /**< The layer index to transfer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1471 Uint32 x; /**< The left offset of the region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1472 Uint32 y; /**< The top offset of the region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1473 Uint32 z; /**< The front offset of the region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1474 Uint32 w; /**< The width of the region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1475 Uint32 h; /**< The height of the region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1476 Uint32 d; /**< The depth of the region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1477 } SDL_GPUTextureRegion;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1478
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1479 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1480 * A structure specifying a region of a texture used in the blit operation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1481 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1482 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1483 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1484 * \sa SDL_BlitGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1485 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1486 typedef struct SDL_GPUBlitRegion
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1487 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1488 SDL_GPUTexture *texture; /**< The texture. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1489 Uint32 mip_level; /**< The mip level index of the region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1490 Uint32 layer_or_depth_plane; /**< The layer index or depth plane of the region. This value is treated as a layer index on 2D array and cube textures, and as a depth plane on 3D textures. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1491 Uint32 x; /**< The left offset of the region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1492 Uint32 y; /**< The top offset of the region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1493 Uint32 w; /**< The width of the region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1494 Uint32 h; /**< The height of the region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1495 } SDL_GPUBlitRegion;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1496
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1497 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1498 * A structure specifying a location in a buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1499 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1500 * Used when copying data between buffers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1501 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1502 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1503 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1504 * \sa SDL_CopyGPUBufferToBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1505 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1506 typedef struct SDL_GPUBufferLocation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1507 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1508 SDL_GPUBuffer *buffer; /**< The buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1509 Uint32 offset; /**< The starting byte within the buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1510 } SDL_GPUBufferLocation;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1511
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1512 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1513 * A structure specifying a region of a buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1514 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1515 * Used when transferring data to or from buffers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1516 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1517 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1518 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1519 * \sa SDL_UploadToGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1520 * \sa SDL_DownloadFromGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1521 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1522 typedef struct SDL_GPUBufferRegion
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1523 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1524 SDL_GPUBuffer *buffer; /**< The buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1525 Uint32 offset; /**< The starting byte within the buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1526 Uint32 size; /**< The size in bytes of the region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1527 } SDL_GPUBufferRegion;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1528
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1529 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1530 * A structure specifying the parameters of an indirect draw command.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1531 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1532 * Note that the `first_vertex` and `first_instance` parameters are NOT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1533 * compatible with built-in vertex/instance ID variables in shaders (for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1534 * example, SV_VertexID); GPU APIs and shader languages do not define these
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1535 * built-in variables consistently, so if your shader depends on them, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1536 * only way to keep behavior consistent and portable is to always pass 0 for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1537 * the correlating parameter in the draw calls.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1538 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1539 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1540 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1541 * \sa SDL_DrawGPUPrimitivesIndirect
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1542 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1543 typedef struct SDL_GPUIndirectDrawCommand
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1544 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1545 Uint32 num_vertices; /**< The number of vertices to draw. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1546 Uint32 num_instances; /**< The number of instances to draw. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1547 Uint32 first_vertex; /**< The index of the first vertex to draw. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1548 Uint32 first_instance; /**< The ID of the first instance to draw. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1549 } SDL_GPUIndirectDrawCommand;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1550
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1551 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1552 * A structure specifying the parameters of an indexed indirect draw command.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1553 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1554 * Note that the `first_vertex` and `first_instance` parameters are NOT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1555 * compatible with built-in vertex/instance ID variables in shaders (for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1556 * example, SV_VertexID); GPU APIs and shader languages do not define these
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1557 * built-in variables consistently, so if your shader depends on them, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1558 * only way to keep behavior consistent and portable is to always pass 0 for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1559 * the correlating parameter in the draw calls.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1560 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1561 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1562 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1563 * \sa SDL_DrawGPUIndexedPrimitivesIndirect
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1564 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1565 typedef struct SDL_GPUIndexedIndirectDrawCommand
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1566 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1567 Uint32 num_indices; /**< The number of indices to draw per instance. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1568 Uint32 num_instances; /**< The number of instances to draw. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1569 Uint32 first_index; /**< The base index within the index buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1570 Sint32 vertex_offset; /**< The value added to the vertex index before indexing into the vertex buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1571 Uint32 first_instance; /**< The ID of the first instance to draw. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1572 } SDL_GPUIndexedIndirectDrawCommand;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1573
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1574 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1575 * A structure specifying the parameters of an indexed dispatch command.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1576 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1577 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1578 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1579 * \sa SDL_DispatchGPUComputeIndirect
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1580 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1581 typedef struct SDL_GPUIndirectDispatchCommand
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1582 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1583 Uint32 groupcount_x; /**< The number of local workgroups to dispatch in the X dimension. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1584 Uint32 groupcount_y; /**< The number of local workgroups to dispatch in the Y dimension. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1585 Uint32 groupcount_z; /**< The number of local workgroups to dispatch in the Z dimension. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1586 } SDL_GPUIndirectDispatchCommand;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1587
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1588 /* State structures */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1589
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1590 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1591 * A structure specifying the parameters of a sampler.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1592 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1593 * Note that mip_lod_bias is a no-op for the Metal driver. For Metal, LOD bias
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1594 * must be applied via shader instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1595 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1596 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1597 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1598 * \sa SDL_CreateGPUSampler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1599 * \sa SDL_GPUFilter
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1600 * \sa SDL_GPUSamplerMipmapMode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1601 * \sa SDL_GPUSamplerAddressMode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1602 * \sa SDL_GPUCompareOp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1603 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1604 typedef struct SDL_GPUSamplerCreateInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1605 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1606 SDL_GPUFilter min_filter; /**< The minification filter to apply to lookups. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1607 SDL_GPUFilter mag_filter; /**< The magnification filter to apply to lookups. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1608 SDL_GPUSamplerMipmapMode mipmap_mode; /**< The mipmap filter to apply to lookups. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1609 SDL_GPUSamplerAddressMode address_mode_u; /**< The addressing mode for U coordinates outside [0, 1). */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1610 SDL_GPUSamplerAddressMode address_mode_v; /**< The addressing mode for V coordinates outside [0, 1). */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1611 SDL_GPUSamplerAddressMode address_mode_w; /**< The addressing mode for W coordinates outside [0, 1). */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1612 float mip_lod_bias; /**< The bias to be added to mipmap LOD calculation. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1613 float max_anisotropy; /**< The anisotropy value clamp used by the sampler. If enable_anisotropy is false, this is ignored. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1614 SDL_GPUCompareOp compare_op; /**< The comparison operator to apply to fetched data before filtering. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1615 float min_lod; /**< Clamps the minimum of the computed LOD value. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1616 float max_lod; /**< Clamps the maximum of the computed LOD value. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1617 bool enable_anisotropy; /**< true to enable anisotropic filtering. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1618 bool enable_compare; /**< true to enable comparison against a reference value during lookups. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1619 Uint8 padding1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1620 Uint8 padding2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1621
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1622 SDL_PropertiesID props; /**< A properties ID for extensions. Should be 0 if no extensions are needed. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1623 } SDL_GPUSamplerCreateInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1624
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1625 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1626 * A structure specifying the parameters of vertex buffers used in a graphics
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1627 * pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1628 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1629 * When you call SDL_BindGPUVertexBuffers, you specify the binding slots of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1630 * the vertex buffers. For example if you called SDL_BindGPUVertexBuffers with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1631 * a first_slot of 2 and num_bindings of 3, the binding slots 2, 3, 4 would be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1632 * used by the vertex buffers you pass in.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1633 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1634 * Vertex attributes are linked to buffers via the buffer_slot field of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1635 * SDL_GPUVertexAttribute. For example, if an attribute has a buffer_slot of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1636 * 0, then that attribute belongs to the vertex buffer bound at slot 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1637 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1638 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1639 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1640 * \sa SDL_GPUVertexAttribute
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1641 * \sa SDL_GPUVertexInputRate
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1642 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1643 typedef struct SDL_GPUVertexBufferDescription
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1644 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1645 Uint32 slot; /**< The binding slot of the vertex buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1646 Uint32 pitch; /**< The size of a single element + the offset between elements. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1647 SDL_GPUVertexInputRate input_rate; /**< Whether attribute addressing is a function of the vertex index or instance index. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1648 Uint32 instance_step_rate; /**< Reserved for future use. Must be set to 0. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1649 } SDL_GPUVertexBufferDescription;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1650
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1651 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1652 * A structure specifying a vertex attribute.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1653 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1654 * All vertex attribute locations provided to an SDL_GPUVertexInputState must
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1655 * be unique.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1656 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1657 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1658 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1659 * \sa SDL_GPUVertexBufferDescription
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1660 * \sa SDL_GPUVertexInputState
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1661 * \sa SDL_GPUVertexElementFormat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1662 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1663 typedef struct SDL_GPUVertexAttribute
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1664 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1665 Uint32 location; /**< The shader input location index. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1666 Uint32 buffer_slot; /**< The binding slot of the associated vertex buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1667 SDL_GPUVertexElementFormat format; /**< The size and type of the attribute data. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1668 Uint32 offset; /**< The byte offset of this attribute relative to the start of the vertex element. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1669 } SDL_GPUVertexAttribute;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1670
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1671 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1672 * A structure specifying the parameters of a graphics pipeline vertex input
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1673 * state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1674 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1675 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1676 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1677 * \sa SDL_GPUGraphicsPipelineCreateInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1678 * \sa SDL_GPUVertexBufferDescription
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1679 * \sa SDL_GPUVertexAttribute
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1680 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1681 typedef struct SDL_GPUVertexInputState
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1682 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1683 const SDL_GPUVertexBufferDescription *vertex_buffer_descriptions; /**< A pointer to an array of vertex buffer descriptions. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1684 Uint32 num_vertex_buffers; /**< The number of vertex buffer descriptions in the above array. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1685 const SDL_GPUVertexAttribute *vertex_attributes; /**< A pointer to an array of vertex attribute descriptions. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1686 Uint32 num_vertex_attributes; /**< The number of vertex attribute descriptions in the above array. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1687 } SDL_GPUVertexInputState;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1688
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1689 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1690 * A structure specifying the stencil operation state of a graphics pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1691 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1692 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1693 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1694 * \sa SDL_GPUDepthStencilState
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1695 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1696 typedef struct SDL_GPUStencilOpState
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1697 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1698 SDL_GPUStencilOp fail_op; /**< The action performed on samples that fail the stencil test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1699 SDL_GPUStencilOp pass_op; /**< The action performed on samples that pass the depth and stencil tests. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1700 SDL_GPUStencilOp depth_fail_op; /**< The action performed on samples that pass the stencil test and fail the depth test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1701 SDL_GPUCompareOp compare_op; /**< The comparison operator used in the stencil test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1702 } SDL_GPUStencilOpState;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1703
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1704 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1705 * A structure specifying the blend state of a color target.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1706 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1707 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1708 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1709 * \sa SDL_GPUColorTargetDescription
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1710 * \sa SDL_GPUBlendFactor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1711 * \sa SDL_GPUBlendOp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1712 * \sa SDL_GPUColorComponentFlags
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1713 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1714 typedef struct SDL_GPUColorTargetBlendState
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1715 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1716 SDL_GPUBlendFactor src_color_blendfactor; /**< The value to be multiplied by the source RGB value. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1717 SDL_GPUBlendFactor dst_color_blendfactor; /**< The value to be multiplied by the destination RGB value. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1718 SDL_GPUBlendOp color_blend_op; /**< The blend operation for the RGB components. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1719 SDL_GPUBlendFactor src_alpha_blendfactor; /**< The value to be multiplied by the source alpha. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1720 SDL_GPUBlendFactor dst_alpha_blendfactor; /**< The value to be multiplied by the destination alpha. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1721 SDL_GPUBlendOp alpha_blend_op; /**< The blend operation for the alpha component. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1722 SDL_GPUColorComponentFlags color_write_mask; /**< A bitmask specifying which of the RGBA components are enabled for writing. Writes to all channels if enable_color_write_mask is false. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1723 bool enable_blend; /**< Whether blending is enabled for the color target. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1724 bool enable_color_write_mask; /**< Whether the color write mask is enabled. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1725 Uint8 padding1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1726 Uint8 padding2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1727 } SDL_GPUColorTargetBlendState;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1728
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1729
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1730 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1731 * A structure specifying code and metadata for creating a shader object.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1732 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1733 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1734 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1735 * \sa SDL_CreateGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1736 * \sa SDL_GPUShaderFormat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1737 * \sa SDL_GPUShaderStage
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1738 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1739 typedef struct SDL_GPUShaderCreateInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1740 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1741 size_t code_size; /**< The size in bytes of the code pointed to. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1742 const Uint8 *code; /**< A pointer to shader code. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1743 const char *entrypoint; /**< A pointer to a null-terminated UTF-8 string specifying the entry point function name for the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1744 SDL_GPUShaderFormat format; /**< The format of the shader code. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1745 SDL_GPUShaderStage stage; /**< The stage the shader program corresponds to. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1746 Uint32 num_samplers; /**< The number of samplers defined in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1747 Uint32 num_storage_textures; /**< The number of storage textures defined in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1748 Uint32 num_storage_buffers; /**< The number of storage buffers defined in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1749 Uint32 num_uniform_buffers; /**< The number of uniform buffers defined in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1750
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1751 SDL_PropertiesID props; /**< A properties ID for extensions. Should be 0 if no extensions are needed. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1752 } SDL_GPUShaderCreateInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1753
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1754 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1755 * A structure specifying the parameters of a texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1756 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1757 * Usage flags can be bitwise OR'd together for combinations of usages. Note
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1758 * that certain usage combinations are invalid, for example SAMPLER and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1759 * GRAPHICS_STORAGE.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1760 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1761 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1762 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1763 * \sa SDL_CreateGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1764 * \sa SDL_GPUTextureType
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1765 * \sa SDL_GPUTextureFormat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1766 * \sa SDL_GPUTextureUsageFlags
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1767 * \sa SDL_GPUSampleCount
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1768 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1769 typedef struct SDL_GPUTextureCreateInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1770 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1771 SDL_GPUTextureType type; /**< The base dimensionality of the texture. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1772 SDL_GPUTextureFormat format; /**< The pixel format of the texture. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1773 SDL_GPUTextureUsageFlags usage; /**< How the texture is intended to be used by the client. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1774 Uint32 width; /**< The width of the texture. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1775 Uint32 height; /**< The height of the texture. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1776 Uint32 layer_count_or_depth; /**< The layer count or depth of the texture. This value is treated as a layer count on 2D array textures, and as a depth value on 3D textures. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1777 Uint32 num_levels; /**< The number of mip levels in the texture. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1778 SDL_GPUSampleCount sample_count; /**< The number of samples per texel. Only applies if the texture is used as a render target. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1779
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1780 SDL_PropertiesID props; /**< A properties ID for extensions. Should be 0 if no extensions are needed. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1781 } SDL_GPUTextureCreateInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1782
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1783 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1784 * A structure specifying the parameters of a buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1785 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1786 * Usage flags can be bitwise OR'd together for combinations of usages. Note
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1787 * that certain combinations are invalid, for example VERTEX and INDEX.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1788 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1789 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1790 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1791 * \sa SDL_CreateGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1792 * \sa SDL_GPUBufferUsageFlags
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1793 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1794 typedef struct SDL_GPUBufferCreateInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1795 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1796 SDL_GPUBufferUsageFlags usage; /**< How the buffer is intended to be used by the client. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1797 Uint32 size; /**< The size in bytes of the buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1798
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1799 SDL_PropertiesID props; /**< A properties ID for extensions. Should be 0 if no extensions are needed. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1800 } SDL_GPUBufferCreateInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1801
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1802 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1803 * A structure specifying the parameters of a transfer buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1804 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1805 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1806 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1807 * \sa SDL_CreateGPUTransferBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1808 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1809 typedef struct SDL_GPUTransferBufferCreateInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1810 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1811 SDL_GPUTransferBufferUsage usage; /**< How the transfer buffer is intended to be used by the client. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1812 Uint32 size; /**< The size in bytes of the transfer buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1813
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1814 SDL_PropertiesID props; /**< A properties ID for extensions. Should be 0 if no extensions are needed. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1815 } SDL_GPUTransferBufferCreateInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1816
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1817 /* Pipeline state structures */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1818
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1819 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1820 * A structure specifying the parameters of the graphics pipeline rasterizer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1821 * state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1822 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1823 * Note that SDL_GPU_FILLMODE_LINE is not supported on many Android devices.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1824 * For those devices, the fill mode will automatically fall back to FILL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1825 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1826 * Also note that the D3D12 driver will enable depth clamping even if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1827 * enable_depth_clip is true. If you need this clamp+clip behavior, consider
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1828 * enabling depth clip and then manually clamping depth in your fragment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1829 * shaders on Metal and Vulkan.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1830 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1831 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1832 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1833 * \sa SDL_GPUGraphicsPipelineCreateInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1834 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1835 typedef struct SDL_GPURasterizerState
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1836 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1837 SDL_GPUFillMode fill_mode; /**< Whether polygons will be filled in or drawn as lines. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1838 SDL_GPUCullMode cull_mode; /**< The facing direction in which triangles will be culled. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1839 SDL_GPUFrontFace front_face; /**< The vertex winding that will cause a triangle to be determined as front-facing. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1840 float depth_bias_constant_factor; /**< A scalar factor controlling the depth value added to each fragment. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1841 float depth_bias_clamp; /**< The maximum depth bias of a fragment. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1842 float depth_bias_slope_factor; /**< A scalar factor applied to a fragment's slope in depth calculations. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1843 bool enable_depth_bias; /**< true to bias fragment depth values. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1844 bool enable_depth_clip; /**< true to enable depth clip, false to enable depth clamp. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1845 Uint8 padding1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1846 Uint8 padding2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1847 } SDL_GPURasterizerState;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1848
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1849 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1850 * A structure specifying the parameters of the graphics pipeline multisample
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1851 * state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1852 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1853 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1854 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1855 * \sa SDL_GPUGraphicsPipelineCreateInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1856 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1857 typedef struct SDL_GPUMultisampleState
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1858 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1859 SDL_GPUSampleCount sample_count; /**< The number of samples to be used in rasterization. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1860 Uint32 sample_mask; /**< Reserved for future use. Must be set to 0. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1861 bool enable_mask; /**< Reserved for future use. Must be set to false. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1862 bool enable_alpha_to_coverage; /**< true enables the alpha-to-coverage feature. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1863 Uint8 padding2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1864 Uint8 padding3;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1865 } SDL_GPUMultisampleState;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1866
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1867 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1868 * A structure specifying the parameters of the graphics pipeline depth
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1869 * stencil state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1870 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1871 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1872 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1873 * \sa SDL_GPUGraphicsPipelineCreateInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1874 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1875 typedef struct SDL_GPUDepthStencilState
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1876 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1877 SDL_GPUCompareOp compare_op; /**< The comparison operator used for depth testing. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1878 SDL_GPUStencilOpState back_stencil_state; /**< The stencil op state for back-facing triangles. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1879 SDL_GPUStencilOpState front_stencil_state; /**< The stencil op state for front-facing triangles. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1880 Uint8 compare_mask; /**< Selects the bits of the stencil values participating in the stencil test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1881 Uint8 write_mask; /**< Selects the bits of the stencil values updated by the stencil test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1882 bool enable_depth_test; /**< true enables the depth test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1883 bool enable_depth_write; /**< true enables depth writes. Depth writes are always disabled when enable_depth_test is false. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1884 bool enable_stencil_test; /**< true enables the stencil test. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1885 Uint8 padding1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1886 Uint8 padding2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1887 Uint8 padding3;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1888 } SDL_GPUDepthStencilState;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1889
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1890 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1891 * A structure specifying the parameters of color targets used in a graphics
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1892 * pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1893 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1894 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1895 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1896 * \sa SDL_GPUGraphicsPipelineTargetInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1897 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1898 typedef struct SDL_GPUColorTargetDescription
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1899 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1900 SDL_GPUTextureFormat format; /**< The pixel format of the texture to be used as a color target. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1901 SDL_GPUColorTargetBlendState blend_state; /**< The blend state to be used for the color target. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1902 } SDL_GPUColorTargetDescription;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1903
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1904 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1905 * A structure specifying the descriptions of render targets used in a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1906 * graphics pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1907 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1908 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1909 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1910 * \sa SDL_GPUGraphicsPipelineCreateInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1911 * \sa SDL_GPUColorTargetDescription
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1912 * \sa SDL_GPUTextureFormat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1913 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1914 typedef struct SDL_GPUGraphicsPipelineTargetInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1915 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1916 const SDL_GPUColorTargetDescription *color_target_descriptions; /**< A pointer to an array of color target descriptions. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1917 Uint32 num_color_targets; /**< The number of color target descriptions in the above array. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1918 SDL_GPUTextureFormat depth_stencil_format; /**< The pixel format of the depth-stencil target. Ignored if has_depth_stencil_target is false. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1919 bool has_depth_stencil_target; /**< true specifies that the pipeline uses a depth-stencil target. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1920 Uint8 padding1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1921 Uint8 padding2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1922 Uint8 padding3;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1923 } SDL_GPUGraphicsPipelineTargetInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1924
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1925 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1926 * A structure specifying the parameters of a graphics pipeline state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1927 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1928 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1929 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1930 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1931 * \sa SDL_GPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1932 * \sa SDL_GPUVertexInputState
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1933 * \sa SDL_GPUPrimitiveType
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1934 * \sa SDL_GPURasterizerState
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1935 * \sa SDL_GPUMultisampleState
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1936 * \sa SDL_GPUDepthStencilState
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1937 * \sa SDL_GPUGraphicsPipelineTargetInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1938 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1939 typedef struct SDL_GPUGraphicsPipelineCreateInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1940 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1941 SDL_GPUShader *vertex_shader; /**< The vertex shader used by the graphics pipeline. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1942 SDL_GPUShader *fragment_shader; /**< The fragment shader used by the graphics pipeline. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1943 SDL_GPUVertexInputState vertex_input_state; /**< The vertex layout of the graphics pipeline. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1944 SDL_GPUPrimitiveType primitive_type; /**< The primitive topology of the graphics pipeline. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1945 SDL_GPURasterizerState rasterizer_state; /**< The rasterizer state of the graphics pipeline. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1946 SDL_GPUMultisampleState multisample_state; /**< The multisample state of the graphics pipeline. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1947 SDL_GPUDepthStencilState depth_stencil_state; /**< The depth-stencil state of the graphics pipeline. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1948 SDL_GPUGraphicsPipelineTargetInfo target_info; /**< Formats and blend modes for the render targets of the graphics pipeline. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1949
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1950 SDL_PropertiesID props; /**< A properties ID for extensions. Should be 0 if no extensions are needed. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1951 } SDL_GPUGraphicsPipelineCreateInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1952
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1953 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1954 * A structure specifying the parameters of a compute pipeline state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1955 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1956 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1957 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1958 * \sa SDL_CreateGPUComputePipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1959 * \sa SDL_GPUShaderFormat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1960 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1961 typedef struct SDL_GPUComputePipelineCreateInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1962 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1963 size_t code_size; /**< The size in bytes of the compute shader code pointed to. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1964 const Uint8 *code; /**< A pointer to compute shader code. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1965 const char *entrypoint; /**< A pointer to a null-terminated UTF-8 string specifying the entry point function name for the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1966 SDL_GPUShaderFormat format; /**< The format of the compute shader code. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1967 Uint32 num_samplers; /**< The number of samplers defined in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1968 Uint32 num_readonly_storage_textures; /**< The number of readonly storage textures defined in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1969 Uint32 num_readonly_storage_buffers; /**< The number of readonly storage buffers defined in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1970 Uint32 num_readwrite_storage_textures; /**< The number of read-write storage textures defined in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1971 Uint32 num_readwrite_storage_buffers; /**< The number of read-write storage buffers defined in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1972 Uint32 num_uniform_buffers; /**< The number of uniform buffers defined in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1973 Uint32 threadcount_x; /**< The number of threads in the X dimension. This should match the value in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1974 Uint32 threadcount_y; /**< The number of threads in the Y dimension. This should match the value in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1975 Uint32 threadcount_z; /**< The number of threads in the Z dimension. This should match the value in the shader. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1976
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1977 SDL_PropertiesID props; /**< A properties ID for extensions. Should be 0 if no extensions are needed. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1978 } SDL_GPUComputePipelineCreateInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1979
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1980 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1981 * A structure specifying the parameters of a color target used by a render
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1982 * pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1983 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1984 * The load_op field determines what is done with the texture at the beginning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1985 * of the render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1986 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1987 * - LOAD: Loads the data currently in the texture. Not recommended for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1988 * multisample textures as it requires significant memory bandwidth.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1989 * - CLEAR: Clears the texture to a single color.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1990 * - DONT_CARE: The driver will do whatever it wants with the texture memory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1991 * This is a good option if you know that every single pixel will be touched
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1992 * in the render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1993 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1994 * The store_op field determines what is done with the color results of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1995 * render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1996 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1997 * - STORE: Stores the results of the render pass in the texture. Not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1998 * recommended for multisample textures as it requires significant memory
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1999 * bandwidth.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2000 * - DONT_CARE: The driver will do whatever it wants with the texture memory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2001 * This is often a good option for depth/stencil textures.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2002 * - RESOLVE: Resolves a multisample texture into resolve_texture, which must
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2003 * have a sample count of 1. Then the driver may discard the multisample
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2004 * texture memory. This is the most performant method of resolving a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2005 * multisample target.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2006 * - RESOLVE_AND_STORE: Resolves a multisample texture into the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2007 * resolve_texture, which must have a sample count of 1. Then the driver
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2008 * stores the multisample texture's contents. Not recommended as it requires
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2009 * significant memory bandwidth.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2010 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2011 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2012 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2013 * \sa SDL_BeginGPURenderPass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2014 * \sa SDL_FColor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2015 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2016 typedef struct SDL_GPUColorTargetInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2017 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2018 SDL_GPUTexture *texture; /**< The texture that will be used as a color target by a render pass. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2019 Uint32 mip_level; /**< The mip level to use as a color target. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2020 Uint32 layer_or_depth_plane; /**< The layer index or depth plane to use as a color target. This value is treated as a layer index on 2D array and cube textures, and as a depth plane on 3D textures. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2021 SDL_FColor clear_color; /**< The color to clear the color target to at the start of the render pass. Ignored if SDL_GPU_LOADOP_CLEAR is not used. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2022 SDL_GPULoadOp load_op; /**< What is done with the contents of the color target at the beginning of the render pass. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2023 SDL_GPUStoreOp store_op; /**< What is done with the results of the render pass. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2024 SDL_GPUTexture *resolve_texture; /**< The texture that will receive the results of a multisample resolve operation. Ignored if a RESOLVE* store_op is not used. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2025 Uint32 resolve_mip_level; /**< The mip level of the resolve texture to use for the resolve operation. Ignored if a RESOLVE* store_op is not used. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2026 Uint32 resolve_layer; /**< The layer index of the resolve texture to use for the resolve operation. Ignored if a RESOLVE* store_op is not used. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2027 bool cycle; /**< true cycles the texture if the texture is bound and load_op is not LOAD */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2028 bool cycle_resolve_texture; /**< true cycles the resolve texture if the resolve texture is bound. Ignored if a RESOLVE* store_op is not used. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2029 Uint8 padding1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2030 Uint8 padding2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2031 } SDL_GPUColorTargetInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2032
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2033 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2034 * A structure specifying the parameters of a depth-stencil target used by a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2035 * render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2036 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2037 * The load_op field determines what is done with the depth contents of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2038 * texture at the beginning of the render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2039 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2040 * - LOAD: Loads the depth values currently in the texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2041 * - CLEAR: Clears the texture to a single depth.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2042 * - DONT_CARE: The driver will do whatever it wants with the memory. This is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2043 * a good option if you know that every single pixel will be touched in the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2044 * render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2045 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2046 * The store_op field determines what is done with the depth results of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2047 * render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2048 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2049 * - STORE: Stores the depth results in the texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2050 * - DONT_CARE: The driver will do whatever it wants with the depth results.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2051 * This is often a good option for depth/stencil textures that don't need to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2052 * be reused again.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2053 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2054 * The stencil_load_op field determines what is done with the stencil contents
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2055 * of the texture at the beginning of the render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2056 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2057 * - LOAD: Loads the stencil values currently in the texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2058 * - CLEAR: Clears the stencil values to a single value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2059 * - DONT_CARE: The driver will do whatever it wants with the memory. This is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2060 * a good option if you know that every single pixel will be touched in the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2061 * render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2062 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2063 * The stencil_store_op field determines what is done with the stencil results
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2064 * of the render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2065 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2066 * - STORE: Stores the stencil results in the texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2067 * - DONT_CARE: The driver will do whatever it wants with the stencil results.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2068 * This is often a good option for depth/stencil textures that don't need to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2069 * be reused again.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2070 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2071 * Note that depth/stencil targets do not support multisample resolves.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2072 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2073 * Due to ABI limitations, depth textures with more than 255 layers are not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2074 * supported.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2075 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2076 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2077 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2078 * \sa SDL_BeginGPURenderPass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2079 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2080 typedef struct SDL_GPUDepthStencilTargetInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2081 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2082 SDL_GPUTexture *texture; /**< The texture that will be used as the depth stencil target by the render pass. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2083 float clear_depth; /**< The value to clear the depth component to at the beginning of the render pass. Ignored if SDL_GPU_LOADOP_CLEAR is not used. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2084 SDL_GPULoadOp load_op; /**< What is done with the depth contents at the beginning of the render pass. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2085 SDL_GPUStoreOp store_op; /**< What is done with the depth results of the render pass. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2086 SDL_GPULoadOp stencil_load_op; /**< What is done with the stencil contents at the beginning of the render pass. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2087 SDL_GPUStoreOp stencil_store_op; /**< What is done with the stencil results of the render pass. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2088 bool cycle; /**< true cycles the texture if the texture is bound and any load ops are not LOAD */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2089 Uint8 clear_stencil; /**< The value to clear the stencil component to at the beginning of the render pass. Ignored if SDL_GPU_LOADOP_CLEAR is not used. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2090 Uint8 mip_level; /**< The mip level to use as the depth stencil target. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2091 Uint8 layer; /**< The layer index to use as the depth stencil target. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2092 } SDL_GPUDepthStencilTargetInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2093
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2094 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2095 * A structure containing parameters for a blit command.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2096 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2097 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2098 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2099 * \sa SDL_BlitGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2100 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2101 typedef struct SDL_GPUBlitInfo {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2102 SDL_GPUBlitRegion source; /**< The source region for the blit. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2103 SDL_GPUBlitRegion destination; /**< The destination region for the blit. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2104 SDL_GPULoadOp load_op; /**< What is done with the contents of the destination before the blit. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2105 SDL_FColor clear_color; /**< The color to clear the destination region to before the blit. Ignored if load_op is not SDL_GPU_LOADOP_CLEAR. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2106 SDL_FlipMode flip_mode; /**< The flip mode for the source region. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2107 SDL_GPUFilter filter; /**< The filter mode used when blitting. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2108 bool cycle; /**< true cycles the destination texture if it is already bound. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2109 Uint8 padding1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2110 Uint8 padding2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2111 Uint8 padding3;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2112 } SDL_GPUBlitInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2113
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2114 /* Binding structs */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2115
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2116 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2117 * A structure specifying parameters in a buffer binding call.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2118 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2119 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2120 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2121 * \sa SDL_BindGPUVertexBuffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2122 * \sa SDL_BindGPUIndexBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2123 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2124 typedef struct SDL_GPUBufferBinding
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2125 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2126 SDL_GPUBuffer *buffer; /**< The buffer to bind. Must have been created with SDL_GPU_BUFFERUSAGE_VERTEX for SDL_BindGPUVertexBuffers, or SDL_GPU_BUFFERUSAGE_INDEX for SDL_BindGPUIndexBuffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2127 Uint32 offset; /**< The starting byte of the data to bind in the buffer. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2128 } SDL_GPUBufferBinding;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2129
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2130 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2131 * A structure specifying parameters in a sampler binding call.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2132 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2133 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2134 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2135 * \sa SDL_BindGPUVertexSamplers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2136 * \sa SDL_BindGPUFragmentSamplers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2137 * \sa SDL_GPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2138 * \sa SDL_GPUSampler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2139 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2140 typedef struct SDL_GPUTextureSamplerBinding
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2141 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2142 SDL_GPUTexture *texture; /**< The texture to bind. Must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2143 SDL_GPUSampler *sampler; /**< The sampler to bind. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2144 } SDL_GPUTextureSamplerBinding;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2145
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2146 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2147 * A structure specifying parameters related to binding buffers in a compute
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2148 * pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2149 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2150 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2151 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2152 * \sa SDL_BeginGPUComputePass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2153 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2154 typedef struct SDL_GPUStorageBufferReadWriteBinding
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2155 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2156 SDL_GPUBuffer *buffer; /**< The buffer to bind. Must have been created with SDL_GPU_BUFFERUSAGE_COMPUTE_STORAGE_WRITE. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2157 bool cycle; /**< true cycles the buffer if it is already bound. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2158 Uint8 padding1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2159 Uint8 padding2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2160 Uint8 padding3;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2161 } SDL_GPUStorageBufferReadWriteBinding;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2162
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2163 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2164 * A structure specifying parameters related to binding textures in a compute
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2165 * pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2166 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2167 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2168 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2169 * \sa SDL_BeginGPUComputePass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2170 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2171 typedef struct SDL_GPUStorageTextureReadWriteBinding
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2172 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2173 SDL_GPUTexture *texture; /**< The texture to bind. Must have been created with SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_WRITE or SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_SIMULTANEOUS_READ_WRITE. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2174 Uint32 mip_level; /**< The mip level index to bind. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2175 Uint32 layer; /**< The layer index to bind. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2176 bool cycle; /**< true cycles the texture if it is already bound. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2177 Uint8 padding1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2178 Uint8 padding2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2179 Uint8 padding3;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2180 } SDL_GPUStorageTextureReadWriteBinding;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2181
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2182 /* Functions */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2183
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2184 /* Device */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2185
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2186 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2187 * Checks for GPU runtime support.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2188 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2189 * \param format_flags a bitflag indicating which shader formats the app is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2190 * able to provide.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2191 * \param name the preferred GPU driver, or NULL to let SDL pick the optimal
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2192 * driver.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2193 * \returns true if supported, false otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2194 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2195 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2196 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2197 * \sa SDL_CreateGPUDevice
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2198 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2199 extern SDL_DECLSPEC bool SDLCALL SDL_GPUSupportsShaderFormats(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2200 SDL_GPUShaderFormat format_flags,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2201 const char *name);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2202
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2203 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2204 * Checks for GPU runtime support.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2205 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2206 * \param props the properties to use.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2207 * \returns true if supported, false otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2208 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2209 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2210 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2211 * \sa SDL_CreateGPUDeviceWithProperties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2212 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2213 extern SDL_DECLSPEC bool SDLCALL SDL_GPUSupportsProperties(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2214 SDL_PropertiesID props);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2215
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2216 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2217 * Creates a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2218 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2219 * The GPU driver name can be one of the following:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2220 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2221 * - "vulkan": [Vulkan](CategoryGPU#vulkan)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2222 * - "direct3d12": [D3D12](CategoryGPU#d3d12)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2223 * - "metal": [Metal](CategoryGPU#metal)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2224 * - NULL: let SDL pick the optimal driver
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2225 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2226 * \param format_flags a bitflag indicating which shader formats the app is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2227 * able to provide.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2228 * \param debug_mode enable debug mode properties and validations.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2229 * \param name the preferred GPU driver, or NULL to let SDL pick the optimal
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2230 * driver.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2231 * \returns a GPU context on success or NULL on failure; call SDL_GetError()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2232 * for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2233 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2234 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2235 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2236 * \sa SDL_CreateGPUDeviceWithProperties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2237 * \sa SDL_GetGPUShaderFormats
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2238 * \sa SDL_GetGPUDeviceDriver
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2239 * \sa SDL_DestroyGPUDevice
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2240 * \sa SDL_GPUSupportsShaderFormats
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2241 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2242 extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_CreateGPUDevice(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2243 SDL_GPUShaderFormat format_flags,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2244 bool debug_mode,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2245 const char *name);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2246
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2247 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2248 * Creates a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2249 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2250 * These are the supported properties:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2251 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2252 * - `SDL_PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN`: enable debug mode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2253 * properties and validations, defaults to true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2254 * - `SDL_PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN`: enable to prefer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2255 * energy efficiency over maximum GPU performance, defaults to false.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2256 * - `SDL_PROP_GPU_DEVICE_CREATE_VERBOSE_BOOLEAN`: enable to automatically log
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2257 * useful debug information on device creation, defaults to true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2258 * - `SDL_PROP_GPU_DEVICE_CREATE_NAME_STRING`: the name of the GPU driver to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2259 * use, if a specific one is desired.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2260 * - `SDL_PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN`: Enable Vulkan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2261 * device feature shaderClipDistance. If disabled, clip distances are not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2262 * supported in shader code: gl_ClipDistance[] built-ins of GLSL,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2263 * SV_ClipDistance0/1 semantics of HLSL and [[clip_distance]] attribute of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2264 * Metal. Disabling optional features allows the application to run on some
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2265 * older Android devices. Defaults to true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2266 * - `SDL_PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN`: Enable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2267 * Vulkan device feature depthClamp. If disabled, there is no depth clamp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2268 * support and enable_depth_clip in SDL_GPURasterizerState must always be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2269 * set to true. Disabling optional features allows the application to run on
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2270 * some older Android devices. Defaults to true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2271 * - `SDL_PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2272 * Enable Vulkan device feature drawIndirectFirstInstance. If disabled, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2273 * argument first_instance of SDL_GPUIndirectDrawCommand must be set to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2274 * zero. Disabling optional features allows the application to run on some
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2275 * older Android devices. Defaults to true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2276 * - `SDL_PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN`: Enable Vulkan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2277 * device feature samplerAnisotropy. If disabled, enable_anisotropy of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2278 * SDL_GPUSamplerCreateInfo must be set to false. Disabling optional
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2279 * features allows the application to run on some older Android devices.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2280 * Defaults to true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2281 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2282 * These are the current shader format properties:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2283 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2284 * - `SDL_PROP_GPU_DEVICE_CREATE_SHADERS_PRIVATE_BOOLEAN`: The app is able to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2285 * provide shaders for an NDA platform.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2286 * - `SDL_PROP_GPU_DEVICE_CREATE_SHADERS_SPIRV_BOOLEAN`: The app is able to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2287 * provide SPIR-V shaders if applicable.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2288 * - `SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXBC_BOOLEAN`: The app is able to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2289 * provide DXBC shaders if applicable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2290 * - `SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXIL_BOOLEAN`: The app is able to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2291 * provide DXIL shaders if applicable.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2292 * - `SDL_PROP_GPU_DEVICE_CREATE_SHADERS_MSL_BOOLEAN`: The app is able to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2293 * provide MSL shaders if applicable.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2294 * - `SDL_PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN`: The app is able to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2295 * provide Metal shader libraries if applicable.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2296 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2297 * With the D3D12 backend:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2298 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2299 * - `SDL_PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING`: the prefix to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2300 * use for all vertex semantics, default is "TEXCOORD".
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2301 * - `SDL_PROP_GPU_DEVICE_CREATE_D3D12_ALLOW_FEWER_RESOURCE_SLOTS_BOOLEAN`: By
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2302 * default, Resourcing Binding Tier 2 is required for D3D12 support.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2303 * However, an application can set this property to true to enable Tier 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2304 * support, if (and only if) the application uses 8 or fewer storage
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2305 * resources across all shader stages. As of writing, this property is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2306 * useful for targeting Intel Haswell and Broadwell GPUs; other hardware
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2307 * either supports Tier 2 Resource Binding or does not support D3D12 in any
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2308 * capacity. Defaults to false.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2309 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2310 * With the Vulkan backend:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2311 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2312 * - `SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2313 * By default, Vulkan device enumeration includes drivers of all types,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2314 * including software renderers (for example, the Lavapipe Mesa driver).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2315 * This can be useful if your application _requires_ SDL_GPU, but if you can
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2316 * provide your own fallback renderer (for example, an OpenGL renderer) this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2317 * property can be set to true. Defaults to false.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2318 * - `SDL_PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTER`: a pointer to an
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2319 * SDL_GPUVulkanOptions structure to be processed during device creation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2320 * This allows configuring a variety of Vulkan-specific options such as
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2321 * increasing the API version and opting into extensions aside from the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2322 * minimal set SDL requires.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2323 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2324 * \param props the properties to use.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2325 * \returns a GPU context on success or NULL on failure; call SDL_GetError()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2326 * for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2327 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2328 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2329 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2330 * \sa SDL_GetGPUShaderFormats
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2331 * \sa SDL_GetGPUDeviceDriver
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2332 * \sa SDL_DestroyGPUDevice
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2333 * \sa SDL_GPUSupportsProperties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2334 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2335 extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_CreateGPUDeviceWithProperties(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2336 SDL_PropertiesID props);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2337
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2338 #define SDL_PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN "SDL.gpu.device.create.debugmode"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2339 #define SDL_PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN "SDL.gpu.device.create.preferlowpower"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2340 #define SDL_PROP_GPU_DEVICE_CREATE_VERBOSE_BOOLEAN "SDL.gpu.device.create.verbose"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2341 #define SDL_PROP_GPU_DEVICE_CREATE_NAME_STRING "SDL.gpu.device.create.name"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2342 #define SDL_PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN "SDL.gpu.device.create.feature.clip_distance"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2343 #define SDL_PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN "SDL.gpu.device.create.feature.depth_clamping"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2344 #define SDL_PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN "SDL.gpu.device.create.feature.indirect_draw_first_instance"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2345 #define SDL_PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN "SDL.gpu.device.create.feature.anisotropy"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2346 #define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_PRIVATE_BOOLEAN "SDL.gpu.device.create.shaders.private"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2347 #define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_SPIRV_BOOLEAN "SDL.gpu.device.create.shaders.spirv"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2348 #define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXBC_BOOLEAN "SDL.gpu.device.create.shaders.dxbc"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2349 #define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXIL_BOOLEAN "SDL.gpu.device.create.shaders.dxil"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2350 #define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_MSL_BOOLEAN "SDL.gpu.device.create.shaders.msl"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2351 #define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN "SDL.gpu.device.create.shaders.metallib"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2352 #define SDL_PROP_GPU_DEVICE_CREATE_D3D12_ALLOW_FEWER_RESOURCE_SLOTS_BOOLEAN "SDL.gpu.device.create.d3d12.allowtier1resourcebinding"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2353 #define SDL_PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING "SDL.gpu.device.create.d3d12.semantic"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2354 #define SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN "SDL.gpu.device.create.vulkan.requirehardwareacceleration"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2355 #define SDL_PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTER "SDL.gpu.device.create.vulkan.options"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2356
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2357
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2358 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2359 * A structure specifying additional options when using Vulkan.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2360 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2361 * When no such structure is provided, SDL will use Vulkan API version 1.0 and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2362 * a minimal set of features. The requested API version influences how the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2363 * feature_list is processed by SDL. When requesting API version 1.0, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2364 * feature_list is ignored. Only the vulkan_10_physical_device_features and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2365 * the extension lists are used. When requesting API version 1.1, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2366 * feature_list is scanned for feature structures introduced in Vulkan 1.1.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2367 * When requesting Vulkan 1.2 or higher, the feature_list is additionally
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2368 * scanned for compound feature structs such as
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2369 * VkPhysicalDeviceVulkan11Features. The device and instance extension lists,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2370 * as well as vulkan_10_physical_device_features, are always processed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2371 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2372 * \since This struct is available since SDL 3.4.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2373 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2374 typedef struct SDL_GPUVulkanOptions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2375 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2376 Uint32 vulkan_api_version; /**< The Vulkan API version to request for the instance. Use Vulkan's VK_MAKE_VERSION or VK_MAKE_API_VERSION. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2377 void *feature_list; /**< Pointer to the first element of a chain of Vulkan feature structs. (Requires API version 1.1 or higher.)*/
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2378 void *vulkan_10_physical_device_features; /**< Pointer to a VkPhysicalDeviceFeatures struct to enable additional Vulkan 1.0 features. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2379 Uint32 device_extension_count; /**< Number of additional device extensions to require. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2380 const char **device_extension_names; /**< Pointer to a list of additional device extensions to require. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2381 Uint32 instance_extension_count; /**< Number of additional instance extensions to require. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2382 const char **instance_extension_names; /**< Pointer to a list of additional instance extensions to require. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2383 } SDL_GPUVulkanOptions;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2384
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2385 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2386 * Destroys a GPU context previously returned by SDL_CreateGPUDevice.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2387 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2388 * \param device a GPU Context to destroy.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2389 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2390 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2391 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2392 * \sa SDL_CreateGPUDevice
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2393 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2394 extern SDL_DECLSPEC void SDLCALL SDL_DestroyGPUDevice(SDL_GPUDevice *device);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2395
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2396 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2397 * Get the number of GPU drivers compiled into SDL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2398 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2399 * \returns the number of built in GPU drivers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2400 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2401 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2402 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2403 * \sa SDL_GetGPUDriver
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2404 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2405 extern SDL_DECLSPEC int SDLCALL SDL_GetNumGPUDrivers(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2406
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2407 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2408 * Get the name of a built in GPU driver.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2409 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2410 * The GPU drivers are presented in the order in which they are normally
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2411 * checked during initialization.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2412 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2413 * The names of drivers are all simple, low-ASCII identifiers, like "vulkan",
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2414 * "metal" or "direct3d12". These never have Unicode characters, and are not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2415 * meant to be proper names.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2416 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2417 * \param index the index of a GPU driver.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2418 * \returns the name of the GPU driver with the given **index**.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2419 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2420 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2421 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2422 * \sa SDL_GetNumGPUDrivers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2423 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2424 extern SDL_DECLSPEC const char * SDLCALL SDL_GetGPUDriver(int index);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2425
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2426 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2427 * Returns the name of the backend used to create this GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2428 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2429 * \param device a GPU context to query.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2430 * \returns the name of the device's driver, or NULL on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2431 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2432 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2433 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2434 extern SDL_DECLSPEC const char * SDLCALL SDL_GetGPUDeviceDriver(SDL_GPUDevice *device);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2435
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2436 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2437 * Returns the supported shader formats for this GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2438 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2439 * \param device a GPU context to query.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2440 * \returns a bitflag indicating which shader formats the driver is able to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2441 * consume.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2442 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2443 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2444 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2445 extern SDL_DECLSPEC SDL_GPUShaderFormat SDLCALL SDL_GetGPUShaderFormats(SDL_GPUDevice *device);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2446
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2447 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2448 * Get the properties associated with a GPU device.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2449 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2450 * All properties are optional and may differ between GPU backends and SDL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2451 * versions.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2452 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2453 * The following properties are provided by SDL:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2454 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2455 * `SDL_PROP_GPU_DEVICE_NAME_STRING`: Contains the name of the underlying
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2456 * device as reported by the system driver. This string has no standardized
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2457 * format, is highly inconsistent between hardware devices and drivers, and is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2458 * able to change at any time. Do not attempt to parse this string as it is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2459 * bound to fail at some point in the future when system drivers are updated,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2460 * new hardware devices are introduced, or when SDL adds new GPU backends or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2461 * modifies existing ones.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2462 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2463 * Strings that have been found in the wild include:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2464 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2465 * - GTX 970
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2466 * - GeForce GTX 970
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2467 * - NVIDIA GeForce GTX 970
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2468 * - Microsoft Direct3D12 (NVIDIA GeForce GTX 970)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2469 * - NVIDIA Graphics Device
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2470 * - GeForce GPU
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2471 * - P106-100
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2472 * - AMD 15D8:C9
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2473 * - AMD Custom GPU 0405
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2474 * - AMD Radeon (TM) Graphics
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2475 * - ASUS Radeon RX 470 Series
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2476 * - Intel(R) Arc(tm) A380 Graphics (DG2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2477 * - Virtio-GPU Venus (NVIDIA TITAN V)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2478 * - SwiftShader Device (LLVM 16.0.0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2479 * - llvmpipe (LLVM 15.0.4, 256 bits)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2480 * - Microsoft Basic Render Driver
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2481 * - unknown device
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2482 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2483 * The above list shows that the same device can have different formats, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2484 * vendor name may or may not appear in the string, the included vendor name
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2485 * may not be the vendor of the chipset on the device, some manufacturers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2486 * include pseudo-legal marks while others don't, some devices may not use a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2487 * marketing name in the string, the device string may be wrapped by the name
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2488 * of a translation interface, the device may be emulated in software, or the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2489 * string may contain generic text that does not identify the device at all.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2490 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2491 * `SDL_PROP_GPU_DEVICE_DRIVER_NAME_STRING`: Contains the self-reported name
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2492 * of the underlying system driver.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2493 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2494 * Strings that have been found in the wild include:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2495 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2496 * - Intel Corporation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2497 * - Intel open-source Mesa driver
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2498 * - Qualcomm Technologies Inc. Adreno Vulkan Driver
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2499 * - MoltenVK
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2500 * - Mali-G715
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2501 * - venus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2502 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2503 * `SDL_PROP_GPU_DEVICE_DRIVER_VERSION_STRING`: Contains the self-reported
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2504 * version of the underlying system driver. This is a relatively short version
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2505 * string in an unspecified format. If SDL_PROP_GPU_DEVICE_DRIVER_INFO_STRING
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2506 * is available then that property should be preferred over this one as it may
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2507 * contain additional information that is useful for identifying the exact
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2508 * driver version used.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2509 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2510 * Strings that have been found in the wild include:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2511 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2512 * - 53.0.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2513 * - 0.405.2463
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2514 * - 32.0.15.6614
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2515 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2516 * `SDL_PROP_GPU_DEVICE_DRIVER_INFO_STRING`: Contains the detailed version
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2517 * information of the underlying system driver as reported by the driver. This
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2518 * is an arbitrary string with no standardized format and it may contain
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2519 * newlines. This property should be preferred over
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2520 * SDL_PROP_GPU_DEVICE_DRIVER_VERSION_STRING if it is available as it usually
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2521 * contains the same information but in a format that is easier to read.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2522 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2523 * Strings that have been found in the wild include:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2524 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2525 * - 101.6559
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2526 * - 1.2.11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2527 * - Mesa 21.2.2 (LLVM 12.0.1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2528 * - Mesa 22.2.0-devel (git-f226222 2022-04-14 impish-oibaf-ppa)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2529 * - v1.r53p0-00eac0.824c4f31403fb1fbf8ee1042422c2129
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2530 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2531 * This string has also been observed to be a multiline string (which has a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2532 * trailing newline):
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2533 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2534 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2535 * Driver Build: 85da404, I46ff5fc46f, 1606794520
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2536 * Date: 11/30/20
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2537 * Compiler Version: EV031.31.04.01
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2538 * Driver Branch: promo490_3_Google
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2539 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2540 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2541 * \param device a GPU context to query.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2542 * \returns a valid property ID on success or 0 on failure; call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2543 * SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2544 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2545 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2546 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2547 * \since This function is available since SDL 3.4.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2548 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2549 extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetGPUDeviceProperties(SDL_GPUDevice *device);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2550
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2551 #define SDL_PROP_GPU_DEVICE_NAME_STRING "SDL.gpu.device.name"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2552 #define SDL_PROP_GPU_DEVICE_DRIVER_NAME_STRING "SDL.gpu.device.driver_name"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2553 #define SDL_PROP_GPU_DEVICE_DRIVER_VERSION_STRING "SDL.gpu.device.driver_version"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2554 #define SDL_PROP_GPU_DEVICE_DRIVER_INFO_STRING "SDL.gpu.device.driver_info"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2555
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2556
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2557 /* State Creation */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2558
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2559 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2560 * Creates a pipeline object to be used in a compute workflow.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2561 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2562 * Shader resource bindings must be authored to follow a particular order
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2563 * depending on the shader format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2564 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2565 * For SPIR-V shaders, use the following resource sets:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2566 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2567 * - 0: Sampled textures, followed by read-only storage textures, followed by
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2568 * read-only storage buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2569 * - 1: Read-write storage textures, followed by read-write storage buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2570 * - 2: Uniform buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2571 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2572 * For DXBC and DXIL shaders, use the following register order:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2573 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2574 * - (t[n], space0): Sampled textures, followed by read-only storage textures,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2575 * followed by read-only storage buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2576 * - (u[n], space1): Read-write storage textures, followed by read-write
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2577 * storage buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2578 * - (b[n], space2): Uniform buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2579 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2580 * For MSL/metallib, use the following order:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2581 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2582 * - [[buffer]]: Uniform buffers, followed by read-only storage buffers,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2583 * followed by read-write storage buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2584 * - [[texture]]: Sampled textures, followed by read-only storage textures,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2585 * followed by read-write storage textures
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2586 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2587 * There are optional properties that can be provided through `props`. These
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2588 * are the supported properties:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2589 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2590 * - `SDL_PROP_GPU_COMPUTEPIPELINE_CREATE_NAME_STRING`: a name that can be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2591 * displayed in debugging tools.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2592 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2593 * \param device a GPU Context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2594 * \param createinfo a struct describing the state of the compute pipeline to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2595 * create.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2596 * \returns a compute pipeline object on success, or NULL on failure; call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2597 * SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2598 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2599 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2600 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2601 * \sa SDL_BindGPUComputePipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2602 * \sa SDL_ReleaseGPUComputePipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2603 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2604 extern SDL_DECLSPEC SDL_GPUComputePipeline * SDLCALL SDL_CreateGPUComputePipeline(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2605 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2606 const SDL_GPUComputePipelineCreateInfo *createinfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2607
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2608 #define SDL_PROP_GPU_COMPUTEPIPELINE_CREATE_NAME_STRING "SDL.gpu.computepipeline.create.name"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2609
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2610 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2611 * Creates a pipeline object to be used in a graphics workflow.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2612 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2613 * There are optional properties that can be provided through `props`. These
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2614 * are the supported properties:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2615 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2616 * - `SDL_PROP_GPU_GRAPHICSPIPELINE_CREATE_NAME_STRING`: a name that can be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2617 * displayed in debugging tools.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2618 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2619 * \param device a GPU Context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2620 * \param createinfo a struct describing the state of the graphics pipeline to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2621 * create.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2622 * \returns a graphics pipeline object on success, or NULL on failure; call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2623 * SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2624 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2625 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2626 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2627 * \sa SDL_CreateGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2628 * \sa SDL_BindGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2629 * \sa SDL_ReleaseGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2630 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2631 extern SDL_DECLSPEC SDL_GPUGraphicsPipeline * SDLCALL SDL_CreateGPUGraphicsPipeline(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2632 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2633 const SDL_GPUGraphicsPipelineCreateInfo *createinfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2634
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2635 #define SDL_PROP_GPU_GRAPHICSPIPELINE_CREATE_NAME_STRING "SDL.gpu.graphicspipeline.create.name"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2636
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2637 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2638 * Creates a sampler object to be used when binding textures in a graphics
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2639 * workflow.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2640 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2641 * There are optional properties that can be provided through `props`. These
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2642 * are the supported properties:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2643 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2644 * - `SDL_PROP_GPU_SAMPLER_CREATE_NAME_STRING`: a name that can be displayed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2645 * in debugging tools.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2646 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2647 * \param device a GPU Context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2648 * \param createinfo a struct describing the state of the sampler to create.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2649 * \returns a sampler object on success, or NULL on failure; call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2650 * SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2651 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2652 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2653 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2654 * \sa SDL_BindGPUVertexSamplers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2655 * \sa SDL_BindGPUFragmentSamplers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2656 * \sa SDL_ReleaseGPUSampler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2657 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2658 extern SDL_DECLSPEC SDL_GPUSampler * SDLCALL SDL_CreateGPUSampler(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2659 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2660 const SDL_GPUSamplerCreateInfo *createinfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2661
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2662 #define SDL_PROP_GPU_SAMPLER_CREATE_NAME_STRING "SDL.gpu.sampler.create.name"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2663
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2664 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2665 * Creates a shader to be used when creating a graphics pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2666 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2667 * Shader resource bindings must be authored to follow a particular order
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2668 * depending on the shader format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2669 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2670 * For SPIR-V shaders, use the following resource sets:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2671 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2672 * For vertex shaders:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2673 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2674 * - 0: Sampled textures, followed by storage textures, followed by storage
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2675 * buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2676 * - 1: Uniform buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2677 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2678 * For fragment shaders:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2679 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2680 * - 2: Sampled textures, followed by storage textures, followed by storage
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2681 * buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2682 * - 3: Uniform buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2683 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2684 * For DXBC and DXIL shaders, use the following register order:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2685 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2686 * For vertex shaders:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2687 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2688 * - (t[n], space0): Sampled textures, followed by storage textures, followed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2689 * by storage buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2690 * - (s[n], space0): Samplers with indices corresponding to the sampled
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2691 * textures
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2692 * - (b[n], space1): Uniform buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2693 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2694 * For pixel shaders:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2695 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2696 * - (t[n], space2): Sampled textures, followed by storage textures, followed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2697 * by storage buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2698 * - (s[n], space2): Samplers with indices corresponding to the sampled
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2699 * textures
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2700 * - (b[n], space3): Uniform buffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2701 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2702 * For MSL/metallib, use the following order:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2703 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2704 * - [[texture]]: Sampled textures, followed by storage textures
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2705 * - [[sampler]]: Samplers with indices corresponding to the sampled textures
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2706 * - [[buffer]]: Uniform buffers, followed by storage buffers. Vertex buffer 0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2707 * is bound at [[buffer(14)]], vertex buffer 1 at [[buffer(15)]], and so on.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2708 * Rather than manually authoring vertex buffer indices, use the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2709 * [[stage_in]] attribute which will automatically use the vertex input
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2710 * information from the SDL_GPUGraphicsPipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2711 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2712 * Shader semantics other than system-value semantics do not matter in D3D12
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2713 * and for ease of use the SDL implementation assumes that non system-value
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2714 * semantics will all be TEXCOORD. If you are using HLSL as the shader source
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2715 * language, your vertex semantics should start at TEXCOORD0 and increment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2716 * like so: TEXCOORD1, TEXCOORD2, etc. If you wish to change the semantic
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2717 * prefix to something other than TEXCOORD you can use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2718 * SDL_PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2719 * SDL_CreateGPUDeviceWithProperties().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2720 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2721 * There are optional properties that can be provided through `props`. These
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2722 * are the supported properties:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2723 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2724 * - `SDL_PROP_GPU_SHADER_CREATE_NAME_STRING`: a name that can be displayed in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2725 * debugging tools.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2726 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2727 * \param device a GPU Context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2728 * \param createinfo a struct describing the state of the shader to create.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2729 * \returns a shader object on success, or NULL on failure; call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2730 * SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2731 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2732 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2733 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2734 * \sa SDL_CreateGPUGraphicsPipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2735 * \sa SDL_ReleaseGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2736 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2737 extern SDL_DECLSPEC SDL_GPUShader * SDLCALL SDL_CreateGPUShader(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2738 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2739 const SDL_GPUShaderCreateInfo *createinfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2740
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2741 #define SDL_PROP_GPU_SHADER_CREATE_NAME_STRING "SDL.gpu.shader.create.name"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2742
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2743 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2744 * Creates a texture object to be used in graphics or compute workflows.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2745 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2746 * The contents of this texture are undefined until data is written to the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2747 * texture, either via SDL_UploadToGPUTexture or by performing a render or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2748 * compute pass with this texture as a target.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2749 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2750 * Note that certain combinations of usage flags are invalid. For example, a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2751 * texture cannot have both the SAMPLER and GRAPHICS_STORAGE_READ flags.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2752 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2753 * If you request a sample count higher than the hardware supports, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2754 * implementation will automatically fall back to the highest available sample
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2755 * count.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2756 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2757 * There are optional properties that can be provided through
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2758 * SDL_GPUTextureCreateInfo's `props`. These are the supported properties:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2759 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2760 * - `SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_R_FLOAT`: (Direct3D 12 only) if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2761 * the texture usage is SDL_GPU_TEXTUREUSAGE_COLOR_TARGET, clear the texture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2762 * to a color with this red intensity. Defaults to zero.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2763 * - `SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_G_FLOAT`: (Direct3D 12 only) if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2764 * the texture usage is SDL_GPU_TEXTUREUSAGE_COLOR_TARGET, clear the texture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2765 * to a color with this green intensity. Defaults to zero.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2766 * - `SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_B_FLOAT`: (Direct3D 12 only) if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2767 * the texture usage is SDL_GPU_TEXTUREUSAGE_COLOR_TARGET, clear the texture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2768 * to a color with this blue intensity. Defaults to zero.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2769 * - `SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_A_FLOAT`: (Direct3D 12 only) if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2770 * the texture usage is SDL_GPU_TEXTUREUSAGE_COLOR_TARGET, clear the texture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2771 * to a color with this alpha intensity. Defaults to zero.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2772 * - `SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_DEPTH_FLOAT`: (Direct3D 12 only)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2773 * if the texture usage is SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET, clear
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2774 * the texture to a depth of this value. Defaults to zero.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2775 * - `SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_STENCIL_NUMBER`: (Direct3D 12
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2776 * only) if the texture usage is SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2777 * clear the texture to a stencil of this Uint8 value. Defaults to zero.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2778 * - `SDL_PROP_GPU_TEXTURE_CREATE_NAME_STRING`: a name that can be displayed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2779 * in debugging tools.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2780 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2781 * \param device a GPU Context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2782 * \param createinfo a struct describing the state of the texture to create.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2783 * \returns a texture object on success, or NULL on failure; call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2784 * SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2785 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2786 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2787 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2788 * \sa SDL_UploadToGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2789 * \sa SDL_DownloadFromGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2790 * \sa SDL_BeginGPURenderPass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2791 * \sa SDL_BeginGPUComputePass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2792 * \sa SDL_BindGPUVertexSamplers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2793 * \sa SDL_BindGPUVertexStorageTextures
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2794 * \sa SDL_BindGPUFragmentSamplers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2795 * \sa SDL_BindGPUFragmentStorageTextures
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2796 * \sa SDL_BindGPUComputeStorageTextures
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2797 * \sa SDL_BlitGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2798 * \sa SDL_ReleaseGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2799 * \sa SDL_GPUTextureSupportsFormat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2800 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2801 extern SDL_DECLSPEC SDL_GPUTexture * SDLCALL SDL_CreateGPUTexture(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2802 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2803 const SDL_GPUTextureCreateInfo *createinfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2804
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2805 #define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_R_FLOAT "SDL.gpu.texture.create.d3d12.clear.r"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2806 #define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_G_FLOAT "SDL.gpu.texture.create.d3d12.clear.g"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2807 #define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_B_FLOAT "SDL.gpu.texture.create.d3d12.clear.b"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2808 #define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_A_FLOAT "SDL.gpu.texture.create.d3d12.clear.a"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2809 #define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_DEPTH_FLOAT "SDL.gpu.texture.create.d3d12.clear.depth"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2810 #define SDL_PROP_GPU_TEXTURE_CREATE_D3D12_CLEAR_STENCIL_NUMBER "SDL.gpu.texture.create.d3d12.clear.stencil"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2811 #define SDL_PROP_GPU_TEXTURE_CREATE_NAME_STRING "SDL.gpu.texture.create.name"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2812
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2813 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2814 * Creates a buffer object to be used in graphics or compute workflows.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2815 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2816 * The contents of this buffer are undefined until data is written to the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2817 * buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2818 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2819 * Note that certain combinations of usage flags are invalid. For example, a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2820 * buffer cannot have both the VERTEX and INDEX flags.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2821 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2822 * If you use a STORAGE flag, the data in the buffer must respect std140
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2823 * layout conventions. In practical terms this means you must ensure that vec3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2824 * and vec4 fields are 16-byte aligned.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2825 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2826 * For better understanding of underlying concepts and memory management with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2827 * SDL GPU API, you may refer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2828 * [this blog post](https://moonside.games/posts/sdl-gpu-concepts-cycling/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2829 * .
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2830 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2831 * There are optional properties that can be provided through `props`. These
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2832 * are the supported properties:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2833 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2834 * - `SDL_PROP_GPU_BUFFER_CREATE_NAME_STRING`: a name that can be displayed in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2835 * debugging tools.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2836 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2837 * \param device a GPU Context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2838 * \param createinfo a struct describing the state of the buffer to create.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2839 * \returns a buffer object on success, or NULL on failure; call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2840 * SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2841 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2842 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2843 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2844 * \sa SDL_UploadToGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2845 * \sa SDL_DownloadFromGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2846 * \sa SDL_CopyGPUBufferToBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2847 * \sa SDL_BindGPUVertexBuffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2848 * \sa SDL_BindGPUIndexBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2849 * \sa SDL_BindGPUVertexStorageBuffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2850 * \sa SDL_BindGPUFragmentStorageBuffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2851 * \sa SDL_DrawGPUPrimitivesIndirect
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2852 * \sa SDL_DrawGPUIndexedPrimitivesIndirect
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2853 * \sa SDL_BindGPUComputeStorageBuffers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2854 * \sa SDL_DispatchGPUComputeIndirect
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2855 * \sa SDL_ReleaseGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2856 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2857 extern SDL_DECLSPEC SDL_GPUBuffer * SDLCALL SDL_CreateGPUBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2858 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2859 const SDL_GPUBufferCreateInfo *createinfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2860
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2861 #define SDL_PROP_GPU_BUFFER_CREATE_NAME_STRING "SDL.gpu.buffer.create.name"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2862
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2863 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2864 * Creates a transfer buffer to be used when uploading to or downloading from
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2865 * graphics resources.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2866 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2867 * Download buffers can be particularly expensive to create, so it is good
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2868 * practice to reuse them if data will be downloaded regularly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2869 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2870 * There are optional properties that can be provided through `props`. These
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2871 * are the supported properties:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2872 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2873 * - `SDL_PROP_GPU_TRANSFERBUFFER_CREATE_NAME_STRING`: a name that can be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2874 * displayed in debugging tools.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2875 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2876 * \param device a GPU Context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2877 * \param createinfo a struct describing the state of the transfer buffer to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2878 * create.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2879 * \returns a transfer buffer on success, or NULL on failure; call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2880 * SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2881 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2882 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2883 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2884 * \sa SDL_UploadToGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2885 * \sa SDL_DownloadFromGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2886 * \sa SDL_UploadToGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2887 * \sa SDL_DownloadFromGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2888 * \sa SDL_ReleaseGPUTransferBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2889 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2890 extern SDL_DECLSPEC SDL_GPUTransferBuffer * SDLCALL SDL_CreateGPUTransferBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2891 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2892 const SDL_GPUTransferBufferCreateInfo *createinfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2893
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2894 #define SDL_PROP_GPU_TRANSFERBUFFER_CREATE_NAME_STRING "SDL.gpu.transferbuffer.create.name"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2895
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2896 /* Debug Naming */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2897
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2898 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2899 * Sets an arbitrary string constant to label a buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2900 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2901 * You should use SDL_PROP_GPU_BUFFER_CREATE_NAME_STRING with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2902 * SDL_CreateGPUBuffer instead of this function to avoid thread safety issues.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2903 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2904 * \param device a GPU Context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2905 * \param buffer a buffer to attach the name to.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2906 * \param text a UTF-8 string constant to mark as the name of the buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2907 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2908 * \threadsafety This function is not thread safe, you must make sure the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2909 * buffer is not simultaneously used by any other thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2910 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2911 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2912 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2913 * \sa SDL_CreateGPUBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2914 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2915 extern SDL_DECLSPEC void SDLCALL SDL_SetGPUBufferName(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2916 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2917 SDL_GPUBuffer *buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2918 const char *text);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2919
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2920 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2921 * Sets an arbitrary string constant to label a texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2922 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2923 * You should use SDL_PROP_GPU_TEXTURE_CREATE_NAME_STRING with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2924 * SDL_CreateGPUTexture instead of this function to avoid thread safety
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2925 * issues.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2926 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2927 * \param device a GPU Context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2928 * \param texture a texture to attach the name to.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2929 * \param text a UTF-8 string constant to mark as the name of the texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2930 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2931 * \threadsafety This function is not thread safe, you must make sure the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2932 * texture is not simultaneously used by any other thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2933 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2934 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2935 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2936 * \sa SDL_CreateGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2937 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2938 extern SDL_DECLSPEC void SDLCALL SDL_SetGPUTextureName(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2939 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2940 SDL_GPUTexture *texture,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2941 const char *text);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2942
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2943 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2944 * Inserts an arbitrary string label into the command buffer callstream.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2945 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2946 * Useful for debugging.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2947 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2948 * On Direct3D 12, using SDL_InsertGPUDebugLabel requires
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2949 * WinPixEventRuntime.dll to be in your PATH or in the same directory as your
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2950 * executable. See
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2951 * [here](https://devblogs.microsoft.com/pix/winpixeventruntime/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2952 * for instructions on how to obtain it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2953 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2954 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2955 * \param text a UTF-8 string constant to insert as the label.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2956 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2957 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2958 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2959 extern SDL_DECLSPEC void SDLCALL SDL_InsertGPUDebugLabel(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2960 SDL_GPUCommandBuffer *command_buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2961 const char *text);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2962
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2963 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2964 * Begins a debug group with an arbitrary name.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2965 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2966 * Used for denoting groups of calls when viewing the command buffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2967 * callstream in a graphics debugging tool.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2968 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2969 * Each call to SDL_PushGPUDebugGroup must have a corresponding call to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2970 * SDL_PopGPUDebugGroup.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2971 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2972 * On Direct3D 12, using SDL_PushGPUDebugGroup requires WinPixEventRuntime.dll
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2973 * to be in your PATH or in the same directory as your executable. See
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2974 * [here](https://devblogs.microsoft.com/pix/winpixeventruntime/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2975 * for instructions on how to obtain it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2976 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2977 * On some backends (e.g. Metal), pushing a debug group during a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2978 * render/blit/compute pass will create a group that is scoped to the native
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2979 * pass rather than the command buffer. For best results, if you push a debug
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2980 * group during a pass, always pop it in the same pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2981 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2982 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2983 * \param name a UTF-8 string constant that names the group.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2984 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2985 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2986 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2987 * \sa SDL_PopGPUDebugGroup
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2988 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2989 extern SDL_DECLSPEC void SDLCALL SDL_PushGPUDebugGroup(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2990 SDL_GPUCommandBuffer *command_buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2991 const char *name);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2992
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2993 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2994 * Ends the most-recently pushed debug group.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2995 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2996 * On Direct3D 12, using SDL_PopGPUDebugGroup requires WinPixEventRuntime.dll
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2997 * to be in your PATH or in the same directory as your executable. See
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2998 * [here](https://devblogs.microsoft.com/pix/winpixeventruntime/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2999 * for instructions on how to obtain it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3000 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3001 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3002 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3003 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3004 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3005 * \sa SDL_PushGPUDebugGroup
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3006 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3007 extern SDL_DECLSPEC void SDLCALL SDL_PopGPUDebugGroup(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3008 SDL_GPUCommandBuffer *command_buffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3009
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3010 /* Disposal */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3011
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3012 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3013 * Frees the given texture as soon as it is safe to do so.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3014 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3015 * You must not reference the texture after calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3016 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3017 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3018 * \param texture a texture to be destroyed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3019 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3020 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3021 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3022 extern SDL_DECLSPEC void SDLCALL SDL_ReleaseGPUTexture(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3023 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3024 SDL_GPUTexture *texture);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3025
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3026 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3027 * Frees the given sampler as soon as it is safe to do so.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3028 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3029 * You must not reference the sampler after calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3030 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3031 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3032 * \param sampler a sampler to be destroyed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3033 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3034 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3035 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3036 extern SDL_DECLSPEC void SDLCALL SDL_ReleaseGPUSampler(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3037 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3038 SDL_GPUSampler *sampler);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3039
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3040 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3041 * Frees the given buffer as soon as it is safe to do so.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3042 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3043 * You must not reference the buffer after calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3044 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3045 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3046 * \param buffer a buffer to be destroyed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3047 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3048 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3049 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3050 extern SDL_DECLSPEC void SDLCALL SDL_ReleaseGPUBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3051 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3052 SDL_GPUBuffer *buffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3053
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3054 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3055 * Frees the given transfer buffer as soon as it is safe to do so.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3056 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3057 * You must not reference the transfer buffer after calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3058 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3059 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3060 * \param transfer_buffer a transfer buffer to be destroyed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3061 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3062 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3063 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3064 extern SDL_DECLSPEC void SDLCALL SDL_ReleaseGPUTransferBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3065 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3066 SDL_GPUTransferBuffer *transfer_buffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3067
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3068 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3069 * Frees the given compute pipeline as soon as it is safe to do so.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3070 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3071 * You must not reference the compute pipeline after calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3072 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3073 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3074 * \param compute_pipeline a compute pipeline to be destroyed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3075 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3076 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3077 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3078 extern SDL_DECLSPEC void SDLCALL SDL_ReleaseGPUComputePipeline(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3079 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3080 SDL_GPUComputePipeline *compute_pipeline);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3081
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3082 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3083 * Frees the given shader as soon as it is safe to do so.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3084 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3085 * You must not reference the shader after calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3086 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3087 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3088 * \param shader a shader to be destroyed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3089 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3090 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3091 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3092 extern SDL_DECLSPEC void SDLCALL SDL_ReleaseGPUShader(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3093 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3094 SDL_GPUShader *shader);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3095
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3096 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3097 * Frees the given graphics pipeline as soon as it is safe to do so.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3098 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3099 * You must not reference the graphics pipeline after calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3100 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3101 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3102 * \param graphics_pipeline a graphics pipeline to be destroyed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3103 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3104 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3105 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3106 extern SDL_DECLSPEC void SDLCALL SDL_ReleaseGPUGraphicsPipeline(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3107 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3108 SDL_GPUGraphicsPipeline *graphics_pipeline);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3109
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3110 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3111 * Acquire a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3112 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3113 * This command buffer is managed by the implementation and should not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3114 * freed by the user. The command buffer may only be used on the thread it was
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3115 * acquired on. The command buffer should be submitted on the thread it was
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3116 * acquired on.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3117 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3118 * It is valid to acquire multiple command buffers on the same thread at once.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3119 * In fact a common design pattern is to acquire two command buffers per frame
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3120 * where one is dedicated to render and compute passes and the other is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3121 * dedicated to copy passes and other preparatory work such as generating
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3122 * mipmaps. Interleaving commands between the two command buffers reduces the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3123 * total amount of passes overall which improves rendering performance.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3124 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3125 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3126 * \returns a command buffer, or NULL on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3127 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3128 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3129 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3130 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3131 * \sa SDL_SubmitGPUCommandBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3132 * \sa SDL_SubmitGPUCommandBufferAndAcquireFence
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3133 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3134 extern SDL_DECLSPEC SDL_GPUCommandBuffer * SDLCALL SDL_AcquireGPUCommandBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3135 SDL_GPUDevice *device);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3136
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3137 /* Uniform Data */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3138
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3139 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3140 * Pushes data to a vertex uniform slot on the command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3141 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3142 * Subsequent draw calls in this command buffer will use this uniform data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3143 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3144 * The data being pushed must respect std140 layout conventions. In practical
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3145 * terms this means you must ensure that vec3 and vec4 fields are 16-byte
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3146 * aligned.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3147 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3148 * For detailed information about accessing uniform data from a shader, please
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3149 * refer to SDL_CreateGPUShader.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3150 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3151 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3152 * \param slot_index the vertex uniform slot to push data to.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3153 * \param data client data to write.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3154 * \param length the length of the data to write.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3155 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3156 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3157 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3158 extern SDL_DECLSPEC void SDLCALL SDL_PushGPUVertexUniformData(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3159 SDL_GPUCommandBuffer *command_buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3160 Uint32 slot_index,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3161 const void *data,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3162 Uint32 length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3163
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3164 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3165 * Pushes data to a fragment uniform slot on the command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3166 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3167 * Subsequent draw calls in this command buffer will use this uniform data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3168 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3169 * The data being pushed must respect std140 layout conventions. In practical
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3170 * terms this means you must ensure that vec3 and vec4 fields are 16-byte
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3171 * aligned.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3172 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3173 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3174 * \param slot_index the fragment uniform slot to push data to.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3175 * \param data client data to write.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3176 * \param length the length of the data to write.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3177 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3178 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3179 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3180 extern SDL_DECLSPEC void SDLCALL SDL_PushGPUFragmentUniformData(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3181 SDL_GPUCommandBuffer *command_buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3182 Uint32 slot_index,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3183 const void *data,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3184 Uint32 length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3185
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3186 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3187 * Pushes data to a uniform slot on the command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3188 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3189 * Subsequent draw calls in this command buffer will use this uniform data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3190 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3191 * The data being pushed must respect std140 layout conventions. In practical
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3192 * terms this means you must ensure that vec3 and vec4 fields are 16-byte
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3193 * aligned.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3194 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3195 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3196 * \param slot_index the uniform slot to push data to.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3197 * \param data client data to write.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3198 * \param length the length of the data to write.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3199 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3200 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3201 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3202 extern SDL_DECLSPEC void SDLCALL SDL_PushGPUComputeUniformData(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3203 SDL_GPUCommandBuffer *command_buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3204 Uint32 slot_index,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3205 const void *data,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3206 Uint32 length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3207
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3208 /* Graphics State */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3209
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3210 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3211 * Begins a render pass on a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3212 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3213 * A render pass consists of a set of texture subresources (or depth slices in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3214 * the 3D texture case) which will be rendered to during the render pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3215 * along with corresponding clear values and load/store operations. All
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3216 * operations related to graphics pipelines must take place inside of a render
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3217 * pass. A default viewport and scissor state are automatically set when this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3218 * is called. You cannot begin another render pass, or begin a compute pass or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3219 * copy pass until you have ended the render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3220 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3221 * Using SDL_GPU_LOADOP_LOAD before any contents have been written to the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3222 * texture subresource will result in undefined behavior. SDL_GPU_LOADOP_CLEAR
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3223 * will set the contents of the texture subresource to a single value before
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3224 * any rendering is performed. It's fine to do an empty render pass using
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3225 * SDL_GPU_STOREOP_STORE to clear a texture, but in general it's better to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3226 * think of clearing not as an independent operation but as something that's
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3227 * done as the beginning of a render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3228 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3229 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3230 * \param color_target_infos an array of texture subresources with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3231 * corresponding clear values and load/store ops.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3232 * \param num_color_targets the number of color targets in the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3233 * color_target_infos array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3234 * \param depth_stencil_target_info a texture subresource with corresponding
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3235 * clear value and load/store ops, may be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3236 * NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3237 * \returns a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3238 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3239 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3240 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3241 * \sa SDL_EndGPURenderPass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3242 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3243 extern SDL_DECLSPEC SDL_GPURenderPass * SDLCALL SDL_BeginGPURenderPass(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3244 SDL_GPUCommandBuffer *command_buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3245 const SDL_GPUColorTargetInfo *color_target_infos,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3246 Uint32 num_color_targets,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3247 const SDL_GPUDepthStencilTargetInfo *depth_stencil_target_info);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3248
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3249 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3250 * Binds a graphics pipeline on a render pass to be used in rendering.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3251 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3252 * A graphics pipeline must be bound before making any draw calls.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3253 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3254 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3255 * \param graphics_pipeline the graphics pipeline to bind.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3256 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3257 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3258 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3259 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUGraphicsPipeline(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3260 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3261 SDL_GPUGraphicsPipeline *graphics_pipeline);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3262
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3263 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3264 * Sets the current viewport state on a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3265 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3266 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3267 * \param viewport the viewport to set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3268 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3269 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3270 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3271 extern SDL_DECLSPEC void SDLCALL SDL_SetGPUViewport(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3272 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3273 const SDL_GPUViewport *viewport);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3274
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3275 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3276 * Sets the current scissor state on a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3277 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3278 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3279 * \param scissor the scissor area to set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3280 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3281 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3282 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3283 extern SDL_DECLSPEC void SDLCALL SDL_SetGPUScissor(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3284 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3285 const SDL_Rect *scissor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3286
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3287 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3288 * Sets the current blend constants on a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3289 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3290 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3291 * \param blend_constants the blend constant color.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3292 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3293 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3294 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3295 * \sa SDL_GPU_BLENDFACTOR_CONSTANT_COLOR
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3296 * \sa SDL_GPU_BLENDFACTOR_ONE_MINUS_CONSTANT_COLOR
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3297 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3298 extern SDL_DECLSPEC void SDLCALL SDL_SetGPUBlendConstants(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3299 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3300 SDL_FColor blend_constants);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3301
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3302 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3303 * Sets the current stencil reference value on a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3304 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3305 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3306 * \param reference the stencil reference value to set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3307 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3308 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3309 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3310 extern SDL_DECLSPEC void SDLCALL SDL_SetGPUStencilReference(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3311 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3312 Uint8 reference);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3313
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3314 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3315 * Binds vertex buffers on a command buffer for use with subsequent draw
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3316 * calls.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3317 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3318 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3319 * \param first_slot the vertex buffer slot to begin binding from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3320 * \param bindings an array of SDL_GPUBufferBinding structs containing vertex
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3321 * buffers and offset values.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3322 * \param num_bindings the number of bindings in the bindings array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3323 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3324 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3325 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3326 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUVertexBuffers(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3327 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3328 Uint32 first_slot,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3329 const SDL_GPUBufferBinding *bindings,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3330 Uint32 num_bindings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3331
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3332 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3333 * Binds an index buffer on a command buffer for use with subsequent draw
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3334 * calls.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3335 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3336 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3337 * \param binding a pointer to a struct containing an index buffer and offset.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3338 * \param index_element_size whether the index values in the buffer are 16- or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3339 * 32-bit.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3340 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3341 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3342 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3343 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUIndexBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3344 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3345 const SDL_GPUBufferBinding *binding,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3346 SDL_GPUIndexElementSize index_element_size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3347
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3348 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3349 * Binds texture-sampler pairs for use on the vertex shader.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3350 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3351 * The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3352 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3353 * Be sure your shader is set up according to the requirements documented in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3354 * SDL_CreateGPUShader().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3355 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3356 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3357 * \param first_slot the vertex sampler slot to begin binding from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3358 * \param texture_sampler_bindings an array of texture-sampler binding
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3359 * structs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3360 * \param num_bindings the number of texture-sampler pairs to bind from the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3361 * array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3362 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3363 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3364 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3365 * \sa SDL_CreateGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3366 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3367 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUVertexSamplers(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3368 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3369 Uint32 first_slot,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3370 const SDL_GPUTextureSamplerBinding *texture_sampler_bindings,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3371 Uint32 num_bindings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3372
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3373 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3374 * Binds storage textures for use on the vertex shader.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3375 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3376 * These textures must have been created with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3377 * SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3378 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3379 * Be sure your shader is set up according to the requirements documented in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3380 * SDL_CreateGPUShader().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3381 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3382 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3383 * \param first_slot the vertex storage texture slot to begin binding from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3384 * \param storage_textures an array of storage textures.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3385 * \param num_bindings the number of storage texture to bind from the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3386 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3387 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3388 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3389 * \sa SDL_CreateGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3390 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3391 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUVertexStorageTextures(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3392 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3393 Uint32 first_slot,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3394 SDL_GPUTexture *const *storage_textures,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3395 Uint32 num_bindings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3396
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3397 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3398 * Binds storage buffers for use on the vertex shader.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3399 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3400 * These buffers must have been created with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3401 * SDL_GPU_BUFFERUSAGE_GRAPHICS_STORAGE_READ.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3402 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3403 * Be sure your shader is set up according to the requirements documented in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3404 * SDL_CreateGPUShader().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3405 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3406 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3407 * \param first_slot the vertex storage buffer slot to begin binding from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3408 * \param storage_buffers an array of buffers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3409 * \param num_bindings the number of buffers to bind from the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3410 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3411 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3412 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3413 * \sa SDL_CreateGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3414 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3415 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUVertexStorageBuffers(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3416 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3417 Uint32 first_slot,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3418 SDL_GPUBuffer *const *storage_buffers,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3419 Uint32 num_bindings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3420
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3421 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3422 * Binds texture-sampler pairs for use on the fragment shader.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3423 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3424 * The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3425 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3426 * Be sure your shader is set up according to the requirements documented in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3427 * SDL_CreateGPUShader().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3428 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3429 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3430 * \param first_slot the fragment sampler slot to begin binding from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3431 * \param texture_sampler_bindings an array of texture-sampler binding
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3432 * structs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3433 * \param num_bindings the number of texture-sampler pairs to bind from the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3434 * array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3435 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3436 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3437 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3438 * \sa SDL_CreateGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3439 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3440 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUFragmentSamplers(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3441 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3442 Uint32 first_slot,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3443 const SDL_GPUTextureSamplerBinding *texture_sampler_bindings,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3444 Uint32 num_bindings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3445
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3446 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3447 * Binds storage textures for use on the fragment shader.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3448 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3449 * These textures must have been created with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3450 * SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3451 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3452 * Be sure your shader is set up according to the requirements documented in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3453 * SDL_CreateGPUShader().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3454 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3455 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3456 * \param first_slot the fragment storage texture slot to begin binding from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3457 * \param storage_textures an array of storage textures.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3458 * \param num_bindings the number of storage textures to bind from the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3459 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3460 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3461 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3462 * \sa SDL_CreateGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3463 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3464 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUFragmentStorageTextures(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3465 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3466 Uint32 first_slot,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3467 SDL_GPUTexture *const *storage_textures,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3468 Uint32 num_bindings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3469
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3470 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3471 * Binds storage buffers for use on the fragment shader.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3472 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3473 * These buffers must have been created with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3474 * SDL_GPU_BUFFERUSAGE_GRAPHICS_STORAGE_READ.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3475 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3476 * Be sure your shader is set up according to the requirements documented in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3477 * SDL_CreateGPUShader().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3478 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3479 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3480 * \param first_slot the fragment storage buffer slot to begin binding from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3481 * \param storage_buffers an array of storage buffers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3482 * \param num_bindings the number of storage buffers to bind from the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3483 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3484 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3485 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3486 * \sa SDL_CreateGPUShader
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3487 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3488 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUFragmentStorageBuffers(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3489 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3490 Uint32 first_slot,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3491 SDL_GPUBuffer *const *storage_buffers,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3492 Uint32 num_bindings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3493
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3494 /* Drawing */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3495
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3496 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3497 * Draws data using bound graphics state with an index buffer and instancing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3498 * enabled.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3499 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3500 * You must not call this function before binding a graphics pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3501 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3502 * Note that the `first_vertex` and `first_instance` parameters are NOT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3503 * compatible with built-in vertex/instance ID variables in shaders (for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3504 * example, SV_VertexID); GPU APIs and shader languages do not define these
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3505 * built-in variables consistently, so if your shader depends on them, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3506 * only way to keep behavior consistent and portable is to always pass 0 for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3507 * the correlating parameter in the draw calls.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3508 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3509 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3510 * \param num_indices the number of indices to draw per instance.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3511 * \param num_instances the number of instances to draw.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3512 * \param first_index the starting index within the index buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3513 * \param vertex_offset value added to vertex index before indexing into the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3514 * vertex buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3515 * \param first_instance the ID of the first instance to draw.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3516 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3517 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3518 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3519 extern SDL_DECLSPEC void SDLCALL SDL_DrawGPUIndexedPrimitives(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3520 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3521 Uint32 num_indices,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3522 Uint32 num_instances,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3523 Uint32 first_index,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3524 Sint32 vertex_offset,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3525 Uint32 first_instance);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3526
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3527 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3528 * Draws data using bound graphics state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3529 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3530 * You must not call this function before binding a graphics pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3531 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3532 * Note that the `first_vertex` and `first_instance` parameters are NOT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3533 * compatible with built-in vertex/instance ID variables in shaders (for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3534 * example, SV_VertexID); GPU APIs and shader languages do not define these
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3535 * built-in variables consistently, so if your shader depends on them, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3536 * only way to keep behavior consistent and portable is to always pass 0 for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3537 * the correlating parameter in the draw calls.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3538 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3539 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3540 * \param num_vertices the number of vertices to draw.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3541 * \param num_instances the number of instances that will be drawn.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3542 * \param first_vertex the index of the first vertex to draw.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3543 * \param first_instance the ID of the first instance to draw.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3544 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3545 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3546 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3547 extern SDL_DECLSPEC void SDLCALL SDL_DrawGPUPrimitives(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3548 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3549 Uint32 num_vertices,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3550 Uint32 num_instances,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3551 Uint32 first_vertex,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3552 Uint32 first_instance);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3553
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3554 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3555 * Draws data using bound graphics state and with draw parameters set from a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3556 * buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3557 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3558 * The buffer must consist of tightly-packed draw parameter sets that each
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3559 * match the layout of SDL_GPUIndirectDrawCommand. You must not call this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3560 * function before binding a graphics pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3561 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3562 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3563 * \param buffer a buffer containing draw parameters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3564 * \param offset the offset to start reading from the draw buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3565 * \param draw_count the number of draw parameter sets that should be read
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3566 * from the draw buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3567 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3568 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3569 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3570 extern SDL_DECLSPEC void SDLCALL SDL_DrawGPUPrimitivesIndirect(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3571 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3572 SDL_GPUBuffer *buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3573 Uint32 offset,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3574 Uint32 draw_count);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3575
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3576 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3577 * Draws data using bound graphics state with an index buffer enabled and with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3578 * draw parameters set from a buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3579 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3580 * The buffer must consist of tightly-packed draw parameter sets that each
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3581 * match the layout of SDL_GPUIndexedIndirectDrawCommand. You must not call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3582 * this function before binding a graphics pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3583 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3584 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3585 * \param buffer a buffer containing draw parameters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3586 * \param offset the offset to start reading from the draw buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3587 * \param draw_count the number of draw parameter sets that should be read
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3588 * from the draw buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3589 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3590 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3591 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3592 extern SDL_DECLSPEC void SDLCALL SDL_DrawGPUIndexedPrimitivesIndirect(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3593 SDL_GPURenderPass *render_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3594 SDL_GPUBuffer *buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3595 Uint32 offset,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3596 Uint32 draw_count);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3597
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3598 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3599 * Ends the given render pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3600 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3601 * All bound graphics state on the render pass command buffer is unset. The
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3602 * render pass handle is now invalid.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3603 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3604 * \param render_pass a render pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3605 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3606 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3607 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3608 extern SDL_DECLSPEC void SDLCALL SDL_EndGPURenderPass(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3609 SDL_GPURenderPass *render_pass);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3610
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3611 /* Compute Pass */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3612
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3613 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3614 * Begins a compute pass on a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3615 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3616 * A compute pass is defined by a set of texture subresources and buffers that
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3617 * may be written to by compute pipelines. These textures and buffers must
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3618 * have been created with the COMPUTE_STORAGE_WRITE bit or the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3619 * COMPUTE_STORAGE_SIMULTANEOUS_READ_WRITE bit. If you do not create a texture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3620 * with COMPUTE_STORAGE_SIMULTANEOUS_READ_WRITE, you must not read from the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3621 * texture in the compute pass. All operations related to compute pipelines
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3622 * must take place inside of a compute pass. You must not begin another
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3623 * compute pass, or a render pass or copy pass before ending the compute pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3624 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3625 * A VERY IMPORTANT NOTE - Reads and writes in compute passes are NOT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3626 * implicitly synchronized. This means you may cause data races by both
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3627 * reading and writing a resource region in a compute pass, or by writing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3628 * multiple times to a resource region. If your compute work depends on
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3629 * reading the completed output from a previous dispatch, you MUST end the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3630 * current compute pass and begin a new one before you can safely access the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3631 * data. Otherwise you will receive unexpected results. Reading and writing a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3632 * texture in the same compute pass is only supported by specific texture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3633 * formats. Make sure you check the format support!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3634 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3635 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3636 * \param storage_texture_bindings an array of writeable storage texture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3637 * binding structs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3638 * \param num_storage_texture_bindings the number of storage textures to bind
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3639 * from the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3640 * \param storage_buffer_bindings an array of writeable storage buffer binding
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3641 * structs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3642 * \param num_storage_buffer_bindings the number of storage buffers to bind
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3643 * from the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3644 * \returns a compute pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3645 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3646 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3647 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3648 * \sa SDL_EndGPUComputePass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3649 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3650 extern SDL_DECLSPEC SDL_GPUComputePass * SDLCALL SDL_BeginGPUComputePass(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3651 SDL_GPUCommandBuffer *command_buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3652 const SDL_GPUStorageTextureReadWriteBinding *storage_texture_bindings,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3653 Uint32 num_storage_texture_bindings,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3654 const SDL_GPUStorageBufferReadWriteBinding *storage_buffer_bindings,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3655 Uint32 num_storage_buffer_bindings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3656
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3657 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3658 * Binds a compute pipeline on a command buffer for use in compute dispatch.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3659 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3660 * \param compute_pass a compute pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3661 * \param compute_pipeline a compute pipeline to bind.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3662 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3663 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3664 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3665 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputePipeline(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3666 SDL_GPUComputePass *compute_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3667 SDL_GPUComputePipeline *compute_pipeline);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3668
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3669 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3670 * Binds texture-sampler pairs for use on the compute shader.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3671 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3672 * The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3673 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3674 * Be sure your shader is set up according to the requirements documented in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3675 * SDL_CreateGPUComputePipeline().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3676 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3677 * \param compute_pass a compute pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3678 * \param first_slot the compute sampler slot to begin binding from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3679 * \param texture_sampler_bindings an array of texture-sampler binding
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3680 * structs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3681 * \param num_bindings the number of texture-sampler bindings to bind from the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3682 * array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3683 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3684 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3685 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3686 * \sa SDL_CreateGPUComputePipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3687 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3688 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeSamplers(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3689 SDL_GPUComputePass *compute_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3690 Uint32 first_slot,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3691 const SDL_GPUTextureSamplerBinding *texture_sampler_bindings,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3692 Uint32 num_bindings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3693
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3694 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3695 * Binds storage textures as readonly for use on the compute pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3696 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3697 * These textures must have been created with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3698 * SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3699 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3700 * Be sure your shader is set up according to the requirements documented in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3701 * SDL_CreateGPUComputePipeline().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3702 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3703 * \param compute_pass a compute pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3704 * \param first_slot the compute storage texture slot to begin binding from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3705 * \param storage_textures an array of storage textures.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3706 * \param num_bindings the number of storage textures to bind from the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3707 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3708 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3709 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3710 * \sa SDL_CreateGPUComputePipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3711 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3712 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeStorageTextures(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3713 SDL_GPUComputePass *compute_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3714 Uint32 first_slot,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3715 SDL_GPUTexture *const *storage_textures,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3716 Uint32 num_bindings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3717
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3718 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3719 * Binds storage buffers as readonly for use on the compute pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3720 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3721 * These buffers must have been created with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3722 * SDL_GPU_BUFFERUSAGE_COMPUTE_STORAGE_READ.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3723 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3724 * Be sure your shader is set up according to the requirements documented in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3725 * SDL_CreateGPUComputePipeline().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3726 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3727 * \param compute_pass a compute pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3728 * \param first_slot the compute storage buffer slot to begin binding from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3729 * \param storage_buffers an array of storage buffer binding structs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3730 * \param num_bindings the number of storage buffers to bind from the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3731 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3732 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3733 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3734 * \sa SDL_CreateGPUComputePipeline
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3735 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3736 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeStorageBuffers(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3737 SDL_GPUComputePass *compute_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3738 Uint32 first_slot,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3739 SDL_GPUBuffer *const *storage_buffers,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3740 Uint32 num_bindings);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3741
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3742 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3743 * Dispatches compute work.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3744 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3745 * You must not call this function before binding a compute pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3746 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3747 * A VERY IMPORTANT NOTE If you dispatch multiple times in a compute pass, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3748 * the dispatches write to the same resource region as each other, there is no
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3749 * guarantee of which order the writes will occur. If the write order matters,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3750 * you MUST end the compute pass and begin another one.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3751 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3752 * \param compute_pass a compute pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3753 * \param groupcount_x number of local workgroups to dispatch in the X
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3754 * dimension.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3755 * \param groupcount_y number of local workgroups to dispatch in the Y
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3756 * dimension.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3757 * \param groupcount_z number of local workgroups to dispatch in the Z
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3758 * dimension.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3759 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3760 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3761 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3762 extern SDL_DECLSPEC void SDLCALL SDL_DispatchGPUCompute(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3763 SDL_GPUComputePass *compute_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3764 Uint32 groupcount_x,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3765 Uint32 groupcount_y,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3766 Uint32 groupcount_z);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3767
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3768 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3769 * Dispatches compute work with parameters set from a buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3770 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3771 * The buffer layout should match the layout of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3772 * SDL_GPUIndirectDispatchCommand. You must not call this function before
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3773 * binding a compute pipeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3774 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3775 * A VERY IMPORTANT NOTE If you dispatch multiple times in a compute pass, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3776 * the dispatches write to the same resource region as each other, there is no
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3777 * guarantee of which order the writes will occur. If the write order matters,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3778 * you MUST end the compute pass and begin another one.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3779 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3780 * \param compute_pass a compute pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3781 * \param buffer a buffer containing dispatch parameters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3782 * \param offset the offset to start reading from the dispatch buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3783 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3784 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3785 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3786 extern SDL_DECLSPEC void SDLCALL SDL_DispatchGPUComputeIndirect(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3787 SDL_GPUComputePass *compute_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3788 SDL_GPUBuffer *buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3789 Uint32 offset);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3790
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3791 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3792 * Ends the current compute pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3793 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3794 * All bound compute state on the command buffer is unset. The compute pass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3795 * handle is now invalid.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3796 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3797 * \param compute_pass a compute pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3798 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3799 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3800 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3801 extern SDL_DECLSPEC void SDLCALL SDL_EndGPUComputePass(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3802 SDL_GPUComputePass *compute_pass);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3803
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3804 /* TransferBuffer Data */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3805
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3806 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3807 * Maps a transfer buffer into application address space.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3808 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3809 * You must unmap the transfer buffer before encoding upload commands. The
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3810 * memory is owned by the graphics driver - do NOT call SDL_free() on the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3811 * returned pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3812 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3813 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3814 * \param transfer_buffer a transfer buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3815 * \param cycle if true, cycles the transfer buffer if it is already bound.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3816 * \returns the address of the mapped transfer buffer memory, or NULL on
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3817 * failure; call SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3818 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3819 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3820 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3821 extern SDL_DECLSPEC void * SDLCALL SDL_MapGPUTransferBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3822 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3823 SDL_GPUTransferBuffer *transfer_buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3824 bool cycle);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3825
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3826 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3827 * Unmaps a previously mapped transfer buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3828 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3829 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3830 * \param transfer_buffer a previously mapped transfer buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3831 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3832 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3833 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3834 extern SDL_DECLSPEC void SDLCALL SDL_UnmapGPUTransferBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3835 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3836 SDL_GPUTransferBuffer *transfer_buffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3837
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3838 /* Copy Pass */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3839
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3840 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3841 * Begins a copy pass on a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3842 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3843 * All operations related to copying to or from buffers or textures take place
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3844 * inside a copy pass. You must not begin another copy pass, or a render pass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3845 * or compute pass before ending the copy pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3846 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3847 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3848 * \returns a copy pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3849 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3850 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3851 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3852 * \sa SDL_EndGPUCopyPass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3853 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3854 extern SDL_DECLSPEC SDL_GPUCopyPass * SDLCALL SDL_BeginGPUCopyPass(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3855 SDL_GPUCommandBuffer *command_buffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3856
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3857 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3858 * Uploads data from a transfer buffer to a texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3859 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3860 * The upload occurs on the GPU timeline. You may assume that the upload has
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3861 * finished in subsequent commands.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3862 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3863 * You must align the data in the transfer buffer to a multiple of the texel
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3864 * size of the texture format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3865 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3866 * \param copy_pass a copy pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3867 * \param source the source transfer buffer with image layout information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3868 * \param destination the destination texture region.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3869 * \param cycle if true, cycles the texture if the texture is bound, otherwise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3870 * overwrites the data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3871 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3872 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3873 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3874 extern SDL_DECLSPEC void SDLCALL SDL_UploadToGPUTexture(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3875 SDL_GPUCopyPass *copy_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3876 const SDL_GPUTextureTransferInfo *source,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3877 const SDL_GPUTextureRegion *destination,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3878 bool cycle);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3879
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3880 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3881 * Uploads data from a transfer buffer to a buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3882 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3883 * The upload occurs on the GPU timeline. You may assume that the upload has
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3884 * finished in subsequent commands.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3885 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3886 * \param copy_pass a copy pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3887 * \param source the source transfer buffer with offset.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3888 * \param destination the destination buffer with offset and size.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3889 * \param cycle if true, cycles the buffer if it is already bound, otherwise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3890 * overwrites the data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3891 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3892 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3893 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3894 extern SDL_DECLSPEC void SDLCALL SDL_UploadToGPUBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3895 SDL_GPUCopyPass *copy_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3896 const SDL_GPUTransferBufferLocation *source,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3897 const SDL_GPUBufferRegion *destination,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3898 bool cycle);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3899
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3900 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3901 * Performs a texture-to-texture copy.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3902 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3903 * This copy occurs on the GPU timeline. You may assume the copy has finished
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3904 * in subsequent commands.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3905 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3906 * This function does not support copying between depth and color textures.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3907 * For those, copy the texture to a buffer and then to the destination
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3908 * texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3909 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3910 * \param copy_pass a copy pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3911 * \param source a source texture region.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3912 * \param destination a destination texture region.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3913 * \param w the width of the region to copy.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3914 * \param h the height of the region to copy.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3915 * \param d the depth of the region to copy.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3916 * \param cycle if true, cycles the destination texture if the destination
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3917 * texture is bound, otherwise overwrites the data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3918 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3919 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3920 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3921 extern SDL_DECLSPEC void SDLCALL SDL_CopyGPUTextureToTexture(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3922 SDL_GPUCopyPass *copy_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3923 const SDL_GPUTextureLocation *source,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3924 const SDL_GPUTextureLocation *destination,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3925 Uint32 w,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3926 Uint32 h,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3927 Uint32 d,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3928 bool cycle);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3929
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3930 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3931 * Performs a buffer-to-buffer copy.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3932 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3933 * This copy occurs on the GPU timeline. You may assume the copy has finished
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3934 * in subsequent commands.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3935 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3936 * \param copy_pass a copy pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3937 * \param source the buffer and offset to copy from.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3938 * \param destination the buffer and offset to copy to.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3939 * \param size the length of the buffer to copy.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3940 * \param cycle if true, cycles the destination buffer if it is already bound,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3941 * otherwise overwrites the data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3942 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3943 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3944 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3945 extern SDL_DECLSPEC void SDLCALL SDL_CopyGPUBufferToBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3946 SDL_GPUCopyPass *copy_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3947 const SDL_GPUBufferLocation *source,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3948 const SDL_GPUBufferLocation *destination,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3949 Uint32 size,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3950 bool cycle);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3951
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3952 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3953 * Copies data from a texture to a transfer buffer on the GPU timeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3954 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3955 * This data is not guaranteed to be copied until the command buffer fence is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3956 * signaled.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3957 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3958 * \param copy_pass a copy pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3959 * \param source the source texture region.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3960 * \param destination the destination transfer buffer with image layout
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3961 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3962 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3963 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3964 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3965 extern SDL_DECLSPEC void SDLCALL SDL_DownloadFromGPUTexture(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3966 SDL_GPUCopyPass *copy_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3967 const SDL_GPUTextureRegion *source,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3968 const SDL_GPUTextureTransferInfo *destination);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3969
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3970 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3971 * Copies data from a buffer to a transfer buffer on the GPU timeline.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3972 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3973 * This data is not guaranteed to be copied until the command buffer fence is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3974 * signaled.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3975 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3976 * \param copy_pass a copy pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3977 * \param source the source buffer with offset and size.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3978 * \param destination the destination transfer buffer with offset.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3979 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3980 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3981 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3982 extern SDL_DECLSPEC void SDLCALL SDL_DownloadFromGPUBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3983 SDL_GPUCopyPass *copy_pass,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3984 const SDL_GPUBufferRegion *source,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3985 const SDL_GPUTransferBufferLocation *destination);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3986
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3987 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3988 * Ends the current copy pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3989 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3990 * \param copy_pass a copy pass handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3991 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3992 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3993 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3994 extern SDL_DECLSPEC void SDLCALL SDL_EndGPUCopyPass(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3995 SDL_GPUCopyPass *copy_pass);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3996
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3997 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3998 * Generates mipmaps for the given texture.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3999 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4000 * This function must not be called inside of any pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4001 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4002 * \param command_buffer a command_buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4003 * \param texture a texture with more than 1 mip level.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4004 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4005 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4006 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4007 extern SDL_DECLSPEC void SDLCALL SDL_GenerateMipmapsForGPUTexture(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4008 SDL_GPUCommandBuffer *command_buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4009 SDL_GPUTexture *texture);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4010
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4011 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4012 * Blits from a source texture region to a destination texture region.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4013 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4014 * This function must not be called inside of any pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4015 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4016 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4017 * \param info the blit info struct containing the blit parameters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4018 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4019 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4020 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4021 extern SDL_DECLSPEC void SDLCALL SDL_BlitGPUTexture(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4022 SDL_GPUCommandBuffer *command_buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4023 const SDL_GPUBlitInfo *info);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4024
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4025 /* Submission/Presentation */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4026
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4027 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4028 * Determines whether a swapchain composition is supported by the window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4029 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4030 * The window must be claimed before calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4031 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4032 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4033 * \param window an SDL_Window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4034 * \param swapchain_composition the swapchain composition to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4035 * \returns true if supported, false if unsupported.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4036 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4037 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4038 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4039 * \sa SDL_ClaimWindowForGPUDevice
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4040 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4041 extern SDL_DECLSPEC bool SDLCALL SDL_WindowSupportsGPUSwapchainComposition(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4042 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4043 SDL_Window *window,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4044 SDL_GPUSwapchainComposition swapchain_composition);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4045
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4046 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4047 * Determines whether a presentation mode is supported by the window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4048 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4049 * The window must be claimed before calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4050 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4051 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4052 * \param window an SDL_Window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4053 * \param present_mode the presentation mode to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4054 * \returns true if supported, false if unsupported.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4055 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4056 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4057 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4058 * \sa SDL_ClaimWindowForGPUDevice
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4059 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4060 extern SDL_DECLSPEC bool SDLCALL SDL_WindowSupportsGPUPresentMode(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4061 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4062 SDL_Window *window,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4063 SDL_GPUPresentMode present_mode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4064
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4065 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4066 * Claims a window, creating a swapchain structure for it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4067 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4068 * This must be called before SDL_AcquireGPUSwapchainTexture is called using
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4069 * the window. You should only call this function from the thread that created
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4070 * the window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4071 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4072 * The swapchain will be created with SDL_GPU_SWAPCHAINCOMPOSITION_SDR and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4073 * SDL_GPU_PRESENTMODE_VSYNC. If you want to have different swapchain
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4074 * parameters, you must call SDL_SetGPUSwapchainParameters after claiming the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4075 * window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4076 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4077 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4078 * \param window an SDL_Window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4079 * \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
4080 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4081 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4082 * \threadsafety This function should only be called from the thread that
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4083 * created the window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4084 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4085 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4086 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4087 * \sa SDL_WaitAndAcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4088 * \sa SDL_ReleaseWindowFromGPUDevice
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4089 * \sa SDL_WindowSupportsGPUPresentMode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4090 * \sa SDL_WindowSupportsGPUSwapchainComposition
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4091 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4092 extern SDL_DECLSPEC bool SDLCALL SDL_ClaimWindowForGPUDevice(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4093 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4094 SDL_Window *window);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4095
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4096 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4097 * Unclaims a window, destroying its swapchain structure.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4098 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4099 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4100 * \param window an SDL_Window that has been claimed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4101 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4102 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4103 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4104 * \sa SDL_ClaimWindowForGPUDevice
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4105 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4106 extern SDL_DECLSPEC void SDLCALL SDL_ReleaseWindowFromGPUDevice(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4107 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4108 SDL_Window *window);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4109
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4110 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4111 * Changes the swapchain parameters for the given claimed window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4112 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4113 * This function will fail if the requested present mode or swapchain
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4114 * composition are unsupported by the device. Check if the parameters are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4115 * supported via SDL_WindowSupportsGPUPresentMode /
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4116 * SDL_WindowSupportsGPUSwapchainComposition prior to calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4117 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4118 * SDL_GPU_PRESENTMODE_VSYNC with SDL_GPU_SWAPCHAINCOMPOSITION_SDR is always
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4119 * supported.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4120 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4121 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4122 * \param window an SDL_Window that has been claimed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4123 * \param swapchain_composition the desired composition of the swapchain.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4124 * \param present_mode the desired present mode for the swapchain.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4125 * \returns true if successful, false on error; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4126 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4127 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4128 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4129 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4130 * \sa SDL_WindowSupportsGPUPresentMode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4131 * \sa SDL_WindowSupportsGPUSwapchainComposition
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4132 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4133 extern SDL_DECLSPEC bool SDLCALL SDL_SetGPUSwapchainParameters(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4134 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4135 SDL_Window *window,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4136 SDL_GPUSwapchainComposition swapchain_composition,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4137 SDL_GPUPresentMode present_mode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4138
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4139 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4140 * Configures the maximum allowed number of frames in flight.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4141 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4142 * The default value when the device is created is 2. This means that after
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4143 * you have submitted 2 frames for presentation, if the GPU has not finished
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4144 * working on the first frame, SDL_AcquireGPUSwapchainTexture() will fill the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4145 * swapchain texture pointer with NULL, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4146 * SDL_WaitAndAcquireGPUSwapchainTexture() will block.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4147 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4148 * Higher values increase throughput at the expense of visual latency. Lower
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4149 * values decrease visual latency at the expense of throughput.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4150 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4151 * Note that calling this function will stall and flush the command queue to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4152 * prevent synchronization issues.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4153 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4154 * The minimum value of allowed frames in flight is 1, and the maximum is 3.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4155 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4156 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4157 * \param allowed_frames_in_flight the maximum number of frames that can be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4158 * pending on the GPU.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4159 * \returns true if successful, false on error; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4160 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4161 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4162 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4163 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4164 extern SDL_DECLSPEC bool SDLCALL SDL_SetGPUAllowedFramesInFlight(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4165 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4166 Uint32 allowed_frames_in_flight);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4167
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4168 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4169 * Obtains the texture format of the swapchain for the given window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4170 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4171 * Note that this format can change if the swapchain parameters change.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4172 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4173 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4174 * \param window an SDL_Window that has been claimed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4175 * \returns the texture format of the swapchain.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4176 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4177 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4178 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4179 extern SDL_DECLSPEC SDL_GPUTextureFormat SDLCALL SDL_GetGPUSwapchainTextureFormat(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4180 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4181 SDL_Window *window);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4182
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4183 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4184 * Acquire a texture to use in presentation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4185 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4186 * When a swapchain texture is acquired on a command buffer, it will
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4187 * automatically be submitted for presentation when the command buffer is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4188 * submitted. The swapchain texture should only be referenced by the command
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4189 * buffer used to acquire it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4190 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4191 * This function will fill the swapchain texture handle with NULL if too many
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4192 * frames are in flight. This is not an error. This NULL pointer should not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4193 * passed back into SDL. Instead, it should be considered as an indication to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4194 * wait until the swapchain is available.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4195 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4196 * If you use this function, it is possible to create a situation where many
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4197 * command buffers are allocated while the rendering context waits for the GPU
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4198 * to catch up, which will cause memory usage to grow. You should use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4199 * SDL_WaitAndAcquireGPUSwapchainTexture() unless you know what you are doing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4200 * with timing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4201 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4202 * The swapchain texture is managed by the implementation and must not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4203 * freed by the user. You MUST NOT call this function from any thread other
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4204 * than the one that created the window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4205 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4206 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4207 * \param window a window that has been claimed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4208 * \param swapchain_texture a pointer filled in with a swapchain texture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4209 * handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4210 * \param swapchain_texture_width a pointer filled in with the swapchain
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4211 * texture width, may be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4212 * \param swapchain_texture_height a pointer filled in with the swapchain
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4213 * texture height, may be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4214 * \returns true on success, false on error; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4215 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4216 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4217 * \threadsafety This function should only be called from the thread that
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4218 * created the window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4219 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4220 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4221 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4222 * \sa SDL_ClaimWindowForGPUDevice
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4223 * \sa SDL_SubmitGPUCommandBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4224 * \sa SDL_SubmitGPUCommandBufferAndAcquireFence
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4225 * \sa SDL_CancelGPUCommandBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4226 * \sa SDL_GetWindowSizeInPixels
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4227 * \sa SDL_WaitForGPUSwapchain
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4228 * \sa SDL_WaitAndAcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4229 * \sa SDL_SetGPUAllowedFramesInFlight
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4230 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4231 extern SDL_DECLSPEC bool SDLCALL SDL_AcquireGPUSwapchainTexture(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4232 SDL_GPUCommandBuffer *command_buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4233 SDL_Window *window,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4234 SDL_GPUTexture **swapchain_texture,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4235 Uint32 *swapchain_texture_width,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4236 Uint32 *swapchain_texture_height);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4237
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4238 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4239 * Blocks the thread until a swapchain texture is available to be acquired.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4240 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4241 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4242 * \param window a window that has been claimed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4243 * \returns true on success, false on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4244 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4245 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4246 * \threadsafety This function should only be called from the thread that
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4247 * created the window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4248 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4249 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4250 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4251 * \sa SDL_AcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4252 * \sa SDL_WaitAndAcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4253 * \sa SDL_SetGPUAllowedFramesInFlight
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4254 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4255 extern SDL_DECLSPEC bool SDLCALL SDL_WaitForGPUSwapchain(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4256 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4257 SDL_Window *window);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4258
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4259 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4260 * Blocks the thread until a swapchain texture is available to be acquired,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4261 * and then acquires it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4262 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4263 * When a swapchain texture is acquired on a command buffer, it will
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4264 * automatically be submitted for presentation when the command buffer is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4265 * submitted. The swapchain texture should only be referenced by the command
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4266 * buffer used to acquire it. It is an error to call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4267 * SDL_CancelGPUCommandBuffer() after a swapchain texture is acquired.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4268 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4269 * This function can fill the swapchain texture handle with NULL in certain
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4270 * cases, for example if the window is minimized. This is not an error. You
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4271 * should always make sure to check whether the pointer is NULL before
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4272 * actually using it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4273 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4274 * The swapchain texture is managed by the implementation and must not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4275 * freed by the user. You MUST NOT call this function from any thread other
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4276 * than the one that created the window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4277 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4278 * The swapchain texture is write-only and cannot be used as a sampler or for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4279 * another reading operation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4280 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4281 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4282 * \param window a window that has been claimed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4283 * \param swapchain_texture a pointer filled in with a swapchain texture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4284 * handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4285 * \param swapchain_texture_width a pointer filled in with the swapchain
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4286 * texture width, may be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4287 * \param swapchain_texture_height a pointer filled in with the swapchain
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4288 * texture height, may be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4289 * \returns true on success, false on error; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4290 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4291 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4292 * \threadsafety This function should only be called from the thread that
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4293 * created the window.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4294 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4295 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4296 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4297 * \sa SDL_SubmitGPUCommandBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4298 * \sa SDL_SubmitGPUCommandBufferAndAcquireFence
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4299 * \sa SDL_AcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4300 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4301 extern SDL_DECLSPEC bool SDLCALL SDL_WaitAndAcquireGPUSwapchainTexture(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4302 SDL_GPUCommandBuffer *command_buffer,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4303 SDL_Window *window,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4304 SDL_GPUTexture **swapchain_texture,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4305 Uint32 *swapchain_texture_width,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4306 Uint32 *swapchain_texture_height);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4307
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4308 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4309 * Submits a command buffer so its commands can be processed on the GPU.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4310 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4311 * It is invalid to use the command buffer after this is called.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4312 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4313 * This must be called from the thread the command buffer was acquired on.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4314 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4315 * All commands in the submission are guaranteed to begin executing before any
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4316 * command in a subsequent submission begins executing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4317 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4318 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4319 * \returns true on success, false on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4320 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4321 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4322 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4323 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4324 * \sa SDL_AcquireGPUCommandBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4325 * \sa SDL_WaitAndAcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4326 * \sa SDL_AcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4327 * \sa SDL_SubmitGPUCommandBufferAndAcquireFence
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4328 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4329 extern SDL_DECLSPEC bool SDLCALL SDL_SubmitGPUCommandBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4330 SDL_GPUCommandBuffer *command_buffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4331
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4332 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4333 * Submits a command buffer so its commands can be processed on the GPU, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4334 * acquires a fence associated with the command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4335 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4336 * You must release this fence when it is no longer needed or it will cause a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4337 * leak. It is invalid to use the command buffer after this is called.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4338 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4339 * This must be called from the thread the command buffer was acquired on.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4340 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4341 * All commands in the submission are guaranteed to begin executing before any
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4342 * command in a subsequent submission begins executing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4343 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4344 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4345 * \returns a fence associated with the command buffer, or NULL on failure;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4346 * call SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4347 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4348 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4349 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4350 * \sa SDL_AcquireGPUCommandBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4351 * \sa SDL_WaitAndAcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4352 * \sa SDL_AcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4353 * \sa SDL_SubmitGPUCommandBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4354 * \sa SDL_ReleaseGPUFence
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4355 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4356 extern SDL_DECLSPEC SDL_GPUFence * SDLCALL SDL_SubmitGPUCommandBufferAndAcquireFence(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4357 SDL_GPUCommandBuffer *command_buffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4358
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4359 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4360 * Cancels a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4361 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4362 * None of the enqueued commands are executed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4363 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4364 * It is an error to call this function after a swapchain texture has been
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4365 * acquired.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4366 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4367 * This must be called from the thread the command buffer was acquired on.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4368 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4369 * You must not reference the command buffer after calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4370 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4371 * \param command_buffer a command buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4372 * \returns true on success, false on error; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4373 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4374 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4375 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4376 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4377 * \sa SDL_WaitAndAcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4378 * \sa SDL_AcquireGPUCommandBuffer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4379 * \sa SDL_AcquireGPUSwapchainTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4380 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4381 extern SDL_DECLSPEC bool SDLCALL SDL_CancelGPUCommandBuffer(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4382 SDL_GPUCommandBuffer *command_buffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4383
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4384 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4385 * Blocks the thread until the GPU is completely idle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4386 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4387 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4388 * \returns true on success, false on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4389 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4390 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4391 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4392 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4393 * \sa SDL_WaitForGPUFences
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4394 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4395 extern SDL_DECLSPEC bool SDLCALL SDL_WaitForGPUIdle(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4396 SDL_GPUDevice *device);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4397
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4398 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4399 * Blocks the thread until the given fences are signaled.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4400 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4401 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4402 * \param wait_all if 0, wait for any fence to be signaled, if 1, wait for all
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4403 * fences to be signaled.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4404 * \param fences an array of fences to wait on.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4405 * \param num_fences the number of fences in the fences array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4406 * \returns true on success, false on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4407 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4408 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4409 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4410 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4411 * \sa SDL_SubmitGPUCommandBufferAndAcquireFence
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4412 * \sa SDL_WaitForGPUIdle
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4413 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4414 extern SDL_DECLSPEC bool SDLCALL SDL_WaitForGPUFences(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4415 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4416 bool wait_all,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4417 SDL_GPUFence *const *fences,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4418 Uint32 num_fences);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4419
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4420 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4421 * Checks the status of a fence.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4422 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4423 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4424 * \param fence a fence.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4425 * \returns true if the fence is signaled, false if it is not.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4426 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4427 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4428 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4429 * \sa SDL_SubmitGPUCommandBufferAndAcquireFence
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4430 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4431 extern SDL_DECLSPEC bool SDLCALL SDL_QueryGPUFence(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4432 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4433 SDL_GPUFence *fence);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4434
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4435 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4436 * Releases a fence obtained from SDL_SubmitGPUCommandBufferAndAcquireFence.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4437 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4438 * You must not reference the fence after calling this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4439 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4440 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4441 * \param fence a fence.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4442 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4443 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4444 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4445 * \sa SDL_SubmitGPUCommandBufferAndAcquireFence
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4446 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4447 extern SDL_DECLSPEC void SDLCALL SDL_ReleaseGPUFence(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4448 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4449 SDL_GPUFence *fence);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4450
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4451 /* Format Info */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4452
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4453 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4454 * Obtains the texel block size for a texture format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4455 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4456 * \param format the texture format you want to know the texel size of.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4457 * \returns the texel block size of the texture format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4458 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4459 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4460 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4461 * \sa SDL_UploadToGPUTexture
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4462 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4463 extern SDL_DECLSPEC Uint32 SDLCALL SDL_GPUTextureFormatTexelBlockSize(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4464 SDL_GPUTextureFormat format);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4465
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4466 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4467 * Determines whether a texture format is supported for a given type and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4468 * usage.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4469 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4470 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4471 * \param format the texture format to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4472 * \param type the type of texture (2D, 3D, Cube).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4473 * \param usage a bitmask of all usage scenarios to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4474 * \returns whether the texture format is supported for this type and usage.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4475 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4476 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4477 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4478 extern SDL_DECLSPEC bool SDLCALL SDL_GPUTextureSupportsFormat(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4479 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4480 SDL_GPUTextureFormat format,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4481 SDL_GPUTextureType type,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4482 SDL_GPUTextureUsageFlags usage);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4483
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4484 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4485 * Determines if a sample count for a texture format is supported.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4486 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4487 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4488 * \param format the texture format to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4489 * \param sample_count the sample count to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4490 * \returns whether the sample count is supported for this texture format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4491 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4492 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4493 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4494 extern SDL_DECLSPEC bool SDLCALL SDL_GPUTextureSupportsSampleCount(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4495 SDL_GPUDevice *device,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4496 SDL_GPUTextureFormat format,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4497 SDL_GPUSampleCount sample_count);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4498
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4499 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4500 * Calculate the size in bytes of a texture format with dimensions.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4501 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4502 * \param format a texture format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4503 * \param width width in pixels.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4504 * \param height height in pixels.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4505 * \param depth_or_layer_count depth for 3D textures or layer count otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4506 * \returns the size of a texture with this format and dimensions.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4507 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4508 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4509 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4510 extern SDL_DECLSPEC Uint32 SDLCALL SDL_CalculateGPUTextureFormatSize(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4511 SDL_GPUTextureFormat format,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4512 Uint32 width,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4513 Uint32 height,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4514 Uint32 depth_or_layer_count);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4515
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4516 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4517 * Get the SDL pixel format corresponding to a GPU texture format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4518 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4519 * \param format a texture format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4520 * \returns the corresponding pixel format, or SDL_PIXELFORMAT_UNKNOWN if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4521 * there is no corresponding pixel format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4522 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4523 * \since This function is available since SDL 3.4.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4524 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4525 extern SDL_DECLSPEC SDL_PixelFormat SDLCALL SDL_GetPixelFormatFromGPUTextureFormat(SDL_GPUTextureFormat format);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4526
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4527 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4528 * Get the GPU texture format corresponding to an SDL pixel format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4529 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4530 * \param format a pixel format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4531 * \returns the corresponding GPU texture format, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4532 * SDL_GPU_TEXTUREFORMAT_INVALID if there is no corresponding GPU
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4533 * texture format.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4534 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4535 * \since This function is available since SDL 3.4.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4536 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4537 extern SDL_DECLSPEC SDL_GPUTextureFormat SDLCALL SDL_GetGPUTextureFormatFromPixelFormat(SDL_PixelFormat format);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4538
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4539 #ifdef SDL_PLATFORM_GDK
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4540
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4541 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4542 * Call this to suspend GPU operation on Xbox when you receive the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4543 * SDL_EVENT_DID_ENTER_BACKGROUND event.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4544 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4545 * Do NOT call any SDL_GPU functions after calling this function! This must
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4546 * also be called before calling SDL_GDKSuspendComplete.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4547 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4548 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4549 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4550 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4551 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4552 * \sa SDL_AddEventWatch
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4553 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4554 extern SDL_DECLSPEC void SDLCALL SDL_GDKSuspendGPU(SDL_GPUDevice *device);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4555
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4556 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4557 * Call this to resume GPU operation on Xbox when you receive the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4558 * SDL_EVENT_WILL_ENTER_FOREGROUND event.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4559 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4560 * When resuming, this function MUST be called before calling any other
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4561 * SDL_GPU functions.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4562 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4563 * \param device a GPU context.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4564 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4565 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4566 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4567 * \sa SDL_AddEventWatch
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4568 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4569 extern SDL_DECLSPEC void SDLCALL SDL_GDKResumeGPU(SDL_GPUDevice *device);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4570
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4571 #endif /* SDL_PLATFORM_GDK */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4572
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4573 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4574 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4575 #endif /* __cplusplus */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4576 #include <SDL3/SDL_close_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4577
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4578 #endif /* SDL_gpu_h_ */