diff --git a/onnxruntime/core/providers/dml/OperatorAuthorHelper/OperatorHelper.cpp b/onnxruntime/core/providers/dml/OperatorAuthorHelper/OperatorHelper.cpp index 9f3a0ed7e6..2d4526d71c 100644 --- a/onnxruntime/core/providers/dml/OperatorAuthorHelper/OperatorHelper.cpp +++ b/onnxruntime/core/providers/dml/OperatorAuthorHelper/OperatorHelper.cpp @@ -32,6 +32,23 @@ void HandleNegativeAxes(gsl::span onnxAxes, uint32_t dimCount) } } +void FillWithLeadingValues(/*inout*/ std::vector& values, uint32_t minimumElementCount, uint32_t fillValue) +{ + // e.g. + // input = [6,7] + // elementCount = 4 + // fillValue = 1 + // output = [1,1,6,7] + + const size_t oldElementCount = values.size(); + const size_t newElementCount = std::max(size_t(minimumElementCount), oldElementCount); + const size_t fillCount = newElementCount - oldElementCount; + + values.resize(newElementCount); + std::copy_backward(values.data(), values.data() + oldElementCount, values.data() + fillCount); + std::fill_n(values.data(), fillCount, fillValue); +} + int64_t ReadAsInt64(MLOperatorTensorDataType tensorDataType, const void* p) { switch (tensorDataType) diff --git a/onnxruntime/core/providers/dml/OperatorAuthorHelper/OperatorHelper.h b/onnxruntime/core/providers/dml/OperatorAuthorHelper/OperatorHelper.h index aa8486117f..6940ed3a85 100644 --- a/onnxruntime/core/providers/dml/OperatorAuthorHelper/OperatorHelper.h +++ b/onnxruntime/core/providers/dml/OperatorAuthorHelper/OperatorHelper.h @@ -75,6 +75,8 @@ void RemoveValuesByIndex(gsl::span indices, bool keepOneValue, / values.resize(newValuesCount); } +void FillWithLeadingValues(/*inout*/ std::vector& values, uint32_t minimumElementCount, uint32_t fillValue); + int64_t ReadAsInt64(MLOperatorTensorDataType tensorDataType, const void* p); class EdgeShapes { @@ -641,7 +643,7 @@ public: std::vector m_outputDimensions; std::vector m_offsets; std::vector m_sizes; - std::vector m_strides; + std::vector m_strides; }; class SliceHelper : public SliceHelperBase