react-native-wgpu 0.1.6 → 0.1.8

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.
Files changed (63) hide show
  1. package/cpp/rnwgpu/api/GPUDevice.cpp +5 -3
  2. package/lib/commonjs/Canvas.js.map +1 -1
  3. package/lib/commonjs/Offscreen.js +121 -0
  4. package/lib/commonjs/Offscreen.js.map +1 -0
  5. package/lib/commonjs/index.js +12 -0
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/module/Canvas.js.map +1 -1
  8. package/lib/module/Offscreen.js +114 -0
  9. package/lib/module/Offscreen.js.map +1 -0
  10. package/lib/module/index.js +1 -0
  11. package/lib/module/index.js.map +1 -1
  12. package/lib/typescript/lib/commonjs/Offscreen.d.ts +31 -0
  13. package/lib/typescript/lib/commonjs/Offscreen.d.ts.map +1 -0
  14. package/lib/typescript/lib/module/Offscreen.d.ts +30 -0
  15. package/lib/typescript/lib/module/Offscreen.d.ts.map +1 -0
  16. package/lib/typescript/lib/module/index.d.ts +1 -0
  17. package/lib/typescript/src/Canvas.d.ts +3 -3
  18. package/lib/typescript/src/Canvas.d.ts.map +1 -1
  19. package/lib/typescript/src/Offscreen.d.ts +26 -0
  20. package/lib/typescript/src/Offscreen.d.ts.map +1 -0
  21. package/lib/typescript/src/__tests__/setup.d.ts +5 -4
  22. package/lib/typescript/src/__tests__/setup.d.ts.map +1 -1
  23. package/lib/typescript/src/index.d.ts +1 -0
  24. package/lib/typescript/src/index.d.ts.map +1 -1
  25. package/libs/android/arm64-v8a/libwebgpu_dawn.so +0 -0
  26. package/libs/android/armeabi-v7a/libwebgpu_dawn.so +0 -0
  27. package/libs/android/x86/libwebgpu_dawn.so +0 -0
  28. package/libs/android/x86_64/libwebgpu_dawn.so +0 -0
  29. package/libs/apple/arm64_iphoneos/libwebgpu_dawn.a +0 -0
  30. package/libs/apple/arm64_iphonesimulator/libwebgpu_dawn.a +0 -0
  31. package/libs/apple/arm64_xros/libwebgpu_dawn.a +0 -0
  32. package/libs/apple/arm64_xrsimulator/libwebgpu_dawn.a +0 -0
  33. package/libs/apple/{libwebgpu_dawn.a → iphonesimulator/libwebgpu_dawn.a} +0 -0
  34. package/libs/apple/libwebgpu_dawn.xcframework/Info.plist +45 -0
  35. package/libs/apple/libwebgpu_dawn.xcframework/ios-arm64/libwebgpu_dawn.a +0 -0
  36. package/libs/apple/libwebgpu_dawn.xcframework/ios-arm64_x86_64-simulator/libwebgpu_dawn.a +0 -0
  37. package/libs/apple/{libwebgpu_dawn_macosx.xcframework → libwebgpu_dawn.xcframework}/macos-arm64_x86_64/libwebgpu_dawn.a +0 -0
  38. package/libs/apple/{libwebgpu_dawn_visionos.xcframework → libwebgpu_dawn.xcframework}/xros-arm64/libwebgpu_dawn.a +0 -0
  39. package/libs/apple/{x86_64_xrsimulator → libwebgpu_dawn.xcframework/xros-arm64-simulator}/libwebgpu_dawn.a +0 -0
  40. package/libs/apple/universal_macosx/libwebgpu_dawn.a +0 -0
  41. package/libs/apple/x86_64_iphonesimulator/libwebgpu_dawn.a +0 -0
  42. package/package.json +3 -2
  43. package/react-native-wgpu.podspec +51 -0
  44. package/src/Canvas.tsx +4 -4
  45. package/src/Offscreen.ts +160 -0
  46. package/src/__tests__/ExternalTexture.spec.ts +4 -4
  47. package/src/__tests__/Texture.spec.ts +8 -2
  48. package/src/__tests__/demos/ABuffer.spec.ts +17 -12
  49. package/src/__tests__/demos/Blur.spec.ts +2 -1
  50. package/src/__tests__/demos/Cube.spec.ts +16 -12
  51. package/src/__tests__/demos/FractalCube.spec.ts +6 -5
  52. package/src/__tests__/demos/OcclusionQuery.spec.ts +3 -3
  53. package/src/__tests__/demos/RenderBundles.spec.ts +4 -3
  54. package/src/__tests__/demos/Triangle.spec.ts +27 -9
  55. package/src/__tests__/setup.ts +25 -10
  56. package/src/index.tsx +1 -0
  57. package/lib/typescript/src/__tests__/components/DrawingContext.d.ts +0 -12
  58. package/lib/typescript/src/__tests__/components/DrawingContext.d.ts.map +0 -1
  59. package/libs/apple/libwebgpu_dawn_macosx.xcframework/Info.plist +0 -28
  60. package/libs/apple/libwebgpu_dawn_visionos.a +0 -0
  61. package/libs/apple/libwebgpu_dawn_visionos.xcframework/Info.plist +0 -44
  62. package/libs/apple/libwebgpu_dawn_visionos.xcframework/xros-arm64_x86_64-simulator/libwebgpu_dawn_visionos.a +0 -0
  63. package/src/__tests__/components/DrawingContext.ts +0 -11
