Bug 64887

Summary: [HSW Bisected] lots of transform_feedback tests fail
Product: Mesa Reporter: lu hua <huax.lu>
Component: Drivers/DRI/i965Assignee: Kenneth Graunke <kenneth>
Status: VERIFIED FIXED QA Contact:
Severity: major    
Priority: high CC: daniel, eric, idr, xunx.fang
Version: git   
Hardware: All   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:

Description lu hua 2013-05-23 01:51:18 UTC
System Environment:
--------------------------
Arch:           x86_64
Platform:       Haswell
Libdrm:	(master)libdrm-2.4.45-3-g3586337f3703ce4833a375f66b08df064a1cec28
Mesa:	(master)08f87ac333512a77a2701268dd98ef4274c34832
Xserver:(master)xorg-server-1.14.99.1-82-g7e97166c4fc38076b6224e4dbdd632b43444149f
Xf86_video_intel:(master)2.21.7-3-gabe85adda51c58d3f3b9c5dea6cec4b13a65cdcd
Libva:	(staging)cc403954c93be77cb514c9d3836263f7d514a4f2
Kernel:	(drm-intel-nightly) 86fccb424de5c6739e2edb4653f5823e3954b74b

Bug detailed description:
-------------------------
It fails on Haswell with mesa master branch. It doesn't happen on 9.1 branch.
Following cases also fail with same bisect commit:
Piglit:
spec_ARB_texture_multisample_sample-position_4
spec_ARB_texture_multisample_sample-position_6
spec_ARB_texture_multisample_sample-position_8
spec_EXT_transform_feedback_alignment_0
spec_EXT_transform_feedback_alignment_12
spec_EXT_transform_feedback_alignment_4
spec_EXT_transform_feedback_alignment_8
spec_EXT_transform_feedback_buffer-usage
spec_EXT_transform_feedback_builtin-varyings_gl_ClipDistance
spec_EXT_transform_feedback_builtin-varyings_gl_ClipDistance[1]-no-subscript
spec_EXT_transform_feedback_builtin-varyings_gl_ClipDistance[2]-no-subscript
spec_EXT_transform_feedback_builtin-varyings_gl_ClipDistance[3]-no-subscript
spec_EXT_transform_feedback_builtin-varyings_gl_ClipDistance[4]-no-subscript
spec_EXT_transform_feedback_builtin-varyings_gl_ClipDistance[5]-no-subscript
spec_EXT_transform_feedback_builtin-varyings_gl_ClipDistance[6]-no-subscript
spec_EXT_transform_feedback_builtin-varyings_gl_ClipDistance[7]-no-subscript
spec_EXT_transform_feedback_builtin-varyings_gl_ClipDistance[8]-no-subscript
spec_EXT_transform_feedback_builtin-varyings_gl_ClipVertex
spec_EXT_transform_feedback_builtin-varyings_gl_Color
spec_EXT_transform_feedback_builtin-varyings_gl_FogFragCoord
spec_EXT_transform_feedback_builtin-varyings_gl_PointSize
spec_EXT_transform_feedback_builtin-varyings_gl_Position
spec_EXT_transform_feedback_builtin-varyings_gl_SecondaryColor
spec_EXT_transform_feedback_builtin-varyings_gl_TexCoord
spec_EXT_transform_feedback_change-size_base-grow
spec_EXT_transform_feedback_change-size_base-shrink
spec_EXT_transform_feedback_change-size_offset-grow
spec_EXT_transform_feedback_change-size_offset-shrink
spec_EXT_transform_feedback_change-size_range-grow
spec_EXT_transform_feedback_change-size_range-shrink
spec_EXT_transform_feedback_immediate-reuse
spec_EXT_transform_feedback_interleaved-attribs
spec_EXT_transform_feedback_intervening-read_output
spec_EXT_transform_feedback_intervening-read_prims_written
spec_EXT_transform_feedback_max-varyings
spec_EXT_transform_feedback_nonflat-integral
spec_EXT_transform_feedback_order_arrays_lines
spec_EXT_transform_feedback_order_arrays_points
spec_EXT_transform_feedback_order_arrays_triangles
spec_EXT_transform_feedback_order_elements_lines
spec_EXT_transform_feedback_order_elements_points
spec_EXT_transform_feedback_order_elements_triangles
spec_EXT_transform_feedback_output-type_float
spec_EXT_transform_feedback_output-type_float[2]
spec_EXT_transform_feedback_output-type_float[2]-no-subscript
spec_EXT_transform_feedback_output-type_int
spec_EXT_transform_feedback_output-type_int[2]
spec_EXT_transform_feedback_output-type_int[2]-no-subscript
spec_EXT_transform_feedback_output-type_ivec2
spec_EXT_transform_feedback_output-type_ivec2[2]
spec_EXT_transform_feedback_output-type_ivec2[2]-no-subscript
spec_EXT_transform_feedback_output-type_ivec3
spec_EXT_transform_feedback_output-type_ivec3[2]
spec_EXT_transform_feedback_output-type_ivec3[2]-no-subscript
spec_EXT_transform_feedback_output-type_ivec4
spec_EXT_transform_feedback_output-type_ivec4[2]
spec_EXT_transform_feedback_output-type_ivec4[2]-no-subscript
spec_EXT_transform_feedback_output-type_mat2
spec_EXT_transform_feedback_output-type_mat2x3
spec_EXT_transform_feedback_output-type_mat2x3[2]
spec_EXT_transform_feedback_output-type_mat2x3[2]-no-subscript
spec_EXT_transform_feedback_output-type_mat2x4
spec_EXT_transform_feedback_output-type_mat2x4[2]
spec_EXT_transform_feedback_output-type_mat2x4[2]-no-subscript
spec_EXT_transform_feedback_output-type_mat2[2]
spec_EXT_transform_feedback_output-type_mat2[2]-no-subscript
spec_EXT_transform_feedback_output-type_mat3
spec_EXT_transform_feedback_output-type_mat3x2
spec_EXT_transform_feedback_output-type_mat3x2[2]
spec_EXT_transform_feedback_output-type_mat3x2[2]-no-subscript
spec_EXT_transform_feedback_output-type_mat3x4
spec_EXT_transform_feedback_output-type_mat3x4[2]
spec_EXT_transform_feedback_output-type_mat3x4[2]-no-subscript
spec_EXT_transform_feedback_output-type_mat3[2]
spec_EXT_transform_feedback_output-type_mat3[2]-no-subscript
spec_EXT_transform_feedback_output-type_mat4
spec_EXT_transform_feedback_output-type_mat4x2
spec_EXT_transform_feedback_output-type_mat4x2[2]
spec_EXT_transform_feedback_output-type_mat4x2[2]-no-subscript
spec_EXT_transform_feedback_output-type_mat4x3
spec_EXT_transform_feedback_output-type_mat4x3[2]
spec_EXT_transform_feedback_output-type_mat4x3[2]-no-subscript
spec_EXT_transform_feedback_output-type_mat4[2]
spec_EXT_transform_feedback_output-type_mat4[2]-no-subscript
spec_EXT_transform_feedback_output-type_uint
spec_EXT_transform_feedback_output-type_uint[2]
spec_EXT_transform_feedback_output-type_uint[2]-no-subscript
spec_EXT_transform_feedback_output-type_uvec2
spec_EXT_transform_feedback_output-type_uvec2[2]
spec_EXT_transform_feedback_output-type_uvec2[2]-no-subscript
spec_EXT_transform_feedback_output-type_uvec3
spec_EXT_transform_feedback_output-type_uvec3[2]
spec_EXT_transform_feedback_output-type_uvec3[2]-no-subscript
spec_EXT_transform_feedback_output-type_uvec4
spec_EXT_transform_feedback_output-type_uvec4[2]
spec_EXT_transform_feedback_output-type_uvec4[2]-no-subscript
spec_EXT_transform_feedback_output-type_vec2
spec_EXT_transform_feedback_output-type_vec2[2]
spec_EXT_transform_feedback_output-type_vec2[2]-no-subscript
spec_EXT_transform_feedback_output-type_vec3
spec_EXT_transform_feedback_output-type_vec3[2]
spec_EXT_transform_feedback_output-type_vec3[2]-no-subscript
spec_EXT_transform_feedback_output-type_vec4
spec_EXT_transform_feedback_output-type_vec4[2]
spec_EXT_transform_feedback_output-type_vec4[2]-no-subscript
spec_EXT_transform_feedback_overflow-edge-cases
spec_EXT_transform_feedback_position-readback-bufferbase
spec_EXT_transform_feedback_position-readback-bufferbase-discard
spec_EXT_transform_feedback_position-readback-bufferoffset
spec_EXT_transform_feedback_position-readback-bufferoffset-discard
spec_EXT_transform_feedback_position-readback-bufferrange
spec_EXT_transform_feedback_position-readback-bufferrange-discard
spec_EXT_transform_feedback_position-render-bufferbase
spec_EXT_transform_feedback_position-render-bufferbase-discard
spec_EXT_transform_feedback_position-render-bufferoffset
spec_EXT_transform_feedback_position-render-bufferoffset-discard
spec_EXT_transform_feedback_position-render-bufferrange
spec_EXT_transform_feedback_position-render-bufferrange-discard
spec_EXT_transform_feedback_query-primitives_written-bufferbase
spec_EXT_transform_feedback_query-primitives_written-bufferbase-discard
spec_EXT_transform_feedback_query-primitives_written-bufferoffset
spec_EXT_transform_feedback_query-primitives_written-bufferoffset-discard
spec_EXT_transform_feedback_query-primitives_written-bufferrange
spec_EXT_transform_feedback_query-primitives_written-bufferrange-discard
spec_EXT_transform_feedback_separate-attribs
spec_EXT_transform_feedback_tessellation_lines_flat_first
spec_EXT_transform_feedback_tessellation_lines_flat_last
spec_EXT_transform_feedback_tessellation_lines_monochrome
spec_EXT_transform_feedback_tessellation_lines_smooth
spec_EXT_transform_feedback_tessellation_line_loop_flat_first
spec_EXT_transform_feedback_tessellation_line_loop_flat_last
spec_EXT_transform_feedback_tessellation_line_loop_monochrome
spec_EXT_transform_feedback_tessellation_line_loop_smooth
spec_EXT_transform_feedback_tessellation_line_strip_flat_first
spec_EXT_transform_feedback_tessellation_line_strip_flat_last
spec_EXT_transform_feedback_tessellation_line_strip_monochrome
spec_EXT_transform_feedback_tessellation_line_strip_smooth
spec_EXT_transform_feedback_tessellation_points_flat_first
spec_EXT_transform_feedback_tessellation_points_flat_last
spec_EXT_transform_feedback_tessellation_points_monochrome
spec_EXT_transform_feedback_tessellation_points_smooth
spec_EXT_transform_feedback_tessellation_polygon_flat_first
spec_EXT_transform_feedback_tessellation_polygon_flat_last
spec_EXT_transform_feedback_tessellation_polygon_monochrome
spec_EXT_transform_feedback_tessellation_polygon_smooth
spec_EXT_transform_feedback_tessellation_polygon_wireframe
spec_EXT_transform_feedback_tessellation_quads_flat_first
spec_EXT_transform_feedback_tessellation_quads_flat_last
spec_EXT_transform_feedback_tessellation_quads_monochrome
spec_EXT_transform_feedback_tessellation_quads_smooth
spec_EXT_transform_feedback_tessellation_quads_wireframe
spec_EXT_transform_feedback_tessellation_quad_strip_flat_first
spec_EXT_transform_feedback_tessellation_quad_strip_flat_last
spec_EXT_transform_feedback_tessellation_quad_strip_monochrome
spec_EXT_transform_feedback_tessellation_quad_strip_smooth
spec_EXT_transform_feedback_tessellation_quad_strip_wireframe
spec_EXT_transform_feedback_tessellation_triangles_flat_first
spec_EXT_transform_feedback_tessellation_triangles_flat_last
spec_EXT_transform_feedback_tessellation_triangles_monochrome
spec_EXT_transform_feedback_tessellation_triangles_smooth
spec_EXT_transform_feedback_tessellation_triangles_wireframe
spec_EXT_transform_feedback_tessellation_triangle_fan_flat_last
spec_EXT_transform_feedback_tessellation_triangle_fan_monochrome
spec_EXT_transform_feedback_tessellation_triangle_fan_smooth
spec_EXT_transform_feedback_tessellation_triangle_fan_wireframe
spec_EXT_transform_feedback_tessellation_triangle_strip_flat_first
spec_EXT_transform_feedback_tessellation_triangle_strip_flat_last
spec_EXT_transform_feedback_tessellation_triangle_strip_monochrome
spec_EXT_transform_feedback_tessellation_triangle_strip_smooth
spec_EXT_transform_feedback_tessellation_triangle_strip_wireframe
spec_glsl-1.30_execution_isinf-and-isnan_vs_xfb
spec_glsl-1.40_execution_tf-no-position
spec_OpenGL_3.1_primitive-restart-xfb_flush
spec_OpenGL_3.1_primitive-restart-xfb_written

