ID3D11DeviceContext
COM公式ドキュメント
ID3D11DeviceContext インターフェイスは、レンダリングコマンドを生成するデバイスコンテキストを表します。
メソッド 108
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
頂点シェーダーパイプラインステージで使用される定数バッファーを設定します。
| StartSlot | DWORD | in | 定数バッファーの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1)。 |
| NumBuffers | DWORD | in | 設定するバッファーの数 (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot)。 |
| ppConstantBuffers | ID3D11Buffer** | inoptional | デバイスに渡す定数バッファーの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
Windows 8 以降で利用できる Direct3D 11.1 ランタイムでは、シェーダーがサポートする最大定数バッファーサイズ (4096 定数、各 4*32 ビットコンポーネント) を超える大きさの ID3D11Buffer リソースをシェーダーにバインドできます。そのような大きなバッファーをバインドした場合、シェーダーはバッファーの先頭 4096 個の 4*32 ビットコンポーネント定数にのみアクセスでき、あたかも 4096 定数がバッファー全体のサイズであるかのように扱われます。
アプリケーションがシェーダーからバッファーの他の部分にアクセスさせたい場合は、代わりに VSSetConstantBuffers1 メソッドを呼び出す必要があります。
Windows Phone 8: この API はサポートされています。
シェーダーリソースの配列をピクセルシェーダーステージにバインドします。(ID3D11DeviceContext.PSSetShaderResources)
| StartSlot | DWORD | in | シェーダーリソースの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1)。 |
| NumViews | DWORD | in | 設定するシェーダーリソースの数。シェーダーリソース用には最大 128 スロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppShaderResourceViews | ID3D11ShaderResourceView** | inoptional | デバイスに設定するシェーダーリソースビューインターフェイスの配列。 |
解説(Remarks)
重複するリソースビューがレンダーターゲットなどの出力スロットに既にバインドされている場合、この API は対象のシェーダーリソーススロットを NULL で埋めます。
シェーダーリソースビューの作成については、ID3D11Device::CreateShaderResourceView を参照してください。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
ピクセルシェーダーをデバイスに設定します。(ID3D11DeviceContext.PSSetShader)
| pPixelShader | ID3D11PixelShader* | inoptional | ピクセルシェーダーへのポインター (ID3D11PixelShader を参照)。NULL を渡すと、このパイプラインステージのシェーダーが無効になります。 |
| ppClassInstances | ID3D11ClassInstance** | inoptional | クラスインスタンスインターフェイスの配列へのポインター (ID3D11ClassInstance を参照)。シェーダーが使用する各インターフェイスには対応するクラスインスタンスが必要で、そうでない場合シェーダーは無効になります。シェーダーがインターフェイスを使用しない場合は、ppClassInstances に NULL を設定します。 |
| NumClassInstances | DWORD | in | 配列内のクラスインスタンスインターフェイスの数。 |
解説(Remarks)
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
シェーダーが持てるインスタンスの最大数は 256 です。
シェーダーでインターフェイスを使用しない場合は、ppClassInstances に NULL を設定します。NULL でない場合、クラスインスタンスの数はシェーダーで使用されるインターフェイスの数と一致している必要があります。さらに、各インターフェイスポインターには対応するクラスインスタンスが必要で、そうでない場合は割り当てたシェーダーが無効になります。
Windows Phone 8: この API はサポートされています。
サンプラーステートの配列をピクセルシェーダーパイプラインステージに設定します。(ID3D11DeviceContext.PSSetSamplers)
| StartSlot | DWORD | in | サンプラーの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1)。 |
| NumSamplers | DWORD | in | 配列内のサンプラーの数。各パイプラインステージには合計 16 個のサンプラースロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot)。 |
| ppSamplers | ID3D11SamplerState** | inoptional | サンプラーステートインターフェイスの配列へのポインター (ID3D11SamplerState を参照)。「解説」を参照してください。 |
解説(Remarks)
いずれのサンプラーにも NULL を設定できます。その場合は既定のステートが適用され、内容は次のとおりです。
| ステート | 既定値 |
|---|---|
| Filter | D3D11_FILTER_MIN_MAG_MIP_LINEAR |
| AddressU | D3D11_TEXTURE_ADDRESS_CLAMP |
| AddressV | D3D11_TEXTURE_ADDRESS_CLAMP |
| AddressW | D3D11_TEXTURE_ADDRESS_CLAMP |
| MipLODBias | 0 |
| MaxAnisotropy | 1 |
| ComparisonFunc | D3D11_COMPARISON_NEVER |
| BorderColor[0] | 1.0f |
| BorderColor[1] | 1.0f |
| BorderColor[2] | 1.0f |
| BorderColor[3] | 1.0f |
| MinLOD | -FLT_MAX |
| MaxLOD | FLT_MAX |
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
頂点シェーダーをデバイスに設定します。(ID3D11DeviceContext.VSSetShader)
| pVertexShader | ID3D11VertexShader* | inoptional | 頂点シェーダーへのポインター (ID3D11VertexShader を参照)。NULL を渡すと、このパイプラインステージのシェーダーが無効になります。 |
| ppClassInstances | ID3D11ClassInstance** | inoptional | クラスインスタンスインターフェイスの配列へのポインター (ID3D11ClassInstance を参照)。シェーダーが使用する各インターフェイスには対応するクラスインスタンスが必要で、そうでない場合シェーダーは無効になります。シェーダーがインターフェイスを使用しない場合は、ppClassInstances に NULL を設定します。 |
| NumClassInstances | DWORD | in | 配列内のクラスインスタンスインターフェイスの数。 |
解説(Remarks)
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
シェーダーが持てるインスタンスの最大数は 256 です。
インデックス付きの非インスタンス化プリミティブを描画します。(ID3D11DeviceContext.DrawIndexed)
| IndexCount | DWORD | in | 描画するインデックスの数。 |
| StartIndexLocation | DWORD | in | GPU がインデックスバッファーから読み取る最初のインデックスの位置。 |
| BaseVertexLocation | INT | in | 頂点バッファーから頂点を読み取る前に、各インデックスに加算される値。 |
解説(Remarks)
描画 API は、レンダリングパイプラインに処理を送信します。
両方のインデックスの合計が負になる場合、この関数呼び出しの結果は未定義です。
インデックスなし・非インスタンス化のプリミティブを描画します。(ID3D11DeviceContext.Draw)
| VertexCount | DWORD | in | 描画する頂点の数。 |
| StartVertexLocation | DWORD | in | 最初の頂点のインデックス。通常は頂点バッファー内のオフセットになります。 |
解説(Remarks)
Draw は、レンダリングパイプラインに処理を送信します。
描画呼び出しの頂点データは、通常、パイプラインにバインドされた頂点バッファーから供給されます。
頂点バッファーをパイプラインにバインドしていない場合でも、SV_VertexID システム値セマンティクスを使用してランタイムが処理中の現在の頂点を判別することで、頂点シェーダー内で独自の頂点データを生成できます。
サブリソースに含まれるデータへのポインターを取得し、そのサブリソースへの GPU のアクセスを禁止します。
| pResource | ID3D11Resource* | in | ID3D11Resource インターフェイスへのポインター。 |
| Subresource | DWORD | in | サブリソースのインデックス番号。 |
| MapType | D3D11_MAP | in | リソースに対する CPU の読み取り/書き込み権限を指定する D3D11_MAP 型の値。 |
| MapFlags | DWORD | in | GPU がビジー状態のときに CPU が何を行うかを指定するフラグ。このフラグは省略可能です。 |
| pMappedResource | D3D11_MAPPED_SUBRESOURCE* | outoptional | マップされたサブリソースの D3D11_MAPPED_SUBRESOURCE 構造体へのポインター。 NULL ポインターについては「解説」セクションを参照してください。 |
戻り値
型: HRESULT
このメソッドは Direct3D 11 のリターンコードのいずれかを返します。
また、MapFlags に D3D11_MAP_FLAG_DO_NOT_WAIT が指定されており、GPU がまだリソースの処理を終えていない場合、このメソッドは DXGI_ERROR_WAS_STILL_DRAWING を返します。
さらに、MapType が CPU による読み取りアクセスを許可しており、ビデオカードが取り外された場合には DXGI_ERROR_DEVICE_REMOVED を返します。
これらのエラーコードの詳細については、DXGI_ERROR を参照してください。
解説(Remarks)
遅延コンテキストで Map を呼び出す場合、MapType パラメーターに渡せるのは D3D11_MAP_WRITE_DISCARD、D3D11_MAP_WRITE_NO_OVERWRITE、またはその両方のみです。それ以外の D3D11_MAP 型の値は遅延コンテキストではサポートされません。
pMappedResource の NULL ポインター
D3D11_USAGE_DEFAULT で作成されたテクスチャを指定し、即時コンテキストで API を呼び出す場合、pMappedResource パラメーターは NULL にできます。 これにより、D3D11_TEXTURE_LAYOUT_UNDEFINED を使用して作成された既定のテクスチャであってもマップできます。 この API 呼び出しの後、テクスチャには ID3D11DeviceContext3::WriteToSubresource や ID3D11DeviceContext3::ReadFromSubresource を使用してアクセスできます。書き込み用にマップしたサブリソースから読み取らないこと
MapType パラメーターに D3D11_MAP_WRITE、D3D11_MAP_WRITE_DISCARD、または D3D11_MAP_WRITE_NO_OVERWRITE を渡す場合、D3D11_MAPPED_SUBRESOURCE の pData メンバーが指すサブリソースデータをアプリが読み取らないようにする必要があります。読み取ると著しいパフォーマンス低下を招く可能性があるためです。pData が指すメモリ領域は PAGE_WRITECOMBINE で割り当てられている場合があり、アプリはそのようなメモリに伴うすべての制約に従う必要があります。次の C++ コードでさえメモリから読み取りを行い、パフォーマンス低下を引き起こす可能性があります。これは、このコードが以下の x86 アセンブリコードに展開されうるためです。
C++ コード:
*((int*)MappedResource.pData) = 0;
x86 アセンブリコード:
AND DWORD PTR [EAX],0
適切な最適化設定と言語構文を用いて、このパフォーマンス低下を避けてください。たとえば、volatile ポインターを使用するか、コードサイズではなく実行速度を優先して最適化することで、xor 最適化を回避できます。
Windows Phone 8: この API はサポートされています。
リソースへのポインターを無効化し、そのリソースへの GPU のアクセスを再び有効にします。
| pResource | ID3D11Resource* | in | ID3D11Resource インターフェイスへのポインター。 |
| Subresource | DWORD | in | アンマップするサブリソース。 |
解説(Remarks)
Unmap の使用方法については、方法: 動的リソースを使用するを参照してください。
Windows Phone 8: この API はサポートされています。
ピクセルシェーダーパイプラインステージで使用される定数バッファーを設定します。
| StartSlot | DWORD | in | 定数バッファーの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1)。 |
| NumBuffers | DWORD | in | 設定するバッファーの数 (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot)。 |
| ppConstantBuffers | ID3D11Buffer** | inoptional | デバイスに渡す定数バッファーの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
Windows 8 以降のオペレーティングシステムで利用できる Direct3D 11.1 ランタイムでは、シェーダーがサポートする最大定数バッファーサイズ (4096 定数、各 432 ビットコンポーネント) を超える大きさの ID3D11Buffer リソースをシェーダーにバインドできます。 そのような大きなバッファーをバインドした場合、シェーダーはバッファーの先頭 4096 個の 432 ビットコンポーネント定数にのみアクセスでき、あたかも 4096 定数がバッファー全体のサイズであるかのように扱われます。
シェーダーからバッファーの他の部分にアクセスできるようにするには、PSSetConstantBuffers ではなく PSSetConstantBuffers1 を呼び出します。 PSSetConstantBuffers1 には、追加のパラメーター pFirstConstant と pNumConstants があります。
入力レイアウトオブジェクトを入力アセンブラーステージにバインドします。(ID3D11DeviceContext.IASetInputLayout)
| pInputLayout | ID3D11InputLayout* | inoptional | 入力レイアウトオブジェクト (ID3D11InputLayout を参照) へのポインター。IA ステージが読み取る入力バッファーを記述します。 |
解説(Remarks)
入力レイアウトオブジェクトは、頂点バッファーのデータが IA パイプラインステージにどのようにストリーミングされるかを記述します。入力レイアウトオブジェクトを作成するには、ID3D11Device::CreateInputLayout を呼び出します。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
頂点バッファーの配列を入力アセンブラーステージにバインドします。(ID3D11DeviceContext.IASetVertexBuffers)
| StartSlot | DWORD | in | バインドを開始する最初の入力スロット。最初の頂点バッファーは開始スロットに明示的にバインドされ、配列内の以降の各頂点バッファーは後続の入力スロットに暗黙的にバインドされます。入力スロットは最大 16 個または 32 個利用できます (範囲は 0 から D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1)。入力スロットの最大数は機能レベルによって異なります。 |
| NumBuffers | DWORD | in | 配列内の頂点バッファーの数。バッファー数 (と開始スロットの合計) は、IA ステージの入力スロットの総数を超えることはできません (範囲は 0 から D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppVertexBuffers | ID3D11Buffer** | inoptional | 頂点バッファーの配列へのポインター (ID3D11Buffer を参照)。頂点バッファーは D3D11_BIND_VERTEX_BUFFER フラグを指定して作成されている必要があります。 |
| pStrides | DWORD* | inoptional | ストライド値の配列へのポインター。頂点バッファー配列内の各バッファーにつき 1 つのストライド値を指定します。各ストライドは、その頂点バッファーから使用される要素のサイズ (バイト単位) です。 |
| pOffsets | DWORD* | inoptional | オフセット値の配列へのポインター。頂点バッファー配列内の各バッファーにつき 1 つのオフセット値を指定します。各オフセットは、頂点バッファーの先頭要素から実際に使用される最初の要素までのバイト数です。 |
解説(Remarks)
頂点バッファーの作成については、方法: 頂点バッファーを作成するを参照してください。
現在書き込み用にバインドされている (つまりストリーム出力パイプラインステージにバインドされている) バッファーを使用してこのメソッドを呼び出すと、バッファーは入力と出力に同時にバインドできないため、実際には NULL がバインドされます。
リソースが入力と出力に同時にバインドされるのを防いだ場合、デバッグレイヤーは警告を生成しますが、無効なデータがランタイムで使用されるのを防ぐわけではありません。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
Windows Phone 8: この API はサポートされています。
インデックスバッファーを入力アセンブラーステージにバインドします。(ID3D11DeviceContext.IASetIndexBuffer)
| pIndexBuffer | ID3D11Buffer* | inoptional | インデックスを含む ID3D11Buffer オブジェクトへのポインター。インデックスバッファーは D3D11_BIND_INDEX_BUFFER フラグを指定して作成されている必要があります。 |
| Format | DXGI_FORMAT | in | インデックスバッファー内のデータの形式を指定する DXGI_FORMAT。インデックスバッファーのデータに使用できる形式は、16 ビット (DXGI_FORMAT_R16_UINT) と 32 ビット (DXGI_FORMAT_R32_UINT) の整数のみです。 |
| Offset | DWORD | in | インデックスバッファーの先頭から、使用する最初のインデックスまでのオフセット (バイト単位)。 |
解説(Remarks)
インデックスバッファーの作成については、方法: インデックスバッファーを作成するを参照してください。
現在書き込み用にバインドされている (つまりストリーム出力パイプラインステージにバインドされている) バッファーを使用してこのメソッドを呼び出すと、バッファーは入力と出力に同時にバインドできないため、実際には NULL がバインドされます。
リソースが入力と出力に同時にバインドされるのを防いだ場合、デバッグレイヤーは警告を生成しますが、無効なデータがランタイムで使用されるのを 防ぐわけではありません。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
Windows Phone 8: この API はサポートされています。
インデックス付きのインスタンス化プリミティブを描画します。(ID3D11DeviceContext.DrawIndexedInstanced)
| IndexCountPerInstance | DWORD | in | インスタンスごとにインデックスバッファーから読み取るインデックスの数。 |
| InstanceCount | DWORD | in | 描画するインスタンスの数。 |
| StartIndexLocation | DWORD | in | GPU がインデックスバッファーから読み取る最初のインデックスの位置。 |
| BaseVertexLocation | INT | in | 頂点バッファーから頂点を読み取る前に、各インデックスに加算される値。 |
| StartInstanceLocation | DWORD | in | 頂点バッファーからインスタンスごとのデータを読み取る前に、各インデックスに加算される値。 |
解説(Remarks)
描画 API は、レンダリングパイプラインに処理を送信します。
インスタンシングは、同一のジオメトリを再利用してシーン内の複数のオブジェクトを描画することで、パフォーマンスを向上させられる場合があります。インスタンシングの例としては、同じオブジェクトを異なる位置・色で描画することが挙げられます。インスタンシングには複数の頂点バッファーが必要です。少なくとも 1 つは頂点ごとのデータ用、もう 1 つはインスタンスごとのデータ用です。
2 つ目のバッファーが必要になるのは、使用する入力レイアウトに、インスタンスごとのデータ用の入力要素分類として D3D11_INPUT_PER_INSTANCE_DATA を使用する要素が含まれる場合のみです。
インデックスなしのインスタンス化プリミティブを描画します。(ID3D11DeviceContext.DrawInstanced)
| VertexCountPerInstance | DWORD | in | 描画する頂点の数。 |
| InstanceCount | DWORD | in | 描画するインスタンスの数。 |
| StartVertexLocation | DWORD | in | 最初の頂点のインデックス。 |
| StartInstanceLocation | DWORD | in | 頂点バッファーからインスタンスごとのデータを読み取る前に、各インデックスに加算される値。 |
解説(Remarks)
描画 API は、レンダリングパイプラインに処理を送信します。
インスタンシングは、同一のジオメトリを再利用してシーン内の複数のオブジェクトを描画することで、パフォーマンスを向上させられる場合があります。インスタンシングの例としては、 同じオブジェクトを異なる位置・色で描画することが挙げられます。
インスタンス化された描画呼び出しの頂点データは、通常、パイプラインにバインドされた頂点バッファーから供給されます。 ただし、システム値セマンティクス (SV_InstanceID) で識別されるインスタンスデータを持つシェーダーから頂点データを供給することもできます。
ジオメトリシェーダーパイプラインステージで使用される定数バッファーを設定します。
| StartSlot | DWORD | in | 定数バッファーの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1)。 |
| NumBuffers | DWORD | in | 設定するバッファーの数 (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot)。 |
| ppConstantBuffers | ID3D11Buffer** | inoptional | デバイスに渡す定数バッファーの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
ID3D11ShaderReflectionConstantBuffer インターフェイスを使用して、デバイスコンテキストのパイプラインに現在バインドされているものの情報を取得することはできません。ただし、ID3D11ShaderReflectionConstantBuffer を使用して、コンパイル済みシェーダーから情報を取得することはできます。たとえば、ID3D11ShaderReflectionConstantBuffer と ID3D11ShaderReflectionVariable を使用して、ジオメトリシェーダーが定数バッファーを期待するスロットを判別できます。そして、そのスロット番号を GSSetConstantBuffers に渡して定数バッファーを設定できます。D3D11Reflect 関数を呼び出して ID3D11ShaderReflection インターフェイスへのポインターのアドレスを取得し、続いて ID3D11ShaderReflection::GetConstantBufferByName を呼び出して ID3D11ShaderReflectionConstantBuffer へのポインターを取得できます。
Windows 8 以降で利用できる Direct3D 11.1 ランタイムでは、シェーダーがサポートする最大定数バッファーサイズ (4096 定数、各 432 ビットコンポーネント) を超える大きさの ID3D11Buffer リソースをシェーダーにバインドできます。そのような大きなバッファーをバインドした場合、シェーダーはバッファーの先頭 4096 個の 432 ビットコンポーネント定数にのみアクセスでき、あたかも 4096 定数がバッファー全体のサイズであるかのように扱われます。
アプリケーションがシェーダーからバッファーの他の部分にアクセスさせたい場合は、代わりに GSSetConstantBuffers1 メソッドを呼び出す必要があります。
ジオメトリシェーダーをデバイスに設定します。(ID3D11DeviceContext.GSSetShader)
| pShader | ID3D11GeometryShader* | inoptional | ジオメトリシェーダーへのポインター (ID3D11GeometryShader を参照)。NULL を渡すと、このパイプラインステージのシェーダーが無効になります。 |
| ppClassInstances | ID3D11ClassInstance** | inoptional | クラスインスタンスインターフェイスの配列へのポインター (ID3D11ClassInstance を参照)。シェーダーが使用する各インターフェイスには対応するクラスインスタンスが必要で、そうでない場合シェーダーは無効になります。シェーダーがインターフェイスを使用しない場合は、ppClassInstances に NULL を設定します。 |
| NumClassInstances | DWORD | in | 配列内のクラスインスタンスインターフェイスの数。 |
解説(Remarks)
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
シェーダーが持てるインスタンスの最大数は 256 です。
入力アセンブラーステージの入力データを記述する、プリミティブの種類とデータの並び順の情報をバインドします。(ID3D11DeviceContext.IASetPrimitiveTopology)
| Topology | D3D_PRIMITIVE_TOPOLOGY | in | プリミティブの種類とプリミティブデータの並び順 (D3D11_PRIMITIVE_TOPOLOGY を参照)。 |
解説(Remarks)
Windows Phone 8: この API はサポートされています。
シェーダーリソースの配列を頂点シェーダーステージにバインドします。
| StartSlot | DWORD | in | シェーダーリソースの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1)。 |
| NumViews | DWORD | in | 設定するシェーダーリソースの数。シェーダーリソース用には最大 128 スロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppShaderResourceViews | ID3D11ShaderResourceView** | inoptional | デバイスに設定するシェーダーリソースビューインターフェイスの配列。 |
解説(Remarks)
重複するリソースビューがレンダーターゲットなどの出力スロットに既にバインドされている場合、この API は対象のシェーダーリソーススロットを NULL で埋めます。
シェーダーリソースビューの作成については、ID3D11Device::CreateShaderResourceView を参照してください。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
リソーススロットのバインドを解除するには、null 値を含む配列を渡す必要があります。たとえば、最初の 4 スロットをクリアするには次のようにします。
ID3D11ShaderResourceView* nullsrv[] = { nullptr, nullptr, nullptr, nullptr };
context->VSSetShaderResources(0, 4, nullsrv);
サンプラーステートの配列を頂点シェーダーパイプラインステージに設定します。(ID3D11DeviceContext.VSSetSamplers)
| StartSlot | DWORD | in | サンプラーの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1)。 |
| NumSamplers | DWORD | in | 配列内のサンプラーの数。各パイプラインステージには合計 16 個のサンプラースロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot)。 |
| ppSamplers | ID3D11SamplerState** | inoptional | サンプラーステートインターフェイスの配列へのポインター (ID3D11SamplerState を参照)。「解説」を参照してください。 |
解説(Remarks)
いずれのサンプラーにも NULL を設定できます。その場合は既定のステートが適用され、内容は次のとおりです。
//Default sampler state:
D3D11_SAMPLER_DESC SamplerDesc;
SamplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
SamplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.MipLODBias = 0;
SamplerDesc.MaxAnisotropy = 1;
SamplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER;
SamplerDesc.BorderColor[0] = 1.0f;
SamplerDesc.BorderColor[1] = 1.0f;
SamplerDesc.BorderColor[2] = 1.0f;
SamplerDesc.BorderColor[3] = 1.0f;
SamplerDesc.MinLOD = -FLT_MAX;
SamplerDesc.MaxLOD = FLT_MAX;
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
一連のコマンドの開始位置を示します。
| pAsync | ID3D11Asynchronous* | in | ID3D11Asynchronous インターフェイスへのポインター。 |
解説(Remarks)
一連のコマンドの終了位置を示すには、ID3D11DeviceContext::End を使用します。
一連のコマンドの終了位置を示します。
| pAsync | ID3D11Asynchronous* | in | ID3D11Asynchronous インターフェイスへのポインター。 |
解説(Remarks)
一連のコマンドの開始位置を示すには、ID3D11DeviceContext::Begin を使用します。
グラフィックスプロセッシングユニット (GPU) から非同期にデータを取得します。
| pAsync | ID3D11Asynchronous* | in | GetData がデータを取得する対象オブジェクトの ID3D11Asynchronous インターフェイスへのポインター。 |
| pData | void* | outoptional | データを受け取るメモリのアドレス。NULL の場合、GetData は状態の確認のみに使用されます。出力されるデータの型は、非同期インターフェイスの種類によって異なります。 |
| DataSize | DWORD | in | 取得するデータのサイズ、または 0。pData が NULL の場合は 0 でなければなりません。 |
| GetDataFlags | DWORD | in | 省略可能なフラグ。0、または D3D11_ASYNC_GETDATA_FLAG で列挙されるフラグの任意の組み合わせを指定できます。 |
戻り値
型: HRESULT
このメソッドは Direct3D 11 のリターンコードのいずれかを返します。戻り値 S_OK は、pData のデータを呼び出し元アプリケーションが利用できることを示します。戻り値 S_FALSE は、データがまだ利用できないことを示します。データがまだ利用できない場合、アプリケーションはデータが利用可能になるまで GetData を呼び出し続ける必要があります。
解説(Remarks)
遅延コンテキストにおけるクエリは、述語付き描画に限定されます。つまり、遅延コンテキストで ID3D11DeviceContext::GetData を呼び出してクエリのデータを取得することはできません。クエリのデータを取得できるのは即時コンテキストでの GetData 呼び出しのみです。述語付き描画では、述語型クエリの結果は GPU によって使用され、アプリケーションには返されません。述語と述語付き描画の詳細については、D3D11DeviceContext::SetPredication を参照してください。
GetData は、ID3D11DeviceContext::Begin と ID3D11DeviceContext::End の呼び出しの間にランタイムが収集したデータを取得します。一部のクエリは ID3D11DeviceContext::End の呼び出しのみを必要とし、その場合 GetData が返すデータは最後の ID3D11DeviceContext::End 呼び出し時点まで正確です。ID3D11DeviceContext::End の呼び出しのみを必要とするクエリ、および GetData が各クエリに対して取得するデータの型については、D3D11_QUERY を参照してください。
DataSize が 0 の場合、GetData は状態の確認のみに使用されます。
アプリケーションは、ID3D11DeviceContext::Begin を呼び出し、いくつかのグラフィックスコマンドを発行し、ID3D11DeviceContext::End を呼び出した後、ID3D11DeviceContext::GetData を呼び出して、Begin と End の間に何が起きたかに関するデータを取得することで、カウンターデータを収集します。パフォーマンスカウンターの種類については、D3D11_COUNTER を参照してください。
レンダリング述語を設定します。(ID3D11DeviceContext.SetPredication)
| pPredicate | ID3D11Predicate* | inoptional | レンダリング述語を表す ID3D11Predicate インターフェイスへのポインター。NULL は述語なしを意味します。この場合 PredicateValue の値は無関係ですが、ID3D11DeviceContext::GetPredication のために保持されます。 |
| PredicateValue | BOOL | in | TRUE の場合、述語の条件が満たされたときにレンダリングが影響を受けます。FALSE の場合、条件が満たされないときにレンダリングが影響を受けます。 |
解説(Remarks)
述語を述語付き処理に使用するには、述語が「issued」または「signaled」の状態でなければなりません。述語が述語付き処理用に設定されている間は、ID3D11DeviceContext::Begin および ID3D11DeviceContext::End の呼び出しは無効です。
このメソッドを使用すると、述語の結果データが PredicateValue と等しい場合に、以降のレンダリングおよびリソース操作コマンドを実際には実行しないよう指定できます。ただし、一部の述語はヒントにすぎないため、実際には処理の実行を妨げないことがあります。
述語付き処理の主な利点は、ID3D11DeviceContext::GetData の戻りをスピン待ちするというパフォーマンス上の代償を払うことなく、アプリケーションがレンダリングおよびリソース操作コマンドを発行できる点にあります。したがって、ID3D11DeviceContext::GetData が S_FALSE を返している間も述語付き処理は行えます。別の見方をすれば、ID3D11DeviceContext::GetData が S_FALSE を返す可能性がある場合のフォールバックとしてアプリケーションが述語付き処理を利用できるということです。ID3D11DeviceContext::GetData が S_OK を返す場合、アプリケーションは独自のロジックにより、レンダリングおよびリソース操作コマンドの呼び出しを手動でスキップできます。
Direct3D 11 のレンダリングおよびリソース操作コマンドには、次の Draw、Dispatch、Copy、Update、Clear、Generate、Resolve の各操作が含まれます。
- Draw
- DrawAuto
- DrawIndexed
- DrawIndexedInstanced
- DrawIndexedInstancedIndirect
- DrawInstanced
- DrawInstancedIndirect
- Dispatch
- DispatchIndirect
- CopyResource
- CopyStructureCount
- CopySubresourceRegion
- CopySubresourceRegion1
- CopyTiles
- CopyTileMappings
- UpdateSubresource
- UpdateSubresource1
- UpdateTiles
- UpdateTileMappings
- ClearRenderTargetView
- ClearUnorderedAccessViewFloat
- ClearUnorderedAccessViewUint
- ClearView
- ClearDepthStencilView
- GenerateMips
- ResolveSubresource
シェーダーリソースの配列をジオメトリシェーダーステージにバインドします。(ID3D11DeviceContext.GSSetShaderResources)
| StartSlot | DWORD | in | シェーダーリソースの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1)。 |
| NumViews | DWORD | in | 設定するシェーダーリソースの数。シェーダーリソース用には最大 128 スロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppShaderResourceViews | ID3D11ShaderResourceView** | inoptional | デバイスに設定するシェーダーリソースビューインターフェイスの配列。 |
解説(Remarks)
重複するリソースビューがレンダーターゲットなどの出力スロットに既にバインドされている場合、このメソッドは対象のシェーダーリソーススロットを NULL で埋めます。
シェーダーリソースビューの作成については、ID3D11Device::CreateShaderResourceView を参照してください。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
サンプラーステートの配列をジオメトリシェーダーパイプラインステージに設定します。(ID3D11DeviceContext.GSSetSamplers)
| StartSlot | DWORD | in | サンプラーの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1)。 |
| NumSamplers | DWORD | in | 配列内のサンプラーの数。各パイプラインステージには合計 16 個のサンプラースロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot)。 |
| ppSamplers | ID3D11SamplerState** | inoptional | サンプラーステートインターフェイスの配列へのポインター (ID3D11SamplerState を参照)。「解説」を参照してください。 |
解説(Remarks)
いずれのサンプラーにも NULL を設定できます。その場合は既定のステートが適用され、内容は次のとおりです。
//Default sampler state:
D3D11_SAMPLER_DESC SamplerDesc;
SamplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
SamplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.MipLODBias = 0;
SamplerDesc.MaxAnisotropy = 1;
SamplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER;
SamplerDesc.BorderColor[0] = 1.0f;
SamplerDesc.BorderColor[1] = 1.0f;
SamplerDesc.BorderColor[2] = 1.0f;
SamplerDesc.BorderColor[3] = 1.0f;
SamplerDesc.MinLOD = -FLT_MAX;
SamplerDesc.MaxLOD = FLT_MAX;
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
1 つ以上のレンダーターゲットと深度ステンシルバッファーを、出力マージャーステージにアトミックにバインドします。
| NumViews | DWORD | in | バインドするレンダーターゲットの数 (範囲は 0 から D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT)。このパラメーターが 0 以外の場合、ppRenderTargetViews が指す配列の要素数はこのパラメーターの値と一致している必要があります。 |
| ppRenderTargetViews | ID3D11RenderTargetView** | inoptional | デバイスにバインドするレンダーターゲットを表す ID3D11RenderTargetView の配列へのポインター。 このパラメーターが NULL で NumViews が 0 の場合、レンダーターゲットはバインドされません。 |
| pDepthStencilView | ID3D11DepthStencilView* | inoptional | デバイスにバインドする深度ステンシルビューを表す ID3D11DepthStencilView へのポインター。 このパラメーターが NULL の場合、深度ステンシルビューはバインドされません。 |
解説(Remarks)
デバイスが同時にアクティブにできるレンダーターゲットの最大数は、D3D11.h 内の D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT という #define で定義されています。同じサブリソースを複数のレンダーターゲットスロットに設定することはできません。 この呼び出しで指定されなかったレンダーターゲットは NULL に設定されます。
いずれかのサブリソースが、別のステージで読み取り用に、あるいは (パイプラインの別の箇所で) 書き込み用に現在バインドされている場合、 1 回のレンダリング操作で同一のサブリソースが同時に読み書きされるのを防ぐため、それらのバインドポイントは NULL に設定されます。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
レンダーターゲットビューが配列リソース型から作成されている場合、すべてのレンダーターゲットビューの配列サイズが同一である必要があります。 この制約は深度ステンシルビューにも適用され、その配列サイズはバインドされるレンダーターゲットビューの配列サイズと一致していなければなりません。
ピクセルシェーダーは、少なくとも 8 個の独立したレンダーターゲットへ同時にレンダリングできる必要があります。これらのレンダーターゲットはすべて同じ種類のリソースにアクセスしなければなりません。すなわち、Buffer、Texture1D、Texture1DArray、Texture2D、Texture2DArray、Texture3D、TextureCube のいずれかです。すべてのレンダーターゲットは、すべての次元 (幅と高さ、および 3D の場合は深度、*Array 型の場合は配列サイズ) で同じサイズでなければなりません。レンダーターゲットでマルチサンプルアンチエイリアシングを使用する場合、バインドされるすべてのレンダーターゲットと深度バッファーは同じ形式のマルチサンプルリソース (すなわちサンプル数が同一) でなければなりません。各レンダーターゲットは異なるデータ形式を持つことができます。これらのレンダーターゲット形式は、要素あたりのビット数が同一である必要はありません。
レンダーターゲット用の 8 個のスロットは、任意の組み合わせでレンダーターゲットを設定したり、しなかったりできます。
同一のリソースビューを複数のレンダーターゲットスロットに同時にバインドすることはできません。ただし、1 つのリソースの重複しない複数のリソースビューを、同時に複数のレンダーターゲットとして設定することは可能です。
Direct3D の他の一部のリソース関連メソッドとは異なり、OMSetRenderTargets(0, nullptr, nullptr); を呼び出すと、現在バインドされているすべてのレンダーターゲットのバインドが解除される点に注意してください。
リソースを出力マージャーステージにバインドします。
| NumRTVs | DWORD | in | バインドするレンダーターゲットの数 (範囲は 0 から D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT)。このパラメーターが 0 以外の場合、ppRenderTargetViews が指す配列の要素数はこのパラメーターの値と一致している必要があります。NumRTVs に D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL (0xffffffff) を設定した場合、このメソッドは現在バインドされているレンダーターゲットビュー (RTV) も深度ステンシルビュー (DSV) も変更しません。 |
| ppRenderTargetViews | ID3D11RenderTargetView** | inoptional | デバイスにバインドするレンダーターゲットを表す ID3D11RenderTargetView の配列へのポインター。 このパラメーターが NULL で NumRTVs が 0 の場合、レンダーターゲットはバインドされません。 |
| pDepthStencilView | ID3D11DepthStencilView* | inoptional | デバイスにバインドする深度ステンシルビューを表す ID3D11DepthStencilView へのポインター。 このパラメーターが NULL の場合、深度ステンシルビューはバインドされません。 |
| UAVStartSlot | DWORD | in | アンオーダードアクセスビューの設定を開始する、0 から始まる配列へのインデックス (範囲は 0 から D3D11_PS_CS_UAV_REGISTER_COUNT - 1)。 Windows 8 以降で利用できる Direct3D 11.1 ランタイムでは、この値は 0 から D3D11_1_UAV_SLOT_COUNT - 1 の範囲を取れます。D3D11_1_UAV_SLOT_COUNT は 64 と定義されています。 ピクセルシェーダーの場合、UAVStartSlot はバインドされるレンダーターゲットビューの数と等しくする必要があります。 |
| NumUAVs | DWORD | in | ppUnorderedAccessViews 内のアンオーダードアクセスビュー (UAV) の数。NumUAVs に D3D11_KEEP_UNORDERED_ACCESS_VIEWS (0xffffffff) を設定した場合、このメソッドは現在バインドされているアンオーダードアクセスビューを変更しません。 Windows 8 以降で利用できる Direct3D 11.1 ランタイムでは、この値は 0 から D3D11_1_UAV_SLOT_COUNT - UAVStartSlot の範囲を取れます。 |
| ppUnorderedAccessViews | ID3D11UnorderedAccessView** | inoptional | デバイスにバインドするアンオーダードアクセスビューを表す ID3D11UnorderedAccessView の配列へのポインター。 このパラメーターが NULL で NumUAVs が 0 の場合、アンオーダードアクセスビューはバインドされません。 |
| pUAVInitialCounts | DWORD* | inoptional | append/consume バッファーのオフセットの配列。値 -1 は現在のオフセットを維持することを示します。それ以外の値は、その append/consume 可能な UAV の隠しカウンターを設定します。pUAVInitialCounts は、UAV 作成時に D3D11_BUFFER_UAV_FLAG_APPEND または D3D11_BUFFER_UAV_FLAG_COUNTER を指定して作成された UAV に対してのみ意味を持ちます。 それ以外の場合、この引数は無視されます。 |
解説(Remarks)
ピクセルシェーダーでは、レンダーターゲットとアンオーダードアクセスビューは出力時に同じリソーススロットを共有します。そのため、UAV にはオフセットを与え、 バインドされるレンダーターゲットビューの後ろのスロットに配置する必要があります。
2 つの UAV は、サブリソースを共有する (したがって同じリソースを共有する) 場合に競合します。
RTV と UAV は、サブリソースを共有するか、バインドポイントを共有する場合に競合します。
OMSetRenderTargetsAndUnorderedAccessViews は、次の状況で正しく動作します。
-
NumRTVs != D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL かつ NumUAVs != D3D11_KEEP_UNORDERED_ACCESS_VIEWS の場合
OMSetRenderTargetsAndUnorderedAccessViews が成功し、ランタイムがバインド情報をドライバーに渡すには、次の条件が満たされている必要があります。
- NumRTVs <= 8
- UAVStartSlot >= NumRTVs
- UAVStartSlot + NumUAVs <= 8
- ppRenderTargetViews と ppUnorderedAccessViews の全体の集合に競合がないこと。
- ppDepthStencilView がレンダーターゲットビューと一致すること。リソースビューの詳細については、Direct3D 11 のリソース概要を参照してください。
- 現在バインドされている競合するリソース (ストリーム出力ターゲットリソース (SOTargets)、コンピュートシェーダー (CS) UAV、シェーダーリソースビュー (SRV)) をすべてアンバインドします。
- ppRenderTargetViews、ppDepthStencilView、ppUnorderedAccessViews をバインドします。
-
NumRTVs == D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL の場合
この状況では、OMSetRenderTargetsAndUnorderedAccessViews は UAV のみをバインドします。
OMSetRenderTargetsAndUnorderedAccessViews が成功し、ランタイムがバインド情報をドライバーに渡すには、次の条件が満たされている必要があります。
- UAVStartSlot + NumUAVs <= 8
- ppUnorderedAccessViews 内に競合がないこと。
- スロット番号が UAVStartSlot 以上のすべての RTV
- ppUnorderedAccessViews 内のいずれかの UAV と競合するすべての RTV
- ppUnorderedAccessViews と競合する、現在バインドされているすべてのリソース (SOTargets、CS UAV、SRV)
OMSetRenderTargetsAndUnorderedAccessViews は ppDepthStencilView を無視し、現在の深度ステンシルビューはバインドされたままになります。
-
NumUAVs == D3D11_KEEP_UNORDERED_ACCESS_VIEWS の場合
この状況では、OMSetRenderTargetsAndUnorderedAccessViews は RTV と DSV のみをバインドします。
OMSetRenderTargetsAndUnorderedAccessViews が成功し、ランタイムがバインド情報をドライバーに渡すには、次の条件が満たされている必要があります。
- NumRTVs <= 8
- ppRenderTargetViews 内に競合がないこと。
- ppDepthStencilView がレンダーターゲットビューと一致すること。リソースビューの詳細については、Direct3D 11 のリソース概要を参照してください。
- スロット番号が NumRTVs 未満のすべての UAV
- ppRenderTargetViews 内のいずれかの RTV と競合するすべての UAV
- ppRenderTargetViews と競合する、現在バインドされているすべてのリソース (SOTargets、CS UAV、SRV)
OMSetRenderTargetsAndUnorderedAccessViews は UAVStartSlot を無視します。
出力マージャーステージのブレンドステートを設定します。(ID3D11DeviceContext.OMSetBlendState)
| pBlendState | ID3D11BlendState* | inoptional | ブレンドステートインターフェイスへのポインター (ID3D11BlendState を参照)。既定のブレンドステートを使用するには NULL を渡します。既定のブレンドステートの詳細については「解説」を参照してください。 |
| BlendFactor | FLOAT* | inoptional | RGBA の各コンポーネントに 1 つずつ対応するブレンド係数の配列。ブレンド係数は、ピクセルシェーダー、レンダーターゲット、またはその両方の値を変調します。ブレンドステートオブジェクトを D3D11_BLEND_BLEND_FACTOR または D3D11_BLEND_INV_BLEND_FACTOR を指定して作成した場合、ブレンドステージは NULL でないブレンド係数の配列を使用します。D3D11_BLEND_BLEND_FACTOR または D3D11_BLEND_INV_BLEND_FACTOR を指定せずにブレンドステートオブジェクトを作成した場合、ブレンドステージは NULL でないブレンド係数の配列を使用しません。この場合ランタイムはブレンド係数を保存し、後で ID3D11DeviceContext::OMGetBlendState を呼び出して取得できます。NULL を渡した場合、ランタイムは { 1, 1, 1, 1 } のブレンド係数を使用または保存します。 |
| SampleMask | DWORD | in | 32 ビットのサンプルカバレッジ。既定値は 0xffffffff です。「解説」を参照してください。 |
解説(Remarks)
ブレンドステートは、2 つの RGB ピクセル値と 2 つのアルファ値をどのようにブレンドするかを決定するために出力マージャーステージで使用されます。この 2 つの RGB ピクセル値とアルファ値とは、ピクセルシェーダーが出力する RGB ピクセル値・アルファ値と、出力先のレンダーターゲットに既に存在する RGB ピクセル値・アルファ値です。ブレンドオプションは、ブレンドステージがピクセルシェーダー、レンダーターゲット、またはその両方の値を変調する際に使用するデータソースを制御します。ブレンド演算は、ブレンドステージがこれらの変調された値を数学的にどのように組み合わせるかを制御します。
ブレンドステートインターフェイスを作成するには、ID3D11Device::CreateBlendState を呼び出します。
ブレンドステートインターフェイスに NULL を渡すと、ランタイムは既定のブレンドステートを設定します。既定のブレンドパラメーターを次の表に示します。
| ステート | 既定値 |
|---|---|
| AlphaToCoverageEnable | FALSE |
| IndependentBlendEnable | FALSE |
| RenderTarget[0].BlendEnable | FALSE |
| RenderTarget[0].SrcBlend | D3D11_BLEND_ONE |
| RenderTarget[0].DestBlend | D3D11_BLEND_ZERO |
| RenderTarget[0].BlendOp | D3D11_BLEND_OP_ADD |
| RenderTarget[0].SrcBlendAlpha | D3D11_BLEND_ONE |
| RenderTarget[0].DestBlendAlpha | D3D11_BLEND_ZERO |
| RenderTarget[0].BlendOpAlpha | D3D11_BLEND_OP_ADD |
| RenderTarget[0].RenderTargetWriteMask | D3D11_COLOR_WRITE_ENABLE_ALL |
サンプルマスクは、アクティブなすべてのレンダーターゲットにおいて、どのサンプルが更新されるかを決定します。サンプルマスクのビットとマルチサンプルレンダーターゲットのサンプルとの対応付けは、個々のアプリケーションの責任です。サンプルマスクは常に適用されます。マルチサンプリングが有効かどうかとは無関係であり、アプリケーションがマルチサンプルレンダーターゲットを使用しているかどうかにも依存しません。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
出力マージャーステージの深度ステンシルステートを設定します。(ID3D11DeviceContext.OMSetDepthStencilState)
| pDepthStencilState | ID3D11DepthStencilState* | inoptional | デバイスにバインドする深度ステンシルステートインターフェイスへのポインター (ID3D11DepthStencilState を参照)。D3D11_DEPTH_STENCIL_DESC に記載された既定のステートを使用するには NULL を設定します。 |
| StencilRef | DWORD | in | 深度ステンシルテストを行う際に比較対象とする参照値。「解説」を参照してください。 |
解説(Remarks)
深度ステンシルステートインターフェイスを作成するには、ID3D11Device::CreateDepthStencilState を呼び出します。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
パイプラインのストリーム出力ステージの出力先バッファーを設定します。
| NumBuffers | DWORD | in | デバイスにバインドするバッファーの数。出力バッファーは最大 4 つ設定できます。呼び出しで 4 つ未満しか指定しなかった場合、残りのバッファースロットは NULL に設定されます。「解説」を参照してください。 |
| ppSOTargets | ID3D11Buffer** | inoptional | デバイスにバインドする出力バッファーの配列 (ID3D11Buffer を参照)。これらのバッファーは D3D11_BIND_STREAM_OUTPUT フラグを指定して作成されている必要があります。 |
| pOffsets | DWORD* | inoptional | ppSOTargets の各出力バッファーに対するオフセットの配列 (バッファーごとに 1 つ)。オフセット値はバイト単位で指定します。 |
解説(Remarks)
オフセットに -1 を指定すると、ストリーム出力バッファーは追記モードとなり、前回のストリーム出力パスでバッファーに最後に書き込まれた位置の続きから書き込まれます。
現在書き込み用にバインドされているバッファーを使用してこのメソッドを呼び出すと、バッファーは入力と出力に同時にバインドできないため、実際には NULL がバインドされます。
リソースが入力と出力に同時にバインドされるのを防いだ場合、デバッグレイヤーは警告を生成しますが、無効なデータがランタイムで使用されるのを防ぐわけではありません。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
Direct3D の他の一部のリソース関連メソッドとは異なり、SOSetTargets(0, nullptr, nullptr); を呼び出すと、現在バインドされているすべてのターゲットのバインドが解除される点に注意してください。
Windows Phone 8: この API はサポートされています。
サイズが不明なジオメトリを描画します。
解説(Remarks)
描画 API は、レンダリングパイプラインに処理を送信します。この API は、入力アセンブラー、頂点シェーダー、ストリーム出力の各ステージで処理された、サイズが不明な処理を送信します。この処理は、ジオメトリシェーダーステージを経由している場合もあれば、していない場合もあります。
データがストリーム出力ステージのバッファーへ書き出された後、それらのバッファーを再び入力アセンブラーステージの入力スロット 0 にバインドでき、DrawAuto は、バッファーに書き込まれたデータ量をアプリケーションが知らなくてもそれらを描画します。SO ステージのバッファーに書き込まれたデータ量は、データが書き出される際に内部で計測・保持されます。つまり、書き出されたデータを入力データとして再バインドする前に、CPU が計測値を取得する必要はありません。この量は内部で追跡されますが、バッファーが再び入力アセンブラーにバインドされたときにレイアウトが利用できるよう、SO ステージのバッファー内データの形式を入力レイアウトで記述するのは、依然としてアプリケーションの責任です。
次の図は DrawAuto の処理の流れを示しています。
DrawAuto を呼び出しても、入力として再バインドされたストリーム出力バッファーの状態は変化しません。
DrawAuto が機能するのは、入力バッファーが 1 つだけスロット 0 で IA ステージの入力としてバインドされて描画される場合のみです。アプリケーションは、SO バッファーリソースを D3D11_BIND_VERTEX_BUFFER と D3D11_BIND_STREAM_OUTPUT の両方のバインドフラグを指定して作成する必要があります。
この API は、インデックス付き描画やインスタンシングをサポートしません。
アプリケーションがストリーム出力バッファーのサイズを取得する必要がある場合は、D3D11_QUERY_SO_STATISTICS を使用してストリーム出力の統計情報をクエリできます。
インデックス付き・インスタンス化された、GPU 生成のプリミティブを描画します。
| pBufferForArgs | ID3D11Buffer* | in | ID3D11Buffer へのポインター。GPU 生成のプリミティブを含むバッファーです。 |
| AlignedByteOffsetForArgs | DWORD | in | pBufferForArgs 内の、GPU 生成プリミティブの開始位置までの DWORD 境界に整列したバイトオフセット。 |
解説(Remarks)
pBufferForArgs が指す ID3D11Buffer インターフェイスに関連付けられるバッファーを作成する際、アプリケーションはそのバッファーを記述する D3D11_BUFFER_DESC 構造体の MiscFlags メンバーに D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS フラグを設定する必要があります。バッファーを作成するには、ID3D11Device::CreateBuffer メソッドを呼び出し、pDesc パラメーターに D3D11_BUFFER_DESC へのポインターを渡します。
Windows Phone 8: この API はサポートされています。
インスタンス化された、GPU 生成のプリミティブを描画します。
| pBufferForArgs | ID3D11Buffer* | in | ID3D11Buffer へのポインター。GPU 生成のプリミティブを含むバッファーです。 |
| AlignedByteOffsetForArgs | DWORD | in | pBufferForArgs 内の、GPU 生成プリミティブの開始位置までのオフセット。 |
解説(Remarks)
pBufferForArgs が指す ID3D11Buffer インターフェイスに関連付けられるバッファーを作成する際、アプリケーションはそのバッファーを記述する D3D11_BUFFER_DESC 構造体の MiscFlags メンバーに D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS フラグを設定する必要があります。バッファーを作成するには、アプリケーションは ID3D11Device::CreateBuffer メソッドを呼び出し、その呼び出しの pDesc パラメーターに D3D11_BUFFER_DESC へのポインターを渡します。
スレッドグループからコマンドリストを実行します。
| ThreadGroupCountX | DWORD | in | x 方向にディスパッチされるグループの数。ThreadGroupCountX は D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535) 以下でなければなりません。 |
| ThreadGroupCountY | DWORD | in | y 方向にディスパッチされるグループの数。ThreadGroupCountY は D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535) 以下でなければなりません。 |
| ThreadGroupCountZ | DWORD | in | z 方向にディスパッチされるグループの数。ThreadGroupCountZ は D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535) 以下でなければなりません。 機能レベル 10 では、ThreadGroupCountZ の値は 1 でなければなりません。 |
解説(Remarks)
コンピュートシェーダー内のコマンドを実行するには Dispatch メソッドを呼び出します。コンピュートシェーダーは、スレッドグループ内の多数のスレッドで並列に実行できます。スレッドグループ内の特定のスレッドは、(x,y,z) で与えられる 3D ベクトルでインデックス指定します。
次の図では、グループのサイズが (5,5,2) で与えられる 50 スレッドのスレッドグループを想定しています。50 個のスレッドを含むスレッドグループから、ベクトル (4,1,1) を用いて単一のスレッドが特定されます。
次の図は、ID3D11DeviceContext::Dispatch に渡されるパラメーター Dispatch(5,3,2) と、numthreads 属性で指定された値 numthreads(10,8,3)、およびスレッド関連のシステム値 (SV_GroupIndex、SV_DispatchThreadID、SV_GroupThreadID、SV_GroupID) としてコンピュートシェーダーに渡される値との関係を示しています。

