summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit.cpp
diff options
context:
space:
mode:
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);