@shopify/react-native-skia 0.1.233 → 0.1.236

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 (294) hide show
  1. package/android/CMakeLists.txt +0 -1
  2. package/android/cpp/jni/JniSkiaManager.cpp +0 -1
  3. package/android/cpp/rnskia-android/RNSkAndroidView.h +0 -1
  4. package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +1 -1
  5. package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.h +1 -2
  6. package/cpp/api/JsiSkTypefaceFactory.h +2 -1
  7. package/cpp/skia/include/android/AHardwareBufferUtils.h +23 -0
  8. package/cpp/skia/include/android/GrAHardwareBufferUtils.h +2 -0
  9. package/cpp/skia/include/android/graphite/SurfaceAndroid.h +59 -0
  10. package/cpp/skia/include/codec/SkAvifDecoder.h +1 -1
  11. package/cpp/skia/include/codec/SkBmpDecoder.h +1 -1
  12. package/cpp/skia/include/codec/SkCodec.h +21 -3
  13. package/cpp/skia/include/codec/SkGifDecoder.h +1 -1
  14. package/cpp/skia/include/codec/SkIcoDecoder.h +1 -1
  15. package/cpp/skia/include/codec/SkJpegDecoder.h +1 -1
  16. package/cpp/skia/include/codec/SkJpegxlDecoder.h +1 -1
  17. package/cpp/skia/include/codec/SkPngDecoder.h +1 -1
  18. package/cpp/skia/include/codec/SkRawDecoder.h +1 -1
  19. package/cpp/skia/include/codec/SkWbmpDecoder.h +1 -1
  20. package/cpp/skia/include/codec/SkWebpDecoder.h +1 -1
  21. package/cpp/skia/include/config/SkUserConfig.h +3 -1
  22. package/cpp/skia/include/core/SkCanvas.h +66 -37
  23. package/cpp/skia/include/core/SkColorFilter.h +5 -2
  24. package/cpp/skia/include/core/SkContourMeasure.h +1 -0
  25. package/cpp/skia/include/core/SkDocument.h +1 -0
  26. package/cpp/skia/include/core/SkFont.h +14 -24
  27. package/cpp/skia/include/core/SkFontArguments.h +1 -1
  28. package/cpp/skia/include/core/SkFontMetrics.h +1 -1
  29. package/cpp/skia/include/core/SkFontMgr.h +0 -7
  30. package/cpp/skia/include/core/SkGraphics.h +13 -0
  31. package/cpp/skia/include/core/SkMesh.h +9 -13
  32. package/cpp/skia/include/core/SkMilestone.h +1 -1
  33. package/cpp/skia/include/core/SkPathMeasure.h +2 -0
  34. package/cpp/skia/include/core/SkSerialProcs.h +29 -11
  35. package/cpp/skia/include/core/SkSize.h +3 -3
  36. package/cpp/skia/include/core/SkStream.h +3 -13
  37. package/cpp/skia/include/core/SkSurface.h +6 -3
  38. package/cpp/skia/include/core/SkSurfaceProps.h +2 -4
  39. package/cpp/skia/include/core/SkTraceMemoryDump.h +15 -0
  40. package/cpp/skia/include/core/SkTypeface.h +8 -56
  41. package/cpp/skia/include/core/SkTypes.h +8 -0
  42. package/cpp/skia/include/core/SkVertices.h +1 -1
  43. package/cpp/skia/include/docs/SkMultiPictureDocument.h +53 -0
  44. package/cpp/skia/include/docs/SkPDFDocument.h +11 -0
  45. package/cpp/skia/include/effects/SkGradientShader.h +9 -0
  46. package/cpp/skia/include/effects/SkRuntimeEffect.h +3 -7
  47. package/cpp/skia/include/gpu/GrBackendSemaphore.h +33 -47
  48. package/cpp/skia/include/gpu/GrBackendSurface.h +2 -3
  49. package/cpp/skia/include/gpu/GrContextOptions.h +0 -6
  50. package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +44 -28
  51. package/cpp/skia/include/gpu/GrDirectContext.h +12 -31
  52. package/cpp/skia/include/gpu/GrTypes.h +1 -16
  53. package/cpp/skia/include/gpu/MutableTextureState.h +35 -80
  54. package/cpp/skia/include/gpu/ShaderErrorHandler.h +11 -1
  55. package/cpp/skia/include/gpu/ganesh/SkImageGanesh.h +2 -2
  56. package/cpp/skia/include/gpu/ganesh/SkSurfaceGanesh.h +1 -1
  57. package/cpp/skia/include/gpu/ganesh/gl/GrGLDirectContext.h +3 -2
  58. package/cpp/skia/include/gpu/ganesh/vk/GrVkBackendSemaphore.h +20 -0
  59. package/cpp/skia/include/gpu/ganesh/vk/GrVkDirectContext.h +30 -0
  60. package/cpp/skia/include/gpu/gl/GrGLFunctions.h +1 -1
  61. package/cpp/skia/include/gpu/gl/GrGLInterface.h +2 -0
  62. package/cpp/skia/include/gpu/gl/glx/GrGLMakeGLXInterface.h +6 -0
  63. package/cpp/skia/include/gpu/graphite/BackendSemaphore.h +3 -3
  64. package/cpp/skia/include/gpu/graphite/BackendTexture.h +39 -27
  65. package/cpp/skia/include/gpu/graphite/Context.h +39 -13
  66. package/cpp/skia/include/gpu/graphite/ContextOptions.h +2 -0
  67. package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +2 -1
  68. package/cpp/skia/include/gpu/graphite/Image.h +106 -87
  69. package/cpp/skia/include/gpu/graphite/Recorder.h +24 -3
  70. package/cpp/skia/include/gpu/graphite/Surface.h +7 -2
  71. package/cpp/skia/include/gpu/graphite/dawn/DawnBackendContext.h +41 -2
  72. package/cpp/skia/include/gpu/graphite/dawn/DawnTypes.h +11 -6
  73. package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteTypes.h +1 -2
  74. package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +6 -6
  75. package/cpp/skia/include/gpu/mock/GrMockTypes.h +1 -0
  76. package/cpp/skia/include/gpu/vk/GrVkBackendContext.h +1 -1
  77. package/cpp/skia/include/gpu/vk/GrVkTypes.h +1 -44
  78. package/cpp/skia/include/gpu/vk/VulkanExtensions.h +1 -1
  79. package/cpp/skia/include/gpu/vk/VulkanMutableTextureState.h +25 -0
  80. package/cpp/skia/include/gpu/vk/VulkanTypes.h +44 -0
  81. package/cpp/skia/include/ports/SkFontConfigInterface.h +3 -6
  82. package/cpp/skia/include/private/SkEncodedInfo.h +5 -0
  83. package/cpp/skia/include/private/SkExif.h +102 -0
  84. package/cpp/skia/include/private/SkGainmapInfo.h +11 -1
  85. package/cpp/skia/include/private/base/SkAssert.h +16 -0
  86. package/cpp/skia/include/private/base/SkDeque.h +2 -7
  87. package/cpp/skia/include/private/base/SkLoadUserConfig.h +1 -1
  88. package/cpp/skia/include/private/base/SkTArray.h +69 -28
  89. package/cpp/skia/include/private/base/SkThreadAnnotations.h +18 -5
  90. package/cpp/skia/include/private/chromium/GrSurfaceCharacterization.h +26 -30
  91. package/cpp/skia/include/private/chromium/GrVkSecondaryCBDrawContext.h +4 -3
  92. package/cpp/skia/include/private/chromium/SkImageChromium.h +1 -1
  93. package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +8 -6
  94. package/cpp/skia/include/private/gpu/graphite/ContextOptionsPriv.h +29 -0
  95. package/cpp/skia/include/private/gpu/graphite/DawnTypesPriv.h +12 -9
  96. package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +16 -11
  97. package/cpp/skia/include/third_party/vulkan/vulkan/vk_platform.h +2 -2
  98. package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h264std.h +312 -0
  99. package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h264std_decode.h +77 -0
  100. package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h265std.h +446 -0
  101. package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h265std_decode.h +67 -0
  102. package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codecs_common.h +36 -0
  103. package/cpp/skia/include/third_party/vulkan/vulkan/vulkan.h +9 -2
  104. package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_android.h +31 -3
  105. package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_core.h +10624 -5716
  106. package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_ios.h +2 -1
  107. package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_macos.h +2 -1
  108. package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_win32.h +28 -1
  109. package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_xcb.h +2 -1
  110. package/cpp/skia/include/utils/mac/SkCGUtils.h +23 -11
  111. package/cpp/skia/modules/skcms/skcms.h +2 -410
  112. package/cpp/skia/modules/skcms/src/Transform_inl.h +831 -704
  113. package/cpp/skia/modules/skcms/src/skcms_Transform.h +161 -0
  114. package/cpp/skia/modules/skcms/src/skcms_internals.h +136 -0
  115. package/cpp/skia/modules/skcms/src/skcms_public.h +404 -0
  116. package/cpp/skia/modules/skparagraph/include/FontArguments.h +1 -1
  117. package/cpp/skia/modules/skparagraph/include/FontCollection.h +2 -0
  118. package/cpp/skia/modules/skparagraph/include/Paragraph.h +2 -2
  119. package/cpp/skia/modules/skparagraph/include/TextStyle.h +4 -3
  120. package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +1 -3
  121. package/cpp/skia/modules/skresources/include/SkResources.h +28 -17
  122. package/cpp/skia/modules/skunicode/include/SkUnicode.h +12 -0
  123. package/cpp/skia/modules/svg/include/SkSVGDOM.h +4 -1
  124. package/cpp/skia/modules/svg/include/SkSVGRenderContext.h +4 -1
  125. package/cpp/skia/src/base/SkUTF.h +7 -0
  126. package/cpp/skia/src/core/SkTHash.h +20 -8
  127. package/lib/commonjs/dom/nodes/JsiSkDOM.d.ts +3 -2
  128. package/lib/commonjs/dom/nodes/JsiSkDOM.js +56 -57
  129. package/lib/commonjs/dom/nodes/JsiSkDOM.js.map +1 -1
  130. package/lib/commonjs/external/reanimated/index.d.ts +1 -0
  131. package/lib/commonjs/external/reanimated/index.js +13 -0
  132. package/lib/commonjs/external/reanimated/index.js.map +1 -1
  133. package/lib/commonjs/external/reanimated/interpolators.js +16 -2
  134. package/lib/commonjs/external/reanimated/interpolators.js.map +1 -1
  135. package/lib/commonjs/external/reanimated/moduleWrapper.d.ts +1 -0
  136. package/lib/commonjs/external/reanimated/moduleWrapper.js +5 -3
  137. package/lib/commonjs/external/reanimated/moduleWrapper.js.map +1 -1
  138. package/lib/commonjs/external/reanimated/textures.d.ts +5 -0
  139. package/lib/commonjs/external/reanimated/textures.js +52 -0
  140. package/lib/commonjs/external/reanimated/textures.js.map +1 -0
  141. package/lib/commonjs/headless/index.js +1 -1
  142. package/lib/commonjs/headless/index.js.map +1 -1
  143. package/lib/commonjs/mock/index.js +3 -0
  144. package/lib/commonjs/mock/index.js.map +1 -1
  145. package/lib/commonjs/renderer/Canvas.js +6 -5
  146. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  147. package/lib/commonjs/renderer/Container.d.ts +1 -1
  148. package/lib/commonjs/renderer/Container.js +2 -1
  149. package/lib/commonjs/renderer/Container.js.map +1 -1
  150. package/lib/commonjs/renderer/Offscreen.d.ts +1 -0
  151. package/lib/commonjs/renderer/Offscreen.js +18 -5
  152. package/lib/commonjs/renderer/Offscreen.js.map +1 -1
  153. package/lib/commonjs/renderer/Reconciler.d.ts +1 -1
  154. package/lib/commonjs/renderer/Reconciler.js +7 -4
  155. package/lib/commonjs/renderer/Reconciler.js.map +1 -1
  156. package/lib/commonjs/skia/types/Matrix4.d.ts +2 -2
  157. package/lib/commonjs/skia/types/Matrix4.js.map +1 -1
  158. package/lib/commonjs/skia/types/Shader/Shader.d.ts +1 -1
  159. package/lib/commonjs/skia/types/Shader/Shader.js.map +1 -1
  160. package/lib/commonjs/skia/web/JsiSkPath.d.ts +2 -2
  161. package/lib/commonjs/skia/web/JsiSkPath.js +10 -2
  162. package/lib/commonjs/skia/web/JsiSkPath.js.map +1 -1
  163. package/lib/commonjs/views/SkiaJSDomView.d.ts +31 -0
  164. package/lib/commonjs/views/SkiaJSDomView.js +161 -0
  165. package/lib/commonjs/views/SkiaJSDomView.js.map +1 -0
  166. package/lib/commonjs/views/SkiaJSDomView.web.d.ts +1 -0
  167. package/lib/commonjs/views/SkiaJSDomView.web.js +14 -0
  168. package/lib/commonjs/views/SkiaJSDomView.web.js.map +1 -0
  169. package/lib/module/dom/nodes/JsiSkDOM.d.ts +3 -2
  170. package/lib/module/dom/nodes/JsiSkDOM.js +56 -56
  171. package/lib/module/dom/nodes/JsiSkDOM.js.map +1 -1
  172. package/lib/module/external/reanimated/index.d.ts +1 -0
  173. package/lib/module/external/reanimated/index.js +1 -0
  174. package/lib/module/external/reanimated/index.js.map +1 -1
  175. package/lib/module/external/reanimated/interpolators.js +15 -2
  176. package/lib/module/external/reanimated/interpolators.js.map +1 -1
  177. package/lib/module/external/reanimated/moduleWrapper.d.ts +1 -0
  178. package/lib/module/external/reanimated/moduleWrapper.js +3 -2
  179. package/lib/module/external/reanimated/moduleWrapper.js.map +1 -1
  180. package/lib/module/external/reanimated/textures.d.ts +5 -0
  181. package/lib/module/external/reanimated/textures.js +35 -0
  182. package/lib/module/external/reanimated/textures.js.map +1 -0
  183. package/lib/module/headless/index.js +1 -1
  184. package/lib/module/headless/index.js.map +1 -1
  185. package/lib/module/mock/index.js +3 -0
  186. package/lib/module/mock/index.js.map +1 -1
  187. package/lib/module/renderer/Canvas.js +5 -4
  188. package/lib/module/renderer/Canvas.js.map +1 -1
  189. package/lib/module/renderer/Container.d.ts +1 -1
  190. package/lib/module/renderer/Container.js +2 -1
  191. package/lib/module/renderer/Container.js.map +1 -1
  192. package/lib/module/renderer/Offscreen.d.ts +1 -0
  193. package/lib/module/renderer/Offscreen.js +11 -3
  194. package/lib/module/renderer/Offscreen.js.map +1 -1
  195. package/lib/module/renderer/Reconciler.d.ts +1 -1
  196. package/lib/module/renderer/Reconciler.js +7 -4
  197. package/lib/module/renderer/Reconciler.js.map +1 -1
  198. package/lib/module/skia/types/Matrix4.d.ts +2 -2
  199. package/lib/module/skia/types/Matrix4.js.map +1 -1
  200. package/lib/module/skia/types/Shader/Shader.d.ts +1 -1
  201. package/lib/module/skia/types/Shader/Shader.js.map +1 -1
  202. package/lib/module/skia/web/JsiSkPath.d.ts +2 -2
  203. package/lib/module/skia/web/JsiSkPath.js +10 -2
  204. package/lib/module/skia/web/JsiSkPath.js.map +1 -1
  205. package/lib/module/views/SkiaJSDomView.d.ts +31 -0
  206. package/lib/module/views/SkiaJSDomView.js +136 -0
  207. package/lib/module/views/SkiaJSDomView.js.map +1 -0
  208. package/lib/module/views/SkiaJSDomView.web.d.ts +1 -0
  209. package/lib/module/views/SkiaJSDomView.web.js +2 -0
  210. package/lib/module/views/SkiaJSDomView.web.js.map +1 -0
  211. package/lib/typescript/src/dom/nodes/JsiSkDOM.d.ts +3 -2
  212. package/lib/typescript/src/external/reanimated/index.d.ts +1 -0
  213. package/lib/typescript/src/external/reanimated/moduleWrapper.d.ts +1 -0
  214. package/lib/typescript/src/external/reanimated/textures.d.ts +5 -0
  215. package/lib/typescript/src/renderer/Container.d.ts +1 -1
  216. package/lib/typescript/src/renderer/Offscreen.d.ts +1 -0
  217. package/lib/typescript/src/renderer/Reconciler.d.ts +1 -1
  218. package/lib/typescript/src/skia/types/Matrix4.d.ts +2 -2
  219. package/lib/typescript/src/skia/types/Shader/Shader.d.ts +1 -1
  220. package/lib/typescript/src/skia/web/JsiSkPath.d.ts +2 -2
  221. package/lib/typescript/src/views/SkiaJSDomView.d.ts +31 -0
  222. package/lib/typescript/src/views/SkiaJSDomView.web.d.ts +1 -0
  223. package/libs/android/arm64-v8a/libskia.a +0 -0
  224. package/libs/android/arm64-v8a/libskottie.a +0 -0
  225. package/libs/android/arm64-v8a/libskparagraph.a +0 -0
  226. package/libs/android/arm64-v8a/libsksg.a +0 -0
  227. package/libs/android/arm64-v8a/libskshaper.a +0 -0
  228. package/libs/android/arm64-v8a/libskunicode.a +0 -0
  229. package/libs/android/arm64-v8a/libsvg.a +0 -0
  230. package/libs/android/armeabi-v7a/libskia.a +0 -0
  231. package/libs/android/armeabi-v7a/libskottie.a +0 -0
  232. package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
  233. package/libs/android/armeabi-v7a/libsksg.a +0 -0
  234. package/libs/android/armeabi-v7a/libskshaper.a +0 -0
  235. package/libs/android/armeabi-v7a/libskunicode.a +0 -0
  236. package/libs/android/armeabi-v7a/libsvg.a +0 -0
  237. package/libs/android/x86/libskia.a +0 -0
  238. package/libs/android/x86/libskottie.a +0 -0
  239. package/libs/android/x86/libskparagraph.a +0 -0
  240. package/libs/android/x86/libsksg.a +0 -0
  241. package/libs/android/x86/libskshaper.a +0 -0
  242. package/libs/android/x86/libskunicode.a +0 -0
  243. package/libs/android/x86/libsvg.a +0 -0
  244. package/libs/android/x86_64/libskia.a +0 -0
  245. package/libs/android/x86_64/libskottie.a +0 -0
  246. package/libs/android/x86_64/libskparagraph.a +0 -0
  247. package/libs/android/x86_64/libsksg.a +0 -0
  248. package/libs/android/x86_64/libskshaper.a +0 -0
  249. package/libs/android/x86_64/libskunicode.a +0 -0
  250. package/libs/android/x86_64/libsvg.a +0 -0
  251. package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  252. package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  253. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  254. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  255. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  256. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  257. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  258. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  259. package/libs/ios/libskshaper.xcframework/Info.plist +5 -5
  260. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  261. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  262. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
  263. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
  264. package/libs/ios/libsvg.xcframework/Info.plist +5 -5
  265. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  266. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  267. package/package.json +1 -1
  268. package/src/dom/nodes/JsiSkDOM.ts +55 -56
  269. package/src/external/reanimated/index.ts +1 -0
  270. package/src/external/reanimated/interpolators.ts +17 -3
  271. package/src/external/reanimated/moduleWrapper.ts +1 -0
  272. package/src/external/reanimated/textures.tsx +50 -0
  273. package/src/headless/index.ts +1 -1
  274. package/src/mock/index.ts +3 -0
  275. package/src/renderer/Canvas.tsx +4 -3
  276. package/src/renderer/Container.tsx +3 -2
  277. package/src/renderer/Offscreen.tsx +12 -3
  278. package/src/renderer/Reconciler.tsx +5 -2
  279. package/src/skia/types/Matrix4.ts +2 -2
  280. package/src/skia/types/Shader/Shader.ts +6 -1
  281. package/src/skia/web/JsiSkPath.ts +23 -3
  282. package/src/views/SkiaJSDomView.tsx +126 -0
  283. package/src/views/SkiaJSDomView.web.tsx +1 -0
  284. package/android/cpp/jni/include/JniSkiaDrawView.h +0 -90
  285. package/cpp/rnskia/RNSkJsView.cpp +0 -236
  286. package/cpp/rnskia/RNSkJsView.h +0 -121
  287. package/cpp/skia/include/gpu/GrSurfaceInfo.h +0 -142
  288. package/cpp/skia/include/private/gpu/ganesh/GrGLTypesPriv.h +0 -107
  289. package/cpp/skia/include/private/gpu/ganesh/GrMockTypesPriv.h +0 -32
  290. package/cpp/skia/include/private/gpu/ganesh/GrMtlTypesPriv.h +0 -83
  291. package/cpp/skia/include/private/gpu/ganesh/GrVkTypesPriv.h +0 -47
  292. package/cpp/skia/include/private/gpu/vk/VulkanTypesPriv.h +0 -57
  293. package/cpp/skia/include/utils/SkBase64.h +0 -53
  294. package/cpp/skia/modules/skcms/skcms_internal.h +0 -56
