• Become a Premium Member for $25/year with no ads to improve your community experience.

EliteMacx86

Administrator
Staff member
Joined
Jul 22, 2018
Messages
6,710
Motherboard
Supermicro X11SPA-T
CPU
Intel Xeon W-3275 28 Core
Graphics
2xAMD RX 580 8GB
OS X/macOS
13.x
Bootloader
  1. OpenCore (UEFI)
Mac
  1. Mac mini
  2. MacBook Pro
Mobile Phone
  1. Android
  2. iOS
How to Improve IGPU Performance (Intel Graphics) on macOS

This guide describes how to improve IGPU Graphics Performance on macOS. The guide is supported by both, Clover and OpenCore bootloader. By following this guide, you'll be able to fix the IGPU Performance on macOS using Clover or OpenCore bootloader.

Overview

Requirements


Following are the requirements for improving IGPU performance on macOS. Please ensure you meet the requirements before proceeding with this guide.

CPU
  • macOS/OS X Compatible Intel CPU. Requires Intel CFL and newer CPU for firmware loading. See CPU Compatibility for more information
GPU
  • macOS/OS X Compatible Intel GPU. See Compatibility for more information
macOS
  • OS X Panther 10.3 and later
SMBIOS
  • Suitable SMBIOS as per the hardware. See Setting up SMBIOS for more information
Kexts
  • Vanilla Graphics Kexts in S/L/E
  • Lilu
  • WhateverGreen
Tools
  • Intel Power Gadget
  • IOReg



STEP 1: Enable Graphics Acceleration


Before you skip to improve IGPU performance, you need to enable your Graphics with full acceleration. To enable the Graphics, select the framebuffer. To set the framebuffer, follow STEP #4 from the guide linked below.

STEP 2: Enable GuC Firmware


Loading Apple GuC (Graphics Micro Code) Firmware can be used to improve IGPU performance. To load the Apple

Requirements:
  • Intel Skylake and newer CPU
  • macOS compatible IGPU. See IGPU Compatibility for more information.
  • Intel 300 series or newer, except for the Z370 chipset.
QUICK INFO:
  • Apple Guc firmware loading is disabled by default and is bugged. It is enabled exclusively by using the igfxfw=2 boot argument.
  • Enabling GuC firmware will eventually lead to IGPU locking at high frequency when utilizing the IGPU at max and the frequency will not drop even when the IGPU usage is back to an idle state. Only Sleep/Wake or restart will reload the Guc firmware and the frequency will be dropped back to normal. Currently, this issue has not been investigated or fixed.
  • CPU scheduling performance was fixed by WEG 1.4.0 allowing the IGPU frequency to reach high values without GuC. This is enabled by default and can be disabled by the igfxnorpsc=1 boot argument. Without igfxfw=2 and with igfxnorpsc=1 WEG 1.4.1 should also work correctly, but the IGPU will not be able to reach high frequencies.
  • Apple GuC firmware doesn't work on old 22-nanometer chipsets such as Z370 and older.
  • Firmware loading is not guaranteed to work even on a newer chipset.
  • When forcing the firmware to load and if the firmware loading fails, the system will still boot after 50 retries and result in no Graphics acceleration.
  • If you experience a Gfx firmware loop or a Kernel panic when following this step, it is probably because firmware loading is not supported on your system and you should undo this step.


To force enable GuC firmware, you'll need to use the igfxfw=2 property on IGPU. To add the igfxfw=2 property, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)igfxfw02000000DATA
  • Force enable GuC Firmware
  • Required for

4. If you don't want to inject the property using Device Properties, you can use the same patch using igfxfw=2 boot-arg in your config.plist.
5. Once added, save your config.plist.

Verifying GuC Firmware Loading

The next step is to verify whether GuC Firmware is loading or not.

Download Hackintool

