Skip to content

Commit 9691af1

Browse files
sumitsayssmk2007Sheil Kumarfdwr
authored
[DML EP] Update DirectML Helper files (#21709)
### Description Now since 1.18.2 uses DML 1.15.1, it requires to update the corresponding DirectML helper files as well. It is not needed for 1.18.1 because 1.18.1 is not using DML1.14.0 ### Motivation and Context <!-- - Why is this change required? What problem does it solve? - If it fixes an open issue, please link to the issue here. --> Co-authored-by: Sheil Kumar <[email protected]> Co-authored-by: Sheil Kumar <[email protected]> Co-authored-by: Dwayne Robinson <[email protected]>
1 parent f4f4953 commit 9691af1

File tree

10 files changed

+226
-62
lines changed

10 files changed

+226
-62
lines changed

docs/OperatorKernels.md

+6-2
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,7 @@ Do not modify directly.*
969969
|||12+|**T** = tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
970970
|||11+|**T** = tensor(float), tensor(float16)|
971971
|||6+|**T** = tensor(float), tensor(float16)|
972+
|Col2Im|*in* input:**T**<br> *in* image_shape:**tensor(int64)**<br> *in* block_shape:**tensor(int64)**<br> *out* output:**T**|18+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
972973
|Concat|*in* inputs:**T**<br> *out* concat_result:**T**|13+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
973974
|||11+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
974975
|||4+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
@@ -1129,7 +1130,8 @@ Do not modify directly.*
11291130
|PRelu|*in* X:**T**<br> *in* slope:**T**<br> *out* Y:**T**|16+|**T** = tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int8)|
11301131
|||9+|**T** = tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int8)|
11311132
|||7+|**T** = tensor(float), tensor(float16)|
1132-
|Pad|*in* data:**T**<br> *in* pads:**tensor(int64)**<br> *in* constant_value:**T**<br> *in* axes:**Tind**<br> *out* output:**T**<br><br>or<br><br>*in* data:**T**<br> *in* pads:**tensor(int64)**<br> *in* constant_value:**T**<br> *out* output:**T**<br><br>or<br><br>*in* data:**T**<br> *out* output:**T**|18+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
1133+
|Pad|*in* data:**T**<br> *in* pads:**tensor(int64)**<br> *in* constant_value:**T**<br> *in* axes:**Tind**<br> *out* output:**T**<br><br>or<br><br>*in* data:**T**<br> *in* pads:**tensor(int64)**<br> *in* constant_value:**T**<br> *out* output:**T**<br><br>or<br><br>*in* data:**T**<br> *out* output:**T**|19+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
1134+
|||18+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
11331135
|||13+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
11341136
|||11+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
11351137
|||2+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
@@ -1197,7 +1199,9 @@ Do not modify directly.*
11971199
|||14+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
11981200
|||13+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
11991201
|||5+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|
1200-
|Resize|*in* X:**T**<br> *in* scales:**tensor(float)**<br> *out* Y:**T**<br><br>or<br><br>*in* X:**T1**<br> *in* roi:**T2**<br> *in* scales:**tensor(float)**<br> *in* sizes:**tensor(int64)**<br> *out* Y:**T1**|13+|**T1** = tensor(float), tensor(float16), tensor(int8), tensor(uint8)<br/> **T2** = tensor(float), tensor(float16)|
1202+
|Resize|*in* X:**T**<br> *in* scales:**tensor(float)**<br> *out* Y:**T**<br><br>or<br><br>*in* X:**T1**<br> *in* roi:**T2**<br> *in* scales:**tensor(float)**<br> *in* sizes:**tensor(int64)**<br> *out* Y:**T1**|19+|**T1** = tensor(float), tensor(float16), tensor(int8), tensor(uint8)<br/> **T2** = tensor(float), tensor(float16)|
1203+
|||18+|**T1** = tensor(float), tensor(float16), tensor(int8), tensor(uint8)<br/> **T2** = tensor(float), tensor(float16)|
1204+
|||13+|**T1** = tensor(float), tensor(float16), tensor(int8), tensor(uint8)<br/> **T2** = tensor(float), tensor(float16)|
12011205
|||11+|**T1** = tensor(float), tensor(float16), tensor(int8), tensor(uint8)<br/> **T2** = tensor(float), tensor(float16)|
12021206
|||10+|**T** = tensor(float), tensor(float16)|
12031207
|ReverseSequence|*in* input:**T**<br> *in* sequence_lens:**tensor(int64)**<br> *out* Y:**T**|10+|**T** = tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8)|

