// Copyright 2019-2022 The Khronos Group Inc. // // SPDX-License-Identifier: CC-BY-4.0 include::{generated}/meta/{refprefix}VK_EXT_robustness2.adoc[] === 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 <> and <>. 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.adoc[] === 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