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

ID3D11Device3

COM
IIDa05c8c37-d2c6-4732-b3a0-9ce0b0dc9ae6継承元ID3D11Device2自前メソッド開始 vtbl54

公式ドキュメント

デバイスインターフェイスは仮想アダプターを表し、リソースの作成に使用します。ID3D11Device3 は ID3D11Device2 のメソッドに新しいメソッドを追加します。

メソッド 11

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

vtbl 54 HRESULT CreateTexture2D1(D3D11_TEXTURE2D_DESC1* pDesc1, D3D11_SUBRESOURCE_DATA* pInitialData, ID3D11Texture2D1** ppTexture2D)

2D テクスチャを作成します。

pDesc1D3D11_TEXTURE2D_DESC1*in2D テクスチャリソースを記述する D3D11_TEXTURE2D_DESC1 構造体へのポインターです。実行時に互換性のある別の形式として解釈できる typeless リソースを作成するには、テクスチャの記述で typeless 形式を指定します。ミップマップレベルを自動生成するには、ミップマップレベル数を 0 に設定します。
pInitialDataD3D11_SUBRESOURCE_DATA*inoptional

2D テクスチャリソースのサブリソースを記述する D3D11_SUBRESOURCE_DATA 構造体の配列へのポインターです。IMMUTABLE リソースを作成する場合、アプリケーションは pInitialDataNULL を指定できません (D3D11_USAGE を参照)。リソースがマルチサンプリングされている場合、マルチサンプリングされたリソースは作成時にデータで初期化できないため、pInitialDataNULL でなければなりません。

pInitialData に何も渡さない場合、リソース用メモリの初期内容は未定義です。この場合、リソースが読み取られる前に何らかの別の方法でリソースの内容を書き込む必要があります。

この配列のサイズは、pDesc1 が指す D3D11_TEXTURE2D_DESC1 構造体の MipLevels メンバーと ArraySize メンバーの値から、次の計算で求められます。

MipLevels * ArraySize

この配列サイズの詳細については、「解説」を参照してください。

ppTexture2DID3D11Texture2D1**outoptional作成されたテクスチャの ID3D11Texture2D1 インターフェイスへのポインターを受け取るメモリブロックへのポインターです。他の入力パラメーターを検証するだけの場合は、このパラメーターに NULL を設定します (他の入力パラメーターが検証に合格すると、このメソッドは S_FALSE を返します)。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は S_OK です。失敗時のエラーコードについては、「Direct3D 11 Return Codes」を参照してください。

解説(Remarks)

CreateTexture2D1 は、複数の 2D サブリソースを含めることができる 2D テクスチャリソースを作成します。サブリソースの数はテクスチャの記述で指定します。1 つのリソース内のすべてのテクスチャは、同じ形式、サイズ、ミップマップレベル数でなければなりません。

すべてのリソースは 1 つ以上のサブリソースで構成されます。テクスチャにデータを読み込むには、アプリケーションは pInitialData が指す D3D11_SUBRESOURCE_DATA 構造体の配列として初期データを与えるか、D3DX11CreateTextureFromFile などの D3DX テクスチャ関数を使用します。

完全なミップマップチェーンを持つ 32 x 32 のテクスチャの場合、pInitialData 配列は次の 6 個の要素を持ちます。

vtbl 55 HRESULT CreateTexture3D1(D3D11_TEXTURE3D_DESC1* pDesc1, D3D11_SUBRESOURCE_DATA* pInitialData, ID3D11Texture3D1** ppTexture3D)

3D テクスチャを作成します。

pDesc1D3D11_TEXTURE3D_DESC1*in3D テクスチャリソースを記述する D3D11_TEXTURE3D_DESC1 構造体へのポインターです。実行時に互換性のある別の形式として解釈できる typeless リソースを作成するには、テクスチャの記述で typeless 形式を指定します。ミップマップレベルを自動生成するには、ミップマップレベル数を 0 に設定します。
pInitialDataD3D11_SUBRESOURCE_DATA*inoptional

3D テクスチャリソースのサブリソースを記述する D3D11_SUBRESOURCE_DATA 構造体の配列へのポインターです。IMMUTABLE リソースを作成する場合、アプリケーションは pInitialDataNULL を指定できません (D3D11_USAGE を参照)。リソースがマルチサンプリングされている場合、マルチサンプリングされたリソースは作成時にデータで初期化できないため、pInitialDataNULL でなければなりません。

