diff mbox series

[2/2] virgl: Modify resource_query_layout

Message ID 20231110074027.24862-3-julia.zhang@amd.com (mailing list archive)
State Superseded
Headers show
Series Implementation of resource_query_layout | expand

Commit Message

Zhang, Julia Nov. 10, 2023, 7:40 a.m. UTC
Modify resource_query_layout to handle the use case that need to query
correct stride for guest linear resource before it is created.

Signed-off-by: Julia Zhang <julia.zhang@amd.com>
---
 hw/display/virtio-gpu-virgl.c               | 20 +++-----------------
 include/standard-headers/linux/virtio_gpu.h |  8 ++++----
 2 files changed, 7 insertions(+), 21 deletions(-)
diff mbox series

Patch

diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c
index 9c5a07cef1..ae146a68cb 100644
--- a/hw/display/virtio-gpu-virgl.c
+++ b/hw/display/virtio-gpu-virgl.c
@@ -728,22 +728,9 @@  static void virgl_cmd_resource_query_layout(VirtIOGPU *g,
     VIRTIO_GPU_FILL_CMD(qlayout);
     virtio_gpu_resource_query_layout_bswap(&qlayout);
 
-    if (qlayout.resource_id == 0) {
-        qemu_log_mask(LOG_GUEST_ERROR, "%s: resource id 0 is not allowed\n",
-                      __func__);
-        cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID;
-        return;
-    }
-
-    res = virtio_gpu_find_resource(g, qlayout.resource_id);
-    if (!res) {
-        qemu_log_mask(LOG_GUEST_ERROR, "%s: resource does not exist %d\n",
-                      __func__, qlayout.resource_id);
-        cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID;
-        return;
-    }
-
-    ret = virgl_renderer_resource_query_layout(qlayout.resource_id, &rlayout);
+    ret = virgl_renderer_resource_query_layout(qlayout.resource_id, &rlayout,
+					       qlayout.width, qlayout.height,
+					       qlayout.format, qlayout.bind);
     if (ret != 0) {
         qemu_log_mask(LOG_GUEST_ERROR, "%s: resource %d is not externally-allocated\n",
                       __func__, qlayout.resource_id);
@@ -758,7 +745,6 @@  static void virgl_cmd_resource_query_layout(VirtIOGPU *g,
     for (i = 0; i < resp.num_planes; i++) {
         resp.planes[i].offset = rlayout.planes[i].offset;
         resp.planes[i].stride = rlayout.planes[i].stride;
-	resp.planes[i].size = rlayout.planes[i].size;
     }
     virtio_gpu_ctrl_response(g, cmd, &resp.hdr, sizeof(resp));
 }
diff --git a/include/standard-headers/linux/virtio_gpu.h b/include/standard-headers/linux/virtio_gpu.h
index 734fdb6beb..6fb0f711c8 100644
--- a/include/standard-headers/linux/virtio_gpu.h
+++ b/include/standard-headers/linux/virtio_gpu.h
@@ -506,7 +506,10 @@  struct virtio_gpu_status_freezing {
 struct virtio_gpu_resource_query_layout {
 	struct virtio_gpu_ctrl_hdr hdr;
 	uint32_t resource_id;
-	uint32_t padding;
+	uint32_t width;
+	uint32_t height;
+	uint32_t format;
+	uint32_t bind;
 };
 
 /* VIRTIO_GPU_RESP_OK_RESOURCE_LAYOUT */
@@ -515,12 +518,9 @@  struct virtio_gpu_resp_resource_layout {
 	struct virtio_gpu_ctrl_hdr hdr;
 	uint64_t modifier;
 	uint32_t num_planes;
-	uint32_t padding;
 	struct virtio_gpu_resource_plane {
 		uint64_t offset;
-		uint64_t size;
 		uint32_t stride;
-		uint32_t padding;
 	} planes[VIRTIO_GPU_RES_MAX_PLANES];
 };