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 |