11176bdada62cabc6ec4b0308a930e83b679d5d36John Reck#include <stdlib.h> 21176bdada62cabc6ec4b0308a930e83b679d5d36John Reck#include <stdio.h> 31176bdada62cabc6ec4b0308a930e83b679d5d36John Reck#include <assert.h> 41176bdada62cabc6ec4b0308a930e83b679d5d36John Reck#include "utils.h" 51176bdada62cabc6ec4b0308a930e83b679d5d36John Reck#include "pixman-inlines.h" 61176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 71176bdada62cabc6ec4b0308a930e83b679d5d36John Reck/* A trivial reference implementation for 81176bdada62cabc6ec4b0308a930e83b679d5d36John Reck * 'bilinear_pad_repeat_get_scanline_bounds' 91176bdada62cabc6ec4b0308a930e83b679d5d36John Reck */ 101176bdada62cabc6ec4b0308a930e83b679d5d36John Reckstatic void 111176bdada62cabc6ec4b0308a930e83b679d5d36John Reckbilinear_pad_repeat_get_scanline_bounds_ref (int32_t source_image_width, 121176bdada62cabc6ec4b0308a930e83b679d5d36John Reck pixman_fixed_t vx_, 131176bdada62cabc6ec4b0308a930e83b679d5d36John Reck pixman_fixed_t unit_x, 141176bdada62cabc6ec4b0308a930e83b679d5d36John Reck int32_t * left_pad, 151176bdada62cabc6ec4b0308a930e83b679d5d36John Reck int32_t * left_tz, 161176bdada62cabc6ec4b0308a930e83b679d5d36John Reck int32_t * width, 171176bdada62cabc6ec4b0308a930e83b679d5d36John Reck int32_t * right_tz, 181176bdada62cabc6ec4b0308a930e83b679d5d36John Reck int32_t * right_pad) 191176bdada62cabc6ec4b0308a930e83b679d5d36John Reck{ 201176bdada62cabc6ec4b0308a930e83b679d5d36John Reck int w = *width; 211176bdada62cabc6ec4b0308a930e83b679d5d36John Reck int64_t vx = vx_; 221176bdada62cabc6ec4b0308a930e83b679d5d36John Reck *left_pad = 0; 231176bdada62cabc6ec4b0308a930e83b679d5d36John Reck *left_tz = 0; 241176bdada62cabc6ec4b0308a930e83b679d5d36John Reck *width = 0; 251176bdada62cabc6ec4b0308a930e83b679d5d36John Reck *right_tz = 0; 261176bdada62cabc6ec4b0308a930e83b679d5d36John Reck *right_pad = 0; 271176bdada62cabc6ec4b0308a930e83b679d5d36John Reck while (--w >= 0) 281176bdada62cabc6ec4b0308a930e83b679d5d36John Reck { 291176bdada62cabc6ec4b0308a930e83b679d5d36John Reck if (vx < 0) 301176bdada62cabc6ec4b0308a930e83b679d5d36John Reck { 311176bdada62cabc6ec4b0308a930e83b679d5d36John Reck if (vx + pixman_fixed_1 < 0) 321176bdada62cabc6ec4b0308a930e83b679d5d36John Reck *left_pad += 1; 331176bdada62cabc6ec4b0308a930e83b679d5d36John Reck else 341176bdada62cabc6ec4b0308a930e83b679d5d36John Reck *left_tz += 1; 351176bdada62cabc6ec4b0308a930e83b679d5d36John Reck } 361176bdada62cabc6ec4b0308a930e83b679d5d36John Reck else if (vx + pixman_fixed_1 >= pixman_int_to_fixed (source_image_width)) 371176bdada62cabc6ec4b0308a930e83b679d5d36John Reck { 381176bdada62cabc6ec4b0308a930e83b679d5d36John Reck if (vx >= pixman_int_to_fixed (source_image_width)) 391176bdada62cabc6ec4b0308a930e83b679d5d36John Reck *right_pad += 1; 401176bdada62cabc6ec4b0308a930e83b679d5d36John Reck else 411176bdada62cabc6ec4b0308a930e83b679d5d36John Reck *right_tz += 1; 421176bdada62cabc6ec4b0308a930e83b679d5d36John Reck } 431176bdada62cabc6ec4b0308a930e83b679d5d36John Reck else 441176bdada62cabc6ec4b0308a930e83b679d5d36John Reck { 451176bdada62cabc6ec4b0308a930e83b679d5d36John Reck *width += 1; 461176bdada62cabc6ec4b0308a930e83b679d5d36John Reck } 471176bdada62cabc6ec4b0308a930e83b679d5d36John Reck vx += unit_x; 481176bdada62cabc6ec4b0308a930e83b679d5d36John Reck } 491176bdada62cabc6ec4b0308a930e83b679d5d36John Reck} 501176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 511176bdada62cabc6ec4b0308a930e83b679d5d36John Reckint 521176bdada62cabc6ec4b0308a930e83b679d5d36John Reckmain (void) 531176bdada62cabc6ec4b0308a930e83b679d5d36John Reck{ 541176bdada62cabc6ec4b0308a930e83b679d5d36John Reck int i; 551176bdada62cabc6ec4b0308a930e83b679d5d36John Reck prng_srand (0); 561176bdada62cabc6ec4b0308a930e83b679d5d36John Reck for (i = 0; i < 10000; i++) 571176bdada62cabc6ec4b0308a930e83b679d5d36John Reck { 581176bdada62cabc6ec4b0308a930e83b679d5d36John Reck int32_t left_pad1, left_tz1, width1, right_tz1, right_pad1; 591176bdada62cabc6ec4b0308a930e83b679d5d36John Reck int32_t left_pad2, left_tz2, width2, right_tz2, right_pad2; 601176bdada62cabc6ec4b0308a930e83b679d5d36John Reck pixman_fixed_t vx = prng_rand_n(10000 << 16) - (3000 << 16); 611176bdada62cabc6ec4b0308a930e83b679d5d36John Reck int32_t width = prng_rand_n(10000); 621176bdada62cabc6ec4b0308a930e83b679d5d36John Reck int32_t source_image_width = prng_rand_n(10000) + 1; 631176bdada62cabc6ec4b0308a930e83b679d5d36John Reck pixman_fixed_t unit_x = prng_rand_n(10 << 16) + 1; 641176bdada62cabc6ec4b0308a930e83b679d5d36John Reck width1 = width2 = width; 651176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 661176bdada62cabc6ec4b0308a930e83b679d5d36John Reck bilinear_pad_repeat_get_scanline_bounds_ref (source_image_width, 671176bdada62cabc6ec4b0308a930e83b679d5d36John Reck vx, 681176bdada62cabc6ec4b0308a930e83b679d5d36John Reck unit_x, 691176bdada62cabc6ec4b0308a930e83b679d5d36John Reck &left_pad1, 701176bdada62cabc6ec4b0308a930e83b679d5d36John Reck &left_tz1, 711176bdada62cabc6ec4b0308a930e83b679d5d36John Reck &width1, 721176bdada62cabc6ec4b0308a930e83b679d5d36John Reck &right_tz1, 731176bdada62cabc6ec4b0308a930e83b679d5d36John Reck &right_pad1); 741176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 751176bdada62cabc6ec4b0308a930e83b679d5d36John Reck bilinear_pad_repeat_get_scanline_bounds (source_image_width, 761176bdada62cabc6ec4b0308a930e83b679d5d36John Reck vx, 771176bdada62cabc6ec4b0308a930e83b679d5d36John Reck unit_x, 781176bdada62cabc6ec4b0308a930e83b679d5d36John Reck &left_pad2, 791176bdada62cabc6ec4b0308a930e83b679d5d36John Reck &left_tz2, 801176bdada62cabc6ec4b0308a930e83b679d5d36John Reck &width2, 811176bdada62cabc6ec4b0308a930e83b679d5d36John Reck &right_tz2, 821176bdada62cabc6ec4b0308a930e83b679d5d36John Reck &right_pad2); 831176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 841176bdada62cabc6ec4b0308a930e83b679d5d36John Reck assert (left_pad1 == left_pad2); 851176bdada62cabc6ec4b0308a930e83b679d5d36John Reck assert (left_tz1 == left_tz2); 861176bdada62cabc6ec4b0308a930e83b679d5d36John Reck assert (width1 == width2); 871176bdada62cabc6ec4b0308a930e83b679d5d36John Reck assert (right_tz1 == right_tz2); 881176bdada62cabc6ec4b0308a930e83b679d5d36John Reck assert (right_pad1 == right_pad2); 891176bdada62cabc6ec4b0308a930e83b679d5d36John Reck } 901176bdada62cabc6ec4b0308a930e83b679d5d36John Reck 911176bdada62cabc6ec4b0308a930e83b679d5d36John Reck return 0; 921176bdada62cabc6ec4b0308a930e83b679d5d36John Reck} 93