Correct. But it’s all the same memory. Cuda arrays are just in a special 2D layout that is necessary for doing efficient texture lookups from them. Current hardware can’t directly write to this format. So, yes, they are read only.
You can bind a special kind of 1D texture to any linear range of global memory. This means you can effectively write to these kind of textures, although you should be careful not to write to the same region you’re reading from.
Here’s some example code:
// create a texture reference
texture<float4, 1, cudaReadModeElementType> tex;
// allocate global memory
// bind texture to global memory
cudaBindTexture(0, tex, dData, tex.channelDesc, size);
float4 data = tex1Dfetch(tex, index);