@shopify/react-native-skia 1.3.13 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (361) hide show
  1. package/android/CMakeLists.txt +9 -4
  2. package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +6 -0
  3. package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.cpp +81 -0
  4. package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.h +40 -0
  5. package/cpp/api/JsiSkApi.h +2 -0
  6. package/cpp/api/JsiSkPath.h +29 -19
  7. package/cpp/api/JsiSkRuntimeEffect.h +7 -0
  8. package/cpp/api/JsiSkiaContext.h +79 -0
  9. package/cpp/rnskia/RNSkPlatformContext.h +4 -0
  10. package/cpp/rnskia/SkiaContext.h +22 -0
  11. package/cpp/skia/include/android/GrAHardwareBufferUtils.h +2 -2
  12. package/cpp/skia/include/android/SkImageAndroid.h +1 -1
  13. package/cpp/skia/include/android/SkSurfaceAndroid.h +1 -1
  14. package/cpp/skia/include/codec/SkAndroidCodec.h +13 -9
  15. package/cpp/skia/include/codec/SkCodec.h +28 -5
  16. package/cpp/skia/include/core/SkArc.h +69 -0
  17. package/cpp/skia/include/core/SkBitmap.h +10 -0
  18. package/cpp/skia/include/core/SkBlender.h +2 -3
  19. package/cpp/skia/include/core/SkCanvas.h +86 -16
  20. package/cpp/skia/include/core/SkCapabilities.h +0 -4
  21. package/cpp/skia/include/core/SkColorFilter.h +4 -4
  22. package/cpp/skia/include/core/SkColorPriv.h +5 -7
  23. package/cpp/skia/include/core/SkColorType.h +2 -0
  24. package/cpp/skia/include/core/SkFlattenable.h +1 -1
  25. package/cpp/skia/include/core/SkFontArguments.h +3 -1
  26. package/cpp/skia/include/core/SkFontParameters.h +3 -2
  27. package/cpp/skia/include/core/SkFourByteTag.h +19 -0
  28. package/cpp/skia/include/core/SkImage.h +41 -1
  29. package/cpp/skia/include/core/SkImageGenerator.h +0 -5
  30. package/cpp/skia/include/core/SkImageInfo.h +20 -0
  31. package/cpp/skia/include/core/SkM44.h +1 -1
  32. package/cpp/skia/include/core/SkMatrix.h +2 -1
  33. package/cpp/skia/include/core/SkMilestone.h +1 -1
  34. package/cpp/skia/include/core/SkPaint.h +1 -1
  35. package/cpp/skia/include/core/SkPath.h +20 -6
  36. package/cpp/skia/include/core/SkPathMeasure.h +1 -0
  37. package/cpp/skia/include/core/SkPicture.h +5 -5
  38. package/cpp/skia/include/core/SkPoint3.h +2 -12
  39. package/cpp/skia/include/core/SkRRect.h +5 -0
  40. package/cpp/skia/include/core/SkRect.h +5 -16
  41. package/cpp/skia/include/core/SkRefCnt.h +2 -0
  42. package/cpp/skia/include/core/SkScalar.h +20 -32
  43. package/cpp/skia/include/core/SkShader.h +17 -0
  44. package/cpp/skia/include/core/SkSize.h +2 -1
  45. package/cpp/skia/include/core/SkStream.h +2 -3
  46. package/cpp/skia/include/core/SkStrokeRec.h +6 -1
  47. package/cpp/skia/include/core/SkSurface.h +13 -4
  48. package/cpp/skia/include/core/SkSurfaceProps.h +5 -0
  49. package/cpp/skia/include/core/SkSwizzle.h +3 -1
  50. package/cpp/skia/include/core/SkTypeface.h +1 -0
  51. package/cpp/skia/include/core/SkTypes.h +1 -19
  52. package/cpp/skia/include/core/SkUnPreMultiply.h +4 -5
  53. package/cpp/skia/include/core/SkVertices.h +4 -2
  54. package/cpp/skia/include/docs/SkPDFDocument.h +11 -14
  55. package/cpp/skia/include/effects/SkHighContrastFilter.h +6 -6
  56. package/cpp/skia/include/effects/SkImageFilters.h +49 -23
  57. package/cpp/skia/include/effects/SkRuntimeEffect.h +51 -70
  58. package/cpp/skia/include/effects/SkShaderMaskFilter.h +2 -0
  59. package/cpp/skia/include/effects/SkTableMaskFilter.h +2 -0
  60. package/cpp/skia/include/gpu/GrBackendSemaphore.h +2 -120
  61. package/cpp/skia/include/gpu/GrBackendSurface.h +2 -466
  62. package/cpp/skia/include/gpu/GrContextOptions.h +2 -368
  63. package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +2 -179
  64. package/cpp/skia/include/gpu/GrDirectContext.h +2 -1011
  65. package/cpp/skia/include/gpu/GrDriverBugWorkarounds.h +2 -47
  66. package/cpp/skia/include/gpu/GrDriverBugWorkaroundsAutogen.h +2 -41
  67. package/cpp/skia/include/gpu/GrRecordingContext.h +2 -279
  68. package/cpp/skia/include/gpu/GrTypes.h +2 -238
  69. package/cpp/skia/include/gpu/GrYUVABackendTextures.h +2 -118
  70. package/cpp/skia/include/gpu/d3d/GrD3DBackendContext.h +2 -29
  71. package/cpp/skia/include/gpu/d3d/GrD3DTypes.h +2 -242
  72. package/cpp/skia/include/gpu/ganesh/GrBackendSemaphore.h +80 -0
  73. package/cpp/skia/include/gpu/ganesh/GrBackendSurface.h +412 -0
  74. package/cpp/skia/include/gpu/ganesh/GrContextOptions.h +386 -0
  75. package/cpp/skia/include/gpu/ganesh/GrContextThreadSafeProxy.h +175 -0
  76. package/cpp/skia/include/gpu/ganesh/GrDirectContext.h +993 -0
  77. package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkarounds.h +53 -0
  78. package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkaroundsAutogen.h +45 -0
  79. package/cpp/skia/include/gpu/ganesh/GrExternalTextureGenerator.h +1 -1
  80. package/cpp/skia/include/gpu/ganesh/GrRecordingContext.h +285 -0
  81. package/cpp/skia/include/gpu/ganesh/GrTypes.h +177 -0
  82. package/cpp/skia/include/gpu/ganesh/GrYUVABackendTextures.h +130 -0
  83. package/cpp/skia/include/gpu/ganesh/SkImageGanesh.h +1 -1
  84. package/cpp/skia/include/gpu/ganesh/SkSurfaceGanesh.h +1 -1
  85. package/cpp/skia/include/gpu/ganesh/d3d/GrD3DBackendContext.h +35 -0
  86. package/cpp/skia/include/gpu/ganesh/d3d/GrD3DTypes.h +248 -0
  87. package/cpp/skia/include/gpu/ganesh/gl/GrGLAssembleHelpers.h +17 -0
  88. package/cpp/skia/include/gpu/ganesh/gl/GrGLAssembleInterface.h +45 -0
  89. package/cpp/skia/include/gpu/ganesh/gl/GrGLBackendSurface.h +1 -1
  90. package/cpp/skia/include/gpu/ganesh/gl/GrGLConfig.h +69 -0
  91. package/cpp/skia/include/gpu/ganesh/gl/GrGLExtensions.h +79 -0
  92. package/cpp/skia/include/gpu/ganesh/gl/GrGLFunctions.h +306 -0
  93. package/cpp/skia/include/gpu/ganesh/gl/GrGLInterface.h +338 -0
  94. package/cpp/skia/include/gpu/ganesh/gl/GrGLMakeWebGLInterface.h +19 -0
  95. package/cpp/skia/include/gpu/ganesh/gl/GrGLTypes.h +219 -0
  96. package/cpp/skia/include/gpu/{gl → ganesh/gl}/egl/GrGLMakeEGLInterface.h +2 -2
  97. package/cpp/skia/include/gpu/ganesh/gl/epoxy/GrGLMakeEpoxyEGLInterface.h +20 -0
  98. package/cpp/skia/include/gpu/ganesh/gl/ios/GrGLMakeIOSInterface.h +20 -0
  99. package/cpp/skia/include/gpu/ganesh/gl/mac/GrGLMakeMacInterface.h +20 -0
  100. package/cpp/skia/include/gpu/ganesh/gl/win/GrGLMakeWinInterface.h +20 -0
  101. package/cpp/skia/include/gpu/ganesh/mock/GrMockTypes.h +166 -0
  102. package/cpp/skia/include/gpu/{mtl → ganesh/mtl}/GrMtlBackendContext.h +2 -2
  103. package/cpp/skia/include/gpu/ganesh/mtl/GrMtlBackendSemaphore.h +23 -0
  104. package/cpp/skia/include/gpu/ganesh/mtl/GrMtlBackendSurface.h +44 -0
  105. package/cpp/skia/include/gpu/ganesh/mtl/GrMtlDirectContext.h +30 -0
  106. package/cpp/skia/include/gpu/{mtl → ganesh/mtl}/GrMtlTypes.h +1 -3
  107. package/cpp/skia/include/gpu/ganesh/mtl/SkSurfaceMetal.h +2 -2
  108. package/cpp/skia/include/gpu/ganesh/vk/GrBackendDrawableInfo.h +2 -2
  109. package/cpp/skia/include/gpu/ganesh/vk/GrVkBackendSemaphore.h +1 -1
  110. package/cpp/skia/include/gpu/ganesh/vk/GrVkBackendSurface.h +7 -3
  111. package/cpp/skia/include/gpu/ganesh/vk/GrVkDirectContext.h +6 -3
  112. package/cpp/skia/include/gpu/ganesh/vk/GrVkTypes.h +101 -0
  113. package/cpp/skia/include/gpu/gl/GrGLAssembleHelpers.h +2 -9
  114. package/cpp/skia/include/gpu/gl/GrGLAssembleInterface.h +2 -38
  115. package/cpp/skia/include/gpu/gl/GrGLConfig.h +2 -73
  116. package/cpp/skia/include/gpu/gl/GrGLExtensions.h +2 -72
  117. package/cpp/skia/include/gpu/gl/GrGLFunctions.h +2 -301
  118. package/cpp/skia/include/gpu/gl/GrGLInterface.h +2 -332
  119. package/cpp/skia/include/gpu/gl/GrGLTypes.h +2 -213
  120. package/cpp/skia/include/gpu/graphite/BackendSemaphore.h +20 -41
  121. package/cpp/skia/include/gpu/graphite/BackendTexture.h +18 -118
  122. package/cpp/skia/include/gpu/graphite/Context.h +122 -44
  123. package/cpp/skia/include/gpu/graphite/ContextOptions.h +30 -3
  124. package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +45 -17
  125. package/cpp/skia/include/gpu/graphite/Image.h +56 -54
  126. package/cpp/skia/include/gpu/graphite/Recorder.h +68 -14
  127. package/cpp/skia/include/gpu/graphite/Recording.h +3 -3
  128. package/cpp/skia/include/gpu/graphite/Surface.h +6 -2
  129. package/cpp/skia/include/gpu/graphite/TextureInfo.h +36 -117
  130. package/cpp/skia/include/gpu/graphite/dawn/DawnTypes.h +108 -6
  131. package/cpp/skia/include/gpu/graphite/mtl/MtlBackendContext.h +4 -1
  132. package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteTypes.h +41 -25
  133. package/cpp/skia/include/gpu/graphite/precompile/PaintOptions.h +197 -0
  134. package/cpp/skia/include/gpu/graphite/precompile/Precompile.h +48 -0
  135. package/cpp/skia/include/gpu/graphite/precompile/PrecompileBase.h +84 -0
  136. package/cpp/skia/include/gpu/graphite/precompile/PrecompileBlender.h +56 -0
  137. package/cpp/skia/include/gpu/graphite/precompile/PrecompileColorFilter.h +85 -0
  138. package/cpp/skia/include/gpu/graphite/precompile/PrecompileImageFilter.h +119 -0
  139. package/cpp/skia/include/gpu/graphite/precompile/PrecompileMaskFilter.h +51 -0
  140. package/cpp/skia/include/gpu/graphite/precompile/PrecompileRuntimeEffect.h +47 -0
  141. package/cpp/skia/include/gpu/graphite/precompile/PrecompileShader.h +170 -0
  142. package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +24 -2
  143. package/cpp/skia/include/gpu/mock/GrMockTypes.h +2 -157
  144. package/cpp/skia/include/gpu/mtl/MtlMemoryAllocator.h +2 -0
  145. package/cpp/skia/include/gpu/vk/GrVkTypes.h +2 -101
  146. package/cpp/skia/include/gpu/vk/VulkanBackendContext.h +13 -8
  147. package/cpp/skia/include/gpu/vk/VulkanExtensions.h +9 -3
  148. package/cpp/skia/include/gpu/vk/VulkanMemoryAllocator.h +4 -1
  149. package/cpp/skia/include/gpu/vk/VulkanTypes.h +25 -8
  150. package/cpp/skia/include/ports/SkFontMgr_Fontations.h +20 -0
  151. package/cpp/skia/include/ports/SkFontMgr_android.h +7 -0
  152. package/cpp/skia/include/ports/SkImageGeneratorCG.h +3 -1
  153. package/cpp/skia/include/ports/SkTypeface_win.h +0 -17
  154. package/cpp/skia/include/private/SkEncodedInfo.h +8 -2
  155. package/cpp/skia/include/private/SkExif.h +28 -75
  156. package/cpp/skia/include/private/SkGainmapInfo.h +47 -7
  157. package/cpp/skia/include/private/SkJpegMetadataDecoder.h +12 -0
  158. package/cpp/skia/include/private/SkPathRef.h +52 -44
  159. package/cpp/skia/include/private/SkXmp.h +13 -4
  160. package/cpp/skia/include/private/base/SkASAN.h +56 -0
  161. package/cpp/skia/include/private/base/SkAlign.h +5 -0
  162. package/cpp/skia/include/private/base/SkContainers.h +10 -2
  163. package/cpp/skia/include/private/base/SkFeatures.h +22 -1
  164. package/cpp/skia/include/private/base/SkFloatingPoint.h +51 -65
  165. package/cpp/skia/include/private/base/SkMacros.h +67 -0
  166. package/cpp/skia/include/private/base/SkMalloc.h +8 -0
  167. package/cpp/skia/include/private/base/SkPoint_impl.h +2 -11
  168. package/cpp/skia/include/private/base/SkTArray.h +108 -23
  169. package/cpp/skia/include/private/base/SkTFitsIn.h +1 -12
  170. package/cpp/skia/include/private/chromium/GrDeferredDisplayList.h +1 -1
  171. package/cpp/skia/include/private/chromium/GrDeferredDisplayListRecorder.h +0 -39
  172. package/cpp/skia/include/private/chromium/GrPromiseImageTexture.h +1 -1
  173. package/cpp/skia/include/private/chromium/GrSurfaceCharacterization.h +3 -3
  174. package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +1 -4
  175. package/cpp/skia/include/private/chromium/Slug.h +5 -11
  176. package/cpp/skia/include/private/gpu/ganesh/GrContext_Base.h +1 -1
  177. package/cpp/skia/include/private/gpu/ganesh/GrD3DTypesMinimal.h +2 -2
  178. package/cpp/skia/include/private/gpu/ganesh/GrTextureGenerator.h +1 -1
  179. package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +21 -93
  180. package/cpp/skia/include/private/gpu/vk/SkiaVulkan.h +2 -2
  181. package/cpp/skia/include/utils/SkCustomTypeface.h +1 -0
  182. package/cpp/skia/include/utils/SkNWayCanvas.h +1 -1
  183. package/cpp/skia/include/utils/SkParse.h +0 -1
  184. package/cpp/skia/modules/skcms/src/Transform_inl.h +59 -56
  185. package/cpp/skia/modules/skcms/src/skcms_Transform.h +3 -0
  186. package/cpp/skia/modules/skcms/src/skcms_internals.h +2 -0
  187. package/cpp/skia/modules/skcms/src/skcms_public.h +46 -14
  188. package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +15 -1
  189. package/cpp/skia/modules/skparagraph/include/TextStyle.h +2 -2
  190. package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +2 -4
  191. package/cpp/skia/modules/skresources/include/SkResources.h +1 -1
  192. package/cpp/skia/modules/skshaper/include/SkShaper.h +316 -0
  193. package/cpp/skia/modules/skshaper/include/SkShaper_coretext.h +19 -0
  194. package/cpp/skia/modules/skshaper/include/SkShaper_factory.h +41 -0
  195. package/cpp/skia/modules/skshaper/include/SkShaper_harfbuzz.h +39 -0
  196. package/cpp/skia/modules/skshaper/include/SkShaper_skunicode.h +28 -0
  197. package/cpp/skia/modules/skunicode/include/SkUnicode.h +6 -23
  198. package/cpp/skia/modules/svg/include/SkSVGAttribute.h +0 -3
  199. package/cpp/skia/modules/svg/include/SkSVGAttributeParser.h +12 -2
  200. package/cpp/skia/modules/svg/include/SkSVGCircle.h +13 -0
  201. package/cpp/skia/modules/svg/include/SkSVGClipPath.h +6 -0
  202. package/cpp/skia/modules/svg/include/SkSVGContainer.h +17 -1
  203. package/cpp/skia/modules/svg/include/SkSVGDOM.h +25 -15
  204. package/cpp/skia/modules/svg/include/SkSVGEllipse.h +13 -2
  205. package/cpp/skia/modules/svg/include/SkSVGFe.h +11 -2
  206. package/cpp/skia/modules/svg/include/SkSVGFeBlend.h +9 -0
  207. package/cpp/skia/modules/svg/include/SkSVGFeColorMatrix.h +9 -0
  208. package/cpp/skia/modules/svg/include/SkSVGFeComponentTransfer.h +82 -0
  209. package/cpp/skia/modules/svg/include/SkSVGFeComposite.h +10 -1
  210. package/cpp/skia/modules/svg/include/SkSVGFeDisplacementMap.h +10 -0
  211. package/cpp/skia/modules/svg/include/SkSVGFeFlood.h +10 -0
  212. package/cpp/skia/modules/svg/include/SkSVGFeGaussianBlur.h +9 -0
  213. package/cpp/skia/modules/svg/include/SkSVGFeImage.h +9 -0
  214. package/cpp/skia/modules/svg/include/SkSVGFeLightSource.h +5 -0
  215. package/cpp/skia/modules/svg/include/SkSVGFeLighting.h +11 -0
  216. package/cpp/skia/modules/svg/include/SkSVGFeMerge.h +63 -0
  217. package/cpp/skia/modules/svg/include/SkSVGFeMorphology.h +8 -0
  218. package/cpp/skia/modules/svg/include/SkSVGFeOffset.h +9 -0
  219. package/cpp/skia/modules/svg/include/SkSVGFeTurbulence.h +9 -0
  220. package/cpp/skia/modules/svg/include/SkSVGFilter.h +9 -0
  221. package/cpp/skia/modules/svg/include/SkSVGFilterContext.h +3 -3
  222. package/cpp/skia/modules/svg/include/SkSVGGradient.h +10 -2
  223. package/cpp/skia/modules/svg/include/SkSVGImage.h +9 -0
  224. package/cpp/skia/modules/svg/include/SkSVGLine.h +11 -0
  225. package/cpp/skia/modules/svg/include/SkSVGLinearGradient.h +10 -0
  226. package/cpp/skia/modules/svg/include/SkSVGMask.h +6 -0
  227. package/cpp/skia/modules/svg/include/SkSVGNode.h +13 -2
  228. package/cpp/skia/modules/svg/include/SkSVGOpenTypeSVGDecoder.h +5 -0
  229. package/cpp/skia/modules/svg/include/SkSVGPath.h +10 -0
  230. package/cpp/skia/modules/svg/include/SkSVGPattern.h +5 -0
  231. package/cpp/skia/modules/svg/include/SkSVGPoly.h +11 -0
  232. package/cpp/skia/modules/svg/include/SkSVGRadialGradient.h +11 -0
  233. package/cpp/skia/modules/svg/include/SkSVGRect.h +11 -0
  234. package/cpp/skia/modules/svg/include/SkSVGRenderContext.h +43 -7
  235. package/cpp/skia/modules/svg/include/SkSVGSVG.h +7 -0
  236. package/cpp/skia/modules/svg/include/SkSVGShape.h +8 -2
  237. package/cpp/skia/modules/svg/include/SkSVGStop.h +5 -3
  238. package/cpp/skia/modules/svg/include/SkSVGText.h +8 -2
  239. package/cpp/skia/modules/svg/include/SkSVGTransformableNode.h +8 -0
  240. package/cpp/skia/modules/svg/include/SkSVGTypes.h +9 -0
  241. package/cpp/skia/modules/svg/include/SkSVGUse.h +7 -0
  242. package/cpp/skia/src/base/SkMathPriv.h +337 -0
  243. package/cpp/skia/src/base/SkTLazy.h +208 -0
  244. package/cpp/skia/src/core/SkTHash.h +58 -7
  245. package/cpp/skia/src/gpu/ganesh/gl/GrGLDefines.h +3 -0
  246. package/ios/RNSkia-iOS/RNSkiOSPlatformContext.h +3 -0
  247. package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +7 -0
  248. package/ios/RNSkia-iOS/SkiaCVPixelBufferUtils.mm +7 -2
  249. package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.h +78 -0
  250. package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.mm +20 -4
  251. package/lib/commonjs/renderer/HostConfig.js.map +1 -1
  252. package/lib/commonjs/skia/types/Paragraph/TextStyle.d.ts +2 -2
  253. package/lib/commonjs/skia/types/Paragraph/TextStyle.js.map +1 -1
  254. package/lib/commonjs/skia/types/Skia.d.ts +6 -1
  255. package/lib/commonjs/skia/types/Skia.js.map +1 -1
  256. package/lib/commonjs/skia/web/JsiSkia.js +4 -1
  257. package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
  258. package/lib/commonjs/web/WithSkiaWeb.d.ts +11 -4
  259. package/lib/commonjs/web/WithSkiaWeb.js +3 -2
  260. package/lib/commonjs/web/WithSkiaWeb.js.map +1 -1
  261. package/lib/module/renderer/HostConfig.js.map +1 -1
  262. package/lib/module/skia/types/Paragraph/TextStyle.d.ts +2 -2
  263. package/lib/module/skia/types/Paragraph/TextStyle.js.map +1 -1
  264. package/lib/module/skia/types/Skia.d.ts +6 -1
  265. package/lib/module/skia/types/Skia.js.map +1 -1
  266. package/lib/module/skia/web/JsiSkia.js +4 -1
  267. package/lib/module/skia/web/JsiSkia.js.map +1 -1
  268. package/lib/module/web/WithSkiaWeb.d.ts +11 -4
  269. package/lib/module/web/WithSkiaWeb.js +3 -2
  270. package/lib/module/web/WithSkiaWeb.js.map +1 -1
  271. package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +1 -0
  272. package/lib/typescript/lib/commonjs/web/WithSkiaWeb.d.ts +2 -1
  273. package/lib/typescript/lib/module/skia/Skia.web.d.ts +1 -0
  274. package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +1 -0
  275. package/lib/typescript/lib/module/web/WithSkiaWeb.d.ts +2 -1
  276. package/lib/typescript/src/skia/types/Paragraph/TextStyle.d.ts +2 -2
  277. package/lib/typescript/src/skia/types/Skia.d.ts +6 -1
  278. package/lib/typescript/src/web/WithSkiaWeb.d.ts +11 -4
  279. package/libs/android/arm64-v8a/libskia.a +0 -0
  280. package/libs/android/arm64-v8a/libskottie.a +0 -0
  281. package/libs/android/arm64-v8a/libskparagraph.a +0 -0
  282. package/libs/android/arm64-v8a/libsksg.a +0 -0
  283. package/libs/android/arm64-v8a/libskshaper.a +0 -0
  284. package/libs/android/arm64-v8a/libskunicode_core.a +0 -0
  285. package/libs/android/arm64-v8a/libskunicode_icu.a +0 -0
  286. package/libs/android/arm64-v8a/libsvg.a +0 -0
  287. package/libs/android/armeabi-v7a/libskia.a +0 -0
  288. package/libs/android/armeabi-v7a/libskottie.a +0 -0
  289. package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
  290. package/libs/android/armeabi-v7a/libsksg.a +0 -0
  291. package/libs/android/armeabi-v7a/libskshaper.a +0 -0
  292. package/libs/android/armeabi-v7a/libskunicode_core.a +0 -0
  293. package/libs/android/armeabi-v7a/libskunicode_icu.a +0 -0
  294. package/libs/android/armeabi-v7a/libsvg.a +0 -0
  295. package/libs/android/x86/libskia.a +0 -0
  296. package/libs/android/x86/libskottie.a +0 -0
  297. package/libs/android/x86/libskparagraph.a +0 -0
  298. package/libs/android/x86/libsksg.a +0 -0
  299. package/libs/android/x86/libskshaper.a +0 -0
  300. package/libs/android/x86/libskunicode_core.a +0 -0
  301. package/libs/android/x86/libskunicode_icu.a +0 -0
  302. package/libs/android/x86/libsvg.a +0 -0
  303. package/libs/android/x86_64/libskia.a +0 -0
  304. package/libs/android/x86_64/libskottie.a +0 -0
  305. package/libs/android/x86_64/libskparagraph.a +0 -0
  306. package/libs/android/x86_64/libsksg.a +0 -0
  307. package/libs/android/x86_64/libskshaper.a +0 -0
  308. package/libs/android/x86_64/libskunicode_core.a +0 -0
  309. package/libs/android/x86_64/libskunicode_icu.a +0 -0
  310. package/libs/android/x86_64/libsvg.a +0 -0
  311. package/libs/ios/libskia.xcframework/Info.plist +5 -5
  312. package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  313. package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  314. package/libs/ios/libskottie.xcframework/Info.plist +5 -5
  315. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  316. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  317. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  318. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  319. package/libs/ios/libsksg.xcframework/Info.plist +5 -5
  320. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  321. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  322. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  323. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  324. package/libs/ios/libsvg.xcframework/Info.plist +5 -5
  325. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  326. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  327. package/package.json +3 -5
  328. package/react-native-skia.podspec +2 -1
  329. package/src/renderer/HostConfig.ts +5 -1
  330. package/src/renderer/__tests__/e2e/ImageFilters.spec.tsx +5 -2
  331. package/src/renderer/__tests__/e2e/Paths.spec.tsx +12 -5
  332. package/src/renderer/__tests__/e2e/SDF.spec.tsx +1 -1
  333. package/src/renderer/__tests__/e2e/Snapshot.spec.tsx +1 -1
  334. package/src/skia/types/Paragraph/TextStyle.ts +2 -2
  335. package/src/skia/types/Skia.ts +7 -1
  336. package/src/skia/web/JsiSkia.ts +3 -0
  337. package/src/web/WithSkiaWeb.tsx +17 -6
  338. package/cpp/skia/include/core/SkDrawLooper.h +0 -135
  339. package/cpp/skia/include/effects/SkBlurDrawLooper.h +0 -26
  340. package/cpp/skia/include/effects/SkLayerDrawLooper.h +0 -161
  341. package/cpp/skia/include/gpu/gl/GrGLConfig_chrome.h +0 -14
  342. package/cpp/skia/include/gpu/vk/GrVkBackendContext.h +0 -84
  343. package/cpp/skia/include/gpu/vk/GrVkExtensions.h +0 -15
  344. package/cpp/skia/include/gpu/vk/GrVkMemoryAllocator.h +0 -15
  345. package/cpp/skia/include/ports/SkFontMgr_indirect.h +0 -102
  346. package/cpp/skia/include/ports/SkRemotableFontMgr.h +0 -139
  347. package/cpp/skia/include/private/base/SkFloatBits.h +0 -90
  348. package/cpp/skia/include/private/gpu/graphite/ContextOptionsPriv.h +0 -69
  349. package/cpp/skia/include/private/gpu/graphite/DawnTypesPriv.h +0 -54
  350. package/cpp/skia/include/private/gpu/graphite/MtlGraphiteTypesPriv.h +0 -95
  351. package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +0 -83
  352. package/cpp/skia/src/core/SkPathEnums.h +0 -25
  353. package/cpp/skia/src/core/SkPathPriv.h +0 -540
  354. package/libs/android/arm64-v8a/libskunicode.a +0 -0
  355. package/libs/android/armeabi-v7a/libskunicode.a +0 -0
  356. package/libs/android/x86/libskunicode.a +0 -0
  357. package/libs/android/x86_64/libskunicode.a +0 -0
  358. package/libs/ios/libskunicode.xcframework/Info.plist +0 -46
  359. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
  360. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
  361. /package/cpp/skia/include/gpu/{gl → ganesh/gl}/glx/GrGLMakeGLXInterface.h +0 -0