onnxruntime/core/providers/dml/DmlExecutionProvider/src/ApiTraits.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//---------------------------------------------------------------------------
1+
//---------------------------------------------------------------------------
22
// Copyright (c) Microsoft Corporation. All rights reserved.
33
//
44
// This file is automatically generated. Please do not edit it directly.
@@ -241,6 +241,7 @@ DML_OPERATOR_TYPE ApiTraits::StringifyHelpers::FromString(std::string_view value
241241
{"DML_OPERATOR_ACTIVATION_SWISH", DML_OPERATOR_ACTIVATION_SWISH},
242242
{"DML_OPERATOR_ACTIVATION_HARD_SWISH", DML_OPERATOR_ACTIVATION_HARD_SWISH},
243243
{"DML_OPERATOR_RESAMPLE2", DML_OPERATOR_RESAMPLE2},
244+
{"DML_OPERATOR_RESAMPLE3", DML_OPERATOR_RESAMPLE3},
244245
{"DML_OPERATOR_RESAMPLE_GRAD1", DML_OPERATOR_RESAMPLE_GRAD1},
245246
{"DML_OPERATOR_DIAGONAL_MATRIX1", DML_OPERATOR_DIAGONAL_MATRIX1},
246247
{"DML_OPERATOR_MULTIHEAD_ATTENTION", DML_OPERATOR_MULTIHEAD_ATTENTION},
@@ -250,6 +251,9 @@ DML_OPERATOR_TYPE ApiTraits::StringifyHelpers::FromString(std::string_view value
250251
{"DML_OPERATOR_MULTIHEAD_ATTENTION1", DML_OPERATOR_MULTIHEAD_ATTENTION1},
251252
{"DML_OPERATOR_QUANTIZE", DML_OPERATOR_QUANTIZE},
252253
{"DML_OPERATOR_DEQUANTIZE", DML_OPERATOR_DEQUANTIZE},
254+
{"DML_OPERATOR_ROI_ALIGN_GRAD", DML_OPERATOR_ROI_ALIGN_GRAD},
255+
{"DML_OPERATOR_FOLD", DML_OPERATOR_FOLD},
256+
{"DML_OPERATOR_UNFOLD", DML_OPERATOR_UNFOLD},
253257
};
254258
auto index = StringUtil::MapToIndex(value, mapping);
255259
if (!index)
@@ -369,6 +373,7 @@ DML_PADDING_MODE ApiTraits::StringifyHelpers::FromString(std::string_view value)
369373
{"DML_PADDING_MODE_EDGE", DML_PADDING_MODE_EDGE},
370374
{"DML_PADDING_MODE_REFLECTION", DML_PADDING_MODE_REFLECTION},
371375
{"DML_PADDING_MODE_SYMMETRIC", DML_PADDING_MODE_SYMMETRIC},
376+
{"DML_PADDING_MODE_WRAP", DML_PADDING_MODE_WRAP},
372377
};
373378
auto index = StringUtil::MapToIndex(value, mapping);
374379
if (!index)
@@ -454,6 +459,7 @@ DML_FEATURE_LEVEL ApiTraits::StringifyHelpers::FromString(std::string_view value
454459
{"DML_FEATURE_LEVEL_6_1", DML_FEATURE_LEVEL_6_1},
455460
{"DML_FEATURE_LEVEL_6_2", DML_FEATURE_LEVEL_6_2},
456461
{"DML_FEATURE_LEVEL_6_3", DML_FEATURE_LEVEL_6_3},
462+
{"DML_FEATURE_LEVEL_6_4", DML_FEATURE_LEVEL_6_4},
457463
};
458464
auto index = StringUtil::MapToIndex(value, mapping);
459465
if (!index)

onnxruntime/core/providers/dml/DmlExecutionProvider/src/External/DirectMLHelpers/ApiHelpers.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ union ActivationOperatorDescUnion
2929
DML_ACTIVATION_THRESHOLDED_RELU_OPERATOR_DESC thresholdedRelu;
3030
DML_ACTIVATION_SHRINK_OPERATOR_DESC shrink;
3131
DML_ACTIVATION_GELU_OPERATOR_DESC gelu;
32+
DML_ACTIVATION_SWISH_OPERATOR_DESC swish;
33+
DML_ACTIVATION_HARD_SWISH_OPERATOR_DESC hardSwish;
34+
DML_ELEMENT_WISE_CLIP_OPERATOR_DESC clip;
3235
};
3336

3437
struct ActivationOperatorDesc
@@ -46,7 +49,7 @@ struct ActivationOperatorDesc
4649
case DML_OPERATOR_ACTIVATION_CELU: return { activationType, &params.celu };
4750
case DML_OPERATOR_ACTIVATION_HARDMAX: return { activationType, &params.hardmax };
4851
case DML_OPERATOR_ACTIVATION_HARDMAX1: return { activationType, &params.hardmax1 };
49-
case DML_OPERATOR_ACTIVATION_HARD_SIGMOID: return { activationType, &params.sigmoid };
52+
case DML_OPERATOR_ACTIVATION_HARD_SIGMOID: return { activationType, &params.hardSigmoid };
5053
case DML_OPERATOR_ACTIVATION_IDENTITY: return { activationType, &params.identity };
5154
case DML_OPERATOR_ACTIVATION_LEAKY_RELU: return { activationType, &params.leakyRelu };
5255
case DML_OPERATOR_ACTIVATION_LINEAR: return { activationType, &params.linear };
@@ -66,6 +69,9 @@ struct ActivationOperatorDesc
6669
case DML_OPERATOR_ACTIVATION_THRESHOLDED_RELU: return { activationType, &params.thresholdedRelu };
6770
case DML_OPERATOR_ACTIVATION_SHRINK: return { activationType, &params.shrink };
6871
case DML_OPERATOR_ACTIVATION_GELU: return { activationType, &params.gelu };
72+
case DML_OPERATOR_ACTIVATION_SWISH: return { activationType, &params.swish };
73+
case DML_OPERATOR_ACTIVATION_HARD_SWISH: return { activationType, &params.hardSwish };
74+
case DML_OPERATOR_ELEMENT_WISE_CLIP: return { activationType, &params.clip };
6975
default:
7076
ORT_THROW_HR(E_INVALIDARG);
7177
return { activationType, &params.relu };

onnxruntime/core/providers/dml/DmlExecutionProvider/src/External/DirectMLHelpers/ApiTraits.h

+52-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Microsoft Corporation. All rights reserved.
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33
#pragma once
44

@@ -24,7 +24,7 @@ struct EnumTraits<DML_TENSOR_TYPE>
2424
template <>
2525
struct EnumTraits<DML_OPERATOR_TYPE>
2626
{
27-
static constexpr auto ValueCount = 174;
27+
static constexpr auto ValueCount = 178;
2828
static constexpr size_t ActivationFunctionCount = 26;
2929
};
3030

@@ -62,7 +62,7 @@ struct EnumTraits<DML_CONVOLUTION_DIRECTION>
6262
template <>
6363
struct EnumTraits<DML_PADDING_MODE>
6464
{
65-
static constexpr auto ValueCount = 4;
65+
static constexpr auto ValueCount = 5;
6666
};
6767

6868
template <>
@@ -86,7 +86,7 @@ struct EnumTraits<DML_FEATURE>
8686
template <>
8787
struct EnumTraits<DML_FEATURE_LEVEL>
8888
{
89-
static constexpr auto ValueCount = 14;
89+
static constexpr auto ValueCount = 15;
9090
};
9191

9292
template <>
@@ -1023,6 +1023,12 @@ struct OperatorDescTraits<DML_RESAMPLE2_OPERATOR_DESC>
10231023
static constexpr DML_OPERATOR_TYPE Type = DML_OPERATOR_RESAMPLE2;
10241024
};
10251025

1026+
template <>
1027+
struct OperatorDescTraits<DML_RESAMPLE3_OPERATOR_DESC>
1028+
{
1029+
static constexpr DML_OPERATOR_TYPE Type = DML_OPERATOR_RESAMPLE3;
1030+
};
1031+
10261032
template <>
10271033
struct OperatorDescTraits<DML_RESAMPLE_GRAD1_OPERATOR_DESC>
10281034
{
@@ -1053,6 +1059,18 @@ struct OperatorDescTraits<DML_MATRIX_MULTIPLY_INTEGER_TO_FLOAT_OPERATOR_DESC>
10531059
static constexpr DML_OPERATOR_TYPE Type = DML_OPERATOR_MATRIX_MULTIPLY_INTEGER_TO_FLOAT;
10541060
};
10551061

