>> About the patch, whenever we use F_dot_P in the bytecode interpreter
>> in comparisons or divisions we have to scale up the other side by
>> 0x10000L.  I propose that instead we scale F_dot_P down by 0x10000L
>> when we assign it.  This improves readability and avoids huge
>> numbers and confusions with number of zeros.  Please review the
>> attached patch.
>
> I think it's better to not apply this patch.  Reasons:
>
>   (1) You are stripping off 16 bits of F_dot_P's precision.  Or am I
>       missing something?  Pixel positioning in the TT interpreter is
>       extremely sensitive to rounding; even smallest changes in the
>       code might cause pixel shifts.  Maybe such fixes/changes can be
>       played with after we have a test suite which does a lot of pixel
>       comparisons, but right now we don't have one.

Actually, we are stripping off only 14 bits. More to the point,
F_dot_P is used exclusively as a denominator to freeVector components,
which has 16-bit (F2Dot14) precision. Therefore, the division result
also has only 16 significant bits. The extra precision in F_dot_P is
essentially wasted. F_dot_P is calculated from 16-bit vectors, so
itself it only has 16 significant bits too. Those vectors are unit
vectors only within that precision. So I do not think we lose any
precision.

>   (2) FT_MulDiv and friends can handle 64bit precision internally, so
>       I don't see a problem here with large numbers.  And there is the
>       abovementioned check in line 2706 to avoid too small values
>       which would make the division overflow.

Yes, but 64-bit code path is very expensive and FT_MulFix tries hard
to avoid it when the arguments are small because it saves a lot of
time. Here we are handed over a 16 bit vector but scale it up so that
FT_MulFix has less chance to avoid the 64-bit code path. We are
actively hurting the performance for dubious precision reasons.

I am now more convinced that the patch is worth applying. It is not
just a code beautification but actual performance optimization.

Alexei

_______________________________________________
Freetype-devel mailing list
Freetype-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/freetype-devel

Reply via email to