From 0711920dd81c1aedb590e88e020b5a37f1c42f9c 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 | 8 +++ mlir/test/Target/DXSA/hull_shader_phases.test | 18 ++++++ 3 files changed, 86 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 4726b0243f87..2acad50bd633 100644 --- a/mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td +++ b/mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td @@ -949,6 +949,66 @@ def DXSA_DclHsForkPhaseInstanceCount : let assemblyFormat = "$count attr-dict"; } +//===----------------------------------------------------------------------===// +// Hull shader phase markers +//===----------------------------------------------------------------------===// + +def DXSA_HsDecls : DXSA_NullaryOp<"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_NullaryOp<"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_NullaryOp<"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_NullaryOp<"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 2699500833c2..00a64ede09d6 100644 --- a/mlir/lib/Target/DXSA/BinaryParser.cpp +++ b/mlir/lib/Target/DXSA/BinaryParser.cpp @@ -2447,6 +2447,14 @@ class Parser { return STREAM_INDEX_OP(CutStream); case D3D11_SB_OPCODE_EMITTHENCUT_STREAM: return STREAM_INDEX_OP(EmitThenCutStream); + 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); } #undef SATURABLE_OP #undef PLAIN_OP 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 3238f8a8c992e9354ac39139af2a320ffee4b78e 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/test/Target/DXSA/hull_shader_phases.test | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) 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