From 1a262c6acf914b632cee918713dfbf76a54c86ea Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk Date: Sun, 16 Oct 2022 15:29:07 -0600 Subject: [PATCH] sys_patch: Drop Metal downgrade for AMD Legacy GCN --- CHANGELOG.md | 3 ++- data/sys_patch_dict.py | 2 +- resources/constants.py | 2 +- resources/defaults.py | 12 +++--------- resources/kdk_handler.py | 12 ++++++++++-- resources/sys_patch.py | 4 +++- resources/sys_patch_detect.py | 21 +++++++++++++-------- resources/sys_patch_helpers.py | 12 ++++++++++++ 8 files changed, 45 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f293328b7..791d318c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,7 +36,8 @@ - Relies on N-1 system for when matching KDK is not present - Delete unused KDKs in `/Library/Developer/KDKs` during root patching - Resolve Power Management support for Ivy Bridge and older - - Drop AMFI requirement for Nvidia Kepler + - Drop AMFI requirement for Nvidia Kepler and AMD GCN 1-3 + - Resolve numerous AMD GCN 1-3 issues (ex. Photos.app, Screen Saver, etc.) - Add work-around to Catalyst Buttons not responding on non-Metal in macOS Monterey - Increment Binaries: - OpenCorePkg 0.8.5 release diff --git a/data/sys_patch_dict.py b/data/sys_patch_dict.py index a9e0cc198..cbc5212cd 100644 --- a/data/sys_patch_dict.py +++ b/data/sys_patch_dict.py @@ -377,7 +377,7 @@ def SystemPatchDictionary(os_major, os_minor, non_metal_os_support): }, }, - # In Ventura, Apple added AVX2.0 code to the OpenCL/GL compilers + # In Ventura, Apple added AVX2.0 code to AMD's OpenCL/GL compilers "AMD OpenCL": { "Display Name": "", "OS Support": { diff --git a/resources/constants.py b/resources/constants.py index 0971f2828..e7411d01b 100644 --- a/resources/constants.py +++ b/resources/constants.py @@ -13,7 +13,7 @@ class Constants: def __init__(self): # Patcher Versioning self.patcher_version = "0.5.0" # OpenCore-Legacy-Patcher - self.patcher_support_pkg_version = "0.6.9" # PatcherSupportPkg + self.patcher_support_pkg_version = "0.7.0" # PatcherSupportPkg self.url_patcher_support_pkg = "https://github.com/dortania/PatcherSupportPkg/releases/download/" self.nightly_url_patcher_support_pkg = "https://nightly.link/dortania/PatcherSupportPkg/workflows/build/master/" self.discord_link = "https://discord.gg/rqdPgH8xSN" diff --git a/resources/defaults.py b/resources/defaults.py index 89063bc9a..15cc10cf8 100644 --- a/resources/defaults.py +++ b/resources/defaults.py @@ -217,14 +217,6 @@ class generate_defaults: self.constants.secure_status = False self.constants.disable_cs_lv = True - if gpu in [ - device_probe.AMD.Archs.Legacy_GCN_7000, - device_probe.AMD.Archs.Legacy_GCN_8000, - device_probe.AMD.Archs.Legacy_GCN_9000, - device_probe.AMD.Archs.Polaris, - ]: - self.constants.disable_amfi = True - # Non-Metal Logic elif gpu in [ device_probe.Intel.Archs.Iron_Lake, @@ -239,7 +231,9 @@ class generate_defaults: self.constants.sip_status = False self.constants.secure_status = False self.constants.disable_cs_lv = True - self.constants.disable_amfi = True + if os_data.os_data.ventura in self.constants.legacy_accel_support: + # Only disable AMFI if we officially support Ventura + self.constants.disable_amfi = True if self.host_is_target: self.constants.host_is_non_metal = True diff --git a/resources/kdk_handler.py b/resources/kdk_handler.py index ca708ee17..0a78aff79 100644 --- a/resources/kdk_handler.py +++ b/resources/kdk_handler.py @@ -24,7 +24,11 @@ class kernel_debug_kit_handler: print("- Fetching available KDKs") - results = utilities.SESSION.get(KDK_API_LINK, headers={"User-Agent": f"OCLP/{self.constants.patcher_version}"}) + try: + results = utilities.SESSION.get(KDK_API_LINK, headers={"User-Agent": f"OCLP/{self.constants.patcher_version}"}) + except (requests.exceptions.Timeout, requests.exceptions.TooManyRedirects, requests.exceptions.ConnectionError): + print("- Could not contact KDK API") + return None if results.status_code != 200: print("- Could not fetch KDK list") @@ -45,7 +49,11 @@ class kernel_debug_kit_handler: print(f"- Checking closest match for: {host_version} build {host_build}") - results = utilities.SESSION.get(OS_DATABASE_LINK) + try: + results = utilities.SESSION.get(OS_DATABASE_LINK) + except (requests.exceptions.Timeout, requests.exceptions.TooManyRedirects, requests.exceptions.ConnectionError): + print("- Could not contact AppleDB") + return None, "", "" if results.status_code != 200: print("- Could not fetch database") diff --git a/resources/sys_patch.py b/resources/sys_patch.py index 98a8a406e..5d79b8295 100644 --- a/resources/sys_patch.py +++ b/resources/sys_patch.py @@ -293,7 +293,7 @@ class PatchSysVolume: print("Reason for snapshot failure:") print(bless.stdout.decode()) if "Can't use last-sealed-snapshot or create-snapshot on non system volume" in bless.stdout.decode(): - print("- This is an APFS bug with Monterey! Perform a clean installation to ensure your APFS volume is built correctly") + print("- This is an APFS bug with Monterey and newer! Perform a clean installation to ensure your APFS volume is built correctly") return False self.unmount_drive() return True @@ -488,6 +488,8 @@ class PatchSysVolume: else: print(f"- Running Process:\n{process}") utilities.process_status(subprocess.run(process, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)) + if "AMD Legacy GCN" in required_patches: + sys_patch_helpers.sys_patch_helpers(self.constants).disable_window_server_caching() self.write_patchset(required_patches) def preflight_checks(self, required_patches, source_files_path): diff --git a/resources/sys_patch_detect.py b/resources/sys_patch_detect.py index c13408d08..6d945297a 100644 --- a/resources/sys_patch_detect.py +++ b/resources/sys_patch_detect.py @@ -64,7 +64,8 @@ class detect_root_patch: if self.constants.detected_os > non_metal_os: self.nvidia_tesla = True self.amfi_must_disable = True - self.amfi_shim_bins = True + if os_data.os_data.ventura in self.constants.legacy_accel_support: + self.amfi_shim_bins = True self.legacy_keyboard_backlight = self.check_legacy_keyboard_backlight() self.requires_root_kc = True elif gpu.arch == device_probe.NVIDIA.Archs.Kepler and self.constants.force_nv_web is False: @@ -94,20 +95,23 @@ class detect_root_patch: if self.constants.detected_os > os_data.os_data.mojave: self.nvidia_web = True self.amfi_must_disable = True - self.amfi_shim_bins = True + if os_data.os_data.ventura in self.constants.legacy_accel_support: + self.amfi_shim_bins = True self.needs_nv_web_checks = True self.requires_root_kc = True elif gpu.arch == device_probe.AMD.Archs.TeraScale_1: if self.constants.detected_os > non_metal_os: self.amd_ts1 = True self.amfi_must_disable = True - self.amfi_shim_bins = True + if os_data.os_data.ventura in self.constants.legacy_accel_support: + self.amfi_shim_bins = True self.requires_root_kc = True elif gpu.arch == device_probe.AMD.Archs.TeraScale_2: if self.constants.detected_os > non_metal_os: self.amd_ts2 = True self.amfi_must_disable = True - self.amfi_shim_bins = True + if os_data.os_data.ventura in self.constants.legacy_accel_support: + self.amfi_shim_bins = True self.requires_root_kc = True elif gpu.arch in [ device_probe.AMD.Archs.Legacy_GCN_7000, @@ -129,19 +133,20 @@ class detect_root_patch: self.supports_metal = True self.requires_root_kc = True self.amfi_must_disable = True - self.amfi_shim_bins = True elif gpu.arch == device_probe.Intel.Archs.Iron_Lake: if self.constants.detected_os > non_metal_os: self.iron_gpu = True self.amfi_must_disable = True - self.amfi_shim_bins = True + if os_data.os_data.ventura in self.constants.legacy_accel_support: + self.amfi_shim_bins = True self.legacy_keyboard_backlight = self.check_legacy_keyboard_backlight() self.requires_root_kc = True elif gpu.arch == device_probe.Intel.Archs.Sandy_Bridge: if self.constants.detected_os > non_metal_os: self.sandy_gpu = True self.amfi_must_disable = True - self.amfi_shim_bins = True + if os_data.os_data.ventura in self.constants.legacy_accel_support: + self.amfi_shim_bins = True self.legacy_keyboard_backlight = self.check_legacy_keyboard_backlight() self.requires_root_kc = True elif gpu.arch == device_probe.Intel.Archs.Ivy_Bridge: @@ -510,7 +515,7 @@ class detect_root_patch: # Additionally, AMDRadeonX3000 requires IOAccelerator downgrade which is not installed without 'Non-Metal IOAccelerator Common' del(required_patches["AMD TeraScale 2"]["Install"]["/System/Library/Extensions"]["AMDRadeonX3000.kext"]) if hardware_details["Graphics: AMD Legacy GCN"] is True: - required_patches.update({"Metal Common": all_hardware_patchset["Graphics"]["Metal Common"]}) + required_patches.update({"Revert Metal Downgrade": all_hardware_patchset["Graphics"]["Revert Metal Downgrade"]}) required_patches.update({"Monterey GVA": all_hardware_patchset["Graphics"]["Monterey GVA"]}) required_patches.update({"Monterey OpenCL": all_hardware_patchset["Graphics"]["Monterey OpenCL"]}) required_patches.update({"AMD Legacy GCN": all_hardware_patchset["Graphics"]["AMD Legacy GCN"]}) diff --git a/resources/sys_patch_helpers.py b/resources/sys_patch_helpers.py index 209c0d79e..81036d2e7 100644 --- a/resources/sys_patch_helpers.py +++ b/resources/sys_patch_helpers.py @@ -130,3 +130,15 @@ class sys_patch_helpers: if (kdk_folder / Path("System/Library/Extensions/System.kext/PlugIns/Libkern.kext/Libkern")).exists(): return kdk_folder return None + + + def disable_window_server_caching(self): + # On legacy GCN GPUs, the WindowServer cache generated creates + # corrupted Opaque shaders. + # To work-around this, we disable WindowServer caching + # And force macOS into properly generating the Opaque shaders + print("- Disabling WindowServer Caching") + # Invoke via 'bash -c' to resolve pathing + utilities.elevated(["bash", "-c", "rm -rf /private/var/folders/*/*/*/WindowServer/com.apple.WindowServer"]) + # Disable writing to WindowServer folder + utilities.elevated(["bash", "-c", "chflags uchg /private/var/folders/*/*/*/WindowServer"])