panfrost: Update scoreboarding notes
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Sun, 16 Feb 2020 18:58:09 +0000 (13:58 -0500)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 18 Feb 2020 13:45:25 +0000 (08:45 -0500)
Our understanding of the set/write value jobs has evolved, so let's
update the rules.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3836>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3836>

src/gallium/drivers/panfrost/pan_scoreboard.c

index 0e27a0ae64ce7b854f5fd623ee2f6437561c8d4a..c83e78a5934f7daf28db8b8d00ce3e8e1c11e041 100644 (file)
@@ -49,7 +49,8 @@
  *
  * More specifically, here are a set of rules:
  *
- * - A set value job must appear if and only if there is at least one tiler job.
+ * - A write value job must appear if and only if there is at least one tiler
+ *   job, and tiler jobs must depend on it.
  *
  * - Vertex jobs and tiler jobs are independent.
  *
@@ -57,8 +58,7 @@
  *   data from a vertex job, it depends on the vertex job. If it's getting data
  *   from software, this is null.
  *
- * - The first vertex job used as the input to tiling must depend on the set
- *   value job, if it is present.
+ * - Tiler jobs must depend on the write value job (chained or otherwise).
  *
  * - Tiler jobs must be strictly ordered. So each tiler job must depend on the
  *   previous job in the chain.
@@ -70,9 +70,9 @@
  *
  * Justification for each rule:
  *
- * - Set value jobs set up tiling, essentially. If tiling occurs, they are
- *   needed; if it does not, we cannot emit them since then tiling partially
- *   occurs and it's bad.
+ * - Write value jobs are used to write a zero into a magic tiling field, which
+ *   enables tiling to work. If tiling occurs, they are needed; if it does not,
+ *   we cannot emit them since then tiling partially occurs and it's bad.
  *
  * - The hardware has no notion of a "vertex/tiler job" (at least not our
  *   hardware -- other revs have fused jobs, but --- crap, this just got even
  *   read-before-write hazard. Tiler jobs get their data from vertex jobs, ergo
  *   tiler jobs depend on the corresponding vertex job (if it's there).
  *
- * - In fact, tiling depends on the set value job, but tiler jobs depend on the
- *   corresponding vertex jobs and each other, so this rule ensures each tiler
- *   job automatically depends on the set value job.
- *
  * - The tiler is not thread-safe; this dependency prevents race conditions
  *   between two different jobs trying to write to the tiler outputs at the
  *   same time.