@@ -18,9 +18,11 @@
18
18
  #include <chrono>
19
19
  #include <vector>
20
20
 
21
+ struct AHardwareBuffer;
21
22
  class SkCanvas;
22
23
  struct SkImageInfo;
23
24
  class SkPixmap;
25
+ class SkTraceMemoryDump;
24
26
 
25
27
  namespace skgpu {
26
28
  class RefCntedCallback;
@@ -65,7 +67,7 @@ struct SK_API RecorderOptions final {
65
67
 
66
68
  sk_sp<ImageProvider> fImageProvider;
67
69
 
68
- const size_t kDefaultRecorderBudget = 256 * (1 << 20);
70
+ static constexpr size_t kDefaultRecorderBudget = 256 * (1 << 20);
69
71
  // What is the budget for GPU resources allocated and held by this Recorder.
70
72
  size_t fGpuBudgetInBytes = kDefaultRecorderBudget;
71
73
  };
@@ -79,6 +81,8 @@ public:
79
81
 
80
82
  ~Recorder();
81
83
 
84
+ BackendApi backend() const;
85
+
82
86
  std::unique_ptr<Recording> snap();
83
87
 
84
88
  ImageProvider* clientImageProvider() { return fClientImageProvider.get(); }
@@ -97,6 +101,14 @@ public:
97
101
  */
98
102
  BackendTexture createBackendTexture(SkISize dimensions, const TextureInfo&);
99
103
 
104
+ #ifdef SK_BUILD_FOR_ANDROID
105
+ BackendTexture createBackendTexture(AHardwareBuffer*,
106
+ bool isRenderable,
107
+ bool isProtectedContent,
108
+ SkISize dimensions,
109
+ bool fromAndroidWindow = false) const;
110
+ #endif
111
+
100
112
  /**
101
113
  * If possible, updates a backend texture with the provided pixmap data. The client
102
114
  * should check the return value to see if the update was successful. The client is required
@@ -154,6 +166,17 @@ public:
154
166
  */
155
167
  void performDeferredCleanup(std::chrono::milliseconds msNotUsed);
156
168
 
169
+ /**
170
+ * Returns the number of bytes of gpu memory currently budgeted in the Recorder's cache.
171
+ */
172
+ size_t currentBudgetedBytes() const;
173
+
174
+ /**
175
+ * Enumerates all cached GPU resources owned by the Recorder and dumps their memory to
176
+ * traceMemoryDump.
177
+ */
178
+ void dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const;
179
+
157
180
  // Provides access to functions that aren't part of the public API.
158
181
  RecorderPriv priv();
159
182
  const RecorderPriv priv() const; // NOLINT(readability-const-return-type)
@@ -167,8 +190,6 @@ private:
167
190
 
168
191
  SingleOwner* singleOwner() const { return &fSingleOwner; }
169
192
 
170
- BackendApi backend() const;
171
-
172
193
  // We keep track of all Devices that are connected to a Recorder. This allows the client to
173
194
  // safely delete an SkSurface or a Recorder in any order. If the client deletes the Recorder
174
195
  // we need to notify all Devices that the Recorder is no longer valid. If we delete the
@@ -21,8 +21,11 @@ class Recorder;
21
21
  } // namespace skgpu::graphite
