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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev