react-native-webgpu 0.6.4 → 0.7.0

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.
@@ -6,8 +6,7 @@
6
6
  #import <react/renderer/components/RNWgpuViewSpec/RCTComponentViewHelpers.h>
7
7
 
8
8
  #import "MetalView.h"
9
- #import "RCTFabricComponentsPlugins.h"
10
- #import "Utils.h"
9
+ #import <React/RCTFabricComponentsPlugins.h>
11
10
 
12
11
  using namespace facebook::react;
13
12
 
@@ -1,5 +1,7 @@
1
1
  #include "GPU.h"
2
2
 
3
+ #include <dlfcn.h>
4
+
3
5
  #include <cstdio>
4
6
  #include <memory>
5
7
  #include <string>
@@ -14,6 +16,25 @@
14
16
  namespace rnwgpu {
15
17
 
16
18
  GPU::GPU(jsi::Runtime & /*runtime*/) : NativeObject(CLASS_NAME) {
19
+ // If a Graphite build of @shopify/react-native-skia is loaded in this
20
+ // process, adopt its wgpu::Instance instead of creating our own, so
21
+ // Graphite's device and every JS-created device live on one instance. That
22
+ // makes pointer-based handoff (RNWebGPU.importDevice of Skia's device)
23
+ // sound: the async pump serves the shared instance, so callbacks on
24
+ // imported devices settle. Discovered at runtime via dlsym so there is no
25
+ // build-time coupling and native-module init order does not matter. Both
26
+ // packages must link the same single Dawn copy (they vendor the same
27
+ // artifact) for the handle to be meaningful.
28
+ using GetInstanceFn = WGPUInstance (*)();
29
+ if (auto getSkiaInstance = reinterpret_cast<GetInstanceFn>(
30
+ dlsym(RTLD_DEFAULT, "rnskia_getWGPUInstance"))) {
31
+ if (WGPUInstance external = getSkiaInstance()) {
32
+ wgpuInstanceAddRef(external);
33
+ _instance = wgpu::Instance::Acquire(external);
34
+ return;
35
+ }
36
+ }
37
+
17
38
  static const auto kTimedWaitAny = wgpu::InstanceFeatureName::TimedWaitAny;
18
39
  wgpu::InstanceDescriptor instanceDesc{.requiredFeatureCount = 1,
19
40
  .requiredFeatures = &kTimedWaitAny};
@@ -9,6 +9,8 @@
9
9
  #include "Canvas.h"
10
10
  #include "GPU.h"
11
11
  #include "GPUCanvasContext.h"
12
+ #include "GPUDevice.h"
13
+ #include "rnwgpu/async/RuntimeContext.h"
12
14
  #include "ImageBitmap.h"
13
15
  #include "PlatformContext.h"
14
16
  #include "VideoFrame.h"
@@ -78,6 +80,26 @@ public:
78
80
  return ctx;
79
81
  }
80
82
 
83
+ // Wrap an externally created WGPUDevice (passed as a BigInt pointer, e.g.
84
+ // Skia's Graphite device from Skia.getNativeDevice()) in a GPUDevice.
85
+ // AddRefs the handle, so the original owner keeps its reference. Only sound
86
+ // because the process links a single Dawn copy and the GPU instance is
87
+ // shared with the exporter (see the GPU constructor): the calling runtime's
88
+ // pump serves the instance the device lives on, so its async callbacks
89
+ // settle normally.
90
+ std::shared_ptr<GPUDevice> importDevice(jsi::Runtime &runtime,
91
+ void *pointer) {
92
+ if (pointer == nullptr) {
93
+ throw std::runtime_error(
94
+ "importDevice: expected a non-null WGPUDevice pointer (BigInt)");
95
+ }
96
+ auto raw = reinterpret_cast<WGPUDevice>(pointer);
97
+ wgpuDeviceAddRef(raw);
98
+ wgpu::Device device = wgpu::Device::Acquire(raw);
99
+ auto ctx = async::RuntimeContext::getOrCreate(runtime, _gpu->get());
100
+ return std::make_shared<GPUDevice>(device, ctx, "Imported Device");
101
+ }
102
+
81
103
  jsi::Value createImageBitmap(jsi::Runtime &runtime,
82
104
  const jsi::Value & /*thisVal*/,
83
105
  const jsi::Value *args, size_t count) {
@@ -285,6 +307,8 @@ public:
285
307
  &RNWebGPU::createTestVideoFrame);
286
308
  installMethod(runtime, prototype, "createVideoFrameFromNativeBuffer",
287
309
  &RNWebGPU::createVideoFrameFromNativeBuffer);
310
+ installMethodWithRuntime(runtime, prototype, "importDevice",
311
+ &RNWebGPU::importDevice);
288
312
  installMethod(runtime, prototype, "createVideoPlayer",
289
313
  &RNWebGPU::createVideoPlayer);
290
314
  installMethod(runtime, prototype, "writeTestVideoFile",
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.importDevice = void 0;
7
+ /**
8
+ * Wraps an externally created WGPUDevice pointer into a GPUDevice.
9
+ *
10
+ * The canonical use case is adopting the Graphite device from a
11
+ * @shopify/react-native-skia Graphite build:
12
+ *
13
+ * ```ts
14
+ * const device = importDevice(Skia.getNativeDevice());
15
+ * ```
16
+ *
17
+ * This is only sound when the exporting library links the same single Dawn
18
+ * copy as react-native-webgpu and shares its wgpu::Instance (react-native-skia
19
+ * Graphite builds do both).
20
+ */
21
+ const importDevice = pointer => {
22
+ if (typeof RNWebGPU === "undefined") {
23
+ throw new Error("react-native-webgpu is not installed natively; importDevice is unavailable");
24
+ }
25
+ return RNWebGPU.importDevice(pointer);
26
+ };
27
+ exports.importDevice = importDevice;
28
+ //# sourceMappingURL=importDevice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["importDevice","pointer","RNWebGPU","Error","exports"],"sourceRoot":"../../src","sources":["importDevice.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,YAAY,GAAIC,OAAe,IAAgB;EAC1D,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;IACnC,MAAM,IAAIC,KAAK,CACb,4EACF,CAAC;EACH;EACA,OAAOD,QAAQ,CAACF,YAAY,CAACC,OAAO,CAAC;AACvC,CAAC;AAACG,OAAA,CAAAJ,YAAA,GAAAA,YAAA","ignoreList":[]}
@@ -74,6 +74,18 @@ Object.keys(_GPUDeviceProvider).forEach(function (key) {
74
74
  }
75
75
  });
76
76
  });
