2016-08-04 22 views
1

Ich versuche Light Volumes für meinen Deferred Renderer zu verwenden. Aber ich stoße auf ein Problem mit den Schablonenoperationen. Momentan benutze ich einen Tiefen/Schablonen-Anhang mit Format VK_FORMAT_D32_SFLOAT_S8_UINT. Im Beleuchtungsteilpass muss ich die Tiefe lesen, um die Position zu rekonstruieren, und die Schablone lesen und schreiben, um das Lichtvolumen zu maskieren. Zum Beleuchtungsteilpass möchte ich die Tiefe/Schablone als Eingabeanhang und als Tiefenanhang hinzufügen, aber diese erfordern unterschiedliche Layouts, die offensichtlich nicht gleichzeitig möglich sind.Das gleiche (Tiefen-) Attachment in einem Subpass lesen und schreiben

Im Augenblick beziehe ich mich auf den gleichen Anhang sowohl als Eingabe-Anhang als auch als Tiefen-Anhang im selben Subpass. Als Eingabeanhang ist das Layout VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL und als Tiefenanhang das Layout ist VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL (keine Validierungsfehler geben?), Und meine Schablonenoperationen werden nicht ausgeführt.

Jetzt könnte ich zwei verschiedene Anhänge für Tiefe und Schablone erstellen, aber das würde möglicherweise mehr Speicher verwenden, was auch nicht toll ist. Meine Frage ist also: Wie richte ich einen Subpass ein, in dem Sie die gleiche Tiefe/Schablonenanhang lesen und schreiben können? (Innerhalb einer einzigen Pipeline als auch)

+0

sollten Sie in der Lage sein, das Layout GENERAL zu verwenden –

Antwort

1

aber diese erfordern verschiedene Layout

Nonsense; das ist, was das GENERAL Layout für ist. Die Spezifikation selbst bringt ausdrücklich, dass bis:

Eine Anlage sowohl als Eingangsanlegung verwendet und Tiefe/Stencil Befestigung entweder in dem VK_IMAGE_LAYOUT_GENERAL oder VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL Layout sein muss

Offensichtlich ist die letztere ist nicht hilfreich für Sie ;)