Skip to content

Commit 0ee0559

Browse files
authored
Merge branch 'main' into main
2 parents 04f6e00 + 7589524 commit 0ee0559

25 files changed

+404
-263
lines changed

.github/workflows/build-dawn.yml

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,33 +8,30 @@ jobs:
88
uses: actions/checkout@v2
99
with:
1010
submodules: true
11-
11+
- name: Initialize Dawn's abseil-cpp submodule
12+
run: |
13+
cd externals/dawn
14+
git submodule update --init third_party/abseil-cpp
1215
- name: Setup Android NDK
1316
id: setup-ndk
1417
uses: nttld/setup-ndk@v1
1518
with:
1619
ndk-version: r26d
17-
1820
- name: Set ANDROID_NDK
1921
run: echo "ANDROID_NDK=$ANDROID_HOME/ndk-bundle" >> $GITHUB_ENV
20-
2122
- name: Setup Ninja
2223
uses: seanmiddleditch/gha-setup-ninja@master
23-
2424
- uses: actions/setup-node@v3
2525
with:
2626
cache: 'yarn'
2727
cache-dependency-path: yarn.lock
28-
2928
- name: Install Package
3029
run: yarn install --frozen-lockfile
31-
3230
- name: Build Dawn
3331
working-directory: packages/webgpu
3432
env:
3533
ANDROID_NDK: ${{ steps.setup-ndk.outputs.ndk-path }}
3634
run: yarn build-dawn
37-
3835
- name: Upload artifacts - Dawn Library Files
3936
if: github.ref == 'refs/heads/main'
4037
uses: actions/upload-artifact@v4

.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[submodule "externals/dawn"]
22
path = externals/dawn
33
url = https://dawn.googlesource.com/dawn
4-
branch = chromium/6793
4+
branch = chromium/7213

apps/example/ios/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,7 +1433,7 @@ PODS:
14331433
- ReactCommon/turbomodule/bridging
14341434
- ReactCommon/turbomodule/core
14351435
- Yoga
1436-
- react-native-wgpu (0.1.23):
1436+
- react-native-wgpu (0.2.0):
14371437
- DoubleConversion
14381438
- glog
14391439
- hermes-engine
@@ -2246,7 +2246,7 @@ SPEC CHECKSUMS:
22462246
React-microtasksnativemodule: 054f34e9b82f02bd40f09cebd4083828b5b2beb6
22472247
react-native-safe-area-context: 562163222d999b79a51577eda2ea8ad2c32b4d06
22482248
react-native-skia: 99362ce77dff006719636c97f16c9713e3ec221e
2249-
react-native-wgpu: df332eefb5af27e261fadf5550ef228aaabf279e
2249+
react-native-wgpu: 7590eede723b37674adafbb94f0fd0f2acfa32c5
22502250
React-NativeModulesApple: 2c4377e139522c3d73f5df582e4f051a838ff25e
22512251
React-oscompat: ef5df1c734f19b8003e149317d041b8ce1f7d29c
22522252
React-perflogger: 9a151e0b4c933c9205fd648c246506a83f31395d

externals/dawn

