1f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu/************************************************************************** 2f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 3877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * Copyright 2008 VMware, Inc. 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 347bd1693877e4de9aaf8f6776649fc48db54ec82bEmil Velikov#include "c99_compat.h" 35adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 36adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h" 37ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu#include "egldisplay.h" 38adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 39adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 408362068c1b28eb2d3e334abc980c4711957d61fdAlexander von Gluck IV#ifdef __cplusplus 418362068c1b28eb2d3e334abc980c4711957d61fdAlexander von Gluck IVextern "C" { 428362068c1b28eb2d3e334abc980c4711957d61fdAlexander von Gluck IV#endif 438362068c1b28eb2d3e334abc980c4711957d61fdAlexander von Gluck IV 44adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 45adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * "Base" class for device driver surfaces. 46adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 47adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulstruct _egl_surface 48adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 49ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu /* A surface is a display resource */ 50ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu _EGLResource Resource; 5118457cb263e3e062e12314e7b3d5c81a7f2ba048Chia-I Wu 5200e1790f3230de550121591d611b47da299ae15cChia-I Wu /* The context that is currently bound to the surface */ 5300e1790f3230de550121591d611b47da299ae15cChia-I Wu _EGLContext *CurrentContext; 54adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5507ee01365a8bddf6f50821ecd585784498a25ff0Chia-I Wu _EGLConfig *Config; 5607ee01365a8bddf6f50821ecd585784498a25ff0Chia-I Wu 57adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint Type; /* one of EGL_WINDOW_BIT, EGL_PIXMAP_BIT or EGL_PBUFFER_BIT */ 58eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu 59eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu /* attributes set by attribute list */ 60adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint Width, Height; 61eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum TextureFormat; 62eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum TextureTarget; 63eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLBoolean MipmapTexture; 64eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLBoolean LargestPbuffer; 65eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum RenderBuffer; 66eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum VGAlphaFormat; 67eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum VGColorspace; 68c2c2e9ab604793c6e01f85497f3f5bf645f962faMarek Olšák EGLenum GLColorspace; 69eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu 70eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu /* attributes set by eglSurfaceAttrib */ 71eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLint MipmapLevel; 72eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum MultisampleResolve; 73eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLenum SwapBehavior; 74eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu 75eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLint HorizontalResolution, VerticalResolution; 76eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu EGLint AspectRatio; 77eb961f81d53405ab04e021703228ddb15190d75fChia-I Wu 78adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint SwapInterval; 79adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8000e1790f3230de550121591d611b47da299ae15cChia-I Wu /* True if the surface is bound to an OpenGL ES texture */ 8100e1790f3230de550121591d611b47da299ae15cChia-I Wu EGLBoolean BoundToTexture; 827d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund 837d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund EGLBoolean PostSubBufferSupportedNV; 84adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}; 85adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 86adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 87dd438ae34bdbaa6651cdd226d5fec15a892923bfEmil Velikovextern EGLBoolean 88d69242be55091e53b0ae2cfa6282790ce1862f29Chia-I Wu_eglInitSurface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type, 89cca31340b5a9c0b941946753a31236c7201ca87cChia-I Wu _EGLConfig *config, const EGLint *attrib_list); 90adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 91adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 92adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglQuerySurface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint attribute, EGLint *value); 94adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 95adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 96adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglSurfaceAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint attribute, EGLint value); 98adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 99adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 100dd438ae34bdbaa6651cdd226d5fec15a892923bfEmil Velikovextern EGLBoolean 1012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglBindTexImage(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint buffer); 102adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 103dd438ae34bdbaa6651cdd226d5fec15a892923bfEmil Velikovextern EGLBoolean 1049b42fd1772b13b10f397d80d11aa8351e6313085Emil Velikov_eglReleaseTexImage(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, EGLint buffer); 1059b42fd1772b13b10f397d80d11aa8351e6313085Emil Velikov 106adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 107adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 10857da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu_eglSwapInterval(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint interval); 109adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 110adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 11107ee01365a8bddf6f50821ecd585784498a25ff0Chia-I Wu/** 112dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu * Increment reference count for the surface. 113dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu */ 1147bd1693877e4de9aaf8f6776649fc48db54ec82bEmil Velikovstatic inline _EGLSurface * 115dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu_eglGetSurface(_EGLSurface *surf) 116dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu{ 117dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu if (surf) 118dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu _eglGetResource(&surf->Resource); 119dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu return surf; 120dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu} 121dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu 122dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu 123dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu/** 124dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu * Decrement reference count for the surface. 125dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu */ 1267bd1693877e4de9aaf8f6776649fc48db54ec82bEmil Velikovstatic inline EGLBoolean 127dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu_eglPutSurface(_EGLSurface *surf) 128dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu{ 129dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu return (surf) ? _eglPutResource(&surf->Resource) : EGL_FALSE; 130dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu} 131dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu 132dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu 133dc4f845c37a8446de19036e24fd397a0aa864c02Chia-I Wu/** 1344ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu * Link a surface to its display and return the handle of the link. 135ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu * The handle can be passed to client directly. 136ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu */ 1377bd1693877e4de9aaf8f6776649fc48db54ec82bEmil Velikovstatic inline EGLSurface 1384ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu_eglLinkSurface(_EGLSurface *surf) 139b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu{ 1404ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu _eglLinkResource(&surf->Resource, _EGL_RESOURCE_SURFACE); 141ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu return (EGLSurface) surf; 142b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu} 143b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 144b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 145ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu/** 146ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu * Unlink a linked surface from its display. 147ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu * Accessing an unlinked surface should generate EGL_BAD_SURFACE error. 148ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu */ 1497bd1693877e4de9aaf8f6776649fc48db54ec82bEmil Velikovstatic inline void 150ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu_eglUnlinkSurface(_EGLSurface *surf) 151ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu{ 152ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu _eglUnlinkResource(&surf->Resource, _EGL_RESOURCE_SURFACE); 153ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu} 154b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 155b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 156b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu/** 157b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu * Lookup a handle to find the linked surface. 158b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu * Return NULL if the handle has no corresponding linked surface. 159b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu */ 1607bd1693877e4de9aaf8f6776649fc48db54ec82bEmil Velikovstatic inline _EGLSurface * 161b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu_eglLookupSurface(EGLSurface surface, _EGLDisplay *dpy) 162b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu{ 163b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu _EGLSurface *surf = (_EGLSurface *) surface; 164dbb866ab33862defc2749134805bafebf323fd11Chia-I Wu if (!dpy || !_eglCheckResource((void *) surf, _EGL_RESOURCE_SURFACE, dpy)) 165b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu surf = NULL; 166b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu return surf; 167b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu} 168b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 169b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 170b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu/** 171b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu * Return the handle of a linked surface, or EGL_NO_SURFACE. 172b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu */ 1737bd1693877e4de9aaf8f6776649fc48db54ec82bEmil Velikovstatic inline EGLSurface 174b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu_eglGetSurfaceHandle(_EGLSurface *surf) 175b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu{ 176ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu _EGLResource *res = (_EGLResource *) surf; 177ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu return (res && _eglIsResourceLinked(res)) ? 178ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu (EGLSurface) surf : EGL_NO_SURFACE; 179b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu} 180b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 181b4d2c97a2d2cce92fa638ff74bef7dedf593fd1fChia-I Wu 1828362068c1b28eb2d3e334abc980c4711957d61fdAlexander von Gluck IV#ifdef __cplusplus 1838362068c1b28eb2d3e334abc980c4711957d61fdAlexander von Gluck IV} 1848362068c1b28eb2d3e334abc980c4711957d61fdAlexander von Gluck IV#endif 1858362068c1b28eb2d3e334abc980c4711957d61fdAlexander von Gluck IV 186adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif /* EGLSURFACE_INCLUDED */ 187