Partilhar via


Exposição a recursos em mosaico HLSL

A nova sintaxe HLSL (High Level Shader Language) da Microsoft é necessária para oferecer suporte a recursos lado a lado no Shader Model 5.

A nova sintaxe HLSL é permitida apenas em dispositivos com suporte a recursos lado a lado. Cada método HLSL relevante para recursos lado a lado na tabela a seguir aceita um (feedback) ou dois (grampo e feedback nesta ordem) parâmetros opcionais adicionais. Por exemplo, um método Sample é:

Amostra(amostrador, localização [, deslocamento [, grampo [, feedback] ])

Um exemplo de um método Sample é Texture2D.Sample(S,float,int,float,uint).

Os parâmetros offset, clamp e feedback são opcionais. Você deve especificar todos os parâmetros opcionais até o que você precisa, o que é consistente com as regras C++ para argumentos de função padrão. Por exemplo, se o status de feedback for necessário, os parâmetros offset e clamp precisarão ser explicitamente fornecidos ao de amostra, mesmo que não sejam logicamente necessários.

O parâmetro clamp é um valor de flutuação escalar. O valor literal de clamp=0.0f indica que a operação de braçadeira não é executada.

O parâmetro feedback é uma variável de uint que você pode fornecer à consulta de acesso à memória intrínseca função de CheckAccessFullyMapped. Você não deve modificar ou interpretar o valor do parâmetro feedback; Mas, o compilador não fornece nenhuma análise avançada e diagnóstico para detetar se você modificou o valor.

Aqui está a sintaxe de CheckAccessFullyMappped :

bool CheckAccessFullyMapped(in uint FeedbackVar);

CheckAccessFullyMapped interpreta o valor de FeedbackVar e retorna true se todos os dados acessados foram mapeados no recurso; caso contrário, CheckAccessFullyMapped retornará false.

Se o parâmetro clamp ou feedback estiver presente, o compilador emitirá uma variante da instrução básica. Por exemplo, a amostra de um recurso lado a lado gera a instrução sample_cl_s. Se nem clamp nem feedback forem especificados, o compilador emitirá a instrução básica, para que não haja alteração do comportamento atual. O valor de pinça de 0,0f indica que nenhuma pinça é executada; Assim, o compilador de driver pode adaptar ainda mais a instrução para o hardware de destino. Se o feedback for um registro NULL em uma instrução, o feedback não será usado; Assim, o compilador de driver pode adaptar ainda mais a instrução para a arquitetura de destino.

Se o compilador HLSL infere que clamp é 0.0f e feedback não é usado, o compilador emite a instrução básica correspondente (por exemplo, sample em vez de sample_cl_s).

Se um acesso a um recurso lado a lado consistir em várias instruções de código de byte constituinte, por exemplo, para recursos estruturados, o compilador agrega valores de feedback individuais por meio da operação OR para produzir o valor de feedback final. Portanto, você vê um único valor de feedback para um acesso tão complexo.

Esta é a tabela de resumo dos métodos HLSL que são alterados para suportar feedback e/ou braçadeira. Todos eles funcionam em recursos ladrilhos e não ladrilhos de todas as dimensões. Os recursos não lado a lado sempre parecem estar totalmente mapeados.

objetos HLSL Métodos intrínsecos com opção de feedback (*) - também tem opção de braçadeira
[RW]Textura2D
[RW]Texture2DArray
TextureCUBE
TexturaCUBEArray
Reúna-se
GatherRed
GatherGreen
GatherBlue
GatherAlpha
GatherCmp
GatherCmpRed
GatherCmpGreen
GatherCmpBlue
GatherCmpAlpha
[RW]Textura1D
[RW]Textura1DArray
[RW]Textura2D
[RW]Texture2DArray
[RW]Textura3D
TextureCUBE
TexturaCUBEArray
Amostra*
SampleBias*
ExemploCmp*
SampleCmpLevelZero
SampleGrad*
Nível da amostra
[RW]Textura1D
[RW]Textura1DArray
[RW]Textura2D
Textura2DMS
[RW]Texture2DArray
Texture2DArrayMS
[RW]Textura3D
[RW]Memória intermédia
[RW]ByteAddressBuffer
[RW]StructuredBuffer
Carregar

Acesso de pipeline a recursos lado a lado