D3D11_USAGE列挙 (d3d11.h)
レンダリング中に予想されるリソースの使用を識別します。 使用率は、リソースに CPU やグラフィックス処理装置 (GPU) がアクセスできるかどうかを直接反映します。
構文
typedef enum D3D11_USAGE {
D3D11_USAGE_DEFAULT = 0,
D3D11_USAGE_IMMUTABLE = 1,
D3D11_USAGE_DYNAMIC = 2,
D3D11_USAGE_STAGING = 3
} ;
定数
D3D11_USAGE_DEFAULT 値: 0 GPU による読み取りと書き込みのアクセスを必要とするリソース。 これは、最も一般的な使用の選択肢である可能性があります。 |
D3D11_USAGE_IMMUTABLE 値: 1 GPU でのみ読み取ることができるリソース。 これは GPU によって書き込まれず、CPU によってまったくアクセスできません。 この種類のリソースは作成後に変更できないため、作成時に初期化する必要があります。 |
D3D11_USAGE_DYNAMIC 値: 2 GPU (読み取り専用) と CPU (書き込み専用) の両方からアクセスできるリソース。 動的リソースは、フレームごとに少なくとも 1 回 CPU によって更新されるリソースに適しています。 動的リソースを更新するには、 Map メソッドを使用します。 動的リソースの使用方法については、「 方法: 動的リソースを使用する」を参照してください。 |
D3D11_USAGE_STAGING 値: 3 GPU から CPU へのデータ転送 (コピー) をサポートするリソース。 |
注釈
アプリケーションは、リソースの説明でリソースの使用方法 (その使用方法) を識別します。 リソースを作成するには、D3D11_TEXTURE1D_DESC、D3D11_TEXTURE2D_DESC、D3D11_TEXTURE3D_DESC、D3D11_BUFFER_DESCなど、いくつかの構造があります。
Direct3D 9 と Direct3D 10/11 の違い: Direct3D 9 では、リソース作成時にリソースを作成するメモリの種類を指定します (D3DPOOLを使用)。 機能とパフォーマンスの最適な組み合わせを提供するメモリ プールを決定するのは、アプリケーションの仕事でした。 Direct3D 10/11 では、リソースを作成するメモリの種類 (プール) がアプリケーションで指定されなくなりました。 代わりに、リソースの目的の使用方法を指定し、(ドライバーとメモリ マネージャーと連携して) ランタイムに最適なパフォーマンスを実現するメモリの種類を選択させます。 |
リソースの使用制限
各使用によって、CPU のアクセシビリティと GPU のアクセシビリティのトレードオフが決まります。 一般に、これら 2 つのプロセッサの 1 つに対するパフォーマンスの高いアクセスは、もう一方のプロセッサのパフォーマンスが低いことを意味します。 どちらの極端にも、 D3D11_USAGE_DEFAULT と D3D11_USAGE_STAGING の使用があります。 D3D11_USAGE_DEFAULT は、ほぼ完全に GPU へのアクセスを制限します。 D3D11_USAGE_STAGING は、アクセスをほぼ完全に CPU に制限し、GPU と CPU の間のリソースのデータ転送 (コピー) のみを許可します。 これらのコピー操作は 、ID3D11DeviceContext::CopySubresourceRegion メソッドと ID3D11DeviceContext::CopyResource メソッドを使用して実行できます。 また、これらのコピー方法を使用して、同じ使用状況の 2 つのリソース間でデータをコピーすることもできます。 また、ID3D11DeviceContext::UpdateSubresource メソッドを使用して、CPU 提供のポインターから任意のリソースに直接メモリをコピーすることもできます。最も便利な方法は、D3D11_USAGE_DEFAULTを持つリソースです。D3D11_USAGE_DYNAMIC 使用は、CPU がそのデータをオンザフライで生成し、そのデータを高頻度で送信するときに、CPU から GPU へのデータフローを最適化する特別なケースです。 D3D11_USAGE_DYNAMIC は、通常、頂点データを含むリソースと定数バッファーで使用されます。 これらのリソースにデータを書き込むには、 ID3D11DeviceContext::Map メソッドと ID3D11DeviceContext::Unmap メソッドを使用します。 頂点データなど、連続して使用されるデータに対して最高のパフォーマンスを実現するには、 D3D11_MAP_WRITE_NO_OVERWRITE と D3D11_MAP_WRITE_DISCARD シーケンスを使用します。 このシーケンスの詳細については、「 D3D11_MAP_WRITE_NO_OVERWRITEでのD3D11_MAP_WRITE_DISCARDの一般的な使用方法」を参照してください。
D3D11_USAGE_IMMUTABLE 使用は、リソースの作成時に GPU がデータを 1 回だけ生成するもう 1 つの特殊なケースです。 D3D11_USAGE_IMMUTABLE はテクスチャなどのデータに適しています。このようなデータは通常、何らかのファイル形式からメモリに読み込まれるためです。 そのため、 D3D11_USAGE_IMMUTABLEを使用してテクスチャを作成すると、GPU はそのテクスチャを直接メモリに読み取ります。
次の表を使用して、CPU または GPU によってリソースにアクセスする方法を最もよく説明する使用量を選択します。 もちろん、パフォーマンスのトレードオフがあります。
Resource Usage | Default | 動的 | 変更不可 | ステージング |
---|---|---|---|---|
GPU-Read | はい | はい | はい | yes¹ |
GPU-Write | はい | yes¹ | ||
CPU-Read | yes¹ | |||
CPU-Write | はい | yes¹ |
1 - D3D11_USAGE_STAGING の使用量を持つリソースの GPU 読み取りまたは書き込みは、コピー操作に制限されます。 これらのコピー操作には 、ID3D11DeviceContext::CopySubresourceRegion と ID3D11DeviceContext::CopyResource を使用します。 また、深度ステンシル形式とマルチサンプル レイアウトは特定の GPU 設計の実装の詳細であるため、オペレーティング システムではこれらの形式とレイアウトを一般に CPU に公開できません。 したがって、ステージング リソースを深度ステンシル バッファーまたはマルチサンプリング レンダー ターゲットにすることはできません。
リソース バインド オプション
パフォーマンスを最大化するために、すべてのリソース使用オプションをパイプラインへの入力リソースまたは出力リソースとして使用できるわけではありません。 次の表に、これらの制限事項を示します。リソースは としてバインドできます | Default | 動的 | 変更不可 | ステージング |
---|---|---|---|---|
ステージへの入力 | yes² | はい 2 | はい | |
ステージからの出力 | yes² |
- 2 - 異なるビューを使用して入力と出力としてバインドされている場合、各ビューで異なるサブリソースを使用する必要があります。
- 3 - リソースは、1 つのサブリソースでのみ作成できます。 リソースをテクスチャ配列にすることはできません。 リソースをミップマップ チェーンにすることはできません。
要件
要件 | 値 |
---|---|
Header | d3d11.h |