OSDN Git Service

anv: Do relocations in userspace before execbuf ioctl
authorKristian Høgsberg Kristensen <kristian.h.kristensen@intel.com>
Tue, 8 Mar 2016 23:31:47 +0000 (15:31 -0800)
committerEmil Velikov <emil.l.velikov@gmail.com>
Wed, 9 Nov 2016 23:38:12 +0000 (23:38 +0000)
commitce555a7d1ff436267d4606cd48d2d17d36335311
tree1b2d85c8998acb85b9987a6b5e78a517f3a27901
parent621b04873436e5875394cbe4d8733873e0c01d8e
anv: Do relocations in userspace before execbuf ioctl

Since our surface state buffer is shared by all batches, the kernel does a
full stall and sync with the CPU between batches every time we call
execbuf2 because it refuses to do relocations on an active buffer.  Doing
them in userspace and passing the NO_RELOC flag to the kernel allows us to
perform the relocations without stalling.

This improves the performance of Dota 2 by around 30% on a Sky Lake GT2.

v2 (Jason Ekstrand):
 - Better comments (Chris Wilson)
 - Fixed write_reloc for correct canonical form (Chris Wilson)

v3 (Jason Ekstrand):
 - Skip relocations which aren't needed
 - Provide an environment variable to always use the kernel
 - More comments about correctness (Chris Wilson)

v4 (Jason Ekstrand):
 - More comments (Chris Wilson)

v5 (Jason Ekstrand):
 - Rebase on top of moving execbuf2 setup go QueueSubmit

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit b3a29f2e9eb528a16ceec0fd88aad9f0c3c3b6d4)
src/intel/vulkan/anv_batch_chain.c
src/intel/vulkan/anv_device.c