Skip to content

Commit d610488

Browse files
authored
fix(🐛): fix device.popErrorScope (#255)
1 parent 87cc39e commit d610488

7 files changed

Lines changed: 223 additions & 107 deletions

File tree

apps/example/ios/Podfile.lock

Lines changed: 58 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -2213,79 +2213,79 @@ SPEC CHECKSUMS:
22132213
fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd
22142214
glog: 5683914934d5b6e4240e497e0f4a3b42d1854183
22152215
hermes-engine: 314be5250afa5692b57b4dd1705959e1973a8ebe
2216-
RCT-Folly: 36fe2295e44b10d831836cc0d1daec5f8abcf809
2216+
RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82
22172217
RCTDeprecation: 83ffb90c23ee5cea353bd32008a7bca100908f8c
22182218
RCTRequired: eb7c0aba998009f47a540bec9e9d69a54f68136e
22192219
RCTTypeSafety: 659ae318c09de0477fd27bbc9e140071c7ea5c93
22202220
React: c2d3aa44c49bb34e4dfd49d3ee92da5ebacc1c1c
22212221
React-callinvoker: 1bdfb7549b5af266d85757193b5069f60659ef9d
2222-
React-Core: 7150cf9b6a5af063b37003062689f1691e79c020
2223-
React-CoreModules: 15a85e6665d61678942da6ae485b351f4c699049
2224-
React-cxxreact: 74f9de59259ac951923f5726aa14f0398f167af9
2222+
React-Core: 10597593fdbae06f0089881e025a172e51d4a769
2223+
React-CoreModules: 6907b255529dd46895cf687daa67b24484a612c2
2224+
React-cxxreact: a9f5b8180d6955bc3f6a3fcd657c4d9b4d95c1f6
22252225
React-debug: e74e76912b91e08d580c481c34881899ccf63da9
2226-
React-defaultsnativemodule: 628285212bbd65417d40ad6a9f8781830fda6c98
2227-
React-domnativemodule: 185d9808198405c176784aaf33403d713bd24fb7
2228-
React-Fabric: c814804affbe1952e16149ddd20256e1bccae67e
2229-
React-FabricComponents: 81ef47d596966121784afec9924f9562a29b1691
2230-
React-FabricImage: f14f371d678aa557101def954ac3ba27e48948ff
2226+
React-defaultsnativemodule: 11f6ee2cf69bf3af9d0f28a6253def33d21b5266
2227+
React-domnativemodule: f940bbc4fa9e134190acbf3a4a9f95621b5a8f51
2228+
React-Fabric: 6f5c357bf3a42ff11f8844ad3fc7a1eb04f4b9de
2229+
React-FabricComponents: 10e0c0209822ac9e69412913a8af1ca33573379b
2230+
React-FabricImage: f582e764072dfa4715ae8c42979a5bace9cbcc12
22312231
React-featureflags: d5facceff8f8f6de430e0acecf4979a9a0839ba9
2232-
React-featureflagsnativemodule: 96f0ab285382d95c90f663e02526a5ceefa95a11
2233-
React-graphics: 1a66ee0a3f093b125b853f6370296fadcaf6f233
2234-
React-hermes: 8b86e5f54a65ecb69cdf22b3a00a11562eda82d2
2235-
React-idlecallbacksnativemodule: 5c25ab145c602264d00cb26a397ab52e0efa031c
2236-
React-ImageManager: 15e34bd5ef1ac4a18e96660817ef70a7f99ee8c2
2237-
React-jserrorhandler: 02cdf2cd45350108be1ffd2b164578936dbbdff7
2238-
React-jsi: 6af1987cfbb1b6621664fdbf6c7b62bd4d38c923
2239-
React-jsiexecutor: 51f372998e0303585cb0317232b938d694663cbd
2240-
React-jsinspector: 3539ad976d073bfaa8a7d2fa9bef35e70e55033e
2241-
React-jsinspectortracing: e8dbacaf67c201f23052ca1c2bae2f7b84dec443
2242-
React-jsitooling: 95a34f41e3c249d42181de13b4f8d854f178ca9f
2243-
React-jsitracing: 25b029cf5cad488252d46da19dd8c4c134fd5fe4
2244-
React-logger: 368570a253f00879a1e4fea24ed4047e72e7bbf3
2245-
React-Mapbuffer: c04fcda1c6281fc0a6824c7dcc1633dd217ac1ec
2246-
React-microtasksnativemodule: ca2804a25fdcefffa0aa942aa23ab53b99614a34
2247-
react-native-safe-area-context: 00d03dc688ba86664be66f9e3f203fc7d747d899
2248-
react-native-skia: 443d0725a6cbbcce886edb96b591935eb3bc36d8
2249-
react-native-wgpu: 282b5bac022287804e6a7b064f903b4e273c7024
2250-
React-NativeModulesApple: 452b86b29fae99ed0a4015dca3ad9cd222f88abf
2232+
React-featureflagsnativemodule: a7dd141f1ef4b7c1331af0035689fbc742a49ff4
2233+
React-graphics: 36ae3407172c1c77cea29265d2b12b90aaef6aa0
2234+
React-hermes: 9116d4e6d07abeb519a2852672de087f44da8f12
2235+
React-idlecallbacksnativemodule: ae7f5ffc6cf2d2058b007b78248e5b08172ad5c3
2236+
React-ImageManager: 9daee0dc99ad6a001d4b9e691fbf37107e2b7b54
2237+
React-jserrorhandler: 1e6211581071edaf4ecd5303147328120c73f4dc
2238+
React-jsi: 753ba30c902f3a41fa7f956aca8eea3317a44ee6
2239+
React-jsiexecutor: 47520714aa7d9589c51c0f3713dfbfca4895d4f9
2240+
React-jsinspector: cfd27107f6d6f1076a57d88c932401251560fe5f
2241+
React-jsinspectortracing: 76a7d791f3c0c09a0d2bf6f46dfb0e79a4fcc0ac
2242+
React-jsitooling: 995e826570dd58f802251490486ebd3244a037ab
2243+
React-jsitracing: 094ae3d8c123cea67b50211c945b7c0443d3e97b
2244+
React-logger: 8edfcedc100544791cd82692ca5a574240a16219
2245+
React-Mapbuffer: c3f4b608e4a59dd2f6a416ef4d47a14400194468
2246+
React-microtasksnativemodule: 054f34e9b82f02bd40f09cebd4083828b5b2beb6
2247+
react-native-safe-area-context: 562163222d999b79a51577eda2ea8ad2c32b4d06
2248+
react-native-skia: 99362ce77dff006719636c97f16c9713e3ec221e
2249+
react-native-wgpu: 7a147fd65f5ee79c3e722e7aac156250e9d4d065
2250+
React-NativeModulesApple: 2c4377e139522c3d73f5df582e4f051a838ff25e
22512251
React-oscompat: ef5df1c734f19b8003e149317d041b8ce1f7d29c
2252-
React-perflogger: 6fd2f6811533e9c19a61e855c3033eecbf4ad2a0
2253-
React-performancetimeline: abf31259d794c9274b3ea19c5016186925eec6c4
2252+
React-perflogger: 9a151e0b4c933c9205fd648c246506a83f31395d
2253+
React-performancetimeline: 5b0dfc0acba29ea0269ddb34cd6dd59d3b8a1c66
22542254
React-RCTActionSheet: a499b0d6d9793886b67ba3e16046a3fef2cdbbc3
2255-
React-RCTAnimation: 2595dcb10a82216a511b54742f8c28d793852ac6
2256-
React-RCTAppDelegate: f03604b70f57c9469a84a159d8abecf793a5bcff
2257-
React-RCTBlob: e00f9b4e2f151938f4d9864cf33ebf24ac03328a
2258-
React-RCTFabric: 3945d116fd271598db262d4e6ed5691d431ed9e8
2259-
React-RCTFBReactNativeSpec: 0f4d4f0da938101f2ca9d5333a8f46e527ad2819
2260-
React-RCTImage: dac5e9f8ec476aefe6e60ee640ebc1dfaf1a4dbe
2261-
React-RCTLinking: 494b785a40d952a1dfbe712f43214376e5f0e408
2262-
React-RCTNetwork: b3d7c30cd21793e268db107dd0980cb61b3c1c44
2263-
React-RCTRuntime: a8ff419d437228e7b8a793b14f9d711e1cbb82af
2264-
React-RCTSettings: a060c7e381a3896104761b8eed7e284d95e37df3
2265-
React-RCTText: 4f272b72dbb61f390d8c8274528f9fdbff983806
2266-
React-RCTVibration: 0e5326220719aca12473d703aa46693e3b4ce67a
2255+
React-RCTAnimation: cc64adc259aabc3354b73065e2231d796dfce576
2256+
React-RCTAppDelegate: 9d523da768f1c9e84c5f3b7e3624d097dfb0e16b
2257+
React-RCTBlob: e727f53eeefded7e6432eb76bd22b57bc880e5d1
2258+
React-RCTFabric: 58590aa4fdb4ad546c06a7449b486cf6844e991f
2259+
React-RCTFBReactNativeSpec: 9064c63d99e467a3893e328ba3612745c3c3a338
2260+
React-RCTImage: 7159cbdbb18a09d97ba1a611416eced75b3ccb29
2261+
React-RCTLinking: 46293afdb859bccc63e1d3dedc6901a3c04ef360
2262+
React-RCTNetwork: 4a6cd18f5bcd0363657789c64043123a896b1170
2263+
React-RCTRuntime: 5ab904fd749aa52f267ef771d265612582a17880
2264+
React-RCTSettings: 61e361dc85136d1cb0e148b7541993d2ee950ea7
2265+
React-RCTText: abd1e196c3167175e6baef18199c6d9d8ac54b4e
2266+
React-RCTVibration: 490e0dcb01a3fe4a0dfb7bc51ad5856d8b84f343
22672267
React-rendererconsistency: 351fdbc5c1fe4da24243d939094a80f0e149c7a1
2268-
React-renderercss: d333f2ada83969591100d91ec6b23ca2e17e1507
2269-
React-rendererdebug: 039e5949b72ba63c703de020701e3fd152434c61
2268+
React-renderercss: 3438814bee838ae7840a633ab085ac81699fd5cf
2269+
React-rendererdebug: 0ac2b9419ad6f88444f066d4b476180af311fb1e
22702270
React-rncore: 57ed480649bb678d8bdc386d20fee8bf2b0c307c
2271-
React-RuntimeApple: 344a5e1105256000afabaa8df12c3e4cab880340
2272-
React-RuntimeCore: 0e48fb5e5160acc0334c7a723a42d42cef4b58b6
2271+
React-RuntimeApple: 8b7a9788f31548298ba1990620fe06b40de65ad7
2272+
React-RuntimeCore: e03d96fbd57ce69fd9bca8c925942194a5126dbc
22732273
React-runtimeexecutor: d60846710facedd1edb70c08b738119b3ee2c6c2
2274-
React-RuntimeHermes: 064286a03871d932c99738e0f8ef854962ab4b99
2275-
React-runtimescheduler: e917ab17ae08c204af1ebf8f669b7e411b0220c8
2274+
React-RuntimeHermes: aab794755d9f6efd249b61f3af4417296904e3ba
2275+
React-runtimescheduler: c3cd124fa5db7c37f601ee49ca0d97019acd8788
22762276
React-timing: a90f4654cbda9c628614f9bee68967f1768bd6a5
2277-
React-utils: 51c4e71608b8133fecc9a15801d244ae7bdf3758
2278-
ReactAppDependencyProvider: d5dcc564f129632276bd3184e60f053fcd574d6b
2279-
ReactCodegen: c9a256facbe4996140f3fb95c7f03ba61c12acc9
2280-
ReactCommon: 4d0da92a5eb8da86c08e3ec34bd23ab439fb2461
2281-
ReactNativeHost: 2002cc963022a296ef9e85fc7825aa8f62c55ac7
2282-
ReactTestApp-DevSupport: 8f2bfaea9444fcf141b1f694c02d2af51fd6ec1c
2277+
React-utils: a612d50555b6f0f90c74b7d79954019ad47f5de6
2278+
ReactAppDependencyProvider: 04d5eb15eb46be6720e17a4a7fa92940a776e584
2279+
ReactCodegen: 7ea266ccd94436294f516247db7402b57b1214af
2280+
ReactCommon: 76d2dc87136d0a667678668b86f0fca0c16fdeb0
2281+
ReactNativeHost: 86588bac1a403c7a1cdeafc806691b7106b7d1a1
2282+
ReactTestApp-DevSupport: 45d6eeb4188c286d2ebf8f77ff17ee5d66b9f9a4
22832283
ReactTestApp-Resources: 1bd9ff10e4c24f2ad87101a32023721ae923bccf
2284-
RNGestureHandler: 5d8431415d4b8518e86e289e9ad5bb9be78f6dba
2285-
RNReanimated: 44c559bda6bcfa00af5be64f5c26c1b1184b83ca
2284+
RNGestureHandler: ebef699ea17e7c0006c1074e1e423ead60ce0121
2285+
RNReanimated: fa8ba6aacc56dcbe0ebd91b7e6bb796b58588db7
22862286
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
2287-
Yoga: 9f110fc4b7aa538663cba3c14cbb1c335f43c13f
2287+
Yoga: c758bfb934100bb4bf9cbaccb52557cee35e8bdf
22882288

22892289
PODFILE CHECKSUM: b4c1d70c599aba416a49b6bad5eea5084b4e43d0
22902290

2291-
COCOAPODS: 1.15.2
2291+
COCOAPODS: 1.16.2

packages/webgpu/cpp/dawn_logging.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ LogMessage::~LogMessage() {
6565
case LogSeverity::Error: severityName = "Error"; break;
6666
default: severityName = "Unknown"; break;
6767
}
68-
68+
6969
#ifdef __ANDROID__
7070
int androidPriority;
7171
switch (mSeverity) {

packages/webgpu/cpp/rnwgpu/api/AsyncRunner.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class AsyncRunner {
2323
});
2424
}
2525

