2013-04-16 7 views
1

Я хочу использовать память groupshared в DirectX Compute Shader, чтобы сократить пропускную способность глобальной памяти и, надеюсь, повысить производительность. Мой ввод данных является Texture2D, и я могу получить к нему доступ с помощью 2D индексации следующим образом:Поддерживает ли DirectX Compute Shaders двумерные массивы в общей памяти?

Input[threadID.xy] 

Я хотел бы иметь 2D массив общей памяти для кэширования частей входных данных, поэтому я попытался очевидное:

groupshared float SharedInput[32, 32]; 

Не скомпилировать. В сообщении об ошибке указано syntax error: unexpected token ','.

Есть ли способ иметь 2D-массив разделяемой памяти? Если нет, то какой хороший метод работы с 2D-данными, хранящимися в 1D-массиве разделяемой памяти?

+0

Вы пытались [] []? Даже DX9c HLSL поддерживает его, поэтому с некоторым воображением вы должны также вычислить шейдеры. – Orwell

+0

Я не пробовал '[] []'. Это создало бы массив массивов, который отличается от 2D-массива. Индексация будет не такой приятной, как 2D-индексация, но лучше, чем линейная индексация. Интересно, есть ли разница в производительности по сравнению с одним линейным массивом? – shoelzer

ответ

2

groupshared массивы не могут быть проиндексированы с многомерным индексированием. Самое близкое, что вы можете получить, это массив массивов, где каждое измерение индексируется независимо.

groupshared float SharedInput[32][32]; 

Это не так хорошо, как многомерное индексирование, но по крайней мере вам не нужно вычислять линейный индекс вручную.