broadcom/vc4: Decompose single QUADs to a TRIANGLE_FAN.

No significant difference in the minetest replay, but it should reduce
overhead by not requiring that we write quad indices to index buffers that
we repeatedly re-upload (and making the draw packet smaller, as well).

Over the course of the series the actual game seems to be up by 1-2 fps.
This commit is contained in:
Eric Anholt 2017-11-24 22:34:12 -08:00
parent fefff74b0d
commit 230e646a40
1 changed files with 14 additions and 5 deletions

View File

@ -286,6 +286,7 @@ static void
vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
{
struct vc4_context *vc4 = vc4_context(pctx);
struct pipe_draw_info local_info;
if (!info->count_from_stream_output && !info->indirect &&
!info->primitive_restart &&
@ -293,11 +294,19 @@ vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
return;
if (info->mode >= PIPE_PRIM_QUADS) {
util_primconvert_save_rasterizer_state(vc4->primconvert, &vc4->rasterizer->base);
util_primconvert_draw_vbo(vc4->primconvert, info);
perf_debug("Fallback conversion for %d %s vertices\n",
info->count, u_prim_name(info->mode));
return;
if (info->mode == PIPE_PRIM_QUADS &&
info->count == 4 &&
!vc4->rasterizer->base.flatshade) {
local_info = *info;
local_info.mode = PIPE_PRIM_TRIANGLE_FAN;
info = &local_info;
} else {
util_primconvert_save_rasterizer_state(vc4->primconvert, &vc4->rasterizer->base);
util_primconvert_draw_vbo(vc4->primconvert, info);
perf_debug("Fallback conversion for %d %s vertices\n",
info->count, u_prim_name(info->mode));
return;
}
}
/* Before setting up the draw, do any fixup blits necessary. */