d3d:d3d12:indirect
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
d3d:d3d12:indirect [2015/09/21 21:32] – [Root Descriptor] oga | d3d:d3d12:indirect [2015/09/22 20:27] (現在) – [Command (Argument Buffer) で渡せるもの] oga | ||
---|---|---|---|
行 21: | 行 21: | ||
どのようなパラメータを渡すのか、予めフォーマットを定義しておく必要があります。 | どのようなパラメータを渡すのか、予めフォーマットを定義しておく必要があります。 | ||
- | * 2015/09/21 現在: RADEON で Root32bitConstant が反映されない問題があります | + | * 2015/09/21 現在判明している問題 |
+ | * RADEON | ||
+ | * GeForce Kepler/ | ||
+ | * Intel HD Graphics では RootSignature に 32bitConstant が複数存在する場合 CommandSignature で最初の constant しか反映されません。 | ||
行 94: | 行 97: | ||
==== Root Descriptor ==== | ==== Root Descriptor ==== | ||
+ | RootDescriptor は GPU Address を直接格納します。 | ||
<code cpp> | <code cpp> | ||
- | struct | + | struct |
- | D3D12_GPU_VIRTUAL_ADDRESS | + | D3D12_GPU_VIRTUAL_ADDRESS |
- | D3D12_DRAW_INDEXED_ARGUMENTS | + | D3D12_DRAW_INDEXED_ARGUMENTS |
- | unsigned int padding; | + | unsigned int Padding; // 4byte |
}; | }; | ||
+ | |||
+ | D3D12_INDIRECT_ARGUMENT_DESC | ||
+ | memset( arg, 0, sizeof(arg) ); | ||
+ | arg[0].Type= D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW; | ||
+ | arg[0].ConstantBufferView.RootParameterIndex= 0; | ||
+ | arg[1].Type= D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED; | ||
+ | |||
+ | D3D12_COMMAND_SIGNATURE_DESC | ||
+ | memset( &desc, 0, sizeof(desc) ); | ||
+ | desc.ByteStride= sizeof(DrawArugment); | ||
+ | desc.pArgumentDescs= arg; | ||
+ | desc.NumArgumentDescs= 2; | ||
+ | |||
+ | iD3DDevice-> | ||
</ | </ | ||
+ | |||
+ | 参照するバッファの作成 | ||
+ | |||
+ | <code cpp> | ||
+ | D3D12_RESOURCE_DESC | ||
+ | memset( &desc, 0, sizeof(desc) ); | ||
+ | desc.Dimension= D3D12_RESOURCE_DIMENSION_BUFFER; | ||
+ | desc.Width= OBJECT_COUNT * AlignedGeometryBufferSize; | ||
+ | desc.Height= 1; | ||
+ | desc.DepthOrArraySize= 1; | ||
+ | desc.MipLevels= 1; | ||
+ | desc.SamleDesc.Count= 1; | ||
+ | desc.Layout= D3D12_TEXTURE_LAYOUT_ROW_MAJOR; | ||
+ | |||
+ | D3D12_HEAP_PROPERTIES | ||
+ | memset( &heap, 0, sizeof(heap) ); | ||
+ | heap.Type= D3D12_HEAP_TYPE_UPLOAD; | ||
+ | |||
+ | ID3D12Resource* | ||
+ | iD3DDevice-> | ||
+ | </ | ||
+ | |||
+ | Command を作成します。 | ||
+ | |||
+ | <code cpp> | ||
+ | D3D12_GPU_VIRTUAL_ADDRESS | ||
+ | void* ptr= nullptr; | ||
+ | iArgumentBuffer-> | ||
+ | auto arg= reinterpret_cast< | ||
+ | for( int i= 0 ; i< OBJECT_COUNT ; i++, arg++ ){ | ||
+ | arg-> | ||
+ | arg-> | ||
+ | arg-> | ||
+ | arg-> | ||
+ | arg-> | ||
+ | arg-> | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
d3d/d3d12/indirect.1442838759.txt.gz · 最終更新: 2015/09/21 21:32 by oga