From 0717d00cce6be38c0875c2cef03f7302368f04e9 Mon Sep 17 00:00:00 2001 From: Matteo Bruni Date: Thu, 2 Feb 2017 01:04:03 +0100 Subject: [PATCH] wined3d: Don't query FFP lights count on core profile. Signed-off-by: Matteo Bruni Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/wined3d/device.c | 7 ++++--- dlls/wined3d/directx.c | 10 +++++++--- dlls/wined3d/wined3d_private.h | 1 + 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index acf43071de4..1c69cddaba8 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -1730,10 +1730,11 @@ HRESULT CDECL wined3d_device_set_light_enable(struct wined3d_device *device, UIN } else { + unsigned int light_count = device->adapter->d3d_info.limits.active_light_count; unsigned int i; - const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; - /* Find a free GL light. */ - for (i = 0; i < gl_info->limits.lights; ++i) + + /* Find a free light. */ + for (i = 0; i < light_count; ++i) { if (!device->update_state->lights[i]) { diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 64057761109..b175d3ae2e9 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -3361,9 +3361,12 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info) gl_info->limits.user_clip_distances = min(MAX_CLIP_DISTANCES, gl_max); TRACE("Clip plane support - max planes %d.\n", gl_max); - gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_LIGHTS, &gl_max); - gl_info->limits.lights = gl_max; - TRACE("Light support - max lights %d.\n", gl_max); + if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT]) + { + gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_LIGHTS, &gl_max); + gl_info->limits.lights = gl_max; + TRACE("Light support - max lights %d.\n", gl_max); + } gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_TEXTURE_SIZE, &gl_max); gl_info->limits.texture_size = gl_max; @@ -4003,6 +4006,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter, DWORD adapter->d3d_info.xyzrhw = vertex_caps.xyzrhw; adapter->d3d_info.ffp_generic_attributes = vertex_caps.ffp_generic_attributes; adapter->d3d_info.limits.ffp_vertex_blend_matrices = vertex_caps.max_vertex_blend_matrices; + adapter->d3d_info.limits.active_light_count = vertex_caps.max_active_lights; adapter->d3d_info.emulated_flatshading = vertex_caps.emulated_flatshading; adapter->fragment_pipe->get_caps(gl_info, &fragment_caps); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index bf8f6129def..43d80d225c6 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2219,6 +2219,7 @@ struct wined3d_d3d_limits UINT ffp_textures; UINT ffp_blend_stages; UINT ffp_vertex_blend_matrices; + unsigned int active_light_count; }; typedef void (WINE_GLAPI *wined3d_ffp_attrib_func)(const void *data);