react-native-wgpu 0.5.6 → 0.5.7
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/apple/WebGPUModule.h +2 -1
- package/apple/WebGPUModule.mm +22 -16
- package/lib/commonjs/main/index.js +21 -17
- package/lib/commonjs/main/index.js.map +1 -1
- package/lib/module/main/index.js +21 -17
- package/lib/module/main/index.js.map +1 -1
- package/package.json +1 -1
- package/src/main/index.tsx +24 -19
package/apple/WebGPUModule.h
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
#import "RNWebGPUManager.h"
|
|
4
4
|
#import <RNWgpuViewSpec/RNWgpuViewSpec.h>
|
|
5
|
+
#import <React/RCTCallInvokerModule.h>
|
|
5
6
|
#import <React/RCTEventEmitter.h>
|
|
6
7
|
|
|
7
|
-
@interface WebGPUModule : RCTEventEmitter <NativeWebGPUModuleSpec>
|
|
8
|
+
@interface WebGPUModule : RCTEventEmitter <NativeWebGPUModuleSpec, RCTCallInvokerModule>
|
|
8
9
|
|
|
9
10
|
+ (std::shared_ptr<rnwgpu::RNWebGPUManager>)getManager;
|
|
10
11
|
|
package/apple/WebGPUModule.mm
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
#import "GPUCanvasContext.h"
|
|
4
4
|
|
|
5
5
|
#import <React/RCTBridge+Private.h>
|
|
6
|
+
#import <React/RCTCallInvoker.h>
|
|
6
7
|
#import <React/RCTLog.h>
|
|
7
8
|
#import <ReactCommon/RCTTurboModule.h>
|
|
8
9
|
#import <jsi/jsi.h>
|
|
@@ -11,12 +12,25 @@
|
|
|
11
12
|
namespace jsi = facebook::jsi;
|
|
12
13
|
namespace react = facebook::react;
|
|
13
14
|
|
|
15
|
+
// Category to declare the runtime property on RCTBridge/RCTBridgeProxy.
|
|
16
|
+
// In Bridgeless mode, self.bridge is an RCTBridgeProxy which implements
|
|
17
|
+
// -(void *)runtime. In Legacy mode, self.bridge is the real RCTBridge
|
|
18
|
+
// (backed by RCTCxxBridge) which also implements it.
|
|
19
|
+
@interface RCTBridge (JSIRuntime)
|
|
20
|
+
- (void *)runtime;
|
|
21
|
+
@end
|
|
22
|
+
|
|
14
23
|
@implementation WebGPUModule
|
|
15
24
|
|
|
16
25
|
RCT_EXPORT_MODULE(WebGPUModule)
|
|
17
26
|
|
|
18
27
|
static std::shared_ptr<rnwgpu::RNWebGPUManager> webgpuManager;
|
|
19
28
|
|
|
29
|
+
// Synthesize callInvoker so RCTTurboModuleManager injects the JS CallInvoker.
|
|
30
|
+
// When the module conforms to RCTCallInvokerModule, the TurboModule infra
|
|
31
|
+
// calls setCallInvoker: during module initialization.
|
|
32
|
+
@synthesize callInvoker = _callInvoker;
|
|
33
|
+
|
|
20
34
|
+ (std::shared_ptr<rnwgpu::RNWebGPUManager>)getManager {
|
|
21
35
|
return webgpuManager;
|
|
22
36
|
}
|
|
@@ -28,9 +42,6 @@ static std::shared_ptr<rnwgpu::RNWebGPUManager> webgpuManager;
|
|
|
28
42
|
}
|
|
29
43
|
|
|
30
44
|
- (void)invalidate {
|
|
31
|
-
// if (_webgpuManager != nil) {
|
|
32
|
-
// [_webgpuManager invalidate];
|
|
33
|
-
// }
|
|
34
45
|
webgpuManager = nil;
|
|
35
46
|
}
|
|
36
47
|
|
|
@@ -43,31 +54,26 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) {
|
|
|
43
54
|
// Already initialized, ignore call.
|
|
44
55
|
return @true;
|
|
45
56
|
}
|
|
46
|
-
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)[RCTBridge currentBridge];
|
|
47
|
-
if (!cxxBridge.runtime) {
|
|
48
|
-
NSLog(@"Failed to install react-native-wgpu: RCTBridge is not a "
|
|
49
|
-
@"RCTCxxBridge!");
|
|
50
|
-
return [NSNumber numberWithBool:NO];
|
|
51
|
-
}
|
|
52
57
|
|
|
53
|
-
|
|
58
|
+
// self.bridge works in both Legacy (RCTBridge) and Bridgeless (RCTBridgeProxy).
|
|
59
|
+
jsi::Runtime *runtime = (jsi::Runtime *)self.bridge.runtime;
|
|
54
60
|
if (!runtime) {
|
|
55
|
-
NSLog(@"Failed to install react-native-wgpu: jsi::Runtime* was null!"
|
|
61
|
+
NSLog(@"Failed to install react-native-wgpu: jsi::Runtime* was null! "
|
|
62
|
+
@"(self.bridge=%@)", self.bridge);
|
|
56
63
|
return [NSNumber numberWithBool:NO];
|
|
57
64
|
}
|
|
58
|
-
|
|
65
|
+
|
|
66
|
+
// _callInvoker is injected by RCTTurboModuleManager because we conform to
|
|
67
|
+
// RCTCallInvokerModule. Works in both Legacy and Bridgeless.
|
|
68
|
+
std::shared_ptr<react::CallInvoker> jsInvoker = _callInvoker.callInvoker;
|
|
59
69
|
if (!jsInvoker) {
|
|
60
70
|
NSLog(@"Failed to install react-native-wgpu: react::CallInvoker was "
|
|
61
71
|
@"null!");
|
|
62
72
|
return [NSNumber numberWithBool:NO];
|
|
63
73
|
}
|
|
64
74
|
|
|
65
|
-
if (!jsInvoker) {
|
|
66
|
-
jsInvoker = cxxBridge.jsCallInvoker;
|
|
67
|
-
}
|
|
68
75
|
std::shared_ptr<rnwgpu::PlatformContext> platformContext =
|
|
69
76
|
std::make_shared<rnwgpu::ApplePlatformContext>();
|
|
70
|
-
// TODO: remove allocation here
|
|
71
77
|
webgpuManager = std::make_shared<rnwgpu::RNWebGPUManager>(runtime, jsInvoker,
|
|
72
78
|
platformContext);
|
|
73
79
|
return @true;
|
|
@@ -63,25 +63,29 @@ Object.keys(_hooks).forEach(function (key) {
|
|
|
63
63
|
});
|
|
64
64
|
});
|
|
65
65
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
66
|
-
_NativeWebGPUModule.default.install();
|
|
66
|
+
const _installOk = _NativeWebGPUModule.default.install();
|
|
67
67
|
(0, _external.registerWebGPUForReanimated)();
|
|
68
|
-
if (
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
68
|
+
if (typeof RNWebGPU !== "undefined") {
|
|
69
|
+
if (!navigator) {
|
|
70
|
+
// @ts-expect-error Navigation object is more complex than this, setting it to an empty object to add gpu property
|
|
71
|
+
navigator = {
|
|
72
|
+
gpu: RNWebGPU.gpu,
|
|
73
|
+
userAgent: "react-native"
|
|
74
|
+
};
|
|
75
|
+
} else {
|
|
76
|
+
navigator.gpu = RNWebGPU.gpu;
|
|
77
|
+
if (typeof navigator.userAgent !== "string") {
|
|
78
|
+
try {
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
80
|
+
// @ts-ignore - Hermes navigator may not include a userAgent, align with the polyfill if needed
|
|
81
|
+
navigator.userAgent = "react-native";
|
|
82
|
+
} catch {
|
|
83
|
+
// navigator.userAgent can be read-only; ignore if assignment fails
|
|
84
|
+
}
|
|
83
85
|
}
|
|
84
86
|
}
|
|
87
|
+
global.createImageBitmap = global.createImageBitmap ?? RNWebGPU.createImageBitmap.bind(RNWebGPU);
|
|
88
|
+
} else {
|
|
89
|
+
console.warn(`[react-native-wgpu] install() returned ${_installOk} but RNWebGPU global is not available`);
|
|
85
90
|
}
|
|
86
|
-
global.createImageBitmap = global.createImageBitmap ?? RNWebGPU.createImageBitmap.bind(RNWebGPU);
|
|
87
91
|
//# sourceMappingURL=index.js.map
|
|
@@ -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","e","__esModule","default","WebGPUModule","install","registerWebGPUForReanimated","
|
|
1
|
+
{"version":3,"names":["_external","require","_NativeWebGPUModule","_interopRequireDefault","_Canvas","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_Offscreen","_WebGPUViewNativeComponent","_hooks","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":[]}
|
package/lib/module/main/index.js
CHANGED
|
@@ -5,25 +5,29 @@ export * from "../Offscreen";
|
|
|
5
5
|
export * from "../WebGPUViewNativeComponent";
|
|
6
6
|
export * from "../hooks";
|
|
7
7
|
export { default as WebGPUModule } from "../NativeWebGPUModule";
|
|
8
|
-
WebGPUModule.install();
|
|
8
|
+
const _installOk = WebGPUModule.install();
|
|
9
9
|
registerWebGPUForReanimated();
|
|
10
|
-
if (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
10
|
+
if (typeof RNWebGPU !== "undefined") {
|
|
11
|
+
if (!navigator) {
|
|
12
|
+
// @ts-expect-error Navigation object is more complex than this, setting it to an empty object to add gpu property
|
|
13
|
+
navigator = {
|
|
14
|
+
gpu: RNWebGPU.gpu,
|
|
15
|
+
userAgent: "react-native"
|
|
16
|
+
};
|
|
17
|
+
} else {
|
|
18
|
+
navigator.gpu = RNWebGPU.gpu;
|
|
19
|
+
if (typeof navigator.userAgent !== "string") {
|
|
20
|
+
try {
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
22
|
+
// @ts-ignore - Hermes navigator may not include a userAgent, align with the polyfill if needed
|
|
23
|
+
navigator.userAgent = "react-native";
|
|
24
|
+
} catch {
|
|
25
|
+
// navigator.userAgent can be read-only; ignore if assignment fails
|
|
26
|
+
}
|
|
25
27
|
}
|
|
26
28
|
}
|
|
29
|
+
global.createImageBitmap = global.createImageBitmap ?? RNWebGPU.createImageBitmap.bind(RNWebGPU);
|
|
30
|
+
} else {
|
|
31
|
+
console.warn(`[react-native-wgpu] install() returned ${_installOk} but RNWebGPU global is not available`);
|
|
27
32
|
}
|
|
28
|
-
global.createImageBitmap = global.createImageBitmap ?? RNWebGPU.createImageBitmap.bind(RNWebGPU);
|
|
29
33
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["registerWebGPUForReanimated","WebGPUModule","default","install","
|
|
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;AAExB,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,0CAA0CV,UAAU,uCACtD,CAAC;AACH","ignoreList":[]}
|
package/package.json
CHANGED
package/src/main/index.tsx
CHANGED
|
@@ -8,28 +8,33 @@ export * from "../hooks";
|
|
|
8
8
|
|
|
9
9
|
export { default as WebGPUModule } from "../NativeWebGPUModule";
|
|
10
10
|
|
|
11
|
-
WebGPUModule.install();
|
|
11
|
+
const _installOk = WebGPUModule.install();
|
|
12
12
|
|
|
13
13
|
registerWebGPUForReanimated();
|
|
14
14
|
|
|
15
|
-
if (
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
15
|
+
if (typeof RNWebGPU !== "undefined") {
|
|
16
|
+
if (!navigator) {
|
|
17
|
+
// @ts-expect-error Navigation object is more complex than this, setting it to an empty object to add gpu property
|
|
18
|
+
navigator = {
|
|
19
|
+
gpu: RNWebGPU.gpu,
|
|
20
|
+
userAgent: "react-native",
|
|
21
|
+
};
|
|
22
|
+
} else {
|
|
23
|
+
navigator.gpu = RNWebGPU.gpu;
|
|
24
|
+
if (typeof navigator.userAgent !== "string") {
|
|
25
|
+
try {
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
27
|
+
// @ts-ignore - Hermes navigator may not include a userAgent, align with the polyfill if needed
|
|
28
|
+
navigator.userAgent = "react-native";
|
|
29
|
+
} catch {
|
|
30
|
+
// navigator.userAgent can be read-only; ignore if assignment fails
|
|
31
|
+
}
|
|
30
32
|
}
|
|
31
33
|
}
|
|
34
|
+
global.createImageBitmap =
|
|
35
|
+
global.createImageBitmap ?? RNWebGPU.createImageBitmap.bind(RNWebGPU);
|
|
36
|
+
} else {
|
|
37
|
+
console.warn(
|
|
38
|
+
`[react-native-wgpu] install() returned ${_installOk} but RNWebGPU global is not available`
|
|
39
|
+
);
|
|
32
40
|
}
|
|
33
|
-
|
|
34
|
-
global.createImageBitmap =
|
|
35
|
-
global.createImageBitmap ?? RNWebGPU.createImageBitmap.bind(RNWebGPU);
|