Compartilhar via


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 do mip mais detalhado

Mapeamento padrão de recurso lado a lado de textura 3D (segundo mip mais detalhado)

mapeamento padrão do 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;

mapeamento mais detalhado de um recurso lado a lado 3d

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;

segundo mapeamento mais detalhado de um recurso lado a lado 3d

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;

um único bloco

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;

uma caixa uniforme

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

Estruturas

Métodos

Recursos do Direct3D 11.3