On 2023/09/18 15:20, Huang Rui wrote:
On Mon, Sep 18, 2023 at 02:07:25PM +0800, Akihiko Odaki wrote:
On 2023/09/18 14:43, Huang Rui wrote:
On Sun, Sep 17, 2023 at 01:49:19PM +0800, Akihiko Odaki wrote:
On 2023/09/17 14:45, Huang Rui wrote:
On Sat, Sep 16, 2023 at 06:42:04PM +0800, Akihiko Odaki wrote:
On 2023/09/16 19:32, Huang Rui wrote:
On Fri, Sep 15, 2023 at 11:20:46PM +0800, Akihiko Odaki wrote:
On 2023/09/15 20:11, Huang Rui wrote:
Patch "virtio-gpu: CONTEXT_INIT feature" has added the context_init
feature flags.
We would like to enable the feature with virglrenderer, so add to create
virgl renderer context with flags using context_id when valid.

Originally-by: Antonio Caggiano <antonio.caggi...@collabora.com>
Signed-off-by: Huang Rui <ray.hu...@amd.com>
---

V4 -> V5:
         - Inverted patch 5 and 6 because we should configure
           HAVE_VIRGL_CONTEXT_INIT firstly. (Philippe)

      hw/display/virtio-gpu-virgl.c | 13 +++++++++++--
      hw/display/virtio-gpu.c       |  2 ++
      2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c
index 8bb7a2c21f..312953ec16 100644
--- a/hw/display/virtio-gpu-virgl.c
+++ b/hw/display/virtio-gpu-virgl.c
@@ -106,8 +106,17 @@ static void virgl_cmd_context_create(VirtIOGPU *g,
          trace_virtio_gpu_cmd_ctx_create(cc.hdr.ctx_id,
                                          cc.debug_name);
- virgl_renderer_context_create(cc.hdr.ctx_id, cc.nlen,
-                                  cc.debug_name);
+    if (cc.context_init) {
+#ifdef HAVE_VIRGL_CONTEXT_INIT
+        virgl_renderer_context_create_with_flags(cc.hdr.ctx_id,
+                                                 cc.context_init,
+                                                 cc.nlen,
+                                                 cc.debug_name);
+        return;
+#endif

This should deal with the case when context_init is set while
HAVE_VIRGL_CONTEXT_INIT is not defined.

Actually, I received the comment below before:

https://lore.kernel.org/qemu-devel/32588d0e-a1f2-30c4-5e9f-e6e7c4190...@linaro.org/

At original patch set, I have the case while HAVE_VIRGL_CONTEXT_INIT is set
but HAVE_VIRGL_CONTEXT_INIT is not defined. But I think we may encounter
the case that virgl_renderer_context_create_with_flags is not defined in
virglrenderer early version. Should I bring the error message back?

Thanks,
Ray

I suggest checking VIRTIO_GPU_FLAG_CONTEXT_INIT_ENABLED instead of
reporting an error here. Perhaps it may be easier to add #ifdef around:
    > +    DEFINE_PROP_BIT("context_init", VirtIOGPU, parent_obj.conf.flags,
    > +                    VIRTIO_GPU_FLAG_CONTEXT_INIT_ENABLED, false),

How about below changes: >
---
diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c
index 8bb7a2c21f..54a3cfe136 100644
--- a/hw/display/virtio-gpu-virgl.c
+++ b/hw/display/virtio-gpu-virgl.c
@@ -106,8 +106,15 @@ static void virgl_cmd_context_create(VirtIOGPU *g,
        trace_virtio_gpu_cmd_ctx_create(cc.hdr.ctx_id,
                                        cc.debug_name);

-    virgl_renderer_context_create(cc.hdr.ctx_id, cc.nlen,
-                                  cc.debug_name);
+    if (cc.context_init && virtio_gpu_context_init_enabled(g->conf)) {
+        virgl_renderer_context_create_with_flags(cc.hdr.ctx_id,
+                                                 cc.context_init,
+                                                 cc.nlen,
+                                                 cc.debug_name);
+        return;
+    }
+
+    virgl_renderer_context_create(cc.hdr.ctx_id, cc.nlen, cc.debug_name);
    }

    static void virgl_cmd_context_destroy(VirtIOGPU *g,
diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
index be16efbd38..6ff2c8e92d 100644
--- a/hw/display/virtio-gpu.c
+++ b/hw/display/virtio-gpu.c
@@ -1508,6 +1508,10 @@ static Property virtio_gpu_properties[] = {
        DEFINE_PROP_BIT("blob", VirtIOGPU, parent_obj.conf.flags,
                        VIRTIO_GPU_FLAG_BLOB_ENABLED, false),
        DEFINE_PROP_SIZE("hostmem", VirtIOGPU, parent_obj.conf.hostmem, 0),
+#ifdef HAVE_VIRGL_CONTEXT_INIT
+    DEFINE_PROP_BIT("context_init", VirtIOGPU, parent_obj.conf.flags,
+                    VIRTIO_GPU_FLAG_CONTEXT_INIT_ENABLED, true),
+#endif
        DEFINE_PROP_END_OF_LIST(),
    };


It looks better, but not having #ifdef around
virgl_renderer_context_create_with_flags() will result in a link error
with old virglrenderer.

Hmm, right, it seems that we have to have a "#ifdef" around here. Or do you
have any better idea?

Having #ifdef is the right direction.

OK, so we can use cc.context_init and make sure context_init function
enabled. Please check below:

---
diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c
index 8bb7a2c21f..8363674ebc 100644
--- a/hw/display/virtio-gpu-virgl.c
+++ b/hw/display/virtio-gpu-virgl.c
@@ -106,8 +106,17 @@ static void virgl_cmd_context_create(VirtIOGPU *g,
      trace_virtio_gpu_cmd_ctx_create(cc.hdr.ctx_id,
                                      cc.debug_name);

-    virgl_renderer_context_create(cc.hdr.ctx_id, cc.nlen,
-                                  cc.debug_name);
+    if (cc.context_init && 
virtio_gpu_context_init_enabled(g->parent_obj.conf)) {
+#ifdef HAVE_VIRGL_CONTEXT_INIT
+        virgl_renderer_context_create_with_flags(cc.hdr.ctx_id,
+                                                 cc.context_init,
+                                                 cc.nlen,
+                                                 cc.debug_name);
+        return;
+#endif
+    }

You can put the if-statement into #ifdef. Otherwise it looks good to me.

Reply via email to