22
22
 
23
23
  namespace SkSurfaces {
24
+ using ReleaseContext = void*;
25
+ using TextureReleaseProc = void (*)(ReleaseContext);
26
+
24
27
  /**
25
- * The 'asImage' and 'makeImageCopy' API/entry points are currently only available for
28
+ * The 'AsImage' and 'AsImageCopy' API/entry points are currently only available for
26
29
  * Graphite.
27
30
  *
28
31
  * In this API, SkSurface no longer supports copy-on-write behavior. Instead, when creating
@@ -75,7 +78,9 @@ SK_API sk_sp<SkSurface> WrapBackendTexture(skgpu::graphite::Recorder*,
75
78
  const skgpu::graphite::BackendTexture&,
76
79
  SkColorType colorType,
77
80
  sk_sp<SkColorSpace> colorSpace,
78
- const SkSurfaceProps* props);
81
+ const SkSurfaceProps* props,
82
+ TextureReleaseProc = nullptr,
83
+ ReleaseContext = nullptr);
79
84
  } // namespace SkSurfaces
80
85
 
81
86
  #endif // skgpu_graphite_Surface_DEFINED
@@ -8,16 +8,55 @@
8
8
  #ifndef skgpu_graphite_DawnBackendContext_DEFINED
9
9
  #define skgpu_graphite_DawnBackendContext_DEFINED
10
10
 
11
- #include "webgpu/webgpu_cpp.h"
11
+ #include "include/core/SkTypes.h"
12
+ #include "webgpu/webgpu_cpp.h" // NO_G3_REWRITE
12
13
 
13
14
  namespace skgpu::graphite {
14
15
 
16
+ /**
17
+ * WebGPU needs to allow the main thread loop to run to detect GPU progress. Dawn native has a
18
+ * function wgpu::Dawn::Tick(), not present in WebGPU, that can be used to detect GPU progress.
19
+ *
20
+ * When compiling using Emscripten/WASM the -s ASYNCIFY option can be used to yield. E.g.:
21
+ *
22
+ * EM_ASYNC_JS(void, asyncSleep, (), {
23
+ * await new Promise((resolve, _) = > {
24
+ * setTimeout(resolve, 0);
25
+ * })
26
+ * });
27
+ *
28
+ * WebGPUTickFunction(wgpu::Device&) { asyncSleep(); }
29
+ *
30
+ * If no DawnTickFunction is provided then the graphite::Context will be "non-yielding". This
31
+ * implies the following restrictions on the Context:
32
+ *
33
+ * 1) SyncToCpu::kYes is disallowed as a parameter to Context::submit.
34
+ * 2) The client must guarantee that GPU work has completed before destroying Context as Context
35
+ * cannot await the work completion in its destructor. Context reports whether it is awaiting
36
+ * GPU work completion via Context::hasUnfinishedGpuWork().
37
+ *
38
+ * Using a non-yielding Context makes it possible to build and run Graphite/Dawn on WebGPU without
39
+ * -s ASYNCIFY.
40
+ */
41
+ using DawnTickFunction = void(const wgpu::Device& device);
42
+
43
+ #if !defined(__EMSCRIPTEN__)
44
+ SK_API inline void DawnNativeTickFunction(const wgpu::Device& device) { device.Tick(); }
45
+ #endif
46
+
15
47
  // The DawnBackendContext contains all of the base Dawn objects needed by the graphite Dawn
16
48
  // backend. The client will create this object and pass it into the Context::MakeDawn factory call
17
49
  // when setting up Skia.
18
50
  struct SK_API DawnBackendContext {
19
51
  wgpu::Device fDevice;
20
- wgpu::Queue fQueue;
52
+ wgpu::Queue fQueue;
53
+ // See comment on DawnTickFunction.
54
+ DawnTickFunction* fTick =
55
+ #if defined(__EMSCRIPTEN__)
56
+ nullptr;
57
+ #else
58
+ DawnNativeTickFunction;
59
+ #endif
21
60
  };
22
61
 
23
62
  } // namespace skgpu::graphite
