VkTensorDescriptionARM
The VkTensorDescriptionARM structure is defined as:
typedef struct VkTensorDescriptionARM {
VkStructureType sType;
const void* pNext;
VkTensorTilingARM tiling;
VkFormat format;
uint32_t dimensionCount;
const int64_t* pDimensions;
const int64_t* pStrides;
VkTensorUsageFlagsARM usage;
} VkTensorDescriptionARM;
pub struct TensorDescriptionARM {
s_type: vk::StructureType,
p_next: *const c_void,
tiling: vk::TensorTilingARM,
format: vk::Format,
dimension_count: u32,
p_dimensions: *const i64,
p_strides: *const i64,
usage: vk::TensorUsageFlagsARM,
}
sTypeis a VkStructureType value identifying this structure.pNextisNULLor a pointer to a structure extending this structure.tilingis a VkTensorTilingARM value specifying the tiling of the tensorformatis a one component VkFormat describing the format and type of the data elements that will be contained in the tensor.dimensionCountis the number of dimensions for the tensor.pDimensionsis a pointer to an array of integers of sizedimensionCountproviding the number of data elements in each dimension.pStridesis eitherNULLor is an array of sizedimensionCountproviding the strides in bytes for the tensor in each dimension.usageis a bitmask of VkTensorUsageFlagBitsARM specifying the usage of the tensor.
When describing a tensor created with VK_TENSOR_TILING_OPTIMAL_ARM,
pStrides must be equal to NULL.
When describing a tensor created with VK_TENSOR_TILING_LINEAR_ARM,
pStrides is either an array of size dimensionCount or NULL.
The formats that must be supported for format are documented in
Table 106. Mandatory tensor format support.
Each element in the pStrides array describes the offset in bytes
between increments of the given dimension.
For example, pStrides[0] describes the offset between element
[x0,x1,x2,x3] and element [x0+1,x1,x2,x3].
The pStrides array can be used to determine whether a tensor is
packed or not.
If pStrides[dimensionCount-1] is equal to the size of a tensor
element and for each dimension n greater than 0 and less than
dimensionCount, pStrides[n-1] is equal to pStrides[n] *
pDimensions[n], then the tensor is a packed tensor.
If the tensorNonPacked feature is not enabled,
the tensor must be a packed tensor.
When a tensor is created with VK_TENSOR_TILING_LINEAR_ARM and
pStrides equal to NULL the tensor strides are calculated by the
vulkan implementation such that the resulting tensor is a packed tensor.
Expressed as an addressing formula, the starting byte of an element in a 4-dimensional, for example, linear tensor has address:
// Assume (x0,x1,x2,x3) are in units of elements.
address(x0,x1,x2,x3) = x0*pStrides[0] + x1*pStrides[1] + x2*pStrides[2] + x3*pStrides[3]
Valid Usage
VUID-VkTensorDescriptionARM-dimensionCount-09733
dimensionCount must be less than or equal to
VkPhysicalDeviceTensorPropertiesARM::maxTensorDimensionCount
VUID-VkTensorDescriptionARM-pDimensions-09734
For each i where i ≤ dimensionCount-1,
pDimensions[i] must be greater than 0
VUID-VkTensorDescriptionARM-pDimensions-09883
For each i where i ≤ dimensionCount-1,
pDimensions[i] must be less than or equal to
VkPhysicalDeviceTensorPropertiesARM::maxPerDimensionTensorElements
VUID-VkTensorDescriptionARM-format-09735
format must not be VK_FORMAT_UNDEFINED and must be a
one-component VkFormat
VUID-VkTensorDescriptionARM-pStrides-09736
pStrides[dimensionCount-1] must equal the size in
bytes of a tensor element
VUID-VkTensorDescriptionARM-pStrides-09737
For each i, pStrides[i] must be a multiple of the
element size
VUID-VkTensorDescriptionARM-pStrides-09738
For each i, pStrides[i] must be greater than 0 and
less than or equal to
VkPhysicalDeviceTensorPropertiesARM::maxTensorStride
VUID-VkTensorDescriptionARM-pStrides-09884
pStrides[0] × pDimensions[0] must be less than
or equal to VkPhysicalDeviceTensorPropertiesARM::maxTensorSize
VUID-VkTensorDescriptionARM-pStrides-09739
For each i greater than 0, pStrides[i-1] must be
greater than or equal to pStrides[i] ×
pDimensions[i] so that no two elements of the tensor reference
the same memory address
VUID-VkTensorDescriptionARM-None-09740
If the tensorNonPacked feature is not enabled, then the members of VkTensorDescriptionARM must describe a packed tensor
VUID-VkTensorDescriptionARM-tiling-09741
If tiling is VK_TENSOR_TILING_OPTIMAL_ARM and usage is
VK_TENSOR_USAGE_IMAGE_ALIASING_BIT_ARM then the size of the tensor
along its innermost dimension, i.e.
pDimensions[dimensionCount - 1], must be less than or
equal to 4
VUID-VkTensorDescriptionARM-tiling-09742
If tiling is VK_TENSOR_TILING_LINEAR_ARM then
VK_TENSOR_USAGE_IMAGE_ALIASING_BIT_ARM must not be set in
usage
Valid Usage (Implicit)
VUID-VkTensorDescriptionARM-sType-sType
sType must be VK_STRUCTURE_TYPE_TENSOR_DESCRIPTION_ARM
VUID-VkTensorDescriptionARM-tiling-parameter
tiling must be a valid VkTensorTilingARM value
VUID-VkTensorDescriptionARM-format-parameter
format must be a valid VkFormat value
VUID-VkTensorDescriptionARM-pDimensions-parameter
pDimensions must be a valid pointer to an array of dimensionCount int64_t values
VUID-VkTensorDescriptionARM-pStrides-parameter
If pStrides is not NULL, pStrides must be a valid pointer to an array of dimensionCount int64_t values
VUID-VkTensorDescriptionARM-usage-parameter
usage must be a valid combination of VkTensorUsageFlagBitsARM values
VUID-VkTensorDescriptionARM-usage-requiredbitmask
usage must not be 0
VUID-VkTensorDescriptionARM-dimensionCount-arraylength
dimensionCount must be greater than 0