モダンなGPU-APIの長所と短所
-
GPUに近いローレベルな命令によって、
プログラマーが明示的に意図を伝えられるため、
CPU側にあるドライバーのオーバーヘッドを減少させる。
その結果、
- 高速に動作する。
- 特にモバイルデバイスの発熱を防止したり、バッテリーの持続時間を向上する。
- ステートレスなのでマルチスレッドに適している。
- グラフィックス機能とコンピュート機能を統一し、どちらも1つのAPIで利用できるようになる。
- ただし従来のAPIと違い、難易度が高く習得が難しい。
各APIの特徴
Direct3D
- Windows, XboxなどのMicrosoftのプラットフォーム上で動作する。
- C++などの言語で利用できる。
- macOS, iOSなどのAppleのプラットフォーム上で動作する。
- Swift, Objective-C, C++などの言語で利用できる。
Vulkan
- 主にAndroid, Linuxなどで動作する。クロスプラットフォームでありWindows, Nintendo Switchなどでも動作する。
- C, C++などの言語で利用できる。
WebGPU
- 上記3つのAPIと異なり、Firefox, Chrome, Edge, Safariといったウェブブラウザ上で動作する。
- JavaScript, TypeScriptなどの言語で利用できる。
- 内部的には上記のDirect3D, Metal, Vulkanなどを利用している。
API同士の機能対応表
- D3D12, DXGI, MTL, VK, GPUといった接頭辞は省略しています。
- 仮の名称はこのページで付けた名前です。
仮の名称
| 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の操作で使用するメモリのブロック。
- バッファービュー
- バッファーの一部を用途によって切り出した部分集合。
- テクスチャー
- 描画で使用する画像。
- テクスチャービュー
- テクスチャーの一部を用途によって切り出した部分集合。
- サンプラー
- シェーダーがテクスチャーを利用する際に使用される設定。