SDL3pp
A slim C++ wrapper for SDL3
Loading...
Searching...
No Matches
Public Member Functions | List of all members
SDL::GPUShader Class Reference

An opaque handle representing a compiled shader object. More...

Public Member Functions

constexpr GPUShader (GPUShaderRaw gPUShader={})
 Wraps GPUShader. More...
 
 GPUShader (GPUDeviceParam device, const GPUShaderCreateInfo &createinfo)
 Creates a shader to be used when creating a graphics pipeline. More...
 
constexpr operator GPUShaderRaw () const
 Unwraps to the underlying GPUShader. More...
 

Detailed Description

Since
This struct is available since SDL 3.2.0.
See also
GPUShader.GPUShader
GPUGraphicsPipeline.GPUGraphicsPipeline
GPUDevice.ReleaseShader

Constructor & Destructor Documentation

◆ GPUShader() [1/2]

constexpr SDL::GPUShader::GPUShader ( GPUShaderRaw  gPUShader = {})
inlineconstexpr
Parameters
gPUShaderthe value to be wrapped

◆ GPUShader() [2/2]

SDL::GPUShader::GPUShader ( GPUDeviceParam  device,
const GPUShaderCreateInfo createinfo 
)
inline

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 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 prop::GpuDevice.CREATE_D3D12_SEMANTIC_NAME_STRING with GPUDevice.GPUDevice().

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

  • prop::GPUShader.CREATE_NAME_STRING: a name that can be displayed in debugging tools.
Parameters
devicea GPU Context.
createinfoa struct describing the state of the shader to create.
Postcondition
a shader object on success.
Exceptions
Erroron failure.
Since
This function is available since SDL 3.2.0.
See also
GPUGraphicsPipeline.GPUGraphicsPipeline
GPUDevice.ReleaseShader

Member Function Documentation

◆ operator GPUShaderRaw()

constexpr SDL::GPUShader::operator GPUShaderRaw ( ) const
inlineconstexpr
Returns
the underlying GPUShaderRaw.

The documentation for this class was generated from the following file: