Macros are needed to use platform specific defines. MoltenVK, for example, doesn't support everything from Vulkan, so #ifdef is needed in GLSL code.