On Tue, Dec 23, 2025 at 10:29 PM Akihiko Odaki
<[email protected]> wrote:
>
> On 2025/12/20 1:16, Joelle van Dyne wrote:
> > On Wed, Dec 3, 2025 at 10:41 PM Akihiko Odaki
> > <[email protected]> wrote:
> >>
> >> On 2025/12/03 13:07, Joelle van Dyne wrote:
> >>> In order to support native texture scanout beyond D3D, we make this more
> >>> generic allowing for multiple native texture handle types.
> >>>
> >>> Signed-off-by: Joelle van Dyne <[email protected]>
> >>> ---
> >>>    include/ui/console.h          | 22 +++++++++++++++++++---
> >>>    include/ui/gtk.h              |  4 ++--
> >>>    include/ui/sdl2.h             |  2 +-
> >>>    hw/display/virtio-gpu-virgl.c | 10 +++++++---
> >>>    ui/console.c                  |  8 ++++----
> >>>    ui/dbus-console.c             |  2 +-
> >>>    ui/dbus-listener.c            |  8 ++++----
> >>>    ui/egl-headless.c             |  2 +-
> >>>    ui/gtk-egl.c                  |  2 +-
> >>>    ui/gtk-gl-area.c              |  2 +-
> >>>    ui/sdl2-gl.c                  |  2 +-
> >>>    ui/spice-display.c            |  2 +-
> >>>    12 files changed, 43 insertions(+), 23 deletions(-)
> >>>
> >>> diff --git a/include/ui/console.h b/include/ui/console.h
> >>> index 98feaa58bd..25e45295d4 100644
> >>> --- a/include/ui/console.h
> >>> +++ b/include/ui/console.h
> >>> @@ -131,6 +131,22 @@ struct QemuConsoleClass {
> >>>        ObjectClass parent_class;
> >>>    };
> >>>
> >>> +typedef enum ScanoutTextureNativeType {
> >>> +    SCANOUT_TEXTURE_NATIVE_TYPE_NONE,
> >>> +    SCANOUT_TEXTURE_NATIVE_TYPE_D3D,
> >>> +} ScanoutTextureNativeType;
> >>> +
> >>> +typedef struct ScanoutTextureNative {
> >>> +    ScanoutTextureNativeType type;
> >>> +    union {
> >>> +        void *d3d_tex2d;
> >>> +    } u;> +} ScanoutTextureNative;
> >>
> >> Instead, I suggest:
> >>
> >> typedef struct ScanoutTextureNative {
> >>       ScanoutTextureNativeType type;
> >>       void *handle;
> >> } ScanoutTextureNative;
> >>
> >> ...to align with the definition of struct
> >> virgl_renderer_resource_info_ext and
> >> virgl_renderer_create_handle_for_scanout(), which do not add a field for
> >> each type (except the one for the backward compatibility).
> > I've updated virglrenderer to use a union as well. Since we are
> > passing ScanoutTextureNative around byval and it can grow with
> > additional platform support, I think it would be better to keep it as
> > a union.
>
> I don't think using a union for virglrenderer is a good idea because
> adding another member to the union can change its size and cause an ABI
> breakage. Sticking to void * is the safest choice. We rely on void * to
> represent platform-specific types anyway so there is practically no type
> safetey here, unfortunately.
That's fair, we can use a struct in virglrenderer. However, in QEMU if
we are passing byval and a struct (once increased in size) could lead
to needless copying.

>
> Regards,
> Akihiko Odaki

Reply via email to