Jump to content

How to get AirPlay to work with Discrete Graphics


rcork
 Share

18 posts in this topic

Recommended Posts

What i've figured out is that you need a SandyBridge or IvyBridge CPU with Intel HD3000 or HD4000 integrated GPU and it must be enabled. The AirPlay capability relies on the hardware encode/decode function (known as Intel QuickSync) in order to work. For those people that use the integrated graphics as your only GPU, AirPlay should work out of the box. For those of us using a discrete graphics cards, you won't be able to use AirPlay by default. In order to enable it, this is what i did (on my Asus P8Z68-V motherboard).

 

1. In BIOS, under System Management, go to Graphics Management

2. Set Primary device to iGPU

3. Set memory to 512M

4. Set Initiate Integrated Graphics to Enabled (ie. Lucid)

5. Save BIOS and exit

 

I have two monitors, a Cinema Display connected to DisplayPort and an LCD connected via DVI, both connected to an ATI HD6850. I have GraphicsEnabler=Yes in org.chameleon.boot.plist.

 

When i boot, the monitors will be blank as the primary graphics device is set to the Intel HD3000 but i don't have any monitors hooked up. OSX loads and once it gets to the Login window, both monitors turn on and i can log in as usual. I can verify that both the integrated and discreet graphics cards are recognized by OSX in System Information.

 

I also tried connecting the LCD via DVI to the HD3000 and the Cinema Display to the HD6850. I can then see the boot screens on the LCD but i get strange artifacts in OSX so i decided i can live without the boot screens since my system is pretty stable and i don't have to worry about diagnosing boot problems.

post-280264-0-87619800-1340739349_thumb.png

post-280264-0-36146500-1340739818_thumb.png

  • Like 1
Link to comment
Share on other sites

I don't believe you understand how the whole AirPlay works. It's a streaming not a signal you can push via your gpu.

 

http://support.apple.com/kb/HT4437

I don't believe you understand how it creates the stream. In fact, no one but apple knows technically "how", they create the stream but i can tell you from my personal experience that without the iGPU enabled, AirPlay doesn't work. There is similar discussions on the apple developer forums about how people without the latest Sandy Bridge cpus can't enable AirPlay either.

 

