summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2018-04-25 11:40:40 -0700
committerEric Anholt <[email protected]>2018-04-26 11:30:22 -0700
commit8adf813f83b9f54e3c9958cc7c7a485e62222e2e (patch)
treeb1c197cfe4cfbc998609c9be13041facf46a5f73 /src
parent8aef7fccb70d64f7764a5d6346ee142417fa0b2c (diff)
st: Choose a 2101010 format for GL_RGB/GL_RGBA with a 2_10_10_10 type.
GLES's GL_EXT_texture_type_2_10_10_10_REV allows uploading this type to an unsized internalformat, and it should be non-color-renderable. fbobject.c's implementation of the check for color-renderable is checks that the texture has a 2101010 mesa format, so make sure that we have chosen a 2101010 format so that check can do what it meant to. Fixes KHR-GLES3.packed_pixels.pbo_rectangle.rgb on vc5. Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/mesa/state_tracker/st_format.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c
index 3db3c7e967c..418f5342025 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -2138,6 +2138,19 @@ st_choose_format(struct st_context *st, GLenum internalFormat,
goto success;
}
+ /* For an unsized GL_RGB but a 2_10_10_10 type, try to pick one of the
+ * 2_10_10_10 formats. This is important for
+ * GL_EXT_texture_type_2_10_10_10_EXT support, which says that these
+ * formats are not color-renderable. Mesa's check for making those
+ * non-color-renderable is based on our chosen format being 2101010.
+ */
+ if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
+ if (internalFormat == GL_RGB)
+ internalFormat = GL_RGB10;
+ else if (internalFormat == GL_RGBA)
+ internalFormat = GL_RGB10_A2;
+ }
+
/* search table for internalFormat */
for (i = 0; i < ARRAY_SIZE(format_map); i++) {
const struct format_mapping *mapping = &format_map[i];