Ogles3conform
GL3Tests_sync_sync_functionality_clientwaitsync_flush.test
GL3Tests_transform_feedback2_transform_feedback2_basic.test
GL3Tests_transform_feedback2_transform_feedback2_framebuffer.test
GL3Tests_transform_feedback2_transform_feedback2_states.test
GL3Tests_transform_feedback2_transform_feedback2_two_buffers.test
GL3Tests_transform_feedback_transform_feedback_basic_outline.test
GL3Tests_transform_feedback_transform_feedback_builtins.test
GL3Tests_transform_feedback_transform_feedback_builtin_type.test
GL3Tests_transform_feedback_transform_feedback_draw.test
GL3Tests_transform_feedback_transform_feedback_interleaved.test
GL3Tests_transform_feedback_transform_feedback_max_interleaved.test
GL3Tests_transform_feedback_transform_feedback_max_separate.test
GL3Tests_transform_feedback_transform_feedback_misc.test
GL3Tests_transform_feedback_transform_feedback_query_objects.test
GL3Tests_transform_feedback_transform_feedback_verify_buffer.test
GL3Tests_vertex_type_2_10_10_10_rev_vertex_type_2_10_10_10_rev_conversion.test
GL3Tests_vertex_type_2_10_10_10_rev_vertex_type_2_10_10_10_rev_stride_pointer.test

