From c7934fdf299b99b6b2dc4c1b320f537478591653 Mon Sep 17 00:00:00 2001 From: Anders Leino Date: Thu, 2 Jan 2025 09:46:53 +0200 Subject: [PATCH] examples: Fixes for ray-tracing examples - Assert that accelleration structure buffer is not nullptr - Check if buffer creation succeeded before proceeding - This makes initialization not hang, but it still fails. Therefore, the test expectations are just updated to point to another issue. - Enable ray-tracing tests on Windows --- examples/ray-tracing-pipeline/main.cpp | 4 ++++ examples/ray-tracing/main.cpp | 4 ++++ tests/expected-example-failure-github.txt | 4 ++-- tools/gfx/d3d12/d3d12-device.cpp | 1 + 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/examples/ray-tracing-pipeline/main.cpp b/examples/ray-tracing-pipeline/main.cpp index 0fbb857f02..a288e75b57 100644 --- a/examples/ray-tracing-pipeline/main.cpp +++ b/examples/ray-tracing-pipeline/main.cpp @@ -382,6 +382,8 @@ struct RayTracing : public WindowedAppBase asDraftBufferDesc.sizeInBytes = (size_t)accelerationStructurePrebuildInfo.resultDataMaxSize; ComPtr draftBuffer = gDevice->createBufferResource(asDraftBufferDesc); + if (!draftBuffer) + return SLANG_FAIL; IBufferResource::Desc scratchBufferDesc; scratchBufferDesc.type = IResource::Type::Buffer; scratchBufferDesc.defaultState = ResourceState::UnorderedAccess; @@ -389,6 +391,8 @@ struct RayTracing : public WindowedAppBase (size_t)accelerationStructurePrebuildInfo.scratchDataSize; ComPtr scratchBuffer = gDevice->createBufferResource(scratchBufferDesc); + if (!scratchBuffer) + return SLANG_FAIL; // Build acceleration structure. ComPtr compactedSizeQuery; diff --git a/examples/ray-tracing/main.cpp b/examples/ray-tracing/main.cpp index 11529a7538..6b908a14e3 100644 --- a/examples/ray-tracing/main.cpp +++ b/examples/ray-tracing/main.cpp @@ -373,12 +373,16 @@ struct RayTracing : public WindowedAppBase asDraftBufferDesc.defaultState = ResourceState::AccelerationStructure; asDraftBufferDesc.sizeInBytes = accelerationStructurePrebuildInfo.resultDataMaxSize; ComPtr draftBuffer = gDevice->createBufferResource(asDraftBufferDesc); + if (!draftBuffer) + return SLANG_FAIL; IBufferResource::Desc scratchBufferDesc; scratchBufferDesc.type = IResource::Type::Buffer; scratchBufferDesc.defaultState = ResourceState::UnorderedAccess; scratchBufferDesc.sizeInBytes = accelerationStructurePrebuildInfo.scratchDataSize; ComPtr scratchBuffer = gDevice->createBufferResource(scratchBufferDesc); + if (!scratchBuffer) + return SLANG_FAIL; // Build acceleration structure. ComPtr compactedSizeQuery; diff --git a/tests/expected-example-failure-github.txt b/tests/expected-example-failure-github.txt index 5ad2dc362a..7801ee564d 100644 --- a/tests/expected-example-failure-github.txt +++ b/tests/expected-example-failure-github.txt @@ -11,5 +11,5 @@ macos:aarch64:(debug|release):hello-world # See issue 5520 macos:aarch64:(debug|release):model-viewer # See issue 5520 macos:aarch64:(debug|release):ray-tracing # See issue 5520 macos:aarch64:(debug|release):ray-tracing-pipeline # See issue 5520 -windows:x86_64:debug:ray-tracing # See issue 5520 -windows:x86_64:debug:ray-tracing-pipeline # See issue 5520 +windows:x86_64:debug:ray-tracing # See issue 5988 +windows:x86_64:debug:ray-tracing-pipeline # See issue 5988 diff --git a/tools/gfx/d3d12/d3d12-device.cpp b/tools/gfx/d3d12/d3d12-device.cpp index cb54049611..35192fd7d9 100644 --- a/tools/gfx/d3d12/d3d12-device.cpp +++ b/tools/gfx/d3d12/d3d12-device.cpp @@ -2231,6 +2231,7 @@ Result DeviceImpl::createAccelerationStructure( IAccelerationStructure** outAS) { #if SLANG_GFX_HAS_DXR_SUPPORT + assert(desc.buffer != nullptr); RefPtr result = new AccelerationStructureImpl(); result->m_device5 = m_device5; result->m_buffer = static_cast(desc.buffer);