Recursos divididos em volumes (Direct3D 12)

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 Direct3D 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 no Direct3D 11.2. O suporte opcional para texturas lado a lado 3D está disponível para Direct3D 12 e Direct3D 11.3 (consulte D3D12_TILED_RESOURCES_TIER).

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_UNORMR8R8_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 um recurso tridimensional lado a lado

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

mostra o 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.

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;

mip mais detalhado para uma textura tridimensional

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.

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;

segundo mip mais detalhado para uma textura tridimensional

Recurso lado a lado 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;

um recurso tridimensional de bloco único

Recurso lado a lado de textura 3D (caixa uniforme)

O código a seguir configura um recurso lado a lado 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;

uma caixa uniforme

APIs de recurso lado a lado

As mesmas chamadas à API são usadas para recursos lado a lado 2D e 3D.

Enumerações

Estruturas

Métodos