react-native-webgpu 0.5.11

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 (378) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +319 -0
  3. package/android/CMakeLists.txt +108 -0
  4. package/android/build.gradle +138 -0
  5. package/android/cpp/AndroidPlatformContext.h +207 -0
  6. package/android/cpp/cpp-adapter.cpp +71 -0
  7. package/android/src/main/AndroidManifest.xml +3 -0
  8. package/android/src/main/java/com/webgpu/WebGPUAHBView.java +298 -0
  9. package/android/src/main/java/com/webgpu/WebGPUAPI.java +20 -0
  10. package/android/src/main/java/com/webgpu/WebGPUBaseView.java +61 -0
  11. package/android/src/main/java/com/webgpu/WebGPUModule.java +50 -0
  12. package/android/src/main/java/com/webgpu/WebGPUSurfaceView.java +41 -0
  13. package/android/src/main/java/com/webgpu/WebGPUSurfaceViewWithSC.java +79 -0
  14. package/android/src/main/java/com/webgpu/WebGPUTextureView.java +46 -0
  15. package/android/src/main/java/com/webgpu/WebGPUView.java +108 -0
  16. package/android/src/main/java/com/webgpu/WebGPUViewManager.java +38 -0
  17. package/android/src/main/java/com/webgpu/WebGPUViewPackage.java +50 -0
  18. package/android/src/newarch/com/webgpu/WebGPUViewManagerSpec.java +24 -0
  19. package/apple/ApplePlatformContext.h +31 -0
  20. package/apple/ApplePlatformContext.mm +157 -0
  21. package/apple/MetalView.h +13 -0
  22. package/apple/MetalView.mm +50 -0
  23. package/apple/RNWGUIKit.h +16 -0
  24. package/apple/WebGPUModule.h +13 -0
  25. package/apple/WebGPUModule.mm +89 -0
  26. package/apple/WebGPUView.h +12 -0
  27. package/apple/WebGPUView.mm +66 -0
  28. package/cpp/WGPULogger.h +100 -0
  29. package/cpp/dawn_logging.cpp +119 -0
  30. package/cpp/jsi/EnumMapper.h +45 -0
  31. package/cpp/jsi/JSIConverter.h +473 -0
  32. package/cpp/jsi/NativeObject.h +607 -0
  33. package/cpp/jsi/Promise.cpp +44 -0
  34. package/cpp/jsi/Promise.h +35 -0
  35. package/cpp/jsi/RuntimeAwareCache.cpp +7 -0
  36. package/cpp/jsi/RuntimeAwareCache.h +100 -0
  37. package/cpp/jsi/RuntimeLifecycleMonitor.cpp +72 -0
  38. package/cpp/jsi/RuntimeLifecycleMonitor.h +32 -0
  39. package/cpp/rnwgpu/ArrayBuffer.h +73 -0
  40. package/cpp/rnwgpu/PlatformContext.h +46 -0
  41. package/cpp/rnwgpu/RNWebGPUManager.cpp +225 -0
  42. package/cpp/rnwgpu/RNWebGPUManager.h +46 -0
  43. package/cpp/rnwgpu/SurfaceRegistry.h +230 -0
  44. package/cpp/rnwgpu/api/Canvas.h +57 -0
  45. package/cpp/rnwgpu/api/Convertors.h +761 -0
  46. package/cpp/rnwgpu/api/External.h +12 -0
  47. package/cpp/rnwgpu/api/GPU.cpp +127 -0
  48. package/cpp/rnwgpu/api/GPU.h +58 -0
  49. package/cpp/rnwgpu/api/GPUAdapter.cpp +191 -0
  50. package/cpp/rnwgpu/api/GPUAdapter.h +59 -0
  51. package/cpp/rnwgpu/api/GPUAdapterInfo.h +57 -0
  52. package/cpp/rnwgpu/api/GPUBindGroup.cpp +3 -0
  53. package/cpp/rnwgpu/api/GPUBindGroup.h +51 -0
  54. package/cpp/rnwgpu/api/GPUBindGroupLayout.h +52 -0
  55. package/cpp/rnwgpu/api/GPUBuffer.cpp +97 -0
  56. package/cpp/rnwgpu/api/GPUBuffer.h +87 -0
  57. package/cpp/rnwgpu/api/GPUCanvasContext.cpp +67 -0
  58. package/cpp/rnwgpu/api/GPUCanvasContext.h +66 -0
  59. package/cpp/rnwgpu/api/GPUCommandBuffer.h +45 -0
  60. package/cpp/rnwgpu/api/GPUCommandEncoder.cpp +179 -0
  61. package/cpp/rnwgpu/api/GPUCommandEncoder.h +111 -0
  62. package/cpp/rnwgpu/api/GPUCompilationInfo.h +79 -0
  63. package/cpp/rnwgpu/api/GPUCompilationMessage.h +36 -0
  64. package/cpp/rnwgpu/api/GPUComputePassEncoder.cpp +60 -0
  65. package/cpp/rnwgpu/api/GPUComputePassEncoder.h +85 -0
  66. package/cpp/rnwgpu/api/GPUComputePipeline.cpp +12 -0
  67. package/cpp/rnwgpu/api/GPUComputePipeline.h +60 -0
  68. package/cpp/rnwgpu/api/GPUDevice.cpp +492 -0
  69. package/cpp/rnwgpu/api/GPUDevice.h +259 -0
  70. package/cpp/rnwgpu/api/GPUDeviceLostInfo.cpp +7 -0
  71. package/cpp/rnwgpu/api/GPUDeviceLostInfo.h +40 -0
  72. package/cpp/rnwgpu/api/GPUError.h +35 -0
  73. package/cpp/rnwgpu/api/GPUExtent3D.h +66 -0
  74. package/cpp/rnwgpu/api/GPUExternalTexture.h +45 -0
  75. package/cpp/rnwgpu/api/GPUFeatures.h +203 -0
  76. package/cpp/rnwgpu/api/GPUInternalError.h +31 -0
  77. package/cpp/rnwgpu/api/GPUOrigin2D.h +55 -0
  78. package/cpp/rnwgpu/api/GPUOrigin3D.h +62 -0
  79. package/cpp/rnwgpu/api/GPUOutOfMemoryError.h +33 -0
  80. package/cpp/rnwgpu/api/GPUPipelineLayout.h +45 -0
  81. package/cpp/rnwgpu/api/GPUQuerySet.cpp +11 -0
  82. package/cpp/rnwgpu/api/GPUQuerySet.h +73 -0
  83. package/cpp/rnwgpu/api/GPUQueue.cpp +169 -0
  84. package/cpp/rnwgpu/api/GPUQueue.h +81 -0
  85. package/cpp/rnwgpu/api/GPURenderBundle.h +44 -0
  86. package/cpp/rnwgpu/api/GPURenderBundleEncoder.cpp +131 -0
  87. package/cpp/rnwgpu/api/GPURenderBundleEncoder.h +110 -0
  88. package/cpp/rnwgpu/api/GPURenderPassEncoder.cpp +165 -0
  89. package/cpp/rnwgpu/api/GPURenderPassEncoder.h +130 -0
  90. package/cpp/rnwgpu/api/GPURenderPipeline.cpp +13 -0
  91. package/cpp/rnwgpu/api/GPURenderPipeline.h +61 -0
  92. package/cpp/rnwgpu/api/GPUSampler.h +44 -0
  93. package/cpp/rnwgpu/api/GPUShaderModule.cpp +51 -0
  94. package/cpp/rnwgpu/api/GPUShaderModule.h +66 -0
  95. package/cpp/rnwgpu/api/GPUSupportedLimits.cpp +129 -0
  96. package/cpp/rnwgpu/api/GPUSupportedLimits.h +131 -0
  97. package/cpp/rnwgpu/api/GPUTexture.cpp +47 -0
  98. package/cpp/rnwgpu/api/GPUTexture.h +162 -0
  99. package/cpp/rnwgpu/api/GPUTextureView.h +44 -0
  100. package/cpp/rnwgpu/api/GPUUncapturedErrorEvent.h +71 -0
  101. package/cpp/rnwgpu/api/GPUValidationError.h +32 -0
  102. package/cpp/rnwgpu/api/ImageBitmap.h +40 -0
  103. package/cpp/rnwgpu/api/RNWebGPU.h +199 -0
  104. package/cpp/rnwgpu/api/descriptors/GPUBindGroupDescriptor.h +65 -0
  105. package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +78 -0
  106. package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutDescriptor.h +57 -0
  107. package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutEntry.h +98 -0
  108. package/cpp/rnwgpu/api/descriptors/GPUBlendComponent.h +58 -0
  109. package/cpp/rnwgpu/api/descriptors/GPUBlendState.h +53 -0
  110. package/cpp/rnwgpu/api/descriptors/GPUBufferBinding.h +57 -0
  111. package/cpp/rnwgpu/api/descriptors/GPUBufferBindingLayout.h +57 -0
  112. package/cpp/rnwgpu/api/descriptors/GPUBufferDescriptor.h +60 -0
  113. package/cpp/rnwgpu/api/descriptors/GPUBufferUsage.h +39 -0
  114. package/cpp/rnwgpu/api/descriptors/GPUCanvasConfiguration.h +76 -0
  115. package/cpp/rnwgpu/api/descriptors/GPUColor.h +67 -0
  116. package/cpp/rnwgpu/api/descriptors/GPUColorTargetState.h +59 -0
  117. package/cpp/rnwgpu/api/descriptors/GPUColorWrite.h +29 -0
  118. package/cpp/rnwgpu/api/descriptors/GPUCommandBufferDescriptor.h +46 -0
  119. package/cpp/rnwgpu/api/descriptors/GPUCommandEncoderDescriptor.h +46 -0
  120. package/cpp/rnwgpu/api/descriptors/GPUComputePassDescriptor.h +57 -0
  121. package/cpp/rnwgpu/api/descriptors/GPUComputePassTimestampWrites.h +59 -0
  122. package/cpp/rnwgpu/api/descriptors/GPUComputePipelineDescriptor.h +68 -0
  123. package/cpp/rnwgpu/api/descriptors/GPUDepthStencilState.h +104 -0
  124. package/cpp/rnwgpu/api/descriptors/GPUDeviceDescriptor.h +100 -0
  125. package/cpp/rnwgpu/api/descriptors/GPUExternalTextureBindingLayout.h +39 -0
  126. package/cpp/rnwgpu/api/descriptors/GPUExternalTextureDescriptor.h +80 -0
  127. package/cpp/rnwgpu/api/descriptors/GPUFragmentState.h +74 -0
  128. package/cpp/rnwgpu/api/descriptors/GPUImageCopyBuffer.h +63 -0
  129. package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +63 -0
  130. package/cpp/rnwgpu/api/descriptors/GPUImageCopyTexture.h +66 -0
  131. package/cpp/rnwgpu/api/descriptors/GPUImageCopyTextureTagged.h +82 -0
  132. package/cpp/rnwgpu/api/descriptors/GPUImageDataLayout.h +55 -0
  133. package/cpp/rnwgpu/api/descriptors/GPUMapMode.h +22 -0
  134. package/cpp/rnwgpu/api/descriptors/GPUMultisampleState.h +55 -0
  135. package/cpp/rnwgpu/api/descriptors/GPUPipelineLayoutDescriptor.h +58 -0
  136. package/cpp/rnwgpu/api/descriptors/GPUPrimitiveState.h +70 -0
  137. package/cpp/rnwgpu/api/descriptors/GPUProgrammableStage.h +62 -0
  138. package/cpp/rnwgpu/api/descriptors/GPUQuerySetDescriptor.h +56 -0
  139. package/cpp/rnwgpu/api/descriptors/GPUQueueDescriptor.h +44 -0
  140. package/cpp/rnwgpu/api/descriptors/GPURenderBundleDescriptor.h +46 -0
  141. package/cpp/rnwgpu/api/descriptors/GPURenderBundleEncoderDescriptor.h +81 -0
  142. package/cpp/rnwgpu/api/descriptors/GPURenderPassColorAttachment.h +82 -0
  143. package/cpp/rnwgpu/api/descriptors/GPURenderPassDepthStencilAttachment.h +102 -0
  144. package/cpp/rnwgpu/api/descriptors/GPURenderPassDescriptor.h +93 -0
  145. package/cpp/rnwgpu/api/descriptors/GPURenderPassTimestampWrites.h +59 -0
  146. package/cpp/rnwgpu/api/descriptors/GPURenderPipelineDescriptor.h +104 -0
  147. package/cpp/rnwgpu/api/descriptors/GPURequestAdapterOptions.h +52 -0
  148. package/cpp/rnwgpu/api/descriptors/GPUSamplerBindingLayout.h +46 -0
  149. package/cpp/rnwgpu/api/descriptors/GPUSamplerDescriptor.h +111 -0
  150. package/cpp/rnwgpu/api/descriptors/GPUShaderModuleCompilationHint.h +61 -0
  151. package/cpp/rnwgpu/api/descriptors/GPUShaderModuleDescriptor.h +63 -0
  152. package/cpp/rnwgpu/api/descriptors/GPUShaderStage.h +25 -0
  153. package/cpp/rnwgpu/api/descriptors/GPUStencilFaceState.h +65 -0
  154. package/cpp/rnwgpu/api/descriptors/GPUStorageTextureBindingLayout.h +60 -0
  155. package/cpp/rnwgpu/api/descriptors/GPUTextureBindingLayout.h +60 -0
  156. package/cpp/rnwgpu/api/descriptors/GPUTextureDescriptor.h +92 -0
  157. package/cpp/rnwgpu/api/descriptors/GPUTextureUsage.h +29 -0
  158. package/cpp/rnwgpu/api/descriptors/GPUTextureViewDescriptor.h +92 -0
  159. package/cpp/rnwgpu/api/descriptors/GPUUncapturedErrorEventInit.h +65 -0
  160. package/cpp/rnwgpu/api/descriptors/GPUVertexAttribute.h +54 -0
  161. package/cpp/rnwgpu/api/descriptors/GPUVertexBufferLayout.h +63 -0
  162. package/cpp/rnwgpu/api/descriptors/GPUVertexState.h +74 -0
  163. package/cpp/rnwgpu/api/descriptors/Unions.h +1969 -0
  164. package/cpp/rnwgpu/async/AsyncDispatcher.h +28 -0
  165. package/cpp/rnwgpu/async/AsyncRunner.cpp +215 -0
  166. package/cpp/rnwgpu/async/AsyncRunner.h +53 -0
  167. package/cpp/rnwgpu/async/AsyncTaskHandle.cpp +181 -0
  168. package/cpp/rnwgpu/async/AsyncTaskHandle.h +55 -0
  169. package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.cpp +23 -0
  170. package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.h +22 -0
  171. package/cpp/webgpu/webgpu.h +4918 -0
  172. package/cpp/webgpu/webgpu_cpp.h +10294 -0
  173. package/cpp/webgpu/webgpu_cpp_chained_struct.h +57 -0
  174. package/cpp/webgpu/webgpu_cpp_print.h +2755 -0
  175. package/cpp/webgpu/webgpu_enum_class_bitmasks.h +161 -0
  176. package/lib/commonjs/Canvas.js +55 -0
  177. package/lib/commonjs/Canvas.js.map +1 -0
  178. package/lib/commonjs/NativeWebGPUModule.js +10 -0
  179. package/lib/commonjs/NativeWebGPUModule.js.map +1 -0
  180. package/lib/commonjs/Offscreen.js +103 -0
  181. package/lib/commonjs/Offscreen.js.map +1 -0
  182. package/lib/commonjs/WebGPUViewNativeComponent.js +10 -0
  183. package/lib/commonjs/WebGPUViewNativeComponent.js.map +1 -0
  184. package/lib/commonjs/WebGPUViewNativeComponent.web.js +103 -0
  185. package/lib/commonjs/WebGPUViewNativeComponent.web.js.map +1 -0
  186. package/lib/commonjs/WebPolyfillGPUModule.js +40 -0
  187. package/lib/commonjs/WebPolyfillGPUModule.js.map +1 -0
  188. package/lib/commonjs/external/ModuleProxy.js +36 -0
  189. package/lib/commonjs/external/ModuleProxy.js.map +1 -0
  190. package/lib/commonjs/external/index.js +17 -0
  191. package/lib/commonjs/external/index.js.map +1 -0
  192. package/lib/commonjs/external/reanimated/ReanimatedProxy.js +18 -0
  193. package/lib/commonjs/external/reanimated/ReanimatedProxy.js.map +1 -0
  194. package/lib/commonjs/external/reanimated/index.js +21 -0
  195. package/lib/commonjs/external/reanimated/index.js.map +1 -0
  196. package/lib/commonjs/external/reanimated/registerWebGPUForReanimated.js +49 -0
  197. package/lib/commonjs/external/reanimated/registerWebGPUForReanimated.js.map +1 -0
  198. package/lib/commonjs/hooks.js +83 -0
  199. package/lib/commonjs/hooks.js.map +1 -0
  200. package/lib/commonjs/index.js +17 -0
  201. package/lib/commonjs/index.js.map +1 -0
  202. package/lib/commonjs/main/index.js +91 -0
  203. package/lib/commonjs/main/index.js.map +1 -0
  204. package/lib/commonjs/main/index.web.js +51 -0
  205. package/lib/commonjs/main/index.web.js.map +1 -0
  206. package/lib/commonjs/types.js +2 -0
  207. package/lib/commonjs/types.js.map +1 -0
  208. package/lib/commonjs/utils.js +11 -0
  209. package/lib/commonjs/utils.js.map +1 -0
  210. package/lib/module/Canvas.js +46 -0
  211. package/lib/module/Canvas.js.map +1 -0
  212. package/lib/module/NativeWebGPUModule.js +4 -0
  213. package/lib/module/NativeWebGPUModule.js.map +1 -0
  214. package/lib/module/Offscreen.js +96 -0
  215. package/lib/module/Offscreen.js.map +1 -0
  216. package/lib/module/WebGPUViewNativeComponent.js +4 -0
  217. package/lib/module/WebGPUViewNativeComponent.js.map +1 -0
  218. package/lib/module/WebGPUViewNativeComponent.web.js +96 -0
  219. package/lib/module/WebGPUViewNativeComponent.web.js.map +1 -0
  220. package/lib/module/WebPolyfillGPUModule.js +38 -0
  221. package/lib/module/WebPolyfillGPUModule.js.map +1 -0
  222. package/lib/module/external/ModuleProxy.js +28 -0
  223. package/lib/module/external/ModuleProxy.js.map +1 -0
  224. package/lib/module/external/index.js +2 -0
  225. package/lib/module/external/index.js.map +1 -0
  226. package/lib/module/external/reanimated/ReanimatedProxy.js +12 -0
  227. package/lib/module/external/reanimated/ReanimatedProxy.js.map +1 -0
  228. package/lib/module/external/reanimated/index.js +3 -0
  229. package/lib/module/external/reanimated/index.js.map +1 -0
  230. package/lib/module/external/reanimated/registerWebGPUForReanimated.js +42 -0
  231. package/lib/module/external/reanimated/registerWebGPUForReanimated.js.map +1 -0
  232. package/lib/module/hooks.js +70 -0
  233. package/lib/module/hooks.js.map +1 -0
  234. package/lib/module/index.js +5 -0
  235. package/lib/module/index.js.map +1 -0
  236. package/lib/module/main/index.js +33 -0
  237. package/lib/module/main/index.js.map +1 -0
  238. package/lib/module/main/index.web.js +8 -0
  239. package/lib/module/main/index.web.js.map +1 -0
  240. package/lib/module/types.js +2 -0
  241. package/lib/module/types.js.map +1 -0
  242. package/lib/module/utils.js +5 -0
  243. package/lib/module/utils.js.map +1 -0
  244. package/lib/typescript/babel.config.d.ts +3 -0
  245. package/lib/typescript/babel.config.d.ts.map +1 -0
  246. package/lib/typescript/eslint.config.d.mts +3 -0
  247. package/lib/typescript/eslint.config.d.mts.map +1 -0
  248. package/lib/typescript/jest.config.d.ts +9 -0
  249. package/lib/typescript/jest.config.d.ts.map +1 -0
  250. package/lib/typescript/lib/commonjs/Canvas.d.ts +7 -0
  251. package/lib/typescript/lib/commonjs/Canvas.d.ts.map +1 -0
  252. package/lib/typescript/lib/commonjs/NativeWebGPUModule.d.ts +5 -0
  253. package/lib/typescript/lib/commonjs/NativeWebGPUModule.d.ts.map +1 -0
  254. package/lib/typescript/lib/commonjs/Offscreen.d.ts +26 -0
  255. package/lib/typescript/lib/commonjs/Offscreen.d.ts.map +1 -0
  256. package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.d.ts +5 -0
  257. package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.d.ts.map +1 -0
  258. package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.web.d.ts +4 -0
  259. package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.web.d.ts.map +1 -0
  260. package/lib/typescript/lib/commonjs/WebPolyfillGPUModule.d.ts +2 -0
  261. package/lib/typescript/lib/commonjs/WebPolyfillGPUModule.d.ts.map +1 -0
  262. package/lib/typescript/lib/commonjs/external/ModuleProxy.d.ts +12 -0
  263. package/lib/typescript/lib/commonjs/external/ModuleProxy.d.ts.map +1 -0
  264. package/lib/typescript/lib/commonjs/external/index.d.ts +2 -0
  265. package/lib/typescript/lib/commonjs/external/index.d.ts.map +1 -0
  266. package/lib/typescript/lib/commonjs/external/reanimated/ReanimatedProxy.d.ts +6 -0
  267. package/lib/typescript/lib/commonjs/external/reanimated/ReanimatedProxy.d.ts.map +1 -0
  268. package/lib/typescript/lib/commonjs/external/reanimated/index.d.ts +4 -0
  269. package/lib/typescript/lib/commonjs/external/reanimated/index.d.ts.map +1 -0
  270. package/lib/typescript/lib/commonjs/external/reanimated/registerWebGPUForReanimated.d.ts +9 -0
  271. package/lib/typescript/lib/commonjs/external/reanimated/registerWebGPUForReanimated.d.ts.map +1 -0
  272. package/lib/typescript/lib/commonjs/hooks.d.ts +18 -0
  273. package/lib/typescript/lib/commonjs/hooks.d.ts.map +1 -0
  274. package/lib/typescript/lib/commonjs/index.d.ts +2 -0
  275. package/lib/typescript/lib/commonjs/index.d.ts.map +1 -0
  276. package/lib/typescript/lib/commonjs/main/index.d.ts +3 -0
  277. package/lib/typescript/lib/commonjs/main/index.d.ts.map +1 -0
  278. package/lib/typescript/lib/commonjs/main/index.web.d.ts +2 -0
  279. package/lib/typescript/lib/commonjs/main/index.web.d.ts.map +1 -0
  280. package/lib/typescript/lib/commonjs/types.d.ts +1 -0
  281. package/lib/typescript/lib/commonjs/types.d.ts.map +1 -0
  282. package/lib/typescript/lib/commonjs/utils.d.ts +3 -0
  283. package/lib/typescript/lib/commonjs/utils.d.ts.map +1 -0
  284. package/lib/typescript/lib/module/Canvas.d.ts +8 -0
  285. package/lib/typescript/lib/module/Canvas.d.ts.map +1 -0
  286. package/lib/typescript/lib/module/NativeWebGPUModule.d.ts +3 -0
  287. package/lib/typescript/lib/module/NativeWebGPUModule.d.ts.map +1 -0
  288. package/lib/typescript/lib/module/Offscreen.d.ts +25 -0
  289. package/lib/typescript/lib/module/Offscreen.d.ts.map +1 -0
  290. package/lib/typescript/lib/module/WebGPUViewNativeComponent.d.ts +3 -0
  291. package/lib/typescript/lib/module/WebGPUViewNativeComponent.d.ts.map +1 -0
  292. package/lib/typescript/lib/module/WebGPUViewNativeComponent.web.d.ts +3 -0
  293. package/lib/typescript/lib/module/WebGPUViewNativeComponent.web.d.ts.map +1 -0
  294. package/lib/typescript/lib/module/WebPolyfillGPUModule.d.ts +2 -0
  295. package/lib/typescript/lib/module/WebPolyfillGPUModule.d.ts.map +1 -0
  296. package/lib/typescript/lib/module/external/ModuleProxy.d.ts +7 -0
  297. package/lib/typescript/lib/module/external/ModuleProxy.d.ts.map +1 -0
  298. package/lib/typescript/lib/module/external/index.d.ts +2 -0
  299. package/lib/typescript/lib/module/external/index.d.ts.map +1 -0
  300. package/lib/typescript/lib/module/external/reanimated/ReanimatedProxy.d.ts +5 -0
  301. package/lib/typescript/lib/module/external/reanimated/ReanimatedProxy.d.ts.map +1 -0
  302. package/lib/typescript/lib/module/external/reanimated/index.d.ts +3 -0
  303. package/lib/typescript/lib/module/external/reanimated/index.d.ts.map +1 -0
  304. package/lib/typescript/lib/module/external/reanimated/registerWebGPUForReanimated.d.ts +2 -0
  305. package/lib/typescript/lib/module/external/reanimated/registerWebGPUForReanimated.d.ts.map +1 -0
  306. package/lib/typescript/lib/module/hooks.d.ts +18 -0
  307. package/lib/typescript/lib/module/hooks.d.ts.map +1 -0
  308. package/lib/typescript/lib/module/index.d.ts +2 -0
  309. package/lib/typescript/lib/module/index.d.ts.map +1 -0
  310. package/lib/typescript/lib/module/main/index.d.ts +6 -0
  311. package/lib/typescript/lib/module/main/index.d.ts.map +1 -0
  312. package/lib/typescript/lib/module/main/index.web.d.ts +5 -0
  313. package/lib/typescript/lib/module/main/index.web.d.ts.map +1 -0
  314. package/lib/typescript/lib/module/types.d.ts +1 -0
  315. package/lib/typescript/lib/module/types.d.ts.map +1 -0
  316. package/lib/typescript/lib/module/utils.d.ts +2 -0
  317. package/lib/typescript/lib/module/utils.d.ts.map +1 -0
  318. package/lib/typescript/src/Canvas.d.ts +35 -0
  319. package/lib/typescript/src/Canvas.d.ts.map +1 -0
  320. package/lib/typescript/src/NativeWebGPUModule.d.ts +7 -0
  321. package/lib/typescript/src/NativeWebGPUModule.d.ts.map +1 -0
  322. package/lib/typescript/src/Offscreen.d.ts +30 -0
  323. package/lib/typescript/src/Offscreen.d.ts.map +1 -0
  324. package/lib/typescript/src/WebGPUViewNativeComponent.d.ts +9 -0
  325. package/lib/typescript/src/WebGPUViewNativeComponent.d.ts.map +1 -0
  326. package/lib/typescript/src/WebGPUViewNativeComponent.web.d.ts +9 -0
  327. package/lib/typescript/src/WebGPUViewNativeComponent.web.d.ts.map +1 -0
  328. package/lib/typescript/src/WebPolyfillGPUModule.d.ts +2 -0
  329. package/lib/typescript/src/WebPolyfillGPUModule.d.ts.map +1 -0
  330. package/lib/typescript/src/external/ModuleProxy.d.ts +11 -0
  331. package/lib/typescript/src/external/ModuleProxy.d.ts.map +1 -0
  332. package/lib/typescript/src/external/index.d.ts +2 -0
  333. package/lib/typescript/src/external/index.d.ts.map +1 -0
  334. package/lib/typescript/src/external/reanimated/ReanimatedProxy.d.ts +4 -0
  335. package/lib/typescript/src/external/reanimated/ReanimatedProxy.d.ts.map +1 -0
  336. package/lib/typescript/src/external/reanimated/index.d.ts +3 -0
  337. package/lib/typescript/src/external/reanimated/index.d.ts.map +1 -0
  338. package/lib/typescript/src/external/reanimated/registerWebGPUForReanimated.d.ts +8 -0
  339. package/lib/typescript/src/external/reanimated/registerWebGPUForReanimated.d.ts.map +1 -0
  340. package/lib/typescript/src/hooks.d.ts +27 -0
  341. package/lib/typescript/src/hooks.d.ts.map +1 -0
  342. package/lib/typescript/src/index.d.ts +18 -0
  343. package/lib/typescript/src/index.d.ts.map +1 -0
  344. package/lib/typescript/src/main/index.d.ts +6 -0
  345. package/lib/typescript/src/main/index.d.ts.map +1 -0
  346. package/lib/typescript/src/main/index.web.d.ts +6 -0
  347. package/lib/typescript/src/main/index.web.d.ts.map +1 -0
  348. package/lib/typescript/src/types.d.ts +19 -0
  349. package/lib/typescript/src/types.d.ts.map +1 -0
  350. package/lib/typescript/src/utils.d.ts +2 -0
  351. package/lib/typescript/src/utils.d.ts.map +1 -0
  352. package/libs/android/arm64-v8a/libwebgpu_dawn.so +0 -0
  353. package/libs/android/armeabi-v7a/libwebgpu_dawn.so +0 -0
  354. package/libs/android/x86/libwebgpu_dawn.so +0 -0
  355. package/libs/android/x86_64/libwebgpu_dawn.so +0 -0
  356. package/libs/apple/libwebgpu_dawn.xcframework/Info.plist +59 -0
  357. package/libs/apple/libwebgpu_dawn.xcframework/ios-arm64/libwebgpu_dawn.a +0 -0
  358. package/libs/apple/libwebgpu_dawn.xcframework/ios-arm64_x86_64-simulator/libwebgpu_dawn.a +0 -0
  359. package/libs/apple/libwebgpu_dawn.xcframework/macos-arm64_x86_64/libwebgpu_dawn.a +0 -0
  360. package/package.json +139 -0
  361. package/react-native-wgpu.podspec +47 -0
  362. package/src/Canvas.tsx +91 -0
  363. package/src/NativeWebGPUModule.ts +9 -0
  364. package/src/Offscreen.ts +113 -0
  365. package/src/WebGPUViewNativeComponent.ts +11 -0
  366. package/src/WebGPUViewNativeComponent.web.ts +113 -0
  367. package/src/WebPolyfillGPUModule.ts +53 -0
  368. package/src/external/ModuleProxy.ts +30 -0
  369. package/src/external/index.ts +1 -0
  370. package/src/external/reanimated/ReanimatedProxy.ts +19 -0
  371. package/src/external/reanimated/index.ts +2 -0
  372. package/src/external/reanimated/registerWebGPUForReanimated.ts +43 -0
  373. package/src/hooks.tsx +93 -0
  374. package/src/index.tsx +31 -0
  375. package/src/main/index.tsx +40 -0
  376. package/src/main/index.web.tsx +8 -0
  377. package/src/types.ts +20 -0
  378. package/src/utils.ts +4 -0
