Foundation
Loading...
Searching...
No Matches
GPUScene.hpp
Go to the documentation of this file.
1#pragma once
2#include <cstddef>
3#include <Core/Allocator.hpp>
5#include <Core/Logging.hpp>
8#include "Curve.hpp"
9#include "Mesh.hpp"
10#include "Texture.hpp"
11#include "Precompute.hpp"
12
13using namespace Math;
14using namespace RenderCore;
15struct UBO;
16struct GPUSceneImpl;
17
18// Must match the procedural hit-group bindings in Render/Pathtracer.cpp.
19inline constexpr uint32_t kRectLightSBTOffset = 3u;
20inline constexpr uint32_t kDiskLightSBTOffset = 4u;
21inline constexpr uint32_t kCurveSBTOffset = 5u;
22inline constexpr uint32_t kGSInstanceTypeMesh = 0u;
23inline constexpr uint32_t kGSInstanceTypeCurve = 1u;
24// GSInstance::type low byte is the geometry kind; bit 8 flags CPU-updateable dynamic geometry
25// so shaders read its primitive data from the dynamic ring instead of the immutable buffer.
26inline constexpr uint32_t kGSInstanceTypeMask = 0xFFu;
27inline constexpr uint32_t kGSInstanceFlagDynamic = 0x100u;
28
35{
38 [[nodiscard]] bool IsValid() const { return index != ~0u; }
39};
48{
51 bool is3D{false};
52 [[nodiscard]] bool IsValid() const { return index != ~0u; }
53};
54
69
70#pragma pack(push, 1)
71struct GSMesh
72{
73 // Offsets are absolute, and are in Primitive buffer (bytes).
74 // @ref FVertex
77 // LOD0 UINT32 indices
80 // -- DAG LOD Group @ref FLODGroup
83 // -- DAG Meshlets @ref FMeshlet
88 // -- Global index (amongst all loaded meshes)
90};
92{
93 // TRS
94 float3 transform{0, 0, 0};
95 quat rotation{0, 0, 0, 1};
96 float3 scale{1, 1, 1};
97 uint32_t resourceOffset; // Mesh or curve set offset in Primitive buffer (bytes)
98 uint32_t materialIndex; // In Material buffer (offset)
99 uint32_t resourceIndex; // Debug use
101};
102// XXX: Uber. Super, even. Surely this works for all our needs...
141{
142 uint32_t type{0u}; // 0=Directional, 1=Point, 2=Spot, 3=Disk, 4=Rect
143 float3 color{1,1,1}; // Normalized RGB color
144 float power{1.0f}; // Radiant power (type-dependent unit)
147 float range{0.0f};
148 float spotInnerCosAngle{1.0f};
149 float spotOuterCosAngle{0.7071f};
150 // Area lights (Disk / Rect)
151 float3 dpdu{1,0,0}; // tangent u-axis (Rect: half-extent u)
152 float3 dpdv{0,1,0}; // tangent v-axis (Rect: half-extent v)
153 float2 radius{0.5f, 0.5f}; // Disk radius (x, y for ellipse)
155 float selectionWeight{0.0f};
156};
157#pragma pack(pop)
158static_assert(sizeof(GSMesh) == 44);
159static_assert(sizeof(GSInstance) == 56);
160static_assert(sizeof(GSMaterial) == 188);
161static_assert(sizeof(GSLight) == 96);
162
164{
165 uint32_t primitiveBudget = 16 * (1u << 20); // 16MB
166 uint32_t curveAABBBudget = 16 * (1u << 20); // 16MB
167 uint32_t instanceBudget = static_cast<uint32_t>(1e4); // # of GSInstance elements (ring)
168 uint32_t materialBudget = static_cast<uint32_t>(1e3); // # of materials (ring)
169 uint32_t lightBudget = static_cast<uint32_t>(1e4); // # of lights (ring)
170 uint32_t texturesBudget = static_cast<uint32_t>(1e3); // # of textures
171 // Max distinct geometries (meshes + curves). The residency/BLAS vectors the renderer
172 // reads are reserved to this so background uploads never reallocate them; uploads beyond
173 // it are rejected rather than risking a concurrent reallocation.
175 uint32_t tlasInstanceBudget = static_cast<uint32_t>(1e4); // # of TLAS instances (ring)
176 uint32_t tlasBudget = 16 * (1u << 20); // 16MB
177 uint32_t tlasScratchBudget = 32 * (1u << 20); // 32MB (ring)
178 // CPU-updateable dynamic geometry (deformation: skinning / sims / morphs). Quantized
179 // primitive bytes (header + verts + indices, no DAG/meshlets) live in a host-coherent ring
180 // sized `dynamicGeometryBudget` per frame slot, replicated across `framesInFlight + 1` slots.
181 // The BLAS is a single AllowUpdate AS refit in place each frame. Default 0 = feature off (no
182 // buffer allocated); examples / the editor opt in by sizing these explicitly.
183 uint32_t dynamicGeometryBudget = 0; // bytes per frame slot (0 = dynamic geometry disabled)
184 // The renderer's max frames in flight (its swapchain image count, @ref Renderer::GetFrameSwaps()).
185 // The dynamic ring is sized to framesInFlight + 1 slots and advanced once per frame: the CPU
186 // writes the next frame's slot before that frame's GPU fence, so one slot beyond the in-flight
187 // count keeps the write target clear of every slot the in-flight GPU frames are still reading
188 // (N+1 buffering for a non-blocking producer, mirroring the renderer's per-frame resources).
190};
191
218{
219public:
227 enum class Result
228 {
229 Ready,
236 Cancelled,
237 };
238
240 {
241 Uniform,
242 Power
243 };
245
248 [[nodiscard]] static size_t CalculateCurveAABBSize(FSerializedCurve const& src);
249
250 GPUScene(RHIDevice* device, Allocator* allocator, GPUSceneDesc const& desc,
251 AllocatorStack* frameScratch = nullptr);
253
254
292 const char* debugName = nullptr, bool pinned = false);
294 Result Upload(FTexture const& source, TextureHandle& outTexture, const char* debugName = nullptr,
295 bool pinned = false);
297 Result Upload(RHIBuffer* dst, Span<const unsigned char> data, uint32_t dstOffset = 0);
299 [[nodiscard]] Result Query(GeometryHandle handle) const;
301 [[nodiscard]] Result Query(TextureHandle texture) const;
306 void Join();
317 [[nodiscard]] Result Poll();
318
323 Result UploadViewLUTs(FTexture const& sdr, FTexture const& hdr);
328 Result UploadEnvMap(FTexture const& source);
329
339 void BuildUBO(UBO& globals, bool hdr) const;
340
355
380 GPUSceneTables BeginScene(uint32_t instanceCount, uint32_t materialCount, uint32_t lightCount);
386 UpdateResult EndScene(GPUSceneTables& tables);
387
389 {
391 size_t bytes;
392 };
396
398 {
399 Built,
400 Empty
401 };
411
412 /* --- Dynamic (CPU-updateable) geometry: per-frame deformation ---
413 * Per-frame contract (mirrors a renderer Begin/End frame bracket):
414 * BeginDynamicGeometryUpdate(); // once per frame, advances the ring slot
415 * for each deforming geo: fill UpdateDynamicGeometry(handle);
416 * EndDynamicGeometryUpdate(); // closes the window
417 * ... BeginScene/EndScene, then the graph's "Dynamic BLAS Refit" pass ...
418 * @ref UpdateDynamicGeometry may only be called inside the open window; the window state also
419 * guards the per-frame getters. */
421 [[nodiscard]] bool HasDynamicGeometry() const;
451
463 void Collect();
464
465 /* --- Committed scene reads (snapshots; index == TLAS instanceID for instances) --- */
467 {
468 CHECK_MSG(index < mCommittedInstances.size(), "GetInstance index {} out of range ({})", index,
469 mCommittedInstances.size());
470 return mCommittedInstances[index];
471 }
472 [[nodiscard]] uint32_t GetInstanceCount() const { return static_cast<uint32_t>(mCommittedInstances.size()); }
475 {
476 // pickID is a TLAS instanceID = index into the last build's written (ready) set.
477 if (pickID >= mPickMap.size())
478 return UINT32_MAX;
479 return mPickMap[pickID];
480 }
482 {
483 CHECK_MSG(index < mCommittedLights.size(), "GetLight index {} out of range ({})", index,
484 mCommittedLights.size());
485 return mCommittedLights[index];
486 }
487 [[nodiscard]] uint32_t GetLightCount() const { return static_cast<uint32_t>(mCommittedLights.size()); }
489 {
490 CHECK_MSG(index < mCommittedMaterials.size(), "GetMaterial index {} out of range ({})", index,
491 mCommittedMaterials.size());
492 return mCommittedMaterials[index];
493 }
494 [[nodiscard]] uint32_t GetMaterialCount() const { return static_cast<uint32_t>(mCommittedMaterials.size()); }
495
496 /* Geometry */
509 /* Textures */
510 [[nodiscard]] BindlessPool* GetTexture2DPool();
511 [[nodiscard]] BindlessPool* GetTexture3DPool();
524 // Environment map
525 [[nodiscard]] bool HasEnvMap() const { return mEnvMapIndex.IsValid(); }
538 /* AS */
540 {
541 // Returns the allocated TLAS whenever the scene has one, independent of how many
542 // instances are currently resident. This lets ray passes be built into the render
543 // graph up front; BuildTLAS keeps it valid (an empty 0-instance TLAS) while geometry
544 // streams in, so instances appear without a renderer rebuild.
545 return mTLAS.IsValid() ? mTLAS.Get() : nullptr;
546 }
547 /* Samplers */
549
550 void Reset();
551
552private:
553 friend struct GPUSceneImpl;
554
555 // Committed table snapshots (filled via BeginScene/EndScene). These are the
556 // authoritative CPU-side scene used by BuildTLAS, picking, and Collect(); they do
557 // not depend on ring memory that may be overwritten by a later commit.
561 // TLAS instanceID -> committed instance index, rebuilt each BuildTLAS. When some
562 // referenced geometry is not yet Ready those instances are skipped, so the TLAS id
563 // is no longer identical to the committed index and picking must go through this map.
565
566 // Plain handles backing the hot inline getters above; created/managed by GPUSceneImpl.
572 // Precomputed LUTs (texture2D pool)
577 // Precomputed LUTs (texture3D pool)
581 // Display transform 3D LUTs (texture3D pool)
583 // Shared default resources (texture2D pool)
586 // Environment map (texture2D pool)
590
592};
593
596 ENUM_NAME(InProgress)
597 ENUM_NAME(InvalidInput)
598 ENUM_NAME(InvalidHandle)
599 ENUM_NAME(OutOfMemory)
600 ENUM_NAME(DecodeFailed)
601 ENUM_NAME(SubmitFailed)
602 ENUM_NAME(Cancelled)
#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: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 Curve.hpp:27
Definition Mesh.hpp:98
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