# Spec Sheets

## Introduction

Information that applies to specific Adreno models is collected here:

## [Renderer Architecture](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-renderer-architecture)

On A5x GPUs, the Triangle setup rate is 1 prim/clock (but user clip planes turn this rate into a 50 cycles entire-pipeline stall if a primitive is clipped).

## [Tile-based Rendering](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-tile-based-rendering-best-practices-details)

### [Tile Shading Vulkan Extensions](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-tile-shading-vulkan-extensions)

#### [VK\_QCOM\_tile\_memory\_heap](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-vk-qcom-tile-memory-heap-best-practices)

A8x: On a deferred rendering implementation, we were able to achieve an over 29% bandwidth reduction using [VK\_QCOM\_tile\_memory\_heap](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-vk-qcom-tile-memory-heap-best-practices).

## [Render Surface Target](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-render-surface-target-device)

A6x-A8x supports rendering up to 8 render targets simultaneously

## [Vertex and Index Buffers](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-vertex-and-index-buffers-best-practices)

On A7x, the vertex cache size is 32 4D vertices.

## [Texture Features](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-texture-features-best-practices)

On A5x GPUs, ASTC is compressed in L2 and decompressed in L1. ETC formats stay compressed in L1.

A5x GPUs support up to 32 total textures in a single render pass – up to 16 textures in the fragment shader and up to 16 textures in the vertex shader.

### [Texture formats](https://docs.qualcomm.com/doc/80-78185-2/topic/overview.html#use-astc-texture-compression)

The following table describes functionality available for each supported texture format.

Tab A5x
Tab A6x

**\*** only when **optimal** layout is used.

