[Mesa-dev] [PATCH] mesa: Add ARB_texture_view to Mesa core

Ian Romanick idr at freedesktop.org
Mon Nov 11 10:15:31 PST 2013

On 11/05/2013 11:36 AM, Courtney Goeltzenleuchter wrote:
> On Tue, Nov 5, 2013 at 12:22 PM, Ian Romanick <idr at freedesktop.org
> <mailto:idr at freedesktop.org>> wrote:
>     On 11/05/2013 09:44 AM, Chris Forbes wrote:
>     >> So, you can create a GL_LUMINANCE view of a GL_LUMINANCE texture.
>      Hmm...
>     >
>     > My understanding is you can't actually, since views can only be
>     > created from immutable-format textures, and GL_LUMINANCE is not a
>     > sized internalformat, so it can't be used with TexStorage?
>     I was just using GL_LUMINANCE as shorthand for GL_LUMINANCE4,
>     GL_LUMINANCE8, GL_LUMINANCE12, and GL_LUMINANCE16.  As far as I can
>     tell,
>         glGenTextures(1, &tex);
>         glBindTexture(GL_TEXTURE_2D, tex);
>         glTexStorage2D(GL_TEXTURE_2D,
>                     8,
>                     GL_LUMINANCE8,
>                     1024, 1024);
>     is perfectly valid.  Sayeth GL_ARB_texture_storage:
>         Accepted by the <internalformat> parameter of TexStorage* when
>         implemented on OpenGL ES:
>             ALPHA8_EXT                     0x803C
>             LUMINANCE8_EXT                 0x8040
>             LUMINANCE8_ALPHA8_EXT          0x8045
>     I guess that means GL_LUMINANCE4, GL_LUMINANCE12, and GL_LUMINANCE16 are
>     out.  As are all GL_INTENSITY formats.  There are still these three
>     legacy formats to handle.
>     So, if we support GL_ARB_texture_view in a compatibility profile,
>         glGenTextures(1, &view);
>         glTextureView(view,
>                     GL_TEXTURE_2D,
>                     tex,
>                     GL_LUMINANCE8,
>                     1, 1, 1, 1);
>     is also valid.
>     Right?
> The spec is pickier than that.  For 8bit texels the allowed internal
> formats are: R8UI, R8I, R8, R8_SNORM
> I use the table specified in the ARB_texture_view to translate the
> target internalFormat passed to glTextureView into a VIEW_CLASS.
> GL_LUMINANCE8 does not have a valid VIEW_CLASS and could not match the
> internal format of the source texture.

I don't think it matters that GL_LUMINANCE8 is missing from the table or
that it doesn't have a VIEW_CLASS.  The GL_ARB_texture_view spec says
(emphasis mine):

   The two textures' internal formats must be compatible according to
   Table 3.X.2 (Compatible internal formats for TextureView) if the
   internal format exists in that table and *the internal formats
   must be identical if not in that table*, or else an
   INVALID_OPERATION error is generated.

In my above code example, the internal formats are identical.  By my
reading of the above quoted text, that code is legal.  We should modify
one of the texture_view tests to use these legacy formats, and try that
test on NVIDIA with a compatibility profile.

> That makes me wonder, should I be trying to map the target
> internalformat into a driver internal format?
> Courtney
> -- 
> Courtney Goeltzenleuchter
> LunarG

More information about the mesa-dev mailing list