IDXGIAdapter2
COM公式ドキュメント
IDXGIAdapter2 インターフェイスは、1 つ以上の GPU、DAC、およびビデオメモリを含むディスプレイサブシステムを表します。
解説(Remarks)
ディスプレイサブシステムはしばしばビデオカードと呼ばれますが、一部のコンピューターでは、ディスプレイサブシステムはマザーボードの一部です。
ディスプレイサブシステムを列挙するには、IDXGIFactory1::EnumAdapters1 を使用します。
特定のデバイスのアダプターへのインターフェイスを取得するには、IDXGIDevice::GetAdapter を使用します。
ソフトウェアアダプターを作成するには、IDXGIFactory::CreateSoftwareAdapter を使用します。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
アダプターまたはビデオカードの Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 記述を取得します。
| pDesc | DXGI_ADAPTER_DESC2* | out | アダプターを記述する DXGI_ADAPTER_DESC2 構造体へのポインター。 このパラメーターは NULL であってはなりません。機能レベル 9 のグラフィックスハードウェアでは、以前のバージョンの GetDesc2(GetDesc および GetDesc1)は、アダプター記述構造体の VendorId、DeviceId、SubSysId、および Revision メンバーにゼロを返し、Description メンバーの記述文字列には「Software Adapter」を返します。GetDesc2 は、これらのメンバーに実際の機能レベル 9 のハードウェア値を返します。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合、pDesc パラメーターが NULL であれば E_INVALIDARG を返します。
解説(Remarks)
アダプターの DXGI 1.2 記述を取得するには、GetDesc2 メソッドを使用します。 DXGI 1.1 記述を取得するには、IDXGIAdapter1::GetDesc1 メソッドを使用します。DXGI 1.0 記述を取得するには、IDXGIAdapter::GetDesc メソッドを使用します。
Windows Display Driver Model (WDDM) スケジューラーは、アプリケーションタスクの GPU での実行をプリエンプト(横取り)できます。WDDM 1.1 以前のドライバーモデルにおいて、GPU が現在のタスクの実行を中断できる粒度は、グラフィックスタスクではダイレクトメモリアクセス (DMA) バッファー、コンピュートタスクではコンピュートパケットです。GPU は、現在実行中の作業単位である DMA バッファーまたはコンピュートパケットを完了した後にのみ、タスクを切り替えることができます。
DMA バッファーは、WDDM スケジューラーが GPU に送信できるグラフィックス作業の最大の独立単位です。このバッファーには、WDDM ドライバーと GPU が使用する一連の GPU 命令が含まれます。コンピュートパケットは、WDDM スケジューラーが GPU に送信できるコンピュート作業の最大の独立単位です。コンピュートパケットには、スレッドグループを含むディスパッチ(たとえば ID3D11DeviceContext::Dispatch メソッドの呼び出し)が含まれます。WDDM 1.2 以降のドライバーモデルでは、DMA バッファーやコンピュートパケットよりも細かい粒度で GPU をプリエンプトできます。GetDesc2 メソッドを使用して、グラフィックスタスクとコンピュートタスクの粒度レベルを取得できます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDXGIAdapter2 "{0AA1AE0A-FA0E-4B84-8644-E05FF8E5ACB5}" #usecom global IDXGIAdapter2 IID_IDXGIAdapter2 "{}" #comfunc global IDXGIAdapter2_GetDesc2 11 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IDXGIAdapter2 "{0AA1AE0A-FA0E-4B84-8644-E05FF8E5ACB5}" #usecom global IDXGIAdapter2 IID_IDXGIAdapter2 "{}" #comfunc global IDXGIAdapter2_GetDesc2 11 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。