14using namespace RenderCore;
158static_assert(
sizeof(
GSMesh) == 44);
161static_assert(
sizeof(
GSLight) == 96);
292 const char*
debugName =
nullptr,
bool pinned =
false);
295 bool pinned =
false);
#define ENUM_NAME_CONV_BEGIN(T)
Defines convince to_string() method and format_as() [fmt] for the respective enum class Example usage...
Definition Enums.hpp:82
#define ENUM_NAME(E)
Definition Enums.hpp:93
constexpr uint32_t kCurveSBTOffset
Definition GPUScene.hpp:21
constexpr uint32_t kGSInstanceTypeCurve
Definition GPUScene.hpp:23
constexpr uint32_t kGSInstanceTypeMask
Definition GPUScene.hpp:26
constexpr uint32_t kDiskLightSBTOffset
Definition GPUScene.hpp:20
constexpr uint32_t kGSInstanceTypeMesh
Definition GPUScene.hpp:22
constexpr uint32_t kRectLightSBTOffset
Definition GPUScene.hpp:19
constexpr uint32_t kGSInstanceFlagDynamic
Definition GPUScene.hpp:27
#define CHECK_MSG(expr, format_str,...)
Definition Logging.hpp:62
Implements a lock-free stack-based bump allocator.
Definition AllocatorStack.hpp:12
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
Definition Resource.hpp:332
Definition Resource.hpp:57
Definition Command.hpp:42
Definition Device.hpp:245
bool IsValid() const
Check if the handle is valid (i.e. associated with a Factory and not kInvalidHandle)
Definition Details.hpp:74
U * Get() const
Retrieves the underlying RHIObject pointer. It is undefined behavior to use the returned pointer afte...
Definition Details.hpp:53
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:86
Definition Resource.hpp:216
Owns all GPU-resident scene data (geometry, textures, instance/material/light tables,...
Definition GPUScene.hpp:218
uint32_t GetViewLutSdrIndex() const
Definition GPUScene.hpp:519
RHIBuffer * GetMaterialBuffer() const
Definition GPUScene.cpp:3125
TextureHandle mLUTGGXEIORIndex
Definition GPUScene.hpp:578
TextureHandle mEnvMapConditionalCDFIndex
Definition GPUScene.hpp:589
uint32_t GetGGXLutEavgIndex() const
Definition GPUScene.hpp:513
TextureHandle mLUTGGXEIORavgIndex
Definition GPUScene.hpp:575
BindlessPool * GetTexture3DPool()
Definition GPUScene.cpp:3129
void BuildBLAS(RHICommandList *cmd)
Refits (or periodically rebuilds) every dirty dynamic geometry's BLAS in place against the current fr...
Definition GPUScene.cpp:3113
void DbgGetMemoryStatistics(Vector< MemoryStat > &outStats) const
Definition GPUScene.cpp:3103
Vector< GSMaterial > mCommittedMaterials
Definition GPUScene.hpp:560
Result UploadViewLUTs(FTexture const &sdr, FTexture const &hdr)
Uploads the SDR/HDR display-transform view LUTs (owns its staging).
Definition GPUScene.cpp:3094
RHIBuffer * GetPrimitiveBuffer() const
Definition GPUScene.hpp:497
uint32_t GetSheenLtcIndex() const
Definition GPUScene.hpp:518
LightSamplerType mLightSamplerType
Definition GPUScene.hpp:244
void EndDynamicGeometryUpdate()
Closes the per-frame dynamic-geometry update window opened by BeginDynamicGeometryUpdate.
Definition GPUScene.cpp:3112
void SetDynamicGeometryRebuildRate(uint32_t framesOrZero)
Frames between forced full BLAS rebuilds for dynamic geo (0 = refit only). Default 64.
Definition GPUScene.cpp:3114
uint32_t GetLightCount() const
Definition GPUScene.hpp:487
RHIDeviceScopedHandle< RHIBuffer > mSobolMatricesBuffer
Definition GPUScene.hpp:570
RHIDeviceScopedHandle< RHIBuffer > mFoundationDefaultBufferFloat
Definition GPUScene.hpp:571
void Reset()
Definition GPUScene.cpp:3107
TextureHandle mLUTGGXEavgIndex
Definition GPUScene.hpp:574
TextureHandle mLUTSheenLTCIndex
Definition GPUScene.hpp:580
GSMaterial GetMaterial(uint32_t index) const
Definition GPUScene.hpp:488
RHIBuffer * GetSobolMatricesBuffer() const
Definition GPUScene.hpp:548
void Collect()
Garbage-collects geometry and textures no longer referenced by the committed scene tables.
Definition GPUScene.cpp:3106
GSInstance GetInstance(uint32_t index) const
Definition GPUScene.hpp:466
uint32_t GetEnvMapIndexOrDefault() const
Definition GPUScene.hpp:526
bool HasEnvMap() const
Definition GPUScene.hpp:525
uint32_t GetDynamicRefitCount() const
Dynamic geos refitted in the last RefitDynamicGeometry call.
Definition GPUScene.cpp:3115
Result UploadDynamic(FBlobDeserializer *blobs, FSerializedMesh const &source, GeometryHandle &outHandle)
Uploads a mesh as CPU-updateable dynamic geometry (deformation workloads).
Definition GPUScene.cpp:3069
TextureHandle mEnvMapMarginalCDFIndex
Definition GPUScene.hpp:588
uint32_t GetGGXLutEIORInvavgIndex() const
Definition GPUScene.hpp:517
static size_t CalculateCurveAABBSize(FSerializedCurve const &src)
Definition GPUScene.cpp:471
static size_t CalculateMeshPrimitiveSize(FSerializedMesh const &src)
Definition GPUScene.cpp:454
BindlessPool * GetTexture2DPool()
Definition GPUScene.cpp:3128
GSLight GetLight(uint32_t index) const
Definition GPUScene.hpp:481
Span< std::byte > UpdateDynamicGeometry(GeometryHandle handle)
Returns the mapped vertex sub-span (quantized FQVertex bytes) for handle in the current frame slot an...
Definition GPUScene.cpp:3111
uint32_t ResolvePickedInstance(uint32_t pickID) const
Maps a TLAS pick id (instanceID) to its committed instance index, or UINT32_MAX.
Definition GPUScene.hpp:474
TextureHandle mLUTGGXEIORInvIndex
Definition GPUScene.hpp:579
Result
Outcome of an Upload / Query / Poll call.
Definition GPUScene.hpp:228
Vector< GSLight > mCommittedLights
Definition GPUScene.hpp:559
UniquePtr< GPUSceneImpl > mImpl
Definition GPUScene.hpp:591
Vector< uint32_t > mPickMap
Definition GPUScene.hpp:564
void Join()
Drains all queued uploads on the calling thread, blocking until GPU-resident.
Definition GPUScene.cpp:3092
RHIBuffer * GetLightBuffer() const
Definition GPUScene.cpp:3126
TextureHandle mLUTGGXEIndex
Definition GPUScene.hpp:573
TextureHandle mEnvMapIndex
Definition GPUScene.hpp:587
Result Query(GeometryHandle handle) const
Residency state of an uploaded geometry handle.
Definition GPUScene.cpp:3090
TextureHandle mLUTViewHdrIndex
Definition GPUScene.hpp:582
uint32_t mLastTLASInstancesCount
Definition GPUScene.hpp:569
RHITexture * GetFoundationDefaultTexture2D() const
Definition GPUScene.cpp:2985
bool HasDynamicGeometry() const
True when at least one dynamic geometry is resident.
Definition GPUScene.cpp:3109
RHITexture * GetFoundationDefaultTexture2DFloat() const
Definition GPUScene.cpp:2990
LightSamplerType
Definition GPUScene.hpp:240
Vector< GSInstance > mCommittedInstances
Definition GPUScene.hpp:558
Result UploadEnvMap(FTexture const &source)
Uploads an environment map and computes its importance-sampling CDFs.
Definition GPUScene.cpp:3095
TextureHandle mFoundationDefaultTexture2DFloatIndex
Definition GPUScene.hpp:585
RHIBuffer * GetDynamicPrimitiveBuffer() const
The host-coherent dynamic (CPU-updateable) primitive ring, bound as a second primitive storage buffer...
Definition GPUScene.cpp:3118
uint32_t GetDynamicRebuildCount() const
Of the last refit, how many were full rebuilds (the rest were in-place updates).
Definition GPUScene.cpp:3116
TextureHandle mLUTViewSdrIndex
Definition GPUScene.hpp:582
void BeginDynamicGeometryUpdate()
Opens the per-frame dynamic-geometry update window and advances the ring to the next frame slot....
Definition GPUScene.cpp:3110
uint32_t GetViewLutHdrIndex() const
Definition GPUScene.hpp:520
RHIBuffer * GetLightAliasTableBuffer() const
Definition GPUScene.cpp:3127
TLASBuildResult
Definition GPUScene.hpp:398
uint32_t GetGGXLutEIORavgIndex() const
Definition GPUScene.hpp:515
RHIDeviceScopedHandle< RHIBuffer > mPrimitiveBuffer
Definition GPUScene.hpp:567
TextureHandle mLUTGGXEIORInvavgIndex
Definition GPUScene.hpp:576
TextureHandle mFoundationDefaultTexture2DIndex
Definition GPUScene.hpp:584
RHIBuffer * GetInstanceBuffer() const
Definition GPUScene.cpp:3124
uint32_t GetEnvMapMarginalCDFIndexOrDefault() const
Definition GPUScene.hpp:530
uint32_t GetGGXLutEIORInvIndex() const
Definition GPUScene.hpp:516
GPUSceneTables BeginScene(uint32_t instanceCount, uint32_t materialCount, uint32_t lightCount)
Begins a scene-table update, returning caller-fill spans.
Definition GPUScene.cpp:3097
UpdateResult EndScene(GPUSceneTables &tables)
Commits the filled spans: patches instance geometry fields, snapshots the tables for TLAS/picking/Col...
Definition GPUScene.cpp:3102
TLASBuildResult BuildTLAS(RHICommandList *cmd, bool update=false)
Builds (update=false) or refits (update=true) the TLAS from the committed instance table; instances w...
Definition GPUScene.cpp:3105
RHIBuffer * GetFoundationDefaultBufferFloat() const
Definition GPUScene.hpp:523
static size_t CalculateCurvePrimitiveSize(FSerializedCurve const &src)
Definition GPUScene.cpp:466
uint32_t GetEnvMapConditionalCDFIndexOrDefault() const
Definition GPUScene.hpp:534
uint32_t GetInstanceCount() const
Definition GPUScene.hpp:472
void BuildUBO(UBO &globals, bool hdr) const
Writes every GPUScene-owned global bindless index into the renderer UBO: the GGX/sheen LUTs,...
Definition GPUScene.cpp:984
uint32_t GetGGXLutEIndex() const
Definition GPUScene.hpp:512
RHIAccelerationStructure * GetTLAS() const
Definition GPUScene.hpp:539
uint32_t GetGGXLutEIORIndex() const
Definition GPUScene.hpp:514
uint32_t GetLightCapacity() const
Definition GPUScene.cpp:3130
Result Poll()
Non-blocking drain: kicks a background worker on the first call with queued work, then reports progre...
Definition GPUScene.cpp:3093
String DbgGetBufferStatistics() const
Definition GPUScene.cpp:3104
uint32_t GetMaterialCount() const
Definition GPUScene.hpp:494
RHIDeviceScopedHandle< RHIAccelerationStructure > mTLAS
Definition GPUScene.hpp:568
std::basic_string< char > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:112
vec2 float2
Definition Math.hpp:27
vec3 float3
Definition Math.hpp:26
vec4 float4
Definition Math.hpp:25
RHIScopedHandle< RHIDevice, T > RHIDeviceScopedHandle
Definition Details.hpp:209
Definition Serialization.hpp:118
Definition Texture.hpp:46
Definition Texture.hpp:77
Definition GPUScene.hpp:164
uint32_t framesInFlight
Definition GPUScene.hpp:189
uint32_t materialBudget
Definition GPUScene.hpp:168
uint32_t tlasScratchBudget
Definition GPUScene.hpp:177
uint32_t dynamicGeometryBudget
Definition GPUScene.hpp:183
uint32_t primitiveBudget
Definition GPUScene.hpp:165
uint32_t tlasBudget
Definition GPUScene.hpp:176
uint32_t tlasInstanceBudget
Definition GPUScene.hpp:175
uint32_t curveAABBBudget
Definition GPUScene.hpp:166
uint32_t geometryBudget
Definition GPUScene.hpp:174
uint32_t texturesBudget
Definition GPUScene.hpp:170
uint32_t lightBudget
Definition GPUScene.hpp:169
uint32_t instanceBudget
Definition GPUScene.hpp:167
All implementation state and machinery owned by GPUScene.
Definition GPUScene.cpp:174
GPUScene-owned, caller-filled spans for the instance/material/light tables, plus their ring-buffer ba...
Definition GPUScene.hpp:364
uint32_t firstLight
Definition GPUScene.hpp:370
uint32_t firstMaterial
Definition GPUScene.hpp:369
Span< InstanceDesc > instances
Definition GPUScene.hpp:365
uint32_t firstInstance
Definition GPUScene.hpp:368
Span< GSLight > lights
Definition GPUScene.hpp:367
uint32_t firstLightAliasTable
Definition GPUScene.hpp:371
Span< GSMaterial > materials
Definition GPUScene.hpp:366
Definition GPUScene.hpp:389
size_t bytes
Definition GPUScene.hpp:391
String name
Definition GPUScene.hpp:390
Ring-buffer offsets and element counts for instances/materials/lights.
Definition GPUScene.hpp:345
uint32_t firstLightAliasTable
Definition GPUScene.hpp:351
uint32_t numLights
Definition GPUScene.hpp:352
uint32_t numInstances
Definition GPUScene.hpp:347
float sceneLightWeightSum
Definition GPUScene.hpp:353
uint32_t firstLight
Definition GPUScene.hpp:350
uint32_t firstInstance
Definition GPUScene.hpp:346
uint32_t numMaterials
Definition GPUScene.hpp:349
uint32_t firstMaterial
Definition GPUScene.hpp:348
Definition GPUScene.hpp:92
float3 scale
Definition GPUScene.hpp:96
float3 transform
Definition GPUScene.hpp:94
uint32_t resourceOffset
Definition GPUScene.hpp:97
uint32_t resourceIndex
Definition GPUScene.hpp:99
uint32_t materialIndex
Definition GPUScene.hpp:98
quat rotation
Definition GPUScene.hpp:95
uint32_t type
Definition GPUScene.hpp:100
Definition GPUScene.hpp:141
float3 dpdu
Definition GPUScene.hpp:151
float2 radius
Definition GPUScene.hpp:153
uint32_t type
Definition GPUScene.hpp:142
float3 dpdv
Definition GPUScene.hpp:152
uint32_t twoSided
Definition GPUScene.hpp:154
float selectionWeight
Definition GPUScene.hpp:155
float power
Definition GPUScene.hpp:144
float3 position
Definition GPUScene.hpp:145
float3 color
Definition GPUScene.hpp:143
float3 direction
Definition GPUScene.hpp:146
float spotInnerCosAngle
Definition GPUScene.hpp:148
float spotOuterCosAngle
Definition GPUScene.hpp:149
float range
Definition GPUScene.hpp:147
Definition GPUScene.hpp:104
uint32_t specularColorTexture
Definition GPUScene.hpp:111
uint32_t normalTexture
Definition GPUScene.hpp:108
uint32_t anisotropyTexture
Definition GPUScene.hpp:112
float specularFactor
Definition GPUScene.hpp:123
float sheenRoughnessFactor
Definition GPUScene.hpp:128
float hairBetaM
Definition GPUScene.hpp:136
float3 specularColorFactor
Definition GPUScene.hpp:124
float3 sheenColorFactor
Definition GPUScene.hpp:127
float4 baseColorFactor
Definition GPUScene.hpp:117
float3 subsurfaceRadius
Definition GPUScene.hpp:134
float anisotropyStrength
Definition GPUScene.hpp:125
float clearcoatFactor
Definition GPUScene.hpp:129
float3 emissiveFactor
Definition GPUScene.hpp:118
uint32_t clearcoatRoughnessTexture
Definition GPUScene.hpp:116
float clearcoatRoughnessFactor
Definition GPUScene.hpp:130
float3 subsurfaceColor
Definition GPUScene.hpp:133
uint32_t clearcoatTexture
Definition GPUScene.hpp:115
float anisotropyRotation
Definition GPUScene.hpp:126
uint32_t shaderBlockID
Definition GPUScene.hpp:135
uint32_t sheenColorTexture
Definition GPUScene.hpp:113
float transmissionFactor
Definition GPUScene.hpp:121
float metallicFactor
Definition GPUScene.hpp:119
uint32_t emissiveTexture
Definition GPUScene.hpp:106
uint32_t baseColorTexture
Definition GPUScene.hpp:105
uint32_t transmissionTexture
Definition GPUScene.hpp:109
uint32_t sheenRoughnessTexture
Definition GPUScene.hpp:114
uint32_t metallicRoughnessTexture
Definition GPUScene.hpp:107
float ior
Definition GPUScene.hpp:122
float subsurfaceScale
Definition GPUScene.hpp:132
uint32_t specularTexture
Definition GPUScene.hpp:110
float hairBetaN
Definition GPUScene.hpp:137
float subsurfaceFactor
Definition GPUScene.hpp:131
float roughnessFactor
Definition GPUScene.hpp:120
float hairAlpha
Definition GPUScene.hpp:138
Definition GPUScene.hpp:72
uint32_t groupCount
Definition GPUScene.hpp:82
uint32_t meshletTriOffset
Definition GPUScene.hpp:87
uint32_t meshletCount
Definition GPUScene.hpp:85
uint32_t meshletVtxOffset
Definition GPUScene.hpp:86
uint32_t meshletOffset
Definition GPUScene.hpp:84
uint32_t groupOffset
Definition GPUScene.hpp:81
uint32_t vtxOffset
Definition GPUScene.hpp:75
uint32_t idxOffset
Definition GPUScene.hpp:78
uint32_t vtxCount
Definition GPUScene.hpp:76
uint32_t meshletGlobalIndex
Definition GPUScene.hpp:89
uint32_t idxCount
Definition GPUScene.hpp:79
Opaque, generation-tagged reference to GPUScene-owned geometry residency.
Definition GPUScene.hpp:35
bool IsValid() const
Definition GPUScene.hpp:38
uint32_t index
Definition GPUScene.hpp:36
uint32_t generation
Definition GPUScene.hpp:37
Caller-facing scene instance for GPUScene::BeginScene / GPUScene::EndScene.
Definition GPUScene.hpp:62
quat rotation
Definition GPUScene.hpp:65
float3 transform
Definition GPUScene.hpp:64
uint32_t materialIndex
Definition GPUScene.hpp:67
GeometryHandle geometry
Definition GPUScene.hpp:63
float3 scale
Definition GPUScene.hpp:66
Generation-tagged reference to a bindless texture slot (mirror of GeometryHandle).
Definition GPUScene.hpp:48
bool IsValid() const
Definition GPUScene.hpp:52
bool is3D
Definition GPUScene.hpp:51
uint32_t generation
Definition GPUScene.hpp:50
uint32_t index
Definition GPUScene.hpp:49
Definition Renderer.hpp:8