Skip to content

Releases: khoinguyen88kt/chrome-macpro-gpu-patch

v1.7.2 - Interactive LaunchAgent Installation Prompt

Choose a tag to compare

@khoinguyen88kt khoinguyen88kt released this 25 Oct 08:35

What's Changed

  • Interactive Auto-Patch Service Prompt: When running python3 patch.py, the script checks if the background LaunchAgent service (io.github.chrome-macpro-gpu-patch.plist) is installed. If not present, it interactively prompts the user for confirmation ([Y/n]) before setting up the background service.
  • Non-Interactive & Flag Support: Added -y / --yes flag to automatically accept prompts. Non-interactive environments (pipes, CI, background watchers) safely skip the prompt without blocking.
  • Documentation Updated: Step 5 in both English and Vietnamese READMEs updated to reflect automatic prompt capabilities.

v1.7.1 - Launcher Verification & Boot Mount Delay Fix

Choose a tag to compare

@khoinguyen88kt khoinguyen88kt released this 25 Oct 08:26

What's Changed

  • Native C Launcher Verification (is_already_patched): Enhanced patch verification logic across all Chromium browsers (Chrome, Cốc Cốc, Brave, Opera, Vivaldi, Thorium, Helium). The patcher now checks whether the main launcher executable contains --use-angle=gl and is properly codesigned with LocalCodeSigner. If background updaters (e.g. GoogleUpdater, Sparkle) restore the stock launcher, --auto mode detects it immediately and recompiles the launcher without requiring --force.
  • LaunchAgent Boot Mount Delay Tolerance: Added a runner wrapper script (~/.local/bin/chrome-macpro-gpu-patch-runner.sh) for the auto-patch LaunchAgent. When running from external drives (such as USB/Thunderbolt SSDs), the runner gracefully waits for the volume to mount at system boot before launching the patcher.
  • Improved Reboot Persistence: Prevents OpenGL from being disabled after macOS reboots due to background updates or launch timing issues.

v1.7.0 - Vivaldi Browser Support

Choose a tag to compare

@khoinguyen88kt khoinguyen88kt released this 24 Oct 09:57

What's Changed

  • Vivaldi Browser Support: Added full GPU hardware acceleration patch for Vivaldi Browser (/Applications/Vivaldi.app), restoring Compositing, WebGL, and WebGPU on legacy Mac GPUs (AMD FirePro D700/D500/D300, Kepler, Metal 1). Resolves #20.
  • Seamless Multi-Browser Sweep: Vivaldi is now automatically detected in python3 patch.py and can also be patched directly via python3 patch.py vivaldi.
  • Dynamic Binary Analysis: Uses robust vector & scalar pattern detection with dynamic struct offset resolution.

v1.6.0 - Full Chromium M156+ Dynamic Patterns & Cốc Cốc Browser Support

Choose a tag to compare

@khoinguyen88kt khoinguyen88kt released this 24 Oct 09:30

What's Changed in v1.6.0

🚀 Highlights

  • Chromium M156+ Universal Support: Upgraded Patch 7 (IOSurfaceImageBacking) and Patch 3 (GpuMode) to dynamic struct offset patterns across Google Chrome, Helium, Brave, and Cốc Cốc. Resolves the struct offset drift (from 0x188 to 0x190) introduced in recent upstream Chromium milestones without breaking older versions.
  • Opera 138+ Modernized Patterns: Modernized Patch 1 (GetAllowedGLImplementation) and Patch 8 (IOSurfaceBacking) in Opera to ensure ANGLE OpenGL is never rejected by newer Opera builds (138.0.6044.24).
  • Brave Browser 1.98+ (M156): Verified and patched on the newly updated Brave Browser v156.1.98.60.
  • Helium Browser 0.20+ (M156): Full support for the newly released Helium Browser v0.20.1.1 (Chromium 156.0.8078.47).
  • Cốc Cốc Browser Support: Added complete patcher implementation for Cốc Cốc browser on macOS (coccoc_main.c, dynamic pattern patching, codesigning, and automatic service integration).
  • Safe Subprocess Execution: Refactored internal command execution to eliminate shell=True, passing explicit argument vectors to prevent shell injection and handle unusual path characters natively.
  • Enhanced WebGL Probe: Improved headless GPU diagnostic probe with custom user data directory isolation and increased timeout handling.

