# NIR: Work around shaders that don't use the invariant keyword but should

See also https://bugs.freedesktop.org/show_bug.cgi?id=111490.

I'm not terribly pleased with patch #2 (closed). Looking at the affected shaders in Hand of Fate 2, they appear to be doing something like:

` gl_Position = view_projection_matrix * (model_matrix * vertex);`

There are at least three shaders the transform vertices belonging to polygons that cover the same pixels.. After my original patch, the first shader had the `DPH`

optimization applied. After the first patch in this series, an additional shader gets the `DPH`

optimization applied. There is still at least one other shader that (possibly) isn't getting the optimization applied, and that shader generates a slightly different vertex position. The other possibility, and there definitely are shaders in this game that do this, is that the other shader does:

` gl_Position = model_view_projection_matrix * vertex;`

In this case the difference in precision between the two calculations will always be a potential problem.

The number of affected shaders is quite large, but it is much better than just disabling the optimization altogether in vertex and geometry shaders.

The other alternative that I have toyed with is adding a driconf `gl_Position_always_invariant`

that marks `gl_Position`

as invariant in apps that are known to be a problem. I'm never very fond of those kinds of work arounds either.