use surface offset value in get_tile()
authorBrian <brian@i915.localnet.net>
Wed, 8 Aug 2007 22:46:32 +0000 (16:46 -0600)
committerBrian <brian@i915.localnet.net>
Wed, 8 Aug 2007 22:46:32 +0000 (16:46 -0600)
src/mesa/pipe/softpipe/sp_surface.c

index 174dcc016921a6f7d09778e52f1e7fa2e64b6155..3260bcce75c69ebccb36af8f67ea7f079ce13d2d 100644 (file)
@@ -321,10 +321,19 @@ a8r8g8b8_get_tile(struct pipe_surface *ps,
                   GLuint x, GLuint y, GLuint w, GLuint h, GLfloat *p)
 {
    const GLuint *src
-      = ((const GLuint *) ps->region->map) + y * ps->region->pitch + x;
+      = ((const GLuint *) (ps->region->map + ps->offset))
+      + y * ps->region->pitch + x;
    GLuint i, j;
+#if 0
    assert(x + w <= ps->width);
    assert(y + h <= ps->height);
+#else
+   /* temp hack */
+   if (x + w > ps->width)
+      w = ps->width - x;
+   if (y + h > ps->height)
+      h = ps->height -y;
+#endif
    for (i = 0; i < h; i++) {
       for (j = 0; j < w; j++) {
          p[0] = UBYTE_TO_FLOAT((src[j] >> 16) & 0xff);
@@ -343,7 +352,8 @@ a1r5g5b5_get_tile(struct pipe_surface *ps,
                   GLuint x, GLuint y, GLuint w, GLuint h, GLfloat *p)
 {
    const GLushort *src
-      = ((const GLushort *) ps->region->map) + y * ps->region->pitch + x;
+      = ((const GLushort *) (ps->region->map + ps->offset))
+      + y * ps->region->pitch + x;
    GLuint i, j;
    for (i = 0; i < h; i++) {
       for (j = 0; j < w; j++) {