-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hi,
This patch has a few unrelated changes. The core change is that it re-introduces a hack we once had in Wine and removed because it broke newer mac GPUs. The CrossOver version of the hack works a bit better than the unconditional Wine version, but it's still ugly.
Am 2015-03-28 um 06:15 schrieb Sergey Isakov:
- /* Non-Apple GL vendors report uniforms correctly */
- if (!match_apple(gl_info, gl_renderer, gl_vendor, card_vendor, device)) return FALSE;
- /* All dx9 cards are overreported on OSX */
- if (!match_dx10_capable(gl_info, gl_renderer, gl_vendor, card_vendor, device)) return TRUE;
- /* Nvidia and Intel DX10 cards support > 256 uniforms */
- if (card_vendor != HW_VENDOR_AMD) return FALSE;
It is terrible that OSX lies about the GPU capability and then forces applications to have a crystal ball that tells them what the GPU can actually do.
- From a pragmatic point of view I don't think OSX will ever change in this regard. It was a design decision by Apple to do this, and they stopped updating drivers for the old hardware a long time ago.
I am open to re-introducing the hack if we can find a way to detect the bug more directly. E.g. try to declare a shader with 257 uniforms, read them with indirect addressing so the driver can't optimize the access and then check for software fallbacks. There's a CGL function for checking that, but I don't remember from the top of my head how it works.
On Mar 28, 2015, at 4:21 AM, Stefan Dösinger stefandoesinger@gmail.com wrote: then check for software fallbacks. There's a CGL function for checking that, but I don't remember from the top of my head how it works.
You mean:
CGLGetParameter(ctx, kCGLCPGPUVertexProcessing, &gpu_vertex); CGLGetParameter(ctx, kCGLCPGPUFragmentProcessing, &gpu_frag);
When each one is false, it means that the corresponding stage fell back to software.
We may need some kind of Wine-specific WGL extension for this, though. wined3d doesn’t know about CGL contexts.
By the way, those are “get” only. You can’t force the driver to do it in hardware by forcing them to true (in case you get that idea).
Chip