Files
UnrealEngine/Engine/Source/ThirdParty/DirectML/include/DirectML.h
2025-05-18 13:04:45 +08:00

2652 lines
75 KiB
C

// Copyright (c) Microsoft Corporation. All rights reserved.
#ifndef DIRECTML_H
#define DIRECTML_H
#pragma once
#ifdef _GAMING_XBOX_SCARLETT
#include "d3d12_xs.h"
#elif _GAMING_XBOX_XBOXONE
#include "d3d12_x.h"
#else
#include "d3d12.h"
#endif
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES)
#ifndef DML_DECLARE_INTERFACE
#define DML_DECLARE_INTERFACE(iid) DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE
#endif
#ifndef DML_TARGET_VERSION
#if !defined(NTDDI_VERSION) || defined(DML_TARGET_VERSION_USE_LATEST) // Use the latest if using redist or no Windows target set.
#define DML_TARGET_VERSION 0x6400
#elif defined(NTDDI_WIN10_ZN) && NTDDI_VERSION >= NTDDI_WIN10_ZN
#define DML_TARGET_VERSION 0x6000
#elif defined(NTDDI_WIN10_NI) && NTDDI_VERSION >= NTDDI_WIN10_NI
#define DML_TARGET_VERSION 0x5000
#elif defined(NTDDI_WIN10_CO) && NTDDI_VERSION >= NTDDI_WIN10_CO
#define DML_TARGET_VERSION 0x4000
#elif defined(NTDDI_WIN10_FE) && NTDDI_VERSION >= NTDDI_WIN10_FE
#define DML_TARGET_VERSION 0x3000
#elif defined(NTDDI_WIN10_VB) && NTDDI_VERSION >= NTDDI_WIN10_VB // Windows 10 2004 Update
#define DML_TARGET_VERSION 0x2000
#else // defined(NTDDI_WIN10_19H1) && NTDDI_VERSION >= NTDDI_WIN10_19H1 // Windows 10 1903 Update
#define DML_TARGET_VERSION 0x1000
#endif
#endif // !defined(DML_TARGET_VERSION)
// ===================================================================================================================
// DirectML constants
// ===================================================================================================================
static const UINT DML_TENSOR_DIMENSION_COUNT_MAX = 5;
#if DML_TARGET_VERSION >= 0x3000
static const UINT DML_TENSOR_DIMENSION_COUNT_MAX1 = 8;
#endif
static const UINT DML_TEMPORARY_BUFFER_ALIGNMENT = 256;
static const UINT DML_PERSISTENT_BUFFER_ALIGNMENT = 256;
static const UINT DML_MINIMUM_BUFFER_TENSOR_ALIGNMENT = 16;
// ===================================================================================================================
// Interface declarations
// ===================================================================================================================
interface IDMLObject;
interface IDMLDevice;
interface IDMLDeviceChild;
interface IDMLPageable;
interface IDMLDispatchable;
interface IDMLOperator;
interface IDMLCompiledOperator;
interface IDMLOperatorInitializer;
interface IDMLBindingTable;
interface IDMLCommandRecorder;
// ===================================================================================================================
// Tensor descriptions
// ===================================================================================================================
enum DML_TENSOR_DATA_TYPE
{
DML_TENSOR_DATA_TYPE_UNKNOWN,
DML_TENSOR_DATA_TYPE_FLOAT32,
DML_TENSOR_DATA_TYPE_FLOAT16,
DML_TENSOR_DATA_TYPE_UINT32,
DML_TENSOR_DATA_TYPE_UINT16,
DML_TENSOR_DATA_TYPE_UINT8,
DML_TENSOR_DATA_TYPE_INT32,
DML_TENSOR_DATA_TYPE_INT16,
DML_TENSOR_DATA_TYPE_INT8,
DML_TENSOR_DATA_TYPE_FLOAT64,
DML_TENSOR_DATA_TYPE_UINT64,
DML_TENSOR_DATA_TYPE_INT64,
#if DML_TARGET_VERSION >= 0x6300
DML_TENSOR_DATA_TYPE_UINT4,
DML_TENSOR_DATA_TYPE_INT4,
#endif // DML_TARGET_VERSION >= 0x6300
};
enum DML_TENSOR_TYPE
{
DML_TENSOR_TYPE_INVALID,
DML_TENSOR_TYPE_BUFFER,
};
enum DML_TENSOR_FLAGS
{
DML_TENSOR_FLAG_NONE = 0x0,
DML_TENSOR_FLAG_OWNED_BY_DML = 0x1,
};
DEFINE_ENUM_FLAG_OPERATORS(DML_TENSOR_FLAGS)
struct DML_BUFFER_TENSOR_DESC
{
DML_TENSOR_DATA_TYPE DataType;
DML_TENSOR_FLAGS Flags;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Sizes;
_Field_size_opt_(DimensionCount) const UINT* Strides;
UINT64 TotalTensorSizeInBytes;
UINT GuaranteedBaseOffsetAlignment;
};
struct DML_TENSOR_DESC
{
DML_TENSOR_TYPE Type;
_Field_size_(_Inexpressible_("Dependent on tensor type")) const void* Desc;
};
// ===================================================================================================================
// Operator types
// ===================================================================================================================
enum DML_OPERATOR_TYPE
{
DML_OPERATOR_INVALID,
DML_OPERATOR_ELEMENT_WISE_IDENTITY,
DML_OPERATOR_ELEMENT_WISE_ABS,
DML_OPERATOR_ELEMENT_WISE_ACOS,
DML_OPERATOR_ELEMENT_WISE_ADD,
DML_OPERATOR_ELEMENT_WISE_ASIN,
DML_OPERATOR_ELEMENT_WISE_ATAN,
DML_OPERATOR_ELEMENT_WISE_CEIL,
DML_OPERATOR_ELEMENT_WISE_CLIP,
DML_OPERATOR_ELEMENT_WISE_COS,
DML_OPERATOR_ELEMENT_WISE_DIVIDE,
DML_OPERATOR_ELEMENT_WISE_EXP,
DML_OPERATOR_ELEMENT_WISE_FLOOR,
DML_OPERATOR_ELEMENT_WISE_LOG,
DML_OPERATOR_ELEMENT_WISE_LOGICAL_AND,
DML_OPERATOR_ELEMENT_WISE_LOGICAL_EQUALS,
DML_OPERATOR_ELEMENT_WISE_LOGICAL_GREATER_THAN,
DML_OPERATOR_ELEMENT_WISE_LOGICAL_LESS_THAN,
DML_OPERATOR_ELEMENT_WISE_LOGICAL_NOT,
DML_OPERATOR_ELEMENT_WISE_LOGICAL_OR,
DML_OPERATOR_ELEMENT_WISE_LOGICAL_XOR,
DML_OPERATOR_ELEMENT_WISE_MAX,
DML_OPERATOR_ELEMENT_WISE_MEAN,
DML_OPERATOR_ELEMENT_WISE_MIN,
DML_OPERATOR_ELEMENT_WISE_MULTIPLY,
DML_OPERATOR_ELEMENT_WISE_POW,
DML_OPERATOR_ELEMENT_WISE_CONSTANT_POW,
DML_OPERATOR_ELEMENT_WISE_RECIP,
DML_OPERATOR_ELEMENT_WISE_SIN,
DML_OPERATOR_ELEMENT_WISE_SQRT,
DML_OPERATOR_ELEMENT_WISE_SUBTRACT,
DML_OPERATOR_ELEMENT_WISE_TAN,
DML_OPERATOR_ELEMENT_WISE_THRESHOLD,
DML_OPERATOR_ELEMENT_WISE_QUANTIZE_LINEAR,
DML_OPERATOR_ELEMENT_WISE_DEQUANTIZE_LINEAR,
DML_OPERATOR_ACTIVATION_ELU,
DML_OPERATOR_ACTIVATION_HARDMAX,
DML_OPERATOR_ACTIVATION_HARD_SIGMOID,
DML_OPERATOR_ACTIVATION_IDENTITY,
DML_OPERATOR_ACTIVATION_LEAKY_RELU,
DML_OPERATOR_ACTIVATION_LINEAR,
DML_OPERATOR_ACTIVATION_LOG_SOFTMAX,
DML_OPERATOR_ACTIVATION_PARAMETERIZED_RELU,
DML_OPERATOR_ACTIVATION_PARAMETRIC_SOFTPLUS,
DML_OPERATOR_ACTIVATION_RELU,
DML_OPERATOR_ACTIVATION_SCALED_ELU,
DML_OPERATOR_ACTIVATION_SCALED_TANH,
DML_OPERATOR_ACTIVATION_SIGMOID,
DML_OPERATOR_ACTIVATION_SOFTMAX,
DML_OPERATOR_ACTIVATION_SOFTPLUS,
DML_OPERATOR_ACTIVATION_SOFTSIGN,
DML_OPERATOR_ACTIVATION_TANH,
DML_OPERATOR_ACTIVATION_THRESHOLDED_RELU,
DML_OPERATOR_CONVOLUTION,
DML_OPERATOR_GEMM,
DML_OPERATOR_REDUCE,
DML_OPERATOR_AVERAGE_POOLING,
DML_OPERATOR_LP_POOLING,
DML_OPERATOR_MAX_POOLING,
DML_OPERATOR_ROI_POOLING,
DML_OPERATOR_SLICE,
DML_OPERATOR_CAST,
DML_OPERATOR_SPLIT,
DML_OPERATOR_JOIN,
DML_OPERATOR_PADDING,
DML_OPERATOR_VALUE_SCALE_2D,
DML_OPERATOR_UPSAMPLE_2D,
DML_OPERATOR_GATHER,
DML_OPERATOR_SPACE_TO_DEPTH,
DML_OPERATOR_DEPTH_TO_SPACE,
DML_OPERATOR_TILE,
DML_OPERATOR_TOP_K,
DML_OPERATOR_BATCH_NORMALIZATION,
DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION,
DML_OPERATOR_LOCAL_RESPONSE_NORMALIZATION,
DML_OPERATOR_LP_NORMALIZATION,
DML_OPERATOR_RNN,
DML_OPERATOR_LSTM,
DML_OPERATOR_GRU,
#if DML_TARGET_VERSION >= 0x2000
DML_OPERATOR_ELEMENT_WISE_SIGN,
DML_OPERATOR_ELEMENT_WISE_IS_NAN,
DML_OPERATOR_ELEMENT_WISE_ERF,
DML_OPERATOR_ELEMENT_WISE_SINH,
DML_OPERATOR_ELEMENT_WISE_COSH,
DML_OPERATOR_ELEMENT_WISE_TANH,
DML_OPERATOR_ELEMENT_WISE_ASINH,
DML_OPERATOR_ELEMENT_WISE_ACOSH,
DML_OPERATOR_ELEMENT_WISE_ATANH,
DML_OPERATOR_ELEMENT_WISE_IF,
DML_OPERATOR_ELEMENT_WISE_ADD1,
DML_OPERATOR_ACTIVATION_SHRINK,
DML_OPERATOR_MAX_POOLING1,
DML_OPERATOR_MAX_UNPOOLING,
DML_OPERATOR_DIAGONAL_MATRIX,
DML_OPERATOR_SCATTER_ELEMENTS,
DML_OPERATOR_SCATTER = DML_OPERATOR_SCATTER_ELEMENTS, // Alias name for backwards compatibility.
DML_OPERATOR_ONE_HOT,
DML_OPERATOR_RESAMPLE,
#endif // DML_TARGET_VERSION >= 0x2000
#if DML_TARGET_VERSION >= 0x2100
DML_OPERATOR_ELEMENT_WISE_BIT_SHIFT_LEFT,
DML_OPERATOR_ELEMENT_WISE_BIT_SHIFT_RIGHT,
DML_OPERATOR_ELEMENT_WISE_ROUND,
DML_OPERATOR_ELEMENT_WISE_IS_INFINITY,
DML_OPERATOR_ELEMENT_WISE_MODULUS_TRUNCATE,
DML_OPERATOR_ELEMENT_WISE_MODULUS_FLOOR,
DML_OPERATOR_FILL_VALUE_CONSTANT,
DML_OPERATOR_FILL_VALUE_SEQUENCE,
DML_OPERATOR_CUMULATIVE_SUMMATION,
DML_OPERATOR_REVERSE_SUBSEQUENCES,
DML_OPERATOR_GATHER_ELEMENTS,
DML_OPERATOR_GATHER_ND,
DML_OPERATOR_SCATTER_ND,
DML_OPERATOR_MAX_POOLING2,
DML_OPERATOR_SLICE1,
DML_OPERATOR_TOP_K1,
DML_OPERATOR_DEPTH_TO_SPACE1,
DML_OPERATOR_SPACE_TO_DEPTH1,
DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION1,
DML_OPERATOR_RESAMPLE1,
DML_OPERATOR_MATRIX_MULTIPLY_INTEGER,
DML_OPERATOR_QUANTIZED_LINEAR_MATRIX_MULTIPLY,
DML_OPERATOR_CONVOLUTION_INTEGER,
DML_OPERATOR_QUANTIZED_LINEAR_CONVOLUTION,
#endif // DML_TARGET_VERSION >= 0x2100
#if DML_TARGET_VERSION >= 0x3000
DML_OPERATOR_ELEMENT_WISE_BIT_AND,
DML_OPERATOR_ELEMENT_WISE_BIT_OR,
DML_OPERATOR_ELEMENT_WISE_BIT_XOR,
DML_OPERATOR_ELEMENT_WISE_BIT_NOT,
DML_OPERATOR_ELEMENT_WISE_BIT_COUNT,
DML_OPERATOR_ELEMENT_WISE_LOGICAL_GREATER_THAN_OR_EQUAL,
DML_OPERATOR_ELEMENT_WISE_LOGICAL_LESS_THAN_OR_EQUAL,
DML_OPERATOR_ACTIVATION_CELU,
DML_OPERATOR_ACTIVATION_RELU_GRAD,
DML_OPERATOR_AVERAGE_POOLING_GRAD,
DML_OPERATOR_MAX_POOLING_GRAD,
DML_OPERATOR_RANDOM_GENERATOR,
DML_OPERATOR_NONZERO_COORDINATES,
DML_OPERATOR_RESAMPLE_GRAD,
DML_OPERATOR_SLICE_GRAD,
DML_OPERATOR_ADAM_OPTIMIZER,
DML_OPERATOR_ARGMIN,
DML_OPERATOR_ARGMAX,
DML_OPERATOR_ROI_ALIGN,
DML_OPERATOR_GATHER_ND1,
#endif // DML_TARGET_VERSION >= 0x3000
#if DML_TARGET_VERSION >= 0x3100
DML_OPERATOR_ELEMENT_WISE_ATAN_YX,
DML_OPERATOR_ELEMENT_WISE_CLIP_GRAD,
DML_OPERATOR_ELEMENT_WISE_DIFFERENCE_SQUARE,
DML_OPERATOR_LOCAL_RESPONSE_NORMALIZATION_GRAD,
DML_OPERATOR_CUMULATIVE_PRODUCT,
DML_OPERATOR_BATCH_NORMALIZATION_GRAD,
#endif // DML_TARGET_VERSION >= 0x3100
#if DML_TARGET_VERSION >= 0x4000
DML_OPERATOR_ELEMENT_WISE_QUANTIZED_LINEAR_ADD,
DML_OPERATOR_DYNAMIC_QUANTIZE_LINEAR,
DML_OPERATOR_ROI_ALIGN1,
#endif // DML_TARGET_VERSION >= 0x4000
#if DML_TARGET_VERSION >= 0x4100
DML_OPERATOR_ROI_ALIGN_GRAD,
DML_OPERATOR_BATCH_NORMALIZATION_TRAINING,
DML_OPERATOR_BATCH_NORMALIZATION_TRAINING_GRAD,
#endif // DML_TARGET_VERSION >= 0x4100
#if DML_TARGET_VERSION >= 0x5000
DML_OPERATOR_ELEMENT_WISE_CLIP1,
DML_OPERATOR_ELEMENT_WISE_CLIP_GRAD1,
DML_OPERATOR_PADDING1,
DML_OPERATOR_ELEMENT_WISE_NEGATE,
#endif // DML_TARGET_VERSION >= 0x5000
#if DML_TARGET_VERSION >= 0x5100
DML_OPERATOR_ACTIVATION_GELU,
DML_OPERATOR_ACTIVATION_SOFTMAX1,
DML_OPERATOR_ACTIVATION_LOG_SOFTMAX1,
DML_OPERATOR_ACTIVATION_HARDMAX1,
DML_OPERATOR_RESAMPLE2,
DML_OPERATOR_RESAMPLE_GRAD1,
DML_OPERATOR_DIAGONAL_MATRIX1,
#endif // DML_TARGET_VERSION >= 0x5100
#if DML_TARGET_VERSION >= 0x6100
DML_OPERATOR_MULTIHEAD_ATTENTION,
#endif // DML_TARGET_VERSION >= 0x6100
#if DML_TARGET_VERSION >= 0x6200
DML_OPERATOR_LP_POOLING1,
DML_OPERATOR_AVERAGE_POOLING1,
DML_OPERATOR_ACTIVATION_SWISH,
DML_OPERATOR_ACTIVATION_HARD_SWISH,
DML_OPERATOR_QUANTIZED_LINEAR_AVERAGE_POOLING,
DML_OPERATOR_MATRIX_MULTIPLY_INTEGER_TO_FLOAT,
#endif // DML_TARGET_VERSION >= 0x6200
#if DML_TARGET_VERSION >= 0x6300
DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION2,
DML_OPERATOR_MULTIHEAD_ATTENTION1,
DML_OPERATOR_QUANTIZE,
DML_OPERATOR_DEQUANTIZE,
#endif // DML_TARGET_VERSION >= 0x6300
#if DML_TARGET_VERSION >= 0x6400
DML_OPERATOR_RESAMPLE3,
DML_OPERATOR_FOLD,
DML_OPERATOR_UNFOLD,
#endif // DML_TARGET_VERSION >= 0x6400
};
// ===================================================================================================================
// Operator enumerations and structures
// ===================================================================================================================
enum DML_REDUCE_FUNCTION
{
DML_REDUCE_FUNCTION_ARGMAX,
DML_REDUCE_FUNCTION_ARGMIN,
DML_REDUCE_FUNCTION_AVERAGE,
DML_REDUCE_FUNCTION_L1,
DML_REDUCE_FUNCTION_L2,
DML_REDUCE_FUNCTION_LOG_SUM,
DML_REDUCE_FUNCTION_LOG_SUM_EXP,
DML_REDUCE_FUNCTION_MAX,
DML_REDUCE_FUNCTION_MIN,
DML_REDUCE_FUNCTION_MULTIPLY,
DML_REDUCE_FUNCTION_SUM,
DML_REDUCE_FUNCTION_SUM_SQUARE,
};
enum DML_MATRIX_TRANSFORM
{
DML_MATRIX_TRANSFORM_NONE,
DML_MATRIX_TRANSFORM_TRANSPOSE,
};
enum DML_CONVOLUTION_MODE
{
DML_CONVOLUTION_MODE_CONVOLUTION,
DML_CONVOLUTION_MODE_CROSS_CORRELATION,
};
enum DML_CONVOLUTION_DIRECTION
{
DML_CONVOLUTION_DIRECTION_FORWARD,
DML_CONVOLUTION_DIRECTION_BACKWARD,
};
enum DML_PADDING_MODE
{
DML_PADDING_MODE_CONSTANT,
DML_PADDING_MODE_EDGE,
DML_PADDING_MODE_REFLECTION,
#if DML_TARGET_VERSION >= 0x3000
DML_PADDING_MODE_SYMMETRIC,
#endif
#if DML_TARGET_VERSION >= 0x6400
DML_PADDING_MODE_WRAP,
#endif
};
enum DML_INTERPOLATION_MODE
{
DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR,
DML_INTERPOLATION_MODE_LINEAR,
};
struct DML_SCALE_BIAS
{
FLOAT Scale;
FLOAT Bias;
};
struct DML_SIZE_2D
{
UINT Width;
UINT Height;
};
enum DML_RECURRENT_NETWORK_DIRECTION
{
DML_RECURRENT_NETWORK_DIRECTION_FORWARD,
DML_RECURRENT_NETWORK_DIRECTION_BACKWARD,
DML_RECURRENT_NETWORK_DIRECTION_BIDIRECTIONAL,
};
#if DML_TARGET_VERSION >= 0x2100
enum DML_ROUNDING_MODE
{
DML_ROUNDING_MODE_HALVES_TO_NEAREST_EVEN,
DML_ROUNDING_MODE_TOWARD_ZERO,
DML_ROUNDING_MODE_TOWARD_INFINITY,
};
enum DML_IS_INFINITY_MODE
{
DML_IS_INFINITY_MODE_EITHER = 0,
DML_IS_INFINITY_MODE_POSITIVE = 1,
DML_IS_INFINITY_MODE_NEGATIVE = 2,
};
enum DML_AXIS_DIRECTION
{
DML_AXIS_DIRECTION_INCREASING = 0,
DML_AXIS_DIRECTION_DECREASING = 1,
};
enum DML_DEPTH_SPACE_ORDER
{
DML_DEPTH_SPACE_ORDER_DEPTH_COLUMN_ROW,
DML_DEPTH_SPACE_ORDER_COLUMN_ROW_DEPTH,
};
union DML_SCALAR_UNION
{
BYTE Bytes[8];
INT8 Int8;
UINT8 UInt8;
INT16 Int16;
UINT16 UInt16;
INT32 Int32;
UINT32 UInt32;
INT64 Int64;
UINT64 UInt64;
FLOAT Float32;
DOUBLE Float64;
};
#endif // DML_TARGET_VERSION >= 0x2100
#if DML_TARGET_VERSION >= 0x3000
enum DML_RANDOM_GENERATOR_TYPE
{
DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10
};
#endif // DML_TARGET_VERSION >= 0x3000
#if DML_TARGET_VERSION >= 0x6100
enum DML_MULTIHEAD_ATTENTION_MASK_TYPE
{
DML_MULTIHEAD_ATTENTION_MASK_TYPE_NONE,
DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_SEQUENCE_LENGTH,
DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_SEQUENCE_END_START,
DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_QUERY_SEQUENCE_LENGTH_START_END,
DML_MULTIHEAD_ATTENTION_MASK_TYPE_BOOLEAN,
};
#endif // DML_TARGET_VERSION >= 0x6100
#if DML_TARGET_VERSION >= 0x6300
enum DML_QUANTIZATION_TYPE
{
DML_QUANTIZATION_TYPE_NONE,
DML_QUANTIZATION_TYPE_SCALE,
DML_QUANTIZATION_TYPE_SCALE_ZERO_POINT,
};
#endif // DML_TARGET_VERSION >= 0x6300
// ===================================================================================================================
// Operator descriptions
// ===================================================================================================================
struct DML_OPERATOR_DESC
{
DML_OPERATOR_TYPE Type;
_Field_size_(_Inexpressible_("Dependent on operator type")) const void* Desc;
};
struct DML_ELEMENT_WISE_IDENTITY_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_ABS_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_ACOS_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_ADD_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_ADD1_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
};
struct DML_ELEMENT_WISE_ASIN_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_ATAN_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_CEIL_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_CLIP_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
FLOAT Min;
FLOAT Max;
};
struct DML_ELEMENT_WISE_COS_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_DIVIDE_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_EXP_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_FLOOR_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_LOG_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_LOGICAL_AND_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_LOGICAL_EQUALS_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_LOGICAL_GREATER_THAN_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_LOGICAL_LESS_THAN_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_LOGICAL_NOT_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_LOGICAL_OR_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_LOGICAL_XOR_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_MAX_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_MEAN_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_MIN_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_MULTIPLY_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_POW_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* ExponentTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_CONSTANT_POW_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
FLOAT Exponent;
};
struct DML_ELEMENT_WISE_RECIP_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_SIN_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_SQRT_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_SUBTRACT_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_TAN_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_THRESHOLD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
FLOAT Min;
};
struct DML_ELEMENT_WISE_QUANTIZE_LINEAR_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* ScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* ZeroPointTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_DEQUANTIZE_LINEAR_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* ScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* ZeroPointTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_ELU_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Alpha;
};
struct DML_ACTIVATION_HARDMAX_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_HARD_SIGMOID_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Alpha;
FLOAT Beta;
};
struct DML_ACTIVATION_IDENTITY_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_LEAKY_RELU_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Alpha;
};
struct DML_ACTIVATION_LINEAR_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Alpha;
FLOAT Beta;
};
struct DML_ACTIVATION_LOG_SOFTMAX_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_PARAMETERIZED_RELU_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* SlopeTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_PARAMETRIC_SOFTPLUS_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Alpha;
FLOAT Beta;
};
struct DML_ACTIVATION_RELU_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_SCALED_ELU_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Alpha;
FLOAT Gamma;
};
struct DML_ACTIVATION_SCALED_TANH_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Alpha;
FLOAT Beta;
};
struct DML_ACTIVATION_SIGMOID_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_SOFTMAX_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_SOFTPLUS_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Steepness;
};
struct DML_ACTIVATION_SOFTSIGN_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_TANH_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_THRESHOLDED_RELU_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Alpha;
};
struct DML_CONVOLUTION_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* FilterTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_CONVOLUTION_MODE Mode;
DML_CONVOLUTION_DIRECTION Direction;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* Dilations;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
_Field_size_(DimensionCount) const UINT* OutputPadding;
UINT GroupCount;
_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
};
struct DML_GEMM_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
_Maybenull_ const DML_TENSOR_DESC* CTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_MATRIX_TRANSFORM TransA;
DML_MATRIX_TRANSFORM TransB;
FLOAT Alpha;
FLOAT Beta;
_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
};
struct DML_REDUCE_OPERATOR_DESC
{
DML_REDUCE_FUNCTION Function;
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT AxisCount;
_Field_size_(AxisCount) const UINT* Axes;
};
struct DML_AVERAGE_POOLING_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* WindowSize;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
BOOL IncludePadding;
};
struct DML_LP_POOLING_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* WindowSize;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
UINT P;
};
struct DML_MAX_POOLING_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* WindowSize;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
};
struct DML_ROI_POOLING_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* ROITensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT SpatialScale;
DML_SIZE_2D PooledSize;
};
struct DML_SLICE_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Offsets;
_Field_size_(DimensionCount) const UINT* Sizes;
_Field_size_(DimensionCount) const UINT* Strides;
};
struct DML_CAST_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_SPLIT_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
UINT OutputCount;
_Field_size_(OutputCount) const DML_TENSOR_DESC* OutputTensors;
UINT Axis;
};
struct DML_JOIN_OPERATOR_DESC
{
UINT InputCount;
_Field_size_(InputCount) const DML_TENSOR_DESC* InputTensors;
const DML_TENSOR_DESC* OutputTensor;
UINT Axis;
};
struct DML_PADDING_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_PADDING_MODE PaddingMode;
FLOAT PaddingValue;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
};
struct DML_VALUE_SCALE_2D_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Scale;
UINT ChannelCount;
_Field_size_(ChannelCount) const FLOAT* Bias;
};
struct DML_UPSAMPLE_2D_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_SIZE_2D ScaleSize;
DML_INTERPOLATION_MODE InterpolationMode;
};
struct DML_GATHER_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* IndicesTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT Axis;
UINT IndexDimensions;
};
struct DML_SPACE_TO_DEPTH_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT BlockSize;
};
struct DML_DEPTH_TO_SPACE_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT BlockSize;
};
struct DML_TILE_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT RepeatsCount;
_Field_size_(RepeatsCount) const UINT* Repeats;
};
struct DML_TOP_K_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputValueTensor;
const DML_TENSOR_DESC* OutputIndexTensor;
UINT Axis;
UINT K;
};
struct DML_BATCH_NORMALIZATION_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* MeanTensor;
const DML_TENSOR_DESC* VarianceTensor;
const DML_TENSOR_DESC* ScaleTensor;
const DML_TENSOR_DESC* BiasTensor;
const DML_TENSOR_DESC* OutputTensor;
BOOL Spatial;
FLOAT Epsilon;
_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
};
struct DML_MEAN_VARIANCE_NORMALIZATION_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
_Maybenull_ const DML_TENSOR_DESC* ScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
const DML_TENSOR_DESC* OutputTensor;
BOOL CrossChannel;
BOOL NormalizeVariance;
FLOAT Epsilon;
_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
};
struct DML_LOCAL_RESPONSE_NORMALIZATION_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
BOOL CrossChannel;
UINT LocalSize;
FLOAT Alpha;
FLOAT Beta;
FLOAT Bias;
};
struct DML_LP_NORMALIZATION_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT Axis;
FLOAT Epsilon;
UINT P;
};
struct DML_RNN_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* WeightTensor;
const DML_TENSOR_DESC* RecurrenceTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
_Maybenull_ const DML_TENSOR_DESC* HiddenInitTensor;
_Maybenull_ const DML_TENSOR_DESC* SequenceLengthsTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputSequenceTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputSingleTensor;
UINT ActivationDescCount;
_Field_size_(ActivationDescCount) const DML_OPERATOR_DESC* ActivationDescs;
DML_RECURRENT_NETWORK_DIRECTION Direction;
};
struct DML_LSTM_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* WeightTensor;
const DML_TENSOR_DESC* RecurrenceTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
_Maybenull_ const DML_TENSOR_DESC* HiddenInitTensor;
_Maybenull_ const DML_TENSOR_DESC* CellMemInitTensor;
_Maybenull_ const DML_TENSOR_DESC* SequenceLengthsTensor;
_Maybenull_ const DML_TENSOR_DESC* PeepholeTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputSequenceTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputSingleTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputCellSingleTensor;
UINT ActivationDescCount;
_Field_size_(ActivationDescCount) const DML_OPERATOR_DESC* ActivationDescs;
DML_RECURRENT_NETWORK_DIRECTION Direction;
float ClipThreshold;
BOOL UseClipThreshold;
BOOL CoupleInputForget;
};
struct DML_GRU_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* WeightTensor;
const DML_TENSOR_DESC* RecurrenceTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
_Maybenull_ const DML_TENSOR_DESC* HiddenInitTensor;
_Maybenull_ const DML_TENSOR_DESC* SequenceLengthsTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputSequenceTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputSingleTensor;
UINT ActivationDescCount;
_Field_size_(ActivationDescCount) const DML_OPERATOR_DESC* ActivationDescs;
DML_RECURRENT_NETWORK_DIRECTION Direction;
BOOL LinearBeforeReset;
};
#if DML_TARGET_VERSION >= 0x2000
struct DML_ELEMENT_WISE_SIGN_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_IS_NAN_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_ERF_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_SINH_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_COSH_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_TANH_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_ASINH_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_ACOSH_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_ATANH_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
};
struct DML_ELEMENT_WISE_IF_OPERATOR_DESC
{
const DML_TENSOR_DESC* ConditionTensor;
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_SHRINK_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Bias;
FLOAT Threshold;
};
struct DML_MAX_POOLING1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputIndicesTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* WindowSize;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
};
struct DML_MAX_UNPOOLING_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* IndicesTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_DIAGONAL_MATRIX_OPERATOR_DESC
{
const DML_TENSOR_DESC* OutputTensor;
INT Offset;
FLOAT Value;
};
struct DML_SCATTER_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* IndicesTensor;
const DML_TENSOR_DESC* UpdatesTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT Axis;
};
struct DML_ONE_HOT_OPERATOR_DESC
{
const DML_TENSOR_DESC* IndicesTensor;
const DML_TENSOR_DESC* ValuesTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT Axis;
};
struct DML_RESAMPLE_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_INTERPOLATION_MODE InterpolationMode;
UINT ScaleCount;
_Field_size_(ScaleCount) const FLOAT* Scales;
};
#endif // DML_TARGET_VERSION >= 0x2000
#if DML_TARGET_VERSION >= 0x2100
struct DML_ELEMENT_WISE_BIT_SHIFT_LEFT_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_BIT_SHIFT_RIGHT_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_ROUND_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_ROUNDING_MODE RoundingMode;
};
struct DML_ELEMENT_WISE_IS_INFINITY_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_IS_INFINITY_MODE InfinityMode;
};
struct DML_ELEMENT_WISE_MODULUS_TRUNCATE_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_MODULUS_FLOOR_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_FILL_VALUE_CONSTANT_OPERATOR_DESC
{
const DML_TENSOR_DESC* OutputTensor;
DML_TENSOR_DATA_TYPE ValueDataType;
DML_SCALAR_UNION Value;
};
struct DML_FILL_VALUE_SEQUENCE_OPERATOR_DESC
{
const DML_TENSOR_DESC* OutputTensor;
DML_TENSOR_DATA_TYPE ValueDataType;
DML_SCALAR_UNION ValueStart;
DML_SCALAR_UNION ValueDelta;
};
struct DML_CUMULATIVE_SUMMATION_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT Axis;
DML_AXIS_DIRECTION AxisDirection;
BOOL HasExclusiveSum;
};
struct DML_REVERSE_SUBSEQUENCES_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* SequenceLengthsTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT Axis;
};
struct DML_GATHER_ELEMENTS_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* IndicesTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT Axis;
};
// Alias existing operator, symmetric with DML_GATHER_ELEMENTS_OPERATOR_DESC.
using DML_SCATTER_ELEMENTS_OPERATOR_DESC = DML_SCATTER_OPERATOR_DESC;
struct DML_GATHER_ND_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* IndicesTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT InputDimensionCount;
UINT IndicesDimensionCount;
};
struct DML_SCATTER_ND_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* IndicesTensor;
const DML_TENSOR_DESC* UpdatesTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT InputDimensionCount;
UINT IndicesDimensionCount;
};
struct DML_MAX_POOLING2_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputIndicesTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* WindowSize;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
_Field_size_(DimensionCount) const UINT* Dilations;
};
struct DML_SLICE1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* InputWindowOffsets;
_Field_size_(DimensionCount) const UINT* InputWindowSizes;
_Field_size_(DimensionCount) const INT* InputWindowStrides;
};
struct DML_TOP_K1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputValueTensor;
const DML_TENSOR_DESC* OutputIndexTensor;
UINT Axis;
UINT K;
DML_AXIS_DIRECTION AxisDirection;
};
struct DML_DEPTH_TO_SPACE1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT BlockSize;
DML_DEPTH_SPACE_ORDER Order;
};
struct DML_SPACE_TO_DEPTH1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT BlockSize;
DML_DEPTH_SPACE_ORDER Order;
};
struct DML_MEAN_VARIANCE_NORMALIZATION1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
_Maybenull_ const DML_TENSOR_DESC* ScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT AxisCount;
_Field_size_(AxisCount) const UINT* Axes;
BOOL NormalizeVariance;
FLOAT Epsilon;
_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
};
struct DML_RESAMPLE1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_INTERPOLATION_MODE InterpolationMode;
UINT DimensionCount;
_Field_size_(DimensionCount) const FLOAT* Scales;
_Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;
_Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;
};
struct DML_MATRIX_MULTIPLY_INTEGER_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
_Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;
const DML_TENSOR_DESC* BTensor;
_Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* AScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* BScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;
const DML_TENSOR_DESC* OutputScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_CONVOLUTION_INTEGER_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
_Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor;
const DML_TENSOR_DESC* FilterTensor;
_Maybenull_ const DML_TENSOR_DESC* FilterZeroPointTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* Dilations;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
UINT GroupCount;
};
struct DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* InputScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor;
const DML_TENSOR_DESC* FilterTensor;
const DML_TENSOR_DESC* FilterScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* FilterZeroPointTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
const DML_TENSOR_DESC* OutputScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* Dilations;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
UINT GroupCount;
};
#endif // DML_TARGET_VERSION >= 0x2100
#if DML_TARGET_VERSION >= 0x3000
struct DML_ELEMENT_WISE_BIT_AND_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_BIT_OR_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_BIT_XOR_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_BIT_NOT_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_BIT_COUNT_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_LOGICAL_GREATER_THAN_OR_EQUAL_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_LOGICAL_LESS_THAN_OR_EQUAL_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_CELU_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Alpha;
};
struct DML_ACTIVATION_RELU_GRAD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* InputGradientTensor;
const DML_TENSOR_DESC* OutputGradientTensor;
};
struct DML_AVERAGE_POOLING_GRAD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputGradientTensor;
const DML_TENSOR_DESC* OutputGradientTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* WindowSize;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
BOOL IncludePadding;
};
struct DML_MAX_POOLING_GRAD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* InputGradientTensor;
const DML_TENSOR_DESC* OutputGradientTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* WindowSize;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
_Field_size_(DimensionCount) const UINT* Dilations;
};
struct DML_RANDOM_GENERATOR_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputStateTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputStateTensor;
DML_RANDOM_GENERATOR_TYPE Type;
};
struct DML_NONZERO_COORDINATES_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputCountTensor;
const DML_TENSOR_DESC* OutputCoordinatesTensor;
};
struct DML_RESAMPLE_GRAD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputGradientTensor;
const DML_TENSOR_DESC* OutputGradientTensor;
DML_INTERPOLATION_MODE InterpolationMode;
UINT DimensionCount;
_Field_size_(DimensionCount) const FLOAT* Scales;
_Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;
_Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;
};
struct DML_SLICE_GRAD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputGradientTensor;
const DML_TENSOR_DESC* OutputGradientTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* InputWindowOffsets;
_Field_size_(DimensionCount) const UINT* InputWindowSizes;
_Field_size_(DimensionCount) const INT* InputWindowStrides;
};
struct DML_ADAM_OPTIMIZER_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputParametersTensor;
const DML_TENSOR_DESC* InputFirstMomentTensor;
const DML_TENSOR_DESC* InputSecondMomentTensor;
const DML_TENSOR_DESC* GradientTensor;
const DML_TENSOR_DESC* TrainingStepTensor;
const DML_TENSOR_DESC* OutputParametersTensor;
const DML_TENSOR_DESC* OutputFirstMomentTensor;
const DML_TENSOR_DESC* OutputSecondMomentTensor;
FLOAT LearningRate;
FLOAT Beta1;
FLOAT Beta2;
FLOAT Epsilon;
};
struct DML_ARGMIN_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT AxisCount;
_Field_size_(AxisCount) const UINT* Axes;
DML_AXIS_DIRECTION AxisDirection;
};
struct DML_ARGMAX_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT AxisCount;
_Field_size_(AxisCount) const UINT* Axes;
DML_AXIS_DIRECTION AxisDirection;
};
struct DML_ROI_ALIGN_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* ROITensor;
const DML_TENSOR_DESC* BatchIndicesTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_REDUCE_FUNCTION ReductionFunction;
DML_INTERPOLATION_MODE InterpolationMode;
FLOAT SpatialScaleX;
FLOAT SpatialScaleY;
FLOAT OutOfBoundsInputValue;
UINT MinimumSamplesPerOutput;
UINT MaximumSamplesPerOutput;
};
struct DML_GATHER_ND1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* IndicesTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT InputDimensionCount;
UINT IndicesDimensionCount;
UINT BatchDimensionCount;
};
#endif // DML_TARGET_VERSION >= 0x3000
#if DML_TARGET_VERSION >= 0x3100
struct DML_ELEMENT_WISE_ATAN_YX_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ELEMENT_WISE_CLIP_GRAD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* InputGradientTensor;
const DML_TENSOR_DESC* OutputGradientTensor;
FLOAT Min;
FLOAT Max;
};
struct DML_ELEMENT_WISE_DIFFERENCE_SQUARE_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_LOCAL_RESPONSE_NORMALIZATION_GRAD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* InputGradientTensor;
const DML_TENSOR_DESC* OutputGradientTensor;
BOOL CrossChannel;
UINT LocalSize;
FLOAT Alpha;
FLOAT Beta;
FLOAT Bias;
};
struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT Axis;
DML_AXIS_DIRECTION AxisDirection;
BOOL HasExclusiveProduct;
};
struct DML_BATCH_NORMALIZATION_GRAD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* InputGradientTensor;
const DML_TENSOR_DESC* MeanTensor;
const DML_TENSOR_DESC* VarianceTensor;
const DML_TENSOR_DESC* ScaleTensor;
const DML_TENSOR_DESC* OutputGradientTensor;
const DML_TENSOR_DESC* OutputScaleGradientTensor;
const DML_TENSOR_DESC* OutputBiasGradientTensor;
FLOAT Epsilon;
};
#endif // DML_TARGET_VERSION >= 0x3100
#if DML_TARGET_VERSION >= 0x4000
struct DML_ELEMENT_WISE_QUANTIZED_LINEAR_ADD_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* AScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* BScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;
const DML_TENSOR_DESC* OutputScaleTensor; // This is an input tensor
_Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor; // This is an input tensor
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_DYNAMIC_QUANTIZE_LINEAR_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
const DML_TENSOR_DESC* OutputScaleTensor; // This is an output tensor
const DML_TENSOR_DESC* OutputZeroPointTensor; // This is an output tensor
};
struct DML_ROI_ALIGN1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* ROITensor;
const DML_TENSOR_DESC* BatchIndicesTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_REDUCE_FUNCTION ReductionFunction;
DML_INTERPOLATION_MODE InterpolationMode;
FLOAT SpatialScaleX;
FLOAT SpatialScaleY;
FLOAT InputPixelOffset;
FLOAT OutputPixelOffset;
FLOAT OutOfBoundsInputValue;
UINT MinimumSamplesPerOutput;
UINT MaximumSamplesPerOutput;
BOOL AlignRegionsToCorners;
};
#endif // DML_TARGET_VERSION >= 0x4000
#if DML_TARGET_VERSION >= 0x4100
struct DML_ROI_ALIGN_GRAD_OPERATOR_DESC
{
_Maybenull_ const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* InputGradientTensor;
const DML_TENSOR_DESC* ROITensor;
const DML_TENSOR_DESC* BatchIndicesTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputGradientTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputROIGradientTensor;
DML_REDUCE_FUNCTION ReductionFunction;
DML_INTERPOLATION_MODE InterpolationMode;
FLOAT SpatialScaleX;
FLOAT SpatialScaleY;
FLOAT InputPixelOffset;
FLOAT OutputPixelOffset;
UINT MinimumSamplesPerOutput;
UINT MaximumSamplesPerOutput;
BOOL AlignRegionsToCorners;
};
struct DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* ScaleTensor;
const DML_TENSOR_DESC* BiasTensor;
_Maybenull_ const DML_TENSOR_DESC* FusedAddTensor;
const DML_TENSOR_DESC* OutputTensor;
const DML_TENSOR_DESC* OutputMeanTensor;
const DML_TENSOR_DESC* OutputVarianceTensor;
FLOAT Epsilon;
_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
};
struct DML_BATCH_NORMALIZATION_TRAINING_GRAD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* InputGradientTensor;
const DML_TENSOR_DESC* MeanTensor;
const DML_TENSOR_DESC* VarianceTensor;
const DML_TENSOR_DESC* ScaleTensor;
const DML_TENSOR_DESC* OutputGradientTensor;
const DML_TENSOR_DESC* OutputScaleGradientTensor;
const DML_TENSOR_DESC* OutputBiasGradientTensor;
FLOAT Epsilon;
};
#endif // DML_TARGET_VERSION >= 0x4100
#if DML_TARGET_VERSION >= 0x5000
struct DML_ELEMENT_WISE_CLIP1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_SCALE_BIAS* ScaleBias;
DML_TENSOR_DATA_TYPE MinMaxDataType;
DML_SCALAR_UNION Min;
DML_SCALAR_UNION Max;
};
struct DML_ELEMENT_WISE_CLIP_GRAD1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* InputGradientTensor;
const DML_TENSOR_DESC* OutputGradientTensor;
DML_TENSOR_DATA_TYPE MinMaxDataType;
DML_SCALAR_UNION Min;
DML_SCALAR_UNION Max;
};
struct DML_PADDING1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_PADDING_MODE PaddingMode;
DML_TENSOR_DATA_TYPE PaddingValueDataType;
DML_SCALAR_UNION PaddingValue;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
};
struct DML_ELEMENT_WISE_NEGATE_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
#endif // DML_TARGET_VERSION >= 0x5000
#if DML_TARGET_VERSION >= 0x5100
struct DML_ACTIVATION_GELU_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_ACTIVATION_SOFTMAX1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT AxisCount;
_Field_size_(AxisCount) const UINT* Axes;
};
struct DML_ACTIVATION_LOG_SOFTMAX1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT AxisCount;
_Field_size_(AxisCount) const UINT* Axes;
};
struct DML_ACTIVATION_HARDMAX1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT AxisCount;
_Field_size_(AxisCount) const UINT* Axes;
};
struct DML_RESAMPLE2_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_INTERPOLATION_MODE InterpolationMode;
DML_AXIS_DIRECTION RoundingDirection;
UINT DimensionCount;
_Field_size_(DimensionCount) const FLOAT* Scales;
_Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;
_Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;
};
struct DML_RESAMPLE_GRAD1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputGradientTensor;
const DML_TENSOR_DESC* OutputGradientTensor;
DML_INTERPOLATION_MODE InterpolationMode;
DML_AXIS_DIRECTION RoundingDirection;
UINT DimensionCount;
_Field_size_(DimensionCount) const FLOAT* Scales;
_Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;
_Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;
};
struct DML_DIAGONAL_MATRIX1_OPERATOR_DESC
{
_Maybenull_ const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_TENSOR_DATA_TYPE ValueDataType;
DML_SCALAR_UNION Value;
INT DiagonalFillBegin;
INT DiagonalFillEnd;
};
#endif // DML_TARGET_VERSION >= 0x5100
#if DML_TARGET_VERSION >= 0x6100
struct DML_MULTIHEAD_ATTENTION_OPERATOR_DESC
{
_Maybenull_ const DML_TENSOR_DESC* QueryTensor;
_Maybenull_ const DML_TENSOR_DESC* KeyTensor;
_Maybenull_ const DML_TENSOR_DESC* ValueTensor;
_Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyTensor;
_Maybenull_ const DML_TENSOR_DESC* StackedKeyValueTensor;
_Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyValueTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
_Maybenull_ const DML_TENSOR_DESC* MaskTensor;
_Maybenull_ const DML_TENSOR_DESC* RelativePositionBiasTensor;
_Maybenull_ const DML_TENSOR_DESC* PastKeyTensor;
_Maybenull_ const DML_TENSOR_DESC* PastValueTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputPresentKeyTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputPresentValueTensor;
FLOAT Scale;
FLOAT MaskFilterValue;
UINT HeadCount;
DML_MULTIHEAD_ATTENTION_MASK_TYPE MaskType;
};
#endif // DML_TARGET_VERSION >= 0x6100
#if DML_TARGET_VERSION >= 0x6200
struct DML_LP_POOLING1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* WindowSize;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
_Field_size_(DimensionCount) const UINT* Dilations;
UINT P;
};
struct DML_AVERAGE_POOLING1_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* WindowSize;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
_Field_size_(DimensionCount) const UINT* Dilations;
BOOL IncludePadding;
};
struct DML_ACTIVATION_SWISH_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT SigmoidInputScale;
};
struct DML_ACTIVATION_HARD_SWISH_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
FLOAT Alpha;
FLOAT Beta;
};
struct DML_QUANTIZED_LINEAR_AVERAGE_POOLING_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* InputScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor;
const DML_TENSOR_DESC* OutputScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* WindowSize;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
_Field_size_(DimensionCount) const UINT* Dilations;
BOOL IncludePadding;
};
struct DML_MATRIX_MULTIPLY_INTEGER_TO_FLOAT_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* AScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* BScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
const DML_TENSOR_DESC* OutputTensor;
};
#endif // DML_TARGET_VERSION >= 0x6200
#if DML_TARGET_VERSION >= 0x6300
struct DML_MEAN_VARIANCE_NORMALIZATION2_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
_Maybenull_ const DML_TENSOR_DESC* ScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT AxisCount;
_Field_size_(AxisCount) const UINT* Axes;
BOOL UseMean;
BOOL UseVariance;
FLOAT Epsilon;
_Maybenull_ const DML_OPERATOR_DESC* FusedActivation;
};
struct DML_MULTIHEAD_ATTENTION1_OPERATOR_DESC
{
_Maybenull_ const DML_TENSOR_DESC* QueryTensor;
_Maybenull_ const DML_TENSOR_DESC* KeyTensor;
_Maybenull_ const DML_TENSOR_DESC* ValueTensor;
_Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyTensor;
_Maybenull_ const DML_TENSOR_DESC* StackedKeyValueTensor;
_Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyValueTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
_Maybenull_ const DML_TENSOR_DESC* MaskTensor;
_Maybenull_ const DML_TENSOR_DESC* RelativePositionBiasTensor;
_Maybenull_ const DML_TENSOR_DESC* PastKeyTensor;
_Maybenull_ const DML_TENSOR_DESC* PastValueTensor;
_Maybenull_ const DML_TENSOR_DESC* PastSequenceLengthsTensor;
const DML_TENSOR_DESC* OutputTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputPresentKeyTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputPresentValueTensor;
FLOAT Scale;
FLOAT MaskFilterValue;
UINT QueryHeadCount;
UINT KeyValueHeadCount;
DML_MULTIHEAD_ATTENTION_MASK_TYPE MaskType;
};
struct DML_QUANTIZE_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
DML_QUANTIZATION_TYPE QuantizationType;
UINT QuantizationTensorCount;
_Field_size_(QuantizationTensorCount) const DML_TENSOR_DESC* QuantizationTensors;
const DML_TENSOR_DESC* OutputTensor;
};
struct DML_DEQUANTIZE_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
DML_QUANTIZATION_TYPE QuantizationType;
UINT QuantizationTensorCount;
_Field_size_(QuantizationTensorCount) const DML_TENSOR_DESC* QuantizationTensors;
const DML_TENSOR_DESC* OutputTensor;
};
#endif // DML_TARGET_VERSION >= 0x6300
#if DML_TARGET_VERSION >= 0x6400
struct DML_RESAMPLE3_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
DML_INTERPOLATION_MODE InterpolationMode;
DML_AXIS_DIRECTION RoundingDirection;
UINT DimensionCount;
_Field_size_(DimensionCount) const FLOAT* Scales;
_Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;
_Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;
BOOL Antialiased;
};
struct DML_FOLD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* WindowSizes; // Size of the extracted patch
_Field_size_(DimensionCount) const UINT* Strides; // Step size of the extracted patches
_Field_size_(DimensionCount) const UINT* Dilations; // Dialations of the extracted patch
_Field_size_(DimensionCount) const UINT* StartPadding; // Start padding of the "source tensor"
_Field_size_(DimensionCount) const UINT* EndPadding; // End padding of the "source tensor"
};
struct DML_UNFOLD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* WindowSizes; // Size of the extracted patch
_Field_size_(DimensionCount) const UINT* Strides; // Step size of the extracted patches
_Field_size_(DimensionCount) const UINT* Dilations; // Dialations of the extracted patch
_Field_size_(DimensionCount) const UINT* StartPadding; // Start padding of the "source tensor"
_Field_size_(DimensionCount) const UINT* EndPadding; // End padding of the "source tensor"
};
#endif // DML_TARGET_VERSION >= 0x6400
// ===================================================================================================================
// DML feature support queries
// ===================================================================================================================
#if DML_TARGET_VERSION >= 0x2000
enum DML_FEATURE_LEVEL
{
DML_FEATURE_LEVEL_1_0 = 0x1000,
DML_FEATURE_LEVEL_2_0 = 0x2000,
DML_FEATURE_LEVEL_2_1 = 0x2100,
DML_FEATURE_LEVEL_3_0 = 0x3000,
DML_FEATURE_LEVEL_3_1 = 0x3100,
DML_FEATURE_LEVEL_4_0 = 0x4000,
DML_FEATURE_LEVEL_4_1 = 0x4100,
DML_FEATURE_LEVEL_5_0 = 0x5000,
DML_FEATURE_LEVEL_5_1 = 0x5100,
DML_FEATURE_LEVEL_5_2 = 0x5200,
DML_FEATURE_LEVEL_6_0 = 0x6000,
DML_FEATURE_LEVEL_6_1 = 0x6100,
DML_FEATURE_LEVEL_6_2 = 0x6200,
DML_FEATURE_LEVEL_6_3 = 0x6300,
DML_FEATURE_LEVEL_6_4 = 0x6400,
};
#endif // DML_TARGET_VERSION >= 0x2000
enum DML_FEATURE
{
DML_FEATURE_TENSOR_DATA_TYPE_SUPPORT,
#if DML_TARGET_VERSION >= 0x2000
DML_FEATURE_FEATURE_LEVELS,
#endif // DML_TARGET_VERSION >= 0x2000
};
struct DML_FEATURE_QUERY_TENSOR_DATA_TYPE_SUPPORT
{
DML_TENSOR_DATA_TYPE DataType;
};
struct DML_FEATURE_DATA_TENSOR_DATA_TYPE_SUPPORT
{
BOOL IsSupported;
};
#if DML_TARGET_VERSION >= 0x2000
struct DML_FEATURE_QUERY_FEATURE_LEVELS
{
UINT RequestedFeatureLevelCount;
_Field_size_(RequestedFeatureLevelCount) const DML_FEATURE_LEVEL* RequestedFeatureLevels;
};
struct DML_FEATURE_DATA_FEATURE_LEVELS
{
DML_FEATURE_LEVEL MaxSupportedFeatureLevel;
};
#endif // DML_TARGET_VERSION >= 0x2000
// ===================================================================================================================
// DML device functions, enumerations, and structures
// ===================================================================================================================
struct DML_BINDING_TABLE_DESC
{
IDMLDispatchable* Dispatchable;
D3D12_CPU_DESCRIPTOR_HANDLE CPUDescriptorHandle;
D3D12_GPU_DESCRIPTOR_HANDLE GPUDescriptorHandle;
UINT SizeInDescriptors;
};
enum DML_EXECUTION_FLAGS
{
DML_EXECUTION_FLAG_NONE = 0,
DML_EXECUTION_FLAG_ALLOW_HALF_PRECISION_COMPUTATION = 0x1,
DML_EXECUTION_FLAG_DISABLE_META_COMMANDS = 0x2,
DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE = 0x4,
};
DEFINE_ENUM_FLAG_OPERATORS(DML_EXECUTION_FLAGS)
enum DML_CREATE_DEVICE_FLAGS
{
DML_CREATE_DEVICE_FLAG_NONE = 0,
DML_CREATE_DEVICE_FLAG_DEBUG = 0x1,
};
DEFINE_ENUM_FLAG_OPERATORS(DML_CREATE_DEVICE_FLAGS)
STDAPI DMLCreateDevice(
ID3D12Device* d3d12Device,
DML_CREATE_DEVICE_FLAGS flags,
REFIID riid, // Expected: IDMLDevice
_COM_Outptr_opt_ void** ppv
);
#if DML_TARGET_VERSION >= 0x2000
STDAPI DMLCreateDevice1(
ID3D12Device* d3d12Device,
DML_CREATE_DEVICE_FLAGS flags,
DML_FEATURE_LEVEL minimumFeatureLevel,
REFIID riid, // Expected: IDMLDevice
_COM_Outptr_opt_ void** ppv
);
#endif // DML_TARGET_VERSION >= 0x2000
// ===================================================================================================================
// DML object
// ===================================================================================================================
interface DML_DECLARE_INTERFACE("c8263aac-9e0c-4a2d-9b8e-007521a3317c") IDMLObject : IUnknown
{
IFACEMETHOD(GetPrivateData)(
REFGUID guid,
_Inout_ UINT* dataSize,
_Out_writes_bytes_opt_(*dataSize) void* data
) = 0;
IFACEMETHOD(SetPrivateData)(
REFGUID guid,
UINT dataSize,
_In_reads_bytes_opt_(dataSize) const void* data
) = 0;
IFACEMETHOD(SetPrivateDataInterface)(
REFGUID guid,
_In_opt_ IUnknown* data
) = 0;
IFACEMETHOD(SetName)(
PCWSTR name
) = 0;
};
// ===================================================================================================================
// DML device
// ===================================================================================================================
interface DML_DECLARE_INTERFACE("6dbd6437-96fd-423f-a98c-ae5e7c2a573f") IDMLDevice : IDMLObject
{
IFACEMETHOD(CheckFeatureSupport)(
DML_FEATURE feature,
UINT featureQueryDataSize,
_In_reads_bytes_opt_(featureQueryDataSize) const void* featureQueryData,
UINT featureSupportDataSize,
_Out_writes_bytes_(featureSupportDataSize) void* featureSupportData
) = 0;
IFACEMETHOD(CreateOperator)(
const DML_OPERATOR_DESC* desc,
REFIID riid, // expected: IDMLOperator
_COM_Outptr_opt_ void** ppv
) = 0;
IFACEMETHOD(CompileOperator)(
IDMLOperator* op,
DML_EXECUTION_FLAGS flags,
REFIID riid, // expected: IDMLCompiledOperator
_COM_Outptr_opt_ void** ppv
) = 0;
IFACEMETHOD(CreateOperatorInitializer)(
UINT operatorCount,
_In_reads_opt_(operatorCount) IDMLCompiledOperator* const* operators,
REFIID riid, // expected: IDMLOperatorInitializer
_COM_Outptr_ void** ppv
) = 0;
IFACEMETHOD(CreateCommandRecorder)(
REFIID riid, // expected: IDMLCommandRecorder
_COM_Outptr_ void** ppv
) = 0;
IFACEMETHOD(CreateBindingTable)(
_In_opt_ const DML_BINDING_TABLE_DESC* desc,
REFIID riid, // expected: IDMLBindingTable
_COM_Outptr_ void** ppv
) = 0;
IFACEMETHOD(Evict)(
UINT count,
_In_reads_(count) IDMLPageable* const* ppObjects
) = 0;
IFACEMETHOD(MakeResident)(
UINT count,
_In_reads_(count) IDMLPageable* const* ppObjects
) = 0;
IFACEMETHOD(GetDeviceRemovedReason)(
) = 0;
IFACEMETHOD(GetParentDevice)(
REFIID riid,
_COM_Outptr_ void** ppv
) = 0;
};
// ===================================================================================================================
// DML device children
// ===================================================================================================================
interface DML_DECLARE_INTERFACE("27e83142-8165-49e3-974e-2fd66e4cb69d") IDMLDeviceChild : IDMLObject
{
IFACEMETHOD(GetDevice)(
REFIID riid, // expected: IDMLDevice
_COM_Outptr_ void** ppv
) = 0;
};
interface DML_DECLARE_INTERFACE("b1ab0825-4542-4a4b-8617-6dde6e8f6201") IDMLPageable : IDMLDeviceChild
{
};
// ===================================================================================================================
// DML operator
// ===================================================================================================================
interface DML_DECLARE_INTERFACE("26caae7a-3081-4633-9581-226fbe57695d") IDMLOperator : IDMLDeviceChild
{
};
// ===================================================================================================================
// DML dispatchable
// ===================================================================================================================
struct DML_BINDING_PROPERTIES
{
UINT RequiredDescriptorCount;
UINT64 TemporaryResourceSize;
UINT64 PersistentResourceSize;
};
interface DML_DECLARE_INTERFACE("dcb821a8-1039-441e-9f1c-b1759c2f3cec") IDMLDispatchable : IDMLPageable
{
IFACEMETHOD_(DML_BINDING_PROPERTIES, GetBindingProperties)() = 0;
};
// ===================================================================================================================
// DML compiled operator
// ===================================================================================================================
interface DML_DECLARE_INTERFACE("6b15e56a-bf5c-4902-92d8-da3a650afea4") IDMLCompiledOperator : IDMLDispatchable
{
};
// ===================================================================================================================
// DML operator initializer
// ===================================================================================================================
interface DML_DECLARE_INTERFACE("427c1113-435c-469c-8676-4d5dd072f813") IDMLOperatorInitializer : IDMLDispatchable
{
IFACEMETHOD(Reset)(
UINT operatorCount,
_In_reads_opt_(operatorCount) IDMLCompiledOperator* const* operators
) = 0;
};
// ===================================================================================================================
// DML binding table
// ===================================================================================================================
enum DML_BINDING_TYPE
{
DML_BINDING_TYPE_NONE,
DML_BINDING_TYPE_BUFFER,
DML_BINDING_TYPE_BUFFER_ARRAY,
};
struct DML_BINDING_DESC
{
DML_BINDING_TYPE Type;
_Field_size_opt_(_Inexpressible_("Dependent on binding type")) const void* Desc;
};
struct DML_BUFFER_BINDING
{
_Maybenull_ ID3D12Resource* Buffer;
UINT64 Offset;
UINT64 SizeInBytes;
};
struct DML_BUFFER_ARRAY_BINDING
{
UINT BindingCount;
_Field_size_(BindingCount) const DML_BUFFER_BINDING* Bindings;
};
interface DML_DECLARE_INTERFACE("29c687dc-de74-4e3b-ab00-1168f2fc3cfc") IDMLBindingTable : IDMLDeviceChild
{
IFACEMETHOD_(void, BindInputs)(
UINT bindingCount,
_In_reads_opt_(bindingCount) const DML_BINDING_DESC* bindings
) = 0;
IFACEMETHOD_(void, BindOutputs)(
UINT bindingCount,
_In_reads_opt_(bindingCount) const DML_BINDING_DESC* bindings
) = 0;
IFACEMETHOD_(void, BindTemporaryResource)(
_In_opt_ const DML_BINDING_DESC* binding
) = 0;
IFACEMETHOD_(void, BindPersistentResource)(
_In_opt_ const DML_BINDING_DESC* binding
) = 0;
IFACEMETHOD(Reset)(
_In_opt_ const DML_BINDING_TABLE_DESC* desc
) = 0;
};
// ===================================================================================================================
// DML command recorder
// ===================================================================================================================
interface DML_DECLARE_INTERFACE("e6857a76-2e3e-4fdd-bff4-5d2ba10fb453") IDMLCommandRecorder : IDMLDeviceChild
{
IFACEMETHOD_(void, RecordDispatch)(
ID3D12CommandList* commandList,
IDMLDispatchable* dispatchable,
IDMLBindingTable* bindings
) = 0;
};
// ===================================================================================================================
// DML debug
// ===================================================================================================================
interface DML_DECLARE_INTERFACE("7d6f3ac9-394a-4ac3-92a7-390cc57a8217") IDMLDebugDevice : IUnknown
{
IFACEMETHOD_(void, SetMuteDebugOutput)(
BOOL mute
) = 0;
};
// ===================================================================================================================
// DML graph
// ===================================================================================================================
#if DML_TARGET_VERSION >= 0x2100
enum DML_GRAPH_EDGE_TYPE
{
DML_GRAPH_EDGE_TYPE_INVALID,
DML_GRAPH_EDGE_TYPE_INPUT,
DML_GRAPH_EDGE_TYPE_OUTPUT,
DML_GRAPH_EDGE_TYPE_INTERMEDIATE,
};
struct DML_GRAPH_EDGE_DESC
{
DML_GRAPH_EDGE_TYPE Type;
_Field_size_(_Inexpressible_("Dependent on edge type")) const void* Desc;
};
struct DML_INPUT_GRAPH_EDGE_DESC
{
UINT GraphInputIndex;
UINT ToNodeIndex;
UINT ToNodeInputIndex;
_Field_z_ _Maybenull_ const char* Name;
};
struct DML_OUTPUT_GRAPH_EDGE_DESC
{
UINT FromNodeIndex;
UINT FromNodeOutputIndex;
UINT GraphOutputIndex;
_Field_z_ _Maybenull_ const char* Name;
};
struct DML_INTERMEDIATE_GRAPH_EDGE_DESC
{
UINT FromNodeIndex;
UINT FromNodeOutputIndex;
UINT ToNodeIndex;
UINT ToNodeInputIndex;
_Field_z_ _Maybenull_ const char* Name;
};
enum DML_GRAPH_NODE_TYPE
{
DML_GRAPH_NODE_TYPE_INVALID,
DML_GRAPH_NODE_TYPE_OPERATOR,
#if DML_TARGET_VERSION >= 0x6200
DML_GRAPH_NODE_TYPE_CONSTANT
#endif // DML_TARGET_VERSION >= 0x6200
};
struct DML_GRAPH_NODE_DESC
{
DML_GRAPH_NODE_TYPE Type;
_Field_size_(_Inexpressible_("Dependent on node type")) const void* Desc;
};
struct DML_OPERATOR_GRAPH_NODE_DESC
{
IDMLOperator* Operator;
_Field_z_ _Maybenull_ const char* Name;
};
#if DML_TARGET_VERSION >= 0x6200
struct DML_CONSTANT_DATA_GRAPH_NODE_DESC
{
_Field_size_bytes_(DataSize) const void* Data;
SIZE_T DataSize;
_Field_z_ _Maybenull_ const char* Name;
};
#endif // DML_TARGET_VERSION >= 0x6200
struct DML_GRAPH_DESC
{
UINT InputCount;
UINT OutputCount;
UINT NodeCount;
_Field_size_(NodeCount) const DML_GRAPH_NODE_DESC* Nodes;
UINT InputEdgeCount;
_Field_size_opt_(InputEdgeCount) const DML_GRAPH_EDGE_DESC* InputEdges;
UINT OutputEdgeCount;
_Field_size_(OutputEdgeCount) const DML_GRAPH_EDGE_DESC* OutputEdges;
UINT IntermediateEdgeCount;
_Field_size_opt_(IntermediateEdgeCount) const DML_GRAPH_EDGE_DESC* IntermediateEdges;
};
interface DML_DECLARE_INTERFACE("a0884f9a-d2be-4355-aa5d-5901281ad1d2") IDMLDevice1 : IDMLDevice
{
IFACEMETHOD(CompileGraph)(
const DML_GRAPH_DESC* desc,
DML_EXECUTION_FLAGS flags,
REFIID riid, // expected: IDMLCompiledOperator
_COM_Outptr_opt_ void** ppv
) = 0;
};
#endif // DML_TARGET_VERSION >= 0x2100
#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES)
#endif // DIRECTML_H