On Fri, Apr 29, 2016 at 9:01 PM, Bill Spitzak <[email protected]> wrote: > > On Fri, Apr 29, 2016 at 4:55 AM, Oded Gabbay <[email protected]> wrote: >> >> On Tue, Apr 12, 2016 at 5:36 AM, Søren Sandmann Pedersen >> <[email protected]> wrote: >> > This new test tests a bunch of bilinear downscalings, where many have >> > a transformation such that the BILINEAR filter can be reduced to >> > NEAREST (and many don't). >> > >> > A CRC32 is computed for all the resulting images and compared to a >> > known-good value for both 4-bit and 7-bit interpolation. >> > >> > V2: Remove leftover comment, some minor formatting fixes, use a >> > timestamp as the PRNG seed. >> > >> > Signed-off-by: Søren Sandmann <[email protected]> >> > --- >> > test/Makefile.sources | 1 + >> > test/filter-reduction-test.c | 112 >> > +++++++++++++++++++++++++++++++++++++++++++ >> > 2 files changed, 113 insertions(+) >> > create mode 100644 test/filter-reduction-test.c >> > >> > diff --git a/test/Makefile.sources b/test/Makefile.sources >> > index 5d55e67..0a56231 100644 >> > --- a/test/Makefile.sources >> > +++ b/test/Makefile.sources >> > @@ -21,6 +21,7 @@ TESTPROGRAMS = \ >> > gradient-crash-test \ >> > pixel-test \ >> > matrix-test \ >> > + filter-reduction-test \ >> > composite-traps-test \ >> > region-contains-test \ >> > glyph-test \ >> > diff --git a/test/filter-reduction-test.c b/test/filter-reduction-test.c >> > new file mode 100644 >> > index 0000000..705fa4b >> > --- /dev/null >> > +++ b/test/filter-reduction-test.c >> > @@ -0,0 +1,112 @@ >> > +#include <stdlib.h> >> > +#include <stdio.h> >> > +#include "utils.h" >> > + >> > +static const pixman_fixed_t entries[] = >> > +{ >> > + pixman_double_to_fixed (-1.0), >> > + pixman_double_to_fixed (-0.5), >> > + pixman_double_to_fixed (-1/3.0), >> > + pixman_double_to_fixed (0.0), >> > + pixman_double_to_fixed (0.5), >> > + pixman_double_to_fixed (1.0), >> > + pixman_double_to_fixed (1.5), >> > + pixman_double_to_fixed (2.0), >> > + pixman_double_to_fixed (3.0), >> > +}; >> > + >> > +#define SIZE 12 >> > + >> > +static uint32_t >> > +test_scale (const pixman_transform_t *xform, uint32_t crc) >> > +{ >> > + uint32_t *srcbuf, *dstbuf; >> > + pixman_image_t *src, *dest; >> > + >> > + srcbuf = malloc (SIZE * SIZE * 4); >> I admit I didn't look at other tests, but it really caught my eye we >> don't check for memory allocation failure here. >> >> > + prng_randmemset (srcbuf, SIZE * SIZE * 4, 0); >> > + src = pixman_image_create_bits ( >> > + PIXMAN_a8r8g8b8, SIZE, SIZE, srcbuf, SIZE * 4); >> > + >> > + dstbuf = malloc (SIZE * SIZE * 4); >> same comment > > > I think it is ok to not look for that in unit tests. They will either crash > or fail. > >> >> >> > + prng_randmemset (dstbuf, SIZE * SIZE * 4, 0); >> > + dest = pixman_image_create_bits ( >> > + PIXMAN_a8r8g8b8, SIZE, SIZE, dstbuf, SIZE * 4); >> > + >> > + pixman_image_set_transform (src, xform); >> > + pixman_image_set_repeat (src, PIXMAN_REPEAT_NORMAL); >> > + pixman_image_set_filter (src, PIXMAN_FILTER_BILINEAR, NULL, 0); >> > + >> > + image_endian_swap (src); >> > + image_endian_swap (dest); >> > + >> > + pixman_image_composite (PIXMAN_OP_SRC, >> > + src, NULL, dest, >> > + 0, 0, 0, 0, 0, 0, >> > + SIZE, SIZE); >> > + >> > + crc = compute_crc32_for_image (crc, dest); >> > + >> > + pixman_image_unref (src); >> > + pixman_image_unref (dest); >> > + >> > + free (srcbuf); >> > + free (dstbuf); >> > + >> > + return crc; >> > +} >> > + >> > +#if BILINEAR_INTERPOLATION_BITS == 7 >> > +#define CHECKSUM 0x02169677 >> > +#elif BILINEAR_INTERPOLATION_BITS == 4 >> > +#define CHECKSUM 0xE44B29AC >> > +#else >> > +#define CHECKSUM 0x00000000 >> > +#endif >> > + >> > +int >> > +main (int argc, const char *argv[]) >> > +{ >> > + const pixman_fixed_t *end = entries + ARRAY_LENGTH (entries); >> > + const pixman_fixed_t *t0, *t1, *t2, *t3, *t4, *t5; >> > + uint32_t crc = 0; >> > + >> > + prng_srand (0x56EA1DBD); >> > + >> > + for (t0 = entries; t0 < end; ++t0) >> > + { >> > + for (t1 = entries; t1 < end; ++t1) >> > + { >> > + for (t2 = entries; t2 < end; ++t2) >> > + { >> > + for (t3 = entries; t3 < end; ++t3) >> > + { >> > + for (t4 = entries; t4 < end; ++t4) >> > + { >> > + for (t5 = entries; t5 < end; ++t5) >> > + { >> > + pixman_transform_t xform = { >> > + { { *t0, *t1, *t2 }, >> > + { *t3, *t4, *t5 }, >> > + { 0, 0, pixman_fixed_1 } } >> > + }; >> > + >> > + crc = test_scale (&xform, crc); >> > + } >> > + } >> > + } >> > + } >> > + } >> > + } >> > + >> > + if (crc != CHECKSUM) >> > + { >> > + printf ("filter-reduction-test failed! (checksum=0x%08X, >> > expected 0x%08X)\n", crc, CHECKSUM); >> > + return 1; >> > + } >> > + else >> > + { >> > + printf ("filter-reduction-test passed (checksum=0x%08X)\n", >> > crc); >> > + return 0; >> > + } >> > +} >> > -- >> > 1.7.11.7 >> > >> > _______________________________________________ >> > Pixman mailing list >> > [email protected] >> > https://lists.freedesktop.org/mailman/listinfo/pixman >> _______________________________________________ >> Pixman mailing list >> [email protected] >> https://lists.freedesktop.org/mailman/listinfo/pixman > >
This patch is: Acked-by: Oded Gabbay <[email protected]> _______________________________________________ Pixman mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/pixman
