[Mesa-dev] [PATCH] direct-to-native-GL for GLX clients on Cygwin ("Windows-DRI")

Emil Velikov emil.l.velikov at gmail.com
Thu Sep 15 13:34:16 UTC 2016


On 18 July 2016 at 15:43, Jon Turney <jon.turney at dronecode.org.uk> wrote:
> Structurally, this is very similar to the existing Apple-DRI code, except I
> have chosen to implement this using the __GLXDRIdisplay, etc. vtables (as
> suggested originally in [1]), rather than a maze of ifdefs.  This also means
> that LIBGL_ALWAYS_SOFTWARE and LIBGL_ALWAYS_INDIRECT work as expected.
>
> [1] https://lists.freedesktop.org/archives/mesa-dev/2010-May/000756.html
>
> This adds:
>
> * the Windows-DRI extension protocol headers and the windowsdriproto.pc
> file, for use in building the Windows-DRI extension for the X server
>
> * a Windows-DRI extension helper client library
>
> * a Windows-specific DRI implementation for GLX clients
>
> The server is queried for Windows-DRI extension support on the screen before
> using it (to detect the case where WGL is disabled or can't be activated).
>
> The server is queried for fbconfigID to pixelformatindex mapping, which is
> used to augment glx_config.
>
> The server is queried for a native handle for the drawable (which is of a
> different type for windows, pixmaps and pbuffers), which is used to augment
> __GLXDRIdrawable.
>
> Various GLX extensions are enabled depending on if the equivalent WGL
> extension is available.
>
> Signed-off-by: Jon Turney <jon.turney at dronecode.org.uk>
> ---
>  configure.ac                          |  10 +-
>  src/glx/Makefile.am                   |  14 +
>  src/glx/driwindows_glx.c              | 609 ++++++++++++++++++++++++++++++++++
>  src/glx/glxclient.h                   |  11 +-
>  src/glx/glxext.c                      |  19 ++
>  src/glx/windows/Makefile.am           |  31 ++
>  src/glx/windows/wgl.c                 | 108 ++++++
>  src/glx/windows/wgl.h                 |  44 +++
>  src/glx/windows/windows_drawable.c    | 192 +++++++++++
>  src/glx/windows/windowsdriconst.h     |  45 +++
>  src/glx/windows/windowsdriproto.pc.in |   9 +
>  src/glx/windows/windowsdristr.h       | 152 +++++++++
>  src/glx/windows/windowsgl.c           | 403 ++++++++++++++++++++++
>  src/glx/windows/windowsgl.h           |  52 +++
>  src/glx/windows/windowsgl_internal.h  |  67 ++++
>  src/glx/windows/xwindowsdri.c         | 237 +++++++++++++
>  src/glx/windows/xwindowsdri.h         |  59 ++++
>  src/mapi/Makefile.am                  |   3 +
>  src/mapi/glapi/gen/Makefile.am        |   3 +
>  src/mapi/glapi/glapi.h                |   2 +-
>  20 files changed, 2066 insertions(+), 4 deletions(-)
>  create mode 100644 src/glx/driwindows_glx.c
>  create mode 100644 src/glx/windows/Makefile.am
>  create mode 100644 src/glx/windows/wgl.c
>  create mode 100644 src/glx/windows/wgl.h
>  create mode 100644 src/glx/windows/windows_drawable.c
>  create mode 100644 src/glx/windows/windowsdriconst.h
>  create mode 100644 src/glx/windows/windowsdriproto.pc.in
>  create mode 100644 src/glx/windows/windowsdristr.h
>  create mode 100644 src/glx/windows/windowsgl.c
>  create mode 100644 src/glx/windows/windowsgl.h
>  create mode 100644 src/glx/windows/windowsgl_internal.h
>  create mode 100644 src/glx/windows/xwindowsdri.c
>  create mode 100644 src/glx/windows/xwindowsdri.h
>
> diff --git a/configure.ac b/configure.ac
> index 54416b4..9cefc28 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1114,7 +1114,9 @@ fi
>  case "$host_os" in
>  darwin*)
>      dri_platform='apple' ;;
> -gnu*|cygwin*)
> +cygwin*)
> +    dri_platform='windows' ;;
> +gnu*)
>      dri_platform='none' ;;
>  *)
>      dri_platform='drm' ;;
> @@ -1130,6 +1132,7 @@ AM_CONDITIONAL(HAVE_DRISW_KMS, test "x$have_drisw_kms" = xyes )
>  AM_CONDITIONAL(HAVE_DRI2, test "x$enable_dri" = xyes -a "x$dri_platform" = xdrm -a "x$have_libdrm" = xyes )
>  AM_CONDITIONAL(HAVE_DRI3, test "x$enable_dri3" = xyes -a "x$dri_platform" = xdrm -a "x$have_libdrm" = xyes )
>  AM_CONDITIONAL(HAVE_APPLEDRI, test "x$enable_dri" = xyes -a "x$dri_platform" = xapple )
> +AM_CONDITIONAL(HAVE_WINDOWSDRI, test "x$enable_dri" = xyes -a "x$dri_platform" = xwindows )
>
>  AC_ARG_ENABLE([shared-glapi],
>      [AS_HELP_STRING([--enable-shared-glapi],
> @@ -1394,6 +1397,9 @@ xdri)
>          if test x"$dri_platform" = xapple ; then
>              DEFINES="$DEFINES -DGLX_USE_APPLEGL"
>          fi
> +        if test x"$dri_platform" = xwindows ; then
> +            DEFINES="$DEFINES -DGLX_USE_WINDOWSGL"
> +        fi
>      fi
>
>      # add xf86vidmode if available
> @@ -2744,6 +2750,8 @@ AC_CONFIG_FILES([Makefile
>                 src/glx/Makefile
>                 src/glx/apple/Makefile
>                 src/glx/tests/Makefile
> +               src/glx/windows/Makefile
> +               src/glx/windows/windowsdriproto.pc
So this is where windowsdriproto is. Can I suggest moving that into
separate package/repo analogous to xf86driproto/dri2proto/dri3proto.
Having it in ~jturney/ would be fine as a start, until an admin
creates a repo in xorg/proto/

Other than that, the coding style seems a bit inconsistent. But
considering this is based/copied from the dri codebase (dri1 by the
looks of it) that's expected.

With the separate windowsdriproto (or even without it really) I think
it's perfectly fine to land this sooner rather than later in mesa. I'm
sure that you/others will follow with any bugfixes/polish as needed.

Fwiw the patch is
Acked-by: Emil Velikov <emil.l.velikov at gmail.com>

-Emil


More information about the mesa-dev mailing list