diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c index 5e9bd37741e..fa68acccfcf 100644 --- a/src/mesa/state_tracker/st_atom_sampler.c +++ b/src/mesa/state_tracker/st_atom_sampler.c @@ -110,6 +110,20 @@ get_border_clamp(unsigned wrap, bool clamp_to_border) return wrap; } +static inline enum pipe_tex_reduction_mode +gl_reduction_mode_to_pipe(GLenum reduction_mode) +{ + switch (reduction_mode) { + case GL_MIN: + return PIPE_TEX_REDUCTION_MIN; + case GL_MAX: + return PIPE_TEX_REDUCTION_MAX; + case GL_WEIGHTED_AVERAGE_EXT: + default: + return PIPE_TEX_REDUCTION_WEIGHTED_AVERAGE; + } +} + /** * Convert a gl_sampler_object to a pipe_sampler_state object. */ @@ -243,6 +257,8 @@ st_convert_sampler(const struct st_context *st, * handles, as specified by ARB_bindless_texture. */ sampler->seamless_cube_map = msamp->Attrib.CubeMapSeamless; + + sampler->reduction_mode = gl_reduction_mode_to_pipe(msamp->Attrib.ReductionMode); } /** diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 68f36facc7a..055de9b9479 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -792,6 +792,7 @@ void st_init_extensions(struct pipe_screen *screen, { o(EXT_shader_samples_identical), PIPE_CAP_SHADER_SAMPLES_IDENTICAL }, { o(EXT_texture_array), PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS }, { o(EXT_texture_filter_anisotropic), PIPE_CAP_ANISOTROPIC_FILTER }, + { o(EXT_texture_filter_minmax), PIPE_CAP_SAMPLER_REDUCTION_MINMAX }, { o(EXT_texture_mirror_clamp), PIPE_CAP_TEXTURE_MIRROR_CLAMP }, { o(EXT_texture_shadow_lod), PIPE_CAP_TEXTURE_SHADOW_LOD }, { o(EXT_texture_swizzle), PIPE_CAP_TEXTURE_SWIZZLE },