@@ -0,0 +1,56 @@
1
+ /*
2
+ * Copyright 2020 Google LLC
3
+ *
4
+ * Use of this source code is governed by a BSD-style license that can be
5
+ * found in the LICENSE file.
6
+ */
7
+
8
+ #ifndef SkASAN_DEFINED
9
+ #define SkASAN_DEFINED
10
+
11
+ #include <cstddef>
12
+
13
+ #ifdef __SANITIZE_ADDRESS__
14
+ #define SK_SANITIZE_ADDRESS 1
15
+ #endif
16
+ #if !defined(SK_SANITIZE_ADDRESS) && defined(__has_feature)
17
+ #if __has_feature(address_sanitizer)
18
+ #define SK_SANITIZE_ADDRESS 1
19
+ #endif
20
+ #endif
21
+
22
+ // Typically declared in LLVM's asan_interface.h.
23
+ #ifdef SK_SANITIZE_ADDRESS
24
+ extern "C" {
25
+ void __asan_poison_memory_region(void const volatile *addr, size_t size);
26
+ void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
27
+ int __asan_address_is_poisoned(void const volatile *addr);
28
+ }
29
+ #endif
30
+
31
+ // Code that implements bespoke allocation arenas can poison the entire arena on creation, then
32
+ // unpoison chunks of arena memory as they are parceled out. Consider leaving gaps between blocks
33
+ // to detect buffer overrun.
34
+ static inline void sk_asan_poison_memory_region([[maybe_unused]] void const volatile* addr,
35
+ [[maybe_unused]] size_t size) {
36
+ #ifdef SK_SANITIZE_ADDRESS
37
+ __asan_poison_memory_region(addr, size);
38
+ #endif
39
+ }
40
+
41
+ static inline void sk_asan_unpoison_memory_region([[maybe_unused]] void const volatile* addr,
42
+ [[maybe_unused]] size_t size) {
43
+ #ifdef SK_SANITIZE_ADDRESS
44
+ __asan_unpoison_memory_region(addr, size);
45
+ #endif
46
+ }
47
+
48
+ static inline int sk_asan_address_is_poisoned([[maybe_unused]] void const volatile* addr) {
49
+ #ifdef SK_SANITIZE_ADDRESS
50
+ return __asan_address_is_poisoned(addr);
51
+ #else
52
+ return 0;
53
+ #endif
54
+ }
55
+
56
+ #endif // SkASAN_DEFINED
@@ -15,15 +15,20 @@
15
15
  template <typename T> static constexpr T SkAlign2(T x) { return (x + 1) >> 1 << 1; }
