Files
oak-editor/crates/oak-core/Cargo.toml
T
Mike-Solar 48e99e56b7 render: the M2 GPU zero-copy pipeline — wgpu 29, shared gpui device, GPU color LUTs
docs/zh/plans/render-pipeline-threads.md M2: the graph's textures stay
on the GPU from evaluation through presentation, and presentation runs
on the UI's own wgpu device.

- wgpu 25 -> 29 (naga 29) across the engine, unifying it with
  gpui_wgpu so engine textures are directly sampleable by the presenter
  (a single wgpu remains in the lockfile).
- GpuContext::adopt/install_shared: the app registers the window's
  device at startup and the render thread renders on it;
  texture_handle hands the raw Arc<wgpu::Texture> to
  SurfaceSource::Texture - zero-copy present on Linux/FreeBSD. The
  shared slot replaces an engine context that has not touched the GPU
  yet (startup-order guard) and refuses once it has.
- Texture::Gpu shares a GpuLease so clones release the registry token
  exactly once; the compositor, transitions and adjustment sweeps keep
  GPU textures end to end (no per-clip readbacks; GPU clears for
  black/generated frames).
- Color management stays on the GPU: the output node + display ICC
  chain is baked into a 65^3 3D LUT with the exact CPU reference and
  applied by the present WGSL pass (manual trilinear);
  ColorTransformJob bakes its OCIO processor the same way. Neither
  path skips color management.
- The explicit readback boundaries accept GPU textures: export
  encoder, CLI, worker shm, disk cache; CPU OpenFX already read back.
- M5 dependency: the YUV->RGB GPU pass (BT.601/709/2020 x
  limited/full) matches colormath::yuv444p16_to_rgb_f32.
- Acceptance: gpu_transfer_counters; single-clip and layered
  (multi-track + transition + adjustment) playback tests assert zero
  GPU->CPU readbacks, and the app test asserts adopted-device present
  is zero-copy. GPU tests hard-fail when OAK_REQUIRE_GPU is set (CI
  lavapipe) instead of skipping silently.
2026-09-12 20:52:17 +08:00

29 lines
1004 B
TOML

[package]
name = "oak-core"
version.workspace = true
edition = "2021"
description = "Rust value types mirroring oakcore (Rational, TimeRange, format enums)"
license = "GPL-3.0-or-later"
[lib]
crate-type = ["rlib"]
[dependencies]
thiserror = "2.0.20"
ocio-rs = { version = "0.2", features = ["bundled"] }
# wgpu: portable GPU backend — same major as oak-render's shaderfx/naga
# generation (29, matching the gpui_wgpu device the app presents with, so
# the render thread's textures are directly sampleable by the UI).
wgpu = "29"
log = "0.4.34"
# half: f16↔f32 conversion for format-aware texture downloads (the M2
# present target is Rgba16Float; the rest of the pipeline is Rgba32Float).
half = "2"
# TOML persistence for the application config (configstore.rs).
toml = "0.8"
# XML helpers (xmlutils.rs).
quick-xml = "0.41.0"
# Pure-Rust image I/O for oiioutils.rs (TIFF only — the only format current
# callers need).
image = { version = "0.25", default-features = false, features = ["tiff"] }