@shopify/react-native-skia 1.3.13 → 1.4.0

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
@@ -16,7 +16,6 @@
16
16
  #include "include/private/base/SkTArray.h"
17
17
 
18
18
  #include <chrono>
19
- #include <vector>
20
19
 
21
20
  struct AHardwareBuffer;
22
21
  class SkCanvas;
@@ -45,16 +44,18 @@ class DrawBufferManager;
45
44
  class GlobalCache;
46
45
  class ImageProvider;
47
46
  class ProxyCache;
47
+ class ProxyReadCountMap;
48
48
  class RecorderPriv;
49
49
  class ResourceProvider;
50
50
  class RuntimeEffectDictionary;
51
51
  class SharedContext;
52
52
  class Task;
53
- class TaskGraph;
53
+ class TaskList;
54
54
  class TextureDataBlock;
55
55
  class TextureInfo;
56
56
  class UniformDataBlock;
57
57
  class UploadBufferManager;
58
+ class UploadList;
58
59
 
59
60
  template<typename T> class PipelineDataCache;
60
61
  using UniformDataCache = PipelineDataCache<UniformDataBlock>;
@@ -88,6 +89,11 @@ public:
88
89
  ImageProvider* clientImageProvider() { return fClientImageProvider.get(); }
89
90
  const ImageProvider* clientImageProvider() const { return fClientImageProvider.get(); }
90
91
 
92
+ /**
93
+ * Gets the maximum supported texture size.
94
+ */
95
+ int maxTextureSize() const;
96
+
91
97
  /**
92
98
  * Creates a new backend gpu texture matching the dimensions and TextureInfo. If an invalid
93
99
  * TextureInfo or a TextureInfo Skia can't support is passed in, this will return an invalid
@@ -115,7 +121,9 @@ public:
115
121
  * to insert a Recording into the Context and call `submit` to send the upload work to the gpu.
116
122
  * The backend texture must be compatible with the provided pixmap(s). Compatible, in this case,
117
123
  * means that the backend format is compatible with the base pixmap's colortype. The src data
118
- * can be deleted when this call returns.
124
+ * can be deleted when this call returns. When the BackendTexture is safe to be destroyed by the
125
+ * client, Skia will call the passed in GpuFinishedProc. The BackendTexture should not be
126
+ * destroyed before that.
119
127
  * If the backend texture is mip mapped, the data for all the mipmap levels must be provided.
120
128
  * In the mipmapped case all the colortypes of the provided pixmaps must be the same.
121
129
  * Additionally, all the miplevels must be sized correctly (please see
@@ -126,7 +134,27 @@ public:
126
134
  */
127
135
  bool updateBackendTexture(const BackendTexture&,
128
136
  const SkPixmap srcData[],
129
- int numLevels);
137
+ int numLevels,
138
+ GpuFinishedProc = nullptr,
139
+ GpuFinishedContext = nullptr);
140
+
141
+ /**
142
+ * If possible, updates a compressed backend texture filled with the provided raw data. The
143
+ * client should check the return value to see if the update was successful. The client is
144
+ * required to insert a Recording into the Context and call `submit` to send the upload work to
145
+ * the gpu. When the BackendTexture is safe to be destroyed by the client, Skia will call the
146
+ * passed in GpuFinishedProc. The BackendTexture should not be destroyed before that.
147
+ * If the backend texture is mip mapped, the data for all the mipmap levels must be provided.
148
+ * Additionally, all the miplevels must be sized correctly (please see
149
+ * SkMipMap::ComputeLevelSize and ComputeLevelCount).
150
+ * For the Vulkan backend after a successful update the layout of the created VkImage will be:
151
+ * VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
152
+ */
153
+ bool updateCompressedBackendTexture(const BackendTexture&,
154
+ const void* data,
155
+ size_t dataSize,
156
+ GpuFinishedProc = nullptr,
157
+ GpuFinishedContext = nullptr);
130
158
 
131
159
  /**
132
160
  * Called to delete the passed in BackendTexture. This should only be called if the
@@ -167,10 +195,21 @@ public:
167
195
  void performDeferredCleanup(std::chrono::milliseconds msNotUsed);
168
196
 
169
197
  /**
170
- * Returns the number of bytes of gpu memory currently budgeted in the Recorder's cache.
198
+ * Returns the number of bytes of the Recorder's gpu memory cache budget that are currently in
199
+ * use.
171
200
  */