1062+
template <>
1063+
struct OperatorDescTraits<DML_FOLD_OPERATOR_DESC>
1064+
{
1065+
static constexpr DML_OPERATOR_TYPE Type = DML_OPERATOR_FOLD;
1066+
};
1067+
1068+
template <>
1069+
struct OperatorDescTraits<DML_UNFOLD_OPERATOR_DESC>
1070+
{
1071+
static constexpr DML_OPERATOR_TYPE Type = DML_OPERATOR_UNFOLD;
1072+
};
1073+
10561074
template <>
10571075
struct OperatorDescTraits<DML_MEAN_VARIANCE_NORMALIZATION2_OPERATOR_DESC>
10581076
{
@@ -2073,6 +2091,12 @@ struct OperatorTypeTraits<(DML_OPERATOR_TYPE)DML_OPERATOR_RESAMPLE2>
20732091
using DescType = DML_RESAMPLE2_OPERATOR_DESC;
20742092
};
20752093

2094+
template <>
2095+
struct OperatorTypeTraits<(DML_OPERATOR_TYPE)DML_OPERATOR_RESAMPLE3>
2096+
{
2097+
using DescType = DML_RESAMPLE3_OPERATOR_DESC;
2098+
};
2099+
20762100
template <>
20772101
struct OperatorTypeTraits<(DML_OPERATOR_TYPE)DML_OPERATOR_RESAMPLE_GRAD1>
20782102
{
@@ -2103,6 +2127,18 @@ struct OperatorTypeTraits<(DML_OPERATOR_TYPE)DML_OPERATOR_MATRIX_MULTIPLY_INTEGE
21032127
using DescType = DML_MATRIX_MULTIPLY_INTEGER_TO_FLOAT_OPERATOR_DESC;
21042128
};
21052129

