[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [QEMU PATCH v5 06/13] virtio-gpu: Support context init feature with virglrenderer
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.caggiano@xxxxxxxxxxxxx> > >>>>>>> Signed-off-by: Huang Rui <ray.huang@xxxxxxx> > >>>>>>> --- > >>>>>>> > >>>>>>> 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-e6e7c4190b65@xxxxxxxxxx/ > >>>>> > >>>>> 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 + } + + 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(), };
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |