d3d:d3d12:texture
文書の過去の版を表示しています。
目次
Texture の転送
転送手順の概要
Buffer, Texture の転送もアプリケーション側で管理する必要があります。
GPU 側の VRAM を直接 Map することはできません。 一旦 Map 可能な Buffer (D3D12_HEAP_TYPE_UPLOAD) に書き込み、GPU の Copy 命令で転送を行います。
- Texture 用の Resource 作成 (D3D12_HEAP_TYPE_DEFAULT, D3D12_RESOURCE_STATE_COPY_DEST)
- 転送用 Buffer の Resource を作成 (D3D12_HEAP_TYPE_UPLOAD, D3D12_RESOURCE_STATE_GENERIC_READ)
- レイアウト取得 ( GetCopyableFootprints() )
- レイアウトに従い、転送するピクセルデータを Buffer に書き込む
- 転送用 CommandList を作成
- CommandList に CopyTextureRegion() 等の転送コマンドを格納
- 転送に使う CommandList/Queue が描画用と共用なら ResourceBarrier が必要。D3D12_RESOURCE_STATE_COPY_DEST → D3D12_RESOURCE_STATE_GENERIC_READ
- 転送用の CommandQueue で CommandList を実行
- CommandQueue に転送完了 Fence (Sginal) を挿入
- Fence で転送完了を確認。完了後は Upload 用の Buffer と CommandList を Release できる。
例
ID3D12Resource* iTexture= nullptr; D3D12_RESOURCE_DESC desc; memset( &desc, 0, sizeof(desc) ); desc.Dimension= D3D12_RESOURCE_DIMENSION_TEXTURE2D; desc.Width= 512; desc.Height= 512; desc.DepthOrArraySize= 1; desc.MipLevels= 1; desc.Format= DXGI_FORMAT_R8G8B8A8_UNORM; desc.SampleDesc.Count= 1; D3D12_HEAP_PROPERTIES heap; memset( &heap, 0, sizeof(heap) ); heap.Type= D3D12_HEAP_TYPE_DEFAULT; iD3DDevice->CreateCommitedResource( &heap, D3D12_HEAP_FLAG_NONE, &desc, D3D12_RESOURCE_STATE_COPY_DEST, nullptr, IID_PPV_ARGS(&iTexture) );
d3d/d3d12/texture.1442746696.txt.gz · 最終更新: 2015/09/20 19:58 by oga