目次 - SDL 3.0 API(機能別) - 3DレンダリングとGPUコンピューティング

3DレンダリングとGPUコンピューティング

概要

GPU APIは現代的なグラフィックハードウェアと対話するアプリケーションに対して環境に依存しない方法を提供する. Metal, Vulkan, Direct3D 12の形式の3Dグラフィックとコンピューティングの両方を提供する.

基本的なワークフローは次のようになる:

アプリケーションはSDL_CreateGPUDevice()でGPUデバイスを生成し, それをSDL_ClaimWindowForGPUDevice()でウィンドウと関連付ける――厳密には, 画像処理などのためにウィンドウを全く使わずに画面外でもレンダリングできる.

次に, アプリケーションは静的データ(一度生成され, 繰り返し使われるもの)を用意する. 例:

レンダリングのために, アプリケーションは1つ以上のコマンドバッファをSDL_AcquireGPUCommandBuffer()で生成する. コマンドバッファは, バッチでGPUに送られるレンダリング命令を溜める. 複雑なシーンは複数のコマンドバッファが使用でき, 正しい順序ならば恐らく複数スレッドに渡り並列に構成される. しかし, 多くのアプリケーションは1フレーム当たり1つのコマンドバッファで十分である

レンダリングは, テクスチャ(別のAPIでは「レンダーターゲット」と呼ばれる)か, スワップチェーンテクスチャ(ウィンドウのコンテキストに対する特別なテクスチャ)に対して行うことができる. SDL_WaitAndAcquireGPUSwapchainTexture()を使用するとウィンドウに対してレンダリングできる.

レンダリングは, 実際にはレンダーパスで発生し, コマンドバッファにエンコードされる. 複数のレンダーパス(またはレンダーとコンピューティングを交互に行うパス)を1つのコマンドバッファにエンコードすることもできるが, 多くのアプリケーションは単に1つのコマンドバッファには1つのレンダーパスで十分である. レンダーパスは4つのカラーテクスチャと1つの深度テクスチャを同時にレンダリングすることができる. レンダリングするテクスチャを変更する必要がある場合, レンダーパスを終了し, 新しいレンダーパスを開始する必要がある.

アプリケーションはSDL_BeginGPURenderPass()を呼ぶ. その後, 各描画で必要な過程を設定する:

その後, これらの過程の実際の描画コマンドを生成する:

パスの描画コマンドが全て完了した後, アプリケーションはSDL_EndGPURenderPass()を呼ぶ必要がある. レンダーパスが終了すると, 全てのレンダリングに関連した過程はリセットされる.

シーン全体がレンダリングされるまでは, アプリケーションは新しいレンダーパスを開始し, 同じコマンドバッファで新たに描画することができる.

シーンのレンダリングコマンドが全て完了すると, アプリケーションは処理をGPUに送信するためにSDL_SubmitGPUCommandBuffer()を呼ぶ.

アプリケーションがテクスチャやバッファからデータを読み戻す必要がある場合は, 多少の遅れを容認できるならば, それを効率的に行うAPIがある. アプリケーションがSDL_DownloadFromGPUTexture()またはSDL_DownloadFromGPUBuffer()を使い, SDL_SubmitGPUCommandBufferAndAcquireFence()でコマンドバッファを送信すると, スレッドでアプリケーションがポーリングまたは待機できるフェンスハンドルを戻す. フェンスがコマンドバッファの処理の完了を検知すると, ダウンロードされたデータを安全に読み込むことができる. このフェンスの使用を終えたとき, 必ずSDL_ReleaseGPUFence()を呼ぶこと.

このAPIは「コンピューティング」にも対応している. アプリケーションは, コンピュートシェーダで書き込まれるコンピュートライタブルテクスチャと(または)バッファを指定してSDL_BeginGPUComputePass()を呼ぶ. その後, コンピュートディスパッチで必要な過程を設定する:

その後, コンピューティング作業をGPUに送信する:

高度なユーザはこれで強力なGPU駆動のワークフローを始めることができる.

