Nouveaux types de ressources

Plusieurs nouveaux types de ressources ont été ajoutés dans Direct3D 11.

Mémoires tampons et textures en lecture/écriture

Les ressources du Shader Model 4 sont en lecture seule. Le Shader Model 5 implémente un nouveau jeu correspondant de ressources de lecture/écriture :

Ces ressources requièrent une variable de ressource pour accéder à la mémoire (par le biais de l’indexation), car il n’existe aucune méthode permettant d’accéder directement à la mémoire. Une variable de ressource peut être utilisée sur les côtés gauche et droit d’une équation ; s’il est utilisé sur le côté droit, le type de modèle doit être un composant unique (float, int ou uint).

Mémoire tampon structurée

Une mémoire tampon structurée est une mémoire tampon qui contient des éléments de tailles égales. Utilisez une structure avec un ou plusieurs types de membres pour définir un élément. Voici une structure avec trois membres.

struct MyStruct
{
    float4 Color;
    float4 Normal;
    bool isAwesome;
};

Utilisez cette structure pour déclarer une mémoire tampon structurée comme suit :

StructuredBuffer<MyStruct> mySB;

Outre l’indexation, une mémoire tampon structurée prend en charge l’accès à un membre unique comme suit :

float4 myColor = mySb[27].Color;

Utilisez les types d’objets suivants pour accéder à une mémoire tampon structurée :

Les fonctions atomiques qui implémentent des opérations verrouillées sont autorisées sur les éléments int et uint dans un RWStructuredBuffer.

Mémoire tampon d’adresse en octets

Une mémoire tampon d’adresse en octets est une mémoire tampon dont le contenu est adressable par un décalage d’octet. Normalement, le contenu d’une mémoire tampon est indexé par élément à l’aide d’un Stride pour chaque élément et le numéro d’élément (N) comme indiqué par S * N. Une mémoire tampon d’adresse d’octet, qui peut également être appelée mémoire tampon brute, utilise un décalage de valeur d’octet par rapport au début de la mémoire tampon pour accéder aux données. La valeur de l’octet doit être un multiple de quatre afin qu’il soit aligné sur la valeur DWORD. Si une autre valeur est fournie, le comportement n’est pas défini.

Le Shader Model 5 introduit des objets pour accéder à une mémoire tampon d’adresse en lecture seule, ainsi qu’à une mémoire tampon d’adresse d’octets en lecture-écriture. Le contenu d’une mémoire tampon d’adresse en octets est conçu pour être un entier non signé 32 bits. Si la valeur de la mémoire tampon n’est pas vraiment un entier non signé, utilisez une fonction telle que asfloat pour la lire.

Tampon ou texture d’accès non ordonné

Une ressource d’accès non ordonnée (qui comprend des mémoires tampons, des textures et des tableaux de textures sans échantillonnage multiple) autorise un accès en lecture/écriture non ordonné de manière temporelle à partir de plusieurs threads. Cela signifie que ce type de ressource peut être lu/écrit simultanément par plusieurs threads sans générer de conflits de mémoire à l’aide de fonctions atomiques.

Créez une texture ou une mémoire tampon d’accès non triée en appelant une fonction telle que ID3D11Device :: CreateBuffer ou ID3D11Device :: CreateTexture2D et en passant l’indicateur d’accès non ordonné à la _ liaison _ _ d3d11 à partir de l’énumération de l' _ _ indicateur de liaison d3d11 .

Les ressources d’accès non ordonnées ne peuvent être liées qu’à des nuanceurs de pixels et des nuanceurs de calcul. Pendant l’exécution, les nuanceurs de pixels ou les nuanceurs de calcul exécutés en parallèle ont les mêmes ressources d’accès non ordonnées liées.

Ajouter et consommer une mémoire tampon

Une mémoire tampon d’ajout et de consommation est un type spécial de ressource non triée qui prend en charge l’ajout et la suppression de valeurs à partir de la fin d’une mémoire tampon de la même manière qu’une pile fonctionne.

Une mémoire tampon d’ajout et de consommation doit être une mémoire tampon structurée :

Utilisez ces ressources par le biais de leurs méthodes, ces ressources n’utilisent pas de variables de ressource.

Vue d’ensemble du nuanceur de calcul