On Thu, 13 Sep 2018 at 20:46, Gert Wollny wrote:
>
> From: Tomeu Vizoso
>
> Pass the size of a resource when creating it so a backing can be kept in
> the other side.
>
> Also pass the required offset to transfer commands.
>
> This moves vtest closer to how virtio-gpu works, making it more useful
> for testing.
>
> v2: - Use new messages for creation and transfers, as changing the
> behavior of the existing messages would be messy given that we don't
> want to break compatibility with older servers.
>
> v3: - Gert: Use correct strides: The resource corresponding to the output
> display might have a differnt line stride then the IOVs, so when
> reading back to this resource take the resource stride and the the
> IOV stride into account.
This causes regressions in a bunch of piglits on skylake for me.
arb_copy_image-formats
and some
./bin/fbo-generatemipmap-formats GL_EXT_texture_sRGB-s3tc
have some different results after this.
Dave.
>
> Signed-off-by: Tomeu Vizoso (v2)
> Signed-off-by: Gert Wollny
> ---
> .../winsys/virgl/vtest/virgl_vtest_socket.c| 143
> +++--
> .../winsys/virgl/vtest/virgl_vtest_winsys.c| 38 --
> .../winsys/virgl/vtest/virgl_vtest_winsys.h| 19 ++-
> src/gallium/winsys/virgl/vtest/vtest_protocol.h| 29 +
> 4 files changed, 201 insertions(+), 28 deletions(-)
>
> diff --git a/src/gallium/winsys/virgl/vtest/virgl_vtest_socket.c
> b/src/gallium/winsys/virgl/vtest/virgl_vtest_socket.c
> index 4d20a63ad6..3aa01aabdf 100644
> --- a/src/gallium/winsys/virgl/vtest/virgl_vtest_socket.c
> +++ b/src/gallium/winsys/virgl/vtest/virgl_vtest_socket.c
> @@ -221,6 +221,42 @@ int virgl_vtest_send_get_caps(struct virgl_vtest_winsys
> *vws,
> return 0;
> }
>
> +static int virgl_vtest_send_resource_create2(struct virgl_vtest_winsys *vws,
> + uint32_t handle,
> + enum pipe_texture_target target,
> + uint32_t format,
> + uint32_t bind,
> + uint32_t width,
> + uint32_t height,
> + uint32_t depth,
> + uint32_t array_size,
> + uint32_t last_level,
> + uint32_t nr_samples,
> + uint32_t size)
> +{
> + uint32_t res_create_buf[VCMD_RES_CREATE2_SIZE], vtest_hdr[VTEST_HDR_SIZE];
> +
> + vtest_hdr[VTEST_CMD_LEN] = VCMD_RES_CREATE2_SIZE;
> + vtest_hdr[VTEST_CMD_ID] = VCMD_RESOURCE_CREATE2;
> +
> + res_create_buf[VCMD_RES_CREATE2_RES_HANDLE] = handle;
> + res_create_buf[VCMD_RES_CREATE2_TARGET] = target;
> + res_create_buf[VCMD_RES_CREATE2_FORMAT] = format;
> + res_create_buf[VCMD_RES_CREATE2_BIND] = bind;
> + res_create_buf[VCMD_RES_CREATE2_WIDTH] = width;
> + res_create_buf[VCMD_RES_CREATE2_HEIGHT] = height;
> + res_create_buf[VCMD_RES_CREATE2_DEPTH] = depth;
> + res_create_buf[VCMD_RES_CREATE2_ARRAY_SIZE] = array_size;
> + res_create_buf[VCMD_RES_CREATE2_LAST_LEVEL] = last_level;
> + res_create_buf[VCMD_RES_CREATE2_NR_SAMPLES] = nr_samples;
> + res_create_buf[VCMD_RES_CREATE2_DATA_SIZE] = size;
> +
> + virgl_block_write(vws->sock_fd, _hdr, sizeof(vtest_hdr));
> + virgl_block_write(vws->sock_fd, _create_buf, sizeof(res_create_buf));
> +
> + return 0;
> +}
> +
> int virgl_vtest_send_resource_create(struct virgl_vtest_winsys *vws,
> uint32_t handle,
> enum pipe_texture_target target,
> @@ -231,10 +267,17 @@ int virgl_vtest_send_resource_create(struct
> virgl_vtest_winsys *vws,
> uint32_t depth,
> uint32_t array_size,
> uint32_t last_level,
> - uint32_t nr_samples)
> + uint32_t nr_samples,
> + uint32_t size)
> {
> uint32_t res_create_buf[VCMD_RES_CREATE_SIZE], vtest_hdr[VTEST_HDR_SIZE];
>
> + if (vws->protocol_version >= 1)
> + return virgl_vtest_send_resource_create2(vws, handle, target, format,
> + bind, width, height, depth,
> + array_size, last_level,
> + nr_samples, size);
> +
> vtest_hdr[VTEST_CMD_LEN] = VCMD_RES_CREATE_SIZE;
> vtest_hdr[VTEST_CMD_ID] = VCMD_RESOURCE_CREATE;
>
> @@ -282,7 +325,7 @@ int virgl_vtest_send_resource_unref(struct
> virgl_vtest_winsys *vws,
> return 0;
> }
>
> -int virgl_vtest_send_transfer_cmd(struct virgl_vtest_winsys