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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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