RWTexture2D
Risorsa di lettura/scrittura.
Metodo | Descrizione |
---|---|
GetDimensions | Ottiene le dimensioni della risorsa. |
Load | Legge i dati della trama. |
Operatore[] | Ottiene una variabile di risorsa. |
È possibile prefisso oggetti RWTexture2D con la classe di archiviazione globalmentecoherent. Questa classe di archiviazione causa barriere di memoria e sincronizzazione per scaricare i dati nell'intera GPU, in modo che altri gruppi possano visualizzare le scritture. Senza questo identificatore, una barriera di memoria o una sincronizzazione scarica solo una vista di accesso non ordinata (UAV) all'interno del gruppo corrente.
Un oggetto RWTexture2D richiede un tipo di elemento in un'istruzione di dichiarazione per l'oggetto. Ad esempio, la dichiarazione seguente non è corretta:
// The following declaration is incorrectly coded.
RWTexture2D myTexture;
La dichiarazione seguente è corretta:
// The following declaration is correctly coded.
RWTexture2D<float> tex;
Poiché un oggetto RWTexture2D è un oggetto di tipo UAV, le relative proprietà differiscono da un oggetto SRV (Shader Resource View), ad esempio un oggetto Texture2D . Ad esempio, è possibile leggere e scrivere in un oggetto RWTexture2D, ma è possibile leggere solo da un oggetto Texture2D.
Un oggetto RWTexture2D non può usare metodi da un oggetto Texture2D , ad esempio Sample. Tuttavia, poiché è possibile creare più tipi di visualizzazione nella stessa risorsa, è possibile dichiarare più tipi di trama come singola trama in più shader. Ad esempio, i frammenti di codice seguenti mostrano come dichiarare e usare un oggetto RWTexture2D come tex in un shader di calcolo e quindi dichiarare e usare un oggetto Texture2D come tex in un pixel shader.
Nota
Il runtime applica determinati modelli di utilizzo quando si creano più tipi di visualizzazione nella stessa risorsa. Ad esempio, il runtime non consente di disporre di un mapping UAV per una risorsa e di un mapping SRV per la stessa risorsa attiva contemporaneamente.
Il codice seguente è per lo shader di calcolo:
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>;
}
Il codice seguente è per il pixel shader:
struct PixelShaderInput
{
float4 pos : SV_POSITION;
float2 tex : TEXTURE;
};
Texture2D<float> tex;
float4 main(PixelShaderInput input) : SV_TARGET
{
return tex.Sample(TextureSampler, input.tex);
}
Modello di shader minimo
Questo oggetto è supportato nei modelli shader seguenti.
Modello di shader | Supportato |
---|---|
Modelli shader 5 e versioni successive dello shader | sì |
Questo oggetto è supportato per i tipi di shader seguenti:
Vertice | Scafo | Dominio | Geometria | Pixel | Calcolo |
---|---|---|---|---|---|
x | x |
Vedi anche