Quellcode durchsuchen

Update Mesa-NIR library detection and download script.

Pāvels Nadtočajevs vor 4 Monaten
Ursprung
Commit
43e9b04f66
3 geänderte Dateien mit 55 neuen und 25 gelöschten Zeilen
  1. 10 2
      drivers/d3d12/SCsub
  2. 28 17
      misc/scripts/install_d3d12_sdk_windows.py
  3. 17 6
      platform/windows/detect.py

+ 10 - 2
drivers/d3d12/SCsub

@@ -43,8 +43,16 @@ if env["use_pix"]:
 
 # Mesa (SPIR-V to DXIL functionality).
 
-mesa_dir = (env["mesa_libs"] + "/godot-mesa").replace("\\", "/")
-mesa_gen_dir = (env["mesa_libs"] + "/godot-mesa/generated").replace("\\", "/")
+mesa_libs = env["mesa_libs"]
+if env.msvc and os.path.exists(env["mesa_libs"] + "-" + env["arch"] + "-msvc"):
+    mesa_libs = env["mesa_libs"] + "-" + env["arch"] + "-msvc"
+elif env["use_llvm"] and os.path.exists(env["mesa_libs"] + "-" + env["arch"] + "-llvm"):
+    mesa_libs = env["mesa_libs"] + "-" + env["arch"] + "-llvm"
+elif not env["use_llvm"] and os.path.exists(env["mesa_libs"] + "-" + env["arch"] + "-gcc"):
+    mesa_libs = env["mesa_libs"] + "-" + env["arch"] + "-gcc"
+
+mesa_dir = (mesa_libs + "/godot-mesa").replace("\\", "/")
+mesa_gen_dir = (mesa_libs + "/godot-mesa/generated").replace("\\", "/")
 mesa_absdir = Dir(mesa_dir).abspath
 mesa_gen_absdir = Dir(mesa_dir + "/generated").abspath
 

+ 28 - 17
misc/scripts/install_d3d12_sdk_windows.py

@@ -20,10 +20,7 @@ else:
 
 # Mesa NIR
 # Check for latest version: https://github.com/godotengine/godot-nir-static/releases/latest
-mesa_version = "23.1.9"
-mesa_filename = "godot-nir-23.1.9.zip"
-mesa_archive = os.path.join(deps_folder, mesa_filename)
-mesa_folder = os.path.join(deps_folder, "mesa")
+mesa_version = "23.1.9-1"
 # WinPixEventRuntime
 # Check for latest version: https://www.nuget.org/api/v2/package/WinPixEventRuntime (check downloaded filename)
 pix_version = "1.0.240308001"
@@ -43,20 +40,34 @@ if not os.path.exists(deps_folder):
 
 # Mesa NIR
 color_print(f"{Ansi.BOLD}[1/3] Mesa NIR")
-if os.path.isfile(mesa_archive):
+for arch in [
+    "arm64-llvm",
+    "arm64-msvc",
+    "x86_32-gcc",
+    "x86_32-llvm",
+    "x86_32-msvc",
+    "x86_64-gcc",
+    "x86_64-llvm",
+    "x86_64-msvc",
+]:
+    mesa_filename = "godot-nir-static-" + arch + "-release.zip"
+    mesa_archive = os.path.join(deps_folder, mesa_filename)
+    mesa_folder = os.path.join(deps_folder, "mesa-" + arch)
+
+    if os.path.isfile(mesa_archive):
+        os.remove(mesa_archive)
+    print(f"Downloading Mesa NIR {mesa_filename} ...")
+    urllib.request.urlretrieve(
+        f"https://github.com/godotengine/godot-nir-static/releases/download/{mesa_version}/{mesa_filename}",
+        mesa_archive,
+    )
+    if os.path.exists(mesa_folder):
+        print(f"Removing existing local Mesa NIR installation in {mesa_folder} ...")
+        shutil.rmtree(mesa_folder)
+    print(f"Extracting Mesa NIR {mesa_filename} to {mesa_folder} ...")
+    shutil.unpack_archive(mesa_archive, mesa_folder)
     os.remove(mesa_archive)