16
16
  template <typename T> static constexpr T SkAlign4(T x) { return (x + 3) >> 2 << 2; }
17
17
  template <typename T> static constexpr T SkAlign8(T x) { return (x + 7) >> 3 << 3; }
18
+ template <typename T> static constexpr T SkAlign16(T x) { return (x + 15) >> 4 << 4; }
18
19
 
19
20
  template <typename T> static constexpr bool SkIsAlign2(T x) { return 0 == (x & 1); }
20
21
  template <typename T> static constexpr bool SkIsAlign4(T x) { return 0 == (x & 3); }
21
22
  template <typename T> static constexpr bool SkIsAlign8(T x) { return 0 == (x & 7); }
23
+ template <typename T> static constexpr bool SkIsAlign16(T x) { return 0 == (x & 15); }
24
+
22
25
 
23
26
  template <typename T> static constexpr T SkAlignPtr(T x) {
27
+ static_assert(sizeof(void*) == 4 || sizeof(void*) == 8);
24
28
  return sizeof(void*) == 8 ? SkAlign8(x) : SkAlign4(x);
25
29
  }
26
30
  template <typename T> static constexpr bool SkIsAlignPtr(T x) {
31
+ static_assert(sizeof(void*) == 4 || sizeof(void*) == 8);
27
32
  return sizeof(void*) == 8 ? SkIsAlign8(x) : SkIsAlign4(x);
28
33
  }