pInitialData に何も渡さない場合、リソース用メモリの初期内容は未定義です。この場合、リソースが読み取られる前に何らかの別の方法でリソースの内容を書き込む必要があります。

この配列のサイズは、pDesc1 が指す D3D11_TEXTURE3D_DESC1 構造体の MipLevels メンバーの値から求められます。3D ボリュームテクスチャの配列はサポートされていません。

この配列サイズの詳細については、「解説」を参照してください。

ppTexture3DID3D11Texture3D1**outoptional作成されたテクスチャの ID3D11Texture3D1 インターフェイスへのポインターを受け取るメモリブロックへのポインターです。他の入力パラメーターを検証するだけの場合は、このパラメーターに NULL を設定します (他の入力パラメーターが検証に合格すると、このメソッドは S_FALSE を返します)。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は S_OK です。失敗時のエラーコードについては、「Direct3D 11 Return Codes」を参照してください。

解説(Remarks)

CreateTexture3D1 は、複数の 3D サブリソースを含めることができる 3D テクスチャリソースを作成します。テクスチャの数はテクスチャの記述で指定します。1 つのリソース内のすべてのテクスチャは、同じ形式、サイズ、ミップマップレベル数でなければなりません。

すべてのリソースは 1 つ以上のサブリソースで構成されます。テクスチャにデータを読み込むには、アプリケーションは pInitialData が指す D3D11_SUBRESOURCE_DATA 構造体の配列として初期データを与えるか、D3DX11CreateTextureFromFile などの D3DX テクスチャ関数を使用します。

pInitialData の各要素は、指定されたミップレベルに対して定義されるすべてのスライスを提供します。たとえば、完全なミップマップチェーンを持つ 32 x 32 x 4 のボリュームテクスチャの場合、配列は次の 6 個の要素を持ちます。

vtbl 56 HRESULT CreateRasterizerState2(D3D11_RASTERIZER_DESC2* pRasterizerDesc, ID3D11RasterizerState2** ppRasterizerState)

ラスタライザーステージの動作を指定し、UAV レンダリング時やラスタライズ時にサンプル数を強制するラスタライザーステートオブジェクトを作成します。(ID3D11Device3.CreateRasterizerState2)

pRasterizerDescD3D11_RASTERIZER_DESC2*inラスタライザーステートを記述する D3D11_RASTERIZER_DESC2 構造体へのポインターです。
ppRasterizerStateID3D11RasterizerState2**outoptional作成されたラスタライザーステートオブジェクトの ID3D11RasterizerState2 インターフェイスへのポインターを受け取るメモリブロックへのポインターです。他の入力パラメーターを検証するだけの場合は、このパラメーターに NULL を設定します (他の入力パラメーターが検証に合格すると、このメソッドは S_FALSE を返します)。

戻り値

型: HRESULT

ラスタライザーステートオブジェクトを作成するのに十分なメモリがない場合、このメソッドは E_OUTOFMEMORY を返します。その他の戻り値については、「Direct3D 11 Return Codes」を参照してください。

vtbl 57 HRESULT CreateShaderResourceView1(ID3D11Resource* pResource, D3D11_SHADER_RESOURCE_VIEW_DESC1* pDesc1, ID3D11ShaderResourceView1** ppSRView1)

リソース内のデータにアクセスするためのシェーダーリソースビューを作成します。(ID3D11Device3.CreateShaderResourceView1)

pResourceID3D11Resource*inシェーダーへの入力となるリソースへのポインターです。このリソースは D3D11_BIND_SHADER_RESOURCE フラグを指定して作成されている必要があります。
pDesc1D3D11_SHADER_RESOURCE_VIEW_DESC1*inoptionalシェーダーリソースビューを記述する D3D11_SHADER_RESOURCE_VIEW_DESC1 構造体へのポインターです。リソース全体にアクセスするビュー (リソースの作成時に使用された形式を使用) を作成するには、 このパラメーターに NULL を設定します。
ppSRView1ID3D11ShaderResourceView1**outoptional作成されたシェーダーリソースビューの ID3D11ShaderResourceView1 インターフェイスへのポインターを受け取るメモリブロックへのポインターです。他の入力パラメーターを検証するだけの場合は、このパラメーターに NULL を設定します (他の入力パラメーターが検証に合格すると、このメソッドは S_FALSE を返します)。

戻り値

