0
私は計算をGPUに移そうとしているので、HLSLで大きな配列を定義する方法があります。HLSLで大きな次元の配列を定義するにはどうすればよいですか?
は、私は現在
struct Buffer
{
float3 image[640 * 480];
};
を持っているが、私はこれを分割して、CPUの上に戻ってそれらを一緒にマージする必要はありませんでした場合、それは素晴らしいことだエラーに
error X3059: array dimension must be between 1 and 65536
を取得しています。
方法はありますか?
更新
コメントで述べたように、私は店を作成しようとしている配列は、データを画素として、それは、テクスチャとしてこのデータを保存するために、より理にかなって。私はTexture2D
をHLSLファイルに定義しようとしましたが、データを編集したり、テクスチャファイルに書き込むことができません。
誰でもこれを行う方法を知っていますか?
私はDirectX/HLSLについてよく分かりませんが、OpenGLではUniform Buffers(類似していると思われる)が記憶容量に似た制限を持っています。代わりに代用ストレージとしてテクスチャを使用することをお勧めします(これは最初から画像を表すオブジェクトであると思われるので当てはまりそうです)、またははるかに大きなサイズを持つ* Shader Storage Buffer *を使用してください。私は、Shader Storage BufferのDXバージョンが何であるかはわかりません。 – Xirema
@Xiremaこれはもっと理にかなっています。 Texture2Dを使ってみましたが、シェーダーからピクセルデータを変更できないようです。おそらく私は何かを逃しています。 – user
さて、OpenGLでは、バッファへの読み取りと書き込みの両方のアクセスが必要な場合はShader Storage Buffer *を使用する必要があります。一方、Uniform Buffersは読み取り専用の傾向があり、テクスチャはオブジェクトとしてシェーダを使用し、Texture添付ファイルでカスタムFramebufferをバインドする場合は、Fragment(Pixel、HLSL)シェーダの通常の出力の一部としてのみ書き込まれます。どちらのソリューションでもHLSLに相当するものが必要です。 – Xirema