OSDN Git Service

r600: workaround empty geom shader.
authorDave Airlie <airlied@redhat.com>
Tue, 24 Feb 2015 04:09:40 +0000 (14:09 +1000)
committerEmil Velikov <emil.l.velikov@gmail.com>
Thu, 3 Dec 2015 18:43:12 +0000 (18:43 +0000)
We need to emit at least one cut/emit in every
geometry shader, the easiest workaround it to
stick a single CUT at the top of each geom shader.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Cc: "10.6 11.0 11.1" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
(cherry picked from commit 4f347225752b48f3dc5a59a6be71fe78616252a7)
[Emil Velikov: squash trivial conflict]
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Conflicts:
src/gallium/drivers/r600/r600_shader.c

src/gallium/drivers/r600/r600_shader.c

index 819f9a7..b16900b 100644 (file)
@@ -2159,6 +2159,10 @@ static int r600_shader_from_tgsi(struct r600_context *rctx,
                        struct r600_bytecode_alu alu;
                        int r;
 
+                       /* GS thread with no output workaround - emit a cut at start of GS */
+                       if (ctx.bc->chip_class == R600)
+                               r600_bytecode_add_cfinst(ctx.bc, CF_OP_CUT_VERTEX);
+
                        memset(&alu, 0, sizeof(struct r600_bytecode_alu));
                        alu.op = ALU_OP1_MOV;
                        alu.src[0].sel = V_SQ_ALU_SRC_LITERAL;