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


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

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

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

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

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

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

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

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

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

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

Раздел Описание
Создание пула плиток
Пул плиток создается с помощью API ID3D11Device::CreateBuffer путем передачи флага D3D11_RESOURCE_MISC_TILE_POOL в элементе MiscFlagsструктуры D3D11_BUFFER_DESC , на которую указывает параметр pDesc .
Изменение размера пула плиток
Используйте API ID3D11DeviceContext2::ResizeTilePool для увеличения пула плиток, если приложению требуется более рабочий набор для сопоставления с ним ресурсов плитки, или для сжатия, если требуется меньше места.
Отслеживание рисков и ресурсы пула плиток
Для ресурсов, не являющихся плитками, Direct3D может предотвратить определенные опасные условия во время отрисовки, но так как отслеживание опасности будет выполняться на уровне плитки для мозаичного ресурса, отслеживание опасных условий во время отрисовки ресурсов с плитками может быть слишком затратным.

Создание мозаичного ресурса