Skip to content

Commit 4ce5f6c

Browse files
committed
CPU2GPU for building BLAS Works!
1 parent 6347849 commit 4ce5f6c

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

examples_tests/56.RayQuery/main.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ class RayQuerySampleApp : public ApplicationBase
144144

145145
core::smart_refctd_ptr<IGPUBuffer> aabbsBuffer = nullptr;
146146
core::smart_refctd_ptr<IGPUAccelerationStructure> gpuBlas = nullptr;
147+
core::smart_refctd_ptr<IGPUAccelerationStructure> gpuBlas2 = nullptr; // Built via CPUObject To GPUObject operations and utility
147148
core::smart_refctd_ptr<IGPUAccelerationStructure> gpuTlas = nullptr;
148149
core::smart_refctd_ptr<IGPUBuffer> instancesBuffer = nullptr;
149150

@@ -156,8 +157,7 @@ class RayQuerySampleApp : public ApplicationBase
156157

157158
core::smart_refctd_ptr<IGPUBuffer> spheresBuffer = nullptr;
158159

159-
// TODO: Temp Fix because of validation error: VkPhysicalDeviceLimits::nonCoherentAtomSize
160-
struct alignas(64) SBasicViewParametersAligned
160+
struct SBasicViewParametersAligned
161161
{
162162
SBasicViewParameters uboData;
163163
};
@@ -340,23 +340,21 @@ class RayQuerySampleApp : public ApplicationBase
340340
utilities->updateBufferRangeViaStagingBuffer(graphicsQueue, asset::SBufferRange<IGPUBuffer>{0u,spheresBufferSize,spheresBuffer}, spheres);
341341
}
342342

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
345345
// Acceleration Structure Test
346-
core::smart_refctd_ptr<IGPUAccelerationStructure> gpuBlas2;
347-
// Create + Build BLAS (ICPU Version)
346+
// Create + Build BLAS (CPU2GPU Version)
348347
{
349-
// TODO: Temp fix before nonCoherentAtomSize fix
350-
struct alignas(64) AABB {
348+
struct AABB {
351349
IGPUAccelerationStructure::AABB_Position aabb;
352350
};
353-
const uint32_t aabbsCount = SphereCount;
351+
const uint32_t aabbsCount = SphereCount / 2u;
354352
uint32_t aabbsBufferSize = sizeof(AABB) * aabbsCount;
355353

356354
AABB aabbs[aabbsCount] = {};
357355
for(uint32_t i = 0; i < aabbsCount; ++i)
358356
{
359-
aabbs[i].aabb = spheres[i%3].getAABB();
357+
aabbs[i].aabb = spheres[i].getAABB();
360358
}
361359

362360
// 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
401399
cpu2gpuParams.waitForCreationToComplete();
402400
}
403401
}
404-
#endif
402+
#endif
405403

406404
// Create + Build BLAS
407405
{
408406
// Build BLAS with AABBS
409407
const uint32_t aabbsCount = SphereCount;
410408

411-
// TODO: Temp fix before nonCoherentAtomSize fix
412-
struct alignas(64) AABB {
409+
struct AABB {
413410
IGPUAccelerationStructure::AABB_Position aabb;
414411
};
415412

@@ -501,8 +498,7 @@ class RayQuerySampleApp : public ApplicationBase
501498

502499
// Create + Build TLAS
503500
{
504-
// TODO: Temp fix before nonCoherentAtomSize fix
505-
struct alignas(64) Instance {
501+
struct Instance {
506502
IGPUAccelerationStructure::Instance instance;
507503
};
508504

@@ -514,7 +510,11 @@ class RayQuerySampleApp : public ApplicationBase
514510
instances[0].instance.mask = 0xFF;
515511
instances[0].instance.instanceShaderBindingTableRecordOffset = 0u;
516512
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
517516
instances[0].instance.accelerationStructureReference = gpuBlas->getReferenceForDeviceOperations();
517+
#endif
518518
auto raytracingFlags = core::bitflag(asset::IBuffer::EUF_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT) | asset::IBuffer::EUF_STORAGE_BUFFER_BIT;
519519

520520
uint32_t instancesBufferSize = sizeof(Instance);

0 commit comments

Comments
 (0)