From 5290c580632cfb56847b863a32dc020a21d1c93e Mon Sep 17 00:00:00 2001 From: Yong He Date: Fri, 10 Jan 2025 10:57:04 -0800 Subject: Initial implementation of SP#015 `DescriptorHandle`. (#6028) * Initial implementation of `ResourcePtr`. * Update docs * Fix build error. * Add more discussion. * Update documentation. * Update TOC. * Fix. * Fix. * Add test case for custom `getResourceFromBindlessHandle`. * Add namehint to generated descriptor heap param. * Fix. * Fix. * format code * Rename to `DescriptorHandle`, and add `T.Handle` alias. * Fix compiler error. * Fix. * Fix build. * Renames. * Fix documentation. * Documentation fix. --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> --- source/slang/slang-emit.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'source/slang/slang-emit.cpp') diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp index cd1b177b2..ee2582267 100644 --- a/source/slang/slang-emit.cpp +++ b/source/slang/slang-emit.cpp @@ -43,6 +43,7 @@ #include "slang-ir-explicit-global-context.h" #include "slang-ir-explicit-global-init.h" #include "slang-ir-fix-entrypoint-callsite.h" +#include "slang-ir-float-non-uniform-resource-index.h" #include "slang-ir-fuse-satcoop.h" #include "slang-ir-glsl-legalize.h" #include "slang-ir-glsl-liveness.h" @@ -64,6 +65,7 @@ #include "slang-ir-lower-bit-cast.h" #include "slang-ir-lower-buffer-element-type.h" #include "slang-ir-lower-combined-texture-sampler.h" +#include "slang-ir-lower-dynamic-resource-heap.h" #include "slang-ir-lower-generics.h" #include "slang-ir-lower-glsl-ssbo-types.h" #include "slang-ir-lower-l-value-cast.h" @@ -316,6 +318,7 @@ struct RequiredLoweringPassSet bool glslSSBO; bool byteAddressBuffer; bool dynamicResource; + bool dynamicResourceHeap; bool resolveVaryingInputRef; }; @@ -426,6 +429,9 @@ void calcRequiredLoweringPassSet( case kIROp_DynamicResourceType: result.dynamicResource = true; break; + case kIROp_GetDynamicResourceHeap: + result.dynamicResourceHeap = true; + break; case kIROp_ResolveVaryingInputRef: result.resolveVaryingInputRef = true; break; @@ -1122,6 +1128,9 @@ Result linkAndOptimizeIR( else simplifyIR(targetProgram, irModule, fastIRSimplificationOptions, sink); + if (requiredLoweringPassSet.dynamicResourceHeap) + lowerDynamicResourceHeap(targetProgram, irModule, sink); + #if 0 dumpIRIfEnabled(codeGenContext, irModule, "AFTER SSA"); #endif @@ -1391,6 +1400,11 @@ Result linkAndOptimizeIR( break; } + if (!isSPIRV(targetRequest->getTarget())) + { + floatNonUniformResourceIndex(irModule, NonUniformResourceIndexFloatMode::Textual); + } + // Legalize non struct parameters that are expected to be structs for HLSL. if (isD3DTarget(targetRequest)) legalizeNonStructParameterToStructForHLSL(irModule); -- cgit v1.2.3