/* *INDENT-OFF* */
static const struct extension_info known_glx_extensions[] = {
+#ifdef HAVE_XCB_GLX_CREATE_CONTEXT
+ { GLX(ARB_create_context), VER(0,0), Y, N, N, N },
+ { GLX(ARB_create_context_profile), VER(0,0), Y, N, N, N },
+#else
+ { GLX(ARB_create_context), VER(0,0), N, N, N, N },
+ { GLX(ARB_create_context_profile), VER(0,0), N, N, N, N },
+#endif
{ GLX(ARB_get_proc_address), VER(1,4), Y, N, Y, N },
{ GLX(ARB_multisample), VER(1,4), Y, Y, N, N },
- { GLX(ARB_render_texture), VER(0,0), N, N, N, N },
{ GLX(ATI_pixel_format_float), VER(0,0), N, N, N, N },
-#ifdef GLX_USE_APPLEGL
- { GLX(EXT_import_context), VER(0,0), N, N, N, N },
- { GLX(EXT_visual_info), VER(0,0), N, N, N, N },
-#else
{ GLX(EXT_import_context), VER(0,0), Y, Y, N, N },
{ GLX(EXT_visual_info), VER(0,0), Y, Y, N, N },
-#endif
{ GLX(EXT_visual_rating), VER(0,0), Y, Y, N, N },
-#ifdef GLX_USE_APPLEGL
- { GLX(MESA_agp_offset), VER(0,0), N, N, N, N }, /* Deprecated */
- { GLX(MESA_allocate_memory), VER(0,0), N, N, N, N },
- { GLX(MESA_copy_sub_buffer), VER(0,0), N, N, N, N },
+ { GLX(EXT_framebuffer_sRGB), VER(0,0), Y, Y, N, N },
+#ifdef HAVE_XCB_GLX_CREATE_CONTEXT
+ { GLX(EXT_create_context_es2_profile), VER(0,0), Y, N, N, Y },
#else
- { GLX(MESA_agp_offset), VER(0,0), N, N, N, Y }, /* Deprecated */
- { GLX(MESA_allocate_memory), VER(0,0), Y, N, N, Y },
- { GLX(MESA_copy_sub_buffer), VER(0,0), Y, N, N, N },
+ { GLX(EXT_create_context_es2_profile), VER(0,0), N, N, N, N },
#endif
- { GLX(MESA_pixmap_colormap), VER(0,0), N, N, N, N }, /* Deprecated */
- { GLX(MESA_release_buffers), VER(0,0), N, N, N, N }, /* Deprecated */
-#ifdef GLX_USE_APPLEGL
- { GLX(MESA_swap_control), VER(0,0), N, N, N, N },
- { GLX(MESA_swap_frame_usage), VER(0,0), N, N, N, N },
-#else
+ { GLX(MESA_copy_sub_buffer), VER(0,0), Y, N, N, N },
+ { GLX(MESA_multithread_makecurrent),VER(0,0), Y, N, Y, N },
{ GLX(MESA_swap_control), VER(0,0), Y, N, N, Y },
- { GLX(MESA_swap_frame_usage), VER(0,0), Y, N, N, Y },
-#endif
{ GLX(NV_float_buffer), VER(0,0), N, N, N, N },
- { GLX(NV_render_depth_texture), VER(0,0), N, N, N, N },
- { GLX(NV_render_texture_rectangle), VER(0,0), N, N, N, N },
-#ifdef GLX_USE_APPLEGL
- { GLX(NV_vertex_array_range), VER(0,0), N, N, N, N }, /* Deprecated */
- { GLX(OML_swap_method), VER(0,0), N, N, N, N },
- { GLX(OML_sync_control), VER(0,0), N, N, N, N },
- { GLX(SGI_make_current_read), VER(1,3), N, N, N, N },
- { GLX(SGI_swap_control), VER(0,0), N, N, N, N },
- { GLX(SGI_video_sync), VER(0,0), N, N, N, N },
-#else
- { GLX(NV_vertex_array_range), VER(0,0), N, N, N, Y }, /* Deprecated */
{ GLX(OML_swap_method), VER(0,0), Y, Y, N, N },
{ GLX(OML_sync_control), VER(0,0), Y, N, N, Y },
{ GLX(SGI_make_current_read), VER(1,3), Y, N, N, N },
{ GLX(SGI_swap_control), VER(0,0), Y, N, N, N },
{ GLX(SGI_video_sync), VER(0,0), Y, N, N, Y },
-#endif
- { GLX(SGIS_blended_overlay), VER(0,0), N, N, N, N },
- { GLX(SGIS_color_range), VER(0,0), N, N, N, N },
-#ifdef GLX_USE_APPLEGL
- { GLX(SGIS_multisample), VER(0,0), N, N, N, N },
-#else
{ GLX(SGIS_multisample), VER(0,0), Y, Y, N, N },
-#endif
{ GLX(SGIX_fbconfig), VER(1,3), Y, Y, N, N },
-#ifdef GLX_USE_APPLEGL
- { GLX(SGIX_pbuffer), VER(1,3), N, N, N, N },
-#else
{ GLX(SGIX_pbuffer), VER(1,3), Y, Y, N, N },
-#endif
{ GLX(SGIX_swap_barrier), VER(0,0), N, N, N, N },
{ GLX(SGIX_swap_group), VER(0,0), N, N, N, N },
-#ifdef GLX_USE_APPLEGL
- { GLX(SGIX_visual_select_group), VER(0,0), N, N, N, N },
- { GLX(EXT_texture_from_pixmap), VER(0,0), N, N, N, N },
-#else
{ GLX(SGIX_visual_select_group), VER(0,0), Y, Y, N, N },
{ GLX(EXT_texture_from_pixmap), VER(0,0), Y, N, N, N },
-#endif
- { GLX(INTEL_swap_event), VER(1,4), Y, Y, N, N },
+ { GLX(INTEL_swap_event), VER(0,0), Y, N, N, N },
{ NULL }
};
{ GL(ARB_texture_mirrored_repeat), VER(1,4), Y, N, N, N },
{ GL(ARB_texture_non_power_of_two), VER(1,5), Y, N, N, N },
{ GL(ARB_texture_rectangle), VER(0,0), Y, N, N, N },
+ { GL(ARB_texture_rg), VER(0,0), Y, N, N, N },
{ GL(ARB_transpose_matrix), VER(1,3), Y, N, Y, N },
{ GL(ARB_vertex_buffer_object), VER(1,5), N, N, N, N },
{ GL(ARB_vertex_program), VER(0,0), Y, N, N, N },
{ GL(EXT_framebuffer_blit), VER(0,0), Y, N, N, N },
{ GL(EXT_framebuffer_multisample), VER(0,0), Y, N, N, N },
{ GL(EXT_framebuffer_object), VER(0,0), Y, N, N, N },
+ { GL(EXT_framebuffer_sRGB), VER(0,0), Y, N, N, N },
{ GL(EXT_multi_draw_arrays), VER(1,4), Y, N, Y, N },
{ GL(EXT_packed_depth_stencil), VER(0,0), Y, N, N, N },
{ GL(EXT_packed_pixels), VER(1,2), Y, N, N, N },
static const char *__glXGLXClientExtensions = NULL;
static void __glXExtensionsCtr(void);
-static void __glXExtensionsCtrScreen(__GLXscreenConfigs * psc);
+static void __glXExtensionsCtrScreen(struct glx_screen * psc);
static void __glXProcessServerString(const struct extension_info *ext,
const char *server_string,
unsigned char *server_support);
}
void
-__glXEnableDirectExtension(__GLXscreenConfigs * psc, const char *name)
+__glXEnableDirectExtension(struct glx_screen * psc, const char *name)
{
__glXExtensionsCtr();
__glXExtensionsCtrScreen(psc);
*/
static void
-__glXExtensionsCtrScreen(__GLXscreenConfigs * psc)
+__glXExtensionsCtrScreen(struct glx_screen * psc)
{
if (psc->ext_list_first_time) {
psc->ext_list_first_time = GL_FALSE;
* \c NULL, then \c GL_FALSE is returned.
*/
GLboolean
-__glXExtensionBitIsEnabled(__GLXscreenConfigs * psc, unsigned bit)
+__glXExtensionBitIsEnabled(struct glx_screen * psc, unsigned bit)
{
GLboolean enabled = GL_FALSE;
*
*/
GLboolean
-__glExtensionBitIsEnabled(const __GLXcontext * gc, unsigned bit)
+__glExtensionBitIsEnabled(struct glx_context *gc, unsigned bit)
{
GLboolean enabled = GL_FALSE;
*/
void
-__glXCalculateUsableExtensions(__GLXscreenConfigs * psc,
+__glXCalculateUsableExtensions(struct glx_screen * psc,
GLboolean display_is_direct_capable,
int minor_version)
{
* support for GLX 1.3, enable support for the extensions that can be
* "emulated" as well.
*/
-
+#ifndef GLX_USE_APPLEGL
if (minor_version >= 3) {
SET_BIT(server_support, EXT_visual_info_bit);
SET_BIT(server_support, EXT_visual_rating_bit);
SET_BIT(server_support, EXT_import_context_bit);
}
-
+#endif
/* An extension is supported if the client-side (i.e., libGL) supports
* it and the "server" supports it. In this case that means that either
}
}
+ /* This hack is necessary because GLX_ARB_create_context_profile depends on
+ * server support, but GLX_EXT_create_context_es2_profile is direct-only.
+ * Without this hack, it would be possible to advertise
+ * GLX_EXT_create_context_es2_profile without
+ * GLX_ARB_create_context_profile. That would be a problem.
+ */
+ if (!IS_SET(server_support, ARB_create_context_profile_bit)) {
+ CLR_BIT(usable, EXT_create_context_es2_profile_bit);
+ }
+
psc->effectiveGLXexts = __glXGetStringFromTable(known_glx_extensions,
usable);
}
*/
void
-__glXCalculateUsableGLExtensions(__GLXcontext * gc,
+__glXCalculateUsableGLExtensions(struct glx_context * gc,
const char *server_string,
int major_version, int minor_version)
{