Какие возможные причины IDIRECT3DVERTEXBUFFER9 :: Блокировка не удалось?

StackOverflow https://stackoverflow.com/questions/2771321

  •  03-10-2019
  •  | 
  •  

Вопрос

В отчетах об ошибках от некоторых я довольно часто наблюдался после поведения: IDIRECT3DVERTEXBUFFER9 :: FACK FACH, возвращенный код ошибки D3DERR_NOTAVAILABLE.

Как только это произойдет, совсем часто (но не всегда) сопровождается CreateTexture или CreatevertexBuffer с ошибкой d3derr_outofvideomemory.

Какие возможные причины для отказа брошины буфера вершины? Может ли виртуальный адрес памяти пространство исчерпан или что?

Это было полезно?

Решение

На основании ответа DirectXdev The Chuck Walbourn от Microsoft, кроме того, из «из адресной площади» другая причина может быть «из страницы пула».

В качестве альтернативы, в Windows XP это может указать, что вы попали в пределы памяти ядра бассейна PAGED. Как правило, это происходит, когда вы создаете много ресурсов Direct3D (текстуры и т. Д.)

Мы создаем много ресурсов Direct3D.

Другие советы

Это то, что я разместил на DirectXDev :;)

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

Однако это может быть ошибка водителя ...

Производится ли Runtime Runtime Runte

Редактировать: единственное, что я могу придумать, это то, что память диафрагмы закончилась. Я не знаю, как это работает с PCIExpress, но на AGP вы можете установить размер диафрагмы. Я понятия не имею, как проверить, однако он заполнен. Я подозреваю, что ошибка, которую вы видите, сообщает, что ее полно. Вы делаете много замков с флагом сброса? Если это возможно, это возможно, что они создают тонны новых распределений в апертуре и заставляют вас заканчиваться там. Это чистое угадайте работу, однако.

Идентификатор догадка Что если это происходит только с некоторыми из ваших пользователей, это те на нижних торцевых машинах. Если вещи работают медленно, вы можете в конечном итоге с буферизацией данных в команде буфер. Это сделает контроль LAGGY и «может», на догадку, приведет к проблеме, которую вы видите. Вы можете попробовать убедиться, что буфер команд никогда не становится слишком долго. Если вы убедитесь, что первый замок каждый кадр сделан без флага сброса (т. Е. Флаг, установленный на 0), то это приведет к остановке трубопроводов, пока не будет отображаться буфер Vertex и не принесет с собой командного буфера синхронизации. Это приведет к замедлению, поскольку буферизация команд не сможет сгладить шипы кадров так же легко ...

Во всяком случае ... это просто угадай!

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top