Edit: Thanks to a lot of help in the chat from LuisW I now have a working greyscale shader, I didnt have to change anything about my GreyscalePixelShader but I did have to remove the second pass of the simple techique and put it into a seperate technique, as such:
technique Greyscale
{
pass Pass0
{
PixelShader = compile ps_2_0 GrayscalePixelShader();
}
}
I also had to update my XNA/C# Draw method to create a fullscreen quad that I rendered my scene with the first technique to so I could use my greyscale technique on that quad as an input. Mind you, the method Im using, with spritebatch, is known to be slow (for me that didnt matter, but if you need fast, then drawing the quad directly is supposably faster) My updated draw method:
protected override void Draw(GameTime gameTime)
{
this.device.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.DeepSkyBlue, 1.0f, 0);
PresentationParameters pp = this.device.PresentationParameters;
RenderTarget2D renderTarget;
renderTarget = new RenderTarget2D(this.device, pp.BackBufferWidth, pp.BackBufferHeight, true, pp.BackBufferFormat, pp.DepthStencilFormat);
this.device.SetRenderTarget(renderTarget);
this.device.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.DeepSkyBlue, 1.0f, 0);
Rectangle screenRectangle = new Rectangle(0, 0, screenWidth, screenHeight);
// Get the model's only mesh
ModelMesh mesh = this.model.Meshes[0];
Effect effect = mesh.Effects[0];
effect.CurrentTechnique = effect.Techniques["Simple"];
//<left out some noninteresting worldmatrix calculations here not relevent for this question/answer>
device.DepthStencilState = DepthStencilState.Default;
device.BlendState = BlendState.Opaque;
mesh.Draw();
this.device.SetRenderTarget(null);
effect.CurrentTechnique = effect.Techniques["Greyscale"];
spriteBatch.Begin(0, BlendState.Opaque, null, null, null, effect);
spriteBatch.Draw((Texture2D)renderTarget, screenRectangle, Color.White);
spriteBatch.End();
base.Draw(gameTime);
}