Ограничения доступа к плитке с повторяющимися сопоставлениямиTile access limitations with duplicate mappings

Существуют ограничения на доступ к плиткам с повторяющимися сопоставлениями, например при копировании потоковых ресурсов с перекрывающимися источником и назначением или при отрисовке общих плиток для области отрисовки.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.

Копирование потоковой передачи ресурсов с перекрывающимися источником и назначениемCopying streaming resources with overlapping source and 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). Но если перекрытие не является очевидным (например, когда ресурсы источника и назначения различаются, но имеют общие сопоставления, или сопоставления дублируются на определенной поверхности), результаты операции копирования для общих плиток будут не определены.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.

Копирование для потоковой передачи ресурсов с плитками, повторяющиеся в области назначенияCopying to streaming resource with duplicated tiles in destination area

Копирование в потоковый ресурс с повторяющимися плитками в области назначения приводит к неопределенным результатам в таких плитках, если сами данные не являются одинаковыми; различные плитки могут записывать плитки в разном порядке.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 доступ к данным плиток-дубликатов сопоставленияUAV accesses to duplicate tiles mappings

Предположим, что представление неупорядоченного доступа (UAV) потокового ресурса имеет плитки с повторяющимися сопоставлениями в своей области или в других ресурсах, привязанных к конвейеру.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. Порядок доступа к этим повторяющимся плиткам не определен, если выполняется разными потоками, так же, как и любой порядок доступа к памяти в представлениях неупорядоченного доступа.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 after tile mapping changes or content updates from outside mappings

Если сопоставления плитки потоковой передачи ресурса были изменены или содержимое на плитках сопоставленные мозаичного пула были изменены с помощью другого потоковой передачи ресурса сопоставления и потоковой передачи ресурсов будет передаваться через представление целевого объекта прорисовки или представление трафарета глубины, приложение должно Очистить (с помощью функции fixed очистить API-интерфейсы) или полностью скопировать с помощью копирования*/Update* API-интерфейсы плитки, которые были изменены в пределах области визуализируемого (или отсутствия сопоставления).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).

Если приложение в этих случаях не очистит и не скопирует плитки, структуры оптимизации оборудования для представления целевого объекта отрисовки или представления "глубина-трафарет" будут устаревшими, на некотором оборудовании будет отрисовываться мусор, а результаты для различного оборудования будут нестабильными.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. Эти скрытые структуры данных оптимизации, используемые оборудованием, могут быть локальными для отдельных сопоставлений и недоступны другим сопоставлениям одной и той же памяти.These hidden optimization data structures used by hardware might be local to individual mappings and not visible to other mappings to the same memory.

При очистке представления ресурсов (установке одного значения для всех элементов представления ресурса), можно очистить представления однобуферной прорисовки с помощью прямоугольников.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. Для оборудования, которое поддерживает потоковые ресурсы, очистка представления ресурса должна также поддерживать очистку представлений трафарета с помощью прямоугольников для поверхностей глубины (без трафарета).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). Эта операция позволяет приложениям очистить только необходимые области поверхности.This operation allows applications to clear only the necessary area of a surface.

Если приложение должно сохранить существующее содержимое памяти областей в потоковом ресурсе, в котором были изменены сопоставления, приложению необходимо обойти требование очистки.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. Приложение может выполнить такой обход, сначала сохранив содержимое, в котором сопоставления плиток были изменены (путем копирования на временную поверхность), выдав необходимую команду очистки, а затем скопировать содержимое обратно.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. Несмотря на то, что задача сохранения содержимого поверхности для постепенной отрисовки будет выполнена, недостаток состоит в том, что может снизиться производительность последующей отрисовки на данной поверхности, так оптимизации отрисовки могут быть потеряны.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.

Если плитка сопоставлена нескольким потоковым ресурсам одновременно, и над содержимым плитки выполняются какие-либо действия (отрисовка, копирование и т. д.) через один из потоковых ресурсов, при необходимости отрисовки той же плитки через любой другой потоковый ресурс необходимо сначала очистить плитку как описано выше.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 to tiles shared outside render area

Предположим, что область в потоковом ресурсе отрисовывается из-за пределов области отрисовки, и плитки из пула плиток сопоставлены за пределами области отрисовки (включая другие потоковые ресурсы, одновременно или нет).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). Правильное отображение данных на этих плитках не гарантируется при просмотре через другие сопоставления, даже если базовая структура памяти совместима.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. Это происходит из-за структур данных оптимизации, используемых некоторым оборудованием, которые могут быть локальными для отдельных сопоставлений отрисовываемых поверхностей и недоступны другим сопоставлениям того же участка памяти.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.

