i965/gen10: Change the order of PIPE_CONTROL and load register.
authorRafael Antognolli <rafael.antognolli@intel.com>
Wed, 8 Nov 2017 19:39:52 +0000 (11:39 -0800)
committerRafael Antognolli <rafael.antognolli@intel.com>
Fri, 1 Dec 2017 19:27:27 +0000 (11:27 -0800)
I believe the workaround describes that the MI_LOAD_REGISTER_IMM should
come right after the 3DSTATE_SAMPLE_PATTERN.

This fixes GPU hangs in the i965 initial state batchbuffer when running
some Piglit tests with always_flush_batch=true.

Signed-off-by: Rafael Antognolli <rafael.antognolli@intel.com>
Cc: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/gen8_multisample_state.c

index 9f849d64bbc5176e4aaa9c0e30e49d2b4d42b6fc..904e0fee2e52e1bf1c35990a7e5fb4cf4bd30a60 100644 (file)
@@ -57,15 +57,15 @@ gen10_emit_wa_lri_to_cache_mode_zero(struct brw_context *brw)
    const struct gen_device_info *devinfo = &brw->screen->devinfo;
    assert(devinfo->gen == 10);
 
+   /* Write to CACHE_MODE_0 (0x7000) */
+   brw_load_register_imm32(brw, GEN7_CACHE_MODE_0, 0);
+
    /* Before changing the value of CACHE_MODE_0 register, GFX pipeline must
     * be idle; i.e., full flush is required.
     */
    brw_emit_pipe_control_flush(brw,
                                PIPE_CONTROL_CACHE_FLUSH_BITS |
                                PIPE_CONTROL_CACHE_INVALIDATE_BITS);
-
-   /* Write to CACHE_MODE_0 (0x7000) */
-   brw_load_register_imm32(brw, GEN7_CACHE_MODE_0, 0);
 }
 
 /**