Kachelzugriffseinschränkungen bei doppelten ZuordnungenTile access limitations with duplicate mappings

Bei doppelten Zuordnungen gibt es Kachelzugriffseinschränkungen, wie z. B. beim Kopieren von Streamingressourcen mit Quellen- und Zielüberlappung oder beim Rendern von Kacheln innerhalb des Bereichs Rendern freigegeben.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.

Kopieren die streaming-Ressourcen mit sich überschneidenden Quelle und ZielCopying streaming resources with overlapping source and destination

Wenn Kacheln in den Bereich für Quelle und Ziel einer Kopie* Vorgang haben Zuordnungen in der Kopierbereich, der überlappende haben würde, auch wenn beide Ressourcen keine Ressourcen und die Kopie streaming wurden dupliziert* -Vorgang unterstützt überlappende kopiert, die Kopie* Vorgang verhält (wie bei die Quelle in ein temporäres Verzeichnis kopiert wird, vor dem Wechsel in das Ziel) einwandfrei.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). Wenn die Überlappung nicht offensichtlich ist (bspw. sind die Quell- und Zielressourcen unterschiedlich, teilen jedoch Zuordnungen oder Zuordnungen werden über eine bestimmte Oberfläche dupliziert), sind Ergebnisse des Kopiervorgangs auf den Kacheln, die freigegeben werden, nicht definiert.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.

In der streaming-Ressource mit doppelt vorhandenen Kacheln im Zielbereich kopiertCopying to streaming resource with duplicated tiles in destination area

Das Kopieren auf eine Streamingressource mit duplizierten Kacheln im Zielbereich erzeugt nicht definierte Ergebnisse in diesen Kacheln, es sei denn, die Daten selbst sind identisch. Verschiedene Kacheln können die Kacheln in einer anderen Reihenfolge schreiben.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 greift auf doppelte Kacheln Zuordnungen auf.UAV accesses to duplicate tiles mappings

Nehmen wir an, dass eine unsortierte Access-Ansicht (UAV) auf einer Streamingressource doppelte Kachelzuordnungen in ihrem Gebiet oder mit anderen Ressourcen, die an die Pipeline gebunden sind, hat.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. Die Sortierung der Zugriffe auf diese dupliziert Kacheln ist nicht definiert, wenn sie durch verschiedene Threads durchgeführt wird. Jegliche Sortierung des Speicherzugriffs auf UAVs ist allgemein nicht sortiert.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.

Rendering nach Kachel Zuordnung Änderungen oder Updates von Zuordnungen von externen InhaltenRendering after tile mapping changes or content updates from outside mappings

Wenn ein streaming der Ressource Kachel Zuordnungen wurden geändert, oder Inhalte in zugeordneten gekachelten poolkacheln über eine andere streaming Ressource Zuordnungen und die streaming-Ressource geändert haben, ist Ansicht des Renderziels über gerendert werden soll oder Ansicht der tiefenschablone, die Anwendung muss Deaktivieren Sie (mit der fixed-Funktion Clear-APIs) oder vollständig kopieren Sie mithilfe einer Kopie*/Update* APIs, wenn die Kacheln, die innerhalb des Bereichs geändert haben (zugeordnet oder nicht) gerendert wird.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).

Scheitern der Anwendung beim Deaktivierungs- oder Kopiervorgang führt in diesen Fällen dazu, dass die Hardware-Optimierungsstrukturen für die angegebene Renderzielansicht oder Tiefenschablonen-Ansicht veralten. Außerdem führt es zu Garbage-Renderergebnisse und zu Inkonsistenzen in verschiedener Hardware.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. Diese ausgeblendeten Optimierungsdatenstrukturen, die von der Hardware verwendet werden, befinden sich möglicherweise lokal auf einzelne Zuordnungen und sind nicht für Zuordnungen zum gleichen Arbeitsspeicher sichtbar.These hidden optimization data structures used by hardware might be local to individual mappings and not visible to other mappings to the same memory.

