onnxruntime/winml/lib/Common/inc/CommonDeviceHelpers.h
Sheil Kumar 2717c178cc
Fork the WinML APIs into the Microsoft namespace (#3503)
* Migrate winml to Microsoft Namespace (packaging changes are pending)

* add ns_prefix toggle

* fix packaging

* Users/sheilk/add missing raw header (#3484)

* add dualapipartition

* wrong variable for repo root

Co-authored-by: Sheil Kumar <sheilk@microsoft.com>

* remove existence check to force failures

* extra paren

* dualapipartition needs to be referenced from the source

* add microsoft.ai.machinelearning.dll to the output dir

* rename the idl file so that assembly info is correctly added into the winmd

* fix namespaces

* update namespaces

* default to microsoft, and add namespace override as build argument

* update cmakesetings.json as well

* remove from cmakelists.txt

Co-authored-by: Sheil Kumar <sheilk@microsoft.com>
Co-authored-by: Changming Sun <chasun@microsoft.com>
2020-04-17 06:18:54 -07:00

49 lines
1.5 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#pragma once
#include <dxgi1_6.h>
#include <initguid.h>
#include <d3d11.h>
#if __has_include("dxcore.h")
#define ENABLE_DXCORE 1
#endif
#ifdef ENABLE_DXCORE
#include <dxcore.h>
#endif
//
// Exception information
//
#ifndef FACILITY_VISUALCPP
#define FACILITY_VISUALCPP ((LONG)0x6d)
#endif
#define VcppException(sev, err) ((sev) | (FACILITY_VISUALCPP << 16) | err)
namespace CommonDeviceHelpers {
struct AdapterEnumerationSupport {
bool has_dxgi;
bool has_dxcore;
};
// uses Structured Exception Handling (SEH) to detect for delay load failures of target API.
// You cannot mix and match SEH with C++ exception and object unwinding
// In this case we will catch it, and report up to the caller via HRESULT so our callers can use
// C++ exceptions
template <typename TFunc, typename... TArgs>
HRESULT RunDelayLoadedApi(TFunc& tfunc, TArgs&&... args) {
__try {
return tfunc(std::forward<TArgs>(args)...);
} __except (GetExceptionCode() == VcppException(ERROR_SEVERITY_ERROR, ERROR_MOD_NOT_FOUND) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
// this could be ok, just let people know that it failed to load
return HRESULT_FROM_WIN32(ERROR_MOD_NOT_FOUND);
}
}
HRESULT GetAdapterEnumerationSupport(AdapterEnumerationSupport* support);
bool IsFloat16Supported(ID3D12Device* device);
bool IsFloat16Supported(const winml::LearningModelDevice& device);
} // namespace CommonDeviceHelpers