Is it legal to use 2d array in shaders?

Hello, I'm going to use C's 2d array in my shaders. The reason is to use 2d index in buffer, instead using textures. Someone from the developers can dissuade me from doing this?

#include <metal_stdlib>
using namespace metal;

struct DebugCell {
    float4 info;
};

struct DebugBuffer {
    DebugCell cells[5][3]; // Column number(x), Row number(y). (x, y) 

};

kernel void debugCells(device DebugBuffer *current [[buffer(0)]], uint2 id [[thread_position_in_grid]]) {
    current[0].cells[id.x][id.y].info.xy = float2(id);
}



/*

 after reshape for printing on CPU it prints

 [[0.0,0.0], [1.0,0.0], [2.0,0.0], [3.0,0.0], [4.0,0.0], [5.0,0.0], [6.0,0.0], [7.0,0.0]]
 [[0.0,1.0], [1.0,1.0], [2.0,1.0], [3.0,1.0], [4.0,1.0], [5.0,1.0], [6.0,1.0], [7.0,1.0]]
 [[0.0,2.0], [1.0,2.0], [2.0,2.0], [3.0,2.0], [4.0,2.0], [5.0,2.0], [6.0,2.0], [7.0,2.0]]

 */
Answered by Engineer in 682899022

Hi, yes this is valid Metal Shading Language syntax and should work.

Accepted Answer

Hi, yes this is valid Metal Shading Language syntax and should work.

Is it legal to use 2d array in shaders?
 
 
Q