@shopify/react-native-skia 0.1.196 → 0.1.199

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 (221) hide show
  1. package/android/CMakeLists.txt +32 -31
  2. package/android/cpp/rnskia-android/SkiaOpenGLRenderer.cpp +4 -2
  3. package/android/cpp/rnskia-android/SkiaOpenGLRenderer.h +3 -0
  4. package/cpp/api/JsiSkImage.h +1 -1
  5. package/cpp/api/JsiSkShaderFactory.h +4 -4
  6. package/cpp/api/JsiSkSurface.h +0 -1
  7. package/cpp/api/JsiSkSurfaceFactory.h +2 -1
  8. package/cpp/rnskia/RNSkView.h +20 -40
  9. package/cpp/rnskia/dom/nodes/JsiShaderNodes.h +2 -2
  10. package/cpp/rnskia/values/RNSkReadonlyValue.h +6 -7
  11. package/cpp/skia/include/android/SkCanvasAndroid.h +20 -0
  12. package/cpp/skia/include/android/SkHeifDecoder.h +43 -0
  13. package/cpp/skia/include/android/SkSurfaceAndroid.h +50 -0
  14. package/cpp/skia/include/codec/SkAvifDecoder.h +43 -0
  15. package/cpp/skia/include/codec/SkBmpDecoder.h +43 -0
  16. package/cpp/skia/include/codec/SkCodec.h +25 -1
  17. package/cpp/skia/include/codec/SkGifDecoder.h +43 -0
  18. package/cpp/skia/include/codec/SkIcoDecoder.h +43 -0
  19. package/cpp/skia/include/codec/SkJpegDecoder.h +43 -0
  20. package/cpp/skia/include/codec/SkJpegxlDecoder.h +43 -0
  21. package/cpp/skia/include/codec/SkPngDecoder.h +43 -0
  22. package/cpp/skia/include/codec/SkRawDecoder.h +49 -0
  23. package/cpp/skia/include/codec/SkWbmpDecoder.h +43 -0
  24. package/cpp/skia/include/codec/SkWebpDecoder.h +43 -0
  25. package/cpp/skia/include/core/SkBBHFactory.h +5 -1
  26. package/cpp/skia/include/core/SkBlender.h +0 -2
  27. package/cpp/skia/include/core/SkCanvas.h +4 -23
  28. package/cpp/skia/include/core/SkColorFilter.h +14 -1
  29. package/cpp/skia/include/core/SkColorTable.h +59 -0
  30. package/cpp/skia/include/core/SkContourMeasure.h +3 -0
  31. package/cpp/skia/include/core/SkDeferredDisplayList.h +8 -104
  32. package/cpp/skia/include/core/SkDeferredDisplayListRecorder.h +8 -91
  33. package/cpp/skia/include/core/SkDrawable.h +5 -2
  34. package/cpp/skia/include/core/SkGraphics.h +7 -19
  35. package/cpp/skia/include/core/SkImage.h +157 -249
  36. package/cpp/skia/include/core/SkImageGenerator.h +0 -31
  37. package/cpp/skia/include/core/SkMilestone.h +1 -1
  38. package/cpp/skia/include/core/SkPathMeasure.h +3 -3
  39. package/cpp/skia/include/core/SkPictureRecorder.h +1 -1
  40. package/cpp/skia/include/core/SkPoint.h +5 -563
  41. package/cpp/skia/include/core/SkPoint3.h +1 -0
  42. package/cpp/skia/include/core/SkPromiseImageTexture.h +4 -30
  43. package/cpp/skia/include/core/SkRect.h +8 -8
  44. package/cpp/skia/include/core/SkSamplingOptions.h +4 -2
  45. package/cpp/skia/include/core/SkScalar.h +1 -1
  46. package/cpp/skia/include/core/SkSerialProcs.h +5 -1
  47. package/cpp/skia/include/core/SkShader.h +14 -21
  48. package/cpp/skia/include/core/SkString.h +2 -0
  49. package/cpp/skia/include/core/SkSurface.h +169 -701
  50. package/cpp/skia/include/core/SkSurfaceCharacterization.h +8 -256
  51. package/cpp/skia/include/core/SkTiledImageUtils.h +97 -0
  52. package/cpp/skia/include/core/SkTypes.h +4 -2
  53. package/cpp/skia/include/core/SkYUVAPixmaps.h +0 -5
  54. package/cpp/skia/include/effects/SkGradientShader.h +10 -1
  55. package/cpp/skia/include/effects/SkImageFilters.h +62 -37
  56. package/cpp/skia/include/effects/SkPerlinNoiseShader.h +28 -29
  57. package/cpp/skia/include/effects/SkRuntimeEffect.h +17 -12
  58. package/cpp/skia/include/gpu/GrBackendSurface.h +12 -39
  59. package/cpp/skia/include/gpu/GrBackendSurfaceMutableState.h +6 -0
  60. package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +3 -3
  61. package/cpp/skia/include/gpu/GrDirectContext.h +103 -3
  62. package/cpp/skia/include/gpu/GrRecordingContext.h +10 -19
  63. package/cpp/skia/include/gpu/MutableTextureState.h +4 -0
  64. package/cpp/skia/include/gpu/ganesh/GrExternalTextureGenerator.h +54 -0
  65. package/cpp/skia/include/gpu/ganesh/SkImageGanesh.h +20 -76
  66. package/cpp/skia/include/gpu/ganesh/SkSurfaceGanesh.h +217 -0
  67. package/cpp/skia/include/gpu/ganesh/mtl/SkSurfaceMetal.h +73 -0
  68. package/cpp/skia/include/gpu/gl/GrGLTypes.h +13 -2
  69. package/cpp/skia/include/gpu/graphite/BackendSemaphore.h +78 -0
  70. package/cpp/skia/include/gpu/graphite/BackendTexture.h +1 -0
  71. package/cpp/skia/include/gpu/graphite/Image.h +277 -0
  72. package/cpp/skia/include/gpu/graphite/ImageProvider.h +1 -1
  73. package/cpp/skia/include/gpu/graphite/Recording.h +1 -4
  74. package/cpp/skia/include/gpu/graphite/Surface.h +81 -0
  75. package/cpp/skia/include/gpu/graphite/TextureInfo.h +5 -7
  76. package/cpp/skia/include/gpu/graphite/YUVABackendTextures.h +2 -2
  77. package/cpp/skia/include/gpu/mock/GrMockTypes.h +23 -8
  78. package/cpp/skia/include/ports/SkTypeface_fontations.h +21 -0
  79. package/cpp/skia/include/private/SkGainmapInfo.h +2 -0
  80. package/cpp/skia/include/private/SkGainmapShader.h +1 -0
  81. package/cpp/skia/include/private/SkJpegMetadataDecoder.h +19 -1
  82. package/cpp/skia/include/private/SkPathRef.h +13 -15
  83. package/cpp/skia/include/private/SkXmp.h +53 -0
  84. package/cpp/skia/include/private/base/SkFeatures.h +0 -4
  85. package/cpp/skia/include/private/base/SkFloatingPoint.h +11 -5
  86. package/cpp/skia/include/private/base/SkPoint_impl.h +569 -0
  87. package/cpp/skia/include/private/base/SkSpan_impl.h +3 -7
  88. package/cpp/skia/include/private/base/SkTArray.h +11 -11
  89. package/cpp/skia/include/private/chromium/GrDeferredDisplayList.h +120 -0
  90. package/cpp/skia/include/private/chromium/GrDeferredDisplayListRecorder.h +98 -0
  91. package/cpp/skia/include/private/chromium/GrPromiseImageTexture.h +43 -0
  92. package/cpp/skia/include/private/chromium/GrSurfaceCharacterization.h +215 -0
  93. package/cpp/skia/include/private/chromium/GrVkSecondaryCBDrawContext.h +6 -6
  94. package/cpp/skia/include/private/chromium/SkImageChromium.h +104 -0
  95. package/cpp/skia/include/private/chromium/Slug.h +7 -3
  96. package/cpp/skia/include/private/gpu/ganesh/GrContext_Base.h +7 -3
  97. package/cpp/skia/include/private/gpu/ganesh/GrGLTypesPriv.h +2 -0
  98. package/cpp/skia/include/private/gpu/ganesh/GrImageContext.h +3 -2
  99. package/cpp/skia/include/private/gpu/ganesh/GrMtlTypesPriv.h +10 -2
  100. package/cpp/skia/include/{gpu → private/gpu}/ganesh/GrTextureGenerator.h +2 -13
  101. package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +1 -1
  102. package/cpp/skia/include/private/gpu/graphite/DawnTypesPriv.h +7 -0
  103. package/cpp/skia/include/private/gpu/graphite/MtlGraphiteTypesPriv.h +19 -6
  104. package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +13 -0
  105. package/cpp/skia/include/third_party/vulkan/vulkan/vulkan.h +0 -1
  106. package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_android.h +14 -1
  107. package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_core.h +999 -79
  108. package/cpp/skia/modules/skcms/src/Transform_inl.h +36 -236
  109. package/cpp/skia/modules/skparagraph/include/Paragraph.h +2 -0
  110. package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +16 -0
  111. package/cpp/skia/modules/skparagraph/include/TextStyle.h +6 -2
  112. package/cpp/skia/modules/skresources/include/SkResources.h +1 -1
  113. package/cpp/skia/modules/svg/include/SkSVGCircle.h +1 -1
  114. package/cpp/skia/modules/svg/include/SkSVGClipPath.h +1 -1
  115. package/cpp/skia/modules/svg/include/SkSVGContainer.h +1 -1
  116. package/cpp/skia/modules/svg/include/SkSVGDOM.h +1 -1
  117. package/cpp/skia/modules/svg/include/SkSVGDefs.h +1 -1
  118. package/cpp/skia/modules/svg/include/SkSVGEllipse.h +1 -1
  119. package/cpp/skia/modules/svg/include/SkSVGFe.h +1 -1
  120. package/cpp/skia/modules/svg/include/SkSVGFeBlend.h +1 -1
  121. package/cpp/skia/modules/svg/include/SkSVGFeColorMatrix.h +1 -1
  122. package/cpp/skia/modules/svg/include/SkSVGFeComposite.h +1 -1
  123. package/cpp/skia/modules/svg/include/SkSVGFeDisplacementMap.h +1 -1
  124. package/cpp/skia/modules/svg/include/SkSVGFeFlood.h +1 -1
  125. package/cpp/skia/modules/svg/include/SkSVGFeGaussianBlur.h +1 -1
  126. package/cpp/skia/modules/svg/include/SkSVGFeImage.h +1 -1
  127. package/cpp/skia/modules/svg/include/SkSVGFeLightSource.h +1 -1
  128. package/cpp/skia/modules/svg/include/SkSVGFeLighting.h +1 -1
  129. package/cpp/skia/modules/svg/include/SkSVGFeOffset.h +1 -1
  130. package/cpp/skia/modules/svg/include/SkSVGFeTurbulence.h +1 -1
  131. package/cpp/skia/modules/svg/include/SkSVGFilter.h +1 -1
  132. package/cpp/skia/modules/svg/include/SkSVGG.h +1 -1
  133. package/cpp/skia/modules/svg/include/SkSVGGradient.h +1 -1
  134. package/cpp/skia/modules/svg/include/SkSVGHiddenContainer.h +1 -1
  135. package/cpp/skia/modules/svg/include/SkSVGImage.h +1 -1
  136. package/cpp/skia/modules/svg/include/SkSVGLine.h +1 -1
  137. package/cpp/skia/modules/svg/include/SkSVGLinearGradient.h +1 -1
  138. package/cpp/skia/modules/svg/include/SkSVGMask.h +1 -1
  139. package/cpp/skia/modules/svg/include/SkSVGNode.h +1 -1
  140. package/cpp/skia/modules/svg/include/SkSVGPath.h +1 -1
  141. package/cpp/skia/modules/svg/include/SkSVGPattern.h +1 -1
  142. package/cpp/skia/modules/svg/include/SkSVGPoly.h +1 -1
  143. package/cpp/skia/modules/svg/include/SkSVGRadialGradient.h +1 -1
  144. package/cpp/skia/modules/svg/include/SkSVGRect.h +1 -1
  145. package/cpp/skia/modules/svg/include/SkSVGRenderContext.h +3 -3
  146. package/cpp/skia/modules/svg/include/SkSVGSVG.h +1 -1
  147. package/cpp/skia/modules/svg/include/SkSVGShape.h +1 -1
  148. package/cpp/skia/modules/svg/include/SkSVGStop.h +1 -1
  149. package/cpp/skia/modules/svg/include/SkSVGText.h +1 -1
  150. package/cpp/skia/modules/svg/include/SkSVGTransformableNode.h +1 -1
  151. package/cpp/skia/modules/svg/include/SkSVGTypes.h +21 -21
  152. package/cpp/skia/modules/svg/include/SkSVGUse.h +1 -1
  153. package/cpp/skia/modules/svg/include/SkSVGValue.h +2 -2
  154. package/cpp/skia/{include/private → src/core}/SkChecksum.h +32 -17
  155. package/cpp/skia/src/core/SkTHash.h +1 -1
  156. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +3 -1
  157. package/ios/RNSkia-iOS/SkiaMetalRenderer.mm +3 -1
  158. package/lib/commonjs/renderer/Canvas.js +24 -13
  159. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  160. package/lib/commonjs/skia/core/Data.d.ts +2 -2
  161. package/lib/commonjs/skia/core/Data.js.map +1 -1
  162. package/lib/commonjs/skia/core/RRect.js +5 -1
  163. package/lib/commonjs/skia/core/RRect.js.map +1 -1
  164. package/lib/commonjs/skia/core/Rect.js +32 -6
  165. package/lib/commonjs/skia/core/Rect.js.map +1 -1
  166. package/lib/commonjs/skia/types/Color.js.map +1 -1
  167. package/lib/commonjs/skia/types/JsiInstance.d.ts +2 -4
  168. package/lib/commonjs/skia/types/JsiInstance.js.map +1 -1
  169. package/lib/module/renderer/Canvas.js +25 -14
  170. package/lib/module/renderer/Canvas.js.map +1 -1
  171. package/lib/module/skia/core/Data.d.ts +2 -2
  172. package/lib/module/skia/core/Data.js.map +1 -1
  173. package/lib/module/skia/core/RRect.js +5 -1
  174. package/lib/module/skia/core/RRect.js.map +1 -1
  175. package/lib/module/skia/core/Rect.js +32 -6
  176. package/lib/module/skia/core/Rect.js.map +1 -1
  177. package/lib/module/skia/types/Color.js.map +1 -1
  178. package/lib/module/skia/types/JsiInstance.d.ts +2 -4
  179. package/lib/module/skia/types/JsiInstance.js.map +1 -1
  180. package/lib/typescript/src/skia/core/Data.d.ts +2 -2
  181. package/lib/typescript/src/skia/types/JsiInstance.d.ts +2 -4
  182. package/libs/android/arm64-v8a/libskia.a +0 -0
  183. package/libs/android/arm64-v8a/libskottie.a +0 -0
  184. package/libs/android/arm64-v8a/libsksg.a +0 -0
  185. package/libs/android/arm64-v8a/libsvg.a +0 -0
  186. package/libs/android/armeabi-v7a/libskia.a +0 -0
  187. package/libs/android/armeabi-v7a/libskottie.a +0 -0
  188. package/libs/android/armeabi-v7a/libsksg.a +0 -0
  189. package/libs/android/armeabi-v7a/libsvg.a +0 -0
  190. package/libs/android/x86/libskia.a +0 -0
  191. package/libs/android/x86/libskottie.a +0 -0
  192. package/libs/android/x86/libsksg.a +0 -0
  193. package/libs/android/x86/libsvg.a +0 -0
  194. package/libs/android/x86_64/libskia.a +0 -0
  195. package/libs/android/x86_64/libskottie.a +0 -0
  196. package/libs/android/x86_64/libsksg.a +0 -0
  197. package/libs/android/x86_64/libsvg.a +0 -0
  198. package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  199. package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  200. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  201. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  202. package/libs/ios/libsksg.xcframework/Info.plist +5 -5
  203. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  204. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  205. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  206. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  207. package/libs/ios/libsvg.xcframework/Info.plist +5 -5
  208. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  209. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  210. package/package.json +3 -4
  211. package/src/renderer/Canvas.tsx +25 -19
  212. package/src/skia/core/Data.ts +3 -3
  213. package/src/skia/core/RRect.tsx +4 -2
  214. package/src/skia/core/Rect.ts +29 -12
  215. package/src/skia/types/Color.ts +1 -1
  216. package/src/skia/types/JsiInstance.ts +2 -5
  217. package/cpp/skia/include/effects/SkTableColorFilter.h +0 -29
  218. package/cpp/skia/include/private/SkOpts_spi.h +0 -23
  219. package/cpp/skia/include/private/SkSpinlock.h +0 -57
  220. package/cpp/skia/include/private/chromium/GrSlug.h +0 -16
  221. package/scripts/install-npm.js +0 -33
