[PATCH v3 1/8] wined3d: Factor out wined3d_get_mcs() function.

Paul Gofman gofmanp at gmail.com
Mon May 20 04:56:36 CDT 2019


Signed-off-by: Paul Gofman <gofmanp at gmail.com>
---
 dlls/wined3d/utils.c           | 25 +++++++++----------------
 dlls/wined3d/wined3d_private.h | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+), 16 deletions(-)

diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index ef469100fd..fb545cf610 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -6442,23 +6442,16 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context,
     settings->point_size = state->gl_primitive_type == GL_POINTS;
     settings->per_vertex_point_size = !!(si->use_map & 1u << WINED3D_FFP_PSIZE);
 
-    if (state->render_states[WINED3D_RS_COLORVERTEX])
     {
-        settings->diffuse_source = validate_material_colour_source(si->use_map,
-                state->render_states[WINED3D_RS_DIFFUSEMATERIALSOURCE]);
-        settings->emissive_source = validate_material_colour_source(si->use_map,
-                state->render_states[WINED3D_RS_EMISSIVEMATERIALSOURCE]);
-        settings->ambient_source = validate_material_colour_source(si->use_map,
-                state->render_states[WINED3D_RS_AMBIENTMATERIALSOURCE]);
-        settings->specular_source = validate_material_colour_source(si->use_map,
-                state->render_states[WINED3D_RS_SPECULARMATERIALSOURCE]);
-    }
-    else
-    {
-        settings->diffuse_source = WINED3D_MCS_MATERIAL;
-        settings->emissive_source = WINED3D_MCS_MATERIAL;
-        settings->ambient_source = WINED3D_MCS_MATERIAL;
-        settings->specular_source = WINED3D_MCS_MATERIAL;
+        enum wined3d_material_color_source diffuse_source, emissive_source,
+                ambient_source, specular_source;
+
+        wined3d_get_mcs(&diffuse_source, &emissive_source, &ambient_source, &specular_source, state, si);
+
+        settings->diffuse_source = diffuse_source;
+        settings->emissive_source = emissive_source;
+        settings->ambient_source = ambient_source;
+        settings->specular_source = specular_source;
     }
 
     for (i = 0; i < WINED3D_MAX_TEXTURES; ++i)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 34fa1d3ef3..716f5101c9 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -4850,6 +4850,38 @@ static inline enum wined3d_material_color_source validate_material_colour_source
     return WINED3D_MCS_MATERIAL;
 }
 
+static inline void wined3d_get_mcs(enum wined3d_material_color_source *diffuse_source,
+        enum wined3d_material_color_source *emissive_source, enum wined3d_material_color_source *ambient_source,
+        enum wined3d_material_color_source *specular_source, const struct wined3d_state *state,
+        const struct wined3d_stream_info *si)
+{
+    if (state->render_states[WINED3D_RS_LIGHTING])
+    {
+        if (state->render_states[WINED3D_RS_COLORVERTEX])
+        {
+            *diffuse_source = validate_material_colour_source(si->use_map,
+                    state->render_states[WINED3D_RS_DIFFUSEMATERIALSOURCE]);
+            *emissive_source = validate_material_colour_source(si->use_map,
+                    state->render_states[WINED3D_RS_EMISSIVEMATERIALSOURCE]);
+            *ambient_source = validate_material_colour_source(si->use_map,
+                    state->render_states[WINED3D_RS_AMBIENTMATERIALSOURCE]);
+            *specular_source = validate_material_colour_source(si->use_map,
+                    state->render_states[WINED3D_RS_SPECULARMATERIALSOURCE]);
+        }
+        else
+        {
+            *diffuse_source = *emissive_source = *ambient_source =
+                    *specular_source = WINED3D_MCS_MATERIAL;
+        }
+    }
+    else
+    {
+        *diffuse_source = WINED3D_MCS_COLOR1;
+        *specular_source = WINED3D_MCS_COLOR2;
+        *emissive_source = *ambient_source = WINED3D_MCS_MATERIAL;
+    }
+}
+
 BOOL invert_matrix(struct wined3d_matrix *out, const struct wined3d_matrix *m) DECLSPEC_HIDDEN;
 
 void compute_normal_matrix(float *normal_matrix, BOOL legacy_lighting,
-- 
2.21.0




More information about the wine-devel mailing list