2017-11-09 20 views
0

내 계산을 GPU로 옮기려고 할 때 HLSL에서 대용량 배열을 정의 할 수있는 방법이 있습니까?HLSL에서 큰 차원의 배열을 정의하려면 어떻게해야합니까?

나는 현재

struct Buffer 
{ 
    float3 image[640 * 480]; 
}; 

을 가지고 있지만 나는이를 분할 한 후 CPU에 다시 함께 병합하지 않은 경우 그것은 좋은 것입니다 오류를

error X3059: array dimension must be between 1 and 65536 

무엇입니까 .

이 방법이 있습니까? 코멘트에서 언급 한 바와 같이

업데이트

, 내가 저장를 픽셀 데이터로 만들려고 해요 배열과 같은 텍스처로이 데이터를 저장하는 것이 더 의미가있다. HLSL 파일에 내 Texture2D을 정의하려했지만 데이터를 편집하거나 텍스처 파일에 쓸 수 없습니다.

누구든지이 작업을 수행하는 방법을 알고 있습니까?

+0

저는 DirectX/HLSL에 대해 많이 알지 못합니다. 그러나 OpenGL에서 Uniform Buffers (이 유사점이있는 것 같습니다)는 저장 용량에 비슷한 제한이 있으며 일반적으로 대신 대체 저장 공간으로 텍스처를 사용하는 것이 좋습니다 (이것은 처음부터 이미지를 나타내는 객체로 보이기 때문에 적합합니다), 훨씬 더 큰 크기를 가질 수있는 * Shader Storage Buffer *를 사용하십시오. 나는 Shader Storage Buffer의 DX 버전이 무엇인지 알지 못합니다. – Xirema

+0

@Xirema 더 예스 합니다. Texture2D를 사용하려했지만 셰이더에서 픽셀 데이터를 수정할 수 없습니다. 아마 나는 뭔가를 놓치고있다. – user

+0

글쎄, OpenGL에서 버퍼에 대한 읽기 및 쓰기 권한을 모두 원할 경우 * Shader Storage Buffers *를 사용해야하며 Uniform Buffers는 읽기 전용 인 경향이 있고 텍스처는 객체로 객체가 제공 될 때만 읽을 수 있어야합니다. 셰이더를 사용하고 Texture 첨부 파일을 사용하여 사용자 정의 Framebuffer를 바인딩하는 경우 Fragment (Pixel, HLSL에서) 셰이더의 일반 출력의 일부로 만 쓸 수 있습니다. 어느 솔루션이든지 HLSL에 상응하는 솔루션이 있어야합니다. – Xirema

답변

0

이 해결책을 찾지 못했지만 이미지 데이터를 조작 할 때 RWTexture2D<float4>을 사용하고 읽기 쓰기 액세스를 제공하면 내가 달성하기를 원하는대로 잘 작동하는 것 같습니다.