Stefan Dösinger : wined3d: Move the generic mac glsl uniform fixup to the quirk table.
Alexandre Julliard
julliard at winehq.org
Mon Apr 20 11:33:09 CDT 2009
Module: wine
Branch: master
Commit: 50e91f8d84f847d7102587481f200a6c52f956fc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=50e91f8d84f847d7102587481f200a6c52f956fc
Author: Stefan Dösinger <stefan at codeweavers.com>
Date: Tue Apr 14 20:13:11 2009 +0200
wined3d: Move the generic mac glsl uniform fixup to the quirk table.
---
dlls/wined3d/directx.c | 31 ++++++++++++++++---------------
1 files changed, 16 insertions(+), 15 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 260d579..6d3531a 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -4010,6 +4010,10 @@ static BOOL match_ati_r300_to_500(WineD3D_GL_Info *gl_info) {
return FALSE;
}
+static BOOL match_apple(WineD3D_GL_Info *gl_info) {
+ return implementation_is_apple(gl_info);
+}
+
static void quirk_arb_constants(WineD3D_GL_Info *gl_info) {
TRACE_(d3d_caps)("Using ARB vs constant limit(=%u) for GLSL\n", gl_info->vs_arb_constantsF);
gl_info->vs_glsl_constantsF = gl_info->vs_arb_constantsF;
@@ -4022,6 +4026,18 @@ struct driver_quirk quirk_table[] = {
match_ati_r300_to_500,
quirk_arb_constants,
"ATI GLSL constant quirk"
+ },
+ /* MacOS advertises more GLSL vertex shader uniforms than supported by the hardware, and if more are
+ * used it falls back to software. While the compiler can detect if the shader uses all declared
+ * uniforms, the optimization fails if the shader uses relative addressing. So any GLSL shader
+ * using relative addressing falls back to software.
+ *
+ * ARB vp gives the correct amount of uniforms, so use it instead of GLSL
+ */
+ {
+ match_apple,
+ quirk_arb_constants,
+ "Apple GLSL uniform override"
}
};
@@ -4036,21 +4052,6 @@ static void fixup_extensions(WineD3D_GL_Info *gl_info) {
}
if(apple) {
- /* MacOS advertises more GLSL vertex shader uniforms than supported by the hardware, and if more are
- * used it falls back to software. While the compiler can detect if the shader uses all declared
- * uniforms, the optimization fails if the shader uses relative addressing. So any GLSL shader
- * using relative addressing falls back to software.
- *
- * ARB vp gives the correct amount of uniforms, so use it instead of GLSL
- */
- if(gl_info->vs_glsl_constantsF <= gl_info->vs_arb_constantsF) {
- FIXME("GLSL doesn't advertise more vertex shader uniforms than ARB. Driver fixup outdated?\n");
- } else {
- TRACE("Driver claims %u GLSL vs uniforms, replacing with %u ARB vp uniforms\n",
- gl_info->vs_glsl_constantsF, gl_info->vs_arb_constantsF);
- gl_info->vs_glsl_constantsF = gl_info->vs_arb_constantsF;
- }
-
/* The Intel GPUs on MacOS set the .w register of texcoords to 0.0 by default, which causes problems
* with fixed function fragment processing. Ideally this flag should be detected with a test shader
* and OpenGL feedback mode, but some GL implementations (MacOS ATI at least, probably all MacOS ones)
More information about the wine-cvs
mailing list