Second generation Sandy Bridge cpus and the new Ivy Bridge cpus have a hardware encoder/decoder that Intel calls QuickSync (http://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.html) which is part of the integrated HD3000/4000 graphics. In order to take advantage of the hardware encoder, the integrated graphics of the CPU must be enabled. In previous developer previews, it was possible to enable AirPlay mirroring without having the iGPU enabled. Apple was obviously using the CPU to create the encoded stream of the video buffer. In DP4, it looks like they've changed the encoding to take advantage of the hardware based encoder (reducing the CPU usage to support AirPlay), thus requiring the integrated graphics to be enabled (at least on Hacks).

 

Again, only Apple knows truly the technical details behind how they are creating the AirPlay stream but based on my testing and other reports in the developer forums, i think this is what is happening. If anyone using DP4 on an older Core 2 Duo or first generation core processor has AirPlay mirroring from Mountain Lion to AppleTV working, please post system setup and results below so we can start to figure out the true requirements. Otherwise we'll just have to wait to see what Apple says are the minimum requirements when they release ML next month.

Link to comment
Share on other sites

I see, thanks for bringing me up to par about what Airplay actually is instead of what Apple sugarcoats it to be. So in actuality it is a streaming going on involving the iGPU in some form of way. My apologies for assuming what you were talking about was the Airplay that Apple advertises and not the actuality of how Airplay works. Does Console show anything about the Airplay connection just curious as to where to start on this.

Link to comment
Share on other sites

I see, thanks for bringing me up to par about what Airplay actually is instead of what Apple sugarcoats it to be. So in actuality it is a streaming going on involving the iGPU in some form of way. My apologies for assuming what you were talking about was the Airplay that Apple advertises and not the actuality of how Airplay works. Does Console show anything about the Airplay connection just curious as to where to start on this.

 

There's nothing that would prevent apple from using the CPU to encode the stream that is sent to the AppleTV. They choose to do that on the GPU to offload the work to the GPU instead of using the CPU.

 

When i enable AirPlay, i see a lot of logs from WindowServer in Console

 

6/27/12 8:04:44.229 PM WindowServer[129]: Display 0x04248ed0: GL mask 0x1; bounds (0, 0)[2560 x 1440], 42 modes available
Main, Active, on-line, enabled, boot, OpenGL-accel, Vendor 610, Model 9226, S/N 16050753, Unit 0, Rotation 0
UUID 0x00000610000092261605075300000000, ColorProfile { 2, "LED Cinema Display"}
6/27/12 8:04:44.229 PM WindowServer[129]: GLCompositor: GL renderer id 0x01021b05, GL mask 0x0000000f, accelerator 0x00003d5b, unit 0, caps QEX|QGL|MIPMAP, vram 1024 MB
texture units 8, texture max 16384, viewport max {16384, 16384}, extensions FPRG|NPOT|GLSL|FLOAT
6/27/12 8:04:44.230 PM WindowServer[129]: Display 0x003f003f: GL mask 0x8; bounds (3584, 0)[1 x 1], 1 modes available
off-line, enabled, Vendor ffffffff, Model ffffffff, S/N ffffffff, Unit 3, Rotation 0
UUID 0xffffffffffffffffffffffff003f003f
6/27/12 8:04:44.230 PM WindowServer[129]: Display 0x003f003e: GL mask 0x4; bounds (3585, 0)[1 x 1], 1 modes available
off-line, enabled, Vendor ffffffff, Model ffffffff, S/N ffffffff, Unit 2, Rotation 0
UUID 0xffffffffffffffffffffffff003f003e
6/27/12 8:04:44.230 PM WindowServer[129]: Display 0x1b55394d: GL mask 0x2; bounds (-1680, 338)[1680 x 1050], 78 modes available
Active, on-line, enabled, OpenGL-accel, Vendor 1e6d, Model 566f, S/N 5a28d, Unit 1, Rotation 0
UUID 0x00001e6d0000566f0005a28d00000000, ColorProfile { 3, "L227W"}
6/27/12 8:04:44.230 PM WindowServer[129]: GLCompositor: GL renderer id 0x01021b05, GL mask 0x0000000f, accelerator 0x00003d5b, unit 0, caps QEX|QGL|MIPMAP, vram 1024 MB
texture units 8, texture max 16384, viewport max {16384, 16384}, extensions FPRG|NPOT|GLSL|FLOAT
6/27/12 8:04:44.569 PM WindowServer[129]: Created shield window 0x709 for display 0x04248ed0
6/27/12 8:04:44.570 PM WindowServer[129]: Created shield window 0x70a for display 0x003f003f
6/27/12 8:04:44.570 PM WindowServer[129]: Created shield window 0x70b for display 0x003f003e
6/27/12 8:04:44.579 PM WindowServer[129]: Created shield window 0x70c for display 0x1b55394d
6/27/12 8:04:44.653 PM WindowServer[129]: Display 0x04248ed0: MappedDisplay Unit 0: Mode 1920 x 1080, CGSThirtytwoBitColor, Resolution 1, IOMode 0x8000100f, IODepth 0x1, IOReturn 0x0
6/27/12 8:04:44.659 PM WindowServer[129]: Display 0x1b55394d: MappedDisplay Unit 1: Startup Mode 1680 x 1050, CGSThirtytwoBitColor, Resolution 1, IOMode 0x43e, IODepth 0x1, IOReturn 0x0
6/27/12 8:04:44.659 PM WindowServer[129]: Display mode changed
6/27/12 8:04:44.661 PM WindowServer[129]: MPAccessSurfaceForDisplayDevice: Set up page flip mode on display 0x04248ed0 device: 0x100563320  isBackBuffered: 1 numComp: 3 numDisp: 3
6/27/12 8:04:46.829 PM WindowServer[129]: MPAccessSurfaceForDisplayDevice: Set up page flip mode on display 0x1b55394d device: 0x100563d30  isBackBuffered: 1 numComp: 3 numDisp: 3
6/27/12 8:04:46.879 PM WindowServer[129]: Display 0x04248ed0: GL mask 0x1; bounds (0, 0)[1920 x 1080], 42 modes available
Main, Active, on-line, enabled, boot, OpenGL-accel, Vendor 610, Model 9226, S/N 16050753, Unit 0, Rotation 0
UUID 0x00000610000092261605075300000000, ColorProfile { 2, "LED Cinema Display"}
6/27/12 8:04:46.879 PM WindowServer[129]: GLCompositor: GL renderer id 0x01021b05, GL mask 0x0000000f, accelerator 0x00003d5b, unit 0, caps QEX|QGL|MIPMAP, vram 1024 MB
texture units 8, texture max 16384, viewport max {16384, 16384}, extensions FPRG|NPOT|GLSL|FLOAT
6/27/12 8:04:46.879 PM WindowServer[129]: Display 0x003f003f: GL mask 0x8; bounds (2944, 0)[1 x 1], 1 modes available
off-line, enabled, Vendor ffffffff, Model ffffffff, S/N ffffffff, Unit 3, Rotation 0
UUID 0xffffffffffffffffffffffff003f003f
6/27/12 8:04:46.879 PM WindowServer[129]: Display 0x003f003e: GL mask 0x4; bounds (2945, 0)[1 x 1], 1 modes available
off-line, enabled, Vendor ffffffff, Model ffffffff, S/N ffffffff, Unit 2, Rotation 0
UUID 0xffffffffffffffffffffffff003f003e
6/27/12 8:04:46.879 PM WindowServer[129]: Display 0x1b55394d: GL mask 0x2; bounds (-1680, 338)[1680 x 1050], 78 modes available
Active, on-line, enabled, OpenGL-accel, Vendor 1e6d, Model 566f, S/N 5a28d, Unit 1, Rotation 0
UUID 0x00001e6d0000566f0005a28d00000000, ColorProfile { 3, "L227W"}
6/27/12 8:04:46.879 PM WindowServer[129]: GLCompositor: GL renderer id 0x01021b05, GL mask 0x0000000f, accelerator 0x00003d5b, unit 0, caps QEX|QGL|MIPMAP, vram 1024 MB
texture units 8, texture max 16384, viewport max {16384, 16384}, extensions FPRG|NPOT|GLSL|FLOAT
6/27/12 8:04:46.882 PM WindowServer[129]: **DMPROXY** (2) Found `/System/Library/CoreServices/DMProxy'.
6/27/12 8:04:46.885 PM WindowServer[129]: **DMPROXY** (2) Found `/System/Library/CoreServices/DMProxy'.
6/27/12 8:04:46.926 PM WindowServer[129]: Display 0x04248ed0: MappedDisplay Unit 0; ColorProfile { 2, "LED Cinema Display"}; TransferTable (256, 3)
6/27/12 8:04:46.926 PM WindowServer[129]: Display 0x04248ed0: MappedDisplay Unit 0; ColorProfile { 2, "LED Cinema Display"}; TransferTable (256, 3)
6/27/12 8:04:46.927 PM WindowServer[129]: Display 0x1b55394d: MappedDisplay Unit 1; ColorProfile { 3, "L227W"}; TransferFormula (1.000000, 1.000000, 1.000000)
6/27/12 8:04:46.927 PM WindowServer[129]: Display 0x1b55394d: MappedDisplay Unit 1; ColorProfile { 3, "L227W"}; TransferFormula (1.000000, 1.000000, 1.000000)
6/27/12 8:04:46.955 PM WindowServer[129]: Display 0x04248ed0: MappedDisplay Unit 0; ColorProfile { 2, "LED Cinema Display"}; TransferTable (256, 3)
6/27/12 8:04:46.955 PM WindowServer[129]: Display 0x04248ed0: MappedDisplay Unit 0; ColorProfile { 2, "LED Cinema Display"}; TransferTable (256, 3)
6/27/12 8:04:46.956 PM WindowServer[129]: Display 0x1b55394d: MappedDisplay Unit 1; ColorProfile { 3, "L227W"}; TransferFormula (1.000000, 1.000000, 1.000000)
6/27/12 8:04:46.956 PM WindowServer[129]: Display 0x1b55394d: MappedDisplay Unit 1; ColorProfile { 3, "L227W"}; TransferFormula (1.000000, 1.000000, 1.000000)

Link to comment
Share on other sites

From the logs it would appear that the gpu is mapping to your ACD and the second monitor but your 6850 is powering these two so it has nothing to do with Airplay. If what you said is true, Airplay shouldn't have anything for the most part to do with the discrete gpu but the iGPU yet still info regarding the monitors connected to the 6850 are showing. Question though, since you're trying to Airplay sans the  TV, what do you have the iGPU Airplaying to? I see what the 6850 is doing but not totally sure about the iGPU.

Link to comment
Share on other sites

This topic is spiraling so i'll just clarify one more time. The iGPU is not powering the physical displays. AirPlay is using a hardware video encoder that is built into the Intel HD3000 to create the stream that is sent to the AppleTV. In order to use the hardware video encoder, the iGPU needs to enabled in the BIOS.

Link to comment
Share on other sites

I understand that all I was saying was that based on the log information I saw nothing pertaining to Airplay to an Apple TV is what I'm trying to get at. I got it when you said it the first time but again my post was in relevance to the logs you posted.

Link to comment
Share on other sites

Thanks for sharing this information.

 

I have no Videoout on my Board because its a z68 and not h68. The iGPU is only used for Virtu in in Windows for Encoding/Decoding acceleration. I think we need a hack/fix for this.

Link to comment
Share on other sites

I'm using a i7 2600k

 

Oh, I couldn't get it to work and when I read on the link to intel's site it said something about "3rd gen" cpus, so I just figured. What beta on AppleTV are you using? I'm currently on 6.0 beta 1, should work right?

Link to comment
Share on other sites

Screenception! mirroring my screen inside my screen? :|

I've already disabled the onboard graphics and won't enable it again cause I really like to see the boot process and bios. Also it was a terrible pain to set the discrete graphics as primary again as I don't have a HDMI monitor (only port in my mobo) and had to reset the bios to boot again!

Link to comment
Share on other sites

  • 4 weeks later...

Excellent analysis. I have the same issue on my GA-Z77X-UD5H/I7- 3770 system. Can select Apple tv as output for sound but not airplay mirroring - have not been able to even get the icon to appear so far (with discrete graphics; GeForce 9800 GT)

However, airplay mirroring works fine from within iTunes.

I am curious if there are any ideas on why there is this difference? Does iTunes not use Intel Quick Sync?

Link to comment
Share on other sites

Here are my two cents. I am running ML with i5 3570K (HD4000) and Sapphire Radeon 6850. AirPlay ONLY works with my Apple TV (3rd gen.) if the HD4000 is enabled in BIOS and initialized as the primary gfx.

 

BTW: when I was on Lion 10.7.4 I was using the software AirParrot. It does basically the same thing like Apples AirPlay (streaming of Desktop and sound to Apple TV). It costs 10$ and there is a free trial version. I used it to stream Plex to my TV since Apple TV 3 is still not jailbreakable.

 

AirParrot uses the CPU to encode the stream, so there is no limitation regarding internal gpu. If you dont have the right cpu or you dont want to enable the intrnal gpu then try AirParrot.

Link to comment
Share on other sites

 Share

×
×
  • Create New...