Revert "drisw: Copy entire buffer ignoring damage regions"
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

This reverts commit 755e795e4c.

Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38817>
This commit is contained in:
Lucas Fryzek 2025-12-03 19:19:56 -05:00 committed by Marge Bot
parent 17ab0f2ece
commit 48799005d7

View file

@ -352,21 +352,41 @@ dri_sw_displaytarget_display(struct sw_winsys *ws,
struct dri_sw_winsys *dri_sw_ws = dri_sw_winsys(ws);
struct dri_sw_displaytarget *dri_sw_dt = dri_sw_displaytarget(dt);
struct dri_drawable *dri_drawable = (struct dri_drawable *)context_private;
unsigned width, height;
unsigned width, height, x = 0, y = 0;
unsigned blsize = util_format_get_blocksize(dri_sw_dt->format);
bool is_shm = dri_sw_dt->shmid != -1;
/* Set the width to 'stride / cpp'.
*
* PutImage correctly clips to the width of the dst drawable.
*/
width = dri_sw_dt->stride / blsize;
height = dri_sw_dt->height;
if (is_shm)
dri_sw_ws->lf->put_image_shm(dri_drawable, dri_sw_dt->shmid, dri_sw_dt->data, 0, 0,
0, 0, width, height, dri_sw_dt->stride);
else
dri_sw_ws->lf->put_image(dri_drawable, dri_sw_dt->data, width, height);
return;
if (!nboxes) {
width = dri_sw_dt->stride / blsize;
height = dri_sw_dt->height;
if (is_shm)
dri_sw_ws->lf->put_image_shm(dri_drawable, dri_sw_dt->shmid, dri_sw_dt->data, 0, 0,
0, 0, width, height, dri_sw_dt->stride);
else
dri_sw_ws->lf->put_image(dri_drawable, dri_sw_dt->data, width, height);
return;
}
for (unsigned i = 0; i < nboxes; i++) {
unsigned offset = dri_sw_dt->stride * box[i].y;
unsigned offset_x = box[i].x * blsize;
char *data = dri_sw_dt->data + offset;
x = box[i].x;
y = box[i].y;
width = box[i].width;
height = box[i].height;
if (is_shm) {
/* don't add x offset for shm, the put_image_shm will deal with it */
dri_sw_ws->lf->put_image_shm(dri_drawable, dri_sw_dt->shmid, dri_sw_dt->data, offset, offset_x,
x, y, width, height, dri_sw_dt->stride);
} else {
data += offset_x;
dri_sw_ws->lf->put_image2(dri_drawable, data,
x, y, width, height, dri_sw_dt->stride);
}
}
}
static void