Re: [Pixman] [PATCH 02/14] Add new test of filter reduction from BILINEAR to NEAREST
On Fri, Apr 29, 2016 at 9:01 PM, Bill Spitzakwrote: > > On Fri, Apr 29, 2016 at 4:55 AM, Oded Gabbay wrote: >> >> On Tue, Apr 12, 2016 at 5:36 AM, Søren Sandmann Pedersen >> 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 >> > --- >> > 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 000..705fa4b >> > --- /dev/null >> > +++ b/test/filter-reduction-test.c >> > @@ -0,0 +1,112 @@ >> > +#include >> > +#include >> > +#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 0x >> > +#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,
Re: [Pixman] [PATCH 02/14] Add new test of filter reduction from BILINEAR to NEAREST
On Fri, Apr 29, 2016 at 4:55 AM, Oded Gabbaywrote: > On Tue, Apr 12, 2016 at 5:36 AM, Søren Sandmann Pedersen > 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 > > --- > > 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 000..705fa4b > > --- /dev/null > > +++ b/test/filter-reduction-test.c > > @@ -0,0 +1,112 @@ > > +#include > > +#include > > +#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 0x > > +#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 (, crc); > > + } > > + } > > + } > > + } > > +
Re: [Pixman] [PATCH 02/14] Add new test of filter reduction from BILINEAR to NEAREST
Reviewed-by: Bill SpitzakOn 04/11/2016 07:36 PM, Søren Sandmann Pedersen 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 --- 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 000..705fa4b --- /dev/null +++ b/test/filter-reduction-test.c @@ -0,0 +1,112 @@ +#include +#include +#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); +prng_randmemset (srcbuf, SIZE * SIZE * 4, 0); +src = pixman_image_create_bits ( + PIXMAN_a8r8g8b8, SIZE, SIZE, srcbuf, SIZE * 4); + +dstbuf = malloc (SIZE * SIZE * 4); +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 0x +#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 (, 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; +} +} ___ Pixman mailing list Pixman@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/pixman
[Pixman] [PATCH 02/14] Add new test of filter reduction from BILINEAR to NEAREST
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--- 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 000..705fa4b --- /dev/null +++ b/test/filter-reduction-test.c @@ -0,0 +1,112 @@ +#include +#include +#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); +prng_randmemset (srcbuf, SIZE * SIZE * 4, 0); +src = pixman_image_create_bits ( + PIXMAN_a8r8g8b8, SIZE, SIZE, srcbuf, SIZE * 4); + +dstbuf = malloc (SIZE * SIZE * 4); +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 0x +#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 (, 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 Pixman@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/pixman