180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkFilterProc.h" 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* [1-x 1-y] [x 1-y] 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru [1-x y] [x y] 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru*/ 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp00(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return a00; } 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp01(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (3 * a00 + a01) >> 2; } 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp02(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (a00 + a01) >> 1; } 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp03(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (a00 + 3 * a01) >> 2; } 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp10(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (3 * a00 + a10) >> 2; } 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp11(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (9 * a00 + 3 * (a01 + a10) + a11) >> 4; } 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp12(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (3 * (a00 + a01) + a10 + a11) >> 3; } 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp13(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (9 * a01 + 3 * (a00 + a11) + a10) >> 4; } 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp20(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (a00 + a10) >> 1; } 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp21(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (3 * (a00 + a10) + a01 + a11) >> 3; } 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp22(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (a00 + a01 + a10 + a11) >> 2; } 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp23(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (3 * (a01 + a11) + a00 + a10) >> 3; } 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp30(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (a00 + 3 * a10) >> 2; } 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp31(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (9 * a10 + 3 * (a00 + a11) + a01) >> 4; } 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp32(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (3 * (a10 + a11) + a00 + a01) >> 3; } 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp33(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (9 * a11 + 3 * (a01 + a10) + a00) >> 4; } 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const SkFilterProc gBilerpProcs[4 * 4] = { 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bilerp00, bilerp01, bilerp02, bilerp03, 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bilerp10, bilerp11, bilerp12, bilerp13, 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bilerp20, bilerp21, bilerp22, bilerp23, 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bilerp30, bilerp31, bilerp32, bilerp33 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkFilterProc* SkGetBilinearFilterProcTable() 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return gBilerpProcs; 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////////// 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////////// 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define MASK 0xFF00FF 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define LO_PAIR(x) ((x) & MASK) 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define HI_PAIR(x) (((x) >> 8) & MASK) 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define COMBINE(lo, hi) (((lo) & ~0xFF00) | (((hi) & ~0xFF00) << 8)) 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////////// 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_00(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return c00; 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_01(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (3 * LO_PAIR(c00) + LO_PAIR(c01)) >> 2; 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (3 * HI_PAIR(c00) + HI_PAIR(c01)) >> 2; 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_02(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (LO_PAIR(c00) + LO_PAIR(c01)) >> 1; 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (HI_PAIR(c00) + HI_PAIR(c01)) >> 1; 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_03(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (LO_PAIR(c00) + 3 * LO_PAIR(c01)) >> 2; 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (HI_PAIR(c00) + 3 * HI_PAIR(c01)) >> 2; 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_10(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (3 * LO_PAIR(c00) + LO_PAIR(c10)) >> 2; 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (3 * HI_PAIR(c00) + HI_PAIR(c10)) >> 2; 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_11(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (9 * LO_PAIR(c00) + 3 * (LO_PAIR(c01) + LO_PAIR(c10)) + LO_PAIR(c11)) >> 4; 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (9 * HI_PAIR(c00) + 3 * (HI_PAIR(c01) + HI_PAIR(c10)) + HI_PAIR(c11)) >> 4; 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_12(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (3 * (LO_PAIR(c00) + LO_PAIR(c01)) + LO_PAIR(c10) + LO_PAIR(c11)) >> 3; 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (3 * (HI_PAIR(c00) + HI_PAIR(c01)) + HI_PAIR(c10) + HI_PAIR(c11)) >> 3; 9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_13(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (9 * LO_PAIR(c01) + 3 * (LO_PAIR(c00) + LO_PAIR(c11)) + LO_PAIR(c10)) >> 4; 9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (9 * HI_PAIR(c01) + 3 * (HI_PAIR(c00) + HI_PAIR(c11)) + HI_PAIR(c10)) >> 4; 9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_20(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (LO_PAIR(c00) + LO_PAIR(c10)) >> 1; 10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (HI_PAIR(c00) + HI_PAIR(c10)) >> 1; 10180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_21(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (3 * (LO_PAIR(c00) + LO_PAIR(c10)) + LO_PAIR(c01) + LO_PAIR(c11)) >> 3; 10580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (3 * (HI_PAIR(c00) + HI_PAIR(c10)) + HI_PAIR(c01) + HI_PAIR(c11)) >> 3; 10680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 10780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 10880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_22(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (LO_PAIR(c00) + LO_PAIR(c01) + LO_PAIR(c10) + LO_PAIR(c11)) >> 2; 11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (HI_PAIR(c00) + HI_PAIR(c01) + HI_PAIR(c10) + HI_PAIR(c11)) >> 2; 11180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 11280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 11380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_23(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 11480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (3 * (LO_PAIR(c01) + LO_PAIR(c11)) + LO_PAIR(c00) + LO_PAIR(c10)) >> 3; 11580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (3 * (HI_PAIR(c01) + HI_PAIR(c11)) + HI_PAIR(c00) + HI_PAIR(c10)) >> 3; 11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 11880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 11980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_30(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 12080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (LO_PAIR(c00) + 3 * LO_PAIR(c10)) >> 2; 12180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (HI_PAIR(c00) + 3 * HI_PAIR(c10)) >> 2; 12280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 12380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 12480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_31(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 12580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (9 * LO_PAIR(c10) + 3 * (LO_PAIR(c00) + LO_PAIR(c11)) + LO_PAIR(c01)) >> 4; 12680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (9 * HI_PAIR(c10) + 3 * (HI_PAIR(c00) + HI_PAIR(c11)) + HI_PAIR(c01)) >> 4; 12780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 12880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 12980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_32(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 13080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (3 * (LO_PAIR(c10) + LO_PAIR(c11)) + LO_PAIR(c00) + LO_PAIR(c01)) >> 3; 13180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (3 * (HI_PAIR(c10) + HI_PAIR(c11)) + HI_PAIR(c00) + HI_PAIR(c01)) >> 3; 13280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 13380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 13480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic unsigned bilerp4_33(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 13580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (9 * LO_PAIR(c11) + 3 * (LO_PAIR(c01) + LO_PAIR(c10)) + LO_PAIR(c00)) >> 4; 13680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (9 * HI_PAIR(c11) + 3 * (HI_PAIR(c01) + HI_PAIR(c10)) + HI_PAIR(c00)) >> 4; 13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 13880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const SkFilter32Proc gBilerp32Procs[4 * 4] = { 14180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bilerp4_00, bilerp4_01, bilerp4_02, bilerp4_03, 14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bilerp4_10, bilerp4_11, bilerp4_12, bilerp4_13, 14380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bilerp4_20, bilerp4_21, bilerp4_22, bilerp4_23, 14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bilerp4_30, bilerp4_31, bilerp4_32, bilerp4_33 14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 14680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 14780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkFilter32Proc* SkGetFilter32ProcTable() 14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 14980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return gBilerp32Procs; 15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 15180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 15280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////////// 15380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 15480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr00(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 15580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return *a00; 15680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 15780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr01(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 15880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 15980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c01 = *a01; 16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (3 * LO_PAIR(c00) + LO_PAIR(c01)) >> 2; 16180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (3 * HI_PAIR(c00) + HI_PAIR(c01)) >> 2; 16280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 16380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 16480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr02(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 16580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 16680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c01 = *a01; 16780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (LO_PAIR(c00) + LO_PAIR(c01)) >> 1; 16880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (HI_PAIR(c00) + HI_PAIR(c01)) >> 1; 16980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 17080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 17180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr03(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 17280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 17380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c01 = *a01; 17480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (LO_PAIR(c00) + 3 * LO_PAIR(c01)) >> 2; 17580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (HI_PAIR(c00) + 3 * HI_PAIR(c01)) >> 2; 17680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 17780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 17880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 17980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr10(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 18080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 18180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c10 = *a10; 18280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (3 * LO_PAIR(c00) + LO_PAIR(c10)) >> 2; 18380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (3 * HI_PAIR(c00) + HI_PAIR(c10)) >> 2; 18480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 18580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 18680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr11(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 18780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 18880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c01 = *a01; 18980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c10 = *a10; 19080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c11 = *a11; 19180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (9 * LO_PAIR(c00) + 3 * (LO_PAIR(c01) + LO_PAIR(c10)) + LO_PAIR(c11)) >> 4; 19280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (9 * HI_PAIR(c00) + 3 * (HI_PAIR(c01) + HI_PAIR(c10)) + HI_PAIR(c11)) >> 4; 19380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 19480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 19580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr12(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 19680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 19780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c01 = *a01; 19880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c10 = *a10; 19980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c11 = *a11; 20080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (3 * (LO_PAIR(c00) + LO_PAIR(c01)) + LO_PAIR(c10) + LO_PAIR(c11)) >> 3; 20180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (3 * (HI_PAIR(c00) + HI_PAIR(c01)) + HI_PAIR(c10) + HI_PAIR(c11)) >> 3; 20280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 20380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 20480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr13(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 20580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 20680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c01 = *a01; 20780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c10 = *a10; 20880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c11 = *a11; 20980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (9 * LO_PAIR(c01) + 3 * (LO_PAIR(c00) + LO_PAIR(c11)) + LO_PAIR(c10)) >> 4; 21080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (9 * HI_PAIR(c01) + 3 * (HI_PAIR(c00) + HI_PAIR(c11)) + HI_PAIR(c10)) >> 4; 21180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 21280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 21380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 21480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr20(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 21580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 21680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c10 = *a10; 21780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (LO_PAIR(c00) + LO_PAIR(c10)) >> 1; 21880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (HI_PAIR(c00) + HI_PAIR(c10)) >> 1; 21980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 22080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 22180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr21(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 22280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 22380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c01 = *a01; 22480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c10 = *a10; 22580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c11 = *a11; 22680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (3 * (LO_PAIR(c00) + LO_PAIR(c10)) + LO_PAIR(c01) + LO_PAIR(c11)) >> 3; 22780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (3 * (HI_PAIR(c00) + HI_PAIR(c10)) + HI_PAIR(c01) + HI_PAIR(c11)) >> 3; 22880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 22980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 23080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr22(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 23180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 23280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c01 = *a01; 23380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c10 = *a10; 23480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c11 = *a11; 23580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (LO_PAIR(c00) + LO_PAIR(c01) + LO_PAIR(c10) + LO_PAIR(c11)) >> 2; 23680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (HI_PAIR(c00) + HI_PAIR(c01) + HI_PAIR(c10) + HI_PAIR(c11)) >> 2; 23780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 23880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 23980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr23(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 24080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 24180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c01 = *a01; 24280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c10 = *a10; 24380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c11 = *a11; 24480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (3 * (LO_PAIR(c01) + LO_PAIR(c11)) + LO_PAIR(c00) + LO_PAIR(c10)) >> 3; 24580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (3 * (HI_PAIR(c01) + HI_PAIR(c11)) + HI_PAIR(c00) + HI_PAIR(c10)) >> 3; 24680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 24780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 24880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 24980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr30(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 25080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 25180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c10 = *a10; 25280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (LO_PAIR(c00) + 3 * LO_PAIR(c10)) >> 2; 25380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (HI_PAIR(c00) + 3 * HI_PAIR(c10)) >> 2; 25480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 25580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 25680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr31(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 25780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 25880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c01 = *a01; 25980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c10 = *a10; 26080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c11 = *a11; 26180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (9 * LO_PAIR(c10) + 3 * (LO_PAIR(c00) + LO_PAIR(c11)) + LO_PAIR(c01)) >> 4; 26280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (9 * HI_PAIR(c10) + 3 * (HI_PAIR(c00) + HI_PAIR(c11)) + HI_PAIR(c01)) >> 4; 26380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 26480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 26580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr32(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 26680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 26780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c01 = *a01; 26880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c10 = *a10; 26980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c11 = *a11; 27080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (3 * (LO_PAIR(c10) + LO_PAIR(c11)) + LO_PAIR(c00) + LO_PAIR(c01)) >> 3; 27180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (3 * (HI_PAIR(c10) + HI_PAIR(c11)) + HI_PAIR(c00) + HI_PAIR(c01)) >> 3; 27280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 27380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 27480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint32_t bilerptr33(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 27580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c00 = *a00; 27680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c01 = *a01; 27780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c10 = *a10; 27880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t c11 = *a11; 27980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t lo = (9 * LO_PAIR(c11) + 3 * (LO_PAIR(c01) + LO_PAIR(c10)) + LO_PAIR(c00)) >> 4; 28080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t hi = (9 * HI_PAIR(c11) + 3 * (HI_PAIR(c01) + HI_PAIR(c10)) + HI_PAIR(c00)) >> 4; 28180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return COMBINE(lo, hi); 28280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 28380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 28480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const SkFilterPtrProc gBilerpPtrProcs[4 * 4] = { 28580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bilerptr00, bilerptr01, bilerptr02, bilerptr03, 28680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bilerptr10, bilerptr11, bilerptr12, bilerptr13, 28780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bilerptr20, bilerptr21, bilerptr22, bilerptr23, 28880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bilerptr30, bilerptr31, bilerptr32, bilerptr33 28980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 29080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 29180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkFilterPtrProc* SkGetBilinearFilterPtrProcTable() 29280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 29380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return gBilerpPtrProcs; 29480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 295