summaryrefslogtreecommitdiff
path: root/tools/wgpu_sync.js
diff options
context:
space:
mode:
authorLeo Kettmeir <crowlkats@toaxl.com>2023-12-09 01:19:16 +0100
committerGitHub <noreply@github.com>2023-12-09 01:19:16 +0100
commit393abed3873d83019feb5bcebb10a6929133862a (patch)
treec346e6d628e6b037fb8f881a70ca2ae6f70692b6 /tools/wgpu_sync.js
parent123d9ea047a2e10803e260ebf00f31fcc98463ee (diff)
feat: bring back WebGPU (#20812)
Signed-off-by: Leo Kettmeir <crowlkats@toaxl.com> Co-authored-by: Kenta Moriuchi <moriken@kimamass.com> Co-authored-by: Bartek IwaƄczuk <biwanczuk@gmail.com>
Diffstat (limited to 'tools/wgpu_sync.js')
-rw-r--r--tools/wgpu_sync.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/tools/wgpu_sync.js b/tools/wgpu_sync.js
new file mode 100644
index 000000000..590324465
--- /dev/null
+++ b/tools/wgpu_sync.js
@@ -0,0 +1,92 @@
+#!/usr/bin/env -S deno run --unstable --allow-read --allow-write --allow-run
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+
+import { join, ROOT_PATH } from "./util.js";
+
+const COMMIT = "49b7ec97c164bac9ee877f45cdd806fbefecc5a4";
+const REPO = "gfx-rs/wgpu";
+const V_WGPU = "0.18";
+const TARGET_DIR = join(ROOT_PATH, "ext", "webgpu");
+
+async function bash(subcmd, opts = {}) {
+ const { success, code } = await new Deno.Command("bash", {
+ ...opts,
+ args: ["-c", subcmd],
+ stdout: "inherit",
+ sdterr: "inherit",
+ }).output();
+
+ // Exit process on failure
+ if (!success) {
+ Deno.exit(code);
+ }
+}
+
+async function clearTargetDir() {
+ await bash(`rm -r ${TARGET_DIR}/*`);
+}
+
+async function checkoutUpstream() {
+ // Path of deno_webgpu inside the TAR
+ const tarPrefix = `${REPO.replace("/", "-")}-${
+ COMMIT.slice(0, 7)
+ }/deno_webgpu/`;
+ const cmd =
+ `curl -L https://api.github.com/repos/${REPO}/tarball/${COMMIT} | tar -C '${TARGET_DIR}' -xzvf - --strip=2 '${tarPrefix}'`;
+ // console.log(cmd);
+ await bash(cmd);
+}
+
+async function denoWebgpuVersion() {
+ const coreCargo = join(ROOT_PATH, "Cargo.toml");
+ const contents = await Deno.readTextFile(coreCargo);
+ return contents.match(
+ /^deno_webgpu = { version = "(\d+\.\d+\.\d+)", path = ".\/ext\/webgpu" }$/m,
+ )[1];
+}
+
+async function patchFile(path, patcher) {
+ const data = await Deno.readTextFile(path);
+ const patched = patcher(data);
+ await Deno.writeTextFile(path, patched);
+}
+
+async function patchCargo() {
+ const vDenoWebgpu = await denoWebgpuVersion();
+ await patchFile(
+ join(TARGET_DIR, "Cargo.toml"),
+ (data) =>
+ data
+ .replace(/^version = .*/m, `version = "${vDenoWebgpu}"`)
+ .replace(
+ /^repository.workspace = true/m,
+ `repository = "https://github.com/gfx-rs/wgpu"`,
+ )
+ .replace(
+ /^serde = { workspace = true, features = ["derive"] }/m,
+ `serde.workspace = true`,
+ )
+ .replace(
+ /^tokio = { workspace = true, features = ["full"] }/m,
+ `tokio.workspace = true`,
+ ),
+ );
+
+ await patchFile(
+ join(ROOT_PATH, "Cargo.toml"),
+ (data) =>
+ data
+ .replace(/^wgpu-core = .*/m, `wgpu-core = "${V_WGPU}"`)
+ .replace(/^wgpu-types = .*/m, `wgpu-types = "${V_WGPU}"`)
+ .replace(/^wgpu-hal = .*/m, `wgpu-hal = "${V_WGPU}"`),
+ );
+}
+
+async function main() {
+ await clearTargetDir();
+ await checkoutUpstream();
+ await patchCargo();
+ await bash(join(ROOT_PATH, "tools", "format.js"));
+}
+
+await main();