Contribute
Register

[GUIDE] General Framebuffer Patching Guide (HDMI Black Screen Problem)

Remember that I prefaced this by saying "preliminary conclusions"! While I've been able to validate most of this on my own motherboard, it would be helpful for owners of ASUS Prime Z390-A to verify if the following two configurations produce identical results in every way:
Firstly, thanks for all your hard work on this - without which, I (and others) wouldn't have fully working onboard graphics in macOS.

Here are the results of verifying the two configurations you created for my Z390-A motherboard. I've included the framebuffer configurations I created for both of them (done in Hackintool), in the spoilers beneath your quoted configs:

Con 0: Index 2, BusID 0x02, Type HDMI
Con 1: Index 3, BusID 0x04, Type HDMI (auto-assigned)
Con 2: Index 1, BusID 0x01, Type DP
Con 3: Index -1, BusID 0x00, Type DUMMY
This resulted in fully working onboard graphics with acceleration (my monitor is connected via HDMI):

Code:
<key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>AAPL,ig-platform-id</key>
                <data>BwCbPg==</data>
                <key>device-id</key>
                <data>mz4AAA==</data>
                <key>framebuffer-con0-busid</key>
                <data>AgAAAA==</data>
                <key>framebuffer-con0-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con0-flags</key>
                <data>xwMAAA==</data>
                <key>framebuffer-con0-index</key>
                <data>AgAAAA==</data>
                <key>framebuffer-con0-pipe</key>
                <data>EgAAAA==</data>
                <key>framebuffer-con0-type</key>
                <data>AAgAAA==</data>
                <key>framebuffer-con1-busid</key>
                <data>BAAAAA==</data>
                <key>framebuffer-con1-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con1-flags</key>
                <data>xwMAAA==</data>
                <key>framebuffer-con1-index</key>
                <data>AwAAAA==</data>
                <key>framebuffer-con1-pipe</key>
                <data>EgAAAA==</data>
                <key>framebuffer-con1-type</key>
                <data>AAgAAA==</data>
                <key>framebuffer-con2-busid</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con2-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con2-flags</key>
                <data>xwMAAA==</data>
                <key>framebuffer-con2-index</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con2-pipe</key>
                <data>EgAAAA==</data>
                <key>framebuffer-con2-type</key>
                <data>AAQAAA==</data>
                <key>framebuffer-con3-busid</key>
                <data>AAAAAA==</data>
                <key>framebuffer-con3-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con3-flags</key>
                <data>IAAAAA==</data>
                <key>framebuffer-con3-index</key>
                <data>/////w==</data>
                <key>framebuffer-con3-pipe</key>
                <data>AAAAAA==</data>
                <key>framebuffer-con3-type</key>
                <data>AQAAAA==</data>
                <key>framebuffer-patch-enable</key>
                <data>AQAAAA==</data>
            </dict>
Con 0: Index 1, BusID 0x02, Type HDMI
Con 1: Index 3, BusID 0x01, Type HDMI (auto-assigned)
Con 2: Index 2, BusID 0x04, Type DP
Con 3: Index -1, BusID 0x00, Type DUMMY
This resulted in a black screen, which happened mid-way through the boot process - when the Apple logo briefly disappears, and the onboard graphics initialize.
Code:
<key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>AAPL,ig-platform-id</key>
                <data>BwCbPg==</data>
                <key>device-id</key>
                <data>mz4AAA==</data>
                <key>framebuffer-con0-busid</key>
                <data>AgAAAA==</data>
                <key>framebuffer-con0-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con0-flags</key>
                <data>xwMAAA==</data>
                <key>framebuffer-con0-index</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con0-pipe</key>
                <data>EgAAAA==</data>
                <key>framebuffer-con0-type</key>
                <data>AAgAAA==</data>
                <key>framebuffer-con1-busid</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con1-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con1-flags</key>
                <data>xwMAAA==</data>
                <key>framebuffer-con1-index</key>
                <data>AwAAAA==</data>
                <key>framebuffer-con1-pipe</key>
                <data>EgAAAA==</data>
                <key>framebuffer-con1-type</key>
                <data>AAgAAA==</data>
                <key>framebuffer-con2-busid</key>
                <data>BAAAAA==</data>
                <key>framebuffer-con2-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con2-flags</key>
                <data>xwMAAA==</data>
                <key>framebuffer-con2-index</key>
                <data>AgAAAA==</data>
                <key>framebuffer-con2-pipe</key>
                <data>EgAAAA==</data>
                <key>framebuffer-con2-type</key>
                <data>AAQAAA==</data>
                <key>framebuffer-con3-busid</key>
                <data>AAAAAA==</data>
                <key>framebuffer-con3-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con3-flags</key>
                <data>IAAAAA==</data>
                <key>framebuffer-con3-index</key>
                <data>/////w==</data>
                <key>framebuffer-con3-pipe</key>
                <data>AAAAAA==</data>
                <key>framebuffer-con3-type</key>
                <data>AQAAAA==</data>
                <key>framebuffer-patch-enable</key>
                <data>AQAAAA==</data>
            </dict>
 