172
201
  size_t currentBudgetedBytes() const;
173
202
 
203
+ /**
204
+ * Returns the number of bytes of the Recorder's resource cache that are currently purgeable.
205
+ */
206
+ size_t currentPurgeableBytes() const;
207
+
208
+ /**
209
+ * Returns the size of Recorder's gpu memory cache budget in bytes.
210
+ */
211
+ size_t maxBudgetedBytes() const;
212
+
174
213
  /**
175
214
  * Enumerates all cached GPU resources owned by the Recorder and dumps their memory to
176
215
  * traceMemoryDump.
@@ -186,7 +225,9 @@ private:
186
225
  friend class Device; // For registering and deregistering Devices;
187
226
  friend class RecorderPriv; // for ctor and hidden methods
188
227
 
189
- Recorder(sk_sp<SharedContext>, const RecorderOptions&);
228
+ // If Context is non-null, the Recorder will use the Context's resource provider
229
+ // instead of creating its own.
230
+ Recorder(sk_sp<SharedContext>, const RecorderOptions&, const Context*);
190
231
 
191
232
  SingleOwner* singleOwner() const { return &fSingleOwner; }
192
233
 
@@ -196,9 +237,10 @@ private:
196
237
  // SkSurface/Device first we will flush all the Device's into the Recorder before deregistering
197
238
  // it from the Recorder.
198
239
  //
199
- // We do not need to take a ref on the Device since the Device will flush and deregister itself
200
- // in its dtor. There is no other need for the Recorder to know about the Device after this
201
- // point.
240
+ // We take a ref on the Device so that ~Device() does not have to deregister the recorder
241
+ // (which can happen on any thread if the Device outlives the Surface via an Image view).
242
+ // Recorder::flushTrackedDevices() cleans up uniquely held and immutable Devices on the recorder
243
+ // thread so this extra ref is not significantly increasing the Device lifetime.
202
244
  //
203
245
  // Note: We could probably get by with only registering Devices directly connected to
204
246
  // SkSurfaces. All other one off Devices will be created in a controlled scope where the
@@ -207,19 +249,31 @@ private:
207
249
  // then either deletes the SkSurface or Recorder before calling restore. For simplicity we just
208
250
  // register every device for now, but if we see extra overhead in pushing back the extra
209
251
  // pointers, we can look into only registering SkSurface Devices.
210
- void registerDevice(Device*);
252
+ void registerDevice(sk_sp<Device>);
211
253
  void deregisterDevice(const Device*);
212
254
 
213
255
  sk_sp<SharedContext> fSharedContext;
214
- std::unique_ptr<ResourceProvider> fResourceProvider;
256
+ ResourceProvider* fResourceProvider; // May point to the Context's resource provider
257
+ std::unique_ptr<ResourceProvider> fOwnedResourceProvider; // May be null
215
258
  std::unique_ptr<RuntimeEffectDictionary> fRuntimeEffectDict;
216
259
 
217
- std::unique_ptr<TaskGraph> fGraph;
260
+ // NOTE: These are stored by pointer to allow them to be forward declared.
261
+ std::unique_ptr<TaskList> fRootTaskList;
262
+ // Aggregated one-time uploads that preceed all tasks in the root task list.
263
+ std::unique_ptr<UploadList> fRootUploads;
264
+
218
265
  std::unique_ptr<UniformDataCache> fUniformDataCache;
219
266
  std::unique_ptr<TextureDataCache> fTextureDataCache;
220
267
  std::unique_ptr<DrawBufferManager> fDrawBufferManager;
221
268
  std::unique_ptr<UploadBufferManager> fUploadBufferManager;
222
- std::vector<Device*> fTrackedDevices;
269
+ std::unique_ptr<ProxyReadCountMap> fProxyReadCounts;
270
+
271
+ // Iterating over tracked devices in flushTrackedDevices() needs to be re-entrant and support
272
+ // additions to fTrackedDevices if registerDevice() is triggered by a temporary device during
273
+ // flushing. Removals are handled by setting elements to null; final clean up is handled at the
274
+ // end of the initial call to flushTrackedDevices().
275
+ skia_private::TArray<sk_sp<Device>> fTrackedDevices;
276
+ int fFlushingDevicesIndex = -1;
223
277
 
224
278
  uint32_t fUniqueID; // Needed for MessageBox handling for text
225
279
  uint32_t fNextRecordingID = 1;
@@ -240,7 +294,7 @@ private:
240
294
 
241
295
  skia_private::TArray<sk_sp<RefCntedCallback>> fFinishedProcs;
242
296
 
243
- #if defined(GRAPHITE_TEST_UTILS)
297
+ #if defined(GPU_TEST_UTILS)
244
298
  // For testing use only -- the Context used to create this Recorder
245
299
  Context* fContext = nullptr;
246
300
  #endif
@@ -25,7 +25,7 @@ class CommandBuffer;
25
25
  class RecordingPriv;
26
26
  class Resource;
27
27
  class ResourceProvider;
28
- class TaskGraph;
28
+ class TaskList;
29
29
  class Texture;
30
30
  class TextureInfo;
31
31
  class TextureProxy;
@@ -62,7 +62,6 @@ private:
62
62
 
63
63
  Recording(uint32_t uniqueID,
64
64
  uint32_t recorderID,
65
- std::unique_ptr<TaskGraph>,
66
65
  std::unordered_set<sk_sp<TextureProxy>, ProxyHash>&& nonVolatileLazyProxies,
67
66
  std::unordered_set<sk_sp<TextureProxy>, ProxyHash>&& volatileLazyProxies,
68
67
  std::unique_ptr<LazyProxyData> targetProxyData,
@@ -75,7 +74,8 @@ private:
75
74
  uint32_t fUniqueID;
76
75
  uint32_t fRecorderID;
77
76
 
78
- std::unique_ptr<TaskGraph> fGraph;
77
+ // This is held by a pointer instead of being inline to allow TaskList to be forward declared.
78
+ std::unique_ptr<TaskList> fRootTaskList;
79
79
  // We don't always take refs to all resources used by specific Tasks (e.g. a common buffer used
80
80
  // for uploads). Instead we'll just hold onto one ref for those Resources outside the Tasks.
81
81
  // Those refs are stored in the array here and will eventually be passed onto a CommandBuffer
@@ -12,6 +12,8 @@
12
12
  #include "include/core/SkSurface.h"
13
13
  #include "include/gpu/GpuTypes.h"
14
14
 
15
+ #include <string_view>
16
+
15
17
  class SkImage;
16
18
  struct SkImageInfo;
17
19
 
@@ -59,7 +61,8 @@ SK_API sk_sp<SkImage> AsImageCopy(sk_sp<const SkSurface>,
59
61
  SK_API sk_sp<SkSurface> RenderTarget(skgpu::graphite::Recorder*,
60
62
  const SkImageInfo& imageInfo,
61
63
  skgpu::Mipmapped = skgpu::Mipmapped::kNo,
62
- const SkSurfaceProps* surfaceProps = nullptr);
64
+ const SkSurfaceProps* surfaceProps = nullptr,
65
+ std::string_view label = {});
63
66
 
64
67
  /**
65
68
  * Wraps a GPU-backed texture in an SkSurface. Depending on the backend gpu API, the caller may
@@ -80,7 +83,8 @@ SK_API sk_sp<SkSurface> WrapBackendTexture(skgpu::graphite::Recorder*,
80
83
  sk_sp<SkColorSpace> colorSpace,
81
84
  const SkSurfaceProps* props,
82
85
  TextureReleaseProc = nullptr,
83
- ReleaseContext = nullptr);
86
+ ReleaseContext = nullptr,
87
+ std::string_view label = {});
84
88
  } // namespace SkSurfaces
85
89
 
86
90
  #endif // skgpu_graphite_Surface_DEFINED
@@ -9,63 +9,22 @@
9
9
  #define skgpu_graphite_TextureInfo_DEFINED
10
10
 
11
11
  #include "include/core/SkString.h"
12
+ #include "include/core/SkTextureCompressionType.h"
12
13
  #include "include/gpu/graphite/GraphiteTypes.h"
13
-
14
- #ifdef SK_DAWN
15
- #include "include/private/gpu/graphite/DawnTypesPriv.h"
16
- #endif
17
-
18
- #ifdef SK_METAL
19
- #include "include/private/gpu/graphite/MtlGraphiteTypesPriv.h"
20
- #endif
21
-
22
- #ifdef SK_VULKAN
23
- #include "include/private/gpu/graphite/VulkanGraphiteTypesPriv.h"
24
- #endif
14
+ #include "include/private/base/SkAPI.h"
15
+ #include "include/private/base/SkAnySubclass.h"
25
16
 
26
17
  struct SkISize;
27
18
 
28
19
  namespace skgpu::graphite {
29
20
 
21
+ class TextureInfoData;
22
+
30
23
  class SK_API TextureInfo {
31
24
  public:
32
- TextureInfo() {}
33
- #ifdef SK_DAWN
34
- TextureInfo(const DawnTextureInfo& dawnInfo)
35
- : fBackend(BackendApi::kDawn)
36
- , fValid(true)
37
- , fSampleCount(dawnInfo.fSampleCount)
38
- , fMipmapped(dawnInfo.fMipmapped)
39
- , fProtected(Protected::kNo)
40
- , fDawnSpec(dawnInfo) {}
41
- #endif
42
-
43
- #ifdef SK_METAL
44
- TextureInfo(const MtlTextureInfo& mtlInfo)
45
- : fBackend(BackendApi::kMetal)
46
- , fValid(true)
47
- , fSampleCount(mtlInfo.fSampleCount)
48
- , fMipmapped(mtlInfo.fMipmapped)
49
- , fProtected(Protected::kNo)
50
- , fMtlSpec(mtlInfo) {}
51
- #endif
52
-
53
- #ifdef SK_VULKAN
54
- TextureInfo(const VulkanTextureInfo& vkInfo)
55
- : fBackend(BackendApi::kVulkan)
56
- , fValid(true)
57
- , fSampleCount(vkInfo.fSampleCount)
58
- , fMipmapped(vkInfo.fMipmapped)
59
- , fProtected(Protected::kNo)
60
- , fVkSpec(vkInfo) {
61
- if (vkInfo.fFlags & VK_IMAGE_CREATE_PROTECTED_BIT) {
62
- fProtected = Protected::kYes;
63
- }
64
- }
65
- #endif
66
-
67
- ~TextureInfo() {}
68
- TextureInfo(const TextureInfo&) = default;
25
+ TextureInfo();
26
+ ~TextureInfo();
27
+ TextureInfo(const TextureInfo&);
69
28
  TextureInfo& operator=(const TextureInfo&);
70
29
 
71
30
  bool operator==(const TextureInfo&) const;
@@ -77,71 +36,42 @@ public:
77
36
  uint32_t numSamples() const { return fSampleCount; }
78
37
  Mipmapped mipmapped() const { return fMipmapped; }
79
38
  Protected isProtected() const { return fProtected; }
80
-
81
- #ifdef SK_DAWN
82
- bool getDawnTextureInfo(DawnTextureInfo* info) const;
83
- #endif
84
-
85
- #ifdef SK_METAL
86
- bool getMtlTextureInfo(MtlTextureInfo* info) const {
87
- if (!this->isValid() || fBackend != BackendApi::kMetal) {
88
- return false;
89
- }
90
- *info = MtlTextureSpecToTextureInfo(fMtlSpec, fSampleCount, fMipmapped);
91
- return true;
92
- }
93
- #endif
94
-
95
- #ifdef SK_VULKAN
96
- bool getVulkanTextureInfo(VulkanTextureInfo* info) const {
97
- if (!this->isValid() || fBackend != BackendApi::kVulkan) {
98
- return false;
99
- }
100
- *info = VulkanTextureSpecToTextureInfo(fVkSpec, fSampleCount, fMipmapped);
101
- return true;
102
- }
103
- #endif
39
+ SkTextureCompressionType compressionType() const;
40
+ bool isMemoryless() const;
104
41
 
105
42
  bool isCompatible(const TextureInfo& that) const;
43
+ // Return a string containing the full description of this TextureInfo.
106
44
  SkString toString() const;
45
+ // Return a string containing only the info relevant for its use as a RenderPass attachment.
46
+ SkString toRPAttachmentString() const;
107
47
 
108
48
  private:
49
+ friend class TextureInfoData;
50
+ friend class TextureInfoPriv;
51
+
52
+ // Size determined by looking at the TextureInfoData subclasses, then guessing-and-checking.
53
+ // Compiler will complain if this is too small - in that case, just increase the number.
54
+ inline constexpr static size_t kMaxSubclassSize = 112;
55
+ using AnyTextureInfoData = SkAnySubclass<TextureInfoData, kMaxSubclassSize>;
56
+
57
+ template <typename SomeTextureInfoData>
58
+ TextureInfo(BackendApi backend,
59
+ uint32_t sampleCount,
60
+ skgpu::Mipmapped mipped,
61
+ skgpu::Protected isProtected,
62
+ const SomeTextureInfoData& textureInfoData)
63
+ : fBackend(backend)
64
+ , fValid(true)
65
+ , fSampleCount(sampleCount)
66
+ , fMipmapped(mipped)
67
+ , fProtected(isProtected) {
68
+ fTextureInfoData.emplace<SomeTextureInfoData>(textureInfoData);
69
+ }
70
+
109
71
  friend size_t ComputeSize(SkISize dimensions, const TextureInfo&); // for bytesPerPixel
110
72
 
111
73
  size_t bytesPerPixel() const;
112
74
 
113
- #ifdef SK_DAWN
114
- friend class DawnCaps;
115
- friend class DawnCommandBuffer;
116
- friend class DawnComputePipeline;
117
- friend class DawnGraphicsPipeline;
118
- friend class DawnResourceProvider;
119
- friend class DawnTexture;
120
- const DawnTextureSpec& dawnTextureSpec() const {
121
- SkASSERT(fValid && fBackend == BackendApi::kDawn);
122
- return fDawnSpec;
123
- }
124
- #endif
125
-
126
- #ifdef SK_METAL
127
- friend class MtlCaps;
128
- friend class MtlGraphicsPipeline;
129
- friend class MtlTexture;
130
- const MtlTextureSpec& mtlTextureSpec() const {
131
- SkASSERT(fValid && fBackend == BackendApi::kMetal);
132
- return fMtlSpec;
133
- }
134
- #endif
135
-
136
- #ifdef SK_VULKAN
137
- friend class VulkanCaps;
138
- friend class VulkanTexture;
139
- const VulkanTextureSpec& vulkanTextureSpec() const {
140
- SkASSERT(fValid && fBackend == BackendApi::kVulkan);
141
- return fVkSpec;
142
- }
143
- #endif
144
-
145
75
  BackendApi fBackend = BackendApi::kMock;
146
76
  bool fValid = false;
147
77
 
@@ -149,18 +79,7 @@ private:
149
79
  Mipmapped fMipmapped = Mipmapped::kNo;
150
80
  Protected fProtected = Protected::kNo;
151
81
 
152
- union {
153
- #ifdef SK_DAWN
154
- DawnTextureSpec fDawnSpec;
155
- #endif
156
- #ifdef SK_METAL
157
- MtlTextureSpec fMtlSpec;
158
- #endif
159
- #ifdef SK_VULKAN
160
- VulkanTextureSpec fVkSpec;
161
- #endif
162
- void* fEnsureUnionNonEmpty;
163
- };
82
+ AnyTextureInfoData fTextureInfoData;
164
83
  };
165
84
 
166
85
  } // namespace skgpu::graphite
@@ -8,37 +8,139 @@
8
8
  #ifndef skgpu_graphite_DawnTypes_DEFINED
9
9
  #define skgpu_graphite_DawnTypes_DEFINED
10
10
 
11
+ #include "include/core/SkSize.h"
11
12
  #include "include/gpu/graphite/GraphiteTypes.h"
13
+ #include "include/private/base/SkAPI.h"
14
+
12
15
  #include "webgpu/webgpu_cpp.h" // NO_G3_REWRITE
13
16
 
14
17
  namespace skgpu::graphite {
18
+ class BackendTexture;
19
+ class TextureInfo;
15
20
 
16
21
  struct DawnTextureInfo {
17
22
  uint32_t fSampleCount = 1;
18
23
  Mipmapped fMipmapped = Mipmapped::kNo;
19
24
 
20
25
  // wgpu::TextureDescriptor properties
21
- // `fFormat` for multiplanar formats corresponds to the plane TextureView's format.
22
26
  wgpu::TextureFormat fFormat = wgpu::TextureFormat::Undefined;
27
+ // `fViewFormat` for multiplanar formats corresponds to the plane TextureView's format.
28
+ wgpu::TextureFormat fViewFormat = wgpu::TextureFormat::Undefined;
23
29
  wgpu::TextureUsage fUsage = wgpu::TextureUsage::None;
24
30
  // TODO(b/308944094): Migrate aspect information to BackendTextureViews.
25
31
  wgpu::TextureAspect fAspect = wgpu::TextureAspect::All;
32
+ uint32_t fSlice = 0;
33
+
34
+ #if !defined(__EMSCRIPTEN__)
35
+ // The descriptor of the YCbCr info (if any) for this texture. Dawn's YCbCr
36
+ // sampling will be used for this texture if this info is set. Setting the
37
+ // info is supported only on Android and only if using Vulkan as the
38
+ // underlying GPU driver.
39
+ wgpu::YCbCrVkDescriptor fYcbcrVkDescriptor = {};
40
+ #endif
41
+
42
+ wgpu::TextureFormat getViewFormat() const {
43
+ return fViewFormat != wgpu::TextureFormat::Undefined ? fViewFormat : fFormat;
44
+ }
26
45
 
27
46
  DawnTextureInfo() = default;
28
- DawnTextureInfo(const wgpu::Texture& texture);
47
+
29
48
  DawnTextureInfo(uint32_t sampleCount,
30
49
  Mipmapped mipmapped,
31
- wgpu::TextureFormat viewFormat,
50
+ wgpu::TextureFormat format,
32
51
  wgpu::TextureUsage usage,
33
52
  wgpu::TextureAspect aspect)
53
+ : DawnTextureInfo(sampleCount,
54
+ mipmapped,
55
+ /*format=*/format,
56
+ /*viewFormat=*/format,
57
+ usage,
58
+ aspect,
59
+ /*slice=*/0) {}
60
+
61
+ DawnTextureInfo(uint32_t sampleCount,
62
+ Mipmapped mipmapped,
63
+ wgpu::TextureFormat format,
64
+ wgpu::TextureFormat viewFormat,
65
+ wgpu::TextureUsage usage,
66
+ wgpu::TextureAspect aspect,
67
+ uint32_t slice)
68
+ : fSampleCount(sampleCount)
69
+ , fMipmapped(mipmapped)
70
+ , fFormat(format)
71
+ , fViewFormat(viewFormat)
72
+ , fUsage(usage)
73
+ , fAspect(aspect)
74
+ , fSlice(slice) {}
75
+
76
+ #if !defined(__EMSCRIPTEN__)
77
+ DawnTextureInfo(uint32_t sampleCount,
78
+ Mipmapped mipmapped,
79
+ wgpu::TextureFormat format,
80
+ wgpu::TextureFormat viewFormat,
81
+ wgpu::TextureUsage usage,
82
+ wgpu::TextureAspect aspect,
83
+ uint32_t slice,
84
+ wgpu::YCbCrVkDescriptor ycbcrVkDescriptor)
34
85
  : fSampleCount(sampleCount)
