-
-
Notifications
You must be signed in to change notification settings - Fork 339
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f4f9095
commit f03de78
Showing
17 changed files
with
8,163 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
MIT License | ||
|
||
Copyright (c) Microsoft Corporation | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
#pragma once | ||
|
||
#include "onnxruntime_c_api.h" | ||
|
||
// COREMLFlags are bool options we want to set for CoreML EP | ||
// This enum is defined as bit flags, and cannot have negative value | ||
// To generate an uint32_t coreml_flags for using with OrtSessionOptionsAppendExecutionProvider_CoreML below, | ||
// uint32_t coreml_flags = 0; | ||
// coreml_flags |= COREML_FLAG_USE_CPU_ONLY; | ||
enum COREMLFlags { | ||
COREML_FLAG_USE_NONE = 0x000, | ||
|
||
// Using CPU only in CoreML EP, this may decrease the perf but will provide | ||
// reference output value without precision loss, which is useful for validation | ||
COREML_FLAG_USE_CPU_ONLY = 0x001, | ||
|
||
// Enable CoreML EP on subgraph | ||
COREML_FLAG_ENABLE_ON_SUBGRAPH = 0x002, | ||
|
||
// By default CoreML Execution provider will be enabled for all compatible Apple devices | ||
// Enable this option will only enable CoreML EP for Apple devices with ANE (Apple Neural Engine) | ||
// Please note, enable this option does not guarantee the entire model to be executed using ANE only | ||
COREML_FLAG_ONLY_ENABLE_DEVICE_WITH_ANE = 0x004, | ||
|
||
// Keep COREML_FLAG_MAX at the end of the enum definition | ||
// And assign the last COREMLFlag to it | ||
COREML_FLAG_LAST = COREML_FLAG_ONLY_ENABLE_DEVICE_WITH_ANE, | ||
}; | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
ORT_EXPORT ORT_API_STATUS(OrtSessionOptionsAppendExecutionProvider_CoreML, | ||
_In_ OrtSessionOptions* options, uint32_t coreml_flags); | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
|
||
#include "onnxruntime_c_api.h" | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
/** | ||
* \param use_arena zero: false. non-zero: true. | ||
*/ | ||
ORT_EXPORT | ||
ORT_API_STATUS(OrtSessionOptionsAppendExecutionProvider_CPU, _In_ OrtSessionOptions* options, int use_arena) | ||
ORT_ALL_ARGS_NONNULL; | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
|
||
#pragma once | ||
|
||
#pragma warning(push) | ||
#pragma warning(disable : 4201) // nonstandard extension used: nameless struct/union | ||
#ifdef _GAMING_XBOX_SCARLETT | ||
#include <d3d12_xs.h> | ||
#elif defined(_GAMING_XBOX_XBOXONE) | ||
#include <d3d12_x.h> | ||
#else | ||
#include <d3d12.h> | ||
#endif | ||
#pragma warning(pop) | ||
|
||
#ifdef __cplusplus | ||
#include <DirectML.h> | ||
#else | ||
struct IDMLDevice; | ||
typedef struct IDMLDevice IDMLDevice; | ||
#endif | ||
|
||
// Windows pollutes the macro space, causing a build break in constants.h. | ||
#undef OPTIONAL | ||
|
||
#include "onnxruntime_c_api.h" | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
/** | ||
* [[deprecated]] | ||
* This export is deprecated. | ||
* The OrtSessionOptionsAppendExecutionProvider_DML export on the OrtDmlApi should be used instead. | ||
* | ||
* Creates a DirectML Execution Provider which executes on the hardware adapter with the given device_id, also known as | ||
* the adapter index. The device ID corresponds to the enumeration order of hardware adapters as given by | ||
* IDXGIFactory::EnumAdapters. A device_id of 0 always corresponds to the default adapter, which is typically the | ||
* primary display GPU installed on the system. A negative device_id is invalid. | ||
*/ | ||
ORT_API_STATUS(OrtSessionOptionsAppendExecutionProvider_DML, _In_ OrtSessionOptions* options, int device_id); | ||
|
||
/** | ||
* [[deprecated]] | ||
* This export is deprecated. | ||
* The OrtSessionOptionsAppendExecutionProvider_DML1 export on the OrtDmlApi should be used instead. | ||
* | ||
* Creates a DirectML Execution Provider using the given DirectML device, and which executes work on the supplied D3D12 | ||
* command queue. The DirectML device and D3D12 command queue must have the same parent ID3D12Device, or an error will | ||
* be returned. The D3D12 command queue must be of type DIRECT or COMPUTE (see D3D12_COMMAND_LIST_TYPE). If this | ||
* function succeeds, the inference session maintains a strong reference on both the dml_device and the command_queue | ||
* objects. | ||
* See also: DMLCreateDevice | ||
* See also: ID3D12Device::CreateCommandQueue | ||
*/ | ||
ORT_API_STATUS(OrtSessionOptionsAppendExecutionProviderEx_DML, _In_ OrtSessionOptions* options, | ||
_In_ IDMLDevice* dml_device, _In_ ID3D12CommandQueue* cmd_queue); | ||
|
||
|
||
struct OrtDmlApi; | ||
typedef struct OrtDmlApi OrtDmlApi; | ||
|
||
struct OrtDmlApi { | ||
/** | ||
* Creates a DirectML Execution Provider which executes on the hardware adapter with the given device_id, also known as | ||
* the adapter index. The device ID corresponds to the enumeration order of hardware adapters as given by | ||
* IDXGIFactory::EnumAdapters. A device_id of 0 always corresponds to the default adapter, which is typically the | ||
* primary display GPU installed on the system. A negative device_id is invalid. | ||
*/ | ||
ORT_API2_STATUS(SessionOptionsAppendExecutionProvider_DML, _In_ OrtSessionOptions* options, int device_id); | ||
|
||
/** | ||
* Creates a DirectML Execution Provider using the given DirectML device, and which executes work on the supplied D3D12 | ||
* command queue. The DirectML device and D3D12 command queue must have the same parent ID3D12Device, or an error will | ||
* be returned. The D3D12 command queue must be of type DIRECT or COMPUTE (see D3D12_COMMAND_LIST_TYPE). If this | ||
* function succeeds, the inference session maintains a strong reference on both the dml_device and the command_queue | ||
* objects. | ||
* See also: DMLCreateDevice | ||
* See also: ID3D12Device::CreateCommandQueue | ||
*/ | ||
ORT_API2_STATUS(SessionOptionsAppendExecutionProvider_DML1, _In_ OrtSessionOptions* options, | ||
_In_ IDMLDevice* dml_device, _In_ ID3D12CommandQueue* cmd_queue); | ||
|
||
/** | ||
* CreateGPUAllocationFromD3DResource | ||
* This API creates a DML EP resource based on a user-specified D3D12 resource. | ||
*/ | ||
ORT_API2_STATUS(CreateGPUAllocationFromD3DResource, _In_ ID3D12Resource* d3d_resource, _Out_ void** dml_resource); | ||
|
||
/** | ||
* FreeGPUAllocation | ||
* This API frees the DML EP resource created by CreateGPUAllocationFromD3DResource. | ||
*/ | ||
ORT_API2_STATUS(FreeGPUAllocation, _In_ void* dml_resource); | ||
|
||
/** | ||
* GetD3D12ResourceFromAllocation | ||
* This API gets the D3D12 resource when an OrtValue has been allocated by the DML EP. | ||
*/ | ||
ORT_API2_STATUS(GetD3D12ResourceFromAllocation, _In_ OrtAllocator* provider, _In_ void* dml_resource, _Out_ ID3D12Resource** d3d_resource); | ||
}; | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif |
Oops, something went wrong.