@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,97 @@
1
+ #include "GPUBuffer.h"
2
+
3
+ #include <memory>
4
+ #include <utility>
5
+
6
+ #include "Convertors.h"
7
+
8
+ namespace rnwgpu {
9
+
10
+ std::shared_ptr<ArrayBuffer>
11
+ GPUBuffer::getMappedRange(std::optional<size_t> o, std::optional<size_t> size) {
12
+ auto offset = o.value_or(0);
13
+ uint64_t s = size.has_value() ? size.value() : (_instance.GetSize() - offset);
14
+
15
+ //uint64_t start = offset;
16
+ //uint64_t end = offset + s;
17
+ // for (auto& mapping : mappings_) {
18
+ // if (mapping.Intersects(start, end)) {
19
+ // Errors::OperationError(env).ThrowAsJavaScriptException();
20
+ // return {};
21
+ // }
22
+ // }
23
+
24
+ auto *ptr =
25
+ (_instance.GetUsage() & wgpu::BufferUsage::MapWrite)
26
+ ? _instance.GetMappedRange(offset, s)
27
+ : const_cast<void *>(_instance.GetConstMappedRange(offset, s));
28
+ if (!ptr) {
29
+ throw std::runtime_error("Failed to get getMappedRange");
30
+ }
31
+ auto array_buffer = std::make_shared<ArrayBuffer>(ptr, s, 1);
32
+ // TODO(crbug.com/dawn/1135): Ownership here is the wrong way around.
33
+ // mappings_.emplace_back(Mapping{start, end,
34
+ // Napi::Persistent(array_buffer)});
35
+ return array_buffer;
36
+ }
37
+
38
+ void GPUBuffer::destroy() { _instance.Destroy(); }
39
+
40
+ async::AsyncTaskHandle GPUBuffer::mapAsync(uint64_t modeIn,
41
+ std::optional<uint64_t> offset,
42
+ std::optional<uint64_t> size) {
43
+ Convertor conv;
44
+ wgpu::MapMode mode;
45
+ if (!conv(mode, modeIn)) {
46
+ throw std::runtime_error("Couldn't get MapMode");
47
+ }
48
+ uint64_t rangeSize = size.has_value()
49
+ ? size.value()
50
+ : (_instance.GetSize() - offset.value_or(0));
51
+ auto bufferHandle = _instance;
52
+ uint64_t resolvedOffset = offset.value_or(0);
53
+
54
+ return _async->postTask(
55
+ [bufferHandle, mode, resolvedOffset,
56
+ rangeSize](const async::AsyncTaskHandle::ResolveFunction &resolve,
57
+ const async::AsyncTaskHandle::RejectFunction &reject) {
58
+ bufferHandle.MapAsync(mode, resolvedOffset, rangeSize,
59
+ wgpu::CallbackMode::AllowProcessEvents,
60
+ [resolve, reject](wgpu::MapAsyncStatus status,
61
+ wgpu::StringView message) {
62
+ switch (status) {
63
+ case wgpu::MapAsyncStatus::Success:
64
+ resolve(nullptr);
65
+ break;
66
+ case wgpu::MapAsyncStatus::CallbackCancelled:
67
+ reject("MapAsyncStatus::CallbackCancelled");
68
+ break;
69
+ case wgpu::MapAsyncStatus::Error:
70
+ reject("MapAsyncStatus::Error");
71
+ break;
72
+ case wgpu::MapAsyncStatus::Aborted:
73
+ reject("MapAsyncStatus::Aborted");
74
+ break;
75
+ default:
76
+ reject(
77
+ "MapAsyncStatus: " +
78
+ std::to_string(static_cast<int>(status)));
79
+ break;
80
+ }
81
+ });
82
+ });
83
+ }
84
+
85
+ void GPUBuffer::unmap() { _instance.Unmap(); }
86
+
87
+ uint64_t GPUBuffer::getSize() { return _instance.GetSize(); }
88
+
89
+ double GPUBuffer::getUsage() {
90
+ return static_cast<double>(_instance.GetUsage());
91
+ }
92
+
93
+ wgpu::BufferMapState GPUBuffer::getMapState() {
94
+ return _instance.GetMapState();
95
+ }
96
+
97
+ } // namespace rnwgpu
@@ -0,0 +1,87 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <optional>
5
+ #include <string>
6
+ #include <vector>
7
+
8
+ #include "descriptors/Unions.h"
9
+
10
+ #include "jsi2/NativeObject.h"
11
+
12
+ #include "rnwgpu/async/AsyncRunner.h"
13
+ #include "rnwgpu/async/AsyncTaskHandle.h"
14
+
15
+ #include "webgpu/webgpu_cpp.h"
16
+
17
+ #include "ArrayBuffer.h"
18
+
19
+ namespace rnwgpu {
20
+
21
+ namespace jsi = facebook::jsi;
22
+
23
+ class GPUBuffer : public NativeObject<GPUBuffer> {
24
+ public:
25
+ static constexpr const char *CLASS_NAME = "GPUBuffer";
26
+
27
+ explicit GPUBuffer(wgpu::Buffer instance,
28
+ std::shared_ptr<async::AsyncRunner> async,
29
+ std::string label)
30
+ : NativeObject(CLASS_NAME), _instance(instance), _async(async),
31
+ _label(label) {}
32
+
33
+ public:
34
+ std::string getBrand() { return CLASS_NAME; }
35
+
36
+ async::AsyncTaskHandle mapAsync(uint64_t modeIn,
37
+ std::optional<uint64_t> offset,
38
+ std::optional<uint64_t> size);
39
+ std::shared_ptr<ArrayBuffer> getMappedRange(std::optional<size_t> offset,
40
+ std::optional<size_t> size);
41
+ void unmap();
42
+ void destroy();
43
+
44
+ uint64_t getSize();
45
+ double getUsage();
46
+ wgpu::BufferMapState getMapState();
47
+
48
+ std::string getLabel() { return _label; }
49
+ void setLabel(const std::string &label) {
50
+ _label = label;
51
+ _instance.SetLabel(_label.c_str());
52
+ }
53
+
54
+ static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
55
+ installGetter(runtime, prototype, "__brand", &GPUBuffer::getBrand);
56
+ installMethod(runtime, prototype, "mapAsync", &GPUBuffer::mapAsync);
57
+ installMethod(runtime, prototype, "getMappedRange",
58
+ &GPUBuffer::getMappedRange);
59
+ installMethod(runtime, prototype, "unmap", &GPUBuffer::unmap);
60
+ installMethod(runtime, prototype, "destroy", &GPUBuffer::destroy);
61
+ installGetter(runtime, prototype, "size", &GPUBuffer::getSize);
62
+ installGetter(runtime, prototype, "usage", &GPUBuffer::getUsage);
63
+ installGetter(runtime, prototype, "mapState", &GPUBuffer::getMapState);
64
+ installGetterSetter(runtime, prototype, "label", &GPUBuffer::getLabel,
65
+ &GPUBuffer::setLabel);
66
+ }
67
+
68
+ inline const wgpu::Buffer get() { return _instance; }
69
+
70
+ size_t getMemoryPressure() override { return static_cast<size_t>(getSize()); }
71
+
72
+ private:
73
+ wgpu::Buffer _instance;
74
+ std::shared_ptr<async::AsyncRunner> _async;
75
+ std::string _label;
76
+ struct Mapping {
77
+ uint64_t start;
78
+ uint64_t end;
79
+ inline bool Intersects(uint64_t s, uint64_t e) const {
80
+ return s < end && e > start;
81
+ }
82
+ std::shared_ptr<ArrayBuffer> buffer;
83
+ };
84
+ std::vector<Mapping> mappings;
85
+ };
86
+
87
+ } // namespace rnwgpu
@@ -0,0 +1,45 @@
1
+ #pragma once
2
+
3
+ #include <string>
4
+
5
+ #include "descriptors/Unions.h"
6
+
7
+ #include "jsi2/NativeObject.h"
8
+
9
+ #include "webgpu/webgpu_cpp.h"
10
+
11
+ namespace rnwgpu {
12
+
13
+ namespace jsi = facebook::jsi;
14
+
15
+ class GPUCommandBuffer : public NativeObject<GPUCommandBuffer> {
16
+ public:
17
+ static constexpr const char *CLASS_NAME = "GPUCommandBuffer";
18
+
19
+ explicit GPUCommandBuffer(wgpu::CommandBuffer instance, std::string label)
20
+ : NativeObject(CLASS_NAME), _instance(instance), _label(label) {}
21
+
22
+ public:
23
+ std::string getBrand() { return CLASS_NAME; }
24
+
25
+ std::string getLabel() { return _label; }
26
+ void setLabel(const std::string &label) {
27
+ _label = label;
28
+ _instance.SetLabel(_label.c_str());
29
+ }
30
+
31
+ static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
32
+ installGetter(runtime, prototype, "__brand", &GPUCommandBuffer::getBrand);
33
+ installGetterSetter(runtime, prototype, "label",
34
+ &GPUCommandBuffer::getLabel,
35
+ &GPUCommandBuffer::setLabel);
36
+ }
37
+
38
+ inline const wgpu::CommandBuffer get() { return _instance; }
39
+
40
+ private:
41
+ wgpu::CommandBuffer _instance;
42
+ std::string _label;
43
+ };
44
+
45
+ } // namespace rnwgpu
@@ -0,0 +1,179 @@
1
+ #include "GPUCommandEncoder.h"
2
+
3
+ #include <memory>
4
+ #include <string>
5
+ #include <vector>
6
+
7
+ #include "Convertors.h"
8
+
9
+ namespace rnwgpu {
10
+
11
+ void GPUCommandEncoder::copyBufferToBuffer(
12
+ std::shared_ptr<GPUBuffer> source, uint64_t sourceOffset,
13
+ std::shared_ptr<GPUBuffer> destination, uint64_t destinationOffset,
14
+ uint64_t size) {
15
+ Convertor conv;
16
+
17
+ wgpu::Buffer src{};
18
+ wgpu::Buffer dst{};
19
+ if (!conv(src, source) || //
20
+ !conv(dst, destination)) {
21
+ return;
22
+ }
23
+ _instance.CopyBufferToBuffer(src, sourceOffset, dst, destinationOffset, size);
24
+ }
25
+
26
+ std::shared_ptr<GPUCommandBuffer> GPUCommandEncoder::finish(
27
+ std::optional<std::shared_ptr<GPUCommandBufferDescriptor>> descriptor) {
28
+ wgpu::CommandBufferDescriptor desc{};
29
+ Convertor conv;
30
+ if (!conv(desc, descriptor)) {
31
+ throw std::runtime_error(
32
+ "GPUCommandEncoder::finish(): error with GPUCommandBufferDescriptor");
33
+ }
34
+ auto commandBuffer = _instance.Finish(&desc);
35
+ return std::make_shared<GPUCommandBuffer>(
36
+ commandBuffer,
37
+ descriptor.has_value() ? descriptor.value()->label.value_or("") : "");
38
+ }
39
+
40
+ std::shared_ptr<GPURenderPassEncoder> GPUCommandEncoder::beginRenderPass(
41
+ std::shared_ptr<GPURenderPassDescriptor> descriptor) {
42
+
43
+ wgpu::RenderPassDescriptor desc{};
44
+ wgpu::RenderPassMaxDrawCount maxDrawCountDesc{};
45
+ desc.nextInChain = &maxDrawCountDesc;
46
+ Convertor conv;
47
+
48
+ // TODO: why is this not in Converter
49
+ if (!conv(desc.colorAttachments, desc.colorAttachmentCount,
50
+ descriptor->colorAttachments) ||
51
+ !conv(desc.depthStencilAttachment, descriptor->depthStencilAttachment) ||
52
+ !conv(desc.label, descriptor->label) ||
53
+ !conv(desc.occlusionQuerySet, descriptor->occlusionQuerySet) ||
54
+ !conv(desc.timestampWrites, descriptor->timestampWrites) ||
55
+ !conv(maxDrawCountDesc.maxDrawCount, descriptor->maxDrawCount)) {
56
+ throw std::runtime_error("PUCommandEncoder::beginRenderPass(): couldn't "
57
+ "get GPURenderPassDescriptor");
58
+ }
59
+ auto renderPass = _instance.BeginRenderPass(&desc);
60
+ return std::make_shared<GPURenderPassEncoder>(renderPass,
61
+ descriptor->label.value_or(""));
62
+ }
63
+
64
+ void GPUCommandEncoder::copyTextureToBuffer(
65
+ std::shared_ptr<GPUImageCopyTexture> source,
66
+ std::shared_ptr<GPUImageCopyBuffer> destination,
67
+ std::shared_ptr<GPUExtent3D> copySize) {
68
+ Convertor conv;
69
+ wgpu::TexelCopyTextureInfo src{};
70
+ wgpu::TexelCopyBufferInfo dst{};
71
+ wgpu::Extent3D size{};
72
+ if (!conv(src, source) || //
73
+ !conv(dst, destination) || //
74
+ !conv(size, copySize)) {
75
+ return;
76
+ }
77
+ _instance.CopyTextureToBuffer(&src, &dst, &size);
78
+ }
79
+
80
+ void GPUCommandEncoder::copyTextureToTexture(
81
+ std::shared_ptr<GPUImageCopyTexture> source,
82
+ std::shared_ptr<GPUImageCopyTexture> destination,
83
+ std::shared_ptr<GPUExtent3D> copySize) {
84
+ Convertor conv;
85
+
86
+ wgpu::TexelCopyTextureInfo src{};
87
+ wgpu::TexelCopyTextureInfo dst{};
88
+ wgpu::Extent3D size{};
89
+ if (!conv(src, source) || //
90
+ !conv(dst, destination) || //
91
+ !conv(size, copySize)) {
92
+ return;
93
+ }
94
+
95
+ _instance.CopyTextureToTexture(&src, &dst, &size);
96
+ }
97
+
98
+ std::shared_ptr<GPUComputePassEncoder> GPUCommandEncoder::beginComputePass(
99
+ std::optional<std::shared_ptr<GPUComputePassDescriptor>> descriptor) {
100
+ wgpu::ComputePassDescriptor desc;
101
+ Convertor conv;
102
+ if (!conv(desc, descriptor)) {
103
+ throw std::runtime_error("GPUCommandEncoder.beginComputePass(): couldn't "
104
+ "access GPUComputePassDescriptor.");
105
+ }
106
+ auto computePass = _instance.BeginComputePass(&desc);
107
+ return std::make_shared<GPUComputePassEncoder>(
108
+ computePass,
109
+ descriptor.has_value() ? descriptor.value()->label.value_or("") : "");
110
+ }
111
+
112
+ void GPUCommandEncoder::resolveQuerySet(std::shared_ptr<GPUQuerySet> querySet,
113
+ uint32_t firstQuery,
114
+ uint32_t queryCount,
115
+ std::shared_ptr<GPUBuffer> destination,
116
+ uint64_t destinationOffset) {
117
+ Convertor conv;
118
+
119
+ wgpu::QuerySet q{};
120
+ uint32_t f = 0;
121
+ uint32_t c = 0;
122
+ wgpu::Buffer b{};
123
+ uint64_t o = 0;
124
+
125
+ if (!conv(q, querySet) || //
126
+ !conv(f, firstQuery) || //
127
+ !conv(c, queryCount) || //
128
+ !conv(b, destination) || //
129
+ !conv(o, destinationOffset)) {
130
+ return;
131
+ }
132
+
133
+ _instance.ResolveQuerySet(q, f, c, b, o);
134
+ }
135
+
136
+ void GPUCommandEncoder::copyBufferToTexture(
137
+ std::shared_ptr<GPUImageCopyBuffer> source,
138
+ std::shared_ptr<GPUImageCopyTexture> destination,
139
+ std::shared_ptr<GPUExtent3D> copySize) {
140
+ Convertor conv;
141
+
142
+ wgpu::TexelCopyBufferInfo src{};
143
+ wgpu::TexelCopyTextureInfo dst{};
144
+ wgpu::Extent3D size{};
145
+ if (!conv(src, source) || //
146
+ !conv(dst, destination) || //
147
+ !conv(size, copySize)) {
148
+ return;
149
+ }
150
+
151
+ _instance.CopyBufferToTexture(&src, &dst, &size);
152
+ }
153
+
154
+ void GPUCommandEncoder::clearBuffer(std::shared_ptr<GPUBuffer> buffer,
155
+ std::optional<uint64_t> offset,
156
+ std::optional<uint64_t> size) {
157
+ Convertor conv;
158
+
159
+ wgpu::Buffer b{};
160
+ uint64_t s = wgpu::kWholeSize;
161
+ if (!conv(b, buffer) || //
162
+ !conv(s, size)) {
163
+ return;
164
+ }
165
+
166
+ _instance.ClearBuffer(b, offset.value_or(0), s);
167
+ }
168
+
169
+ void GPUCommandEncoder::pushDebugGroup(std::string groupLabel) {
170
+ _instance.PushDebugGroup(groupLabel.c_str());
171
+ }
172
+
173
+ void GPUCommandEncoder::popDebugGroup() { _instance.PopDebugGroup(); }
174
+
175
+ void GPUCommandEncoder::insertDebugMarker(std::string markerLabel) {
176
+ _instance.InsertDebugMarker(markerLabel.c_str());
177
+ }
178
+
179
+ } // namespace rnwgpu
@@ -0,0 +1,111 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <string>
5
+
6
+ #include "descriptors/Unions.h"
7
+
8
+ #include "jsi2/NativeObject.h"
9
+
10
+ #include "webgpu/webgpu_cpp.h"
11
+
12
+ #include "GPUBuffer.h"
13
+ #include "GPUCommandBuffer.h"
14
+ #include "descriptors/GPUCommandBufferDescriptor.h"
15
+ #include "descriptors/GPUComputePassDescriptor.h"
16
+ #include "GPUComputePassEncoder.h"
17
+ #include "GPUExtent3D.h"
18
+ #include "descriptors/GPUImageCopyBuffer.h"
19
+ #include "descriptors/GPUImageCopyTexture.h"
20
+ #include "GPUQuerySet.h"
21
+ #include "descriptors/GPURenderPassDescriptor.h"
22
+ #include "GPURenderPassEncoder.h"
23
+
24
+ namespace rnwgpu {
25
+
26
+ namespace jsi = facebook::jsi;
27
+
28
+ class GPUCommandEncoder : public NativeObject<GPUCommandEncoder> {
29
+ public:
30
+ static constexpr const char *CLASS_NAME = "GPUCommandEncoder";
31
+
32
+ explicit GPUCommandEncoder(wgpu::CommandEncoder instance, std::string label)
33
+ : NativeObject(CLASS_NAME), _instance(instance), _label(label) {}
34
+
35
+ public:
36
+ std::string getBrand() { return CLASS_NAME; }
37
+
38
+ std::shared_ptr<GPURenderPassEncoder>
39
+ beginRenderPass(std::shared_ptr<GPURenderPassDescriptor> descriptor);
40
+ std::shared_ptr<GPUComputePassEncoder> beginComputePass(
41
+ std::optional<std::shared_ptr<GPUComputePassDescriptor>> descriptor);
42
+ void copyBufferToBuffer(std::shared_ptr<GPUBuffer> source,
43
+ uint64_t sourceOffset,
44
+ std::shared_ptr<GPUBuffer> destination,
45
+ uint64_t destinationOffset, uint64_t size);
46
+ void copyBufferToTexture(std::shared_ptr<GPUImageCopyBuffer> source,
47
+ std::shared_ptr<GPUImageCopyTexture> destination,
48
+ std::shared_ptr<GPUExtent3D> copySize);
49
+ void copyTextureToBuffer(std::shared_ptr<GPUImageCopyTexture> source,
50
+ std::shared_ptr<GPUImageCopyBuffer> destination,
51
+ std::shared_ptr<GPUExtent3D> copySize);
52
+ void copyTextureToTexture(std::shared_ptr<GPUImageCopyTexture> source,
53
+ std::shared_ptr<GPUImageCopyTexture> destination,
54
+ std::shared_ptr<GPUExtent3D> copySize);
55
+ void clearBuffer(std::shared_ptr<GPUBuffer> buffer,
56
+ std::optional<uint64_t> offset,
57
+ std::optional<uint64_t> size);
58
+ void resolveQuerySet(std::shared_ptr<GPUQuerySet> querySet,
59
+ uint32_t firstQuery, uint32_t queryCount,
60
+ std::shared_ptr<GPUBuffer> destination,
61
+ uint64_t destinationOffset);
62
+ std::shared_ptr<GPUCommandBuffer>
63
+ finish(std::optional<std::shared_ptr<GPUCommandBufferDescriptor>> descriptor);
64
+ void pushDebugGroup(std::string groupLabel);
65
+ void popDebugGroup();
66
+ void insertDebugMarker(std::string markerLabel);
67
+
68
+ std::string getLabel() { return _label; }
69
+ void setLabel(const std::string &label) {
70
+ _label = label;
71
+ _instance.SetLabel(_label.c_str());
72
+ }
73
+
74
+ static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
75
+ installGetter(runtime, prototype, "__brand", &GPUCommandEncoder::getBrand);
76
+ installMethod(runtime, prototype, "beginRenderPass",
77
+ &GPUCommandEncoder::beginRenderPass);
78
+ installMethod(runtime, prototype, "beginComputePass",
79
+ &GPUCommandEncoder::beginComputePass);
80
+ installMethod(runtime, prototype, "copyBufferToBuffer",
81
+ &GPUCommandEncoder::copyBufferToBuffer);
82
+ installMethod(runtime, prototype, "copyBufferToTexture",
83
+ &GPUCommandEncoder::copyBufferToTexture);
84
+ installMethod(runtime, prototype, "copyTextureToBuffer",
85
+ &GPUCommandEncoder::copyTextureToBuffer);
86
+ installMethod(runtime, prototype, "copyTextureToTexture",
87
+ &GPUCommandEncoder::copyTextureToTexture);
88
+ installMethod(runtime, prototype, "clearBuffer",
89
+ &GPUCommandEncoder::clearBuffer);
90
+ installMethod(runtime, prototype, "resolveQuerySet",
91
+ &GPUCommandEncoder::resolveQuerySet);
92
+ installMethod(runtime, prototype, "finish", &GPUCommandEncoder::finish);
93
+ installMethod(runtime, prototype, "pushDebugGroup",
94
+ &GPUCommandEncoder::pushDebugGroup);
95
+ installMethod(runtime, prototype, "popDebugGroup",
96
+ &GPUCommandEncoder::popDebugGroup);
97
+ installMethod(runtime, prototype, "insertDebugMarker",
98
+ &GPUCommandEncoder::insertDebugMarker);
99
+ installGetterSetter(runtime, prototype, "label",
100
+ &GPUCommandEncoder::getLabel,
101
+ &GPUCommandEncoder::setLabel);
102
+ }
103
+
104
+ inline const wgpu::CommandEncoder get() { return _instance; }
105
+
106
+ private:
107
+ wgpu::CommandEncoder _instance;
108
+ std::string _label;
109
+ };
110
+
111
+ } // namespace rnwgpu
@@ -0,0 +1,79 @@
1
+ #pragma once
2
+
3
+ #include <string>
4
+ #include <vector>
5
+
6
+ #include "descriptors/Unions.h"
7
+
8
+ #include "jsi2/NativeObject.h"
9
+
10
+ #include "webgpu/webgpu_cpp.h"
11
+
12
+ namespace rnwgpu {
13
+
14
+ namespace jsi = facebook::jsi;
15
+
16
+ struct GPUCompilationMessageData {
17
+ std::string message;
18
+ wgpu::CompilationMessageType type;
19
+ uint64_t lineNum;
20
+ uint64_t linePos;
21
+ uint64_t offset;
22
+ uint64_t length;
23
+ };
24
+
25
+ class GPUCompilationInfo : public NativeObject<GPUCompilationInfo> {
26
+ public:
27
+ static constexpr const char *CLASS_NAME = "GPUCompilationInfo";
28
+
29
+ GPUCompilationInfo() : NativeObject(CLASS_NAME) {}
30
+
31
+ public:
32
+ std::string getBrand() { return CLASS_NAME; }
33
+
34
+ std::vector<GPUCompilationMessageData> getMessages() { return _messages; }
35
+
36
+ static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
37
+ installGetter(runtime, prototype, "__brand", &GPUCompilationInfo::getBrand);
38
+ installGetter(runtime, prototype, "messages",
39
+ &GPUCompilationInfo::getMessages);
40
+ }
41
+
42
+ private:
43
+ std::vector<GPUCompilationMessageData> _messages;
44
+ friend class GPUShaderModule;
45
+ };
46
+
47
+ template <> struct JSIConverter<std::vector<GPUCompilationMessageData>> {
48
+ static std::vector<GPUCompilationMessageData>
49
+ fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBounds) {
50
+ throw std::runtime_error("Invalid GPUCompilationMessageData::fromJSI()");
51
+ }
52
+ static jsi::Value toJSI(jsi::Runtime &runtime,
53
+ std::vector<GPUCompilationMessageData> arg) {
54
+ jsi::Array result = jsi::Array(runtime, arg.size());
55
+ for (size_t i = 0; i < arg.size(); i++) {
56
+ const auto &message = arg[i];
57
+ jsi::Object messageObj(runtime);
58
+ messageObj.setProperty(
59
+ runtime, "message",
60
+ jsi::String::createFromUtf8(runtime, message.message));
61
+ std::string typeStr;
62
+ EnumMapper::convertEnumToJSUnion(message.type, &typeStr);
63
+ messageObj.setProperty(runtime, "type",
64
+ jsi::String::createFromUtf8(runtime, typeStr));
65
+ messageObj.setProperty(runtime, "lineNum",
66
+ static_cast<double>(message.lineNum));
67
+ messageObj.setProperty(runtime, "linePos",
68
+ static_cast<double>(message.linePos));
69
+ messageObj.setProperty(runtime, "offset",
70
+ static_cast<double>(message.offset));
71
+ messageObj.setProperty(runtime, "length",
72
+ static_cast<double>(message.length));
73
+ result.setValueAtIndex(runtime, i, messageObj);
74
+ }
75
+ return result;
76
+ }
77
+ };
78
+
79
+ } // namespace rnwgpu
@@ -0,0 +1,36 @@
1
+ #pragma once
2
+
3
+ #include <string>
4
+
5
+ #include "descriptors/Unions.h"
6
+
7
+ #include "jsi2/NativeObject.h"
8
+
9
+ #include "webgpu/webgpu_cpp.h"
10
+
11
+ namespace rnwgpu {
12
+
13
+ namespace jsi = facebook::jsi;
14
+
15
+ class GPUCompilationMessage : public NativeObject<GPUCompilationMessage> {
16
+ public:
17
+ static constexpr const char *CLASS_NAME = "GPUCompilationMessage";
18
+
19
+ explicit GPUCompilationMessage(wgpu::CompilationMessage instance)
20
+ : NativeObject(CLASS_NAME), _instance(instance) {}
21
+
22
+ public:
23
+ std::string getBrand() { return CLASS_NAME; }
24
+
25
+ static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
26
+ installGetter(runtime, prototype, "__brand",
27
+ &GPUCompilationMessage::getBrand);
28
+ }
29
+
30
+ inline const wgpu::CompilationMessage get() { return _instance; }
31
+
32
+ private:
33
+ wgpu::CompilationMessage _instance;
34
+ };
35
+
36
+ } // namespace rnwgpu
@@ -0,0 +1,60 @@
1
+ #include "GPUComputePassEncoder.h"
2
+ #include <memory>
3
+ #include <string>
4
+
5
+ namespace rnwgpu {
6
+
7
+ void GPUComputePassEncoder::setPipeline(
8
+ std::shared_ptr<GPUComputePipeline> pipeline) {
9
+ _instance.SetPipeline(pipeline->get());
10
+ }
11
+
12
+ void GPUComputePassEncoder::end() { _instance.End(); }
13
+
14
+ void GPUComputePassEncoder::setBindGroup(
15
+ uint32_t index,
16
+ std::variant<std::nullptr_t, std::shared_ptr<GPUBindGroup>> bindGroup,
17
+ std::optional<std::vector<uint32_t>> dynamicOffsets) {
18
+ auto dynOffsets = dynamicOffsets.value_or(std::vector<uint32_t>());
19
+ if (dynOffsets.size() == 0) {
20
+ if (std::holds_alternative<std::nullptr_t>(bindGroup)) {
21
+ _instance.SetBindGroup(index, nullptr, 0, nullptr);
22
+ } else {
23
+ auto group = std::get<std::shared_ptr<GPUBindGroup>>(bindGroup);
24
+ _instance.SetBindGroup(index, group->get(), 0, nullptr);
25
+ }
26
+ } else {
27
+ if (std::holds_alternative<std::nullptr_t>(bindGroup)) {
28
+ _instance.SetBindGroup(index, nullptr, dynOffsets.size(),
29
+ dynamicOffsets->data());
30
+ } else {
31
+ auto group = std::get<std::shared_ptr<GPUBindGroup>>(bindGroup);
32
+ _instance.SetBindGroup(index, group->get(), dynOffsets.size(),
33
+ dynamicOffsets->data());
34
+ }
35
+ }
36
+ }
37
+
38
+ void GPUComputePassEncoder::dispatchWorkgroups(
39
+ uint32_t workgroupCountX, std::optional<uint32_t> workgroupCountY,
40
+ std::optional<uint32_t> workgroupCountZ) {
41
+ _instance.DispatchWorkgroups(workgroupCountX, workgroupCountY.value_or(1),
42
+ workgroupCountZ.value_or(1));
43
+ }
44
+
45
+ void GPUComputePassEncoder::dispatchWorkgroupsIndirect(
46
+ std::shared_ptr<GPUBuffer> indirectBuffer, uint64_t indirectOffset) {
47
+ _instance.DispatchWorkgroupsIndirect(indirectBuffer->get(), indirectOffset);
48
+ }
49
+
50
+ void GPUComputePassEncoder::pushDebugGroup(std::string groupLabel) {
51
+ _instance.PushDebugGroup(groupLabel.c_str());
52
+ }
53
+
54
+ void GPUComputePassEncoder::popDebugGroup() { _instance.PopDebugGroup(); }
55
+
56
+ void GPUComputePassEncoder::insertDebugMarker(std::string markerLabel) {
57
+ _instance.InsertDebugMarker(markerLabel.c_str());
58
+ }
59
+
60
+ } // namespace rnwgpu