Mesa (master): swr: fix texture layout for compressed formats

Ilia Mirkin imirkin at kemper.freedesktop.org
Wed Nov 16 01:28:40 UTC 2016


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

Author: Ilia Mirkin <imirkin at alum.mit.edu>
Date:   Wed Nov  9 16:41:16 2016 -0500

swr: fix texture layout for compressed formats

Fixes the texsubimage piglit and lets the copyteximage one get further.

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
Reviewed-by: Bruce Cherniak <bruce.cherniak at intel.com>

---

 src/gallium/drivers/swr/swr_context.cpp | 5 +++--
 src/gallium/drivers/swr/swr_screen.cpp  | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/swr/swr_context.cpp b/src/gallium/drivers/swr/swr_context.cpp
index 6c0782a..a5ab236 100644
--- a/src/gallium/drivers/swr/swr_context.cpp
+++ b/src/gallium/drivers/swr/swr_context.cpp
@@ -157,8 +157,9 @@ swr_transfer_map(struct pipe_context *pipe,
       }
    }
 
-   unsigned offset = box->z * pt->layer_stride + box->y * pt->stride
-      + box->x * util_format_get_blocksize(format);
+   unsigned offset = box->z * pt->layer_stride +
+      util_format_get_nblocksy(format, box->y) * pt->stride +
+      util_format_get_stride(format, box->x);
 
    *transfer = pt;
 
diff --git a/src/gallium/drivers/swr/swr_screen.cpp b/src/gallium/drivers/swr/swr_screen.cpp
index fa16edd..16a8bcf 100644
--- a/src/gallium/drivers/swr/swr_screen.cpp
+++ b/src/gallium/drivers/swr/swr_screen.cpp
@@ -796,8 +796,9 @@ swr_texture_layout(struct swr_screen *screen,
          res->alignedHeight = alignedHeight;
       }
 
-      res->row_stride[level] = alignedWidth * finfo.Bpp;
-      res->img_stride[level] = res->row_stride[level] * alignedHeight;
+      res->row_stride[level] = util_format_get_stride(fmt, alignedWidth);
+      res->img_stride[level] =
+         res->row_stride[level] * util_format_get_nblocksy(fmt, alignedHeight);
       res->mip_offsets[level] = total_size;
 
       if (pt->target == PIPE_TEXTURE_3D)




More information about the mesa-commit mailing list