77
+ var _importDevice = require("../importDevice");
78
+ Object.keys(_importDevice).forEach(function (key) {
79
+ if (key === "default" || key === "__esModule") return;
80
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
81
+ if (key in exports && exports[key] === _importDevice[key]) return;
82
+ Object.defineProperty(exports, key, {
83
+ enumerable: true,
84
+ get: function () {
85
+ return _importDevice[key];
86
+ }
87
+ });
88
+ });
77
89
  var _formats = require("../formats");
78
90
  Object.keys(_formats).forEach(function (key) {
79
91
  if (key === "default" || key === "__esModule") return;
@@ -1 +1 @@
1
- {"version":3,"names":["_external","require","_NativeWebGPUModule","_interopRequireDefault","_Canvas","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_Offscreen","_WebGPUViewNativeComponent","_hooks","_GPUDeviceProvider","_formats","e","__esModule","default","_installOk","WebGPUModule","install","registerWebGPUForReanimated","RNWebGPU","navigator","gpu","userAgent","global","createImageBitmap","bind","console","warn"],"sourceRoot":"../../../src","sources":["main/index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_external","require","_NativeWebGPUModule","_interopRequireDefault","_Canvas","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_Offscreen","_WebGPUViewNativeComponent","_hooks","_GPUDeviceProvider","_importDevice","_formats","e","__esModule","default","_installOk","WebGPUModule","install","registerWebGPUForReanimated","RNWebGPU","navigator","gpu","userAgent","global","createImageBitmap","bind","console","warn"],"sourceRoot":"../../../src","sources":["main/index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Wraps an externally created WGPUDevice pointer into a GPUDevice.
3
+ *
4
+ * The canonical use case is adopting the Graphite device from a
5
+ * @shopify/react-native-skia Graphite build:
6
+ *
7
+ * ```ts
8
+ * const device = importDevice(Skia.getNativeDevice());
9
+ * ```
10
+ *
11
+ * This is only sound when the exporting library links the same single Dawn
12
+ * copy as react-native-webgpu and shares its wgpu::Instance (react-native-skia
13
+ * Graphite builds do both).
14
+ */
15
+ export const importDevice = pointer => {
16
+ if (typeof RNWebGPU === "undefined") {
17
+ throw new Error("react-native-webgpu is not installed natively; importDevice is unavailable");
18
+ }
19
+ return RNWebGPU.importDevice(pointer);
20
+ };
21
+ //# sourceMappingURL=importDevice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["importDevice","pointer","RNWebGPU","Error"],"sourceRoot":"../../src","sources":["importDevice.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,YAAY,GAAIC,OAAe,IAAgB;EAC1D,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;IACnC,MAAM,IAAIC,KAAK,CACb,4EACF,CAAC;EACH;EACA,OAAOD,QAAQ,CAACF,YAAY,CAACC,OAAO,CAAC;AACvC,CAAC","ignoreList":[]}
@@ -5,6 +5,7 @@ export * from "../Offscreen";
5
5
  export * from "../WebGPUViewNativeComponent";
6
6
  export * from "../hooks";
7
7
  export * from "../GPUDeviceProvider";
8
+ export * from "../importDevice";
8
9
  export * from "../formats";
9
10
  export { default as WebGPUModule } from "../NativeWebGPUModule";
10
11
  const _installOk = WebGPUModule.install();
@@ -1 +1 @@
1
- {"version":3,"names":["registerWebGPUForReanimated","WebGPUModule","default","_installOk","install","RNWebGPU","navigator","gpu","userAgent","global","createImageBitmap","bind","console","warn"],"sourceRoot":"../../../src","sources":["main/index.tsx"],"mappings":"AAAA,SAASA,2BAA2B,QAAQ,aAAa;AACzD,OAAOC,YAAY,MAAM,uBAAuB;AAEhD,cAAc,WAAW;AACzB,cAAc,cAAc;AAC5B,cAAc,8BAA8B;AAC5C,cAAc,UAAU;AACxB,cAAc,sBAAsB;AACpC,cAAc,YAAY;AAE1B,SAASC,OAAO,IAAID,YAAY,QAAQ,uBAAuB;AAE/D,MAAME,UAAU,GAAGF,YAAY,CAACG,OAAO,CAAC,CAAC;AAEzCJ,2BAA2B,CAAC,CAAC;AAE7B,IAAI,OAAOK,QAAQ,KAAK,WAAW,EAAE;EACnC,IAAI,CAACC,SAAS,EAAE;IACd;IACAA,SAAS,GAAG;MACVC,GAAG,EAAEF,QAAQ,CAACE,GAAG;MACjBC,SAAS,EAAE;IACb,CAAC;EACH,CAAC,MAAM;IACLF,SAAS,CAACC,GAAG,GAAGF,QAAQ,CAACE,GAAG;IAC5B,IAAI,OAAOD,SAAS,CAACE,SAAS,KAAK,QAAQ,EAAE;MAC3C,IAAI;QACF;QACA;QACAF,SAAS,CAACE,SAAS,GAAG,cAAc;MACtC,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ;EACF;EACAC,MAAM,CAACC,iBAAiB,GACtBD,MAAM,CAACC,iBAAiB,IAAIL,QAAQ,CAACK,iBAAiB,CAACC,IAAI,CAACN,QAAQ,CAAC;AACzE,CAAC,MAAM;EACLO,OAAO,CAACC,IAAI,CACV,4CAA4CV,UAAU,uCACxD,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["registerWebGPUForReanimated","WebGPUModule","default","_installOk","install","RNWebGPU","navigator","gpu","userAgent","global","createImageBitmap","bind","console","warn"],"sourceRoot":"../../../src","sources":["main/index.tsx"],"mappings":"AAAA,SAASA,2BAA2B,QAAQ,aAAa;AACzD,OAAOC,YAAY,MAAM,uBAAuB;AAEhD,cAAc,WAAW;AACzB,cAAc,cAAc;AAC5B,cAAc,8BAA8B;AAC5C,cAAc,UAAU;AACxB,cAAc,sBAAsB;AACpC,cAAc,iBAAiB;AAC/B,cAAc,YAAY;AAE1B,SAASC,OAAO,IAAID,YAAY,QAAQ,uBAAuB;AAE/D,MAAME,UAAU,GAAGF,YAAY,CAACG,OAAO,CAAC,CAAC;AAEzCJ,2BAA2B,CAAC,CAAC;AAE7B,IAAI,OAAOK,QAAQ,KAAK,WAAW,EAAE;EACnC,IAAI,CAACC,SAAS,EAAE;IACd;IACAA,SAAS,GAAG;MACVC,GAAG,EAAEF,QAAQ,CAACE,GAAG;MACjBC,SAAS,EAAE;IACb,CAAC;EACH,CAAC,MAAM;IACLF,SAAS,CAACC,GAAG,GAAGF,QAAQ,CAACE,GAAG;IAC5B,IAAI,OAAOD,SAAS,CAACE,SAAS,KAAK,QAAQ,EAAE;MAC3C,IAAI;QACF;QACA;QACAF,SAAS,CAACE,SAAS,GAAG,cAAc;MACtC,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ;EACF;EACAC,MAAM,CAACC,iBAAiB,GACtBD,MAAM,CAACC,iBAAiB,IAAIL,QAAQ,CAACK,iBAAiB,CAACC,IAAI,CAACN,QAAQ,CAAC;AACzE,CAAC,MAAM;EACLO,OAAO,CAACC,IAAI,CACV,4CAA4CV,UAAU,uCACxD,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ export const __esModule: boolean;
2
+ /**
3
+ * Wraps an externally created WGPUDevice pointer into a GPUDevice.
4
+ *
5
+ * The canonical use case is adopting the Graphite device from a
6
+ * @shopify/react-native-skia Graphite build:
7
+ *
8
+ * ```ts
9
+ * const device = importDevice(Skia.getNativeDevice());
10
+ * ```
11
+ *
12
+ * This is only sound when the exporting library links the same single Dawn
13
+ * copy as react-native-webgpu and shares its wgpu::Instance (react-native-skia
14
+ * Graphite builds do both).
15
+ */
16
+ export function importDevice(pointer: any): GPUDevice;
17
+ //# sourceMappingURL=importDevice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importDevice.d.ts","sourceRoot":"","sources":["../../../commonjs/importDevice.js"],"names":[],"mappings":";AAMA;;;;;;;;;;;;;GAaG;AACH,sDAKC"}
@@ -0,0 +1,2 @@
1
+ export function importDevice(pointer: any): GPUDevice;
2
+ //# sourceMappingURL=importDevice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importDevice.d.ts","sourceRoot":"","sources":["../../../module/importDevice.js"],"names":[],"mappings":"AAcO,sDAKN"}
@@ -3,6 +3,7 @@ export * from "../Offscreen";
3
3
  export * from "../WebGPUViewNativeComponent";
4
4
  export * from "../hooks";
5
5
  export * from "../GPUDeviceProvider";
6
+ export * from "../importDevice";
6
7
  export * from "../formats";
7
8
  export { default as WebGPUModule } from "../NativeWebGPUModule";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Wraps an externally created WGPUDevice pointer into a GPUDevice.
3
+ *
4
+ * The canonical use case is adopting the Graphite device from a
5
+ * @shopify/react-native-skia Graphite build:
6
+ *
7
+ * ```ts
8
+ * const device = importDevice(Skia.getNativeDevice());
9
+ * ```
10
+ *
11
+ * This is only sound when the exporting library links the same single Dawn
12
+ * copy as react-native-webgpu and shares its wgpu::Instance (react-native-skia
13
+ * Graphite builds do both).
14
+ */
15
+ export declare const importDevice: (pointer: bigint) => GPUDevice;
16
+ //# sourceMappingURL=importDevice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importDevice.d.ts","sourceRoot":"","sources":["../../../src/importDevice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,SAO9C,CAAC"}
@@ -19,6 +19,7 @@ declare global {
19
19
  loadVideoFrame: (path: string) => NativeVideoFrame;
20
20
  createTestVideoFrame: (width: number, height: number) => NativeVideoFrame;
21
21
  createVideoFrameFromNativeBuffer: (pointer: bigint) => NativeVideoFrame;
22
+ importDevice: (pointer: bigint) => GPUDevice;
22
23
  createVideoPlayer: (path: string, pixelFormat?: NativeVideoPixelFormat) => VideoPlayer;
23
24
  writeTestVideoFile: () => string;
24
25
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,gCAAgC,EAChC,YAAY,EACZ,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAEjB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,gCAAgC,EAChC,oCAAoC,EACpC,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,SAAS,CAAC;AAEjB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,SAAS;QACjB,GAAG,EAAE,GAAG,CAAC;KACV;IAED,IAAI,SAAS,EAAE,SAAS,CAAC;IAEzB,IAAI,QAAQ,EAAE;QACZ,GAAG,EAAE,GAAG,CAAC;QACT,MAAM,EAAE,OAAO,CAAC;QAChB,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,YAAY,CAAC;QACtD,uBAAuB,EAAE,CACvB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,KACX,eAAe,CAAC;QAGrB,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5C,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,GAAG,WAAW,KAAK,MAAM,CAAC;QACvE,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;QAC5C,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,CAAC;QACnD,oBAAoB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,gBAAgB,CAAC;QAI1E,gCAAgC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,gBAAgB,CAAC;QACxE,iBAAiB,EAAE,CACjB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,sBAAsB,KACjC,WAAW,CAAC;QACjB,kBAAkB,EAAE,MAAM,MAAM,CAAC;KAClC,CAAC;IAEF,UAAU,SAAS;QACjB,yBAAyB,CACvB,UAAU,EAAE,gCAAgC,GAC3C,sBAAsB,CAAC;QAC1B,iBAAiB,CAAC,UAAU,EAAE,wBAAwB,GAAG,cAAc,CAAC;KACzE;IAID,UAAU,mBAAmB;QAC3B,WAAW,CAAC,EAAE,wBAAwB,CAAC;KACxC;IAMD,UAAU,4BAA4B;QACpC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB;IASD,UAAU,kBAAkB;QAC1B,OAAO,IAAI,IAAI,CAAC;QAShB,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;KACnC;IAGD,SAAS,iBAAiB,CACxB,KAAK,EAAE,WAAW,GAAG,eAAe,EACpC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAAC;CACzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,gCAAgC,EAChC,YAAY,EACZ,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAEjB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,gCAAgC,EAChC,oCAAoC,EACpC,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,SAAS,CAAC;AAEjB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,SAAS;QACjB,GAAG,EAAE,GAAG,CAAC;KACV;IAED,IAAI,SAAS,EAAE,SAAS,CAAC;IAEzB,IAAI,QAAQ,EAAE;QACZ,GAAG,EAAE,GAAG,CAAC;QACT,MAAM,EAAE,OAAO,CAAC;QAChB,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,YAAY,CAAC;QACtD,uBAAuB,EAAE,CACvB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,KACX,eAAe,CAAC;QAGrB,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5C,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,GAAG,WAAW,KAAK,MAAM,CAAC;QACvE,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;QAC5C,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,CAAC;QACnD,oBAAoB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,gBAAgB,CAAC;QAI1E,gCAAgC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,gBAAgB,CAAC;QAIxE,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC;QAC7C,iBAAiB,EAAE,CACjB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,sBAAsB,KACjC,WAAW,CAAC;QACjB,kBAAkB,EAAE,MAAM,MAAM,CAAC;KAClC,CAAC;IAEF,UAAU,SAAS;QACjB,yBAAyB,CACvB,UAAU,EAAE,gCAAgC,GAC3C,sBAAsB,CAAC;QAC1B,iBAAiB,CAAC,UAAU,EAAE,wBAAwB,GAAG,cAAc,CAAC;KACzE;IAID,UAAU,mBAAmB;QAC3B,WAAW,CAAC,EAAE,wBAAwB,CAAC;KACxC;IAMD,UAAU,4BAA4B;QACpC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB;IASD,UAAU,kBAAkB;QAC1B,OAAO,IAAI,IAAI,CAAC;QAShB,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;KACnC;IAGD,SAAS,iBAAiB,CACxB,KAAK,EAAE,WAAW,GAAG,eAAe,EACpC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAAC;CACzB"}
@@ -3,6 +3,7 @@ export * from "../Offscreen";
3
3
  export * from "../WebGPUViewNativeComponent";
4
4
  export * from "../hooks";
5
5
  export * from "../GPUDeviceProvider";
6
+ export * from "../importDevice";
6
7
  export * from "../formats";
7
8
  export { default as WebGPUModule } from "../NativeWebGPUModule";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/main/index.tsx"],"names":[],"mappings":"AAGA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/main/index.tsx"],"names":[],"mappings":"AAGA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-webgpu",
3
- "version": "0.6.4",
3
+ "version": "0.7.0",
4
4
  "description": "React Native WebGPU",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -28,6 +28,11 @@ Pod::Spec.new do |s|
28
28
 
29
29
  s.pod_target_xcconfig = {
30
30
  'HEADER_SEARCH_PATHS' => '$(PODS_TARGET_SRCROOT)/cpp',
31
+ # Xcode's all-target headermaps let same-named headers leak across pods
32
+ # (e.g. @shopify/react-native-skia keeps a jsi/ helper layer with
33
+ # identical relative header paths). Resolve includes strictly through our
34
+ # own search paths instead.
35
+ 'USE_HEADERMAP' => 'NO',
31
36
  }
32
37
 
33
38
  # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Wraps an externally created WGPUDevice pointer into a GPUDevice.
3
+ *
4
+ * The canonical use case is adopting the Graphite device from a
5
+ * @shopify/react-native-skia Graphite build:
6
+ *
7
+ * ```ts
8
+ * const device = importDevice(Skia.getNativeDevice());
9
+ * ```
10
+ *
11
+ * This is only sound when the exporting library links the same single Dawn
12
+ * copy as react-native-webgpu and shares its wgpu::Instance (react-native-skia
13
+ * Graphite builds do both).
14
+ */
15
+ export const importDevice = (pointer: bigint): GPUDevice => {
16
+ if (typeof RNWebGPU === "undefined") {
17
+ throw new Error(
18
+ "react-native-webgpu is not installed natively; importDevice is unavailable",
19
+ );
20
+ }
21
+ return RNWebGPU.importDevice(pointer);
22
+ };
package/src/index.tsx CHANGED
@@ -58,6 +58,10 @@ declare global {
58
58
  // on Android) into a NativeVideoFrame. Matches the shape used by libraries
59
59
  // that emit NativeBuffer (e.g. react-native-vision-camera).
60
60
  createVideoFrameFromNativeBuffer: (pointer: bigint) => NativeVideoFrame;
61
+ // Wrap an externally created WGPUDevice pointer (e.g. Skia's Graphite
62
+ // device from Skia.getNativeDevice()) into a GPUDevice. Requires the
63
+ // exporter to share this process's single Dawn instance.
64
+ importDevice: (pointer: bigint) => GPUDevice;
61
65
  createVideoPlayer: (
62
66
  path: string,
63
67
  pixelFormat?: NativeVideoPixelFormat,
@@ -6,6 +6,7 @@ export * from "../Offscreen";
6
6
  export * from "../WebGPUViewNativeComponent";
7
7
  export * from "../hooks";
8
8
  export * from "../GPUDeviceProvider";
9
+ export * from "../importDevice";
9
10
  export * from "../formats";
10
11
 
11
12
  export { default as WebGPUModule } from "../NativeWebGPUModule";