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

IDXGIResource

COM
IID035f3ab4-482e-4e50-b41f-8a7f8bd8960b継承元IDXGIDeviceSubObject自前メソッド開始 vtbl8

公式ドキュメント

IDXGIResource インターフェイスはリソースの共有を可能にし、リソースが存在するメモリを識別します。

解説(Remarks)

リソースが現在どのタイプのメモリに配置されているかを調べるには、IDXGIDevice::QueryResourceResidency を使用します。プロセス間でリソースを共有するには、ID3D10Device::OpenSharedResource を使用します。Direct3D 11、Direct2D、Direct3D 10、Direct3D 9Ex を含む複数の Windows グラフィックス API 間でリソースを共有する方法については、Surface Sharing Between Windows Graphics APIs を参照してください。

Direct3D 10 以降の関数で作成した任意のビデオメモリリソースから IDXGIResource インターフェイスを取得できます。ID3D10Resource または ID3D11Resource をサポートする Direct3D オブジェクトはすべて IDXGIResource もサポートします。たとえば、ID3D11Device::CreateTexture2D で作成した Direct3D 2D テクスチャオブジェクトは IDXGIResource をサポートします。2D テクスチャオブジェクト(ID3D11Texture2D)に対して QueryInterface を呼び出すことで、IDXGIResource インターフェイスを取得できます。たとえば、2D テクスチャオブジェクトから IDXGIResource インターフェイスを取得するには、次のコードを使用します。

IDXGIResource * pDXGIResource;
hr = g_pd3dTexture2D->QueryInterface(__uuidof(IDXGIResource), (void **)&pDXGIResource);

Windows Phone 8: この API はサポートされています。

メソッド 4

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 8 HRESULT GetSharedHandle(HANDLE* pSharedHandle)

共有リソースへのハンドルを取得します。

pSharedHandleHANDLE*outハンドルへのポインター。

戻り値

型: HRESULT

DXGI_ERROR の値のいずれかを返します。

解説(Remarks)

GetSharedHandle は、共有として作成したリソース(つまり、D3D11_RESOURCE_MISC_SHARED を、D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX フラグの有無にかかわらず設定したリソース)のハンドルを返します。このハンドルを ID3D11Device::OpenSharedResource メソッドに渡すことで、別のデバイスに共有リソースへのアクセスを許可できます。また、このハンドルを別のプロセスにマーシャリングして、別のプロセス内のデバイスとリソースを共有することもできます。ただし、このハンドルは NT ハンドルではありません。そのため、このハンドルを CloseHandleDuplicateHandle などで使用しないでください。

共有リソースの作成者は、対象とするすべてのエンティティがリソースを開くまで、リソースを破棄してはなりません。ハンドルの有効性は、基になるビデオメモリの有効期間に結び付いています。このリソースを参照するリソースオブジェクトがどのデバイスにも存在しない場合、ハンドルは無効になります。ハンドルとビデオメモリの有効期間を延長するには、デバイス上で共有リソースを開く必要があります。

GetSharedHandle は、それらのリソースを開くために ID3D11Device::OpenSharedResource に渡されたリソースのハンドルを返すこともできます。

GetSharedHandle は、ハンドルを取得しようとするリソースが共有されていない場合は失敗します。

vtbl 9 HRESULT GetUsage(DXGI_USAGE* pUsage)

想定されるリソースの用途を取得します。

pUsageDXGI_USAGE*out使用法フラグへのポインター(DXGI_USAGE を参照)。Direct3D 10 では、サーフェスをシェーダー入力またはレンダーターゲット出力として使用できます。

戻り値

型: HRESULT

次の DXGI_ERROR のいずれかを返します。

vtbl 10 HRESULT SetEvictionPriority(DXGI_RESOURCE_PRIORITY EvictionPriority)

リソースをメモリから退避する優先度を設定します。

EvictionPriorityDXGI_RESOURCE_PRIORITYin

優先度は次の値のいずれかです。