型: HRESULT

シェーダーリソースビューを作成するのに十分なメモリがない場合、このメソッドは E_OUTOFMEMORY を返します。その他の戻り値については、「Direct3D 11 Return Codes」を参照してください。

vtbl 58 HRESULT CreateUnorderedAccessView1(ID3D11Resource* pResource, D3D11_UNORDERED_ACCESS_VIEW_DESC1* pDesc1, ID3D11UnorderedAccessView1** ppUAView1)

アンオーダードアクセスリソースにアクセスするためのビューを作成します。(ID3D11Device3.CreateUnorderedAccessView1)

pResourceID3D11Resource*inシェーダーへの入力となるリソースを表す ID3D11Resource へのポインターです。
pDesc1D3D11_UNORDERED_ACCESS_VIEW_DESC1*inoptionalアンオーダードアクセスビューの記述を表す D3D11_UNORDERED_ACCESS_VIEW_DESC1 構造体へのポインターです。リソース全体にアクセスするビュー (リソースの作成時に使用された形式を使用) を作成するには、このパラメーターに NULL を設定します。
ppUAView1ID3D11UnorderedAccessView1**outoptional作成されたアンオーダードアクセスビューの ID3D11UnorderedAccessView1 インターフェイスへのポインターを受け取るメモリブロックへのポインターです。他の入力パラメーターを検証するだけの場合は、このパラメーターに NULL を設定します (他の入力パラメーターが検証に合格すると、このメソッドは S_FALSE を返します)。

戻り値

型: HRESULT

アンオーダードアクセスビューを作成するのに十分なメモリがない場合、このメソッドは E_OUTOFMEMORY を返します。その他の戻り値については、「Direct3D 11 Return Codes」を参照してください。

vtbl 59 HRESULT CreateRenderTargetView1(ID3D11Resource* pResource, D3D11_RENDER_TARGET_VIEW_DESC1* pDesc1, ID3D11RenderTargetView1** ppRTView1)

リソースデータにアクセスするためのレンダーターゲットビューを作成します。(ID3D11Device3.CreateRenderTargetView1)

pResourceID3D11Resource*inレンダーターゲットを表す ID3D11Resource へのポインターです。このリソースは D3D11_BIND_RENDER_TARGET フラグを指定して作成されている必要があります。
pDesc1D3D11_RENDER_TARGET_VIEW_DESC1*inoptionalレンダーターゲットビューの記述を表す D3D11_RENDER_TARGET_VIEW_DESC1 へのポインターです。ミップマップレベル 0 のすべてのサブリソースにアクセスするビューを作成するには、このパラメーターに NULL を設定します。
ppRTView1ID3D11RenderTargetView1**outoptional作成されたレンダーターゲットビューの ID3D11RenderTargetView1 インターフェイスへのポインターを受け取るメモリブロックへのポインターです。他の入力パラメーターを検証するだけの場合は、このパラメーターに NULL を設定します (他の入力パラメーターが検証に合格すると、このメソッドは S_FALSE を返します)。

戻り値

型: HRESULT

このメソッドは Direct3D 11 Return Codes のいずれかを返します。

解説(Remarks)

レンダーターゲットビューは、ID3D11DeviceContext::OMSetRenderTargets を呼び出すことで出力マージャーステージにバインドできます。

vtbl 60 HRESULT CreateQuery1(D3D11_QUERY_DESC1* pQueryDesc1, ID3D11Query1** ppQuery1)

グラフィックスプロセッシングユニット (GPU) から情報を照会するためのクエリオブジェクトを作成します。

pQueryDesc1D3D11_QUERY_DESC1*inクエリの記述を表す D3D11_QUERY_DESC1 構造体へのポインターです。
ppQuery1ID3D11Query1**outoptional作成されたクエリオブジェクトの ID3D11Query1 インターフェイスへのポインターを受け取るメモリブロックへのポインターです。他の入力パラメーターを検証するだけの場合は、このパラメーターに NULL を設定します (他の入力パラメーターが検証に合格すると、このメソッドは S_FALSE を返します)。

戻り値

型: HRESULT

クエリオブジェクトを作成するのに十分なメモリがない場合、このメソッドは E_OUTOFMEMORY を返します。 その他の戻り値については、「Direct3D 11 Return Codes」を参照してください。

vtbl 61 void GetImmediateContext3(ID3D11DeviceContext3** ppImmediateContext)

