Matteo Bruni : wined3d: Don't query FFP lights count on core profile.
Alexandre Julliard
julliard at winehq.org
Thu Feb 2 15:49:26 CST 2017
Module: wine
Branch: master
Commit: 0717d00cce6be38c0875c2cef03f7302368f04e9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0717d00cce6be38c0875c2cef03f7302368f04e9
Author: Matteo Bruni <mbruni at codeweavers.com>
Date: Thu Feb 2 01:04:03 2017 +0100
wined3d: Don't query FFP lights count on core profile.
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 acf4307..1c69cdd 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 6405776..b175d3a 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 bf8f612..43d80d2 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);
More information about the wine-cvs
mailing list