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