Alocação dinâmica de volumes de recursos
Texturas de volume (3D) podem ser usadas como recursos lado a lado, observando que a resolução do bloco é tridimensional.
Visão geral
Os recursos lado a lado separam um objeto de recurso D3D de sua memória de backup (os recursos no passado tinham uma relação 1:1 com a memória de suporte). 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 lado a lado de textura 2D em D3D11.2. D3D12 e D3D11.3 adicionam suporte para texturas lado a lado 3D.
As dimensões de recursos típicas usadas em blocos são 4 x 4 blocos 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 lado a lado: 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 lado a lado de textura 3D (mip mais detalhado)
- Mapeamento padrão de recurso lado a lado de textura 3D (segundo mip mais detalhado)
- Recurso lado a lado de textura 3D (mip mais detalhado)
- Recurso lado a lado de textura 3D (segundo mip mais detalhado)
- Recurso lado a lado de textura 3D (bloco único)
- Recurso lado a lado de textura 3D (caixa uniforme)
Mapeamento padrão de recurso lado a lado de textura 3D (mip mais detalhado)
Mapeamento padrão de recurso lado a lado de textura 3D (segundo mip mais detalhado)
Recurso lado a lado de textura 3D (mip mais detalhado)
O código a seguir configura um recurso lado a lado 3D no mip mais detalhado.
D3D11_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 0;
trCoord.Z = 0;
trCoord.Subresource = 0;
D3D11_TILE_REGION_SIZE trSize;
trSize.bUseBox = false;
trSize.NumTiles = 63;
Recurso lado a lado de textura 3D (segundo mip mais detalhado)
O código a seguir configura um recurso lado a lado 3D e o segundo mip mais detalhado:
D3D11_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 0;
trCoord.Z = 0;
trCoord.Subresource = 1;
D3D11_TILE_REGION_SIZE trSize;
trSize.bUseBox = false;
trSize.NumTiles = 6;
Recurso lado a lado de textura 3D (bloco único)
O código a seguir configura um recurso de bloco único:
D3D11_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 1;
trCoord.Z = 1;
trCoord.Subresource = 0;
D3D11_TILE_REGION_SIZE trSize;
trSize.bUseBox = true;
trSize.NumTiles = 27;
trSize.Width = 3;
trSize.Height = 3;
trSize.Depth = 3;
Recurso lado a lado de textura 3D (caixa uniforme)
O código a seguir configura um recurso lado a lado uniform box (observe a instrução trSize.bUseBox = true;) :
D3D11_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 0;
trCoord.Y = 1;
trCoord.Z = 0;
trCoord.Subresource = 0;
D3D11_TILE_REGION_SIZE trSize;
trSize.bUseBox = true;
trSize.NumTiles = 27;
trSize.Width = 3;
trSize.Height = 3;
trSize.Depth = 3;
APIs de recurso lado a lado D3D11.3
As mesmas chamadas à API são usadas para recursos lado a lado 2D e 3D:
Enumerações
- D3D11_TILED_RESOURCES_TIER : determina o nível de suporte a recursos lado a lado.
- D3D11_FORMAT_SUPPORT2 : usado para testar o suporte a recursos lado a lado.
- D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG : determina o suporte a recursos lado a lado em um recurso de várias amostras.
- D3D11_TILE_COPY_FLAGS : mantém sinalizadores para copiar de e para recursos em blocos girados e buffers lineares.
Estruturas
- D3D11_TILED_RESOURCE_COORDINATE : contém a coordenada x, y e z e a referência de sub-recurso. Observe que há uma classe auxiliar: CD3D11_TILED_RESOURCE_COORDINATE.
- D3D11_TILE_REGION_SIZE : especifica o tamanho e o número de blocos da região lado a lado.
- D3D11_TILE_SHAPE : a forma do bloco como largura, altura e profundidade em texels.
- D3D11_FEATURE_DATA_D3D11_OPTIONS1: mantém o nível de camada de recurso do bloco com suporte.
Métodos
- ID3D11Device::CheckFeatureSupport : usado para determinar quais recursos e em qual camada têm suporte no hardware atual.
- ID3D11DeviceContext2::CopyTiles : copia blocos do buffer para o recurso lado a lado ou vice-versa.
- ID3D11DeviceContext2::UpdateTileMappings : atualiza mapeamentos de locais de bloco em recursos lado a lado para locais de memória em um pool de blocos.
- ID3D11DeviceContext2::CopyTileMappings : copia mapeamentos de um recurso lado a lado de origem para um recurso lado a lado de destino.
- ID3D11DeviceContext2::GetResourceTiling : obtém informações sobre como um recurso lado a lado é dividido em blocos.
Tópicos relacionados