Partilhar via


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

 

Acesso pipeline aos recursos de streaming