35
86
  , fMipmapped(mipmapped)
36
- , fFormat(viewFormat)
87
+ , fFormat(format)
88
+ , fViewFormat(viewFormat)
37
89
  , fUsage(usage)
38
- , fAspect(aspect) {}
90
+ , fAspect(aspect)
91
+ , fSlice(slice)
92
+ , fYcbcrVkDescriptor(ycbcrVkDescriptor) {}
93
+ #endif
39
94
  };
40
95
 
41
- } // namespace skgpu::graphite
96
+ namespace TextureInfos {
97
+ SK_API TextureInfo MakeDawn(const DawnTextureInfo& dawnInfo);
98
+
99
+ SK_API bool GetDawnTextureInfo(const TextureInfo&, DawnTextureInfo*);
100
+ } // namespace TextureInfos
101
+
102
+ namespace BackendTextures {
103
+ // Create a BackendTexture from a WGPUTexture. Texture info will be queried from the texture.
104
+ //
105
+ // This is the recommended way of specifying a BackendTexture for Dawn. See the note below on
106
+ // the constructor that takes a WGPUTextureView for a fuller explanation.
107
+ //
108
+ // The BackendTexture will not call retain or release on the passed in WGPUTexture. Thus, the
109
+ // client must keep the WGPUTexture valid until they are no longer using the BackendTexture.
110
+ // However, any SkImage or SkSurface that wraps the BackendTexture *will* retain and release
111
+ // the WGPUTexture.
112
+ SK_API BackendTexture MakeDawn(WGPUTexture);
113
+
114
+ // Create a BackendTexture from a WGPUTexture. Texture planeDimensions, plane aspect and
115
+ // info have to be provided. This is intended to be used only when accessing a plane
116
+ // of a WGPUTexture.
117
+ //
118
+ // The BackendTexture will not call retain or release on the passed in WGPUTexture. Thus, the
119
+ // client must keep the WGPUTexture valid until they are no longer using the BackendTexture.
120
+ // However, any SkImage or SkSurface that wraps the BackendTexture *will* retain and release
121
+ // the WGPUTexture.
122
+ SK_API BackendTexture MakeDawn(SkISize planeDimensions, const DawnTextureInfo&, WGPUTexture);
123
+
124
+ // Create a BackendTexture from a WGPUTextureView. Texture dimensions and
125
+ // info have to be provided.
126
+ //
127
+ // Using a WGPUTextureView rather than a WGPUTexture is less effecient for operations that
128
+ // require buffer transfers to or from the texture (e.g. methods on graphite::Context that read
129
+ // pixels or SkSurface::writePixels). In such cases an intermediate copy to or from a
130
+ // WGPUTexture is required. Thus, it is recommended to use this functionality only for cases
131
+ // where a WGPUTexture is unavailable, in particular when using wgpu::SwapChain.
132
+ //
133
+ // The BackendTexture will not call retain or release on the passed in WGPUTextureView. Thus,
134
+ // the client must keep the WGPUTextureView valid until they are no longer using the
135
+ // BackendTexture. However, any SkImage or SkSurface that wraps the BackendTexture *will* retain
136
+ // and release the WGPUTextureView.
137
+ SK_API BackendTexture MakeDawn(SkISize dimensions,
138
+ const DawnTextureInfo& info,
139
+ WGPUTextureView textureView);
140
+
141
+ } // namespace BackendTextures
142
+
143
+ } // namespace skgpu::graphite
42
144
 
