Henri Verbeet : wined3d: Get rid of the fglrx point sprite hack.

Alexandre Julliard julliard at winehq.org
Fri Aug 5 10:20:48 CDT 2011


Module: wine
Branch: master
Commit: 812a31482149116e4d3332791d4bd42ba641791c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=812a31482149116e4d3332791d4bd42ba641791c

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Thu Aug  4 19:53:31 2011 +0200

wined3d: Get rid of the fglrx point sprite hack.

Fglrx 9.3 is well over 2 years old at this point. I'd strongly encourage
anyone still affected by this to upgrade to the r300g driver.

---

 dlls/wined3d/context.c         |   11 ++++++---
 dlls/wined3d/directx.c         |   41 ----------------------------------------
 dlls/wined3d/state.c           |   13 ------------
 dlls/wined3d/wined3d_private.h |    1 -
 4 files changed, 7 insertions(+), 59 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 620a89b..ac252d8 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -1522,11 +1522,14 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
         GL_EXTCALL(glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, strlen(dummy_program), dummy_program));
     }
 
-    for (s = 0; s < gl_info->limits.point_sprite_units; ++s)
+    if (gl_info->supported[ARB_POINT_SPRITE])
     {
-        GL_EXTCALL(glActiveTextureARB(GL_TEXTURE0_ARB + s));
-        glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
-        checkGLcall("glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE)");
+        for (s = 0; s < gl_info->limits.textures; ++s)
+        {
+            GL_EXTCALL(glActiveTextureARB(GL_TEXTURE0_ARB + s));
+            glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
+            checkGLcall("glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE)");
+        }
     }
 
     if (gl_info->supported[ARB_PROVOKING_VERTEX])
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index a93895e..cdf3c11 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -596,13 +596,6 @@ static BOOL match_apple_nonr500ati(const struct wined3d_gl_info *gl_info, const
     return TRUE;
 }
 
-static BOOL match_fglrx(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
-        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
-{
-    return gl_vendor == GL_VENDOR_FGLRX;
-
-}
-
 static BOOL match_dx10_capable(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
         enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
 {
@@ -801,27 +794,6 @@ static void quirk_apple_glsl_constants(struct wined3d_gl_info *gl_info)
     gl_info->reserved_glsl_constants = max(gl_info->reserved_glsl_constants, 12);
 }
 
-/* fglrx crashes with a very bad kernel panic if GL_POINT_SPRITE_ARB is set to GL_COORD_REPLACE_ARB
- * on more than one texture unit. This means that the d3d9 visual point size test will cause a
- * kernel panic on any machine running fglrx 9.3(latest that supports r300 to r500 cards). This
- * quirk only enables point sprites on the first texture unit. This keeps point sprites working in
- * most games, but avoids the crash
- *
- * A more sophisticated way would be to find all units that need texture coordinates and enable
- * point sprites for one if only one is found, and software emulate point sprites in drawStridedSlow
- * if more than one unit needs texture coordinates(This requires software ffp and vertex shaders though)
- *
- * Note that disabling the extension entirely does not gain predictability because there is no point
- * sprite capability flag in d3d, so the potential rendering bugs are the same if we disable the extension. */
-static void quirk_one_point_sprite(struct wined3d_gl_info *gl_info)
-{
-    if (gl_info->supported[ARB_POINT_SPRITE])
-    {
-        TRACE("Limiting point sprites to one texture unit.\n");
-        gl_info->limits.point_sprite_units = 1;
-    }
-}
-
 static void quirk_amd_dx9(struct wined3d_gl_info *gl_info)
 {
     quirk_arb_constants(gl_info);
@@ -963,11 +935,6 @@ static const struct driver_quirk quirk_table[] =
         "Init texcoord .w for Apple ATI >= r600 GPU driver"
     },
     {
-        match_fglrx,
-        quirk_one_point_sprite,
-        "Fglrx point sprite crash workaround"
-    },
-    {
         match_dx10_capable,
         quirk_clip_varying,
         "Reserved varying for gl_ClipPos"
@@ -2625,14 +2592,6 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter)
         /* GL_ARB_half_float_vertex is a subset of GL_NV_half_float. */
         gl_info->supported[ARB_HALF_FLOAT_VERTEX] = TRUE;
     }
-    if (gl_info->supported[ARB_POINT_SPRITE])
-    {
-        gl_info->limits.point_sprite_units = gl_info->limits.textures;
-    }
-    else
-    {
-        gl_info->limits.point_sprite_units = 0;
-    }
     checkGLcall("extension detection");
 
     LEAVE_GL();
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index c3dd7ff..b3c1270 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -1594,21 +1594,8 @@ static void state_pointsprite_w(struct wined3d_context *context, const struct wi
 
 static void state_pointsprite(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
 {
-    const struct wined3d_gl_info *gl_info = context->gl_info;
-
     if (state->render_states[WINED3DRS_POINTSPRITEENABLE])
     {
-        static BOOL warned;
-
-        if (gl_info->limits.point_sprite_units < gl_info->limits.textures && !warned)
-        {
-            if (use_ps(state) || state->lowest_disabled_stage > gl_info->limits.point_sprite_units)
-            {
-                FIXME("The app uses point sprite texture coordinates on more units than supported by the driver\n");
-                warned = TRUE;
-            }
-        }
-
         glEnable(GL_POINT_SPRITE_ARB);
         checkGLcall("glEnable(GL_POINT_SPRITE_ARB)");
     } else {
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index d340049..129c156 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1445,7 +1445,6 @@ struct wined3d_gl_limits
     UINT texture3d_size;
     float pointsize_max;
     float pointsize_min;
-    UINT point_sprite_units;
     UINT blends;
     UINT anisotropy;
     float shininess;




More information about the wine-cvs mailing list