iris: stop requesting compute-shader limits nothing uses
adapter.request_device asked for Limits::default(), which requests desktop-tier compute-shader limits unconditionally even though nothing in iris/iris-core creates a ComputePipeline or writes a @compute stage. That crashed device creation outright on a downlevel GL adapter reporting OpenGL ES 3.0 (no compute at all) -- the Android emulator's EMU_GPU=software/force-gles path, and any real GLES-3.0-only device. New iris_core::device_limits(), shared by both platform backends, zeros exactly the six max_compute_* fields rather than switching to a downlevel Limits preset -- downlevel_webgl2_defaults() also zeros max_storage_buffers_per_shader_stage, which shader.wgsl's vertex stage needs. rigs/gpu-probe's own mirrored limits were updated to match. Not verified against the actual SwiftShader-ES-3.0 crash on-device this pass: the cold boot needed would have force-restarted this checkout's emulator while another session had its own app running on it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
e6924298bc
commit
d01c105037
8 files changed
+222
-13
No files matched your search
@@ -7,6 +7,29 @@ order and what "done" looks like. Tick and date them in place.
|
||||
|
||||
## Fix
|
||||
|
||||
- [x] **`request_device` asked for compute-shader limits it never uses
|
||||
(2026-09-05).** `Limits::default()` (both `iris/src/android/render.rs`
|
||||
and `iris/src/default/render.rs`) requests desktop-tier compute limits
|
||||
unconditionally, 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 device creation
|
||||
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, so the adapter's real limit is 0
|
||||
against the unconditional request for 65535 — the same would happen on
|
||||
any real GLES-3.0-only Android device. Fixed by a new, shared
|
||||
`iris_core::device_limits()` (`iris/core/src/render/mod.rs`) that zeros
|
||||
exactly the six `max_compute_*` fields rather than switching to a
|
||||
downlevel `Limits` preset — `downlevel_webgl2_defaults()` also zeros
|
||||
`max_storage_buffers_per_shader_stage`, which `shader.wgsl`'s vertex
|
||||
stage needs (four `var<storage>` buffers), so that preset would trade
|
||||
this crash for a bind-group-layout one on the same hardware.
|
||||
`rigs/gpu-probe`'s own hand-mirrored `Limits` (it is deliberately its
|
||||
own crate, not able to call `device_limits()` directly) was updated to
|
||||
match. See `DECISIONS.md` and RUST.md's I5 box for the account,
|
||||
including what could not be re-verified on-device this pass (the
|
||||
emulator was in concurrent use by another session).
|
||||
|
||||
- [x] **Input does not fall through by input type (2026-09-04).**
|
||||
`SensorUi::run_sensors` (`src/default/sense.rs`) used to set "consumed,
|
||||
stop checking lower layers" from mere hover — a widget registered for
|
||||
|
||||
Reference in new issue
Block a user