Der Treiber kann das nicht mehr Mappen, weil der Speicher vielleicht fragmentiert ist. Der Code wird technisch bei jedem Render Present Pass aufgerufen und technisch sollte es ja wenn es einmal in den Speicher passt, das auch zukünftig mappen können
Es gibt an der Stelle eigentlich nur zwei Möglichkeiten, entweder ich bekomme den Speicher gemappt in der Größe oder nicht.
VK_ERROR_MEMORY_MAP_FAILED = -5 bedeutet ich bekomme meinen Buffer nicht mehr eingeblendet
Ergo kann es sein einfach nicht mehr genügend Platz gibt im VRAM gibt, das würde dann zum Crash führen. Ich kann versuchen die beiden Buffer nacheinander zu kopieren aber eine Lösung auf Dauer wäre das dann auch nicht.
Alles anzeigen
I will auch nicht ausschließen, dass der mesa Treiber da mist baut, wer weiss. AMD ist bei gamern ja eher rar.
Das Komische ist halt, dass das nur mit einer von drei environment maps passiert, weil die machen an sich ja nicht so viel. Bisschen Licht, bisschen Skybox und Parameterisierung für den Wasser shader.
Mesa hat nur eine Stelle an der VK_ERROR_MEMORY_MAP_FAILED auftritt für RADV und ansonsten finde ich dazu nur einen obskuren vkcube bug.
Diverse Diskussionen rund um Vulkan behaupten man soll am besten seinen Speicher direkt beim Start mappen und dann behalten anstatt das in der Render Loop zu machen, wäre das hier eine Option?
Bis auf den allerletzten crash ist der auch immer am IndexBufferMemory gescheitert, nie am VertexBufferMemory. Kannst du einen großen Block mappen und dann die pointer offsets selbst ausrechnen? Ich habe vage Anspielungen auf mögliche race conditions gesehen und du machst da 2 map calls direkt hintereinander...
Ich mach gleich erst mal Updates und guck ob sich zufällig was am Treiber getan hat.
Edit: Keine Besserung. Hab sogar mal AMDVLK statt RADV ausprobiert, hat keine Auswirkung auf den Fehler.