Ограничения доступа к плиткам с повторяющимися сопоставлениями
Существуют ограничения на доступ к плиткам с повторяющимися сопоставлениями, например при копировании потоковых ресурсов с перекрывающимся источником и назначением или при отображении плиток, общих в области отрисовки.
Копирование потоковых ресурсов с перекрывающимся источником и назначением
Если плитки в исходной и целевой области операции Copy* имеют повторяющиеся сопоставления в области копирования, которые будут перекрываться, даже если оба ресурса не были потоковыми ресурсами, а операция Copy* поддерживает перекрывающиеся копии, операция Copy* будет работать нормально (как если источник копируется в временное расположение перед переходом в место назначения). Но если перекрытие не является очевидным (например, исходные и целевые ресурсы отличаются, но сопоставления общих ресурсов дублируются по заданной поверхности), результаты операции копирования на плитках, которые являются общими, не определены.
Копирование в ресурс потоковой передачи с повторяющимися плитками в области назначения
Копирование в ресурс потоковой передачи с повторяющимися плитками в целевой области создает неопределенные результаты в этих плитках, если данные не совпадают; различные плитки могут записывать плитки в разных заказах.
Доступ К UAV к повторяющимся сопоставлениям плиток
Предположим, что неупорядоченное представление доступа (UAV) для потокового ресурса имеет повторяющиеся сопоставления плиток в своей области или с другими ресурсами, связанными с конвейером. Порядок доступа к этим повторяющимся плиткам не определен, если выполняется различными потоками, так же, как и любое упорядочение доступа к UV в целом неупорядочено.
Отрисовка после изменений сопоставления плиток или обновлений содержимого из внешних сопоставлений
Если сопоставления плиток ресурса потоковой передачи изменились или содержимое сопоставленных плиток пула плиток изменились с помощью сопоставлений другого ресурса потоковой передачи, а ресурс потоковой передачи будет отображаться с помощью представления целевого представления или набора элементов глубины, приложение должно очистить (используя фиксированные API-интерфейсы очистки) или полностью скопировать с помощью API Copy*/Update* плитки, которые изменились в области отрисовки (сопоставленные или нет).
Сбой приложения для очистки или копирования в этих случаях приводит к оптимизации оборудования для заданного представления целевого представления визуализации или представления элементов глубины устаревшим, и приведет к отрисовке мусора на некотором оборудовании и несоответствии между различным оборудованием. Эти скрытые структуры данных оптимизации, используемые оборудованием, могут быть локальными для отдельных сопоставлений и не видимыми для других сопоставлений с той же памятью.
При очистке представления ресурсов (настройка всех элементов в представлении ресурсов до одного значения) можно очистить целевые представления с прямоугольниками. Для оборудования, поддерживающего потоковую передачу ресурсов, очистка представления ресурсов также должна поддерживать очистку представлений элементов глубины с прямоугольниками для только поверхностей глубины (без набора элементов). Эта операция позволяет приложениям очищать только необходимую область поверхности.
Если приложению необходимо сохранить существующее содержимое памяти в ресурсе потоковой передачи, где сопоставления изменились, это приложение должно обойти четкое требование. Приложение может выполнить эту работу, сначала сохранив содержимое, в котором изменены сопоставления плиток (путем копирования их во временную поверхность), выдачи требуемой команды очистки, а затем копирования содержимого обратно. Хотя это позволит сохранить содержимое поверхности для добавочной отрисовки, недостатком является то, что последующие производительность отрисовки на поверхности может пострадать, так как оптимизация отрисовки может быть потеряна.
Если плитка сопоставляется с несколькими ресурсами потоковой передачи одновременно, а содержимое плитки обрабатывается любым способом (отрисовка, копирование и т. д.) с помощью одного из ресурсов потоковой передачи, если одна и та же плитка должна быть отрисована через любой другой ресурс потоковой передачи, плитка должна быть очищена сначала, как описано ранее.
Отрисовка для плиток, общих внешних областей отрисовки
Предположим, что область в ресурсе потоковой передачи отрисовывается и плитки пула плиток, на которые ссылается область отрисовки, также сопоставляются с внешней областью отрисовки (включая другие ресурсы потоковой передачи, одновременно или нет). Данные, отрисованные на этих плитках, не гарантированно отображаются правильно при просмотре с помощью других сопоставлений, даже если базовый макет памяти совместим. Это связано с оптимизацией структур данных некоторых аппаратных средств, которые могут быть локальными для отдельных сопоставлений для отрисовываемых поверхностей и не видимы для других сопоставлений с тем же расположением памяти.
Это ограничение можно обойти, скопировав из отрисованного сопоставления ко всем другим сопоставлениям с той же памятью, к ней можно получить доступ (или очистить эту память или скопировать в нее другие данные, если старое содержимое больше не требуется). Хотя эта работа кажется избыточной, все остальные сопоставления с той же памятью правильно понимают, как получить доступ к его содержимому, и, по крайней мере, экономия памяти только в одной физической памяти остается нетронутой.
Кроме того, при переключении между различными ресурсами потоковой передачи, которые совместно используют сопоставления (только при чтении), необходимо указать ограничение порядка доступа к данным (барьер) между несколькими плитками ресурсов между коммутаторами.
Отрисовка в плитках, общих в области отрисовки
Если область в ресурсе потоковой передачи отрисовывается и в пределах области отрисовки несколько плиток сопоставляются с тем же расположением пула плиток, результаты отрисовки не определены на этих плитках.
Совместимость данных между общими плитками потоковой передачи ресурсов
Предположим, что несколько ресурсов потоковой передачи имеют сопоставления с одинаковыми расположениями пула плиток, и каждый ресурс используется для доступа к одинаковым данным. Этот сценарий действителен только в том случае, если другие правила, касающиеся предотвращения проблем с структурами оптимизации оборудования, указываются соответствующие барьеры (указывая ограничение на порядок доступа к данным между несколькими плитками), а ресурсы потоковой передачи совместимы друг с другом.
Последний описан здесь с точки зрения того, что означает для потоковой передачи ресурсов, совместно используемых плитками, несовместимыми. Несовместимость условий доступа к тем же данным в повторяющихся сопоставлениях плиток — это использование различных измерений поверхности или формата, а также различия в присутствии флагов привязки целевого объекта или набора глубины для ресурсов. Запись в память с одним типом сопоставления создает неопределенные результаты при последующем чтении или отображении с помощью сопоставления из несовместимого ресурса.
Если другие сопоставления общего доступа к ресурсам сначала инициализированы с новыми данными (перезапуск памяти для другой цели), последующие операции чтения или отрисовки хорошо, так как данные не кровотечения в несовместимых интерпретациях. Но при переключении между несовместимыми сопоставлениями, такими как это, необходимо указать барьеры (указывая ограничение на порядок доступа к данным между несколькими плитками ресурсов).
Если флаг привязки привязки набора элементов для отрисовки или глубины не задан ни в одном из сопоставлений общего доступа к ресурсам друг с другом, существует гораздо меньше ограничений. Если формат и типы поверхностей (например, Texture2D) одинаковы, плитки можно совместно использовать. Разные форматы совместимы: такие случаи, как поверхности BC* и эквивалентный размер, несжатый 32-разрядный или 16-разрядный для каждого формата компонента, например BC6H и R32G32B32A32. Много 32-разрядных форматов элементов можно также псевдонимировать с помощью R32_* (R10G10B10A2_*, R8G8B8A8_*, B8G8R8A8_*,B8G8R8X8_*,R16G16_*); Эта операция всегда разрешена для непотоковых ресурсов.
Общий доступ между упакованными и непакетными плитками хорошо подходит, если форматы совместимы, а плитки заполнены сплошным цветом.
Наконец, если нет общих сведений о сопоставлениях плиток общего доступа к ресурсам, за исключением того, что нет флагов привязки целевого объекта отображения или набора элементов глубины, можно безопасно использовать только память, заполненную 0; Сопоставление будет отображаться как любое декодирование 0 для определения заданного формата ресурса (обычно всего 0).
Связанные темы
Доступ к потоковым ресурсам конвейера