What to use to pass a large texture to material dynamically every frame?

I want to project some sort of grid on my terrain. Currently I create a grid using custom material function. It calculates everything itselves. But I also want to pass some info like cell colors from some blueprint to my material. Currently I create a new texture from array containing colors every time I want to update cell info using memcpy. But it looks like a very bad way when a want to have a map containing for example 10000 x 10000 grid. It makes me to memcpy 390 MB (because my texture contains RGB8) every time I want to update grid. And then pass it to material (I don’t know really how GPU receives texture from RAM but it looks like I first copy my array to texture and then copy my texture to GPU memory). How can I do this kind of stuff a better way? I heard of Canvas Render Target 2D. But currently I don’t understand if it solves my problem