2130+
template <>
2131+
struct OperatorTypeTraits<(DML_OPERATOR_TYPE)DML_OPERATOR_FOLD>
2132+
{
2133+
using DescType = DML_FOLD_OPERATOR_DESC;
2134+
};
2135+
2136+
template <>
2137+
struct OperatorTypeTraits<(DML_OPERATOR_TYPE)DML_OPERATOR_UNFOLD>
2138+
{
2139+
using DescType = DML_UNFOLD_OPERATOR_DESC;
2140+
};
2141+
21062142
template <>
21072143
struct OperatorTypeTraits<(DML_OPERATOR_TYPE)DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION2>
21082144
{
@@ -2575,6 +2611,8 @@ auto OperatorTypeVisitor(DML_OPERATOR_TYPE type, Visitor&& visitor, Ts&&... args
25752611
return std::invoke(std::forward<Visitor>(visitor), DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC{}, std::forward<Ts>(args)...);
25762612
case DML_OPERATOR_RESAMPLE2:
25772613
return std::invoke(std::forward<Visitor>(visitor), DML_RESAMPLE2_OPERATOR_DESC{}, std::forward<Ts>(args)...);
2614+
case DML_OPERATOR_RESAMPLE3:
2615+
return std::invoke(std::forward<Visitor>(visitor), DML_RESAMPLE3_OPERATOR_DESC{}, std::forward<Ts>(args)...);
25782616
case DML_OPERATOR_RESAMPLE_GRAD1:
25792617
return std::invoke(std::forward<Visitor>(visitor), DML_RESAMPLE_GRAD1_OPERATOR_DESC{}, std::forward<Ts>(args)...);
25802618
case DML_OPERATOR_DIAGONAL_MATRIX1:
@@ -2585,6 +2623,10 @@ auto OperatorTypeVisitor(DML_OPERATOR_TYPE type, Visitor&& visitor, Ts&&... args
25852623
return std::invoke(std::forward<Visitor>(visitor), DML_QUANTIZED_LINEAR_AVERAGE_POOLING_OPERATOR_DESC{}, std::forward<Ts>(args)...);
25862624
case DML_OPERATOR_MATRIX_MULTIPLY_INTEGER_TO_FLOAT:
25872625
return std::invoke(std::forward<Visitor>(visitor), DML_MATRIX_MULTIPLY_INTEGER_TO_FLOAT_OPERATOR_DESC{}, std::forward<Ts>(args)...);
2626+
case DML_OPERATOR_FOLD:
2627+
return std::invoke(std::forward<Visitor>(visitor), DML_FOLD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
2628+
case DML_OPERATOR_UNFOLD:
2629+
return std::invoke(std::forward<Visitor>(visitor), DML_UNFOLD_OPERATOR_DESC{}, std::forward<Ts>(args)...);
25882630
case DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION2:
25892631
return std::invoke(std::forward<Visitor>(visitor), DML_MEAN_VARIANCE_NORMALIZATION2_OPERATOR_DESC{}, std::forward<Ts>(args)...);
25902632
case DML_OPERATOR_MULTIHEAD_ATTENTION1:
@@ -2650,7 +2692,6 @@ auto OperatorTypeVisitor(DML_OPERATOR_TYPE type, Visitor&& visitor, Ts&&... args
26502692
}
26512693
}
26522694

2653-
26542695
namespace StringifyHelpers
26552696
{
26562697
template <typename T>
@@ -2871,6 +2912,7 @@ inline gsl::czstring ToString(DML_OPERATOR_TYPE value)
28712912
case DML_OPERATOR_ACTIVATION_SWISH: return "DML_OPERATOR_ACTIVATION_SWISH";
28722913
case DML_OPERATOR_ACTIVATION_HARD_SWISH: return "DML_OPERATOR_ACTIVATION_HARD_SWISH";
28732914
case DML_OPERATOR_RESAMPLE2: return "DML_OPERATOR_RESAMPLE2";
2915+
case DML_OPERATOR_RESAMPLE3: return "DML_OPERATOR_RESAMPLE3";
28742916
case DML_OPERATOR_RESAMPLE_GRAD1: return "DML_OPERATOR_RESAMPLE_GRAD1";
28752917
case DML_OPERATOR_DIAGONAL_MATRIX1: return "DML_OPERATOR_DIAGONAL_MATRIX1";
28762918
case DML_OPERATOR_MULTIHEAD_ATTENTION: return "DML_OPERATOR_MULTIHEAD_ATTENTION";
@@ -2880,6 +2922,9 @@ inline gsl::czstring ToString(DML_OPERATOR_TYPE value)
28802922
case DML_OPERATOR_MULTIHEAD_ATTENTION1: return "DML_OPERATOR_MULTIHEAD_ATTENTION1";
28812923
case DML_OPERATOR_QUANTIZE: return "DML_OPERATOR_QUANTIZE";
28822924
case DML_OPERATOR_DEQUANTIZE: return "DML_OPERATOR_DEQUANTIZE";
2925+
case DML_OPERATOR_ROI_ALIGN_GRAD: return "DML_OPERATOR_ROI_ALIGN_GRAD";
2926+
case DML_OPERATOR_FOLD: return "DML_OPERATOR_FOLD";
2927+
case DML_OPERATOR_UNFOLD: return "DML_OPERATOR_UNFOLD";
28832928
default:
28842929
assert(false);
28852930
return "<unknown>";
@@ -2971,6 +3016,7 @@ inline gsl::czstring ToString(DML_PADDING_MODE value)
29713016
case DML_PADDING_MODE_EDGE: return "DML_PADDING_MODE_EDGE";
29723017
case DML_PADDING_MODE_REFLECTION: return "DML_PADDING_MODE_REFLECTION";
29733018
case DML_PADDING_MODE_SYMMETRIC: return "DML_PADDING_MODE_SYMMETRIC";
3019+
case DML_PADDING_MODE_WRAP: return "DML_PADDING_MODE_WRAP";
29743020
default:
29753021
assert(false);
29763022
return "<unknown>";
@@ -3036,6 +3082,7 @@ inline gsl::czstring ToString(DML_FEATURE_LEVEL value)
30363082
case DML_FEATURE_LEVEL_6_1: return "DML_FEATURE_LEVEL_6_1";
30373083
case DML_FEATURE_LEVEL_6_2: return "DML_FEATURE_LEVEL_6_2";
30383084
case DML_FEATURE_LEVEL_6_3: return "DML_FEATURE_LEVEL_6_3";
3085+
case DML_FEATURE_LEVEL_6_4: return "DML_FEATURE_LEVEL_6_4";
30393086
default:
30403087
assert(false);
30413088
return "<unknown>";

0 commit comments

Comments
 (0)