From ba9b2785c69c1b8c6d2b4103267b5281815f9f23 Mon Sep 17 00:00:00 2001 From: Jay Kwak <82421531+jkwak-work@users.noreply.github.com> Date: Thu, 30 Jan 2025 00:59:49 -0800 Subject: Support cooperative vector (#6223) * Support cooperative vector without Vulkan-header update Adding a Slang support for cooperative vector. But this commit doesn't have Vulkan-header update. --- source/slang/slang-emit.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'source/slang/slang-emit.cpp') diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp index cf4070df4..d8594ffdd 100644 --- a/source/slang/slang-emit.cpp +++ b/source/slang/slang-emit.cpp @@ -66,6 +66,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-coopvec.h" #include "slang-ir-lower-dynamic-resource-heap.h" #include "slang-ir-lower-generics.h" #include "slang-ir-lower-glsl-ssbo-types.h" @@ -1016,6 +1017,16 @@ Result linkAndOptimizeIR( #endif validateIRModuleIfEnabled(codeGenContext, irModule); + switch (target) + { + case CodeGenTarget::SPIRV: + case CodeGenTarget::SPIRVAssembly: + case CodeGenTarget::HLSL: + break; + default: + lowerCooperativeVectors(irModule, sink); + } + // Inline calls to any functions marked with [__unsafeInlineEarly] or [ForceInline]. performForceInlining(irModule); @@ -1476,14 +1487,15 @@ Result linkAndOptimizeIR( { default: break; + case CodeGenTarget::HLSL: case CodeGenTarget::GLSL: case CodeGenTarget::WGSL: - moveGlobalVarInitializationToEntryPoints(irModule); + moveGlobalVarInitializationToEntryPoints(irModule, targetProgram); break; // For SPIR-V to SROA across 2 entry-points a value must not be a global case CodeGenTarget::SPIRV: case CodeGenTarget::SPIRVAssembly: - moveGlobalVarInitializationToEntryPoints(irModule); + moveGlobalVarInitializationToEntryPoints(irModule, targetProgram); if (targetProgram->getOptionSet().getBoolOption( CompilerOptionName::EnableExperimentalPasses)) introduceExplicitGlobalContext(irModule, target); @@ -1494,7 +1506,7 @@ Result linkAndOptimizeIR( case CodeGenTarget::Metal: case CodeGenTarget::CPPSource: case CodeGenTarget::CUDASource: - moveGlobalVarInitializationToEntryPoints(irModule); + moveGlobalVarInitializationToEntryPoints(irModule, targetProgram); introduceExplicitGlobalContext(irModule, target); if (target == CodeGenTarget::CPPSource) { -- cgit v1.2.3