Firmware Load Status (when successful):
If the firmware loading is successful, you'll see something similar in the Kernel log
Code:
2020-12-11 11:38:00.726498+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IGGuC::LogGuCLoadRetry(char const*, unsigned int)> [IGPU] Begin Gfx firmware load process
2020-12-11 11:38:00.726503+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IGGuC::LogGuCLoadRetry(char const*, unsigned int)> [IGPU] Begin Gfx firmware load process
2020-12-11 11:38:00.726505+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IGGuC::LogGuCLoadRetry(char const*, unsigned int)> [IGPU]    ForceWake Multithread = 0x30002
2020-12-11 11:38:00.726508+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IGGuC::LogGuCLoadRetry(char const*, unsigned int)> [IGPU]    ForceWake Multithread = 0x30002
2020-12-11 11:38:00.726509+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IGGuC::LogGuCLoadRetry(char const*, unsigned int)> [IGPU]    CONFIG0 (0xD00)       = 0x80000000
2020-12-11 11:38:00.726512+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IGGuC::LogGuCLoadRetry(char const*, unsigned int)> [IGPU]    CONFIG0 (0xD00)       = 0x80000000
2020-12-11 11:38:00.726514+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IGGuC::LogGuCLoadRetry(char const*, unsigned int)> [IGPU]    GT_THREAD_STATUS      = 0x400b0000
2020-12-11 11:38:00.726517+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IGGuC::LogGuCLoadRetry(char const*, unsigned int)> [IGPU]    GT_THREAD_STATUS      = 0x400b0000
2020-12-11 11:38:00.726518+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IGGuC::LogGuCLoadRetry(char const*, unsigned int)> [IGPU]    Doing retry #0
2020-12-11 11:38:00.726520+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IGGuC::loadBinary(bool)> [IGPU]    Doing retry #0
2020-12-11 11:38:00.765770+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IGGuC::loadBinary(bool)> [IGPU] Graphics Firmware Version: 2.14.0.0
2020-12-11 11:38:00.765775+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IGGuC::loadBinary(bool)> [IGPU] Graphics Firmware Version: 2.14.0.0
2020-12-11 11:38:00.770041+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IntelAccelerator::start(IOService*)> [IGPU] Graphics accelerator is using scheduler: Apple Firmware
2020-12-11 11:38:00.770045+0000  localhost kernel[0]: (AppleIntelCFLGraphics) <AppleIntelCFLGraphics`IntelAccelerator::start(IOService*)> [IGPU] Graphics accelerator is using scheduler: Apple Firmware

Firmware Load Status (when failed):
If the firmware loading is unsuccessful, you'll see something similar in the Kernel log
Code:
[IGPU] Hash date from ME never returned, status = 1, doing retry #50
[IGPU] Begin Gfx firmware load process
[IGPU] ForceWake Multithread = 0x30002
[IGPU] CONFIG0 (0xD00) = 0x80000000
[IGPU] GT_THREAD_STATUS = 0x400b0000
[IGPU] Doing retry #50

[IGPU] Failed to initialize graphics firmware.
[IGPU] Failed to start graphics engine
[IGPU] request to send Host -> Gfx firmware message when the firmware channel is not active!
[IGPU] Failed to send wait-for-idle request to firmware
busy extended ok[1], (60s, 102s)
IOConsoleUsers: time(0) 0->0, lln 0, llk 1,
IOConsoleUsers: gIOScreenLockState 3, hs 0, now 0, sm 0x0

STEP 3: Enable RPS Control Patch

The next step is to enable RPS Control Patch. To enable RPS Control Patch, you'll need to use the igfxrpsc=1 property on IGPU. To add the igfxrpsc=1 property, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)rps-control01000000DATA
  • Force enable GuC Firmware
  • Required for

4. If you don't want to inject the property using Device Properties, you can use the same patch using igfxrpsc=1 boot-arg in your config.plist.
5. Once added, save your config.plist.

Verifying the IGPU Performance


The next step is to verify whether the IGPU performance is working as expected or not. Follow the steps below to verify the IGPU performance.
 
Last edited:

Trending Threads

Forum statistics

Threads
1,493
Messages
14,167
Members
21,420
Latest member
cloud9nia