@@ -99,8 +99,12 @@ void DmlExecutionProviderReleaseCompletedReferences() {
9999 THROW_IF_NOT_OK_MSG (winml_adapter_api->DmlExecutionProviderReleaseCompletedReferences (ort_provider), ort_api);
100100}
101101
102+ constexpr std::array<int64_t , 4 > dimensions{1 , 3 , 720 , 720 };
103+ constexpr uint64_t tensor_size = 3 * 720 * 720 ;
104+ std::array<float , tensor_size> tensor_values = {};
105+
102106winrt::com_ptr<ID3D12Resource> CreateD3D12Resource (ID3D12Device& device) {
103- constexpr uint64_t buffer_size = 720 * 720 * 3 * sizeof (float );
107+ constexpr uint64_t buffer_size = tensor_size * sizeof (float );
104108 constexpr D3D12_HEAP_PROPERTIES heap_properties = {
105109 D3D12_HEAP_TYPE_DEFAULT,
106110 D3D12_CPU_PAGE_PROPERTY_UNKNOWN,
@@ -163,12 +167,8 @@ void DmlGetD3D12ResourceFromAllocation() {
163167}
164168
165169UniqueOrtValue CreateTensorFromMemoryInfo (OrtMemoryInfo* memory_info) {
166- constexpr std::array<int64_t , 4 > dimensions{1 , 3 , 720 , 720 };
167- auto input_tensor_size = std::accumulate (begin (dimensions), end (dimensions), static_cast <int64_t >(1 ), std::multiplies<int64_t >());
168- std::vector<float > input_tensor_values (input_tensor_size);
169-
170170 OrtValue* tensor;
171- THROW_IF_NOT_OK_MSG (ort_api->CreateTensorWithDataAsOrtValue (memory_info, input_tensor_values .data (), input_tensor_size * sizeof (float ), dimensions.data (), dimensions.size (), ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT, &tensor), ort_api);
171+ THROW_IF_NOT_OK_MSG (ort_api->CreateTensorWithDataAsOrtValue (memory_info, tensor_values .data (), tensor_size * sizeof (float ), dimensions.data (), dimensions.size (), ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT, &tensor), ort_api);
172172 return UniqueOrtValue (tensor, ort_api->ReleaseValue );
173173}
174174
@@ -246,7 +246,7 @@ void DmlCopyTensor() {
246246
247247 // CPU to CPU is not supported
248248 OrtMemoryInfo* cpu_memory_info;
249- THROW_IF_NOT_OK_MSG (ort_api->CreateCpuMemoryInfo (OrtArenaAllocator , OrtMemTypeDefault, &cpu_memory_info), ort_api);
249+ THROW_IF_NOT_OK_MSG (ort_api->CreateCpuMemoryInfo (OrtDeviceAllocator , OrtMemTypeDefault, &cpu_memory_info), ort_api);
250250 auto cpu_tensor = CreateTensorFromMemoryInfo (cpu_memory_info);
251251 auto dst_cpu_tensor = CreateTensorFromMemoryInfo (cpu_memory_info);
252252 WINML_EXPECT_NOT_EQUAL (nullptr , winml_adapter_api->DmlCopyTensor (dml_provider, cpu_tensor.get (), dst_cpu_tensor.get ()));
@@ -271,18 +271,9 @@ void DmlCopyTensor() {
271271 ONNXTensorElementDataType::ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT,
272272 &gpu_value),
273273 ort_api);
274- // Create DML tensor data interface
275- Microsoft::WRL::ComPtr<_winml::OnnxruntimeValue> data_value;
276- WINML_EXPECT_HRESULT_SUCCEEDED (Microsoft::WRL::MakeAndInitialize<_winml::OnnxruntimeValue>(
277- &data_value,
278- nullptr ,
279- UniqueOrtValue (gpu_value, ort_api->ReleaseValue ),
280- UniqueOrtAllocator (nullptr , nullptr )));
281274 dst_cpu_tensor = CreateTensorFromMemoryInfo (cpu_memory_info);
282275 THROW_IF_NOT_OK_MSG (winml_adapter_api->DmlCopyTensor (dml_provider, gpu_value, dst_cpu_tensor.get ()), ort_api);
283276
284- // Free the tensor before the allocator
285- data_value = nullptr ;
286277 THROW_IF_NOT_OK_MSG (winml_adapter_api->DmlFreeGPUAllocation (dml_allocator_resource), ort_api);
287278}
288279
@@ -306,7 +297,7 @@ void ValueGetDeviceId() {
306297 THROW_IF_NOT_OK_MSG (winml_adapter_api->ValueGetDeviceId (gpu_tensor.get (), &device_id), ort_api);
307298
308299 OrtMemoryInfo* cpu_memory_info;
309- THROW_IF_NOT_OK_MSG (ort_api->CreateCpuMemoryInfo (OrtArenaAllocator , OrtMemTypeDefault, &cpu_memory_info), ort_api);
300+ THROW_IF_NOT_OK_MSG (ort_api->CreateCpuMemoryInfo (OrtDeviceAllocator , OrtMemTypeDefault, &cpu_memory_info), ort_api);
310301 auto unique_cpu_memory_info = UniqueOrtMemoryInfo (memory_info, ort_api->ReleaseMemoryInfo );
311302 auto cpu_tensor = CreateTensorFromMemoryInfo (unique_cpu_memory_info.get ());
312303 THROW_IF_NOT_OK_MSG (winml_adapter_api->ValueGetDeviceId (cpu_tensor.get (), &device_id), ort_api);
0 commit comments