# Learn about Arm Fixed Rate Compression (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?

After completing this Learning Path, you'll be able to perform the following tasks:

- Query for fixed-rate compression support.
- Specify what compression to use.
- Verify that compression is applied.

### Prerequisites

Before starting, you'll need the following prerequisites:

- 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

**How do I check whether my device supports the required Vulkan extensions?**

Call `vkEnumerateDeviceExtensionProperties` and look for `VK_EXT_image_compression_control`. If present, add it to `VkDeviceCreateInfo.ppEnabledExtensionNames` before `vkCreateDevice`.

**What should I do differently for swapchain images?**

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.

**Can I follow this Learning Path without creating a new Vulkan sample?**

Yes. You can use your own Vulkan application and refer to the Khronos Vulkan Samples code as a reference.

**How do I know if a specific image configuration supports fixed-rate compression?**

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.

**How do I request and verify that fixed-rate compression is applied?**

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.
