Exposição de recursos de streaming HLSL
Uma sintaxe específica da Microsoft HLSL High Level Shader Language (HLSL) é necessária para dar suporte a recursos de streaming no Modelo de sombreador 5.
A sintaxe HLSL para Shader Model 5 é permitida somente em dispositivos com suporte a recursos de streaming. Cada método HLSL relevante para recursos de streaming na tabela a seguir aceita um (comentários) ou dois (grampo e comentários 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 de deslocamento, grampo e feedback são opcionais. Você deve especificar todos os parâmetros opcionais até o que você precisa, o que é consistente com as regras do C++ para argumentos de função padrão. Por exemplo, se o status de feedback for necessário, os parâmetros de deslocamento e grampo precisarão ser fornecidos explicitamente ao Sample, 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 grampo não é executada.
O parâmetro de comentários é uma variável uint que você pode fornecer para a função CheckAccessFullyMapped intrínseca de consulta de acesso à memória. Você não deve modificar ou interpretar o valor do parâmetro de feedback; No entanto, o compilador não fornece nenhuma análise e diagnóstico avançados para detectar se você modificou o valor.
Aqui está a sintaxe de CheckAccessFullyMapped:
bool CheckAccessFullyMapped(em uint FeedbackVar);
CheckAccessFullyMapped interpreta o valor de FeedbackVar e retorna true se todos os dados que estão sendo acessados foram mapeados no recurso; caso contrário, CheckAccessFullyMapped retorna 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 de streaming gera a sample_cl_s
instrução.
Se nem o grampo nem os comentários forem especificados, o compilador emitirá a instrução básica, para que não haja nenhuma alteração do comportamento atual.
O valor do grampo de 0.0f indica que nenhum grampo é executado; Assim, o compilador de driver pode adaptar ainda mais a instrução ao 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 à arquitetura de destino.
Se o compilador HLSL inferir que clamp é 0.0f e os comentários não são usados, o compilador emitirá a instrução básica correspondente (por exemplo, sample
em vez de sample_cl_s
).
Se um acesso a recursos de streaming consistir em várias instruções de código de byte constituintes, por exemplo, para recursos estruturados, o compilador agregará valores de comentários individuais por meio da operação OR para produzir o valor final de comentários. 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 dar suporte a comentários e/ou fixação. Todos eles funcionam em recursos lado a lado e não streaming de todas as dimensões. Os recursos que não são de streaming sempre parecem estar totalmente mapeados.
Objetos HLSL | Métodos intrínsecos com opção de feedback (*) - também possui opção de grampo |
---|---|
[RW] Textura2D [RW] Textura2DArray TextureCUBE TexturaCUBEArray |
Gather GatherRed GatherGreen GatherBlue GatherAlpha GatherCmp GatherCmpRed ReúnaCmpGreen GatherCmpBlue GatherCmpAlpha |
[RW] Textura1D [RW] Textura1DArray [RW] Textura2D [RW] Textura2DArray [RW] Textura3D TextureCUBE TexturaCUBEArray |
Amostra* Viés de amostra* SampleCmp* SampleCmpLevelZero SampleGrad* SampleLevel |
[RW] Textura1D [RW] Textura1DArray [RW] Textura2D Texture2DMS [RW] Textura2DArray Textura2DArrayMS [RW] Textura3D [RW] Buffer [RW] ByteAddressBuffer [RW] Buffer estruturado |
Carregar |
Tópicos relacionados
Acesso pipeline aos recursos de streaming