Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Side by Side Diff: src/core/SkBlitter_RGB16.cpp

Issue 1952953004: Remove NEON runtime detection support. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: (x) Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkBlitRow.h" 8 #include "SkBlitRow.h"
9 #include "SkCoreBlitters.h" 9 #include "SkCoreBlitters.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
11 #include "SkDither.h" 11 #include "SkDither.h"
12 #include "SkShader.h" 12 #include "SkShader.h"
13 #include "SkUtils.h" 13 #include "SkUtils.h"
14 #include "SkUtilsArm.h" 14 #include "SkUtilsArm.h"
15 #include "SkXfermode.h" 15 #include "SkXfermode.h"
16 16
17 #if defined(__mips_dsp) 17 #if defined(__mips_dsp)
18 extern void blitmask_d565_opaque_mips(int width, int height, uint16_t* device, 18 extern void blitmask_d565_opaque_mips(int width, int height, uint16_t* device,
19 unsigned deviceRB, const uint8_t* alpha, 19 unsigned deviceRB, const uint8_t* alpha,
20 uint32_t expanded32, unsigned maskRB); 20 uint32_t expanded32, unsigned maskRB);
21 #endif 21 #endif
22 22
23 #if SK_ARM_NEON_IS_ALWAYS && defined(SK_CPU_LENDIAN) 23 #if defined(SK_ARM_HAS_NEON) && defined(SK_CPU_LENDIAN)
24 #include <arm_neon.h> 24 #include <arm_neon.h>
25 extern void SkRGB16BlitterBlitV_neon(uint16_t* device, 25 extern void SkRGB16BlitterBlitV_neon(uint16_t* device,
26 int height, 26 int height,
27 size_t deviceRB, 27 size_t deviceRB,
28 unsigned scale, 28 unsigned scale,
29 uint32_t src32); 29 uint32_t src32);
30 #else 30 #else
31 // if we don't have neon, then our black blitter is worth the extra code 31 // if we don't have neon, then our black blitter is worth the extra code
32 #define USE_BLACK_BLITTER 32 #define USE_BLACK_BLITTER
33 #endif 33 #endif
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 } 374 }
375 375
376 uint16_t* SK_RESTRICT device = fDevice.writable_addr16(clip.fLeft, clip.fTop ); 376 uint16_t* SK_RESTRICT device = fDevice.writable_addr16(clip.fLeft, clip.fTop );
377 const uint8_t* SK_RESTRICT alpha = mask.getAddr8(clip.fLeft, clip.fTop); 377 const uint8_t* SK_RESTRICT alpha = mask.getAddr8(clip.fLeft, clip.fTop);
378 int width = clip.width(); 378 int width = clip.width();
379 int height = clip.height(); 379 int height = clip.height();
380 size_t deviceRB = fDevice.rowBytes() - (width << 1); 380 size_t deviceRB = fDevice.rowBytes() - (width << 1);
381 unsigned maskRB = mask.fRowBytes - width; 381 unsigned maskRB = mask.fRowBytes - width;
382 uint32_t expanded32 = fExpandedRaw16; 382 uint32_t expanded32 = fExpandedRaw16;
383 383
384 #if SK_ARM_NEON_IS_ALWAYS && defined(SK_CPU_LENDIAN) 384 #if defined(SK_ARM_HAS_NEON) && defined(SK_CPU_LENDIAN)
385 #define UNROLL 8 385 #define UNROLL 8
386 do { 386 do {
387 int w = width; 387 int w = width;
388 if (w >= UNROLL) { 388 if (w >= UNROLL) {
389 uint32x4_t color, dev_lo, dev_hi; 389 uint32x4_t color, dev_lo, dev_hi;
390 uint32x4_t wn1, wn2, tmp; 390 uint32x4_t wn1, wn2, tmp;
391 uint32x4_t vmask_g16, vmask_ng16; 391 uint32x4_t vmask_g16, vmask_ng16;
392 uint16x8_t valpha, vdev; 392 uint16x8_t valpha, vdev;
393 uint16x4_t odev_lo, odev_hi, valpha_lo, valpha_hi; 393 uint16x4_t odev_lo, odev_hi, valpha_lo, valpha_hi;
394 394
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 } 468 }
469 469
470 void SkRGB16_Opaque_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { 470 void SkRGB16_Opaque_Blitter::blitV(int x, int y, int height, SkAlpha alpha) {
471 uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y); 471 uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
472 size_t deviceRB = fDevice.rowBytes(); 472 size_t deviceRB = fDevice.rowBytes();
473 473
474 // TODO: respect fDoDither 474 // TODO: respect fDoDither
475 unsigned scale5 = SkAlpha255To256(alpha) >> 3; 475 unsigned scale5 = SkAlpha255To256(alpha) >> 3;
476 uint32_t src32 = fExpandedRaw16 * scale5; 476 uint32_t src32 = fExpandedRaw16 * scale5;
477 scale5 = 32 - scale5; 477 scale5 = 32 - scale5;
478 #if SK_ARM_NEON_IS_ALWAYS && defined(SK_CPU_LENDIAN) 478 #if defined(SK_ARM_HAS_NEON) && defined(SK_CPU_LENDIAN)
479 SkRGB16BlitterBlitV_neon(device, height, deviceRB, scale5, src32); 479 SkRGB16BlitterBlitV_neon(device, height, deviceRB, scale5, src32);
480 #else 480 #else
481 do { 481 do {
482 uint32_t dst32 = SkExpand_rgb_16(*device) * scale5; 482 uint32_t dst32 = SkExpand_rgb_16(*device) * scale5;
483 *device = SkCompact_rgb_16((src32 + dst32) >> 5); 483 *device = SkCompact_rgb_16((src32 + dst32) >> 5);
484 device = (uint16_t*)((char*)device + deviceRB); 484 device = (uint16_t*)((char*)device + deviceRB);
485 } while (--height != 0); 485 } while (--height != 0);
486 #endif 486 #endif
487 } 487 }
488 488
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 } 647 }
648 648
649 void SkRGB16_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { 649 void SkRGB16_Blitter::blitV(int x, int y, int height, SkAlpha alpha) {
650 uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y); 650 uint16_t* SK_RESTRICT device = fDevice.writable_addr16(x, y);
651 size_t deviceRB = fDevice.rowBytes(); 651 size_t deviceRB = fDevice.rowBytes();
652 652
653 // TODO: respect fDoDither 653 // TODO: respect fDoDither
654 unsigned scale5 = SkAlpha255To256(alpha) * fScale >> (8 + 3); 654 unsigned scale5 = SkAlpha255To256(alpha) * fScale >> (8 + 3);
655 uint32_t src32 = fExpandedRaw16 * scale5; 655 uint32_t src32 = fExpandedRaw16 * scale5;
656 scale5 = 32 - scale5; 656 scale5 = 32 - scale5;
657 #if SK_ARM_NEON_IS_ALWAYS && defined(SK_CPU_LENDIAN) 657 #if defined(SK_ARM_HAS_NEON) && defined(SK_CPU_LENDIAN)
658 SkRGB16BlitterBlitV_neon(device, height, deviceRB, scale5, src32); 658 SkRGB16BlitterBlitV_neon(device, height, deviceRB, scale5, src32);
659 #else 659 #else
660 do { 660 do {
661 uint32_t dst32 = SkExpand_rgb_16(*device) * scale5; 661 uint32_t dst32 = SkExpand_rgb_16(*device) * scale5;
662 *device = SkCompact_rgb_16((src32 + dst32) >> 5); 662 *device = SkCompact_rgb_16((src32 + dst32) >> 5);
663 device = (uint16_t*)((char*)device + deviceRB); 663 device = (uint16_t*)((char*)device + deviceRB);
664 } while (--height != 0); 664 } while (--height != 0);
665 #endif 665 #endif
666 } 666 }
667 667
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 #endif 921 #endif
922 } else if (0xFF == SkColorGetA(color)) { 922 } else if (0xFF == SkColorGetA(color)) {
923 blitter = allocator->createT<SkRGB16_Opaque_Blitter>(device, paint); 923 blitter = allocator->createT<SkRGB16_Opaque_Blitter>(device, paint);
924 } else { 924 } else {
925 blitter = allocator->createT<SkRGB16_Blitter>(device, paint); 925 blitter = allocator->createT<SkRGB16_Blitter>(device, paint);
926 } 926 }
927 } 927 }
928 928
929 return blitter; 929 return blitter;
930 } 930 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698