Sparse resources have several features that must be enabled explicitly at
resource creation time. The features are enabled by including bits in the
flags
parameter of VkImageCreateInfo
or
VkBufferCreateInfo
. Each feature also has one or more corresponding
feature enables specified in VkPhysicalDeviceFeatures
.
Sparse binding is the base feature, and provides the following capabilities:
VK_IMAGE_CREATE_SPARSE_BINDING_BIT
and
VK_BUFFER_CREATE_SPARSE_BINDING_BIT
bits.
VK_IMAGE_CREATE_SPARSE_BINDING_BIT
(but not VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
) supports all
formats that non-sparse usage supports, and supports both
VK_IMAGE_TILING_OPTIMAL
and VK_IMAGE_TILING_LINEAR
tiling.
Sparse Residency builds on (and requires) the sparseBinding
feature. It includes the following capabilities:
VkPhysicalDeviceSparseProperties
::residencyNonResidentStrict
.
If this property is present, accesses to unbound regions of the
resource are well defined and behave as if the data bound is populated
with all zeros; writes are discarded. When this property is absent,
accesses are considered safe, but reads will return undefined values.
VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
and
VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
bits.
is advertised on a finer grain via the following features:
sparseResidencyBuffer
:
Support for creating VkBuffer
objects with the
VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
.
sparseResidencyImage2D
:
Support for creating 2D single-sampled VkImage
objects with
VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
.
sparseResidencyImage3D
:
Support for creating 3D VkImage
objects with
VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
.
sparseResidency2Samples
:
Support for creating 2D VkImage
objects with 2 samples and
VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
.
sparseResidency4Samples
:
Support for creating 2D VkImage
objects with 4 samples and
VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
.
sparseResidency8Samples
:
Support for creating 2D VkImage
objects with 8 samples and
VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
.
sparseResidency16Samples
:
Support for creating 2D VkImage
objects with 16 samples and
VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
.
Implementations supporting sparseResidencyImage2D
are only
required to support sparse 2D, single-sampled images. Support is
not required for sparse 3D and MSAA images and is enabled via
sparseResidencyImage3D
, sparseResidency2Samples
,
sparseResidency4Samples
, sparseResidency8Samples
, and
sparseResidency16Samples
.
VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
supports all non-compressed color formats with power-of-two texel size
that non-sparse usage supports. Additional formats may also be
supported and can be queried via
vkGetPhysicalDeviceSparseImageFormatProperties
.
VK_IMAGE_TILING_LINEAR
tiling is not supported.
Sparse aliasing provides the following capability that can be enabled per resource:
Allows physical memory ranges to be shared between multiple locations in the same sparse resource or between multiple sparse resources, with each binding of a memory location observing a consistent interpretation of the memory contents.
See Sparse Memory Aliasing for more information.