🧪 Verification

Tested and verified 100% active ANGLE OpenGL Hardware Acceleration (AMD Radeon HD - FirePro D700 OpenGL Engine, OpenGL 4.1) on:

  • Google Chrome 156.0.8078.48
  • Opera 138.0.6044.24
  • Brave Browser 156.1.98.60
  • Helium 156.0.8078.47
  • Cốc Cốc 154.0.8037.106

v1.5.0: Chromium M155+ Compatibility & Cốc Cốc Browser Support

Choose a tag to compare

@khoinguyen88kt khoinguyen88kt released this 07 Oct 03:31

🚀 Highlights in v1.5.0

  • Chromium M155+ Compatibility:

    • Updated Patch 3 (GpuMode fallback) pattern recognition to handle Chromium M155+ bytecode changes (intermittent instruction insertion prior to SwiftShader fallback assignment).
    • Validated full hardware acceleration on Google Chrome 155.0.8059.40.
  • Cốc Cốc Browser Support:

    • Added complete patching support for Cốc Cốc Browser (coccoc).
    • Implemented dedicated coccoc_main.c native C launcher injecting optimized GPU flags while preserving 100% GPU compositing.
    • Added tailored vector-based GpuMode fallback patcher in patchers/coccoc.py.
    • Verified 100% OpenGL, WebGL, WebGPU, and GPU Compositing hardware acceleration on Cốc Cốc v152.0.7977.124.
  • GPU Probe Isolation:

    • Improved --test-gpu probe to isolate instances from running browser profiles, preventing singleton lock timeouts.

v1.4.5: Fix Helium 0.18.2.1 Patching & Add Thorium Browser Support

Choose a tag to compare

@khoinguyen88kt khoinguyen88kt released this 01 Oct 11:18

What's New in v1.4.5

  • Helium Browser 0.18.2.1 (Chromium 154.0.8037.92) Fix:

    • Resolved an issue in Patch 4 (Seatbelt sandbox_check) regex pattern matching where call displacement bytes containing newline characters (0x0a) caused pattern matching to fail on newer Helium releases.
    • Added re.DOTALL across framework wildcard patterns in patchers/helium.py to ensure robust matching across future compiler alignments.
    • Verified full hardware acceleration on Helium 0.18.2.1 with Dual AMD FirePro D700 GPUs on macOS Sequoia 15.8 via OCLP.
    • No clean reinstall required: If you encountered an error with the previous patcher version, running python3 patch.py --update (or git pull) followed by python3 patch.py helium will cleanly patch your existing Helium installation.
  • Thorium Browser Support (AVX2-capable Systems):

    • Added full support for Thorium Browser (python3 patch.py thorium) with modular patcher architecture (patchers/thorium.py), native C launcher (thorium_main.c), and ANGLE dylib injection.
    • Hardware Note: Upstream macOS builds of Thorium are compiled with -march=haswell (AVX2). Users on pre-Haswell CPUs (such as the Mac Pro 6,1 Ivy Bridge Xeon E5 v2, which supports up to AVX 1.0) will encounter an upstream SIGILL instruction crash. A proactive CPU instruction set warning has been integrated into the patcher CLI.

v1.4.4 - Runtime WebGL Hardware Acceleration Probe

Choose a tag to compare

@khoinguyen88kt khoinguyen88kt released this 25 Sep 11:56

What's New in v1.4.4

  • Runtime WebGL Probe (--test-gpu): Added a new CLI option python3 patch.py --test-gpu all (or for individual browsers like python3 patch.py chrome --test-gpu).
    • Previously, --check only verified static binary bytes and code signatures on disk. However, if Chromium encounters runtime context losses or incompatible backing representations, it could silently lock into --use-gl=disabled without disk-level patch failure.
    • --test-gpu launches a lightweight headless Chromium instance with an in-memory base64 WebGL probe, inspecting the WEBGL_debug_renderer_info unmasked renderer string in under a second.
    • It clearly differentiates between [HARDWARE ACCELERATED], [SOFTWARE FALLBACK] (CPU SwiftShader/llvmpipe), and [DISABLED] (context lost/GPU crash).
  • Documentation: Updated CLI reference tables in both English and Vietnamese documentation.