@@ -9,7 +9,7 @@
9
9
  #define skgpu_graphite_DawnTypes_DEFINED
10
10
 
11
11
  #include "include/gpu/graphite/GraphiteTypes.h"
12
- #include "webgpu/webgpu_cpp.h"
12
+ #include "webgpu/webgpu_cpp.h" // NO_G3_REWRITE
13
13
 
14
14
  namespace skgpu::graphite {
15
15
 
@@ -18,19 +18,24 @@ struct DawnTextureInfo {
18
18
  Mipmapped fMipmapped = Mipmapped::kNo;
19
19
 
20
20
  // wgpu::TextureDescriptor properties
21
+ // `fFormat` for multiplanar formats corresponds to the plane TextureView's format.
21
22
  wgpu::TextureFormat fFormat = wgpu::TextureFormat::Undefined;
22
- wgpu::TextureUsage fUsage = wgpu::TextureUsage::None;
23
+ wgpu::TextureUsage fUsage = wgpu::TextureUsage::None;
24
+ // TODO(b/308944094): Migrate aspect information to BackendTextureViews.
25
+ wgpu::TextureAspect fAspect = wgpu::TextureAspect::All;
23
26
 
24
27
  DawnTextureInfo() = default;
25
28
  DawnTextureInfo(const wgpu::Texture& texture);
26
29
  DawnTextureInfo(uint32_t sampleCount,
27
30
  Mipmapped mipmapped,
28
- wgpu::TextureFormat format,
29
- wgpu::TextureUsage usage)
31
+ wgpu::TextureFormat viewFormat,
32
+ wgpu::TextureUsage usage,
33
+ wgpu::TextureAspect aspect)
30
34
  : fSampleCount(sampleCount)
31
35
  , fMipmapped(mipmapped)
32
- , fFormat(format)
33
- , fUsage(usage) {}
36
+ , fFormat(viewFormat)
37
+ , fUsage(usage)
38
+ , fAspect(aspect) {}
34
39
  };
