summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-emit.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp
index 6725ac3de..e1689ccfc 100644
--- a/source/slang/slang-emit.cpp
+++ b/source/slang/slang-emit.cpp
@@ -1264,10 +1264,17 @@ Result linkAndOptimizeIR(
legalizeEmptyArray(irModule, sink);
+ // For CUDA targets, always inline global constants to avoid dynamic initialization
+ // of __device__ variables rejected by NVRTC. This runs independently of the broader
+ // resource/existential type legalization, which remains disabled for CUDA.
+ if (target == CodeGenTarget::CUDASource || options.shouldLegalizeExistentialAndResourceTypes)
+ {
+ inlineGlobalConstantsForLegalization(irModule);
+ }
+
// We don't need the legalize pass for C/C++ based types
if (options.shouldLegalizeExistentialAndResourceTypes)
{
- inlineGlobalConstantsForLegalization(irModule);
// The Slang language allows interfaces to be used like
// ordinary types (including placing them in constant