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 <jonathan@marek.ca>
Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
This commit is contained in:
Jonathan Marek 2019-06-20 20:01:28 -04:00 committed by Lucas Stach
parent 95adc393eb
commit ad48411d72

View file

@ -62,13 +62,15 @@ etna_create_sampler_state_desc(struct pipe_context *pipe,
cs->SAMP_CTRL1 = VIVS_NTE_DESCRIPTOR_SAMP_CTRL1_UNK1; 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 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_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) { if (ss->min_mip_filter != PIPE_TEX_MIPFILTER_NONE) {
cs->SAMP_LOD_MINMAX = 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); VIVS_NTE_DESCRIPTOR_SAMP_LOD_MINMAX_MIN(min_lod_fp8);
} else { } else {
cs->SAMP_LOD_MINMAX = 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); VIVS_NTE_DESCRIPTOR_SAMP_LOD_MINMAX_MIN(min_lod_fp8);
} }
cs->SAMP_LOD_BIAS = cs->SAMP_LOD_BIAS =