意味
DXGI_RESOURCE_PRIORITY_MINIMUM (0x28000000)
リソースは未使用であり、別のリソースがこのリソースの占有するメモリを必要とし次第、退避できます。
DXGI_RESOURCE_PRIORITY_LOW (0x50000000)
リソースの退避優先度は低です。リソースの配置は重要ではなく、リソースの配置場所を見つけるための処理は最小限です。たとえば、GPU がローカルメモリと非ローカルメモリのどちらの頂点バッファーでもほとんど性能差なくレンダリングできる場合、その頂点バッファーは低優先度です。これにより、より重要な他のリソース(たとえばレンダーターゲットやテクスチャ)が高速なメモリを占有できます。
DXGI_RESOURCE_PRIORITY_NORMAL (0x78000000)
リソースの退避優先度は通常です。リソースの配置は性能にとって重要ですが、決定的ではありません。リソースは低優先度のリソースに代わって、優先される場所に配置されます。
DXGI_RESOURCE_PRIORITY_HIGH (0xa0000000)
リソースの退避優先度は高です。リソースは低優先度または通常優先度のリソースに代わって、優先される場所に配置されます。
DXGI_RESOURCE_PRIORITY_MAXIMUM (0xc8000000)
リソースは、メモリ要件を解決する他の方法がない場合にのみメモリから退避されます。

戻り値

型: HRESULT

次の DXGI_ERROR のいずれかを返します。

解説(Remarks)

退避優先度は、オーバーコミットされたメモリをどのように使用するかを DXGI が決定するために使用するメモリ管理用の変数です。

適切な場合は、定義された値以外の優先度レベルを設定できます。たとえば、リソースに 0x78000001 の優先度レベルを設定して、そのリソースが通常より少し上位であることを示すことができます。

vtbl 11 HRESULT GetEvictionPriority(DXGI_RESOURCE_PRIORITY* pEvictionPriority)

退避優先度を取得します。

pEvictionPriorityDXGI_RESOURCE_PRIORITY*out

退避優先度へのポインター。これはリソースをメモリからいつ退避できるかを決定します。

次の定義済みの値が使用可能です。

意味
DXGI_RESOURCE_PRIORITY_MINIMUM (0x28000000)
リソースは未使用であり、別のリソースがこのリソースの占有するメモリを必要とし次第、退避できます。
DXGI_RESOURCE_PRIORITY_LOW (0x50000000)
リソースの退避優先度は低です。リソースの配置は重要ではなく、リソースの配置場所を見つけるための処理は最小限です。たとえば、GPU がローカルメモリと非ローカルメモリのどちらの頂点バッファーでもほとんど性能差なくレンダリングできる場合、その頂点バッファーは低優先度です。これにより、より重要な他のリソース(たとえばレンダーターゲットやテクスチャ)が高速なメモリを占有できます。
DXGI_RESOURCE_PRIORITY_NORMAL (0x78000000)
リソースの退避優先度は通常です。リソースの配置は性能にとって重要ですが、決定的ではありません。リソースは低優先度のリソースに代わって、優先される場所に配置されます。
DXGI_RESOURCE_PRIORITY_HIGH (0xa0000000)
リソースの退避優先度は高です。リソースは低優先度または通常優先度のリソースに代わって、優先される場所に配置されます。
DXGI_RESOURCE_PRIORITY_MAXIMUM (0xc8000000)
リソースは、メモリ要件を解決する他の方法がない場合にのみメモリから退避されます。

戻り値

型: HRESULT

次の DXGI_ERROR のいずれかを返します。

解説(Remarks)

退避優先度は、オーバーコミットされたメモリをどのように管理するかを DXGI が決定するために使用するメモリ管理用の変数です。

適切な場合は、定義された値以外の優先度レベルが使用されます。たとえば、0x78000001 の優先度レベルを持つリソースは、そのリソースが通常より少し上位であることを示します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IDXGIResource "{035F3AB4-482E-4E50-B41F-8A7F8BD8960B}"
#usecom global IDXGIResource IID_IDXGIResource "{}"
#comfunc global IDXGIResource_GetSharedHandle      8 sptr
#comfunc global IDXGIResource_GetUsage             9 var
#comfunc global IDXGIResource_SetEvictionPriority  10 int
#comfunc global IDXGIResource_GetEvictionPriority  11 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。