Wenn Sie eine Ressourcenansicht (durch Festlegen aller Elemente in einer Ressourcenansicht auf einen Wert) deaktivieren, können Sie Renderzielansichten mithilfe von Rechtecken deaktivieren.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. Für Hardware, das Streamingressourcen unterstützt, muss das Deaktivieren einer Ressourcenansicht auch das Deaktivieren von Tiefenschablonenansichten ausschließlich für Oberflächen (ohne Schablone) mithilfe von Rechtecken unterstützen.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). Dieser Vorgang ermöglicht es der Anwendung, nur den erforderlichen Bereich einer Oberfläche zu deaktivieren.This operation allows applications to clear only the necessary area of a surface.

Wenn eine Anwendung den bestehenden Speicherinhalt der Bereiche in einer Streamingressource beibehalten muss, in denen Zuordnungen geändert wurden, muss diese Anwendungen die klare Anforderung umgehen.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. Die Anwendung kann die Anforderung erfolgreich umgehen, indem der Inhalt zunächst in den Bereichen gespeichert wird, in denen Kachelzuordnungen (durch das Kopieren in eine temporäre Oberfläche) geändert wurden, der erforderliche Deaktivierungsbefehl gegeben wird und der Inhalt zurück kopiert wird.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. Während dies die Aufgabe des Beibehalten von Oberflächeninhalten für das inkrementelle Rendern ausführen würde, besteht der Nachteil darin, dass nachfolgende Renderingleistung auf der Oberfläche beeinträchtigt werden kann, da Renderoptimierungen möglicherweise verloren gehen.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.

Wenn eine Kachel gleichzeitig in mehreren Streamingressourcen zugeordnet ist und der Kachelinhalt auf irgendeine Weise (Rendern, Kopieren und so weiter) über eine der Streamingressourcen geändert wurden, und die gleiche Kachel über eine andere Streamingressource gerendert wird, muss zunächst wie zuvor beschrieben die Kachel gelöscht werden.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.

Rendering an Kacheln, die außerhalb von freigegebenen Bereich zu rendernRendering to tiles shared outside render area

Nehmen Sie an, dass ein Bereich in einer Streamingressource gerendert wird und die Poolkacheln, die vom Renderbereich verwiesen werden, auch von außerhalb des Renderbereichs zugeordnet werden (auch über andere Streamingressourcen, zur gleichen Zeit oder nicht).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). Die Daten, die für diese Kacheln gerendert werden, werden möglicherweise nicht richtig über die anderen Zuordnungen angezeigt, obwohl das zugrunde liegende Speicherlayout kompatibel ist.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. Dies ergibt sich aus der Tatsache, dass die Optimierungsdatenstrukturen, die manche Hardware-Typen verwenden, auf einzelne lokale Zuordnungen für darstellbare Oberflächen sein können und möglicherweise für andere Zuordnungen an demselben Speicherort nicht angezeigt werden.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.

Sie können diese Einschränkung umgehen, indem Sie von der gerenderten Zuordnung auf alle anderen Zuordnungen des gleichen Speichers kopieren, auf dem zugegriffen werden kann (oder indem Sie den Arbeitsspeicher löschen oder andere Daten auf den Speicher kopieren, wenn der alte Inhalt nicht mehr benötigt wird).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). Während diese Umgehung redundant erscheint, ermöglicht es allen anderen Zuordnungen des gleichen Speichers den ordnungsgemäßen Zugriff auf seine Inhalte. Zumindest bleiben die Speichereinsparungen mit nur einem einzelnen physischen Speichersicherung erhalten.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.

Außerdem, wenn Sie zwischen verschiedenen Streamingressourcen wechseln, die Zuordnungen teilen (es sei denn, es sind nur lesbare), müssen Sie eine Einschränkung der Datenzugriffsreihenfolge (eine Barriere) zwischen Ressourcen mit mehreren Kacheln und zwischen den Switches angeben.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.

Rendern in das freigegebene innerhalb Bereichs, der Rendering KachelnRendering to tiles shared within render area

Wenn ein Bereich in einer Streamingressource gerendert zu und innerhalb des Renderbereichs gerendert wird und mehrere Kacheln am selben Speicherort des Kachelpools zugeordnet werden, sind die Renderingergebnisse auf diesen Kacheln nicht definiert.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.

