Pular para o conteúdo principal
Este método configura as posições de amostra usadas por operações subsequentes de desenho, cópia, resolução e semelhantes.

Sintaxe

Parâmetros

NumSamplesPerPixel [in]
Tipo: UINT
SAL: In Especifica o número de amostras a serem obtidas 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 amostras configurada no PSO no momento do desenho; caso contrário, o comportamento será indefinido. NumPixels [in]
Tipo: UINT
SAL: In Especifica o número de pixels para os quais os padrões de amostra estão sendo especificados. Esse valor pode ser 1 ou 4; caso contrário, a chamada SetSamplePosition será descartada. Um valor de 1 configura um único padrão de amostra a ser usado para cada pixel; um valor de 4 configura padrões de amostra separados para cada pixel em uma grade de 2x2 pixels, que se repete pelo espaço do destino de renderização ou do 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 for definido como 4, NumSamplesPerPixel não poderá especificar mais de 4 amostras. pSamplePositions [in]
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 amostra corresponderá ao pixel superior esquerdo na grade de 2x2 pixels; o próximo grupo de posições de amostra corresponderá ao pixel superior direito, o próximo grupo ao pixel inferior esquerdo e o último grupo ao pixel inferior direito. Se a interpolação de centroide for usada durante a renderização, a ordem das posições de cada pixel determinará a prioridade da amostragem de centroide. Ou seja, a primeira amostra coberta na ordem especificada é escolhida como o local da amostra de centroide.

Valor retornado

Tipo: void Nenhum.

Comentários