26-
private:
26+
public:
2727
wgpu::Instance *instance;
2828
};
2929

packages/webgpu/cpp/rnwgpu/api/GPUDevice.cpp

Lines changed: 62 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -279,47 +279,68 @@ void GPUDevice::pushErrorScope(wgpu::ErrorFilter filter) {
279279

280280
std::future<std::variant<std::nullptr_t, std::shared_ptr<GPUError>>>
281281
GPUDevice::popErrorScope() {
282-
return _async->runAsync([=](wgpu::Instance *instance) {
283-
std::variant<std::nullptr_t, std::shared_ptr<GPUError>> result = nullptr;
284-
auto future = _instance.PopErrorScope(
285-
wgpu::CallbackMode::WaitAnyOnly,
286-
[&result](wgpu::PopErrorScopeStatus, wgpu::ErrorType type,
287-
char const *message) {
288-
switch (type) {
289-
case wgpu::ErrorType::NoError:
290-
break;
291-
case wgpu::ErrorType::OutOfMemory: {
292-
result = std::make_shared<GPUError>(wgpu::ErrorType::OutOfMemory,
293-
message);
294-
break;
295-
}
296-
case wgpu::ErrorType::Validation: {
297-
result = std::make_shared<GPUError>(wgpu::ErrorType::Validation,
298-
message);
299-
break;
300-
}
301-
case wgpu::ErrorType::Internal: {
302-
result =
303-
std::make_shared<GPUError>(wgpu::ErrorType::Internal, message);
304-
break;
305-
}
306-
case wgpu::ErrorType::Unknown:
307-
result =
308-
std::make_shared<GPUError>(wgpu::ErrorType::Unknown, message);
309-
break;
310-
default:
311-
throw std::runtime_error(
312-
"unhandled error type (" +
313-
std::to_string(
314-
static_cast<std::underlying_type<wgpu::ErrorType>::type>(
315-
type)) +
316-
")");
317-
break;
318-
}
319-
});
320-
instance->WaitAny(future, UINT64_MAX);
321-
return result;
322-
});
282+
// Create a promise to return a future, but do the work synchronously on main
283+
// thread
284+
auto promise = std::make_shared<
285+
std::promise<std::variant<std::nullptr_t, std::shared_ptr<GPUError>>>>();
286+
auto future = promise->get_future();
287+
288+
std::variant<std::nullptr_t, std::shared_ptr<GPUError>> result = nullptr;
289+
290+
auto wgpu_future = _instance.PopErrorScope(
291+
wgpu::CallbackMode::WaitAnyOnly,
292+
[&result](wgpu::PopErrorScopeStatus status, wgpu::ErrorType type,
293+
wgpu::StringView message) {
294+
switch (status) {
295+
case wgpu::PopErrorScopeStatus::Error:
296+
// PopErrorScope itself failed, e.g. the error scope stack was empty.
297+
return;
298+
case wgpu::PopErrorScopeStatus::CallbackCancelled:
299+
// The instance has been dropped. Shouldn't happen except maybe during
300+
// shutdown.
301+
return;
302+
case wgpu::PopErrorScopeStatus::Success:
303+
// This is the only case where `type` is set to a meaningful value.
304+
break;
305+
}
306+
switch (type) {
307+
case wgpu::ErrorType::NoError:
308+
break;
309+
case wgpu::ErrorType::OutOfMemory: {
310+
result = std::make_shared<GPUError>(wgpu::ErrorType::OutOfMemory,
311+
std::string(message));
312+
break;
313+
}
314+
case wgpu::ErrorType::Validation: {
315+
result = std::make_shared<GPUError>(wgpu::ErrorType::Validation,
316+
std::string(message));
317+
break;
318+
}
319+
case wgpu::ErrorType::Internal: {
320+
result = std::make_shared<GPUError>(wgpu::ErrorType::Internal,
321+
std::string(message));
322+
break;
323+
}
324+
case wgpu::ErrorType::Unknown:
325+
result = std::make_shared<GPUError>(wgpu::ErrorType::Unknown,
326+
std::string(message));
327+
break;
328+
default:
329+
throw std::runtime_error(
330+
"unhandled error type (" +
331+
std::to_string(
332+
static_cast<std::underlying_type<wgpu::ErrorType>::type>(
333+
type)) +
334+
")");
335+
break;
336+
}
337+
});
338+
339+
// Wait synchronously on main thread - both push and pop now on same thread
340+
_async->instance->WaitAny(wgpu_future, UINT64_MAX);
341+
342+
promise->set_value(result);
343+
return future;
323344
}
324345

325346
std::unordered_set<std::string> GPUDevice::getFeatures() {

packages/webgpu/cpp/rnwgpu/api/GPUError.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#pragma once
22

33
#include <memory>
4+
#include <utility>
5+
#include <string>
46

57
#include "webgpu/webgpu_cpp.h"
68

@@ -12,11 +14,11 @@ namespace rnwgpu {
1214
class GPUError {
1315

1416
public:
15-
GPUError(wgpu::ErrorType aType, char const *aMessage)
16-
: type(aType), message(aMessage) {}
17+
GPUError(wgpu::ErrorType aType, std::string aMessage)
18+
: type(aType), message(std::move(aMessage)) {}
1719

1820
wgpu::ErrorType type;
19-
char const *message;
21+
std::string message;
2022
};
2123

2224
} // namespace rnwgpu
@@ -33,8 +35,9 @@ template <> struct JSIConverter<std::shared_ptr<rnwgpu::GPUError>> {
3335
static jsi::Value toJSI(jsi::Runtime &runtime,
3436
std::shared_ptr<rnwgpu::GPUError> arg) {
3537
jsi::Object result(runtime);
36-
result.setProperty(runtime, "message",
37-
jsi::String::createFromUtf8(runtime, arg->message));
38+
result.setProperty(
39+
runtime, "message",
40+
jsi::String::createFromUtf8(runtime, arg->message.c_str()));
3841
return result;
3942
}
4043
};

packages/webgpu/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-wgpu",
3-
"version": "0.2.3",
3+
"version": "0.2.4",
44
"description": "React Native WebGPU",
55
"main": "lib/commonjs/index",
66
"module": "lib/module/index",

0 commit comments

Comments
 (0)