RWTexture2D

Ressource en lecture/écriture.

Méthode Description
GetDimensions Obtient les dimensions de la ressource.
Charge Lit les données de texture.
Operator[] Obtient une variable de ressource.

 

Vous pouvez préfixer des objets RWTexture2D avec la classe de stockage globalement globale. Cette classe de stockage entraîne des barrières de mémoire et des synchronisations pour vider les données sur l’ensemble du GPU, de sorte que d’autres groupes puissent voir les écritures. Sans ce spécificateur, une barrière de mémoire ou une synchronisation vide uniquement une vue d’accès non ordonnée (UAV) au sein du groupe actif.

Un objet RWTexture2D nécessite 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 SRV (Shader Resource View), tel qu’un objet Texture2D . Par exemple, vous pouvez lire et écrire dans un objet RWTexture2D, mais vous pouvez uniquement lire à partir d’un objet Texture2D.

Un objet RWTexture2D ne peut pas utiliser de méthodes à partir d’un objet Texture2D , tel que Sample. Toutefois, étant donné que vous pouvez créer plusieurs types d’affichage dans la même ressource, vous pouvez déclarer plusieurs types de texture en tant que texture unique dans plusieurs nuanceurs. Par exemple, les extraits de code suivants montrent comment déclarer et utiliser un objet RWTexture2D en tant que tex dans un nuanceur de calcul, puis déclarer et utiliser un objet Texture2D en tant que tex dans un nuanceur de pixels.

Notes

Le runtime applique certains modèles d’utilisation lorsque vous créez plusieurs types d’affichage sur 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 actif en même temps.

 

Le code suivant est destiné au 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 est destiné au 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
Modèles de nuanceur 5 et versions ultérieures Oui

 

Cet objet est pris en charge pour les types de nuanceurs suivants :

Sommet Coque Domain Géométrie Pixel Compute
x x

 

Voir aussi

Objets du modèle nuanceur 5