@shopify/react-native-skia 0.1.158 → 0.1.159

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 (403) hide show
  1. package/android/CMakeLists.txt +35 -11
  2. package/android/build.gradle +21 -25
  3. package/android/cpp/jni/JniLoad.cpp +2 -0
  4. package/android/cpp/jni/include/JniSkiaDomView.h +89 -0
  5. package/android/cpp/rnskia-android/SkiaOpenGLRenderer.cpp +4 -3
  6. package/android/cpp/rnskia-android/SkiaOpenGLRenderer.h +4 -3
  7. package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaPackage.java +2 -1
  8. package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java +45 -0
  9. package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomViewManager.java +64 -0
  10. package/cpp/api/JsiSkHostObjects.h +6 -0
  11. package/cpp/api/JsiSkImageFilterFactory.h +1 -1
  12. package/cpp/api/JsiSkPaint.h +9 -2
  13. package/cpp/api/JsiSkPath.h +1 -0
  14. package/cpp/api/JsiSkRuntimeEffect.h +36 -36
  15. package/cpp/jsi/JsiHostObject.cpp +16 -28
  16. package/cpp/jsi/JsiHostObject.h +127 -7
  17. package/cpp/jsi/JsiValue.cpp +346 -0
  18. package/cpp/jsi/JsiValue.h +222 -0
  19. package/cpp/jsi/JsiValueWrapper.h +33 -5
  20. package/cpp/rnskia/RNSkDomView.cpp +220 -0
  21. package/cpp/rnskia/RNSkDomView.h +140 -0
  22. package/cpp/rnskia/RNSkJsView.cpp +0 -4
  23. package/cpp/rnskia/RNSkJsView.h +6 -4
  24. package/cpp/rnskia/RNSkManager.cpp +7 -0
  25. package/cpp/rnskia/RNSkPictureView.h +5 -8
  26. package/cpp/rnskia/RNSkView.h +113 -5
  27. package/cpp/rnskia/dom/JsiDomApi.h +167 -0
  28. package/cpp/rnskia/dom/base/BaseNodeProp.h +72 -0
  29. package/cpp/rnskia/dom/base/DerivedNodeProp.h +187 -0
  30. package/cpp/rnskia/dom/base/DrawingContext.cpp +227 -0
  31. package/cpp/rnskia/dom/base/DrawingContext.h +136 -0
  32. package/cpp/rnskia/dom/base/JsiDependencyManager.h +294 -0
  33. package/cpp/rnskia/dom/base/JsiDomDeclarationNode.h +176 -0
  34. package/cpp/rnskia/dom/base/JsiDomDrawingNode.h +50 -0
  35. package/cpp/rnskia/dom/base/JsiDomNode.h +361 -0
  36. package/cpp/rnskia/dom/base/JsiDomRenderNode.h +267 -0
  37. package/cpp/rnskia/dom/base/NodeProp.h +130 -0
  38. package/cpp/rnskia/dom/base/NodePropsContainer.h +119 -0
  39. package/cpp/rnskia/dom/nodes/JsiBackdropFilterNode.h +38 -0
  40. package/cpp/rnskia/dom/nodes/JsiBlendNode.h +112 -0
  41. package/cpp/rnskia/dom/nodes/JsiBlurMaskNode.h +78 -0
  42. package/cpp/rnskia/dom/nodes/JsiBoxNode.h +104 -0
  43. package/cpp/rnskia/dom/nodes/JsiBoxShadowNode.h +33 -0
  44. package/cpp/rnskia/dom/nodes/JsiCircleNode.h +38 -0
  45. package/cpp/rnskia/dom/nodes/JsiColorFilterNodes.h +192 -0
  46. package/cpp/rnskia/dom/nodes/JsiCustomDrawingNode.h +123 -0
  47. package/cpp/rnskia/dom/nodes/JsiDiffRectNode.h +42 -0
  48. package/cpp/rnskia/dom/nodes/JsiFillNode.h +22 -0
  49. package/cpp/rnskia/dom/nodes/JsiGlyphsNode.h +56 -0
  50. package/cpp/rnskia/dom/nodes/JsiGroupNode.h +26 -0
  51. package/cpp/rnskia/dom/nodes/JsiImageFilterNodes.h +415 -0
  52. package/cpp/rnskia/dom/nodes/JsiImageNode.h +34 -0
  53. package/cpp/rnskia/dom/nodes/JsiImageSvgNode.h +44 -0
  54. package/cpp/rnskia/dom/nodes/JsiLayerNode.h +64 -0
  55. package/cpp/rnskia/dom/nodes/JsiLineNode.h +43 -0
  56. package/cpp/rnskia/dom/nodes/JsiOvalNode.h +34 -0
  57. package/cpp/rnskia/dom/nodes/JsiPaintNode.h +77 -0
  58. package/cpp/rnskia/dom/nodes/JsiPatchNode.h +54 -0
  59. package/cpp/rnskia/dom/nodes/JsiPathEffectNodes.h +315 -0
  60. package/cpp/rnskia/dom/nodes/JsiPathNode.h +181 -0
  61. package/cpp/rnskia/dom/nodes/JsiPictureNode.h +32 -0
  62. package/cpp/rnskia/dom/nodes/JsiPointsNode.h +51 -0
  63. package/cpp/rnskia/dom/nodes/JsiRRectNode.h +34 -0
  64. package/cpp/rnskia/dom/nodes/JsiRectNode.h +34 -0
  65. package/cpp/rnskia/dom/nodes/JsiShaderNodes.h +517 -0
  66. package/cpp/rnskia/dom/nodes/JsiTextBlobNode.h +47 -0
  67. package/cpp/rnskia/dom/nodes/JsiTextNode.h +54 -0
  68. package/cpp/rnskia/dom/nodes/JsiTextPathNode.h +32 -0
  69. package/cpp/rnskia/dom/nodes/JsiVerticesNode.h +43 -0
  70. package/cpp/rnskia/dom/props/BezierProps.h +63 -0
  71. package/cpp/rnskia/dom/props/BlendModeProp.h +101 -0
  72. package/cpp/rnskia/dom/props/BoxShadowProps.h +61 -0
  73. package/cpp/rnskia/dom/props/CircleProp.h +46 -0
  74. package/cpp/rnskia/dom/props/ClipProp.h +62 -0
  75. package/cpp/rnskia/dom/props/ColorProp.h +80 -0
  76. package/cpp/rnskia/dom/props/DrawingProp.h +33 -0
  77. package/cpp/rnskia/dom/props/FontProp.h +34 -0
  78. package/cpp/rnskia/dom/props/GlyphsProp.h +53 -0
  79. package/cpp/rnskia/dom/props/ImageProps.h +173 -0
  80. package/cpp/rnskia/dom/props/LayerProp.h +50 -0
  81. package/cpp/rnskia/dom/props/MatrixProp.h +33 -0
  82. package/cpp/rnskia/dom/props/NumbersProp.h +63 -0
  83. package/cpp/rnskia/dom/props/PaintProps.h +172 -0
  84. package/cpp/rnskia/dom/props/PathProp.h +55 -0
  85. package/cpp/rnskia/dom/props/PictureProp.h +38 -0
  86. package/cpp/rnskia/dom/props/PointProp.h +72 -0
  87. package/cpp/rnskia/dom/props/PointsProp.h +83 -0
  88. package/cpp/rnskia/dom/props/RRectProp.h +134 -0
  89. package/cpp/rnskia/dom/props/RadiusProp.h +43 -0
  90. package/cpp/rnskia/dom/props/RectProp.h +118 -0
  91. package/cpp/rnskia/dom/props/StrokeProps.h +75 -0
  92. package/cpp/rnskia/dom/props/SvgProp.h +37 -0
  93. package/cpp/rnskia/dom/props/TextBlobProp.h +128 -0
  94. package/cpp/rnskia/dom/props/TileModeProp.h +50 -0
  95. package/cpp/rnskia/dom/props/TransformProp.h +80 -0
  96. package/cpp/rnskia/dom/props/TransformsProps.h +68 -0
  97. package/cpp/rnskia/dom/props/UniformsProp.h +194 -0
  98. package/cpp/rnskia/dom/props/VertexModeProp.h +47 -0
  99. package/cpp/rnskia/dom/props/VerticesProps.h +67 -0
  100. package/cpp/rnskia/values/RNSkReadonlyValue.h +13 -4
  101. package/cpp/skia/include/android/SkAndroidFrameworkUtils.h +35 -1
  102. package/cpp/skia/include/codec/SkAndroidCodec.h +17 -1
  103. package/cpp/skia/include/codec/SkCodec.h +8 -5
  104. package/cpp/skia/include/core/SkAnnotation.h +2 -0
  105. package/cpp/skia/include/core/SkBitmap.h +52 -1
  106. package/cpp/skia/include/core/SkBlendMode.h +2 -0
  107. package/cpp/skia/include/core/SkCanvas.h +52 -31
  108. package/cpp/skia/include/core/SkCapabilities.h +44 -0
  109. package/cpp/skia/include/core/SkColor.h +7 -0
  110. package/cpp/skia/include/core/SkColorFilter.h +37 -0
  111. package/cpp/skia/include/core/SkColorSpace.h +1 -1
  112. package/cpp/skia/include/core/SkFont.h +4 -0
  113. package/cpp/skia/include/core/SkFontMgr.h +3 -0
  114. package/cpp/skia/include/core/SkGraphics.h +9 -0
  115. package/cpp/skia/include/core/SkImage.h +77 -17
  116. package/cpp/skia/include/core/SkImageEncoder.h +5 -3
  117. package/cpp/skia/include/core/SkImageGenerator.h +27 -17
  118. package/cpp/skia/include/core/SkM44.h +1 -0
  119. package/cpp/skia/include/core/SkMesh.h +120 -34
  120. package/cpp/skia/include/core/SkMilestone.h +1 -1
  121. package/cpp/skia/include/core/SkOverdrawCanvas.h +2 -1
  122. package/cpp/skia/include/core/SkPaint.h +15 -2
  123. package/cpp/skia/include/core/SkPath.h +4 -0
  124. package/cpp/skia/include/core/SkPathBuilder.h +1 -1
  125. package/cpp/skia/include/core/SkPicture.h +0 -3
  126. package/cpp/skia/include/core/SkPictureRecorder.h +0 -2
  127. package/cpp/skia/include/core/SkPixmap.h +19 -0
  128. package/cpp/skia/include/core/SkRasterHandleAllocator.h +3 -1
  129. package/cpp/skia/include/core/SkRect.h +11 -4
  130. package/cpp/skia/include/core/SkRefCnt.h +13 -1
  131. package/cpp/skia/include/core/SkRegion.h +6 -0
  132. package/cpp/skia/include/core/SkSamplingOptions.h +8 -6
  133. package/cpp/skia/include/core/SkScalar.h +6 -25
  134. package/cpp/skia/include/core/SkShader.h +20 -12
  135. package/cpp/skia/include/core/SkSpan.h +51 -19
  136. package/cpp/skia/include/core/SkStream.h +2 -2
  137. package/cpp/skia/include/core/SkString.h +11 -3
  138. package/cpp/skia/include/core/SkSurface.h +85 -8
  139. package/cpp/skia/include/core/SkTextBlob.h +5 -2
  140. package/cpp/skia/include/core/SkTypes.h +11 -10
  141. package/cpp/skia/include/docs/SkPDFDocument.h +0 -5
  142. package/cpp/skia/include/effects/Sk1DPathEffect.h +6 -1
  143. package/cpp/skia/include/effects/Sk2DPathEffect.h +4 -1
  144. package/cpp/skia/include/effects/SkColorMatrix.h +1 -0
  145. package/cpp/skia/include/effects/SkColorMatrixFilter.h +5 -8
  146. package/cpp/skia/include/effects/SkCornerPathEffect.h +5 -1
  147. package/cpp/skia/include/effects/SkDashPathEffect.h +5 -1
  148. package/cpp/skia/include/effects/SkGradientShader.h +68 -38
  149. package/cpp/skia/include/effects/SkHighContrastFilter.h +5 -1
  150. package/cpp/skia/include/effects/SkImageFilters.h +5 -4
  151. package/cpp/skia/include/effects/SkLumaColorFilter.h +4 -1
  152. package/cpp/skia/include/effects/SkOpPathEffect.h +6 -2
  153. package/cpp/skia/include/effects/SkOverdrawColorFilter.h +5 -2
  154. package/cpp/skia/include/effects/SkRuntimeEffect.h +54 -62
  155. package/cpp/skia/include/effects/SkShaderMaskFilter.h +3 -1
  156. package/cpp/skia/include/effects/SkTableColorFilter.h +8 -21
  157. package/cpp/skia/include/effects/SkTableMaskFilter.h +5 -1
  158. package/cpp/skia/include/effects/SkTrimPathEffect.h +5 -1
  159. package/cpp/skia/include/encode/SkEncoder.h +17 -0
  160. package/cpp/skia/include/encode/SkWebpEncoder.h +17 -0
  161. package/cpp/skia/include/gpu/GpuTypes.h +18 -0
  162. package/cpp/skia/include/gpu/GrBackendSurface.h +38 -17
  163. package/cpp/skia/include/gpu/GrBackendSurfaceMutableState.h +6 -71
  164. package/cpp/skia/include/gpu/GrContextOptions.h +1 -1
  165. package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +10 -9
  166. package/cpp/skia/include/gpu/GrDirectContext.h +42 -22
  167. package/cpp/skia/include/gpu/GrRecordingContext.h +6 -3
  168. package/cpp/skia/include/gpu/GrTypes.h +11 -11
  169. package/cpp/skia/include/gpu/MutableTextureState.h +122 -0
  170. package/cpp/skia/include/gpu/gl/GrGLFunctions.h +1 -0
  171. package/cpp/skia/include/gpu/gl/GrGLInterface.h +1 -0
  172. package/cpp/skia/include/gpu/graphite/BackendTexture.h +7 -0
  173. package/cpp/skia/include/gpu/graphite/CombinationBuilder.h +195 -0
  174. package/cpp/skia/include/gpu/graphite/Context.h +47 -55
  175. package/cpp/skia/include/gpu/graphite/ContextOptions.h +85 -0
  176. package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +1 -17
  177. package/cpp/skia/include/gpu/graphite/ImageProvider.h +61 -0
  178. package/cpp/skia/include/gpu/graphite/Recorder.h +87 -8
  179. package/cpp/skia/include/gpu/graphite/Recording.h +19 -9
  180. package/cpp/skia/include/gpu/graphite/TextureInfo.h +40 -8
  181. package/cpp/skia/include/gpu/graphite/dawn/DawnBackendContext.h +25 -0
  182. package/cpp/skia/include/gpu/graphite/mtl/MtlBackendContext.h +3 -2
  183. package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +69 -0
  184. package/cpp/skia/include/gpu/mtl/MtlMemoryAllocator.h +39 -0
  185. package/cpp/skia/include/gpu/vk/GrVkBackendContext.h +21 -19
  186. package/cpp/skia/include/gpu/vk/GrVkExtensions.h +2 -50
  187. package/cpp/skia/include/gpu/vk/GrVkMemoryAllocator.h +2 -127
  188. package/cpp/skia/include/gpu/vk/GrVkTypes.h +5 -43
  189. package/cpp/skia/include/gpu/vk/VulkanBackendContext.h +46 -0
  190. package/cpp/skia/include/gpu/vk/VulkanExtensions.h +67 -0
  191. package/cpp/skia/include/gpu/vk/VulkanMemoryAllocator.h +116 -0
  192. package/cpp/skia/include/gpu/vk/VulkanTypes.h +59 -0
  193. package/cpp/skia/include/pathops/SkPathOps.h +1 -1
  194. package/cpp/skia/include/private/SkColorData.h +10 -40
  195. package/cpp/skia/include/private/SkEncodedInfo.h +9 -3
  196. package/cpp/skia/include/private/SkFloatingPoint.h +9 -6
  197. package/cpp/skia/include/private/SkHalf.h +5 -52
  198. package/cpp/skia/include/private/SkMacros.h +1 -1
  199. package/cpp/skia/include/private/SkMalloc.h +4 -0
  200. package/cpp/skia/include/private/SkPathRef.h +10 -10
  201. package/cpp/skia/include/private/SkSLModifiers.h +59 -23
  202. package/cpp/skia/include/private/SkSLProgramKind.h +1 -0
  203. package/cpp/skia/include/private/SkSLSymbol.h +7 -3
  204. package/cpp/skia/include/private/SkStringView.h +4 -0
  205. package/cpp/skia/include/private/SkTArray.h +21 -7
  206. package/cpp/skia/include/private/SkTDArray.h +173 -285
  207. package/cpp/skia/include/private/SkTHash.h +33 -32
  208. package/cpp/skia/include/private/SkTemplates.h +24 -26
  209. package/cpp/skia/include/private/SkVx.h +218 -135
  210. package/cpp/skia/include/private/chromium/GrSlug.h +3 -65
  211. package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +6 -3
  212. package/cpp/skia/include/private/chromium/Slug.h +76 -0
  213. package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +6 -1
  214. package/cpp/skia/include/private/gpu/ganesh/GrVkTypesPriv.h +5 -39
  215. package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +63 -0
  216. package/cpp/skia/include/{gpu/vk/GrVkVulkan.h → private/gpu/vk/SkiaVulkan.h} +2 -2
  217. package/cpp/skia/include/private/gpu/vk/VulkanTypesPriv.h +57 -0
  218. package/cpp/skia/include/sksl/DSL.h +0 -1
  219. package/cpp/skia/include/sksl/DSLBlock.h +4 -18
  220. package/cpp/skia/include/sksl/DSLCase.h +2 -8
  221. package/cpp/skia/include/sksl/DSLCore.h +8 -15
  222. package/cpp/skia/include/sksl/DSLExpression.h +51 -142
  223. package/cpp/skia/include/sksl/DSLFunction.h +7 -15
  224. package/cpp/skia/include/sksl/DSLModifiers.h +5 -2
  225. package/cpp/skia/include/sksl/DSLStatement.h +4 -39
  226. package/cpp/skia/include/sksl/DSLSymbols.h +1 -11
  227. package/cpp/skia/include/sksl/DSLType.h +20 -12
  228. package/cpp/skia/include/sksl/DSLVar.h +56 -146
  229. package/cpp/skia/include/sksl/SkSLErrorReporter.h +2 -15
  230. package/cpp/skia/include/sksl/SkSLOperator.h +62 -59
  231. package/cpp/skia/include/sksl/SkSLPosition.h +2 -0
  232. package/cpp/skia/include/sksl/SkSLVersion.h +27 -0
  233. package/cpp/skia/include/svg/SkSVGCanvas.h +1 -0
  234. package/cpp/skia/include/utils/SkAnimCodecPlayer.h +1 -1
  235. package/cpp/skia/include/utils/SkBase64.h +2 -0
  236. package/cpp/skia/include/utils/SkCustomTypeface.h +24 -11
  237. package/cpp/skia/include/utils/SkEventTracer.h +12 -1
  238. package/cpp/skia/include/utils/SkNWayCanvas.h +11 -4
  239. package/cpp/skia/include/utils/SkPaintFilterCanvas.h +9 -4
  240. package/cpp/skia/include/utils/SkParse.h +3 -0
  241. package/cpp/skia/include/utils/SkShadowUtils.h +2 -0
  242. package/cpp/skia/include/utils/SkTextUtils.h +2 -1
  243. package/cpp/skia/{include/third_party → modules}/skcms/skcms.h +10 -0
  244. package/cpp/skia/modules/skcms/skcms_internal.h +56 -0
  245. package/cpp/skia/modules/skcms/src/Transform_inl.h +1609 -0
  246. package/cpp/skia/modules/skparagraph/include/DartTypes.h +153 -0
  247. package/cpp/skia/modules/skparagraph/include/FontArguments.h +46 -0
  248. package/cpp/skia/modules/skparagraph/include/FontCollection.h +84 -0
  249. package/cpp/skia/modules/skparagraph/include/Metrics.h +98 -0
  250. package/cpp/skia/modules/skparagraph/include/Paragraph.h +111 -0
  251. package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +69 -0
  252. package/cpp/skia/modules/skparagraph/include/ParagraphCache.h +77 -0
  253. package/cpp/skia/modules/skparagraph/include/ParagraphStyle.h +143 -0
  254. package/cpp/skia/modules/skparagraph/include/TextShadow.h +30 -0
  255. package/cpp/skia/modules/skparagraph/include/TextStyle.h +352 -0
  256. package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +81 -0
  257. package/cpp/skia/modules/svg/include/SkSVGAttributeParser.h +1 -1
  258. package/cpp/skia/modules/svg/include/SkSVGTypes.h +3 -3
  259. package/cpp/skia/src/core/SkLRUCache.h +126 -0
  260. package/cpp/skia/src/core/SkTInternalLList.h +302 -0
  261. package/cpp/utils/RNSkTimingInfo.h +1 -0
  262. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.h +15 -4
  263. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +40 -54
  264. package/ios/RNSkia-iOS/SkiaDomViewManager.h +8 -0
  265. package/ios/RNSkia-iOS/SkiaDomViewManager.mm +51 -0
  266. package/lib/commonjs/dom/nodes/JsiSkDOM.js +56 -56
  267. package/lib/commonjs/dom/nodes/JsiSkDOM.js.map +1 -1
  268. package/lib/commonjs/dom/nodes/RenderNode.js +1 -1
  269. package/lib/commonjs/dom/nodes/RenderNode.js.map +1 -1
  270. package/lib/commonjs/renderer/Canvas.js +19 -63
  271. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  272. package/lib/commonjs/renderer/DependencyManager.js +0 -5
  273. package/lib/commonjs/renderer/DependencyManager.js.map +1 -1
  274. package/lib/commonjs/renderer/HostComponents.js.map +1 -1
  275. package/lib/commonjs/renderer/useCanvas.js +4 -18
  276. package/lib/commonjs/renderer/useCanvas.js.map +1 -1
  277. package/lib/commonjs/views/SkiaBaseWebView.js +7 -0
  278. package/lib/commonjs/views/SkiaBaseWebView.js.map +1 -1
  279. package/lib/commonjs/views/SkiaDomView.js +152 -0
  280. package/lib/commonjs/views/SkiaDomView.js.map +1 -0
  281. package/lib/commonjs/views/SkiaDomView.web.js +55 -0
  282. package/lib/commonjs/views/SkiaDomView.web.js.map +1 -0
  283. package/lib/commonjs/views/SkiaPictureView.js +16 -2
  284. package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
  285. package/lib/commonjs/views/SkiaView.js +17 -2
  286. package/lib/commonjs/views/SkiaView.js.map +1 -1
  287. package/lib/commonjs/views/index.js +13 -0
  288. package/lib/commonjs/views/index.js.map +1 -1
  289. package/lib/commonjs/views/types.js.map +1 -1
  290. package/lib/module/dom/nodes/JsiSkDOM.js +56 -56
  291. package/lib/module/dom/nodes/JsiSkDOM.js.map +1 -1
  292. package/lib/module/dom/nodes/RenderNode.js +1 -1
  293. package/lib/module/dom/nodes/RenderNode.js.map +1 -1
  294. package/lib/module/renderer/Canvas.js +20 -64
  295. package/lib/module/renderer/Canvas.js.map +1 -1
  296. package/lib/module/renderer/DependencyManager.js +0 -5
  297. package/lib/module/renderer/DependencyManager.js.map +1 -1
  298. package/lib/module/renderer/HostComponents.js.map +1 -1
  299. package/lib/module/renderer/useCanvas.js +2 -13
  300. package/lib/module/renderer/useCanvas.js.map +1 -1
  301. package/lib/module/views/SkiaBaseWebView.js +7 -0
  302. package/lib/module/views/SkiaBaseWebView.js.map +1 -1
  303. package/lib/module/views/SkiaDomView.js +128 -0
  304. package/lib/module/views/SkiaDomView.js.map +1 -0
  305. package/lib/module/views/SkiaDomView.web.js +41 -0
  306. package/lib/module/views/SkiaDomView.web.js.map +1 -0
  307. package/lib/module/views/SkiaPictureView.js +14 -2
  308. package/lib/module/views/SkiaPictureView.js.map +1 -1
  309. package/lib/module/views/SkiaView.js +15 -2
  310. package/lib/module/views/SkiaView.js.map +1 -1
  311. package/lib/module/views/index.js +1 -0
  312. package/lib/module/views/index.js.map +1 -1
  313. package/lib/module/views/types.js.map +1 -1
  314. package/lib/typescript/src/dom/nodes/JsiSkDOM.d.ts +57 -64
  315. package/lib/typescript/src/renderer/Canvas.d.ts +5 -8
  316. package/lib/typescript/src/renderer/DependencyManager.d.ts +0 -2
  317. package/lib/typescript/src/renderer/HostComponents.d.ts +66 -3
  318. package/lib/typescript/src/renderer/useCanvas.d.ts +0 -6
  319. package/lib/typescript/src/views/SkiaBaseWebView.d.ts +4 -0
  320. package/lib/typescript/src/views/SkiaDomView.d.ts +31 -0
  321. package/lib/typescript/src/views/SkiaDomView.web.d.ts +7 -0
  322. package/lib/typescript/src/views/index.d.ts +1 -0
  323. package/lib/typescript/src/views/types.d.ts +12 -2
  324. package/libs/android/arm64-v8a/libskia.a +0 -0
  325. package/libs/android/arm64-v8a/libskottie.a +0 -0
  326. package/libs/android/arm64-v8a/libskparagraph.a +0 -0
  327. package/libs/android/arm64-v8a/libsksg.a +0 -0
  328. package/libs/android/arm64-v8a/libskshaper.a +0 -0
  329. package/libs/android/arm64-v8a/libskunicode.a +0 -0
  330. package/libs/android/arm64-v8a/libsvg.a +0 -0
  331. package/libs/android/armeabi-v7a/libskia.a +0 -0
  332. package/libs/android/armeabi-v7a/libskottie.a +0 -0
  333. package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
  334. package/libs/android/armeabi-v7a/libsksg.a +0 -0
  335. package/libs/android/armeabi-v7a/libskshaper.a +0 -0
  336. package/libs/android/armeabi-v7a/libskunicode.a +0 -0
  337. package/libs/android/armeabi-v7a/libsvg.a +0 -0
  338. package/libs/android/x86/libskia.a +0 -0
  339. package/libs/android/x86/libskottie.a +0 -0
  340. package/libs/android/x86/libskparagraph.a +0 -0
  341. package/libs/android/x86/libsksg.a +0 -0
  342. package/libs/android/x86/libskshaper.a +0 -0
  343. package/libs/android/x86/libskunicode.a +0 -0
  344. package/libs/android/x86/libsvg.a +0 -0
  345. package/libs/android/x86_64/libskia.a +0 -0
  346. package/libs/android/x86_64/libskottie.a +0 -0
  347. package/libs/android/x86_64/libskparagraph.a +0 -0
  348. package/libs/android/x86_64/libsksg.a +0 -0
  349. package/libs/android/x86_64/libskshaper.a +0 -0
  350. package/libs/android/x86_64/libskunicode.a +0 -0
  351. package/libs/android/x86_64/libsvg.a +0 -0
  352. package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  353. package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  354. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  355. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  356. package/libs/ios/libskparagraph.xcframework/Info.plist +42 -0
  357. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  358. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  359. package/libs/ios/libsksg.xcframework/Info.plist +5 -5
  360. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  361. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  362. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  363. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  364. package/libs/ios/libskunicode.xcframework/Info.plist +42 -0
  365. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
  366. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
  367. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  368. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  369. package/package.json +5 -3
  370. package/react-native-skia.podspec +3 -1
  371. package/src/dom/nodes/JsiSkDOM.ts +170 -56
  372. package/src/dom/nodes/RenderNode.ts +1 -1
  373. package/src/renderer/Canvas.tsx +32 -56
  374. package/src/renderer/DependencyManager.tsx +0 -5
  375. package/src/renderer/HostComponents.ts +152 -1
  376. package/src/renderer/useCanvas.ts +1 -15
  377. package/src/views/SkiaBaseWebView.tsx +4 -0
  378. package/src/views/SkiaDomView.tsx +120 -0
  379. package/src/views/SkiaDomView.web.tsx +37 -0
  380. package/src/views/SkiaPictureView.tsx +10 -2
  381. package/src/views/SkiaView.tsx +11 -3
  382. package/src/views/index.ts +1 -0
  383. package/src/views/types.ts +19 -2
  384. package/cpp/jsi/JsiSimpleValueWrapper.h +0 -99
  385. package/cpp/skia/include/c/sk_canvas.h +0 -159
  386. package/cpp/skia/include/c/sk_colorspace.h +0 -25
  387. package/cpp/skia/include/c/sk_data.h +0 -65
  388. package/cpp/skia/include/c/sk_image.h +0 -71
  389. package/cpp/skia/include/c/sk_imageinfo.h +0 -62
  390. package/cpp/skia/include/c/sk_maskfilter.h +0 -47
  391. package/cpp/skia/include/c/sk_matrix.h +0 -49
  392. package/cpp/skia/include/c/sk_paint.h +0 -145
  393. package/cpp/skia/include/c/sk_path.h +0 -102
  394. package/cpp/skia/include/c/sk_picture.h +0 -70
  395. package/cpp/skia/include/c/sk_shader.h +0 -143
  396. package/cpp/skia/include/c/sk_surface.h +0 -73
  397. package/cpp/skia/include/c/sk_types.h +0 -278
  398. package/cpp/skia/include/gpu/graphite/SkStuff.h +0 -47
  399. package/cpp/skia/include/private/SkNx.h +0 -430
  400. package/cpp/skia/include/private/SkNx_neon.h +0 -713
  401. package/cpp/skia/include/private/SkNx_sse.h +0 -823
  402. package/cpp/skia/include/sksl/DSLRuntimeEffects.h +0 -32
  403. package/cpp/skia/include/sksl/DSLWrapper.h +0 -77
