Gen7/Ivy Bridge: Primitive ID (GLSL 1.50+) is incorrect when using software primitive restart.
Ivy Bridge hardware doesn't support primitive restart under the following circumstances:
When the primitive type is GL_LINE_LOOP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP, or GL_POLYGON.
When the primitive restart is not equal to -1 (0xff, 0xffff, or 0xffffffff, depending whether the type passed to glDrawElements() is GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, or GL_UNSIGNED_INT).
In these circumstances, the driver emulates primitive restart using a software mechanism. When this software mechanism is used, and GLSL 1.50 is in use:
If a geometry shader is present, the values received by the geometry shader's gl_PrimitiveIDIn input will be incorrect.
If a geometry shader is not present, the values received by the fragment shader's gl_PrimitiveID input will be incorrect.
Gen7/Haswell is not affected.
Experimental code which partially fixes this problem can be found in branch "prim-id-in-with-sw-prim-restart" of https://github.com/stereotype441/mesa.git.
Gen7/Ivy Bridge: Triangle strips have incorrect vertex order when geometry shaders in use.
When primitives are drawn using GL_TRIANGLE_STRIP or GL_TRIANGLE_STRIP_ADJACENCY, alternate triangles are delivered to the geometry shader with their vertices in the wrong order.
For example, if a triangle strip is drawn using 6 vertices, then according to the GL spec, the triangles received by the geometry shader should consist of:
- Vertices 1, 2, and 3
- Vertices 3, 2, and 4
- Vertices 3, 4, and 5
- Vertices 5, 4, and 6
Ivy Bridge hardware delivers the correct triangles to the geometry shader, but not in the right order. The order used is:
- Vertices 1, 2, and 3
- Vertices 2, 4, and 3
- Vertices 3, 4, and 5
- Vertices 4, 6, and 5
Note that triangle orientation is still correct.
Gen7/Haswell is not affected.
Experimental code which partially fixes this problem can be found in branch "gs-reorder-triangle-vertices" of https://github.com/stereotype441/mesa.git.
All platforms: Trigonometric instructions (sin, cos) do not handle large inputs.
See https://lists.freedesktop.org/archives/mesa-dev/2014-December/072429.html for more information.
Issues known to be a result:
- Some dEQP tests fail due to this problem. See https://bugs.freedesktop.org/show_bug.cgi?id=89634
- The jellyfish demo in glmark2 misrenders. See https://bugs.freedesktop.org/show_bug.cgi?id=86755