グラフィックとコンピュートパイプラインは, 上で記述したようにGPU上の小さなプログラムであるシェーダの使用を必要とする. それぞれのバックエンド(Vulkan, Metal, D3D12)は異なるシェーダの形式を必要とする. GPUデバイスを生成するとき, アプリケーションはどのシェーダの形式を提供できるかをデバイスに知らせる. 次に, 利用可能なシェーダ形式と, 実行環境で利用可能なバックエンドに依存した適切なバックエンドを選択する. シェーダを生成すると, アプリケーションは選択したバックエンドに正しいシェーダ形式で提供する必要がある. APIがこのように動作する理由を詳しく学びたいならば, 詳しく説明されたブログの記事がある.

最もよいのは, 使用するシェーダ形式を事前にコンパイルすることだが, 簡単に使えるようにSDLはランタイムシェーダのクロスコンパイルのための別のプロジェクトSDL_shadercrossを提供している. オフラインの事前コンパイルのためのCLIインターフェースも備えている.

これは重要な部分をいくつも省略した概要に過ぎない. それでもGPUプログラミングはかなり複雑だと感じたことだろう. シンプルな2Dグラフィックのみ必要ならば, レンダーAPIの方が簡単で, ハードウェアアクセラレーションも活用できる. しかし, 2DアプリケーションでもGPU APIのパフォーマンスと表現力は重要である.

GPU APIの機能は幅広いハードウェアの対応と移植のしやすさに重点を置いている. アプリケーションが機能をチェックして場合分けしなくてもよいように設計されている. もし対応するハードウェアが限定された最新の機能が必要ならば, 恐らくこのAPIは向いていない.

このAPIの使い方のデモはここにある.

パフォーマンスに関する考察

レンダリングのパフォーマンスを高める基本的なヒント:

一般的に, パフォーマンスの黄金律を覚えておくこと: 何かをすることは, 何もしないよりも高価である. ドライバに触れてはならない!

FAQ

質問: レイトレーシングやメッシュシェーダのような高度な機能はいつ追加されるのか?

回答: 今すぐ最先端の機能を追加する予定はない. しかし, その機能に追加する価値があり, 複数の環境で実装可能な基盤となるAPIとするのが合理的と判断したならば, 将来的にはありうる. 「決してない」ことはないが, 「近い将来」でもない.

質問: 私のシェーダが動かないのはなぜか?

回答: シェーダを使う際のよくあるミスは, シェーダの資源/レジスタが適切に配置されていないというものである. GPU APIは資源の配置に非常に厳格で, また互換性のある配置かをAPIが自動的に判断するのは困難である. 必要なレイアウトの情報はSDL_CreateGPUShader()SDL_CreateGPUComputePipeline()のドキュメントを参照すること.

他によくあるのは, SDL_GPUShaderCreateInfoのサンプラ, テクスチャ, バッファの数が正しく設定されていない場合である. 可能ならば, 構造体の値を手動で設定するのではなく, シェーダリフレクションを使用してシェーダから自動的に必要な情報を得ること.

質問: 私のアプリケーションのパフォーマンスはあまりよくない. GPU APIの間違いか?

回答: 違う. 詳しい回答: GPU APIは基礎的なグラフィックAPIの上にある比較的薄いレイヤーである. 非効率なことを行った可能性が, GPUレンダリングの経験が少ない場合は特にありうる. 上のパフォーマンスのヒントを参考にして, それに従っているか確認すること. さらに, RenderDocのようなツールは正しくない振る舞いの診断やパフォーマンスの問題の手助けになりうる.

システム要件

Vulkan

SDLドライバ名: "vulkan" (SDL_CreateGPUDevice()とSDL_PROP_GPU_DEVICE_CREATE_NAME_STRINGで使用する)

Windows, Linux, Nintendo Switch, 一部のAndroidに対応している. 以下の拡張が行われたVulkan 1.0と対応したデバイスが必要である:

D3D12

SDLドライバ名: "direct3d12"

Windows 10以降, Xbox One (GDK), Xbox Series X|S (GDK)に対応している. DirectX 12 Feature Level 11_0とResource Binding Tier 2またはそれ以上に対応したGPUが必要である.