Kompatibilität der Daten für das streaming von Ressourcen freigeben von KachelnData compatibility across streaming resources sharing tiles

Nehmen wir an, dass mehrere Streamingressourcen Zuordnungen auf die gleichen Speicherorte der Kachelpools haben und jede Ressource dazu verwendet wird, um auf dieselben Daten zuzugreifen.Suppose multiple streaming resources have mappings to the same tile pool locations and each resource is used to access the same data. Dieses Szenario gilt nur, wenn die anderen Regeln zum Vermeiden von Problemen mit Hardwareoptimierungsstrukturen vermieden werden, entsprechende Hindernisse angegeben werden (Angeben einer Einschränkung der Datenzugriffsreihenfolge zwischen Ressourcen mit mehreren Kacheln) und die Streamingressourcen miteinander kompatibel sind.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.

Die zweite Option wird hier in Bezug auf die Bedeutung für die Streamingressourcen beschrieben, die Kacheln freigeben, um inkompatibel zu sein.The latter is described here in terms of what it means for streaming resources sharing tiles to be incompatible. Die Inkompatibilitätsbedingungen für den Zugriff auf dieselben Daten über doppelte Kachelzuordnungen ergeben sich aus der Verwendung der verschiedenen Oberflächenabmessungen oder des Formats, oder aus Differenzen der Bindungskennzeichen für Renderziele oder Tiefenschablonen auf den Ressourcen.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. Das Schreiben im Speicher mit einem Zuordnungstyp erzeugt undefinierte Ergebnisse, wenn Sie anschließend über eine Zuordnung von einer nicht kompatiblen Ressource lesen oder rendern.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.

Wenn die anderen freigegebenen Ressourcenzuordnungen zuerst mit neuen Daten initialisiert werden (Wiederverwendung des Speichers für einen anderen Zweck), ist der nachfolgende Lese- oder Rendervorgang geeignet, da Daten nicht über inkompatible Interpretationen übertragen werden.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. Beim Wechseln zwischen den Zugriffen auf inkompatible Zuordnungen wie hier müssen Sie jedoch Barrieren angeben (Angeben einer Einschränkung der Datenzugriffsreihenfolge zwischen Ressourcen mit mehreren Kacheln).But, when you switch between accessing incompatible mappings like this, you must specify barriers (specifying a data access ordering constraint between multiple tiled resources).

Wenn das Bindungskennzeichen für das Renderziel oder die Tiefenschablone nicht auf eine der Ressourcen festgelegt ist, die miteinander Zuordnungen teilen, gibt es sehr viel weniger Einschränkungen.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. Solange die Format- und Surface-Typen (z. B. Texture2D) identisch sind, können Kacheln freigegeben werden.As long as the format and surface types (for example, Texture2D) are the same, tiles can be shared. Verschiedene Formate, die kompatibel sind Fälle, z. B. BC* Oberflächen und die entsprechende Größe nicht komprimierte 32-Bit- oder 16 Bit pro Komponentenformat, wie z. B. BC6H und 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. Viele 32-Bit pro Element in Formaten möglich Alias R32 Entwickelt bei_ * auch (R10G10B10A2_*, R8G8B8A8_*, B8G8R8A8_*, B8G8R8X8_ *, R16G16_*); dieser Vorgang wurde immer zulässig, für nicht-streaming-Ressourcen.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.

Das Freigeben zwischen verpackten und nicht verpackten Kacheln ist geeignet, wenn die Formate kompatibel und die Kacheln mit Volltonfarbe gefüllt sind.Sharing between packed and non-packed tiles is fine if the formats are compatible and the tiles are filled with solid color.

Wenn die Zuordnungen der Ressourcenfreigabekachel keine Ähnlichkeiten aufweisen, abgesehen davon, dass keine Bindungskennzeichen für Renderziel oder Tiefenschablone festgelegt wurden, kann nur mit 0 gefüllter Speicher problemlos geteilt werden. Die Zuordnung wird als das angezeigt, was aus 0 für die Definition des gegebenen Ressourcenformats (in der Regel nur 0) dekodiert wird.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).

Verwandte ThemenRelated topics

Pipeline-Zugriff auf Ressourcen streamingPipeline access to streaming resources