Это то, что я опубликовал в DirectXDev:;)
Вы проверили, сколько памяти у вас
приложение использует? (Обязательно
выберите столбец Виртуальная память в
Диспетчер задач!). Мое предположение будет
проблемы, связанные с фрагментацией памяти
заставляя вас, как вы предлагаете, бежать
вне адресного пространства.
Однако это может быть ошибка драйвера ...
Предоставляет ли среда отладки какую-либо полезную информацию?
Редактировать: Единственное, о чем я могу думать, это то, что память диафрагмы закончилась. Я не знаю, как это работает с PCIExpress, но на AGP вы можете установить размер диафрагмы. Я не знаю, как проверить, если он полон, однако. Я подозреваю, что ошибка, которую вы видите, сообщает, что она полная. Вы делаете много блокировок с флагом Discard? Если это так, то возможно, что они создают тонны новых выделений в апертуре и приводят к тому, что вам не хватает памяти там. Это чисто догадка, однако.
Я бы предположил , что если это происходит только с некоторыми из ваших пользователей, то это пользователи более низкого уровня. Если дела идут медленно, вы можете получить много данных, буферизованных в буфере команд. Это сделает управление запаздывающим и «может» привести к проблеме, с которой вы столкнулись. Возможно, вы захотите убедиться, что командный буфер никогда не становится слишком длинным. Если вы убедитесь, что первая блокировка каждого кадра выполняется без флага сброса (т. Е. Флаг установлен в 0), то это приведет к остановке конвейера до тех пор, пока буфер вершин не будет отрендерен, и вернет буфер команд обратно с вами. Это приведет к замедлению, поскольку буферизация команды не сможет сгладить скачки частоты кадров так же просто ...
Во всяком случае ... это только предположение!