summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit-metal.cpp
diff options
context:
space:
mode:
authorDynamitos <dynamitos15@gmail.com>2024-06-02 22:18:37 +0200
committerGitHub <noreply@github.com>2024-06-02 13:18:37 -0700
commit753a524be885cf463fa6e60734aa739fcce1396f (patch)
treed20e2bd2baf12a621f314727aabb395f5a8b5d5e /source/slang/slang-emit-metal.cpp
parent0bc89bc13251fedc9ed90cf473d2e6eb7fda3abf (diff)
Metal Task Shader payload (#4238)
Diffstat (limited to 'source/slang/slang-emit-metal.cpp')
-rw-r--r--source/slang/slang-emit-metal.cpp27
1 files changed, 26 insertions, 1 deletions
diff --git a/source/slang/slang-emit-metal.cpp b/source/slang/slang-emit-metal.cpp
index c6ffee953..96843e286 100644
--- a/source/slang/slang-emit-metal.cpp
+++ b/source/slang/slang-emit-metal.cpp
@@ -165,6 +165,9 @@ void MetalSourceEmitter::emitFuncParamLayoutImpl(IRInst* param)
case LayoutResourceKind::VaryingInput:
m_writer->emit(" [[stage_in]]");
break;
+ case LayoutResourceKind::MetalPayload:
+ m_writer->emit(" [[payload]]");
+ break;
}
}
if (auto sysSemanticAttr = layout->findSystemValueSemanticAttr())
@@ -191,6 +194,12 @@ void MetalSourceEmitter::emitEntryPointAttributesImpl(IRFunc* irFunc, IREntryPoi
case Stage::Compute:
m_writer->emit("[[kernel]] ");
break;
+ case Stage::Mesh:
+ m_writer->emit("[[mesh]] ");
+ break;
+ case Stage::Amplification:
+ m_writer->emit("[[object]] ");
+ break;
default:
SLANG_ABORT_COMPILATION("unsupported stage.");
}
@@ -608,18 +617,26 @@ void MetalSourceEmitter::emitSimpleTypeImpl(IRType* type)
{
case AddressSpace::Global:
m_writer->emit(" device");
+ m_writer->emit("*");
break;
case AddressSpace::Uniform:
m_writer->emit(" constant");
+ m_writer->emit("*");
break;
case AddressSpace::ThreadLocal:
m_writer->emit(" thread");
+ m_writer->emit("*");
break;
case AddressSpace::GroupShared:
m_writer->emit(" threadgroup");
+ m_writer->emit("*");
+ break;
+ case AddressSpace::MetalObjectData:
+ m_writer->emit(" object_data");
+ // object data is passed by reference
+ m_writer->emit("&");
break;
}
- m_writer->emit("*");
return;
}
case kIROp_ArrayType:
@@ -631,6 +648,11 @@ void MetalSourceEmitter::emitSimpleTypeImpl(IRType* type)
m_writer->emit(">");
return;
}
+ case kIROp_MetalMeshGridPropertiesType:
+ {
+ m_writer->emit("mesh_grid_properties ");
+ return;
+ }
default:
break;
}
@@ -939,6 +961,9 @@ void MetalSourceEmitter::emitRateQualifiersAndAddressSpaceImpl(IRRate* rate, IRI
case AddressSpace::ThreadLocal:
m_writer->emit("thread ");
break;
+ case AddressSpace::MetalObjectData:
+ m_writer->emit("object_data ");
+ break;
default:
break;
}