Поделиться через


Сопоставления находятся в пуле плиток

При создании ресурса в качестве ресурса потоковой передачи плитки, составляющие ресурс, приходят из указателя на расположения в пуле плиток. Пул плиток — это пул памяти (на основе одного или нескольких выделений за кулисами — незамеченный приложением). Операционная система и драйвер отображения управляют этим пулом памяти, и объем памяти легко понимается приложением. Потоковая передача ресурсов сопоставляет регионы 64 КБ, указывая на расположения в пуле плиток. Одним из вариантов этой установки является возможность совместного использования нескольких ресурсов и повторного использования одинаковых плиток, а также повторного использования одинаковых плиток в разных расположениях в ресурсе при необходимости.

Затраты на гибкость заполнения плиток для ресурса из пула плиток заключается в том, что ресурс должен выполнять работу по определению и поддержанию сопоставления плиток в пуле плиток, представляющих плитки, необходимые для ресурса. Сопоставления плиток можно изменить. Кроме того, не все плитки в ресурсе должны быть сопоставлены одновременно; Ресурс может иметь сопоставления NULL . Сопоставление NULL определяет плитку как недоступную с точки зрения доступа к ресурсу.

Можно создать несколько пулов плиток, и любое количество ресурсов потоковой передачи можно сопоставить с любым заданным пулом плиток одновременно. Пулы плиток также можно выращивать или сужать. Дополнительные сведения см. в разделе "Изменение размера пула плиток". Одно ограничение, которое существует для упрощения реализации драйвера отображения и среды выполнения, заключается в том, что заданный ресурс потоковой передачи может иметь сопоставления только в один пул плиток одновременно (в отличие от одновременного сопоставления с несколькими пулами плиток).

Объем хранилища, связанного с самим ресурсом потоковой передачи (то есть независимой памяти пула плиток), примерно пропорционально количеству плиток, сопоставленных с пулом в любое время. В оборудовании этот факт сводится к масштабированию объема памяти для хранилища таблиц страницы примерно с объемом сопоставленных плиток (например, с помощью многоуровневой схемы таблицы по мере необходимости).

Пул плиток можно рассматривать как полностью программную абстракцию, которая позволяет приложениям Direct3D эффективно программировать таблицы страниц на графическом модуле обработки (GPU) без необходимости знать сведения о реализации низкого уровня (или напрямую обращаться с адресами указателя). Пулы плиток не применяют дополнительные уровни косвенного обращения к оборудованию. Оптимизация одноуровневой таблицы страницы с помощью таких конструкций, как каталоги страниц, не зависят от концепции пула плиток.

Давайте рассмотрим, что хранилище самой таблицы страницы может потребоваться в худшем случае (хотя на практике реализациям требуется только хранилище примерно пропорционально сопоставленному).

Предположим, что каждая запись таблицы страницы составляет 64 бита.

Для наихудшего размера таблицы страницы для одной поверхности, учитывая ограничения ресурсов в Direct3D 11, предположим, что ресурс потоковой передачи создается с форматом 128 бит на элемент (например, с плавающей запятой RGBA), поэтому плитка 64 КБ содержит только 4096 пикселей. Максимальный поддерживаемый размер Texture2DArray 16384*16384*2048 (но только с одним mipmap) потребует около 1 ГБ хранилища в таблице страниц, если они полностью заполнены (не включая mipmap) с использованием 64-разрядных записей таблицы. Добавление mipmap увеличит полностью сопоставленное (худшее) хранилище таблиц страницы примерно на треть до около 1,3 ГБ.

В этом случае будет предоставляться доступ к примерно 10,6 терабайтам адресной памяти. Однако может быть ограничение на объем адресной памяти, что приведет к сокращению этих объемов, возможно, к диапазону терабайтов.

Еще одним вариантом является один ресурс потоковой передачи Texture2D 16384*16384 с 32-разрядным форматом элементов, включая MIP-карты. Пространство, необходимое в полно заполненной таблице страницы, будет примерно 170 КБ с 64-разрядными записями таблицы.

Наконец, рассмотрим пример с использованием формата BC, например BC7 с 128 битами на плитку 4x4 пикселей. Это один байт на пиксель. Текстура2DArray 16384*16384*2048, включая mipmaps, потребуется примерно 85 МБ для полного заполнения этой памяти в таблице страницы. Это не плохо, учитывая это, позволяет одному ресурсу потоковой передачи охватывать 550 гигапикселей (512 ГБ памяти в этом случае).

На практике, нигде не было бы рядом с этими полными сопоставлениями, учитывая, что объем доступной физической памяти не позволит сопоставлять и ссылаться на нее в любое время. Но с пулом плиток приложения могут повторно использовать плитки (как простой пример, повторное использование черной цветной плитки для больших черных регионов на изображении) — эффективно с помощью пула плиток (т. е. сопоставления таблиц страниц) в качестве средства сжатия памяти.

Начальное содержимое таблицы страницы имеет значение NULL для всех записей. Приложения также не могут передавать исходные данные для содержимого памяти поверхности, так как оно начинается без резервной копии памяти.

В этом разделе

Раздел Описание

Создание пула плиток

Приложения могут создавать один или несколько пулов плиток на устройство Direct3D. Общий размер каждого пула плиток ограничен ограничением размера ресурсов Direct3D 11, что составляет примерно 1/4 ОЗУ GPU.

Изменение размера пула плиток

Измените размер пула плиток, чтобы увеличить пул плиток, если приложению требуется более рабочий набор для сопоставления ресурсов потоковой передачи или уменьшить, если требуется меньше места.

Отслеживание рисков и ресурсы пула плиток

Для непотоковых ресурсов Direct3D может предотвратить определенные условия риска во время отрисовки, но так как отслеживание рисков будет находиться на уровне плитки для потоковых ресурсов, отслеживание условий опасности во время отрисовки потоковых ресурсов может оказаться слишком дорогостоящим.

 

Создание потоковых ресурсов