summaryrefslogtreecommitdiffstats
path: root/tools/gfx/debug-layer.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-07-08 13:30:17 -0700
committerGitHub <noreply@github.com>2021-07-08 16:30:17 -0400
commit09950676b3f73bb9967aea183d27a30d63098475 (patch)
treeaba3e69b72554b07da1188fd44d5f3ce3d90da26 /tools/gfx/debug-layer.cpp
parent06c4926ec51ce9548f2dc44ee948a467d588def8 (diff)
Implement gfx inline ray tracing on D3D12. (#1902)
* Update VS projects to 2019. * Empty commit to trigger build * Implement gfx inline ray tracing on D3D12.
Diffstat (limited to 'tools/gfx/debug-layer.cpp')
-rw-r--r--tools/gfx/debug-layer.cpp89
1 files changed, 88 insertions, 1 deletions
diff --git a/tools/gfx/debug-layer.cpp b/tools/gfx/debug-layer.cpp
index 7ad0dd31c..77dd8543e 100644
--- a/tools/gfx/debug-layer.cpp
+++ b/tools/gfx/debug-layer.cpp
@@ -180,6 +180,78 @@ SLANG_GFX_DEBUG_GET_OBJ_IMPL(AccelerationStructure)
#undef SLANG_GFX_DEBUG_GET_OBJ_IMPL
+void validateAccelerationStructureBuildInputs(
+ const IAccelerationStructure::BuildInputs& buildInputs)
+{
+ switch (buildInputs.kind)
+ {
+ case IAccelerationStructure::Kind::TopLevel:
+ if (!buildInputs.instanceDescs)
+ {
+ GFX_DIAGNOSE_ERROR("IAccelerationStructure::BuildInputs::instanceDescs cannot be null "
+ "when creating a top-level acceleration structure.");
+ }
+ break;
+ case IAccelerationStructure::Kind::BottomLevel:
+ if (!buildInputs.geometryDescs)
+ {
+ GFX_DIAGNOSE_ERROR("IAccelerationStructure::BuildInputs::geometryDescs cannot be null "
+ "when creating a bottom-level acceleration structure.");
+ }
+ for (int i = 0; i < buildInputs.descCount; i++)
+ {
+ switch (buildInputs.geometryDescs[i].type)
+ {
+ case IAccelerationStructure::GeometryType::Triangles:
+ switch (buildInputs.geometryDescs[i].content.triangles.vertexFormat)
+ {
+ case Format::RGB_Float32:
+ case Format::RG_Float32:
+ case Format::RGBA_Float16:
+ case Format::RG_Float16:
+ case Format::RGBA_Snorm_UInt16:
+ case Format::RG_Snorm_UInt16:
+ break;
+ default:
+ GFX_DIAGNOSE_ERROR(
+ "Unsupported IAccelerationStructure::TriangleDesc::vertexFormat. Valid "
+ "values are RGB_Float32, RG_Float32, RGBA_Float16, RG_Float16, "
+ "RGBA_Snorm_UInt16 or RG_Snorm_UInt16.");
+ }
+ if (buildInputs.geometryDescs[i].content.triangles.indexCount)
+ {
+ switch (buildInputs.geometryDescs[i].content.triangles.indexFormat)
+ {
+ case Format::R_UInt32:
+ case Format::R_UInt16:
+ break;
+ default:
+ GFX_DIAGNOSE_ERROR(
+ "Unsupported IAccelerationStructure::TriangleDesc::indexFormat. Valid "
+ "values are R_UInt32 or R_UInt16.");
+ }
+ if (!buildInputs.geometryDescs[i].content.triangles.indexData)
+ {
+ GFX_DIAGNOSE_ERROR(
+ "IAccelerationStructure::TriangleDesc::indexData cannot be null if "
+ "IAccelerationStructure::TriangleDesc::indexCount is not 0");
+ }
+ }
+ if (!buildInputs.geometryDescs[i].content.triangles.vertexData)
+ {
+ GFX_DIAGNOSE_ERROR(
+ "IAccelerationStructure::TriangleDesc::vertexData cannot be null.");
+ }
+ break;
+ }
+ }
+ break;
+ default:
+ GFX_DIAGNOSE_ERROR("Invalid value of IAccelerationStructure::Kind.");
+ break;
+ }
+}
+
Result DebugDevice::getFeatures(const char** outFeatures, UInt bufferSize, UInt* outFeatureCount)
{
SLANG_GFX_API_FUNC;
@@ -306,7 +378,7 @@ Result DebugDevice::getAccelerationStructurePrebuildInfo(
IAccelerationStructure::PrebuildInfo* outPrebuildInfo)
{
SLANG_GFX_API_FUNC;
-
+ validateAccelerationStructureBuildInputs(buildInputs);
return baseObject->getAccelerationStructurePrebuildInfo(buildInputs, outPrebuildInfo);
}
@@ -892,6 +964,7 @@ void DebugRayTracingCommandEncoder::buildAccelerationStructure(
{
innerQueryDesc.queryPool = getInnerObj(innerQueryDesc.queryPool);
}
+ validateAccelerationStructureBuildInputs(desc.inputs);
baseObject->buildAccelerationStructure(
innerDesc, propertyQueryCount, innerQueryDescs.getBuffer());
}
@@ -1228,4 +1301,18 @@ DeviceAddress DebugAccelerationStructure::getDeviceAddress()
return baseObject->getDeviceAddress();
}
+IResourceView::Desc* DebugResourceView::getViewDesc()
+{
+ SLANG_GFX_API_FUNC;
+
+ return baseObject->getViewDesc();
+}
+
+IResourceView::Desc* DebugAccelerationStructure::getViewDesc()
+{
+ SLANG_GFX_API_FUNC;
+
+ return baseObject->getViewDesc();
+}
+
} // namespace gfx