// Copyright 2017-2021 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_EXT_sampler_filter_minmax.txt[]

=== Other Extension Metadata

*Last Modified Date*::
    2017-05-19
*Interactions and External Dependencies*::
  - Promoted to Vulkan 1.2 Core
*IP Status*::
    No known IP claims.
*Contributors*::
  - Jeff Bolz, NVIDIA
  - Piers Daniell, NVIDIA

=== Description

In unextended Vulkan, minification and magnification filters such as LINEAR
allow sampled image lookups to return a filtered texel value produced by
computing a weighted average of a collection of texels in the neighborhood
of the texture coordinate provided.

This extension provides a new sampler parameter which allows applications to
produce a filtered texel value by computing a component-wise minimum (MIN)
or maximum (MAX) of the texels that would normally be averaged.
The reduction mode is orthogonal to the minification and magnification
filter parameters.
The filter parameters are used to identify the set of texels used to produce
a final filtered value; the reduction mode identifies how these texels are
combined.

=== Promotion to Vulkan 1.2

All functionality in this extension is included in core Vulkan 1.2, with the
EXT suffix omitted.
The original type, enum and command names are still available as aliases of
the core functionality.

include::{generated}/interfaces/VK_EXT_sampler_filter_minmax.txt[]

=== Version History

 * Revision 2, 2017-05-19 (Piers Daniell)
   - Renamed to EXT

 * Revision 1, 2017-03-25 (Jeff Bolz)
   - Internal revisions
