@shopify/react-native-skia 0.1.197 → 0.1.200
Sign up to get free protection for your applications and to get access to all the features.
- package/android/CMakeLists.txt +32 -31
- package/android/cpp/rnskia-android/SkiaOpenGLRenderer.cpp +4 -2
- package/android/cpp/rnskia-android/SkiaOpenGLRenderer.h +3 -0
- package/cpp/api/JsiSkShaderFactory.h +4 -4
- package/cpp/api/JsiSkSurfaceFactory.h +2 -1
- package/cpp/rnskia/dom/nodes/JsiShaderNodes.h +2 -2
- package/cpp/skia/include/android/SkCanvasAndroid.h +20 -0
- package/cpp/skia/include/android/SkHeifDecoder.h +43 -0
- package/cpp/skia/include/android/SkSurfaceAndroid.h +50 -0
- package/cpp/skia/include/codec/SkAvifDecoder.h +43 -0
- package/cpp/skia/include/codec/SkBmpDecoder.h +43 -0
- package/cpp/skia/include/codec/SkCodec.h +25 -1
- package/cpp/skia/include/codec/SkGifDecoder.h +43 -0
- package/cpp/skia/include/codec/SkIcoDecoder.h +43 -0
- package/cpp/skia/include/codec/SkJpegDecoder.h +43 -0
- package/cpp/skia/include/codec/SkJpegxlDecoder.h +43 -0
- package/cpp/skia/include/codec/SkPngDecoder.h +43 -0
- package/cpp/skia/include/codec/SkRawDecoder.h +49 -0
- package/cpp/skia/include/codec/SkWbmpDecoder.h +43 -0
- package/cpp/skia/include/codec/SkWebpDecoder.h +43 -0
- package/cpp/skia/include/core/SkBBHFactory.h +5 -1
- package/cpp/skia/include/core/SkBlender.h +0 -2
- package/cpp/skia/include/core/SkCanvas.h +4 -23
- package/cpp/skia/include/core/SkColorFilter.h +14 -1
- package/cpp/skia/include/core/SkColorTable.h +59 -0
- package/cpp/skia/include/core/SkContourMeasure.h +3 -0
- package/cpp/skia/include/core/SkDeferredDisplayList.h +8 -104
- package/cpp/skia/include/core/SkDeferredDisplayListRecorder.h +8 -91
- package/cpp/skia/include/core/SkDrawable.h +5 -2
- package/cpp/skia/include/core/SkGraphics.h +7 -19
- package/cpp/skia/include/core/SkImage.h +157 -249
- package/cpp/skia/include/core/SkImageGenerator.h +0 -31
- package/cpp/skia/include/core/SkMilestone.h +1 -1
- package/cpp/skia/include/core/SkPathMeasure.h +3 -3
- package/cpp/skia/include/core/SkPictureRecorder.h +1 -1
- package/cpp/skia/include/core/SkPoint.h +5 -563
- package/cpp/skia/include/core/SkPoint3.h +1 -0
- package/cpp/skia/include/core/SkPromiseImageTexture.h +4 -30
- package/cpp/skia/include/core/SkRect.h +8 -8
- package/cpp/skia/include/core/SkSamplingOptions.h +4 -2
- package/cpp/skia/include/core/SkScalar.h +1 -1
- package/cpp/skia/include/core/SkSerialProcs.h +5 -1
- package/cpp/skia/include/core/SkShader.h +14 -21
- package/cpp/skia/include/core/SkString.h +2 -0
- package/cpp/skia/include/core/SkSurface.h +169 -701
- package/cpp/skia/include/core/SkSurfaceCharacterization.h +8 -256
- package/cpp/skia/include/core/SkTiledImageUtils.h +97 -0
- package/cpp/skia/include/core/SkTypes.h +4 -2
- package/cpp/skia/include/core/SkYUVAPixmaps.h +0 -5
- package/cpp/skia/include/effects/SkGradientShader.h +10 -1
- package/cpp/skia/include/effects/SkImageFilters.h +62 -37
- package/cpp/skia/include/effects/SkPerlinNoiseShader.h +28 -29
- package/cpp/skia/include/effects/SkRuntimeEffect.h +17 -12
- package/cpp/skia/include/gpu/GrBackendSurface.h +12 -39
- package/cpp/skia/include/gpu/GrBackendSurfaceMutableState.h +6 -0
- package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +3 -3
- package/cpp/skia/include/gpu/GrDirectContext.h +103 -3
- package/cpp/skia/include/gpu/GrRecordingContext.h +10 -19
- package/cpp/skia/include/gpu/MutableTextureState.h +4 -0
- package/cpp/skia/include/gpu/ganesh/GrExternalTextureGenerator.h +54 -0
- package/cpp/skia/include/gpu/ganesh/SkImageGanesh.h +20 -76
- package/cpp/skia/include/gpu/ganesh/SkSurfaceGanesh.h +217 -0
- package/cpp/skia/include/gpu/ganesh/mtl/SkSurfaceMetal.h +73 -0
- package/cpp/skia/include/gpu/gl/GrGLTypes.h +13 -2
- package/cpp/skia/include/gpu/graphite/BackendSemaphore.h +78 -0
- package/cpp/skia/include/gpu/graphite/BackendTexture.h +1 -0
- package/cpp/skia/include/gpu/graphite/Image.h +277 -0
- package/cpp/skia/include/gpu/graphite/ImageProvider.h +1 -1
- package/cpp/skia/include/gpu/graphite/Recording.h +1 -4
- package/cpp/skia/include/gpu/graphite/Surface.h +81 -0
- package/cpp/skia/include/gpu/graphite/TextureInfo.h +5 -7
- package/cpp/skia/include/gpu/graphite/YUVABackendTextures.h +2 -2
- package/cpp/skia/include/gpu/mock/GrMockTypes.h +23 -8
- package/cpp/skia/include/ports/SkTypeface_fontations.h +21 -0
- package/cpp/skia/include/private/SkGainmapInfo.h +2 -0
- package/cpp/skia/include/private/SkGainmapShader.h +1 -0
- package/cpp/skia/include/private/SkJpegMetadataDecoder.h +19 -1
- package/cpp/skia/include/private/SkPathRef.h +13 -15
- package/cpp/skia/include/private/SkXmp.h +53 -0
- package/cpp/skia/include/private/base/SkFeatures.h +0 -4
- package/cpp/skia/include/private/base/SkFloatingPoint.h +11 -5
- package/cpp/skia/include/private/base/SkPoint_impl.h +569 -0
- package/cpp/skia/include/private/base/SkSpan_impl.h +3 -7
- package/cpp/skia/include/private/base/SkTArray.h +11 -11
- package/cpp/skia/include/private/chromium/GrDeferredDisplayList.h +120 -0
- package/cpp/skia/include/private/chromium/GrDeferredDisplayListRecorder.h +98 -0
- package/cpp/skia/include/private/chromium/GrPromiseImageTexture.h +43 -0
- package/cpp/skia/include/private/chromium/GrSurfaceCharacterization.h +215 -0
- package/cpp/skia/include/private/chromium/GrVkSecondaryCBDrawContext.h +6 -6
- package/cpp/skia/include/private/chromium/SkImageChromium.h +104 -0
- package/cpp/skia/include/private/chromium/Slug.h +7 -3
- package/cpp/skia/include/private/gpu/ganesh/GrContext_Base.h +7 -3
- package/cpp/skia/include/private/gpu/ganesh/GrGLTypesPriv.h +2 -0
- package/cpp/skia/include/private/gpu/ganesh/GrImageContext.h +3 -2
- package/cpp/skia/include/private/gpu/ganesh/GrMtlTypesPriv.h +10 -2
- package/cpp/skia/include/{gpu → private/gpu}/ganesh/GrTextureGenerator.h +2 -13
- package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +1 -1
- package/cpp/skia/include/private/gpu/graphite/DawnTypesPriv.h +7 -0
- package/cpp/skia/include/private/gpu/graphite/MtlGraphiteTypesPriv.h +19 -6
- package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +13 -0
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan.h +0 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_android.h +14 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_core.h +999 -79
- package/cpp/skia/modules/skcms/src/Transform_inl.h +36 -236
- package/cpp/skia/modules/skparagraph/include/Paragraph.h +2 -0
- package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +16 -0
- package/cpp/skia/modules/skparagraph/include/TextStyle.h +6 -2
- package/cpp/skia/modules/skresources/include/SkResources.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGCircle.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGClipPath.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGContainer.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGDOM.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGDefs.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGEllipse.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFe.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeBlend.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeColorMatrix.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeComposite.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeDisplacementMap.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeFlood.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeGaussianBlur.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeImage.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeLightSource.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeLighting.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeOffset.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFeTurbulence.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFilter.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGG.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGGradient.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGHiddenContainer.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGImage.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGLine.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGLinearGradient.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGMask.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGNode.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGPath.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGPattern.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGPoly.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGRadialGradient.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGRect.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGRenderContext.h +3 -3
- package/cpp/skia/modules/svg/include/SkSVGSVG.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGShape.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGStop.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGText.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGTransformableNode.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGTypes.h +21 -21
- package/cpp/skia/modules/svg/include/SkSVGUse.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGValue.h +2 -2
- package/cpp/skia/{include/private → src/core}/SkChecksum.h +32 -17
- package/cpp/skia/src/core/SkTHash.h +1 -1
- package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +3 -1
- package/ios/RNSkia-iOS/SkiaMetalRenderer.mm +3 -1
- package/libs/android/arm64-v8a/libskia.a +0 -0
- package/libs/android/arm64-v8a/libskottie.a +0 -0
- package/libs/android/arm64-v8a/libsksg.a +0 -0
- package/libs/android/arm64-v8a/libsvg.a +0 -0
- package/libs/android/armeabi-v7a/libskia.a +0 -0
- package/libs/android/armeabi-v7a/libskottie.a +0 -0
- package/libs/android/armeabi-v7a/libsksg.a +0 -0
- package/libs/android/armeabi-v7a/libsvg.a +0 -0
- package/libs/android/x86/libskia.a +0 -0
- package/libs/android/x86/libskottie.a +0 -0
- package/libs/android/x86/libsksg.a +0 -0
- package/libs/android/x86/libsvg.a +0 -0
- package/libs/android/x86_64/libskia.a +0 -0
- package/libs/android/x86_64/libskottie.a +0 -0
- package/libs/android/x86_64/libsksg.a +0 -0
- package/libs/android/x86_64/libsvg.a +0 -0
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
- package/libs/ios/libsksg.xcframework/Info.plist +5 -5
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
- package/libs/ios/libsvg.xcframework/Info.plist +5 -5
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
- package/package.json +1 -3
- package/cpp/skia/include/effects/SkTableColorFilter.h +0 -29
- package/cpp/skia/include/private/SkOpts_spi.h +0 -23
- package/cpp/skia/include/private/SkSpinlock.h +0 -57
- package/cpp/skia/include/private/chromium/GrSlug.h +0 -16
- package/scripts/install-npm.js +0 -33
@@ -51,11 +51,19 @@ using U8 = V<uint8_t>;
|
|
51
51
|
// This is more for organizational clarity... skcms.cc doesn't force these.
|
52
52
|
#if N > 1 && defined(__ARM_NEON)
|
53
53
|
#define USING_NEON
|
54
|
-
|
55
|
-
|
56
|
-
#
|
57
|
-
|
58
|
-
#
|
54
|
+
|
55
|
+
// We have to use two different mechanisms to enable the f16 conversion intrinsics:
|
56
|
+
#if defined(__clang__)
|
57
|
+
// Clang's arm_neon.h guards them with the FP hardware bit:
|
58
|
+
#if __ARM_FP & 2
|
59
|
+
#define USING_NEON_F16C
|
60
|
+
#endif
|
61
|
+
#elif defined(__GNUC__)
|
62
|
+
// GCC's arm_neon.h guards them with the FP16 format macros (IEEE and ALTERNATIVE).
|
63
|
+
// We don't actually want the alternative format - we're reading/writing IEEE f16 values.
|
64
|
+
#if defined(__ARM_FP16_FORMAT_IEEE)
|
65
|
+
#define USING_NEON_F16C
|
66
|
+
#endif
|
59
67
|
#endif
|
60
68
|
#endif
|
61
69
|
|
@@ -132,12 +140,7 @@ SI D bit_pun(const S& v) {
|
|
132
140
|
// When we convert from float to fixed point, it's very common to want to round,
|
133
141
|
// and for some reason compilers generate better code when converting to int32_t.
|
134
142
|
// To serve both those ends, we use this function to_fixed() instead of direct cast().
|
135
|
-
|
136
|
-
// NEON's got a F16 -> U16 instruction, so this should be fine without going via I16.
|
137
|
-
SI U16 to_fixed(F f) { return cast<U16>(f + 0.5f); }
|
138
|
-
#else
|
139
|
-
SI U32 to_fixed(F f) { return (U32)cast<I32>(f + 0.5f); }
|
140
|
-
#endif
|
143
|
+
SI U32 to_fixed(F f) { return (U32)cast<I32>(f + 0.5f); }
|
141
144
|
|
142
145
|
|
143
146
|
// Sometimes we do something crazy on one branch of a conditonal,
|
@@ -158,9 +161,7 @@ SI D bit_pun(const S& v) {
|
|
158
161
|
|
159
162
|
|
160
163
|
SI F F_from_Half(U16 half) {
|
161
|
-
#if defined(
|
162
|
-
return bit_pun<F>(half);
|
163
|
-
#elif defined(USING_NEON_F16C)
|
164
|
+
#if defined(USING_NEON_F16C)
|
164
165
|
return vcvt_f32_f16((float16x4_t)half);
|
165
166
|
#elif defined(USING_AVX512F)
|
166
167
|
return (F)_mm512_cvtph_ps((__m256i)half);
|
@@ -187,9 +188,7 @@ SI F F_from_Half(U16 half) {
|
|
187
188
|
__attribute__((no_sanitize("unsigned-integer-overflow")))
|
188
189
|
#endif
|
189
190
|
SI U16 Half_from_F(F f) {
|
190
|
-
#if defined(
|
191
|
-
return bit_pun<U16>(f);
|
192
|
-
#elif defined(USING_NEON_F16C)
|
191
|
+
#if defined(USING_NEON_F16C)
|
193
192
|
return (U16)vcvt_f16_f32(f);
|
194
193
|
#elif defined(USING_AVX512F)
|
195
194
|
return (U16)_mm512_cvtps_ph((__m512 )f, _MM_FROUND_CUR_DIRECTION );
|
@@ -208,11 +207,7 @@ SI U16 Half_from_F(F f) {
|
|
208
207
|
}
|
209
208
|
|
210
209
|
// Swap high and low bytes of 16-bit lanes, converting between big-endian and little-endian.
|
211
|
-
#if defined(
|
212
|
-
SI U16 swap_endian_16(U16 v) {
|
213
|
-
return (U16)vrev16q_u8((uint8x16_t) v);
|
214
|
-
}
|
215
|
-
#elif defined(USING_NEON)
|
210
|
+
#if defined(USING_NEON)
|
216
211
|
SI U16 swap_endian_16(U16 v) {
|
217
212
|
return (U16)vrev16_u8((uint8x8_t) v);
|
218
213
|
}
|
@@ -223,10 +218,7 @@ SI U64 swap_endian_16x4(const U64& rgba) {
|
|
223
218
|
| (rgba & 0xff00ff00ff00ff00) >> 8;
|
224
219
|
}
|
225
220
|
|
226
|
-
#if defined(
|
227
|
-
SI F min_(F x, F y) { return (F)vminq_f16((float16x8_t)x, (float16x8_t)y); }
|
228
|
-
SI F max_(F x, F y) { return (F)vmaxq_f16((float16x8_t)x, (float16x8_t)y); }
|
229
|
-
#elif defined(USING_NEON)
|
221
|
+
#if defined(USING_NEON)
|
230
222
|
SI F min_(F x, F y) { return (F)vminq_f32((float32x4_t)x, (float32x4_t)y); }
|
231
223
|
SI F max_(F x, F y) { return (F)vmaxq_f32((float32x4_t)x, (float32x4_t)y); }
|
232
224
|
#else
|
@@ -237,8 +229,6 @@ SI U64 swap_endian_16x4(const U64& rgba) {
|
|
237
229
|
SI F floor_(F x) {
|
238
230
|
#if N == 1
|
239
231
|
return floorf_(x);
|
240
|
-
#elif defined(USING_NEON_FP16)
|
241
|
-
return vrndmq_f16(x);
|
242
232
|
#elif defined(__aarch64__)
|
243
233
|
return vrndmq_f32(x);
|
244
234
|
#elif defined(USING_AVX512F)
|
@@ -263,10 +253,6 @@ SI F floor_(F x) {
|
|
263
253
|
}
|
264
254
|
|
265
255
|
SI F approx_log2(F x) {
|
266
|
-
#if defined(USING_NEON_FP16)
|
267
|
-
// TODO(mtklein)
|
268
|
-
return x;
|
269
|
-
#else
|
270
256
|
// The first approximation of log2(x) is its exponent 'e', minus 127.
|
271
257
|
I32 bits = bit_pun<I32>(x);
|
272
258
|
|
@@ -278,7 +264,6 @@ SI F approx_log2(F x) {
|
|
278
264
|
return e - 124.225514990f
|
279
265
|
- 1.498030302f*m
|
280
266
|
- 1.725879990f/(0.3520887068f + m);
|
281
|
-
#endif
|
282
267
|
}
|
283
268
|
|
284
269
|
SI F approx_log(F x) {
|
@@ -287,10 +272,6 @@ SI F approx_log(F x) {
|
|
287
272
|
}
|
288
273
|
|
289
274
|
SI F approx_exp2(F x) {
|
290
|
-
#if defined(USING_NEON_FP16)
|
291
|
-
// TODO(mtklein)
|
292
|
-
return x;
|
293
|
-
#else
|
294
275
|
F fract = x - floor_(x);
|
295
276
|
|
296
277
|
F fbits = (1.0f * (1<<23)) * (x + 121.274057500f
|
@@ -299,7 +280,6 @@ SI F approx_exp2(F x) {
|
|
299
280
|
I32 bits = cast<I32>(min_(max_(fbits, F0), FInfBits));
|
300
281
|
|
301
282
|
return bit_pun<F>(bits);
|
302
|
-
#endif
|
303
283
|
}
|
304
284
|
|
305
285
|
SI F approx_pow(F x, float y) {
|
@@ -314,11 +294,6 @@ SI F approx_exp(F x) {
|
|
314
294
|
|
315
295
|
// Return tf(x).
|
316
296
|
SI F apply_tf(const skcms_TransferFunction* tf, F x) {
|
317
|
-
#if defined(USING_NEON_FP16)
|
318
|
-
// TODO(mtklein)
|
319
|
-
(void)tf;
|
320
|
-
return x;
|
321
|
-
#else
|
322
297
|
// Peel off the sign bit and set x = |x|.
|
323
298
|
U32 bits = bit_pun<U32>(x),
|
324
299
|
sign = bits & 0x80000000;
|
@@ -330,15 +305,9 @@ SI F apply_tf(const skcms_TransferFunction* tf, F x) {
|
|
330
305
|
|
331
306
|
// Tack the sign bit back on.
|
332
307
|
return bit_pun<F>(sign | bit_pun<U32>(v));
|
333
|
-
#endif
|
334
308
|
}
|
335
309
|
|
336
310
|
SI F apply_pq(const skcms_TransferFunction* tf, F x) {
|
337
|
-
#if defined(USING_NEON_FP16)
|
338
|
-
// TODO(mtklein)
|
339
|
-
(void)tf;
|
340
|
-
return x;
|
341
|
-
#else
|
342
311
|
U32 bits = bit_pun<U32>(x),
|
343
312
|
sign = bits & 0x80000000;
|
344
313
|
x = bit_pun<F>(bits ^ sign);
|
@@ -348,15 +317,9 @@ SI F apply_pq(const skcms_TransferFunction* tf, F x) {
|
|
348
317
|
tf->f);
|
349
318
|
|
350
319
|
return bit_pun<F>(sign | bit_pun<U32>(v));
|
351
|
-
#endif
|
352
320
|
}
|
353
321
|
|
354
322
|
SI F apply_hlg(const skcms_TransferFunction* tf, F x) {
|
355
|
-
#if defined(USING_NEON_FP16)
|
356
|
-
// TODO(mtklein)
|
357
|
-
(void)tf;
|
358
|
-
return x;
|
359
|
-
#else
|
360
323
|
const float R = tf->a, G = tf->b,
|
361
324
|
a = tf->c, b = tf->d, c = tf->e,
|
362
325
|
K = tf->f + 1;
|
@@ -368,15 +331,9 @@ SI F apply_hlg(const skcms_TransferFunction* tf, F x) {
|
|
368
331
|
, approx_exp((x-c)*a) + b);
|
369
332
|
|
370
333
|
return K*bit_pun<F>(sign | bit_pun<U32>(v));
|
371
|
-
#endif
|
372
334
|
}
|
373
335
|
|
374
336
|
SI F apply_hlginv(const skcms_TransferFunction* tf, F x) {
|
375
|
-
#if defined(USING_NEON_FP16)
|
376
|
-
// TODO(mtklein)
|
377
|
-
(void)tf;
|
378
|
-
return x;
|
379
|
-
#else
|
380
337
|
const float R = tf->a, G = tf->b,
|
381
338
|
a = tf->c, b = tf->d, c = tf->e,
|
382
339
|
K = tf->f + 1;
|
@@ -389,7 +346,6 @@ SI F apply_hlginv(const skcms_TransferFunction* tf, F x) {
|
|
389
346
|
, a * approx_log(x - b) + c);
|
390
347
|
|
391
348
|
return bit_pun<F>(sign | bit_pun<U32>(v));
|
392
|
-
#endif
|
393
349
|
}
|
394
350
|
|
395
351
|
|
@@ -636,11 +592,7 @@ SI U16 U16_from_F(F v) {
|
|
636
592
|
}
|
637
593
|
|
638
594
|
SI F minus_1_ulp(F v) {
|
639
|
-
#if defined(USING_NEON_FP16)
|
640
|
-
return bit_pun<F>( bit_pun<U16>(v) - 1 );
|
641
|
-
#else
|
642
595
|
return bit_pun<F>( bit_pun<U32>(v) - 1 );
|
643
|
-
#endif
|
644
596
|
}
|
645
597
|
|
646
598
|
SI F table(const skcms_Curve* curve, F v) {
|
@@ -835,23 +787,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
835
787
|
|
836
788
|
case Op_load_888:{
|
837
789
|
const uint8_t* rgb = (const uint8_t*)(src + 3*i);
|
838
|
-
#if defined(
|
839
|
-
// See the explanation under USING_NEON below. This is that doubled up.
|
840
|
-
uint8x16x3_t v = {{ vdupq_n_u8(0), vdupq_n_u8(0), vdupq_n_u8(0) }};
|
841
|
-
v = vld3q_lane_u8(rgb+ 0, v, 0);
|
842
|
-
v = vld3q_lane_u8(rgb+ 3, v, 2);
|
843
|
-
v = vld3q_lane_u8(rgb+ 6, v, 4);
|
844
|
-
v = vld3q_lane_u8(rgb+ 9, v, 6);
|
845
|
-
|
846
|
-
v = vld3q_lane_u8(rgb+12, v, 8);
|
847
|
-
v = vld3q_lane_u8(rgb+15, v, 10);
|
848
|
-
v = vld3q_lane_u8(rgb+18, v, 12);
|
849
|
-
v = vld3q_lane_u8(rgb+21, v, 14);
|
850
|
-
|
851
|
-
r = cast<F>((U16)v.val[0]) * (1/255.0f);
|
852
|
-
g = cast<F>((U16)v.val[1]) * (1/255.0f);
|
853
|
-
b = cast<F>((U16)v.val[2]) * (1/255.0f);
|
854
|
-
#elif defined(USING_NEON)
|
790
|
+
#if defined(USING_NEON)
|
855
791
|
// There's no uint8x4x3_t or vld3 load for it, so we'll load each rgb pixel one at
|
856
792
|
// a time. Since we're doing that, we might as well load them into 16-bit lanes.
|
857
793
|
// (We'd even load into 32-bit lanes, but that's not possible on ARMv7.)
|
@@ -917,12 +853,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
917
853
|
uintptr_t ptr = (uintptr_t)(src + 6*i);
|
918
854
|
assert( (ptr & 1) == 0 ); // src must be 2-byte aligned for this
|
919
855
|
const uint16_t* rgb = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
|
920
|
-
#if defined(
|
921
|
-
uint16x8x3_t v = vld3q_u16(rgb);
|
922
|
-
r = cast<F>((U16)v.val[0]) * (1/65535.0f);
|
923
|
-
g = cast<F>((U16)v.val[1]) * (1/65535.0f);
|
924
|
-
b = cast<F>((U16)v.val[2]) * (1/65535.0f);
|
925
|
-
#elif defined(USING_NEON)
|
856
|
+
#if defined(USING_NEON)
|
926
857
|
uint16x4x3_t v = vld3_u16(rgb);
|
927
858
|
r = cast<F>((U16)v.val[0]) * (1/65535.0f);
|
928
859
|
g = cast<F>((U16)v.val[1]) * (1/65535.0f);
|
@@ -938,13 +869,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
938
869
|
uintptr_t ptr = (uintptr_t)(src + 8*i);
|
939
870
|
assert( (ptr & 1) == 0 ); // src must be 2-byte aligned for this
|
940
871
|
const uint16_t* rgba = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
|
941
|
-
#if defined(
|
942
|
-
uint16x8x4_t v = vld4q_u16(rgba);
|
943
|
-
r = cast<F>((U16)v.val[0]) * (1/65535.0f);
|
944
|
-
g = cast<F>((U16)v.val[1]) * (1/65535.0f);
|
945
|
-
b = cast<F>((U16)v.val[2]) * (1/65535.0f);
|
946
|
-
a = cast<F>((U16)v.val[3]) * (1/65535.0f);
|
947
|
-
#elif defined(USING_NEON)
|
872
|
+
#if defined(USING_NEON)
|
948
873
|
uint16x4x4_t v = vld4_u16(rgba);
|
949
874
|
r = cast<F>((U16)v.val[0]) * (1/65535.0f);
|
950
875
|
g = cast<F>((U16)v.val[1]) * (1/65535.0f);
|
@@ -964,12 +889,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
964
889
|
uintptr_t ptr = (uintptr_t)(src + 6*i);
|
965
890
|
assert( (ptr & 1) == 0 ); // src must be 2-byte aligned for this
|
966
891
|
const uint16_t* rgb = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
|
967
|
-
#if defined(
|
968
|
-
uint16x8x3_t v = vld3q_u16(rgb);
|
969
|
-
r = cast<F>(swap_endian_16((U16)v.val[0])) * (1/65535.0f);
|
970
|
-
g = cast<F>(swap_endian_16((U16)v.val[1])) * (1/65535.0f);
|
971
|
-
b = cast<F>(swap_endian_16((U16)v.val[2])) * (1/65535.0f);
|
972
|
-
#elif defined(USING_NEON)
|
892
|
+
#if defined(USING_NEON)
|
973
893
|
uint16x4x3_t v = vld3_u16(rgb);
|
974
894
|
r = cast<F>(swap_endian_16((U16)v.val[0])) * (1/65535.0f);
|
975
895
|
g = cast<F>(swap_endian_16((U16)v.val[1])) * (1/65535.0f);
|
@@ -989,13 +909,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
989
909
|
uintptr_t ptr = (uintptr_t)(src + 8*i);
|
990
910
|
assert( (ptr & 1) == 0 ); // src must be 2-byte aligned for this
|
991
911
|
const uint16_t* rgba = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
|
992
|
-
#if defined(
|
993
|
-
uint16x8x4_t v = vld4q_u16(rgba);
|
994
|
-
r = cast<F>(swap_endian_16((U16)v.val[0])) * (1/65535.0f);
|
995
|
-
g = cast<F>(swap_endian_16((U16)v.val[1])) * (1/65535.0f);
|
996
|
-
b = cast<F>(swap_endian_16((U16)v.val[2])) * (1/65535.0f);
|
997
|
-
a = cast<F>(swap_endian_16((U16)v.val[3])) * (1/65535.0f);
|
998
|
-
#elif defined(USING_NEON)
|
912
|
+
#if defined(USING_NEON)
|
999
913
|
uint16x4x4_t v = vld4_u16(rgba);
|
1000
914
|
r = cast<F>(swap_endian_16((U16)v.val[0])) * (1/65535.0f);
|
1001
915
|
g = cast<F>(swap_endian_16((U16)v.val[1])) * (1/65535.0f);
|
@@ -1015,12 +929,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1015
929
|
uintptr_t ptr = (uintptr_t)(src + 6*i);
|
1016
930
|
assert( (ptr & 1) == 0 ); // src must be 2-byte aligned for this
|
1017
931
|
const uint16_t* rgb = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
|
1018
|
-
#if defined(
|
1019
|
-
uint16x8x3_t v = vld3q_u16(rgb);
|
1020
|
-
U16 R = (U16)v.val[0],
|
1021
|
-
G = (U16)v.val[1],
|
1022
|
-
B = (U16)v.val[2];
|
1023
|
-
#elif defined(USING_NEON)
|
932
|
+
#if defined(USING_NEON)
|
1024
933
|
uint16x4x3_t v = vld3_u16(rgb);
|
1025
934
|
U16 R = (U16)v.val[0],
|
1026
935
|
G = (U16)v.val[1],
|
@@ -1039,13 +948,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1039
948
|
uintptr_t ptr = (uintptr_t)(src + 8*i);
|
1040
949
|
assert( (ptr & 1) == 0 ); // src must be 2-byte aligned for this
|
1041
950
|
const uint16_t* rgba = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
|
1042
|
-
#if defined(
|
1043
|
-
uint16x8x4_t v = vld4q_u16(rgba);
|
1044
|
-
U16 R = (U16)v.val[0],
|
1045
|
-
G = (U16)v.val[1],
|
1046
|
-
B = (U16)v.val[2],
|
1047
|
-
A = (U16)v.val[3];
|
1048
|
-
#elif defined(USING_NEON)
|
951
|
+
#if defined(USING_NEON)
|
1049
952
|
uint16x4x4_t v = vld4_u16(rgba);
|
1050
953
|
U16 R = (U16)v.val[0],
|
1051
954
|
G = (U16)v.val[1],
|
@@ -1068,13 +971,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1068
971
|
uintptr_t ptr = (uintptr_t)(src + 12*i);
|
1069
972
|
assert( (ptr & 3) == 0 ); // src must be 4-byte aligned for this
|
1070
973
|
const float* rgb = (const float*)ptr; // cast to const float* to be safe.
|
1071
|
-
#if defined(
|
1072
|
-
float32x4x3_t lo = vld3q_f32(rgb + 0),
|
1073
|
-
hi = vld3q_f32(rgb + 12);
|
1074
|
-
r = (F)vcombine_f16(vcvt_f16_f32(lo.val[0]), vcvt_f16_f32(hi.val[0]));
|
1075
|
-
g = (F)vcombine_f16(vcvt_f16_f32(lo.val[1]), vcvt_f16_f32(hi.val[1]));
|
1076
|
-
b = (F)vcombine_f16(vcvt_f16_f32(lo.val[2]), vcvt_f16_f32(hi.val[2]));
|
1077
|
-
#elif defined(USING_NEON)
|
974
|
+
#if defined(USING_NEON)
|
1078
975
|
float32x4x3_t v = vld3q_f32(rgb);
|
1079
976
|
r = (F)v.val[0];
|
1080
977
|
g = (F)v.val[1];
|
@@ -1090,14 +987,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1090
987
|
uintptr_t ptr = (uintptr_t)(src + 16*i);
|
1091
988
|
assert( (ptr & 3) == 0 ); // src must be 4-byte aligned for this
|
1092
989
|
const float* rgba = (const float*)ptr; // cast to const float* to be safe.
|
1093
|
-
#if defined(
|
1094
|
-
float32x4x4_t lo = vld4q_f32(rgba + 0),
|
1095
|
-
hi = vld4q_f32(rgba + 16);
|
1096
|
-
r = (F)vcombine_f16(vcvt_f16_f32(lo.val[0]), vcvt_f16_f32(hi.val[0]));
|
1097
|
-
g = (F)vcombine_f16(vcvt_f16_f32(lo.val[1]), vcvt_f16_f32(hi.val[1]));
|
1098
|
-
b = (F)vcombine_f16(vcvt_f16_f32(lo.val[2]), vcvt_f16_f32(hi.val[2]));
|
1099
|
-
a = (F)vcombine_f16(vcvt_f16_f32(lo.val[3]), vcvt_f16_f32(hi.val[3]));
|
1100
|
-
#elif defined(USING_NEON)
|
990
|
+
#if defined(USING_NEON)
|
1101
991
|
float32x4x4_t v = vld4q_f32(rgba);
|
1102
992
|
r = (F)v.val[0];
|
1103
993
|
g = (F)v.val[1];
|
@@ -1280,23 +1170,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1280
1170
|
|
1281
1171
|
case Op_store_888: {
|
1282
1172
|
uint8_t* rgb = (uint8_t*)dst + 3*i;
|
1283
|
-
#if defined(
|
1284
|
-
// See the explanation under USING_NEON below. This is that doubled up.
|
1285
|
-
U16 R = to_fixed(r * 255),
|
1286
|
-
G = to_fixed(g * 255),
|
1287
|
-
B = to_fixed(b * 255);
|
1288
|
-
|
1289
|
-
uint8x16x3_t v = {{ (uint8x16_t)R, (uint8x16_t)G, (uint8x16_t)B }};
|
1290
|
-
vst3q_lane_u8(rgb+ 0, v, 0);
|
1291
|
-
vst3q_lane_u8(rgb+ 3, v, 2);
|
1292
|
-
vst3q_lane_u8(rgb+ 6, v, 4);
|
1293
|
-
vst3q_lane_u8(rgb+ 9, v, 6);
|
1294
|
-
|
1295
|
-
vst3q_lane_u8(rgb+12, v, 8);
|
1296
|
-
vst3q_lane_u8(rgb+15, v, 10);
|
1297
|
-
vst3q_lane_u8(rgb+18, v, 12);
|
1298
|
-
vst3q_lane_u8(rgb+21, v, 14);
|
1299
|
-
#elif defined(USING_NEON)
|
1173
|
+
#if defined(USING_NEON)
|
1300
1174
|
// Same deal as load_888 but in reverse... we'll store using uint8x8x3_t, but
|
1301
1175
|
// get there via U16 to save some instructions converting to float. And just
|
1302
1176
|
// like load_888, we'd prefer to go via U32 but for ARMv7 support.
|
@@ -1343,14 +1217,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1343
1217
|
uintptr_t ptr = (uintptr_t)(dst + 6*i);
|
1344
1218
|
assert( (ptr & 1) == 0 ); // The dst pointer must be 2-byte aligned
|
1345
1219
|
uint16_t* rgb = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
|
1346
|
-
#if defined(
|
1347
|
-
uint16x8x3_t v = {{
|
1348
|
-
(uint16x8_t)U16_from_F(r),
|
1349
|
-
(uint16x8_t)U16_from_F(g),
|
1350
|
-
(uint16x8_t)U16_from_F(b),
|
1351
|
-
}};
|
1352
|
-
vst3q_u16(rgb, v);
|
1353
|
-
#elif defined(USING_NEON)
|
1220
|
+
#if defined(USING_NEON)
|
1354
1221
|
uint16x4x3_t v = {{
|
1355
1222
|
(uint16x4_t)U16_from_F(r),
|
1356
1223
|
(uint16x4_t)U16_from_F(g),
|
@@ -1369,15 +1236,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1369
1236
|
uintptr_t ptr = (uintptr_t)(dst + 8*i);
|
1370
1237
|
assert( (ptr & 1) == 0 ); // The dst pointer must be 2-byte aligned
|
1371
1238
|
uint16_t* rgba = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
|
1372
|
-
#if defined(
|
1373
|
-
uint16x8x4_t v = {{
|
1374
|
-
(uint16x8_t)U16_from_F(r),
|
1375
|
-
(uint16x8_t)U16_from_F(g),
|
1376
|
-
(uint16x8_t)U16_from_F(b),
|
1377
|
-
(uint16x8_t)U16_from_F(a),
|
1378
|
-
}};
|
1379
|
-
vst4q_u16(rgba, v);
|
1380
|
-
#elif defined(USING_NEON)
|
1239
|
+
#if defined(USING_NEON)
|
1381
1240
|
uint16x4x4_t v = {{
|
1382
1241
|
(uint16x4_t)U16_from_F(r),
|
1383
1242
|
(uint16x4_t)U16_from_F(g),
|
@@ -1398,14 +1257,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1398
1257
|
uintptr_t ptr = (uintptr_t)(dst + 6*i);
|
1399
1258
|
assert( (ptr & 1) == 0 ); // The dst pointer must be 2-byte aligned
|
1400
1259
|
uint16_t* rgb = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
|
1401
|
-
#if defined(
|
1402
|
-
uint16x8x3_t v = {{
|
1403
|
-
(uint16x8_t)swap_endian_16(U16_from_F(r)),
|
1404
|
-
(uint16x8_t)swap_endian_16(U16_from_F(g)),
|
1405
|
-
(uint16x8_t)swap_endian_16(U16_from_F(b)),
|
1406
|
-
}};
|
1407
|
-
vst3q_u16(rgb, v);
|
1408
|
-
#elif defined(USING_NEON)
|
1260
|
+
#if defined(USING_NEON)
|
1409
1261
|
uint16x4x3_t v = {{
|
1410
1262
|
(uint16x4_t)swap_endian_16(cast<U16>(U16_from_F(r))),
|
1411
1263
|
(uint16x4_t)swap_endian_16(cast<U16>(U16_from_F(g))),
|
@@ -1427,15 +1279,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1427
1279
|
uintptr_t ptr = (uintptr_t)(dst + 8*i);
|
1428
1280
|
assert( (ptr & 1) == 0 ); // The dst pointer must be 2-byte aligned
|
1429
1281
|
uint16_t* rgba = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
|
1430
|
-
#if defined(
|
1431
|
-
uint16x8x4_t v = {{
|
1432
|
-
(uint16x8_t)swap_endian_16(U16_from_F(r)),
|
1433
|
-
(uint16x8_t)swap_endian_16(U16_from_F(g)),
|
1434
|
-
(uint16x8_t)swap_endian_16(U16_from_F(b)),
|
1435
|
-
(uint16x8_t)swap_endian_16(U16_from_F(a)),
|
1436
|
-
}};
|
1437
|
-
vst4q_u16(rgba, v);
|
1438
|
-
#elif defined(USING_NEON)
|
1282
|
+
#if defined(USING_NEON)
|
1439
1283
|
uint16x4x4_t v = {{
|
1440
1284
|
(uint16x4_t)swap_endian_16(cast<U16>(U16_from_F(r))),
|
1441
1285
|
(uint16x4_t)swap_endian_16(cast<U16>(U16_from_F(g))),
|
@@ -1460,14 +1304,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1460
1304
|
U16 R = Half_from_F(r),
|
1461
1305
|
G = Half_from_F(g),
|
1462
1306
|
B = Half_from_F(b);
|
1463
|
-
#if defined(
|
1464
|
-
uint16x8x3_t v = {{
|
1465
|
-
(uint16x8_t)R,
|
1466
|
-
(uint16x8_t)G,
|
1467
|
-
(uint16x8_t)B,
|
1468
|
-
}};
|
1469
|
-
vst3q_u16(rgb, v);
|
1470
|
-
#elif defined(USING_NEON)
|
1307
|
+
#if defined(USING_NEON)
|
1471
1308
|
uint16x4x3_t v = {{
|
1472
1309
|
(uint16x4_t)R,
|
1473
1310
|
(uint16x4_t)G,
|
@@ -1490,15 +1327,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1490
1327
|
G = Half_from_F(g),
|
1491
1328
|
B = Half_from_F(b),
|
1492
1329
|
A = Half_from_F(a);
|
1493
|
-
#if defined(
|
1494
|
-
uint16x8x4_t v = {{
|
1495
|
-
(uint16x8_t)R,
|
1496
|
-
(uint16x8_t)G,
|
1497
|
-
(uint16x8_t)B,
|
1498
|
-
(uint16x8_t)A,
|
1499
|
-
}};
|
1500
|
-
vst4q_u16(rgba, v);
|
1501
|
-
#elif defined(USING_NEON)
|
1330
|
+
#if defined(USING_NEON)
|
1502
1331
|
uint16x4x4_t v = {{
|
1503
1332
|
(uint16x4_t)R,
|
1504
1333
|
(uint16x4_t)G,
|
@@ -1519,19 +1348,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1519
1348
|
uintptr_t ptr = (uintptr_t)(dst + 12*i);
|
1520
1349
|
assert( (ptr & 3) == 0 ); // The dst pointer must be 4-byte aligned
|
1521
1350
|
float* rgb = (float*)ptr; // for this cast to float* to be safe.
|
1522
|
-
#if defined(
|
1523
|
-
float32x4x3_t lo = {{
|
1524
|
-
vcvt_f32_f16(vget_low_f16(r)),
|
1525
|
-
vcvt_f32_f16(vget_low_f16(g)),
|
1526
|
-
vcvt_f32_f16(vget_low_f16(b)),
|
1527
|
-
}}, hi = {{
|
1528
|
-
vcvt_f32_f16(vget_high_f16(r)),
|
1529
|
-
vcvt_f32_f16(vget_high_f16(g)),
|
1530
|
-
vcvt_f32_f16(vget_high_f16(b)),
|
1531
|
-
}};
|
1532
|
-
vst3q_f32(rgb + 0, lo);
|
1533
|
-
vst3q_f32(rgb + 12, hi);
|
1534
|
-
#elif defined(USING_NEON)
|
1351
|
+
#if defined(USING_NEON)
|
1535
1352
|
float32x4x3_t v = {{
|
1536
1353
|
(float32x4_t)r,
|
1537
1354
|
(float32x4_t)g,
|
@@ -1549,21 +1366,7 @@ static void exec_ops(const Op* ops, const void** args,
|
|
1549
1366
|
uintptr_t ptr = (uintptr_t)(dst + 16*i);
|
1550
1367
|
assert( (ptr & 3) == 0 ); // The dst pointer must be 4-byte aligned
|
1551
1368
|
float* rgba = (float*)ptr; // for this cast to float* to be safe.
|
1552
|
-
#if defined(
|
1553
|
-
float32x4x4_t lo = {{
|
1554
|
-
vcvt_f32_f16(vget_low_f16(r)),
|
1555
|
-
vcvt_f32_f16(vget_low_f16(g)),
|
1556
|
-
vcvt_f32_f16(vget_low_f16(b)),
|
1557
|
-
vcvt_f32_f16(vget_low_f16(a)),
|
1558
|
-
}}, hi = {{
|
1559
|
-
vcvt_f32_f16(vget_high_f16(r)),
|
1560
|
-
vcvt_f32_f16(vget_high_f16(g)),
|
1561
|
-
vcvt_f32_f16(vget_high_f16(b)),
|
1562
|
-
vcvt_f32_f16(vget_high_f16(a)),
|
1563
|
-
}};
|
1564
|
-
vst4q_f32(rgba + 0, lo);
|
1565
|
-
vst4q_f32(rgba + 16, hi);
|
1566
|
-
#elif defined(USING_NEON)
|
1369
|
+
#if defined(USING_NEON)
|
1567
1370
|
float32x4x4_t v = {{
|
1568
1371
|
(float32x4_t)r,
|
1569
1372
|
(float32x4_t)g,
|
@@ -1621,8 +1424,5 @@ static void run_program(const Op* program, const void** arguments,
|
|
1621
1424
|
#if defined(USING_NEON_F16C)
|
1622
1425
|
#undef USING_NEON_F16C
|
1623
1426
|
#endif
|
1624
|
-
#if defined(USING_NEON_FP16)
|
1625
|
-
#undef USING_NEON_FP16
|
1626
|
-
#endif
|
1627
1427
|
|
1628
1428
|
#undef FALLTHROUGH
|
@@ -6,6 +6,7 @@
|
|
6
6
|
#include "modules/skparagraph/include/Metrics.h"
|
7
7
|
#include "modules/skparagraph/include/ParagraphStyle.h"
|
8
8
|
#include "modules/skparagraph/include/TextStyle.h"
|
9
|
+
#include <unordered_set>
|
9
10
|
|
10
11
|
class SkCanvas;
|
11
12
|
|
@@ -69,6 +70,7 @@ public:
|
|
69
70
|
// This function will return the number of unresolved glyphs or
|
70
71
|
// -1 if not applicable (has not been shaped yet - valid case)
|
71
72
|
virtual int32_t unresolvedGlyphs() = 0;
|
73
|
+
virtual std::unordered_set<SkUnichar> unresolvedCodepoints() = 0;
|
72
74
|
|
73
75
|
// Experimental API that allows fast way to update some of "immutable" paragraph attributes
|
74
76
|
// but not the text itself
|
@@ -10,6 +10,7 @@
|
|
10
10
|
#include "modules/skparagraph/include/Paragraph.h"
|
11
11
|
#include "modules/skparagraph/include/ParagraphStyle.h"
|
12
12
|
#include "modules/skparagraph/include/TextStyle.h"
|
13
|
+
#include "modules/skunicode/include/SkUnicode.h"
|
13
14
|
|
14
15
|
namespace skia {
|
15
16
|
namespace textlayout {
|
@@ -55,6 +56,21 @@ public:
|
|
55
56
|
// Constructs a SkParagraph object that can be used to layout and paint the text to a SkCanvas.
|
56
57
|
virtual std::unique_ptr<Paragraph> Build() = 0;
|
57
58
|
|
59
|
+
virtual SkSpan<char> getText() = 0;
|
60
|
+
virtual const ParagraphStyle& getParagraphStyle() const = 0;
|
61
|
+
|
62
|
+
// Mainly, support for "Client" unicode
|
63
|
+
virtual void setWordsUtf8(std::vector<SkUnicode::Position> wordsUtf8) = 0;
|
64
|
+
virtual void setWordsUtf16(std::vector<SkUnicode::Position> wordsUtf16) = 0;
|
65
|
+
|
66
|
+
virtual void setGraphemeBreaksUtf8(std::vector<SkUnicode::Position> graphemesUtf8) = 0;
|
67
|
+
virtual void setGraphemeBreaksUtf16(std::vector<SkUnicode::Position> graphemesUtf16) = 0;
|
68
|
+
|
69
|
+
virtual void setLineBreaksUtf8(std::vector<SkUnicode::LineBreakBefore> lineBreaksUtf8) = 0;
|
70
|
+
virtual void setLineBreaksUtf16(std::vector<SkUnicode::LineBreakBefore> lineBreaksUtf16) = 0;
|
71
|
+
|
72
|
+
virtual void SetUnicode(std::unique_ptr<SkUnicode> unicode) = 0;
|
73
|
+
|
58
74
|
// Resets this builder to its initial state, discarding any text, styles, placeholders that have
|
59
75
|
// been added, but keeping the initial ParagraphStyle.
|
60
76
|
virtual void Reset() = 0;
|
@@ -173,10 +173,12 @@ public:
|
|
173
173
|
ParagraphPainter::SkPaintOrID getForegroundPaintOrID() const {
|
174
174
|
return fForeground;
|
175
175
|
}
|
176
|
-
void
|
176
|
+
void setForegroundPaint(SkPaint paint) {
|
177
177
|
fHasForeground = true;
|
178
178
|
fForeground = std::move(paint);
|
179
179
|
}
|
180
|
+
// DEPRECATED: prefer `setForegroundPaint`.
|
181
|
+
void setForegroundColor(SkPaint paint) { setForegroundPaint(paint); }
|
180
182
|
// Set the foreground to a paint ID. This is intended for use by clients
|
181
183
|
// that implement a custom ParagraphPainter that can not accept an SkPaint.
|
182
184
|
void setForegroundPaintID(ParagraphPainter::PaintID paintID) {
|
@@ -193,10 +195,12 @@ public:
|
|
193
195
|
ParagraphPainter::SkPaintOrID getBackgroundPaintOrID() const {
|
194
196
|
return fBackground;
|
195
197
|
}
|
196
|
-
void
|
198
|
+
void setBackgroundPaint(SkPaint paint) {
|
197
199
|
fHasBackground = true;
|
198
200
|
fBackground = std::move(paint);
|
199
201
|
}
|
202
|
+
// DEPRECATED: prefer `setBackgroundPaint`.
|
203
|
+
void setBackgroundColor(SkPaint paint) { setBackgroundPaint(paint); }
|
200
204
|
void setBackgroundPaintID(ParagraphPainter::PaintID paintID) {
|
201
205
|
fHasBackground = true;
|
202
206
|
fBackground = paintID;
|
@@ -225,7 +225,7 @@ protected:
|
|
225
225
|
sk_sp<SkData> loadFont(const char[], const char[]) const override;
|
226
226
|
sk_sp<ExternalTrackAsset> loadAudioAsset(const char[], const char[], const char[]) override;
|
227
227
|
|
228
|
-
|
228
|
+
protected:
|
229
229
|
const sk_sp<ResourceProvider> fProxy;
|
230
230
|
};
|
231
231
|
|
@@ -11,7 +11,7 @@
|
|
11
11
|
#include "modules/svg/include/SkSVGHiddenContainer.h"
|
12
12
|
#include "modules/svg/include/SkSVGTypes.h"
|
13
13
|
|
14
|
-
class SkSVGClipPath final : public SkSVGHiddenContainer {
|
14
|
+
class SK_API SkSVGClipPath final : public SkSVGHiddenContainer {
|
15
15
|
public:
|
16
16
|
static sk_sp<SkSVGClipPath> Make() {
|
17
17
|
return sk_sp<SkSVGClipPath>(new SkSVGClipPath());
|
@@ -11,7 +11,7 @@
|
|
11
11
|
#include "include/private/base/SkTArray.h"
|
12
12
|
#include "modules/svg/include/SkSVGTransformableNode.h"
|
13
13
|
|
14
|
-
class SkSVGContainer : public SkSVGTransformableNode {
|
14
|
+
class SK_API SkSVGContainer : public SkSVGTransformableNode {
|
15
15
|
public:
|
16
16
|
void appendChild(sk_sp<SkSVGNode>) override;
|
17
17
|
|
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
#include "modules/svg/include/SkSVGHiddenContainer.h"
|
12
12
|
|
13
|
-
class SkSVGDefs : public SkSVGHiddenContainer {
|
13
|
+
class SK_API SkSVGDefs : public SkSVGHiddenContainer {
|
14
14
|
public:
|
15
15
|
static sk_sp<SkSVGDefs> Make() { return sk_sp<SkSVGDefs>(new SkSVGDefs()); }
|
16
16
|
|