[Mesa-dev] [PATCH] [RFC] i965/blit: bump some limits to 64k

Martin Peres martin.peres at linux.intel.com
Thu Jun 14 13:18:30 UTC 2018


This fixes screenshots using 8k+ wide display setups in modesetting.

Chris Wilson even recommended the changes in intel_mipmap_tree.c
should read 131072 instead of 65535, but I for sure got confused by
his explanation.

In any case, I would like to use this RFC patch as a forum to discuss
why the fallback path is broken[1], and as to what should be the
limits for HW-accelerated blits now that we got rid of the blitter
usage on recent platforms.

Tested-by: Martin Peres <martin.peres at linux.intel.com> # HSW
Cc: Chris Wilson <chris at chris-wilson.co.uk>

[1] https://fs.mupuf.org/corruption_8k%2B.png
---
 src/mesa/drivers/dri/i965/intel_blit.c        | 2 +-
 src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_blit.c b/src/mesa/drivers/dri/i965/intel_blit.c
index 90784c5b1958..458f8bd42857 100644
--- a/src/mesa/drivers/dri/i965/intel_blit.c
+++ b/src/mesa/drivers/dri/i965/intel_blit.c
@@ -403,7 +403,7 @@ emit_miptree_blit(struct brw_context *brw,
     * for linear surfaces and DWords for tiled surfaces.  So the maximum
     * pitch is 32k linear and 128k tiled.
     */
-   if (blt_pitch(src_mt) >= 32768 || blt_pitch(dst_mt) >= 32768) {
+   if (blt_pitch(src_mt) >= 65536 || blt_pitch(dst_mt) >= 65536) {
       perf_debug("Falling back due to >= 32k/128k pitch\n");
       return false;
    }
diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
index 6b89bf6848af..7347ea8b99d8 100644
--- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
@@ -523,7 +523,7 @@ need_to_retile_as_linear(struct brw_context *brw, unsigned row_pitch,
    if (row_pitch < 64)
       return true;
 
-   if (ALIGN(row_pitch, 512) >= 32768) {
+   if (ALIGN(row_pitch, 512) >= 65536) {
       perf_debug("row pitch %u too large to blit, falling back to untiled",
                  row_pitch);
       return true;
@@ -3583,7 +3583,7 @@ can_blit_slice(struct intel_mipmap_tree *mt,
                unsigned int level, unsigned int slice)
 {
    /* See intel_miptree_blit() for details on the 32k pitch limit. */
-   if (mt->surf.row_pitch >= 32768)
+   if (mt->surf.row_pitch >= 65536)
       return false;
 
    return true;
-- 
2.17.1



More information about the mesa-dev mailing list