r600g: write all MRTs only if there is exactly one output (fixes a hang)
authorMarek Olšák <marek.olsak@amd.com>
Thu, 10 Dec 2015 12:19:45 +0000 (13:19 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Fri, 11 Dec 2015 14:25:11 +0000 (15:25 +0100)
This fixes a hang in
piglit/arb_blend_func_extended-fbo-extended-blend-pattern_gles2 on REDWOOD.

Cc: 11.0 11.1 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
src/gallium/drivers/r600/r600_shader.c

index c849684..cd23100 100644 (file)
@@ -3146,7 +3146,8 @@ static int r600_shader_from_tgsi(struct r600_context *rctx,
        ctx.nliterals = 0;
        ctx.literals = NULL;
 
-       shader->fs_write_all = ctx.info.properties[TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS];
+       shader->fs_write_all = ctx.info.properties[TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS] &&
+                              ctx.info.colors_written == 1;
        shader->vs_position_window_space = ctx.info.properties[TGSI_PROPERTY_VS_WINDOW_SPACE_POSITION];
        shader->ps_conservative_z = (uint8_t)ctx.info.properties[TGSI_PROPERTY_FS_DEPTH_LAYOUT];