diff options
author | Alyssa Rosenzweig <[email protected]> | 2020-02-16 13:58:09 -0500 |
---|---|---|
committer | Alyssa Rosenzweig <[email protected]> | 2020-02-18 08:45:25 -0500 |
commit | 308f9cf104dab55ab4d9f92150bf6952c9813dd4 (patch) | |
tree | 4c6c92fd8a31c6199d7c633f061851580b863ebc /src/gallium/drivers | |
parent | 88323d1ba0c0e6d0ba3be5e3b14213d2b93c44f6 (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/gallium/drivers')
-rw-r--r-- | src/gallium/drivers/panfrost/pan_scoreboard.c | 16 |
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. |