@shopify/react-native-skia 2.4.15 → 2.4.17

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 (226) hide show
  1. package/android/CMakeLists.txt +69 -0
  2. package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +19 -7
  3. package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java +7 -0
  4. package/apple/RNSkApplePlatformContext.mm +4 -0
  5. package/cpp/api/JsiSkApi.h +31 -0
  6. package/cpp/api/JsiSkImageFactory.h +69 -1
  7. package/cpp/api/JsiSkImageFilter.h +1 -0
  8. package/cpp/api/JsiSkPath.h +1 -1
  9. package/cpp/jsi/RuntimeAwareCache.h +0 -2
  10. package/cpp/jsi2/EnumMapper.h +45 -0
  11. package/cpp/jsi2/JSIConverter.h +468 -0
  12. package/cpp/jsi2/NativeObject.h +598 -0
  13. package/cpp/jsi2/Promise.cpp +44 -0
  14. package/cpp/jsi2/Promise.h +35 -0
  15. package/cpp/rnskia/RNDawnContext.h +114 -0
  16. package/cpp/rnskia/RNSkManager.cpp +41 -1
  17. package/cpp/rnwgpu/ArrayBuffer.h +68 -0
  18. package/cpp/rnwgpu/api/Convertors.h +761 -0
  19. package/cpp/rnwgpu/api/External.h +12 -0
  20. package/cpp/rnwgpu/api/GPU.cpp +129 -0
  21. package/cpp/rnwgpu/api/GPU.h +57 -0
  22. package/cpp/rnwgpu/api/GPUAdapter.cpp +178 -0
  23. package/cpp/rnwgpu/api/GPUAdapter.h +59 -0
  24. package/cpp/rnwgpu/api/GPUAdapterInfo.h +57 -0
  25. package/cpp/rnwgpu/api/GPUBindGroup.cpp +3 -0
  26. package/cpp/rnwgpu/api/GPUBindGroup.h +51 -0
  27. package/cpp/rnwgpu/api/GPUBindGroupLayout.h +52 -0
  28. package/cpp/rnwgpu/api/GPUBuffer.cpp +97 -0
  29. package/cpp/rnwgpu/api/GPUBuffer.h +87 -0
  30. package/cpp/rnwgpu/api/GPUCommandBuffer.h +45 -0
  31. package/cpp/rnwgpu/api/GPUCommandEncoder.cpp +179 -0
  32. package/cpp/rnwgpu/api/GPUCommandEncoder.h +111 -0
  33. package/cpp/rnwgpu/api/GPUCompilationInfo.h +79 -0
  34. package/cpp/rnwgpu/api/GPUCompilationMessage.h +36 -0
  35. package/cpp/rnwgpu/api/GPUComputePassEncoder.cpp +60 -0
  36. package/cpp/rnwgpu/api/GPUComputePassEncoder.h +85 -0
  37. package/cpp/rnwgpu/api/GPUComputePipeline.cpp +12 -0
  38. package/cpp/rnwgpu/api/GPUComputePipeline.h +60 -0
  39. package/cpp/rnwgpu/api/GPUDevice.cpp +434 -0
  40. package/cpp/rnwgpu/api/GPUDevice.h +174 -0
  41. package/cpp/rnwgpu/api/GPUDeviceLostInfo.cpp +7 -0
  42. package/cpp/rnwgpu/api/GPUDeviceLostInfo.h +40 -0
  43. package/cpp/rnwgpu/api/GPUError.h +35 -0
  44. package/cpp/rnwgpu/api/GPUExtent3D.h +66 -0
  45. package/cpp/rnwgpu/api/GPUExternalTexture.h +45 -0
  46. package/cpp/rnwgpu/api/GPUFeatures.h +212 -0
  47. package/cpp/rnwgpu/api/GPUInternalError.h +31 -0
  48. package/cpp/rnwgpu/api/GPUOrigin2D.h +55 -0
  49. package/cpp/rnwgpu/api/GPUOrigin3D.h +62 -0
  50. package/cpp/rnwgpu/api/GPUOutOfMemoryError.h +33 -0
  51. package/cpp/rnwgpu/api/GPUPipelineLayout.h +45 -0
  52. package/cpp/rnwgpu/api/GPUQuerySet.cpp +11 -0
  53. package/cpp/rnwgpu/api/GPUQuerySet.h +73 -0
  54. package/cpp/rnwgpu/api/GPUQueue.cpp +169 -0
  55. package/cpp/rnwgpu/api/GPUQueue.h +84 -0
  56. package/cpp/rnwgpu/api/GPURenderBundle.h +44 -0
  57. package/cpp/rnwgpu/api/GPURenderBundleEncoder.cpp +131 -0
  58. package/cpp/rnwgpu/api/GPURenderBundleEncoder.h +110 -0
  59. package/cpp/rnwgpu/api/GPURenderPassEncoder.cpp +165 -0
  60. package/cpp/rnwgpu/api/GPURenderPassEncoder.h +130 -0
  61. package/cpp/rnwgpu/api/GPURenderPipeline.cpp +13 -0
  62. package/cpp/rnwgpu/api/GPURenderPipeline.h +61 -0
  63. package/cpp/rnwgpu/api/GPUSampler.h +44 -0
  64. package/cpp/rnwgpu/api/GPUShaderModule.cpp +51 -0
  65. package/cpp/rnwgpu/api/GPUShaderModule.h +66 -0
  66. package/cpp/rnwgpu/api/GPUSupportedLimits.cpp +129 -0
  67. package/cpp/rnwgpu/api/GPUSupportedLimits.h +131 -0
  68. package/cpp/rnwgpu/api/GPUTexture.cpp +47 -0
  69. package/cpp/rnwgpu/api/GPUTexture.h +150 -0
  70. package/cpp/rnwgpu/api/GPUTextureView.h +44 -0
  71. package/cpp/rnwgpu/api/GPUValidationError.h +32 -0
  72. package/cpp/rnwgpu/api/descriptors/GPUBindGroupDescriptor.h +64 -0
  73. package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +71 -0
  74. package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutDescriptor.h +56 -0
  75. package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutEntry.h +97 -0
  76. package/cpp/rnwgpu/api/descriptors/GPUBlendComponent.h +57 -0
  77. package/cpp/rnwgpu/api/descriptors/GPUBlendState.h +52 -0
  78. package/cpp/rnwgpu/api/descriptors/GPUBufferBinding.h +56 -0
  79. package/cpp/rnwgpu/api/descriptors/GPUBufferBindingLayout.h +56 -0
  80. package/cpp/rnwgpu/api/descriptors/GPUBufferDescriptor.h +59 -0
  81. package/cpp/rnwgpu/api/descriptors/GPUBufferUsage.h +39 -0
  82. package/cpp/rnwgpu/api/descriptors/GPUColor.h +66 -0
  83. package/cpp/rnwgpu/api/descriptors/GPUColorTargetState.h +58 -0
  84. package/cpp/rnwgpu/api/descriptors/GPUColorWrite.h +29 -0
  85. package/cpp/rnwgpu/api/descriptors/GPUCommandBufferDescriptor.h +45 -0
  86. package/cpp/rnwgpu/api/descriptors/GPUCommandEncoderDescriptor.h +45 -0
  87. package/cpp/rnwgpu/api/descriptors/GPUComputePassDescriptor.h +56 -0
  88. package/cpp/rnwgpu/api/descriptors/GPUComputePassTimestampWrites.h +58 -0
  89. package/cpp/rnwgpu/api/descriptors/GPUComputePipelineDescriptor.h +67 -0
  90. package/cpp/rnwgpu/api/descriptors/GPUDepthStencilState.h +103 -0
  91. package/cpp/rnwgpu/api/descriptors/GPUDeviceDescriptor.h +99 -0
  92. package/cpp/rnwgpu/api/descriptors/GPUExternalTextureBindingLayout.h +38 -0
  93. package/cpp/rnwgpu/api/descriptors/GPUExternalTextureDescriptor.h +71 -0
  94. package/cpp/rnwgpu/api/descriptors/GPUFragmentState.h +73 -0
  95. package/cpp/rnwgpu/api/descriptors/GPUImageCopyBuffer.h +62 -0
  96. package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +62 -0
  97. package/cpp/rnwgpu/api/descriptors/GPUImageCopyTexture.h +65 -0
  98. package/cpp/rnwgpu/api/descriptors/GPUImageCopyTextureTagged.h +81 -0
  99. package/cpp/rnwgpu/api/descriptors/GPUImageDataLayout.h +54 -0
  100. package/cpp/rnwgpu/api/descriptors/GPUMapMode.h +22 -0
  101. package/cpp/rnwgpu/api/descriptors/GPUMultisampleState.h +54 -0
  102. package/cpp/rnwgpu/api/descriptors/GPUPipelineLayoutDescriptor.h +57 -0
  103. package/cpp/rnwgpu/api/descriptors/GPUPrimitiveState.h +69 -0
  104. package/cpp/rnwgpu/api/descriptors/GPUProgrammableStage.h +61 -0
  105. package/cpp/rnwgpu/api/descriptors/GPUQuerySetDescriptor.h +55 -0
  106. package/cpp/rnwgpu/api/descriptors/GPUQueueDescriptor.h +43 -0
  107. package/cpp/rnwgpu/api/descriptors/GPURenderBundleDescriptor.h +45 -0
  108. package/cpp/rnwgpu/api/descriptors/GPURenderBundleEncoderDescriptor.h +80 -0
  109. package/cpp/rnwgpu/api/descriptors/GPURenderPassColorAttachment.h +81 -0
  110. package/cpp/rnwgpu/api/descriptors/GPURenderPassDepthStencilAttachment.h +101 -0
  111. package/cpp/rnwgpu/api/descriptors/GPURenderPassDescriptor.h +92 -0
  112. package/cpp/rnwgpu/api/descriptors/GPURenderPassTimestampWrites.h +58 -0
  113. package/cpp/rnwgpu/api/descriptors/GPURenderPipelineDescriptor.h +103 -0
  114. package/cpp/rnwgpu/api/descriptors/GPURequestAdapterOptions.h +51 -0
  115. package/cpp/rnwgpu/api/descriptors/GPUSamplerBindingLayout.h +45 -0
  116. package/cpp/rnwgpu/api/descriptors/GPUSamplerDescriptor.h +110 -0
  117. package/cpp/rnwgpu/api/descriptors/GPUShaderModuleCompilationHint.h +60 -0
  118. package/cpp/rnwgpu/api/descriptors/GPUShaderModuleDescriptor.h +62 -0
  119. package/cpp/rnwgpu/api/descriptors/GPUShaderStage.h +25 -0
  120. package/cpp/rnwgpu/api/descriptors/GPUStencilFaceState.h +64 -0
  121. package/cpp/rnwgpu/api/descriptors/GPUStorageTextureBindingLayout.h +59 -0
  122. package/cpp/rnwgpu/api/descriptors/GPUTextureBindingLayout.h +59 -0
  123. package/cpp/rnwgpu/api/descriptors/GPUTextureDescriptor.h +91 -0
  124. package/cpp/rnwgpu/api/descriptors/GPUTextureUsage.h +29 -0
  125. package/cpp/rnwgpu/api/descriptors/GPUTextureViewDescriptor.h +91 -0
  126. package/cpp/rnwgpu/api/descriptors/GPUUncapturedErrorEventInit.h +64 -0
  127. package/cpp/rnwgpu/api/descriptors/GPUVertexAttribute.h +53 -0
  128. package/cpp/rnwgpu/api/descriptors/GPUVertexBufferLayout.h +62 -0
  129. package/cpp/rnwgpu/api/descriptors/GPUVertexState.h +73 -0
  130. package/cpp/rnwgpu/api/descriptors/Unions.h +1984 -0
  131. package/cpp/rnwgpu/async/AsyncDispatcher.h +28 -0
  132. package/cpp/rnwgpu/async/AsyncRunner.cpp +181 -0
  133. package/cpp/rnwgpu/async/AsyncRunner.h +56 -0
  134. package/cpp/rnwgpu/async/AsyncTaskHandle.cpp +181 -0
  135. package/cpp/rnwgpu/async/AsyncTaskHandle.h +55 -0
  136. package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.cpp +23 -0
  137. package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.h +22 -0
  138. package/lib/commonjs/Platform/Platform.web.js +1 -2
  139. package/lib/commonjs/Platform/Platform.web.js.map +1 -1
  140. package/lib/commonjs/external/reanimated/buffers.js.map +1 -1
  141. package/lib/commonjs/external/reanimated/interpolators.d.ts +1 -4
  142. package/lib/commonjs/renderer/Canvas.js +4 -3
  143. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  144. package/lib/commonjs/renderer/components/Group.js +1 -2
  145. package/lib/commonjs/renderer/components/Group.js.map +1 -1
  146. package/lib/commonjs/renderer/components/shapes/FitBox.js +1 -2
  147. package/lib/commonjs/renderer/components/shapes/FitBox.js.map +1 -1
  148. package/lib/commonjs/skia/types/ContourMeasure.js.map +1 -1
  149. package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +20 -0
  150. package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
  151. package/lib/commonjs/skia/types/RuntimeEffect/RuntimeEffect.js.map +1 -1
  152. package/lib/commonjs/skia/types/Skia.d.ts +17 -0
  153. package/lib/commonjs/skia/types/Skia.js.map +1 -1
  154. package/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +2 -0
  155. package/lib/commonjs/skia/web/JsiSkImageFactory.js +6 -0
  156. package/lib/commonjs/skia/web/JsiSkImageFactory.js.map +1 -1
  157. package/lib/commonjs/skia/web/JsiSkParagraphStyle.js +2 -2
  158. package/lib/commonjs/skia/web/JsiSkParagraphStyle.js.map +1 -1
  159. package/lib/commonjs/skia/web/JsiSkia.js +6 -0
  160. package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
  161. package/lib/commonjs/sksg/Recorder/commands/ColorFilters.js.map +1 -1
  162. package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js.map +1 -1
  163. package/lib/commonjs/sksg/Recorder/commands/PathEffects.js.map +1 -1
  164. package/lib/commonjs/sksg/Recorder/commands/Shaders.js.map +1 -1
  165. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.d.ts +2 -0
  166. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js +2 -0
  167. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js.map +1 -1
  168. package/lib/commonjs/views/SkiaPictureView.web.js +4 -4
  169. package/lib/commonjs/views/SkiaPictureView.web.js.map +1 -1
  170. package/lib/commonjs/web/WithSkiaWeb.js +1 -2
  171. package/lib/commonjs/web/WithSkiaWeb.js.map +1 -1
  172. package/lib/module/external/reanimated/buffers.js.map +1 -1
  173. package/lib/module/external/reanimated/interpolators.d.ts +1 -4
  174. package/lib/module/renderer/Canvas.js +3 -1
  175. package/lib/module/renderer/Canvas.js.map +1 -1
  176. package/lib/module/skia/types/ContourMeasure.js.map +1 -1
  177. package/lib/module/skia/types/Image/ImageFactory.d.ts +20 -0
  178. package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
  179. package/lib/module/skia/types/RuntimeEffect/RuntimeEffect.js.map +1 -1
  180. package/lib/module/skia/types/Skia.d.ts +17 -0
  181. package/lib/module/skia/types/Skia.js.map +1 -1
  182. package/lib/module/skia/web/JsiSkImageFactory.d.ts +2 -0
  183. package/lib/module/skia/web/JsiSkImageFactory.js +6 -0
  184. package/lib/module/skia/web/JsiSkImageFactory.js.map +1 -1
  185. package/lib/module/skia/web/JsiSkParagraphStyle.js +2 -2
  186. package/lib/module/skia/web/JsiSkParagraphStyle.js.map +1 -1
  187. package/lib/module/skia/web/JsiSkia.js +6 -0
  188. package/lib/module/skia/web/JsiSkia.js.map +1 -1
  189. package/lib/module/sksg/Recorder/commands/ColorFilters.js.map +1 -1
  190. package/lib/module/sksg/Recorder/commands/ImageFilters.js.map +1 -1
  191. package/lib/module/sksg/Recorder/commands/PathEffects.js.map +1 -1
  192. package/lib/module/sksg/Recorder/commands/Shaders.js.map +1 -1
  193. package/lib/module/specs/SkiaPictureViewNativeComponent.d.ts +2 -0
  194. package/lib/module/specs/SkiaPictureViewNativeComponent.js +4 -0
  195. package/lib/module/specs/SkiaPictureViewNativeComponent.js.map +1 -1
  196. package/lib/module/views/SkiaPictureView.web.js +3 -2
  197. package/lib/module/views/SkiaPictureView.web.js.map +1 -1
  198. package/lib/typescript/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +2 -0
  199. package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +2 -0
  200. package/lib/typescript/lib/module/renderer/Canvas.d.ts +1 -1
  201. package/lib/typescript/lib/module/skia/Skia.web.d.ts +2 -0
  202. package/lib/typescript/lib/module/skia/web/JsiSkImageFactory.d.ts +2 -0
  203. package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +2 -0
  204. package/lib/typescript/lib/module/views/SkiaPictureView.d.ts +1 -1
  205. package/lib/typescript/src/external/reanimated/interpolators.d.ts +1 -4
  206. package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +20 -0
  207. package/lib/typescript/src/skia/types/Skia.d.ts +17 -0
  208. package/lib/typescript/src/skia/web/JsiSkImageFactory.d.ts +2 -0
  209. package/lib/typescript/src/specs/SkiaPictureViewNativeComponent.d.ts +2 -0
  210. package/package.json +20 -16
  211. package/react-native-skia.podspec +52 -13
  212. package/scripts/install-skia.mjs +99 -48
  213. package/src/external/reanimated/buffers.ts +1 -1
  214. package/src/renderer/Canvas.tsx +3 -2
  215. package/src/skia/types/ContourMeasure.tsx +1 -2
  216. package/src/skia/types/Image/ImageFactory.ts +22 -0
  217. package/src/skia/types/RuntimeEffect/RuntimeEffect.ts +1 -2
  218. package/src/skia/types/Skia.ts +17 -0
  219. package/src/skia/web/JsiSkImageFactory.ts +8 -0
  220. package/src/skia/web/JsiSkia.ts +6 -0
  221. package/src/sksg/Recorder/commands/ColorFilters.ts +3 -2
  222. package/src/sksg/Recorder/commands/ImageFilters.ts +3 -2
  223. package/src/sksg/Recorder/commands/PathEffects.ts +3 -2
  224. package/src/sksg/Recorder/commands/Shaders.ts +3 -2
  225. package/src/specs/SkiaPictureViewNativeComponent.ts +7 -0
  226. package/src/views/SkiaPictureView.web.tsx +4 -1
