[PATCH 6/8] ephyr: Create 3.3 core profile context if possible (v3)
Matt Turner
mattst88 at gmail.com
Tue Jan 19 15:32:02 PST 2016
On Mon, Jan 18, 2016 at 11:02 PM, Dave Airlie <airlied at gmail.com> wrote:
> From: Keith Packard <keithp at keithp.com>
>
> On desktop GL, Ask for a 3.3 core profile context if that's available,
> otherwise create a generic context.
>
> v2: tell glamor the profile is a core one.
> v2.1: add/use GL version defines
> v3: let glamor work out core itself
>
> Signed-off-by: Keith Packard <keithp at keithp.com>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> hw/kdrive/ephyr/ephyr_glamor_glx.c | 18 +++++++++++++++++-
> 1 file changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/hw/kdrive/ephyr/ephyr_glamor_glx.c b/hw/kdrive/ephyr/ephyr_glamor_glx.c
> index 30c5245..b9fe8d1 100644
> --- a/hw/kdrive/ephyr/ephyr_glamor_glx.c
> +++ b/hw/kdrive/ephyr/ephyr_glamor_glx.c
> @@ -41,6 +41,10 @@
> #include "os.h"
> #include <X11/Xproto.h>
>
> +/* until we need geometry shaders GL3.1 should suffice. */
> +/* Xephyr has it's own copy of this for build reasons */
> +#define GLAMOR_GL_CORE_VER_MAJOR 3
> +#define GLAMOR_GL_CORE_VER_MINOR 1
> /** @{
> *
> * global state for Xephyr with glamor.
> @@ -319,7 +323,19 @@ ephyr_glamor_glx_screen_init(xcb_window_t win)
> "GLX_EXT_create_context_es2_profile\n");
> }
> } else {
> - ctx = glXCreateContext(dpy, visual_info, NULL, True);
> + static const int context_attribs[] = {
> + GLX_CONTEXT_PROFILE_MASK_ARB,
> + GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
> + GLX_CONTEXT_MAJOR_VERSION_ARB,
> + GLAMOR_GL_CORE_VER_MAJOR,
> + GLX_CONTEXT_MINOR_VERSION_ARB,
> + GLAMOR_GL_CORE_VER_MINOR,
> + 0,
> + };
> + ctx = glXCreateContextAttribsARB(dpy, fb_config, NULL, True,
> + context_attribs);
> + if (!ctx)
> + ctx = glXCreateContext(dpy, visual_info, NULL, True);
> }
> if (ctx == NULL)
> FatalError("glXCreateContext failed\n");
> --
GL 3.2 adds profiles -- they're not available in GL 3.1. The
GLX_ARB_create_context_profile spec says:
If the requested OpenGL version is less than 3.2,
GLX_CONTEXT_PROFILE_MASK_ARB is ignored and the functionality
of the context is determined solely by the requested version.
If you simply ask for 3.1, you may get GL_ARB_compatibility... The spec says:
If version 3.1 is requested, the context returned may implement
any of the following versions:
* Version 3.1. The GL_ARB_compatibility extension may or may not
be implemented, as determined by the implementation.
* The core profile of version 3.2 or greater.
It's probably a safe bet that no driver we care about glamor running
on will implement GL_ARB_compatibility, so maybe asking for 3.1 is the
best thing to do. The lack of profiles in 3.1 is a real pain in the
ass.
More information about the xorg-devel
mailing list