v3d: Fix a typo in a comment in job handling.
[mesa.git] / src / gallium / drivers / v3d / v3d_job.c
index 7be568d623a969fcf979dc1cd55c394beef073b7..d45f89d096248503a8b3842e1b341d4d510849c6 100644 (file)
@@ -47,8 +47,6 @@ remove_from_ht(struct hash_table *ht, void *key)
 static void
 v3d_job_free(struct v3d_context *v3d, struct v3d_job *job)
 {
-        struct set_entry *entry;
-
         set_foreach(job->bos, entry) {
                 struct v3d_bo *bo = (struct v3d_bo *)entry->key;
                 v3d_bo_unreference(&bo);
@@ -57,8 +55,6 @@ v3d_job_free(struct v3d_context *v3d, struct v3d_job *job)
         remove_from_ht(v3d->jobs, &job->key);
 
         if (job->write_prscs) {
-                struct set_entry *entry;
-
                 set_foreach(job->write_prscs, entry) {
                         const struct pipe_resource *prsc = entry->key;
 
@@ -73,6 +69,11 @@ v3d_job_free(struct v3d_context *v3d, struct v3d_job *job)
                 }
         }
         if (job->zsbuf) {
+                struct v3d_resource *rsc = v3d_resource(job->zsbuf->texture);
+                if (rsc->separate_stencil)
+                        remove_from_ht(v3d->write_jobs,
+                                       &rsc->separate_stencil->base);
+
                 remove_from_ht(v3d->write_jobs, job->zsbuf->texture);
                 pipe_surface_reference(&job->zsbuf, NULL);
         }
@@ -170,7 +171,6 @@ v3d_flush_jobs_reading_resource(struct v3d_context *v3d,
 
         v3d_flush_jobs_writing_resource(v3d, prsc);
 
-        struct hash_entry *entry;
         hash_table_foreach(v3d->jobs, entry) {
                 struct v3d_job *job = entry->data;
 
@@ -222,7 +222,7 @@ v3d_job_set_tile_buffer_size(struct v3d_job *job)
 /**
  * Returns a v3d_job struture for tracking V3D rendering to a particular FBO.
  *
- * If we've already started rendering to this FBO, then return old same job,
+ * If we've already started rendering to this FBO, then return the same job,
  * otherwise make a new one.  If we're beginning rendering to an FBO, make
  * sure that any previous reads of the FBO (or writes to its color/Z surfaces)
  * have been flushed.
@@ -274,9 +274,19 @@ v3d_get_job(struct v3d_context *v3d,
                         _mesa_hash_table_insert(v3d->write_jobs,
                                                 cbufs[i]->texture, job);
         }
-        if (zsbuf)
+        if (zsbuf) {
                 _mesa_hash_table_insert(v3d->write_jobs, zsbuf->texture, job);
 
+                struct v3d_resource *rsc = v3d_resource(zsbuf->texture);
+                if (rsc->separate_stencil) {
+                        v3d_flush_jobs_reading_resource(v3d,
+                                                        &rsc->separate_stencil->base);
+                        _mesa_hash_table_insert(v3d->write_jobs,
+                                                &rsc->separate_stencil->base,
+                                                job);
+                }
+        }
+
         memcpy(&job->key, &local_key, sizeof(local_key));
         _mesa_hash_table_insert(v3d->jobs, &job->key, job);
 
@@ -306,14 +316,14 @@ v3d_get_job_for_fbo(struct v3d_context *v3d)
                 if (cbufs[i]) {
                         struct v3d_resource *rsc = v3d_resource(cbufs[i]->texture);
                         if (!rsc->writes)
-                                job->cleared |= PIPE_CLEAR_COLOR0 << i;
+                                job->clear |= PIPE_CLEAR_COLOR0 << i;
                 }
         }
 
         if (zsbuf) {
                 struct v3d_resource *rsc = v3d_resource(zsbuf->texture);
                 if (!rsc->writes)
-                        job->cleared |= PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL;
+                        job->clear |= PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL;
         }
 
         job->draw_tiles_x = DIV_ROUND_UP(v3d->framebuffer.width,
@@ -326,44 +336,30 @@ v3d_get_job_for_fbo(struct v3d_context *v3d)
         return job;
 }
 
-static bool
-v3d_clif_dump_lookup(void *data, uint32_t addr, void **vaddr)
-{
-        struct v3d_job *job = data;
-        struct set_entry *entry;
-
-        set_foreach(job->bos, entry) {
-                struct v3d_bo *bo = (void *)entry->key;
-
-                if (addr >= bo->offset &&
-                    addr < bo->offset + bo->size) {
-                        v3d_bo_map(bo);
-                        *vaddr = bo->map + addr - bo->offset;
-                        return true;
-                }
-        }
-
-        return false;
-}
-
 static void
 v3d_clif_dump(struct v3d_context *v3d, struct v3d_job *job)
 {
-        if (!(V3D_DEBUG & V3D_DEBUG_CL))
+        if (!(V3D_DEBUG & (V3D_DEBUG_CL | V3D_DEBUG_CLIF)))
                 return;
 
         struct clif_dump *clif = clif_dump_init(&v3d->screen->devinfo,
-                                                stderr, v3d_clif_dump_lookup,
-                                                job);
+                                                stderr,
+                                                V3D_DEBUG & V3D_DEBUG_CL);
+
+        set_foreach(job->bos, entry) {
+                struct v3d_bo *bo = (void *)entry->key;
+                char *name = ralloc_asprintf(NULL, "%s_0x%x",
+                                             bo->name, bo->offset);
+
+                v3d_bo_map(bo);
+                clif_dump_add_bo(clif, name, bo->offset, bo->size, bo->map);
 
-        fprintf(stderr, "BCL: 0x%08x..0x%08x\n",
-                job->submit.bcl_start, job->submit.bcl_end);
+                ralloc_free(name);
+        }
 
-        clif_dump_add_cl(clif, job->submit.bcl_start, job->submit.bcl_end);
+        clif_dump(clif, &job->submit);
 
-        fprintf(stderr, "RCL: 0x%08x..0x%08x\n",
-                job->submit.rcl_start, job->submit.rcl_end);
-        clif_dump_add_cl(clif, job->submit.rcl_start, job->submit.rcl_end);
+        clif_dump_destroy(clif);
 }
 
 /**