On Wed, 2006-08-16 at 04:50 -0400, Michael Meeks wrote: > On Wed, 2006-08-16 at 00:19 +0000, Aivars Kalvans wrote: > > Matrix with values like { 1.0, 0.0, 0.0, 1.0, 0.0, 0.0 } does not > > require any multiplication, because result is the same as input. > > I like your patch, and I guess it'll always be faster on a machine with > no FPU, of course there are a number of other places where this should > be used. > > Having something like: > > enum { > MATRIX_CORE_IS_UNIT = 0, > MATRIX_CORE_IS_PURE_SCALE = 1, > MATRIX_HAS_TRANSLATE = 0x800 > } MatrixProp; > > Or whatever, > > That was tracked, and used to annotate the various matrix operations > might be fast & small enough for both use-cases; might also accelerate > some other cases: general matrix products etc.
This works, but is very error prune. Instead, I suggest one implements an opaque matrix type for cairo's internal use that maintains properties like the one you suggest and short-circuits operation based on the properties. These can be implemented as inlined wrappers around cairo_matrix_t, such that the compiler has the opportunity to optimize away some stuff for the constant values. > HTH, > > Michael. -- behdad http://behdad.org/ "Commandment Three says Do Not Kill, Amendment Two says Blood Will Spill" -- Dan Bern, "New American Language" _______________________________________________ Performance-list mailing list Performance-list@gnome.org http://mail.gnome.org/mailman/listinfo/performance-list