iris: Use isl_aux_usage_has_fast_clear()
[mesa.git] / src / gallium / drivers / iris / iris_fence.c
index dbd2d8265881eefc84ca02bfd4cc3592eea5876a..0d3144d61cce8a8d87f79d178a87f26d61632253 100644 (file)
@@ -133,7 +133,8 @@ iris_fence_reference(struct pipe_screen *p_screen,
                      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;
@@ -156,6 +157,10 @@ iris_wait_syncpt(struct pipe_screen *p_screen,
    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,
@@ -164,6 +169,17 @@ iris_fence_flush(struct pipe_context *ctx,
    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]);
@@ -340,12 +356,14 @@ iris_fence_create_fd(struct pipe_context *ctx,
 
    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;
    }