<div dir="ltr">This patch gives me a warning<div><br></div><div><div>/var/tmp/portage/media-libs/mesa-9999/work/mesa-9999/src/gallium/drivers/radeon/r600_texture.c: In function ‘r600_texture_from_handle’:</div><div>/var/tmp/portage/media-libs/mesa-9999/work/mesa-9999/src/gallium/drivers/radeon/r600_texture.c:1441:28: warning: unused variable ‘gfx9’ [-Wunused-variable]</div><div>   struct gfx9_surf_layout *gfx9 = &surface.u.gfx9;</div><div>                            ^~~~</div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, 20 Mar 2017 at 22:54 Marek Olšák <<a href="mailto:maraeo@gmail.com">maraeo@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Marek Olšák <<a href="mailto:marek.olsak@amd.com" class="gmail_msg" target="_blank">marek.olsak@amd.com</a>><br class="gmail_msg">
<br class="gmail_msg">
---<br class="gmail_msg">
 src/gallium/drivers/radeon/r600_texture.c  | 20 +++++++++++++++++++-<br class="gmail_msg">
 src/gallium/drivers/radeon/radeon_winsys.h |  5 +++++<br class="gmail_msg">
 2 files changed, 24 insertions(+), 1 deletion(-)<br class="gmail_msg">
<br class="gmail_msg">
diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c<br class="gmail_msg">
index 2e66dd0..df260b6 100644<br class="gmail_msg">
--- a/src/gallium/drivers/radeon/r600_texture.c<br class="gmail_msg">
+++ b/src/gallium/drivers/radeon/r600_texture.c<br class="gmail_msg">
@@ -291,6 +291,7 @@ static void r600_texture_init_metadata(struct r600_common_screen *rscreen,<br class="gmail_msg">
        memset(metadata, 0, sizeof(*metadata));<br class="gmail_msg">
<br class="gmail_msg">
        if (rscreen->chip_class >= GFX9) {<br class="gmail_msg">
+               metadata->u.gfx9.swizzle_mode = surface->u.gfx9.surf.swizzle_mode;<br class="gmail_msg">
        } else {<br class="gmail_msg">
                metadata->u.legacy.microtile = surface->u.legacy.level[0].mode >= RADEON_SURF_MODE_1D ?<br class="gmail_msg">
                                           RADEON_LAYOUT_TILED : RADEON_LAYOUT_LINEAR;<br class="gmail_msg">
@@ -1345,6 +1346,7 @@ static struct pipe_resource *r600_texture_from_handle(struct pipe_screen *screen<br class="gmail_msg">
        int r;<br class="gmail_msg">
        struct radeon_bo_metadata metadata = {};<br class="gmail_msg">
        struct r600_texture *rtex;<br class="gmail_msg">
+       bool is_scanout;<br class="gmail_msg">
<br class="gmail_msg">
        /* Support only 2D textures without mipmaps */<br class="gmail_msg">
        if ((templ->target != PIPE_TEXTURE_2D && templ->target != PIPE_TEXTURE_RECT) ||<br class="gmail_msg">
@@ -1358,6 +1360,13 @@ static struct pipe_resource *r600_texture_from_handle(struct pipe_screen *screen<br class="gmail_msg">
        rscreen->ws->buffer_get_metadata(buf, &metadata);<br class="gmail_msg">
<br class="gmail_msg">
        if (rscreen->chip_class >= GFX9) {<br class="gmail_msg">
+               if (metadata.u.gfx9.swizzle_mode > 0)<br class="gmail_msg">
+                       array_mode = RADEON_SURF_MODE_2D;<br class="gmail_msg">
+               else<br class="gmail_msg">
+                       array_mode = RADEON_SURF_MODE_LINEAR_ALIGNED;<br class="gmail_msg">
+<br class="gmail_msg">
+               is_scanout = metadata.u.gfx9.swizzle_mode == 0 ||<br class="gmail_msg">
+                            metadata.u.gfx9.swizzle_mode % 4 == 2;<br class="gmail_msg">
        } else {<br class="gmail_msg">
                surface.u.legacy.pipe_config = metadata.u.legacy.pipe_config;<br class="gmail_msg">
                surface.u.legacy.bankw = metadata.u.legacy.bankw;<br class="gmail_msg">
@@ -1372,10 +1381,12 @@ static struct pipe_resource *r600_texture_from_handle(struct pipe_screen *screen<br class="gmail_msg">
                        array_mode = RADEON_SURF_MODE_1D;<br class="gmail_msg">
                else<br class="gmail_msg">
                        array_mode = RADEON_SURF_MODE_LINEAR_ALIGNED;<br class="gmail_msg">
+<br class="gmail_msg">
+               is_scanout = metadata.u.legacy.scanout;<br class="gmail_msg">
        }<br class="gmail_msg">
<br class="gmail_msg">
        r = r600_init_surface(rscreen, &surface, templ, array_mode, stride,<br class="gmail_msg">
-                             offset, true, metadata.u.legacy.scanout, false, false);<br class="gmail_msg">
+                             offset, true, is_scanout, false, false);<br class="gmail_msg">
        if (r) {<br class="gmail_msg">
                return NULL;<br class="gmail_msg">
        }<br class="gmail_msg">
@@ -1390,6 +1401,13 @@ static struct pipe_resource *r600_texture_from_handle(struct pipe_screen *screen<br class="gmail_msg">
        if (rscreen->apply_opaque_metadata)<br class="gmail_msg">
                rscreen->apply_opaque_metadata(rscreen, rtex, &metadata);<br class="gmail_msg">
<br class="gmail_msg">
+       /* Validate that addrlib arrived at the same surface parameters. */<br class="gmail_msg">
+       if (rscreen->chip_class >= GFX9) {<br class="gmail_msg">
+               struct gfx9_surf_layout *gfx9 = &surface.u.gfx9;<br class="gmail_msg">
+<br class="gmail_msg">
+               assert(metadata.u.gfx9.swizzle_mode == gfx9->surf.swizzle_mode);<br class="gmail_msg">
+       }<br class="gmail_msg">
+<br class="gmail_msg">
        return &rtex->resource.b.b;<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
diff --git a/src/gallium/drivers/radeon/radeon_winsys.h b/src/gallium/drivers/radeon/radeon_winsys.h<br class="gmail_msg">
index b3c7608..7839170 100644<br class="gmail_msg">
--- a/src/gallium/drivers/radeon/radeon_winsys.h<br class="gmail_msg">
+++ b/src/gallium/drivers/radeon/radeon_winsys.h<br class="gmail_msg">
@@ -250,6 +250,11 @@ struct radeon_bo_metadata {<br class="gmail_msg">
             unsigned                stride;<br class="gmail_msg">
             bool                    scanout;<br class="gmail_msg">
         } legacy;<br class="gmail_msg">
+<br class="gmail_msg">
+        struct {<br class="gmail_msg">
+            /* surface flags */<br class="gmail_msg">
+            unsigned swizzle_mode:5;<br class="gmail_msg">
+        } gfx9;<br class="gmail_msg">
     } u;<br class="gmail_msg">
<br class="gmail_msg">
     /* Additional metadata associated with the buffer, in bytes.<br class="gmail_msg">
--<br class="gmail_msg">
2.7.4<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
mesa-dev mailing list<br class="gmail_msg">
<a href="mailto:mesa-dev@lists.freedesktop.org" class="gmail_msg" target="_blank">mesa-dev@lists.freedesktop.org</a><br class="gmail_msg">
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br class="gmail_msg">
</blockquote></div>