softpipe: try and use back color for a slot if color fails.
authorDave Airlie <airlied@redhat.com>
Mon, 19 Dec 2011 15:54:03 +0000 (15:54 +0000)
committerDave Airlie <airlied@redhat.com>
Thu, 22 Dec 2011 12:25:33 +0000 (12:25 +0000)
In the case where a front and back output are specified, the draw code will
copy the back output into the front color slot and everything is happy.

However if no front is specified then the draw code will do a bad copy (separate patch), but also the frag shader won't pick up the color as there there is
no write to COLOR from the vertex shader just BCOLOR.

This patch fixes that problem so if it can't find a vertex shader output
for the front color slot, it will go and lookup and use one for the back color
slot.

Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/softpipe/sp_state_derived.c

index f89d23c9f26a4a7cb21c08d055ff791020be141f..56859971d8e79cbd5bca722b5e035061e58d43ca 100644 (file)
@@ -121,6 +121,11 @@ softpipe_get_vertex_info(struct softpipe_context *softpipe)
          src = draw_find_shader_output(softpipe->draw,
                                        fsInfo->input_semantic_name[i],
                                        fsInfo->input_semantic_index[i]);
+        if (fsInfo->input_semantic_name[i] == TGSI_SEMANTIC_COLOR && src == 0)
+          /* try and find a bcolor */
+          src = draw_find_shader_output(softpipe->draw,
+                                        TGSI_SEMANTIC_BCOLOR, fsInfo->input_semantic_index[i]);
+
          draw_emit_vertex_attr(vinfo, EMIT_4F, interp, src);
       }