Jump to content

Full Hardware Acceleration for GMA3150 - could it be done?

10 posts in this topic

Recommended Posts

Well, there are people trying, and trying hard:




We need all help we can gather for this to be done. If you have any knowledge about what makes apple graphics tick, or about kext patching, or about C/C++/Cocoa/Assembly/Hex editing, join us!


Even if you're not particularly skilled in any of these fields, but are willing to help somehow, you're welcome!


(sorry if this post looks like armed forces enlistment propaganda, lol!)


A little review of the current situation to help the newcomers to this thread (and arches, noobun2, meklort, firemansam and anyone involved can correct any wrong info if they please):


1) GMA 3150 isn't supported by apple, so we couldn't achieve full graphics acceleration yet. However, you can get native resolution (in most cases, 1024 x 600) even with no kext loaded. But, as said, no qe/ci: certain programs, like iMovie, won't work. Certain features, like time machine, will be in the better prospect buggy and unreliable. Youtube movies are a no go;


2) Even without full support, some people can get the GMA 950 kext to load with some editing (i'm not sure what must be edited though). But this will result in extreme slowness of the system, and the boot time will exceed 30 min., at least in older iterations of osx (arches, if i understand correctly, have a boot time of circa 2 min. with mountain lion, however without any hardware acceleration, unlike lion, even with the kext actually loading). Since GMA950 (which has native qe/ci) and GMA3150 are somewhat related, the GMA 950 kext is our current target for getting (hopefully) qe/ci for GMA3150 someday, at least in Lion (and hopefully in Mountain Lion someday, if we somehow patch the GMA950 to give acceleration in 10.8);


3) It's possible to use the gma 950 ketx framebuffer to attain a certain degree of graphics acceleration (again, how to do it, and how much graphics acceleration can be achieve, this will be for arches to say to us). As i understand, with the framebuffer, some simple (but crucial for a reasonable user experience) graphics tasks can be done, like watching youtube movies. However, as the sweet always come with the sour, when using the framebuffer, the cursor gets corrupted, which is pretty annoying. Meklort developed a solution for it in snow leo, but it does not work in mountain lion, and as far as i know was not tested in lion.



That's the current situation. Anyone who wish to contribute to this adventurous task, be welcome! I recommend to spread this thread in every osx86 forum. Maybe this holds the attention of more capable people to unite eforts with us.


Our primary material for this job:


AppleIntelGMA950.kext.zip: The unpatched GMA950 kext;


2009 Q4 Drivers: Intel Linux Graphics: 2009Q4

2010 Q1 Drivers: Intel Linux Graphics: 2010Q1: The first one is the last intellinux915 before Linux support for GMA3150, the second is the intellinux with GMA3150 support. The codes could offer hints at the patches that should be made, and even the possibility of a full port.

  • Like 1


quote_icon.png Originally Posted by arches viewpost-right.png

But I found more threads regarding batch buffer problems, and they all end like I'm used to it:

Mouse cursor is visible and usable/movable without slowdown, but the screen remains blank. See those posts here:


#612766 - Failed to submit batch buffer - graphic is not starting at all - Debian Bug report logs. ([...] However in these bugs the system is still usable (massive screen coruption). Here right from the beginning of starting X you'll see only black with a cursor on it. [...])


Failed to submit batch buffer (Xorg) ([...] Symptoms : A blank screen on login. You can even see your mouse pointer but nothing else. [...])

Maybe we found (better saying, arches found) the reason behind the extreme slowness of the system when trying to get acceleration for the GMA3150 with the GMA950 patched kext. The next (and very hard) step, if its the case, is to apply the correct changes to the 950 binaries to fix the problem.

Another update (still not the news we're expecting, but it's work in progress anyway):






quote_icon.png Originally Posted by arches viewpost-right.png

After editing the PCI ID in the Binary and editing the info.plist, I managed to load the AppleIntelGMA950.kext with our A011 device ID without slowing down, but now I can't select the Transparent Menu Bar option? If anyone wants to know, I archived this by changing the IOVARendererID entry in the .plist to the subsystem of the GMA 3150, which is 1584103C.




However, no QE/CI yet as arches told me later, even the flash movies being able to load.

  • 2 weeks later...

Update of the current situation:


We're stuck at the point where we can have some openGL support on Lion 10.7.4 (no QE/CI though) with the patched 10.7.x 32-bit GMA950 kexts (we choose to work on Lion support because, apparently, even the 64-bit 10.6.2 GMA950 kexts don't work well with Mountain Lion, but it can be focused somewhere in the future). Arches think we have to deal with three issues:



- Buffer problems: maybe it tries to overwrite and can't do that, or some other unknown problem;

- Timer problems: wrong timeouts, or it doesn't allow enough time to do a function;

- Plug-in/Bundle issues: maybe they don't load correctly;

- All of the above.


We need help! Specifically, we need someone who's skilled in hex editing and general disassembling, since it's been the main obstacle for us to get to an ultimate solution.


Thank you, and know that we're still on it, even it's being as hard as it can possibly be.

  • 3 months later...

By Philosoraptor, from osx86.net:


Just checked the latest Shailua driver and it doesn't support KDP (checked both the latest ###### inclusion and a direct download from Shailua's post). I'm pretty much stuck looking at modding that driver. On the plus side, I've learned more about ethernet drivers and the IONetworkingFamily stack than I've ever wanted to know! :P Getting closer to figuring out what (and what not) to do to integrate KDP support for it though, and the knowledge spills over into the graphics driver issue since the OSX driver model follows some conventions I didn't expect.



So far, I've created a stub for the gma3150. I've only gotten basic loading/matching and a dump of the 3150's PCI config registers to the dmesg log working. Otherwise, it does nothing else and won't even kextunload. Here's a sample, run from an Asus 1215N:


Kernel is LP64


display: Not usable

GFX0: Not usable


AsusIntelGMA3150FB::probe(VGA, 9001)

PCI dev:ven = [a001:8086]

sub:subven = [8446:1043]

PCI Config Registers

[a001:8086] Revision ID = 02

[a001:8086] Command = 0007

[a001:8086] Status = 0090

[a001:8086] Class Code = 030000

[a001:8086] Cache Line Size = 00

[a001:8086] Latency Timer = 00

[a001:8086] Header Type = 80

[a001:8086] IO Memory Region Address Registers

[a001:8086] Memory Mapped IO = :f5d00000

[a001:8086] IO Space = :0000cc01

[a001:8086] Gfx Memory Range = :b0000008

[a001:8086] Gfx Translt Tbl = :f5c00000

[a001:8086] CardBus CIS Addr = :00000000

[a001:8086] Expansion ROM Adr= :00000000

[a001:8086] Capabilities Ptr = 00000000:00000090

[a001:8086] Interrupt Line = 16

[a001:8086] Interrupt Pin = 1

[a001:8086] Minimum Grant = 0

[a001:8086] Maximum Latency = 0

PCI Device Memory Regions:

[a001:8086] region 0: 524288 bytes @ 00000000:f5d00000

[a001:8086] region 1: 8 bytes @ 00000000:0000cc00

[a001:8086] region 2: 268435456 bytes @ 00000000:b0000000

[a001:8086] region 3: 1048576 bytes @ 00000000:f5c00000


AsusIntelGMA3150FB::probe(display, 9001)

PCI dev:ven = [a002:8086]

sub:subven = [8446:1043]

PCI Config Registers

[a002:8086] Revision ID = 02

[a002:8086] Command = 0007

[a002:8086] Status = 0090

[a002:8086] Class Code = 038000

[a002:8086] Cache Line Size = 00

[a002:8086] Latency Timer = 00

[a002:8086] Header Type = 80

[a002:8086] IO Memory Region Address Registers

[a002:8086] Memory Mapped IO = :f5d80000

[a002:8086] IO Space = :00000000

[a002:8086] Gfx Memory Range = :00000000

[a002:8086] Gfx Translt Tbl = :00000000

[a002:8086] CardBus CIS Addr = :00000000

[a002:8086] Expansion ROM Adr= :00000000

[a002:8086] Capabilities Ptr = 00000000:000000d0

[a002:8086] Interrupt Line = 0

[a002:8086] Interrupt Pin = 0

[a002:8086] Minimum Grant = 0

[a002:8086] Maximum Latency = 0

PCI Device Memory Regions:

[a002:8086] region 0: 524288 bytes @ 00000000:f5d80000




After lots o' study of the docs for the 4th gen (X3100+ series), the one subsequent to the 3rd gen (i915/950/3150), I've come up with a general interpretation of what the memory regions are and the device's general abilities.


I know which components contain which classes for the framebuffer, display, accelerator (CFPlugin), and OpenGL (bundle) & VA (bundle). What isn't obvious is how they all work together: i.e. who gets detected first? who spawns who? who calls who? Some of it is clear only in a general sense, but specifics like "what does the fb component need to do or setup for the GL/VA component to be able to do its job?" are missing.


Also, someone find out how the CoreFoundation Plugin architecture works. The IOAccelerator is actually a class that mostly just sets up function pointers according to a CFPlugin type/interface model, but what each portion of that is supposed to do is highly undocumented. This means the more we can find out about what is public, the CFPlugin architecture part, the easier it'll be to try filling in the blanks.


I'll try to post a link later with the wip stub so we can compare whether devices on the diff models we have generally follow the same memory configuration.


Here it is:



Test by: kextutil -t AsusIntelGMA3150FB.kext

Load and match by: kextutil -v 6 AsusIntelGMA3150FB.kext

Note: It won't manually unload, at least not for me, so the only way to clear it out of the system is a reboot.

It currently matches any of a001, a002, a011, or a012 from Intel (8086).

However, it only matches using the Info.plist parameters, not via probe(), so modifying the Info.plist will make it load/match to any device.

It currently only dumps the PCI reg values, so it should run for any PCI device.

  • 3 weeks later...
  • 8 months later...
  • 4 months later...
  • 8 months later...

This thread just seems to have died in the middle of the night - did any of you have success?


I have been looking all over the web at posts like this, and I have a problem which I believe is similar to other people's: the 755 I have is ULTRA SFF, not just regular, which means no expansion ports whatsoever. I.E. Getting another video card is physically impossible; it's not a matter of finances. Does anyone out there know if anyone has come up with a way to display high resolutions or even better enable graphics acceleration on this Q35 graphics chipset?

  • Create New...