Compartilhar 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 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:

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. largura pode estar entre 1 e o campo MaxGPUVirtualAddressBitsPerResource campo 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 gpu, o orçamento de residência de memória (consulte IDXGIAdapter3::QueryVideoMemoryInfo) e ou a memória do sistema pode ocorrer facilmente primeiro.

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 altura deve 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.
As notas a seguir são para todos os tamanhos de textura.

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

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. Porém, 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 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
Consulte D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS para determinar os valores válidos de
de Contagem de e de Qualidade .

Requisitos

Requisito Valor
cabeçalho d3d12.h

Consulte também

CD3DX12_RESOURCE_DESC

estruturas principais

D3D12_HEAP_FLAGS