Bisect shows:eaa6fbe6d54dc99efac4ab8e800edef65ce8220d is the first bad commit.
commit eaa6fbe6d54dc99efac4ab8e800edef65ce8220d
Author:     Kenneth Graunke <kenneth@whitecape.org>
AuthorDate: Fri May 17 10:55:35 2013 -0700
Commit:     Kenneth Graunke <kenneth@whitecape.org>
CommitDate: Tue May 21 13:29:22 2013 -0700

    i965: Stop using the kernel SOL reset feature.

    We can just do it ourselves with MI_LOAD_REGISTER_IMM.

    Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: Eric Anholt <eric@anholt.net>
    Reviewed-by: Paul Berry <stereotype441@gmail.com>

output:
sample 0 position incorrect (x axis): observed -0.031250, expected 0.375000
sample 0 position incorrect (y axis): observed -0.031250, expected 0.125000
sample 1 position incorrect (x axis): observed -0.031250, expected 0.875000
sample 1 position incorrect (y axis): observed -0.031250, expected 0.375000
PIGLIT: {'result': 'fail' }

Reproduce steps:
----------------
1. xinit
2. ./bin/arb_texture_multisample-sample-position 2 -auto -fbo
Comment 1 Kenneth Graunke 2013-05-23 05:55:52 UTC
Crap.  Daniel...we could really use the ability to do this legitimately...

