16using namespace RenderCore;
72 uint32_t meshletVtxOffset;
73 uint32_t meshletTriOffset;
74 uint32_t meshletGlobalIndex;
162static_assert(
sizeof(GSMesh) == 92);
165static_assert(
sizeof(
GSLight) == 84);
214 [[nodiscard]]
static size_t CalculateMeshPrimitiveSize(
FSerializedMesh const& src);
215 [[nodiscard]]
static size_t CalculateCurvePrimitiveSize(
FSerializedCurve const& src);
228 Result Allocate(uint32_t vertexCount, uint32_t indexCount,
GeometryHandle& outHandle,
bool isGpu =
false);
229 Result Allocate(uint32_t vertexCount, uint32_t indexCount, uint32_t leafCount,
GeometryHandle& outHandle,
236 const char* debugName =
nullptr,
bool pinned =
false);
238 bool pinned =
false);
248 [[nodiscard]] Result Poll(
size_t timeout);
270 uint64_t instancesHash{0u};
271 uint64_t materialsHash{0u};
272 uint64_t lightsHash{0u};
273 uint64_t emissiveClustersHash{0u};
283 GPUSceneTables BeginScene(uint32_t instanceCount, uint32_t materialCount, uint32_t lightCount);
284 void ResolveGeometry(
GeometryHandle handle, uint32_t& outPrimitiveOffset, uint32_t& outPrimitiveType,
285 GSInstanceFlags& outPrimitiveFlags)
const;
294 [[nodiscard]]
String DbgGetBufferStatistics()
const;
295 [[nodiscard]] uint32_t GetLightCapacity()
const;
302 [[nodiscard]] TLASBuildResult BuildTLAS(
RHICommandList* cmd,
bool update =
false);
303 [[nodiscard]]
bool HasDynamicGeometry()
const;
304 [[nodiscard]]
bool HasDynamicTextures()
const;
305 [[nodiscard]]
bool HasCurveGeometry()
const;
307 void BeginDynamicUpdate();
317 void UpdateDynamicMeshGPU(
GeometryHandle handle,
bool updateVertices,
bool updateIndices);
327 void UpdateDynamicCurveGPU(
GeometryHandle handle,
bool updateVertices,
bool updateIndices,
bool updateLeaves);
337 DynamicTextureGPUAccess access = DynamicTextureGPUAccess::UAV);
338 void EndDynamicUpdate();
346 void BeginDynamicTextureGPU(
RHICommandList* cmd,
bool is3D, DynamicTextureGPUAccess access);
347 void EndDynamicTextureGPU(
RHICommandList* cmd,
bool is3D, DynamicTextureGPUAccess access);
349 void CompleteDynamicTextureGPU(
TextureHandle handle, DynamicTextureGPUAccess access);
352 [[nodiscard]] uint32_t GetDynamicRefitCount()
const;
353 [[nodiscard]] uint32_t GetDynamicRebuildCount()
const;
363 CHECK_MSG(index < mCommittedInstances.size(),
"GetInstance index {} out of range ({})", index,
364 mCommittedInstances.size());
365 return mCommittedInstances[index];
367 [[nodiscard]] uint32_t
GetInstanceCount()
const {
return static_cast<uint32_t
>(mCommittedInstances.size()); }
370 if (tlasID >= mTLASInstanceMap.size())
372 return mTLASInstanceMap[tlasID];
376 CHECK_MSG(index < mCommittedLights.size(),
"GetLight index {} out of range ({})", index,
377 mCommittedLights.size());
378 return mCommittedLights[index];
380 [[nodiscard]] uint32_t
GetLightCount()
const {
return static_cast<uint32_t
>(mCommittedLights.size()); }
383 CHECK_MSG(index < mCommittedMaterials.size(),
"GetMaterial index {} out of range ({})", index,
384 mCommittedMaterials.size());
385 return mCommittedMaterials[index];
387 [[nodiscard]] uint32_t
GetMaterialCount()
const {
return static_cast<uint32_t
>(mCommittedMaterials.size()); }
391 [[nodiscard]]
RHIBuffer* GetDynamicPrimitiveBuffer()
const;
392 [[nodiscard]]
RHIBuffer* GetDynamicStagingBuffer()
const;
393 [[nodiscard]]
RHIBuffer* GetInstanceBuffer()
const;
394 [[nodiscard]]
RHIBuffer* GetMaterialBuffer()
const;
395 [[nodiscard]]
RHIBuffer* GetLightBuffer()
const;
396 [[nodiscard]]
RHIBuffer* GetEmissiveClusterBuffer()
const;
397 [[nodiscard]]
RHIBuffer* GetLightBVHNodeBuffer()
const;
398 [[nodiscard]]
RHIBuffer* GetLightBVHLightIndexBuffer()
const;
399 [[nodiscard]]
RHIBuffer* GetLightBVHBitmaskBuffer()
const;
400 [[nodiscard]]
RHIBuffer* GetLightBVHGlobalIndexBuffer()
const;
401 [[nodiscard]]
RHIBuffer* GetLightBVHNodeIndexBuffer()
const;
402 [[nodiscard]]
bool NeedsLightBVHRefit()
const;
403 [[nodiscard]] uint32_t GetLightBVHRefitLevelCount()
const;
404 [[nodiscard]] uint32_t GetLightBVHRefitLevelOffset(uint32_t level)
const;
405 [[nodiscard]] uint32_t GetLightBVHRefitLevelNodeCount(uint32_t level)
const;
406 [[nodiscard]] uint32_t GetLightBVHFirstNodeIndex()
const;
410 [[nodiscard]] BindlessPool* GetTexture2DPool();
411 [[nodiscard]] BindlessPool* GetTexture3DPool();
412 [[nodiscard]] BindlessPool
const* GetTexture2DPool()
const;
413 [[nodiscard]] BindlessPool
const* GetTexture3DPool()
const;
414 [[nodiscard]]
RHITexture* GetFoundationDefaultTexture2D()
const;
415 [[nodiscard]]
RHITexture* GetFoundationDefaultTexture2DFloat()
const;
420 return mTLAS.IsValid() ? mTLAS.Get() :
nullptr;
441 uint32_t mLastTLASInstancesCount{0};
463 uint32_t mEnvMapPrefilteredMips{0u};
465 float mEnvMapAverageRadiance{1.0f};
#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
LBVH_IncludeEmissiveClusters
Definition GPUScene.hpp:189
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 GPUSceneUpdateFlagsBits kDefaultGPUSceneUpdateFlags
Definition GPUScene.hpp:192
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:196
TextureHandle mLUTGGXEIORIndex
Definition GPUScene.hpp:456
TextureHandle mEnvMapConditionalCDFIndex
Definition GPUScene.hpp:462
TextureHandle mLUTGGXEIORavgIndex
Definition GPUScene.hpp:453
Vector< GSMaterial > mCommittedMaterials
Definition GPUScene.hpp:435
RHIBuffer * GetPrimitiveBuffer() const
Definition GPUScene.hpp:390
uint32_t GetLightCount() const
Definition GPUScene.hpp:380
RHIDeviceScopedHandle< RHIBuffer > mSobolMatricesBuffer
Definition GPUScene.hpp:443
RHIDeviceScopedHandle< RHIBuffer > mFoundationDefaultBufferFloat
Definition GPUScene.hpp:444
TextureHandle mLUTGGXEavgIndex
Definition GPUScene.hpp:452
TextureHandle mLUTSheenLTCIndex
Definition GPUScene.hpp:458
GSMaterial GetMaterial(uint32_t index) const
Definition GPUScene.hpp:381
RHIBuffer * GetSobolMatricesBuffer() const
Definition GPUScene.hpp:423
GSInstance GetInstance(uint32_t index) const
Definition GPUScene.hpp:361
TextureHandle mEnvMapMarginalCDFIndex
Definition GPUScene.hpp:461
uint32_t InstanceFromTLAS(uint32_t tlasID) const
Definition GPUScene.hpp:368
GSLight GetLight(uint32_t index) const
Definition GPUScene.hpp:374
TextureHandle mLUTGGXEIORInvIndex
Definition GPUScene.hpp:457
Result
Definition GPUScene.hpp:204
Vector< GSLight > mCommittedLights
Definition GPUScene.hpp:434
UniquePtr< GPUSceneImpl > mImpl
Definition GPUScene.hpp:429
TextureHandle mLUTGGXEIndex
Definition GPUScene.hpp:451
TextureHandle mEnvMapIndex
Definition GPUScene.hpp:460
Vector< GSInstance > mCommittedInstances
Definition GPUScene.hpp:433
TextureHandle mFoundationDefaultTexture2DFloatIndex
Definition GPUScene.hpp:449
DynamicTextureGPUAccess
Definition GPUScene.hpp:199
bool HasEnvironmentMap() const
Definition GPUScene.hpp:240
TLASBuildResult
Definition GPUScene.hpp:298
RHIDeviceScopedHandle< RHIBuffer > mPrimitiveBuffer
Definition GPUScene.hpp:439
TextureHandle mLUTGGXEIORInvavgIndex
Definition GPUScene.hpp:454
Vector< uint32_t > mTLASInstanceMap
Definition GPUScene.hpp:437
TextureHandle mFoundationDefaultTexture2DIndex
Definition GPUScene.hpp:448
RHIBuffer * GetFoundationDefaultBufferFloat() const
Definition GPUScene.hpp:416
UpdateResult mLastUpdateResult
Definition GPUScene.hpp:431
uint32_t GetInstanceCount() const
Definition GPUScene.hpp:367
RHIAccelerationStructure * GetTLAS() const
Definition GPUScene.hpp:418
uint32_t GetMaterialCount() const
Definition GPUScene.hpp:387
RHIDeviceScopedHandle< RHIAccelerationStructure > mTLAS
Definition GPUScene.hpp:440
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:172
uint32_t dynamicStagingFramesInFlight
Definition GPUScene.hpp:185
uint32_t materialBudget
Definition GPUScene.hpp:175
uint32_t tlasScratchBudget
Definition GPUScene.hpp:182
uint32_t dynamicGeometryBudget
Definition GPUScene.hpp:183
uint32_t primitiveBudget
Definition GPUScene.hpp:173
uint32_t dynamicStagingBudget
Definition GPUScene.hpp:184
uint32_t tlasBudget
Definition GPUScene.hpp:181
uint32_t tlasInstanceBudget
Definition GPUScene.hpp:180
uint32_t geometryBudget
Definition GPUScene.hpp:179
uint32_t texturesBudget
Definition GPUScene.hpp:178
uint32_t lightBudget
Definition GPUScene.hpp:176
uint32_t emissiveClusterBudget
Definition GPUScene.hpp:177
uint32_t instanceBudget
Definition GPUScene.hpp:174
Definition GPUScene.cpp:117
Definition GPUScene.hpp:277
Span< GSInstance > instances
Definition GPUScene.hpp:278
Span< GSLight > lights
Definition GPUScene.hpp:280
Span< GSMaterial > materials
Definition GPUScene.hpp:279
Definition GPUScene.hpp:289
size_t bytes
Definition GPUScene.hpp:291
String name
Definition GPUScene.hpp:290
Definition GPUScene.hpp:260
GSOffsetCount distantNodes
Definition GPUScene.hpp:264
GSOffsetCount lightIndices
Definition GPUScene.hpp:266
GSOffsetCount nodeIndices
Definition GPUScene.hpp:263
GSOffsetCount bitmasks
Definition GPUScene.hpp:265
GSOffsetCount nodes
Definition GPUScene.hpp:262
GSOffsetCount globalLightIndices
Definition GPUScene.hpp:267
Definition GPUScene.hpp:254
GSOffsetCount instances
Definition GPUScene.hpp:255
GSOffsetCount lights
Definition GPUScene.hpp:257
GSOffsetCount materials
Definition GPUScene.hpp:256
GSOffsetCount emissiveClusters
Definition GPUScene.hpp:258
Definition GPUScene.hpp:156
GSOffsetCount indices
Definition GPUScene.hpp:158
GSOffsetCount leaves
Definition GPUScene.hpp:159
GSOffsetCount vertices
Definition GPUScene.hpp:157
Definition GPUScene.hpp:146
uint32_t triCount
Definition GPUScene.hpp:150
float3 origin
Definition GPUScene.hpp:152
float flux
Definition GPUScene.hpp:151
uint32_t aliasOffset
Definition GPUScene.hpp:149
uint32_t instanceIndex
Definition GPUScene.hpp:147
float3 extent
Definition GPUScene.hpp:153
uint32_t meshletIndex
Definition GPUScene.hpp:148
Definition GPUScene.hpp:82
float3 scale
Definition GPUScene.hpp:86
float3 transform
Definition GPUScene.hpp:84
uint32_t resourceOffset
Definition GPUScene.hpp:87
uint32_t emissiveClusterOffset
Definition GPUScene.hpp:91
uint32_t resourceIndex
Definition GPUScene.hpp:89
uint32_t materialIndex
Definition GPUScene.hpp:88
quat rotation
Definition GPUScene.hpp:85
uint32_t type
Definition GPUScene.hpp:90
Definition GPUScene.hpp:133
float3 dpdu
Definition GPUScene.hpp:142
float3 dpdv
Definition GPUScene.hpp:143
float power
Definition GPUScene.hpp:136
float3 position
Definition GPUScene.hpp:137
float4 params
Definition GPUScene.hpp:141
float3 color
Definition GPUScene.hpp:135
float3 direction
Definition GPUScene.hpp:138
uint32_t flags
Definition GPUScene.hpp:134
Definition GPUScene.hpp:95
uint32_t specularColorTexture
Definition GPUScene.hpp:103
uint32_t normalTexture
Definition GPUScene.hpp:99
uint32_t anisotropyTexture
Definition GPUScene.hpp:104
float specularFactor
Definition GPUScene.hpp:115
float sheenRoughnessFactor
Definition GPUScene.hpp:120
float hairBetaM
Definition GPUScene.hpp:128
float3 specularColorFactor
Definition GPUScene.hpp:116
float3 sheenColorFactor
Definition GPUScene.hpp:119
float4 baseColorFactor
Definition GPUScene.hpp:109
float3 subsurfaceRadius
Definition GPUScene.hpp:126
float anisotropyStrength
Definition GPUScene.hpp:117
float clearcoatFactor
Definition GPUScene.hpp:121
float3 emissiveFactor
Definition GPUScene.hpp:110
uint32_t clearcoatRoughnessTexture
Definition GPUScene.hpp:108
float clearcoatRoughnessFactor
Definition GPUScene.hpp:122
float3 subsurfaceColor
Definition GPUScene.hpp:125
uint32_t clearcoatTexture
Definition GPUScene.hpp:107
float anisotropyRotation
Definition GPUScene.hpp:118
uint32_t shaderBlockID
Definition GPUScene.hpp:127
uint32_t sheenColorTexture
Definition GPUScene.hpp:105
float transmissionFactor
Definition GPUScene.hpp:113
float metallicFactor
Definition GPUScene.hpp:111
uint32_t emissiveTexture
Definition GPUScene.hpp:97
uint32_t baseColorTexture
Definition GPUScene.hpp:96
float normalScale
Definition GPUScene.hpp:100
uint32_t transmissionTexture
Definition GPUScene.hpp:101
uint32_t sheenRoughnessTexture
Definition GPUScene.hpp:106
uint32_t metallicRoughnessTexture
Definition GPUScene.hpp:98
float ior
Definition GPUScene.hpp:114
float subsurfaceScale
Definition GPUScene.hpp:124
uint32_t specularTexture
Definition GPUScene.hpp:102
float hairBetaN
Definition GPUScene.hpp:129
float subsurfaceFactor
Definition GPUScene.hpp:123
float roughnessFactor
Definition GPUScene.hpp:112
float hairAlpha
Definition GPUScene.hpp:130
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