i965/fs: Set LastRT on the final FB write on Broadwell.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 21 Jul 2014 23:17:46 +0000 (16:17 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 23 Jul 2014 22:44:37 +0000 (15:44 -0700)
In Piglit's EXT_framebuffer_multisample/alpha-to-coverage-dual-src-blend
test, key->nr_color_regions == 2, but the dual source blend FB write has
ir->target set to 0.  So we failed to set "Last Render Target Select" on
any FB write message.

We only emit one FB write per render target, so my comment about setting
LastRT on every FB write directed at the last color region is a bit...
misinformed.  According to the documentation, depth buffer writes and
scoreboard updates happen on the FB write with LastRT set, so I believe
we want to set it only once.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Cc: "10.2" <mesa-stable@lists.freedesktop.org>
src/mesa/drivers/dri/i965/gen8_fs_generator.cpp

index 2d745fd374f326d1fa186f473cf542b6b982fc01..4f0cf70bf6a57c6306ec265bffd37c3d1db19ff5 100644 (file)
@@ -116,10 +116,8 @@ gen8_fs_generator::generate_fb_write(fs_inst *ir)
 
    uint32_t msg_control = msg_type;
 
-   /* "Last Render Target Select" must be set on all writes to the last of
-    * the render targets (if using MRT), or always for a single RT scenario.
-    */
-   if ((ir->target == key->nr_color_regions - 1) || !key->nr_color_regions)
+   /* Set "Last Render Target Select" on the final FB write. */
+   if (ir->eot)
       msg_control |= (1 << 4); /* Last Render Target Select */
 
    uint32_t surf_index =