M(from_srgb) M(from_srgb_d) M(to_srgb) \
M(from_2dot2) M(to_2dot2) \
M(constant_color) M(store_f32) \
+ M(load_a8) M(load_a8_d) M(store_a8) \
M(load_565) M(load_565_d) M(store_565) \
M(load_f16) M(load_f16_d) M(store_f16) \
M(load_8888) M(load_8888_d) M(store_8888) \
static bool supported(const SkImageInfo& info) {
switch (info.colorType()) {
+ case kAlpha_8_SkColorType: return true;
+ case kRGB_565_SkColorType: return true;
case kN32_SkColorType: return info.gammaCloseToSRGB();
case kRGBA_F16_SkColorType: return true;
- case kRGB_565_SkColorType: return true;
default: return false;
}
}
SkASSERT(supported(fDst.info()));
switch (fDst.info().colorType()) {
+ case kAlpha_8_SkColorType: p->append(SkRasterPipeline::load_a8_d, &fDstPtr); break;
case kRGB_565_SkColorType: p->append(SkRasterPipeline::load_565_d, &fDstPtr); break;
case kBGRA_8888_SkColorType:
case kRGBA_8888_SkColorType: p->append(SkRasterPipeline::load_8888_d, &fDstPtr); break;
SkASSERT(supported(fDst.info()));
switch (fDst.info().colorType()) {
+ case kAlpha_8_SkColorType: p->append(SkRasterPipeline::store_a8, &fDstPtr); break;
case kRGB_565_SkColorType: p->append(SkRasterPipeline::store_565, &fDstPtr); break;
case kBGRA_8888_SkColorType:
case kRGBA_8888_SkColorType: p->append(SkRasterPipeline::store_8888, &fDstPtr); break;
hi = _mm256_extractf128_si256(src.fVec, 1);
return _mm_packus_epi32(lo, hi);
}
+ template<> AI /*static*/ Sk8b SkNx_cast<uint8_t>(const Sk8i& src) {
+ auto _16 = SkNx_cast<uint16_t>(src);
+ return _mm_packus_epi16(_16.fVec, _16.fVec);
+ }
#endif
a = 1.0f;
}
+STAGE_CTX(load_a8, const uint8_t**) {
+ auto ptr = *ctx + x;
+ r = g = b = 0.0f;
+ a = SkNf_from_byte(load(tail, ptr));
+}
+STAGE_CTX(store_a8, uint8_t**) {
+ auto ptr = *ctx + x;
+ store(tail, SkNx_cast<uint8_t>(SkNf_round(255.0f, a)), ptr);
+}
+
STAGE_CTX(load_565, const uint16_t**) {
auto ptr = *ctx + x;
from_565(load(tail, ptr), &r,&g,&b);