IDXGIDevice
COM公式ドキュメント
IDXGIDevice インターフェイスは、画像データを生成する DXGI オブジェクトのための派生クラスを実装します。
解説(Remarks)
IDXGIDevice インターフェイスは、他の DXGI オブジェクトへのアクセスを必要とする DXGI オブジェクトが使用するために設計されています。このインターフェイスは、DXGI と通信するために Direct3D を使用しないアプリケーションにとって有用です。
Direct3D のデバイス作成関数は、Direct3D デバイスオブジェクトを返します。この Direct3D デバイスオブジェクトは IUnknown インターフェイスを実装しています。この Direct3D デバイスオブジェクトに対してクエリを実行することで、そのデバイスに対応する IDXGIDevice インターフェイスを取得できます。Direct3D デバイスの IDXGIDevice インターフェイスを取得するには、次のコードを使用します。
IDXGIDevice * pDXGIDevice;
hr = g_pd3dDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice);
Windows Phone 8: この API はサポートされています。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定されたデバイスのアダプターを返します。
| pAdapter | IDXGIAdapter** | out | アダプターを指す IDXGIAdapter インターフェイスポインターのアドレス。このパラメーターを NULL にすることはできません。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合は、失敗を示す DXGI_ERROR のいずれかを返します。pAdapter パラメーターが NULL の場合、このメソッドは E_INVALIDARG を返します。
解説(Remarks)
GetAdapter メソッドが成功すると、アダプターインターフェイスの参照カウントがインクリメントされます。メモリリークを回避するため、使用が終わったら必ずインターフェイスを解放してください。
サーフェスを返します。このメソッドは内部的に使用されるものであり、アプリケーションから直接呼び出すべきではありません。
| pDesc | DXGI_SURFACE_DESC* | in | サーフェスを記述する DXGI_SURFACE_DESC 構造体へのポインター。 |
| NumSurfaces | DWORD | in | 作成するサーフェスの数。 |
| Usage | DXGI_USAGE | in | サーフェスがどのように使用されることを想定しているかを指定する DXGI_USAGE フラグ。 |
| pSharedResource | DXGI_SHARED_RESOURCE* | inoptional | そのようなリソースのビューを開くための共有リソース情報を含む DXGI_SHARED_RESOURCE 構造体への省略可能なポインター。 |
| ppSurface | IDXGISurface** | out | 最初に作成されたサーフェスを指す IDXGISurface インターフェイスポインターのアドレス。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合はエラーコードを返します。エラーコードの一覧については、DXGI_ERROR を参照してください。
解説(Remarks)
CreateSurface メソッドは、1 つ以上のデバイス間でデータをやり取りするためのバッファーを作成します。これは内部的に使用されるものであり、直接呼び出すべきではありません。
ランタイムは、サーフェスを表す Direct3D リソースオブジェクトを作成するときに、IDXGISurface インターフェイスを自動的に作成します。たとえば、2D テクスチャを作成するために ID3D11Device::CreateTexture2D または ID3D10Device::CreateTexture2D を呼び出すと、ランタイムは IDXGISurface インターフェイスを作成します。2D テクスチャサーフェスを表す IDXGISurface インターフェイスを取得するには、ID3D11Texture2D::QueryInterface または ID3D10Texture2D::QueryInterface を呼び出します。この呼び出しでは、IDXGISurface の識別子を渡す必要があります。2D テクスチャが単一の MIP マップレベルのみを持ち、テクスチャの配列で構成されていない場合、QueryInterface は成功し、IDXGISurface インターフェイスポインターへのポインターを返します。それ以外の場合、QueryInterface は失敗し、IDXGISurface へのポインターを返しません。
リソースの配列のレジデンシー状態を取得します。
| ppResources | IUnknown** | in | IDXGIResource インターフェイスの配列。 |
| pResidencyStatus | DXGI_RESIDENCY* | out | DXGI_RESIDENCY フラグの配列。各要素は、ppResources 引数配列の対応する要素のレジデンシー状態を記述します。 |
| NumResources | DWORD | in | ppResources 引数配列および pResidencyStatus 引数配列内のリソースの数。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合は、DXGI_ERROR_DEVICE_REMOVED、E_INVALIDARG、または E_POINTER を返します(詳細については Common HRESULT Values および WinError.h を参照してください)。
解説(Remarks)
pResidencyStatus 引数配列によって返される情報は、QueryResourceResidency メソッドが呼び出された時点でのレジデンシー状態を記述します。
GPU スレッドの優先度を設定します。
| Priority | INT | in | 必要な GPU スレッドの優先度を指定する値。このトピックの 解説 セクションを参照してください。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合、Priority パラメーターが無効であれば E_INVALIDARG を返します。
解説(Remarks)
SetGPUThreadPriority メソッドを使用するには、GPU スケジューリングに関する包括的な理解が必要です。不適切に使用すると、SetGPUThreadPriority メソッドはレンダリング速度を妨げ、ユーザーエクスペリエンスの低下を招くおそれがあります。そのため、優先度の変更がアプリケーションおよびシステムに与える影響を把握できるよう、アプリケーションをプロファイリングしてください。
Priority パラメーターの値は次のように機能します。 優先度値のビット定義:
-
Bit 0-4 : 優先度値
Bit 5-29 : 予約済み
Bit 30 : 絶対優先度フラグ ( D3DKMT_SETCONTEXTSCHEDULINGPRIORITY_ABSOLUTE )。優先度値ビット [4:0] と OR 演算できます(Windows 10 以降でのみ有効。それ以外では使用されません)
Bit 31 : 符号ビット
Bit 30(絶対優先度フラグ)を使用して、この API の動作モードを制御できます。
相対優先度モード : ビット 30 の値が 0 に設定されている場合、API はこのモードを使用します。このモードでは、Priority 値は -7 以上 7 以下でなければなりません。優先度値 0 は通常の優先度(すべてのコンテキストの既定値)を表し、-7 はアイドル優先度を表します。ビット 31 は優先度の符号を制御するために使用されます。
絶対優先度モード : ビット 30 の値が 1 に設定されている場合、API はこのモードを使用します。このモードでは、Priority 値(ビット [4:0])は 0 以上 31 以下でなければなりません。これらの優先度レベルの意味については以下で説明します。D3DKMT_SETCONTEXTSCHEDULINGPRIORITY_ABSOLUTE は、dxgkrnl/グラフィックスの優先度を十分に理解し、それらを変更した場合の影響を理解している場合にのみ使用してください。
優先度値ビット [4:0] は次の優先度値に対応します。
-
0 : アイドル優先度 - より高い優先度がアクセラレーター時間の大部分を使用する場合、処理の前進は保証されません。
1 : 通常優先度 - ほとんどのプロセスは、処理の前進が保証されるこの優先度を使用します。
2 -15 : 予約済み -
16-29 : ソフトリアルタイム - より低い優先度をプリエンプトし、それらの処理の前進を保証するために定期的により低い優先度へ処理を譲ります。
30 : ハードリアルタイム - レイテンシーに極めて敏感で、範囲が明確に限定されたワークロードに使用されます。この優先度はより低い優先度へ処理を譲りません。
31 : 内部使用
GPU スレッドの優先度を取得します。
| pPriority | INT* | out | 現在の GPU スレッドの優先度を示す値を受け取る変数へのポインター。値は -7 以上 7 以下で、0 は通常の優先度を表します。 |
戻り値
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDXGIDevice "{54EC77FA-1377-44E6-8C32-88FD5F44C84C}" #usecom global IDXGIDevice IID_IDXGIDevice "{}" #comfunc global IDXGIDevice_GetAdapter 7 sptr #comfunc global IDXGIDevice_CreateSurface 8 var,int,int,var,sptr #comfunc global IDXGIDevice_QueryResourceResidency 9 sptr,var,int #comfunc global IDXGIDevice_SetGPUThreadPriority 10 int #comfunc global IDXGIDevice_GetGPUThreadPriority 11 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDXGIDevice "{54EC77FA-1377-44E6-8C32-88FD5F44C84C}" #usecom global IDXGIDevice IID_IDXGIDevice "{}" #comfunc global IDXGIDevice_GetAdapter 7 sptr #comfunc global IDXGIDevice_CreateSurface 8 sptr,int,int,sptr,sptr #comfunc global IDXGIDevice_QueryResourceResidency 9 sptr,sptr,int #comfunc global IDXGIDevice_SetGPUThreadPriority 10 int #comfunc global IDXGIDevice_GetGPUThreadPriority 11 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。