ID3D11Device
COM公式ドキュメント
デバイスインターフェイスは仮想アダプターを表し、リソースの作成に使用します。
解説(Remarks)
デバイスは D3D11CreateDevice を使用して作成します。
Windows Phone 8: この API はサポートされています。
メソッド 40
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
バッファー(頂点バッファー、インデックスバッファー、またはシェーダー定数バッファー)を作成します。
| pDesc | D3D11_BUFFER_DESC* | in | バッファーを記述する D3D11_BUFFER_DESC 構造体へのポインター。 |
| pInitialData | D3D11_SUBRESOURCE_DATA* | inoptional | 初期化データを記述する D3D11_SUBRESOURCE_DATA 構造体へのポインター。 領域の確保のみを行う場合は NULL を指定します(ただし usage フラグが D3D11_USAGE_IMMUTABLE の場合は NULL にできません)。 pInitialData に何も渡さない場合、バッファーのメモリの初期内容は未定義です。 この場合、リソースが読み取られる前に何らかの別の方法でバッファーの内容を書き込む必要があります。 |
| ppBuffer | ID3D11Buffer** | outoptional | 作成されたバッファーオブジェクトの ID3D11Buffer インターフェイスへのポインターのアドレス。 このパラメーターに NULL を設定すると、他の入力パラメーターの検証のみを行います(S_FALSE は検証に成功したことを示します)。 |
戻り値
型: HRESULT
バッファーを作成するためのメモリが不足している場合、このメソッドは E_OUTOFMEMORY を返します。 その他の戻り値については Direct3D 11 の戻り値 を参照してください。
解説(Remarks)
サンプルコードについては、頂点バッファーの作成方法、 インデックスバッファーの作成方法、 定数バッファーの作成方法 を参照してください。
定数バッファー(D3D11_BUFFER_DESC の BindFlags に D3D11_BIND_CONSTANT_BUFFER を設定したもの)の場合、 D3D11_BUFFER_DESC の ByteWidth の値は 16 の倍数で、かつ D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT 以下に設定する必要があります。
Windows 8 以降のオペレーティングシステムで利用できる Direct3D 11.1 ランタイムは、CreateBuffer に次の新しい機能を提供します。
シェーダーがアクセスできる定数バッファーの最大サイズ(4096 個の 32 ビット×4 成分の定数 - 64KB)を超える定数バッファーを作成できます。 定数バッファーをパイプラインにバインドするとき(たとえば PSSetConstantBuffers や PSSetConstantBuffers1 経由)、 4096 定数の制限に収まる範囲でシェーダーがアクセスできるバッファーの範囲を定義できます。
Direct3D 11.1 ランタイム(Windows 8 以降のオペレーティングシステムで利用可能)は、機能レベル 9.1、9.2、9.3 に対してこの機能をエミュレートします。したがって、この機能は機能レベル 9.1、9.2、9.3 でサポートされます。
この機能は、機能レベル 10 以上の新しいドライバーでは常に利用できます。
Direct3D 11.1 より古いランタイムでは、4096 を超える定数バッファーを要求する CreateBuffer の呼び出しは失敗します。
1D テクスチャの配列を作成します。
| pDesc | D3D11_TEXTURE1D_DESC* | in | 1D テクスチャリソースを記述する D3D11_TEXTURE1D_DESC 構造体へのポインター。実行時に互換性のある異なるフォーマットとして解釈できる型なし(typeless)リソースを作成するには、テクスチャ記述に型なしフォーマットを指定します。ミップマップレベルを自動生成するには、ミップマップレベル数を 0 に設定します。 |
| pInitialData | D3D11_SUBRESOURCE_DATA* | inoptional | 1D テクスチャリソースのサブリソースを記述する D3D11_SUBRESOURCE_DATA 構造体の配列へのポインター。IMMUTABLE リソースを作成する場合、アプリケーションは pInitialData に NULL を指定できません(D3D11_USAGE を参照)。リソースがマルチサンプリングされている場合、マルチサンプルリソースは作成時にデータで初期化できないため、pInitialData は NULL でなければなりません。 pInitialData に何も渡さない場合、リソースのメモリの初期内容は未定義です。この場合、リソースが読み取られる前に何らかの別の方法でリソースの内容を書き込む必要があります。 この配列のサイズは、pDesc が指す D3D11_TEXTURE1D_DESC 構造体の MipLevels メンバーと ArraySize メンバーの値から、次の計算で求められます。 MipLevels * ArraySize この配列サイズの詳細については、「解説」を参照してください。 |
| ppTexture1D | ID3D11Texture1D** | outoptional | 作成されたテクスチャの ID3D11Texture1D インターフェイスへのポインターを受け取るバッファーへのポインター。このパラメーターに NULL を設定すると、他の入力パラメーターの検証のみを行います(他の入力パラメーターが検証に合格した場合、メソッドは S_FALSE を返します)。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は S_OK です。失敗時のエラーコードについては Direct3D 11 の戻り値 を参照してください。
解説(Remarks)
CreateTexture1D は、複数の 1D サブリソースを含むことができる 1D テクスチャリソースを作成します。テクスチャの数はテクスチャ記述で指定します。1 つのリソース内のすべてのテクスチャは、同じフォーマット、サイズ、ミップマップレベル数を持つ必要があります。
すべてのリソースは 1 つ以上のサブリソースで構成されます。テクスチャにデータを読み込むには、アプリケーションは pInitialData が指す D3D11_SUBRESOURCE_DATA 構造体の配列として初期データを与えるか、D3DX11CreateTextureFromFile などの D3DX テクスチャ関数を使用できます。
完全なミップマップチェーンを持つ幅 32 のテクスチャの場合、pInitialData 配列は次の 6 個の要素を持ちます。
- pInitialData[0] = 32x1
- pInitialData[1] = 16x1
- pInitialData[2] = 8x1
- pInitialData[3] = 4x1
- pInitialData[4] = 2x1
- pInitialData[5] = 1x1
2D テクスチャの配列を作成します。
| pDesc | D3D11_TEXTURE2D_DESC* | in | 2D テクスチャリソースを記述する D3D11_TEXTURE2D_DESC 構造体へのポインター。実行時に互換性のある異なるフォーマットとして解釈できる型なし(typeless)リソースを作成するには、テクスチャ記述に型なしフォーマットを指定します。ミップマップレベルを自動生成するには、ミップマップレベル数を 0 に設定します。 |
| pInitialData | D3D11_SUBRESOURCE_DATA* | inoptional | 2D テクスチャリソースのサブリソースを記述する D3D11_SUBRESOURCE_DATA 構造体の配列へのポインター。IMMUTABLE リソースを作成する場合、アプリケーションは pInitialData に NULL を指定できません(D3D11_USAGE を参照)。リソースがマルチサンプリングされている場合、マルチサンプルリソースは作成時にデータで初期化できないため、pInitialData は NULL でなければなりません。 pInitialData に何も渡さない場合、リソースのメモリの初期内容は未定義です。この場合、リソースが読み取られる前に何らかの別の方法でリソースの内容を書き込む必要があります。 この配列のサイズは、pDesc が指す D3D11_TEXTURE2D_DESC 構造体の MipLevels メンバーと ArraySize メンバーの値から、次の計算で求められます。 MipLevels * ArraySize この配列サイズの詳細については、「解説」を参照してください。 |
| ppTexture2D | ID3D11Texture2D** | outoptional | 作成されたテクスチャの ID3D11Texture2D インターフェイスへのポインターを受け取るバッファーへのポインター。このパラメーターに NULL を設定すると、他の入力パラメーターの検証のみを行います(他の入力パラメーターが検証に合格した場合、メソッドは S_FALSE を返します)。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は S_OK です。失敗時のエラーコードについては Direct3D 11 の戻り値 を参照してください。
解説(Remarks)
CreateTexture2D は、複数の 2D サブリソースを含むことができる 2D テクスチャリソースを作成します。テクスチャの数はテクスチャ記述で指定します。1 つのリソース内のすべてのテクスチャは、同じフォーマット、サイズ、ミップマップレベル数を持つ必要があります。
すべてのリソースは 1 つ以上のサブリソースで構成されます。テクスチャにデータを読み込むには、アプリケーションは pInitialData が指す D3D11_SUBRESOURCE_DATA 構造体の配列として初期データを与えるか、D3DX11CreateTextureFromFile などの D3DX テクスチャ関数を使用できます。
完全なミップマップチェーンを持つ 32 x 32 のテクスチャの場合、pInitialData 配列は次の 6 個の要素を持ちます。
- pInitialData[0] = 32x32
- pInitialData[1] = 16x16
- pInitialData[2] = 8x8
- pInitialData[3] = 4x4
- pInitialData[4] = 2x2
- pInitialData[5] = 1x1
単一の 3D テクスチャを作成します。
| pDesc | D3D11_TEXTURE3D_DESC* | in | 3D テクスチャリソースを記述する D3D11_TEXTURE3D_DESC 構造体へのポインター。実行時に互換性のある異なるフォーマットとして解釈できる型なし(typeless)リソースを作成するには、テクスチャ記述に型なしフォーマットを指定します。ミップマップレベルを自動生成するには、ミップマップレベル数を 0 に設定します。 |
| pInitialData | D3D11_SUBRESOURCE_DATA* | inoptional | 3D テクスチャリソースのサブリソースを記述する D3D11_SUBRESOURCE_DATA 構造体の配列へのポインター。IMMUTABLE リソースを作成する場合、アプリケーションは pInitialData に NULL を指定できません(D3D11_USAGE を参照)。リソースがマルチサンプリングされている場合、マルチサンプルリソースは作成時にデータで初期化できないため、pInitialData は NULL でなければなりません。 pInitialData に何も渡さない場合、リソースのメモリの初期内容は未定義です。この場合、リソースが読み取られる前に何らかの別の方法でリソースの内容を書き込む必要があります。 この配列のサイズは、pDesc が指す D3D11_TEXTURE3D_DESC 構造体の MipLevels メンバーの値から求められます。3D ボリュームテクスチャの配列はサポートされていません。 この配列サイズの詳細については、「解説」を参照してください。 |
| ppTexture3D | ID3D11Texture3D** | outoptional | 作成されたテクスチャの ID3D11Texture3D インターフェイスへのポインターを受け取るバッファーへのポインター。このパラメーターに NULL を設定すると、他の入力パラメーターの検証のみを行います(他の入力パラメーターが検証に合格した場合、メソッドは S_FALSE を返します)。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は S_OK です。失敗時のエラーコードについては Direct3D 11 の戻り値 を参照してください。
解説(Remarks)
CreateTexture3D は、複数の 3D サブリソースを含むことができる 3D テクスチャリソースを作成します。テクスチャの数はテクスチャ記述で指定します。1 つのリソース内のすべてのテクスチャは、同じフォーマット、サイズ、ミップマップレベル数を持つ必要があります。
すべてのリソースは 1 つ以上のサブリソースで構成されます。テクスチャにデータを読み込むには、アプリケーションは pInitialData が指す D3D11_SUBRESOURCE_DATA 構造体の配列として初期データを与えるか、D3DX11CreateTextureFromFile などの D3DX テクスチャ関数を使用できます。
pInitialData の各要素は、対象のミップレベルに定義されたすべてのスライスを提供します。たとえば、完全なミップマップチェーンを持つ 32 x 32 x 4 のボリュームテクスチャの場合、配列は次の 6 個の要素を持ちます。
- pInitialData[0] = 32x32、4 スライス
- pInitialData[1] = 16x16、2 スライス
- pInitialData[2] = 8x8、1 スライス
- pInitialData[3] = 4x4 、1 スライス
- pInitialData[4] = 2x2 、1 スライス
- pInitialData[5] = 1x1 、1 スライス
リソース内のデータにアクセスするためのシェーダーリソースビューを作成します。(ID3D11Device.CreateShaderResourceView)
| pResource | ID3D11Resource* | in | シェーダーへの入力となるリソースへのポインター。このリソースは D3D11_BIND_SHADER_RESOURCE フラグを指定して作成されている必要があります。 |
| pDesc | D3D11_SHADER_RESOURCE_VIEW_DESC* | inoptional | シェーダーリソースビューの記述(D3D11_SHADER_RESOURCE_VIEW_DESC を参照)へのポインター。リソース全体にアクセスするビューを作成するには、このパラメーターに NULL を設定します(リソースの作成時のフォーマットが使用されます)。 |
| ppSRView | ID3D11ShaderResourceView** | outoptional | ID3D11ShaderResourceView へのポインターのアドレス。このパラメーターに NULL を設定すると、他の入力パラメーターの検証のみを行います(他の入力パラメーターが検証に合格した場合、メソッドは S_FALSE を返します)。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
リソースは 1 つ以上のサブリソースで構成され、ビューはパイプラインがアクセスできるサブリソースを指定します。さらに、各リソースはビューを使用してパイプラインにバインドされます。シェーダーリソースビューは、次の API メソッドを使用して任意のバッファーまたはテクスチャリソースをシェーダーステージにバインドするために設計されています: ID3D11DeviceContext::VSSetShaderResources、ID3D11DeviceContext::GSSetShaderResources、ID3D11DeviceContext::PSSetShaderResources。
ビューは完全に型付けされているため、型なしリソースはパイプラインにバインドされると完全に型付けされたものになります。
Direct3D シェーダーがビデオリソースを処理できるように、ビデオリソースのシェーダーリソースビューを作成できます。これらのビデオリソースは Texture2D または Texture2DArray のいずれかです。作成するシェーダーリソースビューの D3D11_SHADER_RESOURCE_VIEW_DESC 構造体の ViewDimension メンバーの値は、ビデオリソースの種類と一致している必要があります。すなわち Texture2D には D3D11_SRV_DIMENSION_TEXTURE2D を、Texture2DArray には D3D11_SRV_DIMENSION_TEXTURE2DARRAY を指定します。さらに、基となるビデオリソースのフォーマットによって、ビューが使用できるフォーマットが制限されます。ビューが使用できるフォーマット値については、DXGI_FORMAT のリファレンスページにあるビデオリソースフォーマットの値を参照してください。
ランタイムの読み取り+書き込み競合防止ロジック(リソースが SRV と RTV または UAV として同時にバインドされることを防ぐ機構)は、簡略化のため、同一のビデオサーフェスの異なる部分に対するビューを競合として扱います。そのため、ハードウェアがこれらの同時操作を許容する場合でも、ランタイムは同一サーフェス内で luma からの読み取りと chroma へのレンダリングを同時に行うことをアプリケーションに許可しません。
Windows Phone 8: この API はサポートされています。
アンオーダードアクセスリソースにアクセスするためのビューを作成します。(ID3D11Device.CreateUnorderedAccessView)
| pResource | ID3D11Resource* | in | シェーダーへの入力となるリソースを表す ID3D11Resource へのポインター。 |
| pDesc | D3D11_UNORDERED_ACCESS_VIEW_DESC* | inoptional | シェーダーリソースビューの記述を表す D3D11_UNORDERED_ACCESS_VIEW_DESC へのポインター。リソース全体にアクセスするビューを作成するには、このパラメーターに NULL を設定します(リソースの作成時のフォーマットが使用されます)。 |
| ppUAView | ID3D11UnorderedAccessView** | outoptional | アンオーダードアクセスビューを表す ID3D11UnorderedAccessView へのポインターのアドレス。このパラメーターに NULL を設定すると、他の入力パラメーターの検証のみを行います(他の入力パラメーターが検証に合格した場合、メソッドは S_FALSE を返します)。 |
戻り値
型: HRESULT
このメソッドは、Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
Windows 8 以降で利用できる Direct3D 11.1 ランタイムでは、CreateUnorderedAccessView を次の新しい目的で使用できます。
Direct3D シェーダーがビデオリソースを処理できるように、ビデオリソースのアンオーダードアクセスビューを作成できます。これらのビデオリソースは Texture2D または Texture2DArray のいずれかです。作成するアンオーダードアクセスビューの D3D11_UNORDERED_ACCESS_VIEW_DESC 構造体の ViewDimension メンバーの値は、ビデオリソースの種類と一致している必要があります。すなわち Texture2D には D3D11_UAV_DIMENSION_TEXTURE2D を、Texture2DArray には D3D11_UAV_DIMENSION_TEXTURE2DARRAY を指定します。さらに、基となるビデオリソースのフォーマットによって、ビューが使用できるフォーマットが制限されます。ビューが使用できるフォーマット値については、DXGI_FORMAT のリファレンスページにあるビデオリソースフォーマットの値を参照してください。
ランタイムの読み取り+書き込み競合防止ロジック(リソースが SRV と RTV または UAV として同時にバインドされることを防ぐ機構)は、簡略化のため、同一のビデオサーフェスの異なる部分に対するビューを競合として扱います。そのため、ハードウェアがこれらの同時操作を許容する場合でも、ランタイムは同一サーフェス内で luma からの読み取りと chroma へのレンダリングを同時に行うことをアプリケーションに許可しません。
リソースデータにアクセスするためのレンダーターゲットビューを作成します。(ID3D11Device.CreateRenderTargetView)
| pResource | ID3D11Resource* | in | レンダーターゲットを表す ID3D11Resource へのポインター。このリソースは D3D11_BIND_RENDER_TARGET フラグを指定して作成されている必要があります。 |
| pDesc | D3D11_RENDER_TARGET_VIEW_DESC* | inoptional | レンダーターゲットビューの記述を表す D3D11_RENDER_TARGET_VIEW_DESC へのポインター。ミップマップレベル 0 のすべてのサブリソースにアクセスするビューを作成するには、このパラメーターに NULL を設定します。 |
| ppRTView | ID3D11RenderTargetView** | outoptional | ID3D11RenderTargetView へのポインターのアドレス。このパラメーターに NULL を設定すると、他の入力パラメーターの検証のみを行います(他の入力パラメーターが検証に合格した場合、メソッドは S_FALSE を返します)。 |
戻り値
型: HRESULT
このメソッドは、Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
レンダーターゲットビューは、ID3D11DeviceContext::OMSetRenderTargets を呼び出すことで出力マージャーステージにバインドできます。
Windows 8 以降で利用できる Direct3D 11.1 ランタイムでは、CreateRenderTargetView を次の新しい目的で使用できます。
Direct3D シェーダーがビデオリソースを処理できるように、ビデオリソースのレンダーターゲットビューを作成できます。これらのビデオリソースは Texture2D または Texture2DArray のいずれかです。作成するレンダーターゲットビューの D3D11_RENDER_TARGET_VIEW_DESC 構造体の ViewDimension メンバーの値は、ビデオリソースの種類と一致している必要があります。すなわち Texture2D には D3D11_RTV_DIMENSION_TEXTURE2D を、Texture2DArray には D3D11_RTV_DIMENSION_TEXTURE2DARRAY を指定します。さらに、基となるビデオリソースのフォーマットによって、ビューが使用できるフォーマットが制限されます。ビューが使用できるフォーマット値については、DXGI_FORMAT のリファレンスページにあるビデオリソースフォーマットの値を参照してください。
ランタイムの読み取り+書き込み競合防止ロジック(リソースが SRV と RTV または UAV として同時にバインドされることを防ぐ機構)は、簡略化のため、同一のビデオサーフェスの異なる部分に対するビューを競合として扱います。そのため、ハードウェアがこれらの同時操作を許容する場合でも、ランタイムは同一サーフェス内で luma からの読み取りと chroma へのレンダリングを同時に行うことをアプリケーションに許可しません。
リソースデータにアクセスするための深度ステンシルビューを作成します。(ID3D11Device.CreateDepthStencilView)
| pResource | ID3D11Resource* | in | 深度ステンシルサーフェスとなるリソースへのポインター。このリソースは D3D11_BIND_DEPTH_STENCIL フラグを指定して作成されている必要があります。 |
| pDesc | D3D11_DEPTH_STENCIL_VIEW_DESC* | inoptional | 深度ステンシルビューの記述(D3D11_DEPTH_STENCIL_VIEW_DESC を参照)へのポインター。リソース全体のミップマップレベル 0 にアクセスするビューを作成するには、このパラメーターに NULL を設定します(リソースの作成時のフォーマットが使用されます)。 |
| ppDepthStencilView | ID3D11DepthStencilView** | outoptional | ID3D11DepthStencilView へのポインターのアドレス。このパラメーターに NULL を設定すると、他の入力パラメーターの検証のみを行います(他の入力パラメーターが検証に合格した場合、メソッドは S_FALSE を返します)。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
深度ステンシルビューは、ID3D11DeviceContext::OMSetRenderTargets を呼び出すことで出力マージャーステージにバインドできます。
入力アセンブラーステージの入力バッファーデータを記述する入力レイアウトオブジェクトを作成します。(ID3D11Device.CreateInputLayout)
| pInputElementDescs | D3D11_INPUT_ELEMENT_DESC* | in | 入力アセンブラーステージの入力データ型の配列。各型は要素記述(D3D11_INPUT_ELEMENT_DESC を参照)で記述されます。 |
| NumElements | DWORD | in | 入力要素の配列に含まれる入力データ型の数。 |
| pShaderBytecodeWithInputSignature | void* | in | コンパイル済みシェーダーへのポインター。コンパイル済みシェーダーコードには入力シグネチャが含まれており、要素の配列に対して検証されます。「解説」を参照してください。 |
| BytecodeLength | UINT_PTR | in | コンパイル済みシェーダーのサイズ。 |
| ppInputLayout | ID3D11InputLayout** | outoptional | 作成された入力レイアウトオブジェクト(ID3D11InputLayout を参照)へのポインター。他の入力パラメーターを検証するには、このポインターを NULL に設定し、メソッドが S_FALSE を返すことを確認します。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は S_OK です。失敗時のエラーコードについては Direct3D 11 の戻り値 を参照してください。
解説(Remarks)
入力レイアウトオブジェクトを作成した後、描画 API を呼び出す前に入力アセンブラーステージにバインドする必要があります。
シェーダーシグネチャから入力レイアウトオブジェクトをいったん作成すれば、その入力レイアウトオブジェクトは同一の入力シグネチャ(セマンティクスを含む)を持つ他のシェーダーでも再利用できます。これにより、入力が同一の多数のシェーダーを扱う場合に、入力レイアウトオブジェクトの作成を簡素化できます。
入力レイアウト宣言のデータ型がシェーダー入力シグネチャのデータ型と一致しない場合、CreateInputLayout はコンパイル時に警告を生成します。この警告は、レジスターから読み取る際にデータが再解釈される可能性があることに注意を促すためのものです。再解釈が意図的であればこの警告は無視できますし、両方の宣言のデータ型を一致させて警告を解消することもできます。
Windows Phone 8: この API はサポートされています。
コンパイル済みシェーダーから頂点シェーダーオブジェクトを作成します。(ID3D11Device.CreateVertexShader)
| pShaderBytecode | void* | in | コンパイル済みシェーダーへのポインター。 |
| BytecodeLength | UINT_PTR | in | コンパイル済み頂点シェーダーのサイズ。 |
| pClassLinkage | ID3D11ClassLinkage* | inoptional | クラスリンケージインターフェイス(ID3D11ClassLinkage を参照)へのポインター。NULL を指定できます。 |
| ppVertexShader | ID3D11VertexShader** | outoptional | ID3D11VertexShader インターフェイスへのポインターのアドレス。NULL の場合、他のすべてのパラメーターが検証され、すべてのパラメーターが検証に合格すると、この API は S_OK ではなく S_FALSE を返します。 |
戻り値
型: HRESULT
このメソッドは、Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
Windows 8 以降で利用できる Direct3D 11.1 ランタイムは、CreateVertexShader に次の新しい機能を提供します。
次のシェーダーモデル 5.0 命令は、Direct3D 11.0 ランタイムではピクセルシェーダーとコンピュートシェーダーでのみ使用できます。Direct3D 11.1 ランタイムでは、アンオーダードアクセスビュー(UAV)がすべてのシェーダーステージで利用できるため、これらの命令をすべてのシェーダーステージで使用できます。
したがって、次のシェーダーモデル 5.0 命令を頂点シェーダーで使用した場合でも、コンパイル済みの頂点シェーダーを pShaderBytecode に渡すことができます。つまり、CreateVertexShader の呼び出しは成功します。
すべてのシェーダーステージで UAV をサポートしないデバイス(すべてのシェーダーステージでの UAV サポートが実装されていない既存のドライバーを含む)において、次のいずれかの命令を使用するコンパイル済みシェーダーを pShaderBytecode に渡すと、CreateVertexShader は失敗します。また、ハードウェアがサポートする UAV スロットの範囲を超えて UAV スロットを使用しようとするシェーダーの場合も、CreateVertexShader は失敗します。
- dcl_uav_typed
- dcl_uav_raw
- dcl_uav_structured
- ld_raw
- ld_structured
- ld_uav_typed
- store_raw
- store_structured
- store_uav_typed
- sync_uglobal
- すべてのアトミック命令および即値アトミック命令(たとえば atomic_and や imm_atomic_and)
ジオメトリシェーダーを作成します。(ID3D11Device.CreateGeometryShader)
| pShaderBytecode | void* | in | コンパイル済みシェーダーへのポインター。 |
| BytecodeLength | UINT_PTR | in | コンパイル済みジオメトリシェーダーのサイズ。 |
| pClassLinkage | ID3D11ClassLinkage* | inoptional | クラスリンケージインターフェイス(ID3D11ClassLinkage を参照)へのポインター。NULL を指定できます。 |
| ppGeometryShader | ID3D11GeometryShader** | outoptional | ID3D11GeometryShader インターフェイスへのポインターのアドレス。NULL の場合、他のすべてのパラメーターが検証され、すべての パラメーターが検証に合格すると、この API は S_OK ではなく S_FALSE を返します。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
作成後、ID3D11DeviceContext::GSSetShader を呼び出してシェーダーをデバイスに設定できます。
Windows 8 以降で利用できる Direct3D 11.1 ランタイムは、CreateGeometryShader に次の新しい機能を提供します。
次のシェーダーモデル 5.0 命令は、Direct3D 11.0 ランタイムではピクセルシェーダーとコンピュートシェーダーでのみ使用できます。Direct3D 11.1 ランタイムでは、アンオーダードアクセスビュー(UAV)がすべてのシェーダーステージで利用できるため、これらの命令をすべてのシェーダーステージで使用できます。
したがって、次のシェーダーモデル 5.0 命令をジオメトリシェーダーで使用した場合でも、コンパイル済みのジオメトリシェーダーを pShaderBytecode に渡すことができます。つまり、CreateGeometryShader の呼び出しは成功します。
すべてのシェーダーステージで UAV をサポートしないデバイス(すべてのシェーダーステージでの UAV サポートが実装されていない既存のドライバーを含む)において、次のいずれかの命令を使用するコンパイル済みシェーダーを pShaderBytecode に渡すと、CreateGeometryShader は失敗します。また、ハードウェアがサポートする UAV スロットの範囲を超えて UAV スロットを使用しようとするシェーダーの場合も、CreateGeometryShader は失敗します。
- dcl_uav_typed
- dcl_uav_raw
- dcl_uav_structured
- ld_raw
- ld_structured
- ld_uav_typed
- store_raw
- store_structured
- store_uav_typed
- sync_uglobal
- すべてのアトミック命令および即値アトミック命令(たとえば atomic_and や imm_atomic_and)
例
使用例
ID3D11GeometryShader* g_pGeometryShader11 = NULL;
ID3DBlob* pGeometryShaderBuffer = NULL;
ID3DBlob * errorbuffer = NULL;
D3DX11CompileFromFile( str, NULL, NULL, "GS", "gs_4_0", dwShaderFlags, 0, NULL,
&pGeometryShaderBuffer, &errorbuffer, NULL );
pd3dDevice->CreateGeometryShader( pGeometryShaderBuffer->GetBufferPointer(),
pGeometryShaderBuffer->GetBufferSize(), NULL, &g_pGeometryShader11 );
ストリーム出力バッファーに書き込めるジオメトリシェーダーを作成します。(ID3D11Device.CreateGeometryShaderWithStreamOutput)
| pShaderBytecode | void* | in | 標準のジオメトリシェーダーにストリーム出力を加えたもののコンパイル済みジオメトリシェーダーへのポインター。このポインターを取得する方法については、コンパイル済みシェーダーへのポインターの取得 を参照してください。 ジオメトリシェーダーを使用せずにストリーム出力を作成するには、直前のステージの出力シグネチャへのポインターを渡します。この出力シグネチャを取得するには、コンパイラー関数 D3DGetOutputSignatureBlob を呼び出します。直前のステージ(たとえば 頂点シェーダーステージ や ドメインシェーダーステージ)のコンパイル済みシェーダーへのポインターを渡すこともできます。このコンパイル済みシェーダーがデータの出力シグネチャを提供します。 |
| BytecodeLength | UINT_PTR | in | コンパイル済みジオメトリシェーダーのサイズ。 |
| pSODeclaration | D3D11_SO_DECLARATION_ENTRY* | inoptional | D3D11_SO_DECLARATION_ENTRY 配列へのポインター。NumEntries > 0 の場合、NULL にはできません。 |
| NumEntries | DWORD | in | ストリーム出力宣言のエントリ数(0 から D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT の範囲)。 |
| pBufferStrides | DWORD* | inoptional | バッファーストライドの配列。各ストライドは、そのバッファーの 1 要素のサイズです。 |
| NumStrides | DWORD | in | pBufferStrides 内のストライド(またはバッファー)の数(0 から D3D11_SO_BUFFER_SLOT_COUNT の範囲)。 |
| RasterizedStream | DWORD | in | ラスタライザーステージへ送るストリームのインデックス番号(0 から D3D11_SO_STREAM_COUNT - 1 の範囲)。 ラスタライズするストリームがない場合は D3D11_SO_NO_RASTERIZED_STREAM を設定します。 |
| pClassLinkage | ID3D11ClassLinkage* | inoptional | クラスリンケージインターフェイス(ID3D11ClassLinkage を参照)へのポインター。NULL を指定できます。 |
| ppGeometryShader | ID3D11GeometryShader** | outoptional | 作成されたジオメトリシェーダーを表す ID3D11GeometryShader インターフェイスへのポインターのアドレス。 他のパラメーターを検証するには NULL を設定します。検証に合格すると、メソッドは S_OK ではなく S_FALSE を返します。 |
戻り値
型: HRESULT
このメソッドは、Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
CreateGeometryShaderWithStreamOutput の使用方法の詳細については、ストリーム出力を伴うジオメトリシェーダーオブジェクトの作成 を参照してください。
Windows 8 以降で利用できる Direct3D 11.1 ランタイムは、CreateGeometryShaderWithStreamOutput に次の新しい機能を提供します。
次のシェーダーモデル 5.0 命令は、Direct3D 11.0 ランタイムではピクセルシェーダーとコンピュートシェーダーでのみ使用できます。Direct3D 11.1 ランタイムでは、アンオーダードアクセスビュー(UAV)がすべてのシェーダーステージで利用できるため、これらの命令をすべてのシェーダーステージで使用できます。
したがって、次のシェーダーモデル 5.0 命令をジオメトリシェーダーで使用した場合でも、コンパイル済みのジオメトリシェーダーを pShaderBytecode に渡すことができます。つまり、CreateGeometryShaderWithStreamOutput の呼び出しは成功します。
すべてのシェーダーステージで UAV をサポートしないデバイス(すべてのシェーダーステージでの UAV サポートが実装されていない既存のドライバーを含む)において、次のいずれかの命令を使用するコンパイル済みシェーダーを pShaderBytecode に渡すと、CreateGeometryShaderWithStreamOutput は失敗します。また、ハードウェアがサポートする UAV スロットの範囲を超えて UAV スロットを使用しようとするシェーダーの場合も、CreateGeometryShaderWithStreamOutput は失敗します。
- dcl_uav_typed
- dcl_uav_raw
- dcl_uav_structured
- ld_raw
- ld_structured
- ld_uav_typed
- store_raw
- store_structured
- store_uav_typed
- sync_uglobal
- すべてのアトミック命令および即値アトミック命令(たとえば atomic_and や imm_atomic_and)
ピクセルシェーダーを作成します。(ID3D11Device.CreatePixelShader)
| pShaderBytecode | void* | in | コンパイル済みシェーダーへのポインター。 |
| BytecodeLength | UINT_PTR | in | コンパイル済みピクセルシェーダーのサイズ。 |
| pClassLinkage | ID3D11ClassLinkage* | inoptional | クラスリンケージインターフェイス(ID3D11ClassLinkage を参照)へのポインター。NULL を指定できます。 |
| ppPixelShader | ID3D11PixelShader** | outoptional | ID3D11PixelShader インターフェイスへのポインターのアドレス。NULL の場合、他のすべてのパラメーターが検証され、すべてのパラメーターが検証に合格すると、この API は S_OK ではなく S_FALSE を返します。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
ピクセルシェーダーを作成した後、ID3D11DeviceContext::PSSetShader を使用してデバイスに設定できます。
ハルシェーダーを作成します。
| pShaderBytecode | void* | in | コンパイル済みシェーダーへのポインター。 |
| BytecodeLength | UINT_PTR | in | コンパイル済みシェーダーのサイズ。 |
| pClassLinkage | ID3D11ClassLinkage* | inoptional | クラスリンケージインターフェイス(ID3D11ClassLinkage を参照)へのポインター。NULL を指定できます。 |
| ppHullShader | ID3D11HullShader** | outoptional | ID3D11HullShader インターフェイスへのポインターのアドレス。 |
戻り値
型: HRESULT
このメソッドは、Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
Windows 8 以降で利用できる Direct3D 11.1 ランタイムは、CreateHullShader に次の新しい機能を提供します。
次のシェーダーモデル 5.0 命令は、Direct3D 11.0 ランタイムではピクセルシェーダーとコンピュートシェーダーでのみ使用できます。Direct3D 11.1 ランタイムでは、アンオーダードアクセスビュー(UAV)がすべてのシェーダーステージで利用できるため、これらの命令をすべてのシェーダーステージで使用できます。
したがって、次のシェーダーモデル 5.0 命令をハルシェーダーで使用した場合でも、コンパイル済みのハルシェーダーを pShaderBytecode に渡すことができます。つまり、CreateHullShader の呼び出しは成功します。
すべてのシェーダーステージで UAV をサポートしないデバイス(すべてのシェーダーステージでの UAV サポートが実装されていない既存のドライバーを含む)において、次のいずれかの命令を使用するコンパイル済みシェーダーを pShaderBytecode に渡すと、CreateHullShader は失敗します。また、ハードウェアがサポートする UAV スロットの範囲を超えて UAV スロットを使用しようとするシェーダーの場合も、CreateHullShader は失敗します。
- dcl_uav_typed
- dcl_uav_raw
- dcl_uav_structured
- ld_raw
- ld_structured
- ld_uav_typed
- store_raw
- store_structured
- store_uav_typed
- sync_uglobal
- すべてのアトミック命令および即値アトミック命令(たとえば atomic_and や imm_atomic_and)
ドメインシェーダーを作成します。
| pShaderBytecode | void* | in | コンパイル済みシェーダーへのポインター。 |
| BytecodeLength | UINT_PTR | in | コンパイル済みシェーダーのサイズ。 |
| pClassLinkage | ID3D11ClassLinkage* | inoptional | クラスリンケージインターフェイス(ID3D11ClassLinkage を参照)へのポインター。NULL を指定できます。 |
| ppDomainShader | ID3D11DomainShader** | outoptional | ID3D11DomainShader インターフェイスへのポインターのアドレス。NULL の場合、他のすべてのパラメーターが検証され、すべてのパラメーターが検証に合格すると、この API は S_OK ではなく S_FALSE を返します。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
Windows 8 以降で利用できる Direct3D 11.1 ランタイムは、CreateDomainShader に次の新しい機能を提供します。
次のシェーダーモデル 5.0 命令は、Direct3D 11.0 ランタイムではピクセルシェーダーとコンピュートシェーダーでのみ使用できます。Direct3D 11.1 ランタイムでは、アンオーダードアクセスビュー(UAV)がすべてのシェーダーステージで利用できるため、これらの命令をすべてのシェーダーステージで使用できます。
したがって、次のシェーダーモデル 5.0 命令をドメインシェーダーで使用した場合でも、コンパイル済みのドメインシェーダーを pShaderBytecode に渡すことができます。つまり、CreateDomainShader の呼び出しは成功します。
すべてのシェーダーステージで UAV をサポートしないデバイス(すべてのシェーダーステージでの UAV サポートが実装されていない既存のドライバーを含む)において、次のいずれかの命令を使用するコンパイル済みシェーダーを pShaderBytecode に渡すと、CreateDomainShader は失敗します。また、ハードウェアがサポートする UAV スロットの範囲を超えて UAV スロットを使用しようとするシェーダーの場合も、CreateDomainShader は失敗します。
- dcl_uav_typed
- dcl_uav_raw
- dcl_uav_structured
- ld_raw
- ld_structured
- ld_uav_typed
- store_raw
- store_structured
- store_uav_typed
- sync_uglobal
- すべてのアトミック命令および即値アトミック命令(たとえば atomic_and や imm_atomic_and)
コンピュートシェーダーを作成します。
| pShaderBytecode | void* | in | コンパイル済みシェーダーへのポインター。 |
| BytecodeLength | UINT_PTR | in | pShaderBytecode のコンパイル済みシェーダーのサイズ。 |
| pClassLinkage | ID3D11ClassLinkage* | inoptional | クラスリンケージインターフェイスを表す ID3D11ClassLinkage へのポインター。NULL を指定できます。 |
| ppComputeShader | ID3D11ComputeShader** | outoptional | ID3D11ComputeShader インターフェイスへのポインターのアドレス。NULL の場合、 他のすべてのパラメーターが検証されます。検証に合格すると、CreateComputeShader は S_OK ではなく S_FALSE を返します。 |
戻り値
型: HRESULT
コンピュートシェーダーを作成するためのメモリが不足している場合、このメソッドは E_OUTOFMEMORY を返します。 その他の戻り値については Direct3D 11 の戻り値 を参照してください。
解説(Remarks)
例については、コンピュートシェーダーの作成方法 および HDRToneMappingCS11 サンプル を参照してください。
動的シェーダーリンケージを有効にするためのクラスリンケージライブラリを作成します。
| ppLinkage | ID3D11ClassLinkage** | out | クラスリンケージインターフェイスへのポインター(ID3D11ClassLinkage を参照)へのポインター。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
ppLinkage に返される ID3D11ClassLinkage インターフェイスは、ID3D11Device::CreatePixelShader などの ID3D11Device のシェーダー作成メソッドにパラメーターとして渡すことで、シェーダーに関連付けられます。
例
CreateClassLinkage の使用
ID3D11ClassLinkage * g_pPSClassLinkage = NULL;
pd3dDevice->CreateClassLinkage( &g_pPSClassLinkage );
出力マージャーステージのブレンドステートをカプセル化するブレンドステートオブジェクトを作成します。(ID3D11Device.CreateBlendState)
| pBlendStateDesc | D3D11_BLEND_DESC* | in | ブレンドステートの記述(D3D11_BLEND_DESC を参照)へのポインター。 |
| ppBlendState | ID3D11BlendState** | outoptional | 作成されたブレンドステートオブジェクト(ID3D11BlendState を参照)へのポインターのアドレス。 |
戻り値
型: HRESULT
ブレンドステートオブジェクトを作成するためのメモリが不足している場合、このメソッドは E_OUTOFMEMORY を返します。 その他の戻り値については Direct3D 11 の戻り値 を参照してください。
解説(Remarks)
アプリケーションは最大 4096 個の一意なブレンドステートオブジェクトを作成できます。オブジェクトが作成されるたびに、ランタイムは同じステートを持つ既存のオブジェクトがないかを確認します。 そのようなオブジェクトが既に存在する場合、ランタイムは重複したオブジェクトを作成せず、既存のインスタンスへのポインターを返します。
Windows Phone 8: この API はサポートされています。
出力マージャーステージの深度ステンシルテスト情報をカプセル化する深度ステンシルステートオブジェクトを作成します。(ID3D11Device.CreateDepthStencilState)
| pDepthStencilDesc | D3D11_DEPTH_STENCIL_DESC* | in | 深度ステンシルステートの記述(D3D11_DEPTH_STENCIL_DESC を参照)へのポインター。 |
| ppDepthStencilState | ID3D11DepthStencilState** | outoptional | 作成された深度ステンシルステートオブジェクト(ID3D11DepthStencilState を参照)へのポインターのアドレス。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
1 つのデバイスでは、同時に 4096 個の一意な深度ステンシルステートオブジェクトを作成できます。
アプリケーションが既存のインターフェイスと同じステートを持つ深度ステンシルステートインターフェイスを作成しようとした場合、同一のインターフェイスが返され、一意な深度ステンシルステートオブジェクトの総数は変わりません。
ラスタライザーステージの動作を指定するラスタライザーステートオブジェクトを作成します。(ID3D11Device.CreateRasterizerState)
| pRasterizerDesc | D3D11_RASTERIZER_DESC* | in | ラスタライザーステートの記述(D3D11_RASTERIZER_DESC を参照)へのポインター。 |
| ppRasterizerState | ID3D11RasterizerState** | outoptional | 作成されたラスタライザーステートオブジェクト(ID3D11RasterizerState を参照)へのポインターのアドレス。 |
戻り値
型: HRESULT
コンピュートシェーダーを作成するためのメモリが不足している場合、このメソッドは E_OUTOFMEMORY を返します。その他の戻り値については Direct3D 11 の戻り値 を参照してください。
解説(Remarks)
1 つのデバイスでは、同時に 4096 個の一意なラスタライザーステートオブジェクトを作成できます。
アプリケーションが既存のインターフェイスと同じステートを持つラスタライザーステートインターフェイスを作成しようとした場合、同一のインターフェイスが返され、一意なラスタライザーステートオブジェクトの総数は変わりません。
テクスチャのサンプリング情報をカプセル化するサンプラーステートオブジェクトを作成します。(ID3D11Device.CreateSamplerState)
| pSamplerDesc | D3D11_SAMPLER_DESC* | in | サンプラーステートの記述(D3D11_SAMPLER_DESC を参照)へのポインター。 |
| ppSamplerState | ID3D11SamplerState** | outoptional | 作成されたサンプラーステートオブジェクト(ID3D11SamplerState を参照)へのポインターのアドレス。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
1 つのデバイスでは、同時に 4096 個の一意なサンプラーステートオブジェクトを作成できます。
アプリケーションが既存のインターフェイスと同じステートを持つサンプラーステートインターフェイスを作成しようとした場合、同一のインターフェイスが返され、一意なサンプラーステートオブジェクトの総数は変わりません。
このインターフェイスは、GPU から情報を照会するためのメソッドをカプセル化します。(ID3D11Device.CreateQuery)
| pQueryDesc | D3D11_QUERY_DESC* | in | クエリの記述(D3D11_QUERY_DESC を参照)へのポインター。 |
| ppQuery | ID3D11Query** | outoptional | 作成されたクエリオブジェクト(ID3D11Query を参照)へのポインターのアドレス。 |
戻り値
型: HRESULT
クエリオブジェクトを作成するためのメモリが不足している場合、このメソッドは E_OUTOFMEMORY を返します。 その他の戻り値については Direct3D 11 の戻り値 を参照してください。
プレディケートを作成します。(ID3D11Device.CreatePredicate)
| pPredicateDesc | D3D11_QUERY_DESC* | in | クエリの記述へのポインター。クエリの種類は D3D11_QUERY_SO_OVERFLOW_PREDICATE または D3D11_QUERY_OCCLUSION_PREDICATE でなければなりません(D3D11_QUERY_DESC を参照)。 |
| ppPredicate | ID3D11Predicate** | outoptional | プレディケート(ID3D11Predicate を参照)へのポインターのアドレス。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
GPU のパフォーマンスを測定するためのカウンターオブジェクトを作成します。(ID3D11Device.CreateCounter)
| pCounterDesc | D3D11_COUNTER_DESC* | in | カウンターの記述(D3D11_COUNTER_DESC を参照)へのポインター。 |
| ppCounter | ID3D11Counter** | outoptional | カウンター(ID3D11Counter を参照)へのポインターのアドレス。 |
戻り値
型: HRESULT
この関数が成功した場合は S_OK を返します。失敗した場合の戻り値は次のいずれかです: S_FALSE、E_OUTOFMEMORY、DXGI_ERROR_UNSUPPORTED、DXGI_ERROR_NONEXCLUSIVE、E_INVALIDARG。
DXGI_ERROR_UNSUPPORTED は、アプリケーションが well-known カウンターの作成を要求したものの、現在のデバイスがそれをサポートしていない場合に返されます。
DXGI_ERROR_NONEXCLUSIVE は、別のデバイスオブジェクトが現在カウンターを使用しているため、このデバイスでは現時点でカウンターを使用できないことを示します。
E_INVALIDARG は、範囲外の well-known カウンターまたはデバイス依存カウンターが要求された場合、あるいは同時にアクティブにできるカウンターを使い切った場合に返されます。
コマンドリストを記録できる遅延コンテキストを作成します。(ID3D11Device.CreateDeferredContext)
| ContextFlags | DWORD | in | 将来の使用のために予約されています。 0 を渡してください。 |
| ppDeferredContext | ID3D11DeviceContext** | outoptional | メソッドの完了時に、渡された ID3D11DeviceContext インターフェイスポインターへのポインターが初期化されます。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合は次のいずれかを返します。
- ビデオカードがシステムから物理的に取り外された場合、またはビデオカードのドライバーがアップグレードされた場合は DXGI_ERROR_DEVICE_REMOVED を返します。 このエラーが発生した場合は、デバイスを破棄して再作成する必要があります。
- 現在のコンテキストから CreateDeferredContext メソッドを呼び出せない場合は DXGI_ERROR_INVALID_CALL を返します。 たとえば、デバイスが D3D11_CREATE_DEVICE_SINGLETHREADED の値で作成されていた場合、CreateDeferredContext は DXGI_ERROR_INVALID_CALL を返します。
- ContextFlags パラメーターが無効な場合は E_INVALIDARG を返します。
- アプリケーションが利用可能なメモリを使い切った場合は E_OUTOFMEMORY を返します。
解説(Remarks)
遅延コンテキストはスレッドセーフなコンテキストで、メインのレンダリングスレッド以外のスレッドでグラフィックスコマンドを記録するために使用できます。 遅延コンテキストを使用すると、ID3D11CommandList インターフェイスにカプセル化されたコマンドリストにグラフィックスコマンドを記録できます。 シーンのすべての項目を記録した後、最終的なレンダリングのためにそれらをメインのレンダースレッドに送信できます。 この方法により、複数のスレッドで並行してレンダリング処理を実行でき、マルチコア CPU 環境でパフォーマンスが向上する可能性があります。
遅延コンテキストは複数作成できます。
Windows Phone 8: この API はサポートされています。
別のデバイスで作成された共有リソースへのアクセス権をデバイスに与えます。
| hResource | HANDLE | in | リソースハンドル。「解説」を参照してください。 |
| ReturnedInterface | GUID* | in | リソースインターフェイスのグローバル一意識別子(GUID)。「解説」を参照してください。 |
| ppResource | void** | outoptional | アクセスを取得するリソースへのポインターのアドレス。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
リソースのインターフェイスの REFIID(GUID)は、__uuidof() マクロを使用して取得できます。たとえば、__uuidof(ID3D11Buffer) はバッファーリソースのインターフェイスの GUID を取得します。
リソースの一意なハンドルの取得方法は、そのリソースを最初に作成したデバイスの種類によって異なります。
2 つの Direct3D 11 デバイス間でリソースを共有するには、ID3D11Device インターフェイスを使用して作成した場合、そのリソースは D3D11_RESOURCE_MISC_SHARED フラグを指定して作成されている必要があります。 DXGI デバイスインターフェイスを使用して作成した場合、そのリソースは常に共有されます。
リソースのインターフェイスの REFIID(GUID)は、__uuidof() マクロを使用して取得できます。 たとえば、__uuidof(ID3D11Buffer) はバッファーリソースのインターフェイスの GUID を取得します。
2 つの Direct3D 10/11 デバイス間でリソースを共有する場合、リソースの一意なハンドルは、リソースに対して IDXGIResource インターフェイスをクエリし、GetSharedHandle を呼び出すことで取得できます。
IDXGIResource* pOtherResource(NULL);
hr = pOtherDeviceResource->QueryInterface( __uuidof(IDXGIResource), (void**)&pOtherResource );
HANDLE sharedHandle;
pOtherResource->GetSharedHandle(&sharedHandle);
共有できるリソースは、ミップマップを持たない 2D テクスチャのみです。
Direct3D 9 デバイスと Direct3D 11 デバイス間でリソースを共有するには、そのテクスチャが CreateTexture の pSharedHandle 引数を使用して作成されている必要があります。 その後、共有された Direct3D 9 のハンドルを OpenSharedResource の hResource 引数に渡します。
次のコードは、関連するメソッド呼び出しを示しています。
sharedHandle = NULL; // must be set to NULL to create, can use a valid handle here to open in D3D9
pDevice9->CreateTexture(..., pTex2D_9, &sharedHandle);
...
pDevice11->OpenSharedResource(sharedHandle, __uuidof(ID3D11Resource), (void**)(&tempResource11));
tempResource11->QueryInterface(__uuidof(ID3D11Texture2D), (void**)(&pTex2D_11));
tempResource11->Release();
// now use pTex2D_11 with pDevice11
D3D9 から D3D11 へ共有するテクスチャには、次の制限があります。
- テクスチャは 2D でなければならない
- ミップレベルは 1 つのみ許可される
- テクスチャは default usage でなければならない
- テクスチャは書き込み専用でなければならない
- MSAA テクスチャは許可されない
- バインドフラグに SHADER_RESOURCE と RENDER_TARGET が設定されていなければならない
- R10G10B10A2_UNORM、R16G16B16A16_FLOAT、R8G8B8A8_UNORM のフォーマットのみが許可される
インストールされているビデオデバイスにおける、指定したフォーマットのサポート状況を取得します。(ID3D11Device.CheckFormatSupport)
| Format | DXGI_FORMAT | in | サポート状況を確認するフォーマットを表す DXGI_FORMAT 列挙値。 |
| pFormatSupport | DWORD* | out | 指定したフォーマットがインストールされているデバイスでどのようにサポートされているかを示す D3D11_FORMAT_SUPPORT 列挙値のビットフィールド。 値は OR で結合されています。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。Format パラメーターが NULL の場合は E_INVALIDARG を返し、 指定したフォーマットが存在しない場合は E_FAIL を返します。
マルチサンプリング時に利用できる品質レベルの数を取得します。(ID3D11Device.CheckMultisampleQualityLevels)
| Format | DXGI_FORMAT | in | テクスチャのフォーマット。DXGI_FORMAT を参照してください。 |
| SampleCount | DWORD | in | マルチサンプリング時のサンプル数。 |
| pNumQualityLevels | DWORD* | out | アダプターがサポートする品質レベルの数。解説 を参照してください。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
テクスチャをマルチサンプリングする場合、アダプターで利用できる品質レベルの数は、使用するテクスチャフォーマットと要求するサンプル数によって異なります。品質レベルの最大数は D3D11.h 内の D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT で定義されています。このメソッドが 0(S_OK)を返し、出力パラメーター pNumQualityLevels が正の値を受け取った場合、そのフォーマットとサンプル数の組み合わせはそのデバイスでサポートされています。組み合わせがサポートされていない場合、このメソッドは失敗を示す HRESULT コード(すなわち負の整数)を返すか、出力パラメーター pNumQualityLevels を 0 に設定するか、あるいはその両方を行います。
さらに、品質レベルの定義は各ハードウェアベンダーに委ねられていますが、この情報を知るための手段は Direct3D では提供されていません。
なお、FEATURE_LEVEL_10_1 のデバイスは、R32G32B32A32 および R32G32B32 を除くすべてのレンダーターゲットで 4x MSAA をサポートすることが必須です。FEATURE_LEVEL_11_0 のデバイスは、すべてのレンダーターゲットフォーマットで 4x MSAA を、R32G32B32A32 系のフォーマットを除くすべてのレンダーターゲットフォーマットで 8x MSAA をサポートすることが必須です。
カウンターの情報を取得します。(ID3D11Device.CheckCounterInfo)
| pCounterInfo | D3D11_COUNTER_INFO* | out | カウンター情報(D3D11_COUNTER_INFO を参照)へのポインター。 |
既存のカウンターの種類、名前、測定単位、説明を取得します。(ID3D11Device.CheckCounter)
| pDesc | D3D11_COUNTER_DESC* | in | カウンターの記述(D3D11_COUNTER_DESC を参照)へのポインター。どのカウンターの情報を取得するかを指定します。 |
| pType | D3D11_COUNTER_TYPE* | out | カウンターのデータ型(D3D11_COUNTER_TYPE を参照)へのポインター。取得するカウンターのデータ型を指定します。 |
| pActiveCounters | DWORD* | out | この種類のカウンターを作成するために必要なハードウェアカウンターの数へのポインター。同じ種類のカウンターのすべてのインスタンスは、同じハードウェアカウンターを使用します。 |
| szName | LPSTR | outoptional | カウンターの簡潔な名前が格納される文字列。アプリケーションがカウンターの名前を必要としない場合は NULL を指定できます。 |
| pNameLength | DWORD* | inoutoptional | szName に返される文字列の長さ。NULL を指定できます。 |
| szUnits | LPSTR | outoptional | カウンターが測定する単位の名前(ポインターが指すメモリに文字列を格納できる十分な領域がある場合)。NULL を指定できます。返される文字列は常に英語です。 |
| pUnitsLength | DWORD* | inoutoptional | szUnits に返される文字列の長さ。NULL を指定できます。 |
| szDescription | LPSTR | outoptional | カウンターの説明(ポインターが指すメモリに文字列を格納できる十分な領域がある場合)。NULL を指定できます。返される文字列は常に英語です。 |
| pDescriptionLength | DWORD* | inoutoptional | szDescription に返される文字列の長さ。NULL を指定できます。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
長さのパラメーターは NULL にできます。これは、アプリケーションがその長さも対応する文字列の値も必要としないことを示します。長さのパラメーターが NULL でなく、対応する文字列が NULL の場合、長さのパラメーターの入力値は無視され、対応する文字列の長さ(終端の NULL を含む)が長さのパラメーターを通じて返されます。長さと対応するパラメーターの両方が NULL でない場合、長さの入力値が十分な領域があるかどうか確認され、その後、文字列の長さ(終端の NULL 文字を含む)が長さのパラメーターを通じて返されます。
Windows Phone 8: この API はサポートされています。
現在のグラフィックスドライバーがサポートする機能に関する情報を取得します。(ID3D11Device.CheckFeatureSupport)
| Feature | D3D11_FEATURE | in | サポート状況を照会する機能を示す D3D11_FEATURE 列挙型のメンバー。 |
| pFeatureSupportData | void* | out | メソッドの完了時に、渡された構造体に機能のサポート状況を示すデータが格納されます。 |
| FeatureSupportDataSize | DWORD | in | pFeatureSupportData パラメーターに渡す構造体のサイズ。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合、pFeatureSupportData パラメーターにサポートされていないデータ型が渡されたとき、 または FeatureSupportDataSize パラメーターのサイズの不一致が検出されたときは E_INVALIDARG を返します。
解説(Remarks)
マルチスレッドのサポート状況を照会するには、Feature パラメーターに D3D11_FEATURE_THREADING を渡し、 pFeatureSupportData パラメーターに D3D11_FEATURE_DATA_THREADING 構造体を渡し、FeatureSupportDataSize パラメーターに D3D11_FEATURE_DATA_THREADING 構造体のサイズを渡します。
Feature に D3D11_FEATURE_FORMAT_SUPPORT を設定して CheckFeatureSupport を呼び出すと、このメソッドは ID3D11Device::CheckFormatSupport が返すものと同じ情報を返します。
デバイスからアプリケーション定義のデータを取得します。
| guid | GUID* | in | データに関連付けられた GUID。 |
| pDataSize | DWORD* | inout | 入力時には pData が指すバッファーのサイズ(バイト単位)を保持し、出力時には GetPrivateData が取得したデータのサイズ(バイト単位)を受け取る変数へのポインター。 |
| pData | void* | outoptional | pDataSize がデータを保持するのに十分な大きさのバッファーを示す値を指している場合に、GetPrivateData がデバイスからのデータを格納するバッファーへのポインター。 |
戻り値
型: HRESULT
このメソッドは、Direct3D 11 の戻り値 のトピックで説明されているコードのいずれかを返します。
解説(Remarks)
返されるデータが、以前に SetPrivateDataInterface で設定された IUnknown(またはその派生クラス)へのポインターである場合、プライベートデータが返される前にそのインターフェイスの参照カウントがインクリメントされます。
デバイスにデータを設定し、そのデータを GUID に関連付けます。(ID3D11Device.SetPrivateData)
| guid | GUID* | in | データに関連付ける GUID。 |
| DataSize | DWORD | in | データのサイズ。 |
| pData | void* | inoptional | このデバイスとともに格納するデータへのポインター。pData が NULL の場合、DataSize も 0 でなければならず、その GUID に以前関連付けられていたデータはすべて破棄されます。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
このメソッドでデバイスに格納したデータは、ID3D11Device::GetPrivateData で取得できます。
このメソッドで設定するデータと GUID は、通常はアプリケーション定義のものです。
デバッグレイヤー は、オブジェクトのインターフェイスポインターとそのフレンドリ名の一覧を出力することでメモリリークを報告します。既定のフレンドリ名は "<unnamed>" です。フレンドリ名を設定しておくと、どのオブジェクトインターフェイスポインターがリークの原因となったかを判別できます。フレンドリ名を設定するには、SetPrivateData メソッドと、D3Dcommon.h にある WKPDID_D3DDebugObjectName GUID を使用します。たとえば、pContext に My name というフレンドリ名を付けるには、次のコードを使用します。
static const char c_szName[] = "My name";
hr = pContext->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );
IUnknown 派生インターフェイスをこのデバイスチャイルドに関連付け、そのインターフェイスをアプリケーション定義の GUID に関連付けます。(ID3D11Device.SetPrivateDataInterface)
| guid | GUID* | in | インターフェイスに関連付ける GUID。 |
| pData | IUnknown* | inoptional | デバイスオブジェクトに関連付ける IUnknown 派生インターフェイスへのポインター。設定時に参照カウントがインクリメントされ、ID3D11Device が破棄されたとき、または同じ GUID で SetPrivateData や SetPrivateDataInterface を呼び出してデータが上書きされたときにデクリメントされます。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
ハードウェアデバイスの機能レベルを取得します。(ID3D11Device.GetFeatureLevel)
戻り値
ハードウェアデバイスの機能レベルを示す D3D_FEATURE_LEVEL 列挙型のメンバー。
解説(Remarks)
機能レベル はデバイスの能力を決定します。
D3D11CreateDevice でデバイスを作成した呼び出しで使用されたフラグを取得します。
戻り値
型: UINT
デバイスの作成に使用されたフラグを含むビットフィールド。D3D11_CREATE_DEVICE_FLAG を参照してください。
デバイスが取り外された理由を取得します。(ID3D11Device.GetDeviceRemovedReason)
戻り値
型: HRESULT
返される可能性のある値は次のとおりです。
- DXGI_ERROR_DEVICE_HUNG
- DXGI_ERROR_DEVICE_REMOVED
- DXGI_ERROR_DEVICE_RESET
- DXGI_ERROR_DRIVER_INTERNAL_ERROR
- DXGI_ERROR_INVALID_CALL
- S_OK
コマンドリストを再生できる即時コンテキストを取得します。(ID3D11Device.GetImmediateContext)
| ppImmediateContext | ID3D11DeviceContext** | out | メソッドの完了時に、渡された ID3D11DeviceContext インターフェイスポインターへのポインターが初期化されます。 |
解説(Remarks)
GetImmediateContext メソッドは、デバイスに即座に送信したいレンダリングを実行するために使用する即時コンテキストを表す ID3D11DeviceContext オブジェクトを返します。ほとんどのアプリケーションにおいて、即時コンテキストはシーンを描画するために使用する主要なオブジェクトです。
GetImmediateContext メソッドは、即時コンテキストの参照カウントを 1 つインクリメントします。そのため、メモリリークを避けるには、使い終わったときに返されたインターフェイスポインターに対して Release を呼び出す必要があります。
例外モードフラグを取得します。(ID3D11Device.SetExceptionMode)
| RaiseFlags | DWORD | in | 1 つ以上の例外フラグを含む値。各フラグは、例外を発生させる条件を指定します。フラグは D3D11_RAISE_FLAG に列挙されています。既定値の 0 は、フラグがないことを意味します。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 11 の戻り値 のいずれかを返します。
解説(Remarks)
例外モードフラグを設定すると、エラー条件を継続不能な例外に昇格させることができます。
エラーが発生すると、Direct3D デバイスは DEVICEREMOVED 状態になり、該当する例外フラグが設定されていれば例外が発生します。発生した例外はアプリケーションを終了させるように設計されています。終了前にアプリケーションがデータを永続化できる最後の機会は、UnhandledExceptionFilter を使用することです(構造化例外処理 を参照)。一般に、UnhandledExceptionFilter は、アプリケーションがクラッシュしているときにデータを(たとえばディスクへ)永続化しようとするために利用されます。UnhandledExceptionFilter 中に実行されるコードは、(プロセスが破損している可能性があるため)確実に実行される保証はありません。UnhandledExceptionFilter が再びクラッシュする前に永続化できたデータは、疑わしいものとして扱い、破損していない新しいプロセスで使用可能かどうかを検査する必要があります。
例外モードフラグを取得します。(ID3D11Device.GetExceptionMode)
戻り値
型: UINT
1 つ以上の例外フラグを含む値。各フラグは、例外を発生させる条件を指定します。フラグは D3D11_RAISE_FLAG に列挙されています。既定値の 0 は、フラグがないことを意味します。
解説(Remarks)
例外モードフラグは、エラー条件を継続不能な例外に昇格させるために使用します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID3D11Device "{DB6F6DDB-AC77-4E88-8253-819DF9BBF140}" #usecom global ID3D11Device IID_ID3D11Device "{}" #comfunc global ID3D11Device_CreateBuffer 3 var,var,sptr #comfunc global ID3D11Device_CreateTexture1D 4 var,var,sptr #comfunc global ID3D11Device_CreateTexture2D 5 var,var,sptr #comfunc global ID3D11Device_CreateTexture3D 6 var,var,sptr #comfunc global ID3D11Device_CreateShaderResourceView 7 sptr,var,sptr #comfunc global ID3D11Device_CreateUnorderedAccessView 8 sptr,var,sptr #comfunc global ID3D11Device_CreateRenderTargetView 9 sptr,var,sptr #comfunc global ID3D11Device_CreateDepthStencilView 10 sptr,var,sptr #comfunc global ID3D11Device_CreateInputLayout 11 var,int,sptr,sptr,sptr #comfunc global ID3D11Device_CreateVertexShader 12 sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CreateGeometryShader 13 sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CreateGeometryShaderWithStreamOutput 14 sptr,sptr,var,int,var,int,int,sptr,sptr #comfunc global ID3D11Device_CreatePixelShader 15 sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CreateHullShader 16 sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CreateDomainShader 17 sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CreateComputeShader 18 sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CreateClassLinkage 19 sptr #comfunc global ID3D11Device_CreateBlendState 20 var,sptr #comfunc global ID3D11Device_CreateDepthStencilState 21 var,sptr #comfunc global ID3D11Device_CreateRasterizerState 22 var,sptr #comfunc global ID3D11Device_CreateSamplerState 23 var,sptr #comfunc global ID3D11Device_CreateQuery 24 var,sptr #comfunc global ID3D11Device_CreatePredicate 25 var,sptr #comfunc global ID3D11Device_CreateCounter 26 var,sptr #comfunc global ID3D11Device_CreateDeferredContext 27 int,sptr #comfunc global ID3D11Device_OpenSharedResource 28 sptr,var,sptr #comfunc global ID3D11Device_CheckFormatSupport 29 int,var #comfunc global ID3D11Device_CheckMultisampleQualityLevels 30 int,int,var #comfunc global ID3D11Device_CheckCounterInfo 31 var #comfunc global ID3D11Device_CheckCounter 32 var,var,var,var,var,var,var,var,var #comfunc global ID3D11Device_CheckFeatureSupport 33 int,sptr,int #comfunc global ID3D11Device_GetPrivateData 34 var,var,sptr #comfunc global ID3D11Device_SetPrivateData 35 var,int,sptr #comfunc global ID3D11Device_SetPrivateDataInterface 36 var,sptr #comfunc global ID3D11Device_GetFeatureLevel 37 #comfunc global ID3D11Device_GetCreationFlags 38 #comfunc global ID3D11Device_GetDeviceRemovedReason 39 #comfunc global ID3D11Device_GetImmediateContext 40 sptr #comfunc global ID3D11Device_SetExceptionMode 41 int #comfunc global ID3D11Device_GetExceptionMode 42 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ID3D11Device "{DB6F6DDB-AC77-4E88-8253-819DF9BBF140}" #usecom global ID3D11Device IID_ID3D11Device "{}" #comfunc global ID3D11Device_CreateBuffer 3 sptr,sptr,sptr #comfunc global ID3D11Device_CreateTexture1D 4 sptr,sptr,sptr #comfunc global ID3D11Device_CreateTexture2D 5 sptr,sptr,sptr #comfunc global ID3D11Device_CreateTexture3D 6 sptr,sptr,sptr #comfunc global ID3D11Device_CreateShaderResourceView 7 sptr,sptr,sptr #comfunc global ID3D11Device_CreateUnorderedAccessView 8 sptr,sptr,sptr #comfunc global ID3D11Device_CreateRenderTargetView 9 sptr,sptr,sptr #comfunc global ID3D11Device_CreateDepthStencilView 10 sptr,sptr,sptr #comfunc global ID3D11Device_CreateInputLayout 11 sptr,int,sptr,sptr,sptr #comfunc global ID3D11Device_CreateVertexShader 12 sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CreateGeometryShader 13 sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CreateGeometryShaderWithStreamOutput 14 sptr,sptr,sptr,int,sptr,int,int,sptr,sptr #comfunc global ID3D11Device_CreatePixelShader 15 sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CreateHullShader 16 sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CreateDomainShader 17 sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CreateComputeShader 18 sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CreateClassLinkage 19 sptr #comfunc global ID3D11Device_CreateBlendState 20 sptr,sptr #comfunc global ID3D11Device_CreateDepthStencilState 21 sptr,sptr #comfunc global ID3D11Device_CreateRasterizerState 22 sptr,sptr #comfunc global ID3D11Device_CreateSamplerState 23 sptr,sptr #comfunc global ID3D11Device_CreateQuery 24 sptr,sptr #comfunc global ID3D11Device_CreatePredicate 25 sptr,sptr #comfunc global ID3D11Device_CreateCounter 26 sptr,sptr #comfunc global ID3D11Device_CreateDeferredContext 27 int,sptr #comfunc global ID3D11Device_OpenSharedResource 28 sptr,sptr,sptr #comfunc global ID3D11Device_CheckFormatSupport 29 int,sptr #comfunc global ID3D11Device_CheckMultisampleQualityLevels 30 int,int,sptr #comfunc global ID3D11Device_CheckCounterInfo 31 sptr #comfunc global ID3D11Device_CheckCounter 32 sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr #comfunc global ID3D11Device_CheckFeatureSupport 33 int,sptr,int #comfunc global ID3D11Device_GetPrivateData 34 sptr,sptr,sptr #comfunc global ID3D11Device_SetPrivateData 35 sptr,int,sptr #comfunc global ID3D11Device_SetPrivateDataInterface 36 sptr,sptr #comfunc global ID3D11Device_GetFeatureLevel 37 #comfunc global ID3D11Device_GetCreationFlags 38 #comfunc global ID3D11Device_GetDeviceRemovedReason 39 #comfunc global ID3D11Device_GetImmediateContext 40 sptr #comfunc global ID3D11Device_SetExceptionMode 41 int #comfunc global ID3D11Device_GetExceptionMode 42 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。