1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkFilterProc.h" 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* [1-x 1-y] [x 1-y] 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com [1-x y] [x y] 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com*/ 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp00(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return a00; } 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp01(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (3 * a00 + a01) >> 2; } 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp02(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (a00 + a01) >> 1; } 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp03(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (a00 + 3 * a01) >> 2; } 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp10(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (3 * a00 + a10) >> 2; } 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp11(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (9 * a00 + 3 * (a01 + a10) + a11) >> 4; } 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp12(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (3 * (a00 + a01) + a10 + a11) >> 3; } 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp13(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (9 * a01 + 3 * (a00 + a11) + a10) >> 4; } 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp20(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (a00 + a10) >> 1; } 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp21(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (3 * (a00 + a10) + a01 + a11) >> 3; } 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp22(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (a00 + a01 + a10 + a11) >> 2; } 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp23(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (3 * (a01 + a11) + a00 + a10) >> 3; } 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp30(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (a00 + 3 * a10) >> 2; } 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp31(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (9 * a10 + 3 * (a00 + a11) + a01) >> 4; } 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp32(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (3 * (a10 + a11) + a00 + a01) >> 3; } 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp33(unsigned a00, unsigned a01, unsigned a10, unsigned a11) { return (9 * a11 + 3 * (a01 + a10) + a00) >> 4; } 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic const SkFilterProc gBilerpProcs[4 * 4] = { 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bilerp00, bilerp01, bilerp02, bilerp03, 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bilerp10, bilerp11, bilerp12, bilerp13, 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bilerp20, bilerp21, bilerp22, bilerp23, 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bilerp30, bilerp31, bilerp32, bilerp33 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkFilterProc* SkGetBilinearFilterProcTable() 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return gBilerpProcs; 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define MASK 0xFF00FF 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define LO_PAIR(x) ((x) & MASK) 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define HI_PAIR(x) (((x) >> 8) & MASK) 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define COMBINE(lo, hi) (((lo) & ~0xFF00) | (((hi) & ~0xFF00) << 8)) 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_00(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return c00; 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_01(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (3 * LO_PAIR(c00) + LO_PAIR(c01)) >> 2; 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (3 * HI_PAIR(c00) + HI_PAIR(c01)) >> 2; 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_02(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (LO_PAIR(c00) + LO_PAIR(c01)) >> 1; 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (HI_PAIR(c00) + HI_PAIR(c01)) >> 1; 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_03(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (LO_PAIR(c00) + 3 * LO_PAIR(c01)) >> 2; 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (HI_PAIR(c00) + 3 * HI_PAIR(c01)) >> 2; 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_10(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (3 * LO_PAIR(c00) + LO_PAIR(c10)) >> 2; 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (3 * HI_PAIR(c00) + HI_PAIR(c10)) >> 2; 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_11(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (9 * LO_PAIR(c00) + 3 * (LO_PAIR(c01) + LO_PAIR(c10)) + LO_PAIR(c11)) >> 4; 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (9 * HI_PAIR(c00) + 3 * (HI_PAIR(c01) + HI_PAIR(c10)) + HI_PAIR(c11)) >> 4; 858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_12(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (3 * (LO_PAIR(c00) + LO_PAIR(c01)) + LO_PAIR(c10) + LO_PAIR(c11)) >> 3; 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (3 * (HI_PAIR(c00) + HI_PAIR(c01)) + HI_PAIR(c10) + HI_PAIR(c11)) >> 3; 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_13(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (9 * LO_PAIR(c01) + 3 * (LO_PAIR(c00) + LO_PAIR(c11)) + LO_PAIR(c10)) >> 4; 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (9 * HI_PAIR(c01) + 3 * (HI_PAIR(c00) + HI_PAIR(c11)) + HI_PAIR(c10)) >> 4; 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_20(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (LO_PAIR(c00) + LO_PAIR(c10)) >> 1; 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (HI_PAIR(c00) + HI_PAIR(c10)) >> 1; 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_21(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (3 * (LO_PAIR(c00) + LO_PAIR(c10)) + LO_PAIR(c01) + LO_PAIR(c11)) >> 3; 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (3 * (HI_PAIR(c00) + HI_PAIR(c10)) + HI_PAIR(c01) + HI_PAIR(c11)) >> 3; 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_22(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (LO_PAIR(c00) + LO_PAIR(c01) + LO_PAIR(c10) + LO_PAIR(c11)) >> 2; 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (HI_PAIR(c00) + HI_PAIR(c01) + HI_PAIR(c10) + HI_PAIR(c11)) >> 2; 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_23(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (3 * (LO_PAIR(c01) + LO_PAIR(c11)) + LO_PAIR(c00) + LO_PAIR(c10)) >> 3; 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (3 * (HI_PAIR(c01) + HI_PAIR(c11)) + HI_PAIR(c00) + HI_PAIR(c10)) >> 3; 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_30(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (LO_PAIR(c00) + 3 * LO_PAIR(c10)) >> 2; 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (HI_PAIR(c00) + 3 * HI_PAIR(c10)) >> 2; 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_31(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (9 * LO_PAIR(c10) + 3 * (LO_PAIR(c00) + LO_PAIR(c11)) + LO_PAIR(c01)) >> 4; 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (9 * HI_PAIR(c10) + 3 * (HI_PAIR(c00) + HI_PAIR(c11)) + HI_PAIR(c01)) >> 4; 1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_32(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (3 * (LO_PAIR(c10) + LO_PAIR(c11)) + LO_PAIR(c00) + LO_PAIR(c01)) >> 3; 1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (3 * (HI_PAIR(c10) + HI_PAIR(c11)) + HI_PAIR(c00) + HI_PAIR(c01)) >> 3; 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic unsigned bilerp4_33(uint32_t c00, uint32_t c01, uint32_t c10, uint32_t c11) { 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (9 * LO_PAIR(c11) + 3 * (LO_PAIR(c01) + LO_PAIR(c10)) + LO_PAIR(c00)) >> 4; 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (9 * HI_PAIR(c11) + 3 * (HI_PAIR(c01) + HI_PAIR(c10)) + HI_PAIR(c00)) >> 4; 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic const SkFilter32Proc gBilerp32Procs[4 * 4] = { 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bilerp4_00, bilerp4_01, bilerp4_02, bilerp4_03, 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bilerp4_10, bilerp4_11, bilerp4_12, bilerp4_13, 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bilerp4_20, bilerp4_21, bilerp4_22, bilerp4_23, 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bilerp4_30, bilerp4_31, bilerp4_32, bilerp4_33 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkFilter32Proc* SkGetFilter32ProcTable() 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return gBilerp32Procs; 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 15455747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr00(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return *a00; 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 15755747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr01(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 159fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com uint32_t c01 = *a01; 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (3 * LO_PAIR(c00) + LO_PAIR(c01)) >> 2; 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (3 * HI_PAIR(c00) + HI_PAIR(c01)) >> 2; 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 16455747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr02(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 166fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com uint32_t c01 = *a01; 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (LO_PAIR(c00) + LO_PAIR(c01)) >> 1; 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (HI_PAIR(c00) + HI_PAIR(c01)) >> 1; 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 17155747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr03(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 1728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c01 = *a01; 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (LO_PAIR(c00) + 3 * LO_PAIR(c01)) >> 2; 1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (HI_PAIR(c00) + 3 * HI_PAIR(c01)) >> 2; 1768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 17955747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr10(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c10 = *a10; 1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (3 * LO_PAIR(c00) + LO_PAIR(c10)) >> 2; 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (3 * HI_PAIR(c00) + HI_PAIR(c10)) >> 2; 1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 18655747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr11(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c01 = *a01; 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c10 = *a10; 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c11 = *a11; 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (9 * LO_PAIR(c00) + 3 * (LO_PAIR(c01) + LO_PAIR(c10)) + LO_PAIR(c11)) >> 4; 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (9 * HI_PAIR(c00) + 3 * (HI_PAIR(c01) + HI_PAIR(c10)) + HI_PAIR(c11)) >> 4; 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 19555747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr12(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c01 = *a01; 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c10 = *a10; 1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c11 = *a11; 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (3 * (LO_PAIR(c00) + LO_PAIR(c01)) + LO_PAIR(c10) + LO_PAIR(c11)) >> 3; 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (3 * (HI_PAIR(c00) + HI_PAIR(c01)) + HI_PAIR(c10) + HI_PAIR(c11)) >> 3; 2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 20455747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr13(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c01 = *a01; 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c10 = *a10; 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c11 = *a11; 2098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (9 * LO_PAIR(c01) + 3 * (LO_PAIR(c00) + LO_PAIR(c11)) + LO_PAIR(c10)) >> 4; 2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (9 * HI_PAIR(c01) + 3 * (HI_PAIR(c00) + HI_PAIR(c11)) + HI_PAIR(c10)) >> 4; 2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 21455747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr20(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c10 = *a10; 2178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (LO_PAIR(c00) + LO_PAIR(c10)) >> 1; 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (HI_PAIR(c00) + HI_PAIR(c10)) >> 1; 2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 22155747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr21(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 2228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 2238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c01 = *a01; 2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c10 = *a10; 2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c11 = *a11; 2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (3 * (LO_PAIR(c00) + LO_PAIR(c10)) + LO_PAIR(c01) + LO_PAIR(c11)) >> 3; 2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (3 * (HI_PAIR(c00) + HI_PAIR(c10)) + HI_PAIR(c01) + HI_PAIR(c11)) >> 3; 2288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 23055747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr22(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c01 = *a01; 2338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c10 = *a10; 2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c11 = *a11; 2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (LO_PAIR(c00) + LO_PAIR(c01) + LO_PAIR(c10) + LO_PAIR(c11)) >> 2; 2368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (HI_PAIR(c00) + HI_PAIR(c01) + HI_PAIR(c10) + HI_PAIR(c11)) >> 2; 2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 23955747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr23(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c01 = *a01; 2428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c10 = *a10; 2438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c11 = *a11; 2448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (3 * (LO_PAIR(c01) + LO_PAIR(c11)) + LO_PAIR(c00) + LO_PAIR(c10)) >> 3; 2458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (3 * (HI_PAIR(c01) + HI_PAIR(c11)) + HI_PAIR(c00) + HI_PAIR(c10)) >> 3; 2468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 2478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 24955747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr30(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 2508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 2518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c10 = *a10; 2528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (LO_PAIR(c00) + 3 * LO_PAIR(c10)) >> 2; 2538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (HI_PAIR(c00) + 3 * HI_PAIR(c10)) >> 2; 2548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 2558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 25655747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr31(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 2578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 2588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c01 = *a01; 2598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c10 = *a10; 2608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c11 = *a11; 2618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (9 * LO_PAIR(c10) + 3 * (LO_PAIR(c00) + LO_PAIR(c11)) + LO_PAIR(c01)) >> 4; 2628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (9 * HI_PAIR(c10) + 3 * (HI_PAIR(c00) + HI_PAIR(c11)) + HI_PAIR(c01)) >> 4; 2638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 2648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 26555747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr32(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 2668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 2678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c01 = *a01; 2688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c10 = *a10; 2698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c11 = *a11; 2708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (3 * (LO_PAIR(c10) + LO_PAIR(c11)) + LO_PAIR(c00) + LO_PAIR(c01)) >> 3; 2718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (3 * (HI_PAIR(c10) + HI_PAIR(c11)) + HI_PAIR(c00) + HI_PAIR(c01)) >> 3; 2728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 2738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 27455747ccdfb889e143f55c9ae67a012a8913efa39agl@chromium.orgstatic uint32_t bilerptr33(const uint32_t* a00, const uint32_t* a01, const uint32_t* a10, const uint32_t* a11) { 2758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c00 = *a00; 2768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c01 = *a01; 2778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c10 = *a10; 2788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t c11 = *a11; 2798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t lo = (9 * LO_PAIR(c11) + 3 * (LO_PAIR(c01) + LO_PAIR(c10)) + LO_PAIR(c00)) >> 4; 2808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t hi = (9 * HI_PAIR(c11) + 3 * (HI_PAIR(c01) + HI_PAIR(c10)) + HI_PAIR(c00)) >> 4; 2818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return COMBINE(lo, hi); 2828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic const SkFilterPtrProc gBilerpPtrProcs[4 * 4] = { 2858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bilerptr00, bilerptr01, bilerptr02, bilerptr03, 2868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bilerptr10, bilerptr11, bilerptr12, bilerptr13, 2878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bilerptr20, bilerptr21, bilerptr22, bilerptr23, 2888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bilerptr30, bilerptr31, bilerptr32, bilerptr33 2898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkFilterPtrProc* SkGetBilinearFilterPtrProcTable() 2928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 2938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return gBilerpPtrProcs; 2948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 295