Это ограничение можно обойти, произведя копирование из отрисованного сопоставления во все остальные сопоставления той же памяти, к которым может осуществляться доступ (или очистку памяти либо копирование в нее других данных, если старое содержимое больше не требуется).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). Несмотря на то, что этот обходной путь выглядит избыточным, благодаря ему все остальные сопоставления для одного и того же участка памяти способны получить доступ к его содержимому, и сохраняется экономия памяти благодаря наличию единого резерва физической памяти.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.

Кроме того, при переключении между различными потоковыми ресурсами, совместно использующими сопоставление (за исключением чтения), необходимо указать ограничение (барьер) порядка доступа к данным для нескольких ресурсов плиток между переключениями.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.

Подготовка к просмотру в плитки, совместно используемым внутри области отрисовкиRendering to tiles shared within render area

Если область в потоковом ресурсе отрисовывается внутри, и в области отрисовки несколько плиток сопоставлены с одним и тем же расположением пула плиток, результаты отрисовки для таких плиток не определены.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.

Совместимость данных через потоковую передачу ресурсов, совместное использование плитокData compatibility across streaming resources sharing tiles

Предположим, что у нескольких потоковых ресурсов имеются сопоставления с одними и теми же расположениями пула плиток, и все ресурсы используются для доступа к одним и тем же данным.Suppose multiple streaming resources have mappings to the same tile pool locations and each resource is used to access the same data. Этот сценарий действует, только если исключаются остальные правила по избежанию проблем со структурами оптимизации оборудования, устанавливаются соответствующие барьеры (ограничения порядка доступа к данным для нескольких ресурсов плиток), а потоковые ресурсы совместимы друг с другом.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.

Последнее описано здесь с точки зрения того, что означает несовместимость потоковых ресурсов, осуществляющих общий доступ к плиткам.The latter is described here in terms of what it means for streaming resources sharing tiles to be incompatible. Условием несовместимости при доступе к одним и тем же данным в повторяющихся сопоставлениях плиток является использование различных размеров или форматов поверхностей, либо наличие у ресурсов флагов привязки трафарета глубины или целей отрисовки.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. Запись в память с одним типом сопоставления дает неопределенные результаты, если в дальнейшем производить чтение или отрисовку через сопоставление несовместимого ресурса.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.

Если другие сопоставления общих ресурсов сначала инициализируются с новыми данными (утилизация памяти для другой цели), последующие операции чтения или отрисовки проходят нормально, так как данные не подвергаются несовместимым интерпретациям.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. Однако при таком переключении между доступом к несовместимым сопоставлениям необходимо указать барьеры (ограничения порядка доступа к данным для нескольких ресурсов плиток).But, when you switch between accessing incompatible mappings like this, you must specify barriers (specifying a data access ordering constraint between multiple tiled resources).

Если флаг привязки цели отрисовки или трафарета глубины не установлен ни на одном ресурсе, имеющем общие сопоставления с другими ресурсами, ограничений становится гораздо меньше.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. Если формат и типы поверхностей (например, Texture2D) совпадают, плитки могут использоваться совместно.As long as the format and surface types (for example, Texture2D) are the same, tiles can be shared. Различные форматы, совместимую являются случаи, например BC* поверхностями и эквивалент размер несжатого 32- или 16 бит на компонент формата, например BC6H и 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. Многие 32-разрядная версия на один элемент форматы может быть присвоен псевдоним с R32_ * также (R10G10B10A2_*, R8G8B8A8_*, B8G8R8A8_*, B8G8R8X8_ *, R16G16_*); эта операция всегда разрешен непотоковые ресурсы.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.

Совместное использование упакованных и не упакованных плиток допускается, если форматы совместимы, а плитки заполняются сплошным цветом.Sharing between packed and non-packed tiles is fine if the formats are compatible and the tiles are filled with solid color.

И наконец, если у ресурсов, использующих общее сопоставление плиток, нет ничего общего, за исключением отсутствующих флагов привязки цели отрисовки или трафарета глубины, безопасно можно совместно использовать только память, заполненную нулями; сопоставление будет отображаться в виде декодированного нуля для определения формата конкретного ресурса (обычно просто 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).

Связанные разделыRelated topics

Конвейер доступ к потоковой передачи ресурсовPipeline access to streaming resources