Hello
I am not 100% sure, but it brings back memories of trying to use variable texture offset when sampling. Because what (I think) compiler is trying to tell you is that you can't use variable for "lod" argument - that it would accept only a constant there. I looked up Metal Shading Language Specification, and it says nothing about such restrictions of "write" function. But then, it also isn't saying anything about "offset" parameter as used in texture "sample" function, and I believe that similar restrictions _do_ apply there.
So, in short: seems that your hardware/metal version doesn't allow you to write to arbitrary level of texture from compute shader. Or perhaps you're only allowed to write to one level in one shader execution? I believe that options to work around that are as follows:
1) Change shader so that it writes to one fixed lod, and do multiple versions of said shader using #defines (or function constants)
2) Change compute shader to vertex/fragment pair, and compute pipeline to render pipeline, and then bind various levels of texture as render target.
Hope that helps
Michal