summaryrefslogtreecommitdiff
path: root/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c')
-rw-r--r--src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c
index 031b1d6432b..dae74366557 100644
--- a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c
+++ b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c
@@ -19,7 +19,7 @@ static INLINE boolean can_cache_resource(struct virgl_hw_res *res)
static uint32_t vtest_get_transfer_size(struct virgl_hw_res *res,
const struct pipe_box *box,
uint32_t stride, uint32_t layer_stride,
- uint32_t level)
+ uint32_t level, uint32_t *valid_stride_p)
{
uint32_t valid_stride, valid_layer_stride;
int elsize = util_format_get_blocksize(res->format);
@@ -36,6 +36,7 @@ static uint32_t vtest_get_transfer_size(struct virgl_hw_res *res,
valid_layer_stride = layer_stride;
}
+ *valid_stride_p = valid_stride;
return valid_layer_stride * box->depth;
}
@@ -49,8 +50,9 @@ virgl_vtest_transfer_put(struct virgl_winsys *vws,
struct virgl_vtest_winsys *vtws = virgl_vtest_winsys(vws);
uint32_t size;
void *ptr;
+ uint32_t valid_stride;
- size = vtest_get_transfer_size(res, box, stride, layer_stride, level);
+ size = vtest_get_transfer_size(res, box, stride, layer_stride, level, &valid_stride);
virgl_vtest_send_transfer_cmd(vtws, VCMD_TRANSFER_PUT, res->res_handle,
level, stride, layer_stride,
@@ -71,8 +73,9 @@ virgl_vtest_transfer_get(struct virgl_winsys *vws,
struct virgl_vtest_winsys *vtws = virgl_vtest_winsys(vws);
uint32_t size;
void *ptr;
+ uint32_t valid_stride;
- size = vtest_get_transfer_size(res, box, stride, layer_stride, level);
+ size = vtest_get_transfer_size(res, box, stride, layer_stride, level, &valid_stride);
virgl_vtest_send_transfer_cmd(vtws, VCMD_TRANSFER_GET, res->res_handle,
level, stride, layer_stride,
@@ -80,7 +83,7 @@ virgl_vtest_transfer_get(struct virgl_winsys *vws,
ptr = virgl_vtest_resource_map(vws, res);
- virgl_vtest_recv_transfer_get_data(vtws, ptr + buf_offset, size);
+ virgl_vtest_recv_transfer_get_data(vtws, ptr + buf_offset, size, valid_stride, box, res->format);
virgl_vtest_resource_unmap(vws, res);
return 0;
}
@@ -543,7 +546,7 @@ static void virgl_vtest_flush_frontbuffer(struct virgl_winsys *vws,
struct pipe_box box;
void *map;
uint32_t size;
- uint32_t offset = 0;
+ uint32_t offset = 0, valid_stride;
int elsize = util_format_get_blocksize(res->format);
if (!res->dt)
return;
@@ -560,7 +563,7 @@ static void virgl_vtest_flush_frontbuffer(struct virgl_winsys *vws,
box.depth = 1;
}
- size = vtest_get_transfer_size(res, &box, res->stride, 0, level);
+ size = vtest_get_transfer_size(res, &box, res->stride, 0, level, &valid_stride);
virgl_vtest_busy_wait(vtws, res->res_handle, VCMD_BUSY_WAIT_FLAG_WAIT);
map = vtws->sws->displaytarget_map(vtws->sws, res->dt, 0);
@@ -568,7 +571,7 @@ static void virgl_vtest_flush_frontbuffer(struct virgl_winsys *vws,
/* execute a transfer */
virgl_vtest_send_transfer_cmd(vtws, VCMD_TRANSFER_GET, res->res_handle,
level, res->stride, 0, &box, size);
- virgl_vtest_recv_transfer_get_data(vtws, map + offset, size);
+ virgl_vtest_recv_transfer_get_data(vtws, map + offset, size, valid_stride, &box, res->format);
vtws->sws->displaytarget_unmap(vtws->sws, res->dt);
vtws->sws->displaytarget_display(vtws->sws, res->dt, winsys_drawable_handle, sub_box);