VulkanのGPUリソース接続に、アプリがディスクリプタをメモリーへ直接配置する方式が加わった。拡張機能VK_EXT_descriptor_heapは、既存シェーダーへの対応付けも備え、ドライバーと解析ツールが対応する。
セットを介さずディスクリプタをヒープへ置く
ディスクリプタは、シェーダーが画像やバッファーなどのGPUリソースを参照するための情報だ。NVIDIAが対応を示したVulkan拡張VK_EXT_descriptor_heapでは、アプリが確保したメモリーにこの情報を書き込み、ヒープとして利用する。
従来のディスクリプタセット方式には、セットのレイアウト定義とプールからの割り当てが必要だった。先行するVK_EXT_descriptor_bufferでディスクリプタ用メモリーはアプリが管理できるようになったが、接続方式はセットに基づいていた。
ヒープの配置と参照範囲をアプリが管理
新方式では、リソース用とサンプラー用に別々のヒープを使う。一度に接続できるリソース用ヒープは一つで、アプリがメモリーの割り当てとディスクリプタの配置を担う。
既存のシェーダーがセット番号とバインディング番号を使っていても、ヒープ内のディスクリプタをそれらの番号へ対応付けられる。この対応付けによって、シェーダーコードを変更せずにヒープ方式へ移せる。
描画ごとの位置指定と配列からの選択
Push Index方式では、描画時に渡すプッシュデータの値がディスクリプタ位置のオフセットになる。同じシェーダーでも、描画ごとにヒープ内の異なる参照範囲を選べる。
Constant Offset方式は固定オフセットを起点とし、シェーダーが配列内のディスクリプタを選ぶ。NVIDIAの公開サンプルはこの方式を使い、216個の小立方体の各面に固有のテクスチャを割り当て、全体を一回のインスタンス描画で表示する。
ドライバーと解析ツールがヒープに対応
NVIDIAによると、ドライバー610以降がVK_EXT_descriptor_heapに対応する。描画処理からこの方式を利用するためのドライバー側の対応が用意された。
グラフィックス解析ツールのNsight Graphics 2026.2も、ディスクリプタヒープを使ったフレームの取得と参照状態の確認に対応する。既存のシェーダーリソース表示から、対応付けられたディスクリプタを調べられる。