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.
- package/LICENSE +20 -0
- package/README.md +319 -0
- package/android/CMakeLists.txt +108 -0
- package/android/build.gradle +138 -0
- package/android/cpp/AndroidPlatformContext.h +207 -0
- package/android/cpp/cpp-adapter.cpp +71 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/java/com/webgpu/WebGPUAHBView.java +298 -0
- package/android/src/main/java/com/webgpu/WebGPUAPI.java +20 -0
- package/android/src/main/java/com/webgpu/WebGPUBaseView.java +61 -0
- package/android/src/main/java/com/webgpu/WebGPUModule.java +50 -0
- package/android/src/main/java/com/webgpu/WebGPUSurfaceView.java +41 -0
- package/android/src/main/java/com/webgpu/WebGPUSurfaceViewWithSC.java +79 -0
- package/android/src/main/java/com/webgpu/WebGPUTextureView.java +46 -0
- package/android/src/main/java/com/webgpu/WebGPUView.java +108 -0
- package/android/src/main/java/com/webgpu/WebGPUViewManager.java +38 -0
- package/android/src/main/java/com/webgpu/WebGPUViewPackage.java +50 -0
- package/android/src/newarch/com/webgpu/WebGPUViewManagerSpec.java +24 -0
- package/apple/ApplePlatformContext.h +31 -0
- package/apple/ApplePlatformContext.mm +157 -0
- package/apple/MetalView.h +13 -0
- package/apple/MetalView.mm +50 -0
- package/apple/RNWGUIKit.h +16 -0
- package/apple/WebGPUModule.h +13 -0
- package/apple/WebGPUModule.mm +89 -0
- package/apple/WebGPUView.h +12 -0
- package/apple/WebGPUView.mm +66 -0
- package/cpp/WGPULogger.h +100 -0
- package/cpp/dawn_logging.cpp +119 -0
- package/cpp/jsi/EnumMapper.h +45 -0
- package/cpp/jsi/JSIConverter.h +473 -0
- package/cpp/jsi/NativeObject.h +607 -0
- package/cpp/jsi/Promise.cpp +44 -0
- package/cpp/jsi/Promise.h +35 -0
- package/cpp/jsi/RuntimeAwareCache.cpp +7 -0
- package/cpp/jsi/RuntimeAwareCache.h +100 -0
- package/cpp/jsi/RuntimeLifecycleMonitor.cpp +72 -0
- package/cpp/jsi/RuntimeLifecycleMonitor.h +32 -0
- package/cpp/rnwgpu/ArrayBuffer.h +73 -0
- package/cpp/rnwgpu/PlatformContext.h +46 -0
- package/cpp/rnwgpu/RNWebGPUManager.cpp +225 -0
- package/cpp/rnwgpu/RNWebGPUManager.h +46 -0
- package/cpp/rnwgpu/SurfaceRegistry.h +230 -0
- package/cpp/rnwgpu/api/Canvas.h +57 -0
- package/cpp/rnwgpu/api/Convertors.h +761 -0
- package/cpp/rnwgpu/api/External.h +12 -0
- package/cpp/rnwgpu/api/GPU.cpp +127 -0
- package/cpp/rnwgpu/api/GPU.h +58 -0
- package/cpp/rnwgpu/api/GPUAdapter.cpp +191 -0
- package/cpp/rnwgpu/api/GPUAdapter.h +59 -0
- package/cpp/rnwgpu/api/GPUAdapterInfo.h +57 -0
- package/cpp/rnwgpu/api/GPUBindGroup.cpp +3 -0
- package/cpp/rnwgpu/api/GPUBindGroup.h +51 -0
- package/cpp/rnwgpu/api/GPUBindGroupLayout.h +52 -0
- package/cpp/rnwgpu/api/GPUBuffer.cpp +97 -0
- package/cpp/rnwgpu/api/GPUBuffer.h +87 -0
- package/cpp/rnwgpu/api/GPUCanvasContext.cpp +67 -0
- package/cpp/rnwgpu/api/GPUCanvasContext.h +66 -0
- package/cpp/rnwgpu/api/GPUCommandBuffer.h +45 -0
- package/cpp/rnwgpu/api/GPUCommandEncoder.cpp +179 -0
- package/cpp/rnwgpu/api/GPUCommandEncoder.h +111 -0
- package/cpp/rnwgpu/api/GPUCompilationInfo.h +79 -0
- package/cpp/rnwgpu/api/GPUCompilationMessage.h +36 -0
- package/cpp/rnwgpu/api/GPUComputePassEncoder.cpp +60 -0
- package/cpp/rnwgpu/api/GPUComputePassEncoder.h +85 -0
- package/cpp/rnwgpu/api/GPUComputePipeline.cpp +12 -0
- package/cpp/rnwgpu/api/GPUComputePipeline.h +60 -0
- package/cpp/rnwgpu/api/GPUDevice.cpp +492 -0
- package/cpp/rnwgpu/api/GPUDevice.h +259 -0
- package/cpp/rnwgpu/api/GPUDeviceLostInfo.cpp +7 -0
- package/cpp/rnwgpu/api/GPUDeviceLostInfo.h +40 -0
- package/cpp/rnwgpu/api/GPUError.h +35 -0
- package/cpp/rnwgpu/api/GPUExtent3D.h +66 -0
- package/cpp/rnwgpu/api/GPUExternalTexture.h +45 -0
- package/cpp/rnwgpu/api/GPUFeatures.h +203 -0
- package/cpp/rnwgpu/api/GPUInternalError.h +31 -0
- package/cpp/rnwgpu/api/GPUOrigin2D.h +55 -0
- package/cpp/rnwgpu/api/GPUOrigin3D.h +62 -0
- package/cpp/rnwgpu/api/GPUOutOfMemoryError.h +33 -0
- package/cpp/rnwgpu/api/GPUPipelineLayout.h +45 -0
- package/cpp/rnwgpu/api/GPUQuerySet.cpp +11 -0
- package/cpp/rnwgpu/api/GPUQuerySet.h +73 -0
- package/cpp/rnwgpu/api/GPUQueue.cpp +169 -0
- package/cpp/rnwgpu/api/GPUQueue.h +81 -0
- package/cpp/rnwgpu/api/GPURenderBundle.h +44 -0
- package/cpp/rnwgpu/api/GPURenderBundleEncoder.cpp +131 -0
- package/cpp/rnwgpu/api/GPURenderBundleEncoder.h +110 -0
- package/cpp/rnwgpu/api/GPURenderPassEncoder.cpp +165 -0
- package/cpp/rnwgpu/api/GPURenderPassEncoder.h +130 -0
- package/cpp/rnwgpu/api/GPURenderPipeline.cpp +13 -0
- package/cpp/rnwgpu/api/GPURenderPipeline.h +61 -0
- package/cpp/rnwgpu/api/GPUSampler.h +44 -0
- package/cpp/rnwgpu/api/GPUShaderModule.cpp +51 -0
- package/cpp/rnwgpu/api/GPUShaderModule.h +66 -0
- package/cpp/rnwgpu/api/GPUSupportedLimits.cpp +129 -0
- package/cpp/rnwgpu/api/GPUSupportedLimits.h +131 -0
- package/cpp/rnwgpu/api/GPUTexture.cpp +47 -0
- package/cpp/rnwgpu/api/GPUTexture.h +162 -0
- package/cpp/rnwgpu/api/GPUTextureView.h +44 -0
- package/cpp/rnwgpu/api/GPUUncapturedErrorEvent.h +71 -0
- package/cpp/rnwgpu/api/GPUValidationError.h +32 -0
- package/cpp/rnwgpu/api/ImageBitmap.h +40 -0
- package/cpp/rnwgpu/api/RNWebGPU.h +199 -0
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupDescriptor.h +65 -0
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +78 -0
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutDescriptor.h +57 -0
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutEntry.h +98 -0
- package/cpp/rnwgpu/api/descriptors/GPUBlendComponent.h +58 -0
- package/cpp/rnwgpu/api/descriptors/GPUBlendState.h +53 -0
- package/cpp/rnwgpu/api/descriptors/GPUBufferBinding.h +57 -0
- package/cpp/rnwgpu/api/descriptors/GPUBufferBindingLayout.h +57 -0
- package/cpp/rnwgpu/api/descriptors/GPUBufferDescriptor.h +60 -0
- package/cpp/rnwgpu/api/descriptors/GPUBufferUsage.h +39 -0
- package/cpp/rnwgpu/api/descriptors/GPUCanvasConfiguration.h +76 -0
- package/cpp/rnwgpu/api/descriptors/GPUColor.h +67 -0
- package/cpp/rnwgpu/api/descriptors/GPUColorTargetState.h +59 -0
- package/cpp/rnwgpu/api/descriptors/GPUColorWrite.h +29 -0
- package/cpp/rnwgpu/api/descriptors/GPUCommandBufferDescriptor.h +46 -0
- package/cpp/rnwgpu/api/descriptors/GPUCommandEncoderDescriptor.h +46 -0
- package/cpp/rnwgpu/api/descriptors/GPUComputePassDescriptor.h +57 -0
- package/cpp/rnwgpu/api/descriptors/GPUComputePassTimestampWrites.h +59 -0
- package/cpp/rnwgpu/api/descriptors/GPUComputePipelineDescriptor.h +68 -0
- package/cpp/rnwgpu/api/descriptors/GPUDepthStencilState.h +104 -0
- package/cpp/rnwgpu/api/descriptors/GPUDeviceDescriptor.h +100 -0
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureBindingLayout.h +39 -0
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureDescriptor.h +80 -0
- package/cpp/rnwgpu/api/descriptors/GPUFragmentState.h +74 -0
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyBuffer.h +63 -0
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +63 -0
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTexture.h +66 -0
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTextureTagged.h +82 -0
- package/cpp/rnwgpu/api/descriptors/GPUImageDataLayout.h +55 -0
- package/cpp/rnwgpu/api/descriptors/GPUMapMode.h +22 -0
- package/cpp/rnwgpu/api/descriptors/GPUMultisampleState.h +55 -0
- package/cpp/rnwgpu/api/descriptors/GPUPipelineLayoutDescriptor.h +58 -0
- package/cpp/rnwgpu/api/descriptors/GPUPrimitiveState.h +70 -0
- package/cpp/rnwgpu/api/descriptors/GPUProgrammableStage.h +62 -0
- package/cpp/rnwgpu/api/descriptors/GPUQuerySetDescriptor.h +56 -0
- package/cpp/rnwgpu/api/descriptors/GPUQueueDescriptor.h +44 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderBundleDescriptor.h +46 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderBundleEncoderDescriptor.h +81 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderPassColorAttachment.h +82 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderPassDepthStencilAttachment.h +102 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderPassDescriptor.h +93 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderPassTimestampWrites.h +59 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderPipelineDescriptor.h +104 -0
- package/cpp/rnwgpu/api/descriptors/GPURequestAdapterOptions.h +52 -0
- package/cpp/rnwgpu/api/descriptors/GPUSamplerBindingLayout.h +46 -0
- package/cpp/rnwgpu/api/descriptors/GPUSamplerDescriptor.h +111 -0
- package/cpp/rnwgpu/api/descriptors/GPUShaderModuleCompilationHint.h +61 -0
- package/cpp/rnwgpu/api/descriptors/GPUShaderModuleDescriptor.h +63 -0
- package/cpp/rnwgpu/api/descriptors/GPUShaderStage.h +25 -0
- package/cpp/rnwgpu/api/descriptors/GPUStencilFaceState.h +65 -0
- package/cpp/rnwgpu/api/descriptors/GPUStorageTextureBindingLayout.h +60 -0
- package/cpp/rnwgpu/api/descriptors/GPUTextureBindingLayout.h +60 -0
- package/cpp/rnwgpu/api/descriptors/GPUTextureDescriptor.h +92 -0
- package/cpp/rnwgpu/api/descriptors/GPUTextureUsage.h +29 -0
- package/cpp/rnwgpu/api/descriptors/GPUTextureViewDescriptor.h +92 -0
- package/cpp/rnwgpu/api/descriptors/GPUUncapturedErrorEventInit.h +65 -0
- package/cpp/rnwgpu/api/descriptors/GPUVertexAttribute.h +54 -0
- package/cpp/rnwgpu/api/descriptors/GPUVertexBufferLayout.h +63 -0
- package/cpp/rnwgpu/api/descriptors/GPUVertexState.h +74 -0
- package/cpp/rnwgpu/api/descriptors/Unions.h +1969 -0
- package/cpp/rnwgpu/async/AsyncDispatcher.h +28 -0
- package/cpp/rnwgpu/async/AsyncRunner.cpp +215 -0
- package/cpp/rnwgpu/async/AsyncRunner.h +53 -0
- package/cpp/rnwgpu/async/AsyncTaskHandle.cpp +181 -0
- package/cpp/rnwgpu/async/AsyncTaskHandle.h +55 -0
- package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.cpp +23 -0
- package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.h +22 -0
- package/cpp/webgpu/webgpu.h +4918 -0
- package/cpp/webgpu/webgpu_cpp.h +10294 -0
- package/cpp/webgpu/webgpu_cpp_chained_struct.h +57 -0
- package/cpp/webgpu/webgpu_cpp_print.h +2755 -0
- package/cpp/webgpu/webgpu_enum_class_bitmasks.h +161 -0
- package/lib/commonjs/Canvas.js +55 -0
- package/lib/commonjs/Canvas.js.map +1 -0
- package/lib/commonjs/NativeWebGPUModule.js +10 -0
- package/lib/commonjs/NativeWebGPUModule.js.map +1 -0
- package/lib/commonjs/Offscreen.js +103 -0
- package/lib/commonjs/Offscreen.js.map +1 -0
- package/lib/commonjs/WebGPUViewNativeComponent.js +10 -0
- package/lib/commonjs/WebGPUViewNativeComponent.js.map +1 -0
- package/lib/commonjs/WebGPUViewNativeComponent.web.js +103 -0
- package/lib/commonjs/WebGPUViewNativeComponent.web.js.map +1 -0
- package/lib/commonjs/WebPolyfillGPUModule.js +40 -0
- package/lib/commonjs/WebPolyfillGPUModule.js.map +1 -0
- package/lib/commonjs/external/ModuleProxy.js +36 -0
- package/lib/commonjs/external/ModuleProxy.js.map +1 -0
- package/lib/commonjs/external/index.js +17 -0
- package/lib/commonjs/external/index.js.map +1 -0
- package/lib/commonjs/external/reanimated/ReanimatedProxy.js +18 -0
- package/lib/commonjs/external/reanimated/ReanimatedProxy.js.map +1 -0
- package/lib/commonjs/external/reanimated/index.js +21 -0
- package/lib/commonjs/external/reanimated/index.js.map +1 -0
- package/lib/commonjs/external/reanimated/registerWebGPUForReanimated.js +49 -0
- package/lib/commonjs/external/reanimated/registerWebGPUForReanimated.js.map +1 -0
- package/lib/commonjs/hooks.js +83 -0
- package/lib/commonjs/hooks.js.map +1 -0
- package/lib/commonjs/index.js +17 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/main/index.js +91 -0
- package/lib/commonjs/main/index.js.map +1 -0
- package/lib/commonjs/main/index.web.js +51 -0
- package/lib/commonjs/main/index.web.js.map +1 -0
- package/lib/commonjs/types.js +2 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils.js +11 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/module/Canvas.js +46 -0
- package/lib/module/Canvas.js.map +1 -0
- package/lib/module/NativeWebGPUModule.js +4 -0
- package/lib/module/NativeWebGPUModule.js.map +1 -0
- package/lib/module/Offscreen.js +96 -0
- package/lib/module/Offscreen.js.map +1 -0
- package/lib/module/WebGPUViewNativeComponent.js +4 -0
- package/lib/module/WebGPUViewNativeComponent.js.map +1 -0
- package/lib/module/WebGPUViewNativeComponent.web.js +96 -0
- package/lib/module/WebGPUViewNativeComponent.web.js.map +1 -0
- package/lib/module/WebPolyfillGPUModule.js +38 -0
- package/lib/module/WebPolyfillGPUModule.js.map +1 -0
- package/lib/module/external/ModuleProxy.js +28 -0
- package/lib/module/external/ModuleProxy.js.map +1 -0
- package/lib/module/external/index.js +2 -0
- package/lib/module/external/index.js.map +1 -0
- package/lib/module/external/reanimated/ReanimatedProxy.js +12 -0
- package/lib/module/external/reanimated/ReanimatedProxy.js.map +1 -0
- package/lib/module/external/reanimated/index.js +3 -0
- package/lib/module/external/reanimated/index.js.map +1 -0
- package/lib/module/external/reanimated/registerWebGPUForReanimated.js +42 -0
- package/lib/module/external/reanimated/registerWebGPUForReanimated.js.map +1 -0
- package/lib/module/hooks.js +70 -0
- package/lib/module/hooks.js.map +1 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/main/index.js +33 -0
- package/lib/module/main/index.js.map +1 -0
- package/lib/module/main/index.web.js +8 -0
- package/lib/module/main/index.web.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils.js +5 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/typescript/babel.config.d.ts +3 -0
- package/lib/typescript/babel.config.d.ts.map +1 -0
- package/lib/typescript/eslint.config.d.mts +3 -0
- package/lib/typescript/eslint.config.d.mts.map +1 -0
- package/lib/typescript/jest.config.d.ts +9 -0
- package/lib/typescript/jest.config.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/Canvas.d.ts +7 -0
- package/lib/typescript/lib/commonjs/Canvas.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/NativeWebGPUModule.d.ts +5 -0
- package/lib/typescript/lib/commonjs/NativeWebGPUModule.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/Offscreen.d.ts +26 -0
- package/lib/typescript/lib/commonjs/Offscreen.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.d.ts +5 -0
- package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.web.d.ts +4 -0
- package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.web.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/WebPolyfillGPUModule.d.ts +2 -0
- package/lib/typescript/lib/commonjs/WebPolyfillGPUModule.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/external/ModuleProxy.d.ts +12 -0
- package/lib/typescript/lib/commonjs/external/ModuleProxy.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/external/index.d.ts +2 -0
- package/lib/typescript/lib/commonjs/external/index.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/external/reanimated/ReanimatedProxy.d.ts +6 -0
- package/lib/typescript/lib/commonjs/external/reanimated/ReanimatedProxy.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/external/reanimated/index.d.ts +4 -0
- package/lib/typescript/lib/commonjs/external/reanimated/index.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/external/reanimated/registerWebGPUForReanimated.d.ts +9 -0
- package/lib/typescript/lib/commonjs/external/reanimated/registerWebGPUForReanimated.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/hooks.d.ts +18 -0
- package/lib/typescript/lib/commonjs/hooks.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/index.d.ts +2 -0
- package/lib/typescript/lib/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/main/index.d.ts +3 -0
- package/lib/typescript/lib/commonjs/main/index.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/main/index.web.d.ts +2 -0
- package/lib/typescript/lib/commonjs/main/index.web.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/types.d.ts +1 -0
- package/lib/typescript/lib/commonjs/types.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/utils.d.ts +3 -0
- package/lib/typescript/lib/commonjs/utils.d.ts.map +1 -0
- package/lib/typescript/lib/module/Canvas.d.ts +8 -0
- package/lib/typescript/lib/module/Canvas.d.ts.map +1 -0
- package/lib/typescript/lib/module/NativeWebGPUModule.d.ts +3 -0
- package/lib/typescript/lib/module/NativeWebGPUModule.d.ts.map +1 -0
- package/lib/typescript/lib/module/Offscreen.d.ts +25 -0
- package/lib/typescript/lib/module/Offscreen.d.ts.map +1 -0
- package/lib/typescript/lib/module/WebGPUViewNativeComponent.d.ts +3 -0
- package/lib/typescript/lib/module/WebGPUViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/lib/module/WebGPUViewNativeComponent.web.d.ts +3 -0
- package/lib/typescript/lib/module/WebGPUViewNativeComponent.web.d.ts.map +1 -0
- package/lib/typescript/lib/module/WebPolyfillGPUModule.d.ts +2 -0
- package/lib/typescript/lib/module/WebPolyfillGPUModule.d.ts.map +1 -0
- package/lib/typescript/lib/module/external/ModuleProxy.d.ts +7 -0
- package/lib/typescript/lib/module/external/ModuleProxy.d.ts.map +1 -0
- package/lib/typescript/lib/module/external/index.d.ts +2 -0
- package/lib/typescript/lib/module/external/index.d.ts.map +1 -0
- package/lib/typescript/lib/module/external/reanimated/ReanimatedProxy.d.ts +5 -0
- package/lib/typescript/lib/module/external/reanimated/ReanimatedProxy.d.ts.map +1 -0
- package/lib/typescript/lib/module/external/reanimated/index.d.ts +3 -0
- package/lib/typescript/lib/module/external/reanimated/index.d.ts.map +1 -0
- package/lib/typescript/lib/module/external/reanimated/registerWebGPUForReanimated.d.ts +2 -0
- package/lib/typescript/lib/module/external/reanimated/registerWebGPUForReanimated.d.ts.map +1 -0
- package/lib/typescript/lib/module/hooks.d.ts +18 -0
- package/lib/typescript/lib/module/hooks.d.ts.map +1 -0
- package/lib/typescript/lib/module/index.d.ts +2 -0
- package/lib/typescript/lib/module/index.d.ts.map +1 -0
- package/lib/typescript/lib/module/main/index.d.ts +6 -0
- package/lib/typescript/lib/module/main/index.d.ts.map +1 -0
- package/lib/typescript/lib/module/main/index.web.d.ts +5 -0
- package/lib/typescript/lib/module/main/index.web.d.ts.map +1 -0
- package/lib/typescript/lib/module/types.d.ts +1 -0
- package/lib/typescript/lib/module/types.d.ts.map +1 -0
- package/lib/typescript/lib/module/utils.d.ts +2 -0
- package/lib/typescript/lib/module/utils.d.ts.map +1 -0
- package/lib/typescript/src/Canvas.d.ts +35 -0
- package/lib/typescript/src/Canvas.d.ts.map +1 -0
- package/lib/typescript/src/NativeWebGPUModule.d.ts +7 -0
- package/lib/typescript/src/NativeWebGPUModule.d.ts.map +1 -0
- package/lib/typescript/src/Offscreen.d.ts +30 -0
- package/lib/typescript/src/Offscreen.d.ts.map +1 -0
- package/lib/typescript/src/WebGPUViewNativeComponent.d.ts +9 -0
- package/lib/typescript/src/WebGPUViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/WebGPUViewNativeComponent.web.d.ts +9 -0
- package/lib/typescript/src/WebGPUViewNativeComponent.web.d.ts.map +1 -0
- package/lib/typescript/src/WebPolyfillGPUModule.d.ts +2 -0
- package/lib/typescript/src/WebPolyfillGPUModule.d.ts.map +1 -0
- package/lib/typescript/src/external/ModuleProxy.d.ts +11 -0
- package/lib/typescript/src/external/ModuleProxy.d.ts.map +1 -0
- package/lib/typescript/src/external/index.d.ts +2 -0
- package/lib/typescript/src/external/index.d.ts.map +1 -0
- package/lib/typescript/src/external/reanimated/ReanimatedProxy.d.ts +4 -0
- package/lib/typescript/src/external/reanimated/ReanimatedProxy.d.ts.map +1 -0
- package/lib/typescript/src/external/reanimated/index.d.ts +3 -0
- package/lib/typescript/src/external/reanimated/index.d.ts.map +1 -0
- package/lib/typescript/src/external/reanimated/registerWebGPUForReanimated.d.ts +8 -0
- package/lib/typescript/src/external/reanimated/registerWebGPUForReanimated.d.ts.map +1 -0
- package/lib/typescript/src/hooks.d.ts +27 -0
- package/lib/typescript/src/hooks.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +18 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/main/index.d.ts +6 -0
- package/lib/typescript/src/main/index.d.ts.map +1 -0
- package/lib/typescript/src/main/index.web.d.ts +6 -0
- package/lib/typescript/src/main/index.web.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +19 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/utils.d.ts +2 -0
- package/lib/typescript/src/utils.d.ts.map +1 -0
- package/libs/android/arm64-v8a/libwebgpu_dawn.so +0 -0
- package/libs/android/armeabi-v7a/libwebgpu_dawn.so +0 -0
- package/libs/android/x86/libwebgpu_dawn.so +0 -0
- package/libs/android/x86_64/libwebgpu_dawn.so +0 -0
- package/libs/apple/libwebgpu_dawn.xcframework/Info.plist +59 -0
- package/libs/apple/libwebgpu_dawn.xcframework/ios-arm64/libwebgpu_dawn.a +0 -0
- package/libs/apple/libwebgpu_dawn.xcframework/ios-arm64_x86_64-simulator/libwebgpu_dawn.a +0 -0
- package/libs/apple/libwebgpu_dawn.xcframework/macos-arm64_x86_64/libwebgpu_dawn.a +0 -0
- package/package.json +139 -0
- package/react-native-wgpu.podspec +47 -0
- package/src/Canvas.tsx +91 -0
- package/src/NativeWebGPUModule.ts +9 -0
- package/src/Offscreen.ts +113 -0
- package/src/WebGPUViewNativeComponent.ts +11 -0
- package/src/WebGPUViewNativeComponent.web.ts +113 -0
- package/src/WebPolyfillGPUModule.ts +53 -0
- package/src/external/ModuleProxy.ts +30 -0
- package/src/external/index.ts +1 -0
- package/src/external/reanimated/ReanimatedProxy.ts +19 -0
- package/src/external/reanimated/index.ts +2 -0
- package/src/external/reanimated/registerWebGPUForReanimated.ts +43 -0
- package/src/hooks.tsx +93 -0
- package/src/index.tsx +31 -0
- package/src/main/index.tsx +40 -0
- package/src/main/index.web.tsx +8 -0
- package/src/types.ts +20 -0
- package/src/utils.ts +4 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
package com.webgpu;
|
|
2
|
+
|
|
3
|
+
import android.util.Log;
|
|
4
|
+
|
|
5
|
+
import androidx.annotation.OptIn;
|
|
6
|
+
|
|
7
|
+
import java.util.HashSet;
|
|
8
|
+
import java.util.Set;
|
|
9
|
+
|
|
10
|
+
import com.facebook.proguard.annotations.DoNotStrip;
|
|
11
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
12
|
+
import com.facebook.react.bridge.JavaScriptContextHolder;
|
|
13
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
14
|
+
import com.facebook.react.common.annotations.FrameworkAPI;
|
|
15
|
+
import com.facebook.react.module.annotations.ReactModule;
|
|
16
|
+
import com.facebook.react.modules.blob.BlobModule;
|
|
17
|
+
import com.facebook.react.modules.blob.BlobProvider;
|
|
18
|
+
import com.facebook.react.turbomodule.core.CallInvokerHolderImpl;
|
|
19
|
+
import com.facebook.react.turbomodule.core.interfaces.CallInvokerHolder;
|
|
20
|
+
|
|
21
|
+
@ReactModule(name = WebGPUModule.NAME)
|
|
22
|
+
public class WebGPUModule extends NativeWebGPUModuleSpec {
|
|
23
|
+
static {
|
|
24
|
+
System.loadLibrary("react-native-wgpu"); // Load the C++ library
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public WebGPUModule(ReactApplicationContext reactContext) {
|
|
28
|
+
super(reactContext);
|
|
29
|
+
// Initialize the C++ module
|
|
30
|
+
initialize();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@OptIn(markerClass = FrameworkAPI.class)
|
|
34
|
+
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
35
|
+
public boolean install() {
|
|
36
|
+
ReactApplicationContext context = getReactApplicationContext();
|
|
37
|
+
JavaScriptContextHolder jsContext = context.getJavaScriptContextHolder();
|
|
38
|
+
CallInvokerHolder callInvokerHolder = context.getCatalystInstance().getJSCallInvokerHolder();
|
|
39
|
+
BlobModule blobModule = getReactApplicationContext().getNativeModule(BlobModule.class);
|
|
40
|
+
if (blobModule == null) {
|
|
41
|
+
throw new RuntimeException("React Native's BlobModule was not found!");
|
|
42
|
+
}
|
|
43
|
+
initializeNative(jsContext.get(), (CallInvokerHolderImpl) callInvokerHolder, blobModule);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@OptIn(markerClass = FrameworkAPI.class)
|
|
48
|
+
@DoNotStrip
|
|
49
|
+
private native void initializeNative(long jsRuntime, CallInvokerHolderImpl jsInvoker, BlobModule blobModule);
|
|
50
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
package com.webgpu;
|
|
2
|
+
|
|
3
|
+
import android.annotation.SuppressLint;
|
|
4
|
+
import android.content.Context;
|
|
5
|
+
import android.view.SurfaceHolder;
|
|
6
|
+
import android.view.SurfaceView;
|
|
7
|
+
|
|
8
|
+
import androidx.annotation.NonNull;
|
|
9
|
+
|
|
10
|
+
@SuppressLint("ViewConstructor")
|
|
11
|
+
public class WebGPUSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
|
|
12
|
+
|
|
13
|
+
WebGPUAPI mApi;
|
|
14
|
+
|
|
15
|
+
public WebGPUSurfaceView(Context context, WebGPUAPI api) {
|
|
16
|
+
super(context);
|
|
17
|
+
mApi = api;
|
|
18
|
+
getHolder().addCallback(this);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@Override
|
|
22
|
+
protected void onDetachedFromWindow() {
|
|
23
|
+
super.onDetachedFromWindow();
|
|
24
|
+
mApi.surfaceDestroyed();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@Override
|
|
28
|
+
public void surfaceCreated(@NonNull SurfaceHolder holder) {
|
|
29
|
+
mApi.surfaceCreated(holder.getSurface());
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@Override
|
|
33
|
+
public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
|
|
34
|
+
mApi.surfaceChanged(holder.getSurface());
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@Override
|
|
38
|
+
public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
|
|
39
|
+
mApi.surfaceOffscreen();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
package com.webgpu;
|
|
2
|
+
|
|
3
|
+
import android.annotation.SuppressLint;
|
|
4
|
+
import android.content.Context;
|
|
5
|
+
import android.graphics.PixelFormat;
|
|
6
|
+
import android.os.Build;
|
|
7
|
+
import android.view.Surface;
|
|
8
|
+
import android.view.SurfaceControl;
|
|
9
|
+
import android.view.SurfaceHolder;
|
|
10
|
+
import android.view.SurfaceView;
|
|
11
|
+
|
|
12
|
+
import androidx.annotation.NonNull;
|
|
13
|
+
import androidx.annotation.RequiresApi;
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@SuppressLint("ViewConstructor")
|
|
17
|
+
@RequiresApi(api = Build.VERSION_CODES.Q)
|
|
18
|
+
public class WebGPUSurfaceViewWithSC extends SurfaceView implements SurfaceHolder.Callback {
|
|
19
|
+
|
|
20
|
+
WebGPUAPI mApi;
|
|
21
|
+
SurfaceControl mSurfaceControl;
|
|
22
|
+
Surface mSurface;
|
|
23
|
+
|
|
24
|
+
public WebGPUSurfaceViewWithSC(Context context, WebGPUAPI api) {
|
|
25
|
+
super(context);
|
|
26
|
+
mApi = api;
|
|
27
|
+
getHolder().addCallback(this);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@Override
|
|
31
|
+
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
|
32
|
+
super.onLayout(changed, left, top, right, bottom);
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@Override
|
|
37
|
+
protected void onDetachedFromWindow() {
|
|
38
|
+
super.onDetachedFromWindow();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@Override
|
|
42
|
+
public void surfaceCreated(@NonNull SurfaceHolder holder) {
|
|
43
|
+
if (mSurfaceControl != null) {
|
|
44
|
+
SurfaceControl.Transaction tr = new SurfaceControl.Transaction();
|
|
45
|
+
tr.setVisibility(mSurfaceControl, true);
|
|
46
|
+
tr.reparent(mSurfaceControl, getSurfaceControl());
|
|
47
|
+
tr.apply();
|
|
48
|
+
} else {
|
|
49
|
+
SurfaceControl.Builder scb = new SurfaceControl.Builder();
|
|
50
|
+
scb.setName("WebGPUView");
|
|
51
|
+
scb.setOpaque(true);
|
|
52
|
+
scb.setBufferSize(getWidth(), getHeight());
|
|
53
|
+
scb.setParent(getSurfaceControl());
|
|
54
|
+
scb.setFormat(PixelFormat.RGBA_8888);
|
|
55
|
+
mSurfaceControl = scb.build();
|
|
56
|
+
mSurface = new Surface(mSurfaceControl);
|
|
57
|
+
mApi.surfaceCreated(mSurface);
|
|
58
|
+
}
|
|
59
|
+
SurfaceControl.Transaction tr = new SurfaceControl.Transaction();
|
|
60
|
+
tr.setVisibility(mSurfaceControl, true);
|
|
61
|
+
tr.apply();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@Override
|
|
65
|
+
public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
|
|
66
|
+
mApi.surfaceChanged(mSurface);
|
|
67
|
+
SurfaceControl.Transaction tr = new SurfaceControl.Transaction();
|
|
68
|
+
tr.setVisibility(mSurfaceControl, true);
|
|
69
|
+
tr.setBufferSize(mSurfaceControl, getWidth(), getHeight());
|
|
70
|
+
tr.apply();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@Override
|
|
74
|
+
public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
|
|
75
|
+
SurfaceControl.Transaction tr = new SurfaceControl.Transaction();
|
|
76
|
+
tr.reparent(mSurfaceControl, null);
|
|
77
|
+
tr.apply();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
package com.webgpu;
|
|
2
|
+
|
|
3
|
+
import android.annotation.SuppressLint;
|
|
4
|
+
import android.content.Context;
|
|
5
|
+
import android.graphics.SurfaceTexture;
|
|
6
|
+
import android.view.Surface;
|
|
7
|
+
import android.view.TextureView;
|
|
8
|
+
import androidx.annotation.NonNull;
|
|
9
|
+
|
|
10
|
+
import org.w3c.dom.Text;
|
|
11
|
+
|
|
12
|
+
@SuppressLint("ViewConstructor")
|
|
13
|
+
public class WebGPUTextureView extends TextureView implements TextureView.SurfaceTextureListener {
|
|
14
|
+
|
|
15
|
+
WebGPUAPI mApi;
|
|
16
|
+
|
|
17
|
+
public WebGPUTextureView(Context context, WebGPUAPI api) {
|
|
18
|
+
super(context);
|
|
19
|
+
mApi = api;
|
|
20
|
+
setOpaque(false);
|
|
21
|
+
setSurfaceTextureListener(this);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@Override
|
|
25
|
+
public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surfaceTexture, int width, int height) {
|
|
26
|
+
Surface surface = new Surface(surfaceTexture);
|
|
27
|
+
mApi.surfaceCreated(surface);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@Override
|
|
31
|
+
public void onSurfaceTextureSizeChanged(@NonNull SurfaceTexture surfaceTexture, int width, int height) {
|
|
32
|
+
Surface surface = new Surface(surfaceTexture);
|
|
33
|
+
mApi.surfaceChanged(surface);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@Override
|
|
37
|
+
public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surfaceTexture) {
|
|
38
|
+
mApi.surfaceDestroyed();
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@Override
|
|
43
|
+
public void onSurfaceTextureUpdated(@NonNull SurfaceTexture surfaceTexture) {
|
|
44
|
+
// No implementation needed
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
package com.webgpu;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import android.os.Build;
|
|
5
|
+
import android.view.Surface;
|
|
6
|
+
import android.view.View;
|
|
7
|
+
|
|
8
|
+
import com.facebook.proguard.annotations.DoNotStrip;
|
|
9
|
+
import com.facebook.react.uimanager.ThemedReactContext;
|
|
10
|
+
import com.facebook.react.views.view.ReactViewGroup;
|
|
11
|
+
|
|
12
|
+
public class WebGPUView extends ReactViewGroup implements WebGPUAPI {
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
private int mContextId;
|
|
16
|
+
private boolean mTransparent = false;
|
|
17
|
+
private WebGPUModule mModule;
|
|
18
|
+
private View mView = null;
|
|
19
|
+
|
|
20
|
+
WebGPUView(Context context) {
|
|
21
|
+
super(context);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public void setContextId(int contextId) {
|
|
25
|
+
if (mModule == null) {
|
|
26
|
+
Context context = getContext();
|
|
27
|
+
if (context instanceof ThemedReactContext) {
|
|
28
|
+
mModule = ((ThemedReactContext) context).getReactApplicationContext().getNativeModule(WebGPUModule.class);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
mContextId = contextId;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public void setTransparent(boolean value) {
|
|
35
|
+
Context ctx = getContext();
|
|
36
|
+
if (value != mTransparent || mView == null) {
|
|
37
|
+
if (mView != null) {
|
|
38
|
+
removeView(mView);
|
|
39
|
+
}
|
|
40
|
+
mTransparent = value;
|
|
41
|
+
if (mTransparent) {
|
|
42
|
+
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
43
|
+
// mView = new WebGPUAHBView(ctx, this);
|
|
44
|
+
// } else {
|
|
45
|
+
mView = new WebGPUTextureView(ctx, this);
|
|
46
|
+
// }
|
|
47
|
+
} else {
|
|
48
|
+
mView = new WebGPUSurfaceView(ctx, this);
|
|
49
|
+
}
|
|
50
|
+
addView(mView);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@Override
|
|
55
|
+
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
|
56
|
+
super.onLayout(changed, left, top, right, bottom);
|
|
57
|
+
mView.layout(0, 0, this.getMeasuredWidth(), this.getMeasuredHeight());
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@Override
|
|
61
|
+
public void surfaceCreated(Surface surface) {
|
|
62
|
+
float density = getResources().getDisplayMetrics().density;
|
|
63
|
+
float width = getWidth() / density;
|
|
64
|
+
float height = getHeight() / density;
|
|
65
|
+
onSurfaceCreate(surface, mContextId, width, height);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@Override
|
|
69
|
+
public void surfaceChanged(Surface surface) {
|
|
70
|
+
float density = getResources().getDisplayMetrics().density;
|
|
71
|
+
float width = getWidth() / density;
|
|
72
|
+
float height = getHeight() / density;
|
|
73
|
+
onSurfaceChanged(surface, mContextId, width, height);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@Override
|
|
77
|
+
public void surfaceDestroyed() {
|
|
78
|
+
onSurfaceDestroy(mContextId);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@Override
|
|
82
|
+
public void surfaceOffscreen() {
|
|
83
|
+
switchToOffscreenSurface(mContextId);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@DoNotStrip
|
|
87
|
+
private native void onSurfaceCreate(
|
|
88
|
+
Surface surface,
|
|
89
|
+
int contextId,
|
|
90
|
+
float width,
|
|
91
|
+
float height
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
@DoNotStrip
|
|
95
|
+
private native void onSurfaceChanged(
|
|
96
|
+
Surface surface,
|
|
97
|
+
int contextId,
|
|
98
|
+
float width,
|
|
99
|
+
float height
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
@DoNotStrip
|
|
103
|
+
private native void onSurfaceDestroy(int contextId);
|
|
104
|
+
|
|
105
|
+
@DoNotStrip
|
|
106
|
+
private native void switchToOffscreenSurface(int contextId);
|
|
107
|
+
|
|
108
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
package com.webgpu;
|
|
2
|
+
|
|
3
|
+
import androidx.annotation.NonNull;
|
|
4
|
+
import androidx.annotation.Nullable;
|
|
5
|
+
|
|
6
|
+
import com.facebook.react.module.annotations.ReactModule;
|
|
7
|
+
import com.facebook.react.uimanager.ThemedReactContext;
|
|
8
|
+
import com.facebook.react.uimanager.annotations.ReactProp;
|
|
9
|
+
|
|
10
|
+
@ReactModule(name = WebGPUViewManager.NAME)
|
|
11
|
+
public class WebGPUViewManager extends WebGPUViewManagerSpec<WebGPUView> {
|
|
12
|
+
|
|
13
|
+
public static final String NAME = "WebGPUView";
|
|
14
|
+
|
|
15
|
+
@NonNull
|
|
16
|
+
@Override
|
|
17
|
+
public String getName() {
|
|
18
|
+
return NAME;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@NonNull
|
|
22
|
+
@Override
|
|
23
|
+
public WebGPUView createViewInstance(@NonNull ThemedReactContext context) {
|
|
24
|
+
return new WebGPUView(context);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@Override
|
|
28
|
+
@ReactProp(name = "transparent")
|
|
29
|
+
public void setTransparent(WebGPUView view, boolean value) {
|
|
30
|
+
view.setTransparent(value);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@Override
|
|
34
|
+
@ReactProp(name = "contextId")
|
|
35
|
+
public void setContextId(WebGPUView view, int value) {
|
|
36
|
+
view.setContextId(value);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
|
|
2
|
+
package com.webgpu;
|
|
3
|
+
|
|
4
|
+
import com.facebook.react.TurboReactPackage;
|
|
5
|
+
import com.facebook.react.bridge.NativeModule;
|
|
6
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
7
|
+
import com.facebook.react.module.annotations.ReactModule;
|
|
8
|
+
import com.facebook.react.module.model.ReactModuleInfo;
|
|
9
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider;
|
|
10
|
+
import com.facebook.react.uimanager.ViewManager;
|
|
11
|
+
|
|
12
|
+
import java.util.Collections;
|
|
13
|
+
import java.util.HashMap;
|
|
14
|
+
import java.util.List;
|
|
15
|
+
import java.util.Map;
|
|
16
|
+
|
|
17
|
+
public class WebGPUViewPackage extends TurboReactPackage {
|
|
18
|
+
@Override
|
|
19
|
+
public NativeModule getModule(String name, ReactApplicationContext reactContext) {
|
|
20
|
+
if (name.equals(WebGPUModule.NAME)) {
|
|
21
|
+
return new WebGPUModule(reactContext);
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@Override
|
|
27
|
+
public ReactModuleInfoProvider getReactModuleInfoProvider() {
|
|
28
|
+
return () -> {
|
|
29
|
+
Map<String, ReactModuleInfo> map = new HashMap<>();
|
|
30
|
+
map.put(
|
|
31
|
+
WebGPUModule.NAME,
|
|
32
|
+
new ReactModuleInfo(
|
|
33
|
+
WebGPUModule.NAME,
|
|
34
|
+
WebGPUModule.class.getName(),
|
|
35
|
+
false,
|
|
36
|
+
false,
|
|
37
|
+
false,
|
|
38
|
+
false,
|
|
39
|
+
true // isTurboModule
|
|
40
|
+
)
|
|
41
|
+
);
|
|
42
|
+
return map;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@Override
|
|
47
|
+
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
|
|
48
|
+
return Collections.singletonList(new WebGPUViewManager());
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
package com.webgpu;
|
|
2
|
+
|
|
3
|
+
import android.view.View;
|
|
4
|
+
|
|
5
|
+
import androidx.annotation.Nullable;
|
|
6
|
+
|
|
7
|
+
import com.facebook.react.uimanager.SimpleViewManager;
|
|
8
|
+
import com.facebook.react.uimanager.ViewManagerDelegate;
|
|
9
|
+
import com.facebook.react.viewmanagers.WebGPUViewManagerDelegate;
|
|
10
|
+
import com.facebook.react.viewmanagers.WebGPUViewManagerInterface;
|
|
11
|
+
|
|
12
|
+
public abstract class WebGPUViewManagerSpec<T extends View> extends SimpleViewManager<T> implements WebGPUViewManagerInterface<T> {
|
|
13
|
+
private final ViewManagerDelegate<T> mDelegate;
|
|
14
|
+
|
|
15
|
+
public WebGPUViewManagerSpec() {
|
|
16
|
+
mDelegate = new WebGPUViewManagerDelegate(this);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@Nullable
|
|
20
|
+
@Override
|
|
21
|
+
protected ViewManagerDelegate<T> getDelegate() {
|
|
22
|
+
return mDelegate;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "PlatformContext.h"
|
|
4
|
+
#include <string>
|
|
5
|
+
|
|
6
|
+
namespace rnwgpu {
|
|
7
|
+
|
|
8
|
+
class ApplePlatformContext : public PlatformContext {
|
|
9
|
+
public:
|
|
10
|
+
ApplePlatformContext();
|
|
11
|
+
~ApplePlatformContext() = default;
|
|
12
|
+
|
|
13
|
+
wgpu::Surface makeSurface(wgpu::Instance instance, void *surface, int width,
|
|
14
|
+
int height) override;
|
|
15
|
+
|
|
16
|
+
ImageData createImageBitmap(std::string blobId, double offset,
|
|
17
|
+
double size) override;
|
|
18
|
+
|
|
19
|
+
void
|
|
20
|
+
createImageBitmapAsync(std::string blobId, double offset, double size,
|
|
21
|
+
std::function<void(ImageData)> onSuccess,
|
|
22
|
+
std::function<void(std::string)> onError) override;
|
|
23
|
+
|
|
24
|
+
ImageData createImageBitmapFromData(std::span<const uint8_t> data) override;
|
|
25
|
+
|
|
26
|
+
void createImageBitmapFromDataAsync(
|
|
27
|
+
std::span<const uint8_t> data, std::function<void(ImageData)> onSuccess,
|
|
28
|
+
std::function<void(std::string)> onError) override;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
} // namespace rnwgpu
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
#include "ApplePlatformContext.h"
|
|
2
|
+
|
|
3
|
+
#include <TargetConditionals.h>
|
|
4
|
+
|
|
5
|
+
#import <React/RCTBlobManager.h>
|
|
6
|
+
#import <React/RCTBridge+Private.h>
|
|
7
|
+
#import <ReactCommon/RCTTurboModule.h>
|
|
8
|
+
|
|
9
|
+
#include "RNWebGPUManager.h"
|
|
10
|
+
#include "WebGPUModule.h"
|
|
11
|
+
|
|
12
|
+
namespace rnwgpu {
|
|
13
|
+
|
|
14
|
+
void checkIfUsingSimulatorWithAPIValidation() {
|
|
15
|
+
#if TARGET_OS_SIMULATOR
|
|
16
|
+
NSDictionary *environment = [[NSProcessInfo processInfo] environment];
|
|
17
|
+
NSString *metalDeviceWrapperType = environment[@"METAL_DEVICE_WRAPPER_TYPE"];
|
|
18
|
+
|
|
19
|
+
if ([metalDeviceWrapperType isEqualToString:@"1"]) {
|
|
20
|
+
throw std::runtime_error(
|
|
21
|
+
"To use React Native WebGPU project on the iOS simulator, you need to "
|
|
22
|
+
"disable the Metal validation API. In 'Edit Scheme,' uncheck 'Metal "
|
|
23
|
+
"Validation.'");
|
|
24
|
+
}
|
|
25
|
+
#endif
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
ApplePlatformContext::ApplePlatformContext() {
|
|
29
|
+
checkIfUsingSimulatorWithAPIValidation();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
wgpu::Surface ApplePlatformContext::makeSurface(wgpu::Instance instance,
|
|
33
|
+
void *surface, int width,
|
|
34
|
+
int height) {
|
|
35
|
+
wgpu::SurfaceSourceMetalLayer metalSurfaceDesc;
|
|
36
|
+
metalSurfaceDesc.layer = surface;
|
|
37
|
+
wgpu::SurfaceDescriptor surfaceDescriptor;
|
|
38
|
+
surfaceDescriptor.nextInChain = &metalSurfaceDesc;
|
|
39
|
+
return instance.CreateSurface(&surfaceDescriptor);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
static std::span<const uint8_t> nsDataToSpan(NSData *data) {
|
|
43
|
+
return {static_cast<const uint8_t *>(data.bytes), data.length};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
ImageData ApplePlatformContext::createImageBitmap(std::string blobId,
|
|
47
|
+
double offset, double size) {
|
|
48
|
+
RCTBlobManager *blobManager =
|
|
49
|
+
[[RCTBridge currentBridge] moduleForClass:RCTBlobManager.class];
|
|
50
|
+
NSData *blobData =
|
|
51
|
+
[blobManager resolve:[NSString stringWithUTF8String:blobId.c_str()]
|
|
52
|
+
offset:(long)offset
|
|
53
|
+
size:(long)size];
|
|
54
|
+
|
|
55
|
+
if (!blobData) {
|
|
56
|
+
throw std::runtime_error("Couldn't retrieve blob data");
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return createImageBitmapFromData(nsDataToSpan(blobData));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
void ApplePlatformContext::createImageBitmapAsync(
|
|
63
|
+
std::string blobId, double offset, double size,
|
|
64
|
+
std::function<void(ImageData)> onSuccess,
|
|
65
|
+
std::function<void(std::string)> onError) {
|
|
66
|
+
// Resolve blob on current thread (requires RCTBridge access)
|
|
67
|
+
RCTBlobManager *blobManager =
|
|
68
|
+
[[RCTBridge currentBridge] moduleForClass:RCTBlobManager.class];
|
|
69
|
+
NSData *blobData =
|
|
70
|
+
[blobManager resolve:[NSString stringWithUTF8String:blobId.c_str()]
|
|
71
|
+
offset:(long)offset
|
|
72
|
+
size:(long)size];
|
|
73
|
+
|
|
74
|
+
if (!blobData) {
|
|
75
|
+
onError("Couldn't retrieve blob data");
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// blobData is alive during this synchronous call;
|
|
80
|
+
// createImageBitmapFromDataAsync copies the span before dispatching
|
|
81
|
+
createImageBitmapFromDataAsync(nsDataToSpan(blobData), std::move(onSuccess),
|
|
82
|
+
std::move(onError));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
ImageData
|
|
86
|
+
ApplePlatformContext::createImageBitmapFromData(std::span<const uint8_t> data) {
|
|
87
|
+
// This avoids a copy by assuming the UIImage/NSImage constructors
|
|
88
|
+
// decode `nsData` eagerly before the memory for the wrapped `data`
|
|
89
|
+
// is freed.
|
|
90
|
+
//
|
|
91
|
+
// Since we get the `CGImageRef` from `image` and then throw
|
|
92
|
+
// it away, that's a fairly safe assumption.
|
|
93
|
+
NSData *nsData =
|
|
94
|
+
[NSData dataWithBytesNoCopy:const_cast<uint8_t *>(data.data())
|
|
95
|
+
length:data.size()
|
|
96
|
+
freeWhenDone:NO];
|
|
97
|
+
|
|
98
|
+
#if !TARGET_OS_OSX
|
|
99
|
+
UIImage *image = [UIImage imageWithData:nsData];
|
|
100
|
+
#else
|
|
101
|
+
NSImage *image = [[NSImage alloc] initWithData:nsData];
|
|
102
|
+
#endif
|
|
103
|
+
if (!image) {
|
|
104
|
+
throw std::runtime_error("Couldn't decode image");
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
#if !TARGET_OS_OSX
|
|
108
|
+
CGImageRef cgImage = image.CGImage;
|
|
109
|
+
#else
|
|
110
|
+
CGImageRef cgImage = [image CGImageForProposedRect:NULL
|
|
111
|
+
context:NULL
|
|
112
|
+
hints:NULL];
|
|
113
|
+
#endif
|
|
114
|
+
size_t width = CGImageGetWidth(cgImage);
|
|
115
|
+
size_t height = CGImageGetHeight(cgImage);
|
|
116
|
+
size_t bitsPerComponent = 8;
|
|
117
|
+
size_t bytesPerRow = width * 4;
|
|
118
|
+
|
|
119
|
+
ImageData result;
|
|
120
|
+
result.width = static_cast<int>(width);
|
|
121
|
+
result.height = static_cast<int>(height);
|
|
122
|
+
result.data.resize(height * bytesPerRow);
|
|
123
|
+
result.format = wgpu::TextureFormat::RGBA8Unorm;
|
|
124
|
+
|
|
125
|
+
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
|
126
|
+
CGContextRef context = CGBitmapContextCreate(
|
|
127
|
+
result.data.data(), width, height, bitsPerComponent, bytesPerRow,
|
|
128
|
+
colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
|
|
129
|
+
|
|
130
|
+
CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);
|
|
131
|
+
|
|
132
|
+
CGContextRelease(context);
|
|
133
|
+
CGColorSpaceRelease(colorSpace);
|
|
134
|
+
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
void ApplePlatformContext::createImageBitmapFromDataAsync(
|
|
139
|
+
std::span<const uint8_t> data, std::function<void(ImageData)> onSuccess,
|
|
140
|
+
std::function<void(std::string)> onError) {
|
|
141
|
+
// Copy span data into shared_ptr so the dispatch_async block owns the memory
|
|
142
|
+
auto ownedData =
|
|
143
|
+
std::make_shared<std::vector<uint8_t>>(data.begin(), data.end());
|
|
144
|
+
|
|
145
|
+
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
|
|
146
|
+
@autoreleasepool {
|
|
147
|
+
try {
|
|
148
|
+
auto result = createImageBitmapFromData(*ownedData);
|
|
149
|
+
onSuccess(std::move(result));
|
|
150
|
+
} catch (const std::exception &e) {
|
|
151
|
+
onError(e.what());
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
} // namespace rnwgpu
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#import "MetalView.h"
|
|
2
|
+
#import "webgpu/webgpu_cpp.h"
|
|
3
|
+
|
|
4
|
+
@implementation MetalView {
|
|
5
|
+
BOOL _isConfigured;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
#if !TARGET_OS_OSX
|
|
9
|
+
+ (Class)layerClass {
|
|
10
|
+
return [CAMetalLayer class];
|
|
11
|
+
}
|
|
12
|
+
#else // !TARGET_OS_OSX
|
|
13
|
+
- (instancetype)init {
|
|
14
|
+
self = [super init];
|
|
15
|
+
if (self) {
|
|
16
|
+
self.wantsLayer = true;
|
|
17
|
+
self.layer = [CAMetalLayer layer];
|
|
18
|
+
}
|
|
19
|
+
return self;
|
|
20
|
+
}
|
|
21
|
+
#endif // !TARGET_OS_OSX
|
|
22
|
+
|
|
23
|
+
- (void)configure {
|
|
24
|
+
auto size = self.frame.size;
|
|
25
|
+
std::shared_ptr<rnwgpu::RNWebGPUManager> manager = [WebGPUModule getManager];
|
|
26
|
+
void *nativeSurface = (__bridge void *)self.layer;
|
|
27
|
+
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
28
|
+
auto gpu = manager->_gpu;
|
|
29
|
+
auto surface = manager->_platformContext->makeSurface(
|
|
30
|
+
gpu, nativeSurface, size.width, size.height);
|
|
31
|
+
registry
|
|
32
|
+
.getSurfaceInfoOrCreate([_contextId intValue], gpu, size.width,
|
|
33
|
+
size.height)
|
|
34
|
+
->switchToOnscreen(nativeSurface, surface);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
- (void)update {
|
|
38
|
+
auto size = self.frame.size;
|
|
39
|
+
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
40
|
+
registry.getSurfaceInfo([_contextId intValue])
|
|
41
|
+
->resize(size.width, size.height);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
- (void)dealloc {
|
|
45
|
+
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
46
|
+
// Remove the surface info from the registry
|
|
47
|
+
registry.removeSurfaceInfo([_contextId intValue]);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@end
|