diff options
Diffstat (limited to 'src/panfrost')
-rw-r--r-- | src/panfrost/include/panfrost-job.h | 26 | ||||
-rw-r--r-- | src/panfrost/pandecode/decode.c | 15 |
2 files changed, 32 insertions, 9 deletions
diff --git a/src/panfrost/include/panfrost-job.h b/src/panfrost/include/panfrost-job.h index 43c7c3763d0..694680a778f 100644 --- a/src/panfrost/include/panfrost-job.h +++ b/src/panfrost/include/panfrost-job.h @@ -1179,10 +1179,21 @@ enum mali_texture_type { /* For each pointer, there is an address and optionally also a stride */ #define MAX_ELEMENTS (2) -/* Corresponds to the type passed to glTexImage2D and so forth */ +/* It's not known why there are 4-bits allocated -- this enum is almost + * certainly incomplete */ + +enum mali_texture_layout { + /* For a Z/S texture, this is linear */ + MALI_TEXTURE_TILED = 0x1, + + /* Z/S textures cannot be tiled */ + MALI_TEXTURE_LINEAR = 0x2, + + /* 16x16 sparse */ + MALI_TEXTURE_AFBC = 0xC +}; -/* Flags for usage2 */ -#define MALI_TEX_MANUAL_STRIDE (0x20) +/* Corresponds to the type passed to glTexImage2D and so forth */ struct mali_texture_format { unsigned swizzle : 12; @@ -1192,8 +1203,15 @@ struct mali_texture_format { unsigned unknown1 : 1; enum mali_texture_type type : 2; + enum mali_texture_layout layout : 4; + + /* Always set */ + unsigned unknown2 : 1; + + /* Set to allow packing an explicit stride */ + unsigned manual_stride : 1; - unsigned usage2 : 8; + unsigned zero : 2; } __attribute__((packed)); struct mali_texture_descriptor { diff --git a/src/panfrost/pandecode/decode.c b/src/panfrost/pandecode/decode.c index f14cc805406..9918ba62262 100644 --- a/src/panfrost/pandecode/decode.c +++ b/src/panfrost/pandecode/decode.c @@ -1812,11 +1812,17 @@ pandecode_texture(mali_ptr u, pandecode_log_cont(",\n"); pandecode_prop("type = %s", pandecode_texture_type(f.type)); - pandecode_prop("usage2 = 0x%" PRIx32, f.usage2); + pandecode_prop("layout = %" PRId32, f.layout); - if (f.unknown1) { + if (f.unknown1 | f.zero) { pandecode_msg("XXX: texture format zero tripped\n"); pandecode_prop("unknown1 = %" PRId32, f.unknown1); + pandecode_prop("zero = %" PRId32, f.zero); + } + + if (!f.unknown2) { + pandecode_msg("XXX: expected unknown texture bit set\n"); + pandecode_prop("unknown2 = %" PRId32, f.unknown1); } pandecode_indent--; @@ -1846,7 +1852,6 @@ pandecode_texture(mali_ptr u, * possibilities to futureproof */ int bitmap_count = MALI_NEGATIVE(t->levels); - bool manual_stride = f.usage2 & MALI_TEX_MANUAL_STRIDE; /* Miptree for each face */ if (f.type == MALI_TEX_CUBE) @@ -1856,7 +1861,7 @@ pandecode_texture(mali_ptr u, bitmap_count *= MALI_NEGATIVE(t->array_size); /* Stride for each element */ - if (manual_stride) + if (f.manual_stride) bitmap_count *= 2; /* Sanity check the size */ @@ -1866,7 +1871,7 @@ pandecode_texture(mali_ptr u, for (int i = 0; i < bitmap_count; ++i) { /* How we dump depends if this is a stride or a pointer */ - if ((f.usage2 & MALI_TEX_MANUAL_STRIDE) && (i & 1)) { + if (f.manual_stride && (i & 1)) { /* signed 32-bit snuck in as a 64-bit pointer */ uint64_t stride_set = t->payload[i]; uint32_t clamped_stride = stride_set; |