Skip to content

Commit 44e0eb1

Browse files
authored
Merge pull request #8610 from clayjohn/D3D12-compile-instructions
Add instructions for compiling with Direct3D 12 support on Windows
2 parents ca93dda + 671a844 commit 44e0eb1

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

contributing/development/compiling/compiling_for_windows.rst

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,83 @@ dependencies. Running it will bring up the Project Manager.
162162
:ref:`doc_data_paths_self_contained_mode` by creating a file called
163163
``._sc_`` or ``_sc_`` in the ``bin/`` folder.
164164

165+
Compiling with support for Direct3D 12
166+
--------------------------------------
167+
168+
By default, builds of Godot do not contain support for the Direct3D 12 graphics
169+
API.
170+
171+
To compile Godot with Direct3D 12 support you need at least the following:
172+
173+
- Visual Studio (follow the instructions above to install). Currently, we don't
174+
support building with Direct3D 12 enabled when using MinGW. Support will be
175+
added in the future if possible.
176+
- `The DirectX Shader Compiler <https://github.com/Microsoft/DirectXShaderCompiler/releases>`_.
177+
The zip folder will be named "dxc\_" followed by the date of release. Download
178+
it anywhere, unzip it and remember the path to the unzipped folder, you will
179+
need it below.
180+
- `godot-nir-static library <https://github.com/godotengine/godot-nir-static/releases/>`_.
181+
We compile the Mesa libraries you will need into a static library. Download it
182+
anywhere, unzip it and remember the path to the unzipped folder, you will
183+
need it below.
184+
185+
.. note:: You can optionally build the godot-nir-static libraries yourself with
186+
the following steps:
187+
188+
1. Install the Python package `mako <https://www.makotemplates.org>`_
189+
which is needed to generate some files.
190+
2. Clone the `godot-nir-static <https://github.com/godotengine/godot-nir-static>`_
191+
directory and navigate to it.
192+
3. Run the following::
193+
194+
git submodule update --init
195+
./update_mesa.sh
196+
scons
197+
198+
Optionally, you can compile with the following for additional features:
199+
200+
- `PIX <https://devblogs.microsoft.com/pix/download>`_ is a performance tuning
201+
and debugging application for Direct3D12 applications. If you compile-in
202+
support for it, you can get much more detailed information through PIX that
203+
will help you optimize your game and troubleshoot graphics bugs. To use it,
204+
download the WinPixEventRuntime package. You will be taken to a NuGet package
205+
page where you can click "Download package" to get it. Once downloaded, change
206+
the file extension to .zip and unzip the file to some path.
207+
- `Agility SDK <https://devblogs.microsoft.com/directx/directx12agility>`_ can
208+
be used to provide access to the latest Direct3D 12 features without relying
209+
on driver updates. To use it, download the latest Agility SDK package. You
210+
will be taken to a NuGet package page where you can click "Download package"
211+
to get it. Once downloaded, change the file extension to .zip and unzip the
212+
file to some path.
213+
214+
.. note:: If you use a preview version of the Agility SDK, remember to enable
215+
developer mode in Windows; otherwise it won't be used.
216+
217+
When building Godot, you will need to tell SCons to use Direct3D 12 and where to
218+
look for the additional libraries::
219+
220+
C:\godot> scons platform=windows d3d12=yes dxc_path=<...> mesa_libs=<...>
221+
222+
Or, with all options enabled::
223+
224+
C:\godot> scons platform=windows d3d12=yes dxc_path=<...> mesa_libs=<...> agility_sdk_path=<...> pix_path=<...>
225+
226+
.. note:: The build process will copy ``dxil.dll`` from the ``bin/<arch>/``
227+
directory in the DXC folder to the Godot binary directory and the
228+
appropriate ``bin/<arch>`` file in the Godot binary directory.
229+
Direct3D 12-enabled Godot packages for distribution to end users must
230+
include the ``dxil.dll`` (and relevant folders if using multi-arch),
231+
both for the editor and games. At runtime, the renderer will try to
232+
load the DLL from the arch-specific folders, and will fall back to the
233+
same directory as the Godot executable if the appropriate arch isn't
234+
found.
235+
236+
.. note:: For the Agility SDK's DLLs you have to explicitly choose the kind of
237+
workflow. Single-arch is the default (DLLs copied to ``bin/``). If you
238+
pass ``agility_sdk_multi_arch=yes`` to SCons, you'll opt-in for
239+
multi-arch. DLLs will be copied to the appropriate ``bin/<arch>/``
240+
subdirectories and at runtime the right one will be loaded.
241+
165242
Development in Visual Studio
166243
----------------------------
167244

0 commit comments

Comments
 (0)