@@ -45,10 +45,9 @@ public:
45
45
  TArray() : fOwnMemory(true), fCapacity{0} {}
46
46
 
47
47
  /**
48
- * Creates an empty array that will preallocate space for reserveCount
49
- * elements.
48
+ * Creates an empty array that will preallocate space for reserveCount elements.
50
49
  */
51
- explicit TArray(int reserveCount) : TArray() { this->reserve_back(reserveCount); }
50
+ explicit TArray(int reserveCount) : TArray() { this->reserve_exact(reserveCount); }
52
51
 
53
52
  /**
54
53
  * Copies one array to another. The new array will be heap allocated.
@@ -149,7 +148,9 @@ public:
149
148
  }
150
149
 
151
150
  /**
152
- * Ensures there is enough reserved space for n elements.
151
+ * Ensures there is enough reserved space for at least n elements. This is guaranteed at least
152
+ * until the array size grows above n and subsequently shrinks below n, any version of reset()
153
+ * is called, or reserve() is called again.
153
154
  */
154
155
  void reserve(int n) {
155
156
  SkASSERT(n >= 0);
@@ -159,14 +160,13 @@ public:
159
160
  }
160
161
 
161
162
  /**
162
- * Ensures there is enough reserved space for n additional elements. The is guaranteed at least
163
- * until the array size grows above n and subsequently shrinks below n, any version of reset()
164
- * is called, or reserve_back() is called again.
163
+ * Ensures there is enough reserved space for exactly n elements. The same capacity guarantees
164
+ * as above apply.
165
165
  */
