Skip to content

Commit 74e82f7

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 47303ee commit 74e82f7

4 files changed

Lines changed: 62 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
@@ -51,6 +51,25 @@ def DXSA_GlobalFlagsAttr :
5151
let assemblyFormat = "`<` $value `>`";
5252
}
5353

54+
def DXSA_TessellatorDomain_Isoline : I32EnumAttrCase<"domain_isoline", 1>;
55+
def DXSA_TessellatorDomain_Tri : I32EnumAttrCase<"domain_tri", 2>;
56+
def DXSA_TessellatorDomain_Quad : I32EnumAttrCase<"domain_quad", 3>;
57+
58+
def DXSA_TessellatorDomain : I32EnumAttr<
59+
"TessellatorDomain", "tessellator domain", [
60+
DXSA_TessellatorDomain_Isoline,
61+
DXSA_TessellatorDomain_Tri,
62+
DXSA_TessellatorDomain_Quad
63+
]> {
64+
let cppNamespace = "::mlir::dxsa";
65+
let genSpecializedAttr = 0;
66+
}
67+
68+
def DXSA_TessellatorDomainAttr :
69+
EnumAttr<DXSADialect, DXSA_TessellatorDomain, "tessellator_domain"> {
70+
let assemblyFormat = "$value";
71+
}
72+
5473
//===----------------------------------------------------------------------===//
5574
// DXSA op definitions
5675
//===----------------------------------------------------------------------===//
@@ -196,4 +215,21 @@ def DXSA_DclOutputControlPointCount :
196215
let assemblyFormat = [{ $count attr-dict }];
197216
}
198217

218+
def DXSA_DclTessellatorDomain : DXSA_Op<"dcl_tessellator_domain"> {
219+
let summary = "declares the tessellator domain";
220+
let description = [{
221+
The `dxsa.dcl_tessellator_domain` operation declares the tessellator
222+
domain.
223+
224+
Example:
225+
226+
```mlir
227+
dxsa.dcl_tessellator_domain domain_quad
228+
```
229+
}];
230+
231+
let arguments = (ins DXSA_TessellatorDomainAttr:$domain);
232+
let assemblyFormat = "$domain attr-dict";
233+
}
234+
199235
#endif // DXSA_OPS

mlir/lib/Target/DXSA/BinaryParser.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,13 @@ class DXBuilder {
529529
builder, loc, builder.getI32IntegerAttr(count));
530530
}
531531

532+
Instruction buildDclTessellatorDomain(dxsa::TessellatorDomain domain,
533+
Location loc) {
534+
auto domainAttr =
535+
dxsa::TessellatorDomainAttr::get(builder.getContext(), domain);
536+
return dxsa::DclTessellatorDomain::create(builder, loc, domainAttr);
537+
}
538+
532539
private:
533540
MLIRContext *context;
534541
ModuleOp module;
@@ -891,6 +898,15 @@ class Parser {
891898
return builder.buildDclOutputControlPointCount(count, loc);
892899
}
893900

901+
FailureOr<Instruction> parseDclTessellatorDomain(uint32_t opcodeToken,
902+
Location loc) {
903+
auto rawDomain = DECODE_D3D11_SB_TESS_DOMAIN(opcodeToken);
904+
auto domain = dxsa::symbolizeTessellatorDomain(rawDomain);
905+
if (!domain)
906+
return emitError(loc, "unknown tessellator domain: ") << rawDomain;
907+
return builder.buildDclTessellatorDomain(*domain, loc);
908+
}
909+
894910
OptionalParseResult parseDclInstruction(uint32_t opcodeToken, Location loc,
895911
Instruction &out) {
896912
FailureOr<Instruction> result;
@@ -907,6 +923,9 @@ class Parser {
907923
case D3D11_SB_OPCODE_DCL_OUTPUT_CONTROL_POINT_COUNT:
908924
result = parseDclOutputControlPointCount(opcodeToken, loc);
909925
break;
926+
case D3D11_SB_OPCODE_DCL_TESS_DOMAIN:
927+
result = parseDclTessellatorDomain(opcodeToken, loc);
928+
break;
910929
default:
911930
return std::nullopt;
912931
}
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)