Vulkan Schnee 0.0.1 (22840dc8)
High-performance rendering engine
Loading...
Searching...
No Matches
RenderData.h
1#pragma once
2#include <array>
3#include <cstddef> // for offsetof
4#include <glm/mat4x4.hpp>
5#include <vector>
6
15
16namespace Engine::Rendering
17{
18 // ============================================================================
19 // CPU-Side Data Structures
20 // ============================================================================
21
37
42 {
43 glm::mat4 modelMatrix;
44 std::vector<CpuPrimitiveData> primitives;
45 };
46
47 // Forward declaration for GPU buffer structs
48 namespace GpuBuffers
49 {
50 struct UnifiedMeshlet;
51 } // namespace GpuBuffers
52
60 {
61 std::vector<GpuBuffers::UnifiedMeshlet> meshletData;
62 uint32_t textureIndex = 0u;
63 std::vector<uint32_t> vertices;
64 std::vector<uint8_t> tris;
65 };
66
75 {
76 uint32_t meshGeometryId;
78 uint32_t meshletCount;
81 uint32_t vsIndexOffset;
82 uint32_t vsIndexCount;
84 uint32_t pipelineIndex;
87 bool hasLodData = false;
88 uint32_t boneVertexBaseOffset = 0;
89 uint32_t boneCount = 0;
90 uint32_t vertexCount = 0;
91 uint32_t singleMeshletGeoIndex = 0xFFFFFFFFu;
92 uint32_t clusterStartIndex = 0xFFFFFFFFu;
93 uint32_t clusterCount = 0;
94 uint32_t groupStartIndex = 0xFFFFFFFFu;
95 uint32_t groupCount = 0;
96
97 // Phase C (bindless geometry): device addresses of the per-slot GPU ranges. Populated during
98 // upload once the shared backing buffers exist (they still point into the shared append
99 // buffers for now; sub-step 2 swaps them for per-slot VkBuffers). A zero address means the
100 // range is not present for this geometry.
101 uint64_t meshletDataAddress = 0;
106 uint64_t vertexDataAddress = 0;
107 };
108
113 {
114 std::array<glm::vec4, 6> planes[2];
115 };
116
117 // ============================================================================
118 // GPU Buffer Data Structures (must match GLSL layouts)
119 // ============================================================================
120
121 namespace GpuBuffers
122 {
126 struct Dispatch
127 {
128 uint32_t groupSizeX = 0u;
129 uint32_t groupSizeY = 0u;
130 uint32_t groupSizeZ = 0u;
131 };
132
137 {
138 uint32_t meshletCount = 0u;
139 uint32_t offset = 0u;
140 };
141
149 struct alignas( 16 ) UnifiedMeshlet
150 {
151 uint32_t vertexCount;
152 uint32_t triangleCount;
155 uint32_t primitiveIndex;
156 uint32_t pipelineIndex;
159 uint32_t _padding[2]{};
160 };
161
162 static_assert( sizeof( UnifiedMeshlet ) == 48, "UnifiedMeshlet size mismatch" );
163
171 {
173 uint32_t meshletIndex = 0;
174 uint32_t pipelineIndex = 0;
175 };
176
181 {
182 uint32_t colorTextureId;
183 uint32_t materialId;
184 uint32_t shProbeIndex = 0;
185 uint32_t _padding = 0;
186 };
187
194 {
196 uint32_t objectIndex;
197 uint32_t _padding[3];
198 };
199
206 {
208 };
209
214 {
217 uint32_t meshletCount;
218 uint32_t pipelineID;
219 uint32_t _padding;
220 };
221
222 static_assert( sizeof( PrimitiveMeshletData ) == 24, "PrimitiveMeshletData size mismatch" );
223
228 {
229 uint32_t meshStartIndex;
230 uint32_t meshletCount;
231 uint32_t objectIndex;
232 };
233
238 {
240 uint32_t objectID;
241 uint32_t meshletIndex;
243 uint32_t _padding;
244 };
245
246 static_assert( sizeof( VisibleMeshletInfo ) == 24, "VisibleMeshletInfo size mismatch" );
247
252 {
253 uint32_t objectIndex;
254 uint32_t startMeshletId;
255 uint32_t meshletCount;
256 uint32_t _padding;
257 };
258
263 {
264 uint32_t objectCount;
266 };
267
280 {
282 static constexpr uint32_t FLAG_SKINNED = 1u << 0;
283 static constexpr uint32_t FLAG_RESIDENT = 1u << 1;
284
286 uint32_t meshletCount;
287 uint32_t pipelineIndex;
291 uint32_t clusterCount;
293 uint32_t groupCount;
294 uint32_t flags;
295 uint32_t boneCount;
300 uint32_t _padding;
301 };
302
303 static_assert( sizeof( MeshGeometryData ) == 104, "MeshGeometryData size mismatch" );
304
309 {
310 glm::mat4 worldMatrix;
311 uint32_t meshGeometryId;
312 uint32_t materialId;
313 uint32_t colorTextureId;
314 uint32_t _padding;
315 };
316
321 {
323 uint32_t instanceId;
324 uint32_t meshGeometryId;
325 uint32_t _padding[2]{};
326 };
327
332 {
333 uint32_t indexCount;
334 uint32_t firstIndex;
335 int32_t vertexOffset;
336 uint32_t pipelineIndex;
337 };
338
339 // ============================================================================
340 // GPU Material Data Structures (must match GLSL std430 layout)
341 // ============================================================================
342
348 struct alignas( 16 ) DiffuseFlatColorMaterial
349 {
350 glm::vec3 color;
351 float _padding;
352 };
353
354 static_assert( sizeof( DiffuseFlatColorMaterial ) == 16, "DiffuseFlatColorMaterial size mismatch" );
355
361 struct alignas( 16 ) DiffuseShaderMaterial
362 {
364 float _padding1[3];
365 glm::vec4 baseColorFactor;
366 };
367
368 static_assert( sizeof( DiffuseShaderMaterial ) == 32, "DiffuseShaderMaterial size mismatch" );
369 static_assert( offsetof( DiffuseShaderMaterial, baseColorFactor ) == 16, "baseColorFactor must be at offset 16" );
370
377 struct alignas( 16 ) PbrMaterial
378 {
383
384 glm::vec4 baseColorFactor;
385
386 glm::vec3 emissiveFactor;
388
391 float sh_scale;
393
394 uint32_t debug_mode;
395 uint32_t tone_mapping;
397 uint32_t hasLightmap;
398
400 float exposure;
401 uint32_t normalMapBC5;
402 uint32_t _padding[1];
403 };
404
405 static_assert( sizeof( PbrMaterial ) == 96, "PbrMaterial size mismatch with GLSL std430 layout" );
406 static_assert( offsetof( PbrMaterial, baseColorFactor ) == 16, "baseColorFactor must be at offset 16" );
407 static_assert( offsetof( PbrMaterial, emissiveFactor ) == 32, "emissiveFactor must be at offset 32 (16-byte aligned for std430 vec3)" );
408
412 struct alignas( 16 ) NormalsMaterial
413 {
414 uint32_t debug;
415 uint32_t _padding[3];
416 };
417
418 static_assert( sizeof( NormalsMaterial ) == 16, "NormalsMaterial size mismatch" );
419
420 // ============================================================================
421 // GPU Lighting Data Structures
422 // ============================================================================
423
429 struct alignas( 16 ) SHProbeData
430 {
431 glm::vec4 coefficients[9];
432 float scale;
434 float _padding0 = 1.0f;
435 uint32_t _padding1 = 0u;
436 };
437
438 static_assert( sizeof( SHProbeData ) == 160, "SHProbeData size mismatch" );
439
440 constexpr uint32_t MAX_DYNAMIC_POINT_LIGHTS = 64;
441
448 struct alignas( 16 ) DynamicPointLight
449 {
450 glm::vec4 positionRadius{ 0.0f };
451 glm::vec4 colorIntensity{ 0.0f };
452 };
453
454 static_assert( sizeof( DynamicPointLight ) == 32, "DynamicPointLight size mismatch" );
455
459 struct alignas( 16 ) DynamicPointLightBuffer
460 {
461 uint32_t pointLightCount = 0;
462 uint32_t _padding[3]{};
463 std::array<DynamicPointLight, MAX_DYNAMIC_POINT_LIGHTS> pointLights{};
464 };
465
466 static_assert(
468 "DynamicPointLightBuffer size mismatch"
469 );
470
477 struct alignas( 16 ) SunLightBuffer
478 {
479 glm::vec4 directionEnabled{ 0.0f, -1.0f, 0.0f, 0.0f };
480 glm::vec4 colorIntensity{ 1.0f, 1.0f, 1.0f, 0.0f };
481 glm::vec4 shadowParams{ 0.0f };
482 glm::vec4 lightmapShadowParams{ 1.0f, 1.0f, 0.0f, 0.0f };
483 };
484
485 static_assert( sizeof( SunLightBuffer ) == 64, "SunLightBuffer size mismatch" );
486
487 constexpr uint32_t MAX_SUN_SHADOW_CASCADES = 4u;
488
492 struct alignas( 16 ) SunShadowCascadeBuffer
493 {
494 std::array<glm::mat4, MAX_SUN_SHADOW_CASCADES> lightViewProj{};
495 glm::vec4 cascadeSplits{ 0.0f };
496 glm::vec4 params{ 0.0f };
497 glm::vec4 biasParams{ 0.0f };
498 glm::vec4 cameraForward{ 0.0f };
499 };
500
501 static_assert( sizeof( SunShadowCascadeBuffer ) == 320, "SunShadowCascadeBuffer size mismatch" );
502
503 // ============================================================================
504 // LOD (Level of Detail) Data Structures
505 // ============================================================================
506
516 {
518 float error;
520 uint32_t meshletIndex;
521 int32_t groupId;
523 uint32_t _padding[2]{};
524 };
525
526 static_assert( sizeof( ClusterLodData ) == 48, "ClusterLodData size mismatch" );
527
534 {
537 int32_t depth;
538 uint32_t _padding[2];
539 };
540
541 static_assert( sizeof( ClusterGroupData ) == 32, "ClusterGroupData size mismatch" );
542
549 {
553 uint32_t ditherEnabled;
554 glm::vec4 cameraPosition;
555 glm::vec2 screenSize;
556 glm::vec2 _padding;
557 };
558
559 static_assert( sizeof( LodConfigUBO ) == 48, "LodConfigUBO size mismatch" );
560
568 {
569 uint32_t primitiveID;
571 uint32_t clusterIndex;
573 uint32_t _padding;
574 };
575
576 static_assert( sizeof( ClusterSurvivor ) == 32, "ClusterSurvivor size mismatch" );
577
593
594 static_assert( sizeof( VisibleLodPrimitive ) == 32, "VisibleLodPrimitive size mismatch" );
595
596 } // namespace GpuBuffers
597
628
637
648
661
662} // namespace Engine::Rendering
constexpr uint32_t MAX_SUN_SHADOW_CASCADES
Definition RenderData.h:487
constexpr uint32_t MAX_DYNAMIC_POINT_LIGHTS
Definition RenderData.h:440
GpuBuffers::MeshGeometryData MeshGeometryData
Compatibility alias for GpuBuffers::MeshGeometryData.
Definition RenderData.h:621
GpuBuffers::ObjectCullingData ObjectCullingData
Compatibility alias for GpuBuffers::ObjectCullingData.
Definition RenderData.h:607
GpuBuffers::ClusterSurvivor ClusterSurvivor
Compatibility alias for GpuBuffers::ClusterSurvivor.
Definition RenderData.h:656
GpuBuffers::MeshletBounds MeshletBounds
Compatibility alias for GpuBuffers::MeshletBounds.
Definition RenderData.h:603
GpuBuffers::GpuMeshDescription GpuMeshDescription
Compatibility alias for GpuBuffers::GpuMeshDescription.
Definition RenderData.h:599
GpuBuffers::LodConfigUBO LodConfigUBO
Compatibility alias for GpuBuffers::LodConfigUBO.
Definition RenderData.h:654
GpuBuffers::ClusterLodData ClusterLodData
Compatibility alias for GpuBuffers::ClusterLodData.
Definition RenderData.h:650
GpuBuffers::VisibleLodPrimitive VisibleLodPrimitive
Compatibility alias for GpuBuffers::VisibleLodPrimitive.
Definition RenderData.h:658
GpuBuffers::DynamicPointLightBuffer DynamicPointLightBuffer
Compatibility alias for GpuBuffers::DynamicPointLightBuffer.
Definition RenderData.h:643
GpuBuffers::Dispatch Dispatch
Compatibility alias for GpuBuffers::Dispatch.
Definition RenderData.h:660
GpuBuffers::DynamicPointLight DynamicPointLight
Compatibility alias for GpuBuffers::DynamicPointLight.
Definition RenderData.h:641
GpuBuffers::ObjectCullingCounters ObjectCullingCounters
Compatibility alias for GpuBuffers::ObjectCullingCounters.
Definition RenderData.h:619
GpuBuffers::DiffuseShaderMaterial GpuDiffuseShaderMaterial
Compatibility alias for GpuBuffers::DiffuseShaderMaterial.
Definition RenderData.h:632
GpuBuffers::NormalsMaterial GpuNormalsMaterial
Compatibility alias for GpuBuffers::NormalsMaterial.
Definition RenderData.h:636
GpuBuffers::SHProbeData SHProbeData
Compatibility alias for GpuBuffers::SHProbeData.
Definition RenderData.h:639
GpuBuffers::PrimitiveMeshletData PrimitiveMeshletData
Compatibility alias for GpuBuffers::PrimitiveMeshletData.
Definition RenderData.h:611
GpuBuffers::InstanceData InstanceData
Compatibility alias for GpuBuffers::InstanceData.
Definition RenderData.h:623
GpuBuffers::SunLightBuffer SunLightBuffer
Compatibility alias for GpuBuffers::SunLightBuffer.
Definition RenderData.h:645
GpuBuffers::MeshUnpackingData MeshUnpackingData
Compatibility alias for GpuBuffers::MeshUnpackingData.
Definition RenderData.h:613
GpuBuffers::LocalBoundsData LocalBoundsData
Compatibility alias for GpuBuffers::LocalBoundsData.
Definition RenderData.h:609
GpuBuffers::VisibleMeshletInfo VisibleMeshletInfo
Compatibility alias for GpuBuffers::VisibleMeshletInfo.
Definition RenderData.h:615
GpuBuffers::VisibleMeshletRange VisibleMeshletRange
Compatibility alias for GpuBuffers::VisibleMeshletRange.
Definition RenderData.h:617
GpuBuffers::InstanceCullingData InstanceCullingData
Compatibility alias for GpuBuffers::InstanceCullingData.
Definition RenderData.h:625
GpuBuffers::SunShadowCascadeBuffer SunShadowCascadeBuffer
Compatibility alias for GpuBuffers::SunShadowCascadeBuffer.
Definition RenderData.h:647
GpuBuffers::ClusterGroupData ClusterGroupData
Compatibility alias for GpuBuffers::ClusterGroupData.
Definition RenderData.h:652
GpuBuffers::UnifiedMeshlet UnifiedMeshlet
Compatibility alias for GpuBuffers::UnifiedMeshlet.
Definition RenderData.h:601
GpuBuffers::PbrMaterial GpuPbrMaterial
Compatibility alias for GpuBuffers::PbrMaterial.
Definition RenderData.h:634
GpuBuffers::DiffuseFlatColorMaterial GpuDiffuseFlatColorMaterial
Compatibility alias for GpuBuffers::DiffuseFlatColorMaterial.
Definition RenderData.h:630
GpuBuffers::SingleMeshletGeometryData SingleMeshletGeometryData
Compatibility alias for GpuBuffers::SingleMeshletGeometryData.
Definition RenderData.h:627
GpuBuffers::MeshPrimitiveRenderData MeshPrimitiveRenderData
Compatibility alias for GpuBuffers::MeshPrimitiveRenderData.
Definition RenderData.h:605
CPU-side mesh instance data before conversion to renderer GPU buffers.
Definition RenderData.h:42
std::vector< CpuPrimitiveData > primitives
Primitive records that belong to this mesh instance.
Definition RenderData.h:44
glm::mat4 modelMatrix
Local-to-world transform for all primitives in the mesh.
Definition RenderData.h:43
CPU-side render metadata for one mesh primitive.
Definition RenderData.h:29
uint32_t primitiveIndex
Index used by shader buffers to look up per-primitive data.
Definition RenderData.h:35
uint32_t meshletOffset
First meshlet for this primitive in the unified meshlet buffer.
Definition RenderData.h:33
uint32_t meshletCount
Number of meshlets owned by this primitive.
Definition RenderData.h:34
float boundingSphereRadius
World-space radius of the primitive bounding sphere.
Definition RenderData.h:31
glm::vec3 boundingSphereWorldPosition
World-space center of the primitive bounding sphere.
Definition RenderData.h:30
Per-eye frustum planes passed to compute shader culling.
Definition RenderData.h:113
std::array< glm::vec4, 6 > planes[2]
planes[eyeIndex][planeIndex], with two eyes for stereo rendering.
Definition RenderData.h:114
Per-group LOD data representing simplified child clusters.
Definition RenderData.h:534
float simplifiedError
Error threshold for this group.
Definition RenderData.h:536
glm::vec4 simplifiedBoundsPositionAndRadius
xyz = local center, w = radius
Definition RenderData.h:535
uint32_t _padding[2]
Padding required by the shader layout.
Definition RenderData.h:538
int32_t depth
DAG depth (0 = coarsest level)
Definition RenderData.h:537
Per-cluster LOD data for GPU-driven LOD selection.
Definition RenderData.h:516
uint32_t _padding[2]
Padding required by the shader layout.
Definition RenderData.h:523
uint64_t meshletDataAddress
Device address of the referenced UnifiedMeshlet.
Definition RenderData.h:522
uint32_t meshletIndex
Index into UnifiedMeshlet buffer.
Definition RenderData.h:520
int32_t groupId
Group this cluster belongs to (for parent error check)
Definition RenderData.h:521
float error
Simplification error (mesh-local units)
Definition RenderData.h:518
glm::vec4 boundsPositionAndRadius
xyz = local center, w = radius
Definition RenderData.h:517
int32_t refinedGroupId
Group this cluster simplifies (-1 for base geometry)
Definition RenderData.h:519
Cluster survivor data passed from culling to binning shaders.
Definition RenderData.h:568
uint32_t primitiveID
For transform/material lookup.
Definition RenderData.h:569
uint64_t clusterLodDataAddress
Device address of the slot's ClusterLodData array.
Definition RenderData.h:570
float ditherFactor
0.0-1.0 for transition blending
Definition RenderData.h:572
uint32_t _padding
Padding required by the shader layout.
Definition RenderData.h:573
uint32_t clusterIndex
Local cluster index within the slot.
Definition RenderData.h:571
float _padding
Padding required by the shader layout.
Definition RenderData.h:351
GPU-side diffuse textured material.
Definition RenderData.h:362
uint32_t baseColorTextureIndex
Texture descriptor index, or 0xFFFFFFFF when absent.
Definition RenderData.h:363
glm::vec4 baseColorFactor
Linear RGBA multiplier applied to the base-color texture.
Definition RenderData.h:365
float _padding1[3]
Padding that places baseColorFactor at byte offset 16.
Definition RenderData.h:364
Workgroup counts for an indirect compute dispatch.
Definition RenderData.h:127
uint32_t groupSizeY
Number of workgroups in Y.
Definition RenderData.h:129
uint32_t groupSizeZ
Number of workgroups in Z.
Definition RenderData.h:130
uint32_t groupSizeX
Number of workgroups in X.
Definition RenderData.h:128
Fixed-size dynamic point light buffer for shaders.
Definition RenderData.h:460
std::array< DynamicPointLight, MAX_DYNAMIC_POINT_LIGHTS > pointLights
Fixed-capacity light array.
Definition RenderData.h:463
uint32_t pointLightCount
Active point light count.
Definition RenderData.h:461
uint32_t _padding[3]
Padding required by the shader layout.
Definition RenderData.h:462
glm::vec4 colorIntensity
rgb = linear light color, w = intensity.
Definition RenderData.h:451
glm::vec4 positionRadius
xyz = world-space position, w = influence radius.
Definition RenderData.h:450
GPU-visible meshlet range for one mesh.
Definition RenderData.h:137
uint32_t meshletCount
Number of meshlets in the range.
Definition RenderData.h:138
uint32_t offset
First meshlet index in the range.
Definition RenderData.h:139
Per-instance bounding data used by compute culling.
Definition RenderData.h:321
uint32_t meshGeometryId
Index into the MeshGeometryData buffer.
Definition RenderData.h:324
uint32_t _padding[2]
Padding required by the shader layout.
Definition RenderData.h:325
uint32_t instanceId
Index into the InstanceData buffer.
Definition RenderData.h:323
glm::vec4 worldPositionAndRadius
xyz = world position, w = radius
Definition RenderData.h:322
Per-instance transform and material data referencing shared geometry.
Definition RenderData.h:309
uint32_t _padding
Padding required by the shader layout.
Definition RenderData.h:314
glm::mat4 worldMatrix
Local-to-world transform for the instance.
Definition RenderData.h:310
uint32_t materialId
Index into the material buffer for the instance's pipeline.
Definition RenderData.h:312
uint32_t colorTextureId
Texture descriptor index for legacy color-texture paths.
Definition RenderData.h:313
uint32_t meshGeometryId
Index into the MeshGeometryData buffer.
Definition RenderData.h:311
Local-space bounding sphere data for GPU transformation.
Definition RenderData.h:206
glm::vec4 localCenterAndRadius
xyz = local center, w = local radius
Definition RenderData.h:207
LOD configuration UBO for GPU shader selection.
Definition RenderData.h:549
float cameraNear
Positive near plane distance.
Definition RenderData.h:552
float cameraProj11
projection[1][1] = cot(fov/2)
Definition RenderData.h:551
uint32_t ditherEnabled
1 = dither transitions, 0 = hard cut
Definition RenderData.h:553
float errorThresholdPixels
Target pixel error (default 1.0)
Definition RenderData.h:550
glm::vec2 _padding
Padding required by the shader layout.
Definition RenderData.h:556
glm::vec4 cameraPosition
World-space camera position.
Definition RenderData.h:554
glm::vec2 screenSize
Render target dimensions.
Definition RenderData.h:555
Shared geometry metadata for instanced rendering with LOD support.
Definition RenderData.h:280
uint32_t pipelineIndex
Pipeline bin used for rendering this geometry.
Definition RenderData.h:287
uint64_t meshletDataAddress
Device address of the slot's UnifiedMeshlet array (0 = none).
Definition RenderData.h:285
uint32_t meshletCount
Number of meshlets for this geometry.
Definition RenderData.h:286
uint64_t boneVertexDataAddress
Device address of the slot's BoneVertexData array (0 = none).
Definition RenderData.h:296
uint32_t singleMeshletGeoIndex
Compact VS-path binning ordinal, or 0xFFFFFFFF if absent.
Definition RenderData.h:289
static constexpr uint32_t FLAG_SKINNED
flags bits (kept in sync with shaders/culling/PrimitiveCulling.comp).
Definition RenderData.h:282
uint64_t vertexDataAddress
Device address of the slot's Vertex array (0 = none).
Definition RenderData.h:298
uint64_t indexDataAddress
Device address of the slot's index array (uint32_t), 0 = none.
Definition RenderData.h:297
uint32_t groupCount
Number of LOD cluster groups for this geometry.
Definition RenderData.h:293
uint64_t singleMeshletGeoDataAddress
Device address of the slot's SingleMeshletGeometryData (0 = none).
Definition RenderData.h:288
uint64_t clusterLodDataAddress
Device address of the slot's ClusterLodData array (0 = none).
Definition RenderData.h:290
uint32_t geometryVertexStart
Base vertex element within the slot's vertex array.
Definition RenderData.h:299
uint32_t boneCount
Number of bones referenced by this geometry. Zero means static geometry.
Definition RenderData.h:295
static constexpr uint32_t FLAG_RESIDENT
Slot payload fully uploaded (safe to render).
Definition RenderData.h:283
uint32_t clusterCount
Number of LOD clusters for this geometry.
Definition RenderData.h:291
uint32_t flags
Bit 0 marks skinned geometry; bit 1 marks the slot payload resident (fully uploaded).
Definition RenderData.h:294
uint64_t clusterGroupDataAddress
Device address of the slot's ClusterGroupData array (0 = none).
Definition RenderData.h:292
Per-primitive material and lighting indices for fragment shaders.
Definition RenderData.h:181
uint32_t materialId
Index into the material buffer for this primitive's pipeline.
Definition RenderData.h:183
uint32_t _padding
Padding required by the shader layout.
Definition RenderData.h:185
uint32_t colorTextureId
Texture descriptor index for legacy color-texture paths.
Definition RenderData.h:182
uint32_t shProbeIndex
Index into the SH probe buffer. Zero selects the fallback probe.
Definition RenderData.h:184
Mesh unpacking metadata for compute shader.
Definition RenderData.h:228
uint32_t meshStartIndex
First meshlet for this mesh.
Definition RenderData.h:229
uint32_t objectIndex
Index into the per-object transform buffer.
Definition RenderData.h:231
uint32_t meshletCount
Number of meshlets to unpack.
Definition RenderData.h:230
Bounding sphere for meshlet culling.
Definition RenderData.h:171
glm::vec4 worldPositionAndRadius
xyz = world-space center, w = radius.
Definition RenderData.h:172
uint32_t meshletIndex
Index into the UnifiedMeshlet buffer.
Definition RenderData.h:173
uint32_t pipelineIndex
Pipeline bin used for culling output routing.
Definition RenderData.h:174
GPU-side material data for normals debug rendering.
Definition RenderData.h:413
uint32_t _padding[3]
Padding required by the shader layout.
Definition RenderData.h:415
uint32_t debug
Debug mode selector used by normals shaders.
Definition RenderData.h:414
Culling operation counters for GPU buffers.
Definition RenderData.h:263
uint32_t totalMeshletCount
Total meshlet count across submitted objects.
Definition RenderData.h:265
uint32_t objectCount
Number of objects submitted for culling.
Definition RenderData.h:264
Object culling data for compute shader.
Definition RenderData.h:194
uint32_t _padding[3]
Padding required by the shader layout.
Definition RenderData.h:197
uint32_t objectIndex
Index into the per-object transform buffer.
Definition RenderData.h:196
glm::vec4 worldPositionAndRadius
xyz = world position, w = radius
Definition RenderData.h:195
GPU-side PBR material with spherical harmonics.
Definition RenderData.h:378
uint32_t roughnessMetallicTextureIndex
0xFFFFFFFF = not present
Definition RenderData.h:381
glm::vec4 baseColorFactor
Linear RGBA base color multiplier.
Definition RenderData.h:384
float metallicFactor
Scalar metallic value when no roughness-metallic texture is present.
Definition RenderData.h:389
uint32_t lightmapTextureIndex
0xFFFFFFFF = not present
Definition RenderData.h:396
uint32_t baseColorTextureIndex
0xFFFFFFFF = not present
Definition RenderData.h:379
float sh_scale
Multiplier applied to spherical harmonics lighting.
Definition RenderData.h:391
uint32_t tone_mapping
Tone-mapping mode consumed by material shaders.
Definition RenderData.h:395
uint32_t hasLightmap
1 when lightmapTextureIndex references a valid lightmap, otherwise 0.
Definition RenderData.h:397
float roughnessFactor
Scalar roughness value when no roughness-metallic texture is present.
Definition RenderData.h:387
uint32_t emissiveTextureIndex
0xFFFFFFFF = not present
Definition RenderData.h:382
float exposure
Exposure value applied by material shaders that perform tone mapping.
Definition RenderData.h:400
uint32_t normalMapBC5
1 when the normal map is BC5/RG and reconstructs Z, 0 when stored as RGB.
Definition RenderData.h:401
uint32_t _padding[1]
Padding required by the shader layout.
Definition RenderData.h:402
uint32_t debug_mode
Debug view mode consumed by material shaders.
Definition RenderData.h:394
glm::vec3 emissiveFactor
Linear RGB emissive multiplier.
Definition RenderData.h:386
float ambient_term
Ambient lighting term mixed with spherical harmonics lighting.
Definition RenderData.h:392
uint32_t normalTextureIndex
0xFFFFFFFF = not present
Definition RenderData.h:380
float normalScale
Scale applied to sampled tangent-space normal maps.
Definition RenderData.h:390
float alphaCutoff
Threshold for MASK mode.
Definition RenderData.h:399
Per-primitive meshlet range for culling shader.
Definition RenderData.h:214
uint64_t meshletDataAddress
Device address of the UnifiedMeshlet buffer.
Definition RenderData.h:215
uint32_t meshletStartIndex
First meshlet for the primitive.
Definition RenderData.h:216
uint32_t pipelineID
Pipeline bin used by culling and binning shaders.
Definition RenderData.h:218
uint32_t meshletCount
Number of meshlets for the primitive.
Definition RenderData.h:217
uint32_t _padding
Padding required by the shader layout.
Definition RenderData.h:219
Spherical harmonics probe data for dynamic lighting.
Definition RenderData.h:430
float _padding0
Global SH influence stored on fallback probe at index 0.
Definition RenderData.h:434
glm::vec4 coefficients[9]
L0-L2 RGB coefficients.
Definition RenderData.h:431
uint32_t _padding1
Padding required by the shader layout.
Definition RenderData.h:435
float scale
Probe lighting multiplier.
Definition RenderData.h:432
float ambientTerm
Ambient term mixed into probe lighting.
Definition RenderData.h:433
Draw metadata for geometry routed through the vertex-shader fast path.
Definition RenderData.h:332
uint32_t firstIndex
First index in the index buffer.
Definition RenderData.h:334
uint32_t indexCount
Number of indices to draw.
Definition RenderData.h:333
int32_t vertexOffset
Vertex offset applied by indexed drawing.
Definition RenderData.h:335
uint32_t pipelineIndex
Pipeline bin used for rendering this draw.
Definition RenderData.h:336
GPU-side single directional sun light.
Definition RenderData.h:478
glm::vec4 colorIntensity
rgb = linear light color, w = intensity.
Definition RenderData.h:480
glm::vec4 shadowParams
x = castsShadows, y = angular diameter degrees.
Definition RenderData.h:481
glm::vec4 lightmapShadowParams
x = sun removal, y = brightness
Definition RenderData.h:482
glm::vec4 directionEnabled
xyz = travel direction, w = enabled flag.
Definition RenderData.h:479
GPU-side cascaded shadow data for the active directional sun.
Definition RenderData.h:493
glm::vec4 cascadeSplits
Camera-forward far split per cascade.
Definition RenderData.h:495
glm::vec4 cameraForward
xyz = cascade camera forward direction, w = render debug mode.
Definition RenderData.h:498
glm::vec4 params
x = enabled, y = cascade count, z = map size, w = max distance.
Definition RenderData.h:496
std::array< glm::mat4, MAX_SUN_SHADOW_CASCADES > lightViewProj
Light view-projection matrix per cascade.
Definition RenderData.h:494
glm::vec4 biasParams
x = depth bias, y = normal bias, z = PCF radius, w = lightmapped receivers
Definition RenderData.h:497
GPU-side meshlet descriptor consumed by mesh shaders.
Definition RenderData.h:150
uint32_t vertexCount
Number of vertices referenced by this meshlet.
Definition RenderData.h:151
uint32_t _padding[2]
Padding required by the shader layout.
Definition RenderData.h:159
uint32_t triangleDataOffset
First packed triangle element for this meshlet.
Definition RenderData.h:154
uint64_t vertexDataAddress
Device address of the vertex buffer used by this meshlet.
Definition RenderData.h:157
uint32_t triangleCount
Number of packed triangles referenced by this meshlet.
Definition RenderData.h:152
uint32_t primitiveIndex
Primitive or mesh geometry index used for object/material lookup.
Definition RenderData.h:155
uint64_t triangleDataAddress
Device address of the packed triangle buffer used by this meshlet.
Definition RenderData.h:158
uint32_t vertexDataOffset
First vertex element for this meshlet.
Definition RenderData.h:153
uint32_t pipelineIndex
Pipeline bin used to route the meshlet to the correct material shader.
Definition RenderData.h:156
Visible LOD primitive data for parallel cluster selection.
Definition RenderData.h:586
uint32_t primitiveID
Primitive index for transform/material lookup.
Definition RenderData.h:587
uint64_t clusterLodDataAddress
Device address of the slot's ClusterLodData array.
Definition RenderData.h:588
uint32_t clusterCount
Number of clusters in this primitive's LOD hierarchy.
Definition RenderData.h:590
uint32_t meshGeometryId
Index into MeshGeometryData buffer.
Definition RenderData.h:591
uint64_t clusterGroupDataAddress
Device address of the slot's ClusterGroupData array.
Definition RenderData.h:589
Visible meshlet result from culling operation.
Definition RenderData.h:238
uint32_t _padding
Padding required by the shader layout.
Definition RenderData.h:243
float ditherFactor
LOD transition dither factor in the range [0.0, 1.0].
Definition RenderData.h:242
uint64_t meshletDataAddress
Device address of the UnifiedMeshlet buffer.
Definition RenderData.h:239
uint32_t objectID
Object or primitive index used for transform/material lookup.
Definition RenderData.h:240
uint32_t meshletIndex
Index of the visible meshlet.
Definition RenderData.h:241
Visible meshlet range per object for dispatch.
Definition RenderData.h:252
uint32_t meshletCount
Number of visible meshlets in the range.
Definition RenderData.h:255
uint32_t startMeshletId
First visible meshlet index for the object.
Definition RenderData.h:254
uint32_t objectIndex
Object index for the visible range.
Definition RenderData.h:253
uint32_t _padding
Padding required by the shader layout.
Definition RenderData.h:256
CPU cache entry that maps a mesh primitive to shared geometry buffer ranges.
Definition RenderData.h:75
uint32_t pipelineIndex
Material pipeline index used for binning and draw routing.
Definition RenderData.h:84
uint32_t vertexBaseOffset
First vertex in the shared vertex buffer.
Definition RenderData.h:79
bool isSingleMeshlet
True when the geometry can use the vertex-shader fast path.
Definition RenderData.h:83
uint32_t groupStartIndex
First ClusterGroupData index in the shared LOD array (or sentinel).
Definition RenderData.h:94
uint32_t groupCount
Number of LOD cluster groups for this geometry.
Definition RenderData.h:95
uint32_t clusterStartIndex
First ClusterLodData index in the shared LOD array (or sentinel).
Definition RenderData.h:92
uint32_t singleMeshletGeoIndex
VS-path binning ordinal into the shared SingleMeshletGeometryData array.
Definition RenderData.h:91
uint32_t clusterCount
Number of LOD clusters for this geometry.
Definition RenderData.h:93
uint32_t vertexCount
Number of vertices appended for this geometry (per-slot range).
Definition RenderData.h:90
uint64_t singleMeshletGeoDataAddress
Device address of the slot's SingleMeshletGeometryData entry.
Definition RenderData.h:102
uint32_t boneCount
Number of bones referenced by the geometry.
Definition RenderData.h:89
uint32_t meshGeometryId
Index into the GPU MeshGeometryData buffer.
Definition RenderData.h:76
uint32_t triangleBaseOffset
First packed triangle in the shared triangle buffer.
Definition RenderData.h:80
uint64_t clusterGroupDataAddress
Device address of the slot's ClusterGroupData array.
Definition RenderData.h:104
bool hasLodData
True when cluster and group LOD data was uploaded.
Definition RenderData.h:87
uint32_t meshletStartIndex
First meshlet in the shared UnifiedMeshlet buffer.
Definition RenderData.h:77
uint32_t vsIndexOffset
First index in the vertex-shader path index buffer.
Definition RenderData.h:81
uint64_t meshletDataAddress
Device address of the slot's UnifiedMeshlet array.
Definition RenderData.h:101
uint32_t boneVertexBaseOffset
First bone vertex record for skinned geometry.
Definition RenderData.h:88
float localBoundsRadius
Local-space radius of the geometry bounding sphere.
Definition RenderData.h:86
uint64_t clusterLodDataAddress
Device address of the slot's ClusterLodData array.
Definition RenderData.h:103
uint32_t vsIndexCount
Number of indices in the vertex-shader path index buffer.
Definition RenderData.h:82
uint64_t vertexDataAddress
Device address of the slot's Vertex array.
Definition RenderData.h:106
glm::vec3 localBoundsCenter
Local-space center of the geometry bounding sphere.
Definition RenderData.h:85
uint64_t boneVertexDataAddress
Device address of the slot's BoneVertexData array.
Definition RenderData.h:105
uint32_t meshletCount
Number of meshlets in the shared geometry range.
Definition RenderData.h:78
CPU-side staging payload for one primitive's meshlet draw data.
Definition RenderData.h:60
uint32_t textureIndex
Texture descriptor index used by legacy paths.
Definition RenderData.h:62
std::vector< GpuBuffers::UnifiedMeshlet > meshletData
Meshlet descriptors for this primitive.
Definition RenderData.h:61
std::vector< uint8_t > tris
Packed meshlet triangle index stream.
Definition RenderData.h:64
std::vector< uint32_t > vertices
Meshlet-local vertex index stream.
Definition RenderData.h:63