@@ -53,194 +53,31 @@ class DXILOpClass<list<LLVMType> OpSig> {
53
53
// utils/hct/hctdb_instrhelp.py of DirectXShaderCompiler repo. The function
54
54
// name has the format "dx.op.<class-name>.<return-type>", in most cases.
55
55
56
+ // NOTE: The following list is not complete. Classes need to be defined as new DXIL Ops
57
+ // are added.
56
58
defset list<DXILOpClass> OpClasses = {
57
- def acceptHitAndEndSearch : DXILOpClass<[llvm_void_ty]>;
58
- // def allocateNodeOutputRecords : DXILOpClass;
59
- def allocateRayQuery : DXILOpClass<[llvm_i32_ty, llvm_i32_ty]>;
60
- // def annotateHandle : DXILOpClass;
61
- // def annotateNodeHandle : DXILOpClass;
62
- // def annotateNodeRecordHandle : DXILOpClass;
63
- // def atomicBinOp : DXILOpClass;
64
- // def atomicCompareExchange : DXILOpClass;
65
- def attributeAtVertex : DXILOpClass<[llvm_any_ty, llvm_i32_ty, llvm_i32_ty, llvm_i8_ty, llvm_i8_ty]>;
66
- def barrier : DXILOpClass<[llvm_void_ty, llvm_i32_ty]>;
67
- // def barrierByMemoryHandle : DXILOpClass;
68
- def barrierByMemoryType : DXILOpClass<[llvm_void_ty, llvm_i32_ty, llvm_i32_ty]>;
69
- // def barrierByNodeRecordHandle : DXILOpClass;
70
- def binary : DXILOpClass<[llvm_any_ty, LLVMMatchType<0>, LLVMMatchType<0>]>;
71
- def binaryWithCarryOrBorrow : DXILOpClass<[llvm_i32_ty, llvm_any_ty, LLVMMatchType<0>]>;
72
- // def binaryWithTwoOuts : DXILOpClass;
73
- // def bitcastF16toI16 : DXILOpClass;
74
- // def bitcastF32toI32 : DXILOpClass;
75
- // def bitcastF64toI64 : DXILOpClass;
76
- // def bitcastI16toF16 : DXILOpClass;
77
- // def bitcastI32toF32 : DXILOpClass;
78
- // def bitcastI64toF64 : DXILOpClass;
79
- // def bufferLoad : DXILOpClass;
80
- // def bufferStore : DXILOpClass;
81
- // def bufferUpdateCounter : DXILOpClass;
82
- // def calculateLOD : DXILOpClass;
83
- // def callShader : DXILOpClass;
84
- // def cbufferLoad : DXILOpClass;
85
- // def cbufferLoadLegacy : DXILOpClass;
86
- // def checkAccessFullyMapped : DXILOpClass;
87
- // def coverage : DXILOpClass;
88
- // def createHandle : DXILOpClass;
89
- // def createHandleForLib : DXILOpClass;
90
- // def createHandleFromBinding : DXILOpClass;
91
- // def createHandleFromHeap : DXILOpClass;
92
- // def createNodeInputRecordHandle : DXILOpClass;
93
- // def createNodeOutputHandle : DXILOpClass;
94
- // def cutStream : DXILOpClass;
95
- // def cycleCounterLegacy : DXILOpClass;
96
- // def discard : DXILOpClass;
97
- // def dispatchMesh : DXILOpClass;
98
- // def dispatchRaysDimensions : DXILOpClass;
99
- // def dispatchRaysIndex : DXILOpClass;
100
- // def domainLocation : DXILOpClass;
101
- def dot2 : DXILOpClass<!listsplat(llvm_anyfloat_ty, 5)>;
102
- // def dot2AddHalf : DXILOpClass;
103
- def dot3 : DXILOpClass<!listsplat(llvm_anyfloat_ty, 7)>;
104
- def dot4 : DXILOpClass<!listsplat(llvm_anyfloat_ty, 9)>;
105
- // def dot4AddPacked : DXILOpClass;
106
- // def emitIndices : DXILOpClass;
107
- // def emitStream : DXILOpClass;
108
- // def emitThenCutStream : DXILOpClass;
109
- // def evalCentroid : DXILOpClass;
110
- // def evalSampleIndex : DXILOpClass;
111
- // def evalSnapped : DXILOpClass;
112
- // def finishedCrossGroupSharing : DXILOpClass;
113
- def flattenedThreadIdInGroup : DXILOpClass<[llvm_i32_ty]>;
114
- // def geometryIndex : DXILOpClass;
115
- // def getDimensions : DXILOpClass;
116
- // def getInputRecordCount : DXILOpClass;
117
- // def getMeshPayload : DXILOpClass;
118
- // def getNodeRecordPtr : DXILOpClass;
119
- // def getRemainingRecursionLevels : DXILOpClass;
120
- def groupId : DXILOpClass<[llvm_i32_ty, llvm_i32_ty]>;
121
- // def gsInstanceID : DXILOpClass;
122
- // def hitKind : DXILOpClass;
123
- // def ignoreHit : DXILOpClass;
124
- // def incrementOutputCount : DXILOpClass;
125
- // def indexNodeHandle : DXILOpClass;
126
- // def innerCoverage : DXILOpClass;
127
- // def instanceID : DXILOpClass;
128
- // def instanceIndex : DXILOpClass;
129
- // def isHelperLane : DXILOpClass;
130
- def isSpecialFloat : DXILOpClass<[llvm_i1_ty, llvm_anyfloat_ty]>;
131
- // def legacyDoubleToFloat : DXILOpClass;
132
- // def legacyDoubleToSInt32 : DXILOpClass;
133
- // def legacyDoubleToUInt32 : DXILOpClass;
134
- // def legacyF16ToF32 : DXILOpClass;
135
- // def legacyF32ToF16 : DXILOpClass;
136
- // def loadInput : DXILOpClass;
137
- // def loadOutputControlPoint : DXILOpClass;
138
- // def loadPatchConstant : DXILOpClass;
139
- // def makeDouble : DXILOpClass;
140
- // def minPrecXRegLoad : DXILOpClass;
141
- // def minPrecXRegStore : DXILOpClass;
142
- // def nodeOutputIsValid : DXILOpClass;
143
- // def objectRayDirection : DXILOpClass;
144
- // def objectRayOrigin : DXILOpClass;
145
- // def objectToWorld : DXILOpClass;
146
- // def outputComplete : DXILOpClass;
147
- // def outputControlPointID : DXILOpClass;
148
- // def pack4x8 : DXILOpClass;
149
- // def primitiveID : DXILOpClass;
150
- // def primitiveIndex : DXILOpClass;
151
- // def quadOp : DXILOpClass;
152
- // def quadReadLaneAt : DXILOpClass;
153
- // def quadVote : DXILOpClass;
154
- // def quaternary : DXILOpClass;
155
- // def rawBufferLoad : DXILOpClass;
156
- // def rawBufferStore : DXILOpClass;
157
- // def rayFlags : DXILOpClass;
158
- // def rayQuery_Abort : DXILOpClass;
159
- // def rayQuery_CommitNonOpaqueTriangleHit : DXILOpClass;
160
- // def rayQuery_CommitProceduralPrimitiveHit : DXILOpClass;
161
- // def rayQuery_Proceed : DXILOpClass;
162
- // def rayQuery_StateMatrix : DXILOpClass;
163
- // def rayQuery_StateScalar : DXILOpClass;
164
- // def rayQuery_StateVector : DXILOpClass;
165
- // def rayQuery_TraceRayInline : DXILOpClass;
166
- // def rayTCurrent : DXILOpClass;
167
- // def rayTMin : DXILOpClass;
168
- // def renderTargetGetSampleCount : DXILOpClass;
169
- // def renderTargetGetSamplePosition : DXILOpClass;
170
- // def reportHit : DXILOpClass;
171
- // def sample : DXILOpClass;
172
- // def sampleBias : DXILOpClass;
173
- // def sampleCmp : DXILOpClass;
174
- // def sampleCmpBias : DXILOpClass;
175
- // def sampleCmpGrad : DXILOpClass;
176
- // def sampleCmpLevel : DXILOpClass;
177
- // def sampleCmpLevelZero : DXILOpClass;
178
- // def sampleGrad : DXILOpClass;
179
- // def sampleIndex : DXILOpClass;
180
- // def sampleLevel : DXILOpClass;
181
- // def setMeshOutputCounts : DXILOpClass;
182
- // def splitDouble : DXILOpClass;
183
- // def startInstanceLocation : DXILOpClass;
184
- // def startVertexLocation : DXILOpClass;
185
- // def storeOutput : DXILOpClass;
186
- // def storePatchConstant : DXILOpClass;
187
- // def storePrimitiveOutput : DXILOpClass;
188
- // def storeVertexOutput : DXILOpClass;
189
- // def tempRegLoad : DXILOpClass;
190
- // def tempRegStore : DXILOpClass;
191
- def tertiary : DXILOpClass<[llvm_any_ty, LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>]>;
192
- // def texture2DMSGetSamplePosition : DXILOpClass;
193
- // def textureGather : DXILOpClass;
194
- // def textureGatherCmp : DXILOpClass;
195
- // def textureGatherRaw : DXILOpClass;
196
- // def textureLoad : DXILOpClass;
197
- // def textureStore : DXILOpClass;
198
- // def textureStoreSample : DXILOpClass;
199
- def threadId : DXILOpClass<[llvm_i32_ty, llvm_i32_ty]>;
200
- def threadIdInGroup : DXILOpClass<[llvm_i32_ty, llvm_i32_ty]>;
201
- // def traceRay : DXILOpClass;
202
- def unary : DXILOpClass<[llvm_any_ty, LLVMMatchType<0>]>;
203
- // def unaryBits : DXILOpClass;
204
- // def unpack4x8 : DXILOpClass;
205
- // def viewID : DXILOpClass;
206
- // def waveActiveAllEqual : DXILOpClass;
207
- // def waveActiveBallot : DXILOpClass;
208
- // def waveActiveBit : DXILOpClass;
209
- // def waveActiveOp : DXILOpClass;
210
- // def waveAllOp : DXILOpClass;
211
- // def waveAllTrue : DXILOpClass;
212
- // def waveAnyTrue : DXILOpClass;
213
- // def waveGetLaneCount : DXILOpClass;
214
- // def waveGetLaneIndex : DXILOpClass;
215
- // def waveIsFirstLane : DXILOpClass;
216
- // def waveMatch : DXILOpClass;
217
- // def waveMatrix_Accumulate : DXILOpClass;
218
- // def waveMatrix_Annotate : DXILOpClass;
219
- // def waveMatrix_Depth : DXILOpClass;
220
- // def waveMatrix_Fill : DXILOpClass;
221
- // def waveMatrix_LoadGroupShared : DXILOpClass;
222
- // def waveMatrix_LoadRawBuf : DXILOpClass;
223
- // def waveMatrix_Multiply : DXILOpClass;
224
- // def waveMatrix_ScalarOp : DXILOpClass;
225
- // def waveMatrix_StoreGroupShared : DXILOpClass;
226
- // def waveMatrix_StoreRawBuf : DXILOpClass;
227
- // def waveMultiPrefixBitCount : DXILOpClass;
228
- // def waveMultiPrefixOp : DXILOpClass;
229
- // def wavePrefixOp : DXILOpClass;
230
- // def waveReadLaneAt : DXILOpClass;
231
- // def waveReadLaneFirst : DXILOpClass;
232
- // def worldRayDirection : DXILOpClass;
233
- // def worldRayOrigin : DXILOpClass;
234
- // def worldToObject : DXILOpClass;
235
- // def writeSamplerFeedback : DXILOpClass;
236
- // def writeSamplerFeedbackBias : DXILOpClass;
237
- // def writeSamplerFeedbackGrad : DXILOpClass;
238
- // def writeSamplerFeedbackLevel: DXILOpClass;
59
+ def acceptHitAndEndSearch : DXILOpClass<[llvm_void_ty]>;
60
+ def allocateRayQuery : DXILOpClass<[llvm_i32_ty, llvm_i32_ty]>;
61
+ def attributeAtVertex : DXILOpClass<[llvm_any_ty, llvm_i32_ty, llvm_i32_ty, llvm_i8_ty, llvm_i8_ty]>;
62
+ def barrier : DXILOpClass<[llvm_void_ty, llvm_i32_ty]>;
63
+ def barrierByMemoryType : DXILOpClass<[llvm_void_ty, llvm_i32_ty, llvm_i32_ty]>;
64
+ def binary : DXILOpClass<[llvm_any_ty, LLVMMatchType<0>, LLVMMatchType<0>]>;
65
+ def binaryWithCarryOrBorrow : DXILOpClass<[llvm_i32_ty, llvm_any_ty, LLVMMatchType<0>]>;
66
+ def dot2 : DXILOpClass<!listsplat(llvm_anyfloat_ty, 5)>;
67
+ def dot3 : DXILOpClass<!listsplat(llvm_anyfloat_ty, 7)>;
68
+ def dot4 : DXILOpClass<!listsplat(llvm_anyfloat_ty, 9)>;
69
+ def flattenedThreadIdInGroup : DXILOpClass<[llvm_i32_ty]>;
70
+ def groupId : DXILOpClass<[llvm_i32_ty, llvm_i32_ty]>;
71
+ def isSpecialFloat : DXILOpClass<[llvm_i1_ty, llvm_anyfloat_ty]>;
72
+ def tertiary : DXILOpClass<[llvm_any_ty, LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>]>;
73
+ def threadId : DXILOpClass<[llvm_i32_ty, llvm_i32_ty]>;
74
+ def threadIdInGroup : DXILOpClass<[llvm_i32_ty, llvm_i32_ty]>;
75
+ def unary : DXILOpClass<[llvm_any_ty, LLVMMatchType<0>]>;
239
76
240
77
// This is a sentinel definition. Hence placed at the end of the list
241
78
// and not as part of the above alphabetically sorted valid definitions.
242
79
// Additionally it is capitalized unlike all the others.
243
- def UnknownOpClass: DXILOpClass<[]>;
80
+ def UnknownOpClass: DXILOpClass<[]>;
244
81
}
245
82
246
83
// Abstraction DXIL Operation to LLVM intrinsic
0 commit comments