From ebe8ddefc48478307d5f206cd3e40c41d28a36e3 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 26 Sep 2023 23:56:06 -0700 Subject: 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 Co-authored-by: Ellie Hermaszewska --- source/slang/hlsl.meta.slang | 74 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 61 insertions(+), 13 deletions(-) (limited to 'source/slang/hlsl.meta.slang') 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 @@ -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 @@ -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 uint iCandidateOrCommitted = 0; return spirv_asm { - %rr:$$bool = OpRayQueryGetIntersectionCandidateAABBOpaqueKHR &this $iCandidateOrCommitted; + %rr:$$bool = OpRayQueryGetIntersectionCandidateAABBOpaqueKHR &this; result:$$bool = OpLogicalNot %rr; }; } -- cgit v1.2.3