Я хочу использовать память 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-массиве разделяемой памяти?
Вы пытались [] []? Даже DX9c HLSL поддерживает его, поэтому с некоторым воображением вы должны также вычислить шейдеры. – Orwell
Я не пробовал '[] []'. Это создало бы массив массивов, который отличается от 2D-массива. Индексация будет не такой приятной, как 2D-индексация, но лучше, чем линейная индексация. Интересно, есть ли разница в производительности по сравнению с одним линейным массивом? – shoelzer