summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2014-10-01 11:58:22 -0700
committerEric Anholt <eric@anholt.net>2014-10-01 17:03:36 -0700
commit4111b1d54b6c0ad0031506f81fb08d94b2db5a72 (patch)
tree14d7389d1f7f90a6fda0a154e4255f7bd7adc922 /src
parent75f8e0bc2ae03154038c3f17fec1bcad699856e0 (diff)
vc4: Fix the mapping of the minification filter to HW values.
They're actually as documented in the HW specs and the GL mipmapping enums order. Fixes fbo-generatemipmap-filtering , and some other tests where we were off by a few bits due to unexpected linear filtering.
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/vc4/vc4_program.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c
index c3da5fe2c6f..544ae662825 100644
--- a/src/gallium/drivers/vc4/vc4_program.c
+++ b/src/gallium/drivers/vc4/vc4_program.c
@@ -1982,12 +1982,12 @@ write_texture_p1(struct vc4_context *vc4,
struct pipe_sampler_view *texture = texstate->textures[unit];
struct vc4_resource *rsc = vc4_resource(texture->texture);
struct pipe_sampler_state *sampler = texstate->samplers[unit];
- static const uint32_t mipfilter_map[] = {
- [PIPE_TEX_MIPFILTER_NEAREST] = 2,
- [PIPE_TEX_MIPFILTER_LINEAR] = 4,
- [PIPE_TEX_MIPFILTER_NONE] = 0
+ static const uint8_t minfilter_map[6] = {
+ 2, 4, /* mipfilter nearest */
+ 3, 5, /* mipfilter linear */
+ 1, 0, /* mipfilter none */
};
- static const uint32_t imgfilter_map[] = {
+ static const uint32_t magfilter_map[] = {
[PIPE_TEX_FILTER_NEAREST] = 1,
[PIPE_TEX_FILTER_LINEAR] = 0,
};
@@ -2000,9 +2000,9 @@ write_texture_p1(struct vc4_context *vc4,
((rsc->vc4_format >> 4) << 31) |
(texture->texture->height0 << 20) |
(texture->texture->width0 << 8) |
- (imgfilter_map[sampler->mag_img_filter] << 7) |
- ((imgfilter_map[sampler->min_img_filter] +
- mipfilter_map[sampler->min_mip_filter]) << 4) |
+ (magfilter_map[sampler->mag_img_filter] << 7) |
+ (minfilter_map[sampler->min_mip_filter * 2 +
+ sampler->min_img_filter] << 4) |
(translate_wrap(sampler->wrap_t, either_nearest) << 2) |
(translate_wrap(sampler->wrap_s, either_nearest) << 0));
}