struct SomeData { float4 a; float2 b; }; layout(set=0, binding=0) readonly buffer storageBuffer { uint offset; SomeData[] inputData; }; layout(set=0, binding=1) buffer outputBuffer { SomeData[] outputData; }; layout(location=2) in flat int bufferIndex; half4 main(float2 coords) { outputData[offset] = inputData[offset]; return half4(inputData[bufferIndex].a * inputData[bufferIndex].b.x); }