Might have to revert this for now...sigh.
Comment 2 Kenneth Graunke 2013-05-23 07:22:40 UTC
The fix wasn't nearly as bad as I feared:
http://lists.freedesktop.org/archives/mesa-dev/2013-May/039713.html

We can just go back to using the kernel SOL reset feature, but in a simpler fashion than before.  MI_STORE_REGISTER_MEM seems to work, so we don't need to revert everything.

On my Haswell system, that fixes every regression caused by the bisected commit.

Also, thanks for the report!  Sorry for not catching this earlier.
Comment 3 Kenneth Graunke 2013-05-23 18:29:56 UTC
Fixed by:

commit 90b46f2d5ac336f63fff9b4681216a99e4163893
Author: Kenneth Graunke <kenneth@whitecape.org>
Date:   Thu May 23 20:19:19 2013 -0700

    i965: Go back to using the kernel SOL reset feature.
    
    It turns out the MI_LOAD_REGISTER_IMM approach doesn't work on Haswell,
    and regressed essentially all the transform feedback Piglit tests.
    
    This morally reverts eaa6fbe6d54dc99efac4ab8e800edef65ce8220d.  However,
    the code is still simpler than it was.  On BeginTransformFeedback, we
    simply flush the batch and set the SOL reset flag so that the next batch
    will start with zeroed offsets.  There's still no software counting.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=64887
    Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: Paul Berry <stereotype441@gmail.com>
    Reviewed-by: Eric Anholt <eric@anholt.net>

This regression only existed on master, so there's nothing to backport.
Comment 4 Kenneth Graunke 2013-05-23 20:31:22 UTC
My apologies...that should have been:

commit 062317d6671ed42ed10b24ee9d3df87c1dab279d
Author: Kenneth Graunke <kenneth@whitecape.org>
Date:   Thu May 23 20:19:19 2013 -0700

    i965: Go back to using the kernel SOL reset feature.
Comment 5 lu hua 2013-05-28 01:06:35 UTC
Verified.Fixed.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.