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