Skip to content

Commit bcc5e3d

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 bcc5e3d

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
@@ -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: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,12 @@ class DXBuilder {
529529
builder, loc, builder.getI32IntegerAttr(count));
530530
}
531531

532+
Instruction buildDclTessellatorDomain(uint32_t domain, Location loc) {
533+
auto domainAttr = dxsa::TessellatorDomainAttr::get(
534+
builder.getContext(), static_cast<dxsa::TessellatorDomain>(domain));
535+
return dxsa::DclTessellatorDomain::create(builder, loc, domainAttr);
536+
}
537+
532538
private:
533539
MLIRContext *context;
534540
ModuleOp module;
@@ -891,6 +897,14 @@ class Parser {
891897
return builder.buildDclOutputControlPointCount(count, loc);
892898
}
893899

900+
FailureOr<Instruction> parseDclTessellatorDomain(uint32_t opcodeToken,
901+
Location loc) {
902+
auto domain = DECODE_D3D11_SB_TESS_DOMAIN(opcodeToken);
903+
if (domain == D3D11_SB_TESSELLATOR_DOMAIN_UNDEFINED)
904+
return emitError(getLocation(), "tessellator domain cannot be zero");
905+
return builder.buildDclTessellatorDomain(domain, loc);
906+
}
907+
894908
OptionalParseResult parseDclInstruction(uint32_t opcodeToken, Location loc,
895909
Instruction &out) {
896910
FailureOr<Instruction> result;
@@ -907,6 +921,9 @@ class Parser {
907921
case D3D11_SB_OPCODE_DCL_OUTPUT_CONTROL_POINT_COUNT:
908922
result = parseDclOutputControlPointCount(opcodeToken, loc);
909923
break;
924+
case D3D11_SB_OPCODE_DCL_TESS_DOMAIN:
925+
result = parseDclTessellatorDomain(opcodeToken, loc);
926+
break;
910927
default:
911928
return std::nullopt;
912929
}
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)