aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Marek <[email protected]>2019-06-20 20:01:28 -0400
committerLucas Stach <[email protected]>2019-10-18 19:06:44 +0200
commitad48411d721e0b433a0f1876dc83d7979bd993b2 (patch)
tree44f08938cebb2b9cdb97689dc2deaeeb33fa74f7
parent95adc393eb4235c29696a4ad6244ad8d710db524 (diff)
etnaviv: fix linear_nearest / nearest_linear filters on GC7000Lite
MIN filter is only used when LOD MAX is at least 4 (I guess the 2 LSB don't actually exist). Signed-off-by: Jonathan Marek <[email protected]> Reviewed-by: Lucas Stach <[email protected]>
-rw-r--r--src/gallium/drivers/etnaviv/etnaviv_texture_desc.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/gallium/drivers/etnaviv/etnaviv_texture_desc.c b/src/gallium/drivers/etnaviv/etnaviv_texture_desc.c
index aef856b1798..f4f059a3c5d 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_texture_desc.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_texture_desc.c
@@ -62,13 +62,15 @@ etna_create_sampler_state_desc(struct pipe_context *pipe,
cs->SAMP_CTRL1 = VIVS_NTE_DESCRIPTOR_SAMP_CTRL1_UNK1;
uint32_t min_lod_fp8 = MIN2(etna_float_to_fixp88(ss->min_lod), 0xfff);
uint32_t max_lod_fp8 = MIN2(etna_float_to_fixp88(ss->max_lod), 0xfff);
+ uint32_t max_lod_min = ss->min_img_filter != ss->mag_img_filter ? 4 : 0;
+
if (ss->min_mip_filter != PIPE_TEX_MIPFILTER_NONE) {
cs->SAMP_LOD_MINMAX =
- VIVS_NTE_DESCRIPTOR_SAMP_LOD_MINMAX_MAX(max_lod_fp8) |
+ VIVS_NTE_DESCRIPTOR_SAMP_LOD_MINMAX_MAX(MAX2(max_lod_fp8, max_lod_min)) |
VIVS_NTE_DESCRIPTOR_SAMP_LOD_MINMAX_MIN(min_lod_fp8);
} else {
cs->SAMP_LOD_MINMAX =
- VIVS_NTE_DESCRIPTOR_SAMP_LOD_MINMAX_MAX(min_lod_fp8) |
+ VIVS_NTE_DESCRIPTOR_SAMP_LOD_MINMAX_MAX(MAX2(max_lod_fp8, max_lod_min)) |
VIVS_NTE_DESCRIPTOR_SAMP_LOD_MINMAX_MIN(min_lod_fp8);
}
cs->SAMP_LOD_BIAS =