[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

mesa: Changes to 'ubuntu'



 debian/changelog                                               |   11 
 debian/patches/107_winsys_buffer_nullptr.patch                 |   13 
 debian/patches/108-r300g-fixup-rs690-tiling-stride-align.patch |  156 ++++++++++
 debian/patches/series                                          |    3 
 4 files changed, 182 insertions(+), 1 deletion(-)

New commits:
commit 41ad5137f704d0cc98fe8d8eb2a503ef61cbf5d0
Author: Bryce Harrington <bryce@canonical.com>
Date:   Fri Jan 14 13:40:30 2011 -0800

    debian/patches/108-r300g-fixup-rs690-tiling-stride-align.patch
    
    * debian/patches/108-r300g-fixup-rs690-tiling-stride-align.patch
      - Cherry pick 32218e4cc88f7dedebadffe4a80247decf4498f1 from upstream
        r300g: fixup rs690 tiling stride alignment calculations
        itself cherrypicked from d19b5cbd317620f3977e68fffb7a74793436b7e2
        addressing unity (and other) text and icon rendering problems.
        (LP: #681915)

diff --git a/debian/changelog b/debian/changelog
index d1a2a8b..50679eb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+mesa (7.9+repack-1ubuntu5) natty; urgency=low
+
+  * debian/patches/108-r300g-fixup-rs690-tiling-stride-align.patch
+    - Cherry pick 32218e4cc88f7dedebadffe4a80247decf4498f1 from upstream
+      r300g: fixup rs690 tiling stride alignment calculations
+      itself cherrypicked from d19b5cbd317620f3977e68fffb7a74793436b7e2
+      addressing unity (and other) text and icon rendering problems.
+      (LP: #681915)
+
+ -- John S Gruber <JohnSGruber@gmail.com>  Sun, 09 Jan 2011 14:25:53 -0500
+
 mesa (7.9+repack-1ubuntu4) natty; urgency=low
 
   * debian/patches/winsys_buffer_nullptr.patch: Null pointer check for
diff --git a/debian/patches/107_winsys_buffer_nullptr.patch b/debian/patches/107_winsys_buffer_nullptr.patch
new file mode 100644
index 0000000..8042d6b
--- /dev/null
+++ b/debian/patches/107_winsys_buffer_nullptr.patch
@@ -0,0 +1,13 @@
+diff --git a/src/gallium/winsys/radeon/drm/radeon_r300.c b/src/gallium/winsys/radeon/drm/radeon_r300.c
+index 420522f..2d1bd1e 100644
+--- a/src/gallium/winsys/radeon/drm/radeon_r300.c
++++ b/src/gallium/winsys/radeon/drm/radeon_r300.c
+@@ -119,7 +119,7 @@ static struct r300_winsys_buffer *radeon_r300_winsys_buffer_from_handle(struct r
+ 
+     if (stride)
+         *stride = whandle->stride;
+-    if (size)
++    if (size && _buf)
+         *size = _buf->base.size;
+ 
+     return radeon_libdrm_winsys_buffer(_buf);
diff --git a/debian/patches/108-r300g-fixup-rs690-tiling-stride-align.patch b/debian/patches/108-r300g-fixup-rs690-tiling-stride-align.patch
new file mode 100644
index 0000000..f1d2b59
--- /dev/null
+++ b/debian/patches/108-r300g-fixup-rs690-tiling-stride-align.patch
@@ -0,0 +1,156 @@
+From 32218e4cc88f7dedebadffe4a80247decf4498f1 Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+Date: Fri, 10 Dec 2010 15:40:48 +1000
+Subject: [PATCH] r300g: fixup rs690 tiling stride alignment calculations.
+
+The RS690 memory controller prefers things to be on a different
+boundary than the discrete GPUs, we had an attempt to fix this,
+but it still failed, this consolidates the stride calculation
+into one place and removes the really special case check.
+
+This fixes gnome-shell and 16 piglit tests on my rs690 system.
+
+NOTE: This is a candidate for both the 7.9 and 7.10 branches.
+
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+(cherry picked from commit d19b5cbd317620f3977e68fffb7a74793436b7e2)
+---
+ src/gallium/drivers/r300/r300_texture.c      |    2 +-
+ src/gallium/drivers/r300/r300_texture_desc.c |   46 +++++++++----------------
+ src/gallium/drivers/r300/r300_texture_desc.h |    2 +-
+ 3 files changed, 19 insertions(+), 31 deletions(-)
+
+diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c
+index 70fc5d9..6d86bc2 100644
+--- a/src/gallium/drivers/r300/r300_texture.c
++++ b/src/gallium/drivers/r300/r300_texture.c
+@@ -899,7 +899,7 @@ struct pipe_surface* r300_create_surface(struct pipe_context * ctx,
+                                                tex->desc.b.b.nr_samples,
+                                                tex->desc.microtile,
+                                                tex->desc.macrotile[level],
+-                                               DIM_HEIGHT);
++                                               DIM_HEIGHT, 0);
+ 
+         surface->cbzb_height = align((surface->base.height + 1) / 2,
+                                      tile_height);
+diff --git a/src/gallium/drivers/r300/r300_texture_desc.c b/src/gallium/drivers/r300/r300_texture_desc.c
+index aa82c47..7b17391 100644
+--- a/src/gallium/drivers/r300/r300_texture_desc.c
++++ b/src/gallium/drivers/r300/r300_texture_desc.c
+@@ -34,7 +34,7 @@ unsigned r300_get_pixel_alignment(enum pipe_format format,
+                                   unsigned num_samples,
+                                   enum r300_buffer_tiling microtile,
+                                   enum r300_buffer_tiling macrotile,
+-                                  enum r300_dim dim)
++                                  enum r300_dim dim, boolean is_rs690)
+ {
+     static const unsigned table[2][5][3][2] =
+     {
+@@ -57,6 +57,7 @@ unsigned r300_get_pixel_alignment(enum pipe_format format,
+             {{ 16, 8}, { 0,  0}, { 0,  0}}  /* 128 bits per pixel */
+         }
+     };
++
+     static const unsigned aa_block[2] = {4, 8};
+     unsigned tile = 0;
+     unsigned pixsize = util_format_get_blocksize(format);
+@@ -74,6 +75,14 @@ unsigned r300_get_pixel_alignment(enum pipe_format format,
+     } else {
+         /* Standard alignment. */
+         tile = table[macrotile][util_logbase2(pixsize)][microtile][dim];
++        if (macrotile == 0 && is_rs690 && dim == DIM_WIDTH) {
++            int align;
++            int h_tile;
++            h_tile = table[macrotile][util_logbase2(pixsize)][microtile][DIM_HEIGHT];
++            align = 64 / (pixsize * h_tile);
++            if (tile < align)
++                tile = align;
++        }
+     }
+ 
+     assert(tile);
+@@ -89,7 +98,7 @@ static boolean r300_texture_macro_switch(struct r300_texture_desc *desc,
+     unsigned tile, texdim;
+ 
+     tile = r300_get_pixel_alignment(desc->b.b.format, desc->b.b.nr_samples,
+-                                    desc->microtile, R300_BUFFER_TILED, dim);
++                                    desc->microtile, R300_BUFFER_TILED, dim, 0);
+     if (dim == DIM_WIDTH) {
+         texdim = u_minify(desc->width0, level);
+     } else {
+@@ -113,6 +122,9 @@ static unsigned r300_texture_get_stride(struct r300_screen *screen,
+                                         unsigned level)
+ {
+     unsigned tile_width, width, stride;
++    boolean is_rs690 = (screen->caps.family == CHIP_FAMILY_RS600 ||
++                        screen->caps.family == CHIP_FAMILY_RS690 ||
++                        screen->caps.family == CHIP_FAMILY_RS740);
+ 
+     if (desc->stride_in_bytes_override)
+         return desc->stride_in_bytes_override;
+@@ -131,38 +143,14 @@ static unsigned r300_texture_get_stride(struct r300_screen *screen,
+                                               desc->b.b.nr_samples,
+                                               desc->microtile,
+                                               desc->macrotile[level],
+-                                              DIM_WIDTH);
++                                              DIM_WIDTH, is_rs690);
+         width = align(width, tile_width);
+ 
+         stride = util_format_get_stride(desc->b.b.format, width);
+-
+-        /* Some IGPs need a minimum stride of 64 bytes, hmm... */
+-        if (!desc->macrotile[level] &&
+-            (screen->caps.family == CHIP_FAMILY_RS600 ||
+-             screen->caps.family == CHIP_FAMILY_RS690 ||
+-             screen->caps.family == CHIP_FAMILY_RS740)) {
+-            unsigned min_stride;
+-
+-            if (desc->microtile) {
+-                unsigned tile_height =
+-                        r300_get_pixel_alignment(desc->b.b.format,
+-                                                 desc->b.b.nr_samples,
+-                                                 desc->microtile,
+-                                                 desc->macrotile[level],
+-                                                 DIM_HEIGHT);
+-
+-                min_stride = 64 / tile_height;
+-            } else {
+-                min_stride = 64;
+-            }
+-
+-            return stride < min_stride ? min_stride : stride;
+-        }
+-
+         /* The alignment to 32 bytes is sort of implied by the layout... */
+         return stride;
+     } else {
+-        return align(util_format_get_stride(desc->b.b.format, width), 32);
++        return align(util_format_get_stride(desc->b.b.format, width), is_rs690 ? 64 : 32);
+     }
+ }
+ 
+@@ -179,7 +167,7 @@ static unsigned r300_texture_get_nblocksy(struct r300_texture_desc *desc,
+                                                desc->b.b.nr_samples,
+                                                desc->microtile,
+                                                desc->macrotile[level],
+-                                               DIM_HEIGHT);
++                                               DIM_HEIGHT, 0);
+         height = align(height, tile_height);
+ 
+         /* This is needed for the kernel checker, unfortunately. */
+diff --git a/src/gallium/drivers/r300/r300_texture_desc.h b/src/gallium/drivers/r300/r300_texture_desc.h
+index 44d8879..121d215 100644
+--- a/src/gallium/drivers/r300/r300_texture_desc.h
++++ b/src/gallium/drivers/r300/r300_texture_desc.h
+@@ -41,7 +41,7 @@ unsigned r300_get_pixel_alignment(enum pipe_format format,
+                                   unsigned num_samples,
+                                   enum r300_buffer_tiling microtile,
+                                   enum r300_buffer_tiling macrotile,
+-                                  enum r300_dim dim);
++                                  enum r300_dim dim, boolean is_rs690);
+ 
+ boolean r300_texture_desc_init(struct r300_screen *rscreen,
+                                struct r300_texture_desc *desc,
+-- 
+1.7.2.3
+
diff --git a/debian/patches/series b/debian/patches/series
index 74f3c60..c166c22 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -9,4 +9,5 @@
 104_i915_fragment_shader_disable.patch
 105_use_shared_libdricore.patch
 106_fix_renderbuffer_segfault.patch
-winsys_buffer_nullptr.patch
+107_winsys_buffer_nullptr.patch
+108-r300g-fixup-rs690-tiling-stride-align.patch


Reply to: