Compartilhar via


RWTexture2D

Um recurso de leitura/gravação.

Método Descrição
GetDimensions Obtém as dimensões do recurso.
Carga Lê dados de textura.
Operador[] Obtém uma variável de recurso.

 

Você pode prefixar objetos RWTexture2D com a classe de armazenamento globalmentecoerente. Essa classe de armazenamento faz com que barreiras de memória e sincronizações liberem dados em toda a GPU, de modo que outros grupos possam ver gravações. Sem esse especificador, uma barreira de memória ou sincronização liberará apenas uma UAV (exibição de acesso não ordenada) dentro do grupo atual.

Um objeto RWTexture2D requer um tipo de elemento em uma instrução de declaração para o objeto . Por exemplo, a seguinte declaração não está correta:

// The following declaration is incorrectly coded.
RWTexture2D myTexture;

A seguinte declaração está correta:

// The following declaration is correctly coded.
RWTexture2D<float> tex;

Como um objeto RWTexture2D é um objeto do tipo UAV, suas propriedades diferem de um objeto do tipo SRV (exibição de recurso de sombreador), como um objeto Texture2D . Por exemplo, você pode ler e gravar em um objeto RWTexture2D, mas só pode ler de um objeto Texture2D.

Um objeto RWTexture2D não pode usar métodos de um objeto Texture2D , como Sample. No entanto, como você pode criar vários tipos de exibição para o mesmo recurso, você pode declarar vários tipos de textura como uma única textura em vários sombreadores. Por exemplo, os snippets de código a seguir mostram como você pode declarar e usar um objeto RWTexture2D como tex em um sombreador de computação e, em seguida, declarar e usar um objeto Texture2D como tex em um sombreador de pixel.

Observação

O runtime impõe determinados padrões de uso quando você cria vários tipos de exibição para o mesmo recurso. Por exemplo, o runtime não permite que você tenha um mapeamento UAV para um recurso e um mapeamento SRV para o mesmo recurso ativo ao mesmo tempo.

 

O código a seguir é para o sombreador de computação:

RWTexture2D<float> tex;
[numthreads(groupDim_x, groupDim_y, 1)]
void main(
    uint3 groupId : SV_GroupID,
    uint3 groupThreadId : SV_GroupThreadID,
    uint3 dispatchThreadId : SV_DispatchThreadID,
    uint groupIndex : SV_GroupIndex)
{
    tex [dispatchThreadId.xy] = <something>;
}

O código a seguir é para o sombreador de pixel:

struct PixelShaderInput
{
    float4 pos : SV_POSITION;
    float2 tex : TEXTURE;
};

Texture2D<float> tex;
float4 main(PixelShaderInput input) : SV_TARGET
{
    return tex.Sample(TextureSampler, input.tex);
}

Modelo de sombreador mínimo

Esse objeto tem suporte nos modelos de sombreador a seguir.

Modelo de Sombreador Com suporte
Modelo de sombreador 5 e modelos de sombreador superior sim

 

Esse objeto tem suporte para os seguintes tipos de sombreadores:

Vértice Casco Domínio Geometry Pixel Computação
x x

 

Confira também

Objetos do Modelo de Sombreador 5