install_d3d12_sdk_windows.py 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/env python
  2. import os
  3. import urllib.request
  4. import shutil
  5. # Base Godot dependencies path
  6. deps_folder = os.path.join(f"{os.getenv('LOCALAPPDATA')}", "Godot", "build_deps")
  7. # DirectX Shader Compiler
  8. dxc_version = "v1.7.2308"
  9. dxc_filename = "dxc_2023_08_14.zip"
  10. dxc_archive = os.path.join(deps_folder, dxc_filename)
  11. dxc_folder = os.path.join(deps_folder, "dxc")
  12. # Mesa NIR
  13. mesa_version = "23.1.0-devel"
  14. mesa_filename = "godot-nir-23.1.0-1-devel.zip"
  15. mesa_archive = os.path.join(deps_folder, mesa_filename)
  16. mesa_folder = os.path.join(deps_folder, "mesa")
  17. # WinPixEventRuntime
  18. pix_version = "1.0.231030001"
  19. pix_archive = os.path.join(deps_folder, f"WinPixEventRuntime_{pix_version}.nupkg")
  20. pix_folder = os.path.join(deps_folder, "pix")
  21. # DirectX 12 Agility SDK
  22. agility_sdk_version = "1.610.4"
  23. agility_sdk_archive = os.path.join(deps_folder, f"Agility_SDK_{agility_sdk_version}.nupkg")
  24. agility_sdk_folder = os.path.join(deps_folder, "agility_sdk")
  25. # Create dependencies folder
  26. if not os.path.exists(deps_folder):
  27. os.makedirs(deps_folder)
  28. # DirectX Shader Compiler
  29. print("[1/4] DirectX Shader Compiler")
  30. if os.path.isfile(dxc_archive):
  31. os.remove(dxc_archive)
  32. print(f"Downloading DirectX Shader Compiler {dxc_filename} ...")
  33. urllib.request.urlretrieve(
  34. f"https://github.com/microsoft/DirectXShaderCompiler/releases/download/{dxc_version}/{dxc_filename}",
  35. dxc_archive,
  36. )
  37. if os.path.exists(dxc_folder):
  38. print(f"Removing existing local DirectX Shader Compiler installation in {dxc_folder} ...")
  39. shutil.rmtree(dxc_folder)
  40. print(f"Extracting DirectX Shader Compiler {dxc_filename} to {dxc_folder} ...")
  41. shutil.unpack_archive(dxc_archive, dxc_folder)
  42. os.remove(dxc_archive)
  43. print(f"DirectX Shader Compiler {dxc_filename} installed successfully.\n")
  44. # Mesa NIR
  45. print("[2/4] Mesa NIR")
  46. if os.path.isfile(mesa_archive):
  47. os.remove(mesa_archive)
  48. print(f"Downloading Mesa NIR {mesa_filename} ...")
  49. urllib.request.urlretrieve(
  50. f"https://github.com/godotengine/godot-nir-static/releases/download/{mesa_version}/{mesa_filename}",
  51. mesa_archive,
  52. )
  53. if os.path.exists(mesa_folder):
  54. print(f"Removing existing local Mesa NIR installation in {mesa_folder} ...")
  55. shutil.rmtree(mesa_folder)
  56. print(f"Extracting Mesa NIR {mesa_filename} to {mesa_folder} ...")
  57. shutil.unpack_archive(mesa_archive, mesa_folder)
  58. os.remove(mesa_archive)
  59. print(f"Mesa NIR {mesa_filename} installed successfully.\n")
  60. # WinPixEventRuntime
  61. print("[3/4] WinPixEventRuntime")
  62. if os.path.isfile(pix_archive):
  63. os.remove(pix_archive)
  64. print(f"Downloading WinPixEventRuntime {pix_version} ...")
  65. urllib.request.urlretrieve(f"https://www.nuget.org/api/v2/package/WinPixEventRuntime/{pix_version}", pix_archive)
  66. if os.path.exists(pix_folder):
  67. print(f"Removing existing local WinPixEventRuntime installation in {pix_folder} ...")
  68. shutil.rmtree(pix_folder)
  69. print(f"Extracting WinPixEventRuntime {pix_version} to {pix_folder} ...")
  70. shutil.unpack_archive(pix_archive, pix_folder, "zip")
  71. os.remove(pix_archive)
  72. print(f"WinPixEventRuntime {pix_version} installed successfully.\n")
  73. # DirectX 12 Agility SDK
  74. print("[4/4] DirectX 12 Agility SDK")
  75. if os.path.isfile(agility_sdk_archive):
  76. os.remove(agility_sdk_archive)
  77. print(f"Downloading DirectX 12 Agility SDK {agility_sdk_version} ...")
  78. urllib.request.urlretrieve(
  79. f"https://www.nuget.org/api/v2/package/Microsoft.Direct3D.D3D12/{agility_sdk_version}", agility_sdk_archive
  80. )
  81. if os.path.exists(agility_sdk_folder):
  82. print(f"Removing existing local DirectX 12 Agility SDK installation in {agility_sdk_folder} ...")
  83. shutil.rmtree(agility_sdk_folder)
  84. print(f"Extracting DirectX 12 Agility SDK {agility_sdk_version} to {agility_sdk_folder} ...")
  85. shutil.unpack_archive(agility_sdk_archive, agility_sdk_folder, "zip")
  86. os.remove(agility_sdk_archive)
  87. print(f"DirectX 12 Agility SDK {agility_sdk_version} installed successfully.\n")
  88. # Complete message
  89. print(f"All Direct3D 12 SDK components were installed to {deps_folder} successfully!")
  90. print('You can now build Godot with Direct3D 12 support enabled by running "scons d3d12=yes".')