aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/opts/SkRasterPipeline_opts.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/opts/SkRasterPipeline_opts.h')
-rw-r--r--src/opts/SkRasterPipeline_opts.h50
1 files changed, 15 insertions, 35 deletions
diff --git a/src/opts/SkRasterPipeline_opts.h b/src/opts/SkRasterPipeline_opts.h
index 087a63025f..f1aa250d21 100644
--- a/src/opts/SkRasterPipeline_opts.h
+++ b/src/opts/SkRasterPipeline_opts.h
@@ -10,6 +10,8 @@
#include "SkColorPriv.h"
#include "SkColorLookUpTable.h"
+#include "SkColorSpaceXform_A2B.h"
+#include "SkColorSpaceXformPriv.h"
#include "SkHalf.h"
#include "SkPM4f.h"
#include "SkPM4fPriv.h"
@@ -232,6 +234,13 @@ STAGE(clamp_a, true) {
b = SkNf::Min(b, a);
}
+STAGE(clamp_1, true) {
+ a = SkNf::Min(a, 1.0f);
+ r = SkNf::Min(r, 1.0f);
+ g = SkNf::Min(g, 1.0f);
+ b = SkNf::Min(b, 1.0f);
+}
+
STAGE(unpremul, true) {
r *= a.invert();
g *= a.invert();
@@ -585,51 +594,22 @@ STAGE(parametric_b, true) {
b = parametric(b, *(const SkColorSpaceTransferFn*)ctx);
}
-SI SkNf table(const SkNf& v, const float t[1024]) {
- SkNi ix = SkNx_cast<int>(SkNf::Max(0, SkNf::Min(v, 1)) * 1023 + 0.5);
-
- float result[N]; // TODO: vgatherdps?
+SI SkNf table(const SkNf& v, const SkTableTransferFn& table) {
+ float result[N];
for (int i = 0; i < N; i++) {
- result[i] = t[ix[i]];
+ result[i] = interp_lut(v[i], table.fData, table.fSize);
}
return SkNf::Load(result);
}
STAGE(table_r, true) {
- r = table(r, (const float*)ctx);
+ r = table(r, *(const SkTableTransferFn*)ctx);
}
STAGE(table_g, true) {
- g = table(g, (const float*)ctx);
+ g = table(g, *(const SkTableTransferFn*)ctx);
}
STAGE(table_b, true) {
- b = table(b, (const float*)ctx);
-}
-
-STAGE(fn_1_r, true) {
- auto fn = (const std::function<float(float)>*)ctx;
- float result[N];
- for (int i = 0; i < N; ++i) {
- result[i] = (*fn)(r[i]);
- }
- r = SkNf::Load(result);
-}
-
-STAGE(fn_1_g, true) {
- auto fn = (const std::function<float(float)>*)ctx;
- float result[N];
- for (int i = 0; i < N; ++i) {
- result[i] = (*fn)(g[i]);
- }
- g = SkNf::Load(result);
-}
-
-STAGE(fn_1_b, true) {
- auto fn = (const std::function<float(float)>*)ctx;
- float result[N];
- for (int i = 0; i < N; ++i) {
- result[i] = (*fn)(b[i]);
- }
- b = SkNf::Load(result);
+ b = table(b, *(const SkTableTransferFn*)ctx);
}
STAGE(color_lookup_table, true) {