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


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

Используйте API ID3D11DeviceContext2::ResizeTilePool для увеличения пула плиток, если приложению требуется больше рабочих наборов для сопоставления ресурсов с плитками, или для сокращения, если требуется меньше места. Другим вариантом для приложений является выделение дополнительных пулов плиток для новых ресурсов с плитками. Но если одному ресурсу с плитками требуется больше места, чем изначально доступно в его пуле плиток, расширение пула плиток является хорошим вариантом. Ресурс с плитками не может одновременно сопоставляться с несколькими пулами плиток.

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

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

Чтобы сэкономить память, приложение должно не только уменьшать пул плиток, но и удалять или преобразовывать существующие сопоставления за пределами нового уменьшенного размера пула плиток.

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

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