[Mesa-dev] [PATCH 1/2] mesa: support internalFormat=GL_BGRA in TexImage2D
Brian Paul
brian.e.paul at gmail.com
Mon Jan 17 15:07:35 PST 2011
On Mon, Jan 17, 2011 at 3:44 PM, Benjamin Franzke
<benjaminfranzke at googlemail.com> wrote:
> internalFormat=GL_BGRA is only allowed with gles1/2
> and GL_EXT_texture_format_BGRA8888 enabled.
> ---
> src/mesa/main/texformat.c | 4 ++++
> src/mesa/main/teximage.c | 9 +++++++++
> src/mesa/main/texparam.c | 7 +++++--
> src/mesa/main/texstate.c | 1 +
> 4 files changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c
> index 146b2b3..3fb4530 100644
> --- a/src/mesa/main/texformat.c
> +++ b/src/mesa/main/texformat.c
> @@ -94,6 +94,10 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
> RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
> break;
>
> + case GL_BGRA:
> + RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
> + break;
> +
> /* deep RGBA formats */
> case GL_RGB10_A2:
> RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
> diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
> index 47d5093..7ee62b0 100644
> --- a/src/mesa/main/teximage.c
> +++ b/src/mesa/main/teximage.c
> @@ -183,6 +183,15 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )
> ; /* fallthrough */
> }
>
> + if (ctx->Extensions.EXT_texture_format_BGRA8888) {
> + switch (internalFormat) {
> + case GL_BGRA_EXT:
> + return GL_BGRA;
This should be return GL_RGBA. For base formats, we don't distinguish
between RGBA and BGRA; we always use the former.
> + default:
> + ; /* fallthrough */
> + }
> + }
> +
> if (ctx->Extensions.EXT_paletted_texture) {
> switch (internalFormat) {
> case GL_COLOR_INDEX:
> diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
> index d2b8b5c..190a14d 100644
> --- a/src/mesa/main/texparam.c
> +++ b/src/mesa/main/texparam.c
> @@ -885,7 +885,9 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
> }
> /* FALLTHROUGH */
> case GL_TEXTURE_BLUE_SIZE:
> - if (img->_BaseFormat == GL_RGB || img->_BaseFormat == GL_RGBA)
> + if (img->_BaseFormat == GL_RGB ||
> + img->_BaseFormat == GL_RGBA ||
> + img->_BaseFormat == GL_BGRA)
img->_BaseFormat should never be GL_BGRA.
> *params = _mesa_get_format_bits(texFormat, pname);
> else
> *params = 0;
> @@ -893,7 +895,8 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
> case GL_TEXTURE_ALPHA_SIZE:
> if (img->_BaseFormat == GL_ALPHA ||
> img->_BaseFormat == GL_LUMINANCE_ALPHA ||
> - img->_BaseFormat == GL_RGBA)
> + img->_BaseFormat == GL_RGBA ||
> + img->_BaseFormat == GL_BGRA)
Same thing here.
> *params = _mesa_get_format_bits(texFormat, pname);
> else
> *params = 0;
> diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
> index f4d7718..e8315a1 100644
> --- a/src/mesa/main/texstate.c
> +++ b/src/mesa/main/texstate.c
> @@ -176,6 +176,7 @@ calculate_derived_texenv( struct gl_tex_env_combine_state *state,
> case GL_LUMINANCE_ALPHA:
> case GL_INTENSITY:
> case GL_RGBA:
> + case GL_BGRA:
Remove that case too.
> break;
>
> case GL_LUMINANCE:
> --
Before we commit this stuff can you develop a piglit test to test it?
-Brian
More information about the mesa-dev
mailing list