GPU-API ノート

このページの作者が自分で理解を深めるためにまとめているページです。よろしければお使いください。 色を付けてできるだけ見やすく楽しくしています。 このページはおそらくまだ情報が不完全で不正確です。これから直していきます。 現在はまだ全体像の把握に苦労している状態ですが、いずれはウェブ上で動かしたりコンパイルして動かせるサンプルを公開したいです。

モダンなGPU-APIの長所と短所

各APIの特徴

Direct3D

Metal

Vulkan

WebGPU

API同士の機能対応表

仮の名称 Direct3D Metal Vulkan WebGPU
インスタンス - - Instance -
物理デバイス Adaptor Device PhysicalDevice Adaptor
論理デバイス Device - Device Device
描画エンコーダー CommandAllocator RenderCommandEncoder CommandPool CommandEncoder
計算エンコーダー CommandAllocator ComputeCommandEncoder CommandPool CommandEncoder
描画パス RenderPass RenderPass RenderPass RenderPassEncoder
計算パス ComputePass ComputePass ComputePass ComputePassEncoder
コマンドバッファー CommandList CommandBuffer CommandBuffer CommandBuffer
キュー CommandQueue CommandQueue Queue Queue
記述子ヒープ DescriptorHeap - DescriptorPool -
記述子テーブル DescriptorTable - DescriptorSet BindGroup
ルート署名 RootSignature - - -
シェーダーモジュール ShaderBytecode Library Function ShaderModule ShaderModule
描画パイプライン GraphicsPipelineState RenderPipelineState Pipeline RenderPipeline
計算パイプライン ComputePipelineState ComputePipelineState Pipeline ComputePipeline
スワップチェイン Swapchain - Swapchain -
バッファー - Buffer Buffer Buffer
バッファービュー - - BufferView -
テクスチャー - Texture Image Texture
テクスチャービュー - - ImageView TextureView
サンプラー - Sampler Sampler Sampler

機能の意味や用途

インスタンス
APIを使い始めるための大元のオブジェクト。
物理デバイス
物理的なGPU。1つのGPUにつき1つ列挙される。
論理デバイス
論理的なGPUのハンドル。
描画エンコーダー
描画コマンドをGPU用に変換して実際に記録するメモリ領域。
計算エンコーダー
計算コマンドをGPU用に変換して実際に記録するメモリ領域。
描画パス
描画コマンドを記録する。描画エンコーダーから開始する。
計算パス
計算コマンドを記録する。計算エンコーダーから開始する。
コマンドバッファー
コマンドが積まれる。エンコーダーを終了すると確定する。
キュー
コマンドバッファーを渡して一度にデバイスに送信する。
記述子ヒープ
ビューサンプラーなどのリソースを複数記録したメモリ領域。
記述子テーブル
記述子ヒープの各リソースとシェーダーのレジスターを関連付ける。
ルート署名
複数の記述子テーブルコマンドバッファーに関連付ける。
シェーダーモジュール
コンパイル済みのシェーダー。パイプラインに指定する。
描画パイプライン
描画を行う工程。描画方法を指定する。
計算パイプライン
計算を行う工程。計算方法を指定する。
スワップチェイン
画面のマルチバッファリングのために使用される連なった画像。
バッファー
GPUの操作で使用するメモリのブロック。
バッファービュー
バッファーの一部を用途によって切り出した部分集合。
テクスチャー
描画で使用する画像。
テクスチャービュー
テクスチャーの一部を用途によって切り出した部分集合。
サンプラー
シェーダーがテクスチャーを利用する際に使用される設定。