-print(f"Downloading Mesa NIR {mesa_filename} ...")
-urllib.request.urlretrieve(
-    f"https://github.com/godotengine/godot-nir-static/releases/download/{mesa_version}/{mesa_filename}",
-    mesa_archive,
-)
-if os.path.exists(mesa_folder):
-    print(f"Removing existing local Mesa NIR installation in {mesa_folder} ...")
-    shutil.rmtree(mesa_folder)
-print(f"Extracting Mesa NIR {mesa_filename} to {mesa_folder} ...")
-shutil.unpack_archive(mesa_archive, mesa_folder)
-os.remove(mesa_archive)
-print(f"Mesa NIR {mesa_filename} installed successfully.\n")
+print("Mesa NIR installed successfully.\n")
 
 # WinPixEventRuntime
 

+ 17 - 6
platform/windows/detect.py

@@ -493,7 +493,7 @@ def configure_msvc(env: "SConsEnvironment"):
             LIBS += ["vulkan"]
 
     if env["d3d12"]:
-        check_d3d12_installed(env)
+        check_d3d12_installed(env, env["arch"] + "-msvc")
 
         env.AppendUnique(CPPDEFINES=["D3D12_ENABLED", "RD_ENABLED"])
         LIBS += ["dxgi", "dxguid"]
@@ -513,7 +513,10 @@ def configure_msvc(env: "SConsEnvironment"):
             env.Append(LIBPATH=[env["pix_path"] + "/bin/" + arch_subdir])
             LIBS += ["WinPixEventRuntime"]
 
-        env.Append(LIBPATH=[env["mesa_libs"] + "/bin"])
+        if os.path.exists(env["mesa_libs"] + "-" + env["arch"] + "-msvc"):
+            env.Append(LIBPATH=[env["mesa_libs"] + "-" + env["arch"] + "-msvc/bin"])
+        else:
+            env.Append(LIBPATH=[env["mesa_libs"] + "/bin"])
         LIBS += ["libNIR.windows." + env["arch"] + prebuilt_lib_extra_suffix]
 
     if env["opengl3"]:
@@ -879,7 +882,10 @@ def configure_mingw(env: "SConsEnvironment"):
             env.Append(LIBS=["vulkan"])
 
     if env["d3d12"]:
-        check_d3d12_installed(env)
+        if env["use_llvm"]:
+            check_d3d12_installed(env, env["arch"] + "-llvm")
+        else:
+            check_d3d12_installed(env, env["arch"] + "-gcc")
 
         env.AppendUnique(CPPDEFINES=["D3D12_ENABLED", "RD_ENABLED"])
         env.Append(LIBS=["dxgi", "dxguid"])
@@ -894,7 +900,12 @@ def configure_mingw(env: "SConsEnvironment"):
             env.Append(LIBPATH=[env["pix_path"] + "/bin/" + arch_subdir])
             env.Append(LIBS=["WinPixEventRuntime"])
 
-        env.Append(LIBPATH=[env["mesa_libs"] + "/bin"])
+        if env["use_llvm"] and os.path.exists(env["mesa_libs"] + "-" + env["arch"] + "-llvm"):
+            env.Append(LIBPATH=[env["mesa_libs"] + "-" + env["arch"] + "-llvm/bin"])
+        elif not env["use_llvm"] and os.path.exists(env["mesa_libs"] + "-" + env["arch"] + "-gcc"):
+            env.Append(LIBPATH=[env["mesa_libs"] + "-" + env["arch"] + "-gcc/bin"])
+        else:
+            env.Append(LIBPATH=[env["mesa_libs"] + "/bin"])
         env.Append(LIBS=["libNIR.windows." + env["arch"]])
         env.Append(LIBS=["version"])  # Mesa dependency.
 
@@ -934,8 +945,8 @@ def configure(env: "SConsEnvironment"):
         configure_mingw(env)
 
 
-def check_d3d12_installed(env):
-    if not os.path.exists(env["mesa_libs"]):
+def check_d3d12_installed(env, suffix):
+    if not os.path.exists(env["mesa_libs"]) and not os.path.exists(env["mesa_libs"] + "-" + suffix):
         print_error(
             "The Direct3D 12 rendering driver requires dependencies to be installed.\n"
             "You can install them by running `python misc\\scripts\\install_d3d12_sdk_windows.py`.\n"