IDXGIResource
COM公式ドキュメント
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。
共有リソースへのハンドルを取得します。
| pSharedHandle | HANDLE* | out | ハンドルへのポインター。 |
戻り値
型: HRESULT
DXGI_ERROR の値のいずれかを返します。
解説(Remarks)
GetSharedHandle は、共有として作成したリソース(つまり、D3D11_RESOURCE_MISC_SHARED を、D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX フラグの有無にかかわらず設定したリソース)のハンドルを返します。このハンドルを ID3D11Device::OpenSharedResource メソッドに渡すことで、別のデバイスに共有リソースへのアクセスを許可できます。また、このハンドルを別のプロセスにマーシャリングして、別のプロセス内のデバイスとリソースを共有することもできます。ただし、このハンドルは NT ハンドルではありません。そのため、このハンドルを CloseHandle や DuplicateHandle などで使用しないでください。
共有リソースの作成者は、対象とするすべてのエンティティがリソースを開くまで、リソースを破棄してはなりません。ハンドルの有効性は、基になるビデオメモリの有効期間に結び付いています。このリソースを参照するリソースオブジェクトがどのデバイスにも存在しない場合、ハンドルは無効になります。ハンドルとビデオメモリの有効期間を延長するには、デバイス上で共有リソースを開く必要があります。
GetSharedHandle は、それらのリソースを開くために ID3D11Device::OpenSharedResource に渡されたリソースのハンドルを返すこともできます。
GetSharedHandle は、ハンドルを取得しようとするリソースが共有されていない場合は失敗します。
想定されるリソースの用途を取得します。
| pUsage | DXGI_USAGE* | out | 使用法フラグへのポインター(DXGI_USAGE を参照)。Direct3D 10 では、サーフェスをシェーダー入力またはレンダーターゲット出力として使用できます。 |
戻り値
型: HRESULT
次の DXGI_ERROR のいずれかを返します。
リソースをメモリから退避する優先度を設定します。
| EvictionPriority | DXGI_RESOURCE_PRIORITY | in | 優先度は次の値のいずれかです。
|
戻り値
型: HRESULT
次の DXGI_ERROR のいずれかを返します。
解説(Remarks)
退避優先度は、オーバーコミットされたメモリをどのように使用するかを DXGI が決定するために使用するメモリ管理用の変数です。
適切な場合は、定義された値以外の優先度レベルを設定できます。たとえば、リソースに 0x78000001 の優先度レベルを設定して、そのリソースが通常より少し上位であることを示すことができます。
退避優先度を取得します。
| pEvictionPriority | DXGI_RESOURCE_PRIORITY* | out | 退避優先度へのポインター。これはリソースをメモリからいつ退避できるかを決定します。 次の定義済みの値が使用可能です。
|
戻り値
型: HRESULT
次の DXGI_ERROR のいずれかを返します。
解説(Remarks)
退避優先度は、オーバーコミットされたメモリをどのように管理するかを DXGI が決定するために使用するメモリ管理用の変数です。
適切な場合は、定義された値以外の優先度レベルが使用されます。たとえば、0x78000001 の優先度レベルを持つリソースは、そのリソースが通常より少し上位であることを示します。
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 指定が可能。#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 sptr #comfunc global IDXGIResource_SetEvictionPriority 10 int #comfunc global IDXGIResource_GetEvictionPriority 11 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。