- Criar um recurso de mapa de feedback, com layout de feedback MinMip ou MipRegionUsed.
- Criar um descritor de UAV (exibição de acesso não ordenado) para um recurso de mapa de feedback.
- Copiar dados de um recurso de mapa de feedback para um UAV padrão (ou vice-versa), para leitura dos dados de sampler feedback pela CPU/GPU.
- Criar um descritor de SRV (exibição de recurso de sombreador) para um mapa MinMip.
- Criar um descritor de sampler para filtragem de mapa MinMip.
- Criar um descritor de UAV para um recurso de mapa de feedback, usando parâmetros de exibição adicionais.
- Permitir a criação de recursos de mapa de feedback e o acesso direto da CPU/GPU a esses recursos, sem usar as abstrações de formato e layout de recursos de feedback do conjunto de APIs padrão.
Novos métodos de ID3D12Device8 para recursos e exibições de mapas de feedback
Usando a API padrão do Direct3D 12, os mapas de feedback são criados por meio de uma abstração. Os recursos têm dimensões lógicas e um tipo de mapa de feedback conhecidos pelo título, mas as dimensões físicas e o formato de hardware são conhecidos apenas pelo driver. Essa abstração permite o suporte a diversas codificações de mapas de feedback específicas de hardware. No entanto, na GPU do XBOX Series X|S, os mapas de feedback sempre usarão o formato R8_UINT internamente, e as dimensões físicas do mapa de feedback são calculadas trivialmente a partir das dimensões da textura em blocos divididas pelas dimensões da região de mip do sampler feedback.CreateCommittedResource2 e CreatePlacedResource1 criam recursos do Direct3D 12 de forma semelhante às APIs existentes CreateCommittedResource e CreatePlacedResource, com o acréscimo de também poderem criar recursos de mapa de feedback. Uma struct D3D12_RESOURCE_DESC1 usada para criar recursos de mapa de feedback deve especificar DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE ou DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE para o formato, bem como D3D12_TEXTURE_LAYOUT_UNKNOWN para o layout. Os campos Width, Height, DepthOrArraySize e MipLevel devem corresponder aos valores da textura em blocos de destino. Cada uma das dimensões de SamplerFeedbackMipRegion deve ser uma potência de dois.
Por exemplo, para criar um mapa de feedback MinMip para uma textura BC1_UNORM de 4096 × 4096 com mipmaps, usando uma região de mip de 512 × 256 (para que um texel de feedback cubra um bloco de 64 KB no mip 0), a descrição do recurso seria configurada.
GetResourceAllocationInfo2 retorna o tamanho e o alinhamento dos recursos com base nas descrições de recursos D3D12_RESOURCE_DESC1 de entrada. Essas informações são necessárias para criar mapas de feedback posicionados em ID3D12Heap.
CreateSamplerFeedbackUnorderedAccessView e CreateSamplerFeedbackUnorderedAccessViewX criam um descritor de UAV para sampler feedback, com base em um recurso de destino e em um recurso de feedback. A API de extensão também aceita uma descrição de UAV opcional para oferecer suporte a exibições de sub-recursos de recursos de textura de matriz de feedback. Essa API garante que as dimensões do mapa de feedback atendam aos requisitos de hardware de fração em potência de dois para coletar sampler feedback em relação ao recurso de destino.
Novos métodos de extensão de ID3D12Device8 para exibições e samplers de mapas MinMip
CreateMinMipShaderResourceViewX é uma API de extensão do XBOX que cria uma exibição de recurso de sombreador de mapa MinMip com base em um recurso de destino (ou descrição) combinado com um recurso MinMip. De forma semelhante à criação de um UAV de mapa de feedback, essa API combina atributos do recurso de destino (largura, altura, níveis de mip) com atributos do recurso de mapa MinMip (largura, altura, formato) para produzir um descritor de recurso vinculado.
O recurso de mapa MinMip deve ter o seguinte:
- Dimensões que sejam uma fração em potência de dois das dimensões do recurso de destino
- O formato R8_UINT
- Uma contagem de MipLevels igual a 1
ID3D12Device::CreateSamplerX com os novos campos e sinalizadores da struct D3D12XBOX_SAMPLER_DESC preenchidos. As inclinações e os deslocamentos do filtro podem ser especificados usando os valores das enumerações D3D12XBOX_MINMIP_FILTER_SLOPE e D3D12XBOX_MINMIP_FILTER_OFFSET.
Novo comportamento do método ID3D12GraphicsCommandList1::ResolveSubresourceRegion
ResolveSubresourceRegion foi aprimorado para copiar dados para ou de um recurso de feedback, com um recurso de textura R8_UINT padrão como origem ou destino, respectivamente.
Novos objetos e métodos de HLSL (linguagem de sombreador de alto nível)
O modelo de sombreador 6.5 do HLSL introduziu novos objetos de API para mapas de feedback: FeedbackTexture2D e FeedbackTexture2DArray. Esses são recursos somente gravação que se associam a registradores de UAV (u#) no HLSL. Esses novos objetos podem ser usados em todos os estágios de sombreador, mas determinados métodos são restritos apenas a sombreadores de pixel, de forma semelhante às restrições existentes em alguns métodos de Texture2D e Texture2DArray. Os métodos desses novos objetos incluemWriteSamplerFeedback*, WriteSamplerFeedbackBias*, WriteSamplerFeedbackLevelZero, WriteSamplerFeedbackGrad* e WriteSamplerFeedbackLevel.
Um protótipo de função para uma variante de FeedbackTexture2D::WriteSamplerFeedback é semelhante ao exemplo de código a seguir.
