Restrictions d’accès aux vignettes avec des mappages en doubleTile access limitations with duplicate mappings

Il existe des restrictions d’accès aux tuiles avec des mappages en double, par exemple en cas de copie de ressources de diffusion en continu avec une source et une destination se superposant, ou lors du rendu de tuiles partagées dans la zone de rendu.There are limitations on tile access with duplicate mappings, such as when copying streaming resources with overlapping source and destination, or when rendering to tiles shared within the render area.

Copie des ressources de diffusion en continu avec source qui se chevauchent et de destinationCopying streaming resources with overlapping source and destination

Si les vignettes dans la zone source et destination d’une copie* opération avez dupliqué mappages dans la zone de copie qui serait ont overlapped même si les deux ressources ont été streaming pas les ressources et la copie* opération prend en charge le chevauchement copie, la copie* opération se comporte correctement (comme si la source est copiée vers un emplacement temporaire avant de passer à la destination).If tiles in the source and destination area of a Copy* operation have duplicated mappings in the copy area that would have overlapped even if both resources were not streaming resources and the Copy* operation supports overlapping copies, the Copy* operation will behave fine (as if the source is copied to a temporary location before going to the destination). Cependant, si la superposition n’est pas évidente (par exemple, les ressources source et de destination sont différentes, mais partagent des mappages ou des mappages sont en double sur une surface donnée), les résultats de l’opération de copie sur les tuiles partagées ne sont pas définis.But if the overlap is not obvious (like the source and destination resources are different but share mappings or mappings are duplicated over a given surface), results of the copy operation on the tiles that are shared are undefined.

Copie de la ressource de diffusion en continu avec des vignettes en double dans la zone de destinationCopying to streaming resource with duplicated tiles in destination area

La copie vers une ressource de diffusion en continu avec des tuiles en double dans la zone de destination génère des résultats non définis dans ces tuiles, sauf si les données sont identiques. Des tuiles différentes peuvent écrire les tuiles dans des ordres différents.Copying to a streaming resource with duplicated tiles in the destination area produces undefined results in these tiles unless the data itself is identical; different tiles might write the tiles in different orders.

UAV accède à des vignettes en double de mappagesUAV accesses to duplicate tiles mappings

Supposons qu’un affichage d’accès sans ordre (UAV) sur une ressource de diffusion en continu compte des mappages de tuiles en double dans sa zone ou avec d’autres ressources liées au pipeline.Suppose an unordered access view (UAV) on a streaming resource has duplicate tile mappings in its area or with other resources bound to the pipeline. Le classement des accès à ces tuiles en double n’est pas défini s’il est effectué par différents threads, comme tout classement d’accès sans ordre à la mémoire est généralement non trié.Ordering of accesses to these duplicated tiles is undefined if performed by different threads, just as any ordering of memory access to UAVs in general is unordered.

Rendu après les modifications de mappage de vignette ou mises à jour de contenu à partir de mappages en dehorsRendering after tile mapping changes or content updates from outside mappings

Si les mappages de vignette de diffusion en continu d’une ressource ont été modifiés ou contenu dans le pool en mosaïque mappé vignettes ont été modifiés par le biais de mappages d’un autre diffusion en continu de la ressource et la ressource de diffusion en continu est va être restitué par le biais de restituer la vue cible ou de vue du stencil de profondeur, l’application doit Effacer (à l’aide de la fonction fixed API clair) ou de copier entièrement à l’aide de la copie*/mise à jour* API les vignettes ont été modifiés dans la zone de rendu (mappée ou non).If a streaming resource's tile mappings have changed or content in mapped tiled pool tiles have changed via another streaming resource's mappings, and the streaming resource is going to be rendered via render target view or depth stencil view, the application must Clear (using the fixed function Clear APIs) or fully copy over using Copy*/Update* APIs the tiles that have changed within the area being rendered (mapped or not).

L’échec de la suppression ou de la copie par une application entraîne l’obsolescence des structures d’optimisation du matériel pour l’affichage cible du rendu ou la vue de profondeur/gabarit donnée et provoque le nettoyage des résultats de rendu sur certains matériels et une incohérence entre les différents matériels.Failure of an application to clear or copy in these cases results in hardware optimization structures for the given render target view or depth stencil view being stale, and will result in garbage rendering results on some hardware and inconsistency across different hardware. Ces structures de données d’optimisation masquées utilisées par le matériel peuvent être locales pour les mappages individuels et non visibles pour les autres mappages dans la même mémoire.These hidden optimization data structures used by hardware might be local to individual mappings and not visible to other mappings to the same memory.

