estrutura D3D12_RESOURCE_DESC (d3d12.h)
Descreve um recurso, como uma textura. Essa estrutura é usada extensivamente.
Sintaxe
typedef struct D3D12_RESOURCE_DESC {
D3D12_RESOURCE_DIMENSION Dimension;
UINT64 Alignment;
UINT64 Width;
UINT Height;
UINT16 DepthOrArraySize;
UINT16 MipLevels;
DXGI_FORMAT Format;
DXGI_SAMPLE_DESC SampleDesc;
D3D12_TEXTURE_LAYOUT Layout;
D3D12_RESOURCE_FLAGS Flags;
} D3D12_RESOURCE_DESC;
Membros
Dimension
Um membro do D3D12_RESOURCE_DIMENSION, especificando as dimensões do recurso (por exemplo, D3D12_RESOURCE_DIMENSION_TEXTURE1D) ou se ele é um buffer ((D3D12_RESOURCE_DIMENSION_BUFFER).
Alignment
Especifica o alinhamento.
Width
Especifica a largura do recurso.
Height
Especifica a altura do recurso.
DepthOrArraySize
Especifica a profundidade do recurso, se for 3D ou o tamanho da matriz, se for uma matriz de recursos 1D ou 2D.
MipLevels
Especifica o número de níveis de MIP.
Format
Especifica um membro do DXGI_FORMAT.
SampleDesc
Especifica uma estrutura DXGI_SAMPLE_DESC.
Layout
Especifica um membro do D3D12_TEXTURE_LAYOUT.
Flags
Sinalizadores OR'd bit a bit, como constantes de enumeração D3D12_RESOURCE_FLAGS.
Observações
Use esta estrutura com:
- ID3D12Resource::GetDesc
- ID3D12Device::GetResourceAllocationInfo
- ID3D12Device::CreateCommittedResource
- ID3D12Device::CreatePlacedResource
- ID3D12Device::CreateReservedResource
- ID3D12Device::GetCopyableFootprints
- Várias funções auxiliares referem-se a estruturas e funções auxiliares para D3D12.
Dois recursos comuns são buffers e texturas, que usam essa estrutura, mas com usos bem diferentes dos campos.
Buffers de
Os buffers são uma região de memória contígua.alinhamento deve ser de 64 KB (D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT) ou 0, que é efetivamente 64 KB.
Height, DepthOrArraySizee MipLevels devem ser 1.
Formatar deve ser DXGI_FORMAT_UNKNOWN.
SampleDesc.Count deve ser 1 e de Qualidade deve ser 0.
layout deve ser D3D12_TEXTURE_LAYOUT_ROW_MAJOR, pois os layouts de memória do buffer são compreendidos por aplicativos e os dados de textura principal de linha geralmente são empacotados por meio de buffers.
Sinalizadores ainda devem ser preenchidos com precisão por aplicativos para buffers, com pequenas exceções. No entanto, os aplicativos podem usar a maior quantidade de suporte de capacidade sem se preocupar com o impacto de eficiência nos buffers. O campo sinalizadores destina-se a controlar propriedades relacionadas a texturas.
Texturas
Texturas são uma disposição multidimensional de texels em uma região contígua de memória, fortemente otimizada para maximizar a largura de banda para renderização e amostragem. Tamanhos de textura são difíceis de prever e variam de adaptador para adaptador. Os aplicativos devem usar ID3D12Device::GetResourceAllocationInfo para entender com precisão seu tamanho.TEXTURE1D, TEXTURE2D e TEXTURE3D não têm suporte ortogonalmente em todos os formatos. Consulte o uso de D3D12_FORMAT_SUPPORT1_TEXTURE1D, D3D12_FORMAT_SUPPORT1_TEXTURE2D e D3D12_FORMAT_SUPPORT1_TEXTURE3D em D3D12_FORMAT_SUPPORT1.
Width, Heighte DepthOrArraySize devem ter entre 1 e a dimensão máxima com suporte para a dimensão de textura e nível de recurso específicos. No entanto, o esgotamento do espaço de endereço virtual gpu, o orçamento de residência de memória (consulte IDXGIAdapter3::QueryVideoMemoryInfo) e ou a memória do sistema pode ocorrer facilmente primeiro. Para formatos compactados, essas dimensões são lógicas. Por exemplo:
- Para TEXTURE1D:
- largura deve ser menor ou igual a D3D10_REQ_TEXTURE1D_U_DIMENSION em níveis de recursos inferiores a 11_0 e D3D11_REQ_TEXTURE1D_U_DIMENSION no nível do recurso 11_0 ou superior.
- Height deve ser 1.
- DepthOrArraySize é interpretado como tamanho da matriz e deve ser menor ou igual a D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION em níveis de recursos inferiores a 11_0 e D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION nos níveis de recursos 11_0 ou superior.
- Para TEXTURE2D:
largura e de alturadeve ser menor ou igual a D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION em níveis de recursos inferiores a 11_0 e D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION ou nível de recurso 11_0 ou maior. - DepthOrArraySize é interpretado como tamanho da matriz e deve ser menor ou igual a D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION em níveis de recursos inferiores a 11_0 e D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION nos níveis de recursos 11_0 ou superior.
- Para TEXTURE3D:
- width e Height e DepthOrArraySize deve ser menor ou igual a D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION em níveis de recursos inferiores a 11_0 e D3D11_REQ_TEXTURE2D_U_V_OR_W_DIMENSION no nível do recurso 11_0 ou superior.
- DepthOrArraySize é interpretado como profundidade.
Alinhamento
alinhamento pode ser de 0, 4KB, 64 KB ou 4 MB.Se Alinhamento estiver definido como 0, o runtime usará 4 MB para texturas MSAA e 64KB para todo o resto. O aplicativo pode escolher alinhamentos menores do que esses padrões para alguns tipos de textura quando a textura é pequena. Texturas com layout UNKNOWN e MSAA podem ser criadas com alinhamento de 64 KB (se passarem pela restrição de tamanho pequeno detalhada abaixo).
Texturas com layout UNKNOWN sem MSAA e sem sinalizadores de estêncil de renderização ou de estêncil de profundidade podem ser criadas com alinhamento de 4KB (novamente, passando a restrição de tamanho pequeno).
Os aplicativos podem criar recursos alinhados menores quando o tamanho estimado do nível de mip mais detalhado é um total da restrição de alinhamento maior ou menor. O runtime usará um mecanismo independente de arquitetura de estimativa de tamanho, que imita a maneira como os recursos blocos D3D12 e Swizzle padrão são dimensionados. No entanto, os tamanhos dos blocos serão da restrição de alinhamento menor para esses cálculos. Usando a textura de estêncil não renderizado e sem profundidade como exemplo, o runtime assumirá formas de bloco quase equilaterais de 4KB e calculará o número de blocos necessários para o nível de mip mais detalhado. Se o número de blocos for igual ou menor que 16, o aplicativo poderá criar um recurso alinhado 4KB. Portanto, uma matriz tex2d mipped de qualquer tamanho de matriz e qualquer número de níveis de mip pode ser 4KB, desde que a largura e a altura sejam pequenas o suficiente para o formato específico e MSAA.
MipLevels
Consulte o campo D3D12_FORMAT_SUPPORT1_MIP de D3D12_FORMAT_SUPPORT1 para restrições por formato. Recursos msaa, texturas com D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER e heaps com D3D12_HEAP_FLAG_ALLOW_DISPLAY todos os níveis de mip precluos.
Formato
Formatar deve ser um formato válido com suporte no nível de recurso do dispositivo.SampleDesc
Um SampleDesc.Count maior que 1 e/ou não zero de Qualidade só tem suporte para TEXTURE2D e quando D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ou D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL são definidos.As seguintes opções não têm suporte:
- D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,
- D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS,
- D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS,
- D3D12_HEAP_FLAG_ALLOW_DISPLAY
Requisitos
Requisito | Valor |
---|---|
cabeçalho | d3d12.h |
Consulte também
estruturas principais