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

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

=== Other Extension Metadata

*Last Modified Date*::
    2021-10-12
*IP Status*::
    No known IP claims.
*Contributors*::
  - Graeme Leese, Broadcom
  - Jan-Harald Fredriksen, Arm
  - Ricardo Garcia, Igalia
  - Shahbaz Youssefi, Google
  - Stu Smith, AMD

=== Description

After the publication of VK_EXT_custom_border_color, it was discovered that
some implementations had undefined behavior when combining a sampler that
uses a custom border color with image views whose component mapping is not
the identity mapping.

Since VK_EXT_custom_border_color has already shipped, this new extension
VK_EXT_border_color_swizzle was created to define the interaction between
custom border colors and non-identity image view swizzles, and provide a
work-around for implementations that must pre-swizzle the sampler border
color to match the image view component mapping it is combined with.

This extension also defines the behavior between samplers with an opaque
black border color and image views with a non-identity component swizzle,
which was previously left undefined.

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

=== Issues

None.

=== Version History

  * Revision 1, 2021-10-12 (Piers Daniell)
    - Internal revisions.
