This can significantly reduce the number of allocations required
to record large command buffers with thousands of draw calls and
it improves significantly vkoverhead's results.
fps_avg helped: serious_sam_trace01_1280x720.gfxr: 17.96 -> 18.50 (3.01%)
fps_avg helped: vehicle-game-2.gfxr: 9.09 -> 9.33 (2.67%)
fps_avg helped: ue4_shooter_game_high_quality.gfxr: 17.40 -> 17.66 (1.48%)
fps_avg helped: ue4_shooter_game_low_quality.gfxr: 25.25 -> 25.61 (1.44%)
fps_avg helped: ue4_sun_temple.gfxr: 24.93 -> 25.15 (0.86%)
fps_avg helped: vkQuake_capture_frames_1_through_1200.gfxr: 52.54 -> 52.95 (0.78%)
fps_avg helped: rbdoom-3-bfg_capture.gfxr: 13.87 -> 13.96 (0.69%)
fps_avg helped: sponza_demo02_800x600.gfxr: 19.59 -> 19.63 (0.21%)
fps_avg HURT: ue4_shooter_game_shooting_high_quality.gfxr: 19.14 -> 18.95 (-0.98%)
fps_avg HURT: sponza_demo01_800x600.gfxr: 20.03 -> 20 (-0.09%)
fps_avg HURT: quake3e_capture_frames_1_through_1800.gfxr: 57.34 -> 57.34 (-0.01%)
fps_avg HURT: serious_sam_trace02_1280x720.gfxr: 38.27 -> 38.27 (-0.01%)
total fps_min in shared programs: 311.74 -> 313.91 (0.69%)
fps_min in affected programs: 311.74 -> 313.91 (0.69%)
helped: 10
HURT: 2
total fps_max in shared programs: 319.54 -> 320.24 (0.22%)
fps_max in affected programs: 319.54 -> 320.24 (0.22%)
helped: 6
HURT: 6
total fps_avg in shared programs: 315.41 -> 317.36 (0.62%)
fps_avg in affected programs: 315.41 -> 317.36 (0.62%)
helped: 8
HURT: 4
Reviewed-by: Alejandro PiƱeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20787>
static bool
cl_alloc_bo(struct v3dv_cl *cl, uint32_t space, bool use_branch)
{
+ /* If we are growing, double the BO allocation size to reduce the number
+ * of allocations with large command buffers. This has a very significant
+ * impact on the number of draw calls per second reported by vkoverhead.
+ */
+ space = cl->bo ? cl->bo->size * 2 : align(space, 4096);
struct v3dv_bo *bo = v3dv_bo_alloc(cl->job->device, space, "CL", true);
if (!bo) {
fprintf(stderr, "failed to allocate memory for command list\n");