@@ -392,7 +392,7 @@ class DXILOp<int opcode, DXILOpClass opclass> {
392
392
list<DXILProperty> properties = [];
393
393
}
394
394
395
- // Concrete definitions of DXIL Operations
395
+ // Concrete definitions of DXIL Operations - There are ordered by their OpCode value
396
396
397
397
def Abs : DXILOp<6, unary> {
398
398
let Doc = "Returns the absolute value of the input.";
@@ -841,6 +841,20 @@ def CheckAccessFullyMapped : DXILOp<71, checkAccessFullyMapped> {
841
841
let attributes = [Attributes<DXIL1_0, [ReadOnly]>];
842
842
}
843
843
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
+
844
858
def Discard : DXILOp<82, discard> {
845
859
let Doc = "discard the current pixel";
846
860
let intrinsics = [ IntrinSelect<int_dx_discard> ];
@@ -907,6 +921,48 @@ def SplitDouble : DXILOp<102, splitDouble> {
907
921
let attributes = [Attributes<DXIL1_0, [ReadNone]>];
908
922
}
909
923
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
+
910
966
def Dot4AddI8Packed : DXILOp<163, dot4AddPacked> {
911
967
let Doc = "signed dot product of 4 x i8 vectors packed into i32, with "
912
968
"accumulate to i32";
@@ -942,59 +998,3 @@ def CreateHandleFromBinding : DXILOp<217, createHandleFromBinding> {
942
998
let stages = [Stages<DXIL1_6, [all_stages]>];
943
999
let attributes = [Attributes<DXIL1_0, [ReadNone]>];
944
1000
}
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