From 43e9b04f66c6047b5a2ae23262205da227a3dde2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Thu, 24 Apr 2025 23:57:06 +0300 Subject: [PATCH] Update Mesa-NIR library detection and download script. --- drivers/d3d12/SCsub | 12 +++++- misc/scripts/install_d3d12_sdk_windows.py | 45 ++++++++++++++--------- platform/windows/detect.py | 23 +++++++++--- 3 files changed, 55 insertions(+), 25 deletions(-) mode change 100644 => 100755 misc/scripts/install_d3d12_sdk_windows.py diff --git a/drivers/d3d12/SCsub b/drivers/d3d12/SCsub index de9a16a1687..8e325c5a1b7 100644 --- a/drivers/d3d12/SCsub +++ b/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 diff --git a/misc/scripts/install_d3d12_sdk_windows.py b/misc/scripts/install_d3d12_sdk_windows.py old mode 100644 new mode 100755 index 7425000e229..cdd47e3b6d1 --- a/misc/scripts/install_d3d12_sdk_windows.py +++ b/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 diff --git a/platform/windows/detect.py b/platform/windows/detect.py index 1b37667ca16..08bbda8be52 100644 --- a/platform/windows/detect.py +++ b/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"