Metal

SDLドライバ名: "metal"

macOS 10.14以降, iOS/tvOS 13.0以降に対応している. オペレーティングシステムと合ったハードウェアが必要である:

座標系

GPU APIは, D3D12とMetalに合わせて左手系の座標系を採用している. 特に:

バックエンドのドライバが異なる座標系(例えばVulkanのデバイス正規化座標系は+Yが下)の場合でも, SDLは背後で自動的に座標系を変換するため, 座標を入れ替える処理を自身で行う必要はない.

ユニフォームデータ

ユニフォームはシェーダに渡されるデータである. ユニフォームデータはシェーダの全ての実行に渡り同一である.

1シェーダステージ(頂点, フラグメント, コンピューティング)につき4つのユニフォームスロットが利用できる. ステージのスロットに入れられたユニフォームデータは, 再びスロットに入れる関数を呼ぶまでコマンドバッファに値が維持される.

例えば, スロット0にバインドされたユニフォームからカメラ行列として読み込むために頂点シェーダを書き込むことができる. コマンドバッファに最初に入れられたカメラ行列は, 各サブシーケンスの描画の呼び出しのたびに使われる.

レンダリングやコンピュートパスの間にユニフォームデータを入れるのは適切な方法である.

ユニフォームは少ないデータを入れるのが最もよい. 複数の行列を1回の呼び出しで入れたいならば, 代わりにストレージバッファの使用を考えるべきだろう.

サイクルに関する注意

コマンドバッファを使う場合, 命令は即座には実行されない――コマンドバッファが送信された後, しばらくしてから実行される.

リソースが待ち状態または処理中のコマンドバッファで使用されている場合, これを「バインドされている」と見なす. リソースが待ち状態または処理中のコマンドバッファで使用されなくなった場合, これを「バインドされていない」と見なす.

データリソースがバインドされているとき, 送信中のコマンドバッファをフェンスで待っていない限り, いつデータのバインドが解除されるかは不定である. しかし, これはリソースの使用を自分で監視しなければならないということではない.

リソースの書き込みに関連する全ての関数と構造体には, ブール値の"cycle"が存在する. SDL_GPUTransferBuffer, SDL_GPUBuffer, SDL_GPUTextureは, 効率化のため全て内部リソースのリングバッファを使用している. cycleが真の場合, リソースがバインドされていれば, サイクルは次のバインドされていない内部リソースへと移る. 利用可能なリソースがなければ, 新しいリソースが生成される. これは適切にサイクルされている限り, 複雑な状態遷移の追跡と同期に困難する必要がないことを意味する.

例: SDL_MapGPUTransferBuffer()を呼びテクスチャデータを書き込み, SDL_UnmapGPUTransferBuffer()を呼び, 次にSDL_UploadToGPUTexture()を呼ぶとする. 次にバッファにテクスチャをバッファに書き込むとき, cycleパラメータを真にすると, まだ送信されていないデータを上書きしてしまう心配はない.

別の例: 毎フレームのレンダーパスで1つのテクスチャを使用している場合, フレーム間でデータの依存関係が発生しうる. SDL_GPUColorTargetInfo構造体のcycleに真を設定すると, このデータ依存を避けることができる.

サイクルが既にバインドされたデータを未定義にすることはない. サイクル中, リソースの全てのデータはデータが再び書き込まれるまでは, 後のコマンドからは未定義と見なされる. 未定義のデータを読み込まないように注意する必要がある.

テクスチャをサイクルする場合, たとえ呼び出しでテクスチャの一部のみ使用する場合でもテクスチャ全体がサイクルされる. よって, サイクルの後はテクスチャ全体が未定義と見なすべきである.

また, 最初にサイクル外のコマンドで参照されたデータのセクションを上書きしないように注意する必要がある. サイクル外でリソースにバインドされた参照されていないデータを上書きするのはよいが, 既に参照されたデータのセクションを上書きすると予期しない結果となる.

デバッグ

