react-native-wgpu 0.5.13 → 0.5.14
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/README.md +13 -386
- package/lib/commonjs/index.js +7 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +4 -4
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/webgpu/src/Canvas.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/NativeWebGPUModule.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/Offscreen.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/WebGPUViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/external/ModuleProxy.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/external/index.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/external/reanimated/ReanimatedProxy.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/external/reanimated/index.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/external/reanimated/registerWebGPUForReanimated.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/hooks.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/index.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/main/index.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/types.d.ts.map +1 -0
- package/lib/typescript/{eslint.config.d.mts.map → webgpu-shim/eslint.config.d.mts.map} +1 -1
- package/lib/typescript/{lib → webgpu-shim/lib}/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/webgpu-shim/lib/module/index.d.ts +2 -0
- package/lib/typescript/{lib → webgpu-shim/lib}/module/index.d.ts.map +1 -1
- package/lib/typescript/webgpu-shim/src/index.d.ts +2 -0
- package/lib/typescript/webgpu-shim/src/index.d.ts.map +1 -0
- package/package.json +12 -81
- package/src/index.ts +9 -0
- package/LICENSE +0 -20
- package/android/CMakeLists.txt +0 -110
- package/android/build.gradle +0 -138
- package/android/cpp/AndroidPlatformContext.h +0 -328
- package/android/cpp/cpp-adapter.cpp +0 -71
- package/android/src/main/AndroidManifest.xml +0 -3
- package/android/src/main/java/com/webgpu/WebGPUAHBView.java +0 -298
- package/android/src/main/java/com/webgpu/WebGPUAPI.java +0 -20
- package/android/src/main/java/com/webgpu/WebGPUBaseView.java +0 -61
- package/android/src/main/java/com/webgpu/WebGPUModule.java +0 -50
- package/android/src/main/java/com/webgpu/WebGPUSurfaceView.java +0 -41
- package/android/src/main/java/com/webgpu/WebGPUSurfaceViewWithSC.java +0 -79
- package/android/src/main/java/com/webgpu/WebGPUTextureView.java +0 -46
- package/android/src/main/java/com/webgpu/WebGPUView.java +0 -108
- package/android/src/main/java/com/webgpu/WebGPUViewManager.java +0 -38
- package/android/src/main/java/com/webgpu/WebGPUViewPackage.java +0 -50
- package/android/src/newarch/com/webgpu/WebGPUViewManagerSpec.java +0 -24
- package/apple/ApplePlatformContext.h +0 -44
- package/apple/ApplePlatformContext.mm +0 -302
- package/apple/AppleVideoPlayer.h +0 -31
- package/apple/AppleVideoPlayer.mm +0 -314
- package/apple/MetalView.h +0 -13
- package/apple/MetalView.mm +0 -50
- package/apple/RNWGUIKit.h +0 -16
- package/apple/WebGPUModule.h +0 -13
- package/apple/WebGPUModule.mm +0 -89
- package/apple/WebGPUView.h +0 -12
- package/apple/WebGPUView.mm +0 -66
- package/cpp/WGPULogger.h +0 -100
- package/cpp/dawn_logging.cpp +0 -119
- package/cpp/jsi/EnumMapper.h +0 -45
- package/cpp/jsi/JSIConverter.h +0 -473
- package/cpp/jsi/NativeObject.h +0 -607
- package/cpp/jsi/Promise.cpp +0 -44
- package/cpp/jsi/Promise.h +0 -35
- package/cpp/jsi/RuntimeAwareCache.cpp +0 -7
- package/cpp/jsi/RuntimeAwareCache.h +0 -100
- package/cpp/jsi/RuntimeLifecycleMonitor.cpp +0 -72
- package/cpp/jsi/RuntimeLifecycleMonitor.h +0 -32
- package/cpp/rnwgpu/ArrayBuffer.h +0 -117
- package/cpp/rnwgpu/PlatformContext.h +0 -127
- package/cpp/rnwgpu/RNWebGPUManager.cpp +0 -237
- package/cpp/rnwgpu/RNWebGPUManager.h +0 -46
- package/cpp/rnwgpu/SurfaceRegistry.h +0 -230
- package/cpp/rnwgpu/api/Canvas.h +0 -57
- package/cpp/rnwgpu/api/Convertors.h +0 -783
- package/cpp/rnwgpu/api/External.h +0 -12
- package/cpp/rnwgpu/api/GPU.cpp +0 -154
- package/cpp/rnwgpu/api/GPU.h +0 -58
- package/cpp/rnwgpu/api/GPUAdapter.cpp +0 -267
- package/cpp/rnwgpu/api/GPUAdapter.h +0 -59
- package/cpp/rnwgpu/api/GPUAdapterInfo.h +0 -57
- package/cpp/rnwgpu/api/GPUBindGroup.cpp +0 -3
- package/cpp/rnwgpu/api/GPUBindGroup.h +0 -51
- package/cpp/rnwgpu/api/GPUBindGroupLayout.h +0 -52
- package/cpp/rnwgpu/api/GPUBuffer.cpp +0 -97
- package/cpp/rnwgpu/api/GPUBuffer.h +0 -87
- package/cpp/rnwgpu/api/GPUCanvasContext.cpp +0 -67
- package/cpp/rnwgpu/api/GPUCanvasContext.h +0 -66
- package/cpp/rnwgpu/api/GPUCommandBuffer.h +0 -45
- package/cpp/rnwgpu/api/GPUCommandEncoder.cpp +0 -179
- package/cpp/rnwgpu/api/GPUCommandEncoder.h +0 -111
- package/cpp/rnwgpu/api/GPUCompilationInfo.h +0 -79
- package/cpp/rnwgpu/api/GPUCompilationMessage.h +0 -36
- package/cpp/rnwgpu/api/GPUComputePassEncoder.cpp +0 -60
- package/cpp/rnwgpu/api/GPUComputePassEncoder.h +0 -85
- package/cpp/rnwgpu/api/GPUComputePipeline.cpp +0 -12
- package/cpp/rnwgpu/api/GPUComputePipeline.h +0 -60
- package/cpp/rnwgpu/api/GPUDevice.cpp +0 -545
- package/cpp/rnwgpu/api/GPUDevice.h +0 -265
- package/cpp/rnwgpu/api/GPUDeviceLostInfo.cpp +0 -7
- package/cpp/rnwgpu/api/GPUDeviceLostInfo.h +0 -40
- package/cpp/rnwgpu/api/GPUError.h +0 -35
- package/cpp/rnwgpu/api/GPUExtent3D.h +0 -66
- package/cpp/rnwgpu/api/GPUExternalTexture.cpp +0 -335
- package/cpp/rnwgpu/api/GPUExternalTexture.h +0 -90
- package/cpp/rnwgpu/api/GPUFeatures.h +0 -206
- package/cpp/rnwgpu/api/GPUInternalError.h +0 -31
- package/cpp/rnwgpu/api/GPUOrigin2D.h +0 -55
- package/cpp/rnwgpu/api/GPUOrigin3D.h +0 -62
- package/cpp/rnwgpu/api/GPUOutOfMemoryError.h +0 -33
- package/cpp/rnwgpu/api/GPUPipelineLayout.h +0 -45
- package/cpp/rnwgpu/api/GPUQuerySet.cpp +0 -11
- package/cpp/rnwgpu/api/GPUQuerySet.h +0 -73
- package/cpp/rnwgpu/api/GPUQueue.cpp +0 -169
- package/cpp/rnwgpu/api/GPUQueue.h +0 -81
- package/cpp/rnwgpu/api/GPURenderBundle.h +0 -44
- package/cpp/rnwgpu/api/GPURenderBundleEncoder.cpp +0 -131
- package/cpp/rnwgpu/api/GPURenderBundleEncoder.h +0 -110
- package/cpp/rnwgpu/api/GPURenderPassEncoder.cpp +0 -165
- package/cpp/rnwgpu/api/GPURenderPassEncoder.h +0 -130
- package/cpp/rnwgpu/api/GPURenderPipeline.cpp +0 -13
- package/cpp/rnwgpu/api/GPURenderPipeline.h +0 -61
- package/cpp/rnwgpu/api/GPUSampler.h +0 -44
- package/cpp/rnwgpu/api/GPUShaderModule.cpp +0 -50
- package/cpp/rnwgpu/api/GPUShaderModule.h +0 -66
- package/cpp/rnwgpu/api/GPUSharedTextureMemory.cpp +0 -80
- package/cpp/rnwgpu/api/GPUSharedTextureMemory.h +0 -71
- package/cpp/rnwgpu/api/GPUSupportedLimits.cpp +0 -129
- package/cpp/rnwgpu/api/GPUSupportedLimits.h +0 -131
- package/cpp/rnwgpu/api/GPUTexture.cpp +0 -47
- package/cpp/rnwgpu/api/GPUTexture.h +0 -162
- package/cpp/rnwgpu/api/GPUTextureView.h +0 -44
- package/cpp/rnwgpu/api/GPUUncapturedErrorEvent.h +0 -71
- package/cpp/rnwgpu/api/GPUValidationError.h +0 -32
- package/cpp/rnwgpu/api/ImageBitmap.h +0 -48
- package/cpp/rnwgpu/api/RNWebGPU.h +0 -241
- package/cpp/rnwgpu/api/RnFeatures.h +0 -53
- package/cpp/rnwgpu/api/VideoFrame.h +0 -76
- package/cpp/rnwgpu/api/VideoPlayer.h +0 -69
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupDescriptor.h +0 -65
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +0 -81
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutDescriptor.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutEntry.h +0 -98
- package/cpp/rnwgpu/api/descriptors/GPUBlendComponent.h +0 -58
- package/cpp/rnwgpu/api/descriptors/GPUBlendState.h +0 -53
- package/cpp/rnwgpu/api/descriptors/GPUBufferBinding.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUBufferBindingLayout.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUBufferDescriptor.h +0 -60
- package/cpp/rnwgpu/api/descriptors/GPUBufferUsage.h +0 -39
- package/cpp/rnwgpu/api/descriptors/GPUCanvasConfiguration.h +0 -76
- package/cpp/rnwgpu/api/descriptors/GPUColor.h +0 -67
- package/cpp/rnwgpu/api/descriptors/GPUColorTargetState.h +0 -59
- package/cpp/rnwgpu/api/descriptors/GPUColorWrite.h +0 -29
- package/cpp/rnwgpu/api/descriptors/GPUCommandBufferDescriptor.h +0 -46
- package/cpp/rnwgpu/api/descriptors/GPUCommandEncoderDescriptor.h +0 -46
- package/cpp/rnwgpu/api/descriptors/GPUComputePassDescriptor.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUComputePassTimestampWrites.h +0 -59
- package/cpp/rnwgpu/api/descriptors/GPUComputePipelineDescriptor.h +0 -68
- package/cpp/rnwgpu/api/descriptors/GPUDawnTogglesDescriptor.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUDepthStencilState.h +0 -104
- package/cpp/rnwgpu/api/descriptors/GPUDeviceDescriptor.h +0 -115
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureBindingLayout.h +0 -39
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureDescriptor.h +0 -82
- package/cpp/rnwgpu/api/descriptors/GPUFragmentState.h +0 -74
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyBuffer.h +0 -63
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +0 -63
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTexture.h +0 -66
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTextureTagged.h +0 -82
- package/cpp/rnwgpu/api/descriptors/GPUImageDataLayout.h +0 -55
- package/cpp/rnwgpu/api/descriptors/GPUMapMode.h +0 -22
- package/cpp/rnwgpu/api/descriptors/GPUMultisampleState.h +0 -55
- package/cpp/rnwgpu/api/descriptors/GPUPipelineLayoutDescriptor.h +0 -58
- package/cpp/rnwgpu/api/descriptors/GPUPrimitiveState.h +0 -70
- package/cpp/rnwgpu/api/descriptors/GPUProgrammableStage.h +0 -62
- package/cpp/rnwgpu/api/descriptors/GPUQuerySetDescriptor.h +0 -56
- package/cpp/rnwgpu/api/descriptors/GPUQueueDescriptor.h +0 -44
- package/cpp/rnwgpu/api/descriptors/GPURenderBundleDescriptor.h +0 -46
- package/cpp/rnwgpu/api/descriptors/GPURenderBundleEncoderDescriptor.h +0 -81
- package/cpp/rnwgpu/api/descriptors/GPURenderPassColorAttachment.h +0 -82
- package/cpp/rnwgpu/api/descriptors/GPURenderPassDepthStencilAttachment.h +0 -102
- package/cpp/rnwgpu/api/descriptors/GPURenderPassDescriptor.h +0 -93
- package/cpp/rnwgpu/api/descriptors/GPURenderPassTimestampWrites.h +0 -59
- package/cpp/rnwgpu/api/descriptors/GPURenderPipelineDescriptor.h +0 -104
- package/cpp/rnwgpu/api/descriptors/GPURequestAdapterOptions.h +0 -52
- package/cpp/rnwgpu/api/descriptors/GPUSamplerBindingLayout.h +0 -46
- package/cpp/rnwgpu/api/descriptors/GPUSamplerDescriptor.h +0 -111
- package/cpp/rnwgpu/api/descriptors/GPUShaderModuleCompilationHint.h +0 -61
- package/cpp/rnwgpu/api/descriptors/GPUShaderModuleDescriptor.h +0 -63
- package/cpp/rnwgpu/api/descriptors/GPUShaderStage.h +0 -25
- package/cpp/rnwgpu/api/descriptors/GPUSharedTextureMemoryDescriptor.h +0 -62
- package/cpp/rnwgpu/api/descriptors/GPUStencilFaceState.h +0 -65
- package/cpp/rnwgpu/api/descriptors/GPUStorageTextureBindingLayout.h +0 -60
- package/cpp/rnwgpu/api/descriptors/GPUTextureBindingLayout.h +0 -60
- package/cpp/rnwgpu/api/descriptors/GPUTextureDescriptor.h +0 -92
- package/cpp/rnwgpu/api/descriptors/GPUTextureUsage.h +0 -29
- package/cpp/rnwgpu/api/descriptors/GPUTextureViewDescriptor.h +0 -92
- package/cpp/rnwgpu/api/descriptors/GPUUncapturedErrorEventInit.h +0 -65
- package/cpp/rnwgpu/api/descriptors/GPUVertexAttribute.h +0 -54
- package/cpp/rnwgpu/api/descriptors/GPUVertexBufferLayout.h +0 -63
- package/cpp/rnwgpu/api/descriptors/GPUVertexState.h +0 -74
- package/cpp/rnwgpu/api/descriptors/Unions.h +0 -1979
- package/cpp/rnwgpu/async/AsyncDispatcher.h +0 -28
- package/cpp/rnwgpu/async/AsyncRunner.cpp +0 -215
- package/cpp/rnwgpu/async/AsyncRunner.h +0 -53
- package/cpp/rnwgpu/async/AsyncTaskHandle.cpp +0 -181
- package/cpp/rnwgpu/async/AsyncTaskHandle.h +0 -55
- package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.cpp +0 -23
- package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.h +0 -22
- package/cpp/webgpu/webgpu.h +0 -4979
- package/cpp/webgpu/webgpu_cpp.h +0 -10059
- package/cpp/webgpu/webgpu_cpp_chained_struct.h +0 -57
- package/cpp/webgpu/webgpu_cpp_print.h +0 -2844
- package/cpp/webgpu/webgpu_enum_class_bitmasks.h +0 -161
- package/lib/commonjs/Canvas.js +0 -55
- package/lib/commonjs/Canvas.js.map +0 -1
- package/lib/commonjs/NativeWebGPUModule.js +0 -10
- package/lib/commonjs/NativeWebGPUModule.js.map +0 -1
- package/lib/commonjs/Offscreen.js +0 -103
- package/lib/commonjs/Offscreen.js.map +0 -1
- package/lib/commonjs/WebGPUViewNativeComponent.js +0 -10
- package/lib/commonjs/WebGPUViewNativeComponent.js.map +0 -1
- package/lib/commonjs/WebGPUViewNativeComponent.web.js +0 -103
- package/lib/commonjs/WebGPUViewNativeComponent.web.js.map +0 -1
- package/lib/commonjs/WebPolyfillGPUModule.js +0 -40
- package/lib/commonjs/WebPolyfillGPUModule.js.map +0 -1
- package/lib/commonjs/external/ModuleProxy.js +0 -36
- package/lib/commonjs/external/ModuleProxy.js.map +0 -1
- package/lib/commonjs/external/index.js +0 -17
- package/lib/commonjs/external/index.js.map +0 -1
- package/lib/commonjs/external/reanimated/ReanimatedProxy.js +0 -18
- package/lib/commonjs/external/reanimated/ReanimatedProxy.js.map +0 -1
- package/lib/commonjs/external/reanimated/index.js +0 -21
- package/lib/commonjs/external/reanimated/index.js.map +0 -1
- package/lib/commonjs/external/reanimated/registerWebGPUForReanimated.js +0 -49
- package/lib/commonjs/external/reanimated/registerWebGPUForReanimated.js.map +0 -1
- package/lib/commonjs/hooks.js +0 -83
- package/lib/commonjs/hooks.js.map +0 -1
- package/lib/commonjs/main/index.js +0 -91
- package/lib/commonjs/main/index.js.map +0 -1
- package/lib/commonjs/main/index.web.js +0 -51
- package/lib/commonjs/main/index.web.js.map +0 -1
- package/lib/commonjs/types.js +0 -2
- package/lib/commonjs/types.js.map +0 -1
- package/lib/commonjs/utils.js +0 -11
- package/lib/commonjs/utils.js.map +0 -1
- package/lib/module/Canvas.js +0 -46
- package/lib/module/Canvas.js.map +0 -1
- package/lib/module/NativeWebGPUModule.js +0 -4
- package/lib/module/NativeWebGPUModule.js.map +0 -1
- package/lib/module/Offscreen.js +0 -96
- package/lib/module/Offscreen.js.map +0 -1
- package/lib/module/WebGPUViewNativeComponent.js +0 -4
- package/lib/module/WebGPUViewNativeComponent.js.map +0 -1
- package/lib/module/WebGPUViewNativeComponent.web.js +0 -96
- package/lib/module/WebGPUViewNativeComponent.web.js.map +0 -1
- package/lib/module/WebPolyfillGPUModule.js +0 -38
- package/lib/module/WebPolyfillGPUModule.js.map +0 -1
- package/lib/module/external/ModuleProxy.js +0 -28
- package/lib/module/external/ModuleProxy.js.map +0 -1
- package/lib/module/external/index.js +0 -2
- package/lib/module/external/index.js.map +0 -1
- package/lib/module/external/reanimated/ReanimatedProxy.js +0 -12
- package/lib/module/external/reanimated/ReanimatedProxy.js.map +0 -1
- package/lib/module/external/reanimated/index.js +0 -3
- package/lib/module/external/reanimated/index.js.map +0 -1
- package/lib/module/external/reanimated/registerWebGPUForReanimated.js +0 -42
- package/lib/module/external/reanimated/registerWebGPUForReanimated.js.map +0 -1
- package/lib/module/hooks.js +0 -70
- package/lib/module/hooks.js.map +0 -1
- package/lib/module/main/index.js +0 -33
- package/lib/module/main/index.js.map +0 -1
- package/lib/module/main/index.web.js +0 -8
- package/lib/module/main/index.web.js.map +0 -1
- package/lib/module/types.js +0 -2
- package/lib/module/types.js.map +0 -1
- package/lib/module/utils.js +0 -5
- package/lib/module/utils.js.map +0 -1
- package/lib/typescript/babel.config.d.ts +0 -3
- package/lib/typescript/babel.config.d.ts.map +0 -1
- package/lib/typescript/jest.config.d.ts +0 -9
- package/lib/typescript/jest.config.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/Canvas.d.ts +0 -7
- package/lib/typescript/lib/commonjs/Canvas.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/NativeWebGPUModule.d.ts +0 -5
- package/lib/typescript/lib/commonjs/NativeWebGPUModule.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/Offscreen.d.ts +0 -26
- package/lib/typescript/lib/commonjs/Offscreen.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.d.ts +0 -5
- package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.web.d.ts +0 -4
- package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.web.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/WebPolyfillGPUModule.d.ts +0 -2
- package/lib/typescript/lib/commonjs/WebPolyfillGPUModule.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/external/ModuleProxy.d.ts +0 -12
- package/lib/typescript/lib/commonjs/external/ModuleProxy.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/external/index.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/external/reanimated/ReanimatedProxy.d.ts +0 -6
- package/lib/typescript/lib/commonjs/external/reanimated/ReanimatedProxy.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/external/reanimated/index.d.ts +0 -4
- package/lib/typescript/lib/commonjs/external/reanimated/index.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/external/reanimated/registerWebGPUForReanimated.d.ts +0 -9
- package/lib/typescript/lib/commonjs/external/reanimated/registerWebGPUForReanimated.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/hooks.d.ts +0 -18
- package/lib/typescript/lib/commonjs/hooks.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/index.d.ts +0 -2
- package/lib/typescript/lib/commonjs/main/index.d.ts +0 -3
- package/lib/typescript/lib/commonjs/main/index.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/main/index.web.d.ts +0 -2
- package/lib/typescript/lib/commonjs/main/index.web.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/types.d.ts +0 -1
- package/lib/typescript/lib/commonjs/types.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/utils.d.ts +0 -3
- package/lib/typescript/lib/commonjs/utils.d.ts.map +0 -1
- package/lib/typescript/lib/module/Canvas.d.ts +0 -8
- package/lib/typescript/lib/module/Canvas.d.ts.map +0 -1
- package/lib/typescript/lib/module/NativeWebGPUModule.d.ts +0 -3
- package/lib/typescript/lib/module/NativeWebGPUModule.d.ts.map +0 -1
- package/lib/typescript/lib/module/Offscreen.d.ts +0 -25
- package/lib/typescript/lib/module/Offscreen.d.ts.map +0 -1
- package/lib/typescript/lib/module/WebGPUViewNativeComponent.d.ts +0 -3
- package/lib/typescript/lib/module/WebGPUViewNativeComponent.d.ts.map +0 -1
- package/lib/typescript/lib/module/WebGPUViewNativeComponent.web.d.ts +0 -3
- package/lib/typescript/lib/module/WebGPUViewNativeComponent.web.d.ts.map +0 -1
- package/lib/typescript/lib/module/WebPolyfillGPUModule.d.ts +0 -2
- package/lib/typescript/lib/module/WebPolyfillGPUModule.d.ts.map +0 -1
- package/lib/typescript/lib/module/external/ModuleProxy.d.ts +0 -7
- package/lib/typescript/lib/module/external/ModuleProxy.d.ts.map +0 -1
- package/lib/typescript/lib/module/external/index.d.ts.map +0 -1
- package/lib/typescript/lib/module/external/reanimated/ReanimatedProxy.d.ts +0 -5
- package/lib/typescript/lib/module/external/reanimated/ReanimatedProxy.d.ts.map +0 -1
- package/lib/typescript/lib/module/external/reanimated/index.d.ts.map +0 -1
- package/lib/typescript/lib/module/external/reanimated/registerWebGPUForReanimated.d.ts +0 -2
- package/lib/typescript/lib/module/external/reanimated/registerWebGPUForReanimated.d.ts.map +0 -1
- package/lib/typescript/lib/module/hooks.d.ts +0 -18
- package/lib/typescript/lib/module/hooks.d.ts.map +0 -1
- package/lib/typescript/lib/module/index.d.ts +0 -2
- package/lib/typescript/lib/module/main/index.d.ts.map +0 -1
- package/lib/typescript/lib/module/main/index.web.d.ts +0 -5
- package/lib/typescript/lib/module/main/index.web.d.ts.map +0 -1
- package/lib/typescript/lib/module/types.d.ts +0 -1
- package/lib/typescript/lib/module/types.d.ts.map +0 -1
- package/lib/typescript/lib/module/utils.d.ts +0 -2
- package/lib/typescript/lib/module/utils.d.ts.map +0 -1
- package/lib/typescript/src/Canvas.d.ts.map +0 -1
- package/lib/typescript/src/NativeWebGPUModule.d.ts.map +0 -1
- package/lib/typescript/src/Offscreen.d.ts.map +0 -1
- package/lib/typescript/src/WebGPUViewNativeComponent.d.ts.map +0 -1
- package/lib/typescript/src/WebGPUViewNativeComponent.web.d.ts +0 -9
- package/lib/typescript/src/WebGPUViewNativeComponent.web.d.ts.map +0 -1
- package/lib/typescript/src/WebPolyfillGPUModule.d.ts +0 -2
- package/lib/typescript/src/WebPolyfillGPUModule.d.ts.map +0 -1
- package/lib/typescript/src/external/ModuleProxy.d.ts.map +0 -1
- package/lib/typescript/src/external/index.d.ts +0 -2
- package/lib/typescript/src/external/index.d.ts.map +0 -1
- package/lib/typescript/src/external/reanimated/ReanimatedProxy.d.ts.map +0 -1
- package/lib/typescript/src/external/reanimated/index.d.ts +0 -3
- package/lib/typescript/src/external/reanimated/index.d.ts.map +0 -1
- package/lib/typescript/src/external/reanimated/registerWebGPUForReanimated.d.ts.map +0 -1
- package/lib/typescript/src/hooks.d.ts.map +0 -1
- package/lib/typescript/src/index.d.ts.map +0 -1
- package/lib/typescript/src/main/index.d.ts +0 -6
- package/lib/typescript/src/main/index.d.ts.map +0 -1
- package/lib/typescript/src/main/index.web.d.ts +0 -6
- package/lib/typescript/src/main/index.web.d.ts.map +0 -1
- package/lib/typescript/src/types.d.ts.map +0 -1
- package/lib/typescript/src/utils.d.ts +0 -2
- package/lib/typescript/src/utils.d.ts.map +0 -1
- 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 +0 -59
- 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/react-native-wgpu.podspec +0 -47
- package/src/Canvas.tsx +0 -76
- package/src/NativeWebGPUModule.ts +0 -9
- package/src/Offscreen.ts +0 -113
- package/src/WebGPUViewNativeComponent.ts +0 -11
- package/src/WebGPUViewNativeComponent.web.ts +0 -113
- package/src/WebPolyfillGPUModule.ts +0 -53
- package/src/external/ModuleProxy.ts +0 -30
- package/src/external/index.ts +0 -1
- package/src/external/reanimated/ReanimatedProxy.ts +0 -19
- package/src/external/reanimated/index.ts +0 -2
- package/src/external/reanimated/registerWebGPUForReanimated.ts +0 -43
- package/src/hooks.tsx +0 -93
- package/src/index.tsx +0 -91
- package/src/main/index.tsx +0 -40
- package/src/main/index.web.tsx +0 -8
- package/src/types.ts +0 -102
- package/src/utils.ts +0 -4
- /package/lib/typescript/{src → webgpu/src}/Canvas.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/NativeWebGPUModule.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/Offscreen.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/WebGPUViewNativeComponent.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/external/ModuleProxy.d.ts +0 -0
- /package/lib/typescript/{lib/module → webgpu/src}/external/index.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/external/reanimated/ReanimatedProxy.d.ts +0 -0
- /package/lib/typescript/{lib/module → webgpu/src}/external/reanimated/index.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/external/reanimated/registerWebGPUForReanimated.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/hooks.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/index.d.ts +0 -0
- /package/lib/typescript/{lib/module → webgpu/src}/main/index.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/types.d.ts +0 -0
- /package/lib/typescript/{eslint.config.d.mts → webgpu-shim/eslint.config.d.mts} +0 -0
- /package/lib/typescript/{lib/commonjs/external → webgpu-shim/lib/commonjs}/index.d.ts +0 -0
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <android/bitmap.h>
|
|
4
|
-
#include <android/hardware_buffer.h>
|
|
5
|
-
#include <jni.h>
|
|
6
|
-
|
|
7
|
-
#include <algorithm>
|
|
8
|
-
#include <functional>
|
|
9
|
-
#include <memory>
|
|
10
|
-
#include <string>
|
|
11
|
-
#include <thread>
|
|
12
|
-
#include <vector>
|
|
13
|
-
|
|
14
|
-
#include "webgpu/webgpu_cpp.h"
|
|
15
|
-
|
|
16
|
-
#include "PlatformContext.h"
|
|
17
|
-
#include "RNWebGPUManager.h"
|
|
18
|
-
|
|
19
|
-
namespace rnwgpu {
|
|
20
|
-
|
|
21
|
-
namespace jsi = facebook::jsi;
|
|
22
|
-
namespace jni = facebook::jni;
|
|
23
|
-
|
|
24
|
-
class AndroidPlatformContext : public PlatformContext {
|
|
25
|
-
private:
|
|
26
|
-
jobject _blobModule;
|
|
27
|
-
|
|
28
|
-
std::vector<uint8_t> resolveBlob(JNIEnv *env, const std::string &blobId,
|
|
29
|
-
double offset, double size) {
|
|
30
|
-
if (!_blobModule) {
|
|
31
|
-
throw std::runtime_error("BlobModule instance is null");
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
jclass blobModuleClass = env->GetObjectClass(_blobModule);
|
|
35
|
-
if (!blobModuleClass) {
|
|
36
|
-
throw std::runtime_error("Couldn't find BlobModule class");
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
jmethodID resolveMethod = env->GetMethodID(blobModuleClass, "resolve",
|
|
40
|
-
"(Ljava/lang/String;II)[B");
|
|
41
|
-
env->DeleteLocalRef(blobModuleClass);
|
|
42
|
-
|
|
43
|
-
if (!resolveMethod) {
|
|
44
|
-
throw std::runtime_error("Couldn't find resolve method in BlobModule");
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
jstring jBlobId = env->NewStringUTF(blobId.c_str());
|
|
48
|
-
jbyteArray blobData = (jbyteArray)env->CallObjectMethod(
|
|
49
|
-
_blobModule, resolveMethod, jBlobId, static_cast<jint>(offset),
|
|
50
|
-
static_cast<jint>(size));
|
|
51
|
-
env->DeleteLocalRef(jBlobId);
|
|
52
|
-
|
|
53
|
-
if (!blobData) {
|
|
54
|
-
throw std::runtime_error("Couldn't retrieve blob data");
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
jsize len = env->GetArrayLength(blobData);
|
|
58
|
-
std::vector<uint8_t> data(len);
|
|
59
|
-
env->GetByteArrayRegion(blobData, 0, len,
|
|
60
|
-
reinterpret_cast<jbyte *>(data.data()));
|
|
61
|
-
env->DeleteLocalRef(blobData);
|
|
62
|
-
return data;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
public:
|
|
66
|
-
explicit AndroidPlatformContext(jobject blobModule)
|
|
67
|
-
: _blobModule(blobModule) {}
|
|
68
|
-
~AndroidPlatformContext() {
|
|
69
|
-
if (_blobModule) {
|
|
70
|
-
JNIEnv *env = facebook::jni::Environment::current();
|
|
71
|
-
env->DeleteGlobalRef(_blobModule);
|
|
72
|
-
_blobModule = nullptr;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
wgpu::Surface makeSurface(wgpu::Instance instance, void *window, int width,
|
|
77
|
-
int height) override {
|
|
78
|
-
wgpu::SurfaceSourceAndroidNativeWindow androidSurfaceDesc;
|
|
79
|
-
androidSurfaceDesc.window = reinterpret_cast<ANativeWindow *>(window);
|
|
80
|
-
wgpu::SurfaceDescriptor surfaceDescriptor;
|
|
81
|
-
surfaceDescriptor.nextInChain = &androidSurfaceDesc;
|
|
82
|
-
return instance.CreateSurface(&surfaceDescriptor);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
ImageData createImageBitmap(std::string blobId, double offset,
|
|
86
|
-
double size) override {
|
|
87
|
-
jni::Environment::ensureCurrentThreadIsAttached();
|
|
88
|
-
|
|
89
|
-
JNIEnv *env = facebook::jni::Environment::current();
|
|
90
|
-
if (!env) {
|
|
91
|
-
throw std::runtime_error("Couldn't get JNI environment");
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
auto data = resolveBlob(env, blobId, offset, size);
|
|
95
|
-
return createImageBitmapFromData(data);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
void
|
|
99
|
-
createImageBitmapAsync(std::string blobId, double offset, double size,
|
|
100
|
-
std::function<void(ImageData)> onSuccess,
|
|
101
|
-
std::function<void(std::string)> onError) override {
|
|
102
|
-
std::thread([this, blobId = std::move(blobId), offset, size,
|
|
103
|
-
onSuccess = std::move(onSuccess),
|
|
104
|
-
onError = std::move(onError)]() {
|
|
105
|
-
jni::Environment::ensureCurrentThreadIsAttached();
|
|
106
|
-
try {
|
|
107
|
-
JNIEnv *env = facebook::jni::Environment::current();
|
|
108
|
-
if (!env) {
|
|
109
|
-
throw std::runtime_error("Couldn't get JNI environment");
|
|
110
|
-
}
|
|
111
|
-
auto data = resolveBlob(env, blobId, offset, size);
|
|
112
|
-
auto result = createImageBitmapFromData(data);
|
|
113
|
-
onSuccess(std::move(result));
|
|
114
|
-
} catch (const std::exception &e) {
|
|
115
|
-
onError(e.what());
|
|
116
|
-
}
|
|
117
|
-
}).detach();
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
ImageData createImageBitmapFromData(std::span<const uint8_t> data) override {
|
|
121
|
-
jni::Environment::ensureCurrentThreadIsAttached();
|
|
122
|
-
|
|
123
|
-
JNIEnv *env = facebook::jni::Environment::current();
|
|
124
|
-
if (!env) {
|
|
125
|
-
throw std::runtime_error("Couldn't get JNI environment");
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Create jbyteArray from the raw bytes
|
|
129
|
-
jbyteArray byteArray = env->NewByteArray(static_cast<jsize>(data.size()));
|
|
130
|
-
if (!byteArray) {
|
|
131
|
-
throw std::runtime_error("Couldn't allocate byte array");
|
|
132
|
-
}
|
|
133
|
-
env->SetByteArrayRegion(byteArray, 0, static_cast<jsize>(data.size()),
|
|
134
|
-
reinterpret_cast<const jbyte *>(data.data()));
|
|
135
|
-
|
|
136
|
-
// Decode via BitmapFactory
|
|
137
|
-
jclass bitmapFactoryClass =
|
|
138
|
-
env->FindClass("android/graphics/BitmapFactory");
|
|
139
|
-
if (!bitmapFactoryClass) {
|
|
140
|
-
env->DeleteLocalRef(byteArray);
|
|
141
|
-
throw std::runtime_error("Couldn't find BitmapFactory class");
|
|
142
|
-
}
|
|
143
|
-
jmethodID decodeByteArrayMethod =
|
|
144
|
-
env->GetStaticMethodID(bitmapFactoryClass, "decodeByteArray",
|
|
145
|
-
"([BII)Landroid/graphics/Bitmap;");
|
|
146
|
-
if (!decodeByteArrayMethod) {
|
|
147
|
-
env->DeleteLocalRef(byteArray);
|
|
148
|
-
env->DeleteLocalRef(bitmapFactoryClass);
|
|
149
|
-
throw std::runtime_error("Couldn't find decodeByteArray method");
|
|
150
|
-
}
|
|
151
|
-
jint length = static_cast<jint>(data.size());
|
|
152
|
-
jobject bitmap = env->CallStaticObjectMethod(
|
|
153
|
-
bitmapFactoryClass, decodeByteArrayMethod, byteArray, 0, length);
|
|
154
|
-
env->DeleteLocalRef(bitmapFactoryClass);
|
|
155
|
-
|
|
156
|
-
if (!bitmap) {
|
|
157
|
-
env->DeleteLocalRef(byteArray);
|
|
158
|
-
throw std::runtime_error("Couldn't decode image");
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
AndroidBitmapInfo bitmapInfo;
|
|
162
|
-
if (AndroidBitmap_getInfo(env, bitmap, &bitmapInfo) !=
|
|
163
|
-
ANDROID_BITMAP_RESULT_SUCCESS) {
|
|
164
|
-
env->DeleteLocalRef(byteArray);
|
|
165
|
-
env->DeleteLocalRef(bitmap);
|
|
166
|
-
throw std::runtime_error("Couldn't get bitmap info");
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
void *bitmapPixels;
|
|
170
|
-
if (AndroidBitmap_lockPixels(env, bitmap, &bitmapPixels) !=
|
|
171
|
-
ANDROID_BITMAP_RESULT_SUCCESS) {
|
|
172
|
-
env->DeleteLocalRef(byteArray);
|
|
173
|
-
env->DeleteLocalRef(bitmap);
|
|
174
|
-
throw std::runtime_error("Couldn't lock bitmap pixels");
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
ImageData result;
|
|
178
|
-
result.width = static_cast<int>(bitmapInfo.width);
|
|
179
|
-
result.height = static_cast<int>(bitmapInfo.height);
|
|
180
|
-
result.data.resize(bitmapInfo.height * bitmapInfo.stride);
|
|
181
|
-
memcpy(result.data.data(), bitmapPixels, result.data.size());
|
|
182
|
-
|
|
183
|
-
AndroidBitmap_unlockPixels(env, bitmap);
|
|
184
|
-
|
|
185
|
-
env->DeleteLocalRef(byteArray);
|
|
186
|
-
env->DeleteLocalRef(bitmap);
|
|
187
|
-
|
|
188
|
-
return result;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
void createImageBitmapFromDataAsync(
|
|
192
|
-
std::span<const uint8_t> data, std::function<void(ImageData)> onSuccess,
|
|
193
|
-
std::function<void(std::string)> onError) override {
|
|
194
|
-
std::thread([this,
|
|
195
|
-
ownedData = std::vector<uint8_t>(data.begin(), data.end()),
|
|
196
|
-
onSuccess = std::move(onSuccess),
|
|
197
|
-
onError = std::move(onError)]() mutable {
|
|
198
|
-
jni::Environment::ensureCurrentThreadIsAttached();
|
|
199
|
-
try {
|
|
200
|
-
auto result = createImageBitmapFromData(ownedData);
|
|
201
|
-
onSuccess(std::move(result));
|
|
202
|
-
} catch (const std::exception &e) {
|
|
203
|
-
onError(e.what());
|
|
204
|
-
}
|
|
205
|
-
}).detach();
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
VideoFrameHandle loadVideoFrame(const std::string & /*path*/) override {
|
|
209
|
-
// TODO: implement using MediaExtractor + MediaCodec to decode the first
|
|
210
|
-
// frame into an AHardwareBuffer-backed Image (Android API 26+).
|
|
211
|
-
throw std::runtime_error(
|
|
212
|
-
"loadVideoFrame is not yet implemented on Android. Pass an "
|
|
213
|
-
"AHardwareBuffer pointer obtained elsewhere (e.g. from "
|
|
214
|
-
"react-native-vision-camera) directly to "
|
|
215
|
-
"device.importSharedTextureMemory.");
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
VideoFrameHandle createTestVideoFrame(uint32_t width,
|
|
219
|
-
uint32_t height) override {
|
|
220
|
-
// Dawn's Android backend already requires API 26+, so AHardwareBuffer_*
|
|
221
|
-
// symbols are guaranteed to be available at link time on supported builds.
|
|
222
|
-
AHardwareBuffer_Desc desc = {};
|
|
223
|
-
desc.width = width;
|
|
224
|
-
desc.height = height;
|
|
225
|
-
desc.layers = 1;
|
|
226
|
-
desc.format = AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM;
|
|
227
|
-
desc.usage = AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE |
|
|
228
|
-
AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY |
|
|
229
|
-
AHARDWAREBUFFER_USAGE_CPU_READ_RARELY;
|
|
230
|
-
|
|
231
|
-
AHardwareBuffer *buffer = nullptr;
|
|
232
|
-
int err = AHardwareBuffer_allocate(&desc, &buffer);
|
|
233
|
-
if (err != 0 || !buffer) {
|
|
234
|
-
throw std::runtime_error(
|
|
235
|
-
"createTestVideoFrame: AHardwareBuffer_allocate failed (" +
|
|
236
|
-
std::to_string(err) + ")");
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
AHardwareBuffer_Desc actualDesc = {};
|
|
240
|
-
AHardwareBuffer_describe(buffer, &actualDesc);
|
|
241
|
-
const uint32_t stridePixels = actualDesc.stride;
|
|
242
|
-
|
|
243
|
-
void *vaddr = nullptr;
|
|
244
|
-
int rc = AHardwareBuffer_lock(buffer, AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY,
|
|
245
|
-
-1, nullptr, &vaddr);
|
|
246
|
-
if (rc != 0 || !vaddr) {
|
|
247
|
-
AHardwareBuffer_release(buffer);
|
|
248
|
-
throw std::runtime_error(
|
|
249
|
-
"createTestVideoFrame: AHardwareBuffer_lock failed (" +
|
|
250
|
-
std::to_string(rc) + ")");
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// Same procedural pattern as ApplePlatformContext::createTestVideoFrame so
|
|
254
|
-
// the shared snapshot matches on both platforms. Apple writes BGRA bytes
|
|
255
|
-
// (CVPixelBuffer is kCVPixelFormatType_32BGRA, sampled as bgra8unorm);
|
|
256
|
-
// here we write RGBA bytes (AHardwareBuffer is R8G8B8A8_UNORM, sampled as
|
|
257
|
-
// rgba8unorm). The fragment shader sees the same logical (r, g, b, a).
|
|
258
|
-
uint8_t *base = static_cast<uint8_t *>(vaddr);
|
|
259
|
-
const size_t rowBytes = stridePixels * 4;
|
|
260
|
-
for (uint32_t y = 0; y < height; ++y) {
|
|
261
|
-
uint8_t *row = base + y * rowBytes;
|
|
262
|
-
for (uint32_t x = 0; x < width; ++x) {
|
|
263
|
-
uint8_t r = static_cast<uint8_t>((x * 255) / std::max(width - 1, 1u));
|
|
264
|
-
uint8_t g = static_cast<uint8_t>((y * 255) / std::max(height - 1, 1u));
|
|
265
|
-
uint8_t b = static_cast<uint8_t>(((x + y) & 0x20) ? 220 : 30);
|
|
266
|
-
row[x * 4 + 0] = r;
|
|
267
|
-
row[x * 4 + 1] = g;
|
|
268
|
-
row[x * 4 + 2] = b;
|
|
269
|
-
row[x * 4 + 3] = 0xFF;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
AHardwareBuffer_unlock(buffer, nullptr);
|
|
273
|
-
|
|
274
|
-
VideoFrameHandle handle;
|
|
275
|
-
handle.handle = static_cast<void *>(buffer);
|
|
276
|
-
handle.width = width;
|
|
277
|
-
handle.height = height;
|
|
278
|
-
handle.deleter = [buffer]() { AHardwareBuffer_release(buffer); };
|
|
279
|
-
return handle;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
std::unique_ptr<IVideoPlayer>
|
|
283
|
-
createVideoPlayer(const std::string & /*path*/,
|
|
284
|
-
VideoPixelFormat /*format*/) override {
|
|
285
|
-
// TODO: implement using MediaCodec -> ImageReader (AHardwareBuffer mode).
|
|
286
|
-
throw std::runtime_error(
|
|
287
|
-
"createVideoPlayer is not yet implemented on Android.");
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
std::string writeTestVideoFile() override {
|
|
291
|
-
// TODO: implement using MediaCodec (H.264 encoder) or MediaMuxer.
|
|
292
|
-
throw std::runtime_error(
|
|
293
|
-
"writeTestVideoFile is not yet implemented on Android.");
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
VideoFrameHandle wrapNativeBuffer(void *pointer) override {
|
|
297
|
-
if (!pointer) {
|
|
298
|
-
throw std::runtime_error("wrapNativeBuffer: pointer is null");
|
|
299
|
-
}
|
|
300
|
-
auto *buffer = static_cast<AHardwareBuffer *>(pointer);
|
|
301
|
-
|
|
302
|
-
AHardwareBuffer_Desc desc = {};
|
|
303
|
-
AHardwareBuffer_describe(buffer, &desc);
|
|
304
|
-
|
|
305
|
-
AHardwareBuffer_acquire(buffer);
|
|
306
|
-
|
|
307
|
-
VideoFrameHandle handle;
|
|
308
|
-
handle.handle = static_cast<void *>(buffer);
|
|
309
|
-
handle.width = desc.width;
|
|
310
|
-
handle.height = desc.height;
|
|
311
|
-
// YUV / opaque formats route through Vulkan's SamplerYcbcrConversion via
|
|
312
|
-
// Dawn's OpaqueYCbCrAndroidForExternalTexture path. Single-plane RGBA AHBs
|
|
313
|
-
// take the plain BGRA8 path (sampled as a regular 2D texture).
|
|
314
|
-
switch (desc.format) {
|
|
315
|
-
case AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420:
|
|
316
|
-
case AHARDWAREBUFFER_FORMAT_YCbCr_P010:
|
|
317
|
-
handle.pixelFormat = VideoPixelFormat::NV12;
|
|
318
|
-
break;
|
|
319
|
-
default:
|
|
320
|
-
handle.pixelFormat = VideoPixelFormat::BGRA8;
|
|
321
|
-
break;
|
|
322
|
-
}
|
|
323
|
-
handle.deleter = [buffer]() { AHardwareBuffer_release(buffer); };
|
|
324
|
-
return handle;
|
|
325
|
-
}
|
|
326
|
-
};
|
|
327
|
-
|
|
328
|
-
} // namespace rnwgpu
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
#include <memory>
|
|
2
|
-
#include <unordered_map>
|
|
3
|
-
|
|
4
|
-
#include <fbjni/fbjni.h>
|
|
5
|
-
#include <jni.h>
|
|
6
|
-
#include <jsi/jsi.h>
|
|
7
|
-
|
|
8
|
-
#include <ReactCommon/CallInvokerHolder.h>
|
|
9
|
-
#include <android/native_window_jni.h>
|
|
10
|
-
#include <webgpu/webgpu_cpp.h>
|
|
11
|
-
|
|
12
|
-
#include "AndroidPlatformContext.h"
|
|
13
|
-
#include "GPUCanvasContext.h"
|
|
14
|
-
#include "RNWebGPUManager.h"
|
|
15
|
-
|
|
16
|
-
#define LOG_TAG "WebGPUModule"
|
|
17
|
-
|
|
18
|
-
std::shared_ptr<rnwgpu::RNWebGPUManager> manager;
|
|
19
|
-
|
|
20
|
-
extern "C" JNIEXPORT void JNICALL Java_com_webgpu_WebGPUModule_initializeNative(
|
|
21
|
-
JNIEnv *env, jobject /* this */, jlong jsRuntime,
|
|
22
|
-
jobject jsCallInvokerHolder, jobject blobModule) {
|
|
23
|
-
auto runtime = reinterpret_cast<facebook::jsi::Runtime *>(jsRuntime);
|
|
24
|
-
jobject globalBlobModule = env->NewGlobalRef(blobModule);
|
|
25
|
-
auto jsCallInvoker{
|
|
26
|
-
facebook::jni::alias_ref<facebook::react::CallInvokerHolder::javaobject>{
|
|
27
|
-
reinterpret_cast<facebook::react::CallInvokerHolder::javaobject>(
|
|
28
|
-
jsCallInvokerHolder)} -> cthis()
|
|
29
|
-
->getCallInvoker()};
|
|
30
|
-
auto platformContext =
|
|
31
|
-
std::make_shared<rnwgpu::AndroidPlatformContext>(globalBlobModule);
|
|
32
|
-
manager = std::make_shared<rnwgpu::RNWebGPUManager>(runtime, jsCallInvoker,
|
|
33
|
-
platformContext);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
extern "C" JNIEXPORT void JNICALL Java_com_webgpu_WebGPUView_onSurfaceChanged(
|
|
37
|
-
JNIEnv *env, jobject thiz, jobject surface, jint contextId, jfloat width,
|
|
38
|
-
jfloat height) {
|
|
39
|
-
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
40
|
-
registry.getSurfaceInfo(contextId)->resize(static_cast<int>(width),
|
|
41
|
-
static_cast<int>(height));
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
extern "C" JNIEXPORT void JNICALL Java_com_webgpu_WebGPUView_onSurfaceCreate(
|
|
45
|
-
JNIEnv *env, jobject thiz, jobject jSurface, jint contextId, jfloat width,
|
|
46
|
-
jfloat height) {
|
|
47
|
-
auto window = ANativeWindow_fromSurface(env, jSurface);
|
|
48
|
-
// ANativeWindow_acquire(window);
|
|
49
|
-
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
50
|
-
auto gpu = manager->_gpu;
|
|
51
|
-
auto surface = manager->_platformContext->makeSurface(
|
|
52
|
-
gpu, window, static_cast<int>(width), static_cast<int>(height));
|
|
53
|
-
registry
|
|
54
|
-
.getSurfaceInfoOrCreate(contextId, gpu, static_cast<int>(width),
|
|
55
|
-
static_cast<int>(height))
|
|
56
|
-
->switchToOnscreen(window, surface);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
extern "C" JNIEXPORT void JNICALL
|
|
60
|
-
Java_com_webgpu_WebGPUView_switchToOffscreenSurface(JNIEnv *env, jobject thiz,
|
|
61
|
-
jint contextId) {
|
|
62
|
-
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
63
|
-
auto nativeSurface = registry.getSurfaceInfo(contextId)->switchToOffscreen();
|
|
64
|
-
// ANativeWindow_release(reinterpret_cast<ANativeWindow *>(nativeSurface));
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
extern "C" JNIEXPORT void JNICALL Java_com_webgpu_WebGPUView_onSurfaceDestroy(
|
|
68
|
-
JNIEnv *env, jobject thiz, jint contextId) {
|
|
69
|
-
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
70
|
-
registry.removeSurfaceInfo(contextId);
|
|
71
|
-
}
|
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
package com.webgpu;
|
|
2
|
-
|
|
3
|
-
import android.annotation.SuppressLint;
|
|
4
|
-
import android.content.Context;
|
|
5
|
-
import android.graphics.Bitmap;
|
|
6
|
-
import android.graphics.Canvas;
|
|
7
|
-
import android.graphics.Paint;
|
|
8
|
-
import android.graphics.PixelFormat;
|
|
9
|
-
import android.graphics.Rect;
|
|
10
|
-
import android.hardware.HardwareBuffer;
|
|
11
|
-
import android.media.Image;
|
|
12
|
-
import android.media.ImageReader;
|
|
13
|
-
import android.os.Build;
|
|
14
|
-
import android.os.Handler;
|
|
15
|
-
import android.os.Looper;
|
|
16
|
-
import android.view.Surface;
|
|
17
|
-
import android.view.View;
|
|
18
|
-
|
|
19
|
-
import androidx.annotation.NonNull;
|
|
20
|
-
import androidx.annotation.RequiresApi;
|
|
21
|
-
|
|
22
|
-
import java.nio.ByteBuffer;
|
|
23
|
-
|
|
24
|
-
@RequiresApi(api = Build.VERSION_CODES.Q)
|
|
25
|
-
@SuppressLint("ViewConstructor")
|
|
26
|
-
public class WebGPUAHBView extends View implements ImageReader.OnImageAvailableListener {
|
|
27
|
-
|
|
28
|
-
private static final int MAX_IMAGES = 3;
|
|
29
|
-
private static final String TAG = "WebGPUAHBView";
|
|
30
|
-
|
|
31
|
-
private final WebGPUAPI mApi;
|
|
32
|
-
private ImageReader mImageReader;
|
|
33
|
-
private Surface mSurface;
|
|
34
|
-
private Image mCurrentImage;
|
|
35
|
-
private Bitmap mCachedBitmap;
|
|
36
|
-
private final Paint mPaint;
|
|
37
|
-
private final Handler mHandler;
|
|
38
|
-
private final Object mImageLock = new Object();
|
|
39
|
-
private boolean mSurfaceCreated = false;
|
|
40
|
-
private int mConfiguredWidth = 0;
|
|
41
|
-
private int mConfiguredHeight = 0;
|
|
42
|
-
|
|
43
|
-
public WebGPUAHBView(Context context, WebGPUAPI api) {
|
|
44
|
-
super(context);
|
|
45
|
-
mApi = api;
|
|
46
|
-
mPaint = new Paint(Paint.FILTER_BITMAP_FLAG);
|
|
47
|
-
mHandler = new Handler(Looper.getMainLooper());
|
|
48
|
-
|
|
49
|
-
// Enable hardware acceleration for this view
|
|
50
|
-
setLayerType(LAYER_TYPE_HARDWARE, null);
|
|
51
|
-
|
|
52
|
-
// Make sure we get drawn
|
|
53
|
-
setWillNotDraw(false);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
@Override
|
|
57
|
-
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
|
58
|
-
super.onSizeChanged(w, h, oldw, oldh);
|
|
59
|
-
|
|
60
|
-
if (w > 0 && h > 0) {
|
|
61
|
-
// Recreate ImageReader with new dimensions
|
|
62
|
-
setupImageReader(w, h);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
private void setupImageReader(int width, int height) {
|
|
67
|
-
// Don't recreate if dimensions haven't changed
|
|
68
|
-
if (width == mConfiguredWidth && height == mConfiguredHeight && mImageReader != null) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Clean up previous ImageReader
|
|
73
|
-
cleanupImageReader();
|
|
74
|
-
|
|
75
|
-
try {
|
|
76
|
-
// Create ImageReader with HardwareBuffer support
|
|
77
|
-
mImageReader = ImageReader.newInstance(
|
|
78
|
-
width,
|
|
79
|
-
height,
|
|
80
|
-
PixelFormat.RGBA_8888,
|
|
81
|
-
MAX_IMAGES,
|
|
82
|
-
HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE |
|
|
83
|
-
HardwareBuffer.USAGE_GPU_COLOR_OUTPUT |
|
|
84
|
-
HardwareBuffer.USAGE_COMPOSER_OVERLAY |
|
|
85
|
-
HardwareBuffer.USAGE_CPU_READ_RARELY // For fallback to Bitmap if needed
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
mImageReader.setOnImageAvailableListener(this, mHandler);
|
|
89
|
-
|
|
90
|
-
// Get the Surface for WebGPU to render to
|
|
91
|
-
mSurface = mImageReader.getSurface();
|
|
92
|
-
|
|
93
|
-
mConfiguredWidth = width;
|
|
94
|
-
mConfiguredHeight = height;
|
|
95
|
-
|
|
96
|
-
// Notify WebGPU about the new surface
|
|
97
|
-
if (!mSurfaceCreated) {
|
|
98
|
-
mApi.surfaceCreated(mSurface);
|
|
99
|
-
mSurfaceCreated = true;
|
|
100
|
-
} else {
|
|
101
|
-
mApi.surfaceChanged(mSurface);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
} catch (Exception e) {
|
|
105
|
-
e.printStackTrace();
|
|
106
|
-
// Fallback to offscreen if ImageReader creation fails
|
|
107
|
-
mApi.surfaceOffscreen();
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
@Override
|
|
112
|
-
public void onImageAvailable(ImageReader reader) {
|
|
113
|
-
synchronized (mImageLock) {
|
|
114
|
-
// Close previous image if exists
|
|
115
|
-
if (mCurrentImage != null) {
|
|
116
|
-
mCurrentImage.close();
|
|
117
|
-
mCurrentImage = null;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
try {
|
|
121
|
-
// Get the latest image
|
|
122
|
-
mCurrentImage = reader.acquireLatestImage();
|
|
123
|
-
|
|
124
|
-
if (mCurrentImage != null) {
|
|
125
|
-
// Request a redraw on the UI thread
|
|
126
|
-
postInvalidateOnAnimation();
|
|
127
|
-
}
|
|
128
|
-
} catch (Exception e) {
|
|
129
|
-
e.printStackTrace();
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
@Override
|
|
135
|
-
protected void onDraw(Canvas canvas) {
|
|
136
|
-
super.onDraw(canvas);
|
|
137
|
-
|
|
138
|
-
synchronized (mImageLock) {
|
|
139
|
-
if (mCurrentImage == null) {
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
try {
|
|
144
|
-
// Try to use HardwareBuffer directly (most efficient path)
|
|
145
|
-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
146
|
-
HardwareBuffer hardwareBuffer = mCurrentImage.getHardwareBuffer();
|
|
147
|
-
|
|
148
|
-
if (hardwareBuffer != null) {
|
|
149
|
-
// Draw using HardwareBuffer
|
|
150
|
-
drawHardwareBuffer(canvas, hardwareBuffer);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// Fallback: Convert Image to Bitmap
|
|
156
|
-
drawImageAsBitmap(canvas, mCurrentImage);
|
|
157
|
-
|
|
158
|
-
} catch (Exception e) {
|
|
159
|
-
e.printStackTrace();
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
private void drawHardwareBuffer(Canvas canvas, HardwareBuffer hardwareBuffer) {
|
|
165
|
-
// On Android Q+, we can create a Bitmap from HardwareBuffer
|
|
166
|
-
try {
|
|
167
|
-
// Create or reuse bitmap with matching dimensions
|
|
168
|
-
if (mCachedBitmap == null ||
|
|
169
|
-
mCachedBitmap.getWidth() != hardwareBuffer.getWidth() ||
|
|
170
|
-
mCachedBitmap.getHeight() != hardwareBuffer.getHeight()) {
|
|
171
|
-
|
|
172
|
-
if (mCachedBitmap != null) {
|
|
173
|
-
mCachedBitmap.recycle();
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// Create a hardware-backed Bitmap from the HardwareBuffer
|
|
177
|
-
mCachedBitmap = Bitmap.wrapHardwareBuffer(hardwareBuffer, null);
|
|
178
|
-
} else {
|
|
179
|
-
// Reuse existing bitmap and update with new HardwareBuffer content
|
|
180
|
-
mCachedBitmap = Bitmap.wrapHardwareBuffer(hardwareBuffer, null);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
if (mCachedBitmap != null) {
|
|
184
|
-
// Draw the bitmap to canvas
|
|
185
|
-
canvas.drawBitmap(mCachedBitmap, 0, 0, mPaint);
|
|
186
|
-
}
|
|
187
|
-
} catch (Exception e) {
|
|
188
|
-
e.printStackTrace();
|
|
189
|
-
// Fallback to Image-based rendering
|
|
190
|
-
drawImageAsBitmap(canvas, mCurrentImage);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
private void drawImageAsBitmap(Canvas canvas, Image image) {
|
|
195
|
-
// Fallback method: manually convert Image to Bitmap
|
|
196
|
-
if (image.getFormat() != PixelFormat.RGBA_8888) {
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
Image.Plane[] planes = image.getPlanes();
|
|
201
|
-
if (planes.length == 0) {
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
ByteBuffer buffer = planes[0].getBuffer();
|
|
206
|
-
int pixelStride = planes[0].getPixelStride();
|
|
207
|
-
int rowStride = planes[0].getRowStride();
|
|
208
|
-
int rowPadding = rowStride - pixelStride * image.getWidth();
|
|
209
|
-
|
|
210
|
-
// Create or reuse bitmap
|
|
211
|
-
int bitmapWidth = image.getWidth() + rowPadding / pixelStride;
|
|
212
|
-
if (mCachedBitmap == null ||
|
|
213
|
-
mCachedBitmap.getWidth() != bitmapWidth ||
|
|
214
|
-
mCachedBitmap.getHeight() != image.getHeight()) {
|
|
215
|
-
|
|
216
|
-
if (mCachedBitmap != null) {
|
|
217
|
-
mCachedBitmap.recycle();
|
|
218
|
-
}
|
|
219
|
-
mCachedBitmap = Bitmap.createBitmap(
|
|
220
|
-
bitmapWidth,
|
|
221
|
-
image.getHeight(),
|
|
222
|
-
Bitmap.Config.ARGB_8888
|
|
223
|
-
);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
mCachedBitmap.copyPixelsFromBuffer(buffer);
|
|
227
|
-
|
|
228
|
-
// Draw only the valid portion (without padding)
|
|
229
|
-
Rect src = new Rect(0, 0, image.getWidth(), image.getHeight());
|
|
230
|
-
Rect dst = new Rect(0, 0, getWidth(), getHeight());
|
|
231
|
-
canvas.drawBitmap(mCachedBitmap, src, dst, mPaint);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
private void cleanupImageReader() {
|
|
235
|
-
synchronized (mImageLock) {
|
|
236
|
-
if (mCurrentImage != null) {
|
|
237
|
-
mCurrentImage.close();
|
|
238
|
-
mCurrentImage = null;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
if (mImageReader != null) {
|
|
242
|
-
mImageReader.close();
|
|
243
|
-
mImageReader = null;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
if (mSurface != null) {
|
|
247
|
-
mSurface.release();
|
|
248
|
-
mSurface = null;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
@Override
|
|
254
|
-
protected void onDetachedFromWindow() {
|
|
255
|
-
super.onDetachedFromWindow();
|
|
256
|
-
|
|
257
|
-
// Notify WebGPU that surface is being destroyed
|
|
258
|
-
if (mSurfaceCreated) {
|
|
259
|
-
mApi.surfaceDestroyed();
|
|
260
|
-
mSurfaceCreated = false;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
// Clean up resources
|
|
264
|
-
cleanupImageReader();
|
|
265
|
-
|
|
266
|
-
if (mCachedBitmap != null) {
|
|
267
|
-
mCachedBitmap.recycle();
|
|
268
|
-
mCachedBitmap = null;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
@Override
|
|
273
|
-
protected void onAttachedToWindow() {
|
|
274
|
-
super.onAttachedToWindow();
|
|
275
|
-
|
|
276
|
-
// Re-setup if we have valid dimensions
|
|
277
|
-
if (getWidth() > 0 && getHeight() > 0) {
|
|
278
|
-
setupImageReader(getWidth(), getHeight());
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
@Override
|
|
283
|
-
public void setAlpha(float alpha) {
|
|
284
|
-
super.setAlpha(alpha);
|
|
285
|
-
mPaint.setAlpha((int) (alpha * 255));
|
|
286
|
-
invalidate();
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
@Override
|
|
290
|
-
protected void onVisibilityChanged(@NonNull View changedView, int visibility) {
|
|
291
|
-
super.onVisibilityChanged(changedView, visibility);
|
|
292
|
-
|
|
293
|
-
if (visibility == VISIBLE && mSurface == null && getWidth() > 0 && getHeight() > 0) {
|
|
294
|
-
// Re-create surface if needed when becoming visible
|
|
295
|
-
setupImageReader(getWidth(), getHeight());
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|