summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-01-10 10:57:04 -0800
committerGitHub <noreply@github.com>2025-01-10 10:57:04 -0800
commit5290c580632cfb56847b863a32dc020a21d1c93e (patch)
tree4c543f28d13f62a1dc3293b76151dda7585743ab /source/slang/slang-emit.cpp
parent4cfae806a6f9c0203ce44c4ce04df5ad66cdc8a2 (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.cpp14
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);