From a262c601d363aea2e6680df527e207cc9d5e235f Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Fri, 3 Oct 2014 10:08:59 -0400 Subject: [PATCH] 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 --- 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 d2a32486781..64c9668129b 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; -- 2.30.2