Repository navigation
Releases: khoinguyen88kt/chrome-macpro-gpu-patch
Releases · khoinguyen88kt/chrome-macpro-gpu-patch
Release list
v1.7.2 - Interactive LaunchAgent Installation Prompt
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/--yesflag 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
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=gland is properly codesigned withLocalCodeSigner. If background updaters (e.g. GoogleUpdater, Sparkle) restore the stock launcher,--automode 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
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.pyand can also be patched directly viapython3 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
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 (from0x188to0x190) 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
🚀 Highlights in v1.5.0
-
Chromium M155+ Compatibility:
- Updated Patch 3 (
GpuModefallback) 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.
- Updated Patch 3 (
-
Cốc Cốc Browser Support:
- Added complete patching support for Cốc Cốc Browser (
coccoc). - Implemented dedicated
coccoc_main.cnative C launcher injecting optimized GPU flags while preserving 100% GPU compositing. - Added tailored vector-based
GpuModefallback patcher inpatchers/coccoc.py. - Verified 100% OpenGL, WebGL, WebGPU, and GPU Compositing hardware acceleration on Cốc Cốc v152.0.7977.124.
- Added complete patching support for Cốc Cốc Browser (
-
GPU Probe Isolation:
- Improved
--test-gpuprobe to isolate instances from running browser profiles, preventing singleton lock timeouts.
- Improved
v1.4.5: Fix Helium 0.18.2.1 Patching & Add Thorium Browser Support
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(orgit pull) followed bypython3 patch.py heliumwill 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.
- Added full support for Thorium Browser (
v1.4.4 - Runtime WebGL Hardware Acceleration Probe
What's New in v1.4.4
- Runtime WebGL Probe (
--test-gpu): Added a new CLI optionpython3 patch.py --test-gpu all(or for individual browsers likepython3 patch.py chrome --test-gpu).- Previously,
--checkonly 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=disabledwithout disk-level patch failure. --test-gpulaunches a lightweight headless Chromium instance with an in-memory base64 WebGL probe, inspecting theWEBGL_debug_renderer_infounmasked renderer string in under a second.- It clearly differentiates between
[HARDWARE ACCELERATED],[SOFTWARE FALLBACK](CPU SwiftShader/llvmpipe), and[DISABLED](context lost/GPU crash).
- Previously,
- 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
🐛 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 matchedGetGrBackendTexturein Chromium'sgpu/command_buffer/service/skia_utils.cc. - Because
GetGrBackendTexturewas overwritten withmov al, 1; ret, every call fromIOSurfaceImageBacking::ProduceSkiaGaneshreturned an uninitialized/invalid texture object. - This triggered:
leading to consecutive GPU crashes and Chrome/browsers permanently disabling hardware acceleration (
SharedImageManager::ProduceSkia: Trying to produce a Skia representation from an incompatible backing: CompoundImageBacking Restarting GPU process due to unrecoverable error. Context was lost.--use-gl=disabled). - Fix: Patch 6 now strictly anchors to the
0x130stack allocation frame ofValidateTarget(\x48\x81\xec\x30\x01\x00\x00) and checks already-applied status first, completely eliminating false positives againstGetGrBackendTexture(which has a0x170stack frame).
2. Restore ANGLE Dylibs Injection in Helium Browser
- Fixed an issue in
HeliumPatcher.pre_patch_hookwhich failed to invokesuper().pre_patch_hook(). - Consequently,
libEGL.dylibandlibGLESv2.dylibwere not being copied intoHelium 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 --forcev1.4.2 - Robust Regex Pattern Detection Across All Patchers
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) toGpuMainsandbox 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).
- Fixed Patch 6 (
- 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
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.findchecks 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.