2013-04-16 3 views
1

DirectX Compute Shader에서 groupshared 메모리를 사용하여 전역 메모리 대역폭을 줄이고 성능을 향상 시키려합니다. 내 입력 데이터는 Texture2D 내가과 같이 2D 인덱스를 사용하여 액세스 할 수DirectX Compute Shaders는 공유 메모리에서 2D 배열을 지원합니까?

Input[threadID.xy] 

는 I 입력 데이터의 일부를 캐싱 공유 메모리의 2 차원 배열을 갖고 싶다 그래서 명백한 시도 :

groupshared float SharedInput[32, 32]; 

컴파일되지 않습니다. 오류 메시지는 syntax error: unexpected token ','입니다.

공유 메모리의 2D 배열을 가질 방법이 있습니까? 그렇지 않다면 공유 메모리의 1D 배열에 저장된 2D 데이터로 작업하기위한 좋은 기술은 무엇입니까?

+0

[] []을 (를) 사용해 보셨습니까? 심지어 DX9c HLSL도이를 지원합니다. 따라서 어떤 상상력으로도 계산 쉐이더는 그렇게해야합니다. – Orwell

+0

나는 [] []을 시도하지 않았다. 그러면 2D 배열과 다른 배열 배열을 만들 수 있습니다. 인덱싱은 2D 인덱싱만큼 좋지는 않지만 선형 인덱싱보다 좋습니다. 하나의 선형 배열에 비해 성능 차이가 있는지 궁금합니다. – shoelzer

답변

2

groupshared 배열을 다차원 인덱싱으로 인덱싱 할 수 없습니다. 얻을 수있는 가장 가까운 배열은 각 차원이 독립적으로 인덱싱되는 배열입니다.

groupshared float SharedInput[32][32]; 

다차원 인덱싱만큼 좋지 않지만 선형 인덱스를 수동으로 계산할 필요는 없습니다.