From b2e4e0214ae16e0a1cd5b4682e37cd78637d47ef Mon Sep 17 00:00:00 2001 From: Vladislav Dzhidzhoev Date: Wed, 24 Jun 2026 23:04:12 +0200 Subject: [PATCH 1/2] [mlir][dxsa] Add shader phases instructions Depends on https://github.com/access-softek/llvm-project/pull/198. --- mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td | 60 +++++++++++++++++++ mlir/lib/Target/DXSA/BinaryParser.cpp | 9 +++ mlir/test/Target/DXSA/hull_shader_phases.test | 18 ++++++ 3 files changed, 87 insertions(+) create mode 100644 mlir/test/Target/DXSA/hull_shader_phases.test diff --git a/mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td b/mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td index e2815e0fd806..cba743181681 100644 --- a/mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td +++ b/mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td @@ -1005,6 +1005,66 @@ def DXSA_DclHsForkPhaseInstanceCount : let assemblyFormat = "$count attr-dict"; } +//===----------------------------------------------------------------------===// +// Hull shader phase markers +//===----------------------------------------------------------------------===// + +def DXSA_HsDecls : DXSA_NoOperandOp<"hs_decls"> { + let summary = "marks the hull shader declaration section"; + let description = [{ + The `dxsa.hs_decls` operation marks the declaration section of a hull + shader program. + + Example: + + ```mlir + dxsa.hs_decls + ``` + }]; +} + +def DXSA_HsControlPointPhase : DXSA_NoOperandOp<"hs_control_point_phase"> { + let summary = "marks the hull shader control point phase"; + let description = [{ + The `dxsa.hs_control_point_phase` operation marks the control point phase + of a hull shader program. + + Example: + + ```mlir + dxsa.hs_control_point_phase + ``` + }]; +} + +def DXSA_HsForkPhase : DXSA_NoOperandOp<"hs_fork_phase"> { + let summary = "marks the hull shader fork phase"; + let description = [{ + The `dxsa.hs_fork_phase` operation marks the fork phase of a hull shader + program. + + Example: + + ```mlir + dxsa.hs_fork_phase + ``` + }]; +} + +def DXSA_HsJoinPhase : DXSA_NoOperandOp<"hs_join_phase"> { + let summary = "marks the hull shader join phase"; + let description = [{ + The `dxsa.hs_join_phase` operation marks the join phase of a hull shader + program. + + Example: + + ```mlir + dxsa.hs_join_phase + ``` + }]; +} + def DXSA_DclGsInstanceCount : DXSA_Op<"dcl_gs_instance_count"> { let summary = "declares instance count for the geometry shader"; let description = [{ diff --git a/mlir/lib/Target/DXSA/BinaryParser.cpp b/mlir/lib/Target/DXSA/BinaryParser.cpp index 293f68b8d286..515297abc383 100644 --- a/mlir/lib/Target/DXSA/BinaryParser.cpp +++ b/mlir/lib/Target/DXSA/BinaryParser.cpp @@ -2627,6 +2627,15 @@ class Parser { return PLAIN_OP(Loop, 0, 0, HasPreciseAttr::No); case D3D10_SB_OPCODE_RET: return PLAIN_OP(Ret, 0, 0, HasPreciseAttr::No); + // Shader phase instructions + case D3D11_SB_OPCODE_HS_DECLS: + return PLAIN_OP(HsDecls, 0, 0); + case D3D11_SB_OPCODE_HS_CONTROL_POINT_PHASE: + return PLAIN_OP(HsControlPointPhase, 0, 0); + case D3D11_SB_OPCODE_HS_FORK_PHASE: + return PLAIN_OP(HsForkPhase, 0, 0); + case D3D11_SB_OPCODE_HS_JOIN_PHASE: + return PLAIN_OP(HsJoinPhase, 0, 0); // Other instructions case D3D10_SB_OPCODE_NOP: return PLAIN_OP(Nop, 0, 0, HasPreciseAttr::No); diff --git a/mlir/test/Target/DXSA/hull_shader_phases.test b/mlir/test/Target/DXSA/hull_shader_phases.test new file mode 100644 index 000000000000..c5e38db7c63c --- /dev/null +++ b/mlir/test/Target/DXSA/hull_shader_phases.test @@ -0,0 +1,18 @@ +// RUN: mlir-translate --import-dxsa-hex %s | FileCheck %s +// RUN: mlir-translate --import-dxsa-hex %s | mlir-opt --verify-roundtrip + +// CHECK: dxsa.module { + +// CHECK-NEXT: dxsa.hs_decls +0x01000071 + +// CHECK-NEXT: dxsa.hs_control_point_phase +0x01000072 + +// CHECK-NEXT: dxsa.hs_fork_phase +0x01000073 + +// CHECK-NEXT: dxsa.hs_join_phase +0x01000074 + +// CHECK-NEXT: } From 2cb4122e5e703e5dcb82eff9441a7bc5162cbbb4 Mon Sep 17 00:00:00 2001 From: Vladislav Dzhidzhoev Date: Sat, 27 Jun 2026 23:07:45 +0200 Subject: [PATCH 2/2] Use split-input-file in tests --- mlir/lib/Target/DXSA/BinaryParser.cpp | 8 +++---- mlir/test/Target/DXSA/hull_shader_phases.test | 22 ++++++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/mlir/lib/Target/DXSA/BinaryParser.cpp b/mlir/lib/Target/DXSA/BinaryParser.cpp index 515297abc383..0bb75e82bbe9 100644 --- a/mlir/lib/Target/DXSA/BinaryParser.cpp +++ b/mlir/lib/Target/DXSA/BinaryParser.cpp @@ -2629,13 +2629,13 @@ class Parser { return PLAIN_OP(Ret, 0, 0, HasPreciseAttr::No); // Shader phase instructions case D3D11_SB_OPCODE_HS_DECLS: - return PLAIN_OP(HsDecls, 0, 0); + return PLAIN_OP(HsDecls, 0, 0, HasPreciseAttr::No); case D3D11_SB_OPCODE_HS_CONTROL_POINT_PHASE: - return PLAIN_OP(HsControlPointPhase, 0, 0); + return PLAIN_OP(HsControlPointPhase, 0, 0, HasPreciseAttr::No); case D3D11_SB_OPCODE_HS_FORK_PHASE: - return PLAIN_OP(HsForkPhase, 0, 0); + return PLAIN_OP(HsForkPhase, 0, 0, HasPreciseAttr::No); case D3D11_SB_OPCODE_HS_JOIN_PHASE: - return PLAIN_OP(HsJoinPhase, 0, 0); + return PLAIN_OP(HsJoinPhase, 0, 0, HasPreciseAttr::No); // Other instructions case D3D10_SB_OPCODE_NOP: return PLAIN_OP(Nop, 0, 0, HasPreciseAttr::No); diff --git a/mlir/test/Target/DXSA/hull_shader_phases.test b/mlir/test/Target/DXSA/hull_shader_phases.test index c5e38db7c63c..65b59301b175 100644 --- a/mlir/test/Target/DXSA/hull_shader_phases.test +++ b/mlir/test/Target/DXSA/hull_shader_phases.test @@ -1,18 +1,28 @@ -// RUN: mlir-translate --import-dxsa-hex %s | FileCheck %s -// RUN: mlir-translate --import-dxsa-hex %s | mlir-opt --verify-roundtrip - -// CHECK: dxsa.module { +// RUN: mlir-translate --split-input-file --import-dxsa-hex %s | FileCheck %s +// RUN: mlir-translate --split-input-file --import-dxsa-hex %s | mlir-opt --split-input-file --verify-roundtrip +// CHECK-LABEL: dxsa.module { // CHECK-NEXT: dxsa.hs_decls +// CHECK-NEXT: } 0x01000071 +// ----- + +// CHECK-LABEL: dxsa.module { // CHECK-NEXT: dxsa.hs_control_point_phase +// CHECK-NEXT: } 0x01000072 +// ----- + +// CHECK-LABEL: dxsa.module { // CHECK-NEXT: dxsa.hs_fork_phase +// CHECK-NEXT: } 0x01000073 -// CHECK-NEXT: dxsa.hs_join_phase -0x01000074 +// ----- +// CHECK-LABEL: dxsa.module { +// CHECK-NEXT: dxsa.hs_join_phase // CHECK-NEXT: } +0x01000074