2016-06-15 9 views
2

Ich erstelle eine Textur, die Speicheranforderungen abfragt, und es ist nicht, was ich erwartet hatte. Hier ist die ImageCreateInfo Struktur:Größe im SpeicherAnforderungen nicht das, was ich erwarte

ImageCreateInfo() 
    .X2D(1024, 1024) 
    .Format(Format::R8G8B8_UNORM) 
    .InitialLayout(ImageLayout::PREINITIALIZED) 
    .Tiling(ImageTiling::LINEAR) 
    .Usage(ImageUsageFlagBits::TRANSFER_SRC); 

Nun, ich habe erwartet, ein Byte für jeden von R, G, B, in Breite und Höhe von 1024 Speicheranforderungen von 3 * 1024 * 1024 = 3,145,728 zu geben. Aber stattdessen gibt es 1,048,576 zurück, was perfekt 1024 * 1024 ist. Es scheint sich nicht um das eine Byte für jeden RGB-Kanal zu kümmern. Was fehlt mir hier?

+3

wird das R8G8B8_UNORM-Format unterstützt? Die 3-Byte-Formate müssen nicht unterstützt werden. Sie können überprüfen mit vkGetPhysicalDeviceFormatProperties –

+0

Oh, sehr wahr, ich habe nicht überprüft, dass ... –

Antwort

3

Sie haben Recht, dass dies 3,145,728 Bytes zurückgeben sollte, aber ist das R8G8B8_UNORM-Format tatsächlich auf Ihrer Implementierung verfügbar? Andernfalls erhalten Sie keine korrekte Zuordnungsgröße, da Sie das Bild ohnehin nicht verwenden können.

Wenn Sie Validierungslayer aktivieren, sollte dies einen Fehler von den Bildvalidierungslayern btw auslösen.

Zumindest auf der GPU bin ich gerade nicht für die Tiling-Modi oder als Puffer-Format unterstützt. Aber z.B. R8G8B8A8 oder R8G8 sind verfügbar und geben die korrekte Zuordnungsgröße zurück.

Wenn R8G8B8 tatsächlich auf Ihrer GPU verfügbar ist, könnten Sie Ihre komplette VkImageCreateInfo-Struktur einschließlich der Anzahl der Mips und Layer posten?

So eine gute Idee wäre zu überprüfen, ob das Bildformat, das Sie anfordern (und für das Sie reservieren möchten) tatsächlich für Ihren Anwendungsfall (linear, optimal, Puffer) unterstützt wird.

+0

Ja, ich habe nicht tatsächlich für die Verfügbarkeit des Formats überprüft. Eine kurze Überprüfung von VulkanInfo und wie du sagst, ist es für keinen Tiling-Modus _oder_ für Puffer verfügbar. –

+0

Als eine Randnotiz, ich entwickle immer mit allen Validierungsebenen aktiviert, und dies wirft nicht (SDK 1.0.8). –

+0

Deshalb kompiliere ich die Validierungslayer immer aus aktuellen Quellen. Du brauchst das SDK eigentlich gar nicht;). In Ihrem Fall wird der Bildvalidierungs-Layer einen Fehler auslösen, dass das angeforderte Bildformat nicht unterstützt wird. –

Verwandte Themen