aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2020-02-16 13:58:09 -0500
committerAlyssa Rosenzweig <[email protected]>2020-02-18 08:45:25 -0500
commit308f9cf104dab55ab4d9f92150bf6952c9813dd4 (patch)
tree4c6c92fd8a31c6199d7c633f061851580b863ebc /src
parent88323d1ba0c0e6d0ba3be5e3b14213d2b93c44f6 (diff)
panfrost: Update scoreboarding notes
Our understanding of the set/write value jobs has evolved, so let's update the rules. Signed-off-by: Alyssa Rosenzweig <[email protected]> Reviewed-by: Boris Brezillon <[email protected]> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3836> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3836>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/panfrost/pan_scoreboard.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/src/gallium/drivers/panfrost/pan_scoreboard.c b/src/gallium/drivers/panfrost/pan_scoreboard.c
index 0e27a0ae64c..c83e78a5934 100644
--- a/src/gallium/drivers/panfrost/pan_scoreboard.c
+++ b/src/gallium/drivers/panfrost/pan_scoreboard.c
@@ -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
@@ -83,10 +83,6 @@
* 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.