29
34
 
@@ -5,6 +5,7 @@
5
5
  #define SkContainers_DEFINED
6
6
 
7
7
  #include "include/private/base/SkAPI.h"
8
+ #include "include/private/base/SkAlign.h"
8
9
  #include "include/private/base/SkSpan_impl.h"
9
10
 
10
11
  #include <cstddef>
@@ -20,10 +21,17 @@ public:
20
21
  // The bytes allocated are freed using sk_free().
21
22
  SkSpan<std::byte> allocate(int capacity, double growthFactor = 1.0);
22
23
 
24
+ // Rounds a requested capacity up towards `kCapacityMultiple` in a constexpr-friendly fashion.
25
+ template <typename T>
26
+ static constexpr size_t RoundUp(size_t capacity) {
27
+ return SkAlignTo(capacity * sizeof(T), kCapacityMultiple) / sizeof(T);
28
+ }
29
+
23
30
  private:
24
31
  friend struct SkContainerAllocatorTestingPeer;
25
- // All capacity counts will be rounded up to kCapacityMultiple.
26
- // TODO: this is a constant from the original SkTArray code. This should be checked some how.
32
+
33
+ // All capacity counts will be rounded up to kCapacityMultiple. This matches ASAN's shadow
34
+ // granularity, as well as our typical struct alignment on a 64-bit machine.
27
35
  static constexpr int64_t kCapacityMultiple = 8;
