@@ -144,6 +144,7 @@ class RayQuerySampleApp : public ApplicationBase
144
144
145
145
core::smart_refctd_ptr<IGPUBuffer> aabbsBuffer = nullptr ;
146
146
core::smart_refctd_ptr<IGPUAccelerationStructure> gpuBlas = nullptr ;
147
+ core::smart_refctd_ptr<IGPUAccelerationStructure> gpuBlas2 = nullptr ; // Built via CPUObject To GPUObject operations and utility
147
148
core::smart_refctd_ptr<IGPUAccelerationStructure> gpuTlas = nullptr ;
148
149
core::smart_refctd_ptr<IGPUBuffer> instancesBuffer = nullptr ;
149
150
@@ -156,8 +157,7 @@ class RayQuerySampleApp : public ApplicationBase
156
157
157
158
core::smart_refctd_ptr<IGPUBuffer> spheresBuffer = nullptr ;
158
159
159
- // TODO: Temp Fix because of validation error: VkPhysicalDeviceLimits::nonCoherentAtomSize
160
- struct alignas (64 ) SBasicViewParametersAligned
160
+ struct SBasicViewParametersAligned
161
161
{
162
162
SBasicViewParameters uboData;
163
163
};
@@ -340,23 +340,21 @@ class RayQuerySampleApp : public ApplicationBase
340
340
utilities->updateBufferRangeViaStagingBuffer (graphicsQueue, asset::SBufferRange<IGPUBuffer>{0u ,spheresBufferSize,spheresBuffer}, spheres);
341
341
}
342
342
343
- #define DTEST_CPU_2_GPU
344
- #ifdef TEST_CPU_2_GPU
343
+ #define TEST_CPU_2_GPU_BLAS
344
+ #ifdef TEST_CPU_2_GPU_BLAS
345
345
// Acceleration Structure Test
346
- core::smart_refctd_ptr<IGPUAccelerationStructure> gpuBlas2;
347
- // Create + Build BLAS (ICPU Version)
346
+ // Create + Build BLAS (CPU2GPU Version)
348
347
{
349
- // TODO: Temp fix before nonCoherentAtomSize fix
350
- struct alignas (64 ) AABB {
348
+ struct AABB {
351
349
IGPUAccelerationStructure::AABB_Position aabb;
352
350
};
353
- const uint32_t aabbsCount = SphereCount;
351
+ const uint32_t aabbsCount = SphereCount / 2u ;
354
352
uint32_t aabbsBufferSize = sizeof (AABB) * aabbsCount;
355
353
356
354
AABB aabbs[aabbsCount] = {};
357
355
for (uint32_t i = 0 ; i < aabbsCount; ++i)
358
356
{
359
- aabbs[i].aabb = spheres[i% 3 ].getAABB ();
357
+ aabbs[i].aabb = spheres[i].getAABB ();
360
358
}
361
359
362
360
// auto raytracingFlags = core::bitflag(asset::IBuffer::EUF_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT) | asset::IBuffer::EUF_STORAGE_BUFFER_BIT;
@@ -401,15 +399,14 @@ class RayQuerySampleApp : public ApplicationBase
401
399
cpu2gpuParams.waitForCreationToComplete ();
402
400
}
403
401
}
404
- #endif
402
+ #endif
405
403
406
404
// Create + Build BLAS
407
405
{
408
406
// Build BLAS with AABBS
409
407
const uint32_t aabbsCount = SphereCount;
410
408
411
- // TODO: Temp fix before nonCoherentAtomSize fix
412
- struct alignas (64 ) AABB {
409
+ struct AABB {
413
410
IGPUAccelerationStructure::AABB_Position aabb;
414
411
};
415
412
@@ -501,8 +498,7 @@ class RayQuerySampleApp : public ApplicationBase
501
498
502
499
// Create + Build TLAS
503
500
{
504
- // TODO: Temp fix before nonCoherentAtomSize fix
505
- struct alignas (64 ) Instance {
501
+ struct Instance {
506
502
IGPUAccelerationStructure::Instance instance;
507
503
};
508
504
@@ -514,7 +510,11 @@ class RayQuerySampleApp : public ApplicationBase
514
510
instances[0 ].instance .mask = 0xFF ;
515
511
instances[0 ].instance .instanceShaderBindingTableRecordOffset = 0u ;
516
512
instances[0 ].instance .flags = IAccelerationStructure::EIF_TRIANGLE_FACING_CULL_DISABLE_BIT;
513
+ #ifdef TEST_CPU_2_GPU_BLAS
514
+ instances[0 ].instance .accelerationStructureReference = gpuBlas2->getReferenceForDeviceOperations ();
515
+ #else
517
516
instances[0 ].instance .accelerationStructureReference = gpuBlas->getReferenceForDeviceOperations ();
517
+ #endif
518
518
auto raytracingFlags = core::bitflag (asset::IBuffer::EUF_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT) | asset::IBuffer::EUF_STORAGE_BUFFER_BIT;
519
519
520
520
uint32_t instancesBufferSize = sizeof (Instance);
0 commit comments