19ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
29ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Mesa 3-D graphics library
39ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Version:  7.1
49ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *
59ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
69ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *
79ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a
89ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * copy of this software and associated documentation files (the "Software"),
99ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * to deal in the Software without restriction, including without limitation
109ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * the rights to use, copy, modify, merge, publish, distribute, sublicense,
119ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * and/or sell copies of the Software, and to permit persons to whom the
129ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Software is furnished to do so, subject to the following conditions:
139ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *
149ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * The above copyright notice and this permission notice shall be included
159ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * in all copies or substantial portions of the Software.
169ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *
179ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
189ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
199ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
209ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
219ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
229ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
239ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
249ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
259ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
269ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
279ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* Sample Usage:
289ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
299ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith WhitwellIn addition to the usual X calls to select a visual, create a colormap
309ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwelland create a window, you must do the following to use the X/Mesa interface:
319ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
329ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell1. Call XMesaCreateVisual() to make an XMesaVisual from an XVisualInfo.
339ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
349ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell2. Call XMesaCreateContext() to create an X/Mesa rendering context, given
359ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell   the XMesaVisual.
369ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
379ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell3. Call XMesaCreateWindowBuffer() to create an XMesaBuffer from an X window
389ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell   and XMesaVisual.
399ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
409ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell4. Call XMesaMakeCurrent() to bind the XMesaBuffer to an XMesaContext and
419ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell   to make the context the current one.
429ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
439ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell5. Make gl* calls to render your graphics.
449ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
459ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell6. Use XMesaSwapBuffers() when double buffering to swap front/back buffers.
469ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
479ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell7. Before the X window is destroyed, call XMesaDestroyBuffer().
489ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
499ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell8. Before exiting, call XMesaDestroyVisual and XMesaDestroyContext.
509ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
519ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell*/
529ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
539ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
549ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
559ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
569ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell#ifndef XMESA_H
579ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell#define XMESA_H
589ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
599ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
60997a2547d10890dbc00f2c48191cde58a2ee37c8Chia-I Wu#include "main/core.h" /* for gl_config */
61576d9af505bd19ccaac04a68c8744f36f887bd5cChia-I Wu#include "state_tracker/st_api.h"
622aaca1df9df6980ec88180c8866c8987b31db91aJosé Fonseca#include "os/os_thread.h"
639ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
641675d05f911fbd569efb5248674aa71cb755c75bKeith Whitwell#include "state_tracker/xlib_sw_winsys.h"
659ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
6605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# include <X11/Xlib.h>
6705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# include <X11/Xlibint.h>
6805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# include <X11/Xutil.h>
699ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
706632915e957149c153a3f793c400a532b4995b18Chia-I Wutypedef struct xmesa_display *XMesaDisplay;
719ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwelltypedef struct xmesa_buffer *XMesaBuffer;
7205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwelltypedef struct xmesa_context *XMesaContext;
7305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwelltypedef struct xmesa_visual *XMesaVisual;
749ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
759ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
766632915e957149c153a3f793c400a532b4995b18Chia-I Wustruct xmesa_display {
776632915e957149c153a3f793c400a532b4995b18Chia-I Wu   pipe_mutex mutex;
786632915e957149c153a3f793c400a532b4995b18Chia-I Wu
796632915e957149c153a3f793c400a532b4995b18Chia-I Wu   Display *display;
806632915e957149c153a3f793c400a532b4995b18Chia-I Wu   struct pipe_screen *screen;
816632915e957149c153a3f793c400a532b4995b18Chia-I Wu   struct st_manager *smapi;
8248bc3cca89f7aecc40d1661e695796113df6e583Chia-I Wu
8348bc3cca89f7aecc40d1661e695796113df6e583Chia-I Wu   struct pipe_context *pipe;
846632915e957149c153a3f793c400a532b4995b18Chia-I Wu};
856632915e957149c153a3f793c400a532b4995b18Chia-I Wu
869ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
879ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
889ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create a new X/Mesa visual.
899ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Input:  display - X11 display
909ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         visinfo - an XVisualInfo pointer
919ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         rgb_flag - GL_TRUE = RGB mode,
929ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *                    GL_FALSE = color index mode
939ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         alpha_flag - alpha buffer requested?
949ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         db_flag - GL_TRUE = double-buffered,
959ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *                   GL_FALSE = single buffered
969ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         stereo_flag - stereo visual?
979ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         ximage_flag - GL_TRUE = use an XImage for back buffer,
989ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *                       GL_FALSE = use an off-screen pixmap for back buffer
999ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         depth_size - requested bits/depth values, or zero
1009ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         stencil_size - requested bits/stencil values, or zero
1019ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         accum_red_size - requested bits/red accum values, or zero
1029ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         accum_green_size - requested bits/green accum values, or zero
1039ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         accum_blue_size - requested bits/blue accum values, or zero
1049ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         accum_alpha_size - requested bits/alpha accum values, or zero
1059ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         num_samples - number of samples/pixel if multisampling, or zero
1069ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         level - visual level, usually 0
1079ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         visualCaveat - ala the GLX extension, usually GLX_NONE_EXT
1089ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Return;  a new XMesaVisual or 0 if error.
1099ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
110153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwellextern XMesaVisual XMesaCreateVisual( Display *display,
111153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell                                      XVisualInfo * visinfo,
1129ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLboolean rgb_flag,
1139ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLboolean alpha_flag,
1149ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLboolean db_flag,
1159ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLboolean stereo_flag,
1169ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLboolean ximage_flag,
1179ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint depth_size,
1189ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint stencil_size,
1199ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint accum_red_size,
1209ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint accum_green_size,
1219ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint accum_blue_size,
1229ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint accum_alpha_size,
1239ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint num_samples,
1249ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint level,
1259ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint visualCaveat );
1269ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1279ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1289ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Destroy an XMesaVisual, but not the associated XVisualInfo.
1299ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1309ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaDestroyVisual( XMesaVisual v );
1319ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1329ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1339ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1349ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1359ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create a new XMesaContext for rendering into an X11 window.
1369ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *
1379ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Input:  visual - an XMesaVisual
1389ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         share_list - another XMesaContext with which to share display
1399ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *                      lists or NULL if no sharing is wanted.
1409ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Return:  an XMesaContext or NULL if error.
1419ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1429ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern XMesaContext XMesaCreateContext( XMesaVisual v,
1431929d52fd907b4e42e31ad459dd50a1de53df26cBrian Paul					XMesaContext share_list,
1441929d52fd907b4e42e31ad459dd50a1de53df26cBrian Paul                                        GLuint major, GLuint minor,
1451929d52fd907b4e42e31ad459dd50a1de53df26cBrian Paul                                        GLuint profileMask,
1461929d52fd907b4e42e31ad459dd50a1de53df26cBrian Paul                                        GLuint contextFlags);
1479ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1489ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1499ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1509ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Destroy a rendering context as returned by XMesaCreateContext()
1519ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1529ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaDestroyContext( XMesaContext c );
1539ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1549ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1559ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1569ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1579ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create an XMesaBuffer from an X window.
1589ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
159153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwellextern XMesaBuffer XMesaCreateWindowBuffer( XMesaVisual v, Window w );
1609ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1619ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1629ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1639ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create an XMesaBuffer from an X pixmap.
1649ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1659ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern XMesaBuffer XMesaCreatePixmapBuffer( XMesaVisual v,
166153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell					    Pixmap p,
167153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell					    Colormap cmap );
1689ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1699ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1709ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1719ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Destroy an XMesaBuffer, but not the corresponding window or pixmap.
1729ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1739ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaDestroyBuffer( XMesaBuffer b );
1749ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1759ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1769ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1779ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Return the XMesaBuffer handle which corresponds to an X drawable, if any.
1789ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *
1799ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 2.3.
1809ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
181153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwellextern XMesaBuffer XMesaFindBuffer( Display *dpy,
182153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell				    Drawable d );
1839ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1849ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1859ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1869ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1879ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Bind two buffers (read and draw) to a context and make the
1889ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * context the current one.
1899ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 3.3
1909ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1919ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern GLboolean XMesaMakeCurrent2( XMesaContext c,
1929ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                    XMesaBuffer drawBuffer,
1939ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                    XMesaBuffer readBuffer );
1949ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1959ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1969ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1979ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Unbind the current context from its buffer.
1989ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1999ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern GLboolean XMesaUnbindContext( XMesaContext c );
2009ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2019ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2029ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2039ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Return a handle to the current context.
2049ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
2059ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern XMesaContext XMesaGetCurrentContext( void );
2069ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2079ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2089ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2099ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Swap the front and back buffers for the given buffer.  No action is
2109ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * taken if the buffer is not double buffered.
2119ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
2129ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaSwapBuffers( XMesaBuffer b );
2139ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2149ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2159ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2169ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Copy a sub-region of the back buffer to the front buffer.
2179ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *
2189ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 2.6
2199ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
2209ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaCopySubBuffer( XMesaBuffer b,
2219ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell				int x,
2229ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell				int y,
2239ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell				int width,
2249ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell				int height );
2259ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2269ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2279ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2289ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2299ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2309ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2319ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Flush/sync a context
2329ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
2339ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaFlush( XMesaContext c );
2349ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2359ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2369ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2379ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2389ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Scan for XMesaBuffers whose window/pixmap has been destroyed, then free
2399ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * any memory used by that buffer.
2409ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *
2419ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 2.3.
2429ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
2439ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaGarbageCollect( void );
2449ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2459ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2469ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2479ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2489ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create a pbuffer.
2499ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 4.1
2509ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
251153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwellextern XMesaBuffer XMesaCreatePBuffer(XMesaVisual v, Colormap cmap,
2529ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      unsigned int width, unsigned int height);
2539ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2549ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2559ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2569ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2579ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Texture from Pixmap
2589ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 7.1
2599ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
2609ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void
261153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith WhitwellXMesaBindTexImage(Display *dpy, XMesaBuffer drawable, int buffer,
2629ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                  const int *attrib_list);
2639ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2649ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void
265153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith WhitwellXMesaReleaseTexImage(Display *dpy, XMesaBuffer drawable, int buffer);
2669ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2679ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2689ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern XMesaBuffer
269153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith WhitwellXMesaCreatePixmapTextureBuffer(XMesaVisual v, Pixmap p,
270153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell                               Colormap cmap,
2719ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                               int format, int target, int mipmap);
2729ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2739ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
274576d9af505bd19ccaac04a68c8744f36f887bd5cChia-I Wuextern void
275576d9af505bd19ccaac04a68c8744f36f887bd5cChia-I WuXMesaCopyContext(XMesaContext src, XMesaContext dst, unsigned long mask);
2769ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2779ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
27805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/***********************************************************************
27905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */
28005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
28105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/**
28205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Visual inforation, derived from GLvisual.
28305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Basically corresponds to an XVisualInfo.
28405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */
28505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstruct xmesa_visual {
286d3491e775fb07f891463b2185d74bbad62f3ed24Kristian Høgsberg   struct gl_config mesa_visual;/* Device independent visual parameters */
287705e142dda047f24b563fc2bea0f922173e91d1bKristian Høgsberg   int screen, visualID, visualType;
28805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   Display *display;	/* The X11 display */
28905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XVisualInfo * visinfo;	/* X's visual info (pointer to private copy) */
29005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XVisualInfo *vishandle;	/* Only used in fakeglx.c */
29105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLint BitsPerPixel;		/* True bits per pixel for XImages */
29205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
29305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLboolean ximage_flag;	/* Use XImage for back buffer (not pixmap)? */
294576d9af505bd19ccaac04a68c8744f36f887bd5cChia-I Wu
295576d9af505bd19ccaac04a68c8744f36f887bd5cChia-I Wu   struct st_visual stvis;
29605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell};
29705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
29805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
29905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/**
30005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Context info, derived from st_context.
30105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Basically corresponds to a GLXContext.
30205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */
30305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstruct xmesa_context {
304576d9af505bd19ccaac04a68c8744f36f887bd5cChia-I Wu   struct st_context_iface *st;
30505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XMesaVisual xm_visual;	/** pixel format info */
30605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XMesaBuffer xm_buffer;	/** current drawbuffer */
307d405ba3151de9585a310b7e2ebcae09302c0dbe4Thomas Hellstrom   XMesaBuffer xm_read_buffer;  /** current readbuffer */
30805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell};
30905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
31005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
31105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/**
31205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Types of X/GLX drawables we might render into.
31305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */
31405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwelltypedef enum {
31505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   WINDOW,          /* An X window */
31605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLXWINDOW,       /* GLX window */
31705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   PIXMAP,          /* GLX pixmap */
31805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   PBUFFER          /* GLX Pbuffer */
31905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell} BufferType;
32005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
32105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
32205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/**
32305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Framebuffer information, derived from.
32405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Basically corresponds to a GLXDrawable.
32505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */
32605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstruct xmesa_buffer {
327576d9af505bd19ccaac04a68c8744f36f887bd5cChia-I Wu   struct st_framebuffer_iface *stfb;
3281675d05f911fbd569efb5248674aa71cb755c75bKeith Whitwell   struct xlib_drawable ws;
32905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
33005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLboolean wasCurrent;	/* was ever the current buffer? */
33105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XMesaVisual xm_visual;	/* the X/Mesa visual */
33205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   Colormap cmap;		/* the X colormap */
33305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   BufferType type;             /* window, pixmap, pbuffer or glxwindow */
33405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
3350526100a5cbd928fa28d38abdafd6beb024b0828Brian Paul   GLboolean largestPbuffer;    /**< for pbuffers */
3360526100a5cbd928fa28d38abdafd6beb024b0828Brian Paul   GLboolean preservedContents; /**< for pbuffers */
3370526100a5cbd928fa28d38abdafd6beb024b0828Brian Paul
33805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XImage *tempImage;
33905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   unsigned long selectedEvents;/* for pbuffers only */
34005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
34105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
34205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GC gc;			/* scratch GC for span, line, tri drawing */
34305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
34405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   /* GLX_EXT_texture_from_pixmap */
34505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLint TextureTarget; /** GLX_TEXTURE_1D_EXT, for example */
34605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLint TextureFormat; /** GLX_TEXTURE_FORMAT_RGB_EXT, for example */
34705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLint TextureMipmap; /** 0 or 1 */
34805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
34905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   struct xmesa_buffer *Next;	/* Linked list pointer: */
35005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
351576d9af505bd19ccaac04a68c8744f36f887bd5cChia-I Wu   unsigned width, height;
352576d9af505bd19ccaac04a68c8744f36f887bd5cChia-I Wu};
35305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
35405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
35505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
356997a2547d10890dbc00f2c48191cde58a2ee37c8Chia-I Wuextern const char *
357997a2547d10890dbc00f2c48191cde58a2ee37c8Chia-I Wuxmesa_get_name(void);
358997a2547d10890dbc00f2c48191cde58a2ee37c8Chia-I Wu
35905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern void
3601675d05f911fbd569efb5248674aa71cb755c75bKeith Whitwellxmesa_init(Display *dpy);
361a84575cdc0c8193b2c7858734e2ec6b1ec4511b2Brian Paul
36205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern XMesaBuffer
36305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_find_buffer(Display *dpy, Colormap cmap, XMesaBuffer notThis);
36405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
36505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern void
3660526100a5cbd928fa28d38abdafd6beb024b0828Brian Paulxmesa_get_window_size(Display *dpy, XMesaBuffer b,
3670526100a5cbd928fa28d38abdafd6beb024b0828Brian Paul                      GLuint *width, GLuint *height);
3680526100a5cbd928fa28d38abdafd6beb024b0828Brian Paul
3690526100a5cbd928fa28d38abdafd6beb024b0828Brian Paulextern void
37003224f492dc9cee179ff9ed961be0443a3669dd1Chia-I Wuxmesa_notify_invalid_buffer(XMesaBuffer b);
37103224f492dc9cee179ff9ed961be0443a3669dd1Chia-I Wu
37203224f492dc9cee179ff9ed961be0443a3669dd1Chia-I Wuextern void
373576d9af505bd19ccaac04a68c8744f36f887bd5cChia-I Wuxmesa_check_buffer_size(XMesaBuffer b);
37405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
37505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern void
37605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_destroy_buffers_on_display(Display *dpy);
37705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
37805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstatic INLINE GLuint
37905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_buffer_width(XMesaBuffer b)
38005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell{
381576d9af505bd19ccaac04a68c8744f36f887bd5cChia-I Wu   return b->width;
38205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell}
38305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
38405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstatic INLINE GLuint
38505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_buffer_height(XMesaBuffer b)
38605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell{
387576d9af505bd19ccaac04a68c8744f36f887bd5cChia-I Wu   return b->height;
38805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell}
38905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
39042719df0b866a00ea4a7739e82e1639c9943fcfdKeith Whitwellextern boolean xmesa_strict_invalidate;
39105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
3929ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell#endif
393