[PATCH 5/5] wined3d: Store maximum vertex attributes count.

Matteo Bruni mbruni at codeweavers.com
Fri Aug 26 06:34:01 CDT 2011


---
 dlls/wined3d/directx.c         |    3 +++
 dlls/wined3d/state.c           |    8 +-------
 dlls/wined3d/wined3d_private.h |    1 +
 3 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 506b875..515bc46 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -2253,6 +2253,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter)
     gl_info->limits.vertex_samplers = 0;
     gl_info->limits.combined_samplers = gl_info->limits.fragment_samplers + gl_info->limits.vertex_samplers;
     gl_info->limits.sampler_stages = 1;
+    gl_info->limits.vertex_attribs = 16;
     gl_info->limits.glsl_vs_float_constants = 0;
     gl_info->limits.glsl_ps_float_constants = 0;
     gl_info->limits.arb_vs_float_constants = 0;
@@ -2446,6 +2447,8 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter)
             gl_info->limits.vertex_samplers = tmp;
             glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB, &tmp);
             gl_info->limits.combined_samplers = tmp;
+            glGetIntegerv(GL_MAX_VERTEX_ATTRIBS_ARB, &tmp);
+            gl_info->limits.vertex_attribs = tmp;
 
             /* Loading GLSL sampler uniforms is much simpler if we can assume that the sampler setup
              * is known at shader link time. In a vertex shader + pixel shader combination this isn't
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 1535e3a..c4e0513 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -3999,15 +3999,9 @@ static inline void unload_numbered_array(struct wined3d_context *context, int i)
 static void unload_numbered_arrays(struct wined3d_context *context)
 {
     /* disable any attribs (this is the same for both GLSL and ARB modes) */
-    GLint maxAttribs = 16;
     int i;
 
-    /* Leave all the attribs disabled */
-    glGetIntegerv(GL_MAX_VERTEX_ATTRIBS_ARB, &maxAttribs);
-    /* MESA does not support it right not */
-    if (glGetError() != GL_NO_ERROR)
-        maxAttribs = 16;
-    for (i = 0; i < maxAttribs; ++i) {
+    for (i = 0; i < context->gl_info->limits.vertex_attribs; ++i) {
         unload_numbered_array(context, i);
     }
 }
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 47eee79..8fb5d27 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1456,6 +1456,7 @@ struct wined3d_gl_limits
     UINT anisotropy;
     float shininess;
     UINT samples;
+    UINT vertex_attribs;
 
     UINT glsl_varyings;
     UINT glsl_vs_float_constants;
-- 
1.7.3.4




More information about the wine-patches mailing list