35
40
 
36
41
  } // namespace skgpu::graphite
@@ -35,7 +35,6 @@ namespace skgpu::graphite {
35
35
  using MtlPixelFormat = unsigned int;
36
36
  using MtlTextureUsage = unsigned int;
37
37
  using MtlStorageMode = unsigned int;
38
- using MtlHandle = const void*;
39
38
 
40
39
  struct MtlTextureInfo {
41
40
  uint32_t fSampleCount = 1;
@@ -49,7 +48,7 @@ struct MtlTextureInfo {
49
48
  bool fFramebufferOnly = false;
50
49
 
51
50
  MtlTextureInfo() = default;
52
- MtlTextureInfo(MtlHandle mtlTexture);
51
+ MtlTextureInfo(CFTypeRef mtlTexture);
53
52
  MtlTextureInfo(uint32_t sampleCount,
54
53
  skgpu::Mipmapped mipmapped,
55
54
  MtlPixelFormat format,
@@ -33,10 +33,8 @@ struct VulkanTextureInfo {
33
33
  // However, if the VkImage is a Ycbcr format, the client can pass a specific plan here to have
34
34
  // Skia directly sample a plane. In that case the client should also pass in a VkFormat that is
35
35
  // compatible with the plane as described by the Vulkan spec.
36
- VkImageAspectFlags fAspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
37
- // TODO: Either Make the ycbcr conversion info shareable with Ganesh or add a version for
38
- // Graphite.
39
- // GrVkYcbcrConversionInfo fYcbcrConversionInfo;
36
+ VkImageAspectFlags fAspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
37
+ VulkanYcbcrConversionInfo fYcbcrConversionInfo;
40
38
 
41
39
  VulkanTextureInfo() = default;
42
40
  VulkanTextureInfo(uint32_t sampleCount,
@@ -46,7 +44,8 @@ struct VulkanTextureInfo {
46
44
  VkImageTiling imageTiling,
47
45
  VkImageUsageFlags imageUsageFlags,
48
46
  VkSharingMode sharingMode,
49
- VkImageAspectFlags aspectMask)
47
+ VkImageAspectFlags aspectMask,
48
+ VulkanYcbcrConversionInfo ycbcrConversionInfo)
50
49
  : fSampleCount(sampleCount)
51
50
  , fMipmapped(mipmapped)
52
51
  , fFlags(flags)
@@ -54,7 +53,8 @@ struct VulkanTextureInfo {
54
53
  , fImageTiling(imageTiling)
55
54
  , fImageUsageFlags(imageUsageFlags)
56
55
  , fSharingMode(sharingMode)
57
- , fAspectMask(aspectMask) {}
56
+ , fAspectMask(aspectMask)
57
+ , fYcbcrConversionInfo(ycbcrConversionInfo) {}
58
58
  };
59
59
 
60
60
  } // namespace skgpu::graphite
@@ -121,6 +121,7 @@ struct GrMockOptions {
121
121
  fConfigOptions[(int)GrColorType::kRGBA_8888].fTexturable = true;
122
122
  fConfigOptions[(int)GrColorType::kAlpha_8].fTexturable = true;
123
123
  fConfigOptions[(int)GrColorType::kBGR_565].fTexturable = true;
124
+ fConfigOptions[(int)GrColorType::kRGB_565].fTexturable = true;
124
125
 
125
126
  fConfigOptions[(int)GrColorType::kBGRA_8888] = fConfigOptions[(int)GrColorType::kRGBA_8888];
126
127
 
@@ -30,7 +30,7 @@ enum GrVkFeatureFlags {
30
30
  kSampleRateShading_GrVkFeatureFlag = 0x0004,
31
31
  };
32
32
 
33
- // It is not guarenteed VkPhysicalDeviceProperties2 will be in the client's header so we forward
33
+ // It is not guaranteed VkPhysicalDeviceProperties2 will be in the client's header so we forward
34
34
  // declare it here to be safe.
35
35
  struct VkPhysicalDeviceFeatures2;
36
36
 
@@ -14,50 +14,7 @@
14
14
 
15
15
  using GrVkBackendMemory = skgpu::VulkanBackendMemory;
16
16
  using GrVkAlloc = skgpu::VulkanAlloc;
17
-
18
- // This struct is used to pass in the necessary information to create a VkSamplerYcbcrConversion
19
- // object for an VkExternalFormatANDROID.
20
- struct GrVkYcbcrConversionInfo {
21
- bool operator==(const GrVkYcbcrConversionInfo& that) const {
22
- // Invalid objects are not required to have all other fields initialized or matching.
23
- if (!this->isValid() && !that.isValid()) {
24
- return true;
25
- }
26
- return this->fFormat == that.fFormat &&
27
- this->fExternalFormat == that.fExternalFormat &&
28
- this->fYcbcrModel == that.fYcbcrModel &&
29
- this->fYcbcrRange == that.fYcbcrRange &&
30
- this->fXChromaOffset == that.fXChromaOffset &&
31
- this->fYChromaOffset == that.fYChromaOffset &&
32
- this->fChromaFilter == that.fChromaFilter &&
33
- this->fForceExplicitReconstruction == that.fForceExplicitReconstruction;
34
- }
35
- bool operator!=(const GrVkYcbcrConversionInfo& that) const { return !(*this == that); }
36
-
37
- bool isValid() const {
38
- return fYcbcrModel != VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY ||
39
- fExternalFormat != 0;
40
- }
41
-
42
- // Format of the source image. Must be set to VK_FORMAT_UNDEFINED for external images or
43
- // a valid image format otherwise.
44
- VkFormat fFormat = VK_FORMAT_UNDEFINED;
45
-
46
- // The external format. Must be non-zero for external images, zero otherwise.
47
- // Should be compatible to be used in a VkExternalFormatANDROID struct.
48
- uint64_t fExternalFormat = 0;
49
-
50
- VkSamplerYcbcrModelConversion fYcbcrModel = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY;
51
- VkSamplerYcbcrRange fYcbcrRange = VK_SAMPLER_YCBCR_RANGE_ITU_FULL;
52
- VkChromaLocation fXChromaOffset = VK_CHROMA_LOCATION_COSITED_EVEN;
53
- VkChromaLocation fYChromaOffset = VK_CHROMA_LOCATION_COSITED_EVEN;
54
- VkFilter fChromaFilter = VK_FILTER_NEAREST;
55
- VkBool32 fForceExplicitReconstruction = false;
56
-
57
- // For external images format features here should be those returned by a call to
58
- // vkAndroidHardwareBufferFormatPropertiesANDROID
59
- VkFormatFeatureFlags fFormatFeatures = 0;
60
- };
17
+ using GrVkYcbcrConversionInfo = skgpu::VulkanYcbcrConversionInfo;
61
18
 
62
19
  /*
63
20
  * When wrapping a GrBackendTexture or GrBackendRendenderTarget, the fCurrentQueueFamily should
@@ -57,7 +57,7 @@ public:
57
57
  #endif
58
58
 
59
59
  private:
60
- void getSpecVersions(VulkanGetProc getProc, VkInstance, VkPhysicalDevice);
60
+ void getSpecVersions(const VulkanGetProc& getProc, VkInstance, VkPhysicalDevice);
61
61
 
62
62
  skia_private::TArray<Info> fExtensions;
63
63
  };
@@ -0,0 +1,25 @@
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 skgpu_VulkanMutableTextureState_DEFINED
9
+ #define skgpu_VulkanMutableTextureState_DEFINED
10
+
11
+ #include "include/gpu/MutableTextureState.h"
12
+ #include "include/private/gpu/vk/SkiaVulkan.h"
13
+
14
+ #include <cstdint>
15
+
16
+ namespace skgpu::MutableTextureStates {
17
+ MutableTextureState MakeVulkan(VkImageLayout layout, uint32_t queueFamilyIndex);
18
+
19
+ VkImageLayout GetVkImageLayout(const MutableTextureState& state);
20
+ VkImageLayout GetVkImageLayout(const MutableTextureState* state);
21
+ uint32_t GetVkQueueFamilyIndex(const MutableTextureState& state);
22
+ uint32_t GetVkQueueFamilyIndex(const MutableTextureState* state);
23
+ }
24
+
25
+ #endif
@@ -54,6 +54,50 @@ private:
54
54
  bool fUsesSystemHeap = false;
55
55
  };
56
56
 
57
+ // Used to pass in the necessary information to create a VkSamplerYcbcrConversion object for an
58
+ // VkExternalFormatANDROID.
59
+ struct VulkanYcbcrConversionInfo {
60
+ bool operator==(const VulkanYcbcrConversionInfo& that) const {
61
+ // Invalid objects are not required to have all other fields initialized or matching.
62
+ if (!this->isValid() && !that.isValid()) {
63
+ return true;
64
+ }
65
+ return this->fFormat == that.fFormat &&
66
+ this->fExternalFormat == that.fExternalFormat &&
67
+ this->fYcbcrModel == that.fYcbcrModel &&
68
+ this->fYcbcrRange == that.fYcbcrRange &&
69
+ this->fXChromaOffset == that.fXChromaOffset &&
70
+ this->fYChromaOffset == that.fYChromaOffset &&
71
+ this->fChromaFilter == that.fChromaFilter &&
72
+ this->fForceExplicitReconstruction == that.fForceExplicitReconstruction;
73
+ }
74
+ bool operator!=(const VulkanYcbcrConversionInfo& that) const { return !(*this == that); }
75
+
76
+ bool isValid() const {
77
+ return fYcbcrModel != VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY ||
78
+ fExternalFormat != 0;
79
+ }
80
+
81
+ // Format of the source image. Must be set to VK_FORMAT_UNDEFINED for external images or
82
+ // a valid image format otherwise.
83
+ VkFormat fFormat = VK_FORMAT_UNDEFINED;
84
+
85
+ // The external format. Must be non-zero for external images, zero otherwise.
86
+ // Should be compatible to be used in a VkExternalFormatANDROID struct.
87
+ uint64_t fExternalFormat = 0;
88
+
89
+ VkSamplerYcbcrModelConversion fYcbcrModel = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY;
90
+ VkSamplerYcbcrRange fYcbcrRange = VK_SAMPLER_YCBCR_RANGE_ITU_FULL;
91
+ VkChromaLocation fXChromaOffset = VK_CHROMA_LOCATION_COSITED_EVEN;
92
+ VkChromaLocation fYChromaOffset = VK_CHROMA_LOCATION_COSITED_EVEN;
93
+ VkFilter fChromaFilter = VK_FILTER_NEAREST;
94
+ VkBool32 fForceExplicitReconstruction = false;
95
+
96
+ // For external images format features here should be those returned by a call to
97
+ // vkAndroidHardwareBufferFormatPropertiesANDROID
98
+ VkFormatFeatureFlags fFormatFeatures = 0;
99
+ };
100
+
57
101
  } // namespace skgpu
58
102
 
59
103
  #endif // skgpu_VulkanTypes_DEFINED
@@ -95,13 +95,10 @@ public:
95
95
  * Return an SkTypeface for the given FontIdentity.
96
96
  *
97
97
  * The default implementation simply returns a new typeface built using data obtained from
98
- * openStream(), but derived classes may implement more complex caching schemes.
98
+ * openStream() using the provided SkFontMgr, but derived classes may implement more
99
+ * complex caching schemes.
99
100
  */
100
- virtual sk_sp<SkTypeface> makeTypeface(const FontIdentity& identity) {
101
- return SkTypeface::MakeFromStream(std::unique_ptr<SkStreamAsset>(this->openStream(identity)),
102
- identity.fTTCIndex);
103
-
104
- }
101
+ virtual sk_sp<SkTypeface> makeTypeface(const FontIdentity& identity, sk_sp<SkFontMgr> mgr);
105
102
 
106
103
  /**
107
104
  * Return a singleton instance of a direct subclass that calls into
@@ -29,6 +29,7 @@ public:
29
29
  static std::unique_ptr<ICCProfile> Make(const skcms_ICCProfile&);
30
30
 
31
31
  const skcms_ICCProfile* profile() const { return &fProfile; }
32
+ sk_sp<SkData> data() const { return fData; }
32
33
  private:
33
34
  ICCProfile(const skcms_ICCProfile&, sk_sp<SkData> = nullptr);
34
35
 
@@ -197,6 +198,10 @@ public:
197
198
  if (!fProfile) return nullptr;
198
199
  return fProfile->profile();
199
200
  }
201
+ sk_sp<SkData> profileData() const {
202
+ if (!fProfile) return nullptr;
203
+ return fProfile->data();
204
+ }
200
205
 
201
206
  uint8_t bitsPerComponent() const { return fBitsPerComponent; }
202
207
 
@@ -0,0 +1,102 @@
1
+ /*
2
+ * Copyright 2023 Google Inc.
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 SkExif_DEFINED
9
+ #define SkExif_DEFINED
10
+
11
+ #include "include/codec/SkEncodedOrigin.h"
12
+ #include "include/core/SkData.h"
13
+ #include "include/core/SkRefCnt.h"
14
+ #include "include/private/base/SkAPI.h"
15
+
16
+ #include <cstdint>
17
+
18
+ class SK_API SkExifMetadata {
19
+ public:
20
+ /*
21
+ * Parse the metadata specified in |data|.
22
+ */
23
+ SkExifMetadata(const sk_sp<SkData> data);
24
+
25
+ /*
26
+ * If the image encoded origin is specified, populate |out| and return true. Otherwise return
27
+ * false.
28
+ */
29
+ bool getOrigin(SkEncodedOrigin* out) const {
30
+ if (fOriginPresent && out) *out = fOriginValue;
31
+ return fOriginPresent;
32
+ }
33
+
34
+ /*
35
+ * If the HDR headroom is specified, populate |out| and return true. Otherwise return false.
36
+ */
37
+ bool getHdrHeadroom(float* out) const {
38
+ if (fHdrHeadroomPresent && out) *out = fHdrHeadroomValue;
39
+ return fHdrHeadroomPresent;
40
+ }
41
+
42
+ /*
43
+ * If resolution unit, x, or y is specified, populate |out| and return true. Otherwise return
44
+ * false.
45
+ */
46
+ bool getResolutionUnit(uint16_t* out) const {
47
+ if (fResolutionUnitPresent && out) *out = fResolutionUnitValue;
48
+ return fResolutionUnitPresent;
49
+ }
50
+ bool getXResolution(float* out) const {
51
+ if (fXResolutionPresent && out) *out = fXResolutionValue;
52
+ return fXResolutionPresent;
53
+ }
54
+ bool getYResolution(float* out) const {
55
+ if (fYResolutionPresent && out) *out = fYResolutionValue;
56
+ return fYResolutionPresent;
57
+ }
58
+
59
+ /*
60
+ * If pixel dimension x or y is specified, populate |out| and return true. Otherwise return
61
+ * false.
62
+ */
63
+ bool getPixelXDimension(uint32_t* out) const {
64
+ if (fPixelXDimensionPresent && out) *out = fPixelXDimensionValue;
65
+ return fPixelXDimensionPresent;
66
+ }
67
+ bool getPixelYDimension(uint32_t* out) const {
68
+ if (fPixelYDimensionPresent && out) *out = fPixelYDimensionValue;
69
+ return fPixelYDimensionPresent;
70
+ }
71
+
72
+ private:
73
+ // Helper functions and constants for parsing the data.
74
+ void parseIfd(uint32_t ifdOffset, bool littleEndian, bool isRoot);
75
+
76
+ // The input data.
77
+ const sk_sp<SkData> fData;
78
+
79
+ // The origin property.
80
+ bool fOriginPresent = false;
81
+ SkEncodedOrigin fOriginValue = kTopLeft_SkEncodedOrigin;
82
+
83
+ // The HDR headroom property.
84
+ bool fHdrHeadroomPresent = false;
85
+ float fHdrHeadroomValue = 1.f;
86
+
87
+ // Resolution.
88
+ bool fResolutionUnitPresent = false;
89
+ uint16_t fResolutionUnitValue = 0;
90
+ bool fXResolutionPresent = false;
91
+ float fXResolutionValue = 0;
92
+ bool fYResolutionPresent = false;
93
+ float fYResolutionValue = 0;
94
+
95
+ // Size in pixels.
96
+ bool fPixelXDimensionPresent = false;
97
+ uint32_t fPixelXDimensionValue = 0;
98
+ bool fPixelYDimensionPresent = false;
99
+ uint32_t fPixelYDimensionValue = 0;
100
+ };
101
+
102
+ #endif
@@ -9,6 +9,7 @@
9
9
  #define SkGainmapInfo_DEFINED
10
10
 
11
11
  #include "include/core/SkColor.h"
12
+ #include "include/core/SkColorSpace.h"
12
13
 
13
14
  /**
14
15
  * Gainmap rendering parameters. Suppose our display has HDR to SDR ratio of H and we wish to
@@ -71,12 +72,21 @@ struct SkGainmapInfo {
71
72
  };
72
73
  BaseImageType fBaseImageType = BaseImageType::kSDR;
73
74
 
75
+ /**
76
+ * If specified, color space to apply the gainmap in, otherwise the base image's color space
77
+ * is used. Only the color primaries are used, the transfer function is irrelevant.
78
+ */
79
+ sk_sp<SkColorSpace> fGainmapMathColorSpace = nullptr;
80
+
74
81
  inline bool operator==(const SkGainmapInfo& other) const {
75
82
  return fGainmapRatioMin == other.fGainmapRatioMin &&
76
83
  fGainmapRatioMax == other.fGainmapRatioMax && fGainmapGamma == other.fGainmapGamma &&
77
84
  fEpsilonSdr == other.fEpsilonSdr && fEpsilonHdr == other.fEpsilonHdr &&
78
85
  fDisplayRatioSdr == other.fDisplayRatioSdr &&
79
- fDisplayRatioHdr == other.fDisplayRatioHdr && fBaseImageType == other.fBaseImageType;
86
+ fDisplayRatioHdr == other.fDisplayRatioHdr &&
87
+ fBaseImageType == other.fBaseImageType &&
88
+ SkColorSpace::Equals(fGainmapMathColorSpace.get(),
89
+ other.fGainmapMathColorSpace.get());
80
90
  }
81
91
  inline bool operator!=(const SkGainmapInfo& other) const { return !(*this == other); }
82
92
 
@@ -28,6 +28,22 @@
28
28
  #define SK_UNLIKELY
29
29
  #endif
30
30
 
31
+ // c++23 will give us [[assume]] -- until then we're stuck with various other options:
32
+ #if defined(__clang__)
33
+ #define SK_ASSUME(cond) __builtin_assume(cond)
34
+ #elif defined(__GNUC__)
35
+ #if __GNUC__ >= 13
36
+ #define SK_ASSUME(cond) __attribute__((assume(cond)))
37
+ #else
38
+ // NOTE: This implementation could actually evaluate `cond`, which is not desirable.
39
+ #define SK_ASSUME(cond) ((cond) ? (void)0 : __builtin_unreachable())
40
+ #endif
41
+ #elif defined(_MSC_VER)
42
+ #define SK_ASSUME(cond) __assume(cond)
43
+ #else
44
+ #define SK_ASSUME(cond) ((void)0)
45
+ #endif
46
+
31
47
  /** Called internally if we hit an unrecoverable error.
32
48
  The platform implementation must not return, but should either throw
33
49
  an exception or otherwise exit.
@@ -42,13 +42,8 @@ public:
42
42
  const void* front() const { return fFront; }
43
43
  const void* back() const { return fBack; }
44
44
 
45
- void* front() {
46
- return (void*)((const SkDeque*)this)->front();
47
- }
48
-
49
- void* back() {
50
- return (void*)((const SkDeque*)this)->back();
51
- }
45
+ void* front() { return fFront; }
46
+ void* back() { return fBack; }
52
47
 
53
48
  /**
54
49
  * push_front and push_back return a pointer to the memory space
@@ -26,7 +26,7 @@
26
26
  // This is achieved in Skia by having a nested WORKSPACE in include/config and a cc_library
27
27
  // defined in that folder. As a result, we do not try to include SkUserConfig.h from the
28
28
  // top of Skia because Bazel sandboxing will move it to a different location.
29
- #include "SkUserConfig.h"
29
+ #include "SkUserConfig.h" // NO_G3_REWRITE
30
30
  #else
31
31
  #include "include/config/SkUserConfig.h"
32
32
  #endif