GPUを使用していると, 通常のデバッガでは追跡できない問題に遭遇するだろう――例えば, コンパイルしたが何も表示されない, または実行中にシェーダが失敗するなどである.

このような場合のデバッグのために, 各描画の呼び出し, バインドされたリソース, メモリバッファ等のGPUフレーム全体の調査を可視化できるツールが存在する:

それとは別に,元のGPUバックエンドのより詳細なエラーメッセージを受信する追加のデバッグレイヤを有効にしたいだろう:

実行中に問題に遭遇した, または画面に予期しない出力があった場合は, RenderDocのようなツールを使うことを躊躇してはならない. 素早いGPUフレームの調査は, このような問題の重要な部分の修正の助けになる.

関数

  1. SDL_AcquireGPUCommandBuffer - コマンドバッファを要求する
  2. SDL_AcquireGPUSwapchainTexture - プレゼンテーションで使用するテクスチャを要求する
  3. SDL_BeginGPUComputePass - コマンドバッファのコンピュートパスを開始する
  4. SDL_BeginGPUCopyPass - コマンドバッファのコピーパスを開始する
  5. SDL_BeginGPURenderPass - コマンドバッファのレンダーパスを開始する
  6. SDL_BindGPUComputePipeline - コンピュートディスパッチで使用するためにコンピュートパイプラインをコマンドバッファにバインドする
  7. SDL_BindGPUComputeSamplers - テクスチャとサンプラのペアをコンピュートシェーダで使用するためにバインドする
  8. SDL_BindGPUComputeStorageBuffers - コンピュートパイプラインで使用するためにストレージバッファを読み取り専用でバインドする
  9. SDL_BindGPUComputeStorageTextures - コンピュートパイプラインで使用するためにストレージテクスチャを読み取り専用でバインドする
  10. SDL_BindGPUFragmentSamplers - テクスチャとサンプラのペアをフラグメントシェーダで使用するためにバインドする
  11. SDL_BindGPUFragmentStorageBuffers - フラグメントシェーダで使用するためにストレージバッファをバインドする
  12. SDL_BindGPUFragmentStorageTextures - フラグメントシェーダで使用するためにストレージテクスチャをバインドする
  13. SDL_BindGPUGraphicsPipeline - レンダリングで使用するレンダーパスをグラフィックパイプラインにバインドする
  14. SDL_BindGPUIndexBuffer - 後の描画呼び出しのためにインデックスバッファをコマンドバッファにバインドする
  15. SDL_BindGPUVertexBuffers - 後の描画呼び出しのために頂点バッファをコマンドバッファにバインドする
  16. SDL_BindGPUVertexSamplers - 頂点シェーダで使用するためにテクスチャとサンプラをバインドする
  17. SDL_BindGPUVertexStorageBuffers - 頂点シェーダで使用するためにストレージバッファをバインドする
  18. SDL_BindGPUVertexStorageTextures - 頂点シェーダで使用するためにストレージテクスチャをバインドする
  19. SDL_BlitGPUTexture - 元領域のテクスチャを先領域のテクスチャに転送する
  20. SDL_CalculateGPUTextureFormatSize - 形式と次元を指定してテクスチャのサイズのバイト数を求める
  21. SDL_CancelGPUCommandBuffer - コマンドバッファを取り消す
  22. SDL_ClaimWindowForGPUDevice - ウィンドウを割り当ててスワップチェーンを生成する
  23. SDL_CopyGPUBufferToBuffer - バッファ間のコピーを行う
  24. SDL_CopyGPUTextureToTexture - テクスチャ間のコピーを行う
  25. SDL_CreateGPUBuffer - グラフィックまたはコンピューティングのワークフローで使用するバッファを生成する
  26. SDL_CreateGPUComputePipeline - グラフィックパイプラインを生成するとき使用されるシェーダを生成する
  27. SDL_CreateGPUDevice - GPUコンテキストを生成する
  28. SDL_CreateGPUDeviceWithProperties - GPUコンテキストを生成する
  29. SDL_CreateGPUGraphicsPipeline - グラフィックワークフローで使用されるパイプラインオブジェクトを生成する
  30. SDL_CreateGPUSampler - テクスチャがグラフィックワークフローでバインドされたとき使用されるサンプラを生成する
  31. SDL_CreateGPUShader - グラフィックパイプラインを生成するとき使用されるシェーダを生成する
  32. SDL_CreateGPUTexture - グラフィックまたはコンピューティングのワークフローで使用するテクスチャオブジェクトを生成する
  33. SDL_CreateGPUTransferBuffer - グラフィックリソースのアップロード先またはダウンロード元となる転送バッファを生成する
  34. SDL_DestroyGPUDevice - SDL_CreateGPUDeviceが戻したGPUコンテキストを破棄する
  35. SDL_DispatchGPUCompute - コンピュートワークをディスパッチする
  36. SDL_DispatchGPUComputeIndirect - バッファのパラメータを設定してコンピュートワークをディスパッチする
  37. SDL_DownloadFromGPUBuffer - バッファのデータを転送バッファにGPUタイムラインでコピーする
  38. SDL_DownloadFromGPUTexture - テクスチャのデータを転送バッファにGPUタイムラインでコピーする
  39. SDL_DrawGPUIndexedPrimitives - インデックスバッファを使用しインスタンス化を有効にしたバインドされたグラフィックステートでデータを描画する
  40. SDL_DrawGPUIndexedPrimitivesIndirect - バインドしたインデックスバッファを有効にしたグラフィックステートを使用してバッファの描画パラメータでデータを描画する
  41. SDL_DrawGPUPrimitives - バインドしたグラフィックステートを使用してデータを描画する
  42. SDL_DrawGPUPrimitivesIndirect - バインドしたグラフィックステートを使用してバッファの描画パラメータでデータを描画する
  43. SDL_EndGPUComputePass - 現在のコンピュートパスを終了する
  44. SDL_EndGPUCopyPass - 現在のコピーパスを終了する
  45. SDL_EndGPURenderPass - 指定したレンダーパスを終了する
  46. SDL_GDKResumeGPU - XboxでSDL_EVENT_WILL_ENTER_FOREGROUNDイベントを受信した後にGPU処理を復帰させる
  47. SDL_GDKSuspendGPU - XboxでSDL_EVENT_DID_ENTER_BACKGROUNDイベントを受信した後にGPU処理を一時停止させる
  48. SDL_GenerateMipmapsForGPUTexture - テクスチャのミップマップを生成する
  49. SDL_GetGPUDeviceDriver - GPUコンテキストを生成するために使用したバックエンドの名前を得る
  50. SDL_GetGPUDeviceProperties - GPUデバイスに関連付けられたプロパティを得る
  51. SDL_GetGPUDriver - 組み込まれたGPUドライバの名前を得る
  52. SDL_GetGPUShaderFormats - GPUコンテキストが対応するシェーダ形式を得る
  53. SDL_GetGPUSwapchainTextureFormat - ウィンドウのスワップチェーンのテクスチャ形式を得る
  54. SDL_GetGPUTextureFormatFromPixelFormat - SDLピクセル形式と一致するGPUテクスチャ形式を求める
  55. SDL_GetNumGPUDrivers - 組み込まれたオーディオドライバの数を得る
  56. SDL_GetPixelFormatFromGPUTextureFormat - GPUテクスチャ形式と一致するSDLピクセル形式を求める
  57. SDL_GPUSupportsProperties - GPUランタイムの対応をチェックする
  58. SDL_GPUSupportsShaderFormats - GPUランタイムの対応をチェックする
  59. SDL_GPUTextureFormatTexelBlockSize - テクスチャ形式のテクセルブロックサイズを得る
  60. SDL_GPUTextureSupportsFormat - テクスチャ形式が指定の種類と使用方法に対応しているかチェックする
  61. SDL_GPUTextureSupportsSampleCount - テクスチャ形式がサンプル数に対応しているかチェックする
  62. SDL_InsertGPUDebugLabel - コマンドバッファ呼び出しストリームに任意の文字列のラベルを挿入する
  63. SDL_MapGPUTransferBuffer - 転送バッファとアプリケーションアドレス空間のマッピングを行う
  64. SDL_PopGPUDebugGroup - 最後にプッシュしたデバッググループを終了する
  65. SDL_PushGPUComputeUniformData - コマンドバッファのユニフォームスロットにデータをプッシュする
  66. SDL_PushGPUDebugGroup - 任意の名前のデバッググループを開始する
  67. SDL_PushGPUFragmentUniformData - コマンドバッファのフラグメントユニフォームスロットにデータをプッシュする
  68. SDL_PushGPUVertexUniformData - コマンドバッファの頂点ユニフォームスロットにデータをプッシュする
  69. SDL_QueryGPUFence - フェンスの状態をチェックする
  70. SDL_ReleaseGPUBuffer - 指定のバッファを安全に行えるようになれば可能な限り早く解放する
  71. SDL_ReleaseGPUComputePipeline - 指定のコンピュートパイプラインを安全に行えるようになれば可能な限り早く解放する
  72. SDL_ReleaseGPUFence - SDL_SubmitGPUCommandBufferAndAcquireFenceで得たフェンスを解放する
  73. SDL_ReleaseGPUGraphicsPipeline - 指定のグラフィックパイプラインを安全に行えるようになれば可能な限り早く解放する
  74. SDL_ReleaseGPUSampler - 指定のサンプラを安全に行えるようになれば可能な限り早く解放する
  75. SDL_ReleaseGPUShader - 指定のシェーダを安全に行えるようになれば可能な限り早く解放する
  76. SDL_ReleaseGPUTexture - 指定のテクスチャを安全に行えるようになれば可能な限り早く解放する
  77. SDL_ReleaseGPUTransferBuffer - 指定の転送バッファを安全に行えるようになれば可能な限り早く解放する
  78. SDL_ReleaseWindowFromGPUDevice - ウィンドウの要求を解除しスワップチェーンを破棄する
  79. SDL_SetGPUAllowedFramesInFlight - GPU内に留めておくことができる最大フレーム数を変更する
  80. SDL_SetGPUBlendConstants - コマンドバッファの現在のブレンド定数を設定する
  81. SDL_SetGPUBufferName - バッファのラベルとして任意の文字列定数を設定する
  82. SDL_SetGPUScissor - コマンドバッファの現在のシザーの状態を設定する
  83. SDL_SetGPUStencilReference - コマンドバッファの現在のステンシル参照値を設定する
  84. SDL_SetGPUSwapchainParameters - 指定のウィンドウのスワップチェーンパラメータを変更する
  85. SDL_SetGPUTextureName - バッファのラベルとして任意の文字列定数を設定する
  86. SDL_SetGPUViewport - コマンドバッファの現在のビューポート状態を設定する
  87. SDL_SubmitGPUCommandBuffer - GPUにコマンドを実行させるためにコマンドバッファを送信する
  88. SDL_SubmitGPUCommandBufferAndAcquireFence - GPUにコマンドを実行させるためにコマンドバッファを送信し, コマンドバッファに関連付けられたフェンスを要求する
  89. SDL_UnmapGPUTransferBuffer - マッピングされた転送バッファのマッピングを解除する
  90. SDL_UploadToGPUBuffer - データを転送バッファからバッファにアップロードする
  91. SDL_UploadToGPUTexture - データを転送バッファからテクスチャにアップロードする
  92. SDL_WaitAndAcquireGPUSwapchainTexture - スワップチェーンテクスチャを要求できるまでスレッドをブロックし, その後に要求する
  93. SDL_WaitForGPUFences - フェンスがシグナルを受けるまでスレッドをブロックする
  94. SDL_WaitForGPUIdle - GPUが完全にアイドル状態になるまでスレッドをブロックする
  95. SDL_WaitForGPUSwapchain - 全てのプレゼンテーション中のコマンドバッファの実行が完了するまでスレッドをブロックする
  96. SDL_WindowSupportsGPUPresentMode - ウィンドウのプレゼンテーションモードの対応をチェックする
  97. SDL_WindowSupportsGPUSwapchainComposition - ウィンドウのスワップチェーンコンポジションの対応をチェックする

  1. SDL_GPUBuffer - GPUバッファの不透明型
  2. SDL_GPUBufferUsageFlags - クライアントのGPUバッファの使用方法のフラグの型
  3. SDL_GPUColorComponentFlags - グラフィックパイプラインで書き込まれる色成分の型
  4. SDL_GPUCommandBuffer - コマンドバッファの不透明型
  5. SDL_GPUComputePass - GPUコンピュートパスの不透明ハンドルの型
  6. SDL_GPUComputePipeline - コンピュートパイプラインの不透明型
  7. SDL_GPUCopyPass - GPUコピーパスの不透明ハンドルの型
  8. SDL_GPUDevice - SDL GPUコンテキストの不透明型
  9. SDL_GPUFence - フェンスの不透明型
  10. SDL_GPUGraphicsPipeline - グラフィックパイプラインの不透明ハンドルの型
  11. SDL_GPURenderPass - レンダーパスの不透明ハンドルの型
  12. SDL_GPUSampler - サンプラの不透明型
  13. SDL_GPUShader - コンパイルされたシェーダオブジェクトの不透明型
  14. SDL_GPUShaderFormat - シェーダコードの形式の型
  15. SDL_GPUTexture - テクスチャの不透明型
  16. SDL_GPUTextureUsageFlags - クライアントのGPUテクスチャの使用方法のフラグの型
  17. SDL_GPUTransferBuffer - GPU転送バッファの不透明型

