Graphics Card Injection 2 for Legacy Hackintosh: A Practical Guide

Step-by-step guide to Graphics Card Injection 2 for legacy AMD and NVIDIA GPUs on macOS 10.10-10.13. Learn framebuffer names, connector data, and troubleshooting for Hackintosh.

Clover configuration panel displaying injection settings for a Radeon HD 5870

Getting a discrete GPU to initialize under an older macOS is one of the trickiest parts of building a legacy Hackintosh. The term “injection” appears in countless forum threads and Clover configuration files, but its meaning has shifted across releases. The second generation of injection methods—what the community loosely calls Graphics Card Injection 2—emerged around the transition from OS X Mavericks to Yosemite, when Apple began phasing out support for certain GPU families and the bootloader ecosystem had to adapt.

This guide covers what Injection 2 is, how it differs from the old method, and how to set it up on macOS 10.10 through 10.13. We'll focus on discrete AMD and NVIDIA cards that lack native framebuffer support, and walk through the exact property keys, values, and bootloader settings that make injection work without breaking sleep, wake, or hardware acceleration.

What Was Injection 1 and Why Did It Change

Before Yosemite, Clover’s Inject ATI or Inject NVIDIA settings simply passed a pre-defined set of framebuffer bytes into the IORegistry based on the detected device ID. This worked for many Radeon HD 5xxx/6xxx and GeForce GT 2xx/4xx cards because the kexts inside the OS already contained matching personality tables. The bootloader essentially said “this card is an AMD Radeon HD 5770” and the system would load the appropriate framebuffer, such as Eulemur or Vervet.

As macOS moved to 10.10, Apple dropped framebuffer tables for many older GPUs from the AMD* and GeForce* kexts. Cards that previously worked with simple injection suddenly showed a black screen after the boot logo, or loaded the desktop without acceleration. Injection 1 could no longer guarantee a working display because the kexts simply did not contain the right personality for the device.

Graphics Card Injection 2 is essentially a manual override: instead of relying on the bootloader to guess a personality, you supply the exact framebuffer name, connector information, and interface parameters directly in the config.plist. The bootloader still writes these values to IORegistry, but you control every byte.

When You Need Injection 2

Consider using Injection 2 when:

  • Your GPU is detected in System Information but shows “Display 7 MB” or no Metal/OpenGL support.
  • You get a black screen immediately after the Apple logo, even though the system continues to boot (you can SSH in or hear sounds).
  • The GPU is a Fermi-based NVIDIA card (GT 4xx/5xx) or a Terascale 2/3 AMD card (HD 5xxx/6xxx) running on High Sierra or later.
  • You are using a custom framebuffer from a patched kext and need to match it exactly in the bootloader.

If your card is a Kepler NVIDIA (GT 6xx/7xx) or a GCN-based AMD (HD 7xxx and newer), standard injection often works without manual tuning. Injection 2 is reserved for the edge cases where the OS no longer ships with the correct personality data.

Anatomy of an Injection 2 Configuration

Injection 2 lives under the Graphics section of Clover’s config.plist. Instead of a simple boolean flag, you provide a dictionary of device properties. The critical keys are:

Key Type Purpose
InjectATI / InjectNVIDIA Boolean Must be true to enable injection at all.
FBName String Exact framebuffer personality name, e.g. Eulemur, Hamachi, Vervet.
VRAM Number Total video memory in megabytes (e.g. 1024).
VideoPorts Number Number of physical video outputs (e.g. 3).
LoadVBios Boolean If true, Clover will extract and inject the GPU’s VBIOS into IORegistry. Useful for cards with non-standard UEFI GOP.
ig-platform-id Data Only for Intel iGPUs, but sometimes required on dual-GPU setups to prevent conflicts.

For AMD cards, you may also need to add a connectors array under Ati Connectors in the Devices section. This is the most finicky part—each connector’s sense ID, link rate, and transmitter must match your physical ports. A mismatch causes a black screen or distorted output.

Finding the Right Framebuffer Name

