panfrost: Identify Bifrost texture format swizzle
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 26 May 2020 23:48:29 +0000 (19:48 -0400)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 27 May 2020 20:49:43 +0000 (16:49 -0400)
We don't force w=1 for Bifrost textures. We already compose this into
the swizzle as necessary, so we can just ignore this field I think. But
let's identify it so we don't forget what it is.

The blob uses it to force w=1 for <= 3-channel formats (0x10), as well
as a flag to swap r/b for BGRA (0x4). There are probably other flags
here but it doesn't.. really matter to us.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5232>

src/panfrost/encoder/pan_texture.c
src/panfrost/include/panfrost-job.h
src/panfrost/pandecode/decode.c

index 9fb134e48ede6133adc7dbe2b3b4bcc9065661a9..fd9e1ea9e3a405f6fe0b89bc11f2814f79074543 100644 (file)
@@ -333,7 +333,6 @@ panfrost_new_texture_bifrost(
 
         descriptor->format_unk = 0x2;
         descriptor->type = type;
-        descriptor->format_unk2 = 0x100;
         descriptor->format = mali_format;
         descriptor->srgb = (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB);
         descriptor->format_unk3 = 0x0;
index bb835a13b0037627833ef71a7519a9716da0e5ac..1234d3bbfa981cb6a3b666280550f585e3a07d9e 100644 (file)
@@ -1253,7 +1253,8 @@ struct mali_texture_descriptor {
 struct bifrost_texture_descriptor {
         unsigned format_unk : 4; /* 2 */
         enum mali_texture_type type : 2;
-        unsigned format_unk2 : 16; /* 0 */
+        unsigned zero : 4;
+        unsigned format_swizzle : 12;
         enum mali_format format : 8;
         unsigned srgb : 1;
         unsigned format_unk3 : 1; /* 0 */
index 02f320c7fe49a03e9d1f3e25b81dc1d2234152a0..1bd1273f735420fd51fad43972ce9cf0f5c0bb66 100644 (file)
@@ -2210,7 +2210,13 @@ pandecode_bifrost_texture(
 
         pandecode_prop("format_unk = 0x%" PRIx32, t->format_unk);
         pandecode_prop("type = %" PRId32, t->type);
-        pandecode_prop("format_unk2 = 0x%" PRIx32, t->format_unk2);
+
+        if (t->zero) {
+                pandecode_msg("XXX: zero tripped\n");
+                pandecode_prop("zero = 0x%" PRIx32, t->zero);
+        }
+
+        pandecode_prop("format_swizzle = 0x%" PRIx32, t->format_swizzle);
         pandecode_prop("format = 0x%" PRIx32, t->format);
         pandecode_prop("srgb = 0x%" PRIx32, t->srgb);
         pandecode_prop("format_unk3 = 0x%" PRIx32, t->format_unk3);