anv: Rework fences
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 2 Nov 2016 16:11:11 +0000 (09:11 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 10 Nov 2016 02:17:29 +0000 (18:17 -0800)
commit843775bab78a6b4d5cb4f02bd95d9d0e95c1c5e3
treebde610776326ede7ed7affc67cb596cd13bfb7e1
parent73701be667ae408772bf20cb504b70d1775d4a4b
anv: Rework fences

Our previous fence implementation was very simple.  Fences had two states:
signaled and unsignaled.  However, this didn't properly handle all of the
edge-cases that we need to handle.  In order to handle the case where the
client calls vkGetFenceStatus on a fence that has not yet been submitted
via vkQueueSubmit, we need a three-status system.  In order to handle the
case where the client calls vkWaitForFences on fences which have not yet
been submitted, we need more complex logic and a condition variable.  It's
rather annoying but, so long as the client doesn't do that, we should still
hit the fast path and use i915_gem_wait to do all our waiting.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
src/intel/vulkan/anv_device.c
src/intel/vulkan/anv_private.h
src/intel/vulkan/anv_wsi.c