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

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

=== Other Extension Metadata

*Last Modified Date*::
    2020-04-27
*IP Status*::
    No known IP claims.
*Contributors*::
    - Graeme Leese, Broadcom
    - Jan-Harald Fredriksen, ARM
    - Jeff Bolz, NVIDIA
    - Spencer Fricke, Samsung
    - Courtney Goeltzenleuchter, Google
    - Slawomir Cygan, Intel

=== Description

This extension adds stricter requirements for how out of bounds reads from
images are handled.
Rather than returning undefined values, most out of bounds reads return R,
G, and B values of zero and alpha values of either zero or one.
Components not present in the image format may be set to zero or to values
based on the format as described in <<textures-conversion-to-rgba,
Conversion to RGBA>>.

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

=== Issues

1. How does this extension differ from VK_EXT_robustness2?

The guarantees provided by this extension are a subset of those provided by
the robustImageAccess2 feature of VK_EXT_robustness2.
Where this extension allows return values of (0, 0, 0, 0) or (0, 0, 0, 1),
robustImageAccess2 requires that a particular value dependent on the image
format be returned.
This extension provides no guarantees about the values returned for an
access to an invalid Lod.

=== Examples

None.

=== Version History

    * Revision 1, 2020-04-27 (Graeme Leese)
        - Initial draft
