st/mesa: add EXT_texture_filter_minmax support
authorIlia Mirkin <imirkin@alum.mit.edu>
Tue, 9 Mar 2021 20:53:18 +0000 (15:53 -0500)
committerMarge Bot <eric+marge@anholt.net>
Fri, 12 Mar 2021 00:05:24 +0000 (00:05 +0000)
This also trivially adds ARB_texture_filter_minmax, since the EXT
variant is a strict superset.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9487>

src/mesa/state_tracker/st_atom_sampler.c
src/mesa/state_tracker/st_extensions.c

index 5e9bd37..fa68acc 100644 (file)
@@ -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);
 }
 
 /**
index 68f36fa..055de9b 100644 (file)
@@ -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                  },