[Pixman] [PATCH 13/15] pixman-filter: refactor cubic polynominal and don't range check
Oded Gabbay
oded.gabbay at gmail.com
Wed Dec 23 02:25:15 PST 2015
On Tue, Dec 22, 2015 at 9:01 PM, Bill Spitzak <spitzak at gmail.com> wrote:
>
>
> On Tue, Dec 22, 2015 at 4:38 AM, Oded Gabbay <oded.gabbay at gmail.com> wrote:
>>
>> On Sat, Dec 12, 2015 at 8:06 PM, <spitzak at gmail.com> wrote:
>> > From: Bill Spitzak <spitzak at gmail.com>
>> >
>> > The other filters do not check for x being in range, so there is
>> > no reason for cubic to do so.
>>
>> This argument is a bit problematic.
>> We could also argue that this filter was actually implemented
>> correctly/more robust and we should add checks for x to the other
>> filters.
>>
>> I fail to see how this saves us much except from removing a condition
>> in a very specific path.
>>
>> Do you argue that ax will never ever be >=2 ?
>
>
> Yes, because if that could happen, then out-of-range x could also be sent to
> the other filter functions that are not doing the range check.
>
I run the scale demo, and added a printf everytime ax is >=2.
I got a LOT of prints...
So I don't think your argument is correct.
> Adding range checks to all the other filters (especially the ones that
> return constants) would add a bunch of conditions that are never used.
Maybe, but it might be necessary to produce more accurate results ?
Oded
>
>>
>>
>> Oded
>>
>> > ---
>> > pixman/pixman-filter.c | 16 +++++++---------
>> > 1 file changed, 7 insertions(+), 9 deletions(-)
>> >
>> > diff --git a/pixman/pixman-filter.c b/pixman/pixman-filter.c
>> > index 7e10108..bf9dce3 100644
>> > --- a/pixman/pixman-filter.c
>> > +++ b/pixman/pixman-filter.c
>> > @@ -109,18 +109,16 @@ general_cubic (double x, double B, double C)
>> >
>> > if (ax < 1)
>> > {
>> > - return ((12 - 9 * B - 6 * C) * ax * ax * ax +
>> > - (-18 + 12 * B + 6 * C) * ax * ax + (6 - 2 * B)) / 6;
>> > - }
>> > - else if (ax >= 1 && ax < 2)
>> > - {
>> > - return ((-B - 6 * C) * ax * ax * ax +
>> > - (6 * B + 30 * C) * ax * ax + (-12 * B - 48 * C) *
>> > - ax + (8 * B + 24 * C)) / 6;
>> > + return (((12 - 9 * B - 6 * C) * ax +
>> > + (-18 + 12 * B + 6 * C)) * ax * ax +
>> > + (6 - 2 * B)) / 6;
>> > }
>> > else
>> > {
>> > - return 0;
>> > + return ((((-B - 6 * C) * ax +
>> > + (6 * B + 30 * C)) * ax +
>> > + (-12 * B - 48 * C)) * ax +
>> > + (8 * B + 24 * C)) / 6;
>> > }
>> > }
>> >
>> > --
>> > 1.9.1
>> >
>> > _______________________________________________
>> > Pixman mailing list
>> > Pixman at lists.freedesktop.org
>> > http://lists.freedesktop.org/mailman/listinfo/pixman
>
>
More information about the Pixman
mailing list