struct pipe_fence_handle **dst,
struct pipe_fence_handle *src)
{
- if (pipe_reference(&(*dst)->ref, &src->ref))
+ if (pipe_reference(*dst ? &(*dst)->ref : NULL,
+ src ? &src->ref : NULL))
iris_fence_destroy(p_screen, *dst);
*dst = src;
return gen_ioctl(screen->fd, DRM_IOCTL_SYNCOBJ_WAIT, &args);
}
+#define CSI "\e["
+#define BLUE_HEADER CSI "0;97;44m"
+#define NORMAL CSI "0m"
+
static void
iris_fence_flush(struct pipe_context *ctx,
struct pipe_fence_handle **out_fence,
struct iris_screen *screen = (void *) ctx->screen;
struct iris_context *ice = (struct iris_context *)ctx;
+ if (flags & PIPE_FLUSH_END_OF_FRAME) {
+ ice->frame++;
+
+ if (INTEL_DEBUG & DEBUG_SUBMIT) {
+ fprintf(stderr, "%s ::: FRAME %-10u (ctx %p)%-35c%s\n",
+ (INTEL_DEBUG & DEBUG_COLOR) ? BLUE_HEADER : "",
+ ice->frame, ctx, ' ',
+ (INTEL_DEBUG & DEBUG_COLOR) ? NORMAL : "");
+ }
+ }
+
/* XXX PIPE_FLUSH_DEFERRED */
for (unsigned i = 0; i < IRIS_BATCH_COUNT; i++)
iris_batch_flush(&ice->batches[i]);
struct iris_screen *screen = (struct iris_screen *)ctx->screen;
struct drm_syncobj_handle args = {
+ .handle = gem_syncobj_create(screen->fd, DRM_SYNCOBJ_CREATE_SIGNALED),
.flags = DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE,
.fd = fd,
};
if (gen_ioctl(screen->fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args) == -1) {
fprintf(stderr, "DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE failed: %s\n",
strerror(errno));
+ gem_syncobj_destroy(screen->fd, args.handle);
*out = NULL;
return;
}