Donner SVG Editor & Engine
SVG-native editor and embeddable SVG2 + CSS3 engine in C++20, with GPU (WebGPU) and compact CPU renderers, built for correctness, security, and performance.
Loading...
Searching...
No Matches
donner::gpu::shader::ModuleBuilder Class Reference

Builds an IrModule: module-scope constants, resource bindings with (group, binding) uniqueness validation, and functions. More...

#include "donner/gpu/shader/IrModule.h"

Public Member Functions

 ModuleBuilder ()=default
 Constructs an empty module builder.
 ModuleBuilder (const ModuleBuilder &)=delete
ModuleBuilderoperator= (const ModuleBuilder &)=delete
 ModuleBuilder (ModuleBuilder &&)=delete
ModuleBuilderoperator= (ModuleBuilder &&)=delete
 ~ModuleBuilder ()=default
 Destructor.
ShaderStatus addConstant (const RcString &name, const IrExpr &value)
 Adds a module-scope constant with a literal value (e.g.
ShaderStatus addUniformBuffer (uint32_t group, uint32_t binding, const RcString &name, const IrType &structType)
 Adds a uniform buffer binding.
ShaderStatus addReadOnlyStorageBuffer (uint32_t group, uint32_t binding, const RcString &name, const IrType &type)
 Adds a read-only storage buffer binding with a runtime array or struct type.
ShaderStatus addTexture2d (uint32_t group, uint32_t binding, const RcString &name)
 Adds a texture_2d<f32> binding.
ShaderStatus addSampler (uint32_t group, uint32_t binding, const RcString &name)
 Adds a filtering sampler binding.
ShaderResult< FunctionBuilder > createFunction (const RcString &name, std::vector< IrParam > params, const std::optional< IrType > &returnType)
 Starts a plain function.
ShaderResult< FunctionBuilder > createVertexEntryPoint (const RcString &name, std::vector< IrParam > params, std::vector< IrOutputMember > outputs)
 Starts a vertex entry point.
ShaderResult< FunctionBuilder > createFragmentEntryPoint (const RcString &name, std::vector< IrParam > params, std::vector< IrOutputMember > outputs)
 Starts a fragment entry point.
ShaderResult< IrModulebuild ()
 Finalizes and returns the module. Fails if any recorded error is pending.

Friends

class FunctionBuilder

Detailed Description

Builds an IrModule: module-scope constants, resource bindings with (group, binding) uniqueness validation, and functions.

Member Function Documentation

◆ addConstant()

ShaderStatus donner::gpu::shader::ModuleBuilder::addConstant ( const RcString & name,
const IrExpr & value )

Adds a module-scope constant with a literal value (e.g.

a u32 sentinel).

Parameters
nameConstant name; must be unique at module scope.
valueLiteral expression.

◆ addReadOnlyStorageBuffer()

ShaderStatus donner::gpu::shader::ModuleBuilder::addReadOnlyStorageBuffer ( uint32_t group,
uint32_t binding,
const RcString & name,
const IrType & type )

Adds a read-only storage buffer binding with a runtime array or struct type.

Parameters
groupBind group index.
bindingBinding index; (group, binding) must be unique.
nameBinding name; must be unique at module scope.
typeRuntime array or struct type.

◆ addSampler()

ShaderStatus donner::gpu::shader::ModuleBuilder::addSampler ( uint32_t group,
uint32_t binding,
const RcString & name )

Adds a filtering sampler binding.

Parameters
groupBind group index.
bindingBinding index; (group, binding) must be unique.
nameBinding name; must be unique at module scope.

◆ addTexture2d()

ShaderStatus donner::gpu::shader::ModuleBuilder::addTexture2d ( uint32_t group,
uint32_t binding,
const RcString & name )

Adds a texture_2d<f32> binding.

Parameters
groupBind group index.
bindingBinding index; (group, binding) must be unique.
nameBinding name; must be unique at module scope.

◆ addUniformBuffer()

ShaderStatus donner::gpu::shader::ModuleBuilder::addUniformBuffer ( uint32_t group,
uint32_t binding,
const RcString & name,
const IrType & structType )

Adds a uniform buffer binding.

Parameters
groupBind group index.
bindingBinding index; (group, binding) must be unique.
nameBinding name; must be unique at module scope.
structTypeUniform struct type.

◆ createFragmentEntryPoint()

ShaderResult< FunctionBuilder > donner::gpu::shader::ModuleBuilder::createFragmentEntryPoint ( const RcString & name,
std::vector< IrParam > params,
std::vector< IrOutputMember > outputs )

Starts a fragment entry point.

Parameters must have unique locations; outputs must include a location-0 vec4<f32> color.

Parameters
nameEntry point name; must be unique at module scope.
paramsStage inputs.
outputsStage outputs.

◆ createFunction()

ShaderResult< FunctionBuilder > donner::gpu::shader::ModuleBuilder::createFunction ( const RcString & name,
std::vector< IrParam > params,
const std::optional< IrType > & returnType )

Starts a plain function.

Finish it with FunctionBuilder::finish() before starting the next function.

Parameters
nameFunction name; must be unique at module scope.
paramsParameters (types must be plain data or texture/sampler for helpers).
returnTypeReturn type, or empty for void.

◆ createVertexEntryPoint()

ShaderResult< FunctionBuilder > donner::gpu::shader::ModuleBuilder::createVertexEntryPoint ( const RcString & name,
std::vector< IrParam > params,
std::vector< IrOutputMember > outputs )

Starts a vertex entry point.

Parameters may carry the instance_index builtin (u32) or unique locations; outputs must contain exactly one position builtin (vec4<f32>) plus uniquely-located outputs.

Parameters
nameEntry point name; must be unique at module scope.
paramsStage inputs.
outputsStage outputs.

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