Submodule dawn updated from a690fe4 to 56a4aec
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
#include <sstream>
2+
#include <string>
3+
4+
#ifdef __ANDROID__
5+
#include <android/log.h>
6+
#elif defined(__APPLE__)
7+
#include <os/log.h>
8+
#endif
9+
10+
namespace dawn {
11+
12+
enum class LogSeverity {
13+
Debug,
14+
Info,
15+
Warning,
16+
Error,
17+
};
18+
19+
// Forward declare to match Dawn's exact interface
20+
class LogMessage {
21+
public:
22+
explicit LogMessage(LogSeverity severity);
23+
~LogMessage();
24+
25+
LogMessage(LogMessage&& other);
26+
LogMessage& operator=(LogMessage&& other);
27+
28+
template <typename T>
29+
LogMessage& operator<<(T&& value) {
30+
mStream << value;
31+
return *this;
32+
}
33+
34+
private:
35+
LogMessage(const LogMessage& other) = delete;
36+
LogMessage& operator=(const LogMessage& other) = delete;
37+
38+
LogSeverity mSeverity;
39+
std::ostringstream mStream;
40+
};
41+
42+
// Implementation of LogMessage methods
43+
LogMessage::LogMessage(LogSeverity severity) : mSeverity(severity) {}
44+
45+
LogMessage::LogMessage(LogMessage&& other)
46+
: mSeverity(other.mSeverity), mStream(std::move(other.mStream)) {}
47+
48+
LogMessage& LogMessage::operator=(LogMessage&& other) {
49+
if (this != &other) {
50+
mSeverity = other.mSeverity;
51+
mStream = std::move(other.mStream);
52+
}
53+
return *this;
54+
}
55+
56+
LogMessage::~LogMessage() {
57+
std::string fullMessage = mStream.str();
58+
59+
if (fullMessage.empty()) {
60+
return;
61+
}
62+
63+
const char* severityName;
64+
switch (mSeverity) {
65+
case LogSeverity::Debug: severityName = "Debug"; break;
66+
case LogSeverity::Info: severityName = "Info"; break;
67+
case LogSeverity::Warning: severityName = "Warning"; break;
68+
case LogSeverity::Error: severityName = "Error"; break;
69+
default: severityName = "Unknown"; break;
70+
}
71+
72+
#ifdef __ANDROID__
73+
int androidPriority;
74+
switch (mSeverity) {
75+
case LogSeverity::Debug: androidPriority = ANDROID_LOG_DEBUG; break;
76+
case LogSeverity::Info: androidPriority = ANDROID_LOG_INFO; break;
77+
case LogSeverity::Warning: androidPriority = ANDROID_LOG_WARN; break;
78+
case LogSeverity::Error: androidPriority = ANDROID_LOG_ERROR; break;
79+
default: androidPriority = ANDROID_LOG_ERROR; break;
80+
}
81+
__android_log_print(androidPriority, "ReactNativeWebGPU", "%s: %s", severityName, fullMessage.c_str());
82+
#elif defined(__APPLE__)
83+
os_log_type_t logType;
84+
switch (mSeverity) {
85+
case LogSeverity::Debug: logType = OS_LOG_TYPE_DEBUG; break;
86+
case LogSeverity::Info: logType = OS_LOG_TYPE_INFO; break;
87+
case LogSeverity::Warning: logType = OS_LOG_TYPE_DEFAULT; break;
88+
case LogSeverity::Error: logType = OS_LOG_TYPE_ERROR; break;
89+
default: logType = OS_LOG_TYPE_ERROR; break;
90+
}
91+
os_log_with_type(OS_LOG_DEFAULT, logType, "[ReactNativeWebGPU] %s: %s", severityName, fullMessage.c_str());
92+
#else
93+
FILE* outputStream = (mSeverity == LogSeverity::Warning || mSeverity == LogSeverity::Error) ? stderr : stdout;
94+
fprintf(outputStream, "[ReactNativeWebGPU] %s: %s\n", severityName, fullMessage.c_str());
95+
fflush(outputStream);
96+
#endif
97+
}
98+
99+
// Factory functions
100+
LogMessage DebugLog() {
101+
return LogMessage(LogSeverity::Debug);
102+
}
103+
104+
LogMessage InfoLog() {
105+
return LogMessage(LogSeverity::Info);
106+
}
107+
108+
LogMessage WarningLog() {
109+
return LogMessage(LogSeverity::Warning);
110+
}
111+
112+
LogMessage ErrorLog() {
113+
return LogMessage(LogSeverity::Error);
114+
}
115+
116+
LogMessage DebugLog(const char* file, const char* function, int line) {
117+
LogMessage message = DebugLog();
118+
message << file << ":" << line << "(" << function << ")";
119+
return message;
120+
}
121+
122+
} // namespace dawn

packages/webgpu/cpp/rnwgpu/SurfaceRegistry.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class SurfaceInfo {
3838
config = newConfig;
3939
config.width = width;
4040
config.height = height;
41+
config.presentMode = wgpu::PresentMode::Fifo;
4142
_configure();
4243
}
4344

