SpriteBatch-enabled VertexShader


I’ve written a relatively simple pixel shader in HLSL which works perfectly fine under Windows DX. When I use the same shader under Linux, everything else turns red (even though the shader is unset by calling SpriteBatch.End()). After some fiddling I discovered that this bug (?) can be fixed by adding a vertex shader. Using the simplest vertex shader

float4 vs(float4 pos : SV_Position) : SV_Position
    return pos;

produces some weird results though (see screenshots below).

When I copy the default SpriteEffect vertex shader it doesn’t draw anything…
The SpriteBatch is definetely set up correctly, because it does not apply Matrix transformation when I correctly define MatrixTransform, which of course happend because it then uses my defined Matrix instead of its own implemented one.

My questions:

  • Can I use an effect without vertex shader in linux (would be an optimal solution)?
  • How do I correctly define a SpriteBatch-Default VertexShader that works in Windows and Linux?
  • Is it actually a bug that everything is drawn red when using an effect without vertex shader under Linux? (Probably is, as someone has reported it earlier Link)

How it should look:

How it looks with the simple shader shown above:

Plus when I move around (which is implemented using a SpriteBatch Matrix Transform) it starts to work in a small area of the “map” and goes crazy/doesn’t show in others…

Don’t currently have a screenshot from the linux problem, it looks basically like the first one but the bar and the line are both plain red.

Thank you in advance for any answers/suggestions!