Created attachment 460080 [details] WebGL supported extensions list on iPhone 13 Pro, iOS 15.6 beta 2 The support for the EXT_float_blend extension is missing on iOS starting from version 15.4, which breaks blending for floating point textures. How to reproduce: Open https://www.geeks3d.com/webgl/ from an iOS 15.4+ device and you'll see that EXT_float_blend is missing from the supported extensions list.
iOS 15.4 included the large Metal backend roll-forward. Kimmo, could you triage this on iOS hardware?
<rdar://problem/95162938>
EXT_float_blend needs capability to render with blend to 32-bit float (RGBA32F). Unfortunately none of the iPhone GPUs have this capability. I believe it was a bug on our behalf to ship EXT_float_blend on prior iOS releases. The clients could check if they can use EXT_color_buffer_float to render to RGBA16F render targets when blending is needed. https://www.khronos.org/registry/webgl/extensions/EXT_float_blend/ https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_float/ GPU Texture Capabilities by Pixel Format, RGBA32Float, lacks "Blend" for GPUFamilyApple cases: https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf
Thanks Kimmo. Yes, confirming, this was a longstanding bug in the WebGL implementation on iOS. A bug must have also been fixed in ANGLE in the iOS 15.4 release. https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_half_float/ is now exposed on iOS devices in both the WebGL 1.0 and 2.0 APIs. Please adjust code to explicitly use 16-bit floating-point textures when available.
Thanks for the clarification! Am I right that blending should work with half_float textures on iOS? We did a quick test and was still not working. We can probably create a small example that reproduces the issue. Just to add a little bit of context: we're using float blending for our force graph simulation algorithm https://cosmograph.app.
> Am I right that blending should work with half_float textures on iOS? We did a quick test and was still not working. Yes, it should. Note that RGB16F support in WebGL is not universal, so for maximum compatibility, use RGBA16F. > We can probably create a small example that reproduces the issue. This would be appreciated, thanks!
Resolving based on Kimmo and Kenneth's statements.