improved separation between shader and shaderIO