@@ -0,0 +1,56 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <string>
5
+ #include <vector>
6
+
7
+ #include "webgpu/webgpu_cpp.h"
8
+
9
+ #include "jsi2/JSIConverter.h"
10
+
11
+ #include "GPUBindGroupLayoutEntry.h"
12
+
13
+ namespace jsi = facebook::jsi;
14
+
15
+ namespace rnwgpu {
16
+
17
+ struct GPUBindGroupLayoutDescriptor {
18
+ std::vector<std::shared_ptr<GPUBindGroupLayoutEntry>>
19
+ entries; // Iterable<GPUBindGroupLayoutEntry>
20
+ std::optional<std::string> label; // string
21
+ };
22
+
23
+ } // namespace rnwgpu
24
+
25
+ namespace rnwgpu {
26
+
27
+ template <>
28
+ struct JSIConverter<std::shared_ptr<rnwgpu::GPUBindGroupLayoutDescriptor>> {
29
+ static std::shared_ptr<rnwgpu::GPUBindGroupLayoutDescriptor>
30
+ fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBounds) {
31
+ auto result = std::make_unique<rnwgpu::GPUBindGroupLayoutDescriptor>();
32
+ if (!outOfBounds && arg.isObject()) {
33
+ auto value = arg.getObject(runtime);
34
+ if (value.hasProperty(runtime, "entries")) {
35
+ auto prop = value.getProperty(runtime, "entries");
36
+ result->entries = JSIConverter<std::vector<
37
+ std::shared_ptr<GPUBindGroupLayoutEntry>>>::fromJSI(runtime, prop,
38
+ false);
39
+ }
40
+ if (value.hasProperty(runtime, "label")) {
41
+ auto prop = value.getProperty(runtime, "label");
42
+ result->label = JSIConverter<std::optional<std::string>>::fromJSI(
43
+ runtime, prop, false);
44
+ }
45
+ }
46
+
47
+ return result;
48
+ }
49
+ static jsi::Value
50
+ toJSI(jsi::Runtime &runtime,
51
+ std::shared_ptr<rnwgpu::GPUBindGroupLayoutDescriptor> arg) {
52
+ throw std::runtime_error("Invalid GPUBindGroupLayoutDescriptor::toJSI()");
53
+ }
54
+ };
55
+
56
+ } // namespace rnwgpu
@@ -0,0 +1,97 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+
5
+ #include "webgpu/webgpu_cpp.h"
6
+
7
+ #include "jsi2/JSIConverter.h"
8
+
9
+ #include "GPUBufferBindingLayout.h"
10
+ #include "GPUExternalTextureBindingLayout.h"
11
+ #include "GPUSamplerBindingLayout.h"
12
+ #include "GPUStorageTextureBindingLayout.h"
13
+ #include "GPUTextureBindingLayout.h"
14
+
15
+ namespace jsi = facebook::jsi;
16
+
17
+ namespace rnwgpu {
18
+
19
+ struct GPUBindGroupLayoutEntry {
20
+ double binding; // GPUIndex32
21
+ double visibility; // GPUShaderStageFlags
22
+ std::optional<std::shared_ptr<GPUBufferBindingLayout>>
23
+ buffer; // GPUBufferBindingLayout
24
+ std::optional<std::shared_ptr<GPUSamplerBindingLayout>>
25
+ sampler; // GPUSamplerBindingLayout
26
+ std::optional<std::shared_ptr<GPUTextureBindingLayout>>
27
+ texture; // GPUTextureBindingLayout
28
+ std::optional<std::shared_ptr<GPUStorageTextureBindingLayout>>
29
+ storageTexture; // GPUStorageTextureBindingLayout
30
+ std::optional<std::shared_ptr<GPUExternalTextureBindingLayout>>
31
+ externalTexture; // GPUExternalTextureBindingLayout
32
+ };
33
+
34
+ } // namespace rnwgpu
35
+
36
+ namespace rnwgpu {
37
+
38
+ template <>
39
+ struct JSIConverter<std::shared_ptr<rnwgpu::GPUBindGroupLayoutEntry>> {
40
+ static std::shared_ptr<rnwgpu::GPUBindGroupLayoutEntry>
41
+ fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBounds) {
42
+ auto result = std::make_unique<rnwgpu::GPUBindGroupLayoutEntry>();
43
+ if (!outOfBounds && arg.isObject()) {
44
+ auto value = arg.getObject(runtime);
45
+ if (value.hasProperty(runtime, "binding")) {
46
+ auto prop = value.getProperty(runtime, "binding");
47
+ result->binding = JSIConverter<double>::fromJSI(runtime, prop, false);
48
+ }
49
+ if (value.hasProperty(runtime, "visibility")) {
50
+ auto prop = value.getProperty(runtime, "visibility");
51
+ result->visibility =
52
+ JSIConverter<double>::fromJSI(runtime, prop, false);
53
+ }
54
+ if (value.hasProperty(runtime, "buffer")) {
55
+ auto prop = value.getProperty(runtime, "buffer");
56
+ result->buffer = JSIConverter<std::optional<
57
+ std::shared_ptr<GPUBufferBindingLayout>>>::fromJSI(runtime, prop,
58
+ false);
59
+ }
60
+ if (value.hasProperty(runtime, "sampler")) {
61
+ auto prop = value.getProperty(runtime, "sampler");
62
+ result->sampler = JSIConverter<std::optional<
63
+ std::shared_ptr<GPUSamplerBindingLayout>>>::fromJSI(runtime, prop,
64
+ false);
65
+ }
66
+ if (value.hasProperty(runtime, "texture")) {
67
+ auto prop = value.getProperty(runtime, "texture");
68
+ result->texture = JSIConverter<std::optional<
69
+ std::shared_ptr<GPUTextureBindingLayout>>>::fromJSI(runtime, prop,
70
+ false);
71
+ }
72
+ if (value.hasProperty(runtime, "storageTexture")) {
73
+ auto prop = value.getProperty(runtime, "storageTexture");
74
+ result->storageTexture = JSIConverter<std::optional<
75
+ std::shared_ptr<GPUStorageTextureBindingLayout>>>::fromJSI(runtime,
76
+ prop,
77
+ false);
78
+ }
79
+ if (value.hasProperty(runtime, "externalTexture")) {
80
+ auto prop = value.getProperty(runtime, "externalTexture");
81
+ result->externalTexture = JSIConverter<std::optional<
82
+ std::shared_ptr<GPUExternalTextureBindingLayout>>>::fromJSI(runtime,
83
+ prop,
84
+ false);
85
+ }
86
+ }
87
+
88
+ return result;
89
+ }
90
+ static jsi::Value
91
+ toJSI(jsi::Runtime &runtime,
92
+ std::shared_ptr<rnwgpu::GPUBindGroupLayoutEntry> arg) {
93
+ throw std::runtime_error("Invalid GPUBindGroupLayoutEntry::toJSI()");
94
+ }
95
+ };
96
+
97
+ } // namespace rnwgpu
@@ -0,0 +1,57 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+
5
+ #include "webgpu/webgpu_cpp.h"
6
+
7
+ #include "jsi2/JSIConverter.h"
8
+
9
+ namespace jsi = facebook::jsi;
10
+
11
+ namespace rnwgpu {
12
+
13
+ struct GPUBlendComponent {
14
+ std::optional<wgpu::BlendOperation> operation; // GPUBlendOperation
15
+ std::optional<wgpu::BlendFactor> srcFactor; // GPUBlendFactor
16
+ std::optional<wgpu::BlendFactor> dstFactor; // GPUBlendFactor
17
+ };
18
+
19
+ } // namespace rnwgpu
20
+
21
+ namespace rnwgpu {
22
+
23
+ template <> struct JSIConverter<std::shared_ptr<rnwgpu::GPUBlendComponent>> {
24
+ static std::shared_ptr<rnwgpu::GPUBlendComponent>
25
+ fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBounds) {
26
+ auto result = std::make_unique<rnwgpu::GPUBlendComponent>();
27
+ if (!outOfBounds && arg.isObject()) {
28
+ auto value = arg.getObject(runtime);
29
+ if (value.hasProperty(runtime, "operation")) {
30
+ auto prop = value.getProperty(runtime, "operation");
31
+ result->operation =
32
+ JSIConverter<std::optional<wgpu::BlendOperation>>::fromJSI(
33
+ runtime, prop, false);
34
+ }
35
+ if (value.hasProperty(runtime, "srcFactor")) {
36
+ auto prop = value.getProperty(runtime, "srcFactor");
37
+ result->srcFactor =
38
+ JSIConverter<std::optional<wgpu::BlendFactor>>::fromJSI(
39
+ runtime, prop, false);
40
+ }
41
+ if (value.hasProperty(runtime, "dstFactor")) {
42
+ auto prop = value.getProperty(runtime, "dstFactor");
43
+ result->dstFactor =
44
+ JSIConverter<std::optional<wgpu::BlendFactor>>::fromJSI(
45
+ runtime, prop, false);
46
+ }
47
+ }
48
+
49
+ return result;
50
+ }
51
+ static jsi::Value toJSI(jsi::Runtime &runtime,
52
+ std::shared_ptr<rnwgpu::GPUBlendComponent> arg) {
53
+ throw std::runtime_error("Invalid GPUBlendComponent::toJSI()");
54
+ }
55
+ };
56
+
57
+ } // namespace rnwgpu
@@ -0,0 +1,52 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+
5
+ #include "webgpu/webgpu_cpp.h"
6
+
7
+ #include "jsi2/JSIConverter.h"
8
+
9
+ #include "GPUBlendComponent.h"
10
+
11
+ namespace jsi = facebook::jsi;
12
+
13
+ namespace rnwgpu {
14
+
15
+ struct GPUBlendState {
16
+ std::shared_ptr<GPUBlendComponent> color; // GPUBlendComponent
17
+ std::shared_ptr<GPUBlendComponent> alpha; // GPUBlendComponent
18
+ };
19
+
20
+ } // namespace rnwgpu
21
+
22
+ namespace rnwgpu {
23
+
24
+ template <> struct JSIConverter<std::shared_ptr<rnwgpu::GPUBlendState>> {
25
+ static std::shared_ptr<rnwgpu::GPUBlendState>
26
+ fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBounds) {
27
+ auto result = std::make_unique<rnwgpu::GPUBlendState>();
28
+ if (!outOfBounds && arg.isObject()) {
29
+ auto value = arg.getObject(runtime);
30
+ if (value.hasProperty(runtime, "color")) {
31
+ auto prop = value.getProperty(runtime, "color");
32
+ result->color =
33
+ JSIConverter<std::shared_ptr<GPUBlendComponent>>::fromJSI(
34
+ runtime, prop, false);
35
+ }
36
+ if (value.hasProperty(runtime, "alpha")) {
37
+ auto prop = value.getProperty(runtime, "alpha");
38
+ result->alpha =
39
+ JSIConverter<std::shared_ptr<GPUBlendComponent>>::fromJSI(
40
+ runtime, prop, false);
41
+ }
42
+ }
43
+
44
+ return result;
45
+ }
46
+ static jsi::Value toJSI(jsi::Runtime &runtime,
47
+ std::shared_ptr<rnwgpu::GPUBlendState> arg) {
48
+ throw std::runtime_error("Invalid GPUBlendState::toJSI()");
49
+ }
50
+ };
51
+
52
+ } // namespace rnwgpu
@@ -0,0 +1,56 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+
5
+ #include "webgpu/webgpu_cpp.h"
6
+
7
+ #include "jsi2/JSIConverter.h"
8
+
9
+ #include "rnwgpu/api/GPUBuffer.h"
10
+
11
+ namespace jsi = facebook::jsi;
12
+
13
+ namespace rnwgpu {
14
+
15
+ struct GPUBufferBinding {
16
+ std::shared_ptr<GPUBuffer> buffer; // GPUBuffer
17
+ std::optional<double> offset; // GPUSize64
18
+ std::optional<double> size; // GPUSize64
19
+ };
20
+
21
+ } // namespace rnwgpu
22
+
23
+ namespace rnwgpu {
24
+
25
+ template <> struct JSIConverter<std::shared_ptr<rnwgpu::GPUBufferBinding>> {
26
+ static std::shared_ptr<rnwgpu::GPUBufferBinding>
27
+ fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBounds) {
28
+ auto result = std::make_unique<rnwgpu::GPUBufferBinding>();
29
+ if (!outOfBounds && arg.isObject()) {
30
+ auto value = arg.getObject(runtime);
31
+ if (value.hasProperty(runtime, "buffer")) {
32
+ auto prop = value.getProperty(runtime, "buffer");
33
+ result->buffer = JSIConverter<std::shared_ptr<GPUBuffer>>::fromJSI(
34
+ runtime, prop, false);
35
+ }
36
+ if (value.hasProperty(runtime, "offset")) {
37
+ auto prop = value.getProperty(runtime, "offset");
38
+ result->offset =
39
+ JSIConverter<std::optional<double>>::fromJSI(runtime, prop, false);
40
+ }
41
+ if (value.hasProperty(runtime, "size")) {
42
+ auto prop = value.getProperty(runtime, "size");
43
+ result->size =
44
+ JSIConverter<std::optional<double>>::fromJSI(runtime, prop, false);
45
+ }
46
+ }
47
+
48
+ return result;
49
+ }
50
+ static jsi::Value toJSI(jsi::Runtime &runtime,
51
+ std::shared_ptr<rnwgpu::GPUBufferBinding> arg) {
52
+ throw std::runtime_error("Invalid GPUBufferBinding::toJSI()");
53
+ }
54
+ };
55
+
56
+ } // namespace rnwgpu
@@ -0,0 +1,56 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+
5
+ #include "webgpu/webgpu_cpp.h"
6
+
7
+ #include "jsi2/JSIConverter.h"
8
+
9
+ namespace jsi = facebook::jsi;
10
+
11
+ namespace rnwgpu {
12
+
13
+ struct GPUBufferBindingLayout {
14
+ std::optional<wgpu::BufferBindingType> type; // GPUBufferBindingType
15
+ std::optional<bool> hasDynamicOffset; // boolean
16
+ std::optional<double> minBindingSize; // GPUSize64
17
+ };
18
+
19
+ } // namespace rnwgpu
20
+
21
+ namespace rnwgpu {
22
+
23
+ template <>
24
+ struct JSIConverter<std::shared_ptr<rnwgpu::GPUBufferBindingLayout>> {
25
+ static std::shared_ptr<rnwgpu::GPUBufferBindingLayout>
26
+ fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBounds) {
27
+ auto result = std::make_unique<rnwgpu::GPUBufferBindingLayout>();
28
+ if (!outOfBounds && arg.isObject()) {
29
+ auto value = arg.getObject(runtime);
30
+ if (value.hasProperty(runtime, "type")) {
31
+ auto prop = value.getProperty(runtime, "type");
32
+ result->type =
33
+ JSIConverter<std::optional<wgpu::BufferBindingType>>::fromJSI(
34
+ runtime, prop, false);
35
+ }
36
+ if (value.hasProperty(runtime, "hasDynamicOffset")) {
37
+ auto prop = value.getProperty(runtime, "hasDynamicOffset");
38
+ result->hasDynamicOffset =
39
+ JSIConverter<std::optional<bool>>::fromJSI(runtime, prop, false);
40
+ }
41
+ if (value.hasProperty(runtime, "minBindingSize")) {
42
+ auto prop = value.getProperty(runtime, "minBindingSize");
43
+ result->minBindingSize =
44
+ JSIConverter<std::optional<double>>::fromJSI(runtime, prop, false);
45
+ }
46
+ }
47
+
48
+ return result;
49
+ }
50
+ static jsi::Value toJSI(jsi::Runtime &runtime,
51
+ std::shared_ptr<rnwgpu::GPUBufferBindingLayout> arg) {
52
+ throw std::runtime_error("Invalid GPUBufferBindingLayout::toJSI()");
53
+ }
54
+ };
55
+
56
+ } // namespace rnwgpu
@@ -0,0 +1,59 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <string>
5
+
6
+ #include "webgpu/webgpu_cpp.h"
7
+
8
+ #include "jsi2/JSIConverter.h"
9
+
10
+ namespace jsi = facebook::jsi;
11
+
12
+ namespace rnwgpu {
13
+
14
+ struct GPUBufferDescriptor {
15
+ double size; // GPUSize64
16
+ double usage; // GPUBufferUsageFlags
17
+ std::optional<bool> mappedAtCreation; // boolean
18
+ std::optional<std::string> label; // string
19
+ };
20
+
21
+ } // namespace rnwgpu
22
+
23
+ namespace rnwgpu {
24
+
25
+ template <> struct JSIConverter<std::shared_ptr<rnwgpu::GPUBufferDescriptor>> {
26
+ static std::shared_ptr<rnwgpu::GPUBufferDescriptor>
27
+ fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBounds) {
28
+ auto result = std::make_unique<rnwgpu::GPUBufferDescriptor>();
29
+ if (!outOfBounds && arg.isObject()) {
30
+ auto value = arg.getObject(runtime);
31
+ if (value.hasProperty(runtime, "size")) {
32
+ auto prop = value.getProperty(runtime, "size");
33
+ result->size = JSIConverter<double>::fromJSI(runtime, prop, false);
34
+ }
35
+ if (value.hasProperty(runtime, "usage")) {
36
+ auto prop = value.getProperty(runtime, "usage");
37
+ result->usage = JSIConverter<double>::fromJSI(runtime, prop, false);
38
+ }
39
+ if (value.hasProperty(runtime, "mappedAtCreation")) {
40
+ auto prop = value.getProperty(runtime, "mappedAtCreation");
41
+ result->mappedAtCreation =
42
+ JSIConverter<std::optional<bool>>::fromJSI(runtime, prop, false);
43
+ }
44
+ if (value.hasProperty(runtime, "label")) {
45
+ auto prop = value.getProperty(runtime, "label");
46
+ result->label = JSIConverter<std::optional<std::string>>::fromJSI(
47
+ runtime, prop, false);
48
+ }
49
+ }
50
+
51
+ return result;
52
+ }
53
+ static jsi::Value toJSI(jsi::Runtime &runtime,
54
+ std::shared_ptr<rnwgpu::GPUBufferDescriptor> arg) {
55
+ throw std::runtime_error("Invalid GPUBufferDescriptor::toJSI()");
56
+ }
57
+ };
58
+
59
+ } // namespace rnwgpu
@@ -0,0 +1,39 @@
1
+ #pragma once
2
+
3
+ #include <jsi/jsi.h>
4
+
5
+ #include "webgpu/webgpu_cpp.h"
6
+
7
+ namespace rnwgpu {
8
+
9
+ namespace jsi = facebook::jsi;
10
+
11
+ class GPUBufferUsage {
12
+ public:
13
+ static jsi::Object create(jsi::Runtime &runtime) {
14
+ jsi::Object obj(runtime);
15
+ obj.setProperty(runtime, "MAP_READ",
16
+ static_cast<double>(wgpu::BufferUsage::MapRead));
17
+ obj.setProperty(runtime, "MAP_WRITE",
18
+ static_cast<double>(wgpu::BufferUsage::MapWrite));
19
+ obj.setProperty(runtime, "COPY_SRC",
20
+ static_cast<double>(wgpu::BufferUsage::CopySrc));
21
+ obj.setProperty(runtime, "COPY_DST",
22
+ static_cast<double>(wgpu::BufferUsage::CopyDst));
23
+ obj.setProperty(runtime, "INDEX",
24
+ static_cast<double>(wgpu::BufferUsage::Index));
25
+ obj.setProperty(runtime, "VERTEX",
26
+ static_cast<double>(wgpu::BufferUsage::Vertex));
27
+ obj.setProperty(runtime, "UNIFORM",
28
+ static_cast<double>(wgpu::BufferUsage::Uniform));
29
+ obj.setProperty(runtime, "STORAGE",
30
+ static_cast<double>(wgpu::BufferUsage::Storage));
31
+ obj.setProperty(runtime, "INDIRECT",
32
+ static_cast<double>(wgpu::BufferUsage::Indirect));
33
+ obj.setProperty(runtime, "QUERY_RESOLVE",
34
+ static_cast<double>(wgpu::BufferUsage::QueryResolve));
35
+ return obj;
36
+ }
37
+ };
38
+
39
+ } // namespace rnwgpu
@@ -0,0 +1,66 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+
5
+ #include "webgpu/webgpu_cpp.h"
6
+
7
+ #include "jsi2/JSIConverter.h"
8
+
9
+ namespace jsi = facebook::jsi;
10
+
11
+ namespace rnwgpu {
12
+
13
+ struct GPUColor {
14
+ double r; // number
15
+ double g; // number
16
+ double b; // number
17
+ double a; // number
18
+ };
19
+
20
+ } // namespace rnwgpu
21
+
22
+ namespace rnwgpu {
23
+
24
+ template <> struct JSIConverter<std::shared_ptr<rnwgpu::GPUColor>> {
25
+ static std::shared_ptr<rnwgpu::GPUColor>
26
+ fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBounds) {
27
+ auto result = std::make_unique<rnwgpu::GPUColor>();
28
+ if (!outOfBounds && arg.isObject()) {
29
+ auto value = arg.getObject(runtime);
30
+ if (value.isArray(runtime)) {
31
+ auto array = value.getArray(runtime);
32
+ if (array.size(runtime) >= 4) {
33
+ result->r = array.getValueAtIndex(runtime, 0).getNumber();
34
+ result->g = array.getValueAtIndex(runtime, 1).getNumber();
35
+ result->b = array.getValueAtIndex(runtime, 2).getNumber();
36
+ result->a = array.getValueAtIndex(runtime, 3).getNumber();
37
+ }
38
+ } else {
39
+ if (value.hasProperty(runtime, "r")) {
40
+ auto prop = value.getProperty(runtime, "r");
41
+ result->r = JSIConverter<double>::fromJSI(runtime, prop, false);
42
+ }
43
+ if (value.hasProperty(runtime, "g")) {
44
+ auto prop = value.getProperty(runtime, "g");
45
+ result->g = JSIConverter<double>::fromJSI(runtime, prop, false);
46
+ }
47
+ if (value.hasProperty(runtime, "b")) {
48
+ auto prop = value.getProperty(runtime, "b");
49
+ result->b = JSIConverter<double>::fromJSI(runtime, prop, false);
50
+ }
51
+ if (value.hasProperty(runtime, "a")) {
52
+ auto prop = value.getProperty(runtime, "a");
53
+ result->a = JSIConverter<double>::fromJSI(runtime, prop, false);
54
+ }
55
+ }
56
+ }
57
+
58
+ return result;
59
+ }
60
+ static jsi::Value toJSI(jsi::Runtime &runtime,
61
+ std::shared_ptr<rnwgpu::GPUColor> arg) {
62
+ throw std::runtime_error("Invalid GPUColor::toJSI()");
63
+ }
64
+ };
65
+
66
+ } // namespace rnwgpu
@@ -0,0 +1,58 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+
5
+ #include "webgpu/webgpu_cpp.h"
6
+
7
+ #include "jsi2/JSIConverter.h"
8
+
9
+ #include "GPUBlendState.h"
10
+
11
+ namespace jsi = facebook::jsi;
12
+
13
+ namespace rnwgpu {
14
+
15
+ struct GPUColorTargetState {
16
+ wgpu::TextureFormat format; // GPUTextureFormat
17
+ std::optional<std::shared_ptr<GPUBlendState>> blend; // GPUBlendState
18
+ std::optional<double> writeMask; // GPUColorWriteFlags
19
+ };
20
+
21
+ } // namespace rnwgpu
22
+
23
+ namespace rnwgpu {
24
+
25
+ template <> struct JSIConverter<std::shared_ptr<rnwgpu::GPUColorTargetState>> {
26
+ static std::shared_ptr<rnwgpu::GPUColorTargetState>
27
+ fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBounds) {
28
+ auto result = std::make_unique<rnwgpu::GPUColorTargetState>();
29
+ if (!outOfBounds && arg.isObject()) {
30
+ auto value = arg.getObject(runtime);
31
+ if (value.hasProperty(runtime, "format")) {
32
+ auto prop = value.getProperty(runtime, "format");
33
+ result->format =
34
+ JSIConverter<wgpu::TextureFormat>::fromJSI(runtime, prop, false);
35
+ }
36
+ if (value.hasProperty(runtime, "blend")) {
37
+ auto prop = value.getProperty(runtime, "blend");
38
+ result->blend = JSIConverter<
39
+ std::optional<std::shared_ptr<GPUBlendState>>>::fromJSI(runtime,
40
+ prop,
41
+ false);
42
+ }
43
+ if (value.hasProperty(runtime, "writeMask")) {
44
+ auto prop = value.getProperty(runtime, "writeMask");
45
+ result->writeMask =
46
+ JSIConverter<std::optional<double>>::fromJSI(runtime, prop, false);
47
+ }
48
+ }
49
+
50
+ return result;
51
+ }
52
+ static jsi::Value toJSI(jsi::Runtime &runtime,
53
+ std::shared_ptr<rnwgpu::GPUColorTargetState> arg) {
54
+ throw std::runtime_error("Invalid GPUColorTargetState::toJSI()");
55
+ }
56
+ };
57
+
58
+ } // namespace rnwgpu
@@ -0,0 +1,29 @@
1
+ #pragma once
2
+
3
+ #include <jsi/jsi.h>
4
+
5
+ #include "webgpu/webgpu_cpp.h"
6
+
7
+ namespace rnwgpu {
8
+
9
+ namespace jsi = facebook::jsi;
10
+
11
+ class GPUColorWrite {
12
+ public:
13
+ static jsi::Object create(jsi::Runtime &runtime) {
14
+ jsi::Object obj(runtime);
15
+ obj.setProperty(runtime, "RED",
16
+ static_cast<double>(wgpu::ColorWriteMask::Red));
17
+ obj.setProperty(runtime, "GREEN",
18
+ static_cast<double>(wgpu::ColorWriteMask::Green));
19
+ obj.setProperty(runtime, "BLUE",
20
+ static_cast<double>(wgpu::ColorWriteMask::Blue));
21
+ obj.setProperty(runtime, "ALPHA",
22
+ static_cast<double>(wgpu::ColorWriteMask::Alpha));
23
+ obj.setProperty(runtime, "ALL",
24
+ static_cast<double>(wgpu::ColorWriteMask::All));
25
+ return obj;
26
+ }
27
+ };
28
+
29
+ } // namespace rnwgpu
@@ -0,0 +1,45 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <string>
5
+
6
+ #include "webgpu/webgpu_cpp.h"
7
+
8
+ #include "jsi2/JSIConverter.h"
9
+
10
+ namespace jsi = facebook::jsi;
11
+
12
+ namespace rnwgpu {
13
+
14
+ struct GPUCommandBufferDescriptor {
15
+ std::optional<std::string> label; // string
16
+ };
17
+
18
+ } // namespace rnwgpu
19
+
20
+ namespace rnwgpu {
21
+
22
+ template <>
23
+ struct JSIConverter<std::shared_ptr<rnwgpu::GPUCommandBufferDescriptor>> {
24
+ static std::shared_ptr<rnwgpu::GPUCommandBufferDescriptor>
25
+ fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBounds) {
26
+ auto result = std::make_unique<rnwgpu::GPUCommandBufferDescriptor>();
27
+ if (!outOfBounds && arg.isObject()) {
28
+ auto value = arg.getObject(runtime);
29
+ if (value.hasProperty(runtime, "label")) {
30
+ auto prop = value.getProperty(runtime, "label");
31
+ result->label = JSIConverter<std::optional<std::string>>::fromJSI(
32
+ runtime, prop, false);
33
+ }
34
+ }
35
+
36
+ return result;
37
+ }
38
+ static jsi::Value
39
+ toJSI(jsi::Runtime &runtime,
40
+ std::shared_ptr<rnwgpu::GPUCommandBufferDescriptor> arg) {
41
+ throw std::runtime_error("Invalid GPUCommandBufferDescriptor::toJSI()");
42
+ }
43
+ };
44
+
45
+ } // namespace rnwgpu