Article de reference

Afficher la liste

Une liste d'affichage , également appelée liste de commandes dans Direct3D 12 et tampon de commandes dans Vulkan , est une série de commandes ou d'instructions graphiques exécut...

liste de commandes dans Direct3D 12 et tampon de commandes dans Vulkan , est une série de commandes ou d'instructions graphiques exécutées lors de son lancement. Les systèmes qui utilisent les listes d'affichage sont dits en mode retenu , par opposition aux systèmes en mode immédiat . En OpenGL , les listes d'affichage permettent de redessiner la même géométrie ou d'appliquer plusieurs fois une série de modifications d'état. Cet avantage est également exploité avec les listes de commandes groupées de Direct3D 12. Dans Direct3D 12 et Vulkan, les listes d'affichage sont couramment utilisées pour l'enregistrement et l'exécution image par image.

moniteurs vectoriels ou afficheurs calligraphiques des années 1960 et 1970 utilisaient la déviation d'un faisceau d'électrons pour tracer des segments de ligne , des points et parfois des courbes directement sur un écran cathodique . L'image s'estompant instantanément, il était nécessaire de la redessiner plusieurs fois par seconde ( les écrans cathodiques à tube à mémoire conservaient l'image jusqu'à leur extinction, mais ne convenaient pas aux graphismes interactifs). Pour rafraîchir l'affichage, un processeur dédié, appelé processeur d'affichage ou unité de traitement d'affichage (DPU), était utilisé. Ce processeur disposait d'une mémoire tampon pour une « liste d'affichage », un « fichier d'affichage » ou un « programme d'affichage » contenant les coordonnées des segments de ligne et d'autres informations. Les processeurs d'affichage avancés prenaient également en charge les instructions de contrôle de flux , utiles pour le tracé de graphiques répétitifs tels que du texte, et certains pouvaient effectuer des transformations de coordonnées comme la projection 3D .

Fonctionnalités d'affichage de liste de l'ordinateur personnel

L'un des premiers systèmes dotés d'une véritable liste d'affichage était l' ordinateur Atari 8 bits . La liste d'affichage (nommée ainsi dans la terminologie Atari) est une série d'instructions destinées à ANTIC , le coprocesseur vidéo utilisé dans ces machines. Ce programme, stocké dans la mémoire de l'ordinateur et exécuté par ANTIC en temps réel, peut spécifier les lignes vides, six modes texte et huit modes graphiques, les sections de l'écran pouvant faire l'objet d'un défilement fin horizontal ou vertical, et déclencher des interruptions de liste d'affichage (appelées interruptions raster ou HBI sur d'autres systèmes).

La famille Amstrad PCW intègre une fonction de liste d'affichage appelée « Roller RAM ». Il s'agit d'une zone RAM de 512 octets composée de 256 pointeurs 16 bits, un par ligne de l'écran 720 × 256 pixels. Chaque pointeur identifie l'emplacement de 90 octets de pixels monochromes contenant les 720 états de pixels de la ligne. Ces 90 octets, composés de 8 états de pixels, sont espacés de 8 octets, laissant ainsi 7 octets inutilisés entre chaque octet de données de pixel. Cette structure correspond au fonctionnement du tampon d'écran en RAM sur les PCW orientés texte : les 8 lignes du premier caractère sont stockées dans les 8 premiers octets, celles du deuxième caractère dans les 8 octets suivants, et ainsi de suite. La mémoire RAM à rouleaux a été implémentée pour accélérer le défilement de l'écran, car le déplacement manuel (par logiciel) des 23 Ko de la mémoire tampon d'affichage du processeur Z80 à 3,4 MHz aurait été inacceptablement lent. L'adresse de départ de la mémoire RAM à rouleaux, utilisée au début d'un rafraîchissement d'écran, est contrôlée par un registre d'E/S accessible en écriture par le Z80. Le défilement de l'écran s'effectue donc simplement en modifiant ce registre.L' Amiga est un autre système utilisant une fonctionnalité matérielle similaire à une liste d'affichage. Ce n'est d'ailleurs pas un hasard s'il a été conçu par une partie de l'équipe ayant développé le matériel spécifique des ordinateurs Atari 8 bits. Une fois un mode d'affichage défini, il était appliqué automatiquement à chaque ligne de balayage suivante. L'ordinateur intégrait également un coprocesseur dédié, appelé « Copper », exécutant un programme simple, la « Liste Copper », destiné à modifier les registres matériels en synchronisation avec l'affichage. Les instructions de la Liste Copper pouvaient ordonner au Copper d'attendre que l'affichage atteigne une position spécifique à l'écran, puis de modifier le contenu des registres matériels. En pratique, il s'agissait d'un processeur dédié à la gestion des interruptions de balayage . Le Copper était utilisé par Workbench pour combiner plusieurs modes d'affichage (plusieurs résolutions et palettes de couleurs simultanément sur le moniteur), et par de nombreux programmes pour créer des effets arc-en-ciel et de dégradé. Le Copper de l'Amiga était également capable de reconfigurer le moteur de sprites en cours d'image, avec un délai d'une seule ligne de balayage. Cela permettait à l'Amiga d'afficher plus de 8 sprites matériels, à condition que les sprites supplémentaires ne partagent pas de lignes de balayage (ou l'espace d'une ligne de balayage) avec plus de 7 autres sprites. Autrement dit, dès qu'au moins un sprite était terminé d'être affiché, un autre pouvait être ajouté en dessous, à l'écran. De plus, le chipset AGA 32 bits ultérieur permettait d'afficher des sprites plus grands (plus de pixels par ligne) tout en conservant le même multiplexage. L'Amiga disposait également d'un circuit dédié de décalage de blocs (« blitter »), capable d'afficher des objets plus grands dans un tampon d'image. Ce circuit était souvent utilisé seul ou en complément des sprites.les images . L'image est ensuite affichée de différentes manières, selon l'implémentation précise du code d'affichage piloté par le processeur.ZX Spectrum .conservé , un système dans lequel les commandes graphiques sont enregistrées (conservées) pour être exécutées successivement ultérieurement. Ceci est différent du mode immédiat , où les commandes graphiques sont exécutées immédiatement lors des appels du client.

Utilisation dans Direct3D 12

Les listes de commandes sont créées à l'aide de la ID3D12Device::CreateCommandListfonction. Elles peuvent être de plusieurs types : directes, groupées, de calcul, de copie, de décodage vidéo, de traitement vidéo et d'encodage vidéo. Les listes de commandes directes spécifient une liste de commandes exécutables par le GPU et n'héritent d'aucun état du GPU. Les listes groupées sont idéales pour stocker et exécuter de petits ensembles de commandes un nombre quelconque de fois. Leur utilisation diffère de celle des listes de commandes classiques, où les commandes stockées ne sont généralement exécutées qu'une seule fois. des mipmaps . Une liste de commandes de copie est exclusivement dédiée à la copie, tandis que les listes de commandes de décodage vidéo et de traitement vidéo servent respectivement au décodage et au traitement vidéo.

Lors de leur création, les listes de commandes sont en mode enregistrement. Elles peuvent être réutilisées en appelant la ID3D12GraphicsCommandList::Resetfonction correspondante. Après l'enregistrement des commandes, la liste doit être désactivée en appelant la fonction appropriée ID3D12GraphicsCommandList::Close. Elle est ensuite exécutée ID3D12CommandQueue::ExecuteCommandLists.