---
title: Scaling the open-source PowerVR Vulkan driver to new GPU architectures
description: Discover the advancements in the open-source PowerVR Vulkan driver as it scales to support multiple GPU architectures, paving the way for future hardware integration.
image: https://blog.imaginationtech.com/hubfs/building.png
---

[![Imagination](https://blog.imaginationtech.com/hubfs/Imagination_December2019%20Theme/Images/Header%20Logo%20White.svg) ![Imagination](https://blog.imaginationtech.com/hubfs/Imagination_December2019%20Theme/Images/Header%20Logo%20Black.svg)](https://blog.imaginationtech.com/)

- [Products & Solutions](https://www.imaginationtech.com/products/) 
    - [GPU](https://www.imaginationtech.com/products/gpu/)
    - [CPU](https://www.imaginationtech.com/products/cpu/)
    - [AI](https://www.imaginationtech.com/products/ai/)
    - [Ethernet](https://www.imaginationtech.com/products/ethernet/)
    - [Ray Tracing](https://www.imaginationtech.com/products/ray-tracing/)
    - [Automotive](https://www.imaginationtech.com/products/automotive/)
    - [Consumer](https://www.imaginationtech.com/products/consumer/)
    - [Desktop](https://www.imaginationtech.com/products/desktop/)
    - [Mobile](https://www.imaginationtech.com/products/mobile/)
    - [Product Finder](https://www.imaginationtech.com/products/catalog/)
- [Developers](https://developer.imaginationtech.com/)
- [News & Insights](https://www.imaginationtech.com/news/) 
    - [Newsroom](https://www.imaginationtech.com/news/?query=news&filter-language=english&filter-search=)
    - [Resources Hub](https://www.imaginationtech.com/resources/?query=resource&filter-language=english&filter-search=)
    - [Blog](https://blog.imaginationtech.com/)
    - [Events](https://www.imaginationtech.com/events/)
    - [Webinars](https://www.imaginationtech.com/webinars/)
    - [University Programme](https://university.imgtec.com/)
    - [中文社区](http://imgtec.eetrend.com/)
- [Company](https://www.imaginationtech.com/about/) 
    - [About Us](https://www.imaginationtech.com/about/)
    - [Diversity, Equity and Inclusion](https://www.imaginationtech.com/diversity-equity-and-inclusion/)
    - [Imagining a Sustainable Future](https://www.imaginationtech.com/imagining-a-sustainable-future/)
    - [Corporate Social Responsibility](https://www.imaginationtech.com/csr/)
    - [Leadership Team](https://www.imaginationtech.com/leadership/)
    - [Contact Us](https://www.imaginationtech.com/contact-us/)
- [Careers](https://www.imaginationtech.com/careers/) 
    - [Work at Imagination](https://www.imaginationtech.com/careers/)
    - [Life at Imagination](https://www.imaginationtech.com/careers/life-at-imagination/)
    - [Hybrid Working](https://www.imaginationtech.com/careers/hybrid-working/)
    - [Early Careers](https://www.imaginationtech.com/careers/early-careers/)
    - [Search Jobs](https://www.imaginationtech.com/careers/vacancies/)

- [Products & Solutions](https://www.imaginationtech.com/products/) 
    - [GPU](https://www.imaginationtech.com/products/gpu/)
    - [CPU](https://www.imaginationtech.com/products/cpu/)
    - [AI](https://www.imaginationtech.com/products/ai/)
    - [Ethernet](https://www.imaginationtech.com/products/ethernet/)
    - [Ray Tracing](https://www.imaginationtech.com/products/ray-tracing/)
    - [Automotive](https://www.imaginationtech.com/products/automotive/)
    - [Consumer](https://www.imaginationtech.com/products/consumer/)
    - [Desktop](https://www.imaginationtech.com/products/desktop/)
    - [Mobile](https://www.imaginationtech.com/products/mobile/)
    - [Product Finder](https://www.imaginationtech.com/products/catalog/)
- [Developers](https://developer.imaginationtech.com/)
- [News & Insights](https://www.imaginationtech.com/news/) 
    - [Newsroom](https://www.imaginationtech.com/news/?query=news&filter-language=english&filter-search=)
    - [Resources Hub](https://www.imaginationtech.com/resources/?query=resource&filter-language=english&filter-search=)
    - [Blog](https://blog.imaginationtech.com/)
    - [Events](https://www.imaginationtech.com/events/)
    - [Webinars](https://www.imaginationtech.com/webinars/)
    - [University Programme](https://university.imgtec.com/)
    - [中文社区](http://imgtec.eetrend.com/)
- [Company](https://www.imaginationtech.com/about/) 
    - [About Us](https://www.imaginationtech.com/about/)
    - [Diversity, Equity and Inclusion](https://www.imaginationtech.com/diversity-equity-and-inclusion/)
    - [Imagining a Sustainable Future](https://www.imaginationtech.com/imagining-a-sustainable-future/)
    - [Corporate Social Responsibility](https://www.imaginationtech.com/csr/)
    - [Leadership Team](https://www.imaginationtech.com/leadership/)
    - [Contact Us](https://www.imaginationtech.com/contact-us/)
- [Careers](https://www.imaginationtech.com/careers/) 
    - [Work at Imagination](https://www.imaginationtech.com/careers/)
    - [Life at Imagination](https://www.imaginationtech.com/careers/life-at-imagination/)
    - [Hybrid Working](https://www.imaginationtech.com/careers/hybrid-working/)
    - [Early Careers](https://www.imaginationtech.com/careers/early-careers/)
    - [Search Jobs](https://www.imaginationtech.com/careers/vacancies/)

×

[GPU](https://blog.imaginationtech.com/tag/gpu) [Developers](https://blog.imaginationtech.com/tag/developers) [Open source](https://blog.imaginationtech.com/tag/open-source)

## Scaling the open-source PowerVR Vulkan driver to new GPU architectures

![Picture of Ashish Chauhan](https://blog.imaginationtech.com/hs-fs/hubfs/favicon.jpg?width=60&name=favicon.jpg)

 By [Ashish Chauhan](https://blog.imaginationtech.com/author/ashish-chauhan)

 Jul 17, 2026  |  4 min read

- 17 July 2026
- [Ashish Chauhan](https://blog.imaginationtech.com/author/ashish-chauhan)

This article summarizes the foundational work we’ve been doing to support multiple GPU architectures (multi-arch) in the open-source PowerVR Vulkan driver in Mesa. While this work does not instantly unlock a new GPU architecture by itself, it does put the structure in place so we can add newer hardware cleanly in the future. We anticipate the first Volcanic cores to be supported next year.

### What is multi-arch?

Multi-arch means one Vulkan driver codebase and one packaged driver that can support multiple PowerVR GPU architectures. As of today, the open-source driver supports only one of our architectures, Rogue, and, when there is only one supported architecture, it is easy for what is intended to be common code to end up including architecture specific details and picking up hidden dependencies. The changes that we’re making lay the groundwork so that future architectures (e.g. Volcanic) can be added without either rewriting the driver, adding top-level architecture-specific dispatching everywhere or growing big *"if (rogue) ... else ..."* ladders across the codebase. The changes are about keeping architecture-specific pieces well contained and making architecture-dependence explicit, which helps keep the driver maintainable.

The model we follow is the one described in the Mesa PowerVR multi-arch doc \[[1](https://docs.mesa3d.org/drivers/powervr.html#multi-architecture-support)\]. A small set of files are compiled multiple times, once per architecture. In PowerVR those are the *pvr\_arch\_\*.c* files. They define functions prefixed with *pvr\_arch\_*, where the arch part is a placeholder expanded using defines in the corresponding headers, supported by macros in *pvr\_macros.h*. The intent is that these functions are called from architecture-specific entry points routed through the common Vulkan dispatch-table code which can call both arch-specific and arch-agnostic code without mixing everything together.

The case that needs a bit more care is when architecture-agnostic code needs to call architecture-specific code. For that we use *PVR\_ARCH\_DISPATCH* and *PVR\_ARCH\_DISPATCH\_RET.* These macros need to see the per-arch definitions for all architectures, and the pattern used to make that work is to define a P*ER\_ARCH\_FUNCS(arch)* macro in each source file that needs to use the dispatch macros and instantiate it once per architecture.

### PowerVR specific choices

Our approach is similar to the path taken by other Vulkan drivers in Mesa, with a few PowerVR-specific choices. For example, architectures are named symbolically rather than numerically because there is not a clean numerical split that maps across generations. We also make use of *PVR\_PER\_ARCH()* style macros as part of the plumbing. To reduce churn while landing the infrastructure, many functions were introduced as *PVR\_PER\_ARCH(foo)* and temporarily aliased with *#define pvr\_foo PVR\_PER\_ARCH(foo)*, so call sites did not have to change immediately. The longer-term direction is to move toward “code block style” defines, so it is visible what is per-arch without making function calls noisy.

### Setting up the basic structure

Before the driver could reasonably become multi-arch, we split out the parts that cannot be architecture specific. Most of *pvr\_device* is architecture specific, but physical device and instance cannot be architecture specific, so *pvr\_instance* and *pvr\_physical\_device* were broken out of *pvr\_device.c* into their own modules. We also moved some architecture-specific details from headers into source files so less of the driver needs to be built in a hardware-specific way, including the work that removed the need for a wide ranging *pvr\_private.h* include.

 Another enabling change was storing the architecture in device-info. Right now, all supported devices are Rogue, but once we add more architectures we will need a runtime way to know which architecture we are dealing with. This is what will let us select per-arch tables and per-arch operations cleanly, and it will avoid pushing architecture knowledge into places that should not need it.

### Setting hardware definitions

After the basic structure was in place, the next focus was reducing accidental Rogue-only dependencies in shared code. A lot of the prep work was about being disciplined with hardware definitions, so the hardware definition includes and helpers were moved to where they are needed (for example, toward the end of source files). This reduced the chance that shared code silently becomes tied to Rogue. We do not yet have a perfect way to handle hardware definitions that are common across architectures. Because of this, there are a few places where the code intentionally defines *PVR\_BUILD\_ARCH\_ROGUE* and includes headers that require an architecture to be defined.

Alongside cleaning up the hardware definitions throughout the code, we restructured the hardware definitions file layout, so adding new GPUs in the future will not become unwieldy by having all the files in a single directory. This work removed *rogue\_hwdefs.h* and instead included the separate files in *pvr\_csb.h*, with the intention of making it easier to have separate directories per GPU architecture.

### Handling architecture-specific data

Once more than one architecture was enabled, another practical issue showed up quickly: some  architecture-specific data was stored inside structures that were not architecture-specific. We addressed this for the border table and the clear state. In both cases, the issue was the same: the data was architecture specific, the size varied by architecture, and it couldn’t live directly inside a shared structure in a fixed way. The fix was to store pointers to the architecture-specific data instead, so the shared device object remains shared while the per-arch data can vary.

The format-table work was another multi-arch preparation step. *pvr\_formats.\[ch\]* was reworked, so formats can be queried and reasoned without needing hardware details. PBE details were split out from the main table because they are not relevant for all GPUs. Binding support moved from a single supported bit to per-binding flags (vertex-buffer, sampler-view, render-target, depth-stencil, storage-image). Always invalid entries like compressed PBE formats were not stored. Helpers were added to query limits based on device-info.

### Optimising winsys

With those pieces in place, we then simplified the winsys side, which abstracts the kernel driver being used, so multi-arch does not require dispatch logic throughout the driver. In the *powervr winsys*, uses of *PVR\_ARCH\_DISPATCH* were mainly there to reach kernel stream definitions for *KMD\_STREAM\_HDR*. Using the per-arch infrastructure here does not buy much, because the code runs during job context initialisation and the header itself is mostly a simple field plus padding while the real firmware interface content is already open-coded. To solve it, dispatching was dropped in that path, and the winsys stopped depending on the kernel stream definitions.

For the *pvrsrvkm winsys,* the situation was different because the kernel driver does not abstract away the same hardware details. Instead of trying to remove architecture knowledge entirely, we provide specialized per-arch *pvr\_winsys\_ops* structures that handle each architecture individually. This moved dispatch out of individual winsys functions and into selecting the correct ops structure per architecture, which reduces complexity and will make the winsys easier to maintain as more architectures are added.

### Adding new definitions for Volcanic GPUs

On the new hardware side, an initial set of hardware definitions for Volcanic were added, with these more or less directly corresponding to what already exists for Rogue. This work is not complete enough to drive the GPU yet, but it is a step along the way. Some code paths were also made Rogue-only (like blitting and clearing) because for Volcanic the plan is to use vk\_meta, so it did not make sense to spend time trying to clean up the older path ahead of time.

Overall, the direction across these changes is consistent: keep architecture-specific pieces behind a clear per-arch model (*pvr\_arch\_\*.c, PVR\_PER\_ARCH*, and the dispatch or ops patterns), limit where hardware definitions are used to ensure shared code stays shared, and move architecture-specific decisions into device-info, per-arch tables, and per-arch operations. The Volcanic definitions start landing in a way that helps bring-up activities and the winsys changes reduce unnecessary dispatching while still handling the places where the kernel interface needs architecture-aware setup. 

### Future work & acknowledgements

With the groundwork in place, the next step is to build upon this foundation work by filling out the remaining architecture-specific pieces and using the new framework to bring up support for Volcanic.  Special thanks to Erik Faye-Lund, from Collabora, for leading the overall design and driving the changes that established the multi-architecture structure in the PowerVR Vulkan driver. I would also like to thank the supporting team members for their contributions, discussions, and reviews throughout this work.

Supporting code changes:  
[https://gitlab.freedesktop.org/mesa/mesa/-/merge\_requests/39526](https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39526)  
[https://gitlab.freedesktop.org/mesa/mesa/-/merge\_requests/39348](https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39348)  
[https://gitlab.freedesktop.org/mesa/mesa/-/merge\_requests/39035](https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39035)  
[https://gitlab.freedesktop.org/mesa/mesa/-/merge\_requests/38922](https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38922)  
[https://gitlab.freedesktop.org/mesa/mesa/-/merge\_requests/38888](https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38888)  
[https://gitlab.freedesktop.org/mesa/mesa/-/merge\_requests/38832](https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38832)  
[https://gitlab.freedesktop.org/mesa/mesa/-/merge\_requests/38352](https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38352)  
[https://gitlab.freedesktop.org/mesa/mesa/-/merge\_requests/37675](https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37675)  
[https://gitlab.freedesktop.org/mesa/mesa/-/merge\_requests/37554](https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37554)  
[https://gitlab.freedesktop.org/mesa/mesa/-/merge\_requests/37432](https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37432) 

 

[GPU](https://blog.imaginationtech.com/tag/gpu) [Developers](https://blog.imaginationtech.com/tag/developers) [Open source](https://blog.imaginationtech.com/tag/open-source)

#### Share this post

- <https://twitter.com/intent/tweet?url=https://blog.imaginationtech.com/scaling-the-open-source-powervr-vulkan-driver-to-new-gpu-architectures&text=Scaling%20the%20open-source%20PowerVR%20Vulkan%20driver%20to%20new%20GPU%20architectures>
- [mailto:?subject=https://blog.imaginationtech.com/scaling-the-open-source-powervr-vulkan-driver-to-new-gpu-architectures](mailto:?subject=https://blog.imaginationtech.com/scaling-the-open-source-powervr-vulkan-driver-to-new-gpu-architectures)

##### About the Author

![Picture of Ashish Chauhan](https://blog.imaginationtech.com/hs-fs/hubfs/favicon.jpg?width=60&name=favicon.jpg)

[Ashish Chauhan](https://blog.imaginationtech.com/author/ashish-chauhan)

 Ashish is a Senior Software Engineer at Imagination working as part of the open-source driver team.

[More from Ashish Chauhan](https://blog.imaginationtech.com/author/ashish-chauhan)

### Subscribe to our blog

### Introducing E-Series GPU

 Imagination E-Series GPU IP breaks through the barriers of throughput, memory, and power at the edge.Built for next-gen AI, E-Series delivers high performance and adaptability across mobile, automotive, desktop, and consumer markets, avoiding the rigidity of fixed-function accelerators while retaining the flexibility of GPU programmability. 

[Learn more](https://www.imaginationtech.com/products/e-series/)

### Read Next

[![voice assistant on phone](https://blog.imaginationtech.com/hubfs/AdobeStock_1830810279.jpeg)](https://blog.imaginationtech.com/llm-performance-and-acceleration-on-powervr-part-2)

## [LLM Performance and Acceleration on PowerVR - Part 2](https://blog.imaginationtech.com/llm-performance-and-acceleration-on-powervr-part-2)

[AI](https://blog.imaginationtech.com/tag/ai) [GPU](https://blog.imaginationtech.com/tag/gpu)

3 min read

Part 2: Recap Welcome to the second part of this two-part blog series about how to accelerate large...

[Read more](https://blog.imaginationtech.com/llm-performance-and-acceleration-on-powervr-part-2)

[![](https://blog.imaginationtech.com/hubfs/Untitled%20design%20(5).png)](https://blog.imaginationtech.com/from-graphics-to-ai-and-back-again)

## [From graphics to AI, and back again](https://blog.imaginationtech.com/from-graphics-to-ai-and-back-again)

[GPU](https://blog.imaginationtech.com/tag/gpu)

4 min read

Forty-five years ago, my father was studying radio engineering in the Soviet Union. The transistors...

[Read more](https://blog.imaginationtech.com/from-graphics-to-ai-and-back-again)

[![](https://blog.imaginationtech.com/hubfs/AdobeStock_223397823.jpeg)](https://blog.imaginationtech.com/imagination-chiplets-scaling-system-design-beyond-the-monolithic-soc)

## [Imagination & Chiplets: Scaling System Design Beyond the Monolithic SoC](https://blog.imaginationtech.com/imagination-chiplets-scaling-system-design-beyond-the-monolithic-soc)

[Automotive](https://blog.imaginationtech.com/tag/automotive) [GPU](https://blog.imaginationtech.com/tag/gpu)

4 min read

For many years, improvements in SoC performance came from process scaling and integrating more...

[Read more](https://blog.imaginationtech.com/imagination-chiplets-scaling-system-design-beyond-the-monolithic-soc)

- Products 
    - [GPU](https://www.imaginationtech.com/products/gpu/)
    - [CPU](https://www.imaginationtech.com/products/cpu/)
    - [AI](https://www.imaginationtech.com/products/ai/)
    - [Ethernet](https://www.imaginationtech.com/products/ethernet/)
    - [Ray Tracing](https://www.imaginationtech.com/products/ray-tracing/)
    - [Open Access](https://www.imaginationtech.com/products/open-access/)
    - [Design Optimization Kit](https://www.imaginationtech.com/products/design-optimisation-kit/)
    - [Product Finder](https://www.imaginationtech.com/products/catalog/)
- Developers 
    - [Developers](https://developer.imaginationtech.com/)
    - [PowerVR SDK and Tools](https://developer.imaginationtech.com/powervr-sdk/)
    - [Developer Downloads](https://developer.imaginationtech.com/downloads/)
    - [Developer Documentation](https://docs.imgtec.com/)
    - [Developer Forums](https://forums.imgtec.com)
- About Imagination 
    - [About Us](https://www.imaginationtech.com/about/)
    - [Career Opportunities](https://www.imaginationtech.com/careers/)
    - [Imagining a Sustainable Future](https://www.imaginationtech.com/imagining-a-sustainable-future/)
    - [Corporate Social Responsibility](https://www.imaginationtech.com/csr/)
    - [Imagination Leadership](https://www.imaginationtech.com/leadership/)
    - [Contact Imagination](https://www.imaginationtech.com/contact-us/)
- Applications 
    - [Automotive](https://www.imaginationtech.com/products/automotive/)
    - [Consumer](https://www.imaginationtech.com/products/consumer/)
    - [Desktop](https://www.imaginationtech.com/products/desktop/)
    - [Mobile](https://www.imaginationtech.com/products/mobile/)
- News & Insights 
    - [News](https://www.imaginationtech.com/news/)
    - [Resources](https://www.imaginationtech.com/resources/?query=resource&filter-language=english&filter-search=)
    - [Blog](https://blog.imaginationtech.com/)
    - [Events](https://www.imaginationtech.com/events/)
    - [Webinars](https://www.imaginationtech.com/webinars/)
    - [The Future of Automotive](https://www.imaginationtech.com/future-of-automotive/)
    - [University Programme](https://university.imgtec.com/)

[linkedin](https://www.linkedin.com/company/imgtec) [twitter](https://twitter.com/imaginationtech) [youtube](https://www.youtube.com/user/Imgtec/) [github](https://github.com/powervr-graphics)

![Imagination](https://blog.imaginationtech.com/hubfs/Imagination_December2019%20Theme/Images/Footer%20Logo.svg)

© Imagination Technologies Limited. All rights reserved.

- [Privacy Policy](https://www.imaginationtech.com/privacy/)
- [Use of Cookies](https://www.imaginationtech.com/cookies/)
- [Terms of Use](https://www.imaginationtech.com/terms/)
- [Trademarks](https://www.imaginationtech.com/trademarks/)
- [Quality Policy](https://www.imaginationtech.com/quality-policy/)

[linkedin](https://www.linkedin.com/company/imgtec) [twitter](https://twitter.com/imaginationtech) [youtube](https://www.youtube.com/user/Imgtec/) [github](https://github.com/powervr-graphics)

```json
{
  "@context" : "https://schema.org",
  "@type" : "VideoObject",
  "contentUrl" : "https://2426966.fs1.hubspotusercontent-na1.net/hubfs/2426966/video_assets/222365834860/inherited/web_optimized.mp4",
  "dateModified" : "2026-09-21T11:10:58.274Z",
  "duration" : "PT1M19S",
  "height" : 1080,
  "name" : "Neural Super Resolution - Public",
  "thumbnailUrl" : "https://resources.imaginationtech.com/hubfs/Social/Neural%20Super%20Resolution%20-%20Public.mp4/medium.jpg",
  "uploadDate" : "2026-09-21T11:10:47.048Z",
  "width" : 1920
}
```