ID3D11Device2
COM公式ドキュメント
デバイスインターフェイスは仮想アダプターを表し、リソースの作成に使用します。ID3D11Device2 は ID3D11Device1 のメソッドに新しいメソッドを追加します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
コマンドリストを再生できるイミディエイトコンテキストを取得します。(ID3D11Device2.GetImmediateContext2)
| ppImmediateContext | ID3D11DeviceContext2** | out | メソッドが完了すると、渡された ID3D11DeviceContext2 インターフェイスポインターへのポインターが初期化されます。 |
解説(Remarks)
GetImmediateContext2 メソッドは、イミディエイトコンテキストを表す ID3D11DeviceContext2 オブジェクトを返します。イミディエイトコンテキストは、デバイスに即座に送信したいレンダリングを実行するために使用します。ほとんどのアプリでは、イミディエイトコンテキストがシーンの描画に使用する主要なオブジェクトになります。
GetImmediateContext2 メソッドは、イミディエイトコンテキストの参照カウントを 1 つ増やします。そのため、メモリリークを避けるには、返されたインターフェイスポインターの使用が終わったときに Release を呼び出す必要があります。
コマンドリストを記録できる遅延コンテキストを作成します。(ID3D11Device2.CreateDeferredContext2)
| ContextFlags | DWORD | in | 将来使用するために予約されています。 0 を渡してください。 |
| ppDeferredContext | ID3D11DeviceContext2** | outoptional | メソッドが完了すると、渡された ID3D11DeviceContext2 インターフェイスポインターへのポインターが初期化されます。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合は、次のいずれかを返します。
- ビデオカードがシステムから物理的に取り外された場合、またはビデオカードのドライバーがアップグレードされた場合は DXGI_ERROR_DEVICE_REMOVED を返します。 このエラーが発生した場合は、デバイスを破棄して再作成してください。
- 現在のコンテキストから CreateDeferredContext2 メソッドを呼び出せない場合は DXGI_ERROR_INVALID_CALL を返します。 たとえば、デバイスが D3D11_CREATE_DEVICE_SINGLETHREADED の値で作成された場合、CreateDeferredContext2 は DXGI_ERROR_INVALID_CALL を返します。
- ContextFlags パラメーターが無効な場合は E_INVALIDARG を返します。
- アプリが利用可能なメモリを使い果たした場合は E_OUTOFMEMORY を返します。
解説(Remarks)
遅延コンテキストはスレッドセーフなコンテキストであり、メインのレンダリングスレッド以外のスレッドでグラフィックスコマンドを記録するために使用できます。 遅延コンテキストを使用すると、ID3D11CommandList インターフェイスによってカプセル化されるコマンドリストにグラフィックスコマンドを記録できます。 すべてのシーン項目を記録した後、それらを最終的なレンダリングのためにメインのレンダリングスレッドに送信できます。 このようにして、複数のスレッドにわたって並行してレンダリング処理を実行でき、マルチコア CPU の環境ではパフォーマンスが向上する可能性があります。
遅延コンテキストは複数作成できます。
タイル化リソースがどのようにタイルに分割されているかについての情報を取得します。(ID3D11Device2.GetResourceTiling)
| pTiledResource | ID3D11Resource* | in | 情報を取得する対象のタイル化リソースへのポインター。 |
| pNumTilesForEntireResource | DWORD* | outoptional | タイル化リソース全体を格納するのに必要なタイル数を受け取る変数へのポインター。 |
| pPackedMipDesc | D3D11_PACKED_MIP_DESC* | outoptional | タイル化リソースのミップマップがどのようにパックされているかについての情報を GetResourceTiling が設定する D3D11_PACKED_MIP_DESC 構造体へのポインター。 |
| pStandardTileShapeForNonPackedMips | D3D11_TILE_SHAPE* | outoptional | タイル形状についての情報を GetResourceTiling が設定する D3D11_TILE_SHAPE 構造体へのポインター。これは、パックされたミップマップを除き、タイル化リソースの寸法とは無関係に、ピクセルがタイル内にどのように収まるかについての情報です。タイル化リソース全体がパックされている場合は、パックされたミップマップに対して定義されたレイアウトがタイル化リソースに存在しないため、このパラメーターは意味を持ちません。 この場合、GetResourceTiling は D3D11_TILE_SHAPE のメンバーを 0 に設定します。 |
| pNumSubresourceTilings | DWORD* | inoutoptional | サブリソース内のタイル数を格納する変数へのポインター。入力時にはタイル情報を照会するサブリソースの数を指定し、出力時には pSubresourceTilingsForNonPackedMips に実際に取得された数(利用可能な数に制限されます)が格納されます。 |
| FirstSubresourceTilingToGet | DWORD | in | 取得する最初のサブリソースタイルの番号。pNumSubresourceTilings が指す数値が 0 の場合、GetResourceTiling はこのパラメーターを無視します。 |
| pSubresourceTilingsForNonPackedMips | D3D11_SUBRESOURCE_TILING* | out | サブリソースタイルについての情報を GetResourceTiling が設定する D3D11_SUBRESOURCE_TILING 構造体へのポインター。 サブリソースタイルがパックされたミップマップの一部である場合、GetResourceTiling は D3D11_SUBRESOURCE_TILING のメンバーを 0 に設定します。ただし StartTileIndexInOverallResource メンバーは例外で、GetResourceTiling はこれを D3D11_PACKED_TILE (0xffffffff) に設定します。D3D11_PACKED_TILE 定数は、この状況では D3D11_SUBRESOURCE_TILING 構造体全体が意味を持たず、pPackedMipDesc パラメーターが指す情報が適用されることを示します。 |
解説(Remarks)
タイル化リソースの詳細については、タイル化リソースを参照してください。
マルチサンプリング時に利用可能な品質レベルの数を取得します。(ID3D11Device2.CheckMultisampleQualityLevels1)
| Format | DXGI_FORMAT | in | マルチサンプリング時のテクスチャフォーマット。 |
| SampleCount | DWORD | in | マルチサンプリング時のサンプル数。 |
| Flags | DWORD | in | ビットごとの OR 演算で組み合わせた D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAGS 値の組み合わせ。現在サポートされているのは D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE のみです。 |
| pNumQualityLevels | DWORD* | out | アダプターがサポートする品質レベルの数を受け取る変数へのポインター。「解説」を参照してください。 |
戻り値
型: HRESULT
このメソッドは Direct3D 11 の戻り値コードのいずれかを返します。
解説(Remarks)
テクスチャをマルチサンプリングする場合、アダプターで利用可能な品質レベルの数は、使用するテクスチャフォーマットと要求するサンプル数によって決まります。品質レベルの最大数は D3D11.h の D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT で定義されます。このメソッドが 0 を返した場合、そのフォーマットとサンプル数の組み合わせは、インストールされているアダプターではサポートされていません。
さらに、品質レベルの定義は各ハードウェアベンダーに委ねられていますが、この情報を確認するための機能は Direct3D では提供されていません。
FEATURE_LEVEL_10_1 のデバイスは、R32G32B32A32 と R32G32B32 を除くすべてのレンダーターゲットで 4x MSAA をサポートする必要があります。 FEATURE_LEVEL_11_0 のデバイスは、すべてのレンダーターゲットフォーマットで 4x MSAA を、R32G32B32A32 系フォーマットを除くすべてのレンダーターゲットフォーマットで 8x MSAA をサポートする必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID3D11Device2 "{9D06DFFA-D1E5-4D07-83A8-1BB123F2F841}" #usecom global ID3D11Device2 IID_ID3D11Device2 "{}" #comfunc global ID3D11Device2_GetImmediateContext2 50 sptr #comfunc global ID3D11Device2_CreateDeferredContext2 51 int,sptr #comfunc global ID3D11Device2_GetResourceTiling 52 sptr,var,var,var,var,int,var #comfunc global ID3D11Device2_CheckMultisampleQualityLevels1 53 int,int,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ID3D11Device2 "{9D06DFFA-D1E5-4D07-83A8-1BB123F2F841}" #usecom global ID3D11Device2 IID_ID3D11Device2 "{}" #comfunc global ID3D11Device2_GetImmediateContext2 50 sptr #comfunc global ID3D11Device2_CreateDeferredContext2 51 int,sptr #comfunc global ID3D11Device2_GetResourceTiling 52 sptr,sptr,sptr,sptr,sptr,int,sptr #comfunc global ID3D11Device2_CheckMultisampleQualityLevels1 53 int,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。