Mesa (master): d3d12: Use DirectX-Headers wrap for d3d12.h

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Dec 16 16:42:47 UTC 2020


Module: Mesa
Branch: master
Commit: bc5f69faee969cf32fdb7cd31b8b12206d82a77e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=bc5f69faee969cf32fdb7cd31b8b12206d82a77e

Author: Jesse Natalie <jenatali at microsoft.com>
Date:   Tue Nov 24 11:54:07 2020 -0800

d3d12: Use DirectX-Headers wrap for d3d12.h

This does 2 things for us:
1. Allows us to compile-time depend on any features from new headers,
   instead of having to conditionally compile based on Windows SDK version.
2. Allows us to reference d3d12.h when compiling for non-Windows.

Reviewed-by: Bill Kristiansen <billkris at microsoft.com>
Reviewed-by: Dylan Baker <dylan at pnwbakers.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7937>

---

 meson.build                                               |  6 ++++--
 src/gallium/drivers/d3d12/d3d12_batch.h                   |  2 +-
 src/gallium/drivers/d3d12/d3d12_bufmgr.cpp                |  2 +-
 src/gallium/drivers/d3d12/d3d12_bufmgr.h                  |  2 +-
 src/gallium/drivers/d3d12/d3d12_compiler.cpp              |  2 +-
 src/gallium/drivers/d3d12/d3d12_context.h                 |  2 +-
 src/gallium/drivers/d3d12/d3d12_descriptor_pool.cpp       |  2 +-
 src/gallium/drivers/d3d12/d3d12_descriptor_pool.h         |  2 +-
 src/gallium/drivers/d3d12/d3d12_fence.h                   |  2 +-
 src/gallium/drivers/d3d12/d3d12_format.h                  |  2 +-
 src/gallium/drivers/d3d12/d3d12_pipeline_state.h          |  2 +-
 src/gallium/drivers/d3d12/d3d12_resource.cpp              |  2 +-
 src/gallium/drivers/d3d12/d3d12_resource.h                |  2 +-
 src/gallium/drivers/d3d12/d3d12_screen.cpp                |  2 +-
 src/gallium/drivers/d3d12/d3d12_screen.h                  |  2 +-
 src/gallium/drivers/d3d12/d3d12_surface.h                 |  2 +-
 src/gallium/drivers/d3d12/meson.build                     |  2 +-
 src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp    |  2 +-
 src/gallium/winsys/d3d12/wgl/meson.build                  |  1 +
 src/microsoft/clc/clc_compiler_test.cpp                   |  2 +-
 src/microsoft/clc/compute_test.cpp                        |  2 +-
 src/microsoft/clc/compute_test.h                          |  2 +-
 src/microsoft/clc/meson.build                             | 14 ++++++++------
 src/microsoft/resource_state_manager/D3D12ResourceState.h |  2 +-
 src/microsoft/resource_state_manager/meson.build          |  2 +-
 subprojects/DirectX-Headers.wrap                          |  5 +++++
 26 files changed, 40 insertions(+), 30 deletions(-)

diff --git a/meson.build b/meson.build
index e26ba52ba70..a3ea925ddd5 100644
--- a/meson.build
+++ b/meson.build
@@ -572,8 +572,10 @@ if with_gallium_zink
   dep_vulkan = dependency('vulkan')
 endif
 
-if with_gallium_d3d12 and not cpp.check_header('d3d12.h')
-  error('The D3D12 driver requires d3d12.h from the Windows SDK')
+if with_gallium_d3d12 or with_microsoft_clc
+  dep_dxheaders = dependency('DirectX-Headers', fallback : ['DirectX-Headers', 'dep_dxheaders'],
+    required : with_gallium_d3d12
+  ) 
 endif
 
 if with_vulkan_overlay_layer or with_aco_tests
diff --git a/src/gallium/drivers/d3d12/d3d12_batch.h b/src/gallium/drivers/d3d12/d3d12_batch.h
index 0f90a4bd893..7180d957f58 100644
--- a/src/gallium/drivers/d3d12/d3d12_batch.h
+++ b/src/gallium/drivers/d3d12/d3d12_batch.h
@@ -28,7 +28,7 @@
 #include <stdint.h>
 
 #define D3D12_IGNORE_SDK_LAYERS
-#include <d3d12.h>
+#include <directx/d3d12.h>
 
 struct d3d12_bo;
 struct d3d12_descriptor_heap;
diff --git a/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp b/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp
index 758ff94c8f2..dbec3cb2def 100644
--- a/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp
@@ -33,7 +33,7 @@
 #include "util/format/u_format.h"
 #include "util/u_memory.h"
 
