diff options
author | Eric Anholt <[email protected]> | 2017-11-24 22:15:28 -0800 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2017-12-01 15:37:28 -0800 |
commit | 516736705017f3e19be37f22c6655a055413683b (patch) | |
tree | 674688a3b58bd7e80b29e3202743a9f853c5554f /src/gallium/drivers/vc4/vc4_draw.c | |
parent | 842b05d6ad8da895bc300ad9652bc09e2b0b1959 (diff) |
broadcom/vc4: Skip emitting redundant VC4_PACKET_GEM_HANDLES.
Now that there's only one user of it, it's pretty obvious how to avoid
emitting redundant ones. This should save a bunch of kernel validation
overhead.
No statistically sigificant difference on the minetest trace I was looking
at (n=169), but the maximum FPS is up by .3%
Diffstat (limited to 'src/gallium/drivers/vc4/vc4_draw.c')
-rw-r--r-- | src/gallium/drivers/vc4/vc4_draw.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/gallium/drivers/vc4/vc4_draw.c b/src/gallium/drivers/vc4/vc4_draw.c index fd80f67b6a1..fe9612c38e4 100644 --- a/src/gallium/drivers/vc4/vc4_draw.c +++ b/src/gallium/drivers/vc4/vc4_draw.c @@ -388,9 +388,13 @@ vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info) * to perform the relocation in the IB packet (without * emitting to the actual HW). */ - cl_u8(&bcl, VC4_PACKET_GEM_HANDLES); - cl_u32(&bcl, vc4_gem_hindex(job, rsc->bo)); - cl_u32(&bcl, 0); + uint32_t hindex = vc4_gem_hindex(job, rsc->bo); + if (job->last_gem_handle_hindex != hindex) { + cl_u8(&bcl, VC4_PACKET_GEM_HANDLES); + cl_u32(&bcl, hindex); + cl_u32(&bcl, 0); + job->last_gem_handle_hindex = hindex; + } cl_u8(&bcl, VC4_PACKET_GL_INDEXED_PRIMITIVE); cl_u8(&bcl, |