Initial workspace: GPU context, compute pass, adaptive Slint shell
Establishes the v0.1 foundations on both platforms: - dr-types: SourceRef (never a filesystem path — Android SAF has none), Format, Availability, Validator with ETag quote normalisation - dr-gpu: wgpu device, compute pass writing a storage texture, resize - dr-ui: Slint shell with FR-UI-1 adaptive layout, computed in Rust to avoid a binding loop - docker/android: pinned toolchain, verified producing API 28 ARM binaries Measured the cost of the temporary CPU readback path (dr-gpu bench): compute is 0.06-0.28ms across sizes while readback is 0.63-7.43ms, so readback is 90-96% of frame time and scales with area. Recorded in ARCH §6.1 — this is why spike S1 is the priority. Mitigations pending S1: reuse the staging buffer, apply at most one resize per frame, and cap render resolution at 2048 on the long edge. 10 tests passing; core crates cross-compile for aarch64-linux-android.
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
/// Failures from the GPU layer.
|
||||
///
|
||||
/// `DeviceLost` is deliberately a distinct variant rather than folded into a
|
||||
/// generic error: it is an expected event on Android (ARCH §6.10), not an
|
||||
/// exceptional one, and callers recover from it by rebuilding the device and
|
||||
/// re-driving from the edit graph.
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
pub enum GpuError {
|
||||
#[error("no suitable GPU adapter found")]
|
||||
NoAdapter,
|
||||
|
||||
#[error("failed to request device: {0}")]
|
||||
DeviceRequest(String),
|
||||
|
||||
#[error("GPU device lost — recreate and re-render from the edit graph")]
|
||||
DeviceLost,
|
||||
|
||||
#[error("shader compilation failed: {0}")]
|
||||
ShaderCompilation(String),
|
||||
|
||||
#[error("readback failed: {0}")]
|
||||
Readback(String),
|
||||
}
|
||||
Reference in New Issue
Block a user