<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/implementing-drm-format-modifiers-in-nvk-q7pppywzf" -->

---
title: Implementing DRM format modifiers in NVK | daily.dev
description: DRM format modifier support via VK_EXT_image_drm_format_modifier has landed in NVK, the open-source Vulkan driver for NVIDIA hardware, and will be included in...
canonical: https://daily.dev/posts/implementing-drm-format-modifiers-in-nvk-q7pppywzf
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Implementing DRM format modifiers in NVK | daily.dev
og:description: DRM format modifier support via VK_EXT_image_drm_format_modifier has landed in NVK, the open-source Vulkan driver for NVIDIA hardware, and will be included in...
og:url: https://daily.dev/posts/implementing-drm-format-modifiers-in-nvk-q7pppywzf
og:image: https://api.daily.dev/og/posts/q7PPPywZf.png
og:image:alt: Implementing DRM format modifiers in NVK
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Implementing DRM format modifiers in NVK

**[Collabora Blog](https://daily.dev/sources/collabora)** · 15 min read · 0 upvotes · 0 comments

## Summary

DRM format modifier support via VK_EXT_image_drm_format_modifier has landed in NVK, the open-source Vulkan driver for NVIDIA hardware, and will be included in Mesa 24.1. DRM format modifiers are 64-bit integers defined in drm_fourcc.h that explicitly describe image layout schemes including tiling and compression, replacing fragile driver heuristics for inter-process image sharing. This enables NVK to share tiled images with compositors without costly linear copies, completes robust OpenGL support via Zink, and enables GameScope support on NVIDIA hardware. The implementation required working around two bugs in the old Nouveau GL driver related to PTE kind handling, leading to a design where dedicated allocations for modifier images pass PTE kind and tile mode through to the kernel for backwards compatibility. Kernel patches enabling this are targeting Linux 6.10.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.collabora.com/news-and-blog/news-and-events/implementing-drm-format-modifiers-in-nvk.html>

## Questions this post answers

### What are DRM format modifiers and why are they needed for GPU image sharing on Linux?

DRM format modifiers are 64-bit integers defined in drm_fourcc.h in the Linux kernel that explicitly describe an image's memory layout, including tiling and compression. They replace fragile driver heuristics by providing an unambiguous negotiation mechanism: each driver reports supported modifiers, the intersection is computed, and the best mutually supported modifier is chosen at image creation time. This ensures all components sharing an image — compositors, display drivers, decode APIs — agree on the exact memory layout.

_Developers working on Linux display pipelines or Wayland compositors track modifier ecosystem changes on daily.dev._

### Why does NVK use VM_BIND and per-image virtual address ranges instead of setting PTE kind on buffer objects directly?

NVIDIA GPUs encode image information into page table entries as an 8-bit PTE kind, meaning memory is not layout-agnostic. Because Vulkan allows multiple images of different kinds to overlap in the same physical memory, NVK assigns each image a unique virtual address range and supplies the PTE kind at VM_BIND time. This lets different images backed by the same physical pages carry different PTE kinds, using the same mechanism as Vulkan sparse binding.

_Engineers porting Vulkan drivers to hardware with non-trivial memory models find related deep-dives on daily.dev._

### What bugs exist in the old Nouveau GL driver's DRM format modifier handling and how does NVK work around them?

The old Nouveau GL driver ignores the modifier on imported images and reads tile mode from the BO instead, and it has no mechanism to override the PTE kind on a BO without a full rewrite to VM_BIND APIs. NVK works around this by returning prefersDedicatedAllocation=true for modifier images and, when a dedicated allocation is used, passing the PTE kind and tile mode through to the kernel at allocation time, emulating the old driver's behavior so images allocated by NVK can be correctly imported into Nouveau GL.

_Keeping up with open source NVIDIA driver compatibility issues is easier when the relevant patches surface on daily.dev._

## Similar posts on daily.dev

- [Older AMD GPUs Score Another Open-Source Driver Win From Valve: DRM Format Modifiers](https://daily.dev/posts/older-amd-gpus-score-another-open-source-driver-win-from-valve-drm-format-modifiers-zfcdkxnci) · Phoronix · 0 upvotes · 0 comments
- [DRM Format Modifiers For Old AMD GPUs Coming With Linux 7.3: Thanks Valve](https://daily.dev/posts/drm-format-modifiers-for-old-amd-gpus-coming-with-linux-7-3-thanks-valve-opy7i19sc) · Phoronix · 0 upvotes · 0 comments
- [Imagination GPU Driver Update Adds Support for Additional Vulkan and OpenCL Extensions](https://daily.dev/posts/imagination-gpu-driver-update-adds-support-for-additional-vulkan-and-opencl-extensions-j3f3xqnmj) · Khronos · 0 upvotes · 0 comments
- [NVIDIA 610.43.02 Linux Driver Released With Vulkan Improvements, DRM Color Pipeline API](https://daily.dev/posts/nvidia-610-43-02-linux-driver-released-with-vulkan-improvements-drm-color-pipeline-api-t6hoqscui) · Phoronix · 0 upvotes · 0 comments

---

Tags: [#vulkan](https://daily.dev/tags/vulkan), [#mesa](https://daily.dev/tags/mesa)

[View this post on daily.dev](https://daily.dev/posts/implementing-drm-format-modifiers-in-nvk-q7pppywzf)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Implementing DRM format modifiers in NVK","url":"https://daily.dev/posts/implementing-drm-format-modifiers-in-nvk-q7pppywzf","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/implementing-drm-format-modifiers-in-nvk-q7pppywzf"},"datePublished":"2026-08-11T08:54:37.768Z","dateModified":"2026-08-11T09:18:44.092Z","description":"DRM format modifier support via VK_EXT_image_drm_format_modifier has landed in NVK, the open-source Vulkan driver for NVIDIA hardware, and will be included in...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/f359002d7c474357bc6ce18fd60da2b5?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/f359002d7c474357bc6ce18fd60da2b5?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Collabora Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Collabora Blog","logo":"https://media.daily.dev/image/upload/s--ZGZ0FjqS--/f_auto,q_auto/v1786438306/logos/collabora?_a=BAMAMicg0","url":"https://daily.dev/sources/collabora"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/implementing-drm-format-modifiers-in-nvk-q7pppywzf","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"vulkan,mesa","timeRequired":"PT15M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Collabora Blog","item":"https://daily.dev/sources/collabora"},{"@type":"ListItem","position":3,"name":"Implementing DRM format modifiers in NVK"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/implementing-drm-format-modifiers-in-nvk-q7pppywzf#faq","mainEntity":[{"@type":"Question","name":"What are DRM format modifiers and why are they needed for GPU image sharing on Linux?","acceptedAnswer":{"@type":"Answer","text":"DRM format modifiers are 64-bit integers defined in drm_fourcc.h in the Linux kernel that explicitly describe an image's memory layout, including tiling and compression. They replace fragile driver heuristics by providing an unambiguous negotiation mechanism: each driver reports supported modifiers, the intersection is computed, and the best mutually supported modifier is chosen at image creation time. This ensures all components sharing an image — compositors, display drivers, decode APIs — agree on the exact memory layout. Developers working on Linux display pipelines or Wayland compositors track modifier ecosystem changes on daily.dev."}},{"@type":"Question","name":"Why does NVK use VM_BIND and per-image virtual address ranges instead of setting PTE kind on buffer objects directly?","acceptedAnswer":{"@type":"Answer","text":"NVIDIA GPUs encode image information into page table entries as an 8-bit PTE kind, meaning memory is not layout-agnostic. Because Vulkan allows multiple images of different kinds to overlap in the same physical memory, NVK assigns each image a unique virtual address range and supplies the PTE kind at VM_BIND time. This lets different images backed by the same physical pages carry different PTE kinds, using the same mechanism as Vulkan sparse binding. Engineers porting Vulkan drivers to hardware with non-trivial memory models find related deep-dives on daily.dev."}},{"@type":"Question","name":"What bugs exist in the old Nouveau GL driver's DRM format modifier handling and how does NVK work around them?","acceptedAnswer":{"@type":"Answer","text":"The old Nouveau GL driver ignores the modifier on imported images and reads tile mode from the BO instead, and it has no mechanism to override the PTE kind on a BO without a full rewrite to VM_BIND APIs. NVK works around this by returning prefersDedicatedAllocation=true for modifier images and, when a dedicated allocation is used, passing the PTE kind and tile mode through to the kernel at allocation time, emulating the old driver's behavior so images allocated by NVK can be correctly imported into Nouveau GL. Keeping up with open source NVIDIA driver compatibility issues is easier when the relevant patches surface on daily.dev."}}]}
```

