[Mesa-dev] [PATCH 9/9] anv: Implement support for exporting semaphores as FENCE_FD
Chris Wilson
chris at chris-wilson.co.uk
Tue Feb 28 17:25:35 UTC 2017
On Tue, Feb 28, 2017 at 08:56:47AM -0800, Jason Ekstrand wrote:
> ---
> src/intel/vulkan/anv_batch_chain.c | 91 ++++++++++++++++++++++++++++++++++++--
> src/intel/vulkan/anv_device.c | 26 +++++++++++
> src/intel/vulkan/anv_gem.c | 36 +++++++++++++++
> src/intel/vulkan/anv_private.h | 9 +++-
> src/intel/vulkan/anv_queue.c | 68 +++++++++++++++++++++++++---
> 5 files changed, 220 insertions(+), 10 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_batch_chain.c b/src/intel/vulkan/anv_batch_chain.c
> index 3640588..004594a 100644
> --- a/src/intel/vulkan/anv_batch_chain.c
> +++ b/src/intel/vulkan/anv_batch_chain.c
> @@ -1352,6 +1352,28 @@ setup_execbuf_for_cmd_buffer(struct anv_execbuf *execbuf,
> }
> }
>
> +static void
> +setup_empty_execbuf(struct anv_execbuf *execbuf, struct anv_device *device)
> +{
> + anv_execbuf_add_bo(execbuf, &device->trivial_batch_bo, NULL, 0,
> + &device->alloc);
> +
> + execbuf->execbuf = (struct drm_i915_gem_execbuffer2) {
Does mesa check for gcc > 4.4?
> + .buffers_ptr = (uintptr_t) execbuf->objects,
> + .buffer_count = execbuf->bo_count,
> + .batch_start_offset = 0,
> + .batch_len = 8, /* GEN8_MI_BATCH_BUFFER_END and NOOP */
> + .cliprects_ptr = 0,
> + .num_cliprects = 0,
> + .DR1 = 0,
> + .DR4 = 0,
Best left to the compiler to clear, and don't mention DRI1 leftovers.
> + .flags = I915_EXEC_HANDLE_LUT | I915_EXEC_RENDER |
> + I915_EXEC_CONSTANTS_REL_GENERAL,
Just drop EXEC_CONSTANTS; it is entirely dead and best forgotten.
> + .rsvd1 = device->context_id,
> + .rsvd2 = 0,
> + };
> +}
> VkResult
> anv_cmd_buffer_execbuf(struct anv_device *device,
> struct anv_cmd_buffer *cmd_buffer,
> + if (need_out_fence)
> + execbuf.execbuf.flags |= I915_EXEC_FENCE_OUT;
>
> VkResult result = anv_device_execbuf(device, &execbuf.execbuf, execbuf.bos);
>
> + if (need_out_fence) {
> + int out_fence = execbuf.execbuf.rsvd2 >> 32;
> + for (uint32_t i = 0; i < num_out_semaphores; i++) {
> + ANV_FROM_HANDLE(anv_semaphore, semaphore, out_semaphores[i]);
> + /* Out fences can't have temporary state because that would imply
> + * that we imported a sync file and are trying to signal it.
> + */
> + assert(semaphore->temporary.type == ANV_SEMAPHORE_TYPE_NONE);
> + struct anv_semaphore_impl *impl = &semaphore->permanent;
> +
> + if (impl->type == ANV_SEMAPHORE_TYPE_SYNC_FILE) {
> + assert(impl->fd == -1);
> + impl->fd = dup(out_fence);
out_fence will still be zero/stdin if anv_device_execbuf() failed.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the mesa-dev
mailing list