@@ -83,10 +84,10 @@ class SurfaceInfo {
8384
auto device = config.device;
8485
wgpu::CommandEncoder encoder = device.CreateCommandEncoder(&encoderDesc);
8586

86-
wgpu::ImageCopyTexture sourceTexture = {};
87+
wgpu::TexelCopyTextureInfo sourceTexture = {};
8788
sourceTexture.texture = texture;
8889

89-
wgpu::ImageCopyTexture destinationTexture = {};
90+
wgpu::TexelCopyTextureInfo destinationTexture = {};
9091
wgpu::SurfaceTexture surfaceTexture;
9192
surface.GetCurrentTexture(&surfaceTexture);
9293
destinationTexture.texture = surfaceTexture.texture;

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

Lines changed: 38 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ class Convertor {
309309
Convert(out.label, in.label);
310310
}
311311

312-
[[nodiscard]] bool Convert(wgpu::ComputePassTimestampWrites &out,
312+
[[nodiscard]] bool Convert(wgpu::PassTimestampWrites &out,
313313
const GPUComputePassTimestampWrites &in) {
314314
return Convert(out.querySet, in.querySet) &&
315315
Convert(out.beginningOfPassWriteIndex,
@@ -348,74 +348,70 @@ class Convertor {
348348

349349
if (in.requiredLimits.has_value()) {
350350
const auto &limits = in.requiredLimits.value();
351-
auto *requiredLimits = Allocate<wgpu::RequiredLimits>();
351+
auto *requiredLimits = Allocate<wgpu::Limits>();
352352
for (const auto &[key, value] : limits) {
353353
if (key == "maxTextureDimension1D") {
354-
requiredLimits->limits.maxTextureDimension1D = value;
354+
requiredLimits->maxTextureDimension1D = value;
355355
} else if (key == "maxTextureDimension2D") {
356-
requiredLimits->limits.maxTextureDimension2D = value;
356+
requiredLimits->maxTextureDimension2D = value;
357357
} else if (key == "maxTextureDimension3D") {
358-
requiredLimits->limits.maxTextureDimension3D = value;
358+
requiredLimits->maxTextureDimension3D = value;
359359
} else if (key == "maxTextureArrayLayers") {
360-
requiredLimits->limits.maxTextureArrayLayers = value;
360+
requiredLimits->maxTextureArrayLayers = value;
361361
} else if (key == "maxBindGroups") {
362-
requiredLimits->limits.maxBindGroups = value;
362+
requiredLimits->maxBindGroups = value;
363363
} else if (key == "maxBindGroupsPlusVertexBuffers") {
364-
requiredLimits->limits.maxBindGroupsPlusVertexBuffers = value;
364+
requiredLimits->maxBindGroupsPlusVertexBuffers = value;
365365
} else if (key == "maxBindingsPerBindGroup") {
366-
requiredLimits->limits.maxBindingsPerBindGroup = value;
366+
requiredLimits->maxBindingsPerBindGroup = value;
367367
} else if (key == "maxDynamicUniformBuffersPerPipelineLayout") {
368-
requiredLimits->limits.maxDynamicUniformBuffersPerPipelineLayout =
369-
value;
368+
requiredLimits->maxDynamicUniformBuffersPerPipelineLayout = value;
370369
} else if (key == "maxDynamicStorageBuffersPerPipelineLayout") {
371-
requiredLimits->limits.maxDynamicStorageBuffersPerPipelineLayout =
372-
value;
370+
requiredLimits->maxDynamicStorageBuffersPerPipelineLayout = value;
373371
} else if (key == "maxSampledTexturesPerShaderStage") {
374-
requiredLimits->limits.maxSampledTexturesPerShaderStage = value;
372+
requiredLimits->maxSampledTexturesPerShaderStage = value;
375373
} else if (key == "maxSamplersPerShaderStage") {
376-
requiredLimits->limits.maxSamplersPerShaderStage = value;
374+
requiredLimits->maxSamplersPerShaderStage = value;
377375
} else if (key == "maxStorageBuffersPerShaderStage") {
378-
requiredLimits->limits.maxStorageBuffersPerShaderStage = value;
376+
requiredLimits->maxStorageBuffersPerShaderStage = value;
379377
} else if (key == "maxStorageTexturesPerShaderStage") {
380-
requiredLimits->limits.maxStorageTexturesPerShaderStage = value;
378+
requiredLimits->maxStorageTexturesPerShaderStage = value;
381379
} else if (key == "maxUniformBuffersPerShaderStage") {
382-
requiredLimits->limits.maxUniformBuffersPerShaderStage = value;
380+
requiredLimits->maxUniformBuffersPerShaderStage = value;
383381
} else if (key == "maxUniformBufferBindingSize") {
384-
requiredLimits->limits.maxUniformBufferBindingSize = value;
382+
requiredLimits->maxUniformBufferBindingSize = value;
385383
} else if (key == "maxStorageBufferBindingSize") {
386-
requiredLimits->limits.maxStorageBufferBindingSize = value;
384+
requiredLimits->maxStorageBufferBindingSize = value;
387385
} else if (key == "minUniformBufferOffsetAlignment") {
388-
requiredLimits->limits.minUniformBufferOffsetAlignment = value;
386+
requiredLimits->minUniformBufferOffsetAlignment = value;
389387
} else if (key == "minStorageBufferOffsetAlignment") {
390-
requiredLimits->limits.minStorageBufferOffsetAlignment = value;
388+
requiredLimits->minStorageBufferOffsetAlignment = value;
391389
} else if (key == "maxVertexBuffers") {
392-
requiredLimits->limits.maxVertexBuffers = value;
390+
requiredLimits->maxVertexBuffers = value;
393391
} else if (key == "maxBufferSize") {
394-
requiredLimits->limits.maxBufferSize = value;
392+
requiredLimits->maxBufferSize = value;
395393
} else if (key == "maxVertexAttributes") {
396-
requiredLimits->limits.maxVertexAttributes = value;
394+
requiredLimits->maxVertexAttributes = value;
397395
} else if (key == "maxVertexBufferArrayStride") {
398-
requiredLimits->limits.maxVertexBufferArrayStride = value;
399-
} else if (key == "maxInterStageShaderComponents") {
400-
requiredLimits->limits.maxInterStageShaderComponents = value;
396+
requiredLimits->maxVertexBufferArrayStride = value;
401397
} else if (key == "maxInterStageShaderVariables") {
402-
requiredLimits->limits.maxInterStageShaderVariables = value;
398+
requiredLimits->maxInterStageShaderVariables = value;
403399
} else if (key == "maxColorAttachments") {
404-
requiredLimits->limits.maxColorAttachments = value;
400+
requiredLimits->maxColorAttachments = value;
405401
} else if (key == "maxColorAttachmentBytesPerSample") {
406-
requiredLimits->limits.maxColorAttachmentBytesPerSample = value;
402+
requiredLimits->maxColorAttachmentBytesPerSample = value;
407403
} else if (key == "maxComputeWorkgroupStorageSize") {
408-
requiredLimits->limits.maxComputeWorkgroupStorageSize = value;
404+
requiredLimits->maxComputeWorkgroupStorageSize = value;
409405
} else if (key == "maxComputeInvocationsPerWorkgroup") {
410-
requiredLimits->limits.maxComputeInvocationsPerWorkgroup = value;
406+
requiredLimits->maxComputeInvocationsPerWorkgroup = value;
411407
} else if (key == "maxComputeWorkgroupSizeX") {
412-
requiredLimits->limits.maxComputeWorkgroupSizeX = value;
408+
requiredLimits->maxComputeWorkgroupSizeX = value;
413409
} else if (key == "maxComputeWorkgroupSizeY") {
414-
requiredLimits->limits.maxComputeWorkgroupSizeY = value;
410+
requiredLimits->maxComputeWorkgroupSizeY = value;
415411
} else if (key == "maxComputeWorkgroupSizeZ") {
416-
requiredLimits->limits.maxComputeWorkgroupSizeZ = value;
412+
requiredLimits->maxComputeWorkgroupSizeZ = value;
417413
} else if (key == "maxComputeWorkgroupsPerDimension") {
418-
requiredLimits->limits.maxComputeWorkgroupsPerDimension = value;
414+
requiredLimits->maxComputeWorkgroupsPerDimension = value;
419415
}
420416
}
421417
out.requiredLimits = requiredLimits;
@@ -452,7 +448,7 @@ class Convertor {
452448
Convert(out.constants, out.constantCount, in.constants);
453449
}
454450

455-
[[nodiscard]] bool Convert(wgpu::ImageCopyBuffer &out,
451+
[[nodiscard]] bool Convert(wgpu::TexelCopyBufferInfo &out,
456452
const GPUImageCopyBuffer &in) {
457453
out = {};
458454
out.buffer = in.buffer->get();
@@ -461,13 +457,13 @@ class Convertor {
461457
Convert(out.layout.rowsPerImage, in.rowsPerImage);
462458
}
463459

464-
[[nodiscard]] bool Convert(wgpu::ImageCopyTexture &out,
460+
[[nodiscard]] bool Convert(wgpu::TexelCopyTextureInfo &out,
465461
const GPUImageCopyTexture &in) {
466462
return Convert(out.origin, in.origin) && Convert(out.texture, in.texture) &&
467463
Convert(out.mipLevel, in.mipLevel) && Convert(out.aspect, in.aspect);
468464
}
469465

470-
[[nodiscard]] bool Convert(wgpu::TextureDataLayout &out,
466+
[[nodiscard]] bool Convert(wgpu::TexelCopyBufferLayout &out,
471467
const GPUImageDataLayout &in) {
472468
out = {};
473469
return Convert(out.bytesPerRow, in.bytesPerRow) &&
@@ -502,7 +498,7 @@ class Convertor {
502498
Convert(out.cullMode, in.cullMode);
503499
}
504500

505-
[[nodiscard]] bool Convert(wgpu::ProgrammableStageDescriptor &out,
501+
[[nodiscard]] bool Convert(wgpu::ComputeState &out,
506502
const GPUProgrammableStage &in) {
507503
out = {};
508504
out.module = in.module->get();
@@ -554,7 +550,7 @@ class Convertor {
554550
Convert(out.stencilReadOnly, in.stencilReadOnly);
555551
}
556552

557-
[[nodiscard]] bool Convert(wgpu::RenderPassTimestampWrites &out,
553+
[[nodiscard]] bool Convert(wgpu::PassTimestampWrites &out,
558554
const GPURenderPassTimestampWrites &in) {
559555
return Convert(out.querySet, in.querySet) &&
560556
Convert(out.beginningOfPassWriteIndex,

0 commit comments

Comments
 (0)