Module: wine Branch: master Commit: c74c544cc63db4db465504e2602224155a0d1dca URL: http://source.winehq.org/git/wine.git/?a=commit;h=c74c544cc63db4db465504e260...
Author: Matteo Bruni mbruni@codeweavers.com Date: Fri Aug 26 01:12:30 2011 +0200
wined3d: Store maximum vertex attributes count.
---
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;