@@ -62,6 +62,35 @@ def DXSA_GlobalFlagsAttr :
6262 let assemblyFormat = "`<` $value `>`";
6363}
6464
65+ def DXSA_InputPrimitive_Point : I32EnumAttrCase<"point", 1>;
66+ def DXSA_InputPrimitive_Line : I32EnumAttrCase<"line", 2>;
67+ def DXSA_InputPrimitive_Triangle : I32EnumAttrCase<"triangle", 3>;
68+ def DXSA_InputPrimitive_LineAdj : I32EnumAttrCase<"line_adj", 6>;
69+ def DXSA_InputPrimitive_TriangleAdj : I32EnumAttrCase<"triangle_adj", 7>;
70+ foreach i = !range(1, 33) in {
71+ def DXSA_InputPrimitive_Patch#i :
72+ I32EnumAttrCase<"patch" # i, !add(i, 7)>;
73+ }
74+
75+ def DXSA_InputPrimitive : I32EnumAttr<
76+ "InputPrimitive", "geometry shader input primitive type",
77+ !listconcat(
78+ [DXSA_InputPrimitive_Point,
79+ DXSA_InputPrimitive_Line,
80+ DXSA_InputPrimitive_Triangle,
81+ DXSA_InputPrimitive_LineAdj,
82+ DXSA_InputPrimitive_TriangleAdj],
83+ !foreach(i, !range(1, 33),
84+ !cast<I32EnumAttrCase>("DXSA_InputPrimitive_Patch" # i)))> {
85+ let cppNamespace = "::mlir::dxsa";
86+ let genSpecializedAttr = 0;
87+ }
88+
89+ def DXSA_InputPrimitiveAttr :
90+ EnumAttr<DXSADialect, DXSA_InputPrimitive, "input_primitive"> {
91+ let assemblyFormat = "$value";
92+ }
93+
6594//===----------------------------------------------------------------------===//
6695// DXSA op definitions
6796//===----------------------------------------------------------------------===//
@@ -158,4 +187,20 @@ def DXSA_DclTemps : DXSA_Op<"dcl_temps"> {
158187 let assemblyFormat = [{ $count attr-dict }];
159188}
160189
190+ def DXSA_DclInputPrimitive : DXSA_Op<"dcl_input_primitive"> {
191+ let summary = "declares the shader input primitive type";
192+ let description = [{
193+ The `dxsa.dcl_input_primitive` operation declares the input primitive
194+ type that the shader is invoked with.
195+
196+ Example:
197+
198+ ```mlir
199+ dxsa.dcl_input_primitive triangle
200+ ```
201+ }];
202+ let arguments = (ins DXSA_InputPrimitiveAttr:$type);
203+ let assemblyFormat = "$type attr-dict";
204+ }
205+
161206#endif // DXSA_OPS
0 commit comments