コマンドリストを再生できるイミディエイトコンテキストを取得します。(ID3D11Device3.GetImmediateContext3)

ppImmediateContextID3D11DeviceContext3**outメソッドの完了時に、渡された ID3D11DeviceContext3 インターフェイスポインターへのポインターが初期化されます。

解説(Remarks)

     <b>GetImmediateContext3</b> メソッドは、イミディエイトコンテキストを表す
      <a href="/windows/desktop/api/d3d11_3/nn-d3d11_3-id3d11devicecontext3">ID3D11DeviceContext3</a> オブジェクトを出力します。イミディエイトコンテキストは、デバイスに即座に送信したいレンダリングを実行するために使用します。
      ほとんどのアプリにとって、イミディエイトコンテキストはシーンを描画するために使用する主要なオブジェクトです。
    

GetImmediateContext3 メソッドは、イミディエイトコンテキストの参照カウントを 1 つ増加させます。 したがって、メモリリークを避けるため、使用が終わったら返されたインターフェイスポインターに対して Release を呼び出す必要があります。

vtbl 62 HRESULT CreateDeferredContext3(DWORD ContextFlags, ID3D11DeviceContext3** ppDeferredContext)

コマンドリストを記録できるディファードコンテキストを作成します。(ID3D11Device3.CreateDeferredContext3)

ContextFlagsDWORDin将来の使用のために予約されています。0 を渡してください。
ppDeferredContextID3D11DeviceContext3**outoptionalメソッドの完了時に、渡された ID3D11DeviceContext3 インターフェイスポインターへのポインターが初期化されます。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合は、次のいずれかを返します。

vtbl 63 void WriteToSubresource(ID3D11Resource* pDstResource, DWORD DstSubresource, D3D11_BOX* pDstBox, void* pSrcData, DWORD SrcRowPitch, DWORD SrcDepthPitch)

D3D11_MAPPED_SUBRESOURCE パラメーターに NULL を指定して ID3D11DeviceContext3::Map でマップされた D3D11_USAGE_DEFAULT テクスチャにデータをコピーします。

pDstResourceID3D11Resource*inコピー先リソース ( ID3D11Resource) へのポインターです。
DstSubresourceDWORDinコピー先サブリソースを識別する 0 から始まるインデックスです。 詳細については、 D3D11CalcSubresource を参照してください。
pDstBoxD3D11_BOX*inoptional

リソースデータのコピー先となるコピー先サブリソースの領域を定義するボックスへのポインターです。 NULL の場合、データはオフセットなしでコピー先サブリソースに書き込まれます。 コピー元の寸法はコピー先に収まる必要があります ( D3D11_BOX を参照)。

空のボックスを指定すると何も行われません。 top の値が bottom 以上の場合、left の値が right 以上の場合、または front の値が back 以上の場合、そのボックスは空です。 ボックスが空の場合、このメソッドは何の操作も行いません。

pSrcDatavoid*inメモリ内のコピー元データへのポインターです。
SrcRowPitchDWORDinコピー元データの 1 行分のサイズです。
SrcDepthPitchDWORDinコピー元データの深度スライス 1 枚分のサイズです。

解説(Remarks)

指定するリソースは、 D3D11_MAPPED_SUBRESOURCE パラメーターに NULL を指定して ID3D11DeviceContext3::Map を事前に呼び出し、書き込み用にマップされた D3D11_USAGE_DEFAULT テクスチャでなければなりません。

この API は高頻度で呼び出すことを想定しています。 呼び出し側は、テクスチャの領域を段階的に更新する反復呼び出しを行い、各呼び出しで小さなバッファーを与えることでメモリを削減できます。 ただし、十分に大きな領域を指定するほうが効率的です。これにより、D3D は復帰する前にテクスチャのキャッシュラインを丸ごと埋められるからです。

効率のため、ボックス内の範囲の境界と配置は、水平方向に ( 64 / [1 ピクセルあたりのバイト数] ) ピクセルとなるようにしてください。 垂直方向の境界と配置は 2 行にするべきですが、1 バイト/ピクセル形式を使用する場合は 4 行が推奨されます。 1 回の呼び出しにつき単一の深度スライスとする場合は効率的に処理されます。 ポインターとストライドを 128 バイト境界に配置することを推奨しますが、必須ではありません。

