Id’s say it is invalid. you can’t have samples in a struct as samplers always have to be uniforms which can’t be in a struct either.
I used the GLSLValidate tool to verify correctnes. It is a good idea to use that tool as nvidia cards are way to tollerand and als0 accept malformed programs. Without GLSLValidate it is practically impossible to develop a shader which will also work on ATI without having an ATI card to test on.