@@ -0,0 +1,122 @@
1
+ /*
2
+ * Copyright 2022 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 skgpu_MutableTextureState_DEFINED
9
+ #define skgpu_MutableTextureState_DEFINED
10
+
11
+ #include "include/gpu/GpuTypes.h"
12
+
13
+ #ifdef SK_VULKAN
14
+ #include "include/private/gpu/vk/VulkanTypesPriv.h"
15
+ #endif
16
+
17
+ #include <new>
18
+
19
+ class GrVkGpu;
20
+
21
+ namespace skgpu {
22
+
23
+ /**
24
+ * Since Skia and clients can both modify gpu textures and their connected state, Skia needs a way
25
+ * for clients to inform us if they have modifiend any of this state. In order to not need setters
26
+ * for every single API and state, we use this class to be a generic wrapper around all the mutable
27
+ * state. This class is used for calls that inform Skia of these texture/image state changes by the
28
+ * client as well as for requesting state changes to be done by Skia. The backend specific state
29
+ * that is wrapped by this class are:
30
+ *
31
+ * Vulkan: VkImageLayout and QueueFamilyIndex
32
+ */
33
+ class SK_API MutableTextureState {
34
+ public:
35
+ MutableTextureState() {}
36
+
37
+ #ifdef SK_VULKAN
38
+ MutableTextureState(VkImageLayout layout, uint32_t queueFamilyIndex)
39
+ : fVkState(layout, queueFamilyIndex)
40
+ , fBackend(BackendApi::kVulkan)
41
+ , fIsValid(true) {}
42
+ #endif
43
+
44
+ MutableTextureState(const MutableTextureState& that)
45
+ : fBackend(that.fBackend), fIsValid(that.fIsValid) {
46
+ if (!fIsValid) {
47
+ return;
48
+ }
49
+ switch (fBackend) {
50
+ case BackendApi::kVulkan:
51
+ #ifdef SK_VULKAN
52
+ SkASSERT(that.fBackend == BackendApi::kVulkan);
53
+ fVkState = that.fVkState;
54
+ #endif
55
+ break;
56
+ default:
57
+ (void)that;
58
+ SkUNREACHABLE;
59
+ }
60
+ }
61
+
62
+ MutableTextureState& operator=(const MutableTextureState& that) {
63
+ if (this != &that) {
64
+ this->~MutableTextureState();
65
+ new (this) MutableTextureState(that);
66
+ }
67
+ return *this;
68
+ }
69
+
70
+ #ifdef SK_VULKAN
71
+ // If this class is not Vulkan backed it will return value of VK_IMAGE_LAYOUT_UNDEFINED.
72
+ // Otherwise it will return the VkImageLayout.
73
+ VkImageLayout getVkImageLayout() const {
74
+ if (this->isValid() && fBackend != BackendApi::kVulkan) {
75
+ return VK_IMAGE_LAYOUT_UNDEFINED;
76
+ }
77
+ return fVkState.getImageLayout();
78
+ }
79
+
80
+ // If this class is not Vulkan backed it will return value of VK_QUEUE_FAMILY_IGNORED.
81
+ // Otherwise it will return the VkImageLayout.
82
+ uint32_t getQueueFamilyIndex() const {
83
+ if (this->isValid() && fBackend != BackendApi::kVulkan) {
84
+ return VK_QUEUE_FAMILY_IGNORED;
85
+ }
86
+ return fVkState.getQueueFamilyIndex();
87
+ }
88
+ #endif
89
+
90
+ BackendApi backend() const { return fBackend; }
91
+
92
+ // Returns true if the backend mutable state has been initialized.
93
+ bool isValid() const { return fIsValid; }
94
+
95
+ private:
96
+ friend class MutableTextureStateRef;
97
+ friend class ::GrVkGpu;
98
+
99
+ #ifdef SK_VULKAN
100
+ void setVulkanState(VkImageLayout layout, uint32_t queueFamilyIndex) {
101
+ SkASSERT(!this->isValid() || fBackend == BackendApi::kVulkan);
102
+ fVkState.setImageLayout(layout);
103
+ fVkState.setQueueFamilyIndex(queueFamilyIndex);
104
+ fBackend = BackendApi::kVulkan;
105
+ fIsValid = true;
106
+ }
107
+ #endif
108
+
109
+ union {
110
+ char fPlaceholder;
111
+ #ifdef SK_VULKAN
112
+ VulkanMutableTextureState fVkState;
113
+ #endif
114
+ };
115
+
116
+ BackendApi fBackend = BackendApi::kMock;
117
+ bool fIsValid = false;
118
+ };
119
+
120
+ } // namespace skgpu
121
+
122
+ #endif // skgpu_MutableTextureState_DEFINED
@@ -47,6 +47,7 @@ using GrGLColorMaskFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLboolean red, GrGLboolea
47
47
  using GrGLCompileShaderFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint shader);
