RWTexture2D
Ressource en lecture/écriture.
| Méthode | Description |
|---|---|
| GetDimensions | Obtient les dimensions de ressource. |
| Chargera | Lit les données de texture. |
| Opérateur[] | Obtient une variable de ressource. |
Vous pouvez préfixer les objets RWTexture2D avec la classe de stockage globallycoherent. Cette classe de stockage entraîne des barrières et des synchronisations de la mémoire pour vider les données sur l’ensemble du GPU, de telle sorte que les autres groupes puissent voir les écritures. Sans ce spécificateur, une barrière de mémoire ou une synchronisation vide uniquement un affichage d’accès non ordonné (UAV) dans le groupe actuel.
Un objet RWTexture2D requiert un type d’élément dans une instruction de déclaration pour l’objet. Par exemple, la déclaration suivante n’est pas correcte :
// The following declaration is incorrectly coded.
RWTexture2D myTexture;
La déclaration suivante est correcte :
// The following declaration is correctly coded.
RWTexture2D<float> tex;
Étant donné qu’un objet RWTexture2D est un objet de type UAV, ses propriétés diffèrent d’un objet de type de vue de ressource (SRV) de nuanceur, tel qu’un objet Texture2D . Par exemple, vous pouvez lire et écrire dans un objet RWTexture2D, mais vous ne pouvez lire qu’à partir d’un objet Texture2D.
Un objet RWTexture2D ne peut pas utiliser les méthodes d’un objet Texture2D , comme Sample. Toutefois, étant donné que vous pouvez créer plusieurs types d’affichages pour la même ressource, vous pouvez déclarer plusieurs types de texture comme une seule texture dans plusieurs nuanceurs. Par exemple, les extraits de code suivants montrent comment vous pouvez déclarer et utiliser un objet RWTexture2D comme Tex dans un nuanceur de calcul, puis déclarer et utiliser un objet Texture2D comme Tex dans un nuanceur de pixels.
Notes
Le runtime applique certains modèles d’utilisation quand vous créez plusieurs types d’affichages dans la même ressource. Par exemple, le runtime ne vous permet pas d’avoir à la fois un mappage UAV pour une ressource et un mappage SRV pour la même ressource active en même temps.
Le code suivant concerne le nuanceur de calcul :
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>;
}
Le code suivant concerne le nuanceur de pixels :
struct PixelShaderInput
{
float4 pos : SV_POSITION;
float2 tex : TEXTURE;
};
Texture2D<float> tex;
float4 main(PixelShaderInput input) : SV_TARGET
{
return tex.Sample(TextureSampler, input.tex);
}
Modèle de nuanceur minimal
Cet objet est pris en charge dans les modèles de nuanceur suivants.
| Modèle de nuanceur | Prise en charge |
|---|---|
| Nuancier modèle 5 et modèles de nuanceur supérieurs | Oui |
Cet objet est pris en charge pour les types de nuanceurs suivants :
| Sommet | Forme | Domain | Géométrie | Pixel | Calcul |
|---|---|---|---|---|---|
| x | x |