To determine which framebuffer your GPU would have used natively, check the AMDRadeonX3000.kext or AMDRadeonX4000.kext on a working reference system. Alternatively, boot with -v and debug=0x100 and look for lines like ATI: personalality [Eulemur] in the boot log. If the kext no longer contains that personality, you must extract it from an older version of macOS and inject it via a patched kext alongside the bootloader injection—this is a two-part process we cover in our earlier guide on Fixing macOS Sleep/Wake on Legacy Hackintosh by Editing AGPM Kext, which explains how to vendor- and model-match framebuffer parameters.

Once you have the correct personality name, set FBName in your config.plist. For example, for an AMD Radeon HD 6870 under High Sierra, you would use Vervet. For a GeForce GTX 460, you would use NVDAGF100Hal (though NVIDIA cards often require less tuning because the NVDAResman kext is more tolerant).

Step-by-Step: Configuring Injection 2 in Clover

Assume you have a Gigabyte GA-X79-UD3 board with an AMD Radeon HD 5870 (device ID 0x6898) running macOS 10.12 Sierra. The card is detected but stuck at 7 MB. Here is a working Injection 2 setup:

  1. Open /EFI/CLOVER/config.plist in a plist editor.
  2. Navigate to Graphics and set InjectATI to true.
  3. Add FBName with string value Eulemur (the correct framebuffer for HD 5870).
  4. Add VRAM with number 1024.
  5. Add VideoPorts with number 2 (your card has two DVI and one HDMI, but only two are active in this framebuffer).
  6. Under Devices > Ati Connectors, add an array with three data items (one per port). Use a known working set for Eulemur: 00040000040300000001010112040401 for port 0, 00080000040200000001020111020302 for port 1, 00100000040300000001030121030203 for port 2.
  7. Save and reboot with -v to verify the injection message appears.

If the screen stays black, try swapping connector data or reducing VideoPorts to 1 to isolate a working output. Always test with a single monitor first.

Clover configuration panel displaying injection settings for a Radeon HD 5870

Common Pitfalls and Diagnostics

Injection 2 fails silently if the framebuffer name is misspelled or if the connector data is for a different card revision. Symptoms include:

  • Black screen after boot logo (incorrect connector sense ID).
  • Garbled or horizontal lines (wrong link rate or transmitter).
  • System boots but GPU shows as “Display 7 MB” (FBName does not match any personality in the kext).
  • Kernel panic referencing AMD* or GeForce* (connector count mismatch).

Use IORegistryExplorer to inspect the AMDFramebuffer or NVDA node after boot. If your injection worked, you should see the @0, @1, etc., ports with correct connector-type and sense-id values. If the node is missing entirely, the bootloader did not inject the properties—check that InjectATI or InjectNVIDIA is set to true and that the config.plist is valid XML.

Another frequent issue is a conflict with the iGPU. On X79 and X99 platforms, the CPU has no integrated graphics, so this is not a concern. But on Z77 or Z87 boards, disable the iGPU in BIOS or set ig-platform-id to 0x00001204 to prevent the system from trying to initialize Intel graphics first. Our article on High Sierra Beta, Kaby Lake iGPU, and ACPI Stability discusses how to handle dual-GPU scenarios on legacy platforms.

When Injection 2 Is Not Enough

If Injection 2 still leaves you with a black screen or no acceleration, the problem may be deeper than bootloader properties. Some cards require a patched framebuffer kext because the OS simply does not include a personality for that device ID. In that case, you must extract a compatible framebuffer from an earlier OS version, compile it into a custom kext, and install it to /System/Library/Extensions/ (with SIP disabled). This is a more invasive procedure, but it is the only way to run, for example, a Radeon HD 4850 on High Sierra.

Before attempting kext-level patching, always back up your current system. A misapplied framebuffer kext can cause a boot loop that requires single-user mode or a recovery drive to undo. Keep a spare bootable USB with a known-good configuration ready.

For NVIDIA users, note that the Web Driver approach (switching to the NVIDIA-supplied driver) bypasses injection entirely. If your card is supported by a Web Driver for your exact macOS version, you may not need Injection 2 at all. However, for cards like the GTX 460 or GT 520, no Web Driver exists beyond macOS 10.12, so injection remains the only path.

Before you start, make sure you have a backup of your current config.plist and a bootable USB with a known-good setup. Test with a single monitor and minimal connectors first. Once you have a working injection, save the exact connector data for your card—it will save you hours if you ever need to rebuild the system.