xm_api.h revision d405ba3151de9585a310b7e2ebcae09302c0dbe4
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
6005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#include "mtypes.h"
6105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#include "state_tracker/st_context.h"
6205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#include "state_tracker/st_public.h"
6305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#include "pipe/p_thread.h"
649ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
659ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
6605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# include <X11/Xlib.h>
6705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# include <X11/Xlibint.h>
6805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# include <X11/Xutil.h>
6905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# ifdef USE_XSHM  /* was SHM */
7005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#  include <sys/ipc.h>
7105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#  include <sys/shm.h>
7205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#  include <X11/extensions/XShm.h>
7305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# endif
749ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
759ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwelltypedef struct xmesa_buffer *XMesaBuffer;
7605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwelltypedef struct xmesa_context *XMesaContext;
7705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwelltypedef struct xmesa_visual *XMesaVisual;
789ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
799ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
809ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
819ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
829ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create a new X/Mesa visual.
839ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Input:  display - X11 display
849ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         visinfo - an XVisualInfo pointer
859ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         rgb_flag - GL_TRUE = RGB mode,
869ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *                    GL_FALSE = color index mode
879ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         alpha_flag - alpha buffer requested?
889ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         db_flag - GL_TRUE = double-buffered,
899ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *                   GL_FALSE = single buffered
909ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         stereo_flag - stereo visual?
919ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         ximage_flag - GL_TRUE = use an XImage for back buffer,
929ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *                       GL_FALSE = use an off-screen pixmap for back buffer
939ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         depth_size - requested bits/depth values, or zero
949ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         stencil_size - requested bits/stencil values, or zero
959ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         accum_red_size - requested bits/red accum values, or zero
969ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         accum_green_size - requested bits/green accum values, or zero
979ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         accum_blue_size - requested bits/blue accum values, or zero
989ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         accum_alpha_size - requested bits/alpha accum values, or zero
999ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         num_samples - number of samples/pixel if multisampling, or zero
1009ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         level - visual level, usually 0
1019ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         visualCaveat - ala the GLX extension, usually GLX_NONE_EXT
1029ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Return;  a new XMesaVisual or 0 if error.
1039ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
104153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwellextern XMesaVisual XMesaCreateVisual( Display *display,
105153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell                                      XVisualInfo * visinfo,
1069ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLboolean rgb_flag,
1079ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLboolean alpha_flag,
1089ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLboolean db_flag,
1099ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLboolean stereo_flag,
1109ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLboolean ximage_flag,
1119ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint depth_size,
1129ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint stencil_size,
1139ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint accum_red_size,
1149ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint accum_green_size,
1159ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint accum_blue_size,
1169ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint accum_alpha_size,
1179ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint num_samples,
1189ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint level,
1199ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      GLint visualCaveat );
1209ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1219ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1229ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Destroy an XMesaVisual, but not the associated XVisualInfo.
1239ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1249ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaDestroyVisual( XMesaVisual v );
1259ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1269ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1279ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1289ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1299ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create a new XMesaContext for rendering into an X11 window.
1309ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *
1319ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Input:  visual - an XMesaVisual
1329ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *         share_list - another XMesaContext with which to share display
1339ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *                      lists or NULL if no sharing is wanted.
1349ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Return:  an XMesaContext or NULL if error.
1359ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1369ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern XMesaContext XMesaCreateContext( XMesaVisual v,
1379ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell					XMesaContext share_list );
1389ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1399ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1409ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1419ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Destroy a rendering context as returned by XMesaCreateContext()
1429ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1439ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaDestroyContext( XMesaContext c );
1449ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1459ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1469ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1479ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1489ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create an XMesaBuffer from an X window.
1499ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
150153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwellextern XMesaBuffer XMesaCreateWindowBuffer( XMesaVisual v, Window w );
1519ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1529ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1539ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1549ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create an XMesaBuffer from an X pixmap.
1559ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1569ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern XMesaBuffer XMesaCreatePixmapBuffer( XMesaVisual v,
157153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell					    Pixmap p,
158153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell					    Colormap cmap );
1599ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1609ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1619ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1629ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Destroy an XMesaBuffer, but not the corresponding window or pixmap.
1639ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1649ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaDestroyBuffer( XMesaBuffer b );
1659ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1669ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1679ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1689ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Return the XMesaBuffer handle which corresponds to an X drawable, if any.
1699ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *
1709ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 2.3.
1719ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
172153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwellextern XMesaBuffer XMesaFindBuffer( Display *dpy,
173153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell				    Drawable d );
1749ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1759ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1769ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1779ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1789ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Bind two buffers (read and draw) to a context and make the
1799ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * context the current one.
1809ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 3.3
1819ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1829ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern GLboolean XMesaMakeCurrent2( XMesaContext c,
1839ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                    XMesaBuffer drawBuffer,
1849ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                    XMesaBuffer readBuffer );
1859ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1869ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1879ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1889ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Unbind the current context from its buffer.
1899ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1909ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern GLboolean XMesaUnbindContext( XMesaContext c );
1919ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1929ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1939ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
1949ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Return a handle to the current context.
1959ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
1969ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern XMesaContext XMesaGetCurrentContext( void );
1979ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1989ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
1999ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2009ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Swap the front and back buffers for the given buffer.  No action is
2019ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * taken if the buffer is not double buffered.
2029ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
2039ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaSwapBuffers( XMesaBuffer b );
2049ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2059ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2069ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2079ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Copy a sub-region of the back buffer to the front buffer.
2089ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *
2099ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 2.6
2109ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
2119ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaCopySubBuffer( XMesaBuffer b,
2129ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell				int x,
2139ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell				int y,
2149ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell				int width,
2159ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell				int height );
2169ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2179ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2189ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2199ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2209ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2219ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2229ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Flush/sync a context
2239ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
2249ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaFlush( XMesaContext c );
2259ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2269ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2279ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2289ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2299ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Scan for XMesaBuffers whose window/pixmap has been destroyed, then free
2309ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * any memory used by that buffer.
2319ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell *
2329ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 2.3.
2339ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
2349ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaGarbageCollect( void );
2359ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2369ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2379ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2389ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2399ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create a pbuffer.
2409ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 4.1
2419ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
242153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwellextern XMesaBuffer XMesaCreatePBuffer(XMesaVisual v, Colormap cmap,
2439ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                                      unsigned int width, unsigned int height);
2449ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2459ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2469ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2479ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/*
2489ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Texture from Pixmap
2499ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 7.1
2509ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */
2519ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void
252153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith WhitwellXMesaBindTexImage(Display *dpy, XMesaBuffer drawable, int buffer,
2539ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                  const int *attrib_list);
2549ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2559ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void
256153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith WhitwellXMesaReleaseTexImage(Display *dpy, XMesaBuffer drawable, int buffer);
2579ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2589ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2599ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern XMesaBuffer
260153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith WhitwellXMesaCreatePixmapTextureBuffer(XMesaVisual v, Pixmap p,
261153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell                               Colormap cmap,
2629ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell                               int format, int target, int mipmap);
2639ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2649ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2659ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
2669ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell
26705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/***********************************************************************
26805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */
26905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
27005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern pipe_mutex _xmesa_lock;
27105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
27205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern struct xmesa_buffer *XMesaBufferList;
27305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
27405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
27505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/**
27605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Visual inforation, derived from GLvisual.
27705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Basically corresponds to an XVisualInfo.
27805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */
27905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstruct xmesa_visual {
28005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLvisual mesa_visual;	/* Device independent visual parameters */
28105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   Display *display;	/* The X11 display */
28205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XVisualInfo * visinfo;	/* X's visual info (pointer to private copy) */
28305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XVisualInfo *vishandle;	/* Only used in fakeglx.c */
28405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLint BitsPerPixel;		/* True bits per pixel for XImages */
28505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
28605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLboolean ximage_flag;	/* Use XImage for back buffer (not pixmap)? */
28705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell};
28805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
28905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
29005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/**
29105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Context info, derived from st_context.
29205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Basically corresponds to a GLXContext.
29305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */
29405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstruct xmesa_context {
29505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   struct st_context *st;
29605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XMesaVisual xm_visual;	/** pixel format info */
29705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XMesaBuffer xm_buffer;	/** current drawbuffer */
298d405ba3151de9585a310b7e2ebcae09302c0dbe4Thomas Hellstrom   XMesaBuffer xm_read_buffer;  /** current readbuffer */
29905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell};
30005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
30105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
30205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/**
30305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Types of X/GLX drawables we might render into.
30405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */
30505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwelltypedef enum {
30605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   WINDOW,          /* An X window */
30705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLXWINDOW,       /* GLX window */
30805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   PIXMAP,          /* GLX pixmap */
30905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   PBUFFER          /* GLX Pbuffer */
31005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell} BufferType;
31105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
31205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
31305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/**
31405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Framebuffer information, derived from.
31505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Basically corresponds to a GLXDrawable.
31605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */
31705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstruct xmesa_buffer {
31805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   struct st_framebuffer *stfb;
31905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
32005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLboolean wasCurrent;	/* was ever the current buffer? */
32105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XMesaVisual xm_visual;	/* the X/Mesa visual */
32205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   Drawable drawable;	/* Usually the X window ID */
32305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   Colormap cmap;		/* the X colormap */
32405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   BufferType type;             /* window, pixmap, pbuffer or glxwindow */
32505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
32605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XImage *tempImage;
32705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   unsigned long selectedEvents;/* for pbuffers only */
32805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
32905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLuint shm;			/* X Shared Memory extension status:	*/
33005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell				/*    0 = not available			*/
33105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell				/*    1 = XImage support available	*/
33205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell				/*    2 = Pixmap support available too	*/
33305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#if defined(USE_XSHM)
33405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   XShmSegmentInfo shminfo;
33505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#endif
33605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
33705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GC gc;			/* scratch GC for span, line, tri drawing */
33805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
33905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   /* GLX_EXT_texture_from_pixmap */
34005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLint TextureTarget; /** GLX_TEXTURE_1D_EXT, for example */
34105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLint TextureFormat; /** GLX_TEXTURE_FORMAT_RGB_EXT, for example */
34205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   GLint TextureMipmap; /** 0 or 1 */
34305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
34405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   struct xmesa_buffer *Next;	/* Linked list pointer: */
34505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell};
34605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
34705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
34805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
34905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/** cast wrapper */
35005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstatic INLINE XMesaContext
35105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_context(GLcontext *ctx)
35205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell{
35305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   return (XMesaContext) ctx->DriverCtx;
35405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell}
35505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
35605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
35705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/** cast wrapper */
35805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstatic INLINE XMesaBuffer
35905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_buffer(GLframebuffer *fb)
36005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell{
36105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   struct st_framebuffer *stfb = (struct st_framebuffer *) fb;
36205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   return (XMesaBuffer) st_framebuffer_private(stfb);
36305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell}
36405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
36505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
36605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern void
36705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_delete_framebuffer(struct gl_framebuffer *fb);
36805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
36905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern XMesaBuffer
37005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_find_buffer(Display *dpy, Colormap cmap, XMesaBuffer notThis);
37105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
37205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern void
37305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_check_and_update_buffer_size(XMesaContext xmctx, XMesaBuffer drawBuffer);
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{
38105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   return b->stfb->Base.Width;
38205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell}
38305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
38405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstatic INLINE GLuint
38505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_buffer_height(XMesaBuffer b)
38605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell{
38705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell   return b->stfb->Base.Height;
38805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell}
38905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
39005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern int
39105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_check_for_xshm(Display *display);
39205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
39305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell
3949ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell#endif
395