166
- void reserve_back(int n) {
166
+ void reserve_exact(int n) {
167
167
  SkASSERT(n >= 0);
168
- if (n > 0) {
169
- this->checkRealloc(n, kExactFit);
168
+ if (n > this->size()) {
169
+ this->checkRealloc(n - this->size(), kExactFit);
170
170
  }
171
171
  }
172
172
 
@@ -652,7 +652,7 @@ public:
652
652
  : STArray{data.begin(), SkToInt(data.size())} {}
653
653
 
654
654
  explicit STArray(int reserveCount)
655
- : STArray() { this->reserve_back(reserveCount); }
655
+ : STArray() { this->reserve_exact(reserveCount); }
656
656
 
657
657
  STArray(const STArray& that)
658
658
  : STArray() { *this = that; }
@@ -0,0 +1,120 @@
1
+ /*
2
+ * Copyright 2023 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 GrDeferredDisplayList_DEFINED
9
+ #define GrDeferredDisplayList_DEFINED
10
+
11
+ #include "include/core/SkRefCnt.h"
12
+ #include "include/core/SkTypes.h"
13
+ #include "include/gpu/GrRecordingContext.h"
14
+ #include "include/private/base/SkTArray.h"
15
+ #include "include/private/chromium/GrSurfaceCharacterization.h"
16
+
17
+ class GrDirectContext;
18
+ class GrRenderTargetProxy;
19
+ class GrRenderTask;
20
+ class GrDeferredDisplayListPriv;
21
+ class SkSurface;
22
+
23
+ /*
24
+ * This class contains pre-processed gpu operations that can be replayed into
25
+ * an SkSurface via SkSurface::draw(GrDeferredDisplayList*).
26
+ */
27
+ class GrDeferredDisplayList : public SkNVRefCnt<GrDeferredDisplayList> {
28
+ public:
29
+ SK_API ~GrDeferredDisplayList();
30
+
31
+ SK_API const GrSurfaceCharacterization& characterization() const {
32
+ return fCharacterization;
33
+ }
34
+ /**
35
+ * Iterate through the programs required by the DDL.
36
+ */
37
+ class SK_API ProgramIterator {
38
+ public:
39
+ ProgramIterator(GrDirectContext*, GrDeferredDisplayList*);
40
+ ~ProgramIterator();
41
+
42
+ // This returns true if any work was done. Getting a cache hit does not count as work.
43
+ bool compile();
44
+ bool done() const;
45
+ void next();
46
+
47
+ private:
48
+ GrDirectContext* fDContext;
49
+ const skia_private::TArray<GrRecordingContext::ProgramData>& fProgramData;
50
+ int fIndex;
51
+ };
52
+
53
+ // Provides access to functions that aren't part of the public API.
54
+ GrDeferredDisplayListPriv priv();
55
+ const GrDeferredDisplayListPriv priv() const; // NOLINT(readability-const-return-type)
56
+
57
+ private:
58
+ friend class GrDrawingManager; // for access to 'fRenderTasks', 'fLazyProxyData', 'fArenas'
59
+ friend class GrDeferredDisplayListRecorder; // for access to 'fLazyProxyData'
60
+ friend class GrDeferredDisplayListPriv;
61
+
62
+ // This object is the source from which the lazy proxy backing the DDL will pull its backing
63
+ // texture when the DDL is replayed. It has to be separately ref counted bc the lazy proxy
64
+ // can outlive the DDL.
65
+ class LazyProxyData : public SkRefCnt {
66
+ public:
67
+ // Upon being replayed - this field will be filled in (by the DrawingManager) with the
68
+ // proxy backing the destination SkSurface. Note that, since there is no good place to
69
+ // clear it, it can become a dangling pointer. Additionally, since the renderTargetProxy
70
+ // doesn't get a ref here, the SkSurface that owns it must remain alive until the DDL
71
+ // is flushed.
72
+ // TODO: the drawing manager could ref the renderTargetProxy for the DDL and then add
73
+ // a renderingTask to unref it after the DDL's ops have been executed.
74
+ GrRenderTargetProxy* fReplayDest = nullptr;
75
+ };
76
+
77
+ SK_API GrDeferredDisplayList(const GrSurfaceCharacterization& characterization,
78
+ sk_sp<GrRenderTargetProxy> fTargetProxy,
79
+ sk_sp<LazyProxyData>);
80
+
81
+ const skia_private::TArray<GrRecordingContext::ProgramData>& programData() const {
82
+ return fProgramData;
83
+ }
84
+
85
+ const GrSurfaceCharacterization fCharacterization;
86
+
87
+ // These are ordered such that the destructor cleans op tasks up first (which may refer back
88
+ // to the arena and memory pool in their destructors).
89
+ GrRecordingContext::OwnedArenas fArenas;
90
+ skia_private::TArray<sk_sp<GrRenderTask>> fRenderTasks;
91
+
92
+ skia_private::TArray<GrRecordingContext::ProgramData> fProgramData;
93
+ sk_sp<GrRenderTargetProxy> fTargetProxy;
94
+ sk_sp<LazyProxyData> fLazyProxyData;
95
+ };
96
+
97
+ namespace skgpu::ganesh {
98
+ /** Draws the deferred display list created via a GrDeferredDisplayListRecorder.
99
+ If the deferred display list is not compatible with the surface, the draw is skipped
100
+ and false is return.
101
+
102
+ The xOffset and yOffset parameters are experimental and, if not both zero, will cause
103
+ the draw to be ignored.
104
+ When implemented, if xOffset or yOffset are non-zero, the DDL will be drawn offset by that
105
+ amount into the surface.
106
+
107
+ @param SkSurface The surface to apply the commands to, cannot be nullptr.
108
+ @param ddl drawing commands, cannot be nullptr.
109
+ @return false if ddl is not compatible
110
+
111
+ example: https://fiddle.skia.org/c/@Surface_draw_2
112
+ */
113
+ SK_API bool DrawDDL(SkSurface*,
114
+ sk_sp<const GrDeferredDisplayList> ddl);
115
+
116
+ SK_API bool DrawDDL(sk_sp<SkSurface>,
117
+ sk_sp<const GrDeferredDisplayList> ddl);
118
+ }
119
+
120
+ #endif
@@ -0,0 +1,98 @@
1
+ /*
2
+ * Copyright 2023 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 GrDeferredDisplayListRecorder_DEFINED
9
+ #define GrDeferredDisplayListRecorder_DEFINED
10
+
11
+ #include "include/core/SkRefCnt.h"
12
+ #include "include/core/SkTypes.h"
13
+ #include "include/gpu/GrTypes.h"
14
+ #include "include/private/chromium/GrDeferredDisplayList.h"
15
+ #include "include/private/chromium/GrSurfaceCharacterization.h"
16
+
17
+ class GrBackendFormat;
18
+ class GrRecordingContext;
19
+ class GrRenderTargetProxy;
20
+ class GrYUVABackendTextureInfo;
21
+ class SkCanvas;
22
+ class SkColorSpace;
23
+ class SkImage;
24
+ class GrPromiseImageTexture;
25
+ class SkSurface;
26
+ enum SkAlphaType : int;
27
+ enum SkColorType : int;
28
+
29
+ /*
30
+ * This class is intended to be used as:
31
+ * Get a GrSurfaceCharacterization representing the intended gpu-backed destination SkSurface
32
+ * Create one of these (a GrDeferredDisplayListRecorder) on the stack
33
+ * Get the canvas and render into it
34
+ * Snap off and hold on to a GrDeferredDisplayList
35
+ * Once your app actually needs the pixels, call skgpu::ganesh::DrawDDL(GrDeferredDisplayList*)
36
+ *
37
+ * This class never accesses the GPU but performs all the cpu work it can. It
38
+ * is thread-safe (i.e., one can break a scene into tiles and perform their cpu-side
39
+ * work in parallel ahead of time).
40
+ */
41
+ class SK_API GrDeferredDisplayListRecorder {
42
+ public:
43
+ GrDeferredDisplayListRecorder(const GrSurfaceCharacterization&);
44
+ ~GrDeferredDisplayListRecorder();
45
+
46
+ const GrSurfaceCharacterization& characterization() const {
47
+ return fCharacterization;
48
+ }
49
+
50
+ // The backing canvas will become invalid (and this entry point will return
51
+ // null) once 'detach' is called.
52
+ // Note: ownership of the SkCanvas is not transferred via this call.
53
+ SkCanvas* getCanvas();
54
+
55
+ sk_sp<GrDeferredDisplayList> detach();
56
+
57
+ using PromiseImageTextureContext = void*;
58
+ using PromiseImageTextureFulfillProc =
59
+ sk_sp<GrPromiseImageTexture> (*)(PromiseImageTextureContext);
60
+ using PromiseImageTextureReleaseProc = void (*)(PromiseImageTextureContext);
61
+
62
+ #ifndef SK_MAKE_PROMISE_TEXTURE_DISABLE_LEGACY_API
63
+ /** Deprecated: Use SkImages::PromiseTextureFrom instead. */
64
+ sk_sp<SkImage> makePromiseTexture(const GrBackendFormat& backendFormat,
65
+ int width,
66
+ int height,
67
+ GrMipmapped mipmapped,
68
+ GrSurfaceOrigin origin,
69
+ SkColorType colorType,
70
+ SkAlphaType alphaType,
71
+ sk_sp<SkColorSpace> colorSpace,
72
+ PromiseImageTextureFulfillProc textureFulfillProc,
73
+ PromiseImageTextureReleaseProc textureReleaseProc,
74
+ PromiseImageTextureContext textureContext);
75
+
76
+ /** Deprecated: Use SkImages::PromiseTextureFromYUVA instead. */
77
+ sk_sp<SkImage> makeYUVAPromiseTexture(const GrYUVABackendTextureInfo& yuvaBackendTextureInfo,
78
+ sk_sp<SkColorSpace> imageColorSpace,
79
+ PromiseImageTextureFulfillProc textureFulfillProc,
80
+ PromiseImageTextureReleaseProc textureReleaseProc,
81
+ PromiseImageTextureContext textureContexts[]);
82
+ #endif // SK_MAKE_PROMISE_TEXTURE_DISABLE_LEGACY_API
83
+
84
+
85
+ private:
86
+ GrDeferredDisplayListRecorder(const GrDeferredDisplayListRecorder&) = delete;
87
+ GrDeferredDisplayListRecorder& operator=(const GrDeferredDisplayListRecorder&) = delete;
88
+
89
+ bool init();
90
+
91
+ const GrSurfaceCharacterization fCharacterization;
92
+ sk_sp<GrRecordingContext> fContext;
93
+ sk_sp<GrRenderTargetProxy> fTargetProxy;
94
+ sk_sp<GrDeferredDisplayList::LazyProxyData> fLazyProxyData;
95
+ sk_sp<SkSurface> fSurface;
96
+ };
97
+
98
+ #endif
@@ -0,0 +1,43 @@
1
+ /*
2
+ * Copyright 2023 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 GrPromiseImageTexture_DEFINED
9
+ #define GrPromiseImageTexture_DEFINED
10
+
11
+ #include "include/core/SkRefCnt.h"
12
+ #include "include/core/SkTypes.h"
13
+ #include "include/gpu/GrBackendSurface.h"
14
+ /**
15
+ * This type is used to fulfill textures for PromiseImages. Once an instance is returned from a
16
+ * PromiseImageTextureFulfillProc the GrBackendTexture it wraps must remain valid until the
17
+ * corresponding PromiseImageTextureReleaseProc is called.
18
+ */
19
+ class SK_API GrPromiseImageTexture : public SkNVRefCnt<GrPromiseImageTexture> {
20
+ public:
21
+ GrPromiseImageTexture() = delete;
22
+ GrPromiseImageTexture(const GrPromiseImageTexture&) = delete;
23
+ GrPromiseImageTexture(GrPromiseImageTexture&&) = delete;
24
+ ~GrPromiseImageTexture();
25
+ GrPromiseImageTexture& operator=(const GrPromiseImageTexture&) = delete;
26
+ GrPromiseImageTexture& operator=(GrPromiseImageTexture&&) = delete;
27
+
28
+ static sk_sp<GrPromiseImageTexture> Make(const GrBackendTexture& backendTexture) {
29
+ if (!backendTexture.isValid()) {
30
+ return nullptr;
31
+ }
32
+ return sk_sp<GrPromiseImageTexture>(new GrPromiseImageTexture(backendTexture));
33
+ }
34
+
35
+ GrBackendTexture backendTexture() const { return fBackendTexture; }
36
+
37
+ private:
38
+ explicit GrPromiseImageTexture(const GrBackendTexture& backendTexture);
39
+
40
+ GrBackendTexture fBackendTexture;
41
+ };
42
+
43
+ #endif // GrPromiseImageTexture_DEFINED
@@ -0,0 +1,215 @@
1
+ /*
2
+ * Copyright 2023 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 GrSurfaceCharacterization_DEFINED
9
+ #define GrSurfaceCharacterization_DEFINED
10
+
11
+ #include "include/core/SkColorSpace.h" // IWYU pragma: keep
12
+ #include "include/core/SkColorType.h"
13
+ #include "include/core/SkImageInfo.h"
14
+ #include "include/core/SkRefCnt.h"
15
+ #include "include/core/SkSize.h"
16
+ #include "include/core/SkSurfaceProps.h"
17
+ #include "include/core/SkTypes.h"
18
+ #include "include/gpu/GpuTypes.h"
19
+ #include "include/gpu/GrBackendSurface.h"
20
+ #include "include/gpu/GrContextThreadSafeProxy.h"
21
+ #include "include/gpu/GrTypes.h"
22
+ #include "include/private/base/SkDebug.h"
23
+
24
+ #include <cstddef>
25
+ #include <utility>
26
+
27
+ /** \class GrSurfaceCharacterization
28
+ A surface characterization contains all the information Ganesh requires to makes its internal
29
+ rendering decisions. When passed into a GrDeferredDisplayListRecorder it will copy the
30
+ data and pass it on to the GrDeferredDisplayList if/when it is created. Note that both of
31
+ those objects (the Recorder and the DisplayList) will take a ref on the
32
+ GrContextThreadSafeProxy and SkColorSpace objects.
33
+ */
34
+ class SK_API GrSurfaceCharacterization {
35
+ public:
36
+ enum class Textureable : bool { kNo = false, kYes = true };
37
+ enum class MipMapped : bool { kNo = false, kYes = true };
38
+ enum class UsesGLFBO0 : bool { kNo = false, kYes = true };
39
+ // This flag indicates that the backing VkImage for this Vulkan surface will have the
40
+ // VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT set. This bit allows skia to handle advanced blends
41
+ // more optimally in a shader by being able to directly read the dst values.
42
+ enum class VkRTSupportsInputAttachment : bool { kNo = false, kYes = true };
43
+ // This flag indicates if the surface is wrapping a raw Vulkan secondary command buffer.
44
+ enum class VulkanSecondaryCBCompatible : bool { kNo = false, kYes = true };
45
+
46
+ GrSurfaceCharacterization()
47
+ : fCacheMaxResourceBytes(0)
48
+ , fOrigin(kBottomLeft_GrSurfaceOrigin)
49
+ , fSampleCnt(0)
50
+ , fIsTextureable(Textureable::kYes)
51
+ , fIsMipMapped(MipMapped::kYes)
52
+ , fUsesGLFBO0(UsesGLFBO0::kNo)
53
+ , fVulkanSecondaryCBCompatible(VulkanSecondaryCBCompatible::kNo)
54
+ , fIsProtected(GrProtected::kNo)
55
+ , fSurfaceProps(0, kUnknown_SkPixelGeometry) {
56
+ }
57
+
58
+ GrSurfaceCharacterization(GrSurfaceCharacterization&&) = default;
59
+ GrSurfaceCharacterization& operator=(GrSurfaceCharacterization&&) = default;
60
+
61
+ GrSurfaceCharacterization(const GrSurfaceCharacterization&) = default;
62
+ GrSurfaceCharacterization& operator=(const GrSurfaceCharacterization& other) = default;
63
+ bool operator==(const GrSurfaceCharacterization& other) const;
64
+ bool operator!=(const GrSurfaceCharacterization& other) const {
65
+ return !(*this == other);
66
+ }
67
+
68
+ /*
69
+ * Return a new surface characterization with the only difference being a different width
70
+ * and height
71
+ */
72
+ GrSurfaceCharacterization createResized(int width, int height) const;
73
+
74
+ /*
75
+ * Return a new surface characterization with only a replaced color space
76
+ */
77
+ GrSurfaceCharacterization createColorSpace(sk_sp<SkColorSpace>) const;
78
+
79
+ /*
80
+ * Return a new surface characterization with the backend format replaced. A colorType
81
+ * must also be supplied to indicate the interpretation of the new format.
82
+ */
83
+ GrSurfaceCharacterization createBackendFormat(SkColorType colorType,
84
+ const GrBackendFormat& backendFormat) const;
85
+
86
+ /*
87
+ * Return a new surface characterization with just a different use of FBO0 (in GL)
88
+ */
89
+ GrSurfaceCharacterization createFBO0(bool usesGLFBO0) const;
90
+
91
+ GrContextThreadSafeProxy* contextInfo() const { return fContextInfo.get(); }
92
+ sk_sp<GrContextThreadSafeProxy> refContextInfo() const { return fContextInfo; }
93
+ size_t cacheMaxResourceBytes() const { return fCacheMaxResourceBytes; }
94
+
95
+ bool isValid() const { return kUnknown_SkColorType != fImageInfo.colorType(); }
96
+
97
+ const SkImageInfo& imageInfo() const { return fImageInfo; }
98
+ const GrBackendFormat& backendFormat() const { return fBackendFormat; }
99
+ GrSurfaceOrigin origin() const { return fOrigin; }
100
+ SkISize dimensions() const { return fImageInfo.dimensions(); }
101
+ int width() const { return fImageInfo.width(); }
102
+ int height() const { return fImageInfo.height(); }
103
+ SkColorType colorType() const { return fImageInfo.colorType(); }
104
+ int sampleCount() const { return fSampleCnt; }
105
+ bool isTextureable() const { return Textureable::kYes == fIsTextureable; }
106
+ bool isMipMapped() const { return MipMapped::kYes == fIsMipMapped; }
107
+ bool usesGLFBO0() const { return UsesGLFBO0::kYes == fUsesGLFBO0; }
108
+ bool vkRTSupportsInputAttachment() const {
109
+ return VkRTSupportsInputAttachment::kYes == fVkRTSupportsInputAttachment;
110
+ }
111
+ bool vulkanSecondaryCBCompatible() const {
112
+ return VulkanSecondaryCBCompatible::kYes == fVulkanSecondaryCBCompatible;
113
+ }
114
+ GrProtected isProtected() const { return fIsProtected; }
115
+ SkColorSpace* colorSpace() const { return fImageInfo.colorSpace(); }
116
+ sk_sp<SkColorSpace> refColorSpace() const { return fImageInfo.refColorSpace(); }
117
+ const SkSurfaceProps& surfaceProps()const { return fSurfaceProps; }
118
+
119
+ // Is the provided backend texture compatible with this surface characterization?
120
+ bool isCompatible(const GrBackendTexture&) const;
121
+
122
+ private:
123
+ friend class SkSurface_Ganesh; // for 'set' & 'config'
124
+ friend class GrVkSecondaryCBDrawContext; // for 'set' & 'config'
125
+ friend class GrContextThreadSafeProxy; // for private ctor
126
+ friend class GrDeferredDisplayListRecorder; // for 'config'
127
+ friend class SkSurface; // for 'config'
128
+
129
+ SkDEBUGCODE(void validate() const;)
130
+
131
+ GrSurfaceCharacterization(sk_sp<GrContextThreadSafeProxy> contextInfo,
132
+ size_t cacheMaxResourceBytes,
133
+ const SkImageInfo& ii,
134
+ const GrBackendFormat& backendFormat,
135
+ GrSurfaceOrigin origin,
136
+ int sampleCnt,
137
+ Textureable isTextureable,
138
+ MipMapped isMipMapped,
139
+ UsesGLFBO0 usesGLFBO0,
140
+ VkRTSupportsInputAttachment vkRTSupportsInputAttachment,
141
+ VulkanSecondaryCBCompatible vulkanSecondaryCBCompatible,
142
+ GrProtected isProtected,
143
+ const SkSurfaceProps& surfaceProps)
144
+ : fContextInfo(std::move(contextInfo))
145
+ , fCacheMaxResourceBytes(cacheMaxResourceBytes)
146
+ , fImageInfo(ii)
147
+ , fBackendFormat(backendFormat)
148
+ , fOrigin(origin)
149
+ , fSampleCnt(sampleCnt)
150
+ , fIsTextureable(isTextureable)
151
+ , fIsMipMapped(isMipMapped)
152
+ , fUsesGLFBO0(usesGLFBO0)
153
+ , fVkRTSupportsInputAttachment(vkRTSupportsInputAttachment)
154
+ , fVulkanSecondaryCBCompatible(vulkanSecondaryCBCompatible)
155
+ , fIsProtected(isProtected)
156
+ , fSurfaceProps(surfaceProps) {
157
+ if (fSurfaceProps.flags() & SkSurfaceProps::kDynamicMSAA_Flag) {
158
+ // Dynamic MSAA is not currently supported with DDL.
159
+ *this = {};
160
+ }
161
+ SkDEBUGCODE(this->validate());
162
+ }
163
+
164
+ void set(sk_sp<GrContextThreadSafeProxy> contextInfo,
165
+ size_t cacheMaxResourceBytes,
166
+ const SkImageInfo& ii,
167
+ const GrBackendFormat& backendFormat,
168
+ GrSurfaceOrigin origin,
169
+ int sampleCnt,
170
+ Textureable isTextureable,
171
+ MipMapped isMipMapped,
172
+ UsesGLFBO0 usesGLFBO0,
173
+ VkRTSupportsInputAttachment vkRTSupportsInputAttachment,
174
+ VulkanSecondaryCBCompatible vulkanSecondaryCBCompatible,
175
+ GrProtected isProtected,
176
+ const SkSurfaceProps& surfaceProps) {
177
+ if (surfaceProps.flags() & SkSurfaceProps::kDynamicMSAA_Flag) {
178
+ // Dynamic MSAA is not currently supported with DDL.
179
+ *this = {};
180
+ } else {
181
+ fContextInfo = contextInfo;
182
+ fCacheMaxResourceBytes = cacheMaxResourceBytes;
183
+
184
+ fImageInfo = ii;
185
+ fBackendFormat = backendFormat;
186
+ fOrigin = origin;
187
+ fSampleCnt = sampleCnt;
188
+ fIsTextureable = isTextureable;
189
+ fIsMipMapped = isMipMapped;
190
+ fUsesGLFBO0 = usesGLFBO0;
191
+ fVkRTSupportsInputAttachment = vkRTSupportsInputAttachment;
192
+ fVulkanSecondaryCBCompatible = vulkanSecondaryCBCompatible;
193
+ fIsProtected = isProtected;
194
+ fSurfaceProps = surfaceProps;
195
+ }
196
+ SkDEBUGCODE(this->validate());
197
+ }
198
+
199
+ sk_sp<GrContextThreadSafeProxy> fContextInfo;
200
+ size_t fCacheMaxResourceBytes;
201
+
202
+ SkImageInfo fImageInfo;
203
+ GrBackendFormat fBackendFormat;
204
+ GrSurfaceOrigin fOrigin;
205
+ int fSampleCnt;
206
+ Textureable fIsTextureable;
207
+ MipMapped fIsMipMapped;
208
+ UsesGLFBO0 fUsesGLFBO0;
209
+ VkRTSupportsInputAttachment fVkRTSupportsInputAttachment;
210
+ VulkanSecondaryCBCompatible fVulkanSecondaryCBCompatible;
211
+ GrProtected fIsProtected;
212
+ SkSurfaceProps fSurfaceProps;
213
+ };
214
+
215
+ #endif
@@ -15,15 +15,15 @@
15
15
  #include <memory>
16
16
 
17
17
  class GrBackendSemaphore;
18
+ class GrDeferredDisplayList;
18
19
  class GrRecordingContext;
20
+ class GrSurfaceCharacterization;
19
21
  struct GrVkDrawableInfo;
20
22
  namespace skgpu::ganesh {
21
23
  class Device;
22
24
  }
23
25
  class SkCanvas;
24
- class SkDeferredDisplayList;
25
26
  struct SkImageInfo;
26
- class SkSurfaceCharacterization;
27
27
  class SkSurfaceProps;
28
28
 
29
29
  /**
@@ -107,15 +107,15 @@ public:
107
107
  const SkSurfaceProps& props() const { return fProps; }
108
108
 
109
109
  // TODO: Fill out these calls to support DDL
110
- bool characterize(SkSurfaceCharacterization* characterization) const;
110
+ bool characterize(GrSurfaceCharacterization* characterization) const;
111
111
 
112
112
  #ifndef SK_DDL_IS_UNIQUE_POINTER
113
- bool draw(sk_sp<const SkDeferredDisplayList> deferredDisplayList);
113
+ bool draw(sk_sp<const GrDeferredDisplayList> deferredDisplayList);
114
114
  #else
115
- bool draw(const SkDeferredDisplayList* deferredDisplayList);
115
+ bool draw(const GrDeferredDisplayList* deferredDisplayList);
116
116
  #endif
117
117
 
118
- bool isCompatible(const SkSurfaceCharacterization& characterization) const;
118
+ bool isCompatible(const GrSurfaceCharacterization& characterization) const;
119
119
 
120
120
  private:
121
121
  explicit GrVkSecondaryCBDrawContext(sk_sp<skgpu::ganesh::Device>, const SkSurfaceProps*);
@@ -0,0 +1,104 @@
1
+ /*
2
+ * Copyright 2023 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 SkImageChromium_DEFINED
9
+ #define SkImageChromium_DEFINED
10
+
11
+ #include "include/core/SkRefCnt.h"
12
+ #include "include/gpu/GrTypes.h"
13
+ #include "include/private/base/SkAPI.h"
14
+
15
+ class GrBackendFormat;
16
+ class GrContextThreadSafeProxy;
17
+ class GrPromiseImageTexture;
18
+ class GrYUVABackendTextureInfo;
19
+ class SkColorSpace;
20
+ class SkImage;
21
+ enum SkAlphaType : int;
22
+ enum SkColorType : int;
23
+ struct SkISize;
24
+
25
+ /**
26
+ * These functions expose features that are only for external use in Chromium.
27
+ */
28
+
29
+ namespace SkImages {
30
+
31
+ using PromiseImageTextureContext = void*;
32
+ using PromiseImageTextureFulfillProc = sk_sp<GrPromiseImageTexture> (*)(PromiseImageTextureContext);
33
+ using PromiseImageTextureReleaseProc = void (*)(PromiseImageTextureContext);
34
+
35
+ /** Create a new GPU-backed SkImage that is very similar to an SkImage created by BorrowTextureFrom.
36
+ The difference is that the caller need not have created the texture nor populated it with the
37
+ image pixel data. Moreover, the SkImage may be created on a thread as the creation of the
38
+ image does not require access to the backend API or GrDirectContext. Instead of passing a
39
+ GrBackendTexture the client supplies a description of the texture consisting of
40
+ GrBackendFormat, width, height, and GrMipmapped state. The resulting SkImage can be drawn
41
+ to a GrDeferredDisplayListRecorder or directly to a GPU-backed SkSurface.
42
+ When the actual texture is required to perform a backend API draw, textureFulfillProc will
43
+ be called to receive a GrBackendTexture. The properties of the GrBackendTexture must match
44
+ those set during the SkImage creation, and it must refer to a valid existing texture in the
45
+ backend API context/device, and be populated with the image pixel data. The texture cannot
46
+ be deleted until textureReleaseProc is called.
47
+ There is at most one call to each of textureFulfillProc and textureReleaseProc.
48
+ textureReleaseProc is always called even if image creation fails or if the
49
+ image is never fulfilled (e.g. it is never drawn or all draws are clipped out)
50
+ @param gpuContextProxy the thread-safe proxy of the gpu context. required.
51
+ @param backendFormat format of promised gpu texture
52
+ @param dimensions width & height of promised gpu texture
53
+ @param mipmapped mip mapped state of promised gpu texture
54
+ @param origin surface origin of promised gpu texture
55
+ @param colorType color type of promised gpu texture
56
+ @param alphaType alpha type of promised gpu texture
57
+ @param colorSpace range of colors; may be nullptr
58
+ @param textureFulfillProc function called to get actual gpu texture
59
+ @param textureReleaseProc function called when texture can be deleted
60
+ @param textureContext state passed to textureFulfillProc and textureReleaseProc
61
+ @return created SkImage, or nullptr
62
+ */
63
+ SK_API sk_sp<SkImage> PromiseTextureFrom(sk_sp<GrContextThreadSafeProxy> gpuContextProxy,
64
+ const GrBackendFormat& backendFormat,
65
+ SkISize dimensions,
66
+ GrMipmapped mipmapped,
67
+ GrSurfaceOrigin origin,
68
+ SkColorType colorType,
69
+ SkAlphaType alphaType,
70
+ sk_sp<SkColorSpace> colorSpace,
71
+ PromiseImageTextureFulfillProc textureFulfillProc,
72
+ PromiseImageTextureReleaseProc textureReleaseProc,
73
+ PromiseImageTextureContext textureContext);
74
+
75
+ /** This is similar to 'PromiseTextureFrom' but it creates a GPU-backed SkImage from YUV[A] data.
76
+ The source data may be planar (i.e. spread across multiple textures). In
77
+ the extreme Y, U, V, and A are all in different planes and thus the image is specified by
78
+ four textures. 'backendTextureInfo' describes the planar arrangement, texture formats,
79
+ conversion to RGB, and origin of the textures. Separate 'textureFulfillProc' and
80
+ 'textureReleaseProc' calls are made for each texture. Each texture has its own
81
+ PromiseImageTextureContext. If 'backendTextureInfo' is not valid then no release proc
82
+ calls are made. Otherwise, the calls will be made even on failure. 'textureContexts' has one
83
+ entry for each of the up to four textures, as indicated by 'backendTextureInfo'.
84
+ Currently the mip mapped property of 'backendTextureInfo' is ignored. However, in the
85
+ near future it will be required that if it is kYes then textureFulfillProc must return
86
+ a mip mapped texture for each plane in order to successfully draw the image.
87
+ @param gpuContextProxy the thread-safe proxy of the gpu context. required.
88
+ @param backendTextureInfo info about the promised yuva gpu texture
89
+ @param imageColorSpace range of colors; may be nullptr
90
+ @param textureFulfillProc function called to get actual gpu texture
91
+ @param textureReleaseProc function called when texture can be deleted
92
+ @param textureContexts state passed to textureFulfillProc and textureReleaseProc
93
+ @return created SkImage, or nullptr
94
+ */
95
+ SK_API sk_sp<SkImage> PromiseTextureFromYUVA(sk_sp<GrContextThreadSafeProxy> gpuContextProxy,
96
+ const GrYUVABackendTextureInfo& backendTextureInfo,
97
+ sk_sp<SkColorSpace> imageColorSpace,
98
+ PromiseImageTextureFulfillProc textureFulfillProc,
99
+ PromiseImageTextureReleaseProc textureReleaseProc,
100
+ PromiseImageTextureContext textureContexts[]);
101
+
102
+ } // namespace SkImages
103
+
104
+ #endif