forked from microsoft/DirectX-Headers
-
Notifications
You must be signed in to change notification settings - Fork 0
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
0 parents
commit 1ec6cd7
Showing
27 changed files
with
33,867 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,58 @@ | ||
# Copyright (c) Microsoft Corporation. | ||
# Licensed under the MIT License. | ||
|
||
cmake_minimum_required(VERSION 3.10.2) | ||
project(DirectX-Headers | ||
LANGUAGES CXX | ||
VERSION 1.0) | ||
|
||
include(GNUInstallDirs) | ||
|
||
# Enables consumers to add this library as a link target to automatically add | ||
# these include directories, regardless of whether this is referenced via subdirectory | ||
# or from an installed location | ||
add_library(DirectX-Headers INTERFACE) | ||
target_include_directories(DirectX-Headers SYSTEM INTERFACE | ||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" | ||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>" | ||
) | ||
|
||
# For non-Windows targets, also add the WSL stubs to the include path | ||
if (NOT WIN32) | ||
target_include_directories(DirectX-Headers SYSTEM INTERFACE | ||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/wsl/stubs>" | ||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/wsl/stubs>" | ||
) | ||
endif() | ||
|
||
add_library(DirectX-Guids STATIC src/dxguids.cpp) | ||
target_link_libraries(DirectX-Guids PRIVATE DirectX-Headers) | ||
|
||
# Install the targets | ||
install(TARGETS DirectX-Headers DirectX-Guids | ||
EXPORT DirectX-Headers-Targets | ||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) | ||
# Create the targets CMake file which contains the above definitions | ||
install(EXPORT DirectX-Headers-Targets FILE directx-headers-targets.cmake | ||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/directx-headers/cmake) | ||
|
||
# Install the actual includes | ||
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/" | ||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) | ||
|
||
# Create the CMake config files | ||
include(CMakePackageConfigHelpers) | ||
write_basic_package_version_file("directx-headers-config-version.cmake" | ||
VERSION ${PROJECT_VERSION} | ||
COMPATIBILITY SameMajorVersion) | ||
configure_package_config_file( | ||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/directx-headers-config.cmake.in" | ||
"${CMAKE_CURRENT_BINARY_DIR}/directx-headers-config.cmake" | ||
INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/directx-headers/cmake) | ||
|
||
# Install the CMake config files | ||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/directx-headers-config.cmake" | ||
"${CMAKE_CURRENT_BINARY_DIR}/directx-headers-config-version.cmake" | ||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/directx-headers/cmake) | ||
|
||
add_subdirectory(test) |
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 @@ | ||
Copyright (c) Microsoft Corporation. | ||
|
||
MIT License | ||
|
||
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,45 @@ | ||
# DirectX Headers | ||
|
||
This repository hosts the official Direct3D 12 headers. These headers are made available under the MIT license rather than the traditional Windows SDK license. | ||
|
||
Additionally, this repository hosts several helpers for using these headers. | ||
|
||
## Directory Structure | ||
|
||
* `/`: Build files are available here for quick integration. CMake is provided, and can be referenced either via `subdirectory()` or after installation to a system location. Meson is also available for inclusion as a subproject/wrap. | ||
* `/include/directx`: These files are the core headers for using D3D12, plus d3dx12.h, which is a helper and does not cross the boundaries of the D3D12 API. | ||
* `/include/wsl`: These files are provided as a shim to be able to include the D3D12 headers from a Linux build environment, without requiring the rest of the Windows SDK. | ||
* `/include/dxguids`: This header allows an application to use `uuidof<T>()` consistently between Windows and WSL, instead of `__uuidof()`. | ||
* `/src/dxguids.cpp`: This cpp file can be used as a replacement for linking against `dxguid.lib` on Windows, and as a convenient translation unit to define GUIDs without multiple definitions for WSL. | ||
* `/test`: Simple CMake/Meson projects for validating the headers can be included in a given environment | ||
|
||
## Use on Windows | ||
|
||
Note that these headers may conflict with the headers from the Windows SDK, depending on include ordering. These headers should be added to the include directory list before the SDK, and should be included before other graphics headers (e.g. `d3d11.h`) from the Windows SDK. Otherwise, the corresponding header from the Windows SDK may be included first, and will define the include guards which prevents these headers from being used. | ||
|
||
## Use on WSL | ||
|
||
Note: WSL support is not intended for general purpose application development. At this time, the only recommended usage is for frameworks wishing to provide hardware acceleration for a Linux graphics/compute API in a WSL2 virtualization environment. | ||
|
||
Note: WSL support is only available for 64-bit binaries. | ||
|
||
The headers in the `/include/wsl` directory provide alternative definitions to macros and typedefs normally found in the Windows SDK. For the most part, they should be straightforward, but there are a couple to call attention to: | ||
|
||
|Type|Reason| | ||
|---|---| | ||
|`LONG`/`ULONG`|On 64-bit Windows, a `long` is 4 bytes, but on Linux it is typically 8 bytes. The D3D12 ABI for WSL uses `long` and therefore these should be 8 bytes.| | ||
|`WCHAR`/`WCSTR`|On Windows, a `wchar_t` is 2 bytes, but on Linux it is typically 4 bytes. The D3D12 ABI for WSL uses the native 4-byte `wchar_t`, to enable applications and the runtime to use the system C library to perform string manipulation.| | ||
|
||
Additionally, APIs taking `HANDLE` (`void*`) for Win32 types should instead use `reinterpret_cast<HANDLE>(fd)` for an appropriate type of file descriptor. For `ID3D12Fence::SetEventOnCompletion` this should be an `eventfd`, and for shared resources will be an opaque fd. | ||
|
||
## Ways to consume | ||
|
||
There are various ways to consume the headers in this project: | ||
|
||
* Manually: Just copy the headers somewhere and point your project at them. | ||
* CMake subproject: Add this entire project as a subdirectory of your larger project, e.g. as a git submodule, and `add_subdirectory` into it. Use the resulting `DirectX-Headers` and/or `DirectX-Guids` targets as a link dependency | ||
* Installed CMake: After building/installing this project, it can be found through CMake's `find_package` functionality and will expose the same `DirectX-Headers` and `DirectX-Guids` targets. | ||
* Meson subproject/wrap: Add this entire project as a subproject of your larger project, and use `subproject` or `dependency` to consume it. | ||
* Pkg-config: Use Meson to build this project, and the resulting installed package can be found via pkg-config. | ||
|
||
Contributions for new mechanisms are welcome. |
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,4 @@ | ||
@PACKAGE_INIT@ | ||
|
||
include("${CMAKE_CURRENT_LIST_DIR}/directx-headers-targets.cmake") | ||
check_required_components("@PROJECT_NAME@") |
Oops, something went wrong.