Método ID3D12GraphicsCommandList1::SetSamplePositions (d3d12.h)
Esse método configura as posições de exemplo usadas pelo desenho, cópia, resolve e operações semelhantes subsequentes.
Sintaxe
void SetSamplePositions(
[in] UINT NumSamplesPerPixel,
[in] UINT NumPixels,
[in] D3D12_SAMPLE_POSITION *pSamplePositions
);
Parâmetros
[in] NumSamplesPerPixel
Tipo: UINT
SAL: In
Especifica o número de amostras a serem realizadas, por pixel. Esse valor pode ser 1, 2, 4, 8 ou 16, caso contrário, a chamada SetSamplePosition será descartada. O número de amostras deve corresponder à contagem de exemplos configurada no PSO no momento do desenho, caso contrário, o comportamento é indefinido.
[in] NumPixels
Tipo: UINT
SAL: In
Especifica o número de pixels para os quais os padrões de exemplo estão sendo especificados. Esse valor pode ser 1 ou 4, caso contrário, a chamada SetSamplePosition será descartada. Um valor 1 configura um único padrão de exemplo a ser usado para cada pixel; um valor 4 configura padrões de exemplo separados para cada pixel em uma grade de 2x2 pixels que é repetida sobre o espaço de destino de renderização ou visor, alinhada a coordenadas pares.
Observe que o número máximo de amostras combinadas não pode exceder 16; caso contrário, a chamada será descartada. Se NumPixels estiver definido como 4, NumSamplesPerPixel poderá especificar no máximo 4 amostras.
[in] pSamplePositions
Tipo: D3D12_SAMPLE_POSITION*
SAL: In_reads(NumSamplesPerPixel*NumPixels)
Especifica uma matriz de elementos D3D12_SAMPLE_POSITION. O tamanho da matriz é NumPixels * NumSamplesPerPixel. Se NumPixels for definido como 4, o primeiro grupo de posições de exemplo corresponderá ao pixel superior esquerdo na grade de pixels 2x2; o próximo grupo de posições de exemplo corresponde ao pixel superior direito, ao próximo grupo ao pixel inferior esquerdo e ao grupo final ao pixel inferior direito.
Se a interpolação centroide for usada durante a renderização, a ordem das posições para cada pixel determinará a prioridade de amostragem de centroide. Ou seja, o primeiro exemplo coberto na ordem especificada é escolhido como o local de exemplo centroide.
Retornar valor
Nenhum
Comentários
A semântica operacional das posições de exemplo é determinada pelas várias operações de desenho, cópia, resolve e outras que podem ocorrer.
CommandList: Na ausência de chamadas anteriores para SetSamplePositions em um CommandList, os exemplos assumem a posição padrão com base no PSO (Objeto de Estado do Pipeline). As posições padrão são determinadas pela parte SAMPLE_DESC do PSO se ela estiver presente ou pelas posições de exemplo padrão se a parte RASTERIZER_DESC do PSO tiver ForcedSampleCount definido como um valor maior que 0.
Depois que SetSamplePosition tiver sido chamado, as chamadas de desenho subsequentes deverão usar um PSO que especifique uma contagem de exemplo correspondente usando a parte SAMPLE_DESC do PSO ou ForcedSampleCount na parte RASTERIZER_DESC do PSO.
SetSamplePositions só pode ser chamado em um CommandList gráfico. Ele não pode ser chamado em um pacote; os pacotes herdam o estado de posição de exemplo do CommandList de chamada e não o modificam.
Chamar SetSamplePositions(0, 0, NULL) reverte as posições de exemplo para seus valores padrão.
Limpar RenderTarget: As posições de exemplo são ignoradas ao limpar um destino de renderização.
Limpar Estêncil de Profundidade: Ao limpar a parte de profundidade de uma superfície de estêncil de profundidade ou de qualquer região dela, as posições de exemplo devem ser definidas para corresponder às da renderização futura com a superfície ou região desmarcada; o conteúdo de todas as regiões não claras produzidas usando diferentes posições de exemplo tornam-se indefinidos.
Ao limpar a parte do estêncil de uma superfície de estêncil de profundidade ou de qualquer região dela, as posições de exemplo são ignoradas.
Desenhe para RenderTarget: Ao desenhar em um destino de renderização, as posições de exemplo podem ser alteradas para cada chamada de desenho, mesmo ao desenhar em uma região que sobrepõe chamadas de desenho anteriores. As posições de exemplo atuais determinam a semântica operacional de cada chamada de desenho e as amostras são retiradas do conteúdo armazenado do destino de renderização, mesmo que o conteúdo tenha sido produzido usando diferentes posições de exemplo.
Desenhe usando DepthStencil: Ao desenhar em uma superfície de estêncil de profundidade (leitura ou gravação) ou em qualquer região dela, as posições de exemplo devem ser definidas para corresponder às usadas para limpar a região afetada anteriormente. Para usar uma posição de exemplo diferente, a região de destino deve ser limpa primeiro. Os pixels fora da região clara não são afetados.
O hardware pode armazenar a parte de profundidade ou uma superfície de estêncil de profundidade como equações de plano e avaliá-las para produzir valores de profundidade quando o aplicativo emitir uma leitura. Somente o rasterizador e a fusão de saída são necessários para dar suporte a posições de exemplo programáveis da parte de profundidade de uma superfície de estêncil de profundidade. Qualquer outra leitura ou gravação da parte de profundidade que foi renderizada com posições de exemplo definidas pode ignorá-las e, em vez disso, amostrar nas posições padrão.
Resolver RenderTarget: Ao resolver um destino de renderização ou qualquer região dele, as posições de exemplo são ignoradas; essas APIs operam apenas em valores de cor armazenados.
Resolver estêncil de profundidade: Ao resolver a parte de profundidade de uma superfície de estêncil de profundidade ou de qualquer região dela, as posições de exemplo devem ser definidas para corresponder às da renderização passada com a superfície ou região resolvida. Para usar uma posição de exemplo diferente, a região de destino deve ser limpa primeiro.
Ao resolver a parte do estêncil de uma superfície de estêncil de profundidade ou de qualquer região dela, as posições de exemplo são ignoradas; As resoluções de estêncil operam apenas em valores de estêncil armazenados.
Copiar RenderTarget: Ao copiar de um destino de renderização, as posições de exemplo são ignoradas independentemente de ser uma cópia completa ou parcial.
Copiar DepthStencil (Sub-recurso completo): Ao copiar um sub-recurso completo de uma superfície de estêncil de profundidade, as posições de exemplo devem ser definidas para corresponder às posições de exemplo usadas para gerar a superfície de origem. Para usar uma posição de exemplo diferente, a região de destino deve ser limpa primeiro.
Em algumas propriedades de hardware da superfície de origem (como equações de plano armazenadas para valores de profundidade) transfira para o destino. Portanto, se a superfície de destino for desenhada posteriormente, as posições de exemplo originalmente usadas para gerar o conteúdo de origem precisarão ser usadas com a superfície de destino. A API requer isso em todo o hardware para consistência, mesmo que ela só se aplique a alguns.
Copiar DepthStencil (Sub-recurso parcial): Ao copiar um sub-recurso parcial de uma superfície de estêncil de profundidade, as posições de exemplo devem ser definidas para corresponder às posições de exemplo usadas para gerar a superfície de origem, da mesma forma que copiar um sub-recurso completo. No entanto, se o conteúdo de um sub-recursos de destino afetado for apenas parcialmente coberto pela cópia, o conteúdo da parte descoberta dentro desses sub-recursos se tornará indefinido, a menos que tudo isso tenha sido gerado usando as mesmas posições de exemplo que a fonte de cópia. Para usar uma posição de exemplo diferente, a região de destino deve ser limpa primeiro.
Ao copiar um sub-recurso parcial da parte do estêncil de uma superfície de estêncil de profundidade, as postagens de exemplo são ignoradas. Não importa quais posições de exemplo foram usadas para gerar conteúdo para outras áreas do buffer de destino não cobertas pela cópia – esses conteúdos permanecem válidos.
SamplePos do sombreador: O intrínseco SamplePos HLSL não está ciente das posições de exemplo programáveis e os resultados retornados aos sombreadores que chamam isso em uma superfície renderizada com posições programáveis são indefinidos. Os aplicativos devem passar coordenadas para o sombreador manualmente, se necessário. Da mesma forma, avaliar atributos por índice de exemplo é indefinido com posições de exemplo programáveis.
Fazendo a transição para fora do estado de DEPTH_READ ou DEPTH_WRITE: Se um sub-recurso no estado DEPTH_READ ou DEPTH_WRITE for transferido para qualquer outro estado, incluindo COPY_SOURCE ou RESOLVE_SOURCE, talvez seja necessário descompactar a superfície. Portanto, as posições de exemplo devem ser definidas na lista de comandos para corresponder às usadas para gerar o conteúdo na superfície de origem. Além disso, para quaisquer transições subsequentes da superfície enquanto os mesmos dados de profundidade permanecem nele, as posições de exemplo devem continuar a corresponder às definidas na lista de comandos. Para usar uma posição de exemplo diferente, a região de destino deve ser limpa primeiro.
Se um aplicativo quiser minimizar a área descompactada quando apenas uma parte precisar ser usada ou apenas para preservar a compactação, ResolveSubresourceRegion() poderá ser chamado no modo DECOMPRESS com um rect especificado. Isso descompactará apenas a área relevante para um recurso separado, deixando a origem intacta em algum hardware, embora em outros hardwares até mesmo a área de origem esteja descompactada. O recurso separado explicitamente descompactado pode ser transferido para o estado desejado (como SHADER_RESOURCE).
Fazendo a transição para fora do estado RENDER_TARGET: Se um sub-recurso em RENDER_TARGET estado for transferido para qualquer outra coisa que não seja COPY_SOURCE ou RESOLVE_SOURCE, algumas implementações talvez precisem descompactar a superfície. Essa descompactação é independente das posições de exemplo.
Se um aplicativo quiser minimizar a área descompactada quando apenas uma parte precisar ser usada ou apenas para preservar a compactação, ResolveSubresourceRegion() poderá ser chamado no modo DECOMPRESS com um rect especificado. Isso descompactará apenas a área relevante para um recurso separado, deixando a origem intacta em algum hardware, embora em outros hardwares até mesmo a área de origem esteja descompactada. O recurso separado explicitamente descompactado pode ser transferido para o estado desejado (como SHADER_RESOURCE).
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | d3d12.h |
Biblioteca | D3d12.lib |
DLL | D3d12.dll |