28
36
 
29
37
  // Rounds up capacity to next multiple of kCapacityMultiple and pin to fMaxCapacity.
@@ -65,6 +65,10 @@
65
65
  #define SK_CPU_X86 1
66
66
  #endif
67
67
 
68
+ #if defined(__loongarch__) || defined (__loongarch64)
69
+ #define SK_CPU_LOONGARCH 1
70
+ #endif
71
+
68
72
  /**
69
73
  * SK_CPU_SSE_LEVEL
70
74
  *
@@ -81,7 +85,16 @@
81
85
  #define SK_CPU_SSE_LEVEL_AVX2 52
82
86
  #define SK_CPU_SSE_LEVEL_SKX 60
83
87
 
84
- // TODO(brianosman,kjlubick) clean up these checks
88
+ /**
89
+ * SK_CPU_LSX_LEVEL
90
+ *
91
+ * If defined, SK_CPU_LSX_LEVEL should be set to the highest supported level.
92
+ * On non-loongarch CPU this should be undefined.
93
+ */
94
+ #define SK_CPU_LSX_LEVEL_LSX 70
95
+ #define SK_CPU_LSX_LEVEL_LASX 80
96
+
97
+ // TODO(kjlubick) clean up these checks
85
98
 
86
99
  // Are we in GCC/Clang?
