Gibt es eine Möglichkeit, ein großes Array in HLSL oder eine andere Alternative zu definieren, da ich versuche, einige meiner Berechnungen auf die GPU zu verschieben.Wie kann ich ein Array mit einer großen Dimension in HLSL definieren?
Ich habe derzeit
struct Buffer
{
float3 image[640 * 480];
};
aber ich erhalte den Fehler
error X3059: array dimension must be between 1 and 65536
Es wäre toll, wenn ich das nicht spalten hatte und sie dann zusammen auf der CPU fusionieren zurück .
Gibt es einen Weg um dies?
aktualisiert
Wie in den Kommentaren erwähnt, würde es mehr Sinn machen, diese Daten als Textur zu speichern, wie die Array Pixel Ich versuche, speichern Daten zu erstellen. Ich habe versucht, meine Texture2D
in der HLSL-Datei zu definieren, aber ich kann nicht scheinen, die Daten zu bearbeiten oder in die Texturdatei zu schreiben.
Weiß jemand, wie man das macht?
Ich weiß nicht viel über DirectX/HLSL, aber in OpenGL haben Uniform Buffers (denen es ähnlich zu sein scheint) ähnliche Grenzen für ihre Speicherkapazität, und es wird normalerweise empfohlen, stattdessen Texturen als Ersatzspeicher zu verwenden (was passend erscheint, da dies ein Objekt zu sein scheint, das ein Bild von Anfang an darstellt) oder einen * Shader Storage Buffer * verwendet, der viel größere Größen haben kann. Ich weiß nicht, was die DX-Version eines Shader Storage Buffers ist. – Xirema
@Xirema das würde mehr Sinn machen ja. Ich habe gerade versucht, Texture2D zu verwenden, aber ich kann nicht scheinen, die Pixeldaten vom Schattierer zu ändern. Vielleicht vermisse ich etwas. – user
Nun, in OpenGL, müssen Sie * Shader Storage Buffers * verwenden, wenn Sie beide lesen und schreiben Zugriff auf den Puffer, während Uniform Buffers sind in der Regel Read-Only, und Texturen können nur gelesen werden, wenn als Objekt zur Verfügung gestellt Shader und nur als Teil der normalen Ausgabe des Shaders Fragment (Pixel, in HLSL) beschrieben werden, wenn Sie einen benutzerdefinierten Framebuffer mit einem Texture-Anhang binden. Jede Lösung sollte ein Äquivalent in HLSL haben. – Xirema