Compartilhar via


Exposição de recursos lado a lado HLSL

A nova sintaxe HLSL (Linguagem de Sombreador de Alto Nível) da Microsoft é necessária para dar suporte a recursos lado a lado no Modelo de Sombreador 5.

A nova sintaxe HLSL é permitida somente 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 parâmetros opcionais adicionais (fixação e comentários nesta ordem). Por exemplo, um método de Amostra é:

Sample(sampler, location [, offset [, clamp [, feedback] ] ])

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

Os parâmetros de deslocamento, vinculação e feedback são opcionais. Você deve especificar todos os parâmetros opcionais até aquele que você precisa, que é consistente com as regras do C++ para argumentos de função padrão. Por exemplo, se for necessário o status de feedback, parâmetros de compensação e vinculação precisam ser fornecidos explicitamente à Amostra, mesmo que eles talvez não sejam logicamente necessários.

O parâmetro de vinculação é um valor flutuante escalar. O valor literal de vinculação = 0.0f indica que a operação de vinculação não é executada.

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

Veja aqui 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 de feedback ou vinculação estiver presente, o compilador emite uma variante de instrução básica. Por exemplo, o exemplo de um recurso lado a lado gera a sample_cl_s instrução . Se nem a vinculação nem o feedback forem especificados, o compilador emite a instrução básica, para que não haja nenhuma alteração do comportamento atual. O valor de vinculação de 0.0f indica que nenhuma vinculação é realizada; dessa forma, o compilador de driver adicional pode continuar adaptando a instrução para o hardware de destino. Se o feedback for um registro NULL em uma instrução, o feedback não é utilizado; dessa forma, o compilador de driver pode continuar adaptando a instrução para a arquitetura de destino.

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

Se um acesso a recursos 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 comentários individuais por meio da operação OR para produzir o valor final dos comentários. Portanto, você pode ver um único valor de feedback para tal acesso complexo.

Esta é a tabela resumida dos métodos HLSL que são alterados para dar suporte a feedback e/ou vinculação. Todos eles funcionam em recursos lado a lado e não lado a lado 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 a opção de vinculação
[RW]Texture2D
[RW]Texture2DArray
TextureCUBE
TextureCUBEArray
Coletar
GatherRed
GatherGreen
GatherBlue
GatherAlpha
GatherCmp
GatherCmpRed
GatherCmpGreen
GatherCmpBlue
GatherCmpAlpha
[RW] Texture1D
[RW]Texture1DArray
[RW]Texture2D
[RW]Texture2DArray
[RW]Texture3D
TextureCUBE
TextureCUBEArray
Amostra*
SampleBias*
SampleCmp*
SampleCmpLevelZero
SampleGrad*
SampleLevel
[RW] Texture1D
[RW]Texture1DArray
[RW]Texture2D
Texture2DMS
[RW]Texture2DArray
Texture2DArrayMS
[RW]Texture3D
[RW]Buffer
[RW]ByteAddressBuffer
[RW]StructuredBuffer
Carregar

Acesso de pipeline a recursos lado a lado