On Wed, Oct 7, 2015 at 4:18 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote: > On Wed, Oct 7, 2015 at 6:58 PM, Jason Ekstrand <ja...@jlekstrand.net> wrote: >> The EXT_texture_format_BGRA8888 extension (which mesa supports >> unconditionally) adds a new format and internal format called GL_BGRA_EXT. >> Previously, this was not really handled at all in >> _mesa_ex3_error_check_format_and_type. When the checks were tightened in >> commit f15a7f3c, we accidentally tightened things too far and GL_BGRA_EXT >> would always cause an error to be thrown. >> >> There were two primary issues here. First, is that >> _mesa_es3_effective_internal_format_for_format_and_type didn't handle the >> GL_BGRA_EXT format. Second is that it blindly uses _mesa_base_tex_format >> which returns GL_RGBA for GL_BGRA_EXT. This commit fixes both of these >> issues as well as adds explicit checks that GL_BGRA_EXT is only ever used >> with GL_BGRA_EXT and GL_UNSIGNED_BYTE. >> >> Signed-off-by: Jason Ekstrand <jason.ekstr...@intel.com> >> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92265 >> Cc: Eduardo Lima Mitev <el...@igalia.com> > > Does this also need a > > Cc: "11.0" <mesa-sta...@lists.freedesktop.org> > > since the original change was cherry-picked into the release branch?
Yes. I realized that right after I sent the e-mail and added it locally. It'll get tagged when I push. --Jason >> --- >> src/mesa/main/glformats.c | 21 +++++++++++++++++++-- >> 1 file changed, 19 insertions(+), 2 deletions(-) >> >> diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c >> index 7dab33c..843ec02 100644 >> --- a/src/mesa/main/glformats.c >> +++ b/src/mesa/main/glformats.c >> @@ -2678,6 +2678,7 @@ >> _mesa_es3_effective_internal_format_for_format_and_type(GLenum format, >> * internal formats, they do not correspond to GL constants, so the >> base >> * format is returned instead. >> */ >> + case GL_BGRA_EXT: >> case GL_LUMINANCE_ALPHA: >> case GL_LUMINANCE: >> case GL_ALPHA: >> @@ -2797,8 +2798,19 @@ _mesa_es3_error_check_format_and_type(const struct >> gl_context *ctx, >> if (effectiveInternalFormat == GL_NONE) >> return GL_INVALID_OPERATION; >> >> - GLenum baseInternalFormat = >> - _mesa_base_tex_format(ctx, effectiveInternalFormat); >> + GLenum baseInternalFormat; >> + if (internalFormat == GL_BGRA_EXT) { >> + /* Unfortunately, _mesa_base_tex_format returns a base format of >> + * GL_RGBA for GL_BGRA_EXT. This makes perfect sense if you're >> + * asking the question, "what channels doe this format have?" >> + * However, if we're trying to determine if two internal formats >> + * match in the ES3 sense, we actually want GL_BGRA. >> + */ >> + baseInternalFormat = GL_BGRA_EXT; >> + } else { >> + baseInternalFormat = >> + _mesa_base_tex_format(ctx, effectiveInternalFormat); >> + } >> >> if (internalFormat != baseInternalFormat) >> return GL_INVALID_OPERATION; >> @@ -2807,6 +2819,11 @@ _mesa_es3_error_check_format_and_type(const struct >> gl_context *ctx, >> } >> >> switch (format) { >> + case GL_BGRA_EXT: >> + if (type != GL_UNSIGNED_BYTE || internalFormat != GL_BGRA) >> + return GL_INVALID_OPERATION; >> + break; >> + >> case GL_RGBA: >> switch (type) { >> case GL_UNSIGNED_BYTE: >> -- >> 2.5.0.400.gff86faf >> >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev