kode54: yeah, such a feature is possible, but imo it shouldn't be done in userland. All we could do is to readback the framebuffer once per frame and to display it on the other gpu. Sounds fine, but this is a huge overhead because of two reasons: First, the readback of this framebuffers usually stalls the driver and doesn't allow to async swapping frames. Second, in userspace, we can't share buffers between both drivers, so there must be three copys: vram of your amd gpu into main memory (by your gpu), memcpy from main memory controlled by the amd driver into main memory controlled by your nvidia driver (all by cpu), and in the end another gpu based copy into vram of your nvidia gpu. As a full hd stream usually has about 500MB/s, this memcpy matters a lot.
pauldacheez: We don't support chosing a gpu, we only support to give a hint on d3d which gpu _should_ be used. That's why it offen fails on optimus laptops :-(
Edit: I've missed to say how it should be done...
The usual way to handle dual gpu systems is handle all of this in the driver itself. eg optimus on windows or dri_prime on linux are such frameworks. But I don't know if osx supports this, maybe you'll find something with optimus+osx?
The os _is_ able to share buffers, so they don't need the cpu based memcpy. As the displaying gpu often only has shared memory, the second gpu based memcpy can also be skiped. And a nice implemention of the first gpu based memcpy is also possible as almost every gpu has parallel memory streaming units.
pauldacheez: We don't support chosing a gpu, we only support to give a hint on d3d which gpu _should_ be used. That's why it offen fails on optimus laptops :-(
Edit: I've missed to say how it should be done...
The usual way to handle dual gpu systems is handle all of this in the driver itself. eg optimus on windows or dri_prime on linux are such frameworks. But I don't know if osx supports this, maybe you'll find something with optimus+osx?
The os _is_ able to share buffers, so they don't need the cpu based memcpy. As the displaying gpu often only has shared memory, the second gpu based memcpy can also be skiped. And a nice implemention of the first gpu based memcpy is also possible as almost every gpu has parallel memory streaming units.
