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
@@ -8,6 +8,31 @@ capability that moved. Small and trivial changes do not go here.
|
||||
An entry gives the date, what changed, why, and a short before/after where
|
||||
it helps judge the change without the session that made it. Newest first.
|
||||
|
||||
## 2026-09-05 (later still): `iris_core::device_limits()`, and iris no longer requests compute-shader limits
|
||||
|
||||
New public function, `iris_core::device_limits() -> wgpu::Limits`. Why:
|
||||
`adapter.request_device`'s `required_limits` was `Limits::default()` plus
|
||||
a `max_buffer_size` override in both platform backends, and
|
||||
`Limits::default()` requests desktop-tier compute-shader limits
|
||||
unconditionally (`max_compute_workgroups_per_dimension: 65535`) even
|
||||
though nothing in `iris`/`iris-core` uses a `ComputePipeline` — that
|
||||
crashed device creation outright on a downlevel GL adapter reporting
|
||||
OpenGL ES 3.0 (no compute shaders at all: the Android emulator's
|
||||
`EMU_GPU=software` path, and any real GLES-3.0-only Android device).
|
||||
`device_limits()` is what both `android::render::AndroidRenderer::new`
|
||||
and `default::render::UiRenderer::new` now build their `required_limits`
|
||||
from, so the request cannot drift between the two backends.
|
||||
|
||||
Before: `Limits { max_buffer_size: 1 << 30, ..Default::default() }`
|
||||
inlined in each backend. After: `iris_core::device_limits()`, which is
|
||||
the same thing with the six `max_compute_*` fields additionally zeroed.
|
||||
A caller building its own `DeviceDescriptor` outside these two backends
|
||||
(there are none today, but a third platform backend would want this)
|
||||
should call `device_limits()` rather than reaching for
|
||||
`Limits::default()` directly, unless it genuinely adds a compute pass —
|
||||
in which case it wants the specific compute limits that pass needs, not
|
||||
the desktop-tier default for everything.
|
||||
|
||||
## 2026-09-05 (later the same day): `iris_core::FrameReport` (RUST.md's I5 box)
|
||||
|
||||
New public type, `iris_core::FrameReport` (re-exported from `iris_core`'s
|
||||
|
||||
Reference in new issue
Block a user