Contribute
Register

[GUIDE] Intel UHD Graphics 630 Coffee Lake headless mode / main card

Modified post 1 to fix some minor bugs.
 
Last edited:
How to set the integrated graphics card Intel UHD Graphics 630 Coffee Lake Refresh (9 generation) in headless mode (without cable) to be used in video encoding tasks, bringing the image to the monitor with Radeon RX 580, adding hardware video encoding and decoding to the system, or as main card.

Note
: based on the excellent article "[GUIDE] General Framebuffer Patching Guide (HDMI Black Screen Problem)" by @CaseySJ, on the "Framebuffer patch" functionality of @headkaze Hackintool app and on the Desktop Coffee Lake Dortania's guide. Instructions for OpenCore.

Macs with an integrated graphics card (iGPU) and a dedicated one (dGPU) use the integrated one for video encoding and decoding. When building a Hackintosh with both types of GPU we can find that, although the dGPU is much more powerful than the iGPU, if it is not properly installed and recognized by the system, the video encoding will fail. When this happens but we do not want to have the iGPU as the primary card, we must configure the iGPU as headless mode (it is called like that when it is active but without cable to the display) so that the dGPU shows the image but the integrated one is available for encoding / decode video.

The iGPU installation depends on 2 factors:
  • motherboard because each manufacturer places 1-2-3 output ports on the iGPU
  • Intel processor generation, different Intel processor generations carry different iGPU models.
My PC has Z390 Aorus Elite board with an Intel 9 generation CPU (Coffee Lake Refresh, it is configured as Coffee Lake) with Intel UHD Graphics 630 which is in PciRoot(0x0)/Pci(0x2,0x0) whose Plattorm ID is 3E9B0007 and its Device ID it is 3E910000. The dGPU is Radeon RX 580. On this board there is only one connector on the iGPU, it is HDMI v1.4 and corresponds to index 3 in the theoretical list of 3 connectors at most that this model of iGPU can carry:
  • Index 1, BusID 0x00, Type HDMI (type does not matter on this port)
  • Index 2, BusID 0x00, Type HDMI (type does not matter on this port)
  • Index 3, BusID 0x04, Type HDMI (this is the active port, the only one existing).
This can be important when using the iGPU as a primary or single card but not when using it in headless mode.

Headless mode
  • iGPU and dGPU must be enabled in BIOS with dGPU as primary.
  • There should be no cable between iGPU port and any type of display.
  • Lilu and WhatEverGreen properly installed.
  • SMBIOS iMac19.1
  • You have to add in DeviceProperties section of OC:
XML:
    <key>DeviceProperties</key>
    <dict>
        <key>Add</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>AAPL,ig-platform-id</key>
                <data>AwCRPg==</data>  <!-- 0300913e -->
            </dict>
        </dict>
        <key>Delete</key>
        <dict/>
    </dict>
This code shows data values in Base64, they can also be seen as hexadecimal values although with the inverted bytes (reverse byte order), you can check it with a converter: AwCRPg== in Base64 (device-id) equals 0300913e in hexadecimal (3E910000).

With these changes I can boot from the dGPU with the iGPU well recognized by macOS. To check if the VDA Decoder function is activated you can see it in Hackintool (Fully Supported or Failed in the first System tab) or in the VideoProc app (Hardware acceleration preferences> Option> Enabled or Not available). In my case, with the proposed configuration, both applications detect hardware video encoding.

View attachment 488945
iGPU as main card

This card can also be configured to be the primary or main, so that it outputs a signal to the monitor and also encodes video. Here's what to do to make it work like this.
  • Enable it on the mother board as main: Initial Display Output IGFX instead of PCIe 1 Slot (this would be the final step)
  • Lilu and WhatEverGreen properly installed
  • SMBIOS iMac19.1
  • Add in config.plist boot-args: igfxonln=1 disablegfxfirmware
  • Add in config.plist: in DeviceProperties section of OC the code below:
XML:
    <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
    <dict>
        <key>device-id</key>
        <data>kT4AAA==</data>
        <key>AAPL,slot-name</key>
        <string>Internal@0,2,0</string>
        <key>AAPL,ig-platform-id</key>
        <data>BwCbPg==</data>
        <key>framebuffer-con0-busid</key>
        <data>AAAAAA==</data>
        <key>framebuffer-con0-type</key>
        <data>AAgAAA==</data>
        <key>framebuffer-con0-enable</key>
        <data>AQAAAA==</data>
        <key>framebuffer-con1-busid</key>
        <data>AAAAAA==</data>
        <key>framebuffer-con1-type</key>
        <data>AAgAAA==</data>
        <key>framebuffer-con1-enable</key>
        <data>AQAAAA==</data>
        <key>framebuffer-con2-busid</key>
        <data>BAAAAA==</data>
        <key>framebuffer-con2-type</key>
        <data>AAgAAA==</data>
        <key>framebuffer-con2-enable</key>
        <data>AQAAAA==</data>
        <key>framebuffer-con2-flags</key>
        <data>xwMAAA==</data>
        <key>framebuffer-patch-enable</key>
        <data>AQAAAA==</data>
        <key>hda-gfx</key>
        <string>onboard-1</string>