48
48
  using GrGLCompressedTexImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLenum internalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLsizei imageSize, const GrGLvoid* data);
49
49
  using GrGLCompressedTexSubImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLsizei imageSize, const GrGLvoid* data);
50
+ using GrGLCopyBufferSubDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum readTargt, GrGLenum writeTarget, GrGLintptr readOffset, GrGLintptr writeOffset, GrGLsizeiptr size);
50
51
  using GrGLCopyTexSubImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height);
51
52
  using GrGLCreateProgramFn = GrGLuint GR_GL_FUNCTION_TYPE();
52
53
  using GrGLCreateShaderFn = GrGLuint GR_GL_FUNCTION_TYPE(GrGLenum type);
@@ -119,6 +119,7 @@ public:
119
119
  GrGLFunction<GrGLCompileShaderFn> fCompileShader;
120
120
  GrGLFunction<GrGLCompressedTexImage2DFn> fCompressedTexImage2D;
121
121
  GrGLFunction<GrGLCompressedTexSubImage2DFn> fCompressedTexSubImage2D;
122
+ GrGLFunction<GrGLCopyBufferSubDataFn> fCopyBufferSubData;
122
123
  GrGLFunction<GrGLCopyTexSubImage2DFn> fCopyTexSubImage2D;