下位のミップマップレベルに書き込む場合は、上記より大きい幅と高さを使用することを推奨します。 これは、小さいミップマップレベルが実際にはより大きなメモリブロック内に不透明なオフセットを伴って格納されることがあり、それがキャッシュラインへの配置を妨げる可能性があるためです。

vtbl 64 void ReadFromSubresource(void* pDstData, DWORD DstRowPitch, DWORD DstDepthPitch, ID3D11Resource* pSrcResource, DWORD SrcSubresource, D3D11_BOX* pSrcBox)

D3D11_MAPPED_SUBRESOURCE パラメーターに NULL を指定して ID3D11DeviceContext3::Map でマップされた D3D11_USAGE_DEFAULT テクスチャからデータをコピーします。

pDstDatavoid*outメモリ内のコピー先データへのポインターです。
DstRowPitchDWORDinコピー先データの 1 行分のサイズです。
DstDepthPitchDWORDinコピー先データの深度スライス 1 枚分のサイズです。
pSrcResourceID3D11Resource*inコピー元リソースへのポインターです ( ID3D11Resource を参照)。
SrcSubresourceDWORDinコピー先サブリソースを識別する 0 から始まるインデックスです。 詳細については、 D3D11CalcSubresource を参照してください。
pSrcBoxD3D11_BOX*inoptional

リソースデータのコピー元となるコピー先サブリソースの領域を定義するボックスへのポインターです。 NULL の場合、データはオフセットなしでコピー先サブリソースから読み取られます。 コピー先の寸法はコピー先に収まる必要があります ( D3D11_BOX を参照)。

空のボックスを指定すると何も行われません。 top の値が bottom 以上の場合、left の値が right 以上の場合、または front の値が back 以上の場合、そのボックスは空です。 ボックスが空の場合、このメソッドは何の操作も行いません。

解説(Remarks)

指定するリソースは、 D3D11_MAPPED_SUBRESOURCE パラメーターに NULL を指定して ID3D11DeviceContext3::Map を事前に呼び出し、書き込み用にマップされた D3D11_USAGE_DEFAULT テクスチャでなければなりません。

この API は高頻度で呼び出すことを想定しています。 呼び出し側は、テクスチャの領域を段階的に更新する反復呼び出しを行い、各呼び出しで小さなバッファーを与えることでメモリを削減できます。 ただし、十分に大きな領域を指定するほうが効率的です。これにより、D3D は復帰する前にテクスチャのキャッシュラインを丸ごと埋められるからです。

効率のため、ボックス内の範囲の境界と配置は、水平方向に ( 64 / [1 ピクセルあたりのバイト数] ) ピクセルとなるようにしてください。 垂直方向の境界と配置は 2 行にするべきですが、1 バイト/ピクセル形式を使用する場合は 4 行が推奨されます。 1 回の呼び出しにつき単一の深度スライスとする場合は効率的に処理されます。 ポインターとストライドを 128 バイト境界に配置することを推奨しますが、必須ではありません。

下位のミップマップレベルから読み取る場合は、上記より大きい幅と高さを使用することを推奨します。 これは、小さいミップマップレベルが実際にはより大きなメモリブロック内に不透明なオフセットを伴って格納されることがあり、それがキャッシュラインへの配置を妨げる可能性があるためです。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_ID3D11Device3 "{A05C8C37-D2C6-4732-B3A0-9CE0B0DC9AE6}"
#usecom global ID3D11Device3 IID_ID3D11Device3 "{}"
#comfunc global ID3D11Device3_CreateTexture2D1            54 var,var,sptr
#comfunc global ID3D11Device3_CreateTexture3D1            55 var,var,sptr
#comfunc global ID3D11Device3_CreateRasterizerState2      56 var,sptr
#comfunc global ID3D11Device3_CreateShaderResourceView1   57 sptr,var,sptr
#comfunc global ID3D11Device3_CreateUnorderedAccessView1  58 sptr,var,sptr
#comfunc global ID3D11Device3_CreateRenderTargetView1     59 sptr,var,sptr
#comfunc global ID3D11Device3_CreateQuery1                60 var,sptr
#comfunc global ID3D11Device3_GetImmediateContext3        61 sptr
#comfunc global ID3D11Device3_CreateDeferredContext3      62 int,sptr
#comfunc global ID3D11Device3_WriteToSubresource          63 sptr,int,var,sptr,int,int
#comfunc global ID3D11Device3_ReadFromSubresource         64 sptr,int,int,sptr,int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。