Besoin en ressources de diffusion en continuThe need for streaming resources

Les ressources de diffusion en continu sont nécessaires pour que la mémoire GPU ne stocke pas les régions des surfaces auxquelles il n’est pas possible d’accéder, et pour indiquer au matériel comment filtrer les vignettes adjacentes.Streaming resources are needed so GPU memory isn't wasted storing regions of surfaces that won't be accessed, and to tell the hardware how to filter across adjacent tiles.

Ressources de streaming ou textures éparsesStreaming resources or sparse textures

Les ressources de streaming (appelées ressources en mosaïque dans Direct3D 11) sont des ressources logiques volumineuses qui utilisent de petites quantités de mémoire physique.Streaming resources (called tiled resources in Direct3D 11), are large logical resources that use small amounts of physical memory.

Les ressources de streaming ont unautre nom.Another name for streaming resources is sparse textures. « Épars » véhicule à la fois la nature en mosaïque des ressources, et peut-être la raison principale de les faire apparaître en mosaïque, ce qui n’est pas censé tous être mappés à la fois."Sparse" conveys both the tiled nature of the resources as well as perhaps the primary reason for tiling them - that not all of them are expected to be mapped at once. En fait, une application peut créer de manière concevable une ressource de streaming dans laquelle aucune donnée n’est créée pour toutes les régions et les mips de la ressource, intentionnellement.In fact, an application could conceivably author a streaming resource in which no data is authored for all regions+mips of the resource, intentionally. Ainsi, le contenu proprement dit peut être fragmenté, et le mappage du contenu dans la mémoire de l’unité de traitement graphique (GPU) à un moment donné est un sous-ensemble de celui-ci (encore plus fragmenté).So, the content itself could be sparse, and the mapping of the content in graphics processing unit (GPU) memory at a given time would be a subset of that (even more sparse).

Sans mosaïque, les allocations de mémoire sont gérées au niveau de granularité des sous-ressourcesWithout tiling, memory allocations are managed at subresource granularity

Dans un système graphique (autrement dit, le système d’exploitation, le pilote d’affichage et le matériel graphique) sans prise en charge des ressources de streaming, le système graphique gère toutes les allocations de mémoire Direct3D au niveau de granularité des sous-ressources.In a graphics system (that is, the operating system, display driver, and graphics hardware) without streaming resource support, the graphics system manages all Direct3D memory allocations at subresource granularity.

Pour une mémoire tampon, la mémoire tampon entière est la sous-ressource.For a buffer, the entire buffer is the subresource.

Pour une texture, (par exemple, Texture2D), chaque niveau MIP est une sous-ressource ; pour un tableau de textures, (par exemple, Texture2DArray), chaque niveau MIP d’une tranche de tableau donnée est une sous-ressource.For a Texture, (for example, Texture2D), each mip level is a subresource; for a texture array, (for example, Texture2DArray) each mip level at a given array slice is a subresource. Le système graphique expose uniquement la possibilité de gérer le mappage des allocations à cette granularité des sous-ressources.The graphics system only exposes the ability to manage the mapping of allocations at this subresource granularity. Dans le contexte des ressources de streaming, le terme « mappage » fait référence à la façon dont les données sont visibles par le GPU.In the context of streaming resources, "mapping" refers to making data visible to the GPU.

Sans mosaïque, ne peut pas accéder à une petite partie de la chaîne mipmapWithout tiling, can't access only a small portion of mipmap chain

Supposons qu’une application sait qu’une opération de rendu particulière a uniquement besoin d’accéder à une petite partie d’une chaîne mipmap d’image (peut-être pas même la zone complète d’un mipmap donné).Suppose an application knows that a particular rendering operation only needs to access a small portion of an image mipmap chain (perhaps not even the full area of a given mipmap). Dans l’idéal, l’application peut informer le système graphique de ce besoin.Ideally, the app could inform the graphics system about this need. Le système graphique se détournerait alors uniquement pour s’assurer que la mémoire nécessaire est mappée sur le GPU sans pagination dans une mémoire trop importante.The graphics system would then only bother to ensure that the needed memory is mapped on the GPU without paging in too much memory.

