diff options
| author | Yong He <yonghe@outlook.com> | 2025-01-10 10:57:04 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-10 10:57:04 -0800 |
| commit | 5290c580632cfb56847b863a32dc020a21d1c93e (patch) | |
| tree | 4c543f28d13f62a1dc3293b76151dda7585743ab /source/slang/slang-emit.cpp | |
| parent | 4cfae806a6f9c0203ce44c4ce04df5ad66cdc8a2 (diff) | |
Initial implementation of SP#015 `DescriptorHandle<T>`. (#6028)
* Initial implementation of `ResourcePtr<T>`.
* 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>
Diffstat (limited to 'source/slang/slang-emit.cpp')
| -rw-r--r-- | source/slang/slang-emit.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
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); |