v1.4.3 - Fix Skia texture creation crash and restore ANGLE dylibs in Helium

Choose a tag to compare

@khoinguyen88kt khoinguyen88kt released this 25 Sep 11:45

🐛 Bug Fixes

1. Fix Patch 6 False Positive Corrupting Skia Texture Creation (Chrome, Brave, Helium)

  • In v1.4.2, the loosened dynamic regex for Patch 6 (ScopedEGLSurfaceIOSurface::ValidateTarget) inadvertently matched GetGrBackendTexture in Chromium's gpu/command_buffer/service/skia_utils.cc.
  • Because GetGrBackendTexture was overwritten with mov al, 1; ret, every call from IOSurfaceImageBacking::ProduceSkiaGanesh returned an uninitialized/invalid texture object.
  • This triggered:
    SharedImageManager::ProduceSkia: Trying to produce a Skia representation from an incompatible backing: CompoundImageBacking
    Restarting GPU process due to unrecoverable error. Context was lost.
    
    leading to consecutive GPU crashes and Chrome/browsers permanently disabling hardware acceleration (--use-gl=disabled).
  • Fix: Patch 6 now strictly anchors to the 0x130 stack allocation frame of ValidateTarget (\x48\x81\xec\x30\x01\x00\x00) and checks already-applied status first, completely eliminating false positives against GetGrBackendTexture (which has a 0x170 stack frame).

2. Restore ANGLE Dylibs Injection in Helium Browser

  • Fixed an issue in HeliumPatcher.pre_patch_hook which failed to invoke super().pre_patch_hook().
  • Consequently, libEGL.dylib and libGLESv2.dylib were not being copied into Helium Framework.framework/Versions/.../Libraries/, causing ANGLE initialization failures and blank/white page rendering on complex WebUI / canvas pages.
  • Calling super().pre_patch_hook() ensures clean ANGLE dylibs are properly injected and verified.

🚀 How to Update

Run in your terminal:

python3 patch.py --update
python3 patch.py all --force

v1.4.2 - Robust Regex Pattern Detection Across All Patchers

Choose a tag to compare

@khoinguyen88kt khoinguyen88kt released this 24 Sep 13:47

What's Changed

  • Patcher Robustness: Replaced loose and disjoint byte lookups with contiguous anchored regex across Brave, Opera, Helium, and Chrome patchers.
  • Prevented False Positives:
    • Fixed Patch 6 (ScopedEGLSurfaceIOSurface::ValidateTarget) falsely reporting as applied in Chrome and Brave due to an unrelated compiler alignment NOP-padded getter stub present in clean binaries.
    • Fixed Patch 2 (GetDisplayInitializationParams) disjoint check vulnerability in Brave and Opera that would falsely report applied on newer Chromium milestones (M154+).
    • Anchored Patch 4 (Seatbelt IsSandboxed) to GpuMain sandbox call context in Chrome and Helium to avoid matching secondary sandbox calls.
    • Added legacy milestone fallback for Patch 2 in Opera (supports Opera 135 & 136).
  • Verified on real backups: Fully tested across Chrome (M153, M154), Brave (153.1.95.104), Opera (135, 136.22, 136.52), and Helium (153, 154).

v1.4.1 - Fix Chrome M154 GPU Initialization & Tighten Pattern 2 Detection

Choose a tag to compare

@khoinguyen88kt khoinguyen88kt released this 24 Sep 13:24

Changes in v1.4.1:

  • Chrome M154 Compatibility: Fixed GPU acceleration becoming disabled on Chrome M154 (154.0.8037.58).
  • Eliminated Pattern 2 False Positives: Replaced disjoint data.find checks with contiguous regex matching for Patch 2 (GetDisplayInitializationParams), ensuring that EGL display configuration is always correctly patched during upstream browser updates.
  • Stricter Patch Verification: Added Pattern 2 verification to is_already_patched() so that any partially patched framework is immediately detected and repaired by the background watcher.
  • Codebase Documentation: Restored full descriptive function names in pattern verification comments.