Recursos em blocos de volume (Direct3D 12)
Texturas de volume (3D) podem ser usadas como recursos em bloco, observando que a resolução de blocos é tridimensional.
Visão geral
Os recursos em blocos separam um objeto de recurso Direct3D de sua memória de backup (os recursos no passado tinham uma relação 1:1 com a memória de backup). Isso permite uma variedade de cenários interessantes, como streaming em dados de textura e reutilização ou redução do uso de memória.
Há suporte para recursos em bloco de textura 2D no Direct3D 11.2. O suporte opcional para texturas em bloco 3D está disponível para Direct3D 12 e Direct3D 11.3 (consulte D3D12_TILED_RESOURCES_TIER).
As dimensões de recurso típicas usadas no bloco são blocos 4 x 4 para texturas 2D e 4 x 4 x 4 blocos para texturas 3D.
Bits/pixel (1 amostra/pixel) | Dimensões de bloco (pixels, w x h x d) |
---|---|
8 | 64x32x32 |
16 | 32x32x32 |
32 | 32x32x16 |
64 | 32x16x16 |
128 | 16x16x16 |
BC 1,4 | 128x64x16 |
BC 2,3,5,6,7 | 64x64x16 |
Observe que não há suporte para os seguintes formatos com recursos em bloco: formatos de 96bpp, formatos de vídeo, R1_UNORM, R8G8_B8G8_UNORM, R8R8_G8B8_UNORM.
Nos diagramas abaixo, cinza escuro representa blocos NULL.
- mapeamento padrão de recurso em bloco de textura 3D (mip mais detalhado)
- mapeamento padrão de recurso em bloco de textura 3D (segundo mip mais detalhado)
- recurso em bloco 3D de textura (mip mais detalhado)
- recurso em bloco 3D de textura (segundo mip mais detalhado)
- recurso de bloco 3D de textura (bloco único)
- recurso em blocos 3D de textura (caixa uniforme)
Mapeamento padrão de recurso em blocos de textura 3D (mip mais detalhado)
Mapeamento padrão de recurso em bloco de textura 3D (segundo mip mais detalhado)
de mip mais detalhado
Recurso em blocos de textura 3D (mip mais detalhado)
O código a seguir configura um recurso em bloco 3D no mip mais detalhado.
D3D12_TILED_RESOURCE_COORDINATE trCoord{};
trCoord.X = 1;
trCoord.Y = 0;
trCoord.Z = 0;
trCoord.Subresource = 0;
D3D12_TILE_REGION_SIZE trSize{};
trSize.bUseBox = false;
trSize.NumTiles = 63;
Recurso em blocos 3D de textura (segundo mip mais detalhado)
O código a seguir configura um recurso em bloco 3D e o segundo mip mais detalhado.
D3D12_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 0;
trCoord.Z = 0;
trCoord.Subresource = 1;
D3D12_TILE_REGION_SIZE trSize;
trSize.bUseBox = false;
trSize.NumTiles = 6;
Recurso em bloco de textura 3D (bloco único)
O código a seguir configura um único recurso de bloco.
D3D12_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 1;
trCoord.Z = 1;
trCoord.Subresource = 0;
D3D12_TILE_REGION_SIZE trSize;
trSize.bUseBox = true;
trSize.NumTiles = 27;
trSize.Width = 3;
trSize.Height = 3;
trSize.Depth = 3;
Recurso em blocos 3D de textura (caixa uniforme)
O código a seguir configura um recurso em bloco de caixa uniforme (observe a instrução trSize.bUseBox = true;) :
D3D12_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 0;
trCoord.Y = 1;
trCoord.Z = 0;
trCoord.Subresource = 0;
D3D12_TILE_REGION_SIZE trSize;
trSize.bUseBox = true;
trSize.NumTiles = 27;
trSize.Width = 3;
trSize.Height = 3;
trSize.Depth = 3;
APIs de recurso em bloco
As mesmas chamadas de API são usadas para recursos em blocos 2D e 3D.
Enumerações
- D3D12_TILED_RESOURCES_TIER: determina o nível de suporte a recursos em bloco.
- D3D12_FORMAT_SUPPORT2: usado para testar o suporte a recursos em bloco.
- D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS: determina o suporte a recursos em bloco em um recurso de várias amostras.
- D3D12_TILE_COPY_FLAGS: contém sinalizadores para copiar de e para recursos em blocos giratórios e buffers lineares.
Structs
- D3D12_TILED_RESOURCE_COORDINATE: contém a coordenada x, y e z e a referência de sub-fonte. Observe que há uma estrutura auxiliar: CD3DX12_TILED_RESOURCE_COORDINATE.
- D3D12_TILE_REGION_SIZE: especifica o tamanho e o número de blocos da região em blocos.
- D3D12_TILE_SHAPE: a forma do bloco como largura, altura e profundidade em texels.
- D3D12_FEATURE_DATA_D3D12_OPTIONS: mantém o nível de camada de recurso do bloco com suporte e um volumeTiledResourcesSupportedbooliano, indicando se há suporte para recursos em bloco de volume.
Métodos
- ID3D12Device::CheckFeatureSupport: usado para determinar quais recursos e em qual camada há suporte para o hardware atual.
- ID3D12GraphicsCommandList::CopyTiles: copia blocos do buffer para o recurso em bloco ou vice-versa.
- ID3D12CommandQueue::UpdateTileMappings: atualiza mapeamentos de locais de bloco em recursos em blocos para locais de memória em um heap de recursos.
- ID3D12CommandQueue::CopyTileMappings: copia mapeamentos de um recurso em bloco de origem para um recurso de bloco de destino.
- ID3D12Device::GetResourceTiling: obtém informações sobre como um recurso em blocos é dividido em blocos.