En réalité, sans prise en charge des ressources de streaming, le système graphique ne peut être informé que de la mémoire qui doit être mappée sur le GPU à la granularité des sous-ressources (par exemple, une plage de niveaux de mipmap complets accessibles).In reality, without streaming resource support, the graphics system can only be informed about the memory that needs to be mapped on the GPU at subresource granularity (for example, a range of full mipmap levels that could be accessed). Il n’existe aucune erreur de demande dans le système graphique. par conséquent, il est possible d’utiliser un grand nombre de mémoire GPU excédentaire pour mettre en correspondance des sous-ressources complètes avant qu’une commande de rendu faisant référence à une partie de la mémoire ne soit exécutée.There is no demand faulting in the graphics system either, so potentially a lot of excess GPU memory must be used to make full subresources mapped before a rendering command that references any part of the memory is executed. Il ne s’agit là que d’un problème qui rend l’utilisation des allocations de mémoire volumineuses difficile dans Direct3D sans la prise en charge de la diffusion en continu des ressources.This is just one issue that makes the use of large memory allocations difficult in Direct3D without streaming resource support.

Pagination logicielle pour scinder la surface en vignettes plus petitesSoftware paging to break the surface into smaller tiles

La pagination de logiciel peut être utilisée pour scinder la surface en mosaïques suffisamment petites pour le matériel à gérer.Software paging can be used to break the surface into tiles that are small enough for the hardware to handle.

Direct3D prend en charge les surfaces Texture2D avec jusqu’à 16384 pixels sur un côté donné.Direct3D supports Texture2D surfaces with up to 16384 pixels on a given side. Une image de 16384 de largeur de 16384 de haut et de 4 octets par pixel consomme 1 Go de mémoire vidéo (et l’ajout de des mipmaps aurait doublé cette quantité).An image that is 16384 wide by 16384 tall and 4 bytes per pixel would consume 1GB of video memory (and adding mipmaps would double that amount). Dans la pratique, il est rare que tous les Go soient référencés dans une seule opération de rendu.In practice, all 1GB would rarely need to be referenced in a single rendering operation.

Certains développeurs de jeux modélisent des surfaces de terrain aussi grandes que 128K de 128K.Some game developers model terrain surfaces as large as 128K by 128K. La façon dont ils peuvent travailler sur les GPU existants consiste à scinder la surface en mosaïques suffisamment petites pour gérer le matériel.The way they get this to work on existing GPUs is to break the surface into tiles that are small enough for hardware to handle. L’application doit déterminer les vignettes qui peuvent être nécessaires et les charger dans un cache de textures sur le GPU-a Software Paging System.The application must figure out which tiles might be needed and load them into a cache of textures on the GPU - a software paging system.

L’un des inconvénients majeurs de cette approche vient du fait que le matériel ne connaît rien sur la pagination qui se passe : quand une partie d’une image doit être affichée sur l’écran qui chevauche les vignettes, le matériel ne sait pas comment effectuer un filtrage de fonction fixe (c’est-à-dire efficace) sur les vignettes.A significant downside to that approach comes from the hardware not knowing anything about the paging that is going on: When a part of an image needs to be shown on screen that straddles tiles, the hardware does not know how to perform fixed function (that is, efficient) filtering across tiles. Cela signifie que l’application gérant sa propre mosaïque logicielle doit recourir à un filtrage manuel de la texture dans le code du nuanceur (ce qui devient très onéreux si un filtre anisotrope de bonne qualité est souhaité) et/ou gaspiller de la mémoire des marges autour des vignettes qui contiennent des données provenant de vignettes voisines afin que le filtrage matériel des fonctions fixes puisse continuer à fournir de l'This means the application managing its own software tiling must resort to manual texture filtering in shader code (which becomes very expensive if a good quality anisotropic filter is desired) and/or waste memory authoring gutters around tiles that contain data from neighboring tiles so that fixed function hardware filtering can continue to provide some assistance.

Création d’une représentation en mosaïque des allocations de surface d’une fonctionnalité de première classeMaking tiled representation of surface allocations a first-class feature

Si une représentation en mosaïque des allocations de surface est une fonctionnalité de première classe dans le système graphique, l’application peut indiquer au matériel les vignettes à rendre disponibles.If a tiled representation of surface allocations is a first-class feature in the graphics system, the application could tell the hardware which tiles to make available. De cette façon, moins de mémoire GPU est gaspillée le stockage des régions de surfaces que l’application sait n’est pas accessible, et le matériel peut comprendre comment filtrer les vignettes adjacentes, en éliminant une partie des difficultés rencontrées par les développeurs qui effectuent des mosaïques de logiciels de manière autonome.In this way, less GPU memory is wasted storing regions of surfaces that the application knows will not be accessed, and the hardware can understand how to filter across adjacent tiles, alleviating some of the pain experienced by developers who perform software tiling on their own.

Mais pour fournir une solution complète, il est nécessaire de faire ce qu’il faut faire pour traiter le fait que, indépendamment de la prise en charge de l’affichage en mosaïque dans une surface, la dimension surface maximale est actuellement de 16384-nulle près du 128 Ko + que les applications souhaitent déjà.But to provide a complete solution, something must be done to deal with the fact that, independent of whether tiling within a surface is supported, the maximum surface dimension is currently 16384 - nowhere near the 128K+ that applications already want. Il suffit d’une approche qui nécessite le matériel pour prendre en charge des tailles de texture plus volumineuses. Toutefois, il existe des coûts et/ou des compromis significatifs pour passer à cet itinéraire.Just requiring the hardware to support larger texture sizes is one approach, however there are significant costs and/or tradeoffs to going this route.

Le chemin d’accès du filtre de texture Direct3D’s et le chemin de rendu sont déjà saturés en termes de précision dans la prise en charge de 16 000 textures avec les autres exigences, telles que la prise en charge des étendues de Viewport en dehors de la surface pendant le rendu, ou la prise en charge de la texture de la surface pendant le filtrage.Direct3D's texture filter path and rendering path are already saturated in terms of precision in supporting 16K textures with the other requirements, such as supporting viewport extents falling off the surface during rendering, or supporting texture wrapping off the surface edge during filtering. Une possibilité consiste à définir un compromis de telle sorte que la taille de la texture augmente au-delà de 16 Ko, la fonctionnalité/précision est indiquée d’une certaine manière.A possibility is to define a tradeoff such that as the texture size increases beyond 16K, functionality/precision is given up in some manner. Toutefois, même avec cette concession, des coûts matériels supplémentaires peuvent être nécessaires en termes d’adressage dans l’ensemble du système matériel pour atteindre des tailles de texture plus volumineuses.Even with this concession however, additional hardware costs might be required in terms of addressing capability throughout the hardware system to go to larger texture sizes.

Problème avec les textures volumineuses : précision pour les emplacements sur la surfaceIssue with large textures: precision for locations on surface

L’un des problèmes qui entrent dans la lecture des textures est très élevé, c’est que les coordonnées de la texture à virgule flottante simple précision (et les interpolateurs associés pour prendre en charge la pixellisation) sont à court de précision pour spécifier des emplacements sur la surface avec précision.One issue that comes into play as textures get very large is that single precision floating point texture coordinates (and the associated interpolators to support rasterization) run out of precision to specify locations on the surface accurately. Le filtrage de texture instable s’ensuit.Jittery texture filtering would ensue. Une option coûteuse serait d’exiger la prise en charge de l’interpolateur double précision, bien que cela puisse être excessif en raison d’une alternative raisonnable.One expensive option would be to require double precision interpolator support, though that could be overkill given a reasonable alternative.

Activation de plusieurs ressources de dimensions différentes pour partager la mémoireEnabling multiple resources of different dimensions to share memory

Un autre scénario pouvant être utilisé par les ressources de streaming consiste à permettre à plusieurs ressources de différents formats/Dimensions de partager la même mémoire.Another scenario that could be served by streaming resources is enabling multiple resources of different dimensions/formats to share the same memory. Parfois, les applications ont des ensembles exclusifs de ressources qui ne doivent pas être utilisés en même temps, ou des ressources qui sont créées uniquement pour une utilisation très courte, puis détruites, suivies de la création d’autres ressources.Sometimes applications have exclusive sets of resources that are known not to be used at the same time, or resources that are created only for very brief use and then destroyed, followed by creation of other resources. Une forme de général qui peut être en dehors des « ressources de streaming » est qu’il est possible d’autoriser l’utilisateur à pointer plusieurs ressources différentes au même (chevauchement) de la mémoire.A form of generality that can fall out of "streaming resources" is that it is possible to allow the user to point multiple different resources at the same (overlapping) memory. En d’autres termes, la création et la destruction des « ressources » (qui définissent une dimension/format, etc.) peuvent être découplées à partir de la gestion de la mémoire sous-jacente des ressources du point de vue de l’application.In other words, the creation and destruction of "resources" (which define a dimension/format and so on) can be decoupled from the management of the memory underlying the resources from the application's point of view.

Rubriques connexesRelated topics

Ressources de diffusion en continuStreaming resources