@shopify/react-native-skia 1.3.13 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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).