87
100
  #ifndef SK_CPU_SSE_LEVEL
@@ -107,6 +120,14 @@
107
120
  #endif
108
121
  #endif
109
122
 
123
+ #ifndef SK_CPU_LSX_LEVEL
124
+ #if defined(__loongarch_asx)
125
+ #define SK_CPU_LSX_LEVEL SK_CPU_LSX_LEVEL_LASX
126
+ #elif defined(__loongarch_sx)
127
+ #define SK_CPU_LSX_LEVEL SK_CPU_LSX_LEVEL_LSX
128
+ #endif
129
+ #endif
130
+
110
131
  // Are we in VisualStudio?
111
132
  #ifndef SK_CPU_SSE_LEVEL
112
133
  // These checks must be done in descending order to ensure we set the highest
@@ -9,36 +9,17 @@
9
9
  #define SkFloatingPoint_DEFINED
10
10
 
11
11
  #include "include/private/base/SkAttributes.h"
12
- #include "include/private/base/SkFloatBits.h"
13
12
  #include "include/private/base/SkMath.h"
14
13
 
15
14
  #include <cmath>
16
15
  #include <cstdint>
17
- #include <cstring>
18
16
  #include <limits>
17
+ #include <type_traits>
19
18
 
20
19
  inline constexpr float SK_FloatSqrt2 = 1.41421356f;
21
20
  inline constexpr float SK_FloatPI = 3.14159265f;
22
21
  inline constexpr double SK_DoublePI = 3.14159265358979323846264338327950288;
23
22
 
24
- static inline float sk_float_sqrt(float x) { return std::sqrt(x); }
25
- static inline float sk_float_sin(float x) { return std::sin(x); }
26
- static inline float sk_float_cos(float x) { return std::cos(x); }
27
- static inline float sk_float_tan(float x) { return std::tan(x); }
28
- static inline float sk_float_floor(float x) { return std::floor(x); }
29
- static inline float sk_float_ceil(float x) { return std::ceil(x); }
30
- static inline float sk_float_trunc(float x) { return std::trunc(x); }
31
- static inline float sk_float_acos(float x) { return std::acos(x); }
32
- static inline float sk_float_asin(float x) { return std::asin(x); }
33
- static inline float sk_float_atan2(float y, float x) { return std::atan2(y,x); }
34
- static inline float sk_float_abs(float x) { return std::fabs(x); }
35
- static inline float sk_float_copysign(float x, float y) { return std::copysign(x, y); }
36
- static inline float sk_float_mod(float x, float y) { return std::fmod(x,y); }
37
- static inline float sk_float_pow(float x, float y) { return std::pow(x, y); }
38
- static inline float sk_float_exp(float x) { return std::exp(x); }
39
- static inline float sk_float_log(float x) { return std::log(x); }
40
- static inline float sk_float_log2(float x) { return std::log2(x); }
41
-
42
23
  static constexpr int sk_float_sgn(float x) {
43
24
  return (0.0f < x) - (x < 0.0f);
44
25
  }
