Contribute
Register

[Success] AMD RX6000 Series working in macOS

Just upgraded my Vega64 to 6800XT and here are some experiences I would like to share.

*SMBIOS and Final Cut rendering
My CPU is 10900K so naturally iMac20,2 SMBIOS should be the best choice. But after config my iGPU to headless, the system works but FCP stutters here and there and rendering time is bad, super bad, like 3 times slower than my M1 Pro MacBook. Something must be wrong.

*igfxrpsc=1 boot flag
Turns out, due to macOS's strange design, the iGPU inside a Hackintosh would work just at 0.35Ghz most of the time, adding this flag solves the issue. Some said igfxfw=2 works too, you can try either one just remember don't use them at the same time. With iGPU working at full speed, the rendering time cut down significantly yet it still takes 50% more time to render the same footage compared to M1 Pro. Way to go.

*Final optimize
By checking the task manager, usage on 6800XT is still very low at 10~15%. I've heard some people saying that macOS treat non Pro Radeon as external GPU in iMac SMBIOS. This issue can be solved by switching to MacPro or iMacPro and finally cut the render time to 35% faster than M1 Pro. But again, this means I will lose iGPU decoding for daily video viewing and create unnecessary load for CPU. After some research, injecting framebuffer in OpenCore device section solves the issue. For my MSI 6800XT Gaming Trio, ATY,Carswell works the best. GPU load when rendering is at 40~60% full time matches the speed as MacPro SMBIOS and I don't lose any feature provided by iGPU. Finally I can unleash full power if this beast without giving up any feature:)
Are you still using igfxrpsc=1 boot flag after making your final optimization?
 
Are you still using igfxrpsc=1 boot flag after making your final optimization?
Yes, it seems iGPU still co-work with dGPU in FCP.
So far I haven't seen any negative effects so I still keep it.
 
I removed custom injection when 12.x fixed the bug with massive metal performance loss. but readig that makes me wonder if I should re-add it
Personally I think Geekbench score is not really that important.
After the optimization the score does not change significantly, but real world work difference is night and day.
 
Just upgraded my Vega64 to 6800XT and here are some experiences I would like to share.

*SMBIOS and Final Cut rendering
My CPU is 10900K so naturally iMac20,2 SMBIOS should be the best choice. But after config my iGPU to headless, the system works but FCP stutters here and there and rendering time is bad, super bad, like 3 times slower than my M1 Pro MacBook. Something must be wrong.

*igfxrpsc=1 boot flag
Turns out, due to macOS's strange design, the iGPU inside a Hackintosh would work just at 0.35Ghz most of the time, adding this flag solves the issue. Some said igfxfw=2 works too, you can try either one just remember don't use them at the same time. With iGPU working at full speed, the rendering time cut down significantly yet it still takes 50% more time to render the same footage compared to M1 Pro. Way to go.

*Final optimize
By checking the task manager, usage on 6800XT is still very low at 10~15%. I've heard some people saying that macOS treat non Pro Radeon as external GPU in iMac SMBIOS. This issue can be solved by switching to MacPro or iMacPro and finally cut the render time to 35% faster than M1 Pro. But again, this means I will lose iGPU decoding for daily video viewing and create unnecessary load for CPU. After some research, injecting framebuffer in OpenCore device section solves the issue. For my MSI 6800XT Gaming Trio, ATY,Carswell works the best. GPU load when rendering is at 40~60% full time matches the speed as MacPro SMBIOS and I don't lose any feature provided by iGPU. Finally I can unleash full power if this beast without giving up any feature:)

**Side note
If all optimizations are applied and rendering is still slow, maybe it's the issue inside GPU hardware path.
Adding SSDT-BRG0.aml injection on top of them should do the job.
Would you be able to share your EFI or config.plist? I have a similar build (17-10700, 6800XT) but I'm having some performance issues. Specifically interested in the injecting frame buffer part.
 
Hello everyone, I just got the RX 6650 XT, and I am trying to patch it to work.
But unfortunately, I can find just 2 apci values on windows or on macOS.

The latest driver is installed.

I will appreciate for your help.
 

Attachments

  • ACPI Win.jpg
    ACPI Win.jpg
    220 KB · Views: 155
  • Screenshot 2022-11-19 at 10.33.16.png
    Screenshot 2022-11-19 at 10.33.16.png
    150.8 KB · Views: 148