@@ -0,0 +1,16 @@
1
+ #ifndef PACKAGES_WEBGPU_APPLE_RNWGUIKIT_H_
2
+ #define PACKAGES_WEBGPU_APPLE_RNWGUIKIT_H_
3
+
4
+ #if !TARGET_OS_OSX
5
+ #import <UIKit/UIKit.h>
6
+ #else
7
+ #import <Appkit/Appkit.h>
8
+ #endif
9
+
10
+ #if !TARGET_OS_OSX
11
+ typedef UIView RNWGPlatformView;
12
+ #else
13
+ typedef NSView RNWGPlatformView;
14
+ #endif
15
+
16
+ #endif // PACKAGES_WEBGPU_APPLE_RNWGUIKIT_H_
@@ -0,0 +1,13 @@
1
+ #pragma once
2
+
3
+ #import "RNWebGPUManager.h"
4
+ #import <RNWgpuViewSpec/RNWgpuViewSpec.h>
5
+ #import <React/RCTCallInvokerModule.h>
6
+ #import <React/RCTEventEmitter.h>
7
+
8
+ @interface WebGPUModule
9
+ : RCTEventEmitter <NativeWebGPUModuleSpec, RCTCallInvokerModule>
10
+
11
+ + (std::shared_ptr<rnwgpu::RNWebGPUManager>)getManager;
12
+
13
+ @end
@@ -0,0 +1,89 @@
1
+ #import "WebGPUModule.h"
2
+ #include "ApplePlatformContext.h"
3
+ #import "GPUCanvasContext.h"
4
+
5
+ #import <React/RCTBridge+Private.h>
6
+ #import <React/RCTCallInvoker.h>
7
+ #import <React/RCTLog.h>
8
+ #import <ReactCommon/RCTTurboModule.h>
9
+ #import <jsi/jsi.h>
10
+ #import <memory>
11
+
12
+ namespace jsi = facebook::jsi;
13
+ namespace react = facebook::react;
14
+
15
+ // Category to declare the runtime property on RCTBridge/RCTBridgeProxy.
16
+ // In Bridgeless mode, self.bridge is an RCTBridgeProxy which implements
17
+ // -(void *)runtime. In Legacy mode, self.bridge is the real RCTBridge
18
+ // (backed by RCTCxxBridge) which also implements it.
19
+ @interface RCTBridge (JSIRuntime)
20
+ - (void *)runtime;
21
+ @end
22
+
23
+ @implementation WebGPUModule
24
+
25
+ RCT_EXPORT_MODULE(WebGPUModule)
26
+
27
+ static std::shared_ptr<rnwgpu::RNWebGPUManager> webgpuManager;
28
+
29
+ // Synthesize callInvoker so RCTTurboModuleManager injects the JS CallInvoker.
30
+ // When the module conforms to RCTCallInvokerModule, the TurboModule infra
31
+ // calls setCallInvoker: during module initialization.
32
+ @synthesize callInvoker = _callInvoker;
33
+
34
+ + (std::shared_ptr<rnwgpu::RNWebGPUManager>)getManager {
35
+ return webgpuManager;
36
+ }
37
+
38
+ #pragma Setup and invalidation
39
+
40
+ + (BOOL)requiresMainQueueSetup {
41
+ return YES;
42
+ }
43
+
44
+ - (void)invalidate {
45
+ webgpuManager = nil;
46
+ }
47
+
48
+ - (std::shared_ptr<rnwgpu::RNWebGPUManager>)getManager {
49
+ return webgpuManager;
50
+ }
51
+
52
+ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) {
53
+ if (webgpuManager != nil) {
54
+ // Already initialized, ignore call.
55
+ return @true;
56
+ }
57
+
58
+ // self.bridge works in both Legacy (RCTBridge) and Bridgeless
59
+ // (RCTBridgeProxy).
60
+ jsi::Runtime *runtime = (jsi::Runtime *)self.bridge.runtime;
61
+ if (!runtime) {
62
+ NSLog(@"Failed to install react-native-wgpu: jsi::Runtime* was null! "
63
+ @"(self.bridge=%@)",
64
+ self.bridge);
65
+ return [NSNumber numberWithBool:NO];
66
+ }
67
+
68
+ // _callInvoker is injected by RCTTurboModuleManager because we conform to
69
+ // RCTCallInvokerModule. Works in both Legacy and Bridgeless.
70
+ std::shared_ptr<react::CallInvoker> jsInvoker = _callInvoker.callInvoker;
71
+ if (!jsInvoker) {
72
+ NSLog(@"Failed to install react-native-wgpu: react::CallInvoker was "
73
+ @"null!");
74
+ return [NSNumber numberWithBool:NO];
75
+ }
76
+
77
+ std::shared_ptr<rnwgpu::PlatformContext> platformContext =
78
+ std::make_shared<rnwgpu::ApplePlatformContext>();
79
+ webgpuManager = std::make_shared<rnwgpu::RNWebGPUManager>(runtime, jsInvoker,
80
+ platformContext);
81
+ return @true;
82
+ }
83
+
84
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
85
+ (const facebook::react::ObjCTurboModule::InitParams &)params {
86
+ return std::make_shared<facebook::react::NativeWebGPUModuleSpecJSI>(params);
87
+ }
88
+
89
+ @end
@@ -0,0 +1,12 @@
1
+ #pragma once
2
+
3
+ #import "MetalView.h"
4
+ #import <React/RCTViewComponentView.h>
5
+ #import <UIKit/UIKit.h>
6
+
7
+ NS_ASSUME_NONNULL_BEGIN
8
+
9
+ @interface WebGPUView : RCTViewComponentView
10
+ @end
11
+
12
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,66 @@
1
+ #import "WebGPUView.h"
2
+
3
+ #import <react/renderer/components/RNWgpuViewSpec/ComponentDescriptors.h>
4
+ #import <react/renderer/components/RNWgpuViewSpec/EventEmitters.h>
5
+ #import <react/renderer/components/RNWgpuViewSpec/Props.h>
6
+ #import <react/renderer/components/RNWgpuViewSpec/RCTComponentViewHelpers.h>
7
+
8
+ #import "MetalView.h"
9
+ #import "RCTFabricComponentsPlugins.h"
10
+ #import "Utils.h"
11
+
12
+ using namespace facebook::react;
13
+
14
+ @implementation WebGPUView
15
+
16
+ + (ComponentDescriptorProvider)componentDescriptorProvider {
17
+ return concreteComponentDescriptorProvider<WebGPUViewComponentDescriptor>();
18
+ }
19
+
20
+ - (void)prepareForRecycle {
21
+ [super prepareForRecycle];
22
+ /*
23
+ It's important to destroy the Metal Layer before releasing a view
24
+ to the recycled pool to prevent displaying outdated content from
25
+ the last usage in the new context.
26
+ */
27
+ self.contentView = nil;
28
+ }
29
+
30
+ - (MetalView *)getContentView {
31
+ if (!self.contentView) {
32
+ self.contentView = [MetalView new];
33
+ }
34
+ return (MetalView *)self.contentView;
35
+ }
36
+
37
+ - (void)updateProps:(const Props::Shared &)props
38
+ oldProps:(const Props::Shared &)oldProps {
39
+ const auto &oldViewProps =
40
+ *std::static_pointer_cast<const WebGPUViewProps>(_props);
41
+ const auto &newViewProps =
42
+ *std::static_pointer_cast<const WebGPUViewProps>(props);
43
+
44
+ if (newViewProps.contextId != oldViewProps.contextId) {
45
+ /*
46
+ The context is set only once during mounting the component
47
+ and never changes because it isn't available for users to modify.
48
+ */
49
+ MetalView *metalView = [MetalView new];
50
+ self.contentView = metalView;
51
+ [metalView setContextId:@(newViewProps.contextId)];
52
+ [metalView configure];
53
+ }
54
+
55
+ [super updateProps:props oldProps:oldProps];
56
+ }
57
+
58
+ - (void)updateLayoutMetrics:(const LayoutMetrics &)layoutMetrics
59
+ oldLayoutMetrics:(const LayoutMetrics &)oldLayoutMetrics {
60
+ [super updateLayoutMetrics:layoutMetrics oldLayoutMetrics:oldLayoutMetrics];
61
+ [(MetalView *)self.contentView update];
62
+ }
63
+
64
+ Class<RCTComponentViewProtocol> WebGPUViewCls(void) { return WebGPUView.class; }
65
+
66
+ @end
@@ -0,0 +1,100 @@
1
+ //
2
+ // Created by Christian Falch on 26/08/2021.
3
+ //
4
+
5
+ #pragma once
6
+
7
+ #include <cstdio>
8
+ #include <jsi/jsi.h>
9
+ #include <string>
10
+
11
+ #if defined(ANDROID) || defined(__ANDROID__)
12
+ #include <android/log.h>
13
+ #endif
14
+
15
+ #ifdef __APPLE__
16
+ #include <syslog.h>
17
+ #endif
18
+
19
+ namespace rnwgpu {
20
+
21
+ namespace jsi = facebook::jsi;
22
+
23
+ class Logger {
24
+ public:
25
+ /**
26
+ * Logs message to console
27
+ * @param message Message to be written out
28
+ */
29
+ static void logToConsole(std::string message) {
30
+ #ifdef DEBUG
31
+ #if defined(ANDROID) || defined(__ANDROID__)
32
+ __android_log_write(ANDROID_LOG_INFO, "WebGPU", message.c_str());
33
+ #endif
34
+
35
+ #ifdef __APPLE__
36
+ syslog(LOG_ERR, "%s\n", message.c_str());
37
+ #endif
38
+ #else
39
+ // In release mode, do nothing
40
+ (void)message;
41
+ #endif
42
+ }
43
+
44
+ /**
45
+ * Logs to console
46
+ * @param fmt Format string
47
+ * @param ... Arguments to format string
48
+ */
49
+ static void logToConsole(const char *fmt, ...) {
50
+ #ifdef DEBUG
51
+ va_list args;
52
+ va_start(args, fmt);
53
+
54
+ static char buffer[512];
55
+ vsnprintf(buffer, sizeof(buffer), fmt, args);
56
+ #if defined(ANDROID) || defined(__ANDROID__)
57
+ __android_log_write(ANDROID_LOG_INFO, "WebGPU", buffer);
58
+ #endif
59
+ #ifdef __APPLE__
60
+ syslog(LOG_ERR, "WebGPU: %s\n", buffer);
61
+ #endif
62
+ va_end(args);
63
+ #else
64
+ // In release mode, do nothing
65
+ (void)fmt;
66
+ #endif
67
+ }
68
+
69
+ static void logToJavascriptConsole(jsi::Runtime &runtime,
70
+ const std::string &message) {
71
+ auto console = Logger::getJavascriptConsole(runtime).asObject(runtime);
72
+ auto log = console.getPropertyAsFunction(runtime, "log");
73
+ log.call(runtime, jsi::String::createFromUtf8(runtime, message));
74
+ }
75
+
76
+ static void warnToJavascriptConsole(jsi::Runtime &runtime,
77
+ const std::string &message) {
78
+ auto console = Logger::getJavascriptConsole(runtime).asObject(runtime);
79
+ auto warn = console.getPropertyAsFunction(runtime, "warn");
80
+ warn.call(runtime, jsi::String::createFromUtf8(runtime, message));
81
+ }
82
+
83
+ static void errorToJavascriptConsole(jsi::Runtime &runtime,
84
+ const std::string &message) {
85
+ auto console = Logger::getJavascriptConsole(runtime).asObject(runtime);
86
+ auto warn = console.getPropertyAsFunction(runtime, "error");
87
+ warn.call(runtime, jsi::String::createFromUtf8(runtime, message));
88
+ }
89
+
90
+ private:
91
+ static jsi::Value getJavascriptConsole(jsi::Runtime &runtime) {
92
+ auto console = runtime.global().getProperty(runtime, "console");
93
+ if (console.isUndefined() || console.isNull()) {
94
+ throw jsi::JSError(runtime, "Could not find console object.");
95
+ return jsi::Value::undefined();
96
+ }
97
+ return console;
98
+ }
99
+ };
100
+ } // namespace rnwgpu
@@ -0,0 +1,119 @@
1
+ #include <cstdio>
2
+ #include <sstream>
3
+ #include <string>
4
+ #include <utility>
5
+
6
+ #ifdef __ANDROID__
7
+ #include <android/log.h>
8
+ #elif defined(__APPLE__)
9
+ #include <os/log.h>
10
+ #endif
11
+
12
+ namespace dawn {
13
+
14
+ enum class LogSeverity {
15
+ Debug,
16
+ Info,
17
+ Warning,
18
+ Error,
19
+ };
20
+
21
+ // Forward declare to match Dawn's exact interface
22
+ class LogMessage {
23
+ public:
24
+ explicit LogMessage(LogSeverity severity);
25
+ ~LogMessage();
26
+ LogMessage(LogMessage&& other);
27
+ LogMessage& operator=(LogMessage&& other);
28
+ template <typename T>
29
+ LogMessage& operator<<(T&& value) {
30
+ mStream << value;
31
+ return *this;
32
+ }
33
+
34
+ private:
35
+ LogMessage(const LogMessage& other) = delete;
36
+ LogMessage& operator=(const LogMessage& other) = delete;
37
+ LogSeverity mSeverity;
38
+ std::ostringstream mStream;
39
+ };
40
+
41
+ // Implementation of LogMessage methods
42
+ LogMessage::LogMessage(LogSeverity severity) : mSeverity(severity) {}
43
+
44
+ LogMessage::LogMessage(LogMessage&& other)
45
+ : mSeverity(other.mSeverity), mStream(std::move(other.mStream)) {}
46
+
47
+ LogMessage& LogMessage::operator=(LogMessage&& other) {
48
+ if (this != &other) {
49
+ mSeverity = other.mSeverity;
50
+ mStream = std::move(other.mStream);
51
+ }
52
+ return *this;
53
+ }
54
+
55
+ LogMessage::~LogMessage() {
56
+ std::string fullMessage = mStream.str();
57
+ if (fullMessage.empty()) {
58
+ return;
59
+ }
60
+ const char* severityName;
61
+ switch (mSeverity) {
62
+ case LogSeverity::Debug: severityName = "Debug"; break;
63
+ case LogSeverity::Info: severityName = "Info"; break;
64
+ case LogSeverity::Warning: severityName = "Warning"; break;
65
+ case LogSeverity::Error: severityName = "Error"; break;
66
+ default: severityName = "Unknown"; break;
67
+ }
68
+
69
+ #ifdef __ANDROID__
70
+ int androidPriority;
71
+ switch (mSeverity) {
72
+ case LogSeverity::Debug: androidPriority = ANDROID_LOG_DEBUG; break;
73
+ case LogSeverity::Info: androidPriority = ANDROID_LOG_INFO; break;
74
+ case LogSeverity::Warning: androidPriority = ANDROID_LOG_WARN; break;
75
+ case LogSeverity::Error: androidPriority = ANDROID_LOG_ERROR; break;
76
+ default: androidPriority = ANDROID_LOG_ERROR; break;
77
+ }
78
+ __android_log_print(androidPriority, "ReactNativeWebGPU", "%s: %s", severityName, fullMessage.c_str());
79
+ #elif defined(__APPLE__)
80
+ os_log_type_t logType;
81
+ switch (mSeverity) {
82
+ case LogSeverity::Debug: logType = OS_LOG_TYPE_DEBUG; break;
83
+ case LogSeverity::Info: logType = OS_LOG_TYPE_INFO; break;
84
+ case LogSeverity::Warning: logType = OS_LOG_TYPE_DEFAULT; break;
85
+ case LogSeverity::Error: logType = OS_LOG_TYPE_ERROR; break;
86
+ default: logType = OS_LOG_TYPE_ERROR; break;
87
+ }
88
+ os_log_with_type(OS_LOG_DEFAULT, logType, "[ReactNativeWebGPU] %s: %s", severityName, fullMessage.c_str());
89
+ #else
90
+ FILE* outputStream = (mSeverity == LogSeverity::Warning || mSeverity == LogSeverity::Error) ? stderr : stdout;
91
+ fprintf(outputStream, "[ReactNativeWebGPU] %s: %s\n", severityName, fullMessage.c_str());
92
+ fflush(outputStream);
93
+ #endif
94
+ }
95
+
96
+ // Factory functions
97
+ LogMessage DebugLog() {
98
+ return LogMessage(LogSeverity::Debug);
99
+ }
100
+
101
+ LogMessage InfoLog() {
102
+ return LogMessage(LogSeverity::Info);
103
+ }
104
+
105
+ LogMessage WarningLog() {
106
+ return LogMessage(LogSeverity::Warning);
107
+ }
108
+
109
+ LogMessage ErrorLog() {
110
+ return LogMessage(LogSeverity::Error);
111
+ }
112
+
113
+ LogMessage DebugLog(const char* file, const char* function, int line) {
114
+ LogMessage message = DebugLog();
115
+ message << file << ":" << line << "(" << function << ")";
116
+ return message;
117
+ }
118
+
119
+ } // namespace dawn
@@ -0,0 +1,45 @@
1
+ #pragma once
2
+
3
+ #include <stdexcept>
4
+ #include <string>
5
+
6
+ namespace rnwgpu {
7
+
8
+ namespace EnumMapper {
9
+ // Add these two methods in namespace "EnumMapper" to allow parsing a custom enum:
10
+ // 1. `static void convertJSUnionToEnum(const std::string& inUnion, Enum* outEnum)`
11
+ // 2. `static void convertEnumToJSUnion(Enum inEnum, std::string* outUnion)`
12
+
13
+ static std::runtime_error invalidUnion(const std::string& passedUnion) {
14
+ return std::runtime_error("Cannot convert JS Value to Enum: Invalid Union value passed! (\"" + std::string(passedUnion) + "\")");
15
+ }
16
+
17
+ template <typename T> static std::runtime_error invalidEnum(T passedEnum) {
18
+ return std::runtime_error("Cannot convert Enum to JS Value: Invalid Enum passed! (Value #" +
19
+ std::to_string(static_cast<int>(passedEnum)) + ")");
20
+ }
21
+
22
+ // Trait to check if a convertJSUnionToEnum function for enum type T exists
23
+ template <typename T, typename = void> struct has_js_union_to_enum : std::false_type {};
24
+ template <typename T>
25
+ struct has_js_union_to_enum<T, std::void_t<decltype(convertJSUnionToEnum(std::declval<std::string>(), std::declval<T*>()))>>
26
+ : std::true_type {};
27
+
28
+ // Trait to check if a convertEnumToJSUnion function for enum type T exists
29
+ template <typename T, typename = void> struct has_enum_to_js_union : std::false_type {};
30
+ template <typename T>
31
+ struct has_enum_to_js_union<T, std::void_t<decltype(convertEnumToJSUnion(std::declval<T>(), std::declval<std::string*>()))>>
32
+ : std::true_type {};
33
+
34
+ template <typename TEnum> static void convertJSUnionToEnum(const std::string&, TEnum*) {
35
+ static_assert(has_js_union_to_enum<TEnum>::value,
36
+ "Cannot convert a JS union to this enum type. Did you implement EnumMapper::convertJSUnionToEnum(...)?");
37
+ }
38
+
39
+ template <typename TEnum> static void convertEnumToJSUnion(TEnum, std::string*) {
40
+ static_assert(has_enum_to_js_union<TEnum>::value,
41
+ "Cannot convert this enum type to a JS union. Did you implement EnumMapper::convertEnumToJSUnion(...)?");
42
+ }
43
+ } // namespace EnumMapper
44
+
45
+ } // namespace rnwgpu