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


Метод ID3D11DeviceContext2::ResizeTilePool (d3d11_2.h)

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

Синтаксис

HRESULT ResizeTilePool(
  [in] ID3D11Buffer *pTilePool,
  [in] UINT64       NewSizeInBytes
);

Параметры

[in] pTilePool

Тип: ID3D11Buffer*

Указатель на ID3D11Buffer для изменения размера пула плиток.

[in] NewSizeInBytes

Тип: UINT64

Новый размер пула плиток в байтах. Размер должен быть кратным 64 КБ или 0.

Возвращаемое значение

Тип: HRESULT

В случае успешного выполнения возвращает S_OK; в противном случае возвращает одно из следующих значений:

  • Возвращает E_INVALIDARG , если размер нового пула плиток не кратно 64 КБ или 0.
  • Возвращает E_OUTOFMEMORY , если вызов приводит к тому, что драйверу требуется выделить место для новых сопоставлений таблиц страниц, но не хватает памяти.
  • Возвращает DXGI_ERROR_DEVICE_REMOVED, если карта видео было физически удалено из системы или произошло обновление драйвера для карта видео.
Для E_INVALIDARG или E_OUTOFMEMORY существующий пул плиток остается неизменным, включая существующие сопоставления.

Комментарии

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

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

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

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

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

Дополнительные сведения о ресурсах с плитками см. в разделе Плитки ресурсов.

Требования

Требование Значение
Минимальная версия клиента Windows 8.1 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2012 R2 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header d3d11_2.h
Библиотека D3D11.lib

См. также раздел

ID3D11DeviceContext2