Patch: Optimizing Matrix routines by hand
Carl-Philip Haensch
Carl-Philip.Haensch at mailbox.tu-dresden.de
Mon Jan 31 10:15:53 PST 2011
Hi,
I wrote a patch that optimizes matrix scale and translate because i
doubt gcc will find the shortest path through an invocation, three
loops and a memory writeback per strcpy by itself.
diff --git a/compositor/compositor.c b/compositor/compositor.c
index 9d7c330..e571b12 100644
--- a/compositor/compositor.c
+++ b/compositor/compositor.c
@@ -87,21 +87,20 @@ wlsc_matrix_multiply(struct wlsc_matrix *m, const
struct wlsc_matrix *n)
static void
wlsc_matrix_translate(struct wlsc_matrix *matrix, GLfloat x, GLfloat
y, GLfloat z)
{
- struct wlsc_matrix translate = {
- { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, x, y, z, 1 }
- };
-
- wlsc_matrix_multiply(matrix, &translate);
+ matrix->d[12] += x;
+ matrix->d[13] += y;
+ matrix->d[14] += z;
}
static void
wlsc_matrix_scale(struct wlsc_matrix *matrix, GLfloat x, GLfloat y,
GLfloat z)
{
- struct wlsc_matrix scale = {
- { x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1 }
- };
-
- wlsc_matrix_multiply(matrix, &scale);
+ int i;
+ for(i = 0; i < 4; i++) {
+ matrix->d[0 + 4 * i] *= x;
+ matrix->d[1 + 4 * i] *= y;
+ matrix->d[2 + 4 * i] *= z;
+ }
}
static void
More information about the wayland-devel
mailing list