Что означает код HRESULT 0x887C0001 (D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS)?

 
Предыдущий Следующий
DXGI_DDI_ERR_NONEXCLUSIVE D3D11_ERROR_FILE_NOT_FOUND

D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS

Что означает D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS

D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS означает, что для одного устройства Direct3D 11 создано больше уникальных объектов состояния, чем допускает реализация. Для уровней возможностей до 11.1 предел составляет 4096.

Ошибка часто указывает на отсутствие дедупликации: логически одинаковые blend, rasterizer, depth-stencil или sampler states создаются снова и снова.

Что проверить

  • Включите Direct3D debug layer и найдите первый вызов создания, который вернул ошибку.
  • Считайте уникальные наборы дескрипторов, а не общее число ссылок на объекты.
  • Проверьте, что кэш состояния использует содержимое дескриптора, а не временный адрес памяти.
  • Освобождайте действительно ненужные объекты, но не рассчитывайте только на периодическую очистку.

Корректное решение — переиспользование эквивалентных immutable state objects. После исправления повторите тот же сценарий длительно, чтобы убедиться, что число уникальных состояний перестало расти.

Технические ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.