metal: Use sampler state objects instead of shader-declared samplers for linear vs nearest filtering. This avoids a ton of shader duplication once multiple shaders that use samplers are added (e.g. the currently missing YUV shaders).