Path: blob/master/thirdparty/directx_headers/include/directx/DirectML.h
14728 views
// Copyright (c) Microsoft Corporation. All rights reserved.12#ifndef DIRECTML_H3#define DIRECTML_H4#pragma once56#ifdef _GAMING_XBOX_SCARLETT7#include "d3d12_xs.h"8#elif _GAMING_XBOX_XBOXONE9#include "d3d12_x.h"10#else11#include "d3d12.h"12#endif1314#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES)1516#ifndef DML_DECLARE_INTERFACE17#define DML_DECLARE_INTERFACE(iid) DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE18#endif1920#ifndef DML_TARGET_VERSION2122#if !defined(NTDDI_VERSION) || defined(DML_TARGET_VERSION_USE_LATEST) // Use the latest if using redist or no Windows target set.23#define DML_TARGET_VERSION 0x640024#elif defined(NTDDI_WIN10_ZN) && NTDDI_VERSION >= NTDDI_WIN10_ZN25#define DML_TARGET_VERSION 0x600026#elif defined(NTDDI_WIN10_NI) && NTDDI_VERSION >= NTDDI_WIN10_NI27#define DML_TARGET_VERSION 0x500028#elif defined(NTDDI_WIN10_CO) && NTDDI_VERSION >= NTDDI_WIN10_CO29#define DML_TARGET_VERSION 0x400030#elif defined(NTDDI_WIN10_FE) && NTDDI_VERSION >= NTDDI_WIN10_FE31#define DML_TARGET_VERSION 0x300032#elif defined(NTDDI_WIN10_VB) && NTDDI_VERSION >= NTDDI_WIN10_VB // Windows 10 2004 Update33#define DML_TARGET_VERSION 0x200034#else // defined(NTDDI_WIN10_19H1) && NTDDI_VERSION >= NTDDI_WIN10_19H1 // Windows 10 1903 Update35#define DML_TARGET_VERSION 0x100036#endif3738#endif // !defined(DML_TARGET_VERSION)3940// ===================================================================================================================41// DirectML constants42// ===================================================================================================================4344static const UINT DML_TENSOR_DIMENSION_COUNT_MAX = 5;45#if DML_TARGET_VERSION >= 0x300046static const UINT DML_TENSOR_DIMENSION_COUNT_MAX1 = 8;47#endif4849static const UINT DML_TEMPORARY_BUFFER_ALIGNMENT = 256;50static const UINT DML_PERSISTENT_BUFFER_ALIGNMENT = 256;5152static const UINT DML_MINIMUM_BUFFER_TENSOR_ALIGNMENT = 16;535455// ===================================================================================================================56// Interface declarations57// ===================================================================================================================5859interface IDMLObject;60interface IDMLDevice;61interface IDMLDeviceChild;62interface IDMLPageable;63interface IDMLDispatchable;64interface IDMLOperator;65interface IDMLCompiledOperator;66interface IDMLOperatorInitializer;67interface IDMLBindingTable;68interface IDMLCommandRecorder;697071// ===================================================================================================================72// Tensor descriptions73// ===================================================================================================================7475enum DML_TENSOR_DATA_TYPE76{77DML_TENSOR_DATA_TYPE_UNKNOWN,78DML_TENSOR_DATA_TYPE_FLOAT32,79DML_TENSOR_DATA_TYPE_FLOAT16,80DML_TENSOR_DATA_TYPE_UINT32,81DML_TENSOR_DATA_TYPE_UINT16,82DML_TENSOR_DATA_TYPE_UINT8,83DML_TENSOR_DATA_TYPE_INT32,84DML_TENSOR_DATA_TYPE_INT16,85DML_TENSOR_DATA_TYPE_INT8,86DML_TENSOR_DATA_TYPE_FLOAT64,87DML_TENSOR_DATA_TYPE_UINT64,88DML_TENSOR_DATA_TYPE_INT64,89#if DML_TARGET_VERSION >= 0x630090DML_TENSOR_DATA_TYPE_UINT4,91DML_TENSOR_DATA_TYPE_INT4,92#endif // DML_TARGET_VERSION >= 0x630093};9495enum DML_TENSOR_TYPE96{97DML_TENSOR_TYPE_INVALID,9899DML_TENSOR_TYPE_BUFFER,100};101102enum DML_TENSOR_FLAGS103{104DML_TENSOR_FLAG_NONE = 0x0,105DML_TENSOR_FLAG_OWNED_BY_DML = 0x1,106};107108DEFINE_ENUM_FLAG_OPERATORS(DML_TENSOR_FLAGS)109110struct DML_BUFFER_TENSOR_DESC111{112DML_TENSOR_DATA_TYPE DataType;113DML_TENSOR_FLAGS Flags;114UINT DimensionCount;115_Field_size_(DimensionCount) const UINT* Sizes;116_Field_size_opt_(DimensionCount) const UINT* Strides;117UINT64 TotalTensorSizeInBytes;118UINT GuaranteedBaseOffsetAlignment;119};120121struct DML_TENSOR_DESC122{123DML_TENSOR_TYPE Type;124_Field_size_(_Inexpressible_("Dependent on tensor type")) const void* Desc;125};126127128// ===================================================================================================================129// Operator types130// ===================================================================================================================131132enum DML_OPERATOR_TYPE133{134DML_OPERATOR_INVALID,135136DML_OPERATOR_ELEMENT_WISE_IDENTITY,137DML_OPERATOR_ELEMENT_WISE_ABS,138DML_OPERATOR_ELEMENT_WISE_ACOS,139DML_OPERATOR_ELEMENT_WISE_ADD,140DML_OPERATOR_ELEMENT_WISE_ASIN,141DML_OPERATOR_ELEMENT_WISE_ATAN,142DML_OPERATOR_ELEMENT_WISE_CEIL,143DML_OPERATOR_ELEMENT_WISE_CLIP,144DML_OPERATOR_ELEMENT_WISE_COS,145DML_OPERATOR_ELEMENT_WISE_DIVIDE,146DML_OPERATOR_ELEMENT_WISE_EXP,147DML_OPERATOR_ELEMENT_WISE_FLOOR,148DML_OPERATOR_ELEMENT_WISE_LOG,149DML_OPERATOR_ELEMENT_WISE_LOGICAL_AND,150DML_OPERATOR_ELEMENT_WISE_LOGICAL_EQUALS,151DML_OPERATOR_ELEMENT_WISE_LOGICAL_GREATER_THAN,152DML_OPERATOR_ELEMENT_WISE_LOGICAL_LESS_THAN,153DML_OPERATOR_ELEMENT_WISE_LOGICAL_NOT,154DML_OPERATOR_ELEMENT_WISE_LOGICAL_OR,155DML_OPERATOR_ELEMENT_WISE_LOGICAL_XOR,156DML_OPERATOR_ELEMENT_WISE_MAX,157DML_OPERATOR_ELEMENT_WISE_MEAN,158DML_OPERATOR_ELEMENT_WISE_MIN,159DML_OPERATOR_ELEMENT_WISE_MULTIPLY,160DML_OPERATOR_ELEMENT_WISE_POW,161DML_OPERATOR_ELEMENT_WISE_CONSTANT_POW,162DML_OPERATOR_ELEMENT_WISE_RECIP,163DML_OPERATOR_ELEMENT_WISE_SIN,164DML_OPERATOR_ELEMENT_WISE_SQRT,165DML_OPERATOR_ELEMENT_WISE_SUBTRACT,166DML_OPERATOR_ELEMENT_WISE_TAN,167DML_OPERATOR_ELEMENT_WISE_THRESHOLD,168DML_OPERATOR_ELEMENT_WISE_QUANTIZE_LINEAR,169DML_OPERATOR_ELEMENT_WISE_DEQUANTIZE_LINEAR,170DML_OPERATOR_ACTIVATION_ELU,171DML_OPERATOR_ACTIVATION_HARDMAX,172DML_OPERATOR_ACTIVATION_HARD_SIGMOID,173DML_OPERATOR_ACTIVATION_IDENTITY,174DML_OPERATOR_ACTIVATION_LEAKY_RELU,175DML_OPERATOR_ACTIVATION_LINEAR,176DML_OPERATOR_ACTIVATION_LOG_SOFTMAX,177DML_OPERATOR_ACTIVATION_PARAMETERIZED_RELU,178DML_OPERATOR_ACTIVATION_PARAMETRIC_SOFTPLUS,179DML_OPERATOR_ACTIVATION_RELU,180DML_OPERATOR_ACTIVATION_SCALED_ELU,181DML_OPERATOR_ACTIVATION_SCALED_TANH,182DML_OPERATOR_ACTIVATION_SIGMOID,183DML_OPERATOR_ACTIVATION_SOFTMAX,184DML_OPERATOR_ACTIVATION_SOFTPLUS,185DML_OPERATOR_ACTIVATION_SOFTSIGN,186DML_OPERATOR_ACTIVATION_TANH,187DML_OPERATOR_ACTIVATION_THRESHOLDED_RELU,188DML_OPERATOR_CONVOLUTION,189DML_OPERATOR_GEMM,190DML_OPERATOR_REDUCE,191DML_OPERATOR_AVERAGE_POOLING,192DML_OPERATOR_LP_POOLING,193DML_OPERATOR_MAX_POOLING,194DML_OPERATOR_ROI_POOLING,195DML_OPERATOR_SLICE,196DML_OPERATOR_CAST,197DML_OPERATOR_SPLIT,198DML_OPERATOR_JOIN,199DML_OPERATOR_PADDING,200DML_OPERATOR_VALUE_SCALE_2D,201DML_OPERATOR_UPSAMPLE_2D,202DML_OPERATOR_GATHER,203DML_OPERATOR_SPACE_TO_DEPTH,204DML_OPERATOR_DEPTH_TO_SPACE,205DML_OPERATOR_TILE,206DML_OPERATOR_TOP_K,207DML_OPERATOR_BATCH_NORMALIZATION,208DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION,209DML_OPERATOR_LOCAL_RESPONSE_NORMALIZATION,210DML_OPERATOR_LP_NORMALIZATION,211DML_OPERATOR_RNN,212DML_OPERATOR_LSTM,213DML_OPERATOR_GRU,214215#if DML_TARGET_VERSION >= 0x2000216DML_OPERATOR_ELEMENT_WISE_SIGN,217DML_OPERATOR_ELEMENT_WISE_IS_NAN,218DML_OPERATOR_ELEMENT_WISE_ERF,219DML_OPERATOR_ELEMENT_WISE_SINH,220DML_OPERATOR_ELEMENT_WISE_COSH,221DML_OPERATOR_ELEMENT_WISE_TANH,222DML_OPERATOR_ELEMENT_WISE_ASINH,223DML_OPERATOR_ELEMENT_WISE_ACOSH,224DML_OPERATOR_ELEMENT_WISE_ATANH,225DML_OPERATOR_ELEMENT_WISE_IF,226DML_OPERATOR_ELEMENT_WISE_ADD1,227DML_OPERATOR_ACTIVATION_SHRINK,228DML_OPERATOR_MAX_POOLING1,229DML_OPERATOR_MAX_UNPOOLING,230DML_OPERATOR_DIAGONAL_MATRIX,231DML_OPERATOR_SCATTER_ELEMENTS,232DML_OPERATOR_SCATTER = DML_OPERATOR_SCATTER_ELEMENTS, // Alias name for backwards compatibility.233DML_OPERATOR_ONE_HOT,234DML_OPERATOR_RESAMPLE,235#endif // DML_TARGET_VERSION >= 0x2000236237#if DML_TARGET_VERSION >= 0x2100238DML_OPERATOR_ELEMENT_WISE_BIT_SHIFT_LEFT,239DML_OPERATOR_ELEMENT_WISE_BIT_SHIFT_RIGHT,240DML_OPERATOR_ELEMENT_WISE_ROUND,241DML_OPERATOR_ELEMENT_WISE_IS_INFINITY,242DML_OPERATOR_ELEMENT_WISE_MODULUS_TRUNCATE,243DML_OPERATOR_ELEMENT_WISE_MODULUS_FLOOR,244DML_OPERATOR_FILL_VALUE_CONSTANT,245DML_OPERATOR_FILL_VALUE_SEQUENCE,246DML_OPERATOR_CUMULATIVE_SUMMATION,247DML_OPERATOR_REVERSE_SUBSEQUENCES,248DML_OPERATOR_GATHER_ELEMENTS,249DML_OPERATOR_GATHER_ND,250DML_OPERATOR_SCATTER_ND,251DML_OPERATOR_MAX_POOLING2,252DML_OPERATOR_SLICE1,253DML_OPERATOR_TOP_K1,254DML_OPERATOR_DEPTH_TO_SPACE1,255DML_OPERATOR_SPACE_TO_DEPTH1,256DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION1,257DML_OPERATOR_RESAMPLE1,258DML_OPERATOR_MATRIX_MULTIPLY_INTEGER,259DML_OPERATOR_QUANTIZED_LINEAR_MATRIX_MULTIPLY,260DML_OPERATOR_CONVOLUTION_INTEGER,261DML_OPERATOR_QUANTIZED_LINEAR_CONVOLUTION,262#endif // DML_TARGET_VERSION >= 0x2100263264#if DML_TARGET_VERSION >= 0x3000265DML_OPERATOR_ELEMENT_WISE_BIT_AND,266DML_OPERATOR_ELEMENT_WISE_BIT_OR,267DML_OPERATOR_ELEMENT_WISE_BIT_XOR,268DML_OPERATOR_ELEMENT_WISE_BIT_NOT,269DML_OPERATOR_ELEMENT_WISE_BIT_COUNT,270DML_OPERATOR_ELEMENT_WISE_LOGICAL_GREATER_THAN_OR_EQUAL,271DML_OPERATOR_ELEMENT_WISE_LOGICAL_LESS_THAN_OR_EQUAL,272DML_OPERATOR_ACTIVATION_CELU,273DML_OPERATOR_ACTIVATION_RELU_GRAD,274DML_OPERATOR_AVERAGE_POOLING_GRAD,275DML_OPERATOR_MAX_POOLING_GRAD,276DML_OPERATOR_RANDOM_GENERATOR,277DML_OPERATOR_NONZERO_COORDINATES,278DML_OPERATOR_RESAMPLE_GRAD,279DML_OPERATOR_SLICE_GRAD,280DML_OPERATOR_ADAM_OPTIMIZER,281DML_OPERATOR_ARGMIN,282DML_OPERATOR_ARGMAX,283DML_OPERATOR_ROI_ALIGN,284DML_OPERATOR_GATHER_ND1,285#endif // DML_TARGET_VERSION >= 0x3000286287#if DML_TARGET_VERSION >= 0x3100288DML_OPERATOR_ELEMENT_WISE_ATAN_YX,289DML_OPERATOR_ELEMENT_WISE_CLIP_GRAD,290DML_OPERATOR_ELEMENT_WISE_DIFFERENCE_SQUARE,291DML_OPERATOR_LOCAL_RESPONSE_NORMALIZATION_GRAD,292DML_OPERATOR_CUMULATIVE_PRODUCT,293DML_OPERATOR_BATCH_NORMALIZATION_GRAD,294#endif // DML_TARGET_VERSION >= 0x3100295296#if DML_TARGET_VERSION >= 0x4000297DML_OPERATOR_ELEMENT_WISE_QUANTIZED_LINEAR_ADD,298DML_OPERATOR_DYNAMIC_QUANTIZE_LINEAR,299DML_OPERATOR_ROI_ALIGN1,300#endif // DML_TARGET_VERSION >= 0x4000301302#if DML_TARGET_VERSION >= 0x4100303DML_OPERATOR_ROI_ALIGN_GRAD,304DML_OPERATOR_BATCH_NORMALIZATION_TRAINING,305DML_OPERATOR_BATCH_NORMALIZATION_TRAINING_GRAD,306#endif // DML_TARGET_VERSION >= 0x4100307308#if DML_TARGET_VERSION >= 0x5000309DML_OPERATOR_ELEMENT_WISE_CLIP1,310DML_OPERATOR_ELEMENT_WISE_CLIP_GRAD1,311DML_OPERATOR_PADDING1,312DML_OPERATOR_ELEMENT_WISE_NEGATE,313#endif // DML_TARGET_VERSION >= 0x5000314315#if DML_TARGET_VERSION >= 0x5100316DML_OPERATOR_ACTIVATION_GELU,317DML_OPERATOR_ACTIVATION_SOFTMAX1,318DML_OPERATOR_ACTIVATION_LOG_SOFTMAX1,319DML_OPERATOR_ACTIVATION_HARDMAX1,320DML_OPERATOR_RESAMPLE2,321DML_OPERATOR_RESAMPLE_GRAD1,322DML_OPERATOR_DIAGONAL_MATRIX1,323#endif // DML_TARGET_VERSION >= 0x5100324325#if DML_TARGET_VERSION >= 0x6100326DML_OPERATOR_MULTIHEAD_ATTENTION,327#endif // DML_TARGET_VERSION >= 0x6100328329#if DML_TARGET_VERSION >= 0x6200330DML_OPERATOR_LP_POOLING1,331DML_OPERATOR_AVERAGE_POOLING1,332DML_OPERATOR_ACTIVATION_SWISH,333DML_OPERATOR_ACTIVATION_HARD_SWISH,334DML_OPERATOR_QUANTIZED_LINEAR_AVERAGE_POOLING,335DML_OPERATOR_MATRIX_MULTIPLY_INTEGER_TO_FLOAT,336#endif // DML_TARGET_VERSION >= 0x6200337338#if DML_TARGET_VERSION >= 0x6300339DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION2,340DML_OPERATOR_MULTIHEAD_ATTENTION1,341DML_OPERATOR_QUANTIZE,342DML_OPERATOR_DEQUANTIZE,343#endif // DML_TARGET_VERSION >= 0x6300344345#if DML_TARGET_VERSION >= 0x6400346DML_OPERATOR_RESAMPLE3,347DML_OPERATOR_FOLD,348DML_OPERATOR_UNFOLD,349#endif // DML_TARGET_VERSION >= 0x6400350};351352// ===================================================================================================================353// Operator enumerations and structures354// ===================================================================================================================355356enum DML_REDUCE_FUNCTION357{358DML_REDUCE_FUNCTION_ARGMAX,359DML_REDUCE_FUNCTION_ARGMIN,360DML_REDUCE_FUNCTION_AVERAGE,361DML_REDUCE_FUNCTION_L1,362DML_REDUCE_FUNCTION_L2,363DML_REDUCE_FUNCTION_LOG_SUM,364DML_REDUCE_FUNCTION_LOG_SUM_EXP,365DML_REDUCE_FUNCTION_MAX,366DML_REDUCE_FUNCTION_MIN,367DML_REDUCE_FUNCTION_MULTIPLY,368DML_REDUCE_FUNCTION_SUM,369DML_REDUCE_FUNCTION_SUM_SQUARE,370};371372enum DML_MATRIX_TRANSFORM373{374DML_MATRIX_TRANSFORM_NONE,375DML_MATRIX_TRANSFORM_TRANSPOSE,376};377378enum DML_CONVOLUTION_MODE379{380DML_CONVOLUTION_MODE_CONVOLUTION,381DML_CONVOLUTION_MODE_CROSS_CORRELATION,382};383384enum DML_CONVOLUTION_DIRECTION385{386DML_CONVOLUTION_DIRECTION_FORWARD,387DML_CONVOLUTION_DIRECTION_BACKWARD,388};389390enum DML_PADDING_MODE391{392DML_PADDING_MODE_CONSTANT,393DML_PADDING_MODE_EDGE,394DML_PADDING_MODE_REFLECTION,395396#if DML_TARGET_VERSION >= 0x3000397DML_PADDING_MODE_SYMMETRIC,398#endif399400#if DML_TARGET_VERSION >= 0x6400401DML_PADDING_MODE_WRAP,402#endif403};404405enum DML_INTERPOLATION_MODE406{407DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR,408DML_INTERPOLATION_MODE_LINEAR,409};410411struct DML_SCALE_BIAS412{413FLOAT Scale;414FLOAT Bias;415};416417struct DML_SIZE_2D418{419UINT Width;420UINT Height;421};422423enum DML_RECURRENT_NETWORK_DIRECTION424{425DML_RECURRENT_NETWORK_DIRECTION_FORWARD,426DML_RECURRENT_NETWORK_DIRECTION_BACKWARD,427DML_RECURRENT_NETWORK_DIRECTION_BIDIRECTIONAL,428};429430#if DML_TARGET_VERSION >= 0x2100431432enum DML_ROUNDING_MODE433{434DML_ROUNDING_MODE_HALVES_TO_NEAREST_EVEN,435DML_ROUNDING_MODE_TOWARD_ZERO,436DML_ROUNDING_MODE_TOWARD_INFINITY,437};438439enum DML_IS_INFINITY_MODE440{441DML_IS_INFINITY_MODE_EITHER = 0,442DML_IS_INFINITY_MODE_POSITIVE = 1,443DML_IS_INFINITY_MODE_NEGATIVE = 2,444};445446enum DML_AXIS_DIRECTION447{448DML_AXIS_DIRECTION_INCREASING = 0,449DML_AXIS_DIRECTION_DECREASING = 1,450};451452enum DML_DEPTH_SPACE_ORDER453{454DML_DEPTH_SPACE_ORDER_DEPTH_COLUMN_ROW,455DML_DEPTH_SPACE_ORDER_COLUMN_ROW_DEPTH,456};457458union DML_SCALAR_UNION459{460BYTE Bytes[8];461INT8 Int8;462UINT8 UInt8;463INT16 Int16;464UINT16 UInt16;465INT32 Int32;466UINT32 UInt32;467INT64 Int64;468UINT64 UInt64;469FLOAT Float32;470DOUBLE Float64;471};472473#endif // DML_TARGET_VERSION >= 0x2100474475#if DML_TARGET_VERSION >= 0x3000476477enum DML_RANDOM_GENERATOR_TYPE478{479DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10480};481482#endif // DML_TARGET_VERSION >= 0x3000483484#if DML_TARGET_VERSION >= 0x6100485486enum DML_MULTIHEAD_ATTENTION_MASK_TYPE487{488DML_MULTIHEAD_ATTENTION_MASK_TYPE_NONE,489DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_SEQUENCE_LENGTH,490DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_SEQUENCE_END_START,491DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_QUERY_SEQUENCE_LENGTH_START_END,492DML_MULTIHEAD_ATTENTION_MASK_TYPE_BOOLEAN,493};494495#endif // DML_TARGET_VERSION >= 0x6100496497#if DML_TARGET_VERSION >= 0x6300498499enum DML_QUANTIZATION_TYPE500{501DML_QUANTIZATION_TYPE_NONE,502DML_QUANTIZATION_TYPE_SCALE,503DML_QUANTIZATION_TYPE_SCALE_ZERO_POINT,504};505506#endif // DML_TARGET_VERSION >= 0x6300507508// ===================================================================================================================509// Operator descriptions510// ===================================================================================================================511512struct DML_OPERATOR_DESC513{514DML_OPERATOR_TYPE Type;515_Field_size_(_Inexpressible_("Dependent on operator type")) const void* Desc;516};517518struct DML_ELEMENT_WISE_IDENTITY_OPERATOR_DESC519{520const DML_TENSOR_DESC* InputTensor;521const DML_TENSOR_DESC* OutputTensor;522_Maybenull_ const DML_SCALE_BIAS* ScaleBias;523};524525struct DML_ELEMENT_WISE_ABS_OPERATOR_DESC526{527const DML_TENSOR_DESC* InputTensor;528const DML_TENSOR_DESC* OutputTensor;529_Maybenull_ const DML_SCALE_BIAS* ScaleBias;530};531532struct DML_ELEMENT_WISE_ACOS_OPERATOR_DESC533{534const DML_TENSOR_DESC* InputTensor;535const DML_TENSOR_DESC* OutputTensor;536_Maybenull_ const DML_SCALE_BIAS* ScaleBias;537};538539struct DML_ELEMENT_WISE_ADD_OPERATOR_DESC540{541const DML_TENSOR_DESC* ATensor;542const DML_TENSOR_DESC* BTensor;543const DML_TENSOR_DESC* OutputTensor;544};545546struct DML_ELEMENT_WISE_ADD1_OPERATOR_DESC547{548const DML_TENSOR_DESC* ATensor;549const DML_TENSOR_DESC* BTensor;550const DML_TENSOR_DESC* OutputTensor;551_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;552};553554struct DML_ELEMENT_WISE_ASIN_OPERATOR_DESC555{556const DML_TENSOR_DESC* InputTensor;557const DML_TENSOR_DESC* OutputTensor;558_Maybenull_ const DML_SCALE_BIAS* ScaleBias;559};560561struct DML_ELEMENT_WISE_ATAN_OPERATOR_DESC562{563const DML_TENSOR_DESC* InputTensor;564const DML_TENSOR_DESC* OutputTensor;565_Maybenull_ const DML_SCALE_BIAS* ScaleBias;566};567568struct DML_ELEMENT_WISE_CEIL_OPERATOR_DESC569{570const DML_TENSOR_DESC* InputTensor;571const DML_TENSOR_DESC* OutputTensor;572_Maybenull_ const DML_SCALE_BIAS* ScaleBias;573};574575struct DML_ELEMENT_WISE_CLIP_OPERATOR_DESC576{577const DML_TENSOR_DESC* InputTensor;578const DML_TENSOR_DESC* OutputTensor;579_Maybenull_ const DML_SCALE_BIAS* ScaleBias;580FLOAT Min;581FLOAT Max;582};583584struct DML_ELEMENT_WISE_COS_OPERATOR_DESC585{586const DML_TENSOR_DESC* InputTensor;587const DML_TENSOR_DESC* OutputTensor;588_Maybenull_ const DML_SCALE_BIAS* ScaleBias;589};590591struct DML_ELEMENT_WISE_DIVIDE_OPERATOR_DESC592{593const DML_TENSOR_DESC* ATensor;594const DML_TENSOR_DESC* BTensor;595const DML_TENSOR_DESC* OutputTensor;596};597598struct DML_ELEMENT_WISE_EXP_OPERATOR_DESC599{600const DML_TENSOR_DESC* InputTensor;601const DML_TENSOR_DESC* OutputTensor;602_Maybenull_ const DML_SCALE_BIAS* ScaleBias;603};604605struct DML_ELEMENT_WISE_FLOOR_OPERATOR_DESC606{607const DML_TENSOR_DESC* InputTensor;608const DML_TENSOR_DESC* OutputTensor;609_Maybenull_ const DML_SCALE_BIAS* ScaleBias;610};611612struct DML_ELEMENT_WISE_LOG_OPERATOR_DESC613{614const DML_TENSOR_DESC* InputTensor;615const DML_TENSOR_DESC* OutputTensor;616_Maybenull_ const DML_SCALE_BIAS* ScaleBias;617};618619struct DML_ELEMENT_WISE_LOGICAL_AND_OPERATOR_DESC620{621const DML_TENSOR_DESC* ATensor;622const DML_TENSOR_DESC* BTensor;623const DML_TENSOR_DESC* OutputTensor;624};625626struct DML_ELEMENT_WISE_LOGICAL_EQUALS_OPERATOR_DESC627{628const DML_TENSOR_DESC* ATensor;629const DML_TENSOR_DESC* BTensor;630const DML_TENSOR_DESC* OutputTensor;631};632633struct DML_ELEMENT_WISE_LOGICAL_GREATER_THAN_OPERATOR_DESC634{635const DML_TENSOR_DESC* ATensor;636const DML_TENSOR_DESC* BTensor;637const DML_TENSOR_DESC* OutputTensor;638};639640struct DML_ELEMENT_WISE_LOGICAL_LESS_THAN_OPERATOR_DESC641{642const DML_TENSOR_DESC* ATensor;643const DML_TENSOR_DESC* BTensor;644const DML_TENSOR_DESC* OutputTensor;645};646647struct DML_ELEMENT_WISE_LOGICAL_NOT_OPERATOR_DESC648{649const DML_TENSOR_DESC* InputTensor;650const DML_TENSOR_DESC* OutputTensor;651};652653struct DML_ELEMENT_WISE_LOGICAL_OR_OPERATOR_DESC654{655const DML_TENSOR_DESC* ATensor;656const DML_TENSOR_DESC* BTensor;657const DML_TENSOR_DESC* OutputTensor;658};659660struct DML_ELEMENT_WISE_LOGICAL_XOR_OPERATOR_DESC661{662const DML_TENSOR_DESC* ATensor;663const DML_TENSOR_DESC* BTensor;664const DML_TENSOR_DESC* OutputTensor;665};666667struct DML_ELEMENT_WISE_MAX_OPERATOR_DESC668{669const DML_TENSOR_DESC* ATensor;670const DML_TENSOR_DESC* BTensor;671const DML_TENSOR_DESC* OutputTensor;672};673674struct DML_ELEMENT_WISE_MEAN_OPERATOR_DESC675{676const DML_TENSOR_DESC* ATensor;677const DML_TENSOR_DESC* BTensor;678const DML_TENSOR_DESC* OutputTensor;679};680681struct DML_ELEMENT_WISE_MIN_OPERATOR_DESC682{683const DML_TENSOR_DESC* ATensor;684const DML_TENSOR_DESC* BTensor;685const DML_TENSOR_DESC* OutputTensor;686};687688struct DML_ELEMENT_WISE_MULTIPLY_OPERATOR_DESC689{690const DML_TENSOR_DESC* ATensor;691const DML_TENSOR_DESC* BTensor;692const DML_TENSOR_DESC* OutputTensor;693};694695struct DML_ELEMENT_WISE_POW_OPERATOR_DESC696{697const DML_TENSOR_DESC* InputTensor;698const DML_TENSOR_DESC* ExponentTensor;699const DML_TENSOR_DESC* OutputTensor;700_Maybenull_ const DML_SCALE_BIAS* ScaleBias;701};702703struct DML_ELEMENT_WISE_CONSTANT_POW_OPERATOR_DESC704{705const DML_TENSOR_DESC* InputTensor;706const DML_TENSOR_DESC* OutputTensor;707_Maybenull_ const DML_SCALE_BIAS* ScaleBias;708FLOAT Exponent;709};710711struct DML_ELEMENT_WISE_RECIP_OPERATOR_DESC712{713const DML_TENSOR_DESC* InputTensor;714const DML_TENSOR_DESC* OutputTensor;715_Maybenull_ const DML_SCALE_BIAS* ScaleBias;716};717718struct DML_ELEMENT_WISE_SIN_OPERATOR_DESC719{720const DML_TENSOR_DESC* InputTensor;721const DML_TENSOR_DESC* OutputTensor;722_Maybenull_ const DML_SCALE_BIAS* ScaleBias;723};724725struct DML_ELEMENT_WISE_SQRT_OPERATOR_DESC726{727const DML_TENSOR_DESC* InputTensor;728const DML_TENSOR_DESC* OutputTensor;729_Maybenull_ const DML_SCALE_BIAS* ScaleBias;730};731732struct DML_ELEMENT_WISE_SUBTRACT_OPERATOR_DESC733{734const DML_TENSOR_DESC* ATensor;735const DML_TENSOR_DESC* BTensor;736const DML_TENSOR_DESC* OutputTensor;737};738739struct DML_ELEMENT_WISE_TAN_OPERATOR_DESC740{741const DML_TENSOR_DESC* InputTensor;742const DML_TENSOR_DESC* OutputTensor;743_Maybenull_ const DML_SCALE_BIAS* ScaleBias;744};745746struct DML_ELEMENT_WISE_THRESHOLD_OPERATOR_DESC747{748const DML_TENSOR_DESC* InputTensor;749const DML_TENSOR_DESC* OutputTensor;750_Maybenull_ const DML_SCALE_BIAS* ScaleBias;751FLOAT Min;752};753754struct DML_ELEMENT_WISE_QUANTIZE_LINEAR_OPERATOR_DESC755{756const DML_TENSOR_DESC* InputTensor;757const DML_TENSOR_DESC* ScaleTensor;758_Maybenull_ const DML_TENSOR_DESC* ZeroPointTensor;759const DML_TENSOR_DESC* OutputTensor;760};761762struct DML_ELEMENT_WISE_DEQUANTIZE_LINEAR_OPERATOR_DESC763{764const DML_TENSOR_DESC* InputTensor;765const DML_TENSOR_DESC* ScaleTensor;766_Maybenull_ const DML_TENSOR_DESC* ZeroPointTensor;767const DML_TENSOR_DESC* OutputTensor;768};769770struct DML_ACTIVATION_ELU_OPERATOR_DESC771{772const DML_TENSOR_DESC* InputTensor;773const DML_TENSOR_DESC* OutputTensor;774FLOAT Alpha;775};776777struct DML_ACTIVATION_HARDMAX_OPERATOR_DESC778{779const DML_TENSOR_DESC* InputTensor;780const DML_TENSOR_DESC* OutputTensor;781};782783struct DML_ACTIVATION_HARD_SIGMOID_OPERATOR_DESC784{785const DML_TENSOR_DESC* InputTensor;786const DML_TENSOR_DESC* OutputTensor;787FLOAT Alpha;788FLOAT Beta;789};790791struct DML_ACTIVATION_IDENTITY_OPERATOR_DESC792{793const DML_TENSOR_DESC* InputTensor;794const DML_TENSOR_DESC* OutputTensor;795};796797struct DML_ACTIVATION_LEAKY_RELU_OPERATOR_DESC798{799const DML_TENSOR_DESC* InputTensor;800const DML_TENSOR_DESC* OutputTensor;801FLOAT Alpha;802};803804struct DML_ACTIVATION_LINEAR_OPERATOR_DESC805{806const DML_TENSOR_DESC* InputTensor;807const DML_TENSOR_DESC* OutputTensor;808FLOAT Alpha;809FLOAT Beta;810};811812struct DML_ACTIVATION_LOG_SOFTMAX_OPERATOR_DESC813{814const DML_TENSOR_DESC* InputTensor;815const DML_TENSOR_DESC* OutputTensor;816};817818struct DML_ACTIVATION_PARAMETERIZED_RELU_OPERATOR_DESC819{820const DML_TENSOR_DESC* InputTensor;821const DML_TENSOR_DESC* SlopeTensor;822const DML_TENSOR_DESC* OutputTensor;823};824825struct DML_ACTIVATION_PARAMETRIC_SOFTPLUS_OPERATOR_DESC826{827const DML_TENSOR_DESC* InputTensor;828const DML_TENSOR_DESC* OutputTensor;829FLOAT Alpha;830FLOAT Beta;831};832833struct DML_ACTIVATION_RELU_OPERATOR_DESC834{835const DML_TENSOR_DESC* InputTensor;836const DML_TENSOR_DESC* OutputTensor;837};838839struct DML_ACTIVATION_SCALED_ELU_OPERATOR_DESC840{841const DML_TENSOR_DESC* InputTensor;842const DML_TENSOR_DESC* OutputTensor;843FLOAT Alpha;844FLOAT Gamma;845};846847struct DML_ACTIVATION_SCALED_TANH_OPERATOR_DESC848{849const DML_TENSOR_DESC* InputTensor;850const DML_TENSOR_DESC* OutputTensor;851FLOAT Alpha;852FLOAT Beta;853};854855struct DML_ACTIVATION_SIGMOID_OPERATOR_DESC856{857const DML_TENSOR_DESC* InputTensor;858const DML_TENSOR_DESC* OutputTensor;859};860861struct DML_ACTIVATION_SOFTMAX_OPERATOR_DESC862{863const DML_TENSOR_DESC* InputTensor;864const DML_TENSOR_DESC* OutputTensor;865};866867struct DML_ACTIVATION_SOFTPLUS_OPERATOR_DESC868{869const DML_TENSOR_DESC* InputTensor;870const DML_TENSOR_DESC* OutputTensor;871FLOAT Steepness;872};873874struct DML_ACTIVATION_SOFTSIGN_OPERATOR_DESC875{876const DML_TENSOR_DESC* InputTensor;877const DML_TENSOR_DESC* OutputTensor;878};879880struct DML_ACTIVATION_TANH_OPERATOR_DESC881{882const DML_TENSOR_DESC* InputTensor;883const DML_TENSOR_DESC* OutputTensor;884};885886struct DML_ACTIVATION_THRESHOLDED_RELU_OPERATOR_DESC887{888const DML_TENSOR_DESC* InputTensor;889const DML_TENSOR_DESC* OutputTensor;890FLOAT Alpha;891};892893struct DML_CONVOLUTION_OPERATOR_DESC894{895const DML_TENSOR_DESC* InputTensor;896const DML_TENSOR_DESC* FilterTensor;897_Maybenull_ const DML_TENSOR_DESC* BiasTensor;898const DML_TENSOR_DESC* OutputTensor;899DML_CONVOLUTION_MODE Mode;900DML_CONVOLUTION_DIRECTION Direction;901UINT DimensionCount;902_Field_size_(DimensionCount) const UINT* Strides;903_Field_size_(DimensionCount) const UINT* Dilations;904_Field_size_(DimensionCount) const UINT* StartPadding;905_Field_size_(DimensionCount) const UINT* EndPadding;906_Field_size_(DimensionCount) const UINT* OutputPadding;907UINT GroupCount;908_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;909};910911struct DML_GEMM_OPERATOR_DESC912{913const DML_TENSOR_DESC* ATensor;914const DML_TENSOR_DESC* BTensor;915_Maybenull_ const DML_TENSOR_DESC* CTensor;916const DML_TENSOR_DESC* OutputTensor;917DML_MATRIX_TRANSFORM TransA;918DML_MATRIX_TRANSFORM TransB;919FLOAT Alpha;920FLOAT Beta;921_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;922};923924struct DML_REDUCE_OPERATOR_DESC925{926DML_REDUCE_FUNCTION Function;927const DML_TENSOR_DESC* InputTensor;928const DML_TENSOR_DESC* OutputTensor;929UINT AxisCount;930_Field_size_(AxisCount) const UINT* Axes;931};932933struct DML_AVERAGE_POOLING_OPERATOR_DESC934{935const DML_TENSOR_DESC* InputTensor;936const DML_TENSOR_DESC* OutputTensor;937UINT DimensionCount;938_Field_size_(DimensionCount) const UINT* Strides;939_Field_size_(DimensionCount) const UINT* WindowSize;940_Field_size_(DimensionCount) const UINT* StartPadding;941_Field_size_(DimensionCount) const UINT* EndPadding;942BOOL IncludePadding;943};944945struct DML_LP_POOLING_OPERATOR_DESC946{947const DML_TENSOR_DESC* InputTensor;948const DML_TENSOR_DESC* OutputTensor;949UINT DimensionCount;950_Field_size_(DimensionCount) const UINT* Strides;951_Field_size_(DimensionCount) const UINT* WindowSize;952_Field_size_(DimensionCount) const UINT* StartPadding;953_Field_size_(DimensionCount) const UINT* EndPadding;954UINT P;955};956957struct DML_MAX_POOLING_OPERATOR_DESC958{959const DML_TENSOR_DESC* InputTensor;960const DML_TENSOR_DESC* OutputTensor;961UINT DimensionCount;962_Field_size_(DimensionCount) const UINT* Strides;963_Field_size_(DimensionCount) const UINT* WindowSize;964_Field_size_(DimensionCount) const UINT* StartPadding;965_Field_size_(DimensionCount) const UINT* EndPadding;966};967968struct DML_ROI_POOLING_OPERATOR_DESC969{970const DML_TENSOR_DESC* InputTensor;971const DML_TENSOR_DESC* ROITensor;972const DML_TENSOR_DESC* OutputTensor;973FLOAT SpatialScale;974DML_SIZE_2D PooledSize;975};976977struct DML_SLICE_OPERATOR_DESC978{979const DML_TENSOR_DESC* InputTensor;980const DML_TENSOR_DESC* OutputTensor;981UINT DimensionCount;982_Field_size_(DimensionCount) const UINT* Offsets;983_Field_size_(DimensionCount) const UINT* Sizes;984_Field_size_(DimensionCount) const UINT* Strides;985};986987struct DML_CAST_OPERATOR_DESC988{989const DML_TENSOR_DESC* InputTensor;990const DML_TENSOR_DESC* OutputTensor;991};992993struct DML_SPLIT_OPERATOR_DESC994{995const DML_TENSOR_DESC* InputTensor;996UINT OutputCount;997_Field_size_(OutputCount) const DML_TENSOR_DESC* OutputTensors;998UINT Axis;999};10001001struct DML_JOIN_OPERATOR_DESC1002{1003UINT InputCount;1004_Field_size_(InputCount) const DML_TENSOR_DESC* InputTensors;1005const DML_TENSOR_DESC* OutputTensor;1006UINT Axis;1007};10081009struct DML_PADDING_OPERATOR_DESC1010{1011const DML_TENSOR_DESC* InputTensor;1012const DML_TENSOR_DESC* OutputTensor;1013DML_PADDING_MODE PaddingMode;1014FLOAT PaddingValue;1015UINT DimensionCount;1016_Field_size_(DimensionCount) const UINT* StartPadding;1017_Field_size_(DimensionCount) const UINT* EndPadding;1018};10191020struct DML_VALUE_SCALE_2D_OPERATOR_DESC1021{1022const DML_TENSOR_DESC* InputTensor;1023const DML_TENSOR_DESC* OutputTensor;1024FLOAT Scale;1025UINT ChannelCount;1026_Field_size_(ChannelCount) const FLOAT* Bias;1027};10281029struct DML_UPSAMPLE_2D_OPERATOR_DESC1030{1031const DML_TENSOR_DESC* InputTensor;1032const DML_TENSOR_DESC* OutputTensor;1033DML_SIZE_2D ScaleSize;1034DML_INTERPOLATION_MODE InterpolationMode;1035};10361037struct DML_GATHER_OPERATOR_DESC1038{1039const DML_TENSOR_DESC* InputTensor;1040const DML_TENSOR_DESC* IndicesTensor;1041const DML_TENSOR_DESC* OutputTensor;1042UINT Axis;1043UINT IndexDimensions;1044};10451046struct DML_SPACE_TO_DEPTH_OPERATOR_DESC1047{1048const DML_TENSOR_DESC* InputTensor;1049const DML_TENSOR_DESC* OutputTensor;1050UINT BlockSize;1051};10521053struct DML_DEPTH_TO_SPACE_OPERATOR_DESC1054{1055const DML_TENSOR_DESC* InputTensor;1056const DML_TENSOR_DESC* OutputTensor;1057UINT BlockSize;1058};10591060struct DML_TILE_OPERATOR_DESC1061{1062const DML_TENSOR_DESC* InputTensor;1063const DML_TENSOR_DESC* OutputTensor;1064UINT RepeatsCount;1065_Field_size_(RepeatsCount) const UINT* Repeats;1066};10671068struct DML_TOP_K_OPERATOR_DESC1069{1070const DML_TENSOR_DESC* InputTensor;1071const DML_TENSOR_DESC* OutputValueTensor;1072const DML_TENSOR_DESC* OutputIndexTensor;1073UINT Axis;1074UINT K;1075};10761077struct DML_BATCH_NORMALIZATION_OPERATOR_DESC1078{1079const DML_TENSOR_DESC* InputTensor;1080const DML_TENSOR_DESC* MeanTensor;1081const DML_TENSOR_DESC* VarianceTensor;1082const DML_TENSOR_DESC* ScaleTensor;1083const DML_TENSOR_DESC* BiasTensor;1084const DML_TENSOR_DESC* OutputTensor;1085BOOL Spatial;1086FLOAT Epsilon;1087_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;1088};10891090struct DML_MEAN_VARIANCE_NORMALIZATION_OPERATOR_DESC1091{1092const DML_TENSOR_DESC* InputTensor;1093_Maybenull_ const DML_TENSOR_DESC* ScaleTensor;1094_Maybenull_ const DML_TENSOR_DESC* BiasTensor;1095const DML_TENSOR_DESC* OutputTensor;1096BOOL CrossChannel;1097BOOL NormalizeVariance;1098FLOAT Epsilon;1099_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;1100};11011102struct DML_LOCAL_RESPONSE_NORMALIZATION_OPERATOR_DESC1103{1104const DML_TENSOR_DESC* InputTensor;1105const DML_TENSOR_DESC* OutputTensor;1106BOOL CrossChannel;1107UINT LocalSize;1108FLOAT Alpha;1109FLOAT Beta;1110FLOAT Bias;1111};11121113struct DML_LP_NORMALIZATION_OPERATOR_DESC1114{1115const DML_TENSOR_DESC* InputTensor;1116const DML_TENSOR_DESC* OutputTensor;1117UINT Axis;1118FLOAT Epsilon;1119UINT P;1120};11211122struct DML_RNN_OPERATOR_DESC1123{1124const DML_TENSOR_DESC* InputTensor;1125const DML_TENSOR_DESC* WeightTensor;1126const DML_TENSOR_DESC* RecurrenceTensor;1127_Maybenull_ const DML_TENSOR_DESC* BiasTensor;1128_Maybenull_ const DML_TENSOR_DESC* HiddenInitTensor;1129_Maybenull_ const DML_TENSOR_DESC* SequenceLengthsTensor;1130_Maybenull_ const DML_TENSOR_DESC* OutputSequenceTensor;1131_Maybenull_ const DML_TENSOR_DESC* OutputSingleTensor;1132UINT ActivationDescCount;1133_Field_size_(ActivationDescCount) const DML_OPERATOR_DESC* ActivationDescs;1134DML_RECURRENT_NETWORK_DIRECTION Direction;1135};11361137struct DML_LSTM_OPERATOR_DESC1138{1139const DML_TENSOR_DESC* InputTensor;1140const DML_TENSOR_DESC* WeightTensor;1141const DML_TENSOR_DESC* RecurrenceTensor;1142_Maybenull_ const DML_TENSOR_DESC* BiasTensor;1143_Maybenull_ const DML_TENSOR_DESC* HiddenInitTensor;1144_Maybenull_ const DML_TENSOR_DESC* CellMemInitTensor;1145_Maybenull_ const DML_TENSOR_DESC* SequenceLengthsTensor;1146_Maybenull_ const DML_TENSOR_DESC* PeepholeTensor;1147_Maybenull_ const DML_TENSOR_DESC* OutputSequenceTensor;1148_Maybenull_ const DML_TENSOR_DESC* OutputSingleTensor;1149_Maybenull_ const DML_TENSOR_DESC* OutputCellSingleTensor;1150UINT ActivationDescCount;1151_Field_size_(ActivationDescCount) const DML_OPERATOR_DESC* ActivationDescs;1152DML_RECURRENT_NETWORK_DIRECTION Direction;1153float ClipThreshold;1154BOOL UseClipThreshold;1155BOOL CoupleInputForget;1156};11571158struct DML_GRU_OPERATOR_DESC1159{1160const DML_TENSOR_DESC* InputTensor;1161const DML_TENSOR_DESC* WeightTensor;1162const DML_TENSOR_DESC* RecurrenceTensor;1163_Maybenull_ const DML_TENSOR_DESC* BiasTensor;1164_Maybenull_ const DML_TENSOR_DESC* HiddenInitTensor;1165_Maybenull_ const DML_TENSOR_DESC* SequenceLengthsTensor;1166_Maybenull_ const DML_TENSOR_DESC* OutputSequenceTensor;1167_Maybenull_ const DML_TENSOR_DESC* OutputSingleTensor;1168UINT ActivationDescCount;1169_Field_size_(ActivationDescCount) const DML_OPERATOR_DESC* ActivationDescs;1170DML_RECURRENT_NETWORK_DIRECTION Direction;1171BOOL LinearBeforeReset;1172};11731174#if DML_TARGET_VERSION >= 0x200011751176struct DML_ELEMENT_WISE_SIGN_OPERATOR_DESC1177{1178const DML_TENSOR_DESC* InputTensor;1179const DML_TENSOR_DESC* OutputTensor;1180};11811182struct DML_ELEMENT_WISE_IS_NAN_OPERATOR_DESC1183{1184const DML_TENSOR_DESC* InputTensor;1185const DML_TENSOR_DESC* OutputTensor;1186};11871188struct DML_ELEMENT_WISE_ERF_OPERATOR_DESC1189{1190const DML_TENSOR_DESC* InputTensor;1191const DML_TENSOR_DESC* OutputTensor;1192_Maybenull_ const DML_SCALE_BIAS* ScaleBias;1193};11941195struct DML_ELEMENT_WISE_SINH_OPERATOR_DESC1196{1197const DML_TENSOR_DESC* InputTensor;1198const DML_TENSOR_DESC* OutputTensor;1199_Maybenull_ const DML_SCALE_BIAS* ScaleBias;1200};12011202struct DML_ELEMENT_WISE_COSH_OPERATOR_DESC1203{1204const DML_TENSOR_DESC* InputTensor;1205const DML_TENSOR_DESC* OutputTensor;1206_Maybenull_ const DML_SCALE_BIAS* ScaleBias;1207};12081209struct DML_ELEMENT_WISE_TANH_OPERATOR_DESC1210{1211const DML_TENSOR_DESC* InputTensor;1212const DML_TENSOR_DESC* OutputTensor;1213_Maybenull_ const DML_SCALE_BIAS* ScaleBias;1214};12151216struct DML_ELEMENT_WISE_ASINH_OPERATOR_DESC1217{1218const DML_TENSOR_DESC* InputTensor;1219const DML_TENSOR_DESC* OutputTensor;1220_Maybenull_ const DML_SCALE_BIAS* ScaleBias;1221};12221223struct DML_ELEMENT_WISE_ACOSH_OPERATOR_DESC1224{1225const DML_TENSOR_DESC* InputTensor;1226const DML_TENSOR_DESC* OutputTensor;1227_Maybenull_ const DML_SCALE_BIAS* ScaleBias;1228};12291230struct DML_ELEMENT_WISE_ATANH_OPERATOR_DESC1231{1232const DML_TENSOR_DESC* InputTensor;1233const DML_TENSOR_DESC* OutputTensor;1234_Maybenull_ const DML_SCALE_BIAS* ScaleBias;1235};12361237struct DML_ELEMENT_WISE_IF_OPERATOR_DESC1238{1239const DML_TENSOR_DESC* ConditionTensor;1240const DML_TENSOR_DESC* ATensor;1241const DML_TENSOR_DESC* BTensor;1242const DML_TENSOR_DESC* OutputTensor;1243};12441245struct DML_ACTIVATION_SHRINK_OPERATOR_DESC1246{1247const DML_TENSOR_DESC* InputTensor;1248const DML_TENSOR_DESC* OutputTensor;1249FLOAT Bias;1250FLOAT Threshold;1251};12521253struct DML_MAX_POOLING1_OPERATOR_DESC1254{1255const DML_TENSOR_DESC* InputTensor;1256const DML_TENSOR_DESC* OutputTensor;1257_Maybenull_ const DML_TENSOR_DESC* OutputIndicesTensor;1258UINT DimensionCount;1259_Field_size_(DimensionCount) const UINT* Strides;1260_Field_size_(DimensionCount) const UINT* WindowSize;1261_Field_size_(DimensionCount) const UINT* StartPadding;1262_Field_size_(DimensionCount) const UINT* EndPadding;1263};12641265struct DML_MAX_UNPOOLING_OPERATOR_DESC1266{1267const DML_TENSOR_DESC* InputTensor;1268const DML_TENSOR_DESC* IndicesTensor;1269const DML_TENSOR_DESC* OutputTensor;1270};12711272struct DML_DIAGONAL_MATRIX_OPERATOR_DESC1273{1274const DML_TENSOR_DESC* OutputTensor;1275INT Offset;1276FLOAT Value;1277};12781279struct DML_SCATTER_OPERATOR_DESC1280{1281const DML_TENSOR_DESC* InputTensor;1282const DML_TENSOR_DESC* IndicesTensor;1283const DML_TENSOR_DESC* UpdatesTensor;1284const DML_TENSOR_DESC* OutputTensor;1285UINT Axis;1286};12871288struct DML_ONE_HOT_OPERATOR_DESC1289{1290const DML_TENSOR_DESC* IndicesTensor;1291const DML_TENSOR_DESC* ValuesTensor;1292const DML_TENSOR_DESC* OutputTensor;1293UINT Axis;1294};12951296struct DML_RESAMPLE_OPERATOR_DESC1297{1298const DML_TENSOR_DESC* InputTensor;1299const DML_TENSOR_DESC* OutputTensor;1300DML_INTERPOLATION_MODE InterpolationMode;1301UINT ScaleCount;1302_Field_size_(ScaleCount) const FLOAT* Scales;1303};13041305#endif // DML_TARGET_VERSION >= 0x200013061307#if DML_TARGET_VERSION >= 0x210013081309struct DML_ELEMENT_WISE_BIT_SHIFT_LEFT_OPERATOR_DESC1310{1311const DML_TENSOR_DESC* ATensor;1312const DML_TENSOR_DESC* BTensor;1313const DML_TENSOR_DESC* OutputTensor;1314};13151316struct DML_ELEMENT_WISE_BIT_SHIFT_RIGHT_OPERATOR_DESC1317{1318const DML_TENSOR_DESC* ATensor;1319const DML_TENSOR_DESC* BTensor;1320const DML_TENSOR_DESC* OutputTensor;1321};13221323struct DML_ELEMENT_WISE_ROUND_OPERATOR_DESC1324{1325const DML_TENSOR_DESC* InputTensor;1326const DML_TENSOR_DESC* OutputTensor;1327DML_ROUNDING_MODE RoundingMode;1328};13291330struct DML_ELEMENT_WISE_IS_INFINITY_OPERATOR_DESC1331{1332const DML_TENSOR_DESC* InputTensor;1333const DML_TENSOR_DESC* OutputTensor;1334DML_IS_INFINITY_MODE InfinityMode;1335};13361337struct DML_ELEMENT_WISE_MODULUS_TRUNCATE_OPERATOR_DESC1338{1339const DML_TENSOR_DESC* ATensor;1340const DML_TENSOR_DESC* BTensor;1341const DML_TENSOR_DESC* OutputTensor;1342};13431344struct DML_ELEMENT_WISE_MODULUS_FLOOR_OPERATOR_DESC1345{1346const DML_TENSOR_DESC* ATensor;1347const DML_TENSOR_DESC* BTensor;1348const DML_TENSOR_DESC* OutputTensor;1349};13501351struct DML_FILL_VALUE_CONSTANT_OPERATOR_DESC1352{1353const DML_TENSOR_DESC* OutputTensor;1354DML_TENSOR_DATA_TYPE ValueDataType;1355DML_SCALAR_UNION Value;1356};13571358struct DML_FILL_VALUE_SEQUENCE_OPERATOR_DESC1359{1360const DML_TENSOR_DESC* OutputTensor;1361DML_TENSOR_DATA_TYPE ValueDataType;1362DML_SCALAR_UNION ValueStart;1363DML_SCALAR_UNION ValueDelta;1364};13651366struct DML_CUMULATIVE_SUMMATION_OPERATOR_DESC1367{1368const DML_TENSOR_DESC* InputTensor;1369const DML_TENSOR_DESC* OutputTensor;1370UINT Axis;1371DML_AXIS_DIRECTION AxisDirection;1372BOOL HasExclusiveSum;1373};13741375struct DML_REVERSE_SUBSEQUENCES_OPERATOR_DESC1376{1377const DML_TENSOR_DESC* InputTensor;1378const DML_TENSOR_DESC* SequenceLengthsTensor;1379const DML_TENSOR_DESC* OutputTensor;1380UINT Axis;1381};13821383struct DML_GATHER_ELEMENTS_OPERATOR_DESC1384{1385const DML_TENSOR_DESC* InputTensor;1386const DML_TENSOR_DESC* IndicesTensor;1387const DML_TENSOR_DESC* OutputTensor;1388UINT Axis;1389};13901391// Alias existing operator, symmetric with DML_GATHER_ELEMENTS_OPERATOR_DESC.1392using DML_SCATTER_ELEMENTS_OPERATOR_DESC = DML_SCATTER_OPERATOR_DESC;13931394struct DML_GATHER_ND_OPERATOR_DESC1395{1396const DML_TENSOR_DESC* InputTensor;1397const DML_TENSOR_DESC* IndicesTensor;1398const DML_TENSOR_DESC* OutputTensor;1399UINT InputDimensionCount;1400UINT IndicesDimensionCount;1401};14021403struct DML_SCATTER_ND_OPERATOR_DESC1404{1405const DML_TENSOR_DESC* InputTensor;1406const DML_TENSOR_DESC* IndicesTensor;1407const DML_TENSOR_DESC* UpdatesTensor;1408const DML_TENSOR_DESC* OutputTensor;1409UINT InputDimensionCount;1410UINT IndicesDimensionCount;1411};14121413struct DML_MAX_POOLING2_OPERATOR_DESC1414{1415const DML_TENSOR_DESC* InputTensor;1416const DML_TENSOR_DESC* OutputTensor;1417_Maybenull_ const DML_TENSOR_DESC* OutputIndicesTensor;1418UINT DimensionCount;1419_Field_size_(DimensionCount) const UINT* Strides;1420_Field_size_(DimensionCount) const UINT* WindowSize;1421_Field_size_(DimensionCount) const UINT* StartPadding;1422_Field_size_(DimensionCount) const UINT* EndPadding;1423_Field_size_(DimensionCount) const UINT* Dilations;1424};14251426struct DML_SLICE1_OPERATOR_DESC1427{1428const DML_TENSOR_DESC* InputTensor;1429const DML_TENSOR_DESC* OutputTensor;1430UINT DimensionCount;1431_Field_size_(DimensionCount) const UINT* InputWindowOffsets;1432_Field_size_(DimensionCount) const UINT* InputWindowSizes;1433_Field_size_(DimensionCount) const INT* InputWindowStrides;1434};14351436struct DML_TOP_K1_OPERATOR_DESC1437{1438const DML_TENSOR_DESC* InputTensor;1439const DML_TENSOR_DESC* OutputValueTensor;1440const DML_TENSOR_DESC* OutputIndexTensor;1441UINT Axis;1442UINT K;1443DML_AXIS_DIRECTION AxisDirection;1444};14451446struct DML_DEPTH_TO_SPACE1_OPERATOR_DESC1447{1448const DML_TENSOR_DESC* InputTensor;1449const DML_TENSOR_DESC* OutputTensor;1450UINT BlockSize;1451DML_DEPTH_SPACE_ORDER Order;1452};14531454struct DML_SPACE_TO_DEPTH1_OPERATOR_DESC1455{1456const DML_TENSOR_DESC* InputTensor;1457const DML_TENSOR_DESC* OutputTensor;1458UINT BlockSize;1459DML_DEPTH_SPACE_ORDER Order;1460};14611462struct DML_MEAN_VARIANCE_NORMALIZATION1_OPERATOR_DESC1463{1464const DML_TENSOR_DESC* InputTensor;1465_Maybenull_ const DML_TENSOR_DESC* ScaleTensor;1466_Maybenull_ const DML_TENSOR_DESC* BiasTensor;1467const DML_TENSOR_DESC* OutputTensor;1468UINT AxisCount;1469_Field_size_(AxisCount) const UINT* Axes;1470BOOL NormalizeVariance;1471FLOAT Epsilon;1472_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;1473};14741475struct DML_RESAMPLE1_OPERATOR_DESC1476{1477const DML_TENSOR_DESC* InputTensor;1478const DML_TENSOR_DESC* OutputTensor;1479DML_INTERPOLATION_MODE InterpolationMode;1480UINT DimensionCount;1481_Field_size_(DimensionCount) const FLOAT* Scales;1482_Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;1483_Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;1484};14851486struct DML_MATRIX_MULTIPLY_INTEGER_OPERATOR_DESC1487{1488const DML_TENSOR_DESC* ATensor;1489_Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;1490const DML_TENSOR_DESC* BTensor;1491_Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;1492const DML_TENSOR_DESC* OutputTensor;1493};14941495struct DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC1496{1497const DML_TENSOR_DESC* ATensor;1498const DML_TENSOR_DESC* AScaleTensor;1499_Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;1500const DML_TENSOR_DESC* BTensor;1501const DML_TENSOR_DESC* BScaleTensor;1502_Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;1503const DML_TENSOR_DESC* OutputScaleTensor;1504_Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor;1505const DML_TENSOR_DESC* OutputTensor;1506};15071508struct DML_CONVOLUTION_INTEGER_OPERATOR_DESC1509{1510const DML_TENSOR_DESC* InputTensor;1511_Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor;1512const DML_TENSOR_DESC* FilterTensor;1513_Maybenull_ const DML_TENSOR_DESC* FilterZeroPointTensor;1514const DML_TENSOR_DESC* OutputTensor;1515UINT DimensionCount;1516_Field_size_(DimensionCount) const UINT* Strides;1517_Field_size_(DimensionCount) const UINT* Dilations;1518_Field_size_(DimensionCount) const UINT* StartPadding;1519_Field_size_(DimensionCount) const UINT* EndPadding;1520UINT GroupCount;1521};15221523struct DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC1524{1525const DML_TENSOR_DESC* InputTensor;1526const DML_TENSOR_DESC* InputScaleTensor;1527_Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor;1528const DML_TENSOR_DESC* FilterTensor;1529const DML_TENSOR_DESC* FilterScaleTensor;1530_Maybenull_ const DML_TENSOR_DESC* FilterZeroPointTensor;1531_Maybenull_ const DML_TENSOR_DESC* BiasTensor;1532const DML_TENSOR_DESC* OutputScaleTensor;1533_Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor;1534const DML_TENSOR_DESC* OutputTensor;1535UINT DimensionCount;1536_Field_size_(DimensionCount) const UINT* Strides;1537_Field_size_(DimensionCount) const UINT* Dilations;1538_Field_size_(DimensionCount) const UINT* StartPadding;1539_Field_size_(DimensionCount) const UINT* EndPadding;1540UINT GroupCount;1541};15421543#endif // DML_TARGET_VERSION >= 0x210015441545#if DML_TARGET_VERSION >= 0x300015461547struct DML_ELEMENT_WISE_BIT_AND_OPERATOR_DESC1548{1549const DML_TENSOR_DESC* ATensor;1550const DML_TENSOR_DESC* BTensor;1551const DML_TENSOR_DESC* OutputTensor;1552};15531554struct DML_ELEMENT_WISE_BIT_OR_OPERATOR_DESC1555{1556const DML_TENSOR_DESC* ATensor;1557const DML_TENSOR_DESC* BTensor;1558const DML_TENSOR_DESC* OutputTensor;1559};15601561struct DML_ELEMENT_WISE_BIT_XOR_OPERATOR_DESC1562{1563const DML_TENSOR_DESC* ATensor;1564const DML_TENSOR_DESC* BTensor;1565const DML_TENSOR_DESC* OutputTensor;1566};15671568struct DML_ELEMENT_WISE_BIT_NOT_OPERATOR_DESC1569{1570const DML_TENSOR_DESC* InputTensor;1571const DML_TENSOR_DESC* OutputTensor;1572};15731574struct DML_ELEMENT_WISE_BIT_COUNT_OPERATOR_DESC1575{1576const DML_TENSOR_DESC* InputTensor;1577const DML_TENSOR_DESC* OutputTensor;1578};15791580struct DML_ELEMENT_WISE_LOGICAL_GREATER_THAN_OR_EQUAL_OPERATOR_DESC1581{1582const DML_TENSOR_DESC* ATensor;1583const DML_TENSOR_DESC* BTensor;1584const DML_TENSOR_DESC* OutputTensor;1585};15861587struct DML_ELEMENT_WISE_LOGICAL_LESS_THAN_OR_EQUAL_OPERATOR_DESC1588{1589const DML_TENSOR_DESC* ATensor;1590const DML_TENSOR_DESC* BTensor;1591const DML_TENSOR_DESC* OutputTensor;1592};15931594struct DML_ACTIVATION_CELU_OPERATOR_DESC1595{1596const DML_TENSOR_DESC* InputTensor;1597const DML_TENSOR_DESC* OutputTensor;1598FLOAT Alpha;1599};16001601struct DML_ACTIVATION_RELU_GRAD_OPERATOR_DESC1602{1603const DML_TENSOR_DESC* InputTensor;1604const DML_TENSOR_DESC* InputGradientTensor;1605const DML_TENSOR_DESC* OutputGradientTensor;1606};16071608struct DML_AVERAGE_POOLING_GRAD_OPERATOR_DESC1609{1610const DML_TENSOR_DESC* InputGradientTensor;1611const DML_TENSOR_DESC* OutputGradientTensor;1612UINT DimensionCount;1613_Field_size_(DimensionCount) const UINT* Strides;1614_Field_size_(DimensionCount) const UINT* WindowSize;1615_Field_size_(DimensionCount) const UINT* StartPadding;1616_Field_size_(DimensionCount) const UINT* EndPadding;1617BOOL IncludePadding;1618};16191620struct DML_MAX_POOLING_GRAD_OPERATOR_DESC1621{1622const DML_TENSOR_DESC* InputTensor;1623const DML_TENSOR_DESC* InputGradientTensor;1624const DML_TENSOR_DESC* OutputGradientTensor;1625UINT DimensionCount;1626_Field_size_(DimensionCount) const UINT* Strides;1627_Field_size_(DimensionCount) const UINT* WindowSize;1628_Field_size_(DimensionCount) const UINT* StartPadding;1629_Field_size_(DimensionCount) const UINT* EndPadding;1630_Field_size_(DimensionCount) const UINT* Dilations;1631};16321633struct DML_RANDOM_GENERATOR_OPERATOR_DESC1634{1635const DML_TENSOR_DESC* InputStateTensor;1636const DML_TENSOR_DESC* OutputTensor;1637_Maybenull_ const DML_TENSOR_DESC* OutputStateTensor;1638DML_RANDOM_GENERATOR_TYPE Type;1639};16401641struct DML_NONZERO_COORDINATES_OPERATOR_DESC1642{1643const DML_TENSOR_DESC* InputTensor;1644const DML_TENSOR_DESC* OutputCountTensor;1645const DML_TENSOR_DESC* OutputCoordinatesTensor;1646};16471648struct DML_RESAMPLE_GRAD_OPERATOR_DESC1649{1650const DML_TENSOR_DESC* InputGradientTensor;1651const DML_TENSOR_DESC* OutputGradientTensor;1652DML_INTERPOLATION_MODE InterpolationMode;1653UINT DimensionCount;1654_Field_size_(DimensionCount) const FLOAT* Scales;1655_Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;1656_Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;1657};16581659struct DML_SLICE_GRAD_OPERATOR_DESC1660{1661const DML_TENSOR_DESC* InputGradientTensor;1662const DML_TENSOR_DESC* OutputGradientTensor;1663UINT DimensionCount;1664_Field_size_(DimensionCount) const UINT* InputWindowOffsets;1665_Field_size_(DimensionCount) const UINT* InputWindowSizes;1666_Field_size_(DimensionCount) const INT* InputWindowStrides;1667};16681669struct DML_ADAM_OPTIMIZER_OPERATOR_DESC1670{1671const DML_TENSOR_DESC* InputParametersTensor;1672const DML_TENSOR_DESC* InputFirstMomentTensor;1673const DML_TENSOR_DESC* InputSecondMomentTensor;1674const DML_TENSOR_DESC* GradientTensor;1675const DML_TENSOR_DESC* TrainingStepTensor;1676const DML_TENSOR_DESC* OutputParametersTensor;1677const DML_TENSOR_DESC* OutputFirstMomentTensor;1678const DML_TENSOR_DESC* OutputSecondMomentTensor;1679FLOAT LearningRate;1680FLOAT Beta1;1681FLOAT Beta2;1682FLOAT Epsilon;1683};16841685struct DML_ARGMIN_OPERATOR_DESC1686{1687const DML_TENSOR_DESC* InputTensor;1688const DML_TENSOR_DESC* OutputTensor;1689UINT AxisCount;1690_Field_size_(AxisCount) const UINT* Axes;1691DML_AXIS_DIRECTION AxisDirection;1692};16931694struct DML_ARGMAX_OPERATOR_DESC1695{1696const DML_TENSOR_DESC* InputTensor;1697const DML_TENSOR_DESC* OutputTensor;1698UINT AxisCount;1699_Field_size_(AxisCount) const UINT* Axes;1700DML_AXIS_DIRECTION AxisDirection;1701};17021703struct DML_ROI_ALIGN_OPERATOR_DESC1704{1705const DML_TENSOR_DESC* InputTensor;1706const DML_TENSOR_DESC* ROITensor;1707const DML_TENSOR_DESC* BatchIndicesTensor;1708const DML_TENSOR_DESC* OutputTensor;1709DML_REDUCE_FUNCTION ReductionFunction;1710DML_INTERPOLATION_MODE InterpolationMode;1711FLOAT SpatialScaleX;1712FLOAT SpatialScaleY;1713FLOAT OutOfBoundsInputValue;1714UINT MinimumSamplesPerOutput;1715UINT MaximumSamplesPerOutput;1716};17171718struct DML_GATHER_ND1_OPERATOR_DESC1719{1720const DML_TENSOR_DESC* InputTensor;1721const DML_TENSOR_DESC* IndicesTensor;1722const DML_TENSOR_DESC* OutputTensor;1723UINT InputDimensionCount;1724UINT IndicesDimensionCount;1725UINT BatchDimensionCount;1726};17271728#endif // DML_TARGET_VERSION >= 0x300017291730#if DML_TARGET_VERSION >= 0x310017311732struct DML_ELEMENT_WISE_ATAN_YX_OPERATOR_DESC1733{1734const DML_TENSOR_DESC* ATensor;1735const DML_TENSOR_DESC* BTensor;1736const DML_TENSOR_DESC* OutputTensor;1737};17381739struct DML_ELEMENT_WISE_CLIP_GRAD_OPERATOR_DESC1740{1741const DML_TENSOR_DESC* InputTensor;1742const DML_TENSOR_DESC* InputGradientTensor;1743const DML_TENSOR_DESC* OutputGradientTensor;1744FLOAT Min;1745FLOAT Max;1746};17471748struct DML_ELEMENT_WISE_DIFFERENCE_SQUARE_OPERATOR_DESC1749{1750const DML_TENSOR_DESC* ATensor;1751const DML_TENSOR_DESC* BTensor;1752const DML_TENSOR_DESC* OutputTensor;1753};17541755struct DML_LOCAL_RESPONSE_NORMALIZATION_GRAD_OPERATOR_DESC1756{1757const DML_TENSOR_DESC* InputTensor;1758const DML_TENSOR_DESC* InputGradientTensor;1759const DML_TENSOR_DESC* OutputGradientTensor;1760BOOL CrossChannel;1761UINT LocalSize;1762FLOAT Alpha;1763FLOAT Beta;1764FLOAT Bias;1765};17661767struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC1768{1769const DML_TENSOR_DESC* InputTensor;1770const DML_TENSOR_DESC* OutputTensor;1771UINT Axis;1772DML_AXIS_DIRECTION AxisDirection;1773BOOL HasExclusiveProduct;1774};17751776struct DML_BATCH_NORMALIZATION_GRAD_OPERATOR_DESC1777{1778const DML_TENSOR_DESC* InputTensor;1779const DML_TENSOR_DESC* InputGradientTensor;1780const DML_TENSOR_DESC* MeanTensor;1781const DML_TENSOR_DESC* VarianceTensor;1782const DML_TENSOR_DESC* ScaleTensor;17831784const DML_TENSOR_DESC* OutputGradientTensor;1785const DML_TENSOR_DESC* OutputScaleGradientTensor;1786const DML_TENSOR_DESC* OutputBiasGradientTensor;17871788FLOAT Epsilon;1789};17901791#endif // DML_TARGET_VERSION >= 0x310017921793#if DML_TARGET_VERSION >= 0x40001794struct DML_ELEMENT_WISE_QUANTIZED_LINEAR_ADD_OPERATOR_DESC1795{1796const DML_TENSOR_DESC* ATensor;1797const DML_TENSOR_DESC* AScaleTensor;1798_Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;1799const DML_TENSOR_DESC* BTensor;1800const DML_TENSOR_DESC* BScaleTensor;1801_Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;1802const DML_TENSOR_DESC* OutputScaleTensor; // This is an input tensor1803_Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor; // This is an input tensor1804const DML_TENSOR_DESC* OutputTensor;1805};18061807struct DML_DYNAMIC_QUANTIZE_LINEAR_OPERATOR_DESC1808{1809const DML_TENSOR_DESC* InputTensor;1810const DML_TENSOR_DESC* OutputTensor;1811const DML_TENSOR_DESC* OutputScaleTensor; // This is an output tensor1812const DML_TENSOR_DESC* OutputZeroPointTensor; // This is an output tensor1813};18141815struct DML_ROI_ALIGN1_OPERATOR_DESC1816{1817const DML_TENSOR_DESC* InputTensor;1818const DML_TENSOR_DESC* ROITensor;1819const DML_TENSOR_DESC* BatchIndicesTensor;1820const DML_TENSOR_DESC* OutputTensor;1821DML_REDUCE_FUNCTION ReductionFunction;1822DML_INTERPOLATION_MODE InterpolationMode;1823FLOAT SpatialScaleX;1824FLOAT SpatialScaleY;1825FLOAT InputPixelOffset;1826FLOAT OutputPixelOffset;1827FLOAT OutOfBoundsInputValue;1828UINT MinimumSamplesPerOutput;1829UINT MaximumSamplesPerOutput;1830BOOL AlignRegionsToCorners;1831};18321833#endif // DML_TARGET_VERSION >= 0x400018341835#if DML_TARGET_VERSION >= 0x410018361837struct DML_ROI_ALIGN_GRAD_OPERATOR_DESC1838{1839_Maybenull_ const DML_TENSOR_DESC* InputTensor;1840const DML_TENSOR_DESC* InputGradientTensor;1841const DML_TENSOR_DESC* ROITensor;1842const DML_TENSOR_DESC* BatchIndicesTensor;1843_Maybenull_ const DML_TENSOR_DESC* OutputGradientTensor;1844_Maybenull_ const DML_TENSOR_DESC* OutputROIGradientTensor;1845DML_REDUCE_FUNCTION ReductionFunction;1846DML_INTERPOLATION_MODE InterpolationMode;1847FLOAT SpatialScaleX;1848FLOAT SpatialScaleY;1849FLOAT InputPixelOffset;1850FLOAT OutputPixelOffset;1851UINT MinimumSamplesPerOutput;1852UINT MaximumSamplesPerOutput;1853BOOL AlignRegionsToCorners;1854};18551856struct DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC1857{1858const DML_TENSOR_DESC* InputTensor;1859const DML_TENSOR_DESC* ScaleTensor;1860const DML_TENSOR_DESC* BiasTensor;1861_Maybenull_ const DML_TENSOR_DESC* FusedAddTensor;1862const DML_TENSOR_DESC* OutputTensor;1863const DML_TENSOR_DESC* OutputMeanTensor;1864const DML_TENSOR_DESC* OutputVarianceTensor;1865FLOAT Epsilon;1866_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;1867};18681869struct DML_BATCH_NORMALIZATION_TRAINING_GRAD_OPERATOR_DESC1870{1871const DML_TENSOR_DESC* InputTensor;1872const DML_TENSOR_DESC* InputGradientTensor;1873const DML_TENSOR_DESC* MeanTensor;1874const DML_TENSOR_DESC* VarianceTensor;1875const DML_TENSOR_DESC* ScaleTensor;1876const DML_TENSOR_DESC* OutputGradientTensor;1877const DML_TENSOR_DESC* OutputScaleGradientTensor;1878const DML_TENSOR_DESC* OutputBiasGradientTensor;1879FLOAT Epsilon;1880};18811882#endif // DML_TARGET_VERSION >= 0x410018831884#if DML_TARGET_VERSION >= 0x500018851886struct DML_ELEMENT_WISE_CLIP1_OPERATOR_DESC1887{1888const DML_TENSOR_DESC* InputTensor;1889const DML_TENSOR_DESC* OutputTensor;1890_Maybenull_ const DML_SCALE_BIAS* ScaleBias;1891DML_TENSOR_DATA_TYPE MinMaxDataType;1892DML_SCALAR_UNION Min;1893DML_SCALAR_UNION Max;1894};18951896struct DML_ELEMENT_WISE_CLIP_GRAD1_OPERATOR_DESC1897{1898const DML_TENSOR_DESC* InputTensor;1899const DML_TENSOR_DESC* InputGradientTensor;1900const DML_TENSOR_DESC* OutputGradientTensor;1901DML_TENSOR_DATA_TYPE MinMaxDataType;1902DML_SCALAR_UNION Min;1903DML_SCALAR_UNION Max;1904};19051906struct DML_PADDING1_OPERATOR_DESC1907{1908const DML_TENSOR_DESC* InputTensor;1909const DML_TENSOR_DESC* OutputTensor;1910DML_PADDING_MODE PaddingMode;1911DML_TENSOR_DATA_TYPE PaddingValueDataType;1912DML_SCALAR_UNION PaddingValue;1913UINT DimensionCount;1914_Field_size_(DimensionCount) const UINT* StartPadding;1915_Field_size_(DimensionCount) const UINT* EndPadding;1916};19171918struct DML_ELEMENT_WISE_NEGATE_OPERATOR_DESC1919{1920const DML_TENSOR_DESC* InputTensor;1921const DML_TENSOR_DESC* OutputTensor;1922};19231924#endif // DML_TARGET_VERSION >= 0x500019251926#if DML_TARGET_VERSION >= 0x510019271928struct DML_ACTIVATION_GELU_OPERATOR_DESC1929{1930const DML_TENSOR_DESC* InputTensor;1931const DML_TENSOR_DESC* OutputTensor;1932};19331934struct DML_ACTIVATION_SOFTMAX1_OPERATOR_DESC1935{1936const DML_TENSOR_DESC* InputTensor;1937const DML_TENSOR_DESC* OutputTensor;1938UINT AxisCount;1939_Field_size_(AxisCount) const UINT* Axes;1940};19411942struct DML_ACTIVATION_LOG_SOFTMAX1_OPERATOR_DESC1943{1944const DML_TENSOR_DESC* InputTensor;1945const DML_TENSOR_DESC* OutputTensor;1946UINT AxisCount;1947_Field_size_(AxisCount) const UINT* Axes;1948};19491950struct DML_ACTIVATION_HARDMAX1_OPERATOR_DESC1951{1952const DML_TENSOR_DESC* InputTensor;1953const DML_TENSOR_DESC* OutputTensor;1954UINT AxisCount;1955_Field_size_(AxisCount) const UINT* Axes;1956};19571958struct DML_RESAMPLE2_OPERATOR_DESC1959{1960const DML_TENSOR_DESC* InputTensor;1961const DML_TENSOR_DESC* OutputTensor;1962DML_INTERPOLATION_MODE InterpolationMode;1963DML_AXIS_DIRECTION RoundingDirection;1964UINT DimensionCount;1965_Field_size_(DimensionCount) const FLOAT* Scales;1966_Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;1967_Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;1968};19691970struct DML_RESAMPLE_GRAD1_OPERATOR_DESC1971{1972const DML_TENSOR_DESC* InputGradientTensor;1973const DML_TENSOR_DESC* OutputGradientTensor;1974DML_INTERPOLATION_MODE InterpolationMode;1975DML_AXIS_DIRECTION RoundingDirection;1976UINT DimensionCount;1977_Field_size_(DimensionCount) const FLOAT* Scales;1978_Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;1979_Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;1980};19811982struct DML_DIAGONAL_MATRIX1_OPERATOR_DESC1983{1984_Maybenull_ const DML_TENSOR_DESC* InputTensor;1985const DML_TENSOR_DESC* OutputTensor;1986DML_TENSOR_DATA_TYPE ValueDataType;1987DML_SCALAR_UNION Value;1988INT DiagonalFillBegin;1989INT DiagonalFillEnd;1990};19911992#endif // DML_TARGET_VERSION >= 0x510019931994#if DML_TARGET_VERSION >= 0x610019951996struct DML_MULTIHEAD_ATTENTION_OPERATOR_DESC1997{1998_Maybenull_ const DML_TENSOR_DESC* QueryTensor;1999_Maybenull_ const DML_TENSOR_DESC* KeyTensor;2000_Maybenull_ const DML_TENSOR_DESC* ValueTensor;2001_Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyTensor;2002_Maybenull_ const DML_TENSOR_DESC* StackedKeyValueTensor;2003_Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyValueTensor;2004_Maybenull_ const DML_TENSOR_DESC* BiasTensor;2005_Maybenull_ const DML_TENSOR_DESC* MaskTensor;2006_Maybenull_ const DML_TENSOR_DESC* RelativePositionBiasTensor;2007_Maybenull_ const DML_TENSOR_DESC* PastKeyTensor;2008_Maybenull_ const DML_TENSOR_DESC* PastValueTensor;2009const DML_TENSOR_DESC* OutputTensor;2010_Maybenull_ const DML_TENSOR_DESC* OutputPresentKeyTensor;2011_Maybenull_ const DML_TENSOR_DESC* OutputPresentValueTensor;2012FLOAT Scale;2013FLOAT MaskFilterValue;2014UINT HeadCount;2015DML_MULTIHEAD_ATTENTION_MASK_TYPE MaskType;2016};20172018#endif // DML_TARGET_VERSION >= 0x610020192020#if DML_TARGET_VERSION >= 0x620020212022struct DML_LP_POOLING1_OPERATOR_DESC2023{2024const DML_TENSOR_DESC* InputTensor;2025const DML_TENSOR_DESC* OutputTensor;2026UINT DimensionCount;2027_Field_size_(DimensionCount) const UINT* Strides;2028_Field_size_(DimensionCount) const UINT* WindowSize;2029_Field_size_(DimensionCount) const UINT* StartPadding;2030_Field_size_(DimensionCount) const UINT* EndPadding;2031_Field_size_(DimensionCount) const UINT* Dilations;2032UINT P;2033};20342035struct DML_AVERAGE_POOLING1_OPERATOR_DESC2036{2037const DML_TENSOR_DESC* InputTensor;2038const DML_TENSOR_DESC* OutputTensor;2039UINT DimensionCount;2040_Field_size_(DimensionCount) const UINT* Strides;2041_Field_size_(DimensionCount) const UINT* WindowSize;2042_Field_size_(DimensionCount) const UINT* StartPadding;2043_Field_size_(DimensionCount) const UINT* EndPadding;2044_Field_size_(DimensionCount) const UINT* Dilations;2045BOOL IncludePadding;2046};20472048struct DML_ACTIVATION_SWISH_OPERATOR_DESC2049{2050const DML_TENSOR_DESC* InputTensor;2051const DML_TENSOR_DESC* OutputTensor;2052FLOAT SigmoidInputScale;2053};20542055struct DML_ACTIVATION_HARD_SWISH_OPERATOR_DESC2056{2057const DML_TENSOR_DESC* InputTensor;2058const DML_TENSOR_DESC* OutputTensor;2059FLOAT Alpha;2060FLOAT Beta;2061};20622063struct DML_QUANTIZED_LINEAR_AVERAGE_POOLING_OPERATOR_DESC2064{2065const DML_TENSOR_DESC* InputTensor;2066const DML_TENSOR_DESC* InputScaleTensor;2067_Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor;2068const DML_TENSOR_DESC* OutputScaleTensor;2069_Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor;2070const DML_TENSOR_DESC* OutputTensor;2071UINT DimensionCount;2072_Field_size_(DimensionCount) const UINT* Strides;2073_Field_size_(DimensionCount) const UINT* WindowSize;2074_Field_size_(DimensionCount) const UINT* StartPadding;2075_Field_size_(DimensionCount) const UINT* EndPadding;2076_Field_size_(DimensionCount) const UINT* Dilations;2077BOOL IncludePadding;2078};20792080struct DML_MATRIX_MULTIPLY_INTEGER_TO_FLOAT_OPERATOR_DESC2081{2082const DML_TENSOR_DESC* ATensor;2083const DML_TENSOR_DESC* AScaleTensor;2084_Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;2085const DML_TENSOR_DESC* BTensor;2086const DML_TENSOR_DESC* BScaleTensor;2087_Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;2088_Maybenull_ const DML_TENSOR_DESC* BiasTensor;2089const DML_TENSOR_DESC* OutputTensor;2090};20912092#endif // DML_TARGET_VERSION >= 0x620020932094#if DML_TARGET_VERSION >= 0x630020952096struct DML_MEAN_VARIANCE_NORMALIZATION2_OPERATOR_DESC2097{2098const DML_TENSOR_DESC* InputTensor;2099_Maybenull_ const DML_TENSOR_DESC* ScaleTensor;2100_Maybenull_ const DML_TENSOR_DESC* BiasTensor;2101const DML_TENSOR_DESC* OutputTensor;2102UINT AxisCount;2103_Field_size_(AxisCount) const UINT* Axes;2104BOOL UseMean;2105BOOL UseVariance;2106FLOAT Epsilon;2107_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;2108};21092110struct DML_MULTIHEAD_ATTENTION1_OPERATOR_DESC2111{2112_Maybenull_ const DML_TENSOR_DESC* QueryTensor;2113_Maybenull_ const DML_TENSOR_DESC* KeyTensor;2114_Maybenull_ const DML_TENSOR_DESC* ValueTensor;2115_Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyTensor;2116_Maybenull_ const DML_TENSOR_DESC* StackedKeyValueTensor;2117_Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyValueTensor;2118_Maybenull_ const DML_TENSOR_DESC* BiasTensor;2119_Maybenull_ const DML_TENSOR_DESC* MaskTensor;2120_Maybenull_ const DML_TENSOR_DESC* RelativePositionBiasTensor;2121_Maybenull_ const DML_TENSOR_DESC* PastKeyTensor;2122_Maybenull_ const DML_TENSOR_DESC* PastValueTensor;2123_Maybenull_ const DML_TENSOR_DESC* PastSequenceLengthsTensor;2124const DML_TENSOR_DESC* OutputTensor;2125_Maybenull_ const DML_TENSOR_DESC* OutputPresentKeyTensor;2126_Maybenull_ const DML_TENSOR_DESC* OutputPresentValueTensor;2127FLOAT Scale;2128FLOAT MaskFilterValue;2129UINT QueryHeadCount;2130UINT KeyValueHeadCount;2131DML_MULTIHEAD_ATTENTION_MASK_TYPE MaskType;2132};21332134struct DML_QUANTIZE_OPERATOR_DESC2135{2136const DML_TENSOR_DESC* InputTensor;2137DML_QUANTIZATION_TYPE QuantizationType;2138UINT QuantizationTensorCount;2139_Field_size_(QuantizationTensorCount) const DML_TENSOR_DESC* QuantizationTensors;2140const DML_TENSOR_DESC* OutputTensor;2141};21422143struct DML_DEQUANTIZE_OPERATOR_DESC2144{2145const DML_TENSOR_DESC* InputTensor;2146DML_QUANTIZATION_TYPE QuantizationType;2147UINT QuantizationTensorCount;2148_Field_size_(QuantizationTensorCount) const DML_TENSOR_DESC* QuantizationTensors;2149const DML_TENSOR_DESC* OutputTensor;2150};21512152#endif // DML_TARGET_VERSION >= 0x630021532154#if DML_TARGET_VERSION >= 0x640021552156struct DML_RESAMPLE3_OPERATOR_DESC2157{2158const DML_TENSOR_DESC* InputTensor;2159const DML_TENSOR_DESC* OutputTensor;2160DML_INTERPOLATION_MODE InterpolationMode;2161DML_AXIS_DIRECTION RoundingDirection;2162UINT DimensionCount;2163_Field_size_(DimensionCount) const FLOAT* Scales;2164_Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;2165_Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;2166BOOL Antialiased;2167};21682169struct DML_FOLD_OPERATOR_DESC2170{2171const DML_TENSOR_DESC* InputTensor;2172const DML_TENSOR_DESC* OutputTensor;2173UINT DimensionCount;2174_Field_size_(DimensionCount) const UINT* WindowSizes; // Size of the extracted patch2175_Field_size_(DimensionCount) const UINT* Strides; // Step size of the extracted patches2176_Field_size_(DimensionCount) const UINT* Dilations; // Dialations of the extracted patch2177_Field_size_(DimensionCount) const UINT* StartPadding; // Start padding of the "source tensor"2178_Field_size_(DimensionCount) const UINT* EndPadding; // End padding of the "source tensor"2179};21802181struct DML_UNFOLD_OPERATOR_DESC2182{2183const DML_TENSOR_DESC* InputTensor;2184const DML_TENSOR_DESC* OutputTensor;2185UINT DimensionCount;2186_Field_size_(DimensionCount) const UINT* WindowSizes; // Size of the extracted patch2187_Field_size_(DimensionCount) const UINT* Strides; // Step size of the extracted patches2188_Field_size_(DimensionCount) const UINT* Dilations; // Dialations of the extracted patch2189_Field_size_(DimensionCount) const UINT* StartPadding; // Start padding of the "source tensor"2190_Field_size_(DimensionCount) const UINT* EndPadding; // End padding of the "source tensor"2191};21922193#endif // DML_TARGET_VERSION >= 0x640021942195// ===================================================================================================================2196// DML feature support queries2197// ===================================================================================================================21982199#if DML_TARGET_VERSION >= 0x200022002201enum DML_FEATURE_LEVEL2202{2203DML_FEATURE_LEVEL_1_0 = 0x1000,2204DML_FEATURE_LEVEL_2_0 = 0x2000,2205DML_FEATURE_LEVEL_2_1 = 0x2100,2206DML_FEATURE_LEVEL_3_0 = 0x3000,2207DML_FEATURE_LEVEL_3_1 = 0x3100,2208DML_FEATURE_LEVEL_4_0 = 0x4000,2209DML_FEATURE_LEVEL_4_1 = 0x4100,2210DML_FEATURE_LEVEL_5_0 = 0x5000,2211DML_FEATURE_LEVEL_5_1 = 0x5100,2212DML_FEATURE_LEVEL_5_2 = 0x5200,2213DML_FEATURE_LEVEL_6_0 = 0x6000,2214DML_FEATURE_LEVEL_6_1 = 0x6100,2215DML_FEATURE_LEVEL_6_2 = 0x6200,2216DML_FEATURE_LEVEL_6_3 = 0x6300,2217DML_FEATURE_LEVEL_6_4 = 0x6400,2218};22192220#endif // DML_TARGET_VERSION >= 0x200022212222enum DML_FEATURE2223{2224DML_FEATURE_TENSOR_DATA_TYPE_SUPPORT,22252226#if DML_TARGET_VERSION >= 0x20002227DML_FEATURE_FEATURE_LEVELS,2228#endif // DML_TARGET_VERSION >= 0x20002229};22302231struct DML_FEATURE_QUERY_TENSOR_DATA_TYPE_SUPPORT2232{2233DML_TENSOR_DATA_TYPE DataType;2234};22352236struct DML_FEATURE_DATA_TENSOR_DATA_TYPE_SUPPORT2237{2238BOOL IsSupported;2239};22402241#if DML_TARGET_VERSION >= 0x200022422243struct DML_FEATURE_QUERY_FEATURE_LEVELS2244{2245UINT RequestedFeatureLevelCount;2246_Field_size_(RequestedFeatureLevelCount) const DML_FEATURE_LEVEL* RequestedFeatureLevels;2247};22482249struct DML_FEATURE_DATA_FEATURE_LEVELS2250{2251DML_FEATURE_LEVEL MaxSupportedFeatureLevel;2252};22532254#endif // DML_TARGET_VERSION >= 0x200022552256// ===================================================================================================================2257// DML device functions, enumerations, and structures2258// ===================================================================================================================22592260struct DML_BINDING_TABLE_DESC2261{2262IDMLDispatchable* Dispatchable;2263D3D12_CPU_DESCRIPTOR_HANDLE CPUDescriptorHandle;2264D3D12_GPU_DESCRIPTOR_HANDLE GPUDescriptorHandle;2265UINT SizeInDescriptors;2266};22672268enum DML_EXECUTION_FLAGS2269{2270DML_EXECUTION_FLAG_NONE = 0,2271DML_EXECUTION_FLAG_ALLOW_HALF_PRECISION_COMPUTATION = 0x1,2272DML_EXECUTION_FLAG_DISABLE_META_COMMANDS = 0x2,2273DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE = 0x4,2274};22752276DEFINE_ENUM_FLAG_OPERATORS(DML_EXECUTION_FLAGS)22772278enum DML_CREATE_DEVICE_FLAGS2279{2280DML_CREATE_DEVICE_FLAG_NONE = 0,2281DML_CREATE_DEVICE_FLAG_DEBUG = 0x1,2282};22832284DEFINE_ENUM_FLAG_OPERATORS(DML_CREATE_DEVICE_FLAGS)22852286STDAPI DMLCreateDevice(2287ID3D12Device* d3d12Device,2288DML_CREATE_DEVICE_FLAGS flags,2289REFIID riid, // Expected: IDMLDevice2290_COM_Outptr_opt_ void** ppv2291);22922293#if DML_TARGET_VERSION >= 0x200022942295STDAPI DMLCreateDevice1(2296ID3D12Device* d3d12Device,2297DML_CREATE_DEVICE_FLAGS flags,2298DML_FEATURE_LEVEL minimumFeatureLevel,2299REFIID riid, // Expected: IDMLDevice2300_COM_Outptr_opt_ void** ppv2301);23022303#endif // DML_TARGET_VERSION >= 0x200023042305// ===================================================================================================================2306// DML object2307// ===================================================================================================================23082309interface DML_DECLARE_INTERFACE("c8263aac-9e0c-4a2d-9b8e-007521a3317c") IDMLObject : IUnknown2310{2311IFACEMETHOD(GetPrivateData)(2312REFGUID guid,2313_Inout_ UINT* dataSize,2314_Out_writes_bytes_opt_(*dataSize) void* data2315) = 0;23162317IFACEMETHOD(SetPrivateData)(2318REFGUID guid,2319UINT dataSize,2320_In_reads_bytes_opt_(dataSize) const void* data2321) = 0;23222323IFACEMETHOD(SetPrivateDataInterface)(2324REFGUID guid,2325_In_opt_ IUnknown* data2326) = 0;23272328IFACEMETHOD(SetName)(2329PCWSTR name2330) = 0;2331};23322333// ===================================================================================================================2334// DML device2335// ===================================================================================================================23362337interface DML_DECLARE_INTERFACE("6dbd6437-96fd-423f-a98c-ae5e7c2a573f") IDMLDevice : IDMLObject2338{2339IFACEMETHOD(CheckFeatureSupport)(2340DML_FEATURE feature,2341UINT featureQueryDataSize,2342_In_reads_bytes_opt_(featureQueryDataSize) const void* featureQueryData,2343UINT featureSupportDataSize,2344_Out_writes_bytes_(featureSupportDataSize) void* featureSupportData2345) = 0;23462347IFACEMETHOD(CreateOperator)(2348const DML_OPERATOR_DESC* desc,2349REFIID riid, // expected: IDMLOperator2350_COM_Outptr_opt_ void** ppv2351) = 0;23522353IFACEMETHOD(CompileOperator)(2354IDMLOperator* op,2355DML_EXECUTION_FLAGS flags,2356REFIID riid, // expected: IDMLCompiledOperator2357_COM_Outptr_opt_ void** ppv2358) = 0;23592360IFACEMETHOD(CreateOperatorInitializer)(2361UINT operatorCount,2362_In_reads_opt_(operatorCount) IDMLCompiledOperator* const* operators,2363REFIID riid, // expected: IDMLOperatorInitializer2364_COM_Outptr_ void** ppv2365) = 0;23662367IFACEMETHOD(CreateCommandRecorder)(2368REFIID riid, // expected: IDMLCommandRecorder2369_COM_Outptr_ void** ppv2370) = 0;23712372IFACEMETHOD(CreateBindingTable)(2373_In_opt_ const DML_BINDING_TABLE_DESC* desc,2374REFIID riid, // expected: IDMLBindingTable2375_COM_Outptr_ void** ppv2376) = 0;23772378IFACEMETHOD(Evict)(2379UINT count,2380_In_reads_(count) IDMLPageable* const* ppObjects2381) = 0;23822383IFACEMETHOD(MakeResident)(2384UINT count,2385_In_reads_(count) IDMLPageable* const* ppObjects2386) = 0;23872388IFACEMETHOD(GetDeviceRemovedReason)(2389) = 0;23902391IFACEMETHOD(GetParentDevice)(2392REFIID riid,2393_COM_Outptr_ void** ppv2394) = 0;2395};239623972398// ===================================================================================================================2399// DML device children2400// ===================================================================================================================24012402interface DML_DECLARE_INTERFACE("27e83142-8165-49e3-974e-2fd66e4cb69d") IDMLDeviceChild : IDMLObject2403{2404IFACEMETHOD(GetDevice)(2405REFIID riid, // expected: IDMLDevice2406_COM_Outptr_ void** ppv2407) = 0;2408};24092410interface DML_DECLARE_INTERFACE("b1ab0825-4542-4a4b-8617-6dde6e8f6201") IDMLPageable : IDMLDeviceChild2411{2412};241324142415// ===================================================================================================================2416// DML operator2417// ===================================================================================================================24182419interface DML_DECLARE_INTERFACE("26caae7a-3081-4633-9581-226fbe57695d") IDMLOperator : IDMLDeviceChild2420{2421};242224232424// ===================================================================================================================2425// DML dispatchable2426// ===================================================================================================================24272428struct DML_BINDING_PROPERTIES2429{2430UINT RequiredDescriptorCount;2431UINT64 TemporaryResourceSize;2432UINT64 PersistentResourceSize;2433};24342435interface DML_DECLARE_INTERFACE("dcb821a8-1039-441e-9f1c-b1759c2f3cec") IDMLDispatchable : IDMLPageable2436{2437IFACEMETHOD_(DML_BINDING_PROPERTIES, GetBindingProperties)() = 0;2438};243924402441// ===================================================================================================================2442// DML compiled operator2443// ===================================================================================================================24442445interface DML_DECLARE_INTERFACE("6b15e56a-bf5c-4902-92d8-da3a650afea4") IDMLCompiledOperator : IDMLDispatchable2446{2447};244824492450// ===================================================================================================================2451// DML operator initializer2452// ===================================================================================================================24532454interface DML_DECLARE_INTERFACE("427c1113-435c-469c-8676-4d5dd072f813") IDMLOperatorInitializer : IDMLDispatchable2455{2456IFACEMETHOD(Reset)(2457UINT operatorCount,2458_In_reads_opt_(operatorCount) IDMLCompiledOperator* const* operators2459) = 0;2460};24612462// ===================================================================================================================2463// DML binding table2464// ===================================================================================================================24652466enum DML_BINDING_TYPE2467{2468DML_BINDING_TYPE_NONE,2469DML_BINDING_TYPE_BUFFER,2470DML_BINDING_TYPE_BUFFER_ARRAY,2471};24722473struct DML_BINDING_DESC2474{2475DML_BINDING_TYPE Type;2476_Field_size_opt_(_Inexpressible_("Dependent on binding type")) const void* Desc;2477};24782479struct DML_BUFFER_BINDING2480{2481_Maybenull_ ID3D12Resource* Buffer;2482UINT64 Offset;2483UINT64 SizeInBytes;2484};24852486struct DML_BUFFER_ARRAY_BINDING2487{2488UINT BindingCount;2489_Field_size_(BindingCount) const DML_BUFFER_BINDING* Bindings;2490};24912492interface DML_DECLARE_INTERFACE("29c687dc-de74-4e3b-ab00-1168f2fc3cfc") IDMLBindingTable : IDMLDeviceChild2493{2494IFACEMETHOD_(void, BindInputs)(2495UINT bindingCount,2496_In_reads_opt_(bindingCount) const DML_BINDING_DESC* bindings2497) = 0;24982499IFACEMETHOD_(void, BindOutputs)(2500UINT bindingCount,2501_In_reads_opt_(bindingCount) const DML_BINDING_DESC* bindings2502) = 0;25032504IFACEMETHOD_(void, BindTemporaryResource)(2505_In_opt_ const DML_BINDING_DESC* binding2506) = 0;25072508IFACEMETHOD_(void, BindPersistentResource)(2509_In_opt_ const DML_BINDING_DESC* binding2510) = 0;25112512IFACEMETHOD(Reset)(2513_In_opt_ const DML_BINDING_TABLE_DESC* desc2514) = 0;2515};251625172518// ===================================================================================================================2519// DML command recorder2520// ===================================================================================================================25212522interface DML_DECLARE_INTERFACE("e6857a76-2e3e-4fdd-bff4-5d2ba10fb453") IDMLCommandRecorder : IDMLDeviceChild2523{2524IFACEMETHOD_(void, RecordDispatch)(2525ID3D12CommandList* commandList,2526IDMLDispatchable* dispatchable,2527IDMLBindingTable* bindings2528) = 0;2529};253025312532// ===================================================================================================================2533// DML debug2534// ===================================================================================================================25352536interface DML_DECLARE_INTERFACE("7d6f3ac9-394a-4ac3-92a7-390cc57a8217") IDMLDebugDevice : IUnknown2537{2538IFACEMETHOD_(void, SetMuteDebugOutput)(2539BOOL mute2540) = 0;2541};254225432544// ===================================================================================================================2545// DML graph2546// ===================================================================================================================25472548#if DML_TARGET_VERSION >= 0x210025492550enum DML_GRAPH_EDGE_TYPE2551{2552DML_GRAPH_EDGE_TYPE_INVALID,2553DML_GRAPH_EDGE_TYPE_INPUT,2554DML_GRAPH_EDGE_TYPE_OUTPUT,2555DML_GRAPH_EDGE_TYPE_INTERMEDIATE,2556};25572558struct DML_GRAPH_EDGE_DESC2559{2560DML_GRAPH_EDGE_TYPE Type;2561_Field_size_(_Inexpressible_("Dependent on edge type")) const void* Desc;2562};25632564struct DML_INPUT_GRAPH_EDGE_DESC2565{2566UINT GraphInputIndex;2567UINT ToNodeIndex;2568UINT ToNodeInputIndex;2569_Field_z_ _Maybenull_ const char* Name;2570};25712572struct DML_OUTPUT_GRAPH_EDGE_DESC2573{2574UINT FromNodeIndex;2575UINT FromNodeOutputIndex;2576UINT GraphOutputIndex;2577_Field_z_ _Maybenull_ const char* Name;2578};25792580struct DML_INTERMEDIATE_GRAPH_EDGE_DESC2581{2582UINT FromNodeIndex;2583UINT FromNodeOutputIndex;2584UINT ToNodeIndex;2585UINT ToNodeInputIndex;2586_Field_z_ _Maybenull_ const char* Name;2587};25882589enum DML_GRAPH_NODE_TYPE2590{2591DML_GRAPH_NODE_TYPE_INVALID,2592DML_GRAPH_NODE_TYPE_OPERATOR,2593#if DML_TARGET_VERSION >= 0x62002594DML_GRAPH_NODE_TYPE_CONSTANT2595#endif // DML_TARGET_VERSION >= 0x62002596};25972598struct DML_GRAPH_NODE_DESC2599{2600DML_GRAPH_NODE_TYPE Type;2601_Field_size_(_Inexpressible_("Dependent on node type")) const void* Desc;2602};26032604struct DML_OPERATOR_GRAPH_NODE_DESC2605{2606IDMLOperator* Operator;2607_Field_z_ _Maybenull_ const char* Name;2608};26092610#if DML_TARGET_VERSION >= 0x62002611struct DML_CONSTANT_DATA_GRAPH_NODE_DESC2612{2613_Field_size_bytes_(DataSize) const void* Data;2614SIZE_T DataSize;2615_Field_z_ _Maybenull_ const char* Name;2616};2617#endif // DML_TARGET_VERSION >= 0x620026182619struct DML_GRAPH_DESC2620{2621UINT InputCount;2622UINT OutputCount;26232624UINT NodeCount;2625_Field_size_(NodeCount) const DML_GRAPH_NODE_DESC* Nodes;26262627UINT InputEdgeCount;2628_Field_size_opt_(InputEdgeCount) const DML_GRAPH_EDGE_DESC* InputEdges;26292630UINT OutputEdgeCount;2631_Field_size_(OutputEdgeCount) const DML_GRAPH_EDGE_DESC* OutputEdges;26322633UINT IntermediateEdgeCount;2634_Field_size_opt_(IntermediateEdgeCount) const DML_GRAPH_EDGE_DESC* IntermediateEdges;2635};26362637interface DML_DECLARE_INTERFACE("a0884f9a-d2be-4355-aa5d-5901281ad1d2") IDMLDevice1 : IDMLDevice2638{2639IFACEMETHOD(CompileGraph)(2640const DML_GRAPH_DESC* desc,2641DML_EXECUTION_FLAGS flags,2642REFIID riid, // expected: IDMLCompiledOperator2643_COM_Outptr_opt_ void** ppv2644) = 0;2645};26462647#endif // DML_TARGET_VERSION >= 0x210026482649#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES)2650#endif // DIRECTML_H265126522653