43
145
  #endif // skgpu_graphite_DawnTypes_DEFINED
44
146
 
@@ -8,7 +8,10 @@
8
8
  #ifndef skgpu_graphite_MtlBackendContext_DEFINED
9
9
  #define skgpu_graphite_MtlBackendContext_DEFINED
10
10
 
11
- #include "include/gpu/graphite/mtl/MtlGraphiteTypes.h"
11
+ #include "include/ports/SkCFObject.h"
12
+ #include "include/private/base/SkAPI.h"
13
+
14
+ #import <CoreFoundation/CoreFoundation.h>
12
15
 
13
16
  namespace skgpu::graphite {
14
17
 
@@ -8,15 +8,18 @@
8
8
  #ifndef skgpu_graphite_MtlGraphiteTypes_DEFINED
9
9
  #define skgpu_graphite_MtlGraphiteTypes_DEFINED
10
10
 
11
+ #include "include/core/SkTypes.h"
12
+
13
+ #if __OBJC__ // <Metal/Metal.h> only works when compiled for Objective C
14
+ #include "include/gpu/graphite/BackendTexture.h"
11
15
  #include "include/gpu/graphite/GraphiteTypes.h"
16
+ #include "include/gpu/graphite/TextureInfo.h"
12
17
  #include "include/ports/SkCFObject.h"
18
+ #include "include/private/base/SkAPI.h"
13
19
 
14
- ///////////////////////////////////////////////////////////////////////////////
15
-
16
- #ifdef __APPLE__
17
-
18
- #include <CoreFoundation/CoreFoundation.h>
19
- #include <TargetConditionals.h>
20
+ #import <CoreFoundation/CoreFoundation.h>
21
+ #import <Metal/Metal.h>
22
+ #import <TargetConditionals.h>
20
23
 
21
24
  #if TARGET_OS_SIMULATOR
22
25
  #define SK_API_AVAILABLE_CA_METAL_LAYER SK_API_AVAILABLE(macos(10.11), ios(13.0), tvos(13.0))
@@ -24,36 +27,24 @@
24
27
  #define SK_API_AVAILABLE_CA_METAL_LAYER SK_API_AVAILABLE(macos(10.11), ios(8.0), tvos(9.0))
25
28
  #endif // TARGET_OS_SIMULATOR
26
29
 
27
- #endif // __APPLE__
28
-
29
-
30
30
  namespace skgpu::graphite {
31
31
 
32
- /**
33
- * Declares typedefs for Metal types used in Graphite cpp code
34
- */
35
- using MtlPixelFormat = unsigned int;
36
- using MtlTextureUsage = unsigned int;
37
- using MtlStorageMode = unsigned int;
38
-
39
- struct MtlTextureInfo {
32
+ struct SK_API MtlTextureInfo {
40
33
  uint32_t fSampleCount = 1;
41
34
  skgpu::Mipmapped fMipmapped = skgpu::Mipmapped::kNo;
42
35
 
43
- // Since we aren't in an Obj-C header we can't directly use Mtl types here. Each of these can
44
- // cast to their mapped Mtl types list below.
45
- MtlPixelFormat fFormat = 0; // MTLPixelFormat fFormat = MTLPixelFormatInvalid;
46
- MtlTextureUsage fUsage = 0; // MTLTextureUsage fUsage = MTLTextureUsageUnknown;
47
- MtlStorageMode fStorageMode = 0; // MTLStorageMode fStorageMode = MTLStorageModeShared;
36
+ MTLPixelFormat fFormat = MTLPixelFormatInvalid;
37
+ MTLTextureUsage fUsage = MTLTextureUsageUnknown;
38
+ MTLStorageMode fStorageMode = MTLStorageModeShared;
48
39
  bool fFramebufferOnly = false;
49
40
 
50
41
  MtlTextureInfo() = default;
51
42
  MtlTextureInfo(CFTypeRef mtlTexture);
52
43
  MtlTextureInfo(uint32_t sampleCount,
53
44
  skgpu::Mipmapped mipmapped,
54
- MtlPixelFormat format,
55
- MtlTextureUsage usage,
56
- MtlStorageMode storageMode,
45
+ MTLPixelFormat format,
46
+ MTLTextureUsage usage,
47
+ MTLStorageMode storageMode,
57
48
  bool framebufferOnly)
58
49
  : fSampleCount(sampleCount)
59
50
  , fMipmapped(mipmapped)
@@ -63,6 +54,31 @@ struct MtlTextureInfo {
63
54
  , fFramebufferOnly(framebufferOnly) {}
64
55
  };
65
56
 
57
+ namespace TextureInfos {
58
+ SK_API TextureInfo MakeMetal(const MtlTextureInfo&);
59
+ SK_API TextureInfo MakeMetal(CFTypeRef mtlTexture);
60
+
61
+ SK_API bool GetMtlTextureInfo(const TextureInfo&, MtlTextureInfo*);
62
+ } // namespace TextureInfos
63
+
64
+ namespace BackendTextures {
65
+ // The BackendTexture will not call retain or release on the passed in CFTypeRef. Thus the
66
+ // client must keep the CFTypeRef valid until they are no longer using the BackendTexture.
67
+ SK_API BackendTexture MakeMetal(SkISize dimensions, CFTypeRef mtlTexture);
68
+
69
+ SK_API CFTypeRef GetMtlTexture(const BackendTexture&);
70
+ } // namespace BackendTextures
71
+
72
+ namespace BackendSemaphores {
73
+ // TODO(b/286088355) Determine creator's responsibility for setting refcnt.
74
+ SK_API BackendSemaphore MakeMetal(CFTypeRef mtlEvent, uint64_t value);
75
+
76
+ SK_API CFTypeRef GetMtlEvent(const BackendSemaphore&);
77
+ SK_API uint64_t GetMtlValue(const BackendSemaphore&);
78
+ } // namespace BackendSemaphores
79
+
66
80
  } // namespace skgpu::graphite
67
81
 
82
+ #endif // __OBJC__
83
+
68
84
  #endif // skgpu_graphite_MtlGraphiteTypes_DEFINED