@@ -28,6 +28,7 @@ describe("Fractal Cube", () => {
28
28
  vec3,
29
29
  sampleSelfWGSL,
30
30
  basicVertWGSL,
31
+ canvas,
31
32
  }) => {
32
33
  const cubeVertexSize = 4 * 10; // Byte size of one cube vertex.
33
34
  const cubePositionOffset = 0;
@@ -98,7 +99,7 @@ describe("Fractal Cube", () => {
98
99
  });
99
100
 
100
101
  const depthTexture = device.createTexture({
101
- size: [ctx.width, ctx.height],
102
+ size: [ctx.canvas.width, ctx.canvas.height],
102
103
  format: "depth24plus",
103
104
  usage: GPUTextureUsage.RENDER_ATTACHMENT,
104
105
  });
@@ -112,7 +113,7 @@ describe("Fractal Cube", () => {
112
113
  // We will copy the frame's rendering results into this texture and
113
114
  // sample it on the next frame.
114
115
  const cubeTexture = device.createTexture({
115
- size: [ctx.width, ctx.height],
116
+ size: [ctx.canvas.width, ctx.canvas.height],
116
117
  format: presentationFormat,
117
118
  usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,
118
119
  });
@@ -163,7 +164,7 @@ describe("Fractal Cube", () => {
163
164
  },
164
165
  };
165
166
 
166
- const aspect = ctx.width / ctx.height;
167
+ const aspect = ctx.canvas.width / ctx.canvas.height;
167
168
  const projectionMatrix = mat4.perspective(
168
169
  (2 * Math.PI) / 5,
169
170
  aspect,
@@ -217,7 +218,7 @@ describe("Fractal Cube", () => {
217
218
  {
218
219
  texture: cubeTexture,
219
220
  },
220
- [ctx.width, ctx.height],
221
+ [ctx.canvas.width, ctx.canvas.height],
221
222
  );
222
223
 
223
224
  device.queue.submit([commandEncoder.finish()]);
@@ -226,7 +227,7 @@ describe("Fractal Cube", () => {
226
227
  for (let i = 0; i < 10; i++) {
227
228
  frame(now + i * 16);
228
229
  }
229
- return ctx.getImageData();
230
+ return canvas.getImageData();
230
231
  },
231
232
  {
232
233
  basicVertWGSL: basicVert,
@@ -56,7 +56,7 @@ export type TypedArrayConstructor =
56
56
  describe("OcclusionQuery", () => {
57
57
  it("occlusionQuery", async () => {
58
58
  const result = await client.eval(
59
- ({ device, ctx, gpu, solidColorLitWGSL, mat4 }) => {
59
+ ({ device, ctx, gpu, solidColorLitWGSL, mat4, canvas }) => {
60
60
  const depthFormat = "depth24plus";
61
61
  const presentationFormat = gpu.getPreferredCanvasFormat();
62
62
  const animate = true;
@@ -262,7 +262,7 @@ describe("OcclusionQuery", () => {
262
262
 
263
263
  const projection = mat4.perspective(
264
264
  (30 * Math.PI) / 180,
265
- ctx.width / ctx.height,
265
+ ctx.canvas.width / ctx.canvas.height,
266
266
  0.5,
267
267
  100,
268
268
  );
@@ -365,7 +365,7 @@ describe("OcclusionQuery", () => {
365
365
  }
366
366
  }
367
367
  render(1721766068905 + 150 * 16);
368
- return ctx.getImageData().then((image) => ({ image, visible }));
368
+ return canvas.getImageData().then((image) => ({ image, visible }));
369
369
  },
370
370
  { solidColorLitWGSL: solidColorLit },
371
371
  );
@@ -75,6 +75,7 @@ describe("Render Bundles", () => {
75
75
  vec3,
76
76
  assets: { saturn, moon },
77
77
  vals,
78
+ canvas,
78
79
  }) => {
79
80
  interface SphereMesh {
80
81
  vertices: Float32Array;
@@ -255,7 +256,7 @@ describe("Render Bundles", () => {
255
256
  });
256
257
 
257
258
  const depthTexture = device.createTexture({
258
- size: [ctx.width, ctx.height],
259
+ size: [ctx.canvas.width, ctx.canvas.height],
259
260
  format: "depth24plus",
260
261
  usage: GPUTextureUsage.RENDER_ATTACHMENT,
261
262
  });
@@ -447,7 +448,7 @@ describe("Render Bundles", () => {
447
448
  },
448
449
  };
449
450
 
450
- const aspect = ctx.width / ctx.height;
451
+ const aspect = ctx.canvas.width / ctx.canvas.height;
451
452
  const projectionMatrix = mat4.perspective(
452
453
  (2 * Math.PI) / 5,
453
454
  aspect,
@@ -569,7 +570,7 @@ describe("Render Bundles", () => {
569
570
  device.queue.submit([commandEncoder.finish()]);
570
571
  }
571
572
  frame();
572
- return ctx.getImageData();
573
+ return canvas.getImageData();
573
574
  },
574
575
  { meshWGSL: mesh, vals: randomValues },
575
576
  );
@@ -3,7 +3,13 @@ import { checkImage, client, encodeImage } from "../setup";
3
3
  describe("Triangle", () => {
4
4
  it("Simple Triangle", async () => {
5
5
  const result = await client.eval(
6
- ({ device, shaders: { triangleVertWGSL, redFragWGSL }, gpu, ctx }) => {
6
+ ({
7
+ device,
8
+ shaders: { triangleVertWGSL, redFragWGSL },
9
+ gpu,
10
+ ctx,
11
+ canvas,
12
+ }) => {
7
13
  const pipeline = device.createRenderPipeline({
8
14
  layout: "auto",
9
15
  vertex: {
@@ -46,7 +52,7 @@ describe("Triangle", () => {
46
52
  passEncoder.draw(3);
47
53
  passEncoder.end();
48
54
  device.queue.submit([commandEncoder.finish()]);
49
- return ctx.getImageData();
55
+ return canvas.getImageData();
50
56
  },
51
57
  );
52
58
  const image = encodeImage(result);
@@ -54,7 +60,13 @@ describe("Triangle", () => {
54
60
  });
55
61
  it("Async Simple Triangle", async () => {
56
62
  const result = await client.eval(
57
- ({ device, shaders: { triangleVertWGSL, redFragWGSL }, gpu, ctx }) => {
63
+ ({
64
+ device,
65
+ shaders: { triangleVertWGSL, redFragWGSL },
66
+ gpu,
67
+ ctx,
68
+ canvas,
69
+ }) => {
58
70
  return device
59
71
  .createRenderPipelineAsync({
60
72
  layout: "auto",
@@ -98,7 +110,7 @@ describe("Triangle", () => {
98
110
  passEncoder.draw(3);
99
111
  passEncoder.end();
100
112
  device.queue.submit([commandEncoder.finish()]);
101
- return ctx.getImageData();
113
+ return canvas.getImageData();
102
114
  });
103
115
  },
104
116
  );
@@ -107,7 +119,13 @@ describe("Triangle", () => {
107
119
  });
108
120
  it("Triangle MSAA", async () => {
109
121
  const result = await client.eval(
110
- ({ device, shaders: { triangleVertWGSL, redFragWGSL }, gpu, ctx }) => {
122
+ ({
123
+ device,
124
+ shaders: { triangleVertWGSL, redFragWGSL },
125
+ gpu,
126
+ ctx,
127
+ canvas,
128
+ }) => {
111
129
  const sampleCount = 4;
112
130
  const presentationFormat = gpu.getPreferredCanvasFormat();
113
131
  const pipeline = device.createRenderPipeline({
@@ -136,7 +154,7 @@ describe("Triangle", () => {
136
154
  });
137
155
 
138
156
  const texture = device.createTexture({
139
- size: [ctx.width, ctx.height],
157
+ size: [ctx.canvas.width, ctx.canvas.height],
140
158
  sampleCount,
141
159
  format: presentationFormat,
142
160
  usage: GPUTextureUsage.RENDER_ATTACHMENT,
@@ -163,7 +181,7 @@ describe("Triangle", () => {
163
181
  passEncoder.draw(3);
164
182
  passEncoder.end();
165
183
  device.queue.submit([commandEncoder.finish()]);
166
- return ctx.getImageData();
184
+ return canvas.getImageData();
167
185
  },
168
186
  );
169
187
  const image = encodeImage(result);
@@ -171,7 +189,7 @@ describe("Triangle", () => {
171
189
  });
172
190
  it("Triangle with constants", async () => {
173
191
  const result = await client.eval(
174
- ({ device, shaders: { triangleVertWGSL }, gpu, ctx }) => {
192
+ ({ device, shaders: { triangleVertWGSL }, gpu, ctx, canvas }) => {
175
193
  const pipeline = device.createRenderPipeline({
176
194
  layout: "auto",
177
195
  vertex: {
@@ -239,7 +257,7 @@ describe("Triangle", () => {
239
257
  passEncoder.draw(3);
240
258
  passEncoder.end();
241
259
  device.queue.submit([commandEncoder.finish()]);
242
- return ctx.getImageData();
260
+ return canvas.getImageData();
243
261
  },
244
262
  );
245
263
  const image = encodeImage(result);
@@ -11,7 +11,8 @@ import type { mat4, vec3, mat3 } from "wgpu-matrix";
11
11
  import type { Server, WebSocket } from "ws";
12
12
  import type { Browser, Page } from "puppeteer";
13
13
 
14
- import type { DrawingContext } from "./components/DrawingContext";
14
+ import type { GPUOffscreenCanvas } from "../Offscreen";
15
+
15
16
  import { cubeVertexArray } from "./components/cube";
16
17
  import { redFragWGSL, triangleVertWGSL } from "./components/triangle";
17
18
  import { DEBUG, REFERENCE } from "./config";
@@ -26,7 +27,7 @@ declare global {
26
27
  var testOS: TestOS;
27
28
  }
28
29
 
29
- interface GPUContext {
30
+ interface GPUTestingContext {
30
31
  gpu: GPU;
31
32
  adapter: GPUAdapter;
32
33
  device: GPUDevice;
@@ -43,7 +44,8 @@ interface GPUContext {
43
44
  moon: ImageData;
44
45
  saturn: ImageData;
45
46
  };
46
- ctx: DrawingContext;
47
+ ctx: GPUCanvasContext;
48
+ canvas: GPUOffscreenCanvas;
47
49
  mat4: typeof mat4;
48
50
  vec3: typeof vec3;
49
51
  mat3: typeof mat3;
@@ -61,7 +63,7 @@ type JSONValue =
61
63
 
62
64
  interface TestingClient {
63
65
  eval<C = Ctx, R = JSONValue>(
64
- fn: (ctx: GPUContext & C) => R | Promise<R>,
66
+ fn: (ctx: GPUTestingContext & C) => R | Promise<R>,
65
67
  ctx?: C,
66
68
  ): Promise<R>;
67
69
  OS: TestOS;
@@ -86,7 +88,7 @@ class RemoteTestingClient implements TestingClient {
86
88
  readonly arch = global.testArch;
87
89
 
88
90
  eval<C = Ctx, R = JSONValue>(
89
- fn: (ctx: GPUContext & C) => R | Promise<R>,
91
+ fn: (ctx: GPUTestingContext & C) => R | Promise<R>,
90
92
  context?: C,
91
93
  ): Promise<R> {
92
94
  const ctx = this.prepareContext(context ?? {});
@@ -131,7 +133,7 @@ class ReferenceTestingClient implements TestingClient {
131
133
  private page: Page | null = null;
132
134
 
133
135
  async eval<C = Ctx, R = JSONValue>(
134
- fn: (ctx: GPUContext & C) => R | Promise<R>,
136
+ fn: (ctx: GPUTestingContext & C) => R | Promise<R>,
135
137
  ctx?: C,
136
138
  ): Promise<R> {
137
139
  if (!this.page) {
@@ -139,7 +141,7 @@ class ReferenceTestingClient implements TestingClient {
139
141
  }
140
142
  const fTexturePath = path.join(
141
143
  __dirname,
142
- "../../../../apps/paper/src/assets/f.png",
144
+ "../../../../apps/example/src/assets/f.png",
143
145
  );
144
146
  const fTextureData = fs.readFileSync(fTexturePath);
145
147
  const fTextureBase64 = `data:image/png;base64,${fTextureData.toString("base64")}`;
@@ -168,6 +170,14 @@ class ReferenceTestingClient implements TestingClient {
168
170
  getCurrentTexture() {
169
171
  return this.texture;
170
172
  }
173
+
174
+ get canvas() {
175
+ return {
176
+ width: this.width,
177
+ height: this.height,
178
+ };
179
+ }
180
+
171
181
  getImageData() {
172
182
  const commandEncoder = this.device.createCommandEncoder();
173
183
  const bytesPerRow = this.width * 4;
@@ -206,6 +216,11 @@ class ReferenceTestingClient implements TestingClient {
206
216
  redFragWGSL,
207
217
  },
208
218
  ctx,
219
+ canvas: {
220
+ getImageData: ctx.getImageData.bind(ctx),
221
+ width: ctx.width,
222
+ height: ctx.height,
223
+ },
209
224
  mat4,
210
225
  vec3,
211
226
  mat3,
@@ -234,13 +249,13 @@ class ReferenceTestingClient implements TestingClient {
234
249
  .catch((e) => console.log(e));
235
250
  await page.waitForNetworkIdle();
236
251
  const di3D = decodeImage(
237
- path.join(__dirname, "../../../../apps/paper/src/assets/Di-3d.png"),
252
+ path.join(__dirname, "../../../../apps/example/src/assets/Di-3d.png"),
238
253
  );
239
254
  const moon = decodeImage(
240
- path.join(__dirname, "../../../../apps/paper/src/assets/moon.png"),
255
+ path.join(__dirname, "../../../../apps/example/src/assets/moon.png"),
241
256
  );
242
257
  const saturn = decodeImage(
243
- path.join(__dirname, "../../../../apps/paper/src/assets/saturn.png"),
258
+ path.join(__dirname, "../../../../apps/example/src/assets/saturn.png"),
244
259
  );
245
260
  await page.evaluate(
246
261
  `
package/src/index.tsx CHANGED
@@ -2,6 +2,7 @@
2
2
  import WebGPUNativeModule from "./NativeWebGPUModule";
3
3
 
4
4
  export * from "./Canvas";
5
+ export * from "./Offscreen";
5
6
  export * from "./WebGPUViewNativeComponent";
6
7
  export * from "./utils";
7
8
  export { default as WebGPUModule } from "./NativeWebGPUModule";
@@ -1,12 +0,0 @@
1
- export interface DrawingContext {
2
- width: number;
3
- height: number;
4
- getCurrentTexture(): GPUTexture;
5
- getImageData(): Promise<{
6
- data: number[];
7
- width: number;
8
- height: number;
9
- format: string;
10
- }>;
11
- }
12
- //# sourceMappingURL=DrawingContext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DrawingContext.d.ts","sourceRoot":"","sources":["../../../../../src/__tests__/components/DrawingContext.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,IAAI,UAAU,CAAC;IAChC,YAAY,IAAI,OAAO,CAAC;QACtB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ"}
@@ -1,28 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>AvailableLibraries</key>
6
- <array>
7
- <dict>
8
- <key>BinaryPath</key>
9
- <string>libwebgpu_dawn.a</string>
10
- <key>LibraryIdentifier</key>
11
- <string>macos-arm64_x86_64</string>
12
- <key>LibraryPath</key>
13
- <string>libwebgpu_dawn.a</string>
14
- <key>SupportedArchitectures</key>
15
- <array>
16
- <string>arm64</string>
17
- <string>x86_64</string>
18
- </array>
19
- <key>SupportedPlatform</key>
20
- <string>macos</string>
21
- </dict>
22
- </array>
23
- <key>CFBundlePackageType</key>
24
- <string>XFWK</string>
25
- <key>XCFrameworkFormatVersion</key>
26
- <string>1.0</string>
27
- </dict>
28
- </plist>
@@ -1,44 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>AvailableLibraries</key>
6
- <array>
7
- <dict>
8
- <key>BinaryPath</key>
9
- <string>libwebgpu_dawn_visionos.a</string>
10
- <key>LibraryIdentifier</key>
11
- <string>xros-arm64_x86_64-simulator</string>
12
- <key>LibraryPath</key>
13
- <string>libwebgpu_dawn_visionos.a</string>
14
- <key>SupportedArchitectures</key>
15
- <array>
16
- <string>arm64</string>
17
- <string>x86_64</string>
18
- </array>
19
- <key>SupportedPlatform</key>
20
- <string>xros</string>
21
- <key>SupportedPlatformVariant</key>
22
- <string>simulator</string>
23
- </dict>
24
- <dict>
25
- <key>BinaryPath</key>
26
- <string>libwebgpu_dawn.a</string>
27
- <key>LibraryIdentifier</key>
28
- <string>xros-arm64</string>
29
- <key>LibraryPath</key>
30
- <string>libwebgpu_dawn.a</string>
31
- <key>SupportedArchitectures</key>
32
- <array>
33
- <string>arm64</string>
34
- </array>
35
- <key>SupportedPlatform</key>
36
- <string>xros</string>
37
- </dict>
38
- </array>
39
- <key>CFBundlePackageType</key>
40
- <string>XFWK</string>
41
- <key>XCFrameworkFormatVersion</key>
42
- <string>1.0</string>
43
- </dict>
44
- </plist>
@@ -1,11 +0,0 @@
1
- export interface DrawingContext {
2
- width: number;
3
- height: number;
4
- getCurrentTexture(): GPUTexture;
5
- getImageData(): Promise<{
6
- data: number[];
7
- width: number;
8
- height: number;
9
- format: string;
10
- }>;
11
- }