-#include <d3d12.h>
+#include <directx/d3d12.h>
 
 struct d3d12_bufmgr {
    struct pb_manager base;
diff --git a/src/gallium/drivers/d3d12/d3d12_bufmgr.h b/src/gallium/drivers/d3d12/d3d12_bufmgr.h
index 4aee2c22d18..f66dd6aa564 100644
--- a/src/gallium/drivers/d3d12/d3d12_bufmgr.h
+++ b/src/gallium/drivers/d3d12/d3d12_bufmgr.h
@@ -27,7 +27,7 @@
 #include "pipebuffer/pb_buffer.h"
 #include "util/u_atomic.h"
 
-#include <d3d12.h>
+#include <directx/d3d12.h>
 
 struct d3d12_bufmgr;
 struct d3d12_screen;
diff --git a/src/gallium/drivers/d3d12/d3d12_compiler.cpp b/src/gallium/drivers/d3d12/d3d12_compiler.cpp
index 5b5ef4ca851..390299d15f7 100644
--- a/src/gallium/drivers/d3d12/d3d12_compiler.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_compiler.cpp
@@ -41,7 +41,7 @@
 #include "util/u_prim.h"
 #include "util/u_simple_shaders.h"
 
-#include <d3d12.h>
+#include <directx/d3d12.h>
 #include <dxcapi.h>
 #include <wrl.h>
 
diff --git a/src/gallium/drivers/d3d12/d3d12_context.h b/src/gallium/drivers/d3d12/d3d12_context.h
index a077f56de54..fc75d7a5627 100644
--- a/src/gallium/drivers/d3d12/d3d12_context.h
+++ b/src/gallium/drivers/d3d12/d3d12_context.h
@@ -37,7 +37,7 @@
 #include "util/slab.h"
 #include "util/u_suballoc.h"
 
-#include <d3d12.h>
+#include <directx/d3d12.h>
 
 #define D3D12_GFX_SHADER_STAGES (PIPE_SHADER_TYPES - 1)
 
diff --git a/src/gallium/drivers/d3d12/d3d12_descriptor_pool.cpp b/src/gallium/drivers/d3d12/d3d12_descriptor_pool.cpp
index b83fe1b2976..d62f8e76fcf 100644
--- a/src/gallium/drivers/d3d12/d3d12_descriptor_pool.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_descriptor_pool.cpp
@@ -32,7 +32,7 @@
 #include "util/u_dynarray.h"
 #include "util/u_memory.h"
 
-#include <d3d12.h>
+#include <directx/d3d12.h>
 
 struct d3d12_descriptor_pool {
    ID3D12Device *dev;
diff --git a/src/gallium/drivers/d3d12/d3d12_descriptor_pool.h b/src/gallium/drivers/d3d12/d3d12_descriptor_pool.h
index 324e55a3e4d..11108951ab6 100644
--- a/src/gallium/drivers/d3d12/d3d12_descriptor_pool.h
+++ b/src/gallium/drivers/d3d12/d3d12_descriptor_pool.h
@@ -27,7 +27,7 @@
 #include "pipe/p_context.h"
 
 #define D3D12_IGNORE_SDK_LAYERS
-#include <d3d12.h>
+#include <directx/d3d12.h>
 
 struct d3d12_descriptor_pool;
 struct d3d12_descriptor_heap;
diff --git a/src/gallium/drivers/d3d12/d3d12_fence.h b/src/gallium/drivers/d3d12/d3d12_fence.h
index d14204eba0f..c72d8017bad 100644
--- a/src/gallium/drivers/d3d12/d3d12_fence.h
+++ b/src/gallium/drivers/d3d12/d3d12_fence.h
@@ -26,7 +26,7 @@
 
 #include "util/u_inlines.h"
 
-#include <d3d12.h>
+#include <directx/d3d12.h>
 
 struct pipe_screen;
 struct d3d12_screen;
diff --git a/src/gallium/drivers/d3d12/d3d12_format.h b/src/gallium/drivers/d3d12/d3d12_format.h
index 538de9c2fdd..962335731a5 100644
--- a/src/gallium/drivers/d3d12/d3d12_format.h
+++ b/src/gallium/drivers/d3d12/d3d12_format.h
@@ -24,7 +24,7 @@
 #ifndef D3D12_FORMATS_H
 #define D3D12_FORMATS_H
 
-#include <dxgiformat.h>
+#include <directx/dxgiformat.h>
 
 #include "pipe/p_format.h"
 #include "pipe/p_defines.h"
diff --git a/src/gallium/drivers/d3d12/d3d12_pipeline_state.h b/src/gallium/drivers/d3d12/d3d12_pipeline_state.h
index 015b1a1176f..972d291fe93 100644
--- a/src/gallium/drivers/d3d12/d3d12_pipeline_state.h
+++ b/src/gallium/drivers/d3d12/d3d12_pipeline_state.h
@@ -27,7 +27,7 @@
 #include "pipe/p_state.h"
 
 #define D3D12_IGNORE_SDK_LAYERS
-#include <d3d12.h>
+#include <directx/d3d12.h>
 
 struct d3d12_context;
 struct d3d12_root_signature;
diff --git a/src/gallium/drivers/d3d12/d3d12_resource.cpp b/src/gallium/drivers/d3d12/d3d12_resource.cpp
index a41ec322a56..cf236a0db2b 100644
--- a/src/gallium/drivers/d3d12/d3d12_resource.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_resource.cpp
@@ -38,7 +38,7 @@
 
 #include "frontend/sw_winsys.h"
 
-#include <d3d12.h>
+#include <directx/d3d12.h>
 #include <memory>
 
 static bool
diff --git a/src/gallium/drivers/d3d12/d3d12_resource.h b/src/gallium/drivers/d3d12/d3d12_resource.h
index 62ecf6bb51b..4c8dccb02e9 100644
--- a/src/gallium/drivers/d3d12/d3d12_resource.h
+++ b/src/gallium/drivers/d3d12/d3d12_resource.h
@@ -29,7 +29,7 @@ struct pipe_screen;
 #include "util/u_range.h"
 #include "util/u_transfer.h"
 
-#include <d3d12.h>
+#include <directx/d3d12.h>
 
 struct d3d12_resource {
    struct pipe_resource base;
diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp
index 3f12eae117e..e85fc7c8acc 100644
--- a/src/gallium/drivers/d3d12/d3d12_screen.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_screen.cpp
@@ -43,7 +43,7 @@
 #include "frontend/sw_winsys.h"
 
 #include <dxgi1_4.h>
-#include <d3d12sdklayers.h>
+#include <directx/d3d12sdklayers.h>
 
 static const struct debug_named_value
 debug_options[] = {
diff --git a/src/gallium/drivers/d3d12/d3d12_screen.h b/src/gallium/drivers/d3d12/d3d12_screen.h
index 837093987d5..76e43d4f199 100644
--- a/src/gallium/drivers/d3d12/d3d12_screen.h
+++ b/src/gallium/drivers/d3d12/d3d12_screen.h
@@ -29,7 +29,7 @@
 #include "util/slab.h"
 
 #define D3D12_IGNORE_SDK_LAYERS
-#include <d3d12.h>
+#include <directx/d3d12.h>
 #include <dxgi1_4.h>
 
 struct pb_manager;
diff --git a/src/gallium/drivers/d3d12/d3d12_surface.h b/src/gallium/drivers/d3d12/d3d12_surface.h
index c21933a5e5d..b0409849ec7 100644
--- a/src/gallium/drivers/d3d12/d3d12_surface.h
+++ b/src/gallium/drivers/d3d12/d3d12_surface.h
@@ -26,7 +26,7 @@
 
 #include "pipe/p_state.h"
 
-#include <d3d12.h>
+#include <directx/d3d12.h>
 
 struct d3d12_descriptor_handle;
 struct pipe_context;
diff --git a/src/gallium/drivers/d3d12/meson.build b/src/gallium/drivers/d3d12/meson.build
index dc2ae22aa45..44a968121f3 100644
--- a/src/gallium/drivers/d3d12/meson.build
+++ b/src/gallium/drivers/d3d12/meson.build
@@ -48,7 +48,7 @@ libd3d12 = static_library(
   files_libd3d12,
   gnu_symbol_visibility : 'hidden',
   include_directories : [inc_include, inc_src, inc_mesa, inc_gallium, inc_gallium_aux],
-  dependencies: [idep_nir_headers, idep_libdxil_compiler, idep_libd3d12_resource_state],
+  dependencies: [idep_nir_headers, idep_libdxil_compiler, idep_libd3d12_resource_state, dep_dxheaders],
 )
 
 driver_d3d12 = declare_dependency(
diff --git a/src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp b/src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp
index 32723d9fe58..9ac8b80b2e6 100644
--- a/src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp
+++ b/src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp
@@ -25,7 +25,7 @@
 
 #include <Windows.h>
 #include <dxgi1_4.h>
-#include <d3d12.h>
+#include <directx/d3d12.h>
 #include <wrl.h>
 
 #include "util/u_memory.h"
diff --git a/src/gallium/winsys/d3d12/wgl/meson.build b/src/gallium/winsys/d3d12/wgl/meson.build
index 8f05beeb885..0a25f9844a9 100644
--- a/src/gallium/winsys/d3d12/wgl/meson.build
+++ b/src/gallium/winsys/d3d12/wgl/meson.build
@@ -24,6 +24,7 @@ libd3d12winsys = static_library(
   'd3d12winsys',
   files('d3d12_wgl_framebuffer.cpp', 'd3d12_wgl_winsys.c'),
   include_directories : [inc_src, inc_wgl, inc_include, inc_gallium, inc_gallium_aux, inc_gallium_drivers],
+  dependencies : [dep_dxheaders],
   gnu_symbol_visibility : 'hidden',
 )
 
diff --git a/src/microsoft/clc/clc_compiler_test.cpp b/src/microsoft/clc/clc_compiler_test.cpp
index 882db6ac23f..d38861434ad 100644
--- a/src/microsoft/clc/clc_compiler_test.cpp
+++ b/src/microsoft/clc/clc_compiler_test.cpp
@@ -26,7 +26,7 @@
 #include <stdexcept>
 #include <vector>
 
-#include <d3d12.h>
+#include <directx/d3d12.h>
 #include <dxgi1_4.h>
 #include <gtest/gtest.h>
 #include <wrl.h>
diff --git a/src/microsoft/clc/compute_test.cpp b/src/microsoft/clc/compute_test.cpp
index 46f5d87014c..44e48871eb5 100644
--- a/src/microsoft/clc/compute_test.cpp
+++ b/src/microsoft/clc/compute_test.cpp
@@ -25,7 +25,7 @@
 #include <stdint.h>
 #include <stdexcept>
 
-#include <d3d12.h>
+#include <directx/d3d12.h>
 #include <dxgi1_4.h>
 #include <gtest/gtest.h>
 #include <wrl.h>
diff --git a/src/microsoft/clc/compute_test.h b/src/microsoft/clc/compute_test.h
index 6fb06e6ab67..11e7d1cc4d7 100644
--- a/src/microsoft/clc/compute_test.h
+++ b/src/microsoft/clc/compute_test.h
@@ -25,7 +25,7 @@
 #include <stdint.h>
 #include <stdexcept>
 
-#include <d3d12.h>
+#include <directx/d3d12.h>
 #include <dxgi1_4.h>
 #include <gtest/gtest.h>
 #include <wrl.h>
diff --git a/src/microsoft/clc/meson.build b/src/microsoft/clc/meson.build
index d89e8b6a3e2..6cf54f1cce0 100644
--- a/src/microsoft/clc/meson.build
+++ b/src/microsoft/clc/meson.build
@@ -59,10 +59,12 @@ libclc_compiler = shared_library(
     dep_llvmspirvlib, idep_mesautil, idep_libdxil_compiler, idep_nir, dep_spirv_tools]
 )
 
-clc_compiler_test = executable('clc_compiler_test',
-  ['clc_compiler_test.cpp', 'compute_test.cpp'],
-  link_with : [libclc_compiler],
-  dependencies : [idep_gtest, idep_mesautil],
-  include_directories : [inc_include, inc_src])
+if dep_dxheaders.found()
+  clc_compiler_test = executable('clc_compiler_test',
+    ['clc_compiler_test.cpp', 'compute_test.cpp'],
+    link_with : [libclc_compiler],
+    dependencies : [idep_gtest, idep_mesautil, idep_libdxil_compiler, dep_dxheaders],
+    include_directories : [inc_include, inc_src])
 
-test('clc_compiler_test', clc_compiler_test, timeout: 180)
+  test('clc_compiler_test', clc_compiler_test, timeout: 180)
+endif
diff --git a/src/microsoft/resource_state_manager/D3D12ResourceState.h b/src/microsoft/resource_state_manager/D3D12ResourceState.h
index 12342e0dc4b..07071a3b85a 100644
--- a/src/microsoft/resource_state_manager/D3D12ResourceState.h
+++ b/src/microsoft/resource_state_manager/D3D12ResourceState.h
@@ -26,7 +26,7 @@
 
 #include <vector>
 #include <assert.h>
-#include <d3d12.h>
+#include <directx/d3d12.h>
 
 #include "util/list.h"
 
diff --git a/src/microsoft/resource_state_manager/meson.build b/src/microsoft/resource_state_manager/meson.build
index f9167a6295c..7ee6b2c8dd4 100644
--- a/src/microsoft/resource_state_manager/meson.build
+++ b/src/microsoft/resource_state_manager/meson.build
@@ -28,7 +28,7 @@ libd3d12_resource_state = static_library(
   files_libd3d12_resource_state,
   gnu_symbol_visibility : 'hidden',
   include_directories : [inc_include, inc_src, inc_mesa],
-  dependencies: [],
+  dependencies: [dep_dxheaders],
 )
 
 idep_libd3d12_resource_state = declare_dependency(
diff --git a/subprojects/DirectX-Headers.wrap b/subprojects/DirectX-Headers.wrap
new file mode 100644
index 00000000000..0c89d9fa30b
--- /dev/null
+++ b/subprojects/DirectX-Headers.wrap
@@ -0,0 +1,5 @@
+[wrap-git]
+directory = DirectX-Headers-1.0
+
+url = https://github.com/microsoft/DirectX-Headers.git
+revision = head



More information about the mesa-commit mailing list