Share via


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 de 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 .

Comentários

Use esta estrutura com:

Dois recursos comuns são buffers e texturas, que usam essa estrutura, mas com usos bem diferentes dos campos.

Buffers

Os buffers são uma região de memória contígua. A largura pode estar entre 1 e o campo MaxGPUVirtualAddressBitsPerResource de D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT para recursos reservados ou o campo MaxGPUVirtualAddressBitsPerProcess para recursos confirmados . No entanto, o esgotamento do espaço de endereço virtual de GPU, o orçamento de residência de memória (consulte IDXGIAdapter3::QueryVideoMemoryInfo) e ou a memória do sistema pode ocorrer facilmente primeiro.

O alinhamento deve ser de 64 KB (D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT) ou 0, que é efetivamente 64 KB.

Height, DepthOrArraySize e MipLevels devem ser 1.

O formato deve ser DXGI_FORMAT_UNKNOWN.

SampleDesc.Count deve ser 1 e Qualidade deve ser 0.

O 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.

Os 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. Os 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 ortogonal em todos os formatos. Confira o uso de D3D12_FORMAT_SUPPORT1_TEXTURE1D, D3D12_FORMAT_SUPPORT1_TEXTURE2D e D3D12_FORMAT_SUPPORT1_TEXTURE3D em D3D12_FORMAT_SUPPORT1.

Width, Height e DepthOrArraySize devem ter entre 1 e a dimensão máxima com suporte para o nível de recurso específico e a dimensão de textura. No entanto, o esgotamento do espaço de endereço virtual de 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:
    • A 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 de recurso 11_0 ou superior.
    • A altura 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 Altura devem ser menores ou iguais 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 superior.
    • 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 devem ser menores ou iguais a D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION em níveis de recursos menores que 11_0 e D3D11_REQ_TEXTURE2D_U_V_OR_W_DIMENSION no nível do recurso 11_0 ou superior.
    • DepthOrArraySize é interpretado como depth.
As notas a seguir são para todos os tamanhos de textura.

Alinhamento

O alinhamento pode ser de 0, 4KB, 64KB ou 4 MB.

Se Alignment estiver definido como 0, o runtime usará 4 MB para texturas MSAA e 64 KB 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 DESCONHECIDO e MSAA podem ser criadas com alinhamento de 64 KB (se passarem pela restrição de tamanho pequeno detalhada abaixo).

Texturas com layout DESCONHECIDO sem MSAA e sem sinalizadores de estêncil de renderização nem 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 em bloco D3D12 e swizzle padrão são dimensionados. No entanto, os tamanhos de bloco serão da restrição de alinhamento menor para esses cálculos. Usando a textura de estêncil não renderizado e não de 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 a 4 KB. Portanto, uma matriz tex2d com mipped de qualquer tamanho de matriz e qualquer número de níveis de mip pode ser de 4 KB, desde que a largura e a altura sejam pequenas o suficiente para o formato específico e MSAA.

MipLevels

MipLevels pode ser 0 ou 1 para os níveis máximos de mip compatíveis com as dimensões Width, Height e DepthOrArraySize . Quando 0 for usado, a API calculará automaticamente os níveis máximos de mip com suporte e usará isso. Mas algumas propriedades de recurso e heap impedem os níveis de mip, portanto, o aplicativo deve especificar o valor como 1.

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 precluir.

Format

O formato deve ser um formato válido com suporte no nível de recurso do dispositivo.

SampleDesc

Uma Qualidade SampleDesc.Count maior que 1 e/ou diferente de zero só tem suporte para TEXTURE2D e quando D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ou D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL são definidos.

Não há suporte para o seguinte:

  • D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,
  • D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS,
  • D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS,
  • D3D12_HEAP_FLAG_ALLOW_DISPLAY
Consulte D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS para determinar valores válidos de Contagem e Qualidade .

Requisitos

Requisito Valor
Cabeçalho d3d12.h

Confira também

CD3DX12_RESOURCE_DESC

Estruturas principais

D3D12_HEAP_FLAGS