Merge remote-tracking branch 'origin/rustify' into worktree-agent-a27094a7db775552a
# Conflicts: # docs/IRIS.md
This commit is contained in:
commit
800da46188
8 files changed
+222
-13
No files matched your search
@@ -7,6 +7,48 @@ marked **DEFERRED** are ones the agent chose not to decide alone.
|
||||
|
||||
## 2026-09-05
|
||||
|
||||
- **iris no longer asks every device for compute-shader limits it never
|
||||
uses.** `adapter.request_device` (both `iris/src/android/render.rs` and
|
||||
`iris/src/default/render.rs`) used `Limits::default()` plus an override
|
||||
for `max_buffer_size`, and `Limits::default()` unconditionally requests
|
||||
desktop-tier compute limits (`max_compute_workgroups_per_dimension:
|
||||
65535`, per `wgpu_types`) even though nothing in `iris`/`iris-core`
|
||||
creates a `ComputePipeline` or writes a `@compute` shader stage —
|
||||
confirmed by grepping the whole tree, not assumed. That crashed
|
||||
`request_device` outright on the Android emulator's software GL path
|
||||
(`EMU_GPU=software`, `--features force-gles`): SwiftShader's GL reports
|
||||
itself as OpenGL ES 3.0, which has no compute shaders at all, so the
|
||||
adapter's real limit is 0 against the unconditional request for 65535 —
|
||||
`RUST.md`'s "Software mode ... crashes for a third, different reason,"
|
||||
2026-09-05, earlier today. The same would happen on any real
|
||||
GLES-3.0-only Android device, not just the emulator. Fixed by a new
|
||||
`iris_core::device_limits()` (`iris/core/src/render/mod.rs`), shared by
|
||||
both platform backends so the two requests cannot drift, that zeros the
|
||||
six `max_compute_*` fields explicitly rather than switching to a
|
||||
downlevel `Limits` preset — `Limits::downlevel_webgl2_defaults()` was
|
||||
considered and rejected: it also zeros
|
||||
`max_storage_buffers_per_shader_stage`, and `shader.wgsl`'s vertex stage
|
||||
reads four `var<storage>` buffers (rects, glyphs, masks, move_offsets),
|
||||
so that preset would trade the compute crash for a bind-group-layout
|
||||
one on the same downlevel hardware this is meant to support. No
|
||||
capability check or fallback path was needed since nothing is being
|
||||
disabled — the request is simply narrowed to what the pipeline actually
|
||||
uses. `rigs/gpu-probe`'s own mirrored limits (it is deliberately its own
|
||||
crate, not a workspace member, so it cannot call `device_limits()`
|
||||
directly) were updated to match, and confirm `IRIS DEVICE: ok` against
|
||||
this VM's own Vulkan and GL adapters. **Not verified this pass**: the
|
||||
specific SwiftShader-ES-3.0 crash this fixes, on-device — the
|
||||
`EMU_GPU=software` cold boot this needs would have force-restarted this
|
||||
checkout's emulator while another session was actively running its own
|
||||
app on it (`com.example.aiapp` had window focus at the time), so it was
|
||||
left for a pass when the emulator is free rather than disrupting that
|
||||
session. Everything reachable without the emulator is clean: `cargo
|
||||
fmt`/`clippy --workspace --all-targets`/`test --workspace`, `cargo ndk
|
||||
build`/`clippy` for `iris-android-app` with `force-gles`, and
|
||||
`gpu-probe` against this VM's own Vulkan and GL(ES 3.2, which still has
|
||||
compute and so would not have reproduced the crash even before this
|
||||
fix — not a substitute for the real ES-3.0 test).
|
||||
|
||||
- **P0's Compose half is built and smoke-tested on the emulator** — the
|
||||
`bench` build type, the shared `app/bench-fixture/` transcript, and an
|
||||
in-process fake backend (`BenchFixture.kt`/`BenchNetwork.kt`) that
|
||||
|
||||
Reference in new issue
Block a user