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

D3D12_HEAP_TYPE

列挙型
基底型i4

メンバー 5

名前10進16進説明
D3D12_HEAP_TYPE_DEFAULT10x1既定のヒープを指定します。このヒープ タイプは GPU にとって最も帯域幅が大きくなりますが、CPU からのアクセスは提供できません。GPU はこのプールのメモリに対して読み取りと書き込みを行うことができ、リソースの遷移バリアも変更できます。大半のヒープとリソースはここに配置されることが想定されており、通常はアップロード ヒープ上のリソースを介して内容が設定されます。
D3D12_HEAP_TYPE_UPLOAD20x2

アップロードに使用されるヒープを指定します。このヒープ タイプは GPU へのアップロードに最適化された CPU アクセスを備えますが、GPU にとっての帯域幅は最大にはなりません。このヒープ タイプは、CPU が一度だけ書き込み、GPU が一度だけ読み取るデータに最も適しています。ただし「GPU が一度だけ読み取る」という条件は必要以上に厳格です。GPU が一度読み取る、またはキャッシュから読み取るという使い方もこのデータの用途として許容されますが、GPU のキャッシュ設計やサイズは異なるため、そのような用途の判断は困難です。判断に迷う場合は「GPU が一度だけ読み取る」という定義に従うか、データを _DEFAULT ヒープにコピーする場合と _UPLOAD ヒープから読み取る場合の差を多数の GPU でプロファイルしてください。

このヒープ上のリソースは D3D12_RESOURCE_STATE_GENERIC_READ で作成しなければならず、そこから変更することはできません。この種のヒープの CPU アドレスは、一般に CPU からの読み取りには効率的ではありません。

_UPLOAD ヒープの典型的な用途は次のとおりです。

  • CPU からのデータを使用して _DEFAULT ヒープ上のリソースを初期化する。
  • 各頂点または各ピクセルで繰り返し読み取られる定数バッファーに動的データをアップロードする。

_UPLOAD ヒープには適さないと考えられる用途は次のとおりです。

  • フレームごとにリソースの内容を再初期化する。
  • 各 Draw が他の相当量のデータを使用する状況で、1 回おきの Draw 呼び出しでしか使われない定数データをアップロードする。
D3D12_HEAP_TYPE_READBACK30x3

読み戻しに使用されるヒープを指定します。このヒープ タイプは GPU からデータを読み戻すことに最適化された CPU アクセスを備えますが、GPU にとっての帯域幅は最大にはなりません。このヒープ タイプは、GPU が一度だけ書き込み、CPU から読み取り可能なデータに最も適しています。CPU のキャッシュ動作はライトバックであり、キャッシュ ライン未満の単位で CPU 読み取りを複数回行う場合に好都合です。

このヒープ上のリソースは D3D12_RESOURCE_STATE_COPY_DEST で作成しなければならず、そこから変更することはできません。

D3D12_HEAP_TYPE_CUSTOM40x4

カスタム ヒープを指定します。アプリケーションはメモリ プールと CPU キャッシュの特性を直接指定できます。これは UMA の最適化、マルチ エンジン、マルチ アダプター、その他の特殊なケースで役立ちます。そのためには、アプリケーションがアダプターのアーキテクチャを理解したうえで適切な選択を行う必要があります。詳細については、次を参照してください。

D3D12_FEATURE_ARCHITECTURE、 D3D12_FEATURE_DATA_ARCHITECTURE、および GetCustomHeapProperties

D3D12_HEAP_TYPE_GPU_UPLOAD50x5

公式ドキュメント

ヒープの種類を指定します。常駐している場合、ヒープは特定の CPU キャッシュ特性を持つ特定の物理メモリ プール上に配置されます。

解説(Remarks)

この列挙型は次の API 項目で使用されます。

ヒープ タイプは、抽象化されたヒープ タイプとカスタム ヒープ タイプの 2 つのカテゴリに分類されます。

抽象化されたヒープ タイプは次のとおりです。

カスタム ヒープ タイプは次のとおりです。 抽象化されたヒープ タイプ (_DEFAULT、_UPLOAD、_READBACK) は、アダプターに依存しないアプリケーションを簡単に記述するのに役立ちます。そのようなアプリケーションはアダプターのメモリ アーキテクチャを意識する必要がないためです。抽象化されたヒープ タイプを使ってアダプターに依存しないアプリケーションを簡単に記述する場合、アプリケーションは基本的にアダプターをディスクリートまたは NUMA のアダプターであるかのように扱います。ただし、これらのヒープ タイプを使用することで、UMA アダプター向けの効率的な変換も可能になります。アダプターのアーキテクチャに依存しないアプリケーションは、利用できるメモリ プールが 2 つあり、GPU 帯域幅が最も大きいプールは CPU アクセスを提供できないものと想定してください。GPU 帯域幅が最も小さいプールは CPU アクセスを提供できますが、GPU へのアップロードまたは GPU からの読み戻しのいずれかに最適化されている必要があります。

なお、テクスチャは (バッファーとは異なり) ヒープ タイプ UPLOAD や READBACK にすることはできません。

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

各言語での定義

列挙メンバーの定義。HSP タブは #define global(値は16進)。

typedef enum D3D12_HEAP_TYPE : int {
    D3D12_HEAP_TYPE_DEFAULT = 1,
    D3D12_HEAP_TYPE_UPLOAD = 2,
    D3D12_HEAP_TYPE_READBACK = 3,
    D3D12_HEAP_TYPE_CUSTOM = 4,
    D3D12_HEAP_TYPE_GPU_UPLOAD = 5
} D3D12_HEAP_TYPE;
public enum D3D12_HEAP_TYPE : int
{
    D3D12_HEAP_TYPE_DEFAULT = 1,
    D3D12_HEAP_TYPE_UPLOAD = 2,
    D3D12_HEAP_TYPE_READBACK = 3,
    D3D12_HEAP_TYPE_CUSTOM = 4,
    D3D12_HEAP_TYPE_GPU_UPLOAD = 5,
}
Public Enum D3D12_HEAP_TYPE As Integer
    D3D12_HEAP_TYPE_DEFAULT = 1
    D3D12_HEAP_TYPE_UPLOAD = 2
    D3D12_HEAP_TYPE_READBACK = 3
    D3D12_HEAP_TYPE_CUSTOM = 4
    D3D12_HEAP_TYPE_GPU_UPLOAD = 5
End Enum
import enum

class D3D12_HEAP_TYPE(enum.IntEnum):
    D3D12_HEAP_TYPE_DEFAULT = 1
    D3D12_HEAP_TYPE_UPLOAD = 2
    D3D12_HEAP_TYPE_READBACK = 3
    D3D12_HEAP_TYPE_CUSTOM = 4
    D3D12_HEAP_TYPE_GPU_UPLOAD = 5
// D3D12_HEAP_TYPE
pub const D3D12_HEAP_TYPE_DEFAULT: i32 = 1;
pub const D3D12_HEAP_TYPE_UPLOAD: i32 = 2;
pub const D3D12_HEAP_TYPE_READBACK: i32 = 3;
pub const D3D12_HEAP_TYPE_CUSTOM: i32 = 4;
pub const D3D12_HEAP_TYPE_GPU_UPLOAD: i32 = 5;
// D3D12_HEAP_TYPE
const (
	D3D12_HEAP_TYPE_DEFAULT int32 = 1
	D3D12_HEAP_TYPE_UPLOAD int32 = 2
	D3D12_HEAP_TYPE_READBACK int32 = 3
	D3D12_HEAP_TYPE_CUSTOM int32 = 4
	D3D12_HEAP_TYPE_GPU_UPLOAD int32 = 5
)
const
  D3D12_HEAP_TYPE_DEFAULT = 1;
  D3D12_HEAP_TYPE_UPLOAD = 2;
  D3D12_HEAP_TYPE_READBACK = 3;
  D3D12_HEAP_TYPE_CUSTOM = 4;
  D3D12_HEAP_TYPE_GPU_UPLOAD = 5;
// D3D12_HEAP_TYPE
pub const D3D12_HEAP_TYPE_DEFAULT: i32 = 1;
pub const D3D12_HEAP_TYPE_UPLOAD: i32 = 2;
pub const D3D12_HEAP_TYPE_READBACK: i32 = 3;
pub const D3D12_HEAP_TYPE_CUSTOM: i32 = 4;
pub const D3D12_HEAP_TYPE_GPU_UPLOAD: i32 = 5;
const
  D3D12_HEAP_TYPE_DEFAULT* = 1
  D3D12_HEAP_TYPE_UPLOAD* = 2
  D3D12_HEAP_TYPE_READBACK* = 3
  D3D12_HEAP_TYPE_CUSTOM* = 4
  D3D12_HEAP_TYPE_GPU_UPLOAD* = 5
enum D3D12_HEAP_TYPE : int {
    D3D12_HEAP_TYPE_DEFAULT = 1,
    D3D12_HEAP_TYPE_UPLOAD = 2,
    D3D12_HEAP_TYPE_READBACK = 3,
    D3D12_HEAP_TYPE_CUSTOM = 4,
    D3D12_HEAP_TYPE_GPU_UPLOAD = 5,
}
#define global D3D12_HEAP_TYPE_DEFAULT    0x1
#define global D3D12_HEAP_TYPE_UPLOAD     0x2
#define global D3D12_HEAP_TYPE_READBACK   0x3
#define global D3D12_HEAP_TYPE_CUSTOM     0x4
#define global D3D12_HEAP_TYPE_GPU_UPLOAD 0x5