16using namespace RenderCore;
72 uint32_t meshletVtxOffset;
73 uint32_t meshletTriOffset;
74 uint32_t meshletGlobalIndex;
160static_assert(
sizeof(GSMesh) == 68);
163static_assert(
sizeof(
GSLight) == 84);
227 const char* debugName =
nullptr,
bool pinned =
false);
229 bool pinned =
false);
277 GPUSceneTables
BeginScene(uint32_t instanceCount, uint32_t materialCount, uint32_t lightCount);
279 GSInstanceFlags& outPrimitiveFlags)
const;
280 UpdateResult
EndScene(GPUSceneTables& tables);
414 return mTLAS.IsValid() ?
mTLAS.Get() :
nullptr;
#define CHECK_MSG(expr, format_str,...)
#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 BITMASK_ENUM_BEGIN(T, INT_T)
Defines a bitmask enum type {T}Bits with underlying integer type INT_T whilst defining a wrapper clas...
Definition Enums.hpp:47
#define ENUM_NAME(E)
Definition Enums.hpp:93
constexpr uint32_t kGSLightTypeDisk
Definition GPUScene.hpp:34
constexpr uint32_t kCurveSBTOffset
Definition GPUScene.hpp:23
constexpr uint32_t kSphereLightSBTOffset
Definition GPUScene.hpp:24
constexpr uint32_t kGSInstanceTypeCurve
Definition GPUScene.hpp:26
constexpr uint32_t kLightSelectionClusterBit
Definition GPUScene.hpp:36
constexpr uint32_t kGSLightTypeEnvironment
Definition GPUScene.hpp:30
constexpr uint32_t kGSLightTypeMask
Definition GPUScene.hpp:29
constexpr uint32_t kGSInstanceTypeMask
Definition GPUScene.hpp:27
constexpr uint32_t kGSLightTypeDirectional
Definition GPUScene.hpp:31
constexpr uint32_t kGSLightTypeSpot
Definition GPUScene.hpp:33
constexpr uint32_t kGSLightTypeRect
Definition GPUScene.hpp:35
constexpr uint32_t kDiskLightSBTOffset
Definition GPUScene.hpp:22
Mesh
Definition GPUScene.hpp:62
constexpr uint32_t kGSInstanceTypeMesh
Definition GPUScene.hpp:25
constexpr uint32_t kRectLightSBTOffset
Definition GPUScene.hpp:21
constexpr uint32_t kGSLightTypePoint
Definition GPUScene.hpp:32
constexpr uint32_t kLightSelectionIndexMask
Definition GPUScene.hpp:37
Implements a lock-free stack-based bump allocator.
Definition AllocatorStack.hpp:13
Allocator interface (noexcept)
Definition Allocator.hpp:29
Definition JobSystem.hpp:135
Definition Resource.hpp:332
Definition Resource.hpp:57
Definition Command.hpp:42
Definition Device.hpp:246
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:85
Definition Resource.hpp:216
Definition GPUScene.hpp:187
RHIBuffer * GetMaterialBuffer() const
Definition GPUScene.cpp:3542
TextureHandle mLUTGGXEIORIndex
Definition GPUScene.hpp:450
TextureHandle mEnvMapConditionalCDFIndex
Definition GPUScene.hpp:456
Array< float3, 9 > mEnvSHCoeffs
Definition GPUScene.hpp:458
RHIBuffer * GetLightBVHNodeIndexBuffer() const
Definition GPUScene.cpp:3549
GSOffsetCount GetLightBVHNodes() const
Definition GPUScene.cpp:3566
TextureHandle mLUTGGXEIORavgIndex
Definition GPUScene.hpp:447
void UpdateDynamicCurveCPU(GeometryHandle handle, Span< const FCurveDOTSVertex > vertices={}, Span< const uint32_t > indices={}, Span< const FCurveLeaf > leaves={})
Host-mapped copy. Requires isGpu = false with Allocate.
Definition GPUScene.cpp:3497
BindlessPool * GetTexture3DPool()
Definition GPUScene.cpp:3569
void BuildBLAS(RHICommandList *cmd)
Definition GPUScene.cpp:3529
void DbgGetMemoryStatistics(Vector< MemoryStat > &outStats) const
Definition GPUScene.cpp:3471
Vector< GSMaterial > mCommittedMaterials
Definition GPUScene.hpp:429
RHIBuffer * GetPrimitiveBuffer() const
Definition GPUScene.hpp:384
void EndDynamicTextureGPU(RHICommandList *cmd, bool is3D, DynamicTextureGPUAccess access)
Definition GPUScene.cpp:3517
void UpdateDynamicTextureCPU(TextureHandle handle, FTexture const &source)
Host-mapped copy. Requires isGpu = false with Allocate.
Definition GPUScene.cpp:3502
void BeginDynamicUpdate()
Definition GPUScene.cpp:3483
uint32_t GetLightCount() const
Definition GPUScene.hpp:374
void UploadDynamicGeometryCPU(RHICommandList *cmd)
Commits host-side geometry and texture updates. GPU-side updates are not required to be committed,...
Definition GPUScene.cpp:3511
void BeginDynamicTextureGPU(RHICommandList *cmd, bool is3D, DynamicTextureGPUAccess access)
Definition GPUScene.cpp:3513
RHIDeviceScopedHandle< RHIBuffer > mSobolMatricesBuffer
Definition GPUScene.hpp:437
void EndDynamicUpdate()
Definition GPUScene.cpp:3510
RHIDeviceScopedHandle< RHIBuffer > mFoundationDefaultBufferFloat
Definition GPUScene.hpp:438
void UpdateUBO(RendererUBO &globals) const
Definition GPUScene.cpp:989
void Reset()
Definition GPUScene.cpp:3478
TextureHandle mLUTGGXEavgIndex
Definition GPUScene.hpp:446
TextureHandle mLUTSheenLTCIndex
Definition GPUScene.hpp:452
bool NeedsLightBVHRefit() const
Definition GPUScene.cpp:3550
uint32_t mEnvMapPrefilteredMips
Definition GPUScene.hpp:457
GSMaterial GetMaterial(uint32_t index) const
Definition GPUScene.hpp:375
RHIBuffer * GetSobolMatricesBuffer() const
Definition GPUScene.hpp:417
Result UploadEnvironmentMap(FTexture const &source)
Definition GPUScene.cpp:3455
void Collect()
Garbage-collects geometry and textures no longer referenced by the committed scene tables.
Definition GPUScene.cpp:3477
GSInstance GetInstance(uint32_t index) const
Definition GPUScene.hpp:355
RHIBuffer * GetLightBVHBitmaskBuffer() const
Definition GPUScene.cpp:3547
void CompleteDynamicTextureGPU(TextureHandle handle, DynamicTextureGPUAccess access)
Definition GPUScene.cpp:3525
Result Allocate(uint32_t vertexCount, uint32_t indexCount, GeometryHandle &outHandle, bool isGpu=false)
Allocates a dynamic geometry handle.
Definition GPUScene.cpp:3419
uint32_t GetDynamicRefitCount() const
Definition GPUScene.cpp:3530
RHITexture * ResolveDynamicTextureGPU(TextureHandle handle, RHITextureUsage requiredUsage) const
Definition GPUScene.cpp:3521
TextureHandle mEnvMapMarginalCDFIndex
Definition GPUScene.hpp:455
void UploadDynamicTexturesCPU(RHICommandList *cmd)
Definition GPUScene.cpp:3512
uint32_t GetLightBVHFirstNodeIndex() const
Definition GPUScene.cpp:3565
static size_t CalculateMeshPrimitiveSize(FSerializedMesh const &src)
Definition GPUScene.cpp:447
uint32_t InstanceFromTLAS(uint32_t tlasID) const
Definition GPUScene.hpp:362
BindlessPool * GetTexture2DPool()
Definition GPUScene.cpp:3568
GSLight GetLight(uint32_t index) const
Definition GPUScene.hpp:368
TextureHandle mLUTGGXEIORInvIndex
Definition GPUScene.hpp:451
Result
Definition GPUScene.hpp:195
Vector< GSLight > mCommittedLights
Definition GPUScene.hpp:428
UniquePtr< GPUSceneImpl > mImpl
Definition GPUScene.hpp:423
void Join()
Definition GPUScene.cpp:3453
Result Poll(size_t timeout)
Definition GPUScene.cpp:3454
RHIBuffer * GetLightBuffer() const
Definition GPUScene.cpp:3543
RHIBuffer * GetEmissiveClusterBuffer() const
Definition GPUScene.cpp:3544
TextureHandle mLUTGGXEIndex
Definition GPUScene.hpp:445
TextureHandle mEnvMapIndex
Definition GPUScene.hpp:454
Result Query(GeometryHandle handle) const
Definition GPUScene.cpp:3451
float mEnvMapAverageRadiance
Definition GPUScene.hpp:459
uint32_t mLastTLASInstancesCount
Definition GPUScene.hpp:435
RHITexture * GetFoundationDefaultTexture2D() const
Definition GPUScene.cpp:3336
void UpdateDynamicMeshCPU(GeometryHandle handle, Span< const FQVertex > vertices={}, Span< const uint32_t > indices={})
Host-mapped copy. Requires isGpu = false with Allocate.
Definition GPUScene.cpp:3492
bool HasDynamicGeometry() const
Definition GPUScene.cpp:3480
RHITexture * GetFoundationDefaultTexture2DFloat() const
Definition GPUScene.cpp:3341
uint32_t UpdateDynamicTextureGPU(TextureHandle handle, DynamicTextureGPUAccess access=DynamicTextureGPUAccess::UAV)
Device local writes. Requires isGpu = true with Allocate.
Definition GPUScene.cpp:3506
Vector< GSInstance > mCommittedInstances
Definition GPUScene.hpp:427
TextureHandle mFoundationDefaultTexture2DFloatIndex
Definition GPUScene.hpp:443
RHIBuffer * GetDynamicPrimitiveBuffer() const
Definition GPUScene.cpp:3533
uint32_t GetDynamicRebuildCount() const
Definition GPUScene.cpp:3531
DynamicTextureGPUAccess
Definition GPUScene.hpp:190
bool HasEnvironmentMap() const
Definition GPUScene.hpp:231
RHIBuffer * GetLightBVHNodeBuffer() const
Definition GPUScene.cpp:3545
TLASBuildResult
Definition GPUScene.hpp:292
bool HasCurveGeometry() const
Definition GPUScene.cpp:3482
RHIDeviceScopedHandle< RHIBuffer > mPrimitiveBuffer
Definition GPUScene.hpp:433
void UpdateDynamicCurveGPU(GeometryHandle handle, bool updateVertices, bool updateIndices, bool updateLeaves)
Device local writes. Requires isGpu = true with Allocate.
Definition GPUScene.cpp:3488
TextureHandle mLUTGGXEIORInvavgIndex
Definition GPUScene.hpp:448
GSOffsetCount GetLightBVHDistantNodes() const
Definition GPUScene.cpp:3567
uint32_t GetLightBVHRefitLevelOffset(uint32_t level) const
Definition GPUScene.cpp:3555
Vector< uint32_t > mTLASInstanceMap
Definition GPUScene.hpp:431
TextureHandle mFoundationDefaultTexture2DIndex
Definition GPUScene.hpp:442
RHIBuffer * GetInstanceBuffer() const
Definition GPUScene.cpp:3541
void ResolveGeometry(GeometryHandle handle, uint32_t &outPrimitiveOffset, uint32_t &outPrimitiveType, GSInstanceFlags &outPrimitiveFlags) const
Definition GPUScene.cpp:3461
GPUSceneTables BeginScene(uint32_t instanceCount, uint32_t materialCount, uint32_t lightCount)
Definition GPUScene.cpp:3457
UpdateResult EndScene(GPUSceneTables &tables)
Definition GPUScene.cpp:3470
TLASBuildResult BuildTLAS(RHICommandList *cmd, bool update=false)
Definition GPUScene.cpp:3473
RHIBuffer * GetLightBVHGlobalIndexBuffer() const
Definition GPUScene.cpp:3548
RHIBuffer * GetFoundationDefaultBufferFloat() const
Definition GPUScene.hpp:410
static size_t CalculateCurvePrimitiveSize(FSerializedCurve const &src)
Definition GPUScene.cpp:455
void UpdateDynamicMeshGPU(GeometryHandle handle, bool updateVertices, bool updateIndices)
Device local writes. Requires isGpu = true with Allocate.
Definition GPUScene.cpp:3484
RHIBuffer * GetLightBVHLightIndexBuffer() const
Definition GPUScene.cpp:3546
UpdateResult mLastUpdateResult
Definition GPUScene.hpp:425
uint32_t GetLightBVHRefitLevelCount() const
Definition GPUScene.cpp:3551
uint32_t GetInstanceCount() const
Definition GPUScene.hpp:361
RHIAccelerationStructure * GetTLAS() const
Definition GPUScene.hpp:412
uint32_t GetLightBVHRefitLevelNodeCount(uint32_t level) const
Definition GPUScene.cpp:3560
uint32_t GetLightCapacity() const
Definition GPUScene.cpp:3572
String DbgGetBufferStatistics() const
Definition GPUScene.cpp:3472
uint32_t GetMaterialCount() const
Definition GPUScene.hpp:381
bool HasDynamicTextures() const
Definition GPUScene.cpp:3481
RHIDeviceScopedHandle< RHIAccelerationStructure > mTLAS
Definition GPUScene.hpp:434
RHIBuffer * GetDynamicStagingBuffer() const
Definition GPUScene.cpp:3537
std::vector< T, StlAllocator< T > > Vector
std::vector with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:149
std::basic_string< char, std::char_traits< char >, StlDefaultAllocator< char > > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:120
std::array< T, Size > Array
Alias for std::array
Definition Container.hpp:45
std::unique_ptr< T, Deleter > UniquePtr
std::unique_ptr with custom deleter that uses a Foundation::Core::Allocator to deallocate memory.
Definition Allocator.hpp:180
std::span< T > Span
Alias for std::span
Definition Container.hpp:62
vec3 float3
Definition Math.hpp:26
vec4 float4
Definition Math.hpp:25
Definition Serialization.hpp:119
Definition Texture.hpp:46
Definition Texture.hpp:79
Definition Resource.hpp:142
Definition GPUScene.hpp:170
uint32_t dynamicStagingFramesInFlight
Definition GPUScene.hpp:183
uint32_t materialBudget
Definition GPUScene.hpp:173
uint32_t tlasScratchBudget
Definition GPUScene.hpp:180
uint32_t dynamicGeometryBudget
Definition GPUScene.hpp:181
uint32_t primitiveBudget
Definition GPUScene.hpp:171
uint32_t dynamicStagingBudget
Definition GPUScene.hpp:182
uint32_t tlasBudget
Definition GPUScene.hpp:179
uint32_t tlasInstanceBudget
Definition GPUScene.hpp:178
uint32_t geometryBudget
Definition GPUScene.hpp:177
uint32_t texturesBudget
Definition GPUScene.hpp:176
uint32_t lightBudget
Definition GPUScene.hpp:174
uint32_t emissiveClusterBudget
Definition GPUScene.hpp:175
uint32_t instanceBudget
Definition GPUScene.hpp:172
Definition GPUScene.cpp:114
Definition GPUScene.hpp:268
Span< GSInstance > instances
Definition GPUScene.hpp:269
GSOffsetCount materialRange
Definition GPUScene.hpp:273
GSOffsetCount instanceRange
Definition GPUScene.hpp:272
Span< GSLight > lights
Definition GPUScene.hpp:271
GSOffsetCount lightRange
Definition GPUScene.hpp:274
Span< GSMaterial > materials
Definition GPUScene.hpp:270
Definition GPUScene.hpp:283
size_t bytes
Definition GPUScene.hpp:285
String name
Definition GPUScene.hpp:284
Definition GPUScene.hpp:251
GSOffsetCount distantNodes
Definition GPUScene.hpp:255
GSOffsetCount lightIndices
Definition GPUScene.hpp:257
GSOffsetCount nodeIndices
Definition GPUScene.hpp:254
GSOffsetCount bitmasks
Definition GPUScene.hpp:256
GSOffsetCount nodes
Definition GPUScene.hpp:253
uint32_t valid
Definition GPUScene.hpp:252
GSOffsetCount globalLightIndices
Definition GPUScene.hpp:258
Definition GPUScene.hpp:245
GSOffsetCount instances
Definition GPUScene.hpp:246
uint64_t lightsHash
Definition GPUScene.hpp:263
GSOffsetCount lights
Definition GPUScene.hpp:248
uint64_t instancesHash
Definition GPUScene.hpp:261
GSOffsetCount materials
Definition GPUScene.hpp:247
GSOffsetCount emissiveClusters
Definition GPUScene.hpp:249
uint64_t materialsHash
Definition GPUScene.hpp:262
struct GPUScene::UpdateResult::LightBVH lightBVH
uint64_t emissiveClustersHash
Definition GPUScene.hpp:264
Definition GPUScene.hpp:154
GSOffsetCount indices
Definition GPUScene.hpp:156
GSOffsetCount leaves
Definition GPUScene.hpp:157
GSOffsetCount vertices
Definition GPUScene.hpp:155
Definition GPUScene.hpp:144
uint32_t triCount
Definition GPUScene.hpp:148
float3 origin
Definition GPUScene.hpp:150
float flux
Definition GPUScene.hpp:149
uint32_t aliasOffset
Definition GPUScene.hpp:147
uint32_t instanceIndex
Definition GPUScene.hpp:145
float3 extent
Definition GPUScene.hpp:151
uint32_t meshletIndex
Definition GPUScene.hpp:146
Definition GPUScene.hpp:80
float3 scale
Definition GPUScene.hpp:84
float3 transform
Definition GPUScene.hpp:82
uint32_t resourceOffset
Definition GPUScene.hpp:85
uint32_t emissiveClusterOffset
Definition GPUScene.hpp:89
uint32_t resourceIndex
Definition GPUScene.hpp:87
uint32_t materialIndex
Definition GPUScene.hpp:86
quat rotation
Definition GPUScene.hpp:83
uint32_t type
Definition GPUScene.hpp:88
Definition GPUScene.hpp:131
float3 dpdu
Definition GPUScene.hpp:140
float3 dpdv
Definition GPUScene.hpp:141
float power
Definition GPUScene.hpp:134
float3 position
Definition GPUScene.hpp:135
float4 params
Definition GPUScene.hpp:139
float3 color
Definition GPUScene.hpp:133
float3 direction
Definition GPUScene.hpp:136
uint32_t flags
Definition GPUScene.hpp:132
Definition GPUScene.hpp:93
uint32_t specularColorTexture
Definition GPUScene.hpp:101
uint32_t normalTexture
Definition GPUScene.hpp:97
uint32_t anisotropyTexture
Definition GPUScene.hpp:102
float specularFactor
Definition GPUScene.hpp:113
float sheenRoughnessFactor
Definition GPUScene.hpp:118
float hairBetaM
Definition GPUScene.hpp:126
float3 specularColorFactor
Definition GPUScene.hpp:114
float3 sheenColorFactor
Definition GPUScene.hpp:117
float4 baseColorFactor
Definition GPUScene.hpp:107
float3 subsurfaceRadius
Definition GPUScene.hpp:124
float anisotropyStrength
Definition GPUScene.hpp:115
float clearcoatFactor
Definition GPUScene.hpp:119
float3 emissiveFactor
Definition GPUScene.hpp:108
uint32_t clearcoatRoughnessTexture
Definition GPUScene.hpp:106
float clearcoatRoughnessFactor
Definition GPUScene.hpp:120
float3 subsurfaceColor
Definition GPUScene.hpp:123
uint32_t clearcoatTexture
Definition GPUScene.hpp:105
float anisotropyRotation
Definition GPUScene.hpp:116
uint32_t shaderBlockID
Definition GPUScene.hpp:125
uint32_t sheenColorTexture
Definition GPUScene.hpp:103
float transmissionFactor
Definition GPUScene.hpp:111
float metallicFactor
Definition GPUScene.hpp:109
uint32_t emissiveTexture
Definition GPUScene.hpp:95
uint32_t baseColorTexture
Definition GPUScene.hpp:94
float normalScale
Definition GPUScene.hpp:98
uint32_t transmissionTexture
Definition GPUScene.hpp:99
uint32_t sheenRoughnessTexture
Definition GPUScene.hpp:104
uint32_t metallicRoughnessTexture
Definition GPUScene.hpp:96
float ior
Definition GPUScene.hpp:112
float subsurfaceScale
Definition GPUScene.hpp:122
uint32_t specularTexture
Definition GPUScene.hpp:100
float hairBetaN
Definition GPUScene.hpp:127
float subsurfaceFactor
Definition GPUScene.hpp:121
float roughnessFactor
Definition GPUScene.hpp:110
float hairAlpha
Definition GPUScene.hpp:128
Definition GPUScene.hpp:40
uint32_t offset
Definition GPUScene.hpp:41
uint32_t count
Definition GPUScene.hpp:42
Definition GPUScene.hpp:47
bool IsValid() const
Definition GPUScene.hpp:50
uint32_t index
Definition GPUScene.hpp:48
uint32_t version
Definition GPUScene.hpp:49
Definition Renderer.hpp:11
Definition GPUScene.hpp:54
bool IsValid() const
Definition GPUScene.hpp:58
bool is3D
Definition GPUScene.hpp:57
uint32_t version
Definition GPUScene.hpp:56
uint32_t index
Definition GPUScene.hpp:55