# [Learn about Arm Fixed Rate Compression (AFRC)](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/afrc/)

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/afrc/)
- [What is fixed-rate compression?](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/afrc/p1-intro/)
- [How to run the code examples](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/afrc/p2-setup/)
- [Vulkan Extensions](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/afrc/p3-enable-extensions/)
- [Query for compression support](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/afrc/p4-query-afrc-support/)
- [Request fixed-rate compression](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/afrc/p5-request-afrc/)
- [Verify that compression is applied](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/afrc/p6-verify-afrc/)
- [Next Steps](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/afrc/_next-steps/)

## About this Learning Path

|              |                      |
|--------------|----------------------|
| Skill level: | Advanced             |
| Reading time:| 25 min               |
| Last updated:| 05 Aug 2026          |

|              |                      |
|--------------|----------------------|
| Author:      | Jose-Emilio Munoz-Lopez, Arm |
| Arm IP:      | [Mali](https://support.arm.com/?tab=compute-ip&Product%20Type=Graphics%20Processors) [Immortalis](https://support.arm.com/?tab=compute-ip&Product%20Type=Graphics%20Processors) |
| Tags:        | [Graphics](https://learn.arm.com/tag/graphics) [Android](https://learn.arm.com/tag/android) [Vulkan](https://learn.arm.com/tag/vulkan) |

### Who is this for?
Software developers of Android applications and mobile games who are interested in learning how to enable Arm Fixed Rate Compression (AFRC) to improve performance.

### What will you learn?
Upon completion of this Learning Path, you will be able to:
- Query for fixed-rate compression support.
- Specify what compression to use.
- Verify that compression is applied.

### Prerequisites
Before starting, you will need the following:
- An appropriate Android device (e.g., Google Pixel 8) supporting the required Vulkan extensions.
- Knowledge of the Vulkan API.
- A Vulkan application that creates and uses images. This Learning Path shows how to use an API Sample in the [Khronos Vulkan Samples repository](https://github.com/KhronosGroup/Vulkan-Samples/blob/main/scripts/README.adoc#generate-api-sample) as an example.

### Summary
You’ll enable and verify Arm Fixed Rate Compression for Vulkan images on Android. You’ll confirm the required Vulkan extensions, define image settings, query fixed-rate support, and request compression with the appropriate `pNext` structure. Then, you’ll inspect the compression state to validate the setting for your images, including swapchain-specific extension requirements.

### Frequently asked questions
<details>
<summary>How do I check whether my device supports the required Vulkan extensions?</summary>
Call `vkEnumerateDeviceExtensionProperties` and look for `VK_EXT_image_compression_control`. If present, add it to `VkDeviceCreateInfo.ppEnabledExtensionNames` before `vkCreateDevice`.
</details>

<details>
<summary>What should I do differently for swapchain images?</summary>
Swapchain images also require `VK_EXT_image_compression_control_swapchain`. Enable this extension in addition to `VK_EXT_image_compression_control` if you want fixed-rate compression on swapchain images.
</details>

<details>
<summary>Can I follow this Learning Path without creating a new Vulkan sample?</summary>
Yes. You can use your own Vulkan application and refer to the Khronos Vulkan Samples code as a reference.
</details>

<details>
<summary>How do I know if a specific image configuration supports fixed-rate compression?</summary>
Populate `VkImageCreateInfo` with your format, image type, tiling, and usage, then use these properties to query support before creating the image. If supported, proceed to request fixed-rate compression.
</details>

<details>
<summary>How do I request and verify that fixed-rate compression is applied?</summary>
Provide a `VkImageCompressionControlEXT` with `VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT` in the `pNext` chain of `VkImageCreateInfo` when creating the image. Use `VK_EXT_image_compression_control` to inspect the compression state and confirm that fixed-rate compression is active.
</details>
