1f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu/************************************************************************** 2f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 3f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com> 5f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Copyright 2010 LunarG, Inc. 6f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * All Rights Reserved. 7f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 8f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a 9f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * copy of this software and associated documentation files (the 10f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * "Software"), to deal in the Software without restriction, including 11f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * without limitation the rights to use, copy, modify, merge, publish, 12f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * distribute, sub license, and/or sell copies of the Software, and to 13f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * permit persons to whom the Software is furnished to do so, subject to 14f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * the following conditions: 15f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 16f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * The above copyright notice and this permission notice (including the 17f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * next paragraph) shall be included in all copies or substantial portions 18f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * of the Software. 19f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 20f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 23f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 26f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * DEALINGS IN THE SOFTWARE. 27f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 28f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu **************************************************************************/ 29f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu 30f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu 31adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#ifndef EGLSURFACE_INCLUDED 32adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#define EGLSURFACE_INCLUDED 33adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 34adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 35adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h" 36ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu#include "egldisplay.h" 37adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 38adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 39adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 40adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * "Base" class for device driver surfaces. 41adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 42adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulstruct _egl_surface 43adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 44ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu /* A surface is a display resource */ 45ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu _EGLResource Resource; 4618457cb263e3e062e12314e7b3d5c81a7f2ba048Chia-I Wu 4700e1790f3230de550121591d611b47da299ae15cChia-I Wu /* The context that is currently bound to the surface */ 4800e1790f3230de550121591d611b47da299ae15cChia-I Wu _EGLContext *CurrentContext; 49adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5007ee01365a8bddf6f50821ecd585784498a25ff0Chia-I Wu _EGLConfig *Config; 5107ee01365a8bddf6f50821ecd585784498a25ff0Chia-I Wu 52adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint Type; /* one of EGL_WINDOW_BIT, EGL_PIXMAP_BIT or EGL_PBUFFER_BIT */ 53eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu 54eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu /* attributes set by attribute list */ 55adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint Width, Height; 56eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum TextureFormat; 57eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum TextureTarget; 58eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLBoolean MipmapTexture; 59eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLBoolean LargestPbuffer; 60eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum RenderBuffer; 61eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum VGAlphaFormat; 62eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum VGColorspace; 63eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu 64eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu /* attributes set by eglSurfaceAttrib */ 65eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLint MipmapLevel; 66eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum MultisampleResolve; 67eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum SwapBehavior; 68eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu 69eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLint HorizontalResolution, VerticalResolution; 70eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLint AspectRatio; 71eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu 72adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint SwapInterval; 73adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7400e1790f3230de550121591d611b47da299ae15cChia-I Wu /* True if the surface is bound to an OpenGL ES texture */ 7500e1790f3230de550121591d611b47da299ae15cChia-I Wu EGLBoolean BoundToTexture; 767d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund 777d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund EGLBoolean PostSubBufferSupportedNV; 78adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}; 79adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 80adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 81897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLBoolean 82d69242be55091e53b0ae2cfa6282790ce1862f29Chia-I Wu_eglInitSurface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type, 83cca31340b5a9c0b941946753a31236c7201ca87cChia-I Wu _EGLConfig *config, const EGLint *attrib_list); 84adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 85adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 86adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglQuerySurface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint attribute, EGLint *value); 88adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 89adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 90adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglSurfaceAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint attribute, EGLint value); 92adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 93adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 945dc0f49084f322dd8ff6eb585212eea8b50e3377Kristian HøgsbergPUBLIC extern EGLBoolean 952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglBindTexImage(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint buffer); 96adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 97adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 98adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 9957da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu_eglSwapInterval(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint interval); 100adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 101adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 10207ee01365a8bddf6f50821ecd585784498a25ff0Chia-I Wu/** 103dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu * Increment reference count for the surface. 104dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu */ 105dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wustatic INLINE _EGLSurface * 106dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu_eglGetSurface(_EGLSurface *surf) 107dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu{ 108dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu if (surf) 109dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu _eglGetResource(&surf->Resource); 110dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu return surf; 111dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu} 112dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu 113dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu 114dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu/** 115dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu * Decrement reference count for the surface. 116dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu */ 117dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wustatic INLINE EGLBoolean 118dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu_eglPutSurface(_EGLSurface *surf) 119dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu{ 120dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu return (surf) ? _eglPutResource(&surf->Resource) : EGL_FALSE; 121dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu} 122dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu 123dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu 124dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu/** 1254ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu * Link a surface to its display and return the handle of the link. 126ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu * The handle can be passed to client directly. 127ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu */ 128ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wustatic INLINE EGLSurface 1294ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu_eglLinkSurface(_EGLSurface *surf) 130b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu{ 1314ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu _eglLinkResource(&surf->Resource, _EGL_RESOURCE_SURFACE); 132ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu return (EGLSurface) surf; 133b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu} 134b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 135b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 136ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu/** 137ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu * Unlink a linked surface from its display. 138ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu * Accessing an unlinked surface should generate EGL_BAD_SURFACE error. 139ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu */ 140ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wustatic INLINE void 141ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu_eglUnlinkSurface(_EGLSurface *surf) 142ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu{ 143ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu _eglUnlinkResource(&surf->Resource, _EGL_RESOURCE_SURFACE); 144ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu} 145b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 146b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 147b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu/** 148b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu * Lookup a handle to find the linked surface. 149b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu * Return NULL if the handle has no corresponding linked surface. 150b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu */ 151b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wustatic INLINE _EGLSurface * 152b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu_eglLookupSurface(EGLSurface surface, _EGLDisplay *dpy) 153b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu{ 154b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu _EGLSurface *surf = (_EGLSurface *) surface; 155dbb866ab33862defc2749134805bafebf323fd11Chia-I Wu if (!dpy || !_eglCheckResource((void *) surf, _EGL_RESOURCE_SURFACE, dpy)) 156b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu surf = NULL; 157b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu return surf; 158b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu} 159b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 160b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 161b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu/** 162b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu * Return the handle of a linked surface, or EGL_NO_SURFACE. 163b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu */ 164b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wustatic INLINE EGLSurface 165b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu_eglGetSurfaceHandle(_EGLSurface *surf) 166b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu{ 167ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu _EGLResource *res = (_EGLResource *) surf; 168ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu return (res && _eglIsResourceLinked(res)) ? 169ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu (EGLSurface) surf : EGL_NO_SURFACE; 170b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu} 171b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 172b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 173adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif /* EGLSURFACE_INCLUDED */ 174