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

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

=== Other Extension Metadata

*Last Modified Date*::
    2020-01-29
*IP Status*::
    No known IP claims.
*Contributors*::
    - Liam Middlebrook, NVIDIA
    - Jeff Bolz, NVIDIA

=== Description

This extension adds stricter requirements for how out of bounds reads and
writes are handled.
Most accesses must: be tightly bounds-checked, out of bounds writes must: be
discarded, out of bound reads must: return zero.
Rather than allowing multiple possible [eq]#(0,0,0,x)# vectors, the out of
bounds values are treated as zero, and then missing components are inserted
based on the format as described in <<textures-conversion-to-rgba,
Conversion to RGBA>> and <<fxvertex-input-extraction,vertex input attribute
extraction>>.

These additional requirements may: be expensive on some implementations, and
should only be enabled when truly necessary.

This extension also adds support for "`null descriptors`", where
dlink:VK_NULL_HANDLE can: be used instead of a valid handle.
Accesses to null descriptors have well-defined behavior, and do not rely on
robustness.

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

=== Issues

1. Why do
   slink:VkPhysicalDeviceRobustness2PropertiesEXT::pname:robustUniformBufferAccessSizeAlignment
   and
   slink:VkPhysicalDeviceRobustness2PropertiesEXT::pname:robustStorageBufferAccessSizeAlignment
   exist?

*RESOLVED*: Some implementations cannot efficiently tightly bounds-check all
buffer accesses.
Rather, the size of the bound range is padded to some power of two multiple,
up to 256 bytes for uniform buffers and up to 4 bytes for storage buffers,
and that padded size is bounds-checked.
This is sufficient to implement D3D-like behavior, because D3D only allows
binding whole uniform buffers or ranges that are a multiple of 256 bytes,
and D3D raw and structured buffers only support 32-bit accesses.

=== Examples

None.

=== Version History

    * Revision 1, 2019-11-01 (Jeff Bolz, Liam Middlebrook)
        - Initial draft
