|
12 | 12 | #include "mlir/IR/Location.h" |
13 | 13 | #include "llvm/ADT/ArrayRef.h" |
14 | 14 | #include "llvm/ADT/SmallVector.h" |
| 15 | +#include "llvm/ADT/bit.h" |
15 | 16 | #include "llvm/Support/Debug.h" |
16 | 17 | #include "llvm/Support/DebugLog.h" |
17 | 18 | #include "llvm/Support/Endian.h" |
@@ -635,6 +636,11 @@ class DXBuilder { |
635 | 636 | return dxsa::DclOutput::create(builder, loc, operand); |
636 | 637 | } |
637 | 638 |
|
| 639 | + Instruction buildDclHsMaxTessFactor(float maxTessFactor, Location loc) { |
| 640 | + return dxsa::DclHsMaxTessFactor::create( |
| 641 | + builder, loc, builder.getF32FloatAttr(maxTessFactor)); |
| 642 | + } |
| 643 | + |
638 | 644 | private: |
639 | 645 | MLIRContext *context; |
640 | 646 | ModuleOp module; |
@@ -1174,6 +1180,13 @@ class Parser { |
1174 | 1180 | return builder.buildDclOutput(*operand, loc); |
1175 | 1181 | } |
1176 | 1182 |
|
| 1183 | + FailureOr<Instruction> parseDclHsMaxTessFactor(Location loc) { |
| 1184 | + auto token = parseToken(); |
| 1185 | + FAILURE_IF_FAILED(token); |
| 1186 | + auto maxTessFactor = llvm::bit_cast<float>(*token); |
| 1187 | + return builder.buildDclHsMaxTessFactor(maxTessFactor, loc); |
| 1188 | + } |
| 1189 | + |
1177 | 1190 | OptionalParseResult parseDclInstruction(uint32_t opcodeToken, Location loc, |
1178 | 1191 | Instruction &out) { |
1179 | 1192 | FailureOr<Instruction> result; |
@@ -1220,6 +1233,9 @@ class Parser { |
1220 | 1233 | case D3D10_SB_OPCODE_DCL_OUTPUT: |
1221 | 1234 | result = parseDclOutput(loc); |
1222 | 1235 | break; |
| 1236 | + case D3D11_SB_OPCODE_DCL_HS_MAX_TESSFACTOR: |
| 1237 | + result = parseDclHsMaxTessFactor(loc); |
| 1238 | + break; |
1223 | 1239 | default: |
1224 | 1240 | return std::nullopt; |
1225 | 1241 | } |
|
0 commit comments