Provided by: libsdl3-doc_3.2.8+ds-1_all bug

NAME

       SDL_CreateGPUShader - Creates a shader to be used when creating a graphics pipeline.

HEADER FILE

       Defined in SDL3/SDL_gpu.h

SYNOPSIS

       #include "SDL3/SDL.h"

       SDL_GPUShader * SDL_CreateGPUShader(
           SDL_GPUDevice *device,
           const SDL_GPUShaderCreateInfo *createinfo);

DESCRIPTION

       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_GPUGraphicsPipeline .

       Shader  semantics  other  than  system-value semantics do not matter in D3D12 and for ease of use the SDL
       implementation assumes that non system-value semantics will all be TEXCOORD. If you are using HLSL as the
       shader source language, your vertex semantics should start at TEXCOORD0 and increment like so: TEXCOORD1,
       TEXCOORD2, etc. If you wish to change the semantic prefix to something other than TEXCOORD you can use

       SDL_PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING

       with

       SDL_CreateGPUDeviceWithProperties ().

       There are optional properties that can be provided through props . These are the supported properties:

       • SDL_PROP_GPU_SHADER_CREATE_NAME_STRING :
         a name that can be displayed in debugging tools.

FUNCTION PARAMETERS

       device a GPU Context.

       createinfo
              a struct describing the state of the shader to create.

RETURN VALUE

       ( SDL_GPUShader
        *) Returns a shader object on success, or NULL on failure; call SDL_GetError () for more information.

AVAILABILITY

       This function is available since SDL 3.2.0.

SEE ALSO

       (3), SDL_CreateGPUGraphicsPipeline(3), (3), SDL_ReleaseGPUShader(3)

Simple Directmedia Layer                            SDL 3.2.8                             SDL_CreateGPUShader(3)