summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/hlsl.meta.slang8
-rw-r--r--source/slang/slang-ir-inline.cpp6
2 files changed, 10 insertions, 4 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 0539097eb..2e449b884 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -83,7 +83,7 @@ __intrinsic_type($(kIROp_HLSLByteAddressBufferType))
struct ByteAddressBuffer
{
[__readNone]
- [__unsafeForceInlineEarly]
+ [ForceInline]
[require(cpp_cuda_glsl_hlsl_metal_spirv, structuredbuffer)]
void GetDimensions(out uint dim)
{
@@ -3839,7 +3839,7 @@ __intrinsic_type($(kIROp_HLSLStructuredBufferType))
struct StructuredBuffer
{
[__readNone]
- [__unsafeForceInlineEarly]
+ [ForceInline]
void GetDimensions(
out uint numStructs,
out uint stride)
@@ -3956,7 +3956,7 @@ struct $(item.name)
// Note(tfoley): supports all operations from `ByteAddressBuffer`
// TODO(tfoley): can this be made a sub-type?
- [__unsafeForceInlineEarly]
+ [ForceInline]
[require(cpp_cuda_glsl_hlsl_spirv, structuredbuffer_rw)]
void GetDimensions(out uint dim)
{
@@ -5285,7 +5285,7 @@ struct $(item.name)
uint DecrementCounter();
[__readNone]
- [__unsafeForceInlineEarly]
+ [ForceInline]
[require(cpp_cuda_glsl_hlsl_metal_spirv, structuredbuffer_rw)]
void GetDimensions(
out uint numStructs,
diff --git a/source/slang/slang-ir-inline.cpp b/source/slang/slang-ir-inline.cpp
index 9b2b59cd9..96e0670b2 100644
--- a/source/slang/slang-ir-inline.cpp
+++ b/source/slang/slang-ir-inline.cpp
@@ -899,12 +899,18 @@ struct PreAutoDiffForceInliningPass : InliningPassBase
{
switch (inst->getOp())
{
+ // Avoid inlining functions that have derivative instructions.
case kIROp_ForwardDifferentiate:
case kIROp_BackwardDifferentiate:
case kIROp_BackwardDifferentiatePrimal:
case kIROp_BackwardDifferentiatePropagate:
canInline = false;
goto end;
+
+ // Also avoid inlining functions with inline-asm instructions.
+ case kIROp_SPIRVAsm:
+ canInline = false;
+ goto end;
}
}
}