Pular para o conteúdo principal
O conjunto de APIs de suporte ao Sampler Feedback tem as mesmas APIs no XBOX e no Direct3D 12 para PC, com extensões do XBOX para quaisquer recursos de hardware do XBOX Series X|S que vão além dos recursos padrão ou que não foram adotados no PC. Em particular, o filtro personalizado de mapa MinMip não será implementado no Direct3D 12 para PC. O conjunto de APIs de Sampler Feedback fornece a seguinte funcionalidade.
  1. Criar um recurso de mapa de feedback, com layout de feedback MinMip ou MipRegionUsed.
  2. Criar um descritor de UAV (exibição de acesso não ordenado) para um recurso de mapa de feedback.
  3. 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.
As APIs de extensão do XBOX fornecem a seguinte funcionalidade.
  1. Criar um descritor de SRV (exibição de recurso de sombreador) para um mapa MinMip.
  2. Criar um descritor de sampler para filtragem de mapa MinMip.
  3. Criar um descritor de UAV para um recurso de mapa de feedback, usando parâmetros de exibição adicionais.
  4. 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.
O mapa de feedback MinMip resultante teria dimensões físicas de 8 × 16, com um nível de mip, o formato R8_UINT e um layout de textura D3D12XBOX_TEXTURE_LAYOUT_SWIZZLE_MODE_256B_S. 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:
  1. Dimensões que sejam uma fração em potência de dois das dimensões do recurso de destino
  2. O formato R8_UINT
  3. Uma contagem de MipLevels igual a 1
É recomendável que os recursos de mapa MinMip tenham o modo swizzle D3D12XBOX_TEXTURE_LAYOUT_SWIZZLE_MODE_256B_S, pois espera-se que esses recursos sejam pequenos.
Para criar um descritor de sampler para amostragem a partir de um mapa MinMip, use a API de extensão do XBOX existente 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

O método 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 incluem WriteSamplerFeedback*, 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.
O parâmetro SampledTexture indica para qual textura gerar o feedback. Se o parâmetro SampledTexture não corresponder ao recurso usado ao criar o UAV de feedback, o comportamento será indefinido em algumas plataformas. Na GPU do XBOX Series X|S, o parâmetro SampledTexture deve estar presente, mas é ignorado. O descritor de UAV de recurso vinculado do mapa de feedback contém todas as informações necessárias para executar o sampler feedback.

Consulte também

Design de hardware de GPU do Sampler Feedback Visão geral do Sampler Feedback (versão prévia)
Última modificação em 6 de outubro de 2026