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 bool operator== (const GPUShader &other) const =default
 Default comparison operator.
 
constexpr bool operator== (GPUShaderRaw gPUShader) const
 Compares with the underlying type.
 
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: