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

ID3D12Device4

COM
IIDe865df17-a9ee-46f9-a463-3098315aa2e5継承元ID3D12Device3自前メソッド開始 vtbl51

公式ドキュメント

仮想アダプターを表します。このインターフェイスは ID3D12Device3 を拡張します。

メソッド 6

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

vtbl 51 HRESULT CreateCommandList1(DWORD nodeMask, D3D12_COMMAND_LIST_TYPE type, D3D12_COMMAND_LIST_FLAGS flags, GUID* riid, void** ppCommandList)

クローズ状態のコマンドリストを作成します。

nodeMaskDWORDin単一 GPU で動作する場合は 0 を設定します。GPU ノードが複数ある場合は、コマンドリストを作成するノード (デバイスの物理アダプター) を識別するビットを設定します。マスクの各ビットが 1 つのノードに対応します。設定できるビットは 1 つだけです。マルチアダプターシステム も参照してください。
typeD3D12_COMMAND_LIST_TYPEin作成するコマンドリストの種類を指定します。
flagsD3D12_COMMAND_LIST_FLAGSin作成フラグを指定します。
riidGUID*inppCommandList に返すコマンドリストインターフェイスのグローバル一意識別子 (GUID) への参照です。
ppCommandListvoid**outコマンドリストの ID3D12CommandList インターフェイスまたは ID3D12GraphicsCommandList インターフェイスへのポインターを受け取るメモリブロックへのポインターです。

戻り値

型: HRESULT

関数が成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコード を返します。

戻り値 説明
E_OUTOFMEMORY コマンドリストを作成するためのメモリが不足しています。

その他の返される可能性のある値については、Direct3D 12 のリターンコード を参照してください。

vtbl 52 HRESULT CreateProtectedResourceSession(D3D12_PROTECTED_RESOURCE_SESSION_DESC* pDesc, GUID* riid, void** ppSession)

コンテンツ保護のためのセッションを表すオブジェクトを作成します。

pDescD3D12_PROTECTED_RESOURCE_SESSION_DESC*in作成するセッションを記述する定数 D3D12_PROTECTED_RESOURCE_SESSION_DESC 構造体へのポインターです。
riidGUID*inID3D12ProtectedResourceSession インターフェイスのグローバル一意識別子 (GUID) への参照です。
ppSessionvoid**out作成されたセッションオブジェクトの ID3D12ProtectedResourceSession インターフェイスポインターを受け取るメモリブロックへのポインターです。
vtbl 53 HRESULT CreateCommittedResource1(D3D12_HEAP_PROPERTIES* pHeapProperties, D3D12_HEAP_FLAGS HeapFlags, D3D12_RESOURCE_DESC* pDesc, D3D12_RESOURCE_STATES InitialResourceState, D3D12_CLEAR_VALUE* pOptimizedClearValue, ID3D12ProtectedResourceSession* pProtectedSession, GUID* riidResource, void** ppvResource)

リソースと暗黙のヒープの両方を (オプションで保護セッション用に) 作成します。ヒープはリソース全体を格納できる大きさになり、リソースはそのヒープにマップされます。(ID3D12Device4::CreateCommittedResource1)

pHeapPropertiesD3D12_HEAP_PROPERTIES*inリソースのヒープのプロパティを指定する D3D12_HEAP_PROPERTIES 構造体へのポインターです。
HeapFlagsD3D12_HEAP_FLAGSinヒープのオプション。D3D12_HEAP_FLAGS 列挙定数のビット単位の OR による組み合わせです。
pDescD3D12_RESOURCE_DESC*inリソースを記述する D3D12_RESOURCE_DESC 構造体へのポインターです。
InitialResourceStateD3D12_RESOURCE_STATESin

リソースの初期状態。D3D12_RESOURCE_STATES 列挙定数のビット単位の OR による組み合わせです。

D3D12_HEAP_TYPE_UPLOAD ヒープと共にリソースを作成する場合、InitialResourceState には D3D12_RESOURCE_STATE_GENERIC_READ を設定する必要があります。

D3D12_HEAP_TYPE_READBACK ヒープと共にリソースを作成する場合、InitialResourceState には D3D12_RESOURCE_STATE_COPY_DEST を設定する必要があります。

pOptimizedClearValueD3D12_CLEAR_VALUE*inoptional

クリアカラーの既定値を記述する D3D12_CLEAR_VALUE 構造体を指定します。

pOptimizedClearValue には、クリア操作が最も最適化される値を指定します。作成するリソースが D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET または D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL フラグを持つテクスチャの場合は、クリア操作で最も頻繁に使用される値を選択してください。他の値でクリア操作を呼び出すこともできますが、リソース作成時に渡した値と一致する場合ほど効率的ではありません。

D3D12_RESOURCE_DIMENSION_BUFFER を使用する場合は、pOptimizedClearValuenullptr を設定する必要があります。

pProtectedSessionID3D12ProtectedResourceSession*inoptionalコンテンツ保護のためのセッションを表すオブジェクトへの省略可能なポインターです。指定した場合、このセッションはリソースを保護することを示します。ID3D12ProtectedResourceSessionID3D12Device4::CreateProtectedResourceSession を呼び出して取得できます。
riidResourceGUID*in

ppvResource に返すリソースインターフェイスのグローバル一意識別子 (GUID) への参照です。

riidResource には通常 ID3D12ResourceGUID を指定しますが、任意のインターフェイスの GUID を指定することもできます。リソースオブジェクトがこの GUID のインターフェイスをサポートしていない場合、作成は E_NOINTERFACE で失敗します。

ppvResourcevoid**outoptional

作成されたリソースオブジェクトの要求されたインターフェイスポインターを受け取るメモリブロックへの省略可能なポインターです。

ppvResource には nullptr を指定でき、機能テストを行えます。ppvResourcenullptr の場合、オブジェクトは作成されず、pDesc が有効であれば S_FALSE が返されます。

戻り値

型: HRESULT

関数が成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコード を返します。

戻り値 説明
E_OUTOFMEMORY リソースを作成するためのメモリが不足しています。

その他の返される可能性のある値については、Direct3D 12 のリターンコード を参照してください。

解説(Remarks)

このメソッドはリソースとヒープの両方を作成します。ヒープはリソース全体を格納できる大きさになり、リソースはそのヒープにマップされます。作成されたヒープはアプリケーションからヒープオブジェクトを取得できないため、暗黙のヒープと呼ばれます。リソースへの最後の参照を解放する前に、アプリケーションは GPU がこのリソースの読み書きを行わなくなっていることを保証する必要があります。

暗黙のヒープは、メソッドがアプリケーションに制御を返す前に GPU からアクセス可能な常駐状態になります。常駐性 (Residency) も参照してください。

リソースの GPU 仮想アドレスのマッピングは変更できません。ID3D12CommandQueue::UpdateTileMappings および ボリュームタイルリソース を参照してください。

このメソッドは複数のスレッドから同時に呼び出すことができます。

vtbl 54 HRESULT CreateHeap1(D3D12_HEAP_DESC* pDesc, ID3D12ProtectedResourceSession* pProtectedSession, GUID* riid, void** ppvHeap)

配置リソース (placed resource) および予約リソース (reserved resource) で使用できるヒープを (オプションで保護セッション用に) 作成します。

pDescD3D12_HEAP_DESC*inヒープを記述する定数 D3D12_HEAP_DESC 構造体へのポインターです。
pProtectedSessionID3D12ProtectedResourceSession*inoptional

コンテンツ保護のためのセッションを表すオブジェクトへの省略可能なポインターです。指定した場合、このセッションはヒープを保護することを示します。ID3D12ProtectedResourceSessionID3D12Device4::CreateProtectedResourceSession を呼び出して取得できます。

保護セッションを伴うヒープは、D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER フラグを指定して作成することはできません。

riidGUID*in

ppvHeap に返すヒープインターフェイスのグローバル一意識別子 (GUID) への参照です。

riidResource には通常 ID3D12HeapGUID を指定しますが、任意のインターフェイスの GUID を指定することもできます。リソースオブジェクトがこの GUID のインターフェイスをサポートしていない場合、作成は E_NOINTERFACE で失敗します。

ppvHeapvoid**outoptional

作成されたヒープオブジェクトの要求されたインターフェイスポインターを受け取るメモリブロックへの省略可能なポインターです。

ppvHeap には nullptr を指定でき、機能テストを行えます。ppvHeapnullptr の場合、オブジェクトは作成されず、pDesc が有効であれば S_FALSE が返されます。

戻り値

型: HRESULT

関数が成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコード を返します。

戻り値 説明
E_OUTOFMEMORY ヒープを作成するためのメモリが不足しています。

その他の返される可能性のある値については、Direct3D 12 のリターンコード を参照してください。

解説(Remarks)

CreateHeap1 は、配置リソースおよび予約リソースで使用できるヒープを作成します。

ヒープへの最後の参照を解放する前に、アプリケーションは GPU がこのヒープの読み書きを行わなくなっていることを保証する必要があります。

配置リソースオブジェクトは、作成元のヒープへの参照を保持します。一方、予約リソースはヒープへの各マッピングについて参照を保持しません。

vtbl 55 HRESULT CreateReservedResource1(D3D12_RESOURCE_DESC* pDesc, D3D12_RESOURCE_STATES InitialState, D3D12_CLEAR_VALUE* pOptimizedClearValue, ID3D12ProtectedResourceSession* pProtectedSession, GUID* riid, void** ppvResource)

予約された状態で、まだヒープ内のどのページにもマップされていないリソースを (オプションで保護セッション用に) 作成します。

pDescD3D12_RESOURCE_DESC*inリソースを記述する D3D12_RESOURCE_DESC 構造体へのポインターです。
InitialStateD3D12_RESOURCE_STATESinリソースの初期状態。D3D12_RESOURCE_STATES 列挙定数のビット単位の OR による組み合わせです。
pOptimizedClearValueD3D12_CLEAR_VALUE*inoptional

クリアカラーの既定値を記述する D3D12_CLEAR_VALUE 構造体を指定します。

pOptimizedClearValue には、クリア操作が最も最適化される値を指定します。作成するリソースが D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET または D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL フラグを持つテクスチャの場合は、クリア操作で最も頻繁に使用される値を選択してください。他の値でクリア操作を呼び出すこともできますが、リソース作成時に渡した値と一致する場合ほど効率的ではありません。

D3D12_RESOURCE_DIMENSION_BUFFER を使用する場合は、pOptimizedClearValuenullptr を設定する必要があります。

pProtectedSessionID3D12ProtectedResourceSession*inoptionalコンテンツ保護のためのセッションを表すオブジェクトへの省略可能なポインターです。指定した場合、このセッションはリソースを保護することを示します。ID3D12ProtectedResourceSessionID3D12Device4::CreateProtectedResourceSession を呼び出して取得できます。
riidGUID*in

ppvResource に返すリソースインターフェイスのグローバル一意識別子 (GUID) への参照です。解説 を参照してください。

riidResource には通常 ID3D12ResourceGUID を指定しますが、任意のインターフェイスの GUID を指定することもできます。リソースオブジェクトがこの GUID のインターフェイスをサポートしていない場合、作成は E_NOINTERFACE で失敗します。

ppvResourcevoid**outoptional

作成されたリソースオブジェクトの要求されたインターフェイスポインターを受け取るメモリブロックへの省略可能なポインターです。

ppvResource には nullptr を指定でき、機能テストを行えます。ppvResourcenullptr の場合、オブジェクトは作成されず、pDesc が有効であれば S_FALSE が返されます。

戻り値

型: HRESULT

関数が成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコード を返します。

戻り値 説明
E_OUTOFMEMORY リソースを作成するためのメモリが不足しています。

その他の返される可能性のある値については、Direct3D 12 のリターンコード を参照してください。

解説(Remarks)

CreateReservedResource は、Direct3D 11 の D3D11_RESOURCE_MISC_TILED に相当します。仮想メモリのみを持ち、バッキングストアを持たないリソースを作成します。

リソースを物理メモリ (すなわちヒープ) にマップするには、CopyTileMappings および UpdateTileMappings を使用する必要があります。

これらのリソース型は、アダプターがタイルリソース ティア 1 以上をサポートしている場合にのみ作成できます。タイルリソースのティアは、ヒープにマップされていないリソースへのアクセス時の動作を定義します。

vtbl 56 D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo1(DWORD visibleMask, DWORD numResourceDescs, D3D12_RESOURCE_DESC* pResourceDescs, D3D12_RESOURCE_ALLOCATION_INFO1* pResourceAllocationInfo1)
visibleMaskDWORDinリソースを可視化するGPUノードを示すビットマスク。単一GPUでは0でよい。
numResourceDescsDWORDinpResourceDescs配列に含まれるリソース記述子の個数を指定する。
pResourceDescsD3D12_RESOURCE_DESC*in割り当て情報を求める対象リソース記述子の配列。
pResourceAllocationInfo1D3D12_RESOURCE_ALLOCATION_INFO1*outoptional各リソースの個別割り当て情報(オフセット・サイズ等)を受け取る出力配列。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ID3D12Device4 "{E865DF17-A9EE-46F9-A463-3098315AA2E5}"
#usecom global ID3D12Device4 IID_ID3D12Device4 "{}"
#comfunc global ID3D12Device4_CreateCommandList1              51 int,int,int,var,sptr
#comfunc global ID3D12Device4_CreateProtectedResourceSession  52 var,var,sptr
#comfunc global ID3D12Device4_CreateCommittedResource1        53 var,int,var,int,var,sptr,var,sptr
#comfunc global ID3D12Device4_CreateHeap1                     54 var,sptr,var,sptr
#comfunc global ID3D12Device4_CreateReservedResource1         55 var,int,var,sptr,var,sptr
#comfunc global ID3D12Device4_GetResourceAllocationInfo1      56 int,int,var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。