wined3d: Replace the light chain with a hashmap.
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 9893dcb..ee898c2 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -1987,7 +1987,7 @@
      * NOTE2: Apparently texture transforms do NOT need reapplying
      */
 
-    PLIGHTINFOEL *lightChain = NULL;
+    PLIGHTINFOEL *light = NULL;
 
     glMatrixMode(GL_MODELVIEW);
     checkGLcall("glMatrixMode(GL_MODELVIEW)");
@@ -1995,13 +1995,13 @@
     checkGLcall("glLoadMatrixf(...)");
 
     /* Reset lights. TODO: Call light apply func */
-    lightChain = stateblock->lights;
-    while (lightChain && lightChain->glIndex != -1) {
-        glLightfv(GL_LIGHT0 + lightChain->glIndex, GL_POSITION, lightChain->lightPosn);
+    for(k = 0; k < stateblock->wineD3DDevice->maxConcurrentLights; k++) {
+        light = stateblock->activeLights[k];
+        if(!light) continue;
+        glLightfv(GL_LIGHT0 + light->glIndex, GL_POSITION, light->lightPosn);
         checkGLcall("glLightfv posn");
-        glLightfv(GL_LIGHT0 + lightChain->glIndex, GL_SPOT_DIRECTION, lightChain->lightDirn);
+        glLightfv(GL_LIGHT0 + light->glIndex, GL_SPOT_DIRECTION, light->lightDirn);
         checkGLcall("glLightfv dirn");
-        lightChain = lightChain->next;
     }
 
     /* Reset Clipping Planes if clipping is enabled. TODO: Call clipplane apply func */