123
124
  GrGLFunction<GrGLCreateProgramFn> fCreateProgram;
124
125
  GrGLFunction<GrGLCreateShaderFn> fCreateShader;
@@ -16,6 +16,10 @@
16
16
  #include "include/gpu/graphite/mtl/MtlTypes.h"
17
17
  #endif
18
18
 
19
+ #ifdef SK_VULKAN
20
+ #include "include/private/gpu/vk/SkiaVulkan.h"
21
+ #endif
22
+
19
23
  namespace skgpu::graphite {
20
24
 
21
25
  class BackendTexture {
@@ -54,6 +58,9 @@ private:
54
58
  union {
55
59
  #ifdef SK_METAL
56
60
  MtlHandle fMtlTexture;
61
+ #endif
62
+ #ifdef SK_VULKAN
63
+ VkImage fVkImage;
57
64
  #endif
58
65
  };
59
66
  };
@@ -0,0 +1,195 @@
1
+ /*
2
+ * Copyright 2022 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 skgpu_graphite_CombinationBuilder_DEFINED
9
+ #define skgpu_graphite_CombinationBuilder_DEFINED
10
+
11
+ #include "include/core/SkTypes.h"
12
+
13
+ #ifdef SK_ENABLE_PRECOMPILE
14
+
15
+ #include <functional>
16
+ #include <memory>
17
+ #include <vector>
18
+ #include "include/core/SkBlendMode.h"
19
+ #include "include/core/SkSpan.h"
20
+ #include "include/core/SkTileMode.h"
21
+ #include "include/private/SkTArray.h"
22
+ #include "include/private/SkTHash.h"
23
+
24
+ class SkArenaAllocWithReset;
25
+ class SkKeyContext;
26
+ class SkPaintParamsKeyBuilder;
27
+ class SkShaderCodeDictionary;
28
+ class SkUniquePaintParamsID;
29
+
30
+ namespace skgpu::graphite {
31
+
32
+ class CombinationBuilder;
33
+ class CombinationBuilderTestAccess;
34
+ class Context;
35
+ class Option;
36
+
37
+ enum class ShaderType : uint32_t {
38
+ kSolidColor,
39
+
40
+ kLinearGradient,
41
+ kRadialGradient,
42
+ kSweepGradient,
43
+ kConicalGradient,
44
+
45
+ kLocalMatrix,
46
+ kImage,
47
+ kPorterDuffBlendShader,
48
+ kBlendShader,
49
+
50
+ kLast = kBlendShader
51
+ };
52
+
53
+ static constexpr int kShaderTypeCount = static_cast<int>(ShaderType::kLast) + 1;
54
+
55
+ struct TileModePair {
56
+ SkTileMode fX;
57
+ SkTileMode fY;
58
+
59
+ bool operator==(const TileModePair& other) const { return fX == other.fX && fY == other.fY; }
60
+ bool operator!=(const TileModePair& other) const { return !(*this == other); }
61
+ };
62
+
63
+ // TODO: add ShaderID and ColorFilterID too
64
+ class BlenderID {
65
+ public:
66
+ BlenderID() : fID(0) {} // 0 is an invalid blender ID
67
+ BlenderID(const BlenderID& src) : fID(src.fID) {}
68
+
69
+ bool isValid() const { return fID > 0; }
70
+
71
+ bool operator==(const BlenderID& other) const { return fID == other.fID; }
72
+
73
+ BlenderID& operator=(const BlenderID& src) {
74
+ fID = src.fID;
75
+ return *this;
76
+ }
77
+
78
+ private:
79
+ friend class ::SkShaderCodeDictionary; // for ctor and asUInt access
80
+ friend class CombinationBuilder; // for asUInt access
81
+
82
+ BlenderID(uint32_t id) : fID(id) {}
83
+
84
+ uint32_t asUInt() const { return fID; }
85
+
86
+ uint32_t fID;
87
+ };
88
+
89
+ // When combination options are added to the combination builder an CombinationOption
90
+ // object is frequently returned. This allows options to be added, recursively, to the
91
+ // previously added options.
92
+ // Note: CombinationOptions are stable memory-wise so, once returned, they are valid
93
+ // until CombinationBuilder::reset is called.
94
+ class CombinationOption {
95
+ public:
96
+ CombinationOption addChildOption(int childIndex, ShaderType);
97
+
98
+ CombinationOption addChildOption(int childIndex, ShaderType,
99
+ int minNumStops, int maxNumStops);
100
+
101
+ CombinationOption addChildOption(int childIndex, ShaderType,
102
+ SkSpan<TileModePair> tileModes);
103
+
104
+ bool isValid() const { return fDataInArena; }
105
+
106
+ private:
107
+ friend class CombinationBuilder; // for ctor
108
+ friend class CombinationBuilderTestAccess;
109
+
110
+ CombinationOption(CombinationBuilder* builder, Option* dataInArena)
111
+ : fBuilder(builder)
112
+ , fDataInArena(dataInArena) {}
113
+
114
+ ShaderType type() const;
115
+ int numChildSlots() const;
116
+ SkDEBUGCODE(int epoch() const;)
117
+
118
+ CombinationBuilder* fBuilder;
119
+ Option* fDataInArena;
120
+ };
121
+
122
+ class CombinationBuilder {
123
+ public:
124
+ enum class BlendModeGroup {
125
+ kPorterDuff, // [ kClear .. kScreen ]
126
+ kAdvanced, // [ kOverlay .. kMultiply ]
127
+ kColorAware, // [ kHue .. kLuminosity ]
128
+ kAll
129
+ };
130
+
131
+ CombinationBuilder(SkShaderCodeDictionary*);
132
+ ~CombinationBuilder();
133
+
134
+ // Blend Modes
135
+ void addOption(SkBlendMode);
136
+ void addOption(SkBlendMode rangeStart, SkBlendMode rangeEnd); // inclusive
137
+ void addOption(BlendModeGroup);
138
+
139
+ // TODO: have this variant return an CombinationOption object
140
+ void addOption(BlenderID);
141
+
142
+ // Shaders
143
+ CombinationOption addOption(ShaderType);
144
+ CombinationOption addOption(ShaderType, int minNumStops, int maxNumStops); // inclusive
145
+ CombinationOption addOption(ShaderType, SkSpan<TileModePair> tileModes);
146
+
147
+ void reset();
148
+
149
+ private:
150
+ friend class Context; // for access to 'buildCombinations'
151
+ friend class CombinationOption; // for 'addOptionInternal' and 'arena'
152
+ friend class CombinationBuilderTestAccess; // for 'num*Combinations' and 'epoch'
153
+
154
+ int numShaderCombinations() const;
155
+ int numBlendModeCombinations() const;
156
+ int numCombinations() {
157
+ return this->numShaderCombinations() * this->numBlendModeCombinations();
158
+ }
159
+
160
+ // 'desiredCombination' must be less than numCombinations
161
+ void createKey(const SkKeyContext&, int desiredCombination, SkPaintParamsKeyBuilder*);
162
+
163
+ #ifdef SK_DEBUG
164
+ void dump() const;
165
+ int epoch() const { return fEpoch; }
166
+ #endif
167
+
168
+ SkArenaAllocWithReset* arena() { return fArena.get(); }
169
+
170
+ template<typename T, typename... Args>
171
+ Option* allocInArena(Args&&... args);
172
+
173
+ Option* addOptionInternal(ShaderType);
174
+ Option* addOptionInternal(ShaderType, int minNumStops, int maxNumStops);
175
+ Option* addOptionInternal(ShaderType, SkSpan<TileModePair> tileModes);
176
+
177
+ void buildCombinations(SkShaderCodeDictionary*,
178
+ const std::function<void(SkUniquePaintParamsID)>&);
179
+
180
+ SkShaderCodeDictionary* fDictionary;
181
+ std::unique_ptr<SkArenaAllocWithReset> fArena;
182
+ SkTArray<Option*> fShaderOptions;
183
+
184
+ uint32_t fBlendModes;
185
+ // TODO: store the SkBlender-based blenders in the arena
186
+ SkTHashSet<BlenderID> fBlenders;
187
+
188
+ SkDEBUGCODE(int fEpoch = 0;)
189
+ };
190
+
191
+ } // namespace skgpu::graphite
192
+
193
+ #endif // SK_ENABLE_PRECOMPILE
194
+
195
+ #endif // skgpu_graphite_CombinationBuilder_DEFINED
@@ -8,53 +8,38 @@
8
8
  #ifndef skgpu_graphite_Context_DEFINED
9
9
  #define skgpu_graphite_Context_DEFINED
10
10
 
11
- #include <vector>
12
- #include "include/core/SkBlendMode.h"
13
11
  #include "include/core/SkRefCnt.h"
14
12
  #include "include/core/SkShader.h"
15
- #include "include/core/SkTileMode.h"
16
- #include "include/private/SkNoncopyable.h"
17
-
13
+ #include "include/gpu/graphite/ContextOptions.h"
18
14
  #include "include/gpu/graphite/GraphiteTypes.h"
15
+ #include "include/gpu/graphite/Recorder.h"
16
+ #include "include/private/SingleOwner.h"
17
+
18
+ #include <memory>
19
+
20
+ class SkRuntimeEffect;
21
+
22
+ namespace skgpu { struct VulkanBackendContext; }
19
23
 
20
24
  namespace skgpu::graphite {
21
25
 
22
26
  class BackendTexture;
23
- class CommandBuffer;
27
+ class Context;
24
28
  class ContextPriv;
29
+ struct DawnBackendContext;
25
30
  class GlobalCache;
26
- class Gpu;
27
31
  struct MtlBackendContext;
28
- class Recorder;
32
+ class QueueManager;
29
33
  class Recording;
30
- class TextureInfo;
31
-
32
- struct ShaderCombo {
33
- enum class ShaderType {
34
- kNone, // does not modify color buffer, e.g. depth and/or stencil only
35
- kSolidColor,
36
- kLinearGradient,
37
- kRadialGradient,
38
- kSweepGradient,
39
- kConicalGradient
40
- };
41
-
42
- ShaderCombo() {}
43
- ShaderCombo(std::vector<ShaderType> types,
44
- std::vector<SkTileMode> tileModes)
45
- : fTypes(std::move(types))
46
- , fTileModes(std::move(tileModes)) {
47
- }
48
- std::vector<ShaderType> fTypes;
49
- std::vector<SkTileMode> fTileModes;
50
- };
34
+ class ResourceProvider;
35
+ class SharedContext;
51
36
 
52
- struct PaintCombo {
53
- std::vector<ShaderCombo> fShaders;
54
- std::vector<SkBlendMode> fBlendModes;
55
- };
37
+ #ifdef SK_ENABLE_PRECOMPILE
38
+ class BlenderID;
39
+ class CombinationBuilder;
40
+ #endif
56
41
 
57
- class Context final {
42
+ class SK_API Context final {
58
43
  public:
59
44
  Context(const Context&) = delete;
60
45
  Context(Context&&) = delete;
@@ -63,13 +48,20 @@ public:
63
48
 
64
49
  ~Context();
65
50
 
51
+ #ifdef SK_DAWN
52
+ static std::unique_ptr<Context> MakeDawn(const DawnBackendContext&, const ContextOptions&);
53
+ #endif
66
54
  #ifdef SK_METAL
67
- static std::unique_ptr<Context> MakeMetal(const skgpu::graphite::MtlBackendContext&);
55
+ static std::unique_ptr<Context> MakeMetal(const MtlBackendContext&, const ContextOptions&);
68
56
  #endif
69
57
 
70
- BackendApi backend() const { return fBackend; }
58
+ #ifdef SK_VULKAN
59
+ static std::unique_ptr<Context> MakeVulkan(const VulkanBackendContext&, const ContextOptions&);
60
+ #endif
61
+
62
+ BackendApi backend() const;
71
63
 
72
- std::unique_ptr<Recorder> makeRecorder();
64
+ std::unique_ptr<Recorder> makeRecorder(const RecorderOptions& = {});
73
65
 
74
66
  void insertRecording(const InsertRecordingInfo&);
75
67
  void submit(SyncToCpu = SyncToCpu::kNo);
@@ -79,23 +71,19 @@ public:
79
71
  */
80
72
  void checkAsyncWorkCompletion();
81
73
 
82
- void preCompile(const PaintCombo&);
74
+ #ifdef SK_ENABLE_PRECOMPILE
75
+ // TODO: add "ShaderID addUserDefinedShader(sk_sp<SkRuntimeEffect>)" here
76
+ // TODO: add "ColorFilterID addUserDefinedColorFilter(sk_sp<SkRuntimeEffect>)" here
77
+ BlenderID addUserDefinedBlender(sk_sp<SkRuntimeEffect>);
83
78
 
84
- /**
85
- * Creates a new backend gpu texture matching the dimensinos and TextureInfo. If an invalid
86
- * TextureInfo or a TextureInfo Skia can't support is passed in, this will return an invalid
87
- * BackendTexture. Thus the client should check isValid on the returned BackendTexture to know
88
- * if it succeeded or not.
89
- *
90
- * If this does return a valid BackendTexture, the caller is required to use
91
- * Context::deleteBackendTexture to delete that texture.
92
- */
93
- BackendTexture createBackendTexture(SkISize dimensions, const TextureInfo&);
79
+ void precompile(CombinationBuilder*);
80
+ #endif
94
81
 
95
82
  /**
96
83
  * Called to delete the passed in BackendTexture. This should only be called if the
97
- * BackendTexture was created by calling Context::createBackendTexture. If the BackendTexture is
98
- * not valid or does not match the BackendApi of the Context then nothing happens.
84
+ * BackendTexture was created by calling Recorder::createBackendTexture on a Recorder created
85
+ * from this Context. If the BackendTexture is not valid or does not match the BackendApi of the
86
+ * Context then nothing happens.
99
87
  *
100
88
  * Otherwise this will delete/release the backend object that is wrapped in the BackendTexture.
101
89
  * The BackendTexture will be reset to an invalid state and should not be used again.
@@ -107,16 +95,20 @@ public:
107
95
  const ContextPriv priv() const; // NOLINT(readability-const-return-type)
108
96
 
109
97
  protected:
110
- Context(sk_sp<Gpu>, BackendApi);
98
+ Context(sk_sp<SharedContext>, std::unique_ptr<QueueManager>);
111
99
 
112
100
  private:
113
101
  friend class ContextPriv;
114
102
 
115
- sk_sp<CommandBuffer> fCurrentCommandBuffer;
103
+ SingleOwner* singleOwner() const { return &fSingleOwner; }
104
+
105
+ sk_sp<SharedContext> fSharedContext;
106
+ std::unique_ptr<ResourceProvider> fResourceProvider;
107
+ std::unique_ptr<QueueManager> fQueueManager;
116
108
 
117
- sk_sp<Gpu> fGpu;
118
- sk_sp<GlobalCache> fGlobalCache;
119
- BackendApi fBackend;
109
+ // In debug builds we guard against improper thread handling. This guard is passed to the
110
+ // ResourceCache for the Context.
111
+ mutable SingleOwner fSingleOwner;
120
112
  };
121
113
 
122
114
  } // namespace skgpu::graphite
@@ -0,0 +1,85 @@
1
+ /*
2
+ * Copyright 2022 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 skgpu_graphite_ContextOptions_DEFINED
9
+ #define skgpu_graphite_ContextOptions_DEFINED
10
+
11
+ namespace skgpu { class ShaderErrorHandler; }
12
+
13
+ namespace skgpu::graphite {
14
+
15
+ struct SK_API ContextOptions {
16
+ ContextOptions() {}
17
+
18
+ /**
19
+ * If present, use this object to report shader compilation failures. If not, report failures
20
+ * via SkDebugf and assert.
21
+ */
22
+ skgpu::ShaderErrorHandler* fShaderErrorHandler = nullptr;
23
+
24
+ /**
25
+ * Will the client make sure to only ever be executing one thread that uses the Context and all
26
+ * derived classes (e.g. Recorders, Recordings, etc.) at a time. If so we can possibly make some
27
+ * objects (e.g. VulkanMemoryAllocator) not thread safe to improve single thread performance.
28
+ */
29
+ bool fClientWillExternallySynchronizeAllThreads = false;
30
+
31
+ /**
32
+ * The maximum size of cache textures used for Skia's Glyph cache.
33
+ */
34
+ size_t fGlyphCacheTextureMaximumBytes = 2048 * 1024 * 4;
35
+
36
+ /**
37
+ * Below this threshold size in device space distance field fonts won't be used. Distance field
38
+ * fonts don't support hinting which is more important at smaller sizes.
39
+ */
40
+ float fMinDistanceFieldFontSize = 18;
41
+
42
+ /**
43
+ * Above this threshold size in device space glyphs are drawn as individual paths.
44
+ */
45
+ #if defined(SK_BUILD_FOR_ANDROID)
46
+ float fGlyphsAsPathsFontSize = 384;
47
+ #elif defined(SK_BUILD_FOR_MAC)
48
+ float fGlyphsAsPathsFontSize = 256;
49
+ #else
50
+ float fGlyphsAsPathsFontSize = 324;
51
+ #endif
52
+
53
+ /**
54
+ * Can the glyph atlas use multiple textures. If allowed, the each texture's size is bound by
55
+ * fGlypheCacheTextureMaximumBytes.
56
+ */
57
+ bool fAllowMultipleGlyphCacheTextures = true;
58
+
59
+ /**
60
+ * If true, then add 1 pixel padding to all glyph masks in the atlas to support bi-lerp
61
+ * rendering of all glyphs. This must be set to true to use Slugs.
62
+ */
63
+ #if defined(SK_EXPERIMENTAL_SIMULATE_DRAWGLYPHRUNLIST_WITH_SLUG) || \
64
+ defined(SK_EXPERIMENTAL_SIMULATE_DRAWGLYPHRUNLIST_WITH_SLUG_SERIALIZE) || \
65
+ defined(SK_EXPERIMENTAL_SIMULATE_DRAWGLYPHRUNLIST_WITH_SLUG_STRIKE_SERIALIZE)
66
+ bool fSupportBilerpFromGlyphAtlas = true;
67
+ #else
68
+ bool fSupportBilerpFromGlyphAtlas = false;
69
+ #endif
70
+
71
+ #if GRAPHITE_TEST_UTILS
72
+ /**
73
+ * Private options that are only meant for testing within Skia's tools.
74
+ */
75
+
76
+ /**
77
+ * Maximum width and height of internal texture atlases.
78
+ */
79
+ int fMaxTextureAtlasSize = 2048;
80
+ #endif
81
+ };
82
+
83
+ } // namespace skgpu::graphite
84
+
85
+ #endif // skgpu_graphite_ContextOptions
@@ -42,26 +42,10 @@ enum class SyncToCpu : bool {
42
42
  kNo = false
43
43
  };