構造体

  1. SDL_GPUBlitInfo - 転送コマンドのパラメータの構造体
  2. SDL_GPUBlitRegion - 転送操作で使用するテクスチャの領域の構造体
  3. SDL_GPUBufferBinding - バッファのバインドの呼び出しのパラメータの構造体
  4. SDL_GPUBufferCreateInfo - GPUバッファのパラメータの構造体
  5. SDL_GPUBufferLocation - バッファ内の位置を指定する構造体
  6. SDL_GPUBufferRegion - GPUバッファ内の領域を表す構造体
  7. SDL_GPUColorTargetBlendState - カラーターゲットのブレンドを指定する構造体
  8. SDL_GPUColorTargetDescription - グラフィックパイプラインで使用するカラーターゲットのパラメータの構造体
  9. SDL_GPUColorTargetInfo - レンダーパスで使用するカラーターゲットのパラメータの構造体
  10. SDL_GPUComputePipelineCreateInfo - 生成するコンピュートパイプラインのパラメータを指定する構造体
  11. SDL_GPUDepthStencilState - グラフィックパイプラインの深度ステンシルのパラメータの構造体
  12. SDL_GPUDepthStencilTargetInfo - レンダーパスで使用する深度ステンシルターゲットのパラメータの構造体
  13. SDL_GPUGraphicsPipelineCreateInfo - グラフィックパイプラインのパラメータを指定する構造体
  14. SDL_GPUGraphicsPipelineTargetInfo - グラフィックパイプラインで使用するレンダーターゲットの情報の構造体
  15. SDL_GPUIndexedIndirectDrawCommand - インデックス付き間接描画コマンドのパラメータの構造体
  16. SDL_GPUIndirectDispatchCommand - インデックス付きディスパッチコマンドのパラメータの構造体
  17. SDL_GPUIndirectDrawCommand - 間接描画コマンドのパラメータの構造体
  18. SDL_GPUMultisampleState - グラフィックパイプラインのマルチサンプリングのパラメータの構造体
  19. SDL_GPURasterizerState - グラフィックパイプラインのラスタライザのパラメータの構造体
  20. SDL_GPUSamplerCreateInfo - サンプラのパラメータを指定する構造体
  21. SDL_GPUShaderCreateInfo - 生成するシェーダオブジェクトのコードとメタデータを指定する構造体
  22. SDL_GPUStencilOpState - グラフィックパイプラインのステンシル演算の構造体
  23. SDL_GPUStorageBufferReadWriteBinding - コンピュートパスのバインドするバッファに関連付けられたパラメータの構造体
  24. SDL_GPUStorageTextureReadWriteBinding - コンピュートパスのバインドするテクスチャに関連付けられたパラメータの構造体
  25. SDL_GPUTextureCreateInfo - GPUテクスチャのパラメータの構造体
  26. SDL_GPUTextureLocation - テクスチャ内の位置を指定する構造体
  27. SDL_GPUTextureRegion - GPUテクスチャの領域の構造体
  28. SDL_GPUTextureSamplerBinding - サンプラのバインド時のパラメータの構造体
  29. SDL_GPUTextureTransferInfo - データのテクスチャへの転送とテクスチャからの転送に関するパラメータの構造体
  30. SDL_GPUTransferBufferCreateInfo - 生成する転送バッファのパラメータを指定する構造体
  31. SDL_GPUTransferBufferLocation - GPU転送バッファ内の位置を表す構造体
  32. SDL_GPUVertexAttribute - 頂点の属性の構造体
  33. SDL_GPUVertexBufferDescription - グラフィックパイプラインで使用される頂点バッファのパラメータの構造体
  34. SDL_GPUVertexInputState - グラフィックパイプラインの頂点の入力状態のパラメータの構造体
  35. SDL_GPUViewport - ビューポートを表す構造体
  36. SDL_GPUVulkanOptions - Vulkanを使用する場合の追加オプションの構造体

