# VkTensorDescriptionARM(3) Manual Page

## Name

VkTensorDescriptionARM - Structure describing a tensor

Loading… please wait.

## C Specification

The `VkTensorDescriptionARM` structure is defined as:

    // Provided by VK_ARM_tensors
    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;

## Members

- `sType` is a VkStructureType value identifying this structure.

- `pNext` is `NULL` or a pointer to a structure extending this structure.

- `tiling` is a VkTensorTilingARM value specifying the tiling of the tensor

- `format` is a one component VkFormat describing the format and type of the data elements that will be contained in the tensor.

- `dimensionCount` is the number of dimensions for the tensor.

- `pDimensions` is a pointer to an array of integers of size `dimensionCount` providing the number of data elements in each dimension.

- `pStrides` is either `NULL` or is an array of size `dimensionCount` providing the strides in bytes for the tensor in each dimension.

- `usage` is a bitmask of VkTensorUsageFlagBitsARM specifying the usage of the tensor.

## Description

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 https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-formats-mandatory-features-tensor.

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`

## See Also

VK_ARM_tensors, VkFormat, VkPhysicalDeviceExternalTensorInfoARM, VkStructureType, VkTensorCreateInfoARM, VkTensorTilingARM, VkTensorUsageFlagsARM

## Document Notes

For more information, see the Vulkan Specification

This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.

## Copyright

Copyright 2014-2025 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0