From 6c8ccdeaa9e01524aba51ba5ec3cc2ed8d1ab14d Mon Sep 17 00:00:00 2001 From: Teodor Tanasoaia <28601907+teoxoy@users.noreply.github.com> Date: Fri, 13 Oct 2023 02:22:42 +0200 Subject: [PATCH] [gles] enable/disable blending per attachment only when available (on ES 3.2 or higher) (#4234) --- CHANGELOG.md | 4 ++++ wgpu-hal/src/gles/adapter.rs | 4 ---- wgpu-hal/src/gles/mod.rs | 2 -- wgpu-hal/src/gles/queue.rs | 24 +++--------------------- 4 files changed, 7 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7542c6b541..0fffc457de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -168,6 +168,10 @@ By @teoxoy in [#4185](https://github.com/gfx-rs/wgpu/pull/4185) - Ensure that limit requests and reporting is done correctly. By @OptimisticPeach in [#4107](https://github.com/gfx-rs/wgpu/pull/4107) - Validate usage of polygon mode. By @teoxoy in [#4196](https://github.com/gfx-rs/wgpu/pull/4196) +#### GLES + +- enable/disable blending per attachment only when available (on ES 3.2 or higher). By @teoxoy in [#4234](https://github.com/gfx-rs/wgpu/pull/4234) + #### Testing - Skip `test_multithreaded_compute` on MoltenVK. By @jimblandy in [#4096](https://github.com/gfx-rs/wgpu/pull/4096). diff --git a/wgpu-hal/src/gles/adapter.rs b/wgpu-hal/src/gles/adapter.rs index 4c81fca65b..0930996404 100644 --- a/wgpu-hal/src/gles/adapter.rs +++ b/wgpu-hal/src/gles/adapter.rs @@ -456,10 +456,6 @@ impl super::Adapter { super::PrivateCapabilities::INDEX_BUFFER_ROLE_CHANGE, !cfg!(target_arch = "wasm32"), ); - private_caps.set( - super::PrivateCapabilities::CAN_DISABLE_DRAW_BUFFER, - !cfg!(target_arch = "wasm32"), - ); private_caps.set( super::PrivateCapabilities::GET_BUFFER_SUB_DATA, cfg!(target_arch = "wasm32"), diff --git a/wgpu-hal/src/gles/mod.rs b/wgpu-hal/src/gles/mod.rs index 6ac92e6e7f..5209bd917b 100644 --- a/wgpu-hal/src/gles/mod.rs +++ b/wgpu-hal/src/gles/mod.rs @@ -146,8 +146,6 @@ bitflags::bitflags! { /// Indicates that buffers used as `GL_ELEMENT_ARRAY_BUFFER` may be created / initialized / used /// as other targets, if not present they must not be mixed with other targets. const INDEX_BUFFER_ROLE_CHANGE = 1 << 5; - /// Indicates that the device supports disabling draw buffers - const CAN_DISABLE_DRAW_BUFFER = 1 << 6; /// Supports `glGetBufferSubData` const GET_BUFFER_SUB_DATA = 1 << 7; /// Supports `f16` color buffers diff --git a/wgpu-hal/src/gles/queue.rs b/wgpu-hal/src/gles/queue.rs index 6eacfdd88a..5c9414e4c7 100644 --- a/wgpu-hal/src/gles/queue.rs +++ b/wgpu-hal/src/gles/queue.rs @@ -55,10 +55,6 @@ impl super::Queue { .collect::>(); unsafe { gl.draw_buffers(&indices) }; } - #[cfg(not(target_arch = "wasm32"))] - for draw_buffer in 0..self.draw_buffer_count as u32 { - unsafe { gl.disable_draw_buffer(glow::BLEND, draw_buffer) }; - } } unsafe fn reset_state(&mut self, gl: &glow::Context) { @@ -970,16 +966,6 @@ impl super::Queue { .map(|i| glow::COLOR_ATTACHMENT0 + i) .collect::>(); unsafe { gl.draw_buffers(&indices) }; - - if self - .shared - .private_caps - .contains(super::PrivateCapabilities::CAN_DISABLE_DRAW_BUFFER) - { - for draw_buffer in 0..count as u32 { - unsafe { gl.disable_draw_buffer(glow::BLEND, draw_buffer) }; - } - } } C::ClearColorF { draw_buffer, @@ -1249,7 +1235,7 @@ impl super::Queue { ) }; if let Some(ref blend) = *blend { - unsafe { gl.enable_draw_buffer(index, glow::BLEND) }; + unsafe { gl.enable_draw_buffer(glow::BLEND, index) }; if blend.color != blend.alpha { unsafe { gl.blend_equation_separate_draw_buffer( @@ -1273,12 +1259,8 @@ impl super::Queue { gl.blend_func_draw_buffer(index, blend.color.src, blend.color.dst) }; } - } else if self - .shared - .private_caps - .contains(super::PrivateCapabilities::CAN_DISABLE_DRAW_BUFFER) - { - unsafe { gl.disable_draw_buffer(index, glow::BLEND) }; + } else { + unsafe { gl.disable_draw_buffer(glow::BLEND, index) }; } } else { unsafe {