| A5X Surface Format | Bit depth | Max MSAA | sRGB | Linear | Optimal | UBWC\* | Fast clear\* | UBWC Read only in texture unit\* | Point sample only | Blendable RT | UAV Read | UAV Write |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| A1\_UNORM | 1 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| A8\_UNORM | 8 bit | 8x |  | √ | √ |  | √ |  |  | √ |  | √ |
| R8\_UNORM | 8 bit | 8x |  | √ | √ |  | √ |  |  | √ | √ | √ |
| R8\_SNORM | 8 bit | 8x |  | √ | √ |  | √ |  |  | √ |  | √ |
| R8\_UINT | 8 bit | 8x |  | √ | √ |  | √ |  | √ |  | √ | √ |
| R8\_SINT | 8 bit | 8x |  | √ | √ |  | √ |  | √ |  | √ | √ |
| R4G4B4A4\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| R4G4B4X4\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| R5G5B5A1\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| R5G5B5X1\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| A1R5G5B5\_UNORM | 16 bit | 8x |  | √ |  |  |  |  |  | √ |  |  |
| X1R5G5B5\_UNORM | 16 bit | 8x |  | √ |  |  |  |  |  | √ |  |  |
| R5G6B5\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| R8G8\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R8G8\_SNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R8G8\_UINT | 16 bit | 8x |  | √ | √ | √ | √ |  | √ | √ |  | √ |
| R8G8\_SINT | 16 bit | 8x |  | √ | √ | √ | √ |  | √ | √ |  | √ |
| L8A8\_UNORM | 16 bit | 8x |  | √ | √ |  |  |  |  |  |  |  |
| A8L8\_UNORM | 16 bit | 8x |  | √ |  |  |  |  |  |  |  |  |
| R16\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R16\_SNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R16\_FP16 | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R16\_UINT | 16 bit | 8x |  | √ | √ | √ | √ |  | √ | √ | √ | √ |
| R16\_SINT | 16 bit | 8x |  | √ | √ | √ | √ |  | √ | √ | √ | √ |
| R8G8B8\_UNORM | 24 bit | 1x | √ | √ |  |  |  |  |  | √ |  |  |
| R8G8B8\_SNORM | 24 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| R8G8B8\_UINT | 24 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| R8G8B8\_SINT | 24 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| R8G8B8A8\_UNORM | 32 bit | 8x | √ | √ | √ | √ | √ |  |  | √ | √ | √ |
| R8G8B8X8\_UNORM | 32 bit | 8x | √ | √ | √ | √ | √ |  |  | √ | √ | √ |
| R8G8B8A8\_SNORM | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R8G8B8A8\_UINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ | √ | √ | √ |
| R8G8B8A8\_SINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ | √ | √ | √ |
| R9G9B9E5\_FLOAT | 32 bit | 8x |  | √ | √ |  |  |  |  |  |  |  |
| R10G10B10A2\_UNORM | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R10G10B10A2\_UNORM\_FAST | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| R10G10B10X2\_UNORM\_FAST | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| R10G10B10A2\_SNORM | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R10G10B10A2\_UINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ | √ |  | √ |
| R10G10B10A2\_SINT | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| A2R10G10B10\_UNORM | 32 bit | 8x |  | √ |  |  |  |  |  | √ |  |  |
| A2R10G10B10\_UNORM\_FAST | 32 bit | 8x |  | √ |  |  |  |  |  | √ |  |  |
| X2R10G10B10\_UNORM\_FAST | 32 bit | 8x |  | √ |  |  |  |  |  | √ |  |  |
| A2R10G10B10\_SNORM | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| A2R10G10B10\_UINT | 32 bit | 8x |  | √ |  |  |  |  | √ | √ |  |  |
| A2R10G10B10\_SINT | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R11G11B10\_FLOAT | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R16G16\_UNORM | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R16G16\_SNORM | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R16G16\_FP16 | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R16G16\_UINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ |  |  | √ |
| R16G16\_SINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ |  |  | √ |
| R32\_UNORM | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32\_SNORM | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32\_FP32 | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R32\_UINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32\_SINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32\_S15\_16\_FIXED | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R16G16B16\_UNORM | 48 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| R16G16B16\_SNORM | 48 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| R16G16B16\_FP16 | 48 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| R16G16B16\_UINT | 48 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| R16G16B16\_SINT | 48 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| R16G16B16A16\_UNORM | 64 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R16G16B16A16\_SNORM | 64 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R16G16B16A16\_FP16 | 64 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R16G16B16A16\_UINT | 64 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R16G16B16A16\_SINT | 64 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32G32\_UNORM | 64 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32\_SNORM | 64 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32\_FP32 | 64 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  | √ |
| R32G32\_UINT | 64 bit | 8x |  | √ | √ | √ | √ |  | √ |  |  | √ |
| R32G32\_SINT | 64 bit | 8x |  | √ | √ | √ | √ |  | √ |  |  | √ |
| R32G32\_S15\_16\_FIXED | 64 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32\_UNORM | 96 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32\_SNORM | 96 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32\_UINT | 96 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| R32G32B32\_SINT | 96 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| R32G32B32\_FP32 | 96 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32\_S15\_16\_FIXED | 96 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32A32\_UNORM | 128 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32A32\_SNORM | 128 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32A32\_FP32 | 128 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R32G32B32A32\_UINT | 128 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32G32B32A32\_SINT | 128 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32G32B32A32\_S15\_16\_FIXED | 128 bit |  |  | √ |  |  |  |  |  |  |  |  |
| UYVY\_UNORM | YUV packed (16 bit) | 1x |  | √ |  |  |  | √ |  | √ |  |  |
| YUY2\_UNORM (YUYV) | YUV packed (16 bit) | 1x |  | √ | √ |  |  | √ |  | √ |  |  |
| NV12\_UNORM | YUV planar (8/16 bit) | 1x |  | √ | √ |  |  | √ |  | √ |  |  |
| NV21\_UNORM | YUV planar (8/16 bit) | 1x |  | √ |  |  |  | √ |  | √ |  |  |
| IYUV\_UNORM | YUV planar (8 bit) | 1x |  | √ |  |  |  |  |  | √ |  |  |
| Y8U8V8A8\_UNORM | YUV packed (32 bit) | 1x |  | √ | √ | √ |  |  |  | √ |  |  |
| YVYU\_UNORM | YUV packed (16 bit) | 1x |  | √ |  |  |  | √ |  | √ |  |  |
| VYUY\_UNORM | YUV packed (16 bit) | 1x |  | √ |  |  |  | √ |  | √ |  |  |
| R24\_UNORM\_X8\_TYPELESS | Depth/stencil (32 bit) | 8x |  |  | √ | √ | √ |  |  |  |  |  |
| ATI\_TC\_RGB | Compressed (64 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ATI\_TC\_RGBA | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ATI\_TC\_RGBA\_INTERP | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| EACX2\_RG11\_UNSIGNED | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| EACX2\_RG11\_SIGNED | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| EAC\_R11\_UNSIGNED | Compressed (64 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| EAC\_R11\_SIGNED | Compressed (64 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| ETC1\_RGB | Compressed (64 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ETC2\_RGB8 | Compressed (64 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ETC2A\_RGBA8 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ETC2\_PTA\_RGBA8 | Compressed (64 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| BC1\_UNORM | Compressed (64 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| BC2\_UNORM | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| BC3\_UNORM | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| BC4\_UNORM | Compressed (64 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC4\_UNORM\_FAST | Compressed (64 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC4\_SNORM | Compressed (64 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC4\_SNORM\_FAST | Compressed (64 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC5\_UNORM | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC5\_UNORM\_FAST | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC5\_SNORM | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC5\_SNORM\_FAST | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC6H\_UFP16 | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC6H\_SFP16 | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC7\_UNORM | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_4X4 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_5X4 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_5X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_6X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_6X6 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_8X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_8X6 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_8X8 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_10X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_10X6 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_10X8 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_10X10 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_12X10 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_12X12 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_3X3X3 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_4X3X3 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_4X4X3 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_4X4X4 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_5X4X4 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_5X5X4 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_5X5X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_6X5X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_6X6X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_6X6X6 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |

**\*** only when **optimal** layout is used.

| A6X Surface Format | Bit depth | Max MSAA | sRGB | Linear | Optimal | UBWC\* | Fast clear\* | UBWC Read only in texture unit\* | Point sample only | Blendable RT | UAV Read | UAV Write |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| A1\_UNORM | 1 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| A8\_UNORM | 8 bit | 8x |  | √ | √ |  |  |  |  | √ | √ | √ |
| R8\_UNORM | 8 bit | 8x | √ | √ | √ |  |  |  |  | √ | √ | √ |
| R8\_SNORM | 8 bit | 8x |  | √ | √ |  |  |  |  | √ | √ | √ |
| R8\_UINT | 8 bit | 8x |  | √ | √ |  |  |  | √ |  | √ | √ |
| R8\_SINT | 8 bit | 8x |  | √ | √ |  |  |  | √ |  | √ | √ |
| R4G4B4A4\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| R4G4B4X4\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| R5G5B5A1\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| R5G5B5X1\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| A1R5G5B5\_UNORM | 16 bit | 8x |  | √ |  |  |  |  |  | √ |  |  |
| X1R5G5B5\_UNORM | 16 bit | 8x |  | √ |  |  |  |  |  | √ |  |  |
| R5G6B5\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| R8G8\_UNORM | 16 bit | 8x | √ | √ | √ | √ | √ |  |  | √ | √ | √ |
| R8G8\_SNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R8G8\_UINT | 16 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R8G8\_SINT | 16 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| L8A8\_UNORM | 16 bit | 8x |  | √ | √ |  |  |  |  |  |  |  |
| A8L8\_UNORM | 16 bit | 8x |  | √ |  |  |  |  |  |  |  |  |
| R16\_UNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R16\_SNORM | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R16\_FP16 | 16 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R16\_UINT | 16 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R16\_SINT | 16 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R8G8B8\_UNORM | 24 bit | 1x | √ | √ |  |  |  |  |  | √ |  |  |
| R8G8B8\_SNORM | 24 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| R8G8B8\_UINT | 24 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| R8G8B8\_SINT | 24 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| R8G8B8A8\_UNORM | 32 bit | 8x | √ | √ | √ | √ | √ |  |  | √ | √ | √ |
| R8G8B8X8\_UNORM | 32 bit | 8x | √ | √ | √ | √ | √ |  |  | √ | √ | √ |
| R8G8B8A8\_SNORM | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R8G8B8A8\_UINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R8G8B8A8\_SINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R9G9B9E5\_FLOAT | 32 bit | 8x |  | √ | √ |  |  |  |  |  |  |  |
| R10G10B10A2\_UNORM | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R10G10B10A2\_UNORM\_FAST | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| R10G10B10X2\_UNORM\_FAST | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ |  |  |
| R10G10B10A2\_SNORM | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R10G10B10A2\_UINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R10G10B10A2\_SINT | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| A2R10G10B10\_UNORM | 32 bit | 8x |  | √ |  |  |  |  |  | √ | √ | √ |
| A2R10G10B10\_UNORM\_FAST | 32 bit | 8x |  | √ |  |  |  |  |  | √ |  |  |
| X2R10G10B10\_UNORM\_FAST | 32 bit | 8x |  | √ |  |  |  |  |  | √ |  |  |
| A2R10G10B10\_SNORM | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| A2R10G10B10\_UINT | 32 bit | 8x |  | √ |  |  |  |  | √ |  | √ | √ |
| A2R10G10B10\_SINT | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R11G11B10\_FLOAT | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R16G16\_UNORM | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R16G16\_SNORM | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R16G16\_FP16 | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R16G16\_UINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R16G16\_SINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32\_UNORM | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32\_SNORM | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32\_FP32 | 32 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R32\_UINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32\_SINT | 32 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32\_S15\_16\_FIXED | 32 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R16G16B16\_UNORM | 48 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| R16G16B16\_SNORM | 48 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| R16G16B16\_FP16 | 48 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| R16G16B16\_UINT | 48 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| R16G16B16\_SINT | 48 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| R16G16B16A16\_UNORM | 64 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R16G16B16A16\_SNORM | 64 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R16G16B16A16\_FP16 | 64 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R16G16B16A16\_UINT | 64 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R16G16B16A16\_SINT | 64 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32G32\_UNORM | 64 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32\_SNORM | 64 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32\_FP32 | 64 bit | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R32G32\_UINT | 64 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32G32\_SINT | 64 bit | 8x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32G32\_S15\_16\_FIXED | 64 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32\_UNORM | 96 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32\_SNORM | 96 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32\_UINT | 96 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| R32G32B32\_SINT | 96 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| R32G32B32\_FP32 | 96 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32\_S15\_16\_FIXED | 96 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32A32\_UNORM | 128 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32A32\_SNORM | 128 bit |  |  | √ |  |  |  |  |  |  |  |  |
| R32G32B32A32\_FP32 | 128 bit | 4x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| R32G32B32A32\_UINT | 128 bit | 4x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32G32B32A32\_SINT | 128 bit | 4x |  | √ | √ | √ | √ |  | √ |  | √ | √ |
| R32G32B32A32\_S15\_16\_FIXED | 128 bit |  |  | √ |  |  |  |  |  |  |  |  |
| UYVY\_UNORM | YUV packed (16 bit) | 1x |  | √ |  |  |  |  |  | √ |  |  |
| YUY2\_UNORM (YUYV) | YUV packed (16 bit) | 1x |  | √ | √ |  |  |  |  | √ |  |  |
| NV12\_UNORM | YUV planar (8/16 bit) | 1x |  |  | √ | √ |  |  |  | √ |  |  |
| NV21\_UNORM | YUV planar (8/16 bit) | 1x |  | √ |  |  |  |  |  | √ |  |  |
| IYUV\_UNORM | YUV planar (8 bit) | 1x |  | √ |  |  |  |  |  | √ |  |  |
| Y8U8V8A8\_UNORM | YUV packed (32 bit) | 8x |  | √ | √ | √ | √ |  |  | √ | √ | √ |
| YVYU\_UNORM | YUV packed (16 bit) | 1x |  | √ |  |  |  |  |  | √ |  |  |
| VYUY\_UNORM | YUV packed (16 bit) | 1x |  | √ |  |  |  |  |  | √ |  |  |
| Y8\_UNORM | Y/U/V planar (8 bit)3 | 1x |  |  | √ | √ |  |  |  | √ | √ | √ |
| NV12\_UV\_UNORM | UV planar (16 bit) | 1x |  |  | √ | √ |  |  |  | √ | √ | √ |
| NV21\_VU\_UNORM | VU planar (16 bit) | 1x |  | √ |  |  |  |  |  | √ | √ | √ |
| NV12\_4R\_UNORM | YUV planar (8/16 bit) | 1x |  | √ | √ | √ |  |  |  | √ |  |  |
| NV12\_4R\_Y\_UNORM | Y planar (8 bit) | 1x |  | √ | √ | √ |  |  |  | √ |  | √ |
| NV12\_4R\_UV\_UNORM | UV planar (16 bit) | 1x |  | √ | √ | √ |  |  |  | √ |  | √ |
| P010\_UNORM | YUV planar (16/32 bit) | 1x |  | √ | √ | √ |  |  |  | √ |  |  |
| P010\_Y\_UNORM | Y planar (16 bit) | 1x |  | √ | √ | √ |  |  |  | √ | √ | √ |
| P010\_UV\_UNORM | UV planar (32 bit) | 1x |  | √ | √ | √ |  |  |  | √ | √ | √ |
| TP10\_UNORM | YUV planar ((32/3)/(32/3) bit) | 1x |  | √ | √ |  |  | √ |  |  |  |  |
| TP10\_Y\_UNORM | Y planar (32/3 bit) | 1x |  | √ | √ |  |  | √ |  |  |  | √ |
| TP10\_UV\_UNORM | UV planar (32/3 bit) | 1x |  | √ | √ |  |  | √ |  |  |  | √ |
| R24\_UNORM\_X8\_TYPELESS | Depth/stencil (32 bit) | 8x |  |  | √ | √ | √ |  |  |  |  |  |
| ATI\_TC\_RGB | Compressed (64 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ATI\_TC\_RGBA | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ATI\_TC\_RGBA\_INTERP | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| EACX2\_RG11\_UNSIGNED | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| EACX2\_RG11\_SIGNED | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| EAC\_R11\_UNSIGNED | Compressed (64 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| EAC\_R11\_SIGNED | Compressed (64 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| ETC1\_RGB | Compressed (64 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ETC2\_RGB8 | Compressed (64 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ETC2A\_RGBA8 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ETC2\_PTA\_RGBA8 | Compressed (64 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| BC1\_UNORM | Compressed (64 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| BC2\_UNORM | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| BC3\_UNORM | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| BC4\_UNORM | Compressed (64 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC4\_UNORM\_FAST | Compressed (64 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC4\_SNORM | Compressed (64 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC4\_SNORM\_FAST | Compressed (64 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC5\_UNORM | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC5\_UNORM\_FAST | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC5\_SNORM | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC5\_SNORM\_FAST | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC6H\_UFP16 | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC6H\_SFP16 | Compressed (128 bit) | 1x |  | √ | √ |  |  |  |  |  |  |  |
| BC7\_UNORM | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_4X4 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_5X4 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_5X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_6X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_6X6 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_8X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_8X6 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_8X8 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_10X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_10X6 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_10X8 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_10X10 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_12X10 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_12X12 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_3X3X3 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_4X3X3 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_4X4X3 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_4X4X4 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_5X4X4 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_5X5X4 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_5X5X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_6X5X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_6X6X5 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| ASTC\_6X6X6 | Compressed (128 bit) | 1x | √ | √ | √ |  |  |  |  |  |  |  |
| MIPI10\_R\_UNORM | MIPI packed 10 bit | 1x |  | √ |  |  |  |  |  |  |  | √ |
| MIPI10\_R\_UINT | MIPI packed 10 bit | 1x |  | √ |  |  |  |  | √ |  |  | √ |
| MIPI12\_R\_UNORM | MIPI packed 12 bit | 1x |  | √ |  |  |  |  |  |  |  | √ |
| MIPI12\_R\_UINT | MIPI packed 12 bit | 1x |  | √ |  |  |  |  | √ |  |  | √ |
| MIPI10\_BAYER\_UNORM | MIPI packed 10 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| MIPI10\_BAYER\_UINT | MIPI packed 10 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| MIPI12\_BAYER\_UNORM | MIPI packed 12 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| MIPI12\_BAYER\_UINT | MIPI packed 12 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| BAYER10\_UNORM | 16 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| BAYER12\_UNORM | 16 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| BAYER16\_UINT | 16 bit | 1x |  | √ |  |  |  |  | √ |  |  |  |
| BVH | 128 bit | 1x |  | √ |  |  |  |  |  |  |  |  |
| Y8\_UINT | Y/U/V planar (8 bit)3 | 1x |  |  | √ | √ |  |  | √ |  | √ | √ |
| NV12\_UV\_UINT | UV Planar (16bit) | 1x |  |  | √ | √ |  |  | √ |  | √ | √ |
| NV21\_VU\_UINT | VU Planar (16bit) | 1x |  |  |  |  |  |  | √ |  | √ | √ |
| P010\_Y\_UINT | Y Planar (16bit) | 1x |  |  | √ | √ |  |  | √ |  | √ | √ |
| P010\_UV\_UINT | UV Planar (32bit) | 1x |  |  | √ | √ |  |  | √ |  | √ | √ |
| X24\_TYPELESS\_G8\_UINT | Depth/stencil (32 bit) | 8x |  |  | √ | √ | √ |  | √ |  |  |  |

## [Shaders](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-shaders-best-practices)

On A7x GPUs, every time a shader on the graphics queue uses more than a multiple of 2000 shader instructions, there is a potential performance impact.  [Compute shaders on LPAC have a different limit.](https://docs.qualcomm.com/doc/80-78185-2/topic/spec_sheets.html#lpac-shader-instruction-count-device-specific)

On A7x GPUs, every time a shader uses more than a multiple of 32 vertex buffers, there is a potential performance impact.

On A7x GPUs, every time a shader uses more than a multiple of 16 unique uniform buffers, there is a potential performance impact.

On A7x GPUs, each time a shader uses more than a multiple of 16 unique textures and SSBOs (summed), there is a potential performance impact.

Each time a set of shaders in a pipeline use more than a multiple of N unique samplers (fragment and compute shaders in a single pipeline share this cache; a pipeline’s vertex shaders have an independent cache), there is a potential performance impact:

- On A5x, N=4
- On A6x-A8x, N=16

On A5x GPUs, one (1) texture per fragment at full rate is equivalent to 16 full precision ALUs.

## [Compute Shaders](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-compute-shaders)

On A7x GPUs, every time a compute shader on LPAC uses more than a multiple of 2256 shader instructions, there is a potential performance impact.  [Compute shaders on the Graphics queue have a different limit.](https://docs.qualcomm.com/doc/80-78185-2/topic/spec_sheets.html#instruction-count-device-specific)

On A7x GPUs:

- every time the number of concurrent local groups exceeds a multiple of 64, there is a potential performance impact.  If the shader spends a significant amount of time stalled, then the performance impact may occur for each multiple of 128 concurrent local groups
- there is another potential performance impact when the number of concurrent local groups exceeds a multiple of 2048

On A7x GPUs, every time the number of workgroups exceeds a multiple of 16 there is a potential performance impact.  This multiple is 8 if the shaders read each others’ memory

## [Mesh Shaders](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-mesh-shading-best-practices)

[VkPipelineShaderStageRequiredSubgroupSizeCreateInfo::requiredSubgroupSize](https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT.html) has an optimal number of waves to specify – exceeding this number may incur a performance bottleneck, while passing a smaller number won’t fully utilize the Gpu.  On A7x and A8x, this number is 64.

On A7x and A8x, every time a mesh shader payload exceeds a multiple of 32kB, there is a potential performance impact.

The mesh payload is calculated:

- PerPrimitiveIndexNum is 3 (for TRIANGLES topology) or 2 (for LINES topology)
- MaxVerticesNum and MaxPrimitiveNum should be presumed to be 256, since they cannot be higher ([ideally PrimitiveAttributeByteNum is 0](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-prefervertexattributestoprimitiveattributes))
- MeshShaderDataPayloadSize = MaxPrimitivesNum \* sizeof(uint32) \* PerPrimitiveIndexNum + MaxVerticesNum \* VertexAttributeBytesNum + MaxPrimitivesNum \* PrimitiveAttributeBytesNum

## [Raytracing](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-raytracing-best-practices)

Each invocation of [vkCmdBuildAccelerationStructuresKHR](https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresKHR.html) or [vkCmdBuildAccelerationStructuresIndirectKHR](https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresIndirectKHR.html) has an optimal number of acceleration structures to build – exceeding this number may incur a performance bottleneck, while passing a smaller number won’t fully utilize the Gpu.  On A8x, this number is 32.

The optimal ray query subgroup size on A8x is 64 (see [VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT::requiredSubgroupSize](https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT.html))

## [Queries](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-queries)

### [Occlusion queries](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-occlusion-query-correct-usage)

On A5x GPUs, no more than 512 [occlusion queries](https://docs.qualcomm.com/doc/80-78185-2/topic/mobile_best_practices.html#mobile-occlusion-query-correct-usage) should be active.  Usually all occlusion queries have a 3 frame delay for results.

Last Published: Mar 03, 2026

[Previous Topic
Effective ways to modify Shading Rate](https://docs.qualcomm.com/bundle/publicresource/80-78185-2/topics/overview.md) [Next Topic
Adreno GPU on Mobile: Best Practices](https://docs.qualcomm.com/bundle/publicresource/80-78185-2/topics/mobile_best_practices.md)