diff --git a/src/mesa/main/consts_exts.h b/src/mesa/main/consts_exts.h index 1ed1f0edd65..17f3586ffd8 100644 --- a/src/mesa/main/consts_exts.h +++ b/src/mesa/main/consts_exts.h @@ -685,6 +685,12 @@ struct gl_constants */ GLboolean ForceIntegerTexNearest; + /** + * Treat 32-bit floating-point textures using GL_LINEAR filters as + * GL_NEAREST. + */ + GLboolean ForceFloat32TexNearest; + /** * Does the driver support real 32-bit integers? (Otherwise, integers are * simulated via floats.) diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c index c2724abf332..239847985bc 100644 --- a/src/mesa/state_tracker/st_atom_sampler.c +++ b/src/mesa/state_tracker/st_atom_sampler.c @@ -70,7 +70,8 @@ st_convert_sampler(const struct st_context *st, sampler->seamless_cube_map |= seamless_cube_map; - if (texobj->_IsIntegerFormat) { + if (texobj->_IsIntegerFormat || + (texobj->_IsFloat && st->ctx->Const.ForceFloat32TexNearest)) { sampler->min_img_filter = PIPE_TEX_FILTER_NEAREST; sampler->min_mip_filter = PIPE_TEX_FILTER_NEAREST; sampler->mag_img_filter = PIPE_TEX_FILTER_NEAREST; diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index ab7350e4248..bb5addff18c 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -699,6 +699,9 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe, ctx->Const.NoClippingOnCopyTex = screen->get_param(screen, PIPE_CAP_NO_CLIP_ON_COPY_TEX); + ctx->Const.ForceFloat32TexNearest = + !screen->get_param(screen, PIPE_CAP_TEXTURE_FLOAT_LINEAR); + ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].PositionAlwaysInvariant = options->vs_position_always_invariant; ctx->Const.ShaderCompilerOptions[MESA_SHADER_TESS_EVAL].PositionAlwaysPrecise = options->vs_position_always_precise;