列挙体

  1. SDL_GPUBlendFactor - レンダーターゲットのピクセルとテクスチャの既存のピクセルをブレンドするとき使用するブレンド係数の列挙体
  2. SDL_GPUBlendOp - レンダーターゲットのピクセルとテクスチャの既存のピクセルをブレンドするとき使用する演算の列挙体
  3. SDL_GPUCompareOp - 深度, マスク, サンプラ処理の比較演算の列挙体
  4. SDL_GPUCubeMapFace - 立方体マッピングの面の列挙体
  5. SDL_GPUCullMode - 陰面する三角形の面の方向の列挙体
  6. SDL_GPUFillMode - グラフィックパイプラインの塗りつぶしモードの列挙体
  7. SDL_GPUFilter - サンプラが使用するフィルタリング処理の列挙体
  8. SDL_GPUFrontFace - 三角形を表面とする頂点の回転方向の列挙体
  9. SDL_GPUIndexElementSize - インデックスバッファの要素のサイズの列挙体
  10. SDL_GPULoadOp - レンダーパスに割り付けられたテクスチャのレンダーパスの開始時の扱い方の列挙体
  11. SDL_GPUPresentMode - スワップチェーンテクスチャがOSに提示されるタイミングの列挙体
  12. SDL_GPUPrimitiveType - グラフィックパイプラインのプリミティブトポロジの列挙体
  13. SDL_GPUSampleCount - テクスチャのサンプリング数の列挙体
  14. SDL_GPUSamplerAddressMode - テクスチャサンプリングで座標が0-1の範囲外の場合の扱いの列挙体
  15. SDL_GPUSamplerMipmapMode - サンプラが使用するミップマップモードの列挙体
  16. SDL_GPUShaderStage - シェーダプログラムの対応するステージの列挙体
  17. SDL_GPUStencilOp - 深度テストに合格または失敗したときストアされたステンシル値に起こることの列挙体
  18. SDL_GPUStoreOp - レンダーパスに割り付けられたテクスチャのレンダーパスの終了時の扱い方の列挙体
  19. SDL_GPUSwapchainComposition - スワップチェーンテクスチャのテクスチャの形式と色空間の列挙体
  20. SDL_GPUTextureFormat - GPUテクスチャのピクセル形式の列挙体
  21. SDL_GPUTextureType - GPUテクスチャの種類の列挙体
  22. SDL_GPUTransferBufferUsage - クライアントによる転送バッファの使用方法の列挙体
  23. SDL_GPUVertexElementFormat - 頂点の属性の形式の列挙体
  24. SDL_GPUVertexInputRate - 頂点属性をバッファから取り出すタイミングの列挙体

SDL Wikiへのリンク

SDL3/CategoryGPU - SDL Wiki