1 つ以上のスレッドグループでコマンドリストを実行します。
| pBufferForArgs | ID3D11Buffer* | in | ID3D11Buffer へのポインター。ID3D11DeviceContext::Dispatch の引数リストに対応するデータが格納されている必要があります。 |
| AlignedByteOffsetForArgs | DWORD | in | バッファーの先頭から引数までの、バイト境界に整列したオフセット。 |
解説(Remarks)
コンピュートシェーダー内のコマンドを実行するには DispatchIndirect メソッドを呼び出します。
pBufferForArgs が指す ID3D11Buffer インターフェイスに関連付けられるバッファーを作成する際、アプリケーションはそのバッファーを記述する D3D11_BUFFER_DESC 構造体の MiscFlags メンバーに D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS フラグを設定する必要があります。バッファーを作成するには、アプリケーションは ID3D11Device::CreateBuffer メソッドを呼び出し、その呼び出しの pDesc パラメーターに D3D11_BUFFER_DESC へのポインターを渡します。
パイプラインのラスタライザーステージにラスタライザーステートを設定します。(ID3D11DeviceContext.RSSetState)
| pRasterizerState | ID3D11RasterizerState* | inoptional | パイプラインにバインドするラスタライザーステートインターフェイスへのポインター (ID3D11RasterizerState を参照)。 |
解説(Remarks)
ラスタライザーステートインターフェイスを作成するには、ID3D11Device::CreateRasterizerState を呼び出します。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
ビューポートの配列をパイプラインのラスタライザーステージにバインドします。(ID3D11DeviceContext.RSSetViewports)
| NumViewports | DWORD | in | バインドするビューポートの数。 |
| pViewports | D3D11_VIEWPORT* | inoptional | デバイスにバインドする D3D11_VIEWPORT 構造体の配列。ビューポートのサイズがデバイスの機能レベルに依存すること (Direct3D 10 と Direct3D 11 で変更されている点) の詳細については、構造体のページを参照してください。 |
解説(Remarks)
すべてのビューポートは 1 回の操作でアトミックに設定する必要があります。呼び出しで指定されなかったビューポートは無効になります。
どのビューポートを使用するかは、ジオメトリシェーダーが出力する SV_ViewportArrayIndex セマンティクスによって決まります。ジオメトリシェーダーがこのセマンティクスを指定しない場合、Direct3D は配列の最初のビューポートを使用します。
シザー矩形の配列をラスタライザーステージにバインドします。(ID3D11DeviceContext.RSSetScissorRects)
| NumRects | DWORD | in | バインドするシザー矩形の数。 |
| pRects | RECT* | inoptional | シザー矩形の配列 (D3D11_RECT を参照)。 |
解説(Remarks)
すべてのシザー矩形は 1 回の操作でアトミックに設定する必要があります。呼び出しで指定されなかったシザー矩形は無効になります。
シザー矩形が使用されるのは、ラスタライザーステートで ScissorEnable が true に設定されている場合のみです (D3D11_RASTERIZER_DESC を参照)。
どのシザー矩形を使用するかは、ジオメトリシェーダーが出力する SV_ViewportArrayIndex セマンティクスによって決まります (シェーダーセマンティクスの構文を参照)。ジオメトリシェーダーが SV_ViewportArrayIndex セマンティクスを使用しない場合、Direct3D は配列の最初のシザー矩形を使用します。
配列内の各シザー矩形は、ビューポート配列内のビューポートに対応します (ID3D11DeviceContext::RSSetViewports を参照)。
Windows Phone 8: この API はサポートされています。
コピー元リソースの領域をコピー先リソースにコピーします。(ID3D11DeviceContext.CopySubresourceRegion)
| pDstResource | ID3D11Resource* | in | コピー先リソースへのポインター (ID3D11Resource を参照)。 |
| DstSubresource | DWORD | in | コピー先のサブリソースインデックス。 |
| DstX | DWORD | in | コピー先領域の左上隅の x 座標。 |
| DstY | DWORD | in | コピー先領域の左上隅の y 座標。1D サブリソースの場合は 0 でなければなりません。 |
| DstZ | DWORD | in | コピー先領域の左上隅の z 座標。1D または 2D サブリソースの場合は 0 でなければなりません。 |
| pSrcResource | ID3D11Resource* | in | コピー元リソースへのポインター (ID3D11Resource を参照)。 |
| SrcSubresource | DWORD | in | コピー元のサブリソースインデックス。 |
| pSrcBox | D3D11_BOX* | inoptional | コピー可能なコピー元サブリソースの範囲を定義する 3D ボックスへのポインター (D3D11_BOX を参照)。NULL の場合、コピー元サブリソース全体がコピーされます。ボックスはコピー元リソースの範囲内に収まっている必要があります。 空のボックスを指定した場合は何も行われません。top の値が bottom の値以上、left の値が right の値以上、または front の値が back の値以上の場合、そのボックスは空です。ボックスが空の場合、CopySubresourceRegion はコピー操作を実行しません。 |
解説(Remarks)
コピー元ボックスは、コピー元リソースのサイズの範囲内でなければなりません。コピー先のオフセット (x、y、z) により、コピー先リソースへ書き込む際にコピー元ボックスをずらして配置できます。ただし、コピー元ボックスの寸法とオフセットは、リソースのサイズの範囲内でなければなりません。コピー先リソースの外側へコピーしようとしたり、コピー元リソースより大きなコピー元ボックスを指定したりした場合、CopySubresourceRegion の動作は未定義です。デバッグレイヤーをサポートするデバイスを作成している場合、この無効な CopySubresourceRegion の呼び出しに対してデバッグ出力がエラーを報告します。CopySubresourceRegion に無効なパラメーターを渡すと未定義の動作となり、不正なレンダリング、クリッピング、コピーの不実行、さらにはレンダリングデバイスの削除を招く場合があります。
リソースがバッファーの場合、すべての座標はバイト単位です。リソースがテクスチャの場合、すべての座標はテクセル単位です。D3D11CalcSubresource は、サブリソースインデックスを計算するためのヘルパー関数です。
CopySubresourceRegion は GPU 上でコピーを実行します (CPU による memcpy に相当します)。その結果、コピー元とコピー先のリソースには次の制約があります。
- 異なるサブリソースでなければなりません (ただし同一リソース内のサブリソースであっても構いません)。
- 同じ型でなければなりません。
- 互換性のある DXGI 形式でなければなりません (同一であるか、同じ型グループに属すること)。たとえば、DXGI_FORMAT_R32G32B32_FLOAT のテクスチャは DXGI_FORMAT_R32G32B32_UINT のテクスチャへコピーできます。どちらの形式も DXGI_FORMAT_R32G32B32_TYPELESS グループに属するためです。CopySubresourceRegion は一部の形式型の間でコピーできます。詳細については、Direct3D 10.1 を使用した形式変換を参照してください。
- 現在マップされていてはなりません。
CopySubresourceRegion はコピーのみをサポートし、拡大縮小、カラーキー、ブレンドはサポートしません。CopySubresourceRegion は、一部の形式型の間でリソースデータを再解釈できます。詳細については、Direct3D 10.1 を使用した形式変換を参照してください。
リソース全体をコピーする必要がある場合は、代わりに ID3D11DeviceContext::CopyResource を使用することをお勧めします。
CopySubresourceRegion は非同期呼び出しであり、コマンドバッファーのキューに追加される場合があります。これにより、データのコピー時に発生しうるパイプラインストールの回避を図ります。パイプラインストールの詳細については、パフォーマンス上の考慮事項を参照してください。
例
次のコードスニペットは、コピー元テクスチャ内のボックス ((120,100),(200,220) の位置) を、コピー先テクスチャの領域 (10,20),(90,140) へコピーします。D3D11_BOX sourceRegion;
sourceRegion.left = 120;
sourceRegion.right = 200;
sourceRegion.top = 100;
sourceRegion.bottom = 220;
sourceRegion.front = 0;
sourceRegion.back = 1;
pd3dDeviceContext->CopySubresourceRegion( pDestTexture, 0, 10, 20, 0, pSourceTexture, 0, &sourceRegion );
2D テクスチャの場合、front と back はそれぞれ 0 と 1 に設定される点に注意してください。
GPU を使用して、コピー元リソースの内容全体をコピー先リソースにコピーします。(ID3D11DeviceContext.CopyResource)
| pDstResource | ID3D11Resource* | in | コピー先リソースを表す ID3D11Resource インターフェイスへのポインター。 |
| pSrcResource | ID3D11Resource* | in | コピー元リソースを表す ID3D11Resource インターフェイスへのポインター。 |
解説(Remarks)
このメソッドは、GPU にコピー操作を実行させる (CPU による memcpy に相当する) という点で特殊です。そのため、パフォーマンス向上を目的としたいくつかの制約があります。たとえば、コピー元とコピー先のリソースには次の制約があります。
- 異なるリソースでなければなりません。
- 同じ型でなければなりません。
- 寸法が同一でなければなりません (幅、高さ、深度、および該当する場合はサイズを含む)。
- 互換性のある DXGI 形式でなければなりません。つまり、形式が同一であるか、少なくとも同じ型グループに属している必要があります。たとえば、DXGI_FORMAT_R32G32B32_FLOAT のテクスチャは DXGI_FORMAT_R32G32B32_UINT のテクスチャへコピーできます。どちらの形式も DXGI_FORMAT_R32G32B32_TYPELESS グループに属するためです。CopyResource は一部の形式型の間でコピーできます。詳細については、Direct3D 10.1 を使用した形式変換を参照してください。
- 現在マップされていてはなりません。
Immutable リソースをコピー先として使用することはできません。機能レベルが D3D_FEATURE_LEVEL_10_1 以上であれば、深度ステンシルリソースをコピー元・コピー先のいずれとしても使用できます。機能レベル 9_x では、D3D11_BIND_DEPTH_STENCIL フラグを指定して作成されたリソースは CopyResource のコピー元としてのみ使用できます。マルチサンプリング機能を有効にして作成されたリソース (DXGI_SAMPLE_DESC を参照) は、コピー元とコピー先の両方でマルチサンプルのカウントと品質が同一である場合にのみ、コピー元・コピー先として使用できます。コピー元とコピー先でマルチサンプルのカウントや品質が異なる場合、または一方のみがマルチサンプルの場合、ID3D11DeviceContext::CopyResource の呼び出しは失敗します。マルチサンプルリソースを非マルチサンプルのリソースへ解決するには、ID3D11DeviceContext::ResolveSubresource を使用してください。
このメソッドは非同期呼び出しであり、コマンドバッファーのキューに追加される場合があります。これにより、データのコピー時に発生しうるパイプラインストールの回避を図ります。詳細については、パフォーマンス上の考慮事項を参照してください。
リソース内のデータの一部のみをコピーする必要がある場合は、代わりに ID3D11DeviceContext::CopySubresourceRegion を使用することをお勧めします。
CPU がメモリから、マップ不可能なメモリ上に作成されたサブリソースへデータをコピーします。(ID3D11DeviceContext.UpdateSubresource)
| pDstResource | ID3D11Resource* | in | コピー先リソースへのポインター (ID3D11Resource を参照)。 |
| DstSubresource | DWORD | in | コピー先サブリソースを識別する、0 から始まるインデックス。詳細については D3D11CalcSubresource を参照してください。 |
| pDstBox | D3D11_BOX* | inoptional | リソースデータのコピー先となるコピー先サブリソースの範囲を定義するボックスへのポインター。座標は、バッファーの場合はバイト単位、テクスチャの場合はテクセル単位です。NULL の場合、データはオフセットなしでコピー先サブリソースへ書き込まれます。コピー元の寸法はコピー先に収まる必要があります (D3D11_BOX を参照)。 空のボックスを指定した場合は何も行われません。top の値が bottom の値以上、left の値が right の値以上、または front の値が back の値以上の場合、そのボックスは空です。ボックスが空の場合、UpdateSubresource は更新操作を実行しません。 |
| pSrcData | void* | in | メモリ上のコピー元データへのポインター。 |
| SrcRowPitch | DWORD | in | コピー元データの 1 行あたりのサイズ。 |
| SrcDepthPitch | DWORD | in | コピー元データの 1 深度スライスあたりのサイズ。 |
解説(Remarks)
シェーダー定数バッファーの場合は、pDstBox に NULL を設定します。このメソッドを使用してシェーダー定数バッファーを部分的に更新することはできません。
次の場合、リソースをコピー先として使用できません。
- リソースが immutable または dynamic の用途で作成されている場合。
- リソースが深度ステンシルリソースとして作成されている場合。
- リソースがマルチサンプリング機能を有効にして作成されている場合 (DXGI_SAMPLE_DESC を参照)。
UpdateSubresource のパフォーマンスは、コピー先リソースに対する競合の有無に依存します。たとえば、アプリケーションが Draw 呼び出しを実行し、その Draw 呼び出しが実際に GPU で実行される前に同じ頂点バッファーに対して UpdateSubresource を呼び出すと、頂点バッファーリソースに対する競合が発生します。
- リソースに競合がある場合、UpdateSubresource はコピー元データのコピーを 2 回行います。まず、CPU によってデータがコマンドバッファーからアクセス可能な一時記憶領域へコピーされます。このコピーはメソッドが戻る前に行われます。次に、GPU によって 2 回目のコピーが行われ、コピー元データがマップ不可能なメモリへコピーされます。この 2 回目のコピーは、コマンドバッファーがフラッシュされる際に GPU によって実行されるため、非同期に行われます。
- リソースの競合がない場合、UpdateSubresource の動作は、(CPU から見て) どちらが高速かに依存します。すなわち、データをコマンドバッファーへコピーし、コマンドバッファーのフラッシュ時に 2 回目のコピーを実行する方法と、CPU が最終的なリソースの位置へ直接データをコピーする方法のどちらかです。これは基盤となるシステムのアーキテクチャに依存します。
この図の各ブロックはデータの 1 要素を表しており、各要素のサイズはリソースの形式に依存します。たとえば、リソースの形式が DXGI_FORMAT_R32G32B32A32_FLOAT の場合、各要素のサイズは 128 ビット、すなわち 16 バイトになります。この 3D ボリュームテクスチャは、幅 2、高さ 3、深度 4 です。
特定のリソースに対するコピー元の行ピッチと深度ピッチを計算するには、次の式を使用します。
- コピー元の行ピッチ = [1 要素のサイズ (バイト)] * [1 行あたりの要素数]
- コピー元の深度ピッチ = [コピー元の行ピッチ] * [行数 (高さ)]
- コピー元の行ピッチ = 16 * 2 = 32
- コピー元の深度ピッチ = 16 * 2 * 3 = 96
たとえば、次のコードスニペットは 2D テクスチャ内でコピー先領域を指定する方法を示しています。コピー先テクスチャは 512x512 で、この操作は pData が指すデータをコピー先テクスチャの [(120,100)..(200,220)] へコピーするものとします。また、rowPitch は (前述のとおり) 適切な値で初期化済みであるとします。front と back はそれぞれ 0 と 1 に設定します。front と back を等しくすると、そのボックスは厳密には空になってしまうためです。
D3D11_BOX destRegion;
destRegion.left = 120;
destRegion.right = 200;
destRegion.top = 100;
destRegion.bottom = 220;
destRegion.front = 0;
destRegion.back = 1;
pd3dDeviceContext->UpdateSubresource( pDestTexture, 0, &destRegion, pData, rowPitch, 0 );
1D の場合も同様です。次のスニペットは 1D テクスチャ内でコピー先領域を指定する方法を示しています。テクスチャの長さが 512 である点を除き、前提は上記と同じです。
D3D11_BOX destRegion;
destRegion.left = 120;
destRegion.right = 200;
destRegion.top = 0;
destRegion.bottom = 1;
destRegion.front = 0;
destRegion.back = 1;
pd3dDeviceContext->UpdateSubresource( pDestTexture, 0, &destRegion, pData, rowPitch, 0 );
さまざまなリソース型と、各リソース型に対する UpdateSubresource の動作については、Direct3D 11 のリソース概要を参照してください。
遅延コンテキストでの UpdateSubresource の呼び出し
アプリケーションが遅延コンテキストで UpdateSubresource を呼び出す際、pDstBox が指すコピー先ボックスのオフセットが (0,0,0) 以外であり、かつドライバーがコマンドリストをサポートしていない場合、UpdateSubresource はそのコピー先ボックスのオフセットを不適切に pSrcData パラメーターへ適用してしまいます。この動作を回避するには、次のコードを使用します。
HRESULT UpdateSubresource_Workaround(
ID3D11Device *pDevice,
ID3D11DeviceContext *pDeviceContext,
ID3D11Resource *pDstResource,
UINT dstSubresource,
const D3D11_BOX *pDstBox,
const void *pSrcData,
UINT srcBytesPerElement,
UINT srcRowPitch,
UINT srcDepthPitch,
bool* pDidWorkAround )
{
HRESULT hr = S_OK;
bool needWorkaround = false;
D3D11_DEVICE_CONTEXT_TYPE contextType = pDeviceContext->GetType();
if( pDstBox && (D3D11_DEVICE_CONTEXT_DEFERRED == contextType) )
{
D3D11_FEATURE_DATA_THREADING threadingCaps = { FALSE, FALSE };
hr = pDevice->CheckFeatureSupport( D3D11_FEATURE_THREADING, &threadingCaps, sizeof(threadingCaps) );
if( SUCCEEDED(hr) )
{
if( !threadingCaps.DriverCommandLists )
{
needWorkaround = true;
}
}
}
const void* pAdjustedSrcData = pSrcData;
if( needWorkaround )
{
D3D11_BOX alignedBox = *pDstBox;
// convert from pixels to blocks
if( m_bBC )
{
alignedBox.left /= 4;
alignedBox.right /= 4;
alignedBox.top /= 4;
alignedBox.bottom /= 4;
}
pAdjustedSrcData = ((const BYTE*)pSrcData) - (alignedBox.front * srcDepthPitch) - (alignedBox.top * srcRowPitch) - (alignedBox.left * srcBytesPerElement);
}
pDeviceContext->UpdateSubresource( pDstResource, dstSubresource, pDstBox, pAdjustedSrcData, srcRowPitch, srcDepthPitch );
if( pDidWorkAround )
{
*pDidWorkAround = needWorkaround;
}
return hr;
}
可変長データを保持するバッファーからデータをコピーします。
| pDstBuffer | ID3D11Buffer* | in | ID3D11Buffer へのポインター。ID3D11DeviceContext::CopyResource や ID3D11DeviceContext::CopySubresourceRegion などの他のコピーコマンドが書き込めるバッファーリソースであれば何でも指定できます。 |
| DstAlignedByteOffset | DWORD | in | pSrcView から得られる 32 ビット UINT の構造体 (頂点) カウントを書き込む、pDstBuffer の先頭からのオフセット。 |
| pSrcView | ID3D11UnorderedAccessView* | in | 構造化バッファーリソースの ID3D11UnorderedAccessView へのポインター。この UAV は、作成時に D3D11_BUFFER_UAV_FLAG_APPEND または D3D11_BUFFER_UAV_FLAG_COUNTER を指定して作成されている必要があります。これらの種類のリソースは、いくつのレコードが書き込まれたかを追跡する隠しカウンターを持ちます。 |
レンダーターゲットのすべての要素を 1 つの値に設定します。(ID3D11DeviceContext.ClearRenderTargetView)
| pRenderTargetView | ID3D11RenderTargetView* | in | レンダーターゲットへのポインター。 |
| ColorRGBA | FLOAT* | in | レンダーターゲットを塗りつぶす色を表す 4 要素の配列。 |
解説(Remarks)
特定の整数値のビットパターンでレンダーターゲットをクリアしたいアプリケーションは、このメソッドを使用せず、画面に合わせた矩形 (スクリーンアラインドクアッド) を描画してください。これは、このメソッドが入力として浮動小数点値を受け取るため、元の整数と同じビットパターンにならない可能性があるためです。
|
Direct3D 9 と Direct3D 11/10 の違い:
Direct3D 9 とは異なり、常にリソースビューの全範囲がクリアされます。ビューポートやシザーの設定は適用されません。 |
D3D_FEATURE_LEVEL_9_x を使用する場合、ClearRenderTargetView はレンダーターゲットビューの最初の配列スライスのみをクリアします。これは (たとえば) キューブマップのレンダリングシナリオに影響します。アプリケーションは面または配列スライスごとにレンダーターゲットビューを作成し、各ビューを個別にクリアする必要があります。
アンオーダードアクセスリソースをビット単位で正確な値でクリアします。
| pUnorderedAccessView | ID3D11UnorderedAccessView* | in | クリアする ID3D11UnorderedAccessView。 |
| Values | DWORD* | in | 対応する各チャネルへコピーする値。「解説」を参照してください。 |
解説(Remarks)
この API は、配列の各要素 i の下位 ni ビットを対応するチャネルへコピーします。ここで ni は、リソース形式の i 番目のチャネルのビット数です (たとえば R8G8B8_FLOAT は最初の 3 チャネルが各 8 ビットです)。これは形式変換を伴わず、任意の UAV に対して機能します。 raw バッファービューまたは構造化バッファービューの場合は、配列の最初の要素の値のみが使用されます。
アンオーダードアクセスリソースを float 値でクリアします。
| pUnorderedAccessView | ID3D11UnorderedAccessView* | in | クリアする ID3D11UnorderedAccessView。 |
| Values | FLOAT* | in | 対応する各チャネルへコピーする値。「解説」を参照してください。 |
解説(Remarks)
この API は FLOAT、UNORM、SNORM のアンオーダードアクセスビュー (UAV) に対して機能し、必要に応じて FLOAT から *NORM への形式変換が行われます。それ以外の UAV では操作は無効となり、呼び出しはドライバーに到達しません。
深度ステンシルリソースをクリアします。(ID3D11DeviceContext.ClearDepthStencilView)
| pDepthStencilView | ID3D11DepthStencilView* | in | クリアする深度ステンシルへのポインター。 |
| ClearFlags | DWORD | in | クリアするデータの種類を指定します (D3D11_CLEAR_FLAG を参照)。 |
| Depth | FLOAT | in | 深度バッファーをこの値でクリアします。この値は 0 から 1 の範囲にクランプされます。 |
| Stencil | BYTE | in | ステンシルバッファーをこの値でクリアします。 |
解説(Remarks)
|
Direct3D 9 と Direct3D 11/10 の違い:
Direct3D 9 とは異なり、常にリソースビューの全範囲がクリアされます。ビューポートやシザーの設定は適用されません。 |
指定されたシェーダーリソースのミップマップを生成します。(ID3D11DeviceContext.GenerateMips)
| pShaderResourceView | ID3D11ShaderResourceView* | in | シェーダーリソースを表す ID3D11ShaderResourceView インターフェイスへのポインター。 |
解説(Remarks)
任意のシェーダーリソースビューに対して GenerateMips を呼び出すと、そのシェーダーリソースの下位のミップマップレベルを生成できます。GenerateMips は、ビューの最大のミップマップレベルを使用して再帰的に下位のミップレベルを生成し、ビューで指定された最小のレベルで停止します。ベースとなるリソースが D3D11_BIND_RENDER_TARGET、D3D11_BIND_SHADER_RESOURCE、D3D11_RESOURCE_MISC_GENERATE_MIPS を指定して作成されていない場合、GenerateMips の呼び出しは何の効果もありません。
機能レベル 9.1、9.2、9.3 では、3D (ボリューム) テクスチャのミップマップ自動生成はサポートされません。
機能レベル 9.1 以上をサポートするビデオアダプターでは、次のいずれかの形式を使用する場合にミップマップ生成がサポートされます。
DXGI_FORMAT_R8G8B8A8_UNORM
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
DXGI_FORMAT_B5G6R5_UNORM
DXGI_FORMAT_B8G8R8A8_UNORM
DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
DXGI_FORMAT_B8G8R8X8_UNORM
DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
機能レベル 9.2 以上をサポートするビデオアダプターでは、機能レベル 9.1 の形式に加え、次のいずれかの形式を使用する場合にミップマップ生成がサポートされます。
DXGI_FORMAT_R16G16B16A16_FLOAT
DXGI_FORMAT_R16G16B16A16_UNORM
DXGI_FORMAT_R16G16_FLOAT
DXGI_FORMAT_R16G16_UNORM
DXGI_FORMAT_R32_FLOAT
機能レベル 9.3 以上をサポートするビデオアダプターでは、機能レベル 9.1 および 9.2 の形式に加え、次のいずれかの形式を使用する場合にミップマップ生成がサポートされます。
DXGI_FORMAT_R32G32B32A32_FLOAT
DXGI_FORMAT_B4G4R4A4 (optional)
機能レベル 10 以上をサポートするビデオアダプターでは、機能レベル 9.1、9.2、9.3 の形式に加え、次のいずれかの形式を使用する場合にミップマップ生成がサポートされます。
DXGI_FORMAT_R32G32B32_FLOAT (optional)
DXGI_FORMAT_R16G16B16A16_SNORM
DXGI_FORMAT_R32G32_FLOAT
DXGI_FORMAT_R10G10B10A2_UNORM
DXGI_FORMAT_R11G11B10_FLOAT
DXGI_FORMAT_R8G8B8A8_SNORM
DXGI_FORMAT_R16G16_SNORM
DXGI_FORMAT_R8G8_UNORM
DXGI_FORMAT_R8G8_SNORM
DXGI_FORMAT_R16_FLOAT
DXGI_FORMAT_R16_UNORM
DXGI_FORMAT_R16_SNORM
DXGI_FORMAT_R8_UNORM
DXGI_FORMAT_R8_SNORM
DXGI_FORMAT_A8_UNORM
DXGI_FORMAT_B5G5R5A1_UNORM (optional)
サポートされていないその他のすべての形式では、GenerateMips は何も通知せずに失敗します。
リソースの最小詳細レベル (LOD) を設定します。
| pResource | ID3D11Resource* | in | リソースを表す ID3D11Resource へのポインター。 |
| MinLOD | FLOAT | in | 詳細レベル。0 からリソースのミップマップレベルの最大数までの範囲を取ります。たとえば、1D テクスチャのミップマップレベルの最大数は、D3D11_TEXTURE1D_DESC 構造体の MipLevels メンバーで指定されます。 |
解説(Remarks)
SetResourceMinLOD でリソースを使用するには、そのリソースの作成時に D3D11_RESOURCE_MISC_RESOURCE_CLAMP フラグを設定する必要があります。
Direct3D 10 および Direct3D 10.1 では、シェーダー内でテクスチャリソースからサンプリングする際、サンプラーが最小 LOD クランプを定義して、より詳細度の低いミップレベルからのサンプリングを強制できました。Direct3D 11 では、この機能がサンプラーからリソース全体へと拡張されています。そのため、アプリケーションはアクセス可能なリソースの最高解像度のミップレベルを指定できます。これにより、GPU メモリ上に常駐させる必要があるミップレベルの集合が制限され、メモリを節約できます。
リソースごとに GPU メモリ上に常駐させるミップレベルの集合は、ユーザーが指定できます。
最小 LOD は常駐するすべてのミップレベルに影響します。したがって、更新および読み取りができるのは常駐しているミップレベルのみです。
テクスチャリソースにアクセスするすべてのメソッドは、最小 LOD クランプに従う必要があります。
空集合へのアクセスは、範囲外のケースとして扱われます。
最小詳細レベル (LOD) を取得します。
| pResource | ID3D11Resource* | in | リソースを表す ID3D11Resource へのポインター。 |
戻り値
型: FLOAT
最小 LOD を返します。
マルチサンプルリソースを非マルチサンプルのリソースへコピーします。
| pDstResource | ID3D11Resource* | in | コピー先リソース。D3D11_USAGE_DEFAULT フラグを指定して作成され、かつシングルサンプルでなければなりません。ID3D11Resource を参照してください。 |
| DstSubresource | DWORD | in | コピー先サブリソースを識別する、0 から始まるインデックス。インデックスの計算には D3D11CalcSubresource を使用します。 |
| pSrcResource | ID3D11Resource* | in | コピー元リソース。マルチサンプルでなければなりません。 |
| SrcSubresource | DWORD | in | コピー元リソースのコピー元サブリソース。 |
| Format | DXGI_FORMAT | in | マルチサンプルリソースをシングルサンプルのリソースへどのように解決するかを示す DXGI_FORMAT。 「解説」を参照してください。 |
解説(Remarks)
この API は、あるレンダーパスの結果であるレンダーターゲットを、次のレンダーパスの入力として再利用する場合に特に有用です。
コピー元とコピー先のリソースは、同じリソース型で同じ寸法でなければなりません。さらに、互換性のある形式を持つ必要があります。これには次の 3 つのシナリオがあります。
| シナリオ | 要件 |
|---|---|
| コピー元とコピー先が構造化済みかつ型付き | コピー元とコピー先の形式が同一であり、その形式を Format パラメーターで指定する必要があります。 |
| 一方が構造化済みかつ型付きで、もう一方が構造化済みかつ型なし | 型付きリソースは、型なしリソースと互換性のある形式でなければなりません (たとえば、型付きリソースが DXGI_FORMAT_R32_FLOAT で型なしリソースが DXGI_FORMAT_R32_TYPELESS の場合)。型付きリソースの形式を Format パラメーターで指定する必要があります。 |
| コピー元とコピー先が構造化済みかつ型なし | コピー元とコピー先が同じ型なし形式でなければならず (たとえば両方が DXGI_FORMAT_R32_TYPELESS)、Format パラメーターにはコピー元・コピー先と互換性のある形式を指定する必要があります (たとえば両方が DXGI_FORMAT_R32_TYPELESS であれば、Format パラメーターに DXGI_FORMAT_R32_FLOAT を指定できます)。
たとえば、DXGI_FORMAT_R16G16B16A16_TYPELESS 形式の場合は次のようになります。
|
コマンドリストのコマンドをデバイスにキューイングします。
| pCommandList | ID3D11CommandList* | in | コマンドリストをカプセル化する ID3D11CommandList インターフェイスへのポインター。 |
| RestoreContextState | BOOL | in | コマンドリストの実行前に対象コンテキストのステートを保存し、実行後に復元するかどうかを決定するブール値フラグ。ランタイムにステートの保存と復元を行わせるには TRUE を指定します。ステートの保存も復元も行わない場合は FALSE を指定します。この場合、コマンドリストの実行後、対象コンテキストは既定のステートに戻ります。TRUE を渡したときにランタイムが復元するステートとほぼ同等のステートを自ら復元する場合を除き、アプリケーションは通常 FALSE を使用すべきです。FALSE を使用すると、不要で非効率なステート遷移を避けられます。 |
解説(Remarks)
任意のスレッド上の遅延コンテキストで記録されたコマンドリストを再生するには、このメソッドを使用します。
記録されたコマンドをグラフィックスプロセッシングユニット (GPU) で実行するには、遅延コンテキストのコマンドリストを即時コンテキストに対して ExecuteCommandList で実行する必要があります。遅延コンテキストのコマンドリストを別の遅延コンテキストに対して ExecuteCommandList で実行することで、記録されたリストをマージできます。ただし、マージされた遅延コマンドリストのコマンドを GPU 上で実行するには、即時コンテキストで実行する必要があります。
このメソッドは、クエリに関するランタイム検証をいくつか行います。デバイスコンテキストで開始されたクエリを、コマンドリストの実行によって間接的に操作することはできません (すなわち、そのコマンドリストを生成した遅延コンテキストが同じクエリに対して Begin または End を呼び出していた場合)。そのような状況が発生した場合、ExecuteCommandList メソッドはコマンドリストを実行しません。ただし、デバイスコンテキストのステートは期待どおりに維持されます (アプリケーションがデバイスコンテキストのステートを保持するよう指定していない限り、ID3D11DeviceContext::ClearState が実行されます)。
Windows Phone 8: この API はサポートされています。
シェーダーリソースの配列をハルシェーダーステージにバインドします。
| StartSlot | DWORD | in | シェーダーリソースの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1)。 |
| NumViews | DWORD | in | 設定するシェーダーリソースの数。シェーダーリソース用には最大 128 スロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppShaderResourceViews | ID3D11ShaderResourceView** | inoptional | デバイスに設定するシェーダーリソースビューインターフェイスの配列。 |
解説(Remarks)
重複するリソースビューがレンダーターゲットなどの出力スロットに既にバインドされている場合、このメソッドは対象のシェーダーリソーススロットを NULL で埋めます。
シェーダーリソースビューの作成については、ID3D11Device::CreateShaderResourceView を参照してください。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
ハルシェーダーをデバイスに設定します。
| pHullShader | ID3D11HullShader* | inoptional | ハルシェーダーへのポインター (ID3D11HullShader を参照)。NULL を渡すと、このパイプラインステージのシェーダーが無効になります。 |
| ppClassInstances | ID3D11ClassInstance** | inoptional | クラスインスタンスインターフェイスの配列へのポインター (ID3D11ClassInstance を参照)。シェーダーが使用する各インターフェイスには対応するクラスインスタンスが必要で、そうでない場合シェーダーは無効になります。シェーダーがインターフェイスを使用しない場合は、ppClassInstances に NULL を設定します。 |
| NumClassInstances | DWORD | in | 配列内のクラスインスタンスインターフェイスの数。 |
解説(Remarks)
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
シェーダーが持てるインスタンスの最大数は 256 です。
サンプラーステートの配列をハルシェーダーステージに設定します。
| StartSlot | DWORD | in | サンプラーの設定を開始する、0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1)。 |
| NumSamplers | DWORD | in | 配列内のサンプラーの数。各パイプラインステージには合計 16 個のサンプラースロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot)。 |
| ppSamplers | ID3D11SamplerState** | inoptional | サンプラーステートインターフェイスの配列へのポインター (ID3D11SamplerState を参照)。「解説」を参照してください。 |
解説(Remarks)
いずれのサンプラーにも NULL を設定できます。その場合は既定のステートが適用され、内容は次のとおりです。
//Default sampler state:
D3D11_SAMPLER_DESC SamplerDesc;
SamplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
SamplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.MipLODBias = 0;
SamplerDesc.MaxAnisotropy = 1;
SamplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER;
SamplerDesc.BorderColor[0] = 1.0f;
SamplerDesc.BorderColor[1] = 1.0f;
SamplerDesc.BorderColor[2] = 1.0f;
SamplerDesc.BorderColor[3] = 1.0f;
SamplerDesc.MinLOD = -FLT_MAX;
SamplerDesc.MaxLOD = FLT_MAX;
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
ハルシェーダーステージで使用される定数バッファーを設定します。
| StartSlot | DWORD | in | 定数バッファーの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1)。 |
| NumBuffers | DWORD | in | 設定するバッファーの数 (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot)。 |
| ppConstantBuffers | ID3D11Buffer** | inoptional | デバイスに渡す定数バッファーの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
Windows 8 以降で利用できる Direct3D 11.1 ランタイムでは、シェーダーがサポートする最大定数バッファーサイズ (4096 定数、各 432 ビットコンポーネント) を超える大きさの ID3D11Buffer リソースをシェーダーにバインドできます。そのような大きなバッファーをバインドした場合、シェーダーはバッファーの先頭 4096 個の 432 ビットコンポーネント定数にのみアクセスでき、あたかも 4096 定数がバッファー全体のサイズであるかのように扱われます。
アプリケーションがシェーダーからバッファーの他の部分にアクセスさせたい場合は、代わりに HSSetConstantBuffers1 メソッドを呼び出す必要があります。
シェーダーリソースの配列をドメインシェーダーステージにバインドします。
| StartSlot | DWORD | in | シェーダーリソースの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1)。 |
| NumViews | DWORD | in | 設定するシェーダーリソースの数。シェーダーリソース用には最大 128 スロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppShaderResourceViews | ID3D11ShaderResourceView** | inoptional | デバイスに設定するシェーダーリソースビューインターフェイスの配列。 |
解説(Remarks)
重複するリソースビューがレンダーターゲットなどの出力スロットに既にバインドされている場合、このメソッドは対象のシェーダーリソーススロットを NULL で埋めます。
シェーダーリソースビューの作成については、ID3D11Device::CreateShaderResourceView を参照してください。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
ドメインシェーダーをデバイスに設定します。
| pDomainShader | ID3D11DomainShader* | inoptional | ドメインシェーダーへのポインター (ID3D11DomainShader を参照)。NULL を渡すと、このパイプラインステージのシェーダーが無効になります。 |
| ppClassInstances | ID3D11ClassInstance** | inoptional | クラスインスタンスインターフェイスの配列へのポインター (ID3D11ClassInstance を参照)。シェーダーが使用する各インターフェイスには対応するクラスインスタンスが必要で、そうでない場合シェーダーは無効になります。シェーダーがインターフェイスを使用しない場合は、ppClassInstances に NULL を設定します。 |
| NumClassInstances | DWORD | in | 配列内のクラスインスタンスインターフェイスの数。 |
解説(Remarks)
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
シェーダーが持てるインスタンスの最大数は 256 です。
Windows Phone 8: この API はサポートされています。
サンプラーステートの配列をドメインシェーダーステージに設定します。
| StartSlot | DWORD | in | サンプラーの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1)。 |
| NumSamplers | DWORD | in | 配列内のサンプラーの数。各パイプラインステージには合計 16 個のサンプラースロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot)。 |
| ppSamplers | ID3D11SamplerState** | inoptional | サンプラーステートインターフェイスの配列へのポインター (ID3D11SamplerState を参照)。「解説」を参照してください。 |
解説(Remarks)
いずれのサンプラーにも NULL を設定できます。その場合は既定のステートが適用され、内容は次のとおりです。
//Default sampler state:
D3D11_SAMPLER_DESC SamplerDesc;
SamplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
SamplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.MipLODBias = 0;
SamplerDesc.MaxAnisotropy = 1;
SamplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER;
SamplerDesc.BorderColor[0] = 1.0f;
SamplerDesc.BorderColor[1] = 1.0f;
SamplerDesc.BorderColor[2] = 1.0f;
SamplerDesc.BorderColor[3] = 1.0f;
SamplerDesc.MinLOD = -FLT_MAX;
SamplerDesc.MaxLOD = FLT_MAX;
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
ドメインシェーダーステージで使用される定数バッファーを設定します。
| StartSlot | DWORD | in | 定数バッファーの設定を開始する、0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1)。 |
| NumBuffers | DWORD | in | 設定するバッファーの数 (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot)。 |
| ppConstantBuffers | ID3D11Buffer** | inoptional | デバイスに渡す定数バッファーの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
Windows 8 以降で利用できる Direct3D 11.1 ランタイムでは、シェーダーがサポートする最大定数バッファーサイズ (4096 定数、各 432 ビットコンポーネント) を超える大きさの ID3D11Buffer リソースをシェーダーにバインドできます。そのような大きなバッファーをバインドした場合、シェーダーはバッファーの先頭 4096 個の 432 ビットコンポーネント定数にのみアクセスでき、あたかも 4096 定数がバッファー全体のサイズであるかのように扱われます。
アプリケーションがシェーダーからバッファーの他の部分にアクセスさせたい場合は、代わりに DSSetConstantBuffers1 メソッドを呼び出す必要があります。
Windows Phone 8: この API はサポートされています。
シェーダーリソースの配列をコンピュートシェーダーステージにバインドします。
| StartSlot | DWORD | in | シェーダーリソースの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1)。 |
| NumViews | DWORD | in | 設定するシェーダーリソースの数。シェーダーリソース用には最大 128 スロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppShaderResourceViews | ID3D11ShaderResourceView** | inoptional | デバイスに設定するシェーダーリソースビューインターフェイスの配列。 |
解説(Remarks)
重複するリソースビューがレンダーターゲットなどの出力スロットに既にバインドされている場合、このメソッドは対象のシェーダーリソーススロットを NULL で埋めます。
シェーダーリソースビューの作成については、ID3D11Device::CreateShaderResourceView を参照してください。
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
アンオーダードリソースのビューの配列を設定します。
| StartSlot | DWORD | in | 設定を開始する、0 から始まる配列内の最初の要素のインデックス (範囲は 0 から D3D11_1_UAV_SLOT_COUNT - 1)。D3D11_1_UAV_SLOT_COUNT は 64 と定義されています。 |
| NumUAVs | DWORD | in | 設定するビューの数 (範囲は 0 から D3D11_1_UAV_SLOT_COUNT - StartSlot)。 |
| ppUnorderedAccessViews | ID3D11UnorderedAccessView** | inoptional | このメソッドで設定する ID3D11UnorderedAccessView ポインターの配列へのポインター。 |
| pUAVInitialCounts | DWORD* | inoptional | append/consume バッファーのオフセットの配列。値 -1 は現在のオフセットを維持することを示します。それ以外の値は、その append/consume 可能な UAV の隠しカウンターを設定します。pUAVInitialCounts は、UAV 作成時に D3D11_BUFFER_UAV_FLAG_APPEND または D3D11_BUFFER_UAV_FLAG_COUNTER を指定して作成された UAV に対してのみ意味を持ちます。 それ以外の場合、この引数は無視されます。 |
解説(Remarks)
Windows Phone 8: この API はサポートされています。
コンピュートシェーダーをデバイスに設定します。
| pComputeShader | ID3D11ComputeShader* | inoptional | コンピュートシェーダーへのポインター (ID3D11ComputeShader を参照)。NULL を渡すと、このパイプラインステージのシェーダーが無効になります。 |
| ppClassInstances | ID3D11ClassInstance** | inoptional | クラスインスタンスインターフェイスの配列へのポインター (ID3D11ClassInstance を参照)。シェーダーが使用する各インターフェイスには対応するクラスインスタンスが必要で、そうでない場合シェーダーは無効になります。シェーダーがインターフェイスを使用しない場合は、ppClassInstances に NULL を設定します。 |
| NumClassInstances | DWORD | in | 配列内のクラスインスタンスインターフェイスの数。 |
解説(Remarks)
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
シェーダーが持てるインスタンスの最大数は 256 です。
サンプラーステートの配列をコンピュートシェーダーステージに設定します。
| StartSlot | DWORD | in | サンプラーの設定を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1)。 |
| NumSamplers | DWORD | in | 配列内のサンプラーの数。各パイプラインステージには合計 16 個のサンプラースロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot)。 |
| ppSamplers | ID3D11SamplerState** | inoptional | サンプラーステートインターフェイスの配列へのポインター (ID3D11SamplerState を参照)。「解説」を参照してください。 |
解説(Remarks)
いずれのサンプラーにも NULL を設定できます。その場合は既定のステートが適用され、内容は次のとおりです。
//Default sampler state:
D3D11_SAMPLER_DESC SamplerDesc;
SamplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
SamplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;
SamplerDesc.MipLODBias = 0;
SamplerDesc.MaxAnisotropy = 1;
SamplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER;
SamplerDesc.BorderColor[0] = 1.0f;
SamplerDesc.BorderColor[1] = 1.0f;
SamplerDesc.BorderColor[2] = 1.0f;
SamplerDesc.BorderColor[3] = 1.0f;
SamplerDesc.MinLOD = -FLT_MAX;
SamplerDesc.MaxLOD = FLT_MAX;
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
コンピュートシェーダーステージで使用される定数バッファーを設定します。
| StartSlot | DWORD | in | 定数バッファーの設定を開始する、0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1)。 |
| NumBuffers | DWORD | in | 設定するバッファーの数 (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot)。 |
| ppConstantBuffers | ID3D11Buffer** | inoptional | デバイスに渡す定数バッファーの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
このメソッドは、渡されたインターフェイスへの参照を保持します。 これは Direct3D 10 のデバイスステートの動作とは異なります。
Windows 8 以降で利用できる Direct3D 11.1 ランタイムでは、シェーダーがサポートする最大定数バッファーサイズ (4096 定数、各 4*32 ビットコンポーネント) を超える大きさの ID3D11Buffer リソースをシェーダーにバインドできます。そのような大きなバッファーをバインドした場合、シェーダーはバッファーの先頭 4096 個の 4*32 ビットコンポーネント定数にのみアクセスでき、あたかも 4096 定数がバッファー全体のサイズであるかのように扱われます。
アプリケーションがシェーダーからバッファーの他の部分にアクセスさせたい場合は、代わりに CSSetConstantBuffers1 メソッドを呼び出す必要があります。
頂点シェーダーパイプラインステージで使用されている定数バッファーを取得します。(ID3D11DeviceContext.VSGetConstantBuffers)
| StartSlot | DWORD | in | 定数バッファーの取得を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1)。 |
| NumBuffers | DWORD | in | 取得するバッファーの数 (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot)。 |
| ppConstantBuffers | ID3D11Buffer** | outoptional | このメソッドが返す定数バッファーインターフェイスポインターの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
ピクセルシェーダーのリソースを取得します。(ID3D11DeviceContext.PSGetShaderResources)
| StartSlot | DWORD | in | シェーダーリソースの取得を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1)。 |
| NumViews | DWORD | in | デバイスから取得するリソースの数。シェーダーリソース用には最大 128 スロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppShaderResourceViews | ID3D11ShaderResourceView** | outoptional | デバイスが返すシェーダーリソースビューインターフェイスの配列。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
デバイスに現在設定されているピクセルシェーダーを取得します。(ID3D11DeviceContext.PSGetShader)
| ppPixelShader | ID3D11PixelShader** | out | このメソッドが返すピクセルシェーダーへのポインターのアドレス (ID3D11PixelShader を参照)。 |
| ppClassInstances | ID3D11ClassInstance** | outoptional | クラスインスタンスインターフェイスの配列へのポインター (ID3D11ClassInstance を参照)。 |
| pNumClassInstances | DWORD* | inoutoptional | 配列内のクラスインスタンス要素の数。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
Windows Phone 8: この API はサポートされています。
ピクセルシェーダーパイプラインステージからサンプラーステートの配列を取得します。(ID3D11DeviceContext.PSGetSamplers)
| StartSlot | DWORD | in | サンプラーの取得を開始する、0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1)。 |
| NumSamplers | DWORD | in | デバイスコンテキストから取得するサンプラーの数。各パイプラインステージには合計 16 個のサンプラースロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot)。 |
| ppSamplers | ID3D11SamplerState** | outoptional | デバイスが返すサンプラーステートインターフェイスポインターの配列 (ID3D11SamplerState を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
デバイスに現在設定されている頂点シェーダーを取得します。(ID3D11DeviceContext.VSGetShader)
| ppVertexShader | ID3D11VertexShader** | out | このメソッドが返す頂点シェーダーへのポインターのアドレス (ID3D11VertexShader を参照)。 |
| ppClassInstances | ID3D11ClassInstance** | outoptional | クラスインスタンスインターフェイスの配列へのポインター (ID3D11ClassInstance を参照)。 |
| pNumClassInstances | DWORD* | inoutoptional | 配列内のクラスインスタンス要素の数。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
ピクセルシェーダーパイプラインステージで使用されている定数バッファーを取得します。(ID3D11DeviceContext.PSGetConstantBuffers)
| StartSlot | DWORD | in | 定数バッファーの取得を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1)。 |
| NumBuffers | DWORD | in | 取得するバッファーの数 (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot)。 |
| ppConstantBuffers | ID3D11Buffer** | outoptional | このメソッドが返す定数バッファーインターフェイスポインターの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
入力アセンブラーステージにバインドされている入力レイアウトオブジェクトへのポインターを取得します。(ID3D11DeviceContext.IAGetInputLayout)
| ppInputLayout | ID3D11InputLayout** | out | 入力レイアウトオブジェクトへのポインター (ID3D11InputLayout を参照)。IA ステージが読み取る入力バッファーを記述します。 |
解説(Remarks)
入力レイアウトオブジェクトの作成については、「入力レイアウトオブジェクトの作成」を参照してください。
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
入力アセンブラーステージにバインドされている頂点バッファーを取得します。(ID3D11DeviceContext.IAGetVertexBuffers)
| StartSlot | DWORD | in | 取得する最初の頂点バッファーの入力スロット。最初の頂点バッファーは開始スロットに明示的にバインドされ、配列内の以降の各頂点バッファーは後続の入力スロットに暗黙的にバインドされます。入力スロットは最大 16 個または 32 個利用できます (範囲は 0 から D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1)。入力スロットの最大数は機能レベルによって異なります。 |
| NumBuffers | DWORD | in | オフセット位置から取得する頂点バッファーの数。バッファー数 (と開始スロットの合計) は、IA ステージの入力スロットの総数を超えることはできません。 |
| ppVertexBuffers | ID3D11Buffer** | outoptional | このメソッドが返す頂点バッファーの配列へのポインター (ID3D11Buffer を参照)。 |
| pStrides | DWORD* | outoptional | このメソッドが返すストライド値の配列へのポインター。頂点バッファー配列内の各バッファーにつき 1 つのストライド値が返されます。各ストライド値は、その頂点バッファーから使用される要素のサイズ (バイト単位) です。 |
| pOffsets | DWORD* | outoptional | このメソッドが返すオフセット値の配列へのポインター。頂点バッファー配列内の各バッファーにつき 1 つのオフセット値が返されます。各オフセットは、頂点バッファーの先頭要素から実際に使用される最初の要素までのバイト数です。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
入力アセンブラーステージにバインドされているインデックスバッファーへのポインターを取得します。(ID3D11DeviceContext.IAGetIndexBuffer)
| pIndexBuffer | ID3D11Buffer** | outoptional | このメソッドが返すインデックスバッファーへのポインター (ID3D11Buffer を参照)。 |
| Format | DXGI_FORMAT* | outoptional | インデックスバッファー内のデータの形式を示します (DXGI_FORMAT を参照)。これらの形式は、バッファー内のデータのサイズと型を表します。インデックスバッファーのデータに使用できる形式は、16 ビット (DXGI_FORMAT_R16_UINT) と 32 ビット (DXGI_FORMAT_R32_UINT) の整数のみです。 |
| Offset | DWORD* | outoptional | インデックスバッファーの先頭から、使用する最初のインデックスまでのオフセット (バイト単位)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
ジオメトリシェーダーパイプラインステージで使用されている定数バッファーを取得します。(ID3D11DeviceContext.GSGetConstantBuffers)
| StartSlot | DWORD | in | 定数バッファーの取得を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1)。 |
| NumBuffers | DWORD | in | 取得するバッファーの数 (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot)。 |
| ppConstantBuffers | ID3D11Buffer** | outoptional | このメソッドが返す定数バッファーインターフェイスポインターの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
デバイスに現在設定されているジオメトリシェーダーを取得します。(ID3D11DeviceContext.GSGetShader)
| ppGeometryShader | ID3D11GeometryShader** | out | このメソッドが返すジオメトリシェーダーへのポインターのアドレス (ID3D11GeometryShader を参照)。 |
| ppClassInstances | ID3D11ClassInstance** | outoptional | クラスインスタンスインターフェイスの配列へのポインター (ID3D11ClassInstance を参照)。 |
| pNumClassInstances | DWORD* | inoutoptional | 配列内のクラスインスタンス要素の数。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
入力アセンブラーステージの入力データを記述する、プリミティブの種類とデータの並び順の情報を取得します。(ID3D11DeviceContext.IAGetPrimitiveTopology)
| pTopology | D3D_PRIMITIVE_TOPOLOGY* | out | プリミティブの種類とプリミティブデータの並び順へのポインター (D3D11_PRIMITIVE_TOPOLOGY を参照)。 |
頂点シェーダーのリソースを取得します。(ID3D11DeviceContext.VSGetShaderResources)
| StartSlot | DWORD | in | シェーダーリソースの取得を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1)。 |
| NumViews | DWORD | in | デバイスから取得するリソースの数。シェーダーリソース用には最大 128 スロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppShaderResourceViews | ID3D11ShaderResourceView** | outoptional | デバイスが返すシェーダーリソースビューインターフェイスの配列。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
頂点シェーダーパイプラインステージからサンプラーステートの配列を取得します。(ID3D11DeviceContext.VSGetSamplers)
| StartSlot | DWORD | in | サンプラーの取得を開始する、0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1)。 |
| NumSamplers | DWORD | in | デバイスコンテキストから取得するサンプラーの数。各パイプラインステージには合計 16 個のサンプラースロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot)。 |
| ppSamplers | ID3D11SamplerState** | outoptional | デバイスが返すサンプラーステートインターフェイスポインターの配列 (ID3D11SamplerState を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
レンダリング述語の状態を取得します。(ID3D11DeviceContext.GetPredication)
| ppPredicate | ID3D11Predicate** | outoptional | 述語へのポインターのアドレス (ID3D11Predicate を参照)。デバイス作成時には NULL が格納されます。 |
| pPredicateValue | BOOL* | outoptional | 述語の比較値を格納するブール値のアドレス。デバイス作成時は FALSE です。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
ジオメトリシェーダーのリソースを取得します。(ID3D11DeviceContext.GSGetShaderResources)
| StartSlot | DWORD | in | シェーダーリソースの取得を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1)。 |
| NumViews | DWORD | in | デバイスから取得するリソースの数。シェーダーリソース用には最大 128 スロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppShaderResourceViews | ID3D11ShaderResourceView** | outoptional | デバイスが返すシェーダーリソースビューインターフェイスの配列。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
ジオメトリシェーダーパイプラインステージからサンプラーステートインターフェイスの配列を取得します。
| StartSlot | DWORD | in | サンプラーの取得を開始する、0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1)。 |
| NumSamplers | DWORD | in | デバイスコンテキストから取得するサンプラーの数。各パイプラインステージには合計 16 個のサンプラースロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot)。 |
| ppSamplers | ID3D11SamplerState** | outoptional | サンプラーステートインターフェイスの配列へのポインター (ID3D11SamplerState を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
出力マージャーステージにバインドされているリソースへのポインターを取得します。(ID3D11DeviceContext.OMGetRenderTargets)
| NumViews | DWORD | in | 取得するレンダーターゲットの数。 |
| ppRenderTargetViews | ID3D11RenderTargetView** | outoptional | レンダーターゲットビューを表す ID3D11RenderTargetView の配列へのポインター。レンダーターゲットの取得が不要な場合は、このパラメーターに NULL を指定します。 |
| ppDepthStencilView | ID3D11DepthStencilView** | outoptional | 深度ステンシルビューを表す ID3D11DepthStencilView へのポインター。深度ステンシルビューの取得が不要な場合は、このパラメーターに NULL を指定します。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
出力マージャーステージにバインドされているリソースへのポインターを取得します。(ID3D11DeviceContext.OMGetRenderTargetsAndUnorderedAccessViews)
| NumRTVs | DWORD | in | 取得するレンダーターゲットビューの数。 |
| ppRenderTargetViews | ID3D11RenderTargetView** | outoptional | レンダーターゲットビューを表す ID3D11RenderTargetView の配列へのポインター。レンダーターゲットビューの取得が不要な場合は、このパラメーターに NULL を指定します。 |
| ppDepthStencilView | ID3D11DepthStencilView** | outoptional | 深度ステンシルビューを表す ID3D11DepthStencilView へのポインター。深度ステンシルビューの取得が不要な場合は、このパラメーターに NULL を指定します。 |
| UAVStartSlot | DWORD | in | アンオーダードアクセスビューの取得を開始する、0 から始まる配列へのインデックス (範囲は 0 から D3D11_PS_CS_UAV_REGISTER_COUNT - 1)。 ピクセルシェーダーの場合、UAVStartSlot はバインドされているレンダーターゲットビューの数と等しくする必要があります。 |
| NumUAVs | DWORD | in | ppUnorderedAccessViews に返すアンオーダードアクセスビューの数。範囲は 0 から D3D11_PS_CS_UAV_REGISTER_COUNT - UAVStartSlot です。 |
| ppUnorderedAccessViews | ID3D11UnorderedAccessView** | outoptional | 取得されるアンオーダードアクセスビューを表す ID3D11UnorderedAccessView の配列へのポインター。アンオーダードアクセスビューの取得が不要な場合は、このパラメーターに NULL を指定します。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
Windows Phone 8: この API はサポートされています。
出力マージャーステージのブレンドステートを取得します。(ID3D11DeviceContext.OMGetBlendState)
| ppBlendState | ID3D11BlendState** | outoptional | ブレンドステートインターフェイスへのポインターのアドレス (ID3D11BlendState を参照)。 |
| BlendFactor | FLOAT* | outoptional | RGBA の各コンポーネントに 1 つずつ対応するブレンド係数の配列。 |
| pSampleMask | DWORD* | outoptional | サンプルマスクへのポインター。 |
解説(Remarks)
ブレンドステートを取得すると、返されるインターフェイスの参照カウントが 1 つ増加します。アプリケーションは不要になったポインターを解放する必要があります。そうしないとメモリリークが発生します。
Windows Phone 8: この API はサポートされています。
出力マージャーステージの深度ステンシルステートを取得します。(ID3D11DeviceContext.OMGetDepthStencilState)
| ppDepthStencilState | ID3D11DepthStencilState** | outoptional | デバイスからの情報が格納される、深度ステンシルステートインターフェイスへのポインターのアドレス (ID3D11DepthStencilState を参照)。 |
| pStencilRef | DWORD* | outoptional | 深度ステンシルテストで使用されるステンシル参照値へのポインター。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
Windows Phone 8: この API はサポートされています。
パイプラインのストリーム出力ステージの出力先バッファーを取得します。
| NumBuffers | DWORD | in | 取得するバッファーの数。 |
| ppSOTargets | ID3D11Buffer** | outoptional | デバイスから取得する出力バッファーの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
出力バッファーは最大 4 つまで取得できます。
返された ppSOTargets 配列が指す出力バッファーへのオフセットは、ID3D11DeviceContext::SOSetTargets で定義されているとおり、-1 (追記) であると見なして構いません。
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
Windows Phone 8: この API はサポートされています。
パイプラインのラスタライザーステージからラスタライザーステートを取得します。(ID3D11DeviceContext.RSGetState)
| ppRasterizerState | ID3D11RasterizerState** | out | デバイスからの情報が格納される、ラスタライザーステートインターフェイスへのポインターのアドレス (ID3D11RasterizerState を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
ラスタライザーステージにバインドされているビューポートの配列を取得します。
| pNumViewports | DWORD* | inout | 入力時には pViewports 配列内のビューポート数 (範囲は 0 から D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) を指定する変数へのポインター。出力時には、ラスタライザーステージに実際にバインドされているビューポートの数がこの変数に格納されます。 pViewports が NULL の場合、RSGetViewports は現在バインドされているビューポートの数をこの変数に格納します。 注意 一部のバージョンの Windows SDK では、pViewports が NULL であっても、pNumViewports が指す変数の入力値が D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE より大きい場合にデバッグデバイスが例外を発生させます。通常のランタイムは、pViewports が NULL の場合、pNumViewports が指す変数の値を無視します。このデバッグデバイスの動作は、将来の Windows SDK のリリースで修正される可能性があります。
|
| pViewports | D3D11_VIEWPORT* | outoptional | ラスタライザーステージにバインドされているビューポートの D3D11_VIEWPORT 構造体の配列。(pNumViewports が指す変数の) ビューポート数が実際に現在バインドされているビューポート数より大きい場合、配列の未使用要素には 0 が格納されます。 ビューポートのサイズがデバイスの機能レベルにどのように依存するか (Direct3D 10 と Direct3D 11 の間で変更されています) については、D3D11_VIEWPORT を参照してください。 |
解説(Remarks)
Windows Phone 8: この API はサポートされています。
ラスタライザーステージにバインドされているシザー矩形の配列を取得します。(ID3D11DeviceContext.RSGetScissorRects)
| pNumRects | DWORD* | inout | バインドされているシザー矩形の数 (範囲は 0 から D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)。返される矩形の数を pNumRects で確認するには、pRects に NULL を設定します。 |
| pRects | RECT* | outoptional | シザー矩形の配列 (D3D11_RECT を参照)。NumRects が現在バインドされているシザー矩形の数より大きい場合、配列の未使用の要素には 0 が格納されます。 |
ハルシェーダーのリソースを取得します。
| StartSlot | DWORD | in | シェーダーリソースの取得を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1)。 |
| NumViews | DWORD | in | デバイスから取得するリソースの数。シェーダーリソース用には最大 128 スロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppShaderResourceViews | ID3D11ShaderResourceView** | outoptional | デバイスが返すシェーダーリソースビューインターフェイスの配列。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
デバイスに現在設定されているハルシェーダーを取得します。
| ppHullShader | ID3D11HullShader** | out | このメソッドが返すハルシェーダーへのポインターのアドレス (ID3D11HullShader を参照)。 |
| ppClassInstances | ID3D11ClassInstance** | outoptional | クラスインスタンスインターフェイスの配列へのポインター (ID3D11ClassInstance を参照)。 |
| pNumClassInstances | DWORD* | inoutoptional | 配列内のクラスインスタンス要素の数。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
ハルシェーダーステージからサンプラーステートインターフェイスの配列を取得します。
| StartSlot | DWORD | in | サンプラーの取得を開始する、0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1)。 |
| NumSamplers | DWORD | in | デバイスコンテキストから取得するサンプラーの数。各パイプラインステージには合計 16 個のサンプラースロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot)。 |
| ppSamplers | ID3D11SamplerState** | outoptional | サンプラーステートインターフェイスの配列へのポインター (ID3D11SamplerState を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
ハルシェーダーステージで使用されている定数バッファーを取得します。
| StartSlot | DWORD | in | 定数バッファーの取得を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1)。 |
| NumBuffers | DWORD | in | 取得するバッファーの数 (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot)。 |
| ppConstantBuffers | ID3D11Buffer** | outoptional | このメソッドが返す定数バッファーインターフェイスポインターの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
ドメインシェーダーのリソースを取得します。
| StartSlot | DWORD | in | シェーダーリソースの取得を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1)。 |
| NumViews | DWORD | in | デバイスから取得するリソースの数。シェーダーリソース用には最大 128 スロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppShaderResourceViews | ID3D11ShaderResourceView** | outoptional | デバイスが返すシェーダーリソースビューインターフェイスの配列。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
デバイスに現在設定されているドメインシェーダーを取得します。
| ppDomainShader | ID3D11DomainShader** | out | このメソッドが返すドメインシェーダーへのポインターのアドレス (ID3D11DomainShader を参照)。 |
| ppClassInstances | ID3D11ClassInstance** | outoptional | クラスインスタンスインターフェイスの配列へのポインター (ID3D11ClassInstance を参照)。 |
| pNumClassInstances | DWORD* | inoutoptional | 配列内のクラスインスタンス要素の数。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
ドメインシェーダーステージからサンプラーステートインターフェイスの配列を取得します。
| StartSlot | DWORD | in | サンプラーの取得を開始する、0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1)。 |
| NumSamplers | DWORD | in | デバイスコンテキストから取得するサンプラーの数。各パイプラインステージには合計 16 個のサンプラースロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot)。 |
| ppSamplers | ID3D11SamplerState** | outoptional | サンプラーステートインターフェイスの配列へのポインター (ID3D11SamplerState を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
ドメインシェーダーステージで使用されている定数バッファーを取得します。
| StartSlot | DWORD | in | 定数バッファーの取得を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1)。 |
| NumBuffers | DWORD | in | 取得するバッファーの数 (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot)。 |
| ppConstantBuffers | ID3D11Buffer** | outoptional | このメソッドが返す定数バッファーインターフェイスポインターの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
コンピュートシェーダーのリソースを取得します。
| StartSlot | DWORD | in | シェーダーリソースの取得を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1)。 |
| NumViews | DWORD | in | デバイスから取得するリソースの数。シェーダーリソース用には最大 128 スロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot)。 |
| ppShaderResourceViews | ID3D11ShaderResourceView** | outoptional | デバイスが返すシェーダーリソースビューインターフェイスの配列。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
アンオーダードリソースのビューの配列を取得します。
| StartSlot | DWORD | in | 返す、0 から始まる配列内の最初の要素のインデックス (範囲は 0 から D3D11_1_UAV_SLOT_COUNT - 1)。 |
| NumUAVs | DWORD | in | 取得するビューの数 (範囲は 0 から D3D11_1_UAV_SLOT_COUNT - StartSlot)。 |
| ppUnorderedAccessViews | ID3D11UnorderedAccessView** | outoptional | 取得するインターフェイスポインターの配列へのポインター (ID3D11UnorderedAccessView を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
デバイスに現在設定されているコンピュートシェーダーを取得します。
| ppComputeShader | ID3D11ComputeShader** | out | このメソッドが返すコンピュートシェーダーへのポインターのアドレス (ID3D11ComputeShader を参照)。 |
| ppClassInstances | ID3D11ClassInstance** | outoptional | クラスインスタンスインターフェイスの配列へのポインター (ID3D11ClassInstance を参照)。 |
| pNumClassInstances | DWORD* | inoutoptional | 配列内のクラスインスタンス要素の数。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
コンピュートシェーダーステージからサンプラーステートインターフェイスの配列を取得します。
| StartSlot | DWORD | in | サンプラーの取得を開始する、0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1)。 |
| NumSamplers | DWORD | in | デバイスコンテキストから取得するサンプラーの数。各パイプラインステージには合計 16 個のサンプラースロットが利用できます (範囲は 0 から D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot)。 |
| ppSamplers | ID3D11SamplerState** | outoptional | サンプラーステートインターフェイスの配列へのポインター (ID3D11SamplerState を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
コンピュートシェーダーステージで使用されている定数バッファーを取得します。
| StartSlot | DWORD | in | 定数バッファーの取得を開始する、デバイスの 0 から始まる配列へのインデックス (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1)。 |
| NumBuffers | DWORD | in | 取得するバッファーの数 (範囲は 0 から D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot)。 |
| ppConstantBuffers | ID3D11Buffer** | outoptional | このメソッドが返す定数バッファーインターフェイスポインターの配列 (ID3D11Buffer を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。メモリリークを避けるため、アプリケーションは不要になった時点で、返されたインターフェイスに対して IUnknown::Release を呼び出す必要があります。
すべての設定を既定値に戻します。
解説(Remarks)
このメソッドは、デバイスコンテキストを既定の設定にリセットします。これにより、すべての入出力リソーススロット、シェーダー、入力レイアウト、述語、シザー矩形、深度ステンシルステート、ラスタライザーステート、ブレンドステート、サンプラーステート、ビューポートが NULL に設定されます。プリミティブトポロジは UNDEFINED に設定されます。
それまでに記録したコマンドのリストを破棄したい場合は、ID3D11DeviceContext::FinishCommandList を呼び出し、得られた ID3D11CommandList を破棄してください。
コマンドバッファーにキューイングされたコマンドを、グラフィックスプロセッシングユニット (GPU) へ送信します。
解説(Remarks)
ほとんどのアプリケーションでは、このメソッドを呼び出す必要はありません。不要な場面でこのメソッドを呼び出すと、パフォーマンス上の代償を伴います。 Flush の呼び出しごとに、かなりのオーバーヘッドが発生します。
アプリケーションが Microsoft Direct3D のステート設定、プレゼント、または描画コマンドを呼び出すと、それらのコマンドは内部のコマンドバッファーへキューイングされます。 Flush は、それらのコマンドを処理のために GPU へ送信します。通常、Direct3D ランタイムは、コマンドバッファーが満杯になったときやアプリケーションがリソースをマップしたときなど、送信が必要と判断した時点で自動的にこれらのコマンドを GPU へ送信します。Flush は、これを手動で行います。
CPU が任意の時間だけ待機する場合 (たとえば Sleep 関数を呼び出す場合) には、Flush の使用をお勧めします。
Flush は非同期に動作するため、GPU がキューイングされたグラフィックスコマンドの実行を完了する前に戻ることも、完了した後に戻ることもあります。ただし、グラフィックスコマンドは最終的には必ず完了します。ID3D11Device::CreateQuery メソッドを D3D11_QUERY_EVENT の値で呼び出してイベントクエリを作成し、そのイベントクエリを ID3D11DeviceContext::GetData メソッドの呼び出しで使用すれば、GPU がグラフィックスコマンドの処理を完了した時点を判別できます。
Microsoft Direct3D 11 はオブジェクトの破棄を遅延します。そのため、アプリケーションはオブジェクトが即座に破棄されることを前提にできません。Flush を呼び出すと、破棄が遅延されていたオブジェクトが破棄されます。アプリケーションがオブジェクトの同期的な破棄を必要とする場合は、すべての参照を解放し、ID3D11DeviceContext::ClearState を呼び出してから Flush を呼び出すことをお勧めします。
フリップ表示モデルのスワップチェーンにおける遅延破棄の問題
Direct3D 11 は、ビューやリソースなどのオブジェクトの破棄を、効率的に破棄できるようになるまで遅延します。この遅延破棄は、フリップ表示モデルのスワップチェーンで問題を引き起こす場合があります。フリップ表示モデルのスワップチェーンには DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL フラグが設定されています。フリップ表示モデルのスワップチェーンを作成する場合、HWND、IWindow、またはコンポジションサーフェスに一度に関連付けられるスワップチェーンは 1 つだけです。アプリケーションがフリップ表示モデルのスワップチェーンを破棄して別のスワップチェーンに置き換えようとする場合、元のスワップチェーンへの参照をすべて即座に解放しても、元のスワップチェーンは破棄されません。ほとんどのアプリケーションでは、新しいスワップチェーンバッファーで古いスワップチェーンバッファーを置き換えるシナリオの大半において、IDXGISwapChain::ResizeBuffers メソッドを使用します。しかし、古いスワップチェーンを実際に破棄して新しいスワップチェーンを作成する必要がある場合、アプリケーションは解放したすべてのオブジェクトの破棄を強制する必要があります。破棄を強制するには、ID3D11DeviceContext::ClearState を呼び出し (あるいは、ビューがパイプラインステートにバインドされていない状態を確保し)、その後、即時コンテキストで Flush を呼び出します。新しいスワップチェーンを作成するために IDXGIFactory2::CreateSwapChainForHwnd、IDXGIFactory2::CreateSwapChainForCoreWindow、または IDXGIFactory2::CreateSwapChainForComposition を再度呼び出す前に、破棄を強制する必要があります。
デバイスコンテキストの種類を取得します。
戻り値
デバイスコンテキストの種類を示す D3D11_DEVICE_CONTEXT_TYPE のメンバー。
現在の遅延コンテキストに関連付けられた初期化フラグを取得します。
解説(Remarks)
GetContextFlags メソッドは、ID3D11Device::CreateDeferredContext の ContextFlags パラメーターに指定されたフラグを取得します。ただし、このコンテキストフラグは将来の使用のために予約されています。
コマンドリストを作成し、グラフィックスコマンドをそこに記録します。
| RestoreDeferredContextState | BOOL | in | FinishCommandList の実行前にランタイムが遅延コンテキストのステートを保存し、実行後に復元するかどうかを決定するブール値フラグ。ランタイムにステートの保存と復元を行わせるには TRUE を指定します。ランタイムがステートの保存も復元も行わないようにするには FALSE を指定します。この場合、FinishCommandList の呼び出しが完了すると、遅延コンテキストは既定のステートに戻ります。既定のステートについては、ID3D11DeviceContext::ClearState を参照してください。TRUE を渡したときにランタイムが復元するステートとほぼ同等のステートを自ら復元する場合を除き、通常は FALSE を使用してください。FALSE を使用すると、不要で非効率なステート遷移を避けられます。 注意 このパラメーターは、今回の FinishCommandList の呼び出しが返すコマンドリストには影響しません。ただし、同じ遅延コンテキストにおける次回の FinishCommandList の呼び出しで得られるコマンドリストには影響します。
|
| ppCommandList | ID3D11CommandList** | outoptional | メソッドの完了時に、渡された ID3D11CommandList インターフェイスポインターへのポインターが、記録されたコマンドリストの情報で初期化されます。得られる ID3D11CommandList オブジェクトは不変であり、ID3D11DeviceContext::ExecuteCommandList でのみ使用できます。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合は、次のいずれかを返します。
- ビデオカードがシステムから物理的に取り外された場合、またはビデオカードのドライバーがアップグレードされた場合は DXGI_ERROR_DEVICE_REMOVED を返します。このエラーが発生した場合は、デバイスを破棄して再作成する必要があります。
- 現在のコンテキストから FinishCommandList を呼び出せない場合は DXGI_ERROR_INVALID_CALL を返します。「解説」を参照してください。
- アプリケーションが利用可能なメモリを使い果たした場合は E_OUTOFMEMORY を返します。
解説(Remarks)
遅延コンテキストからコマンドリストを作成し、FinishCommandList を呼び出してコマンドをそこに記録します。コマンドリストを再生するには、即時コンテキストで ID3D11DeviceContext::ExecuteCommandList を呼び出します。
即時コンテキストのステートは、コマンドリストの実行前後にクリアされます。コマンドリストには継承の概念がありません。FinishCommandList の各呼び出しでは、前回の FinishCommandList の呼び出し以降に設定されたステートのみが記録されます。
たとえば、デバイスコンテキストのステートとは、そのレンダーステートまたはパイプラインステートのことです。デバイスコンテキストのステートを取得するには、アプリケーションは ID3D11DeviceContext::GetData または ID3D11DeviceContext::GetPredication を呼び出せます。
FinishCommandList の使用方法の詳細については、方法: コマンドリストを記録するを参照してください。
Windows Phone 8: この API はサポートされています。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID3D11DeviceContext "{C0BFA96C-E089-44FB-8EAF-26F8796190DA}" #usecom global ID3D11DeviceContext IID_ID3D11DeviceContext "{}" #comfunc global ID3D11DeviceContext_VSSetConstantBuffers 7 int,int,sptr #comfunc global ID3D11DeviceContext_PSSetShaderResources 8 int,int,sptr #comfunc global ID3D11DeviceContext_PSSetShader 9 sptr,sptr,int #comfunc global ID3D11DeviceContext_PSSetSamplers 10 int,int,sptr #comfunc global ID3D11DeviceContext_VSSetShader 11 sptr,sptr,int #comfunc global ID3D11DeviceContext_DrawIndexed 12 int,int,int #comfunc global ID3D11DeviceContext_Draw 13 int,int #comfunc global ID3D11DeviceContext_Map 14 sptr,int,int,int,var #comfunc global ID3D11DeviceContext_Unmap 15 sptr,int #comfunc global ID3D11DeviceContext_PSSetConstantBuffers 16 int,int,sptr #comfunc global ID3D11DeviceContext_IASetInputLayout 17 sptr #comfunc global ID3D11DeviceContext_IASetVertexBuffers 18 int,int,sptr,var,var #comfunc global ID3D11DeviceContext_IASetIndexBuffer 19 sptr,int,int #comfunc global ID3D11DeviceContext_DrawIndexedInstanced 20 int,int,int,int,int #comfunc global ID3D11DeviceContext_DrawInstanced 21 int,int,int,int #comfunc global ID3D11DeviceContext_GSSetConstantBuffers 22 int,int,sptr #comfunc global ID3D11DeviceContext_GSSetShader 23 sptr,sptr,int #comfunc global ID3D11DeviceContext_IASetPrimitiveTopology 24 int #comfunc global ID3D11DeviceContext_VSSetShaderResources 25 int,int,sptr #comfunc global ID3D11DeviceContext_VSSetSamplers 26 int,int,sptr #comfunc global ID3D11DeviceContext_Begin 27 sptr #comfunc global ID3D11DeviceContext_End 28 sptr #comfunc global ID3D11DeviceContext_GetData 29 sptr,sptr,int,int #comfunc global ID3D11DeviceContext_SetPredication 30 sptr,int #comfunc global ID3D11DeviceContext_GSSetShaderResources 31 int,int,sptr #comfunc global ID3D11DeviceContext_GSSetSamplers 32 int,int,sptr #comfunc global ID3D11DeviceContext_OMSetRenderTargets 33 int,sptr,sptr #comfunc global ID3D11DeviceContext_OMSetRenderTargetsAndUnorderedAccessViews 34 int,sptr,sptr,int,int,sptr,var #comfunc global ID3D11DeviceContext_OMSetBlendState 35 sptr,var,int #comfunc global ID3D11DeviceContext_OMSetDepthStencilState 36 sptr,int #comfunc global ID3D11DeviceContext_SOSetTargets 37 int,sptr,var #comfunc global ID3D11DeviceContext_DrawAuto 38 #comfunc global ID3D11DeviceContext_DrawIndexedInstancedIndirect 39 sptr,int #comfunc global ID3D11DeviceContext_DrawInstancedIndirect 40 sptr,int #comfunc global ID3D11DeviceContext_Dispatch 41 int,int,int #comfunc global ID3D11DeviceContext_DispatchIndirect 42 sptr,int #comfunc global ID3D11DeviceContext_RSSetState 43 sptr #comfunc global ID3D11DeviceContext_RSSetViewports 44 int,var #comfunc global ID3D11DeviceContext_RSSetScissorRects 45 int,var #comfunc global ID3D11DeviceContext_CopySubresourceRegion 46 sptr,int,int,int,int,sptr,int,var #comfunc global ID3D11DeviceContext_CopyResource 47 sptr,sptr #comfunc global ID3D11DeviceContext_UpdateSubresource 48 sptr,int,var,sptr,int,int #comfunc global ID3D11DeviceContext_CopyStructureCount 49 sptr,int,sptr #comfunc global ID3D11DeviceContext_ClearRenderTargetView 50 sptr,var #comfunc global ID3D11DeviceContext_ClearUnorderedAccessViewUint 51 sptr,var #comfunc global ID3D11DeviceContext_ClearUnorderedAccessViewFloat 52 sptr,var #comfunc global ID3D11DeviceContext_ClearDepthStencilView 53 sptr,int,float,int #comfunc global ID3D11DeviceContext_GenerateMips 54 sptr #comfunc global ID3D11DeviceContext_SetResourceMinLOD 55 sptr,float #comfunc global ID3D11DeviceContext_GetResourceMinLOD 56 sptr #comfunc global ID3D11DeviceContext_ResolveSubresource 57 sptr,int,sptr,int,int #comfunc global ID3D11DeviceContext_ExecuteCommandList 58 sptr,int #comfunc global ID3D11DeviceContext_HSSetShaderResources 59 int,int,sptr #comfunc global ID3D11DeviceContext_HSSetShader 60 sptr,sptr,int #comfunc global ID3D11DeviceContext_HSSetSamplers 61 int,int,sptr #comfunc global ID3D11DeviceContext_HSSetConstantBuffers 62 int,int,sptr #comfunc global ID3D11DeviceContext_DSSetShaderResources 63 int,int,sptr #comfunc global ID3D11DeviceContext_DSSetShader 64 sptr,sptr,int #comfunc global ID3D11DeviceContext_DSSetSamplers 65 int,int,sptr #comfunc global ID3D11DeviceContext_DSSetConstantBuffers 66 int,int,sptr #comfunc global ID3D11DeviceContext_CSSetShaderResources 67 int,int,sptr #comfunc global ID3D11DeviceContext_CSSetUnorderedAccessViews 68 int,int,sptr,var #comfunc global ID3D11DeviceContext_CSSetShader 69 sptr,sptr,int #comfunc global ID3D11DeviceContext_CSSetSamplers 70 int,int,sptr #comfunc global ID3D11DeviceContext_CSSetConstantBuffers 71 int,int,sptr #comfunc global ID3D11DeviceContext_VSGetConstantBuffers 72 int,int,sptr #comfunc global ID3D11DeviceContext_PSGetShaderResources 73 int,int,sptr #comfunc global ID3D11DeviceContext_PSGetShader 74 sptr,sptr,var #comfunc global ID3D11DeviceContext_PSGetSamplers 75 int,int,sptr #comfunc global ID3D11DeviceContext_VSGetShader 76 sptr,sptr,var #comfunc global ID3D11DeviceContext_PSGetConstantBuffers 77 int,int,sptr #comfunc global ID3D11DeviceContext_IAGetInputLayout 78 sptr #comfunc global ID3D11DeviceContext_IAGetVertexBuffers 79 int,int,sptr,var,var #comfunc global ID3D11DeviceContext_IAGetIndexBuffer 80 sptr,var,var #comfunc global ID3D11DeviceContext_GSGetConstantBuffers 81 int,int,sptr #comfunc global ID3D11DeviceContext_GSGetShader 82 sptr,sptr,var #comfunc global ID3D11DeviceContext_IAGetPrimitiveTopology 83 var #comfunc global ID3D11DeviceContext_VSGetShaderResources 84 int,int,sptr #comfunc global ID3D11DeviceContext_VSGetSamplers 85 int,int,sptr #comfunc global ID3D11DeviceContext_GetPredication 86 sptr,var #comfunc global ID3D11DeviceContext_GSGetShaderResources 87 int,int,sptr #comfunc global ID3D11DeviceContext_GSGetSamplers 88 int,int,sptr #comfunc global ID3D11DeviceContext_OMGetRenderTargets 89 int,sptr,sptr #comfunc global ID3D11DeviceContext_OMGetRenderTargetsAndUnorderedAccessViews 90 int,sptr,sptr,int,int,sptr #comfunc global ID3D11DeviceContext_OMGetBlendState 91 sptr,var,var #comfunc global ID3D11DeviceContext_OMGetDepthStencilState 92 sptr,var #comfunc global ID3D11DeviceContext_SOGetTargets 93 int,sptr #comfunc global ID3D11DeviceContext_RSGetState 94 sptr #comfunc global ID3D11DeviceContext_RSGetViewports 95 var,var #comfunc global ID3D11DeviceContext_RSGetScissorRects 96 var,var #comfunc global ID3D11DeviceContext_HSGetShaderResources 97 int,int,sptr #comfunc global ID3D11DeviceContext_HSGetShader 98 sptr,sptr,var #comfunc global ID3D11DeviceContext_HSGetSamplers 99 int,int,sptr #comfunc global ID3D11DeviceContext_HSGetConstantBuffers 100 int,int,sptr #comfunc global ID3D11DeviceContext_DSGetShaderResources 101 int,int,sptr #comfunc global ID3D11DeviceContext_DSGetShader 102 sptr,sptr,var #comfunc global ID3D11DeviceContext_DSGetSamplers 103 int,int,sptr #comfunc global ID3D11DeviceContext_DSGetConstantBuffers 104 int,int,sptr #comfunc global ID3D11DeviceContext_CSGetShaderResources 105 int,int,sptr #comfunc global ID3D11DeviceContext_CSGetUnorderedAccessViews 106 int,int,sptr #comfunc global ID3D11DeviceContext_CSGetShader 107 sptr,sptr,var #comfunc global ID3D11DeviceContext_CSGetSamplers 108 int,int,sptr #comfunc global ID3D11DeviceContext_CSGetConstantBuffers 109 int,int,sptr #comfunc global ID3D11DeviceContext_ClearState 110 #comfunc global ID3D11DeviceContext_Flush 111 #comfunc global ID3D11DeviceContext_GetType 112 #comfunc global ID3D11DeviceContext_GetContextFlags 113 #comfunc global ID3D11DeviceContext_FinishCommandList 114 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ID3D11DeviceContext "{C0BFA96C-E089-44FB-8EAF-26F8796190DA}" #usecom global ID3D11DeviceContext IID_ID3D11DeviceContext "{}" #comfunc global ID3D11DeviceContext_VSSetConstantBuffers 7 int,int,sptr #comfunc global ID3D11DeviceContext_PSSetShaderResources 8 int,int,sptr #comfunc global ID3D11DeviceContext_PSSetShader 9 sptr,sptr,int #comfunc global ID3D11DeviceContext_PSSetSamplers 10 int,int,sptr #comfunc global ID3D11DeviceContext_VSSetShader 11 sptr,sptr,int #comfunc global ID3D11DeviceContext_DrawIndexed 12 int,int,int #comfunc global ID3D11DeviceContext_Draw 13 int,int #comfunc global ID3D11DeviceContext_Map 14 sptr,int,int,int,sptr #comfunc global ID3D11DeviceContext_Unmap 15 sptr,int #comfunc global ID3D11DeviceContext_PSSetConstantBuffers 16 int,int,sptr #comfunc global ID3D11DeviceContext_IASetInputLayout 17 sptr #comfunc global ID3D11DeviceContext_IASetVertexBuffers 18 int,int,sptr,sptr,sptr #comfunc global ID3D11DeviceContext_IASetIndexBuffer 19 sptr,int,int #comfunc global ID3D11DeviceContext_DrawIndexedInstanced 20 int,int,int,int,int #comfunc global ID3D11DeviceContext_DrawInstanced 21 int,int,int,int #comfunc global ID3D11DeviceContext_GSSetConstantBuffers 22 int,int,sptr #comfunc global ID3D11DeviceContext_GSSetShader 23 sptr,sptr,int #comfunc global ID3D11DeviceContext_IASetPrimitiveTopology 24 int #comfunc global ID3D11DeviceContext_VSSetShaderResources 25 int,int,sptr #comfunc global ID3D11DeviceContext_VSSetSamplers 26 int,int,sptr #comfunc global ID3D11DeviceContext_Begin 27 sptr #comfunc global ID3D11DeviceContext_End 28 sptr #comfunc global ID3D11DeviceContext_GetData 29 sptr,sptr,int,int #comfunc global ID3D11DeviceContext_SetPredication 30 sptr,int #comfunc global ID3D11DeviceContext_GSSetShaderResources 31 int,int,sptr #comfunc global ID3D11DeviceContext_GSSetSamplers 32 int,int,sptr #comfunc global ID3D11DeviceContext_OMSetRenderTargets 33 int,sptr,sptr #comfunc global ID3D11DeviceContext_OMSetRenderTargetsAndUnorderedAccessViews 34 int,sptr,sptr,int,int,sptr,sptr #comfunc global ID3D11DeviceContext_OMSetBlendState 35 sptr,sptr,int #comfunc global ID3D11DeviceContext_OMSetDepthStencilState 36 sptr,int #comfunc global ID3D11DeviceContext_SOSetTargets 37 int,sptr,sptr #comfunc global ID3D11DeviceContext_DrawAuto 38 #comfunc global ID3D11DeviceContext_DrawIndexedInstancedIndirect 39 sptr,int #comfunc global ID3D11DeviceContext_DrawInstancedIndirect 40 sptr,int #comfunc global ID3D11DeviceContext_Dispatch 41 int,int,int #comfunc global ID3D11DeviceContext_DispatchIndirect 42 sptr,int #comfunc global ID3D11DeviceContext_RSSetState 43 sptr #comfunc global ID3D11DeviceContext_RSSetViewports 44 int,sptr #comfunc global ID3D11DeviceContext_RSSetScissorRects 45 int,sptr #comfunc global ID3D11DeviceContext_CopySubresourceRegion 46 sptr,int,int,int,int,sptr,int,sptr #comfunc global ID3D11DeviceContext_CopyResource 47 sptr,sptr #comfunc global ID3D11DeviceContext_UpdateSubresource 48 sptr,int,sptr,sptr,int,int #comfunc global ID3D11DeviceContext_CopyStructureCount 49 sptr,int,sptr #comfunc global ID3D11DeviceContext_ClearRenderTargetView 50 sptr,sptr #comfunc global ID3D11DeviceContext_ClearUnorderedAccessViewUint 51 sptr,sptr #comfunc global ID3D11DeviceContext_ClearUnorderedAccessViewFloat 52 sptr,sptr #comfunc global ID3D11DeviceContext_ClearDepthStencilView 53 sptr,int,float,int #comfunc global ID3D11DeviceContext_GenerateMips 54 sptr #comfunc global ID3D11DeviceContext_SetResourceMinLOD 55 sptr,float #comfunc global ID3D11DeviceContext_GetResourceMinLOD 56 sptr #comfunc global ID3D11DeviceContext_ResolveSubresource 57 sptr,int,sptr,int,int #comfunc global ID3D11DeviceContext_ExecuteCommandList 58 sptr,int #comfunc global ID3D11DeviceContext_HSSetShaderResources 59 int,int,sptr #comfunc global ID3D11DeviceContext_HSSetShader 60 sptr,sptr,int #comfunc global ID3D11DeviceContext_HSSetSamplers 61 int,int,sptr #comfunc global ID3D11DeviceContext_HSSetConstantBuffers 62 int,int,sptr #comfunc global ID3D11DeviceContext_DSSetShaderResources 63 int,int,sptr #comfunc global ID3D11DeviceContext_DSSetShader 64 sptr,sptr,int #comfunc global ID3D11DeviceContext_DSSetSamplers 65 int,int,sptr #comfunc global ID3D11DeviceContext_DSSetConstantBuffers 66 int,int,sptr #comfunc global ID3D11DeviceContext_CSSetShaderResources 67 int,int,sptr #comfunc global ID3D11DeviceContext_CSSetUnorderedAccessViews 68 int,int,sptr,sptr #comfunc global ID3D11DeviceContext_CSSetShader 69 sptr,sptr,int #comfunc global ID3D11DeviceContext_CSSetSamplers 70 int,int,sptr #comfunc global ID3D11DeviceContext_CSSetConstantBuffers 71 int,int,sptr #comfunc global ID3D11DeviceContext_VSGetConstantBuffers 72 int,int,sptr #comfunc global ID3D11DeviceContext_PSGetShaderResources 73 int,int,sptr #comfunc global ID3D11DeviceContext_PSGetShader 74 sptr,sptr,sptr #comfunc global ID3D11DeviceContext_PSGetSamplers 75 int,int,sptr #comfunc global ID3D11DeviceContext_VSGetShader 76 sptr,sptr,sptr #comfunc global ID3D11DeviceContext_PSGetConstantBuffers 77 int,int,sptr #comfunc global ID3D11DeviceContext_IAGetInputLayout 78 sptr #comfunc global ID3D11DeviceContext_IAGetVertexBuffers 79 int,int,sptr,sptr,sptr #comfunc global ID3D11DeviceContext_IAGetIndexBuffer 80 sptr,sptr,sptr #comfunc global ID3D11DeviceContext_GSGetConstantBuffers 81 int,int,sptr #comfunc global ID3D11DeviceContext_GSGetShader 82 sptr,sptr,sptr #comfunc global ID3D11DeviceContext_IAGetPrimitiveTopology 83 sptr #comfunc global ID3D11DeviceContext_VSGetShaderResources 84 int,int,sptr #comfunc global ID3D11DeviceContext_VSGetSamplers 85 int,int,sptr #comfunc global ID3D11DeviceContext_GetPredication 86 sptr,sptr #comfunc global ID3D11DeviceContext_GSGetShaderResources 87 int,int,sptr #comfunc global ID3D11DeviceContext_GSGetSamplers 88 int,int,sptr #comfunc global ID3D11DeviceContext_OMGetRenderTargets 89 int,sptr,sptr #comfunc global ID3D11DeviceContext_OMGetRenderTargetsAndUnorderedAccessViews 90 int,sptr,sptr,int,int,sptr #comfunc global ID3D11DeviceContext_OMGetBlendState 91 sptr,sptr,sptr #comfunc global ID3D11DeviceContext_OMGetDepthStencilState 92 sptr,sptr #comfunc global ID3D11DeviceContext_SOGetTargets 93 int,sptr #comfunc global ID3D11DeviceContext_RSGetState 94 sptr #comfunc global ID3D11DeviceContext_RSGetViewports 95 sptr,sptr #comfunc global ID3D11DeviceContext_RSGetScissorRects 96 sptr,sptr #comfunc global ID3D11DeviceContext_HSGetShaderResources 97 int,int,sptr #comfunc global ID3D11DeviceContext_HSGetShader 98 sptr,sptr,sptr #comfunc global ID3D11DeviceContext_HSGetSamplers 99 int,int,sptr #comfunc global ID3D11DeviceContext_HSGetConstantBuffers 100 int,int,sptr #comfunc global ID3D11DeviceContext_DSGetShaderResources 101 int,int,sptr #comfunc global ID3D11DeviceContext_DSGetShader 102 sptr,sptr,sptr #comfunc global ID3D11DeviceContext_DSGetSamplers 103 int,int,sptr #comfunc global ID3D11DeviceContext_DSGetConstantBuffers 104 int,int,sptr #comfunc global ID3D11DeviceContext_CSGetShaderResources 105 int,int,sptr #comfunc global ID3D11DeviceContext_CSGetUnorderedAccessViews 106 int,int,sptr #comfunc global ID3D11DeviceContext_CSGetShader 107 sptr,sptr,sptr #comfunc global ID3D11DeviceContext_CSGetSamplers 108 int,int,sptr #comfunc global ID3D11DeviceContext_CSGetConstantBuffers 109 int,int,sptr #comfunc global ID3D11DeviceContext_ClearState 110 #comfunc global ID3D11DeviceContext_Flush 111 #comfunc global ID3D11DeviceContext_GetType 112 #comfunc global ID3D11DeviceContext_GetContextFlags 113 #comfunc global ID3D11DeviceContext_FinishCommandList 114 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。