Frage

Fehlerberichte von einigen habe ich ziemlich oft folgendes Verhalten gesehen. IDirect3DVertexBuffer9 :: Lock ausfällt, zurückgegeben Fehlercode ist D3DERR_NOTAVAILABLE

Sobald dies geschieht, recht häufig (aber nicht immer) durch CreateTexture oder CreateVertexBuffer andernfalls mit Fehler D3DERR_OUTOFVIDEOMEMORY folgt.

Was sind mögliche Gründe für Eckpunktpufferspeicher Sperre Ausfall? Könnte Adressraum des virtuellen Speichers erschöpft, oder was?

War es hilfreich?

Lösung

Auf der Grundlage der DIRECTXDEV Antwort von Chuck Walbourn von Microsoft, neben der "aus Adressraum" eine andere Ursache könnte sein, "out of Pagepool".

Alternativ auf Windows XP Dies könnte darauf hindeuten Sie die Grenzen des ausgelagerten Pool Kernel-Speicher getroffen haben. Typischerweise dies geschieht, wenn Sie eine Menge von Direct3D Ressourcen erstellen (Texturen, etc.)

Wir haben eine Menge Direct3D Ressourcen erstellen.

Andere Tipps

Das ist, was ich DirectXDev geschrieben:;)

Haben Sie überprüft, wie viel Speicher Ihre Anwendung verwendet? (Sicher sein zu wählen Sie den virtuellen Speicher Spalte in Taskmanager!). Meine Vermutung wäre, Speicherfragmentierung basierend Fragen was Sie zu, wie Sie vorschlagen, laufen aus Adressraum.

Es könnte jedoch sein, ein Treiber-Problem ...

Ist die Debug-Laufzeit alle nützlichen Informationen zur Verfügung stellen?

Edit: Das einzige, was ich denken kann, ist, dass die Öffnung Speicher aufgebraucht ist. Ich weiß nicht, wie das mit PCI-Express funktioniert, aber auf AGP können Sie die Öffnungsgröße eingestellt. Ich habe keine Ahnung, wie zu überprüfen, ob es voll ist jedoch. Ich vermute, dass der Fehler, den Sie sehen, dass seine volle berichtet. Machst du viele Schlösser mit dem Verwerfen Flagge? Wenn dies der Fall sein mögliches, daß diese Tonnen neue Zuweisungen in der Öffnung schaffen und verursacht Sie dort Speicher zur Neige. Das ist reine jedoch Mutmaßungen.

Ich würde Vermutung , wenn dies nur mit Ihrem Benutzer einige geschieht es diejenigen am unteren Ende Maschinen ist. Wenn die Dinge langsam laufen, dann können Sie in dem Befehlspuffer gepuffert mit vielen Daten enden. Dies wird die Kontrolle laggy machen und „könnte“, bei einer Vermutung, führen zu dem Problem, das Sie sehen. Sie können sicherstellen, dass Puffer versuchen wollen, dass der Befehl nicht zu lang wird. Wenn Sie sicher, dass das erste Schloss von jedem Rahmen, ohne die Ablage Flagge getan wird (dh Flag auf 0 gesetzt), dann wird dies die Pipeline Stall führen, bis der Eckenpuffer gerendert wurde und bringt die Befehlspuffer wieder synchron mit. Dies wird eine Verlangsamung als Befehlspufferung verursacht Frame-Rate Spikes nicht in der Lage sein zu glätten, wie leicht ...

Wie auch immer ... das ist nur eine Vermutung!

Die erhöhte Ausgabe über Speicher out gültig ist. Wir brauchen ein paar Details über die Sperre () -Aufruf sicher zu sein, und zum Beispiel, wenn es in dem Standard-Pool ist, und wenn es der dynamische (D3DLOCK_DISCARD Flag übergeben wird), ist es sehr gut möglich, dass Ihre Fahrer versuchen, finden einen ungenutzten Teil des Speichers auf Rückkehr (weil es intern verdoppeln oder verdreifachen Puffer) und schlägt fehl, weil, wie Sie selbst entdecken bald nach, Videospeicher erschöpft ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top