Re: [Mesa-dev] [PATCH 2/2] virgl: Pass resource size and transfer offsets

2018-09-14 Thread Gert Wollny
Hello Dave, 

Am Freitag, den 14.09.2018, 13:25 +1000 schrieb Dave Airlie:
[...]

> 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.

Comparing between mesa-master and v3 of the patch I get exactly the
same results on kabylake for "piglit run gpu -t formats" that include
these tests, or did you mean different results w.r.t. v2 of the patch?

In this case I get simply more failures. Funny enough v2 has the same
additional failures like when running though qemu, so there must be a
similar problem with strides on the virgl-drm mesa side.

I was testing with mesa master 1a263b377c plus these patches.  

HTH,
Gert 

PS: I'll be away for the next week


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 2/2] virgl: Pass resource size and transfer offsets

2018-09-14 Thread Gert Wollny
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.

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 *vws,
+static int virgl_vtest_send_transfer_cmd(struct virgl_vtest_winsys *vws,
   uint32_t vcmd,
   uint32_t handle,
   uint32_t level, uint32_t stride,
@@ -315,6 +358,73 @@ int virgl_vtest_send_transfer_cmd(struct 
virgl_vtest_winsys *vws,
return 0;
 }
 
+static int virgl_vtest_send_transfer_cmd2(struct virgl_vtest_winsys *vws,
+  

Re: [Mesa-dev] [PATCH 2/2] virgl: Pass resource size and transfer offsets

2018-09-14 Thread Dave Airlie
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