@@ -56,30 +37,34 @@ static constexpr float sk_float_radians_to_degrees(float radians) {
56
37
  // as floatf(x + .5f), they would be 1 higher than expected.
57
38
  #define sk_float_round(x) (float)sk_double_round((double)(x))
58
39
 
59
- static inline bool sk_float_isfinite(float x) {
60
- return SkFloatBits_IsFinite(SkFloat2Bits(x));
40
+ template <typename T, std::enable_if_t<std::is_floating_point_v<T>, bool> = true>
41
+ static inline constexpr bool SkIsNaN(T x) {
42
+ return x != x;
61
43
  }
62
44
 
63
- static inline bool sk_floats_are_finite(float a, float b) {
64
- return sk_float_isfinite(a) && sk_float_isfinite(b);
45
+ // Subtracting a value from itself will result in zero, except for NAN or ±Inf, which make NAN.
46
+ // Multiplying a group of values against zero will result in zero for each product, except for
47
+ // NAN or ±Inf, which will result in NAN and continue resulting in NAN for the rest of the elements.
48
+ // This generates better code than `std::isfinite` when building with clang-cl (April 2024).
49
+ template <typename T, typename... Pack, std::enable_if_t<std::is_floating_point_v<T>, bool> = true>
50
+ static inline bool SkIsFinite(T x, Pack... values) {
51
+ T prod = x - x;
52
+ prod = (prod * ... * values);
53
+ // At this point, `prod` will either be NaN or 0.
54
+ return prod == prod;
65
55
  }
66
56
 
67
- static inline bool sk_floats_are_finite(const float array[], int count) {
68
- float prod = 0;
69
- for (int i = 0; i < count; ++i) {
57
+ template <typename T, std::enable_if_t<std::is_floating_point_v<T>, bool> = true>
58
+ static inline bool SkIsFinite(const T array[], int count) {
59
+ T x = array[0];
60
+ T prod = x - x;
61
+ for (int i = 1; i < count; ++i) {
70
62
  prod *= array[i];
71
63
  }
72
- // At this point, prod will either be NaN or 0
73
- return prod == 0; // if prod is NaN, this check will return false
74
- }
75
-
76
- static inline bool sk_float_isinf(float x) {
77
- return SkFloatBits_IsInf(SkFloat2Bits(x));
64
+ // At this point, `prod` will either be NaN or 0.
65
+ return prod == prod;
78
66
  }
79
67
 
80
- static constexpr bool sk_float_isnan(float x) { return x != x; }
81
- static constexpr bool sk_double_isnan(double x) { return x != x; }
82
-
83
68
  inline constexpr int SK_MaxS32FitsInFloat = 2147483520;
84
69
  inline constexpr int SK_MinS32FitsInFloat = -SK_MaxS32FitsInFloat;
85
70
 
@@ -87,10 +72,22 @@ inline constexpr int SK_MinS32FitsInFloat = -SK_MaxS32FitsInFloat;
87
72
  inline constexpr int64_t SK_MaxS64FitsInFloat = SK_MaxS64 >> (63-24) << (63-24);
88
73
  inline constexpr int64_t SK_MinS64FitsInFloat = -SK_MaxS64FitsInFloat;
89
74
 
75
+ // sk_[float|double]_saturate2int are written to return their maximum values when passed NaN.
76
+ // MSVC 19.38+ has a bug with this implementation, leading to incorrect results:
77
+ // https://developercommunity.visualstudio.com/t/Optimizer-incorrectly-handles-NaN-floati/10654403
78
+ //
79
+ // We inject an explicit NaN test on MSVC to work around the problem.
80
+ #if defined(_MSC_VER) && !defined(__clang__)
81
+ #define SK_CHECK_NAN(resultVal) if (SkIsNaN(x)) { return resultVal; }
82
+ #else
83
+ #define SK_CHECK_NAN(resultVal)
84
+ #endif
85
+
90
86
  /**
91
87
  * Return the closest int for the given float. Returns SK_MaxS32FitsInFloat for NaN.
92
88
  */
93
89
  static constexpr int sk_float_saturate2int(float x) {
90
+ SK_CHECK_NAN(SK_MaxS32FitsInFloat)
94
91
  x = x < SK_MaxS32FitsInFloat ? x : SK_MaxS32FitsInFloat;
95
92
  x = x > SK_MinS32FitsInFloat ? x : SK_MinS32FitsInFloat;
96
93
  return (int)x;
@@ -100,6 +97,7 @@ static constexpr int sk_float_saturate2int(float x) {
100
97
  * Return the closest int for the given double. Returns SK_MaxS32 for NaN.
101
98
  */
102
99
  static constexpr int sk_double_saturate2int(double x) {
100
+ SK_CHECK_NAN(SK_MaxS32)
103
101
  x = x < SK_MaxS32 ? x : SK_MaxS32;
104
102
  x = x > SK_MinS32 ? x : SK_MinS32;
105
103
  return (int)x;
@@ -109,25 +107,26 @@ static constexpr int sk_double_saturate2int(double x) {
109
107
  * Return the closest int64_t for the given float. Returns SK_MaxS64FitsInFloat for NaN.
110
108
  */
111
109
  static constexpr int64_t sk_float_saturate2int64(float x) {
110
+ SK_CHECK_NAN(SK_MaxS64FitsInFloat)
112
111
  x = x < SK_MaxS64FitsInFloat ? x : SK_MaxS64FitsInFloat;
113
112
  x = x > SK_MinS64FitsInFloat ? x : SK_MinS64FitsInFloat;
114
113
  return (int64_t)x;
115
114
  }
116
115
 
117
- #define sk_float_floor2int(x) sk_float_saturate2int(sk_float_floor(x))
116
+ #undef SK_CHECK_NAN
117
+
118
+ #define sk_float_floor2int(x) sk_float_saturate2int(std::floor(x))
118
119
  #define sk_float_round2int(x) sk_float_saturate2int(sk_float_round(x))
119
- #define sk_float_ceil2int(x) sk_float_saturate2int(sk_float_ceil(x))
120
+ #define sk_float_ceil2int(x) sk_float_saturate2int(std::ceil(x))
120
121
 
121
- #define sk_float_floor2int_no_saturate(x) (int)sk_float_floor(x)
122
- #define sk_float_round2int_no_saturate(x) (int)sk_float_round(x)
123
- #define sk_float_ceil2int_no_saturate(x) (int)sk_float_ceil(x)
122
+ #define sk_float_floor2int_no_saturate(x) ((int)std::floor(x))
123
+ #define sk_float_round2int_no_saturate(x) ((int)sk_float_round(x))
124
+ #define sk_float_ceil2int_no_saturate(x) ((int)std::ceil(x))
124
125
 
125
- #define sk_double_floor(x) floor(x)
126
- #define sk_double_round(x) floor((x) + 0.5)
127
- #define sk_double_ceil(x) ceil(x)
128
- #define sk_double_floor2int(x) (int)sk_double_floor(x)
129
- #define sk_double_round2int(x) (int)sk_double_round(x)
130
- #define sk_double_ceil2int(x) (int)sk_double_ceil(x)
126
+ #define sk_double_round(x) (std::floor((x) + 0.5))
127
+ #define sk_double_floor2int(x) ((int)std::floor(x))
128
+ #define sk_double_round2int(x) ((int)std::round(x))
129
+ #define sk_double_ceil2int(x) ((int)std::ceil(x))
131
130
 
132
131
  // Cast double to float, ignoring any warning about too-large finite values being cast to float.
133
132
  // Clang thinks this is undefined, but it's actually implementation defined to return either
@@ -149,23 +148,15 @@ static constexpr float sk_float_midpoint(float a, float b) {
149
148
  return static_cast<float>(0.5 * (static_cast<double>(a) + b));
150
149
  }
151
150
 
152
- // Returns false if any of the floats are outside the range [0...1].
153
- // Returns true if count is 0.
154
- bool sk_floats_are_unit(const float array[], size_t count);
155
-
156
- static inline float sk_float_rsqrt_portable(float x) { return 1.0f / sk_float_sqrt(x); }
157
- static inline float sk_float_rsqrt (float x) { return 1.0f / sk_float_sqrt(x); }
158
-
159
- // The number of significant digits to print.
160
- inline constexpr int SK_FLT_DECIMAL_DIG = std::numeric_limits<float>::max_digits10;
151
+ static inline float sk_float_rsqrt_portable(float x) { return 1.0f / std::sqrt(x); }
152
+ static inline float sk_float_rsqrt (float x) { return 1.0f / std::sqrt(x); }
161
153
 
162
154
  // IEEE defines how float divide behaves for non-finite values and zero-denoms, but C does not,
163
155
  // so we have a helper that suppresses the possible undefined-behavior warnings.
164
156
  #ifdef SK_BUILD_FOR_WIN
165
- #pragma warning( push )
166
- #pragma warning( disable : 4723)
157
+ #pragma warning(push)
158
+ #pragma warning(disable : 4723)
167
159
  #endif
168
- // Your function
169
160
  SK_NO_SANITIZE("float-divide-by-zero")
170
161
  static constexpr float sk_ieee_float_divide(float numer, float denom) {
171
162
  return numer / denom;
@@ -179,11 +170,6 @@ static constexpr double sk_ieee_double_divide(double numer, double denom) {
179
170
  #pragma warning( pop )
180
171
  #endif
181
172
 
182
- // Return a*b + c.
183
- static inline float sk_fmaf(float a, float b, float c) {
184
- return std::fma(a, b, c);
185
- }
186
-
187
173
  // Returns true iff the provided number is within a small epsilon of 0.
188
174
  bool sk_double_nearly_zero(double a);
189
175
 
@@ -193,6 +179,6 @@ bool sk_double_nearly_zero(double a);
193
179
  // * infinity and any other number - returns false.
194
180
  //
195
181
  // ulp is an initialism for Units in the Last Place.
196
- bool sk_doubles_nearly_equal_ulps(double a, double b, uint8_t maxUlpsDiff=16);
182
+ bool sk_doubles_nearly_equal_ulps(double a, double b, uint8_t maxUlpsDiff = 16);
197
183
 
198
184
  #endif
@@ -7,6 +7,8 @@
7
7
  #ifndef SkMacros_DEFINED
8
8
  #define SkMacros_DEFINED
9
9
 
10
+ #include "include/private/base/SkTo.h" // IWYU pragma: keep
11
+
10
12
  /*
11
13
  * Usage: SK_MACRO_CONCAT(a, b) to construct the symbol ab
12
14
  *
@@ -91,4 +93,69 @@ extern "C" {
91
93
  friend X operator &(X a, X b); \
92
94
  friend X& operator &=(X& a, X b);
93
95
 
96
+ /**
97
+ * Wraps a C++11 enum that we use as a bitfield, and enables a limited amount of
98
+ * masking with type safety. Instantiated with the ~ operator.
99
+ */
100
+ template<typename TFlags> class SkTFlagsMask {
101
+ public:
102
+ constexpr explicit SkTFlagsMask(TFlags value) : SkTFlagsMask(static_cast<int>(value)) {}
103
+ constexpr explicit SkTFlagsMask(int value) : fValue(value) {}
104
+ constexpr int value() const { return fValue; }
105
+ private:
106
+ const int fValue;
107
+ };
108
+
109
+ /**
110
+ * Defines bitwise operators that make it possible to use an enum class as a
111
+ * basic bitfield.
112
+ */
113
+ #define SK_MAKE_BITFIELD_CLASS_OPS(X) \
114
+ [[maybe_unused]] constexpr SkTFlagsMask<X> operator~(X a) { \
115
+ return SkTFlagsMask<X>(~static_cast<int>(a)); \
116
+ } \
117
+ [[maybe_unused]] constexpr X operator|(X a, X b) { \
118
+ return static_cast<X>(static_cast<int>(a) | static_cast<int>(b)); \
119
+ } \
120
+ [[maybe_unused]] inline X& operator|=(X& a, X b) { \
121
+ return (a = a | b); \
122
+ } \
123
+ [[maybe_unused]] constexpr bool operator&(X a, X b) { \
124
+ return SkToBool(static_cast<int>(a) & static_cast<int>(b)); \
125
+ } \
126
+ [[maybe_unused]] constexpr SkTFlagsMask<X> operator|(SkTFlagsMask<X> a, SkTFlagsMask<X> b) { \
127
+ return SkTFlagsMask<X>(a.value() | b.value()); \
128
+ } \
129
+ [[maybe_unused]] constexpr SkTFlagsMask<X> operator|(SkTFlagsMask<X> a, X b) { \
130
+ return SkTFlagsMask<X>(a.value() | static_cast<int>(b)); \
131
+ } \
132
+ [[maybe_unused]] constexpr SkTFlagsMask<X> operator|(X a, SkTFlagsMask<X> b) { \
133
+ return SkTFlagsMask<X>(static_cast<int>(a) | b.value()); \
134
+ } \
135
+ [[maybe_unused]] constexpr X operator&(SkTFlagsMask<X> a, SkTFlagsMask<X> b) { \
136
+ return static_cast<X>(a.value() & b.value()); \
137
+ } \
138
+ [[maybe_unused]] constexpr X operator&(SkTFlagsMask<X> a, X b) { \
139
+ return static_cast<X>(a.value() & static_cast<int>(b)); \
140
+ } \
141
+ [[maybe_unused]] constexpr X operator&(X a, SkTFlagsMask<X> b) { \
142
+ return static_cast<X>(static_cast<int>(a) & b.value()); \
143
+ } \
144
+ [[maybe_unused]] inline X& operator&=(X& a, SkTFlagsMask<X> b) { \
145
+ return (a = a & b); \
146
+ } \
147
+
148
+ #define SK_DECL_BITFIELD_CLASS_OPS_FRIENDS(X) \
149
+ friend constexpr SkTFlagsMask<X> operator ~(X); \
150
+ friend constexpr X operator |(X, X); \
151
+ friend X& operator |=(X&, X); \
152
+ friend constexpr bool operator &(X, X); \
153
+ friend constexpr SkTFlagsMask<X> operator|(SkTFlagsMask<X>, SkTFlagsMask<X>); \
154
+ friend constexpr SkTFlagsMask<X> operator|(SkTFlagsMask<X>, X); \
155
+ friend constexpr SkTFlagsMask<X> operator|(X, SkTFlagsMask<X>); \
156
+ friend constexpr X operator&(SkTFlagsMask<X>, SkTFlagsMask<X>); \
157
+ friend constexpr X operator&(SkTFlagsMask<X>, X); \
158
+ friend constexpr X operator&(X, SkTFlagsMask<X>); \
159
+ friend X& operator &=(X&, SkTFlagsMask<X>)
160
+
94
161
  #endif // SkMacros_DEFINED
@@ -56,6 +56,14 @@ SK_API extern void* sk_malloc_flags(size_t size, unsigned flags);
56
56
  */
57
57
  SK_API extern void* sk_realloc_throw(void* buffer, size_t size);
58
58
 
59
+ /**
60
+ * Return the size of the block of memory allocated in reality for a given pointer. The pointer
61
+ * passed must have been allocated using the sk_malloc_* or sk_realloc_* functions. The "size"
62
+ * parameter indicates the size originally requested when the memory block was allocated, and
63
+ * the value returned by this function must be bigger or equal to it.
64
+ */
65
+ SK_API extern size_t sk_malloc_size(void* addr, size_t size);
66
+
59
67
  static inline void* sk_malloc_throw(size_t size) {
60
68
  return sk_malloc_flags(size, SK_MALLOC_THROW);
61
69
  }
@@ -9,7 +9,7 @@
9
9
  #define SkPoint_DEFINED
10
10
 
11
11
  #include "include/private/base/SkAPI.h"
12
- #include "include/private/base/SkAssert.h"
12
+ #include "include/private/base/SkFloatingPoint.h"
13
13
  #include "include/private/base/SkSafe32.h"
14
14
 
15
15
  #include <cmath>
@@ -410,16 +410,7 @@ struct SK_API SkPoint {
410
410
  @return true for values other than infinities and NaN
411
411
  */
412
412
  bool isFinite() const {
413
- float accum = 0;
414
- accum *= fX;
415
- accum *= fY;
416
-
417
- // accum is either NaN or it is finite (zero).
418
- SkASSERT(0 == accum || std::isnan(accum));
419
-
420
- // value==value will be true iff value is not NaN
421
- // TODO: is it faster to say !accum or accum==accum?
422
- return !std::isnan(accum);
413
+ return SkIsFinite(fX, fY);
423
414
  }
424
415
 
425
416
  /** Returns true if SkPoint is equivalent to SkPoint constructed from (x, y).