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
