summaryrefslogtreecommitdiff
path: root/source/slang/hlsl.meta.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-09-26 23:56:06 -0700
committerGitHub <noreply@github.com>2023-09-27 14:56:06 +0800
commitebe8ddefc48478307d5f206cd3e40c41d28a36e3 (patch)
tree8e13977979909a26394eea532d8b95cd5ad0f6d1 /source/slang/hlsl.meta.slang
parentc5c8cfbb360d9a763f549df48636effde839eacd (diff)
Various SPIRV fixes. (#3231)
* Various SPIRV fixes. - Geometry shader support (WIP). - Fix texture get dimension and load. - Fold global GetElement(MakeArray/MakeVector) insts. - Call spvopt to inline all functions. - Translate OpImageSubscript. - Emit struct member names and global variable names. - Fix lowering of OpBitNot -> OpNot, instead of OpBitReverse. * Fix test. * Fix geometry shader. * Fix geometry shader emit. * Add atomic Image access test. * Fix tests. * don't fail if spirv-opt fails. * Update comments. * Fix test. * Cleanups. * indentation --------- Co-authored-by: Yong He <yhe@nvidia.com> Co-authored-by: Ellie Hermaszewska <ellieh@nvidia.com>
Diffstat (limited to 'source/slang/hlsl.meta.slang')
-rw-r--r--source/slang/hlsl.meta.slang74
1 files changed, 61 insertions, 13 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index d95c1e4d6..da729f67a 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -1167,11 +1167,27 @@ __magic_type(HLSLPointStreamType)
__intrinsic_type($(kIROp_HLSLPointStreamType))
struct PointStream
{
- __target_intrinsic(glsl, "EmitVertex()")
- void Append(T value);
+ [KnownBuiltin("GeometryStreamAppend")]
+ void Append(T value)
+ {
+ __target_switch
+ {
+ case glsl: __intrinsic_asm "EmitVertex()";
+ case hlsl: __intrinsic_asm ".Append";
+ case spirv: spirv_asm { OpEmitVertex; };
+ }
+ }
- __target_intrinsic(glsl, "EndPrimitive()")
- void RestartStrip();
+ [KnownBuiltin("GeometryStreamRestart")]
+ void RestartStrip()
+ {
+ __target_switch
+ {
+ case glsl: __intrinsic_asm "EndPrimitive()";
+ case hlsl: __intrinsic_asm ".RestartStrip";
+ case spirv: spirv_asm { OpEndPrimitive; };
+ }
+ }
};
__generic<T>
@@ -1179,11 +1195,27 @@ __magic_type(HLSLLineStreamType)
__intrinsic_type($(kIROp_HLSLLineStreamType))
struct LineStream
{
- __target_intrinsic(glsl, "EmitVertex()")
- void Append(T value);
+ [KnownBuiltin("GeometryStreamAppend")]
+ void Append(T value)
+ {
+ __target_switch
+ {
+ case glsl: __intrinsic_asm "EmitVertex()";
+ case hlsl: __intrinsic_asm ".Append";
+ case spirv: spirv_asm { OpEmitVertex; };
+ }
+ }
- __target_intrinsic(glsl, "EndPrimitive()")
- void RestartStrip();
+ [KnownBuiltin("GeometryStreamRestart")]
+ void RestartStrip()
+ {
+ __target_switch
+ {
+ case glsl: __intrinsic_asm "EndPrimitive()";
+ case hlsl: __intrinsic_asm ".RestartStrip";
+ case spirv: spirv_asm { OpEndPrimitive; };
+ }
+ }
};
__generic<T>
@@ -1191,11 +1223,27 @@ __magic_type(HLSLTriangleStreamType)
__intrinsic_type($(kIROp_HLSLTriangleStreamType))
struct TriangleStream
{
- __target_intrinsic(glsl, "EmitVertex()")
- void Append(T value);
+ [KnownBuiltin("GeometryStreamAppend")]
+ void Append(T value)
+ {
+ __target_switch
+ {
+ case glsl: __intrinsic_asm "EmitVertex()";
+ case hlsl: __intrinsic_asm ".Append";
+ case spirv: spirv_asm { OpEmitVertex; };
+ }
+ }
- __target_intrinsic(glsl, "EndPrimitive()")
- void RestartStrip();
+ [KnownBuiltin("GeometryStreamRestart")]
+ void RestartStrip()
+ {
+ __target_switch
+ {
+ case glsl: __intrinsic_asm "EndPrimitive()";
+ case hlsl: __intrinsic_asm ".RestartStrip";
+ case spirv: spirv_asm { OpEndPrimitive; };
+ }
+ }
};
#define VECTOR_MAP_UNARY(TYPE, COUNT, FUNC, VALUE) \
@@ -7994,7 +8042,7 @@ struct RayQuery <let rayFlagsGeneric : RAY_FLAG = RAY_FLAG_NONE>
uint iCandidateOrCommitted = 0;
return spirv_asm
{
- %rr:$$bool = OpRayQueryGetIntersectionCandidateAABBOpaqueKHR &this $iCandidateOrCommitted;
+ %rr:$$bool = OpRayQueryGetIntersectionCandidateAABBOpaqueKHR &this;
result:$$bool = OpLogicalNot %rr;
};
}