Mesa (main): iris: Replace no_gpu flag with PIPE_MAP_DIRECTLY

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 2 21:37:21 UTC 2021


Module: Mesa
Branch: main
Commit: ed55f52b399cc420cb264c0535d3c71b2a60c740
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ed55f52b399cc420cb264c0535d3c71b2a60c740

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Wed May 12 22:19:42 2021 -0700

iris: Replace no_gpu flag with PIPE_MAP_DIRECTLY

Here, we're deciding when to map the buffer directly, rather than using
the GPU to blit to/from a temporary.  There is already a flag for that,
PIPE_MAP_DIRECTLY, which has the added benefit of not being a negative
(such as "no_gpu").

Currently, we intend to map directly if:

1. Direct mappings were requested explicitly
2. Persistent or coherent mappings were requested (and so we must)
3. ASTC textures (we currently can't blit those correctly)
4. There is no need for a temporary (there's no image compression that
   the CPU wouldn't understand, and we don't need to avoid stalls due
   to the buffer being busy on the GPU)

Expressing "please memory map this directly" is easier to follow than
"please don't use the GPU as part of mapping this".

Acked-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10941>

---

 src/gallium/drivers/iris/iris_resource.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/iris/iris_resource.c b/src/gallium/drivers/iris/iris_resource.c
index 38cdc161187..77c185ffe2f 100644
--- a/src/gallium/drivers/iris/iris_resource.c
+++ b/src/gallium/drivers/iris/iris_resource.c
@@ -2048,9 +2048,8 @@ iris_transfer_map(struct pipe_context *ctx,
     * contain state we're constructing for a GPU draw call, which would
     * kill us with infinite stack recursion.
     */
-   bool no_gpu = usage & (PIPE_MAP_PERSISTENT |
-                          PIPE_MAP_COHERENT |
-                          PIPE_MAP_DIRECTLY);
+   if (usage & (PIPE_MAP_PERSISTENT | PIPE_MAP_COHERENT))
+      usage |= PIPE_MAP_DIRECTLY;
 
    /* GPU copies are not useful for buffer reads.  Instead of stalling to
     * read from the original buffer, we'd simply copy it to a temporary...
@@ -2063,19 +2062,19 @@ iris_transfer_map(struct pipe_context *ctx,
     */
    if (!(usage & PIPE_MAP_DISCARD_RANGE) &&
        !iris_has_invalid_primary(res, level, 1, box->z, box->depth)) {
-      no_gpu = true;
+      usage |= PIPE_MAP_DIRECTLY;
    }
 
    const struct isl_format_layout *fmtl = isl_format_get_layout(surf->format);
    if (fmtl->txc == ISL_TXC_ASTC)
-      no_gpu = true;
+      usage |= PIPE_MAP_DIRECTLY;
 
    if (!map_would_stall &&
        !isl_aux_usage_has_compression(res->aux.usage)) {
-      no_gpu = true;
+      usage |= PIPE_MAP_DIRECTLY;
    }
 
-   if (!no_gpu) {
+   if (!(usage & PIPE_MAP_DIRECTLY)) {
       /* If we need a synchronous mapping and the resource is busy, or needs
        * resolving, we copy to/from a linear temporary buffer using the GPU.
        */



More information about the mesa-commit mailing list