@@ -392,7 +392,7 @@ class DXILOp<int opcode, DXILOpClass opclass> {
392392 list<DXILProperty> properties = [];
393393}
394394
395- // Concrete definitions of DXIL Operations
395+ // Concrete definitions of DXIL Operations - There are ordered by their OpCode value
396396
397397def Abs : DXILOp<6, unary> {
398398 let Doc = "Returns the absolute value of the input.";
@@ -841,6 +841,20 @@ def CheckAccessFullyMapped : DXILOp<71, checkAccessFullyMapped> {
841841 let attributes = [Attributes<DXIL1_0, [ReadOnly]>];
842842}
843843
844+ def Barrier : DXILOp<80, barrier> {
845+ let Doc = "inserts a memory barrier in the shader";
846+ let intrinsics = [
847+ IntrinSelect<
848+ int_dx_group_memory_barrier_with_group_sync,
849+ [ IntrinArgI32<BarrierMode_GroupMemoryBarrierWithGroupSync> ]>,
850+ ];
851+
852+ let arguments = [Int32Ty];
853+ let result = VoidTy;
854+ let stages = [Stages<DXIL1_0, [compute, library]>];
855+ let attributes = [Attributes<DXIL1_0, []>];
856+ }
857+
844858def Discard : DXILOp<82, discard> {
845859 let Doc = "discard the current pixel";
846860 let intrinsics = [ IntrinSelect<int_dx_discard> ];
@@ -907,6 +921,48 @@ def SplitDouble : DXILOp<102, splitDouble> {
907921 let attributes = [Attributes<DXIL1_0, [ReadNone]>];
908922}
909923
924+ def WaveIsFirstLane : DXILOp<110, waveIsFirstLane> {
925+ let Doc = "returns 1 for the first lane in the wave";
926+ let intrinsics = [ IntrinSelect<int_dx_wave_is_first_lane> ];
927+ let arguments = [];
928+ let result = Int1Ty;
929+ let stages = [Stages<DXIL1_0, [all_stages]>];
930+ }
931+
932+ def WaveGetLaneIndex : DXILOp<111, waveGetLaneIndex> {
933+ let Doc = "returns the index of the current lane in the wave";
934+ let intrinsics = [ IntrinSelect<int_dx_wave_getlaneindex> ];
935+ let arguments = [];
936+ let result = Int32Ty;
937+ let stages = [Stages<DXIL1_0, [all_stages]>];
938+ let attributes = [Attributes<DXIL1_0, [ReadOnly]>];
939+ }
940+
941+ def WaveActiveAnyTrue : DXILOp<113, waveAnyTrue> {
942+ let Doc = "returns true if the expression is true in any of the active lanes in the current wave";
943+ let intrinsics = [ IntrinSelect<int_dx_wave_any> ];
944+ let arguments = [Int1Ty];
945+ let result = Int1Ty;
946+ let stages = [Stages<DXIL1_0, [all_stages]>];
947+ }
948+
949+ def WaveReadLaneAt: DXILOp<117, waveReadLaneAt> {
950+ let Doc = "returns the value from the specified lane";
951+ let intrinsics = [ IntrinSelect<int_dx_wave_readlane> ];
952+ let arguments = [OverloadTy, Int32Ty];
953+ let result = OverloadTy;
954+ let overloads = [Overloads<DXIL1_0, [HalfTy, FloatTy, DoubleTy, Int1Ty, Int16Ty, Int32Ty, Int64Ty]>];
955+ let stages = [Stages<DXIL1_0, [all_stages]>];
956+ }
957+
958+ def WaveAllBitCount : DXILOp<135, waveAllOp> {
959+ let Doc = "returns the count of bits set to 1 across the wave";
960+ let intrinsics = [ IntrinSelect<int_dx_wave_active_countbits> ];
961+ let arguments = [Int1Ty];
962+ let result = Int32Ty;
963+ let stages = [Stages<DXIL1_0, [all_stages]>];
964+ }
965+
910966def Dot4AddI8Packed : DXILOp<163, dot4AddPacked> {
911967 let Doc = "signed dot product of 4 x i8 vectors packed into i32, with "
912968 "accumulate to i32";
@@ -942,59 +998,3 @@ def CreateHandleFromBinding : DXILOp<217, createHandleFromBinding> {
942998 let stages = [Stages<DXIL1_6, [all_stages]>];
943999 let attributes = [Attributes<DXIL1_0, [ReadNone]>];
9441000}
945-
946- def WaveActiveAnyTrue : DXILOp<113, waveAnyTrue> {
947- let Doc = "returns true if the expression is true in any of the active lanes in the current wave";
948- let intrinsics = [ IntrinSelect<int_dx_wave_any> ];
949- let arguments = [Int1Ty];
950- let result = Int1Ty;
951- let stages = [Stages<DXIL1_0, [all_stages]>];
952- }
953-
954- def WaveIsFirstLane : DXILOp<110, waveIsFirstLane> {
955- let Doc = "returns 1 for the first lane in the wave";
956- let intrinsics = [ IntrinSelect<int_dx_wave_is_first_lane> ];
957- let arguments = [];
958- let result = Int1Ty;
959- let stages = [Stages<DXIL1_0, [all_stages]>];
960- }
961-
962- def WaveReadLaneAt: DXILOp<117, waveReadLaneAt> {
963- let Doc = "returns the value from the specified lane";
964- let intrinsics = [ IntrinSelect<int_dx_wave_readlane> ];
965- let arguments = [OverloadTy, Int32Ty];
966- let result = OverloadTy;
967- let overloads = [Overloads<DXIL1_0, [HalfTy, FloatTy, DoubleTy, Int1Ty, Int16Ty, Int32Ty, Int64Ty]>];
968- let stages = [Stages<DXIL1_0, [all_stages]>];
969- }
970-
971- def WaveGetLaneIndex : DXILOp<111, waveGetLaneIndex> {
972- let Doc = "returns the index of the current lane in the wave";
973- let intrinsics = [ IntrinSelect<int_dx_wave_getlaneindex> ];
974- let arguments = [];
975- let result = Int32Ty;
976- let stages = [Stages<DXIL1_0, [all_stages]>];
977- let attributes = [Attributes<DXIL1_0, [ReadOnly]>];
978- }
979-
980- def WaveAllBitCount : DXILOp<135, waveAllOp> {
981- let Doc = "returns the count of bits set to 1 across the wave";
982- let intrinsics = [ IntrinSelect<int_dx_wave_active_countbits> ];
983- let arguments = [Int1Ty];
984- let result = Int32Ty;
985- let stages = [Stages<DXIL1_0, [all_stages]>];
986- }
987-
988- def Barrier : DXILOp<80, barrier> {
989- let Doc = "inserts a memory barrier in the shader";
990- let intrinsics = [
991- IntrinSelect<
992- int_dx_group_memory_barrier_with_group_sync,
993- [ IntrinArgI32<BarrierMode_GroupMemoryBarrierWithGroupSync> ]>,
994- ];
995-
996- let arguments = [Int32Ty];
997- let result = VoidTy;
998- let stages = [Stages<DXIL1_0, [compute, library]>];
999- let attributes = [Attributes<DXIL1_0, []>];
1000- }
0 commit comments