If you have KP or black screen when you leave sleep, you have to replace hda-gfx property with No-hda-gfx, this usually fixes those failures when leaving sleep but the audio is lost through HDMI. Replace these 2 lines:
XML:
                <key>hda-gfx</key>
                <string>onboard-1</string>
for these other 2:
XML:
                <key>No-hda-gfx</key>
                <data>AAAAAAAAAAA=</data>
In this way, System Profile shows 2 graphic cards, iGPU and dGPU.

View attachment 488961
View attachment 488962

You can have the iGPU connected to one monitor and the dGPU to another monitor + one TV, achieving 3 screens using both cards simultaneously.

View attachment 488965

If my GPU DEVICE ID: 0x3E988086 what would this be in Base64. I'm getting a little confused or is it just reverse. for example reverse would be "8680983E"..thanks.
 
If my GPU DEVICE ID: 0x3E988086 what would this be in Base64. I'm getting a little confused or is it just reverse. for example reverse would be "8680983E"..thanks.
The easiest way to convert what you are looking for is with @headkaze 's Hackintool. It has a Calc tab in which you write the hex value and it returns the reversed hex and the Base64 value.

hex-base64.png
 
How to set the integrated graphics card Intel UHD Graphics 630 Coffee Lake Refresh (9 generation) in headless mode (without cable) to be used in video encoding tasks, bringing the image to the monitor with Radeon RX 580, adding hardware video encoding and decoding to the system, or as main card.

Note
: based on the excellent article "[GUIDE] General Framebuffer Patching Guide (HDMI Black Screen Problem)" by @CaseySJ, on the "Framebuffer patch" functionality of @headkaze Hackintool app and on the Desktop Coffee Lake Dortania's guide. Instructions for OpenCore.

Macs with an integrated graphics card (iGPU) and a dedicated one (dGPU) use the integrated one for video encoding and decoding. When building a Hackintosh with both types of GPU we can find that, although the dGPU is much more powerful than the iGPU, if it is not properly installed and recognized by the system, the video encoding will fail. When this happens but we do not want to have the iGPU as the primary card, we must configure the iGPU as headless mode (it is called like that when it is active but without cable to the display) so that the dGPU shows the image but the integrated one is available for encoding / decode video.

The iGPU installation depends on 2 factors:
  • motherboard because each manufacturer places 1-2-3 output ports on the iGPU
  • Intel processor generation, different Intel processor generations carry different iGPU models.
My PC has Z390 Aorus Elite board with an Intel 9 generation CPU (Coffee Lake Refresh, it is configured as Coffee Lake) with Intel UHD Graphics 630 which is in PciRoot(0x0)/Pci(0x2,0x0) whose Plattorm ID is 3E9B0007 and its Device ID it is 3E910000. The dGPU is Radeon RX 580. On this board there is only one connector on the iGPU, it is HDMI v1.4 and corresponds to index 3 in the theoretical list of 3 connectors at most that this model of iGPU can carry:
  • Index 1, BusID 0x00, Type HDMI (type does not matter on this port)
  • Index 2, BusID 0x00, Type HDMI (type does not matter on this port)
  • Index 3, BusID 0x04, Type HDMI (this is the active port, the only one existing).
This can be important when using the iGPU as a primary or single card but not when using it in headless mode.

Headless mode
  • iGPU and dGPU must be enabled in BIOS with dGPU as primary.
  • There should be no cable between iGPU port and any type of display.
  • Lilu and WhatEverGreen properly installed.
  • SMBIOS iMac19.1
  • You have to add in DeviceProperties section of OC:
XML:
    <key>DeviceProperties</key>
    <dict>
        <key>Add</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>AAPL,ig-platform-id</key>
                <data>AwCRPg==</data>  <!-- 0300913e -->
            </dict>
        </dict>
        <key>Delete</key>
        <dict/>
    </dict>
This code shows data values in Base64, they can also be seen as hexadecimal values although with the inverted bytes (reverse byte order), you can check it with a converter: AwCRPg== in Base64 (device-id) equals 0300913e in hexadecimal (3E910000).

