(This is the documentation for SDL3, which is the current stable version. SDL2 was the previous version!)
SDL_CreateGPUShader
Creates a shader to be used when creating a graphics pipeline.
Defined in <SDL3/SDL_gpu.h>
Syntax
SDL_GPUShader* SDL_CreateGPUShader(
SDL_GPUDevice *device,
const SDL_GPUShaderCreateInfo *createinfo);
Function Parameters
Return Value
(SDL_GPUShader *) Returns a shader object on success, or NULL on failure; call SDL_GetError() for more information.
Shader resource bindings must be authored to follow a particular order depending on the shader format.
For SPIR-V shaders, use the following resource sets:
For vertex shaders:
- 0: Sampled textures, followed by storage textures, followed by storage buffers
- 1: Uniform buffers
For fragment shaders:
- 2: Sampled textures, followed by storage textures, followed by storage buffers
- 3: Uniform buffers
For DXBC and DXIL shaders, use the following register order:
For vertex shaders:
- (t[n], space0): Sampled textures, followed by storage textures, followed by storage buffers
- (s[n], space0): Samplers with indices corresponding to the sampled textures
- (b[n], space1): Uniform buffers
For pixel shaders:
- (t[n], space2): Sampled textures, followed by storage textures, followed by storage buffers
- (s[n], space2): Samplers with indices corresponding to the sampled textures
- (b[n], space3): Uniform buffers
For MSL/metallib, use the following order:
- [[texture]]: Sampled textures, followed by storage textures
- [[sampler]]: Samplers with indices corresponding to the sampled textures
- [[buffer]]: Uniform buffers, followed by storage buffers. Vertex buffer 0 is bound at [[buffer(14)]], vertex buffer 1 at [[buffer(15)]], and so on. Rather than manually authoring vertex buffer indices, use the [[stage_in]] attribute which will automatically use the vertex input information from the SDL_GPUPipeline.
Version
This function is available since SDL 3.1.3.
See Also
CategoryAPI, CategoryAPIFunction, CategoryGPU