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

Unified Diff: src/core/SkOpts.cpp

Issue 1569013002: Set up some hooks for premul/swizzzle opts. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/SkOpts.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkOpts.cpp
diff --git a/src/core/SkOpts.cpp b/src/core/SkOpts.cpp
index 781977ea68406e01b5db022eb53aa464f2e86f2f..ee88b231690b0e8d7f0cd895a9609f9bf680235b 100644
--- a/src/core/SkOpts.cpp
+++ b/src/core/SkOpts.cpp
@@ -49,6 +49,58 @@
#include <cpu-features.h>
#endif
+namespace sk_default {
+
+// These variable names in these functions just pretend the input is BGRA.
+// They work fine with both RGBA and BGRA.
+
+static void premul_xxxa(uint32_t dst[], const uint32_t src[], int count) {
+ for (int i = 0; i < count; i++) {
+ uint8_t a = src[i] >> 24,
+ r = src[i] >> 16,
+ g = src[i] >> 8,
+ b = src[i] >> 0;
+ r = (r*a+127)/255;
msarett 2016/01/07 21:35:06 Currently, we use this: static inline U8CPU SkMul
+ g = (g*a+127)/255;
+ b = (b*a+127)/255;
+ dst[i] = (uint32_t)a << 24
+ | (uint32_t)r << 16
+ | (uint32_t)g << 8
+ | (uint32_t)b << 0;
+ }
+}
+
+static void swaprb_xxxa(uint32_t dst[], const uint32_t src[], int count) {
+ for (int i = 0; i < count; i++) {
+ uint8_t a = src[i] >> 24,
+ r = src[i] >> 16,
+ g = src[i] >> 8,
+ b = src[i] >> 0;
+ dst[i] = (uint32_t)a << 24
+ | (uint32_t)b << 16
+ | (uint32_t)g << 8
+ | (uint32_t)r << 0;
+ }
+}
+
+static void premul_swaprb_xxxa(uint32_t dst[], const uint32_t src[], int count) {
+ for (int i = 0; i < count; i++) {
+ uint8_t a = src[i] >> 24,
+ r = src[i] >> 16,
+ g = src[i] >> 8,
+ b = src[i] >> 0;
+ r = (r*a+127)/255;
+ g = (g*a+127)/255;
+ b = (b*a+127)/255;
+ dst[i] = (uint32_t)a << 24
+ | (uint32_t)b << 16
+ | (uint32_t)g << 8
+ | (uint32_t)r << 0;
+ }
+}
+
+} // namespace sk_default
+
namespace SkOpts {
// Define default function pointer values here...
// If our global compile options are set high enough, these defaults might even be
@@ -80,6 +132,10 @@ namespace SkOpts {
decltype(matrix_scale_translate) matrix_scale_translate = sk_default::matrix_scale_translate;
decltype(matrix_affine) matrix_affine = sk_default::matrix_affine;
+ decltype( premul_xxxa) premul_xxxa = sk_default:: premul_xxxa;
+ decltype( swaprb_xxxa) swaprb_xxxa = sk_default:: swaprb_xxxa;
+ decltype(premul_swaprb_xxxa) premul_swaprb_xxxa = sk_default::premul_swaprb_xxxa;
+
// Each Init_foo() is defined in src/opts/SkOpts_foo.cpp.
void Init_ssse3();
void Init_sse41();
« no previous file with comments | « src/core/SkOpts.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698