@pbryanw Thank you for testing the two configurations!

Config-1 is the known good configuration. However, after I posted Config-2 I realized that my understanding of Index was incorrect, hence Post #85 in which the misunderstanding is (somewhat) cleared up. I plan to finish some final experiments this weekend before overhauling the guide.

As you can see from the Rev. 2 diagram in that post, Index values matter significantly.

Because you have HDMI, can you please post one last screenshot as follows:
  • Using the known good configuration where everything works, run Hackintool 1.7.6 or earlier.
  • Select Framebuffer --> macOS 10.14 (from top menu bar)
  • Select Patch --> Apply Current Patch (from top menu bar)
  • Click Connectors tab.
  • Then click on the red highlighted row itself. Now you will see Port number on the lower right side of the Hackintool window.
  • Grab screenshot (with only HDMI connection).
Thanks again for your help!
 
@CaseySJ - Ok, I've attached a screenshot of FBPatcher (now Hackintool) to this post, after carrying out your instructions. I think I've captured the port number. I used FBPatcher 1.7.1 to do this.

Thanks again, and I look forward to reading your updated guide after you complete your final experiments.
 

Attachments

  • Screenshot 2019-01-18 at 20.04.57.png
    Screenshot 2019-01-18 at 20.04.57.png
    128.1 KB · Views: 147
@CaseySJ - Ok, I've attached a screenshot of FBPatcher (now Hackintool) to this post, after carrying out your instructions. I think I've captured the port number. I used FBPatcher 1.7.1 to do this.

Thanks again, and I look forward to reading your updated guide after you complete your final experiments.
I think that the original configuration may be technically off even though it seems to work properly.

This is because we know that Index 2 (Port 6) belongs to HDMI, but the port Type is looked up as con[index].type. And from previous posts we know that Index 1 (Port 5) belongs to DP and its port Type is also looked up as con[index].type.

This is explained here:
When index != array index port type will be read from connector[index].type.

Say, we have 2 active ports:

0 - [1] busId 4 type LVDS
1 - [2] busId 5 type DP
2 - [3] busId 6 type HDMI
3 - [-1] busId 0 type Dummy

This will result in 2 framebuffers whose types will be shifted:

0 - busId 4 type DP
1 - busId 5 type HDMI

So in this case:
  • Con 0 is mapped to Index 2 so its Type will be con[2].type or DP. But Index 2 is supposed to be HDMI.
  • Con 2 is mapped to Index 1 so its Type will be con[1].type or HDMI. But Index 1 is supported to be DP.
Original:
Con 0: Index 2, BusID 0x02, Type HDMI
Con 1: Index 3, BusID 0x04, Type HDMI (DVI here, but set type to HDMI anyway)
Con 2: Index 1, BusID 0x01, Type DP
Con 3: Index -1, BusID 0x00, Type DUMMY


So if our understanding of Type lookup is correct, then the following should be the technically correct configuration:

Technically Correct?
Con 0: Index 3, BusID 0x04, Type HDMI (we need to set to HDMI even though DVI is here)
Con 1: Index 1, BusID 0x01, Type DP
Con 2: Index 2, BusID 0x02, Type HDMI
Con 3: Index -1, BusID 0x00, Type DUMMY


Can anyone with an ASUS Prime Z390-A test this configuration?

Looking for one tester to verify HDMI, one to verify DP, and one to verify DVI. If someone can verify all three or any two, that's even better.
 
Last edited:
Technically Correct?
Con 0: Index 3, BusID 0x04, Type HDMI (we need to set to HDMI even though DVI is here)
Con 1: Index 1, BusID 0x01, Type DP
Con 2: Index 2, BusID 0x02, Type HDMI
Con 3: Index -1, BusID 0x00, Type DUMMY


