Mesa (master): panfrost: Align linear renderable resources

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jun 10 14:06:02 UTC 2019


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

Author: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Date:   Thu Jun  6 14:36:41 2019 -0700

panfrost: Align linear renderable resources

It's just -easier- to render to aligned framebuffers. For winsys
targets, we already align, but even for an internal linear FBO we ought
to align everything nicely.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>

---

 src/gallium/drivers/panfrost/pan_resource.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c
index ef0a3ba1d9f..bce3426fd67 100644
--- a/src/gallium/drivers/panfrost/pan_resource.c
+++ b/src/gallium/drivers/panfrost/pan_resource.c
@@ -183,6 +183,15 @@ panfrost_setup_slices(const struct pipe_resource *tmpl, struct panfrost_bo *bo)
         unsigned height = tmpl->height0;
         unsigned bytes_per_pixel = util_format_get_blocksize(tmpl->format);
 
+        /* Tiled operates blockwise; linear is packed. Also, anything
+         * we render to has to be tile-aligned. Maybe not strictly
+         * necessary, but we're not *that* pressed for memory and it
+         * makes code a lot simpler */
+
+        bool renderable = tmpl->bind & PIPE_BIND_RENDER_TARGET;
+        bool tiled = bo->layout == PAN_TILED;
+        bool should_align = renderable || tiled;
+
         unsigned offset = 0;
 
         for (unsigned l = 0; l <= tmpl->last_level; ++l) {
@@ -191,9 +200,7 @@ panfrost_setup_slices(const struct pipe_resource *tmpl, struct panfrost_bo *bo)
                 unsigned effective_width = width;
                 unsigned effective_height = height;
 
-                /* Tiled operates blockwise; linear is packed */
-
-                if (bo->layout == PAN_TILED) {
+                if (should_align) {
                         effective_width = ALIGN(effective_width, 16);
                         effective_height = ALIGN(effective_height, 16);
                 }




More information about the mesa-commit mailing list