Sagen, wenn ich Matrizen innerhalb der GPU-Pipeline für Vertex-Transformationen erstellen wollte, erkannte ich, dass meine aktuelle Implementierung ziemlich ineffizient ist, weil es die Matrizen aus dem Quellmaterial für jedes einzelne neu erstellt Vertex (während es nur einmal pro betroffener Vertices erstellt werden muss). Gibt es eine Möglichkeit, das gesamte Array von Scheitelpunkten zu ändern, die in einem einzigen Zeichenaufruf gezeichnet werden? Das Berechnen der Matrizen und deren Speicherung in Vram scheint keine sehr gute Option zu sein, da mehrere Vertices gleichzeitig verarbeitet werden und ich denke nicht, dass ich sie effizient synchronisieren kann. Die einzige andere Option, die ich mir vorstellen kann, ist compute shader, ich habe noch nicht in seine Verwendung geschaut, aber wäre es möglich, die Matrizen berechnen zu lassen und sie in der GPU zu speichern, damit ich später darauf zugreifen kann?Zugriff auf alle Vertices in einem Zeichenaufruf von hlsl in SM4 +
Antwort
Haben Sie einen Quellcode? Ich berechne niemals Matrizen in den Shadern, mache es normalerweise auf der CPU und übergebe sie in einem konstanten Puffer.
Wenn Sie Hardware-Instanz, dann müssen Sie Welt * VP auf der GPU berechnen. – Puppy
Eine Möglichkeit, dies zu erreichen, besteht darin, die Matrix vorab zu berechnen und sie als einheitliche Variable an den Shader zu senden. Wenn Ihre Shader beispielsweise die MVP-Matrix nur mit den Vertex-Positionen multiplizieren müssen, könnten Sie die MVP-Matrix außerhalb des Shaders vorausberechnen und sie als float4x4-Uniform an den Shader senden, was der Vertex-Shader dann tut multipliziere diese einzelne Matrix mit jedem Eckpunkt. Es wird nicht viel optimaler, da Vertices parallel auf der GPU verarbeitet werden und die GPU Befehlssätze hat, die für die Vektorrechnung optimiert sind.
Nur eine kleine Präzision, was bedeutet SM4 +? – wil