Re: [Mesa-dev] [PATCH 2/2] virgl: Pass resource size and transfer offsets
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
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
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