Lorsque vous effacez un affichage de ressources (en définissant tous les éléments d’un affichage de ressources sur une seule valeur), vous pouvez effacer les affichages cibles de rendu avec des rectangles.When you clear a resource view (setting all the elements in a resource view to one value), you can clear render target views with rectangles. Pour le matériel prenant en charge les ressources de diffusion en continu, l’effacement d’un affichage de ressource doit également inclure l’effacement des vues de gabarit/profondeur avec des rectangles, pour les surfaces de profondeur uniquement (sans gabarit).For hardware that supports streaming resources, clearing a resource view must also support clearing of depth stencil views with rectangles, for depth only surfaces (without stencil). Cette opération permet aux applications d’effacer uniquement la zone d’une surface requise.This operation allows applications to clear only the necessary area of a surface.

Si une application doit conserver les contenus de mémoire de zones existants dans une ressource de diffusion en continu où les mappages ont été modifiés, cette application doit contourner l’opération d’effacement.If an application needs to preserve existing memory contents of areas in a streaming resource where mappings have changed, that application must work around the clear requirement. L’application peut pour ce faire enregistrer les contenus dans lesquels les mappages de tuiles ont été modifiés (en les copiant sur une surface temporaire), exécuter la commande d’effacement requise, puis copier de nouveau le contenu.The application can accomplish this work-around by first saving the contents where tile mappings have changed (by copying them to a temporary surface), issuing the required clear command, and then copying the contents back. Cette opération permet de conserver des contenus de surface pour un rendu incrémentiel, cependant l’inconvénient est que les performances de rendu sur la surface peuvent être réduites, car les optimisations de rendu peuvent être perdues.While this would accomplish the task of preserving surface contents for incremental rendering, the downside is that subsequent rendering performance on the surface might suffer because rendering optimizations might be lost.

Si une tuile est mappée dans plusieurs ressources de diffusion en continu en même temps et que les contenus des tuiles sont traités par tout moyen (rendu, copie, etc.) via l’une des ressources de diffusion en continu, et si cette même tuile est rendue par le biais d’une autre ressource de diffusion en continu, cette tuile doit être effacée comme décrit précédemment.If a tile is mapped into multiple streaming resources at the same time and tile contents are manipulated by any means (render, copy, and so on) via one of the streaming resources, if the same tile is to be rendered via any other streaming resource, the tile must be cleared first as previously described.

Effectuer le rendu rendu aux vignettes partagées à l’extérieurRendering to tiles shared outside render area

Supposons qu’une zone dans une ressource de diffusion en continu est rendue et que les tuiles d’un pool de tuiles référencées par la zone de rendu sont également mappées en dehors de la zone de rendu (y compris via d’autres ressources de diffusion en continu, en même temps ou non).Suppose an area in a streaming resource is being rendered to and the tile pool tiles referenced by the render area are also mapped to from outside the render area (including via other streaming resources, at the same time or not). Les données restituées dans ces tuiles risquent de ne pas s’afficher correctement lorsqu’elles sont affichées par d’autres mappages, même si la disposition de la mémoire sous-jacente est compatible.Data rendered to these tiles isn't guaranteed to appear correctly when viewed through the other mappings, even though the underlying memory layout is compatible. Cela est dû aux structures de données d’optimisation utilisées par certains matériels et qui peuvent être locales pour les mappages individuels de surfaces pouvant être rendues, et non visibles par les autres mappages dans le même emplacement de mémoire.This fact is due to optimization data structures some hardware use that can be local to individual mappings for renderable surfaces and not visible to other mappings to the same memory location.

Vous pouvez contourner cette restriction en copiant les mappages de rendu vers tous les autres mappages dans la même mémoire accessible (ou en effaçant cette mémoire ou en copiant les autres données dans cette mémoire si les anciens contenus ne sont plus nécessaires).You can work around this restriction by copying from the rendered mapping to all the other mappings to the same memory that might be accessed (or clearing that memory or copying other data to it if the old contents are no longer needed). Même si cette solution semble redondante, elle permet à tous les autres mappages de la même mémoire de comprendre comment accéder correctement à leurs contenus, et permet des économies de mémoire grâce à une seule sauvegarde de mémoire physique.While this work-around seems redundant, it makes all other mappings to the same memory correctly understand how to access its contents, and at least the memory savings of having only a single physical memory backing remains intact.

Lorsque vous utilisez différentes ressources de diffusion en continu partageant des mappages (au moins la lecture), vous devez spécifier une contrainte de classement d’accès aux données (une barrière) pour les multiples ressources à tuiles, entre les basculements.Also, when you switch between using different streaming resources that share mappings (unless only reading), you must specify a data access ordering constraint (a barrier) between multiple tiled resources, in between the switches.

Rendu des vignettes partagées au sein de la zone de renduRendering to tiles shared within render area

Si une zone dans une ressource de diffusion en continu est affichée et que plusieurs tuiles sont mappées dans la zone de rendu vers le même emplacement de pool de tuiles, les résultats du rendu ne sont pas définis pour ces tuiles.If an area in a streaming resource is being rendered to and within the render area multiple tiles are mapped to the same tile pool location, rendering results are undefined on those tiles.

