|
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" |
@@ -653,6 +654,11 @@ class DXBuilder { |
653 | 654 | return dxsa::DclOutputSiv::create(builder, loc, operand, nameAttr); |
654 | 655 | } |
655 | 656 |
|
| 657 | + Instruction buildDclHsMaxTessFactor(float maxTessFactor, Location loc) { |
| 658 | + return dxsa::DclHsMaxTessFactor::create( |
| 659 | + builder, loc, builder.getF32FloatAttr(maxTessFactor)); |
| 660 | + } |
| 661 | + |
656 | 662 | private: |
657 | 663 | MLIRContext *context; |
658 | 664 | ModuleOp module; |
@@ -1216,6 +1222,13 @@ class Parser { |
1216 | 1222 | return builder.buildDclOutputSiv(*operand, *name, loc); |
1217 | 1223 | } |
1218 | 1224 |
|
| 1225 | + FailureOr<Instruction> parseDclHsMaxTessFactor(Location loc) { |
| 1226 | + auto token = parseToken(); |
| 1227 | + FAILURE_IF_FAILED(token); |
| 1228 | + auto maxTessFactor = llvm::bit_cast<float>(*token); |
| 1229 | + return builder.buildDclHsMaxTessFactor(maxTessFactor, loc); |
| 1230 | + } |
| 1231 | + |
1219 | 1232 | OptionalParseResult parseDclInstruction(uint32_t opcodeToken, Location loc, |
1220 | 1233 | Instruction &out) { |
1221 | 1234 | FailureOr<Instruction> result; |
@@ -1271,6 +1284,9 @@ class Parser { |
1271 | 1284 | case D3D10_SB_OPCODE_DCL_OUTPUT_SIV: |
1272 | 1285 | result = parseDclOutputSiv(loc); |
1273 | 1286 | break; |
| 1287 | + case D3D11_SB_OPCODE_DCL_HS_MAX_TESSFACTOR: |
| 1288 | + result = parseDclHsMaxTessFactor(loc); |
| 1289 | + break; |
1274 | 1290 | default: |
1275 | 1291 | return std::nullopt; |
1276 | 1292 | } |
|
0 commit comments