Donner SVG 0.8.0-pre
SVG editor and embeddable C⁠+⁠+⁠20 engine.
Loading...
Searching...
No Matches
IrModule.h File Reference

Module model and validating builders for the donner::gpu::shader IR. More...

#include <array>
#include <cstdint>
#include <map>
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "donner/base/RcString.h"
#include "donner/gpu/shader/IrExpr.h"
#include "donner/gpu/shader/IrStatement.h"
#include "donner/gpu/shader/IrType.h"
#include "donner/gpu/shader/ShaderResult.h"
Include dependency graph for IrModule.h:
This graph shows which files directly or indirectly include this file:

Classes

struct  donner::gpu::shader::WorkgroupSize
 Declared workgroup size of a compute entry point. Every dimension is at least 1, and the product bounds how many invocations one dispatched workgroup runs. More...
struct  donner::gpu::shader::IrConstant
 One module-scope constant. More...
struct  donner::gpu::shader::IrBinding
 One module-scope resource binding. More...
struct  donner::gpu::shader::IrParam
 One entry point parameter or plain function parameter. More...
struct  donner::gpu::shader::IrOutputMember
 One entry point output member. More...
struct  donner::gpu::shader::IrFunction
 One function: a plain function or an entry point. More...
class  donner::gpu::shader::IrModule
 An immutable, validated shader IR module. More...
class  donner::gpu::shader::FunctionBuilder
 Builds one function or entry point. More...
class  donner::gpu::shader::ModuleBuilder
 Builds an IrModule: module-scope constants, resource bindings with (group, binding) uniqueness validation, and functions. More...

Namespaces

namespace  donner
 Top-level Donner namespace, which is split into different sub-namespaces such as donner::svg and donner::css.

Enumerations

enum class  donner::gpu::shader::BindingKind : uint8_t {
  UniformBuffer ,
  ReadOnlyStorageBuffer ,
  SampledTexture2dF32 ,
  FilteringSampler ,
  WriteOnlyStorageTexture2d
}
 Kind of a module-scope resource binding. More...
enum class  donner::gpu::shader::StageKind : uint8_t {
  None ,
  Vertex ,
  Fragment ,
  Compute
}
 Pipeline stage of a function. More...
enum class  donner::gpu::shader::BuiltinInput : uint8_t {
  VertexIndex ,
  InstanceIndex ,
  Position ,
  GlobalInvocationId
}
 Builtin input values available to entry point parameters. More...
enum class  donner::gpu::shader::BuiltinOutput : uint8_t { Position }
 Builtin output values available to entry point outputs. More...

Functions

std::ostream & donner::gpu::shader::operator<< (std::ostream &os, BindingKind value)
 Ostream output operator, e.g. uniform.
std::ostream & donner::gpu::shader::operator<< (std::ostream &os, StageKind value)
 Ostream output operator, e.g. compute.

Variables

constexpr uint32_t donner::gpu::shader::kMaxComputeInvocationsPerWorkgroup = 256
 Maximum invocations one workgroup may declare (x * y * z). 256 is the strictest common cap across the native APIs this runtime targets.
constexpr uint32_t donner::gpu::shader::kMaxComputeWorkgroupSizeXY = 256
 Maximum invocations a workgroup may declare along X or Y.
constexpr uint32_t donner::gpu::shader::kMaxComputeWorkgroupSizeZ = 64
 Maximum invocations a workgroup may declare along Z.

Detailed Description

Module model and validating builders for the donner::gpu::shader IR.

A module holds module-scope constants, resource bindings, and functions (plain functions plus vertex/fragment/compute entry points). ModuleBuilder and FunctionBuilder validate every construction step and fail closed with ShaderError on ill-typed input; a successfully built IrModule is immutable and serializes deterministically.

Enumeration Type Documentation

◆ BindingKind

enum class donner::gpu::shader::BindingKind : uint8_t
strong

Kind of a module-scope resource binding.

Enumerator
UniformBuffer 

var<uniform> with a struct type.

ReadOnlyStorageBuffer 

var<storage, read> with a runtime array or struct type.

SampledTexture2dF32 

texture_2d<f32>.

FilteringSampler 

sampler.

WriteOnlyStorageTexture2d 

texture_storage_2d<format, write>.

◆ BuiltinInput

enum class donner::gpu::shader::BuiltinInput : uint8_t
strong

Builtin input values available to entry point parameters.

Enumerator
VertexIndex 

vertex_index (vertex stage, u32).

InstanceIndex 

instance_index (vertex stage, u32).

Position 

Framebuffer position (fragment stage, vec4<f32>).

GlobalInvocationId 

global_invocation_id (compute stage, vec3<u32>).

◆ BuiltinOutput

enum class donner::gpu::shader::BuiltinOutput : uint8_t
strong

Builtin output values available to entry point outputs.

Enumerator
Position 

Clip-space position (vertex stage, vec4<f32>).

◆ StageKind

enum class donner::gpu::shader::StageKind : uint8_t
strong

Pipeline stage of a function.

Enumerator
None 

Plain (non-entry-point) function.

Vertex 

Vertex entry point.

Fragment 

Fragment entry point.

Compute 

Compute entry point; carries a workgroup size and returns nothing.

Function Documentation

◆ operator<<() [1/2]

std::ostream & donner::gpu::shader::operator<< ( std::ostream & os,
BindingKind value )

Ostream output operator, e.g. uniform.

Parameters
osOutput stream.
valueValue to output.

◆ operator<<() [2/2]

std::ostream & donner::gpu::shader::operator<< ( std::ostream & os,
StageKind value )

Ostream output operator, e.g. compute.

Parameters
osOutput stream.
valueValue to output.