OSDN Git Service

st/nine: Refactor LightEnable
authorAxel Davy <axel.davy@ens.fr>
Wed, 19 Oct 2016 21:36:50 +0000 (23:36 +0200)
committerAxel Davy <axel.davy@ens.fr>
Tue, 20 Dec 2016 22:44:22 +0000 (23:44 +0100)
Call a helper function.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
src/gallium/state_trackers/nine/device9.c
src/gallium/state_trackers/nine/nine_state.c
src/gallium/state_trackers/nine/nine_state.h

index 74c1bea..3fd1cdf 100644 (file)
@@ -2123,7 +2123,6 @@ NineDevice9_LightEnable( struct NineDevice9 *This,
                          BOOL Enable )
 {
     struct nine_state *state = This->update;
-    unsigned i;
 
     DBG("This=%p Index=%u Enable=%i\n", This, Index, Enable);
 
@@ -2139,30 +2138,8 @@ NineDevice9_LightEnable( struct NineDevice9 *This,
         light.Direction.z = 1.0f;
         NineDevice9_SetLight(This, Index, &light);
     }
-    user_assert(Index < state->ff.num_lights, D3DERR_INVALIDCALL);
-
-    for (i = 0; i < state->ff.num_lights_active; ++i) {
-        if (state->ff.active_light[i] == Index)
-            break;
-    }
 
-    if (Enable) {
-        if (i < state->ff.num_lights_active)
-            return D3D_OK;
-        /* XXX wine thinks this should still succeed:
-         */
-        user_assert(i < NINE_MAX_LIGHTS_ACTIVE, D3DERR_INVALIDCALL);
-
-        state->ff.active_light[i] = Index;
-        state->ff.num_lights_active++;
-    } else {
-        if (i == state->ff.num_lights_active)
-            return D3D_OK;
-        --state->ff.num_lights_active;
-        for (; i < state->ff.num_lights_active; ++i)
-            state->ff.active_light[i] = state->ff.active_light[i + 1];
-    }
-    state->changed.group |= NINE_STATE_FF_LIGHTING;
+    nine_state_light_enable(&state->ff, &state->changed.group, Index, Enable);
 
     return D3D_OK;
 }
index 0767126..7737027 100644 (file)
@@ -2854,6 +2854,41 @@ nine_state_set_light(struct nine_ff_state *ff_state, DWORD Index,
     return D3D_OK;
 }
 
+HRESULT
+nine_state_light_enable(struct nine_ff_state *ff_state, uint32_t *change_group,
+                        DWORD Index, BOOL Enable)
+{
+    unsigned i;
+
+    user_assert(Index < ff_state->num_lights, D3DERR_INVALIDCALL);
+
+    for (i = 0; i < ff_state->num_lights_active; ++i) {
+        if (ff_state->active_light[i] == Index)
+            break;
+    }
+
+    if (Enable) {
+        if (i < ff_state->num_lights_active)
+            return D3D_OK;
+        /* XXX wine thinks this should still succeed:
+         */
+        user_assert(i < NINE_MAX_LIGHTS_ACTIVE, D3DERR_INVALIDCALL);
+
+        ff_state->active_light[i] = Index;
+        ff_state->num_lights_active++;
+    } else {
+        if (i == ff_state->num_lights_active)
+            return D3D_OK;
+        --ff_state->num_lights_active;
+        for (; i < ff_state->num_lights_active; ++i)
+            ff_state->active_light[i] = ff_state->active_light[i + 1];
+    }
+
+    *change_group |= NINE_STATE_FF_LIGHTING;
+
+    return D3D_OK;
+}
+
 #define D3DRS_TO_STRING_CASE(n) case D3DRS_##n: return "D3DRS_"#n
 const char *nine_d3drs_to_string(DWORD State)
 {
index 314dd7c..4d1e8a4 100644 (file)
@@ -465,6 +465,10 @@ nine_state_access_transform(struct nine_ff_state *, D3DTRANSFORMSTATETYPE,
 HRESULT
 nine_state_set_light(struct nine_ff_state *, DWORD, const D3DLIGHT9 *);
 
+HRESULT
+nine_state_light_enable(struct nine_ff_state *, uint32_t *,
+                        DWORD, BOOL);
+
 const char *nine_d3drs_to_string(DWORD State);
 
 #endif /* _NINE_STATE_H_ */