A semântica operacional das posições de amostra é determinada pelas várias operações de desenho, cópia, resolução e outras que podem ocorrer. CommandList: na ausência de chamadas anteriores a SetSamplePositions em uma CommandList, as amostras assumem a posição padrão com base no Pipeline State Object (PSO). As posições padrão são determinadas pela parte SAMPLE_DESC do PSO, se estiver presente, ou pelas posições de amostra padrão, se a parte RASTERIZER_DESC do PSO tiver ForcedSampleCount definido como um valor maior que 0. Depois que SetSamplePosition for chamado, as chamadas de desenho subsequentes deverão usar um PSO que especifique uma contagem de amostras correspondente, seja usando a parte SAMPLE_DESC do PSO ou ForcedSampleCount na parte RASTERIZER_DESC do PSO. SetSamplePositions só pode ser chamado em uma CommandList de gráficos. Ele não pode ser chamado em um pacote; os pacotes herdam o estado de posição de amostra da CommandList chamadora e não o modificam. Chamar SetSamplePositions(0, 0, NULL) reverte as posições de amostra para seus valores padrão. Limpar RenderTarget: as posições de amostra são ignoradas ao limpar um destino de renderização. Limpar DepthStencil: ao limpar a parte de profundidade de uma superfície de profundidade/estêncil ou qualquer região dela, as posições de amostra devem ser definidas para corresponder às da renderização futura na superfície ou região limpa; o conteúdo de quaisquer regiões não limpas produzidas usando posições de amostra diferentes se torna indefinido. Ao limpar a parte de estêncil de uma superfície de profundidade/estêncil ou qualquer região dela, as posições de amostra são ignoradas. Desenhar em RenderTarget: ao desenhar em um destino de renderização, as posições de amostra podem ser alteradas para cada chamada de desenho, mesmo ao desenhar em uma região que se sobrepõe a chamadas de desenho anteriores. As posições de amostra atuais determinam a semântica operacional de cada chamada de desenho, e as amostras são obtidas do conteúdo armazenado do destino de renderização, mesmo que o conteúdo tenha sido produzido usando posições de amostra diferentes. Desenhar usando DepthStencil: ao desenhar em uma superfície de profundidade/estêncil (leitura ou gravação) ou qualquer região dela, as posições de amostra devem ser definidas para corresponder às usadas anteriormente para limpar a região afetada. Para usar uma posição de amostra diferente, a região de destino deve ser limpa primeiro. Os pixels fora da região limpa não são afetados. O hardware pode armazenar a parte de profundidade de uma superfície de profundidade/estêncil como equações de plano e avaliá-las para produzir valores de profundidade quando o aplicativo emite uma leitura. Somente o rasterizador e o output-merger precisam dar suporte a posições de amostra programáveis da parte de profundidade de uma superfície de profundidade/estêncil. Qualquer outra leitura ou gravação da parte de profundidade que tenha sido renderizada com posições de amostra 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 amostra são ignoradas; essas APIs operam apenas nos valores de cor armazenados. Resolver DepthStencil: ao resolver a parte de profundidade de uma superfície de profundidade/estêncil ou qualquer região dela, as posições de amostra devem ser definidas para corresponder às da renderização anterior na superfície ou região resolvida. Para usar uma posição de amostra diferente, a região de destino deve ser limpa primeiro. Ao resolver a parte de estêncil de uma superfície de profundidade/estêncil ou qualquer região dela, as posições de amostra são ignoradas; as resoluções de estêncil operam apenas nos valores de estêncil armazenados. Copiar RenderTarget: ao copiar de um destino de renderização, as posições de amostra 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 profundidade/estêncil, as posições de amostra devem ser definidas para corresponder às posições de amostra usadas para gerar a superfície de origem. Para usar uma posição de amostra diferente, a região de destino deve ser limpa primeiro. Em alguns hardwares, propriedades da superfície de origem (como equações de plano armazenadas para valores de profundidade) são transferidas para o destino. Portanto, se a superfície de destino for desenhada posteriormente, as posições de amostra originalmente usadas para gerar o conteúdo de origem precisarão ser usadas com a superfície de destino. A API exige isso em todos os hardwares para fins de consistência, mesmo que se aplique apenas a alguns. Copiar DepthStencil (sub-recurso parcial): ao copiar um sub-recurso parcial de uma superfície de profundidade/estêncil, as posições de amostra devem ser definidas para corresponder às posições de amostra usadas para gerar a superfície de origem, de forma semelhante à cópia de um sub-recurso completo. No entanto, se o conteúdo de um sub-recurso de destino afetado for coberto apenas parcialmente pela cópia, o conteúdo da parte não coberta nesses sub-recursos se tornará indefinido, a menos que todo ele tenha sido gerado usando as mesmas posições de amostra da origem da cópia. Para usar uma posição de amostra diferente, a região de destino deve ser limpa primeiro. Ao copiar um sub-recurso parcial da parte de estêncil de uma superfície de profundidade/estêncil, as posições de amostra são ignoradas. Não importa quais posições de amostra foram usadas para gerar conteúdo para quaisquer outras áreas do buffer de destino não cobertas pela cópia - esse conteúdo permanece válido. SamplePos do shader: o intrínseco SamplePos do HLSL não reconhece posições de amostra programáveis, e os resultados retornados aos shaders que o chamam em uma superfície renderizada com posições programáveis são indefinidos. Os aplicativos devem passar as coordenadas para o shader manualmente, se necessário. Da mesma forma, avaliar atributos por índice de amostra é indefinido com posições de amostra programáveis. Transição para fora do estado DEPTH_READ ou DEPTH_WRITE: se um sub-recurso no estado DEPTH_READ ou DEPTH_WRITE fizer a transição para qualquer outro estado, incluindo COPY_SOURCE ou RESOLVE_SOURCE, alguns hardwares poderão precisar descompactar a superfície. Portanto, as posições de amostra 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 permanecerem nela, as posições de amostra devem continuar correspondendo às definidas na lista de comandos. Para usar uma posição de amostra 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 preservar a compactação, ResolveSubresourceRegion() poderá ser chamado no modo DECOMPRESS com um retângulo especificado. Isso descompactará apenas a área relevante para um recurso separado, deixando a origem intacta em alguns hardwares, embora em outros hardwares até mesmo a área de origem seja descompactada. O recurso separado, descompactado explicitamente, pode então fazer a transição para o estado desejado (como SHADER_RESOURCE). Transição para fora do estado RENDER_TARGET: se um sub-recurso no estado RENDER_TARGET fizer a transição para qualquer estado diferente de COPY_SOURCE ou RESOLVE_SOURCE, algumas implementações poderão precisar descompactar a superfície. Essa descompactação independe das posições de amostra. Se um aplicativo quiser minimizar a área descompactada quando apenas uma parte precisar ser usada, ou apenas preservar a compactação, ResolveSubresourceRegion() poderá ser chamado no modo DECOMPRESS com um retângulo especificado. Isso descompactará apenas a área relevante para um recurso separado, deixando a origem intacta em alguns hardwares, embora em outros hardwares até mesmo a área de origem seja descompactada. O recurso separado, descompactado explicitamente, pode então fazer a transição para o estado desejado (como SHADER_RESOURCE).

Requisitos

Cabeçalho: d3d12_xs.h ou d3d12_x.h
Biblioteca: d3d12_xs.lib ou d3d12_x.lib
Plataformas com suporte: consoles XBOX Series e família XBOX One

Confira também

ID3D12GraphicsCommandList1
Última modificação em 6 de outubro de 2026