D3D10_USAGE

レンダリング時に想定されるリソース使用法を特定します。この使用法は、CPU や GPU がリソースにアクセス可能かどうかを直接反映したものです。

typedef enum D3D10_USAGE
{
    D3D10_USAGE_DEFAULT = 0,
    D3D10_USAGE_IMMUTABLE = 1,
    D3D10_USAGE_DYNAMIC = 2,
    D3D10_USAGE_STAGING = 3,
} D3D10_USAGE;

定数

  • D3D10_USAGE_DEFAULT
    GPU による読み取りおよび書き込みアクセスを必要とするリソースです。これは最も一般的な使用法の選択です。
  • D3D10_USAGE_IMMUTABLE
    GPU による読み取りのみが可能なリソースです。GPU がこのリソースに書き込むことはできません。また、CPU は一切アクセスできません。このタイプのリソースは、作成後には変更できないため、作成時に初期化する必要があります。
  • D3D10_USAGE_DYNAMIC
    GPU (読み取りのみ) と CPU (書き込みのみ) によるアクセスが可能なリソースです。CPU によってフレームごとに 1 回以上更新されるリソースには、動的リソースを選択することをお奨めします。動的リソースを更新する方法は 2 つあります。データの配置がリソース内での格納方法と同じである場合は ID3D10Device::UpdateSubresource を使用します。それ以外の場合は Map メソッドを使用します。
  • D3D10_USAGE_STAGING
    GPU から CPU へのデータ転送 (コピー) をサポートするリソースです。

解説 

アプリケーションは、リソースの記述によってリソースの使用目的 (使用法) を特定します。リソースの作成に使用される構造体には、次のものがあります。D3D10_TEXTURE1D_DESCD3D10_TEXTURE2D_DESCD3D10_TEXTURE3D_DESCD3D10_BUFFER_DESC、および D3DX10_IMAGE_LOAD_INFO

Direct3D 9 と Direct3D 10 の違い

Direct3D 9 では、リソースが作成されるメモリーの種類を、リソース作成時に指定します (D3DPOOL を使用)。機能とパフォーマンスの最適な組合せがどのメモリー プールで得られるかは、アプリケーションが判断する事項でした。

Direct3D 10 では、アプリケーションはリソースが作成されるメモリーの種類 (プール) を指定する必要はありません。代わりにリソースの使用法を指定し、最適なパフォーマンスが得られるメモリーの種類の選択はランタイムに任せます (ランタイムはドライバーおよびメモリー マネージャーと連携してこれを行います)。

リソースの使用に関する制限

それぞれの使用法には、機能とパフォーマンスの間でのトレードオフが存在します。一般に、リソースへのアクセスは次の API によって実行されます。

次の表を使用して、CPU や GPU によるリソースへのアクセスに関する最適な使用法を選択してください。当然ながら、これらにはパフォーマンスに関するトレードオフが存在します。

リソースの使用方法 デフォルト 動的 固定 ステージング
GPU による読み取り 可 1 可 1、2
GPU による書き込み 可 1 可 1、2
CPU による読み取り 可 1、2
CPU による書き込み 可 1、2
リソースのバインド オプション

パフォーマンスの最適化を目的として、リソース使用法オプションの中にはパイプラインへの入力または出力リソースとして使用できないものがあります。次の表に、これらの制約事項を示します。

リソースのバインド方法 デフォルト 動的 固定 ステージング
ステージへの入力 可 3 可 4
ステージからの出力 可 3
  • 3 - 入力および出力としてバインドする際に異なるビューを使用する場合は、それぞれのビューで異なるサブリソースを使用する必要があります。
  • 4 - リソースを作成する際に 1 つのサブリソースしか使用できません。リソースにはテクスチャー配列を指定できません。リソースにはミップマップ チェーンを指定できません。

要件

ヘッダー: D3D10.h 宣言

関連項目

リソース列挙型