Can anyone with an ASUS Prime Z390-A test this configuration?

Looking for one tester to verify HDMI, one to verify DP, and one to verify DVI. If someone can verify all three or any two, that's even better.
@CaseySJ - Hi, I'm happy to report that your "Technically correct" configuration is working perfectly for me (with full iGPU acceleration using my HDMI monitor).

The "Technically Correct" configuration (created in Hackintool) is in the spoiler below:
Code:
<key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>AAPL,ig-platform-id</key>
                <data>BwCbPg==</data>
                <key>device-id</key>
                <data>mz4AAA==</data>
                <key>framebuffer-con0-busid</key>
                <data>BAAAAA==</data>
                <key>framebuffer-con0-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con0-flags</key>
                <data>xwMAAA==</data>
                <key>framebuffer-con0-index</key>
                <data>AwAAAA==</data>
                <key>framebuffer-con0-pipe</key>
                <data>EgAAAA==</data>
                <key>framebuffer-con0-type</key>
                <data>AAgAAA==</data>
                <key>framebuffer-con1-busid</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con1-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con1-flags</key>
                <data>xwMAAA==</data>
                <key>framebuffer-con1-index</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con1-pipe</key>
                <data>EgAAAA==</data>
                <key>framebuffer-con1-type</key>
                <data>AAQAAA==</data>
                <key>framebuffer-con2-busid</key>
                <data>AgAAAA==</data>
                <key>framebuffer-con2-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con2-flags</key>
                <data>xwMAAA==</data>
                <key>framebuffer-con2-index</key>
                <data>AgAAAA==</data>
                <key>framebuffer-con2-pipe</key>
                <data>EgAAAA==</data>
                <key>framebuffer-con2-type</key>
                <data>AAgAAA==</data>
                <key>framebuffer-con3-busid</key>
                <data>AAAAAA==</data>
                <key>framebuffer-con3-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con3-flags</key>
                <data>IAAAAA==</data>
                <key>framebuffer-con3-index</key>
                <data>/////w==</data>
                <key>framebuffer-con3-pipe</key>
                <data>AAAAAA==</data>
                <key>framebuffer-con3-type</key>
                <data>AQAAAA==</data>
                <key>framebuffer-patch-enable</key>
                <data>AQAAAA==</data>
            </dict>

Regarding DP output, I'll have to leave that for tomorrow now (or maybe someone else could take this?).

On the topic of DVI-D output, I see that on the Prime Z390-A's specification sheet, it says:
Multi-VGA output support : HDMI/DVI-D ports
- Supports HDMI with max. resolution 4096 x 2160 @ 30 Hz
- Supports DVI-D with max. resolution 1920 x 1200 @ 60 Hz
Yet, the motherboard only has one HDMI output & one DP Output. I don't know how this works on my motherboard - I wonder if you could explain how this is achieved - does it mean HDMI outputting to a DVI-D monitor?
 
Last edited:
@pbryanw Thank you for testing the second configuration! If you look at Post #1 now you'll see that it has been completely overhauled based on new learning. The results you just posted are in agreement with the revised Guide.

It seems that both Type and BusID are read directly from the same row. I did not see any evidence of con[Index] type of lookups while doing 13 different experiments with my system last night.
 
@CaseySJ All the screenshots in the guide are broken now. Could you please fix them?
 
Last edited:
Hello and thanks for the guide.

I'm running an Gigabyte Z390 Aorus Elite with an i7-8700k. It only has HDMI out.

I can boot into the OS fine headless. However, I am running into the HDMI black screen glitch when attempting to boot with the default Coffe Lake device IDs suggested in the guide.

I figured I would roll the dice and see if I could try the Z390 Designare patches supplied, but neither worked.

Any advice on how I can write a manual patch for a single HDMI output using this board?

Thanks,
John
 
Hello and thanks for the guide.

I'm running an Gigabyte Z390 Aorus Elite with an i7-8700k. It only has HDMI out.

I can boot into the OS fine headless. However, I am running into the HDMI black screen glitch when attempting to boot with the default Coffe Lake device IDs suggested in the guide.

I figured I would roll the dice and see if I could try the Z390 Designare patches supplied, but neither worked.

Any advice on how I can write a manual patch for a single HDMI output using this board?

Thanks,
John

Also, with respect to the above, could I manually add flags to convert all possible connectors to HDMI? Something like the config attached?
 

Attachments

  • config.plist
    7.3 KB · Views: 132
Back
Top