With these changes I can boot from the dGPU with the iGPU well recognized by macOS. To check if the VDA Decoder function is activated you can see it in Hackintool (Fully Supported or Failed in the first System tab) or in the VideoProc app (Hardware acceleration preferences> Option> Enabled or Not available). In my case, with the proposed configuration, both applications detect hardware video encoding.

View attachment 488945
iGPU as main card

This card can also be configured to be the primary or main, so that it outputs a signal to the monitor and also encodes video. Here's what to do to make it work like this.
  • Enable it on the mother board as main: Initial Display Output IGFX instead of PCIe 1 Slot (this would be the final step)
  • Lilu and WhatEverGreen properly installed
  • SMBIOS iMac19.1
  • Add in config.plist boot-args: igfxonln=1 disablegfxfirmware
  • Add in config.plist: in DeviceProperties section of OC the code below:
XML:
    <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
    <dict>
        <key>device-id</key>
        <data>kT4AAA==</data>
        <key>AAPL,slot-name</key>
        <string>Internal@0,2,0</string>
        <key>AAPL,ig-platform-id</key>
        <data>BwCbPg==</data>
        <key>framebuffer-con0-busid</key>
        <data>AAAAAA==</data>
        <key>framebuffer-con0-type</key>
        <data>AAgAAA==</data>
        <key>framebuffer-con0-enable</key>
        <data>AQAAAA==</data>
        <key>framebuffer-con1-busid</key>
        <data>AAAAAA==</data>
        <key>framebuffer-con1-type</key>
        <data>AAgAAA==</data>
        <key>framebuffer-con1-enable</key>
        <data>AQAAAA==</data>
        <key>framebuffer-con2-busid</key>
        <data>BAAAAA==</data>
        <key>framebuffer-con2-type</key>
        <data>AAgAAA==</data>
        <key>framebuffer-con2-enable</key>
        <data>AQAAAA==</data>
        <key>framebuffer-con2-flags</key>
        <data>xwMAAA==</data>
        <key>framebuffer-patch-enable</key>
        <data>AQAAAA==</data>
        <key>hda-gfx</key>
        <string>onboard-1</string>
If you have KP or black screen when you leave sleep, you have to replace hda-gfx property with No-hda-gfx, this usually fixes those failures when leaving sleep but the audio is lost through HDMI. Replace these 2 lines:
XML:
                <key>hda-gfx</key>
                <string>onboard-1</string>
for these other 2:
XML:
                <key>No-hda-gfx</key>
                <data>AAAAAAAAAAA=</data>
In this way, System Profile shows 2 graphic cards, iGPU and dGPU.

View attachment 488961
View attachment 488962

You can have the iGPU connected to one monitor and the dGPU to another monitor + one TV, achieving 3 screens using both cards simultaneously.

View attachment 488965
thanks to this guide I solved my issue!!! thhx very much for your valuable work!!!
iapaus
 
hello i made videoproc work with this guide with headless mode i7-8700k and rx580 but airplay screen mirroring still lags anything i can do about it ?


Screen Shot 2021-11-20 at 10.55.22.png
 
@relaxer2020
I see you have the iGPU well installed.
Airplay screen mirroring lags is something found even in real Macs, I think it doesn't have to do with the settings of the iGPU. If you have bluetooth activated, try disabling it while you are mirroring. But I don't know what else to say about this.
Open a new specific thread or look at sites talking around this.
 
@relaxer2020
I see you have the iGPU well installed.
Airplay screen mirroring lags is something found even in real Macs, I think it doesn't have to do with the settings of the iGPU. If you have bluetooth activated, try disabling it while you are mirroring. But I don't know what else to say about this.
Open a new specific thread or look at sites talking around this.
on real mac on same network it works flawlessly as well as from iphone. video airplaying works well as well only screen mirroring fails and by lag i mean it draw 1 frame in 20 seconds. disabling bluetooth didnt help
 
Updated post 1 to improve config.plist code.
 
Updated post 1 to improve config.plist code.
Hi Mullico

What would these values be if we wanted to use headless mode on Big sur with sys def imp 1.1 oc 0.8.3? Would love that both my radeon Vii and the uhd 630 work in tandem on resolve and other similar software ;) Bordd ia a Z-370...

In current guides like Dortania only AAPL,ig-platform-id is covered. Is this due to advancements in WEG (weg 1.6.1) here)

<key>PciRoot(0x0)/Pci(0x2,0x0)</key>
<dict>
<key>AAPL,ig-platform-id</key>
<data>AwCRPg==</data>
<key>device-id</key>
<data>mz4AAA==</data>
<key>enable-metal</key>
<data>AQAAAA==</data>
<key>igfxfw</key>
<data>AgAAAA==</data>
<key>force-online</key>
<data>AQAAAA==</data>
<key>rps-control</key>
<data>AQAAAA==</data>
</dict>
 
Back
Top