[Mesa-dev] [PATCH v3] mesa: Fix GLES2 OES float texture framebuffer rendering.
Erik Faye-Lund
erik.faye-lund at collabora.com
Wed Dec 12 10:13:40 UTC 2018
On Wed, 2018-12-12 at 09:27 +0200, Tapani Pälli wrote:
>
> On 12/12/18 8:42 AM, Tapani Pälli wrote:
> >
> > On 12/12/18 5:05 AM, Nick Kreeger wrote:
> > > This change enables GLES2 to render float/half-float textures to
> > > a
> > > framebuffer when the appropriate OES extensions are available.
> > >
> > > This commit regressed OES GLES2 float texture rendering:
> > > https://gitlab.freedesktop.org/mesa/mesa/commit/e333035c47a6a4cc88f0f9ca2bced500538bebae
> > >
> >
> > Which test/app got regressed? I'm curious because this commit also
> > fixed
> > a failing conformance test that explicitly tests that the fbo with
> > float
> > attachment should be marked incomplete.
> >
>
> I'm against this change because these same tests will start to fail
> if
> we allow this:
>
> https://mesa-ci.01.org/tpalli/builds/652/group/63a9f0ea7bb98050796b649e85481845
>
> I believe the rule is that you should be able to render to sized
> formats
> such as RGBA32F (with modern GLES) but not to unsized formats such
> as
> GL_FLOAT.
>
So...
The extension spec for OES_texture_half_float / OES_texture_float says:
---8<---
Accepted by the <type> parameter of TexImage2D, TexSubImage2D,
TexImage3D, and TexSubImage3D
HALF_FLOAT_OES 0x8D61
FLOAT 0x1406
---8<---
This allows these formats for texturing. But for using them for color
attachments, they also need to be color-renderable. The color-
renderable property is based on internal-format in the OpenGL ES 2.0
spec, and only the following internal formats are color-renderable
there: RGB565, RGBA4, RGB5_A1.
OES_rgb8_rgba8 adds RGB8 and RGBA8 as color-renderable (it doesn't
explicitly say that it does, but it lists them under "Accepted by the
<internalformat> parameter of RenderbufferStorageOES", and the ES2 spec
says "internalformatmust be color-renderable, depth-renderable, or
stencil-renderable" for RenderbufferStorage)
EXT_color_buffer_half_float (if OES_texture_half_float is supported)
adds R16F, RG16F (if EXT_texture_rg is supported), RGB16F and RGBA16F
as color-renderable.
EXT_color_buffer_float is written against ES3, so it doesn't apply to
ES2.
These are all the seemingly relevant extensions. None of them seems to
add unsized float-support.
So I tend to agree with Tapani here; I don't think this change is
correct.
I *do* think that this is implemented in a rather... uh, creative way,
though. The color-renderable tests are kinda littered a bit all over
the place, not in a very systematic and easy to follow way. I tried
untangling this some years back, and my patches for that are here[1],
but someone else did some conflicting changes that lead to me dropping
this effort. Looking at what was done, the situation doesn't currently
look much better IMO.
[1]: https://github.com/kusma/mesa/commits/color_renderable_fix
More information about the mesa-dev
mailing list