RWTexture2D

Un recurso de lectura y escritura.

Método Descripción
GetDimensions Obtiene las dimensiones del recurso.
Carga Lee los datos de textura.
Operador[] Obtiene una variable de recurso.

 

Puede prefijar objetos RWTexture2D con la clase de almacenamiento globalmentecoherente. Esta clase de almacenamiento hace que las barreras de memoria y se sincronicen para vaciar los datos en toda la GPU, de modo que otros grupos puedan ver escrituras. Sin este especificador, una barrera de memoria o sincronización vaciará solo una vista de acceso desordenada (UAV) dentro del grupo actual.

Un objeto RWTexture2D requiere un tipo de elemento en una instrucción de declaración para el objeto . Por ejemplo, la siguiente declaración no es correcta:

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

La siguiente declaración es correcta:

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

Dado que un objeto RWTexture2D es un objeto de tipo UAV, sus propiedades difieren de un objeto de vista de recursos de sombreador (SRV), como un objeto Texture2D . Por ejemplo, puede leer y escribir en un objeto RWTexture2D, pero solo se puede leer desde un objeto Texture2D.

Un objeto RWTexture2D no puede usar métodos de un objeto Texture2D , como Sample. Sin embargo, dado que puede crear varios tipos de vista en el mismo recurso, puede declarar varios tipos de textura como una sola textura en varios sombreadores. Por ejemplo, los fragmentos de código siguientes muestran cómo puede declarar y usar un objeto RWTexture2D como tex en un sombreador de proceso y, a continuación, declarar y usar un objeto Texture2D como tex en un sombreador de píxeles.

Nota

El tiempo de ejecución aplica determinados patrones de uso al crear varios tipos de vista en el mismo recurso. Por ejemplo, el tiempo de ejecución no permite tener una asignación de UAV para un recurso y una asignación de SRV para el mismo recurso activo al mismo tiempo.

 

El código siguiente es para el sombreador de proceso:

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>;
}

El código siguiente es para el sombreador de píxeles:

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

Este objeto se admite en los siguientes modelos de sombreador.

Modelo de sombreador Compatible
Modelo de sombreador 5 y modelos de sombreador posteriores

 

Este objeto es compatible con los siguientes tipos de sombreadores:

Vértice Casco Domain Geometría Píxel Compute
x x

 

Consulte también

Objetos del modelo de sombreador 5