diff --git a/CHANGELOG.md b/CHANGELOG.md index 390c8b72ac..8d30ce192c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ Bottom level categories: * Fix `wgpu` not building with `--no-default-features` on when targeting `wasm32-unknown-unknown`. By @wumpf in [#6946](https://github.com/gfx-rs/wgpu/pull/6946). * Implement `Clone` on `ShaderModule`. By @a1phyr in [#6937](https://github.com/gfx-rs/wgpu/pull/6937). - Fix `CopyExternalImageDestInfo` not exported on `wgpu`. By @wumpf in [#6962](https://github.com/gfx-rs/wgpu/pull/6962). +- Reduce downlevel `max_color_attachments` limit from 8 to 4 for better GLES compatibility. By @adrian17 in [#6994](https://github.com/gfx-rs/wgpu/pull/6994). ## v24.0.0 (2025-01-15) diff --git a/Cargo.toml b/Cargo.toml index 81d992c489..f4d40ba4a8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -140,6 +140,7 @@ wgpu = { version = "24.0.1", path = "./wgpu", default-features = false, features "dx12", "metal", "static-dxc", + "webgl", ] } wgpu-core = { version = "24.0.0", path = "./wgpu-core" } wgpu-macros = { version = "24.0.1", path = "./wgpu-macros" } diff --git a/wgpu-hal/src/gles/adapter.rs b/wgpu-hal/src/gles/adapter.rs index 67ff20ff19..a462172968 100644 --- a/wgpu-hal/src/gles/adapter.rs +++ b/wgpu-hal/src/gles/adapter.rs @@ -824,6 +824,7 @@ impl super::Adapter { private_caps, workarounds, features, + limits: limits.clone(), shading_language_version, next_shader_id: Default::default(), program_cache: Default::default(), diff --git a/wgpu-hal/src/gles/mod.rs b/wgpu-hal/src/gles/mod.rs index 2b693a2dd8..7f41ad27b6 100644 --- a/wgpu-hal/src/gles/mod.rs +++ b/wgpu-hal/src/gles/mod.rs @@ -271,6 +271,7 @@ struct AdapterShared { context: AdapterContext, private_caps: PrivateCapabilities, features: wgt::Features, + limits: wgt::Limits, workarounds: Workarounds, shading_language_version: naga::back::glsl::Version, next_shader_id: AtomicU32, diff --git a/wgpu-hal/src/gles/queue.rs b/wgpu-hal/src/gles/queue.rs index 8896aa4ed0..f950dedb94 100644 --- a/wgpu-hal/src/gles/queue.rs +++ b/wgpu-hal/src/gles/queue.rs @@ -1078,8 +1078,8 @@ impl super::Queue { 0, ) }; - for i in 0..crate::MAX_COLOR_ATTACHMENTS { - let target = glow::COLOR_ATTACHMENT0 + i as u32; + for i in 0..self.shared.limits.max_color_attachments { + let target = glow::COLOR_ATTACHMENT0 + i; unsafe { gl.framebuffer_texture_2d( glow::DRAW_FRAMEBUFFER, diff --git a/wgpu-types/src/lib.rs b/wgpu-types/src/lib.rs index 7813c36c65..429496513a 100644 --- a/wgpu-types/src/lib.rs +++ b/wgpu-types/src/lib.rs @@ -1324,7 +1324,7 @@ impl Limits { /// min_uniform_buffer_offset_alignment: 256, /// min_storage_buffer_offset_alignment: 256, /// max_inter_stage_shader_components: 60, - /// max_color_attachments: 8, + /// max_color_attachments: 4, /// max_color_attachment_bytes_per_sample: 32, /// max_compute_workgroup_storage_size: 16352, // * /// max_compute_invocations_per_workgroup: 256, @@ -1344,6 +1344,7 @@ impl Limits { max_texture_dimension_3d: 256, max_storage_buffers_per_shader_stage: 4, max_uniform_buffer_binding_size: 16 << 10, // (16 KiB) + max_color_attachments: 4, // see: https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf#page=7 max_compute_workgroup_storage_size: 16352, ..Self::defaults() @@ -1381,7 +1382,7 @@ impl Limits { /// min_uniform_buffer_offset_alignment: 256, /// min_storage_buffer_offset_alignment: 256, /// max_inter_stage_shader_components: 31, - /// max_color_attachments: 8, + /// max_color_attachments: 4, /// max_color_attachment_bytes_per_sample: 32, /// max_compute_workgroup_storage_size: 0, // + /// max_compute_invocations_per_workgroup: 0, // +