44
44
 
45
- /**
46
- * Possible 3D APIs that may be used by Graphite.
47
- */
48
- enum class BackendApi : unsigned {
49
- kMetal,
50
- kMock,
51
- };
52
-
53
45
  /**
54
46
  * Is the texture mipmapped or not
55
47
  */
56
- enum class Mipmapped: bool {
57
- kNo = false,
58
- kYes = true,
59
- };
60
-
61
- /**
62
- * Is the data protected on the GPU or not.
63
- */
64
- enum class Protected : bool {
48
+ enum class Mipmapped : bool {
65
49
  kNo = false,
66
50
  kYes = true,
67
51
  };
@@ -0,0 +1,61 @@
1
+ /*
2
+ * Copyright 2022 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 skgpu_graphite_ImageProvider_DEFINED
9
+ #define skgpu_graphite_ImageProvider_DEFINED
10
+
11
+ #include "include/core/SkImage.h"
12
+ #include "include/core/SkRefCnt.h"
13
+
14
+ namespace skgpu::graphite {
15
+
16
+ enum class Mipmapped : bool;
17
+ class Recorder;
18
+
19
+ /*
20
+ * This class provides a centralized location for clients to perform any caching of images
21
+ * they desire. Whenever Graphite encounters an SkImage which is not Graphite-backed
22
+ * it will call ImageProvider::findOrCreate. The client's derived version of this class should
23
+ * return a Graphite-backed version of the provided SkImage that meets the specified
24
+ * requirements.
25
+ *
26
+ * Skia requires that 'findOrCreate' return a Graphite-backed image that preserves the dimensions,
27
+ * number of channels and alpha type of the original image. The bit depth of the
28
+ * individual channels can change (e.g., 4444 -> 8888 is allowed).
29
+ * Wrt mipmapping, the returned image can have different mipmap settings than requested. If
30
+ * mipmapping was requested but not returned, the sampling level will be reduced to linear.
31
+ * If the requirements are not met by the returned image (modulo the flexibility wrt mipmapping)
32
+ * Graphite will drop the draw.
33
+ *
34
+ * Note: by default, Graphite will not perform any caching of images
35
+ *
36
+ * Threading concerns:
37
+ * If the same ImageProvider is given to multiple Recorders it is up to the
38
+ * client to handle any required thread synchronization. This is not limited to just
39
+ * restricting access to whatever map a derived class may have but extends to ensuring
40
+ * that an image created on one Recorder has had its creation work submitted before it
41
+ * is used by any work submitted by another Recording. Please note, this requirement
42
+ * (re the submission of creation work and image usage on different threads) is common to all
43
+ * graphite SkImages and isn't unique to SkImages returned by the ImageProvider.
44
+ *
45
+ * TODO(b/240996632): add documentation re shutdown order.
46
+ * TODO(b/240997067): add unit tests
47
+ */
48
+ class SK_API ImageProvider : public SkRefCnt {
49
+ public:
50
+ // If the client's derived class already has a Graphite-backed image that has the same
51
+ // contents as 'image' and meets the requirements, then it can be returned.
52
+ // makeTextureImage can always be called to create an acceptable Graphite-backed image
53
+ // which could then be cached.
54
+ virtual sk_sp<SkImage> findOrCreate(Recorder* recorder,
55
+ const SkImage* image,
56
+ SkImage::RequiredImageProperties) = 0;
57
+ };
58
+
59
+ } // namespace skgpu::graphite
60
+
61
+ #endif // skgpu_graphite_ImageProvider_DEFINED