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