2017-11-09 9 views
0

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?

+0

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

+0

@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

+0

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

Antwort

0

Ich konnte keine Lösung für dieses Problem finden, aber da ich die Bilddaten manipuliere, scheint RWTexture2D<float4> und die Bereitstellung von Schreibzugriff für das zu funktionieren, was ich erreichen möchte.

Verwandte Themen