Skip to content

Commit 73223b1

Browse files
committed
[mlir][dxsa] Add dcl_tessellator_domain instruction
Example: dxsa.dcl_tessellator_domain domain_quad Signed-off-by: Vladimir Shiryaev <tagolog@users.noreply.github.com>
1 parent 856b5d3 commit 73223b1

4 files changed

Lines changed: 60 additions & 0 deletions

File tree

mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,25 @@ def DXSA_GlobalFlagsAttr :
6262
let assemblyFormat = "`<` $value `>`";
6363
}
6464

65+
def DXSA_TessellatorDomain_Isoline : I32EnumAttrCase<"domain_isoline", 1>;
66+
def DXSA_TessellatorDomain_Tri : I32EnumAttrCase<"domain_tri", 2>;
67+
def DXSA_TessellatorDomain_Quad : I32EnumAttrCase<"domain_quad", 3>;
68+
69+
def DXSA_TessellatorDomain : I32EnumAttr<
70+
"TessellatorDomain", "tessellator domain", [
71+
DXSA_TessellatorDomain_Isoline,
72+
DXSA_TessellatorDomain_Tri,
73+
DXSA_TessellatorDomain_Quad
74+
]> {
75+
let cppNamespace = "::mlir::dxsa";
76+
let genSpecializedAttr = 0;
77+
}
78+
79+
def DXSA_TessellatorDomainAttr :
80+
EnumAttr<DXSADialect, DXSA_TessellatorDomain, "tessellator_domain"> {
81+
let assemblyFormat = "$value";
82+
}
83+
6584
//===----------------------------------------------------------------------===//
6685
// DXSA op definitions
6786
//===----------------------------------------------------------------------===//
@@ -158,4 +177,21 @@ def DXSA_DclTemps : DXSA_Op<"dcl_temps"> {
158177
let assemblyFormat = [{ $count attr-dict }];
159178
}
160179

180+
def DXSA_DclTessellatorDomain : DXSA_Op<"dcl_tessellator_domain"> {
181+
let summary = "declares the tessellator domain";
182+
let description = [{
183+
The `dxsa.dcl_tessellator_domain` operation declares the tessellator
184+
domain.
185+
186+
Example:
187+
188+
```mlir
189+
dxsa.dcl_tessellator_domain domain_quad
190+
```
191+
}];
192+
193+
let arguments = (ins DXSA_TessellatorDomainAttr:$domain);
194+
let assemblyFormat = "$domain attr-dict";
195+
}
196+
161197
#endif // DXSA_OPS

mlir/lib/Target/DXSA/BinaryParser.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,12 @@ class DXBuilder {
516516
builder.getI32IntegerAttr(count));
517517
}
518518

519+
Instruction buildDclTessellatorDomain(uint32_t domain, Location loc) {
520+
auto domainAttr = dxsa::TessellatorDomainAttr::get(
521+
builder.getContext(), static_cast<dxsa::TessellatorDomain>(domain));
522+
return dxsa::DclTessellatorDomain::create(builder, loc, domainAttr);
523+
}
524+
519525
private:
520526
MLIRContext *context;
521527
ModuleOp module;
@@ -831,6 +837,14 @@ class Parser {
831837
return builder.buildDclTemps(count, loc);
832838
}
833839

840+
FailureOr<Instruction> parseDclTessellatorDomain(uint32_t opcodeToken,
841+
Location loc) {
842+
auto domain = DECODE_D3D11_SB_TESS_DOMAIN(opcodeToken);
843+
if (domain == D3D11_SB_TESSELLATOR_DOMAIN_UNDEFINED)
844+
return emitError(getLocation(), "tessellator domain cannot be zero");
845+
return builder.buildDclTessellatorDomain(domain, loc);
846+
}
847+
834848
OptionalParseResult parseDclInstruction(uint32_t opcodeToken, Location loc,
835849
Instruction &out) {
836850
FailureOr<Instruction> result;
@@ -841,6 +855,9 @@ class Parser {
841855
case D3D10_SB_OPCODE_DCL_TEMPS:
842856
result = parseDclTemps(loc);
843857
break;
858+
case D3D11_SB_OPCODE_DCL_TESS_DOMAIN:
859+
result = parseDclTessellatorDomain(opcodeToken, loc);
860+
break;
844861
default:
845862
return std::nullopt;
846863
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// RUN: mlir-translate --import-dxsa-bin %S/inputs/dcl_tessellator_domain.bin | FileCheck %s
2+
3+
// CHECK: module {
4+
// CHECK-NEXT: dxsa.dcl_tessellator_domain domain_isoline
5+
// CHECK-NEXT: dxsa.dcl_tessellator_domain domain_tri
6+
// CHECK-NEXT: dxsa.dcl_tessellator_domain domain_quad
7+
// CHECK-NEXT: }
12 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)