Compatibilité des données entre les ressources de partage de vignettes de diffusion en continuData compatibility across streaming resources sharing tiles

Supposons que plusieurs ressources de diffusion en continu ont des mappages aux mêmes emplacements de pool de tuiles et que chaque ressource est utilisée pour accéder aux mêmes données.Suppose multiple streaming resources have mappings to the same tile pool locations and each resource is used to access the same data. Ce scénario est valide uniquement si les autres règles liées à la prévention des problèmes avec les structures d’optimisation du matériel n’existent pas, des barrières appropriées sont spécifiées (avec une contrainte de classement d’accès aux données pour les multiples ressources à tuiles) et les ressources de diffusion en continu sont compatibles entre elles.This scenario is only valid if the other rules about avoiding problems with hardware optimization structures are avoided, appropriate barriers are specified (specifying a data access ordering constraint between multiple tiled resources), and the streaming resources are compatible with each other.

L’incompatibilité des ressources de diffusion en continu partageant des tuiles est expliquée ici.The latter is described here in terms of what it means for streaming resources sharing tiles to be incompatible. Les conditions d’incompatibilité d’accès aux mêmes données entre des mappages de tuiles en double reposent sur l’utilisation de différents formats ou dimensions de surface ou sur la présence ou non d’indicateurs de liaison de profondeur/gabarit ou de rendu cible dans les ressources.The incompatibility conditions of accessing the same data across duplicate tile mappings are the use of different surface dimensions or format, or differences in the presence of render target or depth stencil bind flags on the resources. L’écriture dans la mémoire avec un type de mappage produit des résultats non définis si vous lisez ou effectuez un rendu via un mappage d’une ressource incompatible.Writing to the memory with one type of mapping produces undefined results if you subsequently read or render via a mapping from an incompatible resource.

Si les autres ressource partageant des mappages sont initialisées avec de nouvelles données (recyclage de la mémoire pour un rôle différent), les opérations de lecture ou de rendu suivantes sont correctes dans la mesure où les données ne sont pas fusionnées dans des interprétations incompatibles.If the other resource sharing mappings are first initialized with new data (recycling the memory for a different purpose), the subsequent read or render operation is fine since data isn't bleeding across incompatible interpretations. Toutefois, lorsque vous basculez entre l’accès à des mappages incompatibles, vous devez spécifier des barrières (avec une contrainte de classement d’accès de données entre plusieurs ressources à tuiles).But, when you switch between accessing incompatible mappings like this, you must specify barriers (specifying a data access ordering constraint between multiple tiled resources).

Si l’indicateur de liaison de profondeur/gabarit ou de rendu cible n’est pas défini sur les ressources partageant des mappages, il existe beaucoup moins de restrictions.If the render target or depth stencil bind flag isn't set on any of the resources sharing mappings with each other, there are far fewer restrictions. Dans la mesure où les types de format et de surface (par exemple, Texture2D) sont identiques, les tuiles peuvent être partagées.As long as the format and surface types (for example, Texture2D) are the same, tiles can be shared. Différents formats compatibles sont des cas tels que BC* surfaces et leur équivalent taille non compressée 32 bits ou 16 bits par composant format, tel que BC6H et R32G32B32A32.Different formats being compatible are cases such as BC* surfaces and the equivalent sized uncompressed 32 bit or 16 bit per component format, like BC6H and R32G32B32A32. Nombre 32 bits par élément formats peuvent être appelées par les alias R32_ * ainsi (R10G10B10A2_*, R8G8B8A8_*, B8G8R8A8_*, B8G8R8X8_ *, R16G16_*) ; cette opération n’a toujours été autorisée pour les ressources de non diffusion en continu.Many 32 bit per element formats can be aliased with R32_* as well (R10G10B10A2_*, R8G8B8A8_*, B8G8R8A8_*,B8G8R8X8_*,R16G16_*); this operation has always been allowed for non-streaming resources.

Le partage entre des tuiles compressées et non compressées fonctionne correctement si les formats sont compatibles et si les tuiles sont remplies avec une couleur unie.Sharing between packed and non-packed tiles is fine if the formats are compatible and the tiles are filled with solid color.

Enfin, si des ressources partageant des mappages de tuiles n’ont rien en commun, sauf qu’aucune ne présente d’indicateur de liaison de profondeur/gabarit ou de rendu cible, seule une mémoire remplie avec 0 peut être partagée en toute sécurité. Le mappage s’affiche avec une valeur de décodage de 0 pour la définition du format de ressource donné (généralement 0).Finally, if nothing is common about the resources sharing tile mappings except that none have render target or depth stencil bind flags, only memory filled with 0 can be shared safely; the mapping will appear as whatever 0 decodes to for the definition of the given resource format (typically just 0).

Rubriques connexesRelated topics

Accès de pipeline pour la diffusion en continu de ressourcesPipeline access to streaming resources