Pixel 10 OpenGL bug: cannot read from R32F, R32UI textures via image binding

I’ve run into what looks like a driver bug.

Pixel 10 - Android 16 - OpenGL ES 3.2 build 24.3@6660496

When trying to read from a 3D texture with a R32F or R32UI formats via an image binding in a compute shader, the value returned is always 0 (using imageLoad function). If I read from the same texture using a sampler instead (using texelFetch) the value returned as expected. Reading from a texture with RGBA8 format via image binding is also successful.

I have confirmed the above behaviour in an isolated case and have a GLSL shader to reproduce it, but the website doesn’t allow me to upload an attachment.

I do not get any OpenGL errors reported during the texture data upload or the compute dispatch.

Writing via an image binding might also not work, but I have not yet confirmed that in an isolated scenario.

EDIT: just wanted to mention that the same code runs fine on other mobile GPUs.

Hi ileben,

Thanks for your message and welcome to the PowerVR Developer Forum!

Would it be possible to provide a Development build of an Android application reproducing the issue? You can use our Support email IMG-InternalSupportDevTechEcosystem@imgtec.com in case that makes handling the application easier.

Best regards,
Alejandro

Thanks, Alejandro.

I’ve sent an email with the application to the email address you provided.

For anyone else reading this: I’ve pinpointed the core of the issue - imageLoad fails unless the texture has its min/mag filters set to GL_NEAREST, even though the sampler state and/or mipmap-completness probably shouldn’t matter for the purpose of imageLoad/Store operations (and other drivers seem to happily ignore it).

Thank you ileben,

I already replied internally.

It seems the code must follow the spec, where integer textures do not support linear filtering. GL_TEXTURE_MAG_FILTER must be GL_NEAREST and GL_TEXTURE_MIN_FILTER either GL_NEAREST or GL_NEAREST_MIPMAP_NEAREST ( Texture - OpenGL Wiki ). This makes the code work correctly.

Best regards,
Alejandro