Mesa (master): freedreno/a3xx: handle VS only outputting BCOLOR

Rob Clark robclark at kemper.freedesktop.org
Fri Oct 3 18:20:48 UTC 2014


Module: Mesa
Branch: master
Commit: a262c601d363aea2e6680df527e207cc9d5e235f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a262c601d363aea2e6680df527e207cc9d5e235f

Author: Rob Clark <robclark at freedesktop.org>
Date:   Fri Oct  3 10:08:59 2014 -0400

freedreno/a3xx: handle VS only outputting BCOLOR

Possibly we should map the front color to black (zeroes).  But not sure
there is a way to do that without generating a shader variant.

Signed-off-by: Rob Clark <robclark at freedesktop.org>

---

 src/gallium/drivers/freedreno/a3xx/fd3_program.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_program.c b/src/gallium/drivers/freedreno/a3xx/fd3_program.c
index d2a3248..64c9668 100644
--- a/src/gallium/drivers/freedreno/a3xx/fd3_program.c
+++ b/src/gallium/drivers/freedreno/a3xx/fd3_program.c
@@ -140,13 +140,21 @@ find_output(const struct ir3_shader_variant *so, ir3_semantic semantic)
 	 * in the vertex shader.. but the fragment shader doesn't know this
 	 * so  it will always have both IN.COLOR[n] and IN.BCOLOR[n].  So
 	 * at link time if there is no matching OUT.BCOLOR[n], we must map
-	 * OUT.COLOR[n] to IN.BCOLOR[n].
+	 * OUT.COLOR[n] to IN.BCOLOR[n].  And visa versa if there is only
+	 * a OUT.BCOLOR[n] but no matching OUT.COLOR[n]
 	 */
 	if (sem2name(semantic) == TGSI_SEMANTIC_BCOLOR) {
 		unsigned idx = sem2idx(semantic);
-		return find_output(so, ir3_semantic_name(TGSI_SEMANTIC_COLOR, idx));
+		semantic = ir3_semantic_name(TGSI_SEMANTIC_COLOR, idx);
+	} else if (sem2name(semantic) == TGSI_SEMANTIC_COLOR) {
+		unsigned idx = sem2idx(semantic);
+		semantic = ir3_semantic_name(TGSI_SEMANTIC_BCOLOR, idx);
 	}
 
+	for (j = 0; j < so->outputs_count; j++)
+		if (so->outputs[j].semantic == semantic)
+			return j;
+
 	debug_assert(0);
 
 	return 0;




More information about the mesa-commit mailing list