nCine::RHI::D3D11::D3D11ShaderProgram class

Shader program of the Direct3D 11 backend (aliased as RHI::ShaderProgram).

Carries the offline ShaderCompiler reflection (set with SetReflection() like the OpenGL backend) from which it imports uniforms, uniform blocks and attributes, and compiles the reflection's HlslVsSource/HlslFsSource into real ID3D11VertexShader/ID3D11PixelShader objects (matrix packing forced column-major so the emitter's mul(M,v) column-vector algebra matches the engine's column-major uniform data verbatim), reflects their constant buffers into D3D11CBufferSlot lists the device rebinds each draw, and keeps the VS bytecode for building the input layout of attribute-based (mesh/tilemap) shaders. Use() records the program as current on the device.

Public types

enum class Introspection { Enabled, NoUniformsInBlocks, Disabled }
enum class Status { NotLinked, CompilationFailed, LinkingFailed, Linked, LinkedWithDeferredQueries, LinkedWithIntrospection }
enum class QueryPhase { Immediate, Deferred }

Public static variables

static std::int32_t DefaultBatchSize constexpr
Default batch size, indicating the shader is not batched.

Constructors, destructors, conversion operators

D3D11ShaderProgram()
D3D11ShaderProgram(QueryPhase queryPhase) explicit
D3D11ShaderProgram(StringView vertexFile, StringView fragmentFile, Introspection introspection, QueryPhase queryPhase)
D3D11ShaderProgram(StringView vertexFile, StringView fragmentFile, Introspection introspection)
D3D11ShaderProgram(StringView vertexFile, StringView fragmentFile)
~D3D11ShaderProgram()
D3D11ShaderProgram(const D3D11ShaderProgram&) deleted

Public functions

auto operator=(const D3D11ShaderProgram&) -> D3D11ShaderProgram& deleted
auto GetUniqueId() const -> std::uint32_t
Returns a backend-neutral identifier uniquely identifying the program (feeds material sort keys).
auto GetStatus() const -> Status
auto GetIntrospection() const -> Introspection
auto GetQueryPhase() const -> QueryPhase
auto GetBatchSize() const -> std::uint32_t
void SetBatchSize(std::uint32_t value)
auto IsLinked() const -> bool
auto RetrieveInfoLogLength() const -> std::uint32_t
void RetrieveInfoLog(std::string& infoLog) const
auto GetUniformsSize() const -> std::uint32_t
auto GetUniformBlocksSize() const -> std::uint32_t
auto AttachShaderFromFile(ShaderStage stage, StringView filename) -> bool
auto AttachShaderFromString(ShaderStage stage, StringView string) -> bool
auto AttachShaderFromStrings(ShaderStage stage, ArrayView<const StringView> strings) -> bool
auto AttachShaderFromStringsAndFile(ShaderStage stage, ArrayView<const StringView> strings, StringView filename) -> bool
void SetReflection(const ShaderCompiler::ProgramVariant* reflection)
Sets the offline reflection consumed by Link() to import uniforms/blocks/attributes and compile HLSL.
auto Link(Introspection introspection) -> bool
void Use()
auto Validate() -> bool
auto FinalizeAfterLinking(Introspection introspection) -> bool
auto GetAttributeCount() const -> std::uint32_t
auto HasAttribute(const char* name) const -> bool
auto GetAttribute(const char* name) -> D3D11VertexFormat::Attribute*
void DefineVertexFormat(const D3D11BufferObject* vbo)
void DefineVertexFormat(const D3D11BufferObject* vbo, const D3D11BufferObject* ibo)
void DefineVertexFormat(const D3D11BufferObject* vbo, const D3D11BufferObject* ibo, std::uint32_t vboOffset)
void Reset()
void SetObjectLabel(StringView label)
auto GetLogOnErrors() const -> bool
void SetLogOnErrors(bool shouldLogOnErrors)
void SetResolvedUniform(const char* name, const std::uint8_t* data)
Publishes a committed loose-uniform value pointer for the device to gather into _Globals.
auto ResolveUniform(const char* name) const -> const std::uint8_t*
Returns the last published value pointer of the named loose uniform, or nullptr.
auto GetVertexShader() const -> ID3D11VertexShader*
Returns the compiled vertex shader, or nullptr if not compiled (e.g. runtime shader with no HLSL).
auto GetPixelShader() const -> ID3D11PixelShader*
Returns the compiled pixel shader, or nullptr.
auto GetInputLayout() -> ID3D11InputLayout*
Returns/creates the input layout for this program's attributes + bound vertex format; nullptr for SV_VertexID shaders.
auto HasVertexAttributes() const -> bool
Returns true if the vertex shader reads vertex attributes (needs an input layout + vertex buffer).
auto GetBoundVbo() const -> const D3D11BufferObject*
Returns the vertex buffer bound by DefineVertexFormat(), or nullptr.
auto GetBoundIbo() const -> const D3D11BufferObject*
Returns the index buffer bound by DefineVertexFormat(), or nullptr.
auto GetVertexStride() const -> std::uint32_t
Returns the per-vertex byte stride (from the first enabled attribute of the bound vertex format).
auto GetVsCBuffers() const -> const std::vector<D3D11CBufferSlot>&
Constant-buffer slots the vertex stage expects (rebuilt and bound each draw).
auto GetPsCBuffers() const -> const std::vector<D3D11CBufferSlot>&
Constant-buffer slots the pixel stage expects.
auto GetVsTextureMask() const -> std::uint32_t
Bitmask of the texture/sampler registers the vertex stage actually reads (bit N = slot tN/sN).
auto GetPsTextureMask() const -> std::uint32_t
Bitmask of the texture/sampler registers the pixel stage actually reads.