[PATCH 8/8] wined3d: Avoid some redundant glVertexAttrib4f() calls.
Henri Verbeet
hverbeet at codeweavers.com
Tue May 14 05:56:26 CDT 2019
From: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
dlls/wined3d/context.c | 20 ++++++++++++++++++--
dlls/wined3d/wined3d_private.h | 5 ++++-
2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index cda1ea0ac60..75abee81ec0 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -5358,9 +5358,23 @@ static void wined3d_context_gl_load_numbered_arrays(struct wined3d_context_gl *c
if (context->numbered_array_mask & (1u << i))
context_unload_numbered_array(context, i);
if (!use_vs(state) && i == WINED3D_FFP_DIFFUSE)
- GL_EXTCALL(glVertexAttrib4f(i, 1.0f, 1.0f, 1.0f, 1.0f));
+ {
+ if (!(context_gl->default_attrib_value_set & (1u << i)) || !context_gl->diffuse_attrib_to_1)
+ {
+ GL_EXTCALL(glVertexAttrib4f(i, 1.0f, 1.0f, 1.0f, 1.0f));
+ context_gl->diffuse_attrib_to_1 = 1;
+ }
+ }
else
- GL_EXTCALL(glVertexAttrib4f(i, 0.0f, 0.0f, 0.0f, 0.0f));
+ {
+ if (!(context_gl->default_attrib_value_set & (1u << i)))
+ {
+ GL_EXTCALL(glVertexAttrib4f(i, 0.0f, 0.0f, 0.0f, 0.0f));
+ if (i == WINED3D_FFP_DIFFUSE)
+ context_gl->diffuse_attrib_to_1 = 0;
+ }
+ }
+ context_gl->default_attrib_value_set |= 1u << i;
continue;
}
@@ -5380,6 +5394,7 @@ static void wined3d_context_gl_load_numbered_arrays(struct wined3d_context_gl *c
* mode instead. */
if (context->numbered_array_mask & (1u << i))
context_unload_numbered_array(context, i);
+ context_gl->default_attrib_value_set &= ~(1u << i);
continue;
}
@@ -5526,6 +5541,7 @@ static void wined3d_context_gl_load_numbered_arrays(struct wined3d_context_gl *c
break;
}
+ context_gl->default_attrib_value_set &= ~(1u << i);
}
}
checkGLcall("Loading numbered arrays");
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 0a8c8ca920f..bb982f8afbd 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1996,7 +1996,10 @@ struct wined3d_context_gl
struct wined3d_context c;
uint32_t fog_enabled : 1;
- uint32_t padding : 31;
+ uint32_t diffuse_attrib_to_1 : 1;
+ uint32_t padding : 30;
+
+ uint32_t default_attrib_value_set;
GLenum *texture_type;
--
2.11.0
More information about the wine-devel
mailing list