diff options
author | Jason Ekstrand <[email protected]> | 2017-08-03 14:19:44 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2017-08-28 18:35:27 -0700 |
commit | 92286dc08a58226a2155f07d845978633f23590b (patch) | |
tree | 9a5b5eca876894ed9a5ec42543578b1fed1b6da1 /src/intel/vulkan/anv_private.h | |
parent | 738e5e3c1d261d4f262c2ae25ccca8cb67075d72 (diff) |
anv: Pull the guts of anv_fence into anv_fence_impl
This is just a refactor, similar to what we did for semaphores, in
preparation for handling VK_KHR_external_fence.
Reviewed-by: Lionel Landwerlin <[email protected]>
Diffstat (limited to 'src/intel/vulkan/anv_private.h')
-rw-r--r-- | src/intel/vulkan/anv_private.h | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 715e0adebfb..ab6e5e25658 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1707,6 +1707,12 @@ anv_cmd_buffer_alloc_blorp_binding_table(struct anv_cmd_buffer *cmd_buffer, void anv_cmd_buffer_dump(struct anv_cmd_buffer *cmd_buffer); +enum anv_fence_type { + ANV_FENCE_TYPE_NONE = 0, + ANV_FENCE_TYPE_BO, + ANV_FENCE_TYPE_SYNCOBJ, +}; + enum anv_fence_state { /** Indicates that this is a new (or newly reset fence) */ ANV_FENCE_STATE_RESET, @@ -1719,9 +1725,41 @@ enum anv_fence_state { ANV_FENCE_STATE_SIGNALED, }; +struct anv_fence_impl { + enum anv_fence_type type; + + union { + /** Fence implementation for BO fences + * + * These fences use a BO and a set of CPU-tracked state flags. The BO + * is added to the object list of the last execbuf call in a QueueSubmit + * and is marked EXEC_WRITE. The state flags track when the BO has been + * submitted to the kernel. We need to do this because Vulkan lets you + * wait on a fence that has not yet been submitted and I915_GEM_BUSY + * will say it's idle in this case. + */ + struct { + struct anv_bo bo; + enum anv_fence_state state; + } bo; + }; +}; + struct anv_fence { - struct anv_bo bo; - enum anv_fence_state state; + /* Permanent fence state. Every fence has some form of permanent state + * (type != ANV_SEMAPHORE_TYPE_NONE). This may be a BO to fence on (for + * cross-process fences0 or it could just be a dummy for use internally. + */ + struct anv_fence_impl permanent; + + /* Temporary fence state. A fence *may* have temporary state. That state + * is added to the fence by an import operation and is reset back to + * ANV_SEMAPHORE_TYPE_NONE when the fence is reset. A fence with temporary + * state cannot be signaled because the fence must already be signaled + * before the temporary state can be exported from the fence in the other + * process and imported here. + */ + struct anv_fence_impl temporary; }; struct anv_event { |