Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/directx_headers/include/directx/DirectML.h
14728 views
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
45
static const UINT DML_TENSOR_DIMENSION_COUNT_MAX = 5;
46
#if DML_TARGET_VERSION >= 0x3000
47
static const UINT DML_TENSOR_DIMENSION_COUNT_MAX1 = 8;
48
#endif
49
50
static const UINT DML_TEMPORARY_BUFFER_ALIGNMENT = 256;
51
static const UINT DML_PERSISTENT_BUFFER_ALIGNMENT = 256;
52
53
static const UINT DML_MINIMUM_BUFFER_TENSOR_ALIGNMENT = 16;
54
55
56
// ===================================================================================================================
57
// Interface declarations
58
// ===================================================================================================================
59
60
interface IDMLObject;
61
interface IDMLDevice;
62
interface IDMLDeviceChild;
63
interface IDMLPageable;
64
interface IDMLDispatchable;
65
interface IDMLOperator;
66
interface IDMLCompiledOperator;
67
interface IDMLOperatorInitializer;
68
interface IDMLBindingTable;
69
interface IDMLCommandRecorder;
70
71
72
// ===================================================================================================================
73
// Tensor descriptions
74
// ===================================================================================================================
75
76
enum 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
96
enum DML_TENSOR_TYPE
97
{
98
DML_TENSOR_TYPE_INVALID,
99
100
DML_TENSOR_TYPE_BUFFER,
101
};
102
103
enum DML_TENSOR_FLAGS
104
{
105
DML_TENSOR_FLAG_NONE = 0x0,
106
DML_TENSOR_FLAG_OWNED_BY_DML = 0x1,
107
};
108
109
DEFINE_ENUM_FLAG_OPERATORS(DML_TENSOR_FLAGS)
110
111
struct 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
122
struct 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
133
enum 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
357
enum 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
373
enum DML_MATRIX_TRANSFORM
374
{
375
DML_MATRIX_TRANSFORM_NONE,
376
DML_MATRIX_TRANSFORM_TRANSPOSE,
377
};
378
379
enum DML_CONVOLUTION_MODE
380
{
381
DML_CONVOLUTION_MODE_CONVOLUTION,
382
DML_CONVOLUTION_MODE_CROSS_CORRELATION,
383
};
384
385
enum DML_CONVOLUTION_DIRECTION
386
{
387
DML_CONVOLUTION_DIRECTION_FORWARD,
388
DML_CONVOLUTION_DIRECTION_BACKWARD,
389
};
390
391
enum 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
406
enum DML_INTERPOLATION_MODE
407
{
408
DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR,
409
DML_INTERPOLATION_MODE_LINEAR,
410
};
411
412
struct DML_SCALE_BIAS
413
{
414
FLOAT Scale;
415
FLOAT Bias;
416
};
417
418
struct DML_SIZE_2D
419
{
420
UINT Width;
421
UINT Height;
422
};
423
424
enum 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
433
enum 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
440
enum 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
447
enum DML_AXIS_DIRECTION
448
{
449
DML_AXIS_DIRECTION_INCREASING = 0,
450
DML_AXIS_DIRECTION_DECREASING = 1,
451
};
452
453
enum DML_DEPTH_SPACE_ORDER
454
{
455
DML_DEPTH_SPACE_ORDER_DEPTH_COLUMN_ROW,
456
DML_DEPTH_SPACE_ORDER_COLUMN_ROW_DEPTH,
457
};
458
459
union 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
478
enum 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
487
enum 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
500
enum 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
513
struct DML_OPERATOR_DESC
514
{
515
DML_OPERATOR_TYPE Type;
516
_Field_size_(_Inexpressible_("Dependent on operator type")) const void* Desc;
517
};
518
519
struct 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
526
struct 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
533
struct 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
540
struct 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
547
struct 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
555
struct 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
562
struct 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
569
struct 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
576
struct 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
585
struct 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
592
struct 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
599
struct 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
606
struct 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
613
struct 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
620
struct 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
627
struct 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
634
struct 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
641
struct 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
648
struct DML_ELEMENT_WISE_LOGICAL_NOT_OPERATOR_DESC
649
{
650
const DML_TENSOR_DESC* InputTensor;
651
const DML_TENSOR_DESC* OutputTensor;
652
};
653
654
struct 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
661
struct 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
668
struct 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
675
struct 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
682
struct 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
689
struct 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
696
struct 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
704
struct 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
712
struct 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
719
struct 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
726
struct 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
733
struct 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
740
struct 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
747
struct 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
755
struct 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
763
struct 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
771
struct DML_ACTIVATION_ELU_OPERATOR_DESC
772
{
773
const DML_TENSOR_DESC* InputTensor;
774
const DML_TENSOR_DESC* OutputTensor;
775
FLOAT Alpha;
776
};
777
778
struct DML_ACTIVATION_HARDMAX_OPERATOR_DESC
779
{
780
const DML_TENSOR_DESC* InputTensor;
781
const DML_TENSOR_DESC* OutputTensor;
782
};
783
784
struct 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
792
struct DML_ACTIVATION_IDENTITY_OPERATOR_DESC
793
{
794
const DML_TENSOR_DESC* InputTensor;
795
const DML_TENSOR_DESC* OutputTensor;
796
};
797
798
struct DML_ACTIVATION_LEAKY_RELU_OPERATOR_DESC
799
{
800
const DML_TENSOR_DESC* InputTensor;
801
const DML_TENSOR_DESC* OutputTensor;
802
FLOAT Alpha;
803
};
804
805
struct 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
813
struct DML_ACTIVATION_LOG_SOFTMAX_OPERATOR_DESC
814
{
815
const DML_TENSOR_DESC* InputTensor;
816
const DML_TENSOR_DESC* OutputTensor;
817
};
818
819
struct 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
826
struct 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
834
struct DML_ACTIVATION_RELU_OPERATOR_DESC
835
{
836
const DML_TENSOR_DESC* InputTensor;
837
const DML_TENSOR_DESC* OutputTensor;
838
};
839
840
struct 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
848
struct 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
856
struct DML_ACTIVATION_SIGMOID_OPERATOR_DESC
857
{
858
const DML_TENSOR_DESC* InputTensor;
859
const DML_TENSOR_DESC* OutputTensor;
860
};
861
862
struct DML_ACTIVATION_SOFTMAX_OPERATOR_DESC
863
{
864
const DML_TENSOR_DESC* InputTensor;
865
const DML_TENSOR_DESC* OutputTensor;
866
};
867
868
struct DML_ACTIVATION_SOFTPLUS_OPERATOR_DESC
869
{
870
const DML_TENSOR_DESC* InputTensor;
871
const DML_TENSOR_DESC* OutputTensor;
872
FLOAT Steepness;
873
};
874
875
struct DML_ACTIVATION_SOFTSIGN_OPERATOR_DESC
876
{
877
const DML_TENSOR_DESC* InputTensor;
878
const DML_TENSOR_DESC* OutputTensor;
879
};
880
881
struct DML_ACTIVATION_TANH_OPERATOR_DESC
882
{
883
const DML_TENSOR_DESC* InputTensor;
884
const DML_TENSOR_DESC* OutputTensor;
885
};
886
887
struct DML_ACTIVATION_THRESHOLDED_RELU_OPERATOR_DESC
888
{
889
const DML_TENSOR_DESC* InputTensor;
890
const DML_TENSOR_DESC* OutputTensor;
891
FLOAT Alpha;
892
};
893
894
struct 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
912
struct 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
925
struct 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
934
struct 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
946
struct 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
958
struct 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
969
struct 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
978
struct 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
988
struct DML_CAST_OPERATOR_DESC
989
{
990
const DML_TENSOR_DESC* InputTensor;
991
const DML_TENSOR_DESC* OutputTensor;
992
};
993
994
struct 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
1002
struct 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
1010
struct 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
1021
struct 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
1030
struct 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
1038
struct 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
1047
struct DML_SPACE_TO_DEPTH_OPERATOR_DESC
1048
{
1049
const DML_TENSOR_DESC* InputTensor;
1050
const DML_TENSOR_DESC* OutputTensor;
1051
UINT BlockSize;
1052
};
1053
1054
struct DML_DEPTH_TO_SPACE_OPERATOR_DESC
1055
{
1056
const DML_TENSOR_DESC* InputTensor;
1057
const DML_TENSOR_DESC* OutputTensor;
1058
UINT BlockSize;
1059
};
1060
1061
struct 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
1069
struct 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
1078
struct 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
1091
struct 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
1103
struct 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
1114
struct 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
1123
struct 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
1138
struct 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
1159
struct 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
1177
struct DML_ELEMENT_WISE_SIGN_OPERATOR_DESC
1178
{
1179
const DML_TENSOR_DESC* InputTensor;
1180
const DML_TENSOR_DESC* OutputTensor;
1181
};
1182
1183
struct DML_ELEMENT_WISE_IS_NAN_OPERATOR_DESC
1184
{
1185
const DML_TENSOR_DESC* InputTensor;
1186
const DML_TENSOR_DESC* OutputTensor;
1187
};
1188
1189
struct 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
1196
struct 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
1203
struct 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
1210
struct 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
1217
struct 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
1224
struct 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
1231
struct 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
1238
struct 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
1246
struct 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
1254
struct 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
1266
struct 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
1273
struct DML_DIAGONAL_MATRIX_OPERATOR_DESC
1274
{
1275
const DML_TENSOR_DESC* OutputTensor;
1276
INT Offset;
1277
FLOAT Value;
1278
};
1279
1280
struct 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
1289
struct 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
1297
struct 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
1310
struct 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
1317
struct 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
1324
struct 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
1331
struct 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
1338
struct 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
1345
struct 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
1352
struct 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
1359
struct 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
1367
struct 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
1376
struct 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
1384
struct 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.
1393
using DML_SCATTER_ELEMENTS_OPERATOR_DESC = DML_SCATTER_OPERATOR_DESC;
1394
1395
struct 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
1404
struct 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
1414
struct 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
1427
struct 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
1437
struct 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
1447
struct 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
1455
struct 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
1463
struct 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
1476
struct 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
1487
struct 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
1496
struct 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
1509
struct 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
1524
struct 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
1548
struct 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
1555
struct 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
1562
struct 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
1569
struct DML_ELEMENT_WISE_BIT_NOT_OPERATOR_DESC
1570
{
1571
const DML_TENSOR_DESC* InputTensor;
1572
const DML_TENSOR_DESC* OutputTensor;
1573
};
1574
1575
struct DML_ELEMENT_WISE_BIT_COUNT_OPERATOR_DESC
1576
{
1577
const DML_TENSOR_DESC* InputTensor;
1578
const DML_TENSOR_DESC* OutputTensor;
1579
};
1580
1581
struct 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
1588
struct 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
1595
struct DML_ACTIVATION_CELU_OPERATOR_DESC
1596
{
1597
const DML_TENSOR_DESC* InputTensor;
1598
const DML_TENSOR_DESC* OutputTensor;
1599
FLOAT Alpha;
1600
};
1601
1602
struct 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
1609
struct 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
1621
struct 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
1634
struct 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
1642
struct 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
1649
struct 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
1660
struct 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
1670
struct 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
1686
struct 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
1695
struct 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
1704
struct 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
1719
struct 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
1733
struct 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
1740
struct 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
1749
struct 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
1756
struct 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
1768
struct 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
1777
struct 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
1795
struct 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
1808
struct 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
1816
struct 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
1838
struct 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
1857
struct 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
1870
struct 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
1887
struct 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
1897
struct 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
1907
struct 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
1919
struct 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
1929
struct DML_ACTIVATION_GELU_OPERATOR_DESC
1930
{
1931
const DML_TENSOR_DESC* InputTensor;
1932
const DML_TENSOR_DESC* OutputTensor;
1933
};
1934
1935
struct 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
1943
struct 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
1951
struct 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
1959
struct 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
1971
struct 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
1983
struct 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
1997
struct 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
2023
struct 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
2036
struct 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
2049
struct DML_ACTIVATION_SWISH_OPERATOR_DESC
2050
{
2051
const DML_TENSOR_DESC* InputTensor;
2052
const DML_TENSOR_DESC* OutputTensor;
2053
FLOAT SigmoidInputScale;
2054
};
2055
2056
struct 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
2064
struct 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
2081
struct 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
2097
struct 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
2111
struct 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
2135
struct 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
2144
struct 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
2157
struct 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
2170
struct 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
2182
struct 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
2202
enum 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
2223
enum 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
2232
struct DML_FEATURE_QUERY_TENSOR_DATA_TYPE_SUPPORT
2233
{
2234
DML_TENSOR_DATA_TYPE DataType;
2235
};
2236
2237
struct DML_FEATURE_DATA_TENSOR_DATA_TYPE_SUPPORT
2238
{
2239
BOOL IsSupported;
2240
};
2241
2242
#if DML_TARGET_VERSION >= 0x2000
2243
2244
struct DML_FEATURE_QUERY_FEATURE_LEVELS
2245
{
2246
UINT RequestedFeatureLevelCount;
2247
_Field_size_(RequestedFeatureLevelCount) const DML_FEATURE_LEVEL* RequestedFeatureLevels;
2248
};
2249
2250
struct 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
2261
struct 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
2269
enum 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
2277
DEFINE_ENUM_FLAG_OPERATORS(DML_EXECUTION_FLAGS)
2278
2279
enum DML_CREATE_DEVICE_FLAGS
2280
{
2281
DML_CREATE_DEVICE_FLAG_NONE = 0,
2282
DML_CREATE_DEVICE_FLAG_DEBUG = 0x1,
2283
};
2284
2285
DEFINE_ENUM_FLAG_OPERATORS(DML_CREATE_DEVICE_FLAGS)
2286
2287
STDAPI 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
2296
STDAPI 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
2310
interface 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
2338
interface 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
2403
interface 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
2411
interface DML_DECLARE_INTERFACE("b1ab0825-4542-4a4b-8617-6dde6e8f6201") IDMLPageable : IDMLDeviceChild
2412
{
2413
};
2414
2415
2416
// ===================================================================================================================
2417
// DML operator
2418
// ===================================================================================================================
2419
2420
interface DML_DECLARE_INTERFACE("26caae7a-3081-4633-9581-226fbe57695d") IDMLOperator : IDMLDeviceChild
2421
{
2422
};
2423
2424
2425
// ===================================================================================================================
2426
// DML dispatchable
2427
// ===================================================================================================================
2428
2429
struct DML_BINDING_PROPERTIES
2430
{
2431
UINT RequiredDescriptorCount;
2432
UINT64 TemporaryResourceSize;
2433
UINT64 PersistentResourceSize;
2434
};
2435
2436
interface 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
2446
interface DML_DECLARE_INTERFACE("6b15e56a-bf5c-4902-92d8-da3a650afea4") IDMLCompiledOperator : IDMLDispatchable
2447
{
2448
};
2449
2450
2451
// ===================================================================================================================
2452
// DML operator initializer
2453
// ===================================================================================================================
2454
2455
interface 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
2467
enum DML_BINDING_TYPE
2468
{
2469
DML_BINDING_TYPE_NONE,
2470
DML_BINDING_TYPE_BUFFER,
2471
DML_BINDING_TYPE_BUFFER_ARRAY,
2472
};
2473
2474
struct DML_BINDING_DESC
2475
{
2476
DML_BINDING_TYPE Type;
2477
_Field_size_opt_(_Inexpressible_("Dependent on binding type")) const void* Desc;
2478
};
2479
2480
struct DML_BUFFER_BINDING
2481
{
2482
_Maybenull_ ID3D12Resource* Buffer;
2483
UINT64 Offset;
2484
UINT64 SizeInBytes;
2485
};
2486
2487
struct DML_BUFFER_ARRAY_BINDING
2488
{
2489
UINT BindingCount;
2490
_Field_size_(BindingCount) const DML_BUFFER_BINDING* Bindings;
2491
};
2492
2493
interface 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
2523
interface 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
2537
interface 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
2551
enum 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
2559
struct DML_GRAPH_EDGE_DESC
2560
{
2561
DML_GRAPH_EDGE_TYPE Type;
2562
_Field_size_(_Inexpressible_("Dependent on edge type")) const void* Desc;
2563
};
2564
2565
struct DML_INPUT_GRAPH_EDGE_DESC
2566
{
2567
UINT GraphInputIndex;
2568
UINT ToNodeIndex;
2569
UINT ToNodeInputIndex;
2570
_Field_z_ _Maybenull_ const char* Name;
2571
};
2572
2573
struct DML_OUTPUT_GRAPH_EDGE_DESC
2574
{
2575
UINT FromNodeIndex;
2576
UINT FromNodeOutputIndex;
2577
UINT GraphOutputIndex;
2578
_Field_z_ _Maybenull_ const char* Name;
2579
};
2580
2581
struct 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
2590
enum 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
2599
struct DML_GRAPH_NODE_DESC
2600
{
2601
DML_GRAPH_NODE_TYPE Type;
2602
_Field_size_(_Inexpressible_("Dependent on node type")) const void* Desc;
2603
};
2604
2605
struct DML_OPERATOR_GRAPH_NODE_DESC
2606
{
2607
IDMLOperator* Operator;
2608
_Field_z_ _Maybenull_ const char* Name;
2609
};
2610
2611
#if DML_TARGET_VERSION >= 0x6200
2612
struct 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
2620
struct 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
2638
interface 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
2652
2653