react-native-webgpu 0.17.0 → 0.19.1
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/android/cpp/AndroidPlatformContext.h +8 -0
- package/android/src/main/java/com/webgpu/ViewSnapshot.java +3 -0
- package/apple/ApplePlatformContext.h +2 -0
- package/apple/ApplePlatformContext.mm +12 -0
- package/apple/MetalLayerColorSpace.mm +20 -8
- package/cpp/rnwgpu/CanvasColorSpace.h +9 -0
- package/cpp/rnwgpu/PlatformContext.h +6 -0
- package/cpp/rnwgpu/RNWebGPUManager.cpp +3 -3
- package/cpp/rnwgpu/SurfaceRegistry.h +101 -30
- package/cpp/rnwgpu/WebGPURuntime.cpp +30 -11
- package/cpp/rnwgpu/WebGPURuntime.h +7 -2
- package/cpp/rnwgpu/api/GPUCanvasContext.cpp +2 -1
- package/cpp/rnwgpu/api/GPUCanvasContext.h +10 -0
- package/cpp/rnwgpu/api/RNWebGPU.h +63 -5
- package/cpp/rnwgpu/api/descriptors/GPUCanvasConfiguration.h +18 -0
- package/cpp/rnwgpu/async/RuntimeContext.cpp +43 -27
- package/cpp/rnwgpu/async/RuntimeContext.h +19 -11
- package/lib/commonjs/Canvas.js +3 -4
- package/lib/commonjs/Canvas.js.map +1 -1
- package/lib/commonjs/WebPolyfillGPUModule.js +2 -0
- package/lib/commonjs/WebPolyfillGPUModule.js.map +1 -1
- package/lib/commonjs/importDevice.js +3 -2
- package/lib/commonjs/importDevice.js.map +1 -1
- package/lib/module/Canvas.js +3 -4
- package/lib/module/Canvas.js.map +1 -1
- package/lib/module/WebPolyfillGPUModule.js +2 -0
- package/lib/module/WebPolyfillGPUModule.js.map +1 -1
- package/lib/module/importDevice.js +3 -2
- package/lib/module/importDevice.js.map +1 -1
- package/lib/typescript/lib/commonjs/Canvas.d.ts.map +1 -1
- package/lib/typescript/lib/commonjs/importDevice.d.ts +3 -2
- package/lib/typescript/lib/commonjs/importDevice.d.ts.map +1 -1
- package/lib/typescript/lib/module/Canvas.d.ts.map +1 -1
- package/lib/typescript/lib/module/importDevice.d.ts.map +1 -1
- package/lib/typescript/src/Canvas.d.ts.map +1 -1
- package/lib/typescript/src/importDevice.d.ts +3 -2
- package/lib/typescript/src/importDevice.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Canvas.tsx +3 -4
- package/src/WebPolyfillGPUModule.ts +3 -0
- package/src/importDevice.ts +3 -2
- package/src/index.tsx +12 -1
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
#include "webgpu/webgpu_cpp.h"
|
|
7
7
|
|
|
8
|
+
#include "CanvasColorSpace.h"
|
|
8
9
|
#include "JSIConverter.h"
|
|
9
10
|
|
|
10
11
|
#include "GPUDevice.h"
|
|
@@ -20,6 +21,7 @@ struct GPUCanvasConfiguration {
|
|
|
20
21
|
std::optional<std::vector<wgpu::TextureFormat>>
|
|
21
22
|
viewFormats; // Iterable<GPUTextureFormat>
|
|
22
23
|
wgpu::CompositeAlphaMode alphaMode = wgpu::CompositeAlphaMode::Opaque;
|
|
24
|
+
CanvasColorSpace colorSpace = CanvasColorSpace::SRGB;
|
|
23
25
|
};
|
|
24
26
|
|
|
25
27
|
} // namespace rnwgpu
|
|
@@ -63,6 +65,22 @@ struct JSIConverter<std::shared_ptr<rnwgpu::GPUCanvasConfiguration>> {
|
|
|
63
65
|
result->alphaMode = wgpu::CompositeAlphaMode::Premultiplied;
|
|
64
66
|
}
|
|
65
67
|
}
|
|
68
|
+
if (value.hasProperty(runtime, "colorSpace")) {
|
|
69
|
+
auto prop = value.getProperty(runtime, "colorSpace");
|
|
70
|
+
if (!prop.isUndefined()) {
|
|
71
|
+
auto name = prop.asString(runtime).utf8(runtime);
|
|
72
|
+
if (name == "display-p3") {
|
|
73
|
+
result->colorSpace = CanvasColorSpace::DisplayP3;
|
|
74
|
+
} else if (name != "srgb") {
|
|
75
|
+
throw jsi::JSError(
|
|
76
|
+
runtime, "Failed to execute 'configure' on 'GPUCanvasContext': "
|
|
77
|
+
"The provided value '" +
|
|
78
|
+
name +
|
|
79
|
+
"' is not a valid enum value of type "
|
|
80
|
+
"PredefinedColorSpace.");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
66
84
|
}
|
|
67
85
|
|
|
68
86
|
return result;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#include <memory>
|
|
4
4
|
#include <stdexcept>
|
|
5
|
+
#include <unordered_map>
|
|
5
6
|
#include <utility>
|
|
6
7
|
#include <vector>
|
|
7
8
|
|
|
@@ -14,7 +15,7 @@ namespace rnwgpu::async {
|
|
|
14
15
|
|
|
15
16
|
namespace {
|
|
16
17
|
struct RuntimeData {
|
|
17
|
-
std::shared_ptr<RuntimeContext
|
|
18
|
+
std::unordered_map<WGPUInstance, std::shared_ptr<RuntimeContext>> contexts;
|
|
18
19
|
};
|
|
19
20
|
constexpr const char *TAG = "RuntimeContext";
|
|
20
21
|
|
|
@@ -25,12 +26,27 @@ constexpr const char *TAG = "RuntimeContext";
|
|
|
25
26
|
jsi::Runtime *sMainRuntime = nullptr;
|
|
26
27
|
std::shared_ptr<facebook::react::CallInvoker> sMainInvoker;
|
|
27
28
|
|
|
28
|
-
//
|
|
29
|
-
//
|
|
29
|
+
// ProcessEvents() on one wgpu::Instance is serialized across the runtimes that
|
|
30
|
+
// share it by a mutex per instance, which each context resolves once, on
|
|
31
|
+
// creation. Pumping another library's instance (the one owning a device passed
|
|
32
|
+
// to importDevice) can block on that library's device lock; with one mutex per
|
|
33
|
+
// instance that never stalls the pumps of our own instance. A mutex is held
|
|
34
|
+
// only across the ProcessEvents call itself, never while running JS / mailbox
|
|
30
35
|
// settle-actions, so it cannot deadlock against the per-context mailbox mutex.
|
|
31
|
-
std::mutex
|
|
32
|
-
static std::mutex
|
|
33
|
-
|
|
36
|
+
std::shared_ptr<std::mutex> processEventsMutexFor(WGPUInstance instance) {
|
|
37
|
+
static std::mutex registryMutex;
|
|
38
|
+
static std::unordered_map<WGPUInstance, std::weak_ptr<std::mutex>> registry;
|
|
39
|
+
std::lock_guard<std::mutex> lock(registryMutex);
|
|
40
|
+
auto &slot = registry[instance];
|
|
41
|
+
if (auto existing = slot.lock()) {
|
|
42
|
+
return existing;
|
|
43
|
+
}
|
|
44
|
+
// Contexts retain their instance, so its handle cannot be reused while one
|
|
45
|
+
// of them is alive: an expired slot belonged to an instance whose runtimes
|
|
46
|
+
// are all gone, and an instance reusing that address starts afresh.
|
|
47
|
+
auto created = std::make_shared<std::mutex>();
|
|
48
|
+
slot = created;
|
|
49
|
+
return created;
|
|
34
50
|
}
|
|
35
51
|
} // namespace
|
|
36
52
|
|
|
@@ -42,32 +58,32 @@ void RuntimeContext::registerMainRuntime(
|
|
|
42
58
|
}
|
|
43
59
|
|
|
44
60
|
RuntimeContext::RuntimeContext(jsi::Runtime &runtime, wgpu::Instance instance)
|
|
45
|
-
: _runtime(runtime), _instance(std::move(instance))
|
|
61
|
+
: _runtime(runtime), _instance(std::move(instance)),
|
|
62
|
+
_processEventsMutex(processEventsMutexFor(_instance.Get())) {
|
|
46
63
|
Logger::logToConsole("[%s] Created (runtime=%p)", TAG, &runtime);
|
|
47
64
|
}
|
|
48
65
|
|
|
49
|
-
std::shared_ptr<RuntimeContext> RuntimeContext::get(jsi::Runtime &runtime) {
|
|
50
|
-
auto data = runtime.getRuntimeData(runtimeDataUUID());
|
|
51
|
-
if (!data) {
|
|
52
|
-
return nullptr;
|
|
53
|
-
}
|
|
54
|
-
return std::static_pointer_cast<RuntimeData>(data)->context;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
66
|
std::shared_ptr<RuntimeContext>
|
|
58
|
-
RuntimeContext::getOrCreate(jsi::Runtime &runtime,
|
|
59
|
-
|
|
60
|
-
|
|
67
|
+
RuntimeContext::getOrCreate(jsi::Runtime &runtime,
|
|
68
|
+
const wgpu::Instance &instance) {
|
|
69
|
+
auto data = std::static_pointer_cast<RuntimeData>(
|
|
70
|
+
runtime.getRuntimeData(runtimeDataUUID()));
|
|
71
|
+
if (!data) {
|
|
72
|
+
data = std::make_shared<RuntimeData>();
|
|
73
|
+
runtime.setRuntimeData(runtimeDataUUID(), data);
|
|
61
74
|
}
|
|
62
|
-
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
|
|
75
|
+
// Contexts retain their instance, so its handle is a stable key for the
|
|
76
|
+
// runtime's lifetime, and each instance's callbacks reach the matching pump.
|
|
77
|
+
// A slot left null by a throwing constructor is simply filled next time.
|
|
78
|
+
auto &context = data->contexts[instance.Get()];
|
|
79
|
+
if (!context) {
|
|
80
|
+
context = std::make_shared<RuntimeContext>(runtime, instance);
|
|
81
|
+
// Only the main JS runtime's context carries the CallInvoker; it is used to
|
|
82
|
+
// deliver spontaneous events (device.lost) without the pump.
|
|
83
|
+
if (&runtime == sMainRuntime) {
|
|
84
|
+
context->_callInvoker = sMainInvoker;
|
|
85
|
+
}
|
|
67
86
|
}
|
|
68
|
-
auto data = std::make_shared<RuntimeData>();
|
|
69
|
-
data->context = context;
|
|
70
|
-
runtime.setRuntimeData(runtimeDataUUID(), data);
|
|
71
87
|
return context;
|
|
72
88
|
}
|
|
73
89
|
|
|
@@ -173,7 +189,7 @@ void RuntimeContext::tick() {
|
|
|
173
189
|
{
|
|
174
190
|
// Serialize ProcessEvents across runtimes sharing this instance. Callbacks
|
|
175
191
|
// fired here only deposit into mailboxes (postSettle), they do not run JS.
|
|
176
|
-
std::lock_guard<std::mutex> lock(
|
|
192
|
+
std::lock_guard<std::mutex> lock(*_processEventsMutex);
|
|
177
193
|
_instance.ProcessEvents();
|
|
178
194
|
}
|
|
179
195
|
// Settle this runtime's ready promises on this thread, outside the pump lock.
|
|
@@ -22,11 +22,14 @@ class CallInvoker;
|
|
|
22
22
|
namespace rnwgpu::async {
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
* Per-runtime coordinator for asynchronous WebGPU operations.
|
|
25
|
+
* Per-runtime, per-instance coordinator for asynchronous WebGPU operations.
|
|
26
26
|
*
|
|
27
|
-
* Each JS runtime
|
|
28
|
-
* runtime's runtimeData.
|
|
29
|
-
*
|
|
27
|
+
* Each (JS runtime, Dawn instance) pair gets its own RuntimeContext, stored in
|
|
28
|
+
* the runtime's runtimeData. A runtime usually has a single one, for the
|
|
29
|
+
* shared WebGPURuntime instance; a device passed to importDevice() can live on
|
|
30
|
+
* another instance, which then gets its own context and pump. Async Dawn
|
|
31
|
+
* operations are registered with CallbackMode::AllowProcessEvents and driven
|
|
32
|
+
* to completion by pumping
|
|
30
33
|
* `instance.ProcessEvents()` on the runtime's OWN thread via a self-
|
|
31
34
|
* rescheduling tick (scheduled through that runtime's setTimeout). Because
|
|
32
35
|
* ProcessEvents invokes the Dawn callbacks synchronously on the pumping thread,
|
|
@@ -56,8 +59,9 @@ namespace rnwgpu::async {
|
|
|
56
59
|
* deposits a settle-action (a plain C++ closure, no JSI) into the OWNING
|
|
57
60
|
* context's thread-safe mailbox via postSettle(), and each context drains its
|
|
58
61
|
* own mailbox on its own thread during tick(). ProcessEvents() itself is
|
|
59
|
-
* serialized across runtimes by a
|
|
60
|
-
* ProcessEvents on one instance is not guaranteed reentrant
|
|
62
|
+
* serialized across the runtimes sharing an instance by a mutex per instance,
|
|
63
|
+
* since concurrent ProcessEvents on one instance is not guaranteed reentrant;
|
|
64
|
+
* pumps of different instances never wait on each other.
|
|
61
65
|
*
|
|
62
66
|
* Threading contract: a RuntimeContext must only be pumped from the runtime it
|
|
63
67
|
* was created for. Request/response async entry points (mapAsync,
|
|
@@ -78,9 +82,10 @@ public:
|
|
|
78
82
|
|
|
79
83
|
RuntimeContext(jsi::Runtime &runtime, wgpu::Instance instance);
|
|
80
84
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
// The calling runtime's context for `instance`, created on first use and
|
|
86
|
+
// kept in the runtime's runtimeData for the runtime's lifetime.
|
|
87
|
+
static std::shared_ptr<RuntimeContext>
|
|
88
|
+
getOrCreate(jsi::Runtime &runtime, const wgpu::Instance &instance);
|
|
84
89
|
|
|
85
90
|
// Register the main JS runtime and its CallInvoker. The RuntimeContext
|
|
86
91
|
// created for this runtime gets the invoker (callInvoker() returns it); every
|
|
@@ -97,8 +102,8 @@ public:
|
|
|
97
102
|
return _callInvoker;
|
|
98
103
|
}
|
|
99
104
|
|
|
100
|
-
// The wgpu::Instance
|
|
101
|
-
wgpu::Instance instance() const { return _instance; }
|
|
105
|
+
// The wgpu::Instance served by this context on its owning runtime.
|
|
106
|
+
const wgpu::Instance &instance() const { return _instance; }
|
|
102
107
|
|
|
103
108
|
// The runtime this context belongs to. Safe for pointer-identity checks from
|
|
104
109
|
// any thread; only touch JSI through it on the runtime's own thread.
|
|
@@ -126,6 +131,9 @@ private:
|
|
|
126
131
|
|
|
127
132
|
jsi::Runtime &_runtime;
|
|
128
133
|
wgpu::Instance _instance;
|
|
134
|
+
// Serializes ProcessEvents() on _instance across the runtimes that share it;
|
|
135
|
+
// every context of that instance holds the same mutex.
|
|
136
|
+
std::shared_ptr<std::mutex> _processEventsMutex;
|
|
129
137
|
// Non-null only for the main JS runtime's context (see registerMainRuntime).
|
|
130
138
|
std::shared_ptr<facebook::react::CallInvoker> _callInvoker;
|
|
131
139
|
std::atomic<std::size_t> _pumpTasks{0};
|
package/lib/commonjs/Canvas.js
CHANGED
|
@@ -10,10 +10,9 @@ var _WebGPUViewNativeComponent = _interopRequireDefault(require("./WebGPUViewNat
|
|
|
10
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
11
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
12
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
13
|
+
// Native hands out the id: it must be unique for the life of the process,
|
|
14
|
+
// not of the JS runtime, as the native surface registry outlives a reload.
|
|
15
|
+
const generateContextId = () => RNWebGPU.allocateContextId();
|
|
17
16
|
|
|
18
17
|
/** The Android view a canvas draws into, see {@link AndroidCanvasProps}. */
|
|
19
18
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_WebGPUViewNativeComponent","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_WebGPUViewNativeComponent","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","generateContextId","RNWebGPU","allocateContextId","options","android","resolveBackingView","backingView","resolveOpaque","opaque","androidNativeProps","zOrderOnTop","zOrderMediaOverlay","surfaceView","androidBackingView","androidOpaque","androidZOrderOnTop","androidZOrderMediaOverlay","warnIgnoredChange","prop","console","warn","useBackingViewWarning","mount","useRef","prev","useEffect","__DEV__","Platform","OS","current","Number","Version","before","zOrderAtMount","was","is","measureLayout","view","clientWidth","clientHeight","width","height","size","_left","_top","Canvas","ref","props","viewRef","contextId","_","useState","destroyContext","useImperativeHandle","getContextId","getNativeSurface","getContext","contextName","Error","MakeWebGPUCanvasContext","createElement","View","collapsable","style","flex","exports"],"sourceRoot":"../../src","sources":["Canvas.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -46,9 +46,11 @@ function makeWebGPUCanvasContext(contextId, width, height) {
|
|
|
46
46
|
present: () => {}
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
|
+
let nextContextId = 1;
|
|
49
50
|
|
|
50
51
|
// @ts-expect-error - polyfill for RNWebGPU native module
|
|
51
52
|
window.RNWebGPU = {
|
|
53
|
+
allocateContextId: () => nextContextId++,
|
|
52
54
|
getNativeSurface,
|
|
53
55
|
// Unlike native, this can return null; Canvas.getContext() is typed
|
|
54
56
|
// `RNCanvasContext | null` and passes it through.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_utils","require","fabric","getNativeSurface","contextId","canvas","document","getElementById","contextIdToId","clientHeight","height","clientWidth","width","surface","BigInt","addEventListener","bind","removeEventListener","dispatchEvent","setPointerCapture","releasePointerCapture","makeWebGPUCanvasContext","dpr","window","devicePixelRatio","pixelWidth","toString","pixelHeight","getAttribute","setAttribute","context","getContext","Object","assign","present","RNWebGPU","MakeWebGPUCanvasContext","destroyContext","_contextId"],"sourceRoot":"../../src","sources":["WebPolyfillGPUModule.ts"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,MAAMC,MAAM,GAAG,IAAI;AAEnB,SAASC,gBAAgBA,CAACC,SAAiB,EAAE;EAC3C,MAAMC,MAAM,GAAGC,QAAQ,CAACC,cAAc,CACpC,IAAAC,oBAAa,EAACJ,SAAS,CACzB,CAAsB;;EAEtB;EACA;EACA,MAAM;IAAEK,YAAY,EAAEC,MAAM;IAAEC,WAAW,EAAEC;EAAM,CAAC,GAAGP,MAAM;EAE3D,OAAO;IACLQ,OAAO,EAAEC,MAAM,CAACV,SAAS,CAAC;IAC1BM,MAAM;IACNE,KAAK;IACLH,YAAY,EAAEC,MAAM;IACpBC,WAAW,EAAEC,KAAK;IAClB;IACAG,gBAAgB,EAAEV,MAAM,CAACU,gBAAgB,CAACC,IAAI,CAACX,MAAM,CAAC;IACtDY,mBAAmB,EAAEZ,MAAM,CAACY,mBAAmB,CAACD,IAAI,CAACX,MAAM,CAAC;IAC5Da,aAAa,EAAEb,MAAM,CAACa,aAAa,CAACF,IAAI,CAACX,MAAM,CAAC;IAChDc,iBAAiB,EAAEd,MAAM,CAACc,iBAAiB,CAACH,IAAI,CAACX,MAAM,CAAC;IACxDe,qBAAqB,EAAEf,MAAM,CAACe,qBAAqB,CAACJ,IAAI,CAACX,MAAM;EACjE,CAAC;AACH;AAEA,SAASgB,uBAAuBA,CAC9BjB,SAAiB,EACjBQ,KAAa,EACbF,MAAc,EACd;EACA,MAAML,MAAM,GAAGC,QAAQ,CAACC,cAAc,CACpC,IAAAC,oBAAa,EAACJ,SAAS,CACzB,CAAsB;EAEtB,MAAMkB,GAAG,GAAGC,MAAM,CAACC,gBAAgB,IAAI,CAAC;EACxC,MAAMC,UAAU,GAAG,CAACb,KAAK,GAAGU,GAAG,EAAEI,QAAQ,CAAC,CAAC;EAC3C,MAAMC,WAAW,GAAG,CAACjB,MAAM,GAAGY,GAAG,EAAEI,QAAQ,CAAC,CAAC;EAE7C,IACErB,MAAM,CAACuB,YAAY,CAAC,OAAO,CAAC,KAAKH,UAAU,IAC3CpB,MAAM,CAACuB,YAAY,CAAC,QAAQ,CAAC,KAAKD,WAAW,EAC7C;IACAtB,MAAM,CAACwB,YAAY,CAAC,OAAO,EAAEJ,UAAU,CAAC;IACxCpB,MAAM,CAACwB,YAAY,CAAC,QAAQ,EAAEF,WAAW,CAAC;EAC5C;EAEA,MAAMG,OAAO,GAAGzB,MAAM,CAAC0B,UAAU,CAAC,QAAQ,CAAC;EAC3C;EACA;EACA,IAAI,CAACD,OAAO,EAAE;IACZ,OAAO,IAAI;EACb;EACA;EACA;EACA,OAAOE,MAAM,CAACC,MAAM,CAACH,OAAO,EAAE;IAAEI,OAAO,EAAEA,CAAA,KAAM,CAAC;EAAE,CAAC,CAAC;AACtD;;
|
|
1
|
+
{"version":3,"names":["_utils","require","fabric","getNativeSurface","contextId","canvas","document","getElementById","contextIdToId","clientHeight","height","clientWidth","width","surface","BigInt","addEventListener","bind","removeEventListener","dispatchEvent","setPointerCapture","releasePointerCapture","makeWebGPUCanvasContext","dpr","window","devicePixelRatio","pixelWidth","toString","pixelHeight","getAttribute","setAttribute","context","getContext","Object","assign","present","nextContextId","RNWebGPU","allocateContextId","MakeWebGPUCanvasContext","destroyContext","_contextId"],"sourceRoot":"../../src","sources":["WebPolyfillGPUModule.ts"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,MAAMC,MAAM,GAAG,IAAI;AAEnB,SAASC,gBAAgBA,CAACC,SAAiB,EAAE;EAC3C,MAAMC,MAAM,GAAGC,QAAQ,CAACC,cAAc,CACpC,IAAAC,oBAAa,EAACJ,SAAS,CACzB,CAAsB;;EAEtB;EACA;EACA,MAAM;IAAEK,YAAY,EAAEC,MAAM;IAAEC,WAAW,EAAEC;EAAM,CAAC,GAAGP,MAAM;EAE3D,OAAO;IACLQ,OAAO,EAAEC,MAAM,CAACV,SAAS,CAAC;IAC1BM,MAAM;IACNE,KAAK;IACLH,YAAY,EAAEC,MAAM;IACpBC,WAAW,EAAEC,KAAK;IAClB;IACAG,gBAAgB,EAAEV,MAAM,CAACU,gBAAgB,CAACC,IAAI,CAACX,MAAM,CAAC;IACtDY,mBAAmB,EAAEZ,MAAM,CAACY,mBAAmB,CAACD,IAAI,CAACX,MAAM,CAAC;IAC5Da,aAAa,EAAEb,MAAM,CAACa,aAAa,CAACF,IAAI,CAACX,MAAM,CAAC;IAChDc,iBAAiB,EAAEd,MAAM,CAACc,iBAAiB,CAACH,IAAI,CAACX,MAAM,CAAC;IACxDe,qBAAqB,EAAEf,MAAM,CAACe,qBAAqB,CAACJ,IAAI,CAACX,MAAM;EACjE,CAAC;AACH;AAEA,SAASgB,uBAAuBA,CAC9BjB,SAAiB,EACjBQ,KAAa,EACbF,MAAc,EACd;EACA,MAAML,MAAM,GAAGC,QAAQ,CAACC,cAAc,CACpC,IAAAC,oBAAa,EAACJ,SAAS,CACzB,CAAsB;EAEtB,MAAMkB,GAAG,GAAGC,MAAM,CAACC,gBAAgB,IAAI,CAAC;EACxC,MAAMC,UAAU,GAAG,CAACb,KAAK,GAAGU,GAAG,EAAEI,QAAQ,CAAC,CAAC;EAC3C,MAAMC,WAAW,GAAG,CAACjB,MAAM,GAAGY,GAAG,EAAEI,QAAQ,CAAC,CAAC;EAE7C,IACErB,MAAM,CAACuB,YAAY,CAAC,OAAO,CAAC,KAAKH,UAAU,IAC3CpB,MAAM,CAACuB,YAAY,CAAC,QAAQ,CAAC,KAAKD,WAAW,EAC7C;IACAtB,MAAM,CAACwB,YAAY,CAAC,OAAO,EAAEJ,UAAU,CAAC;IACxCpB,MAAM,CAACwB,YAAY,CAAC,QAAQ,EAAEF,WAAW,CAAC;EAC5C;EAEA,MAAMG,OAAO,GAAGzB,MAAM,CAAC0B,UAAU,CAAC,QAAQ,CAAC;EAC3C;EACA;EACA,IAAI,CAACD,OAAO,EAAE;IACZ,OAAO,IAAI;EACb;EACA;EACA;EACA,OAAOE,MAAM,CAACC,MAAM,CAACH,OAAO,EAAE;IAAEI,OAAO,EAAEA,CAAA,KAAM,CAAC;EAAE,CAAC,CAAC;AACtD;AAEA,IAAIC,aAAa,GAAG,CAAC;;AAErB;AACAZ,MAAM,CAACa,QAAQ,GAAG;EAChBC,iBAAiB,EAAEA,CAAA,KAAMF,aAAa,EAAE;EACxChC,gBAAgB;EAChB;EACA;EACAmC,uBAAuB,EACrBjB,uBAAkE;EACpE;EACAkB,cAAc,EAAGC,UAAkB,IAAK,CAAC,CAAC;EAC1CtC;AACF,CAAC","ignoreList":[]}
|
|
@@ -15,8 +15,9 @@ exports.importDevice = exports.adoptTexture = void 0;
|
|
|
15
15
|
* ```
|
|
16
16
|
*
|
|
17
17
|
* This is only sound when the exporting library links the same single Dawn
|
|
18
|
-
* copy as react-native-webgpu
|
|
19
|
-
*
|
|
18
|
+
* copy as react-native-webgpu (react-native-skia does). The device stays on
|
|
19
|
+
* its owner's Dawn instance and its async operations are pumped there, so the
|
|
20
|
+
* two libraries do not have to share an instance.
|
|
20
21
|
*/
|
|
21
22
|
const importDevice = pointer => {
|
|
22
23
|
if (typeof RNWebGPU === "undefined") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["importDevice","pointer","RNWebGPU","Error","exports","adoptTexture"],"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;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVAG,OAAA,CAAAJ,YAAA,GAAAA,YAAA;AAWO,MAAMK,YAAY,GAAIJ,OAAe,IAAiB;EAC3D,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;IACnC,MAAM,IAAIC,KAAK,CACb,4EACF,CAAC;EACH;EACA,OAAOD,QAAQ,CAACG,YAAY,CAACJ,OAAO,CAAC;AACvC,CAAC;AAACG,OAAA,CAAAC,YAAA,GAAAA,YAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["importDevice","pointer","RNWebGPU","Error","exports","adoptTexture"],"sourceRoot":"../../src","sources":["importDevice.ts"],"mappings":";;;;;;AAAA;AACA;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;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVAG,OAAA,CAAAJ,YAAA,GAAAA,YAAA;AAWO,MAAMK,YAAY,GAAIJ,OAAe,IAAiB;EAC3D,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;IACnC,MAAM,IAAIC,KAAK,CACb,4EACF,CAAC;EACH;EACA,OAAOD,QAAQ,CAACG,YAAY,CAACJ,OAAO,CAAC;AACvC,CAAC;AAACG,OAAA,CAAAC,YAAA,GAAAA,YAAA","ignoreList":[]}
|
package/lib/module/Canvas.js
CHANGED
|
@@ -2,10 +2,9 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
|
|
|
2
2
|
import React, { useEffect, useImperativeHandle, useRef, useState } from "react";
|
|
3
3
|
import { Platform, View } from "react-native";
|
|
4
4
|
import WebGPUNativeView from "./WebGPUViewNativeComponent";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
5
|
+
// Native hands out the id: it must be unique for the life of the process,
|
|
6
|
+
// not of the JS runtime, as the native surface registry outlives a reload.
|
|
7
|
+
const generateContextId = () => RNWebGPU.allocateContextId();
|
|
9
8
|
|
|
10
9
|
/** The Android view a canvas draws into, see {@link AndroidCanvasProps}. */
|
|
11
10
|
|
package/lib/module/Canvas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useImperativeHandle","useRef","useState","Platform","View","WebGPUNativeView","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useImperativeHandle","useRef","useState","Platform","View","WebGPUNativeView","generateContextId","RNWebGPU","allocateContextId","options","android","resolveBackingView","backingView","resolveOpaque","opaque","androidNativeProps","zOrderOnTop","zOrderMediaOverlay","surfaceView","androidBackingView","androidOpaque","androidZOrderOnTop","androidZOrderMediaOverlay","warnIgnoredChange","prop","console","warn","useBackingViewWarning","mount","prev","__DEV__","OS","current","Number","Version","before","zOrderAtMount","was","is","measureLayout","view","clientWidth","clientHeight","width","height","size","_left","_top","Canvas","ref","props","viewRef","contextId","_","destroyContext","getContextId","getNativeSurface","getContext","contextName","Error","MakeWebGPUCanvasContext","createElement","_extends","collapsable","style","flex"],"sourceRoot":"../../src","sources":["Canvas.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -44,9 +44,11 @@ function makeWebGPUCanvasContext(contextId, width, height) {
|
|
|
44
44
|
present: () => {}
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
|
+
let nextContextId = 1;
|
|
47
48
|
|
|
48
49
|
// @ts-expect-error - polyfill for RNWebGPU native module
|
|
49
50
|
window.RNWebGPU = {
|
|
51
|
+
allocateContextId: () => nextContextId++,
|
|
50
52
|
getNativeSurface,
|
|
51
53
|
// Unlike native, this can return null; Canvas.getContext() is typed
|
|
52
54
|
// `RNCanvasContext | null` and passes it through.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["contextIdToId","fabric","getNativeSurface","contextId","canvas","document","getElementById","clientHeight","height","clientWidth","width","surface","BigInt","addEventListener","bind","removeEventListener","dispatchEvent","setPointerCapture","releasePointerCapture","makeWebGPUCanvasContext","dpr","window","devicePixelRatio","pixelWidth","toString","pixelHeight","getAttribute","setAttribute","context","getContext","Object","assign","present","RNWebGPU","MakeWebGPUCanvasContext","destroyContext","_contextId"],"sourceRoot":"../../src","sources":["WebPolyfillGPUModule.ts"],"mappings":"AAAA,SAASA,aAAa,QAAQ,SAAS;AAEvC,MAAMC,MAAM,GAAG,IAAI;AAEnB,SAASC,gBAAgBA,CAACC,SAAiB,EAAE;EAC3C,MAAMC,MAAM,GAAGC,QAAQ,CAACC,cAAc,CACpCN,aAAa,CAACG,SAAS,CACzB,CAAsB;;EAEtB;EACA;EACA,MAAM;IAAEI,YAAY,EAAEC,MAAM;IAAEC,WAAW,EAAEC;EAAM,CAAC,GAAGN,MAAM;EAE3D,OAAO;IACLO,OAAO,EAAEC,MAAM,CAACT,SAAS,CAAC;IAC1BK,MAAM;IACNE,KAAK;IACLH,YAAY,EAAEC,MAAM;IACpBC,WAAW,EAAEC,KAAK;IAClB;IACAG,gBAAgB,EAAET,MAAM,CAACS,gBAAgB,CAACC,IAAI,CAACV,MAAM,CAAC;IACtDW,mBAAmB,EAAEX,MAAM,CAACW,mBAAmB,CAACD,IAAI,CAACV,MAAM,CAAC;IAC5DY,aAAa,EAAEZ,MAAM,CAACY,aAAa,CAACF,IAAI,CAACV,MAAM,CAAC;IAChDa,iBAAiB,EAAEb,MAAM,CAACa,iBAAiB,CAACH,IAAI,CAACV,MAAM,CAAC;IACxDc,qBAAqB,EAAEd,MAAM,CAACc,qBAAqB,CAACJ,IAAI,CAACV,MAAM;EACjE,CAAC;AACH;AAEA,SAASe,uBAAuBA,CAC9BhB,SAAiB,EACjBO,KAAa,EACbF,MAAc,EACd;EACA,MAAMJ,MAAM,GAAGC,QAAQ,CAACC,cAAc,CACpCN,aAAa,CAACG,SAAS,CACzB,CAAsB;EAEtB,MAAMiB,GAAG,GAAGC,MAAM,CAACC,gBAAgB,IAAI,CAAC;EACxC,MAAMC,UAAU,GAAG,CAACb,KAAK,GAAGU,GAAG,EAAEI,QAAQ,CAAC,CAAC;EAC3C,MAAMC,WAAW,GAAG,CAACjB,MAAM,GAAGY,GAAG,EAAEI,QAAQ,CAAC,CAAC;EAE7C,IACEpB,MAAM,CAACsB,YAAY,CAAC,OAAO,CAAC,KAAKH,UAAU,IAC3CnB,MAAM,CAACsB,YAAY,CAAC,QAAQ,CAAC,KAAKD,WAAW,EAC7C;IACArB,MAAM,CAACuB,YAAY,CAAC,OAAO,EAAEJ,UAAU,CAAC;IACxCnB,MAAM,CAACuB,YAAY,CAAC,QAAQ,EAAEF,WAAW,CAAC;EAC5C;EAEA,MAAMG,OAAO,GAAGxB,MAAM,CAACyB,UAAU,CAAC,QAAQ,CAAC;EAC3C;EACA;EACA,IAAI,CAACD,OAAO,EAAE;IACZ,OAAO,IAAI;EACb;EACA;EACA;EACA,OAAOE,MAAM,CAACC,MAAM,CAACH,OAAO,EAAE;IAAEI,OAAO,EAAEA,CAAA,KAAM,CAAC;EAAE,CAAC,CAAC;AACtD;;
|
|
1
|
+
{"version":3,"names":["contextIdToId","fabric","getNativeSurface","contextId","canvas","document","getElementById","clientHeight","height","clientWidth","width","surface","BigInt","addEventListener","bind","removeEventListener","dispatchEvent","setPointerCapture","releasePointerCapture","makeWebGPUCanvasContext","dpr","window","devicePixelRatio","pixelWidth","toString","pixelHeight","getAttribute","setAttribute","context","getContext","Object","assign","present","nextContextId","RNWebGPU","allocateContextId","MakeWebGPUCanvasContext","destroyContext","_contextId"],"sourceRoot":"../../src","sources":["WebPolyfillGPUModule.ts"],"mappings":"AAAA,SAASA,aAAa,QAAQ,SAAS;AAEvC,MAAMC,MAAM,GAAG,IAAI;AAEnB,SAASC,gBAAgBA,CAACC,SAAiB,EAAE;EAC3C,MAAMC,MAAM,GAAGC,QAAQ,CAACC,cAAc,CACpCN,aAAa,CAACG,SAAS,CACzB,CAAsB;;EAEtB;EACA;EACA,MAAM;IAAEI,YAAY,EAAEC,MAAM;IAAEC,WAAW,EAAEC;EAAM,CAAC,GAAGN,MAAM;EAE3D,OAAO;IACLO,OAAO,EAAEC,MAAM,CAACT,SAAS,CAAC;IAC1BK,MAAM;IACNE,KAAK;IACLH,YAAY,EAAEC,MAAM;IACpBC,WAAW,EAAEC,KAAK;IAClB;IACAG,gBAAgB,EAAET,MAAM,CAACS,gBAAgB,CAACC,IAAI,CAACV,MAAM,CAAC;IACtDW,mBAAmB,EAAEX,MAAM,CAACW,mBAAmB,CAACD,IAAI,CAACV,MAAM,CAAC;IAC5DY,aAAa,EAAEZ,MAAM,CAACY,aAAa,CAACF,IAAI,CAACV,MAAM,CAAC;IAChDa,iBAAiB,EAAEb,MAAM,CAACa,iBAAiB,CAACH,IAAI,CAACV,MAAM,CAAC;IACxDc,qBAAqB,EAAEd,MAAM,CAACc,qBAAqB,CAACJ,IAAI,CAACV,MAAM;EACjE,CAAC;AACH;AAEA,SAASe,uBAAuBA,CAC9BhB,SAAiB,EACjBO,KAAa,EACbF,MAAc,EACd;EACA,MAAMJ,MAAM,GAAGC,QAAQ,CAACC,cAAc,CACpCN,aAAa,CAACG,SAAS,CACzB,CAAsB;EAEtB,MAAMiB,GAAG,GAAGC,MAAM,CAACC,gBAAgB,IAAI,CAAC;EACxC,MAAMC,UAAU,GAAG,CAACb,KAAK,GAAGU,GAAG,EAAEI,QAAQ,CAAC,CAAC;EAC3C,MAAMC,WAAW,GAAG,CAACjB,MAAM,GAAGY,GAAG,EAAEI,QAAQ,CAAC,CAAC;EAE7C,IACEpB,MAAM,CAACsB,YAAY,CAAC,OAAO,CAAC,KAAKH,UAAU,IAC3CnB,MAAM,CAACsB,YAAY,CAAC,QAAQ,CAAC,KAAKD,WAAW,EAC7C;IACArB,MAAM,CAACuB,YAAY,CAAC,OAAO,EAAEJ,UAAU,CAAC;IACxCnB,MAAM,CAACuB,YAAY,CAAC,QAAQ,EAAEF,WAAW,CAAC;EAC5C;EAEA,MAAMG,OAAO,GAAGxB,MAAM,CAACyB,UAAU,CAAC,QAAQ,CAAC;EAC3C;EACA;EACA,IAAI,CAACD,OAAO,EAAE;IACZ,OAAO,IAAI;EACb;EACA;EACA;EACA,OAAOE,MAAM,CAACC,MAAM,CAACH,OAAO,EAAE;IAAEI,OAAO,EAAEA,CAAA,KAAM,CAAC;EAAE,CAAC,CAAC;AACtD;AAEA,IAAIC,aAAa,GAAG,CAAC;;AAErB;AACAZ,MAAM,CAACa,QAAQ,GAAG;EAChBC,iBAAiB,EAAEA,CAAA,KAAMF,aAAa,EAAE;EACxC/B,gBAAgB;EAChB;EACA;EACAkC,uBAAuB,EACrBjB,uBAAkE;EACpE;EACAkB,cAAc,EAAGC,UAAkB,IAAK,CAAC,CAAC;EAC1CrC;AACF,CAAC","ignoreList":[]}
|
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* ```
|
|
10
10
|
*
|
|
11
11
|
* This is only sound when the exporting library links the same single Dawn
|
|
12
|
-
* copy as react-native-webgpu
|
|
13
|
-
*
|
|
12
|
+
* copy as react-native-webgpu (react-native-skia does). The device stays on
|
|
13
|
+
* its owner's Dawn instance and its async operations are pumped there, so the
|
|
14
|
+
* two libraries do not have to share an instance.
|
|
14
15
|
*/
|
|
15
16
|
export const importDevice = pointer => {
|
|
16
17
|
if (typeof RNWebGPU === "undefined") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["importDevice","pointer","RNWebGPU","Error","adoptTexture"],"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;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMG,YAAY,GAAIH,OAAe,IAAiB;EAC3D,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;IACnC,MAAM,IAAIC,KAAK,CACb,4EACF,CAAC;EACH;EACA,OAAOD,QAAQ,CAACE,YAAY,CAACH,OAAO,CAAC;AACvC,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["importDevice","pointer","RNWebGPU","Error","adoptTexture"],"sourceRoot":"../../src","sources":["importDevice.ts"],"mappings":"AAAA;AACA;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;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMG,YAAY,GAAIH,OAAe,IAAiB;EAC3D,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;IACnC,MAAM,IAAIC,KAAK,CACb,4EACF,CAAC;EACH;EACA,OAAOD,QAAQ,CAACE,YAAY,CAACH,OAAO,CAAC;AACvC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../commonjs/Canvas.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../commonjs/Canvas.js"],"names":[],"mappings":";AAoJA;;;;QA8CC"}
|
|
@@ -10,8 +10,9 @@ export const __esModule: boolean;
|
|
|
10
10
|
* ```
|
|
11
11
|
*
|
|
12
12
|
* This is only sound when the exporting library links the same single Dawn
|
|
13
|
-
* copy as react-native-webgpu
|
|
14
|
-
*
|
|
13
|
+
* copy as react-native-webgpu (react-native-skia does). The device stays on
|
|
14
|
+
* its owner's Dawn instance and its async operations are pumped there, so the
|
|
15
|
+
* two libraries do not have to share an instance.
|
|
15
16
|
*/
|
|
16
17
|
export function importDevice(pointer: any): GPUDevice;
|
|
17
18
|
export function adoptTexture(pointer: any): GPUTexture;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importDevice.d.ts","sourceRoot":"","sources":["../../../commonjs/importDevice.js"],"names":[],"mappings":";AAMA
|
|
1
|
+
{"version":3,"file":"importDevice.d.ts","sourceRoot":"","sources":["../../../commonjs/importDevice.js"],"names":[],"mappings":";AAMA;;;;;;;;;;;;;;GAcG;AACH,sDAKC;AAcD,uDAKC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../module/Canvas.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../module/Canvas.js"],"names":[],"mappings":"AA4IO;;;;2DA8CN;qBAxL8B,cAAc;kBAD2B,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importDevice.d.ts","sourceRoot":"","sources":["../../../module/importDevice.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"importDevice.d.ts","sourceRoot":"","sources":["../../../module/importDevice.js"],"names":[],"mappings":"AAeO,sDAKN;AAaM,uDAKN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../src/Canvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,SAAS,CAAC;AAG1D,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../src/Canvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,SAAS,CAAC;AAG1D,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAMxE,4EAA4E;AAC5E,MAAM,MAAM,kBAAkB,GAC5B,aAAa,GAAG,aAAa,GAAG,oBAAoB,CAAC;AAEvD,sEAAsE;AACtE,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,yDAAyD;AACzD,MAAM,WAAW,uBAAuB;IACtC;;;;;OAKG;IACH,WAAW,EAAE,aAAa,CAAC;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,gEAAgE;AAChE,MAAM,WAAW,8BAA8B;IAC7C;;;;;OAKG;IACH,WAAW,EAAE,oBAAoB,CAAC;CACnC;AAED;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAC1B,uBAAuB,GACvB,uBAAuB,GACvB,8BAA8B,CAAC;AAEnC,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C;;;OAGG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;CAC5B;AAgID,eAAO,MAAM,MAAM,GAAI,4BAA4B,WAAW,sBAmD7D,CAAC"}
|
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* ```
|
|
10
10
|
*
|
|
11
11
|
* This is only sound when the exporting library links the same single Dawn
|
|
12
|
-
* copy as react-native-webgpu
|
|
13
|
-
*
|
|
12
|
+
* copy as react-native-webgpu (react-native-skia does). The device stays on
|
|
13
|
+
* its owner's Dawn instance and its async operations are pumped there, so the
|
|
14
|
+
* two libraries do not have to share an instance.
|
|
14
15
|
*/
|
|
15
16
|
export declare const importDevice: (pointer: bigint) => GPUDevice;
|
|
16
17
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importDevice.d.ts","sourceRoot":"","sources":["../../../src/importDevice.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"importDevice.d.ts","sourceRoot":"","sources":["../../../src/importDevice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,SAO9C,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,UAO9C,CAAC"}
|
|
@@ -12,8 +12,10 @@ declare global {
|
|
|
12
12
|
var RNWebGPU: {
|
|
13
13
|
gpu: GPU;
|
|
14
14
|
fabric: boolean;
|
|
15
|
+
allocateContextId: () => number;
|
|
15
16
|
getNativeSurface: (contextId: number) => NativeCanvas;
|
|
16
17
|
MakeWebGPUCanvasContext: (contextId: number, width: number, height: number) => RNCanvasContext;
|
|
18
|
+
MakeWebGPUCanvasContextFromNativeWindow: (window: bigint, width: number, height: number) => RNCanvasContext;
|
|
17
19
|
destroyContext: (contextId: number) => void;
|
|
18
20
|
DecodeToUTF8: (buffer: NodeJS.ArrayBufferView | ArrayBuffer) => string;
|
|
19
21
|
createImageBitmap: typeof createImageBitmap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAQA,OAAO,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACV,8BAA8B,EAC9B,wCAAwC,EACxC,sBAAsB,EACtB,gCAAgC,EAChC,8BAA8B,EAC9B,yBAAyB,EACzB,cAAc,EACd,wBAAwB,EACxB,wBAAwB,EACxB,kCAAkC,EAClC,sBAAsB,EACtB,gCAAgC,EAChC,oCAAoC,EACpC,YAAY,EACZ,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAEjB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,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,oCAAoC,EACpC,wBAAwB,EACxB,kCAAkC,EAClC,0BAA0B,EAC1B,WAAW,EACX,wCAAwC,EACxC,gCAAgC,EAChC,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,8BAA8B,EAC9B,yBAAyB,EACzB,6BAA6B,GAC9B,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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Canvas.tsx
CHANGED
|
@@ -7,10 +7,9 @@ import WebGPUNativeView from "./WebGPUViewNativeComponent";
|
|
|
7
7
|
|
|
8
8
|
export type { CanvasRef, NativeCanvas, RNCanvasContext } from "./types";
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
10
|
+
// Native hands out the id: it must be unique for the life of the process,
|
|
11
|
+
// not of the JS runtime, as the native surface registry outlives a reload.
|
|
12
|
+
const generateContextId = () => RNWebGPU.allocateContextId();
|
|
14
13
|
|
|
15
14
|
/** The Android view a canvas draws into, see {@link AndroidCanvasProps}. */
|
|
16
15
|
export type AndroidBackingView =
|
|
@@ -58,8 +58,11 @@ function makeWebGPUCanvasContext(
|
|
|
58
58
|
return Object.assign(context, { present: () => {} });
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
let nextContextId = 1;
|
|
62
|
+
|
|
61
63
|
// @ts-expect-error - polyfill for RNWebGPU native module
|
|
62
64
|
window.RNWebGPU = {
|
|
65
|
+
allocateContextId: () => nextContextId++,
|
|
63
66
|
getNativeSurface,
|
|
64
67
|
// Unlike native, this can return null; Canvas.getContext() is typed
|
|
65
68
|
// `RNCanvasContext | null` and passes it through.
|
package/src/importDevice.ts
CHANGED
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* ```
|
|
10
10
|
*
|
|
11
11
|
* This is only sound when the exporting library links the same single Dawn
|
|
12
|
-
* copy as react-native-webgpu
|
|
13
|
-
*
|
|
12
|
+
* copy as react-native-webgpu (react-native-skia does). The device stays on
|
|
13
|
+
* its owner's Dawn instance and its async operations are pumped there, so the
|
|
14
|
+
* two libraries do not have to share an instance.
|
|
14
15
|
*/
|
|
15
16
|
export const importDevice = (pointer: bigint): GPUDevice => {
|
|
16
17
|
if (typeof RNWebGPU === "undefined") {
|
package/src/index.tsx
CHANGED
|
@@ -70,12 +70,23 @@ declare global {
|
|
|
70
70
|
var RNWebGPU: {
|
|
71
71
|
gpu: GPU;
|
|
72
72
|
fabric: boolean;
|
|
73
|
+
// The id a Canvas about to mount registers under, unique for the life of
|
|
74
|
+
// the process (the native surface registry outlives a reload).
|
|
75
|
+
allocateContextId: () => number;
|
|
73
76
|
getNativeSurface: (contextId: number) => NativeCanvas;
|
|
74
77
|
MakeWebGPUCanvasContext: (
|
|
75
78
|
contextId: number,
|
|
76
79
|
width: number,
|
|
77
80
|
height: number,
|
|
78
81
|
) => RNCanvasContext;
|
|
82
|
+
// A canvas context presenting to a native window that is not a WebGPU
|
|
83
|
+
// view, e.g. a MediaCodec encoder's input Surface: an ANativeWindow*
|
|
84
|
+
// (Android) or a CAMetalLayer* (Apple).
|
|
85
|
+
MakeWebGPUCanvasContextFromNativeWindow: (
|
|
86
|
+
window: bigint,
|
|
87
|
+
width: number,
|
|
88
|
+
height: number,
|
|
89
|
+
) => RNCanvasContext;
|
|
79
90
|
// Retires a canvas context; called by Canvas on unmount (the Canvas owns
|
|
80
91
|
// the native registry entry for its contextId).
|
|
81
92
|
destroyContext: (contextId: number) => void;
|
|
@@ -97,7 +108,7 @@ declare global {
|
|
|
97
108
|
createVideoFrameFromNativeBuffer: (pointer: bigint) => NativeVideoFrame;
|
|
98
109
|
// Wrap an externally created WGPUDevice pointer (e.g. Skia's Graphite
|
|
99
110
|
// device from Skia.getNativeDevice()) into a GPUDevice. Requires the
|
|
100
|
-
// exporter to
|
|
111
|
+
// exporter to link this process's single Dawn copy.
|
|
101
112
|
importDevice: (pointer: bigint) => GPUDevice;
|
|
102
113
|
// Wrap an externally created WGPUTexture pointer into a GPUTexture,
|
|
103
114
|
// taking ownership of one reference (pair with producers that return a
|