summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/lima/lima_parser.c
diff options
context:
space:
mode:
authorVasily Khoruzhick <anarsoul@gmail.com>2020-01-11 22:23:36 -0800
committerVasily Khoruzhick <anarsoul@gmail.com>2020-01-13 22:50:36 -0800
commit55b0aa436e9b4bd33938535d51ebdc21a7aa11ca (patch)
treee775143202e32e7e0c6efc55c7cdbc0b46debfbf /src/gallium/drivers/lima/lima_parser.c
parenta9bd0668d50e17fbe61542a9c6ad723d7fd55ed7 (diff)
lima: add new findings to texture descriptor
Lower 8 bits of unknown_1_3 seems to be min_lod, rest of 4 bits + miplevels are max_lod and min_mipfilter seems to be lod bias. All are in fixed format with 4 bit integer and 4 bit fraction, lod_bias also has sign bit. Blob also seems to do some magic with lod_bias if min filter is nearest -- it adds 0.5 to lod_bias in this case. Same story when all filters are nearest and mipmapping is enabled, but in this case it subtracts 1/16 from lod_bias. Fixes 134 dEQP tests in dEQP-GLES2.functional.texture.* Reviewed-by: Qiang Yu <yuq825@gmail.com> Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3359> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3359>
Diffstat (limited to 'src/gallium/drivers/lima/lima_parser.c')
-rw-r--r--src/gallium/drivers/lima/lima_parser.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/gallium/drivers/lima/lima_parser.c b/src/gallium/drivers/lima/lima_parser.c
index c96e080a0ce..87f8a47f50a 100644
--- a/src/gallium/drivers/lima/lima_parser.c
+++ b/src/gallium/drivers/lima/lima_parser.c
@@ -631,9 +631,9 @@ parse_texture(FILE *fp, uint32_t *data, uint32_t start, uint32_t offset)
fprintf(fp, "\t unnorm_coords: 0x%x (%d)\n", desc->unnorm_coords, desc->unnorm_coords);
fprintf(fp, "\t unknown_1_2: 0x%x (%d)\n", desc->unknown_1_2, desc->unknown_1_2);
fprintf(fp, "\t texture_type: 0x%x (%d)\n", desc->texture_type, desc->texture_type);
- fprintf(fp, "\t unknown_1_3: 0x%x (%d)\n", desc->unknown_1_3, desc->unknown_1_3);
- fprintf(fp, "\t miplevels: 0x%x (%d)\n", desc->miplevels, desc->miplevels);
- fprintf(fp, "\t min_mipfilter_1: 0x%x (%d)\n", desc->min_mipfilter_1, desc->min_mipfilter_1);
+ fprintf(fp, "\t min_lod: 0x%x (%d) (%f)\n", desc->min_lod, desc->min_lod, lima_fixed8_to_float(desc->min_lod));
+ fprintf(fp, "\t max_lod: 0x%x (%d) (%f)\n", desc->max_lod, desc->max_lod, lima_fixed8_to_float(desc->max_lod));
+ fprintf(fp, "\t lod_bias: 0x%x (%d) (%f)\n", desc->lod_bias, desc->lod_bias, lima_fixed8_to_float(desc->lod_bias));
fprintf(fp, "\t unknown_2_1: 0x%x (%d)\n", desc->unknown_2_1, desc->unknown_2_1);
fprintf(fp, "\t has_stride: 0x%x (%d)\n", desc->has_stride, desc->has_stride);
fprintf(fp, "\t min_mipfilter_2: 0x%x (%d)\n", desc->min_mipfilter_2, desc->min_mipfilter_2);
@@ -667,7 +667,9 @@ parse_texture(FILE *fp, uint32_t *data, uint32_t start, uint32_t offset)
fprintf(fp, "/* 0x%08x (0x%08x) */",
start + i * 4, i * 4);
fprintf(fp, "\t");
- for (int k = 0; k < ((((desc->miplevels + 1) * 26) + 64) / 32); k++)
+
+ int miplevels = (int)lima_fixed8_to_float(desc->max_lod);
+ for (int k = 0; k < ((((miplevels + 1) * 26) + 64) / 32); k++)
fprintf(fp, "0x%08x ", *(&data[i + offset + k]));
fprintf(fp, "\n");
@@ -687,7 +689,7 @@ parse_texture(FILE *fp, uint32_t *data, uint32_t start, uint32_t offset)
uint32_t va;
uint32_t va_1;
uint32_t va_2;
- for (j = 1; j <= desc->miplevels; j++) {
+ for (j = 1; j <= miplevels; j++) {
va = 0;
va_1 = 0;
va_2 = 0;