Win32 API 日本語リファレンス
ホームGraphics.Dxgi › IDXGIDevice

IDXGIDevice

COM
IID54ec77fa-1377-44e6-8c32-88fd5f44c84c継承元IDXGIObject自前メソッド開始 vtbl7

公式ドキュメント

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。

vtbl 7 HRESULT GetAdapter(IDXGIAdapter** pAdapter)

指定されたデバイスのアダプターを返します。

pAdapterIDXGIAdapter**outアダプターを指す IDXGIAdapter インターフェイスポインターのアドレス。このパラメーターを NULL にすることはできません。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合は、失敗を示す DXGI_ERROR のいずれかを返します。pAdapter パラメーターが NULL の場合、このメソッドは E_INVALIDARG を返します。

解説(Remarks)

GetAdapter メソッドが成功すると、アダプターインターフェイスの参照カウントがインクリメントされます。メモリリークを回避するため、使用が終わったら必ずインターフェイスを解放してください。

vtbl 8 HRESULT CreateSurface(DXGI_SURFACE_DESC* pDesc, DWORD NumSurfaces, DXGI_USAGE Usage, DXGI_SHARED_RESOURCE* pSharedResource, IDXGISurface** ppSurface)

サーフェスを返します。このメソッドは内部的に使用されるものであり、アプリケーションから直接呼び出すべきではありません。

pDescDXGI_SURFACE_DESC*inサーフェスを記述する DXGI_SURFACE_DESC 構造体へのポインター。
NumSurfacesDWORDin作成するサーフェスの数。
UsageDXGI_USAGEinサーフェスがどのように使用されることを想定しているかを指定する DXGI_USAGE フラグ。
pSharedResourceDXGI_SHARED_RESOURCE*inoptionalそのようなリソースのビューを開くための共有リソース情報を含む DXGI_SHARED_RESOURCE 構造体への省略可能なポインター。
ppSurfaceIDXGISurface**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 へのポインターを返しません。

vtbl 9 HRESULT QueryResourceResidency(IUnknown** ppResources, DXGI_RESIDENCY* pResidencyStatus, DWORD NumResources)

リソースの配列のレジデンシー状態を取得します。

ppResourcesIUnknown**inIDXGIResource インターフェイスの配列。
pResidencyStatusDXGI_RESIDENCY*outDXGI_RESIDENCY フラグの配列。各要素は、ppResources 引数配列の対応する要素のレジデンシー状態を記述します。
NumResourcesDWORDinppResources 引数配列および pResidencyStatus 引数配列内のリソースの数。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合は、DXGI_ERROR_DEVICE_REMOVEDE_INVALIDARG、または E_POINTER を返します(詳細については Common HRESULT Values および WinError.h を参照してください)。

解説(Remarks)

pResidencyStatus 引数配列によって返される情報は、QueryResourceResidency メソッドが呼び出された時点でのレジデンシー状態を記述します。

注意 レジデンシー状態は絶えず変化します。
デバイスが削除された状態で QueryResourceResidency メソッドを呼び出すと、pResidencyStatus 引数は DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY フラグを返します。
注意 このメソッドは無視できないほどのオーバーヘッドを伴うため、フレームごとに呼び出すべきではありません。
vtbl 10 HRESULT SetGPUThreadPriority(INT Priority)

GPU スレッドの優先度を設定します。

PriorityINTin必要な GPU スレッドの優先度を指定する値。このトピックの 解説 セクションを参照してください。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合、Priority パラメーターが無効であれば E_INVALIDARG を返します。

解説(Remarks)

SetGPUThreadPriority メソッドを使用するには、GPU スケジューリングに関する包括的な理解が必要です。不適切に使用すると、SetGPUThreadPriority メソッドはレンダリング速度を妨げ、ユーザーエクスペリエンスの低下を招くおそれがあります。そのため、優先度の変更がアプリケーションおよびシステムに与える影響を把握できるよう、アプリケーションをプロファイリングしてください。

Priority パラメーターの値は次のように機能します。 優先度値のビット定義:

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] は次の優先度値に対応します。

vtbl 11 HRESULT GetGPUThreadPriority(INT* pPriority)

GPU スレッドの優先度を取得します。

pPriorityINT*out現在の GPU スレッドの優先度を示す値を受け取る変数へのポインター。値は -7 以上 7 以下で、0 は通常の優先度を表します。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合、pPriority パラメーターが NULL であれば E_POINTER を返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.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 指定が可能。