Foundation
Loading...
Searching...
No Matches
GPUScene.hpp
Go to the documentation of this file.
1#pragma once
2#include <Core/Allocator.hpp>
4#include <Core/JobSystem.hpp>
5#include <Core/Logging.hpp>
8#include <cstddef>
9#include "Curve.hpp"
10#include "Mesh.hpp"
11#include "Precompute.hpp"
12#include "Shaders/Flags.h"
13#include "Texture.hpp"
14
15using namespace Math;
16using namespace RenderCore;
17struct RendererUBO;
18struct GPUSceneImpl;
19
20// Must match the procedural hit-group bindings in Render/Pathtracer.cpp.
21inline constexpr uint32_t kRectLightSBTOffset = 3u;
22inline constexpr uint32_t kDiskLightSBTOffset = 4u;
23inline constexpr uint32_t kCurveSBTOffset = 5u;
24inline constexpr uint32_t kSphereLightSBTOffset = 6u;
25inline constexpr uint32_t kGSInstanceTypeMesh = 0u;
26inline constexpr uint32_t kGSInstanceTypeCurve = 1u;
27inline constexpr uint32_t kGSInstanceTypeMask = 0xFFu;
28// Light Flags
29inline constexpr uint32_t kGSLightTypeMask = 0xFFu;
30inline constexpr uint32_t kGSLightTypeEnvironment = 0u;
31inline constexpr uint32_t kGSLightTypeDirectional = 1u;
32inline constexpr uint32_t kGSLightTypePoint = 2u;
33inline constexpr uint32_t kGSLightTypeSpot = 3u;
34inline constexpr uint32_t kGSLightTypeDisk = 4u;
35inline constexpr uint32_t kGSLightTypeRect = 5u;
36inline constexpr uint32_t kLightSelectionClusterBit = 1u << 31u;
37inline constexpr uint32_t kLightSelectionIndexMask = ~kLightSelectionClusterBit;
38
40{
41 uint32_t offset{0u};
42 uint32_t count{0u};
43};
44static_assert(sizeof(GSOffsetCount) == 8);
45
47{
48 uint32_t index{~0u};
49 uint32_t version{0};
50 [[nodiscard]] bool IsValid() const { return index != ~0u; }
51};
52
54{
55 uint32_t index{~0u};
56 uint32_t version{0};
57 bool is3D{false};
58 [[nodiscard]] bool IsValid() const { return index != ~0u; }
59};
60
61BITMASK_ENUM_BEGIN(GSData, uint8_t)
62Mesh = 1 << 0
64
65#pragma pack(push, 1)
66struct GSMesh
67{
68 GSOffsetCount vertices; // absolute byte offset + count in Primitive buffer (@ref FVertex / FQVertex)
69 GSOffsetCount indices; // LOD0 UINT32 indices
70 GSOffsetCount groups; // DAG LOD Group @ref FLODGroup
71 GSOffsetCount meshlets; // DAG Meshlets @ref FMeshlet
72 uint32_t meshletVtxOffset;
73 uint32_t meshletTriOffset;
74 uint32_t meshletGlobalIndex;
75 GSOffsetCount emissiveMeshlets;
76 GSOffsetCount emissiveAliases;
77 GSOffsetCount emissivePrimitiveMap;
78 float3 boundsCenter;
79 float3 boundsExtent;
80};
82{
83 // TRS
84 float3 transform{0, 0, 0};
85 quat rotation{0, 0, 0, 1};
86 float3 scale{1, 1, 1};
87 uint32_t resourceOffset{UINT32_MAX}; // Mesh or curve set offset in Primitive buffer (bytes)
88 uint32_t materialIndex{0u}; // In Material buffer (offset)
89 uint32_t resourceIndex{UINT32_MAX}; // CPU side resource index, see @ref Geometry
91 uint32_t emissiveClusterOffset{UINT32_MAX};
92};
93// XXX: Uber. Super, even. Surely this works for all our needs...
133{
134 uint32_t flags; // type in low byte; see GSLightFlagsBits
135 float3 color; // Normalized RGB color
136 float power; // Radiant power (type-dependent unit)
139 // Directional: x=angularDiameter. Point: x=radius, w=range. Spot: x=radius, y=innerCos, z=outerCos, w=range.
140 // Disk: xy=radius. Environment: x=azimuthOffset, y=averageRadiance, 0 when solid color
142 float3 dpdu; // tangent u-axis (Rect: half-extent u)
143 float3 dpdv; // tangent v-axis (Rect: half-extent v)
144};
156{
157 GSOffsetCount vertices; // FCurveDOTSVertex
158 GSOffsetCount indices; // uint32_t, 12 indices per leaf
159 GSOffsetCount leaves; // FCurveLeaf
160};
161#pragma pack(pop)
162static_assert(sizeof(GSMesh) == 92);
163static_assert(sizeof(GSInstance) == 60);
164static_assert(sizeof(GSMaterial) == 192);
165static_assert(sizeof(GSLight) == 84);
166static_assert(sizeof(GSEmissiveCluster) == 44);
167static_assert(sizeof(GSCurveSet) == 24);
168static_assert(sizeof(FCurveDOTSVertex) == 8);
169static_assert(sizeof(FCurveLeaf) == 40);
170
172{
173 uint32_t primitiveBudget = 16 * (1u << 20); // 16MB
174 uint32_t instanceBudget = static_cast<uint32_t>(1e4); // # of GSInstance elements (ring)
175 uint32_t materialBudget = static_cast<uint32_t>(1e3); // # of materials (ring)
176 uint32_t lightBudget = static_cast<uint32_t>(1e4); // # of lights (ring)
177 uint32_t emissiveClusterBudget = static_cast<uint32_t>(1e5);
178 uint32_t texturesBudget = static_cast<uint32_t>(1e3); // # of textures
179 uint32_t geometryBudget = static_cast<uint32_t>(1e4); // # of geometry (ring)
180 uint32_t tlasInstanceBudget = static_cast<uint32_t>(1e4); // # of TLAS instances (ring)
181 uint32_t tlasBudget = 16 * (1u << 20); // 16MB
182 uint32_t tlasScratchBudget = 32 * (1u << 20); // 32MB (ring)
183 uint32_t dynamicGeometryBudget = 0; // device-local bytes (0 = disabled)
184 uint32_t dynamicStagingBudget = 0; // CPU staging buffer size for dynamic geometry (0 = disabled)
185 uint32_t dynamicStagingFramesInFlight = 1; // CPU staging frames in flight
186};
187
188BITMASK_ENUM_BEGIN(GPUSceneUpdateFlags, uint32_t)
191
192constexpr GPUSceneUpdateFlagsBits kDefaultGPUSceneUpdateFlags =
193 GPUSceneUpdateFlagsBits::LBVH_IncludeEmissiveClusters;
194
196{
197public:
199 {
200 UAV,
201 RTV
202 };
203 enum class Result
204 {
205 Ready,
206 InProgress,
207 InvalidInput,
208 InvalidHandle,
209 OutOfMemory,
210 DecodeFailed,
211 Cancelled,
212 };
213
214 [[nodiscard]] static size_t CalculateMeshPrimitiveSize(FSerializedMesh const& src);
215 [[nodiscard]] static size_t CalculateCurvePrimitiveSize(FSerializedCurve const& src);
216
217 GPUScene(RHIDevice* device, JobSystem* jobs, Allocator* allocator, GPUSceneDesc const& desc,
218 AllocatorStack* frameScratch = nullptr);
220
221 Result Upload(FBlobDeserializer* blobs, FSerializedMesh const& source, GeometryHandle& outHandle);
222 Result Upload(FImportedMesh const& source, GeometryHandle& outHandle);
223
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,
230 bool isGpu = false);
231 Result Allocate(RHITextureDesc const& desc, TextureHandle& outHandle, bool isGpu = false, const char* debugName = nullptr);
232
233 Result Upload(FBlobDeserializer* blobs, FSerializedCurve const& source, GeometryHandle& outHandle);
234
235 Result Upload(FBlobDeserializer* blobs, FSerializedTexture const& source, TextureHandle& outTexture,
236 const char* debugName = nullptr, bool pinned = false);
237 Result Upload(FTexture const& source, TextureHandle& outTexture, const char* debugName = nullptr,
238 bool pinned = false);
239 Result UploadEnvironmentMap(FTexture const& source);
240 [[nodiscard]] bool HasEnvironmentMap() const { return mEnvMapIndex.IsValid(); }
241
242 Result Upload(RHIBuffer* dst, Span<const unsigned char> data, uint32_t dstOffset = 0);
243
244 [[nodiscard]] Result Query(GeometryHandle handle) const;
245 [[nodiscard]] Result Query(TextureHandle texture) const;
246
247 void Join();
248 [[nodiscard]] Result Poll(size_t timeout);
249
250
251 void UpdateUBO(RendererUBO& globals) const;
252
254 {
269 /* Hashes */
270 uint64_t instancesHash{0u};
271 uint64_t materialsHash{0u};
272 uint64_t lightsHash{0u};
273 uint64_t emissiveClustersHash{0u};
274 };
275
282
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;
286 UpdateResult EndScene(GPUSceneTables& tables, GPUSceneUpdateFlags flag = kDefaultGPUSceneUpdateFlags);
287
289 {
291 size_t bytes;
292 };
293 void DbgGetMemoryStatistics(Vector<MemoryStat>& outStats) const;
294 [[nodiscard]] String DbgGetBufferStatistics() const;
295 [[nodiscard]] uint32_t GetLightCapacity() const;
296
298 {
299 Built,
300 Empty
301 };
302 [[nodiscard]] TLASBuildResult BuildTLAS(RHICommandList* cmd, bool update = false);
303 [[nodiscard]] bool HasDynamicGeometry() const;
304 [[nodiscard]] bool HasDynamicTextures() const;
305 [[nodiscard]] bool HasCurveGeometry() const;
306
307 void BeginDynamicUpdate();
311 void UpdateDynamicMeshCPU(GeometryHandle handle, Span<const FQVertex> vertices = {},
312 Span<const uint32_t> indices = {});
317 void UpdateDynamicMeshGPU(GeometryHandle handle, bool updateVertices, bool updateIndices);
321 void UpdateDynamicCurveCPU(GeometryHandle handle, Span<const FCurveDOTSVertex> vertices = {},
322 Span<const uint32_t> indices = {}, Span<const FCurveLeaf> leaves = {});
327 void UpdateDynamicCurveGPU(GeometryHandle handle, bool updateVertices, bool updateIndices, bool updateLeaves);
331 void UpdateDynamicTextureCPU(TextureHandle handle, FTexture const& source);
336 uint32_t UpdateDynamicTextureGPU(TextureHandle handle,
337 DynamicTextureGPUAccess access = DynamicTextureGPUAccess::UAV);
338 void EndDynamicUpdate();
339
344 void UploadDynamicGeometryCPU(RHICommandList* cmd);
345 void UploadDynamicTexturesCPU(RHICommandList* cmd);
346 void BeginDynamicTextureGPU(RHICommandList* cmd, bool is3D, DynamicTextureGPUAccess access);
347 void EndDynamicTextureGPU(RHICommandList* cmd, bool is3D, DynamicTextureGPUAccess access);
348 [[nodiscard]] RHITexture* ResolveDynamicTextureGPU(TextureHandle handle, RHITextureUsage requiredUsage) const;
349 void CompleteDynamicTextureGPU(TextureHandle handle, DynamicTextureGPUAccess access);
350
351 void BuildBLAS(RHICommandList* cmd);
352 [[nodiscard]] uint32_t GetDynamicRefitCount() const;
353 [[nodiscard]] uint32_t GetDynamicRebuildCount() const;
354
359 void Collect();
360
361 [[nodiscard]] GSInstance GetInstance(uint32_t index) const
362 {
363 CHECK_MSG(index < mCommittedInstances.size(), "GetInstance index {} out of range ({})", index,
364 mCommittedInstances.size());
365 return mCommittedInstances[index];
366 }
367 [[nodiscard]] uint32_t GetInstanceCount() const { return static_cast<uint32_t>(mCommittedInstances.size()); }
368 [[nodiscard]] uint32_t InstanceFromTLAS(uint32_t tlasID) const
369 {
370 if (tlasID >= mTLASInstanceMap.size())
371 return UINT32_MAX;
372 return mTLASInstanceMap[tlasID];
373 }
374 [[nodiscard]] GSLight GetLight(uint32_t index) const
375 {
376 CHECK_MSG(index < mCommittedLights.size(), "GetLight index {} out of range ({})", index,
377 mCommittedLights.size());
378 return mCommittedLights[index];
379 }
380 [[nodiscard]] uint32_t GetLightCount() const { return static_cast<uint32_t>(mCommittedLights.size()); }
381 [[nodiscard]] GSMaterial GetMaterial(uint32_t index) const
382 {
383 CHECK_MSG(index < mCommittedMaterials.size(), "GetMaterial index {} out of range ({})", index,
384 mCommittedMaterials.size());
385 return mCommittedMaterials[index];
386 }
387 [[nodiscard]] uint32_t GetMaterialCount() const { return static_cast<uint32_t>(mCommittedMaterials.size()); }
388
389 /* Geometry */
390 [[nodiscard]] RHIBuffer* GetPrimitiveBuffer() const { return mPrimitiveBuffer.Get(); }
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;
407 [[nodiscard]] GSOffsetCount GetLightBVHNodes() const;
408 [[nodiscard]] GSOffsetCount GetLightBVHDistantNodes() const;
409 /* Textures */
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;
416 [[nodiscard]] RHIBuffer* GetFoundationDefaultBufferFloat() const { return mFoundationDefaultBufferFloat.Get(); }
417 /* AS */
418 [[nodiscard]] RHIAccelerationStructure* GetTLAS() const
419 {
420 return mTLAS.IsValid() ? mTLAS.Get() : nullptr;
421 }
422 /* Samplers */
423 [[nodiscard]] RHIBuffer* GetSobolMatricesBuffer() const { return mSobolMatricesBuffer.Get(); }
424
425 void Reset();
426
427private:
428 friend struct GPUSceneImpl;
430
432 // Per-frame commits
436 // TLAS instanceID -> committed instance index
438 // Primitive buffer for geometries
441 uint32_t mLastTLASInstancesCount{0};
442 // Shared default resources
445
446public:
447 // Texture Handles
450 // Precomputed LUTs (texture2D pool)
455 // Precomputed LUTs (texture3D pool)
459 // Environment map (texture2D pool)
463 uint32_t mEnvMapPrefilteredMips{0u};
464 Array<float3, 9> mEnvSHCoeffs{};
465 float mEnvMapAverageRadiance{1.0f};
466};
467
470ENUM_NAME(InProgress)
471ENUM_NAME(InvalidInput)
472ENUM_NAME(InvalidHandle)
473ENUM_NAME(OutOfMemory)
474ENUM_NAME(DecodeFailed)
#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: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 Curve.hpp:11
Definition Curve.hpp:16
Definition Mesh.hpp:121
Definition Curve.hpp:26
Definition Mesh.hpp:100
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