You have two unnamed bridges ('pci-bridge' in IOReg; 'PCI(0000)' in Windows). These need to have ACPI names for OpenCore to apply DeviceProperties to the GPU downstream.

Use SSDT-BRG.aml and then apply DeviceProperties:
PciRoot(0x0)/Pci(0x3,0x1)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)
key device-id data <FF730000>
Capture d’écran 2022-11-19 à 14.21.34.png

(Only device-id is required, further entries are purely cosmetic.)

Alternatively, a single SSDT-RX6650XT.aml may name the bridges and apply the spoof (no device property entries).

For the sake of clarity: Use either
a) SSDT-BRG and DeviceProperties entry or
b) SSDT-RX6650XT alone
but not both SSDTs together.

SSDTs and PCI path in DeviceProperties are specific to your board and to the slot used. Other users must adapt paths to their hardware.
 

Attachments

  • SSDT-BRG.aml
    113 bytes · Views: 150
  • SSDT-RX6650XT.aml
    201 bytes · Views: 146
You have two unnamed bridges ('pci-bridge' in IOReg; 'PCI(0000)' in Windows). These need to have ACPI names for OpenCore to apply DeviceProperties to the GPU downstream.

Use SSDT-BRG.aml and then apply DeviceProperties:
PciRoot(0x0)/Pci(0x3,0x1)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)
key device-id data <FF730000>
View attachment 558399
(Only device-id is required, further entries are purely cosmetic.)

Alternatively, a single SSDT-RX6650XT.aml may name the bridges and apply the spoof (no device property entries).

For the sake of clarity: Use either
a) SSDT-BRG and DeviceProperties entry or
b) SSDT-RX6650XT alone
but not both SSDTs together.

SSDTs and PCI path in DeviceProperties are specific to your board and to the slot used. Other users must adapt paths to their hardware.
Thank you very much @etorix, that did it.

I didn't knew how to do the unnamed bridges.

Thanks again.
 
At the of the boot the screen turns off like losing signal or something. Could this be because I have this data in DeviceProperties?

Same happen to me with a RX6600. I asked on another forum and Discord, and the most precise answer I got was "it's weg doing its thing". Someone suggested to disable weg, since RX6600 is fully natively supported. But disabling web resulted in black screen after boot.

The mystery stays unsolved I guess.
 
can someone tell me what i'd put for the paths in the SSDT-BRG0 file with this directory?

IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/GPP8@3,1/IOPP/X161@0/IOPP/pci-bridge@0/IOPP/GFX0@0

I tried \_SB.PCI0.GPP8 and it's not working

edit: just needed to add .X161 and it worked (ie SB.PCI0.GPP8.X161)
 
Last edited:
You worked it out already, but as reference for others:

Always start with \_SB as base ('\': absolute root; leading '_': name reserved by ACPI specification) for External and Scope.
Then every second item is an ACPI entity (4 character name, beginning with a letter from 'A' to 'Z') with a PCI address (after '@'); pick them in order to make the path: PCI0, GPP8, X161 (this one sounds like it comes from an AMD motherboard but these names are just arbitrary). The next object after that, 'pci-bridge@0' has an address but no proper ACPI name, and that what is to be fixed.

\_SB.PCI0.GPP8.X161 is our well-formed ACPI path.
First acknowledge it already exists so it can be used: External(_SB.PCI0.GPP8.X161, DeviceObj)
Then, let's put us within the context of this object : Scope(\_SB.PCI0.GPP8.X161)
and define that the child Device at PCI sub-address 0 (Name (_ADR, Zero)) is called BRG0 (or whatever arbitrary name we fancy…) and has child GFX0 at address 0.

Pay attention to addresses! Adjust accordingly if the unnamed bridge, or the GPU behind it, is not at address 0 but at another value
@1: Name (_ADR, One)
@2: Name (_ADR, 0x2)
etc.
If there are multiple unnamed bridges (pci-bridge@0/IOPP/pci-bridge@0/IOPP/GFX0@0, as seen a few posts before), declare multiple nested devices (as in SSDT-BRG from the above post).
 
Last edited:
Back
Top