st/mesa: Prefer 5551 formats for GL_UNSIGNED_SHORT_5_5_5_1.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 13 Sep 2019 00:30:28 +0000 (17:30 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 16 Sep 2019 20:17:23 +0000 (13:17 -0700)
Previously, internalformat GL_RGBA and type GL_UNSIGNED_SHORT_5_5_5_1
was promoted to RGBA8888 as the table entry with the 5551 formats
is listed below the 8888 entry, and it also doesn't have GL_RGBA as
a possible internalformat.

Using actual 5551 fixes the following dEQP-EGL test:
- dEQP-EGL.functional.image.modify.tex_rgb5_a1_tex_subimage_rgba8

Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/state_tracker/st_format.c

index 5f7997c..38ea51b 100644 (file)
@@ -2266,6 +2266,13 @@ st_choose_format(struct st_context *st, GLenum internalFormat,
          internalFormat = GL_RGB10_A2;
    }
 
+   if (type == GL_UNSIGNED_SHORT_5_5_5_1) {
+      if (internalFormat == GL_RGB)
+         internalFormat = GL_RGB5;
+      else if (internalFormat == GL_RGBA)
+         internalFormat = GL_RGB5_A1;
+   }
+
    /* search table for internalFormat */
    for (i = 0; i < ARRAY_SIZE(format_map); i++) {
       const struct format_mapping *mapping = &format_map[i];