Contribute
Register

[Solved]Fixes to Get Full Acceleration on Intel HD Graphics in iMac 17.1

Status
Not open for further replies.
I don't remember, sorry. I don't have that build anymore.
but quick sync can work even with VDADecoderChecker giving errors, right?

this is the output of vdadecoderchecker from my MacBook Pro 113 early 2015:
MacBook-Pro-di-Alex:~ alex$ /Users/alex/Downloads/VDADecoderChecker

Hardware acceleration is fully supported

Yeap, Quick Sync works even when VDA giving errors.
 
I just find out, that if i remove "iMac.kext" (IOVARendererID<08 00 04 01>, IOVARendererSubID<03 00 00 00>) i have Quick Sync fully supported! So, i only have IGPU enabled in BIOS and inject Intel HD 530 properties via SSDT (included as attachment) and Quick Sync is supported on iMac17,1 with Nvidia GTX9xx + Intel HD 530. So, i need to figure out how to enable VDA now. Maybe we need different IOVARendererID?

On Power Gadget screenshot you can see on first part of Frequency how i convert video without Intel encoder checked and on second part with Intel encoder checked.

MacX VC supports Nvidia hardware acceleration. Intel Power Gadget shows that HD530 is also involved, but it can be OpenCL, the frequency of GT is the frequency of the 3D core. Intel Power Gadget does not have monitoring of another HD530 core, which is called RENDER. Documentation and utilities are available in the Intel Media SDK. But these utilities are only for windows and linux. Quicktime when capturing the screen uses Quick sync, in full screen mode. Install iStat monitor, it shows which video card and how it is loaded during the encoding-decoding operation. Even if this card is not displayed in the system report. Try to record the screen and see the CPU load. It should be very small, up to 10 percent. In this case, see the processor of which video card is loaded. Quicktime can also use Nvidia's hardware coding.
In addition, the FCPX uses 2 services. One is used to decode VDADecoderXPCServ, the second one is for encoding VDAEncoderXPCServ. They are used separately by the program. That is, the encoding and decoding are separated. This is logical. Skylake can either encode or decode via Quick sync, but not simultaneously. If it encodes via Quick sync, before it sends the stream to the hardware blocks, it decodes it from the original format, and it's not done through Quick sync. There is another way. Decode via Quick sync, and not encode through it. That is vice versa. But not both ways at the same time. And the second is slower in 2 times.
You can find out exactly if you have a test file 4K mov with a high bit rate for a couple of minutes of video. It is necessary to transcode it to h264 in different programs (only in one pass, 2 passes Quick sync does not support) and watch the metrics. The encoding time will be very different, depending on whether Quick sync, or OpenCL, or Metal is used.
To check the decoders you need a h264 4K file with a high bitrate. Quicktime with Quick sync playing such a file shows a very low CPU load, and without the Quick sync decoder, the CPU usage is several times higher.
 
any news about iovarender?
No, but I made this attempt with GTX 950 which is VP7... in z97 (SMBIOS iMac14,2) platform it works with IOVARendererID <08 00 04 01>, IOVARendererSubID <03 00 00 00>... Quick Sync and VDA fully supported, vdadecoderchecker output "Hardware acceleration is fully supported". Next i put GTX 950 to z170 (SMBIOS iMac14,2 and SMBIOS iMac17,1) and with IOVARendererID <08 00 04 01>, IOVARendererSubID <03 00 00 00> does not work Quick Sync nor VDA. Without this properties at least a Quick Sync works, VDA Decoder doesn't, vdadecoderchecker output "VDADecoderCreate failed. err: -12473", MacX VC shows "Hardware encoding supported".
It looks like IOVARendererID is not issue here... it's somewhere in the differences of Haswell/Skylake (z97/z170) or Intel HD 4600/HD 530 (Azul framebuffer/AppleIntelSKLGraphicsFramebuffer).
 
Last edited:
MacX VC supports Nvidia hardware acceleration. Intel Power Gadget shows that HD530 is also involved, but it can be OpenCL, the frequency of GT is the frequency of the 3D core. Intel Power Gadget does not have monitoring of another HD530 core, which is called RENDER. Documentation and utilities are available in the Intel Media SDK. But these utilities are only for windows and linux. Quicktime when capturing the screen uses Quick sync, in full screen mode. Install iStat monitor, it shows which video card and how it is loaded during the encoding-decoding operation. Even if this card is not displayed in the system report. Try to record the screen and see the CPU load. It should be very small, up to 10 percent. In this case, see the processor of which video card is loaded. Quicktime can also use Nvidia's hardware coding.
In addition, the FCPX uses 2 services. One is used to decode VDADecoderXPCServ, the second one is for encoding VDAEncoderXPCServ. They are used separately by the program. That is, the encoding and decoding are separated. This is logical. Skylake can either encode or decode via Quick sync, but not simultaneously. If it encodes via Quick sync, before it sends the stream to the hardware blocks, it decodes it from the original format, and it's not done through Quick sync. There is another way. Decode via Quick sync, and not encode through it. That is vice versa. But not both ways at the same time. And the second is slower in 2 times.
You can find out exactly if you have a test file 4K mov with a high bit rate for a couple of minutes of video. It is necessary to transcode it to h264 in different programs (only in one pass, 2 passes Quick sync does not support) and watch the metrics. The encoding time will be very different, depending on whether Quick sync, or OpenCL, or Metal is used.
To check the decoders you need a h264 4K file with a high bitrate. Quicktime with Quick sync playing such a file shows a very low CPU load, and without the Quick sync decoder, the CPU usage is several times higher.

When i encode video in MacX VC with "Hardware Encoder->Intel" checked it is 4 times faster then without it checked.
So i think Quick Sync for encoding is working. But decoding (playing) don't work i think (z170) because VDA Decoder somehow not working on Skylake with dedicated Nvidia GTX9xx and higher cards, vdadecoderchecker output "VDADecoderCreate failed. err: -12473".
 
Last edited:
When i encode video in MacX VC with "Hardware Encoder->Intel" checked it is 4 times faster then without it checked.
So i think Quick Sync for encoding is working. But decoding (playing) don't work i think (z170) because VDA Decoder somehow not working on Skylake with dedicated Nvidia GTX9xx and higher cards, vdadecoderchecker output "VDADecoderCreate failed. err: -12473".

I opened a ticket even here, if you want you can share your tests there to help us
https://github.com/vit9696/Shiki/issues/5

question: with your test, it is quicker encoding video with Nvidia or with intel quick sync? using macx video converter I mean
 
I opened a ticket even here, if you want you can share your tests there to help us
https://github.com/vit9696/Shiki/issues/5

question: with your test, it is quicker encoding video with Nvidia or with intel quick sync? using macx video converter I mean

In MacX VC i have Nvidia checbox disabled, so all i can test is encoding via CPU or Quick Sync. I think encoding via Nvidia is not supported on macOS.
 
I tried to run quick sync HD530 + 8800GT (G92) on El Capitan and could not. Only when the HD530 remains single, acceleration is available. Many times in ioreg saw that Intel acceleration is enabled, but the check did not succeed and quicktime did not use QSV. Also, I noted that in El Capitan all somewhat faster works, and OS loading is faster. Quicktime takes slightly less CPU time for QSV. However, MacX VC lost 20 percent of the performance in QSV on the same files as in the Sierra. This is a screenshot with a running QSV, on one HD530. This I saw and when stood 8800GT, but this did not affect the availability of hardware acceleration. Something else, I do not know.
Screenshot1.png
"
 
i confirm it works.
just tried with iMac 14,2, intel hd630 + gtx 1080 and macxvideo converted says hardware encoding support...yes!!!
i have seen this is the Toledo ssdt + patch
I'm a bit lost. I have an Intel HD630 + GTX 1070 but I can only get Hardware Encoding when the HD630 is set as my primary display. Tried iMac 14,1, 14,2, and 17,1. My bios is set to have the iGPU display first, although I have tried to set it to PCIe first.

Can you provide a clean outline the exact steps you took to get hardware encoding to work while GTX 1070 as the primary display?

EDIT: Figured it out. My missing piece was using ig-platform-id: 0x19120001.

So to summarize... (keep in mind that this is to allow quick play to work with an Nvidia card, in my case a GTX 1070).

1. Use SMBIOS: 14,2. Used ig-platform-id: 0x19120001 and IntelGFX Fake ID: 0x19168086. Bios is set to PCIe as primary display device. I did nothing else to modify my graphics settings.

2. Copy the Lilu, NvidiaGraphicsFixup and Shiki Kexts into /System/Library/Extensions/ ... then repaired permission using Kext Utility. Attached all the files needed for convenience.

3. Copy the Toledo SSDT (SSDT-HDMI-HD530-Airplay.aml) into /EFI/Clover/ACPI/patched/

4. Restart.

5. Login and launch MacX Video Converter Pro (download the free trial) and press the blue "i" button to check if Hardware Encoding is supported. Hopefully it says "yes."

Hope this information can help someone else. I wrote it to be as noob friendly as possible, with the limited time that I have.
 

Attachments

  • Lilu.kext.zip
    143.1 KB · Views: 248
  • NvidiaGraphicsFixup.kext.zip
    9.8 KB · Views: 253
  • Shiki.kext.zip
    10.9 KB · Views: 278
  • SSDT-HDMI-HD530-Airplay.aml
    419 bytes · Views: 958
  • Kext Utility.app.zip
    285.8 KB · Views: 245
Last edited:
Status
Not open for further replies.
Back
Top