aboutsummaryrefslogtreecommitdiff
path: root/contrib/DirectX-Headers-1.618.2/include/directx/DirectML.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/DirectX-Headers-1.618.2/include/directx/DirectML.h')
-rw-r--r--contrib/DirectX-Headers-1.618.2/include/directx/DirectML.h2651
1 files changed, 2651 insertions, 0 deletions
diff --git a/contrib/DirectX-Headers-1.618.2/include/directx/DirectML.h b/contrib/DirectX-Headers-1.618.2/include/directx/DirectML.h
new file mode 100644
index 0000000..3bd1921
--- /dev/null
+++ b/contrib/DirectX-Headers-1.618.2/include/directx/DirectML.h
@@ -0,0 +1,2651 @@
1// Copyright (c) Microsoft Corporation. All rights reserved.
2
3#ifndef DIRECTML_H
4#define DIRECTML_H
5#pragma once
6
7#ifdef _GAMING_XBOX_SCARLETT
8#include "d3d12_xs.h"
9#elif _GAMING_XBOX_XBOXONE
10#include "d3d12_x.h"
11#else
12#include "d3d12.h"
13#endif
14
15#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES)
16
17#ifndef DML_DECLARE_INTERFACE
18#define DML_DECLARE_INTERFACE(iid) DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE
19#endif
20
21#ifndef DML_TARGET_VERSION
22
23#if !defined(NTDDI_VERSION) || defined(DML_TARGET_VERSION_USE_LATEST) // Use the latest if using redist or no Windows target set.
24#define DML_TARGET_VERSION 0x6400
25#elif defined(NTDDI_WIN10_ZN) && NTDDI_VERSION >= NTDDI_WIN10_ZN
26#define DML_TARGET_VERSION 0x6000
27#elif defined(NTDDI_WIN10_NI) && NTDDI_VERSION >= NTDDI_WIN10_NI
28#define DML_TARGET_VERSION 0x5000
29#elif defined(NTDDI_WIN10_CO) && NTDDI_VERSION >= NTDDI_WIN10_CO
30#define DML_TARGET_VERSION 0x4000
31#elif defined(NTDDI_WIN10_FE) && NTDDI_VERSION >= NTDDI_WIN10_FE
32#define DML_TARGET_VERSION 0x3000
33#elif defined(NTDDI_WIN10_VB) && NTDDI_VERSION >= NTDDI_WIN10_VB // Windows 10 2004 Update
34#define DML_TARGET_VERSION 0x2000
35#else // defined(NTDDI_WIN10_19H1) && NTDDI_VERSION >= NTDDI_WIN10_19H1 // Windows 10 1903 Update
36#define DML_TARGET_VERSION 0x1000
37#endif
38
39#endif // !defined(DML_TARGET_VERSION)
40
41// ===================================================================================================================
42// DirectML constants
43// ===================================================================================================================
44
45static const UINT DML_TENSOR_DIMENSION_COUNT_MAX = 5;
46#if DML_TARGET_VERSION >= 0x3000
47static const UINT DML_TENSOR_DIMENSION_COUNT_MAX1 = 8;
48#endif
49
50static const UINT DML_TEMPORARY_BUFFER_ALIGNMENT = 256;
51static const UINT DML_PERSISTENT_BUFFER_ALIGNMENT = 256;
52
53static const UINT DML_MINIMUM_BUFFER_TENSOR_ALIGNMENT = 16;
54
55
56// ===================================================================================================================
57// Interface declarations
58// ===================================================================================================================
59
60interface IDMLObject;
61interface IDMLDevice;
62interface IDMLDeviceChild;
63interface IDMLPageable;
64interface IDMLDispatchable;
65interface IDMLOperator;
66interface IDMLCompiledOperator;
67interface IDMLOperatorInitializer;
68interface IDMLBindingTable;
69interface IDMLCommandRecorder;
70
71
72// ===================================================================================================================
73// Tensor descriptions
74// ===================================================================================================================
75
76enum DML_TENSOR_DATA_TYPE
77{
78 DML_TENSOR_DATA_TYPE_UNKNOWN,
79 DML_TENSOR_DATA_TYPE_FLOAT32,
80 DML_TENSOR_DATA_TYPE_FLOAT16,
81 DML_TENSOR_DATA_TYPE_UINT32,
82 DML_TENSOR_DATA_TYPE_UINT16,
83 DML_TENSOR_DATA_TYPE_UINT8,
84 DML_TENSOR_DATA_TYPE_INT32,
85 DML_TENSOR_DATA_TYPE_INT16,
86 DML_TENSOR_DATA_TYPE_INT8,
87 DML_TENSOR_DATA_TYPE_FLOAT64,
88 DML_TENSOR_DATA_TYPE_UINT64,
89 DML_TENSOR_DATA_TYPE_INT64,
90#if DML_TARGET_VERSION >= 0x6300
91 DML_TENSOR_DATA_TYPE_UINT4,
92 DML_TENSOR_DATA_TYPE_INT4,
93#endif // DML_TARGET_VERSION >= 0x6300
94};
95
96enum DML_TENSOR_TYPE
97{
98 DML_TENSOR_TYPE_INVALID,
99
100 DML_TENSOR_TYPE_BUFFER,
101};
102
103enum DML_TENSOR_FLAGS
104{
105 DML_TENSOR_FLAG_NONE = 0x0,
106 DML_TENSOR_FLAG_OWNED_BY_DML = 0x1,
107};
108
109DEFINE_ENUM_FLAG_OPERATORS(DML_TENSOR_FLAGS)
110
111struct DML_BUFFER_TENSOR_DESC
112{
113 DML_TENSOR_DATA_TYPE DataType;
114 DML_TENSOR_FLAGS Flags;
115 UINT DimensionCount;
116 _Field_size_(DimensionCount) const UINT* Sizes;
117 _Field_size_opt_(DimensionCount) const UINT* Strides;
118 UINT64 TotalTensorSizeInBytes;
119 UINT GuaranteedBaseOffsetAlignment;
120};
121
122struct DML_TENSOR_DESC
123{
124 DML_TENSOR_TYPE Type;
125 _Field_size_(_Inexpressible_("Dependent on tensor type")) const void* Desc;
126};
127
128
129// ===================================================================================================================
130// Operator types
131// ===================================================================================================================
132
133enum DML_OPERATOR_TYPE
134{
135 DML_OPERATOR_INVALID,
136
137 DML_OPERATOR_ELEMENT_WISE_IDENTITY,
138 DML_OPERATOR_ELEMENT_WISE_ABS,
139 DML_OPERATOR_ELEMENT_WISE_ACOS,
140 DML_OPERATOR_ELEMENT_WISE_ADD,
141 DML_OPERATOR_ELEMENT_WISE_ASIN,
142 DML_OPERATOR_ELEMENT_WISE_ATAN,
143 DML_OPERATOR_ELEMENT_WISE_CEIL,
144 DML_OPERATOR_ELEMENT_WISE_CLIP,
145 DML_OPERATOR_ELEMENT_WISE_COS,
146 DML_OPERATOR_ELEMENT_WISE_DIVIDE,
147 DML_OPERATOR_ELEMENT_WISE_EXP,
148 DML_OPERATOR_ELEMENT_WISE_FLOOR,
149 DML_OPERATOR_ELEMENT_WISE_LOG,
150 DML_OPERATOR_ELEMENT_WISE_LOGICAL_AND,
151 DML_OPERATOR_ELEMENT_WISE_LOGICAL_EQUALS,
152 DML_OPERATOR_ELEMENT_WISE_LOGICAL_GREATER_THAN,
153 DML_OPERATOR_ELEMENT_WISE_LOGICAL_LESS_THAN,
154 DML_OPERATOR_ELEMENT_WISE_LOGICAL_NOT,
155 DML_OPERATOR_ELEMENT_WISE_LOGICAL_OR,
156 DML_OPERATOR_ELEMENT_WISE_LOGICAL_XOR,
157 DML_OPERATOR_ELEMENT_WISE_MAX,
158 DML_OPERATOR_ELEMENT_WISE_MEAN,
159 DML_OPERATOR_ELEMENT_WISE_MIN,
160 DML_OPERATOR_ELEMENT_WISE_MULTIPLY,
161 DML_OPERATOR_ELEMENT_WISE_POW,
162 DML_OPERATOR_ELEMENT_WISE_CONSTANT_POW,
163 DML_OPERATOR_ELEMENT_WISE_RECIP,
164 DML_OPERATOR_ELEMENT_WISE_SIN,
165 DML_OPERATOR_ELEMENT_WISE_SQRT,
166 DML_OPERATOR_ELEMENT_WISE_SUBTRACT,
167 DML_OPERATOR_ELEMENT_WISE_TAN,
168 DML_OPERATOR_ELEMENT_WISE_THRESHOLD,
169 DML_OPERATOR_ELEMENT_WISE_QUANTIZE_LINEAR,
170 DML_OPERATOR_ELEMENT_WISE_DEQUANTIZE_LINEAR,
171 DML_OPERATOR_ACTIVATION_ELU,
172 DML_OPERATOR_ACTIVATION_HARDMAX,
173 DML_OPERATOR_ACTIVATION_HARD_SIGMOID,
174 DML_OPERATOR_ACTIVATION_IDENTITY,
175 DML_OPERATOR_ACTIVATION_LEAKY_RELU,
176 DML_OPERATOR_ACTIVATION_LINEAR,
177 DML_OPERATOR_ACTIVATION_LOG_SOFTMAX,
178 DML_OPERATOR_ACTIVATION_PARAMETERIZED_RELU,
179 DML_OPERATOR_ACTIVATION_PARAMETRIC_SOFTPLUS,
180 DML_OPERATOR_ACTIVATION_RELU,
181 DML_OPERATOR_ACTIVATION_SCALED_ELU,
182 DML_OPERATOR_ACTIVATION_SCALED_TANH,
183 DML_OPERATOR_ACTIVATION_SIGMOID,
184 DML_OPERATOR_ACTIVATION_SOFTMAX,
185 DML_OPERATOR_ACTIVATION_SOFTPLUS,
186 DML_OPERATOR_ACTIVATION_SOFTSIGN,
187 DML_OPERATOR_ACTIVATION_TANH,
188 DML_OPERATOR_ACTIVATION_THRESHOLDED_RELU,
189 DML_OPERATOR_CONVOLUTION,
190 DML_OPERATOR_GEMM,
191 DML_OPERATOR_REDUCE,
192 DML_OPERATOR_AVERAGE_POOLING,
193 DML_OPERATOR_LP_POOLING,
194 DML_OPERATOR_MAX_POOLING,
195 DML_OPERATOR_ROI_POOLING,
196 DML_OPERATOR_SLICE,
197 DML_OPERATOR_CAST,
198 DML_OPERATOR_SPLIT,
199 DML_OPERATOR_JOIN,
200 DML_OPERATOR_PADDING,
201 DML_OPERATOR_VALUE_SCALE_2D,
202 DML_OPERATOR_UPSAMPLE_2D,
203 DML_OPERATOR_GATHER,
204 DML_OPERATOR_SPACE_TO_DEPTH,
205 DML_OPERATOR_DEPTH_TO_SPACE,
206 DML_OPERATOR_TILE,
207 DML_OPERATOR_TOP_K,
208 DML_OPERATOR_BATCH_NORMALIZATION,
209 DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION,
210 DML_OPERATOR_LOCAL_RESPONSE_NORMALIZATION,
211 DML_OPERATOR_LP_NORMALIZATION,
212 DML_OPERATOR_RNN,
213 DML_OPERATOR_LSTM,
214 DML_OPERATOR_GRU,
215
216#if DML_TARGET_VERSION >= 0x2000
217 DML_OPERATOR_ELEMENT_WISE_SIGN,
218 DML_OPERATOR_ELEMENT_WISE_IS_NAN,
219 DML_OPERATOR_ELEMENT_WISE_ERF,
220 DML_OPERATOR_ELEMENT_WISE_SINH,
221 DML_OPERATOR_ELEMENT_WISE_COSH,
222 DML_OPERATOR_ELEMENT_WISE_TANH,
223 DML_OPERATOR_ELEMENT_WISE_ASINH,
224 DML_OPERATOR_ELEMENT_WISE_ACOSH,
225 DML_OPERATOR_ELEMENT_WISE_ATANH,
226 DML_OPERATOR_ELEMENT_WISE_IF,
227 DML_OPERATOR_ELEMENT_WISE_ADD1,
228 DML_OPERATOR_ACTIVATION_SHRINK,
229 DML_OPERATOR_MAX_POOLING1,
230 DML_OPERATOR_MAX_UNPOOLING,
231 DML_OPERATOR_DIAGONAL_MATRIX,
232 DML_OPERATOR_SCATTER_ELEMENTS,
233 DML_OPERATOR_SCATTER = DML_OPERATOR_SCATTER_ELEMENTS, // Alias name for backwards compatibility.
234 DML_OPERATOR_ONE_HOT,
235 DML_OPERATOR_RESAMPLE,
236#endif // DML_TARGET_VERSION >= 0x2000
237
238#if DML_TARGET_VERSION >= 0x2100
239 DML_OPERATOR_ELEMENT_WISE_BIT_SHIFT_LEFT,
240 DML_OPERATOR_ELEMENT_WISE_BIT_SHIFT_RIGHT,
241 DML_OPERATOR_ELEMENT_WISE_ROUND,
242 DML_OPERATOR_ELEMENT_WISE_IS_INFINITY,
243 DML_OPERATOR_ELEMENT_WISE_MODULUS_TRUNCATE,
244 DML_OPERATOR_ELEMENT_WISE_MODULUS_FLOOR,
245 DML_OPERATOR_FILL_VALUE_CONSTANT,
246 DML_OPERATOR_FILL_VALUE_SEQUENCE,
247 DML_OPERATOR_CUMULATIVE_SUMMATION,
248 DML_OPERATOR_REVERSE_SUBSEQUENCES,
249 DML_OPERATOR_GATHER_ELEMENTS,
250 DML_OPERATOR_GATHER_ND,
251 DML_OPERATOR_SCATTER_ND,
252 DML_OPERATOR_MAX_POOLING2,
253 DML_OPERATOR_SLICE1,
254 DML_OPERATOR_TOP_K1,
255 DML_OPERATOR_DEPTH_TO_SPACE1,
256 DML_OPERATOR_SPACE_TO_DEPTH1,
257 DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION1,
258 DML_OPERATOR_RESAMPLE1,
259 DML_OPERATOR_MATRIX_MULTIPLY_INTEGER,
260 DML_OPERATOR_QUANTIZED_LINEAR_MATRIX_MULTIPLY,
261 DML_OPERATOR_CONVOLUTION_INTEGER,
262 DML_OPERATOR_QUANTIZED_LINEAR_CONVOLUTION,
263#endif // DML_TARGET_VERSION >= 0x2100
264
265#if DML_TARGET_VERSION >= 0x3000
266 DML_OPERATOR_ELEMENT_WISE_BIT_AND,
267 DML_OPERATOR_ELEMENT_WISE_BIT_OR,
268 DML_OPERATOR_ELEMENT_WISE_BIT_XOR,
269 DML_OPERATOR_ELEMENT_WISE_BIT_NOT,
270 DML_OPERATOR_ELEMENT_WISE_BIT_COUNT,
271 DML_OPERATOR_ELEMENT_WISE_LOGICAL_GREATER_THAN_OR_EQUAL,
272 DML_OPERATOR_ELEMENT_WISE_LOGICAL_LESS_THAN_OR_EQUAL,
273 DML_OPERATOR_ACTIVATION_CELU,
274 DML_OPERATOR_ACTIVATION_RELU_GRAD,
275 DML_OPERATOR_AVERAGE_POOLING_GRAD,
276 DML_OPERATOR_MAX_POOLING_GRAD,
277 DML_OPERATOR_RANDOM_GENERATOR,
278 DML_OPERATOR_NONZERO_COORDINATES,
279 DML_OPERATOR_RESAMPLE_GRAD,
280 DML_OPERATOR_SLICE_GRAD,
281 DML_OPERATOR_ADAM_OPTIMIZER,
282 DML_OPERATOR_ARGMIN,
283 DML_OPERATOR_ARGMAX,
284 DML_OPERATOR_ROI_ALIGN,
285 DML_OPERATOR_GATHER_ND1,
286#endif // DML_TARGET_VERSION >= 0x3000
287
288#if DML_TARGET_VERSION >= 0x3100
289 DML_OPERATOR_ELEMENT_WISE_ATAN_YX,
290 DML_OPERATOR_ELEMENT_WISE_CLIP_GRAD,
291 DML_OPERATOR_ELEMENT_WISE_DIFFERENCE_SQUARE,
292 DML_OPERATOR_LOCAL_RESPONSE_NORMALIZATION_GRAD,
293 DML_OPERATOR_CUMULATIVE_PRODUCT,
294 DML_OPERATOR_BATCH_NORMALIZATION_GRAD,
295#endif // DML_TARGET_VERSION >= 0x3100
296
297#if DML_TARGET_VERSION >= 0x4000
298 DML_OPERATOR_ELEMENT_WISE_QUANTIZED_LINEAR_ADD,
299 DML_OPERATOR_DYNAMIC_QUANTIZE_LINEAR,
300 DML_OPERATOR_ROI_ALIGN1,
301#endif // DML_TARGET_VERSION >= 0x4000
302
303#if DML_TARGET_VERSION >= 0x4100
304 DML_OPERATOR_ROI_ALIGN_GRAD,
305 DML_OPERATOR_BATCH_NORMALIZATION_TRAINING,
306 DML_OPERATOR_BATCH_NORMALIZATION_TRAINING_GRAD,
307#endif // DML_TARGET_VERSION >= 0x4100
308
309#if DML_TARGET_VERSION >= 0x5000
310 DML_OPERATOR_ELEMENT_WISE_CLIP1,
311 DML_OPERATOR_ELEMENT_WISE_CLIP_GRAD1,
312 DML_OPERATOR_PADDING1,
313 DML_OPERATOR_ELEMENT_WISE_NEGATE,
314#endif // DML_TARGET_VERSION >= 0x5000
315
316#if DML_TARGET_VERSION >= 0x5100
317 DML_OPERATOR_ACTIVATION_GELU,
318 DML_OPERATOR_ACTIVATION_SOFTMAX1,
319 DML_OPERATOR_ACTIVATION_LOG_SOFTMAX1,
320 DML_OPERATOR_ACTIVATION_HARDMAX1,
321 DML_OPERATOR_RESAMPLE2,
322 DML_OPERATOR_RESAMPLE_GRAD1,
323 DML_OPERATOR_DIAGONAL_MATRIX1,
324#endif // DML_TARGET_VERSION >= 0x5100
325
326#if DML_TARGET_VERSION >= 0x6100
327 DML_OPERATOR_MULTIHEAD_ATTENTION,
328#endif // DML_TARGET_VERSION >= 0x6100
329
330#if DML_TARGET_VERSION >= 0x6200
331 DML_OPERATOR_LP_POOLING1,
332 DML_OPERATOR_AVERAGE_POOLING1,
333 DML_OPERATOR_ACTIVATION_SWISH,
334 DML_OPERATOR_ACTIVATION_HARD_SWISH,
335 DML_OPERATOR_QUANTIZED_LINEAR_AVERAGE_POOLING,
336 DML_OPERATOR_MATRIX_MULTIPLY_INTEGER_TO_FLOAT,
337#endif // DML_TARGET_VERSION >= 0x6200
338
339#if DML_TARGET_VERSION >= 0x6300
340 DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION2,
341 DML_OPERATOR_MULTIHEAD_ATTENTION1,
342 DML_OPERATOR_QUANTIZE,
343 DML_OPERATOR_DEQUANTIZE,
344#endif // DML_TARGET_VERSION >= 0x6300
345
346#if DML_TARGET_VERSION >= 0x6400
347 DML_OPERATOR_RESAMPLE3,
348 DML_OPERATOR_FOLD,
349 DML_OPERATOR_UNFOLD,
350#endif // DML_TARGET_VERSION >= 0x6400
351};
352
353// ===================================================================================================================
354// Operator enumerations and structures
355// ===================================================================================================================
356
357enum DML_REDUCE_FUNCTION
358{
359 DML_REDUCE_FUNCTION_ARGMAX,
360 DML_REDUCE_FUNCTION_ARGMIN,
361 DML_REDUCE_FUNCTION_AVERAGE,
362 DML_REDUCE_FUNCTION_L1,
363 DML_REDUCE_FUNCTION_L2,
364 DML_REDUCE_FUNCTION_LOG_SUM,
365 DML_REDUCE_FUNCTION_LOG_SUM_EXP,
366 DML_REDUCE_FUNCTION_MAX,
367 DML_REDUCE_FUNCTION_MIN,
368 DML_REDUCE_FUNCTION_MULTIPLY,
369 DML_REDUCE_FUNCTION_SUM,
370 DML_REDUCE_FUNCTION_SUM_SQUARE,
371};
372
373enum DML_MATRIX_TRANSFORM
374{
375 DML_MATRIX_TRANSFORM_NONE,
376 DML_MATRIX_TRANSFORM_TRANSPOSE,
377};
378
379enum DML_CONVOLUTION_MODE
380{
381 DML_CONVOLUTION_MODE_CONVOLUTION,
382 DML_CONVOLUTION_MODE_CROSS_CORRELATION,
383};
384
385enum DML_CONVOLUTION_DIRECTION
386{
387 DML_CONVOLUTION_DIRECTION_FORWARD,
388 DML_CONVOLUTION_DIRECTION_BACKWARD,
389};
390
391enum DML_PADDING_MODE
392{
393 DML_PADDING_MODE_CONSTANT,
394 DML_PADDING_MODE_EDGE,
395 DML_PADDING_MODE_REFLECTION,
396
397#if DML_TARGET_VERSION >= 0x3000
398 DML_PADDING_MODE_SYMMETRIC,
399#endif
400
401#if DML_TARGET_VERSION >= 0x6400
402 DML_PADDING_MODE_WRAP,
403#endif
404};
405
406enum DML_INTERPOLATION_MODE
407{
408 DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR,
409 DML_INTERPOLATION_MODE_LINEAR,
410};
411
412struct DML_SCALE_BIAS
413{
414 FLOAT Scale;
415 FLOAT Bias;
416};
417
418struct DML_SIZE_2D
419{
420 UINT Width;
421 UINT Height;
422};
423
424enum DML_RECURRENT_NETWORK_DIRECTION
425{
426 DML_RECURRENT_NETWORK_DIRECTION_FORWARD,
427 DML_RECURRENT_NETWORK_DIRECTION_BACKWARD,
428 DML_RECURRENT_NETWORK_DIRECTION_BIDIRECTIONAL,
429};
430
431#if DML_TARGET_VERSION >= 0x2100
432
433enum DML_ROUNDING_MODE
434{
435 DML_ROUNDING_MODE_HALVES_TO_NEAREST_EVEN,
436 DML_ROUNDING_MODE_TOWARD_ZERO,
437 DML_ROUNDING_MODE_TOWARD_INFINITY,
438};
439
440enum DML_IS_INFINITY_MODE
441{
442 DML_IS_INFINITY_MODE_EITHER = 0,
443 DML_IS_INFINITY_MODE_POSITIVE = 1,
444 DML_IS_INFINITY_MODE_NEGATIVE = 2,
445};
446
447enum DML_AXIS_DIRECTION
448{
449 DML_AXIS_DIRECTION_INCREASING = 0,
450 DML_AXIS_DIRECTION_DECREASING = 1,
451};
452
453enum DML_DEPTH_SPACE_ORDER
454{
455 DML_DEPTH_SPACE_ORDER_DEPTH_COLUMN_ROW,
456 DML_DEPTH_SPACE_ORDER_COLUMN_ROW_DEPTH,
457};
458
459union DML_SCALAR_UNION
460{
461 BYTE Bytes[8];
462 INT8 Int8;
463 UINT8 UInt8;
464 INT16 Int16;
465 UINT16 UInt16;
466 INT32 Int32;
467 UINT32 UInt32;
468 INT64 Int64;
469 UINT64 UInt64;
470 FLOAT Float32;
471 DOUBLE Float64;
472};
473
474#endif // DML_TARGET_VERSION >= 0x2100
475
476#if DML_TARGET_VERSION >= 0x3000
477
478enum DML_RANDOM_GENERATOR_TYPE
479{
480 DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10
481};
482
483#endif // DML_TARGET_VERSION >= 0x3000
484
485#if DML_TARGET_VERSION >= 0x6100
486
487enum DML_MULTIHEAD_ATTENTION_MASK_TYPE
488{
489 DML_MULTIHEAD_ATTENTION_MASK_TYPE_NONE,
490 DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_SEQUENCE_LENGTH,
491 DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_SEQUENCE_END_START,
492 DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_QUERY_SEQUENCE_LENGTH_START_END,
493 DML_MULTIHEAD_ATTENTION_MASK_TYPE_BOOLEAN,
494};
495
496#endif // DML_TARGET_VERSION >= 0x6100
497
498#if DML_TARGET_VERSION >= 0x6300
499
500enum DML_QUANTIZATION_TYPE
501{
502 DML_QUANTIZATION_TYPE_NONE,
503 DML_QUANTIZATION_TYPE_SCALE,
504 DML_QUANTIZATION_TYPE_SCALE_ZERO_POINT,
505};
506
507#endif // DML_TARGET_VERSION >= 0x6300
508
509// ===================================================================================================================
510// Operator descriptions
511// ===================================================================================================================
512
513struct DML_OPERATOR_DESC
514{
515 DML_OPERATOR_TYPE Type;
516 _Field_size_(_Inexpressible_("Dependent on operator type")) const void* Desc;
517};
518
519struct DML_ELEMENT_WISE_IDENTITY_OPERATOR_DESC
520{
521 const DML_TENSOR_DESC* InputTensor;
522 const DML_TENSOR_DESC* OutputTensor;
523 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
524};
525
526struct DML_ELEMENT_WISE_ABS_OPERATOR_DESC
527{
528 const DML_TENSOR_DESC* InputTensor;
529 const DML_TENSOR_DESC* OutputTensor;
530 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
531};
532
533struct DML_ELEMENT_WISE_ACOS_OPERATOR_DESC
534{
535 const DML_TENSOR_DESC* InputTensor;
536 const DML_TENSOR_DESC* OutputTensor;
537 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
538};
539
540struct DML_ELEMENT_WISE_ADD_OPERATOR_DESC
541{
542 const DML_TENSOR_DESC* ATensor;
543 const DML_TENSOR_DESC* BTensor;
544 const DML_TENSOR_DESC* OutputTensor;
545};
546
547struct DML_ELEMENT_WISE_ADD1_OPERATOR_DESC
548{
549 const DML_TENSOR_DESC* ATensor;
550 const DML_TENSOR_DESC* BTensor;
551 const DML_TENSOR_DESC* OutputTensor;
552 _Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
553};
554
555struct DML_ELEMENT_WISE_ASIN_OPERATOR_DESC
556{
557 const DML_TENSOR_DESC* InputTensor;
558 const DML_TENSOR_DESC* OutputTensor;
559 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
560};
561
562struct DML_ELEMENT_WISE_ATAN_OPERATOR_DESC
563{
564 const DML_TENSOR_DESC* InputTensor;
565 const DML_TENSOR_DESC* OutputTensor;
566 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
567};
568
569struct DML_ELEMENT_WISE_CEIL_OPERATOR_DESC
570{
571 const DML_TENSOR_DESC* InputTensor;
572 const DML_TENSOR_DESC* OutputTensor;
573 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
574};
575
576struct DML_ELEMENT_WISE_CLIP_OPERATOR_DESC
577{
578 const DML_TENSOR_DESC* InputTensor;
579 const DML_TENSOR_DESC* OutputTensor;
580 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
581 FLOAT Min;
582 FLOAT Max;
583};
584
585struct DML_ELEMENT_WISE_COS_OPERATOR_DESC
586{
587 const DML_TENSOR_DESC* InputTensor;
588 const DML_TENSOR_DESC* OutputTensor;
589 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
590};
591
592struct DML_ELEMENT_WISE_DIVIDE_OPERATOR_DESC
593{
594 const DML_TENSOR_DESC* ATensor;
595 const DML_TENSOR_DESC* BTensor;
596 const DML_TENSOR_DESC* OutputTensor;
597};
598
599struct DML_ELEMENT_WISE_EXP_OPERATOR_DESC
600{
601 const DML_TENSOR_DESC* InputTensor;
602 const DML_TENSOR_DESC* OutputTensor;
603 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
604};
605
606struct DML_ELEMENT_WISE_FLOOR_OPERATOR_DESC
607{
608 const DML_TENSOR_DESC* InputTensor;
609 const DML_TENSOR_DESC* OutputTensor;
610 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
611};
612
613struct DML_ELEMENT_WISE_LOG_OPERATOR_DESC
614{
615 const DML_TENSOR_DESC* InputTensor;
616 const DML_TENSOR_DESC* OutputTensor;
617 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
618};
619
620struct DML_ELEMENT_WISE_LOGICAL_AND_OPERATOR_DESC
621{
622 const DML_TENSOR_DESC* ATensor;
623 const DML_TENSOR_DESC* BTensor;
624 const DML_TENSOR_DESC* OutputTensor;
625};
626
627struct DML_ELEMENT_WISE_LOGICAL_EQUALS_OPERATOR_DESC
628{
629 const DML_TENSOR_DESC* ATensor;
630 const DML_TENSOR_DESC* BTensor;
631 const DML_TENSOR_DESC* OutputTensor;
632};
633
634struct DML_ELEMENT_WISE_LOGICAL_GREATER_THAN_OPERATOR_DESC
635{
636 const DML_TENSOR_DESC* ATensor;
637 const DML_TENSOR_DESC* BTensor;
638 const DML_TENSOR_DESC* OutputTensor;
639};
640
641struct DML_ELEMENT_WISE_LOGICAL_LESS_THAN_OPERATOR_DESC
642{
643 const DML_TENSOR_DESC* ATensor;
644 const DML_TENSOR_DESC* BTensor;
645 const DML_TENSOR_DESC* OutputTensor;
646};
647
648struct DML_ELEMENT_WISE_LOGICAL_NOT_OPERATOR_DESC
649{
650 const DML_TENSOR_DESC* InputTensor;
651 const DML_TENSOR_DESC* OutputTensor;
652};
653
654struct DML_ELEMENT_WISE_LOGICAL_OR_OPERATOR_DESC
655{
656 const DML_TENSOR_DESC* ATensor;
657 const DML_TENSOR_DESC* BTensor;
658 const DML_TENSOR_DESC* OutputTensor;
659};
660
661struct DML_ELEMENT_WISE_LOGICAL_XOR_OPERATOR_DESC
662{
663 const DML_TENSOR_DESC* ATensor;
664 const DML_TENSOR_DESC* BTensor;
665 const DML_TENSOR_DESC* OutputTensor;
666};
667
668struct DML_ELEMENT_WISE_MAX_OPERATOR_DESC
669{
670 const DML_TENSOR_DESC* ATensor;
671 const DML_TENSOR_DESC* BTensor;
672 const DML_TENSOR_DESC* OutputTensor;
673};
674
675struct DML_ELEMENT_WISE_MEAN_OPERATOR_DESC
676{
677 const DML_TENSOR_DESC* ATensor;
678 const DML_TENSOR_DESC* BTensor;
679 const DML_TENSOR_DESC* OutputTensor;
680};
681
682struct DML_ELEMENT_WISE_MIN_OPERATOR_DESC
683{
684 const DML_TENSOR_DESC* ATensor;
685 const DML_TENSOR_DESC* BTensor;
686 const DML_TENSOR_DESC* OutputTensor;
687};
688
689struct DML_ELEMENT_WISE_MULTIPLY_OPERATOR_DESC
690{
691 const DML_TENSOR_DESC* ATensor;
692 const DML_TENSOR_DESC* BTensor;
693 const DML_TENSOR_DESC* OutputTensor;
694};
695
696struct DML_ELEMENT_WISE_POW_OPERATOR_DESC
697{
698 const DML_TENSOR_DESC* InputTensor;
699 const DML_TENSOR_DESC* ExponentTensor;
700 const DML_TENSOR_DESC* OutputTensor;
701 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
702};
703
704struct DML_ELEMENT_WISE_CONSTANT_POW_OPERATOR_DESC
705{
706 const DML_TENSOR_DESC* InputTensor;
707 const DML_TENSOR_DESC* OutputTensor;
708 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
709 FLOAT Exponent;
710};
711
712struct DML_ELEMENT_WISE_RECIP_OPERATOR_DESC
713{
714 const DML_TENSOR_DESC* InputTensor;
715 const DML_TENSOR_DESC* OutputTensor;
716 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
717};
718
719struct DML_ELEMENT_WISE_SIN_OPERATOR_DESC
720{
721 const DML_TENSOR_DESC* InputTensor;
722 const DML_TENSOR_DESC* OutputTensor;
723 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
724};
725
726struct DML_ELEMENT_WISE_SQRT_OPERATOR_DESC
727{
728 const DML_TENSOR_DESC* InputTensor;
729 const DML_TENSOR_DESC* OutputTensor;
730 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
731};
732
733struct DML_ELEMENT_WISE_SUBTRACT_OPERATOR_DESC
734{
735 const DML_TENSOR_DESC* ATensor;
736 const DML_TENSOR_DESC* BTensor;
737 const DML_TENSOR_DESC* OutputTensor;
738};
739
740struct DML_ELEMENT_WISE_TAN_OPERATOR_DESC
741{
742 const DML_TENSOR_DESC* InputTensor;
743 const DML_TENSOR_DESC* OutputTensor;
744 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
745};
746
747struct DML_ELEMENT_WISE_THRESHOLD_OPERATOR_DESC
748{
749 const DML_TENSOR_DESC* InputTensor;
750 const DML_TENSOR_DESC* OutputTensor;
751 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
752 FLOAT Min;
753};
754
755struct DML_ELEMENT_WISE_QUANTIZE_LINEAR_OPERATOR_DESC
756{
757 const DML_TENSOR_DESC* InputTensor;
758 const DML_TENSOR_DESC* ScaleTensor;
759 _Maybenull_ const DML_TENSOR_DESC* ZeroPointTensor;
760 const DML_TENSOR_DESC* OutputTensor;
761};
762
763struct DML_ELEMENT_WISE_DEQUANTIZE_LINEAR_OPERATOR_DESC
764{
765 const DML_TENSOR_DESC* InputTensor;
766 const DML_TENSOR_DESC* ScaleTensor;
767 _Maybenull_ const DML_TENSOR_DESC* ZeroPointTensor;
768 const DML_TENSOR_DESC* OutputTensor;
769};
770
771struct DML_ACTIVATION_ELU_OPERATOR_DESC
772{
773 const DML_TENSOR_DESC* InputTensor;
774 const DML_TENSOR_DESC* OutputTensor;
775 FLOAT Alpha;
776};
777
778struct DML_ACTIVATION_HARDMAX_OPERATOR_DESC
779{
780 const DML_TENSOR_DESC* InputTensor;
781 const DML_TENSOR_DESC* OutputTensor;
782};
783
784struct DML_ACTIVATION_HARD_SIGMOID_OPERATOR_DESC
785{
786 const DML_TENSOR_DESC* InputTensor;
787 const DML_TENSOR_DESC* OutputTensor;
788 FLOAT Alpha;
789 FLOAT Beta;
790};
791
792struct DML_ACTIVATION_IDENTITY_OPERATOR_DESC
793{
794 const DML_TENSOR_DESC* InputTensor;
795 const DML_TENSOR_DESC* OutputTensor;
796};
797
798struct DML_ACTIVATION_LEAKY_RELU_OPERATOR_DESC
799{
800 const DML_TENSOR_DESC* InputTensor;
801 const DML_TENSOR_DESC* OutputTensor;
802 FLOAT Alpha;
803};
804
805struct DML_ACTIVATION_LINEAR_OPERATOR_DESC
806{
807 const DML_TENSOR_DESC* InputTensor;
808 const DML_TENSOR_DESC* OutputTensor;
809 FLOAT Alpha;
810 FLOAT Beta;
811};
812
813struct DML_ACTIVATION_LOG_SOFTMAX_OPERATOR_DESC
814{
815 const DML_TENSOR_DESC* InputTensor;
816 const DML_TENSOR_DESC* OutputTensor;
817};
818
819struct DML_ACTIVATION_PARAMETERIZED_RELU_OPERATOR_DESC
820{
821 const DML_TENSOR_DESC* InputTensor;
822 const DML_TENSOR_DESC* SlopeTensor;
823 const DML_TENSOR_DESC* OutputTensor;
824};
825
826struct DML_ACTIVATION_PARAMETRIC_SOFTPLUS_OPERATOR_DESC
827{
828 const DML_TENSOR_DESC* InputTensor;
829 const DML_TENSOR_DESC* OutputTensor;
830 FLOAT Alpha;
831 FLOAT Beta;
832};
833
834struct DML_ACTIVATION_RELU_OPERATOR_DESC
835{
836 const DML_TENSOR_DESC* InputTensor;
837 const DML_TENSOR_DESC* OutputTensor;
838};
839
840struct DML_ACTIVATION_SCALED_ELU_OPERATOR_DESC
841{
842 const DML_TENSOR_DESC* InputTensor;
843 const DML_TENSOR_DESC* OutputTensor;
844 FLOAT Alpha;
845 FLOAT Gamma;
846};
847
848struct DML_ACTIVATION_SCALED_TANH_OPERATOR_DESC
849{
850 const DML_TENSOR_DESC* InputTensor;
851 const DML_TENSOR_DESC* OutputTensor;
852 FLOAT Alpha;
853 FLOAT Beta;
854};
855
856struct DML_ACTIVATION_SIGMOID_OPERATOR_DESC
857{
858 const DML_TENSOR_DESC* InputTensor;
859 const DML_TENSOR_DESC* OutputTensor;
860};
861
862struct DML_ACTIVATION_SOFTMAX_OPERATOR_DESC
863{
864 const DML_TENSOR_DESC* InputTensor;
865 const DML_TENSOR_DESC* OutputTensor;
866};
867
868struct DML_ACTIVATION_SOFTPLUS_OPERATOR_DESC
869{
870 const DML_TENSOR_DESC* InputTensor;
871 const DML_TENSOR_DESC* OutputTensor;
872 FLOAT Steepness;
873};
874
875struct DML_ACTIVATION_SOFTSIGN_OPERATOR_DESC
876{
877 const DML_TENSOR_DESC* InputTensor;
878 const DML_TENSOR_DESC* OutputTensor;
879};
880
881struct DML_ACTIVATION_TANH_OPERATOR_DESC
882{
883 const DML_TENSOR_DESC* InputTensor;
884 const DML_TENSOR_DESC* OutputTensor;
885};
886
887struct DML_ACTIVATION_THRESHOLDED_RELU_OPERATOR_DESC
888{
889 const DML_TENSOR_DESC* InputTensor;
890 const DML_TENSOR_DESC* OutputTensor;
891 FLOAT Alpha;
892};
893
894struct DML_CONVOLUTION_OPERATOR_DESC
895{
896 const DML_TENSOR_DESC* InputTensor;
897 const DML_TENSOR_DESC* FilterTensor;
898 _Maybenull_ const DML_TENSOR_DESC* BiasTensor;
899 const DML_TENSOR_DESC* OutputTensor;
900 DML_CONVOLUTION_MODE Mode;
901 DML_CONVOLUTION_DIRECTION Direction;
902 UINT DimensionCount;
903 _Field_size_(DimensionCount) const UINT* Strides;
904 _Field_size_(DimensionCount) const UINT* Dilations;
905 _Field_size_(DimensionCount) const UINT* StartPadding;
906 _Field_size_(DimensionCount) const UINT* EndPadding;
907 _Field_size_(DimensionCount) const UINT* OutputPadding;
908 UINT GroupCount;
909 _Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
910};
911
912struct DML_GEMM_OPERATOR_DESC
913{
914 const DML_TENSOR_DESC* ATensor;
915 const DML_TENSOR_DESC* BTensor;
916 _Maybenull_ const DML_TENSOR_DESC* CTensor;
917 const DML_TENSOR_DESC* OutputTensor;
918 DML_MATRIX_TRANSFORM TransA;
919 DML_MATRIX_TRANSFORM TransB;
920 FLOAT Alpha;
921 FLOAT Beta;
922 _Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
923};
924
925struct DML_REDUCE_OPERATOR_DESC
926{
927 DML_REDUCE_FUNCTION Function;
928 const DML_TENSOR_DESC* InputTensor;
929 const DML_TENSOR_DESC* OutputTensor;
930 UINT AxisCount;
931 _Field_size_(AxisCount) const UINT* Axes;
932};
933
934struct DML_AVERAGE_POOLING_OPERATOR_DESC
935{
936 const DML_TENSOR_DESC* InputTensor;
937 const DML_TENSOR_DESC* OutputTensor;
938 UINT DimensionCount;
939 _Field_size_(DimensionCount) const UINT* Strides;
940 _Field_size_(DimensionCount) const UINT* WindowSize;
941 _Field_size_(DimensionCount) const UINT* StartPadding;
942 _Field_size_(DimensionCount) const UINT* EndPadding;
943 BOOL IncludePadding;
944};
945
946struct DML_LP_POOLING_OPERATOR_DESC
947{
948 const DML_TENSOR_DESC* InputTensor;
949 const DML_TENSOR_DESC* OutputTensor;
950 UINT DimensionCount;
951 _Field_size_(DimensionCount) const UINT* Strides;
952 _Field_size_(DimensionCount) const UINT* WindowSize;
953 _Field_size_(DimensionCount) const UINT* StartPadding;
954 _Field_size_(DimensionCount) const UINT* EndPadding;
955 UINT P;
956};
957
958struct DML_MAX_POOLING_OPERATOR_DESC
959{
960 const DML_TENSOR_DESC* InputTensor;
961 const DML_TENSOR_DESC* OutputTensor;
962 UINT DimensionCount;
963 _Field_size_(DimensionCount) const UINT* Strides;
964 _Field_size_(DimensionCount) const UINT* WindowSize;
965 _Field_size_(DimensionCount) const UINT* StartPadding;
966 _Field_size_(DimensionCount) const UINT* EndPadding;
967};
968
969struct DML_ROI_POOLING_OPERATOR_DESC
970{
971 const DML_TENSOR_DESC* InputTensor;
972 const DML_TENSOR_DESC* ROITensor;
973 const DML_TENSOR_DESC* OutputTensor;
974 FLOAT SpatialScale;
975 DML_SIZE_2D PooledSize;
976};
977
978struct DML_SLICE_OPERATOR_DESC
979{
980 const DML_TENSOR_DESC* InputTensor;
981 const DML_TENSOR_DESC* OutputTensor;
982 UINT DimensionCount;
983 _Field_size_(DimensionCount) const UINT* Offsets;
984 _Field_size_(DimensionCount) const UINT* Sizes;
985 _Field_size_(DimensionCount) const UINT* Strides;
986};
987
988struct DML_CAST_OPERATOR_DESC
989{
990 const DML_TENSOR_DESC* InputTensor;
991 const DML_TENSOR_DESC* OutputTensor;
992};
993
994struct DML_SPLIT_OPERATOR_DESC
995{
996 const DML_TENSOR_DESC* InputTensor;
997 UINT OutputCount;
998 _Field_size_(OutputCount) const DML_TENSOR_DESC* OutputTensors;
999 UINT Axis;
1000};
1001
1002struct DML_JOIN_OPERATOR_DESC
1003{
1004 UINT InputCount;
1005 _Field_size_(InputCount) const DML_TENSOR_DESC* InputTensors;
1006 const DML_TENSOR_DESC* OutputTensor;
1007 UINT Axis;
1008};
1009
1010struct DML_PADDING_OPERATOR_DESC
1011{
1012 const DML_TENSOR_DESC* InputTensor;
1013 const DML_TENSOR_DESC* OutputTensor;
1014 DML_PADDING_MODE PaddingMode;
1015 FLOAT PaddingValue;
1016 UINT DimensionCount;
1017 _Field_size_(DimensionCount) const UINT* StartPadding;
1018 _Field_size_(DimensionCount) const UINT* EndPadding;
1019};
1020
1021struct DML_VALUE_SCALE_2D_OPERATOR_DESC
1022{
1023 const DML_TENSOR_DESC* InputTensor;
1024 const DML_TENSOR_DESC* OutputTensor;
1025 FLOAT Scale;
1026 UINT ChannelCount;
1027 _Field_size_(ChannelCount) const FLOAT* Bias;
1028};
1029
1030struct DML_UPSAMPLE_2D_OPERATOR_DESC
1031{
1032 const DML_TENSOR_DESC* InputTensor;
1033 const DML_TENSOR_DESC* OutputTensor;
1034 DML_SIZE_2D ScaleSize;
1035 DML_INTERPOLATION_MODE InterpolationMode;
1036};
1037
1038struct DML_GATHER_OPERATOR_DESC
1039{
1040 const DML_TENSOR_DESC* InputTensor;
1041 const DML_TENSOR_DESC* IndicesTensor;
1042 const DML_TENSOR_DESC* OutputTensor;
1043 UINT Axis;
1044 UINT IndexDimensions;
1045};
1046
1047struct DML_SPACE_TO_DEPTH_OPERATOR_DESC
1048{
1049 const DML_TENSOR_DESC* InputTensor;
1050 const DML_TENSOR_DESC* OutputTensor;
1051 UINT BlockSize;
1052};
1053
1054struct DML_DEPTH_TO_SPACE_OPERATOR_DESC
1055{
1056 const DML_TENSOR_DESC* InputTensor;
1057 const DML_TENSOR_DESC* OutputTensor;
1058 UINT BlockSize;
1059};
1060
1061struct DML_TILE_OPERATOR_DESC
1062{
1063 const DML_TENSOR_DESC* InputTensor;
1064 const DML_TENSOR_DESC* OutputTensor;
1065 UINT RepeatsCount;
1066 _Field_size_(RepeatsCount) const UINT* Repeats;
1067};
1068
1069struct DML_TOP_K_OPERATOR_DESC
1070{
1071 const DML_TENSOR_DESC* InputTensor;
1072 const DML_TENSOR_DESC* OutputValueTensor;
1073 const DML_TENSOR_DESC* OutputIndexTensor;
1074 UINT Axis;
1075 UINT K;
1076};
1077
1078struct DML_BATCH_NORMALIZATION_OPERATOR_DESC
1079{
1080 const DML_TENSOR_DESC* InputTensor;
1081 const DML_TENSOR_DESC* MeanTensor;
1082 const DML_TENSOR_DESC* VarianceTensor;
1083 const DML_TENSOR_DESC* ScaleTensor;
1084 const DML_TENSOR_DESC* BiasTensor;
1085 const DML_TENSOR_DESC* OutputTensor;
1086 BOOL Spatial;
1087 FLOAT Epsilon;
1088 _Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
1089};
1090
1091struct DML_MEAN_VARIANCE_NORMALIZATION_OPERATOR_DESC
1092{
1093 const DML_TENSOR_DESC* InputTensor;
1094 _Maybenull_ const DML_TENSOR_DESC* ScaleTensor;
1095 _Maybenull_ const DML_TENSOR_DESC* BiasTensor;
1096 const DML_TENSOR_DESC* OutputTensor;
1097 BOOL CrossChannel;
1098 BOOL NormalizeVariance;
1099 FLOAT Epsilon;
1100 _Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
1101};
1102
1103struct DML_LOCAL_RESPONSE_NORMALIZATION_OPERATOR_DESC
1104{
1105 const DML_TENSOR_DESC* InputTensor;
1106 const DML_TENSOR_DESC* OutputTensor;
1107 BOOL CrossChannel;
1108 UINT LocalSize;
1109 FLOAT Alpha;
1110 FLOAT Beta;
1111 FLOAT Bias;
1112};
1113
1114struct DML_LP_NORMALIZATION_OPERATOR_DESC
1115{
1116 const DML_TENSOR_DESC* InputTensor;
1117 const DML_TENSOR_DESC* OutputTensor;
1118 UINT Axis;
1119 FLOAT Epsilon;
1120 UINT P;
1121};
1122
1123struct DML_RNN_OPERATOR_DESC
1124{
1125 const DML_TENSOR_DESC* InputTensor;
1126 const DML_TENSOR_DESC* WeightTensor;
1127 const DML_TENSOR_DESC* RecurrenceTensor;
1128 _Maybenull_ const DML_TENSOR_DESC* BiasTensor;
1129 _Maybenull_ const DML_TENSOR_DESC* HiddenInitTensor;
1130 _Maybenull_ const DML_TENSOR_DESC* SequenceLengthsTensor;
1131 _Maybenull_ const DML_TENSOR_DESC* OutputSequenceTensor;
1132 _Maybenull_ const DML_TENSOR_DESC* OutputSingleTensor;
1133 UINT ActivationDescCount;
1134 _Field_size_(ActivationDescCount) const DML_OPERATOR_DESC* ActivationDescs;
1135 DML_RECURRENT_NETWORK_DIRECTION Direction;
1136};
1137
1138struct DML_LSTM_OPERATOR_DESC
1139{
1140 const DML_TENSOR_DESC* InputTensor;
1141 const DML_TENSOR_DESC* WeightTensor;
1142 const DML_TENSOR_DESC* RecurrenceTensor;
1143 _Maybenull_ const DML_TENSOR_DESC* BiasTensor;
1144 _Maybenull_ const DML_TENSOR_DESC* HiddenInitTensor;
1145 _Maybenull_ const DML_TENSOR_DESC* CellMemInitTensor;
1146 _Maybenull_ const DML_TENSOR_DESC* SequenceLengthsTensor;
1147 _Maybenull_ const DML_TENSOR_DESC* PeepholeTensor;
1148 _Maybenull_ const DML_TENSOR_DESC* OutputSequenceTensor;
1149 _Maybenull_ const DML_TENSOR_DESC* OutputSingleTensor;
1150 _Maybenull_ const DML_TENSOR_DESC* OutputCellSingleTensor;
1151 UINT ActivationDescCount;
1152 _Field_size_(ActivationDescCount) const DML_OPERATOR_DESC* ActivationDescs;
1153 DML_RECURRENT_NETWORK_DIRECTION Direction;
1154 float ClipThreshold;
1155 BOOL UseClipThreshold;
1156 BOOL CoupleInputForget;
1157};
1158
1159struct DML_GRU_OPERATOR_DESC
1160{
1161 const DML_TENSOR_DESC* InputTensor;
1162 const DML_TENSOR_DESC* WeightTensor;
1163 const DML_TENSOR_DESC* RecurrenceTensor;
1164 _Maybenull_ const DML_TENSOR_DESC* BiasTensor;
1165 _Maybenull_ const DML_TENSOR_DESC* HiddenInitTensor;
1166 _Maybenull_ const DML_TENSOR_DESC* SequenceLengthsTensor;
1167 _Maybenull_ const DML_TENSOR_DESC* OutputSequenceTensor;
1168 _Maybenull_ const DML_TENSOR_DESC* OutputSingleTensor;
1169 UINT ActivationDescCount;
1170 _Field_size_(ActivationDescCount) const DML_OPERATOR_DESC* ActivationDescs;
1171 DML_RECURRENT_NETWORK_DIRECTION Direction;
1172 BOOL LinearBeforeReset;
1173};
1174
1175#if DML_TARGET_VERSION >= 0x2000
1176
1177struct DML_ELEMENT_WISE_SIGN_OPERATOR_DESC
1178{
1179 const DML_TENSOR_DESC* InputTensor;
1180 const DML_TENSOR_DESC* OutputTensor;
1181};
1182
1183struct DML_ELEMENT_WISE_IS_NAN_OPERATOR_DESC
1184{
1185 const DML_TENSOR_DESC* InputTensor;
1186 const DML_TENSOR_DESC* OutputTensor;
1187};
1188
1189struct DML_ELEMENT_WISE_ERF_OPERATOR_DESC
1190{
1191 const DML_TENSOR_DESC* InputTensor;
1192 const DML_TENSOR_DESC* OutputTensor;
1193 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
1194};
1195
1196struct DML_ELEMENT_WISE_SINH_OPERATOR_DESC
1197{
1198 const DML_TENSOR_DESC* InputTensor;
1199 const DML_TENSOR_DESC* OutputTensor;
1200 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
1201};
1202
1203struct DML_ELEMENT_WISE_COSH_OPERATOR_DESC
1204{
1205 const DML_TENSOR_DESC* InputTensor;
1206 const DML_TENSOR_DESC* OutputTensor;
1207 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
1208};
1209
1210struct DML_ELEMENT_WISE_TANH_OPERATOR_DESC
1211{
1212 const DML_TENSOR_DESC* InputTensor;
1213 const DML_TENSOR_DESC* OutputTensor;
1214 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
1215};
1216
1217struct DML_ELEMENT_WISE_ASINH_OPERATOR_DESC
1218{
1219 const DML_TENSOR_DESC* InputTensor;
1220 const DML_TENSOR_DESC* OutputTensor;
1221 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
1222};
1223
1224struct DML_ELEMENT_WISE_ACOSH_OPERATOR_DESC
1225{
1226 const DML_TENSOR_DESC* InputTensor;
1227 const DML_TENSOR_DESC* OutputTensor;
1228 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
1229};
1230
1231struct DML_ELEMENT_WISE_ATANH_OPERATOR_DESC
1232{
1233 const DML_TENSOR_DESC* InputTensor;
1234 const DML_TENSOR_DESC* OutputTensor;
1235 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
1236};
1237
1238struct DML_ELEMENT_WISE_IF_OPERATOR_DESC
1239{
1240 const DML_TENSOR_DESC* ConditionTensor;
1241 const DML_TENSOR_DESC* ATensor;
1242 const DML_TENSOR_DESC* BTensor;
1243 const DML_TENSOR_DESC* OutputTensor;
1244};
1245
1246struct DML_ACTIVATION_SHRINK_OPERATOR_DESC
1247{
1248 const DML_TENSOR_DESC* InputTensor;
1249 const DML_TENSOR_DESC* OutputTensor;
1250 FLOAT Bias;
1251 FLOAT Threshold;
1252};
1253
1254struct DML_MAX_POOLING1_OPERATOR_DESC
1255{
1256 const DML_TENSOR_DESC* InputTensor;
1257 const DML_TENSOR_DESC* OutputTensor;
1258 _Maybenull_ const DML_TENSOR_DESC* OutputIndicesTensor;
1259 UINT DimensionCount;
1260 _Field_size_(DimensionCount) const UINT* Strides;
1261 _Field_size_(DimensionCount) const UINT* WindowSize;
1262 _Field_size_(DimensionCount) const UINT* StartPadding;
1263 _Field_size_(DimensionCount) const UINT* EndPadding;
1264};
1265
1266struct DML_MAX_UNPOOLING_OPERATOR_DESC
1267{
1268 const DML_TENSOR_DESC* InputTensor;
1269 const DML_TENSOR_DESC* IndicesTensor;
1270 const DML_TENSOR_DESC* OutputTensor;
1271};
1272
1273struct DML_DIAGONAL_MATRIX_OPERATOR_DESC
1274{
1275 const DML_TENSOR_DESC* OutputTensor;
1276 INT Offset;
1277 FLOAT Value;
1278};
1279
1280struct DML_SCATTER_OPERATOR_DESC
1281{
1282 const DML_TENSOR_DESC* InputTensor;
1283 const DML_TENSOR_DESC* IndicesTensor;
1284 const DML_TENSOR_DESC* UpdatesTensor;
1285 const DML_TENSOR_DESC* OutputTensor;
1286 UINT Axis;
1287};
1288
1289struct DML_ONE_HOT_OPERATOR_DESC
1290{
1291 const DML_TENSOR_DESC* IndicesTensor;
1292 const DML_TENSOR_DESC* ValuesTensor;
1293 const DML_TENSOR_DESC* OutputTensor;
1294 UINT Axis;
1295};
1296
1297struct DML_RESAMPLE_OPERATOR_DESC
1298{
1299 const DML_TENSOR_DESC* InputTensor;
1300 const DML_TENSOR_DESC* OutputTensor;
1301 DML_INTERPOLATION_MODE InterpolationMode;
1302 UINT ScaleCount;
1303 _Field_size_(ScaleCount) const FLOAT* Scales;
1304};
1305
1306#endif // DML_TARGET_VERSION >= 0x2000
1307
1308#if DML_TARGET_VERSION >= 0x2100
1309
1310struct DML_ELEMENT_WISE_BIT_SHIFT_LEFT_OPERATOR_DESC
1311{
1312 const DML_TENSOR_DESC* ATensor;
1313 const DML_TENSOR_DESC* BTensor;
1314 const DML_TENSOR_DESC* OutputTensor;
1315};
1316
1317struct DML_ELEMENT_WISE_BIT_SHIFT_RIGHT_OPERATOR_DESC
1318{
1319 const DML_TENSOR_DESC* ATensor;
1320 const DML_TENSOR_DESC* BTensor;
1321 const DML_TENSOR_DESC* OutputTensor;
1322};
1323
1324struct DML_ELEMENT_WISE_ROUND_OPERATOR_DESC
1325{
1326 const DML_TENSOR_DESC* InputTensor;
1327 const DML_TENSOR_DESC* OutputTensor;
1328 DML_ROUNDING_MODE RoundingMode;
1329};
1330
1331struct DML_ELEMENT_WISE_IS_INFINITY_OPERATOR_DESC
1332{
1333 const DML_TENSOR_DESC* InputTensor;
1334 const DML_TENSOR_DESC* OutputTensor;
1335 DML_IS_INFINITY_MODE InfinityMode;
1336};
1337
1338struct DML_ELEMENT_WISE_MODULUS_TRUNCATE_OPERATOR_DESC
1339{
1340 const DML_TENSOR_DESC* ATensor;
1341 const DML_TENSOR_DESC* BTensor;
1342 const DML_TENSOR_DESC* OutputTensor;
1343};
1344
1345struct DML_ELEMENT_WISE_MODULUS_FLOOR_OPERATOR_DESC
1346{
1347 const DML_TENSOR_DESC* ATensor;
1348 const DML_TENSOR_DESC* BTensor;
1349 const DML_TENSOR_DESC* OutputTensor;
1350};
1351
1352struct DML_FILL_VALUE_CONSTANT_OPERATOR_DESC
1353{
1354 const DML_TENSOR_DESC* OutputTensor;
1355 DML_TENSOR_DATA_TYPE ValueDataType;
1356 DML_SCALAR_UNION Value;
1357};
1358
1359struct DML_FILL_VALUE_SEQUENCE_OPERATOR_DESC
1360{
1361 const DML_TENSOR_DESC* OutputTensor;
1362 DML_TENSOR_DATA_TYPE ValueDataType;
1363 DML_SCALAR_UNION ValueStart;
1364 DML_SCALAR_UNION ValueDelta;
1365};
1366
1367struct DML_CUMULATIVE_SUMMATION_OPERATOR_DESC
1368{
1369 const DML_TENSOR_DESC* InputTensor;
1370 const DML_TENSOR_DESC* OutputTensor;
1371 UINT Axis;
1372 DML_AXIS_DIRECTION AxisDirection;
1373 BOOL HasExclusiveSum;
1374};
1375
1376struct DML_REVERSE_SUBSEQUENCES_OPERATOR_DESC
1377{
1378 const DML_TENSOR_DESC* InputTensor;
1379 const DML_TENSOR_DESC* SequenceLengthsTensor;
1380 const DML_TENSOR_DESC* OutputTensor;
1381 UINT Axis;
1382};
1383
1384struct DML_GATHER_ELEMENTS_OPERATOR_DESC
1385{
1386 const DML_TENSOR_DESC* InputTensor;
1387 const DML_TENSOR_DESC* IndicesTensor;
1388 const DML_TENSOR_DESC* OutputTensor;
1389 UINT Axis;
1390};
1391
1392// Alias existing operator, symmetric with DML_GATHER_ELEMENTS_OPERATOR_DESC.
1393using DML_SCATTER_ELEMENTS_OPERATOR_DESC = DML_SCATTER_OPERATOR_DESC;
1394
1395struct DML_GATHER_ND_OPERATOR_DESC
1396{
1397 const DML_TENSOR_DESC* InputTensor;
1398 const DML_TENSOR_DESC* IndicesTensor;
1399 const DML_TENSOR_DESC* OutputTensor;
1400 UINT InputDimensionCount;
1401 UINT IndicesDimensionCount;
1402};
1403
1404struct DML_SCATTER_ND_OPERATOR_DESC
1405{
1406 const DML_TENSOR_DESC* InputTensor;
1407 const DML_TENSOR_DESC* IndicesTensor;
1408 const DML_TENSOR_DESC* UpdatesTensor;
1409 const DML_TENSOR_DESC* OutputTensor;
1410 UINT InputDimensionCount;
1411 UINT IndicesDimensionCount;
1412};
1413
1414struct DML_MAX_POOLING2_OPERATOR_DESC
1415{
1416 const DML_TENSOR_DESC* InputTensor;
1417 const DML_TENSOR_DESC* OutputTensor;
1418 _Maybenull_ const DML_TENSOR_DESC* OutputIndicesTensor;
1419 UINT DimensionCount;
1420 _Field_size_(DimensionCount) const UINT* Strides;
1421 _Field_size_(DimensionCount) const UINT* WindowSize;
1422 _Field_size_(DimensionCount) const UINT* StartPadding;
1423 _Field_size_(DimensionCount) const UINT* EndPadding;
1424 _Field_size_(DimensionCount) const UINT* Dilations;
1425};
1426
1427struct DML_SLICE1_OPERATOR_DESC
1428{
1429 const DML_TENSOR_DESC* InputTensor;
1430 const DML_TENSOR_DESC* OutputTensor;
1431 UINT DimensionCount;
1432 _Field_size_(DimensionCount) const UINT* InputWindowOffsets;
1433 _Field_size_(DimensionCount) const UINT* InputWindowSizes;
1434 _Field_size_(DimensionCount) const INT* InputWindowStrides;
1435};
1436
1437struct DML_TOP_K1_OPERATOR_DESC
1438{
1439 const DML_TENSOR_DESC* InputTensor;
1440 const DML_TENSOR_DESC* OutputValueTensor;
1441 const DML_TENSOR_DESC* OutputIndexTensor;
1442 UINT Axis;
1443 UINT K;
1444 DML_AXIS_DIRECTION AxisDirection;
1445};
1446
1447struct DML_DEPTH_TO_SPACE1_OPERATOR_DESC
1448{
1449 const DML_TENSOR_DESC* InputTensor;
1450 const DML_TENSOR_DESC* OutputTensor;
1451 UINT BlockSize;
1452 DML_DEPTH_SPACE_ORDER Order;
1453};
1454
1455struct DML_SPACE_TO_DEPTH1_OPERATOR_DESC
1456{
1457 const DML_TENSOR_DESC* InputTensor;
1458 const DML_TENSOR_DESC* OutputTensor;
1459 UINT BlockSize;
1460 DML_DEPTH_SPACE_ORDER Order;
1461};
1462
1463struct DML_MEAN_VARIANCE_NORMALIZATION1_OPERATOR_DESC
1464{
1465 const DML_TENSOR_DESC* InputTensor;
1466 _Maybenull_ const DML_TENSOR_DESC* ScaleTensor;
1467 _Maybenull_ const DML_TENSOR_DESC* BiasTensor;
1468 const DML_TENSOR_DESC* OutputTensor;
1469 UINT AxisCount;
1470 _Field_size_(AxisCount) const UINT* Axes;
1471 BOOL NormalizeVariance;
1472 FLOAT Epsilon;
1473 _Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
1474};
1475
1476struct DML_RESAMPLE1_OPERATOR_DESC
1477{
1478 const DML_TENSOR_DESC* InputTensor;
1479 const DML_TENSOR_DESC* OutputTensor;
1480 DML_INTERPOLATION_MODE InterpolationMode;
1481 UINT DimensionCount;
1482 _Field_size_(DimensionCount) const FLOAT* Scales;
1483 _Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;
1484 _Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;
1485};
1486
1487struct DML_MATRIX_MULTIPLY_INTEGER_OPERATOR_DESC
1488{
1489 const DML_TENSOR_DESC* ATensor;
1490 _Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;
1491 const DML_TENSOR_DESC* BTensor;
1492 _Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;
1493 const DML_TENSOR_DESC* OutputTensor;
1494};
1495
1496struct DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC
1497{
1498 const DML_TENSOR_DESC* ATensor;
1499 const DML_TENSOR_DESC* AScaleTensor;
1500 _Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;
1501 const DML_TENSOR_DESC* BTensor;
1502 const DML_TENSOR_DESC* BScaleTensor;
1503 _Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;
1504 const DML_TENSOR_DESC* OutputScaleTensor;
1505 _Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor;
1506 const DML_TENSOR_DESC* OutputTensor;
1507};
1508
1509struct DML_CONVOLUTION_INTEGER_OPERATOR_DESC
1510{
1511 const DML_TENSOR_DESC* InputTensor;
1512 _Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor;
1513 const DML_TENSOR_DESC* FilterTensor;
1514 _Maybenull_ const DML_TENSOR_DESC* FilterZeroPointTensor;
1515 const DML_TENSOR_DESC* OutputTensor;
1516 UINT DimensionCount;
1517 _Field_size_(DimensionCount) const UINT* Strides;
1518 _Field_size_(DimensionCount) const UINT* Dilations;
1519 _Field_size_(DimensionCount) const UINT* StartPadding;
1520 _Field_size_(DimensionCount) const UINT* EndPadding;
1521 UINT GroupCount;
1522};
1523
1524struct DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC
1525{
1526 const DML_TENSOR_DESC* InputTensor;
1527 const DML_TENSOR_DESC* InputScaleTensor;
1528 _Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor;
1529 const DML_TENSOR_DESC* FilterTensor;
1530 const DML_TENSOR_DESC* FilterScaleTensor;
1531 _Maybenull_ const DML_TENSOR_DESC* FilterZeroPointTensor;
1532 _Maybenull_ const DML_TENSOR_DESC* BiasTensor;
1533 const DML_TENSOR_DESC* OutputScaleTensor;
1534 _Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor;
1535 const DML_TENSOR_DESC* OutputTensor;
1536 UINT DimensionCount;
1537 _Field_size_(DimensionCount) const UINT* Strides;
1538 _Field_size_(DimensionCount) const UINT* Dilations;
1539 _Field_size_(DimensionCount) const UINT* StartPadding;
1540 _Field_size_(DimensionCount) const UINT* EndPadding;
1541 UINT GroupCount;
1542};
1543
1544#endif // DML_TARGET_VERSION >= 0x2100
1545
1546#if DML_TARGET_VERSION >= 0x3000
1547
1548struct DML_ELEMENT_WISE_BIT_AND_OPERATOR_DESC
1549{
1550 const DML_TENSOR_DESC* ATensor;
1551 const DML_TENSOR_DESC* BTensor;
1552 const DML_TENSOR_DESC* OutputTensor;
1553};
1554
1555struct DML_ELEMENT_WISE_BIT_OR_OPERATOR_DESC
1556{
1557 const DML_TENSOR_DESC* ATensor;
1558 const DML_TENSOR_DESC* BTensor;
1559 const DML_TENSOR_DESC* OutputTensor;
1560};
1561
1562struct DML_ELEMENT_WISE_BIT_XOR_OPERATOR_DESC
1563{
1564 const DML_TENSOR_DESC* ATensor;
1565 const DML_TENSOR_DESC* BTensor;
1566 const DML_TENSOR_DESC* OutputTensor;
1567};
1568
1569struct DML_ELEMENT_WISE_BIT_NOT_OPERATOR_DESC
1570{
1571 const DML_TENSOR_DESC* InputTensor;
1572 const DML_TENSOR_DESC* OutputTensor;
1573};
1574
1575struct DML_ELEMENT_WISE_BIT_COUNT_OPERATOR_DESC
1576{
1577 const DML_TENSOR_DESC* InputTensor;
1578 const DML_TENSOR_DESC* OutputTensor;
1579};
1580
1581struct DML_ELEMENT_WISE_LOGICAL_GREATER_THAN_OR_EQUAL_OPERATOR_DESC
1582{
1583 const DML_TENSOR_DESC* ATensor;
1584 const DML_TENSOR_DESC* BTensor;
1585 const DML_TENSOR_DESC* OutputTensor;
1586};
1587
1588struct DML_ELEMENT_WISE_LOGICAL_LESS_THAN_OR_EQUAL_OPERATOR_DESC
1589{
1590 const DML_TENSOR_DESC* ATensor;
1591 const DML_TENSOR_DESC* BTensor;
1592 const DML_TENSOR_DESC* OutputTensor;
1593};
1594
1595struct DML_ACTIVATION_CELU_OPERATOR_DESC
1596{
1597 const DML_TENSOR_DESC* InputTensor;
1598 const DML_TENSOR_DESC* OutputTensor;
1599 FLOAT Alpha;
1600};
1601
1602struct DML_ACTIVATION_RELU_GRAD_OPERATOR_DESC
1603{
1604 const DML_TENSOR_DESC* InputTensor;
1605 const DML_TENSOR_DESC* InputGradientTensor;
1606 const DML_TENSOR_DESC* OutputGradientTensor;
1607};
1608
1609struct DML_AVERAGE_POOLING_GRAD_OPERATOR_DESC
1610{
1611 const DML_TENSOR_DESC* InputGradientTensor;
1612 const DML_TENSOR_DESC* OutputGradientTensor;
1613 UINT DimensionCount;
1614 _Field_size_(DimensionCount) const UINT* Strides;
1615 _Field_size_(DimensionCount) const UINT* WindowSize;
1616 _Field_size_(DimensionCount) const UINT* StartPadding;
1617 _Field_size_(DimensionCount) const UINT* EndPadding;
1618 BOOL IncludePadding;
1619};
1620
1621struct DML_MAX_POOLING_GRAD_OPERATOR_DESC
1622{
1623 const DML_TENSOR_DESC* InputTensor;
1624 const DML_TENSOR_DESC* InputGradientTensor;
1625 const DML_TENSOR_DESC* OutputGradientTensor;
1626 UINT DimensionCount;
1627 _Field_size_(DimensionCount) const UINT* Strides;
1628 _Field_size_(DimensionCount) const UINT* WindowSize;
1629 _Field_size_(DimensionCount) const UINT* StartPadding;
1630 _Field_size_(DimensionCount) const UINT* EndPadding;
1631 _Field_size_(DimensionCount) const UINT* Dilations;
1632};
1633
1634struct DML_RANDOM_GENERATOR_OPERATOR_DESC
1635{
1636 const DML_TENSOR_DESC* InputStateTensor;
1637 const DML_TENSOR_DESC* OutputTensor;
1638 _Maybenull_ const DML_TENSOR_DESC* OutputStateTensor;
1639 DML_RANDOM_GENERATOR_TYPE Type;
1640};
1641
1642struct DML_NONZERO_COORDINATES_OPERATOR_DESC
1643{
1644 const DML_TENSOR_DESC* InputTensor;
1645 const DML_TENSOR_DESC* OutputCountTensor;
1646 const DML_TENSOR_DESC* OutputCoordinatesTensor;
1647};
1648
1649struct DML_RESAMPLE_GRAD_OPERATOR_DESC
1650{
1651 const DML_TENSOR_DESC* InputGradientTensor;
1652 const DML_TENSOR_DESC* OutputGradientTensor;
1653 DML_INTERPOLATION_MODE InterpolationMode;
1654 UINT DimensionCount;
1655 _Field_size_(DimensionCount) const FLOAT* Scales;
1656 _Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;
1657 _Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;
1658};
1659
1660struct DML_SLICE_GRAD_OPERATOR_DESC
1661{
1662 const DML_TENSOR_DESC* InputGradientTensor;
1663 const DML_TENSOR_DESC* OutputGradientTensor;
1664 UINT DimensionCount;
1665 _Field_size_(DimensionCount) const UINT* InputWindowOffsets;
1666 _Field_size_(DimensionCount) const UINT* InputWindowSizes;
1667 _Field_size_(DimensionCount) const INT* InputWindowStrides;
1668};
1669
1670struct DML_ADAM_OPTIMIZER_OPERATOR_DESC
1671{
1672 const DML_TENSOR_DESC* InputParametersTensor;
1673 const DML_TENSOR_DESC* InputFirstMomentTensor;
1674 const DML_TENSOR_DESC* InputSecondMomentTensor;
1675 const DML_TENSOR_DESC* GradientTensor;
1676 const DML_TENSOR_DESC* TrainingStepTensor;
1677 const DML_TENSOR_DESC* OutputParametersTensor;
1678 const DML_TENSOR_DESC* OutputFirstMomentTensor;
1679 const DML_TENSOR_DESC* OutputSecondMomentTensor;
1680 FLOAT LearningRate;
1681 FLOAT Beta1;
1682 FLOAT Beta2;
1683 FLOAT Epsilon;
1684};
1685
1686struct DML_ARGMIN_OPERATOR_DESC
1687{
1688 const DML_TENSOR_DESC* InputTensor;
1689 const DML_TENSOR_DESC* OutputTensor;
1690 UINT AxisCount;
1691 _Field_size_(AxisCount) const UINT* Axes;
1692 DML_AXIS_DIRECTION AxisDirection;
1693};
1694
1695struct DML_ARGMAX_OPERATOR_DESC
1696{
1697 const DML_TENSOR_DESC* InputTensor;
1698 const DML_TENSOR_DESC* OutputTensor;
1699 UINT AxisCount;
1700 _Field_size_(AxisCount) const UINT* Axes;
1701 DML_AXIS_DIRECTION AxisDirection;
1702};
1703
1704struct DML_ROI_ALIGN_OPERATOR_DESC
1705{
1706 const DML_TENSOR_DESC* InputTensor;
1707 const DML_TENSOR_DESC* ROITensor;
1708 const DML_TENSOR_DESC* BatchIndicesTensor;
1709 const DML_TENSOR_DESC* OutputTensor;
1710 DML_REDUCE_FUNCTION ReductionFunction;
1711 DML_INTERPOLATION_MODE InterpolationMode;
1712 FLOAT SpatialScaleX;
1713 FLOAT SpatialScaleY;
1714 FLOAT OutOfBoundsInputValue;
1715 UINT MinimumSamplesPerOutput;
1716 UINT MaximumSamplesPerOutput;
1717};
1718
1719struct DML_GATHER_ND1_OPERATOR_DESC
1720{
1721 const DML_TENSOR_DESC* InputTensor;
1722 const DML_TENSOR_DESC* IndicesTensor;
1723 const DML_TENSOR_DESC* OutputTensor;
1724 UINT InputDimensionCount;
1725 UINT IndicesDimensionCount;
1726 UINT BatchDimensionCount;
1727};
1728
1729#endif // DML_TARGET_VERSION >= 0x3000
1730
1731#if DML_TARGET_VERSION >= 0x3100
1732
1733struct DML_ELEMENT_WISE_ATAN_YX_OPERATOR_DESC
1734{
1735 const DML_TENSOR_DESC* ATensor;
1736 const DML_TENSOR_DESC* BTensor;
1737 const DML_TENSOR_DESC* OutputTensor;
1738};
1739
1740struct DML_ELEMENT_WISE_CLIP_GRAD_OPERATOR_DESC
1741{
1742 const DML_TENSOR_DESC* InputTensor;
1743 const DML_TENSOR_DESC* InputGradientTensor;
1744 const DML_TENSOR_DESC* OutputGradientTensor;
1745 FLOAT Min;
1746 FLOAT Max;
1747};
1748
1749struct DML_ELEMENT_WISE_DIFFERENCE_SQUARE_OPERATOR_DESC
1750{
1751 const DML_TENSOR_DESC* ATensor;
1752 const DML_TENSOR_DESC* BTensor;
1753 const DML_TENSOR_DESC* OutputTensor;
1754};
1755
1756struct DML_LOCAL_RESPONSE_NORMALIZATION_GRAD_OPERATOR_DESC
1757{
1758 const DML_TENSOR_DESC* InputTensor;
1759 const DML_TENSOR_DESC* InputGradientTensor;
1760 const DML_TENSOR_DESC* OutputGradientTensor;
1761 BOOL CrossChannel;
1762 UINT LocalSize;
1763 FLOAT Alpha;
1764 FLOAT Beta;
1765 FLOAT Bias;
1766};
1767
1768struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC
1769{
1770 const DML_TENSOR_DESC* InputTensor;
1771 const DML_TENSOR_DESC* OutputTensor;
1772 UINT Axis;
1773 DML_AXIS_DIRECTION AxisDirection;
1774 BOOL HasExclusiveProduct;
1775};
1776
1777struct DML_BATCH_NORMALIZATION_GRAD_OPERATOR_DESC
1778{
1779 const DML_TENSOR_DESC* InputTensor;
1780 const DML_TENSOR_DESC* InputGradientTensor;
1781 const DML_TENSOR_DESC* MeanTensor;
1782 const DML_TENSOR_DESC* VarianceTensor;
1783 const DML_TENSOR_DESC* ScaleTensor;
1784
1785 const DML_TENSOR_DESC* OutputGradientTensor;
1786 const DML_TENSOR_DESC* OutputScaleGradientTensor;
1787 const DML_TENSOR_DESC* OutputBiasGradientTensor;
1788
1789 FLOAT Epsilon;
1790};
1791
1792#endif // DML_TARGET_VERSION >= 0x3100
1793
1794#if DML_TARGET_VERSION >= 0x4000
1795struct DML_ELEMENT_WISE_QUANTIZED_LINEAR_ADD_OPERATOR_DESC
1796{
1797 const DML_TENSOR_DESC* ATensor;
1798 const DML_TENSOR_DESC* AScaleTensor;
1799 _Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;
1800 const DML_TENSOR_DESC* BTensor;
1801 const DML_TENSOR_DESC* BScaleTensor;
1802 _Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;
1803 const DML_TENSOR_DESC* OutputScaleTensor; // This is an input tensor
1804 _Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor; // This is an input tensor
1805 const DML_TENSOR_DESC* OutputTensor;
1806};
1807
1808struct DML_DYNAMIC_QUANTIZE_LINEAR_OPERATOR_DESC
1809{
1810 const DML_TENSOR_DESC* InputTensor;
1811 const DML_TENSOR_DESC* OutputTensor;
1812 const DML_TENSOR_DESC* OutputScaleTensor; // This is an output tensor
1813 const DML_TENSOR_DESC* OutputZeroPointTensor; // This is an output tensor
1814};
1815
1816struct DML_ROI_ALIGN1_OPERATOR_DESC
1817{
1818 const DML_TENSOR_DESC* InputTensor;
1819 const DML_TENSOR_DESC* ROITensor;
1820 const DML_TENSOR_DESC* BatchIndicesTensor;
1821 const DML_TENSOR_DESC* OutputTensor;
1822 DML_REDUCE_FUNCTION ReductionFunction;
1823 DML_INTERPOLATION_MODE InterpolationMode;
1824 FLOAT SpatialScaleX;
1825 FLOAT SpatialScaleY;
1826 FLOAT InputPixelOffset;
1827 FLOAT OutputPixelOffset;
1828 FLOAT OutOfBoundsInputValue;
1829 UINT MinimumSamplesPerOutput;
1830 UINT MaximumSamplesPerOutput;
1831 BOOL AlignRegionsToCorners;
1832};
1833
1834#endif // DML_TARGET_VERSION >= 0x4000
1835
1836#if DML_TARGET_VERSION >= 0x4100
1837
1838struct DML_ROI_ALIGN_GRAD_OPERATOR_DESC
1839{
1840 _Maybenull_ const DML_TENSOR_DESC* InputTensor;
1841 const DML_TENSOR_DESC* InputGradientTensor;
1842 const DML_TENSOR_DESC* ROITensor;
1843 const DML_TENSOR_DESC* BatchIndicesTensor;
1844 _Maybenull_ const DML_TENSOR_DESC* OutputGradientTensor;
1845 _Maybenull_ const DML_TENSOR_DESC* OutputROIGradientTensor;
1846 DML_REDUCE_FUNCTION ReductionFunction;
1847 DML_INTERPOLATION_MODE InterpolationMode;
1848 FLOAT SpatialScaleX;
1849 FLOAT SpatialScaleY;
1850 FLOAT InputPixelOffset;
1851 FLOAT OutputPixelOffset;
1852 UINT MinimumSamplesPerOutput;
1853 UINT MaximumSamplesPerOutput;
1854 BOOL AlignRegionsToCorners;
1855};
1856
1857struct DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC
1858{
1859 const DML_TENSOR_DESC* InputTensor;
1860 const DML_TENSOR_DESC* ScaleTensor;
1861 const DML_TENSOR_DESC* BiasTensor;
1862 _Maybenull_ const DML_TENSOR_DESC* FusedAddTensor;
1863 const DML_TENSOR_DESC* OutputTensor;
1864 const DML_TENSOR_DESC* OutputMeanTensor;
1865 const DML_TENSOR_DESC* OutputVarianceTensor;
1866 FLOAT Epsilon;
1867 _Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
1868};
1869
1870struct DML_BATCH_NORMALIZATION_TRAINING_GRAD_OPERATOR_DESC
1871{
1872 const DML_TENSOR_DESC* InputTensor;
1873 const DML_TENSOR_DESC* InputGradientTensor;
1874 const DML_TENSOR_DESC* MeanTensor;
1875 const DML_TENSOR_DESC* VarianceTensor;
1876 const DML_TENSOR_DESC* ScaleTensor;
1877 const DML_TENSOR_DESC* OutputGradientTensor;
1878 const DML_TENSOR_DESC* OutputScaleGradientTensor;
1879 const DML_TENSOR_DESC* OutputBiasGradientTensor;
1880 FLOAT Epsilon;
1881};
1882
1883#endif // DML_TARGET_VERSION >= 0x4100
1884
1885#if DML_TARGET_VERSION >= 0x5000
1886
1887struct DML_ELEMENT_WISE_CLIP1_OPERATOR_DESC
1888{
1889 const DML_TENSOR_DESC* InputTensor;
1890 const DML_TENSOR_DESC* OutputTensor;
1891 _Maybenull_ const DML_SCALE_BIAS* ScaleBias;
1892 DML_TENSOR_DATA_TYPE MinMaxDataType;
1893 DML_SCALAR_UNION Min;
1894 DML_SCALAR_UNION Max;
1895};
1896
1897struct DML_ELEMENT_WISE_CLIP_GRAD1_OPERATOR_DESC
1898{
1899 const DML_TENSOR_DESC* InputTensor;
1900 const DML_TENSOR_DESC* InputGradientTensor;
1901 const DML_TENSOR_DESC* OutputGradientTensor;
1902 DML_TENSOR_DATA_TYPE MinMaxDataType;
1903 DML_SCALAR_UNION Min;
1904 DML_SCALAR_UNION Max;
1905};
1906
1907struct DML_PADDING1_OPERATOR_DESC
1908{
1909 const DML_TENSOR_DESC* InputTensor;
1910 const DML_TENSOR_DESC* OutputTensor;
1911 DML_PADDING_MODE PaddingMode;
1912 DML_TENSOR_DATA_TYPE PaddingValueDataType;
1913 DML_SCALAR_UNION PaddingValue;
1914 UINT DimensionCount;
1915 _Field_size_(DimensionCount) const UINT* StartPadding;
1916 _Field_size_(DimensionCount) const UINT* EndPadding;
1917};
1918
1919struct DML_ELEMENT_WISE_NEGATE_OPERATOR_DESC
1920{
1921 const DML_TENSOR_DESC* InputTensor;
1922 const DML_TENSOR_DESC* OutputTensor;
1923};
1924
1925#endif // DML_TARGET_VERSION >= 0x5000
1926
1927#if DML_TARGET_VERSION >= 0x5100
1928
1929struct DML_ACTIVATION_GELU_OPERATOR_DESC
1930{
1931 const DML_TENSOR_DESC* InputTensor;
1932 const DML_TENSOR_DESC* OutputTensor;
1933};
1934
1935struct DML_ACTIVATION_SOFTMAX1_OPERATOR_DESC
1936{
1937 const DML_TENSOR_DESC* InputTensor;
1938 const DML_TENSOR_DESC* OutputTensor;
1939 UINT AxisCount;
1940 _Field_size_(AxisCount) const UINT* Axes;
1941};
1942
1943struct DML_ACTIVATION_LOG_SOFTMAX1_OPERATOR_DESC
1944{
1945 const DML_TENSOR_DESC* InputTensor;
1946 const DML_TENSOR_DESC* OutputTensor;
1947 UINT AxisCount;
1948 _Field_size_(AxisCount) const UINT* Axes;
1949};
1950
1951struct DML_ACTIVATION_HARDMAX1_OPERATOR_DESC
1952{
1953 const DML_TENSOR_DESC* InputTensor;
1954 const DML_TENSOR_DESC* OutputTensor;
1955 UINT AxisCount;
1956 _Field_size_(AxisCount) const UINT* Axes;
1957};
1958
1959struct DML_RESAMPLE2_OPERATOR_DESC
1960{
1961 const DML_TENSOR_DESC* InputTensor;
1962 const DML_TENSOR_DESC* OutputTensor;
1963 DML_INTERPOLATION_MODE InterpolationMode;
1964 DML_AXIS_DIRECTION RoundingDirection;
1965 UINT DimensionCount;
1966 _Field_size_(DimensionCount) const FLOAT* Scales;
1967 _Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;
1968 _Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;
1969};
1970
1971struct DML_RESAMPLE_GRAD1_OPERATOR_DESC
1972{
1973 const DML_TENSOR_DESC* InputGradientTensor;
1974 const DML_TENSOR_DESC* OutputGradientTensor;
1975 DML_INTERPOLATION_MODE InterpolationMode;
1976 DML_AXIS_DIRECTION RoundingDirection;
1977 UINT DimensionCount;
1978 _Field_size_(DimensionCount) const FLOAT* Scales;
1979 _Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;
1980 _Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;
1981};
1982
1983struct DML_DIAGONAL_MATRIX1_OPERATOR_DESC
1984{
1985 _Maybenull_ const DML_TENSOR_DESC* InputTensor;
1986 const DML_TENSOR_DESC* OutputTensor;
1987 DML_TENSOR_DATA_TYPE ValueDataType;
1988 DML_SCALAR_UNION Value;
1989 INT DiagonalFillBegin;
1990 INT DiagonalFillEnd;
1991};
1992
1993#endif // DML_TARGET_VERSION >= 0x5100
1994
1995#if DML_TARGET_VERSION >= 0x6100
1996
1997struct DML_MULTIHEAD_ATTENTION_OPERATOR_DESC
1998{
1999 _Maybenull_ const DML_TENSOR_DESC* QueryTensor;
2000 _Maybenull_ const DML_TENSOR_DESC* KeyTensor;
2001 _Maybenull_ const DML_TENSOR_DESC* ValueTensor;
2002 _Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyTensor;
2003 _Maybenull_ const DML_TENSOR_DESC* StackedKeyValueTensor;
2004 _Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyValueTensor;
2005 _Maybenull_ const DML_TENSOR_DESC* BiasTensor;
2006 _Maybenull_ const DML_TENSOR_DESC* MaskTensor;
2007 _Maybenull_ const DML_TENSOR_DESC* RelativePositionBiasTensor;
2008 _Maybenull_ const DML_TENSOR_DESC* PastKeyTensor;
2009 _Maybenull_ const DML_TENSOR_DESC* PastValueTensor;
2010 const DML_TENSOR_DESC* OutputTensor;
2011 _Maybenull_ const DML_TENSOR_DESC* OutputPresentKeyTensor;
2012 _Maybenull_ const DML_TENSOR_DESC* OutputPresentValueTensor;
2013 FLOAT Scale;
2014 FLOAT MaskFilterValue;
2015 UINT HeadCount;
2016 DML_MULTIHEAD_ATTENTION_MASK_TYPE MaskType;
2017};
2018
2019#endif // DML_TARGET_VERSION >= 0x6100
2020
2021#if DML_TARGET_VERSION >= 0x6200
2022
2023struct DML_LP_POOLING1_OPERATOR_DESC
2024{
2025 const DML_TENSOR_DESC* InputTensor;
2026 const DML_TENSOR_DESC* OutputTensor;
2027 UINT DimensionCount;
2028 _Field_size_(DimensionCount) const UINT* Strides;
2029 _Field_size_(DimensionCount) const UINT* WindowSize;
2030 _Field_size_(DimensionCount) const UINT* StartPadding;
2031 _Field_size_(DimensionCount) const UINT* EndPadding;
2032 _Field_size_(DimensionCount) const UINT* Dilations;
2033 UINT P;
2034};
2035
2036struct DML_AVERAGE_POOLING1_OPERATOR_DESC
2037{
2038 const DML_TENSOR_DESC* InputTensor;
2039 const DML_TENSOR_DESC* OutputTensor;
2040 UINT DimensionCount;
2041 _Field_size_(DimensionCount) const UINT* Strides;
2042 _Field_size_(DimensionCount) const UINT* WindowSize;
2043 _Field_size_(DimensionCount) const UINT* StartPadding;
2044 _Field_size_(DimensionCount) const UINT* EndPadding;
2045 _Field_size_(DimensionCount) const UINT* Dilations;
2046 BOOL IncludePadding;
2047};
2048
2049struct DML_ACTIVATION_SWISH_OPERATOR_DESC
2050{
2051 const DML_TENSOR_DESC* InputTensor;
2052 const DML_TENSOR_DESC* OutputTensor;
2053 FLOAT SigmoidInputScale;
2054};
2055
2056struct DML_ACTIVATION_HARD_SWISH_OPERATOR_DESC
2057{
2058 const DML_TENSOR_DESC* InputTensor;
2059 const DML_TENSOR_DESC* OutputTensor;
2060 FLOAT Alpha;
2061 FLOAT Beta;
2062};
2063
2064struct DML_QUANTIZED_LINEAR_AVERAGE_POOLING_OPERATOR_DESC
2065{
2066 const DML_TENSOR_DESC* InputTensor;
2067 const DML_TENSOR_DESC* InputScaleTensor;
2068 _Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor;
2069 const DML_TENSOR_DESC* OutputScaleTensor;
2070 _Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor;
2071 const DML_TENSOR_DESC* OutputTensor;
2072 UINT DimensionCount;
2073 _Field_size_(DimensionCount) const UINT* Strides;
2074 _Field_size_(DimensionCount) const UINT* WindowSize;
2075 _Field_size_(DimensionCount) const UINT* StartPadding;
2076 _Field_size_(DimensionCount) const UINT* EndPadding;
2077 _Field_size_(DimensionCount) const UINT* Dilations;
2078 BOOL IncludePadding;
2079};
2080
2081struct DML_MATRIX_MULTIPLY_INTEGER_TO_FLOAT_OPERATOR_DESC
2082{
2083 const DML_TENSOR_DESC* ATensor;
2084 const DML_TENSOR_DESC* AScaleTensor;
2085 _Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;
2086 const DML_TENSOR_DESC* BTensor;
2087 const DML_TENSOR_DESC* BScaleTensor;
2088 _Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;
2089 _Maybenull_ const DML_TENSOR_DESC* BiasTensor;
2090 const DML_TENSOR_DESC* OutputTensor;
2091};
2092
2093#endif // DML_TARGET_VERSION >= 0x6200
2094
2095#if DML_TARGET_VERSION >= 0x6300
2096
2097struct DML_MEAN_VARIANCE_NORMALIZATION2_OPERATOR_DESC
2098{
2099 const DML_TENSOR_DESC* InputTensor;
2100 _Maybenull_ const DML_TENSOR_DESC* ScaleTensor;
2101 _Maybenull_ const DML_TENSOR_DESC* BiasTensor;
2102 const DML_TENSOR_DESC* OutputTensor;
2103 UINT AxisCount;
2104 _Field_size_(AxisCount) const UINT* Axes;
2105 BOOL UseMean;
2106 BOOL UseVariance;
2107 FLOAT Epsilon;
2108 _Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
2109};
2110
2111struct DML_MULTIHEAD_ATTENTION1_OPERATOR_DESC
2112{
2113 _Maybenull_ const DML_TENSOR_DESC* QueryTensor;
2114 _Maybenull_ const DML_TENSOR_DESC* KeyTensor;
2115 _Maybenull_ const DML_TENSOR_DESC* ValueTensor;
2116 _Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyTensor;
2117 _Maybenull_ const DML_TENSOR_DESC* StackedKeyValueTensor;
2118 _Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyValueTensor;
2119 _Maybenull_ const DML_TENSOR_DESC* BiasTensor;
2120 _Maybenull_ const DML_TENSOR_DESC* MaskTensor;
2121 _Maybenull_ const DML_TENSOR_DESC* RelativePositionBiasTensor;
2122 _Maybenull_ const DML_TENSOR_DESC* PastKeyTensor;
2123 _Maybenull_ const DML_TENSOR_DESC* PastValueTensor;
2124 _Maybenull_ const DML_TENSOR_DESC* PastSequenceLengthsTensor;
2125 const DML_TENSOR_DESC* OutputTensor;
2126 _Maybenull_ const DML_TENSOR_DESC* OutputPresentKeyTensor;
2127 _Maybenull_ const DML_TENSOR_DESC* OutputPresentValueTensor;
2128 FLOAT Scale;
2129 FLOAT MaskFilterValue;
2130 UINT QueryHeadCount;
2131 UINT KeyValueHeadCount;
2132 DML_MULTIHEAD_ATTENTION_MASK_TYPE MaskType;
2133};
2134
2135struct DML_QUANTIZE_OPERATOR_DESC
2136{
2137 const DML_TENSOR_DESC* InputTensor;
2138 DML_QUANTIZATION_TYPE QuantizationType;
2139 UINT QuantizationTensorCount;
2140 _Field_size_(QuantizationTensorCount) const DML_TENSOR_DESC* QuantizationTensors;
2141 const DML_TENSOR_DESC* OutputTensor;
2142};
2143
2144struct DML_DEQUANTIZE_OPERATOR_DESC
2145{
2146 const DML_TENSOR_DESC* InputTensor;
2147 DML_QUANTIZATION_TYPE QuantizationType;
2148 UINT QuantizationTensorCount;
2149 _Field_size_(QuantizationTensorCount) const DML_TENSOR_DESC* QuantizationTensors;
2150 const DML_TENSOR_DESC* OutputTensor;
2151};
2152
2153#endif // DML_TARGET_VERSION >= 0x6300
2154
2155#if DML_TARGET_VERSION >= 0x6400
2156
2157struct DML_RESAMPLE3_OPERATOR_DESC
2158{
2159 const DML_TENSOR_DESC* InputTensor;
2160 const DML_TENSOR_DESC* OutputTensor;
2161 DML_INTERPOLATION_MODE InterpolationMode;
2162 DML_AXIS_DIRECTION RoundingDirection;
2163 UINT DimensionCount;
2164 _Field_size_(DimensionCount) const FLOAT* Scales;
2165 _Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;
2166 _Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;
2167 BOOL Antialiased;
2168};
2169
2170struct DML_FOLD_OPERATOR_DESC
2171{
2172 const DML_TENSOR_DESC* InputTensor;
2173 const DML_TENSOR_DESC* OutputTensor;
2174 UINT DimensionCount;
2175 _Field_size_(DimensionCount) const UINT* WindowSizes; // Size of the extracted patch
2176 _Field_size_(DimensionCount) const UINT* Strides; // Step size of the extracted patches
2177 _Field_size_(DimensionCount) const UINT* Dilations; // Dialations of the extracted patch
2178 _Field_size_(DimensionCount) const UINT* StartPadding; // Start padding of the "source tensor"
2179 _Field_size_(DimensionCount) const UINT* EndPadding; // End padding of the "source tensor"
2180};
2181
2182struct DML_UNFOLD_OPERATOR_DESC
2183{
2184 const DML_TENSOR_DESC* InputTensor;
2185 const DML_TENSOR_DESC* OutputTensor;
2186 UINT DimensionCount;
2187 _Field_size_(DimensionCount) const UINT* WindowSizes; // Size of the extracted patch
2188 _Field_size_(DimensionCount) const UINT* Strides; // Step size of the extracted patches
2189 _Field_size_(DimensionCount) const UINT* Dilations; // Dialations of the extracted patch
2190 _Field_size_(DimensionCount) const UINT* StartPadding; // Start padding of the "source tensor"
2191 _Field_size_(DimensionCount) const UINT* EndPadding; // End padding of the "source tensor"
2192};
2193
2194#endif // DML_TARGET_VERSION >= 0x6400
2195
2196// ===================================================================================================================
2197// DML feature support queries
2198// ===================================================================================================================
2199
2200#if DML_TARGET_VERSION >= 0x2000
2201
2202enum DML_FEATURE_LEVEL
2203{
2204 DML_FEATURE_LEVEL_1_0 = 0x1000,
2205 DML_FEATURE_LEVEL_2_0 = 0x2000,
2206 DML_FEATURE_LEVEL_2_1 = 0x2100,
2207 DML_FEATURE_LEVEL_3_0 = 0x3000,
2208 DML_FEATURE_LEVEL_3_1 = 0x3100,
2209 DML_FEATURE_LEVEL_4_0 = 0x4000,
2210 DML_FEATURE_LEVEL_4_1 = 0x4100,
2211 DML_FEATURE_LEVEL_5_0 = 0x5000,
2212 DML_FEATURE_LEVEL_5_1 = 0x5100,
2213 DML_FEATURE_LEVEL_5_2 = 0x5200,
2214 DML_FEATURE_LEVEL_6_0 = 0x6000,
2215 DML_FEATURE_LEVEL_6_1 = 0x6100,
2216 DML_FEATURE_LEVEL_6_2 = 0x6200,
2217 DML_FEATURE_LEVEL_6_3 = 0x6300,
2218 DML_FEATURE_LEVEL_6_4 = 0x6400,
2219};
2220
2221#endif // DML_TARGET_VERSION >= 0x2000
2222
2223enum DML_FEATURE
2224{
2225 DML_FEATURE_TENSOR_DATA_TYPE_SUPPORT,
2226
2227#if DML_TARGET_VERSION >= 0x2000
2228 DML_FEATURE_FEATURE_LEVELS,
2229#endif // DML_TARGET_VERSION >= 0x2000
2230};
2231
2232struct DML_FEATURE_QUERY_TENSOR_DATA_TYPE_SUPPORT
2233{
2234 DML_TENSOR_DATA_TYPE DataType;
2235};
2236
2237struct DML_FEATURE_DATA_TENSOR_DATA_TYPE_SUPPORT
2238{
2239 BOOL IsSupported;
2240};
2241
2242#if DML_TARGET_VERSION >= 0x2000
2243
2244struct DML_FEATURE_QUERY_FEATURE_LEVELS
2245{
2246 UINT RequestedFeatureLevelCount;
2247 _Field_size_(RequestedFeatureLevelCount) const DML_FEATURE_LEVEL* RequestedFeatureLevels;
2248};
2249
2250struct DML_FEATURE_DATA_FEATURE_LEVELS
2251{
2252 DML_FEATURE_LEVEL MaxSupportedFeatureLevel;
2253};
2254
2255#endif // DML_TARGET_VERSION >= 0x2000
2256
2257// ===================================================================================================================
2258// DML device functions, enumerations, and structures
2259// ===================================================================================================================
2260
2261struct DML_BINDING_TABLE_DESC
2262{
2263 IDMLDispatchable* Dispatchable;
2264 D3D12_CPU_DESCRIPTOR_HANDLE CPUDescriptorHandle;
2265 D3D12_GPU_DESCRIPTOR_HANDLE GPUDescriptorHandle;
2266 UINT SizeInDescriptors;
2267};
2268
2269enum DML_EXECUTION_FLAGS
2270{
2271 DML_EXECUTION_FLAG_NONE = 0,
2272 DML_EXECUTION_FLAG_ALLOW_HALF_PRECISION_COMPUTATION = 0x1,
2273 DML_EXECUTION_FLAG_DISABLE_META_COMMANDS = 0x2,
2274 DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE = 0x4,
2275};
2276
2277DEFINE_ENUM_FLAG_OPERATORS(DML_EXECUTION_FLAGS)
2278
2279enum DML_CREATE_DEVICE_FLAGS
2280{
2281 DML_CREATE_DEVICE_FLAG_NONE = 0,
2282 DML_CREATE_DEVICE_FLAG_DEBUG = 0x1,
2283};
2284
2285DEFINE_ENUM_FLAG_OPERATORS(DML_CREATE_DEVICE_FLAGS)
2286
2287STDAPI DMLCreateDevice(
2288 ID3D12Device* d3d12Device,
2289 DML_CREATE_DEVICE_FLAGS flags,
2290 REFIID riid, // Expected: IDMLDevice
2291 _COM_Outptr_opt_ void** ppv
2292 );
2293
2294#if DML_TARGET_VERSION >= 0x2000
2295
2296STDAPI DMLCreateDevice1(
2297 ID3D12Device* d3d12Device,
2298 DML_CREATE_DEVICE_FLAGS flags,
2299 DML_FEATURE_LEVEL minimumFeatureLevel,
2300 REFIID riid, // Expected: IDMLDevice
2301 _COM_Outptr_opt_ void** ppv
2302 );
2303
2304#endif // DML_TARGET_VERSION >= 0x2000
2305
2306// ===================================================================================================================
2307// DML object
2308// ===================================================================================================================
2309
2310interface DML_DECLARE_INTERFACE("c8263aac-9e0c-4a2d-9b8e-007521a3317c") IDMLObject : IUnknown
2311{
2312 IFACEMETHOD(GetPrivateData)(
2313 REFGUID guid,
2314 _Inout_ UINT* dataSize,
2315 _Out_writes_bytes_opt_(*dataSize) void* data
2316 ) = 0;
2317
2318 IFACEMETHOD(SetPrivateData)(
2319 REFGUID guid,
2320 UINT dataSize,
2321 _In_reads_bytes_opt_(dataSize) const void* data
2322 ) = 0;
2323
2324 IFACEMETHOD(SetPrivateDataInterface)(
2325 REFGUID guid,
2326 _In_opt_ IUnknown* data
2327 ) = 0;
2328
2329 IFACEMETHOD(SetName)(
2330 PCWSTR name
2331 ) = 0;
2332};
2333
2334// ===================================================================================================================
2335// DML device
2336// ===================================================================================================================
2337
2338interface DML_DECLARE_INTERFACE("6dbd6437-96fd-423f-a98c-ae5e7c2a573f") IDMLDevice : IDMLObject
2339{
2340 IFACEMETHOD(CheckFeatureSupport)(
2341 DML_FEATURE feature,
2342 UINT featureQueryDataSize,
2343 _In_reads_bytes_opt_(featureQueryDataSize) const void* featureQueryData,
2344 UINT featureSupportDataSize,
2345 _Out_writes_bytes_(featureSupportDataSize) void* featureSupportData
2346 ) = 0;
2347
2348 IFACEMETHOD(CreateOperator)(
2349 const DML_OPERATOR_DESC* desc,
2350 REFIID riid, // expected: IDMLOperator
2351 _COM_Outptr_opt_ void** ppv
2352 ) = 0;
2353
2354 IFACEMETHOD(CompileOperator)(
2355 IDMLOperator* op,
2356 DML_EXECUTION_FLAGS flags,
2357 REFIID riid, // expected: IDMLCompiledOperator
2358 _COM_Outptr_opt_ void** ppv
2359 ) = 0;
2360
2361 IFACEMETHOD(CreateOperatorInitializer)(
2362 UINT operatorCount,
2363 _In_reads_opt_(operatorCount) IDMLCompiledOperator* const* operators,
2364 REFIID riid, // expected: IDMLOperatorInitializer
2365 _COM_Outptr_ void** ppv
2366 ) = 0;
2367
2368 IFACEMETHOD(CreateCommandRecorder)(
2369 REFIID riid, // expected: IDMLCommandRecorder
2370 _COM_Outptr_ void** ppv
2371 ) = 0;
2372
2373 IFACEMETHOD(CreateBindingTable)(
2374 _In_opt_ const DML_BINDING_TABLE_DESC* desc,
2375 REFIID riid, // expected: IDMLBindingTable
2376 _COM_Outptr_ void** ppv
2377 ) = 0;
2378
2379 IFACEMETHOD(Evict)(
2380 UINT count,
2381 _In_reads_(count) IDMLPageable* const* ppObjects
2382 ) = 0;
2383
2384 IFACEMETHOD(MakeResident)(
2385 UINT count,
2386 _In_reads_(count) IDMLPageable* const* ppObjects
2387 ) = 0;
2388
2389 IFACEMETHOD(GetDeviceRemovedReason)(
2390 ) = 0;
2391
2392 IFACEMETHOD(GetParentDevice)(
2393 REFIID riid,
2394 _COM_Outptr_ void** ppv
2395 ) = 0;
2396};
2397
2398
2399// ===================================================================================================================
2400// DML device children
2401// ===================================================================================================================
2402
2403interface DML_DECLARE_INTERFACE("27e83142-8165-49e3-974e-2fd66e4cb69d") IDMLDeviceChild : IDMLObject
2404{
2405 IFACEMETHOD(GetDevice)(
2406 REFIID riid, // expected: IDMLDevice
2407 _COM_Outptr_ void** ppv
2408 ) = 0;
2409};
2410
2411interface DML_DECLARE_INTERFACE("b1ab0825-4542-4a4b-8617-6dde6e8f6201") IDMLPageable : IDMLDeviceChild
2412{
2413};
2414
2415
2416// ===================================================================================================================
2417// DML operator
2418// ===================================================================================================================
2419
2420interface DML_DECLARE_INTERFACE("26caae7a-3081-4633-9581-226fbe57695d") IDMLOperator : IDMLDeviceChild
2421{
2422};
2423
2424
2425// ===================================================================================================================
2426// DML dispatchable
2427// ===================================================================================================================
2428
2429struct DML_BINDING_PROPERTIES
2430{
2431 UINT RequiredDescriptorCount;
2432 UINT64 TemporaryResourceSize;
2433 UINT64 PersistentResourceSize;
2434};
2435
2436interface DML_DECLARE_INTERFACE("dcb821a8-1039-441e-9f1c-b1759c2f3cec") IDMLDispatchable : IDMLPageable
2437{
2438 IFACEMETHOD_(DML_BINDING_PROPERTIES, GetBindingProperties)() = 0;
2439};
2440
2441
2442// ===================================================================================================================
2443// DML compiled operator
2444// ===================================================================================================================
2445
2446interface DML_DECLARE_INTERFACE("6b15e56a-bf5c-4902-92d8-da3a650afea4") IDMLCompiledOperator : IDMLDispatchable
2447{
2448};
2449
2450
2451// ===================================================================================================================
2452// DML operator initializer
2453// ===================================================================================================================
2454
2455interface DML_DECLARE_INTERFACE("427c1113-435c-469c-8676-4d5dd072f813") IDMLOperatorInitializer : IDMLDispatchable
2456{
2457 IFACEMETHOD(Reset)(
2458 UINT operatorCount,
2459 _In_reads_opt_(operatorCount) IDMLCompiledOperator* const* operators
2460 ) = 0;
2461};
2462
2463// ===================================================================================================================
2464// DML binding table
2465// ===================================================================================================================
2466
2467enum DML_BINDING_TYPE
2468{
2469 DML_BINDING_TYPE_NONE,
2470 DML_BINDING_TYPE_BUFFER,
2471 DML_BINDING_TYPE_BUFFER_ARRAY,
2472};
2473
2474struct DML_BINDING_DESC
2475{
2476 DML_BINDING_TYPE Type;
2477 _Field_size_opt_(_Inexpressible_("Dependent on binding type")) const void* Desc;
2478};
2479
2480struct DML_BUFFER_BINDING
2481{
2482 _Maybenull_ ID3D12Resource* Buffer;
2483 UINT64 Offset;
2484 UINT64 SizeInBytes;
2485};
2486
2487struct DML_BUFFER_ARRAY_BINDING
2488{
2489 UINT BindingCount;
2490 _Field_size_(BindingCount) const DML_BUFFER_BINDING* Bindings;
2491};
2492
2493interface DML_DECLARE_INTERFACE("29c687dc-de74-4e3b-ab00-1168f2fc3cfc") IDMLBindingTable : IDMLDeviceChild
2494{
2495 IFACEMETHOD_(void, BindInputs)(
2496 UINT bindingCount,
2497 _In_reads_opt_(bindingCount) const DML_BINDING_DESC* bindings
2498 ) = 0;
2499
2500 IFACEMETHOD_(void, BindOutputs)(
2501 UINT bindingCount,
2502 _In_reads_opt_(bindingCount) const DML_BINDING_DESC* bindings
2503 ) = 0;
2504
2505 IFACEMETHOD_(void, BindTemporaryResource)(
2506 _In_opt_ const DML_BINDING_DESC* binding
2507 ) = 0;
2508
2509 IFACEMETHOD_(void, BindPersistentResource)(
2510 _In_opt_ const DML_BINDING_DESC* binding
2511 ) = 0;
2512
2513 IFACEMETHOD(Reset)(
2514 _In_opt_ const DML_BINDING_TABLE_DESC* desc
2515 ) = 0;
2516};
2517
2518
2519// ===================================================================================================================
2520// DML command recorder
2521// ===================================================================================================================
2522
2523interface DML_DECLARE_INTERFACE("e6857a76-2e3e-4fdd-bff4-5d2ba10fb453") IDMLCommandRecorder : IDMLDeviceChild
2524{
2525 IFACEMETHOD_(void, RecordDispatch)(
2526 ID3D12CommandList* commandList,
2527 IDMLDispatchable* dispatchable,
2528 IDMLBindingTable* bindings
2529 ) = 0;
2530};
2531
2532
2533// ===================================================================================================================
2534// DML debug
2535// ===================================================================================================================
2536
2537interface DML_DECLARE_INTERFACE("7d6f3ac9-394a-4ac3-92a7-390cc57a8217") IDMLDebugDevice : IUnknown
2538{
2539 IFACEMETHOD_(void, SetMuteDebugOutput)(
2540 BOOL mute
2541 ) = 0;
2542};
2543
2544
2545// ===================================================================================================================
2546// DML graph
2547// ===================================================================================================================
2548
2549#if DML_TARGET_VERSION >= 0x2100
2550
2551enum DML_GRAPH_EDGE_TYPE
2552{
2553 DML_GRAPH_EDGE_TYPE_INVALID,
2554 DML_GRAPH_EDGE_TYPE_INPUT,
2555 DML_GRAPH_EDGE_TYPE_OUTPUT,
2556 DML_GRAPH_EDGE_TYPE_INTERMEDIATE,
2557};
2558
2559struct DML_GRAPH_EDGE_DESC
2560{
2561 DML_GRAPH_EDGE_TYPE Type;
2562 _Field_size_(_Inexpressible_("Dependent on edge type")) const void* Desc;
2563};
2564
2565struct DML_INPUT_GRAPH_EDGE_DESC
2566{
2567 UINT GraphInputIndex;
2568 UINT ToNodeIndex;
2569 UINT ToNodeInputIndex;
2570 _Field_z_ _Maybenull_ const char* Name;
2571};
2572
2573struct DML_OUTPUT_GRAPH_EDGE_DESC
2574{
2575 UINT FromNodeIndex;
2576 UINT FromNodeOutputIndex;
2577 UINT GraphOutputIndex;
2578 _Field_z_ _Maybenull_ const char* Name;
2579};
2580
2581struct DML_INTERMEDIATE_GRAPH_EDGE_DESC
2582{
2583 UINT FromNodeIndex;
2584 UINT FromNodeOutputIndex;
2585 UINT ToNodeIndex;
2586 UINT ToNodeInputIndex;
2587 _Field_z_ _Maybenull_ const char* Name;
2588};
2589
2590enum DML_GRAPH_NODE_TYPE
2591{
2592 DML_GRAPH_NODE_TYPE_INVALID,
2593 DML_GRAPH_NODE_TYPE_OPERATOR,
2594#if DML_TARGET_VERSION >= 0x6200
2595 DML_GRAPH_NODE_TYPE_CONSTANT
2596#endif // DML_TARGET_VERSION >= 0x6200
2597};
2598
2599struct DML_GRAPH_NODE_DESC
2600{
2601 DML_GRAPH_NODE_TYPE Type;
2602 _Field_size_(_Inexpressible_("Dependent on node type")) const void* Desc;
2603};
2604
2605struct DML_OPERATOR_GRAPH_NODE_DESC
2606{
2607 IDMLOperator* Operator;
2608 _Field_z_ _Maybenull_ const char* Name;
2609};
2610
2611#if DML_TARGET_VERSION >= 0x6200
2612struct DML_CONSTANT_DATA_GRAPH_NODE_DESC
2613{
2614 _Field_size_bytes_(DataSize) const void* Data;
2615 SIZE_T DataSize;
2616 _Field_z_ _Maybenull_ const char* Name;
2617};
2618#endif // DML_TARGET_VERSION >= 0x6200
2619
2620struct DML_GRAPH_DESC
2621{
2622 UINT InputCount;
2623 UINT OutputCount;
2624
2625 UINT NodeCount;
2626 _Field_size_(NodeCount) const DML_GRAPH_NODE_DESC* Nodes;
2627
2628 UINT InputEdgeCount;
2629 _Field_size_opt_(InputEdgeCount) const DML_GRAPH_EDGE_DESC* InputEdges;
2630
2631 UINT OutputEdgeCount;
2632 _Field_size_(OutputEdgeCount) const DML_GRAPH_EDGE_DESC* OutputEdges;
2633
2634 UINT IntermediateEdgeCount;
2635 _Field_size_opt_(IntermediateEdgeCount) const DML_GRAPH_EDGE_DESC* IntermediateEdges;
2636};
2637
2638interface DML_DECLARE_INTERFACE("a0884f9a-d2be-4355-aa5d-5901281ad1d2") IDMLDevice1 : IDMLDevice
2639{
2640 IFACEMETHOD(CompileGraph)(
2641 const DML_GRAPH_DESC* desc,
2642 DML_EXECUTION_FLAGS flags,
2643 REFIID riid, // expected: IDMLCompiledOperator
2644 _COM_Outptr_opt_ void** ppv
2645 ) = 0;
2646};
2647
2648#endif // DML_TARGET_VERSION >= 0x2100
2649
2650#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES)
2651#endif // DIRECTML_H