Compare commits
39 Commits
mesa-25.0.
...
mesa-7.11-
Author | SHA1 | Date | |
---|---|---|---|
|
b033f050fd | ||
|
c66982f7dc | ||
|
530c68d616 | ||
|
576f489dad | ||
|
270de51f1d | ||
|
57fe695a17 | ||
|
189303fb30 | ||
|
c4da12e74f | ||
|
8428b48673 | ||
|
b0a4f34ea8 | ||
|
efd0ffd1b0 | ||
|
dc062db95d | ||
|
b292ef8f88 | ||
|
d3bfa9bb4a | ||
|
98af042079 | ||
|
127bd9d5b6 | ||
|
b8972db223 | ||
|
f28cf18609 | ||
|
42cd6192a2 | ||
|
1ae00c5960 | ||
|
65d0d69c91 | ||
|
433afb7352 | ||
|
f70c2f8521 | ||
|
e4cef07b87 | ||
|
2196feb47f | ||
|
b90c710c6c | ||
|
bd1ceb5c5b | ||
|
567778e49a | ||
|
0fafcc6919 | ||
|
29574af377 | ||
|
0eb780262c | ||
|
e43a096f0c | ||
|
52aa06a2cd | ||
|
5d1561b4ab | ||
|
a8d7f36d65 | ||
|
82ebfa6387 | ||
|
ee416c6ffe | ||
|
ebc884d3dd | ||
|
9383cfb4ba |
4
Makefile
4
Makefile
@@ -183,7 +183,7 @@ ultrix-gcc:
|
||||
|
||||
# Rules for making release tarballs
|
||||
|
||||
VERSION=7.11-devel
|
||||
VERSION=7.11-rc1
|
||||
DIRECTORY = Mesa-$(VERSION)
|
||||
LIB_NAME = MesaLib-$(VERSION)
|
||||
GLUT_NAME = MesaGLUT-$(VERSION)
|
||||
@@ -463,7 +463,7 @@ parsers: configure
|
||||
-@touch $(TOP)/configs/current
|
||||
$(MAKE) -C src/glsl glsl_parser.cpp glsl_parser.h glsl_lexer.cpp
|
||||
$(MAKE) -C src/glsl/glcpp glcpp-lex.c glcpp-parse.c glcpp-parse.h
|
||||
$(MAKE) -C src/mesa/program lex.yy.c program_parse.tab.c program_parse.tab.h
|
||||
$(MAKE) -C src/mesa program/lex.yy.c program/program_parse.tab.c program/program_parse.tab.h
|
||||
|
||||
# Everything for new a Mesa release:
|
||||
ARCHIVES = $(LIB_NAME).tar.gz \
|
||||
|
@@ -1,8 +1,10 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
@@ -10,19 +12,19 @@
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
||||
* IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
|
||||
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
/**
|
||||
* Public EGL API entrypoints
|
||||
*
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLAPI_INCLUDED
|
||||
#define EGLAPI_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,31 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
@@ -1,3 +1,31 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLARRAY_INCLUDED
|
||||
#define EGLARRAY_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,32 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLCOMPILER_INCLUDED
|
||||
#define EGLCOMPILER_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
/**
|
||||
* EGL Configuration (pixel format) functions.
|
||||
*/
|
||||
@@ -456,8 +486,6 @@ _eglIsConfigAttribValid(_EGLConfig *conf, EGLint attr)
|
||||
return EGL_FALSE;
|
||||
|
||||
switch (attr) {
|
||||
case EGL_MATCH_NATIVE_PIXMAP:
|
||||
return EGL_FALSE;
|
||||
case EGL_Y_INVERTED_NOK:
|
||||
return conf->Display->Extensions.NOK_texture_from_pixmap;
|
||||
default:
|
||||
@@ -739,6 +767,16 @@ _eglGetConfigAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf,
|
||||
{
|
||||
if (!_eglIsConfigAttribValid(conf, attribute))
|
||||
return _eglError(EGL_BAD_ATTRIBUTE, "eglGetConfigAttrib");
|
||||
|
||||
/* nonqueryable attributes */
|
||||
switch (attribute) {
|
||||
case EGL_MATCH_NATIVE_PIXMAP:
|
||||
return _eglError(EGL_BAD_ATTRIBUTE, "eglGetConfigAttrib");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!value)
|
||||
return _eglError(EGL_BAD_PARAMETER, "eglGetConfigAttrib");
|
||||
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLCONFIG_INCLUDED
|
||||
#define EGLCONFIG_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLCONTEXT_INCLUDED
|
||||
#define EGLCONTEXT_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,31 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "egllog.h"
|
||||
|
@@ -1,3 +1,31 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLCURRENT_INCLUDED
|
||||
#define EGLCURRENT_INCLUDED
|
||||
|
||||
|
@@ -1,8 +1,8 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
@@ -10,23 +10,22 @@
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
||||
* IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
|
||||
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Internal EGL defines
|
||||
*/
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
/**
|
||||
* Functions related to EGLDisplay.
|
||||
*/
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLDISPLAY_INCLUDED
|
||||
#define EGLDISPLAY_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
/**
|
||||
* Functions for choosing and opening/loading device drivers.
|
||||
*/
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLDRIVER_INCLUDED
|
||||
#define EGLDRIVER_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,31 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#include <string.h>
|
||||
#include "egltypedefs.h"
|
||||
#include "egldriver.h"
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
#include "eglglobals.h"
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLGLOBALS_INCLUDED
|
||||
#define EGLGLOBALS_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,32 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
|
@@ -1,3 +1,32 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLIMAGE_INCLUDED
|
||||
#define EGLIMAGE_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
/**
|
||||
* Logging facility for debug/info messages.
|
||||
* _EGL_FATAL messages are printed to stderr
|
||||
|
@@ -1,3 +1,32 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLLOG_INCLUDED
|
||||
#define EGLLOG_INCLUDED
|
||||
|
||||
|
@@ -1,8 +1,10 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
@@ -10,19 +12,19 @@
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
||||
* IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
|
||||
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
|
@@ -1,8 +1,10 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
@@ -10,19 +12,19 @@
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
||||
* IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
|
||||
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLMODE_INCLUDED
|
||||
#define EGLMODE_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,31 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2009 Chia-I Wu <olvaffe@gmail.com>
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLMUTEX_INCLUDED
|
||||
#define EGLMUTEX_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
/*
|
||||
* Ideas for screen management extension to EGL.
|
||||
*
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLSCREEN_INCLUDED
|
||||
#define EGLSCREEN_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
/**
|
||||
* String utils.
|
||||
*/
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010-2011 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLSTRING_INCLUDED
|
||||
#define EGLSTRING_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
/**
|
||||
* Surface-related functions.
|
||||
*/
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLSURFACE_INCLUDED
|
||||
#define EGLSURFACE_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,31 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "eglsync.h"
|
||||
|
@@ -1,3 +1,31 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLSYNC_INCLUDED
|
||||
#define EGLSYNC_INCLUDED
|
||||
|
||||
|
@@ -1,3 +1,33 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
|
||||
* Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
|
||||
* Copyright 2010 LunarG, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#ifndef EGLTYPEDEFS_INCLUDED
|
||||
#define EGLTYPEDEFS_INCLUDED
|
||||
|
||||
|
@@ -207,17 +207,13 @@ lp_disassemble(const void* func)
|
||||
}
|
||||
|
||||
raw_debug_ostream Out;
|
||||
TargetMachine *TM = T->createTargetMachine(Triple, "");
|
||||
|
||||
#if HAVE_LLVM >= 0x0300
|
||||
unsigned int AsmPrinterVariant = AsmInfo->getAssemblerDialect();
|
||||
#else
|
||||
int AsmPrinterVariant = AsmInfo->getAssemblerDialect();
|
||||
#endif
|
||||
#if HAVE_LLVM >= 0x0300
|
||||
OwningPtr<MCInstPrinter> Printer(
|
||||
T->createMCInstPrinter(*TM, AsmPrinterVariant, *AsmInfo));
|
||||
#elif HAVE_LLVM >= 0x0208
|
||||
#if HAVE_LLVM >= 0x0208
|
||||
OwningPtr<MCInstPrinter> Printer(
|
||||
T->createMCInstPrinter(AsmPrinterVariant, *AsmInfo));
|
||||
#else
|
||||
@@ -229,6 +225,12 @@ lp_disassemble(const void* func)
|
||||
return;
|
||||
}
|
||||
|
||||
#if HAVE_LLVM >= 0x0300
|
||||
TargetMachine *TM = T->createTargetMachine(Triple, sys::getHostCPUName(), "");
|
||||
#else
|
||||
TargetMachine *TM = T->createTargetMachine(Triple, "");
|
||||
#endif
|
||||
|
||||
const TargetInstrInfo *TII = TM->getInstrInfo();
|
||||
|
||||
/*
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#define I915_BATCH_H
|
||||
|
||||
#include "i915_batchbuffer.h"
|
||||
#include "i915_context.h"
|
||||
|
||||
|
||||
#define BEGIN_BATCH(dwords) \
|
||||
@@ -49,11 +50,26 @@
|
||||
#define FLUSH_BATCH(fence) \
|
||||
i915_flush(i915, fence)
|
||||
|
||||
|
||||
/************************************************************************
|
||||
* i915_flush.c
|
||||
*/
|
||||
void i915_flush(struct i915_context *i915, struct pipe_fence_handle **fence);
|
||||
|
||||
/*
|
||||
* Flush if the current color buf is idle and we have more than 256 vertices
|
||||
* queued, or if the current color buf is busy and we have more than 4096
|
||||
* vertices queued.
|
||||
*/
|
||||
static INLINE void i915_flush_heuristically(struct i915_context* i915,
|
||||
int num_vertex)
|
||||
{
|
||||
struct i915_winsys *iws = i915->iws;
|
||||
i915->vertices_since_last_flush += num_vertex;
|
||||
if ( i915->vertices_since_last_flush > 4096
|
||||
|| ( i915->vertices_since_last_flush > 256 &&
|
||||
!iws->buffer_is_busy(iws, i915->current.cbuf_bo)) )
|
||||
FLUSH_BATCH(NULL);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
@@ -120,6 +120,11 @@ i915_clear_emit(struct pipe_context *pipe, unsigned buffers, const float *rgba,
|
||||
OUT_BATCH_F(desty + height);
|
||||
OUT_BATCH_F(destx);
|
||||
OUT_BATCH_F(desty);
|
||||
|
||||
/* Flush after clear, its expected to be a costly operation.
|
||||
* This is not required, just a heuristic
|
||||
*/
|
||||
FLUSH_BATCH(NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -264,6 +264,8 @@ struct i915_context {
|
||||
struct util_slab_mempool transfer_pool;
|
||||
struct util_slab_mempool texture_transfer_pool;
|
||||
|
||||
int vertices_since_last_flush;
|
||||
|
||||
/** blitter/hw-clear */
|
||||
struct blitter_context* blitter;
|
||||
|
||||
|
@@ -77,4 +77,5 @@ void i915_flush(struct i915_context *i915, struct pipe_fence_handle **fence)
|
||||
i915->static_dirty = ~0;
|
||||
/* kernel emits flushes in between batchbuffers */
|
||||
i915->flush_dirty = 0;
|
||||
i915->vertices_since_last_flush = 0;
|
||||
}
|
||||
|
@@ -166,6 +166,8 @@ emit_prim( struct draw_stage *stage,
|
||||
|
||||
for (i = 0; i < nr; i++)
|
||||
emit_hw_vertex(i915, prim->v[i]);
|
||||
|
||||
i915_flush_heuristically(i915, nr);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -487,6 +487,7 @@ draw_arrays_fallback(struct vbuf_render *render,
|
||||
|
||||
draw_arrays_generate_indices(render, start, nr, i915_render->fallback);
|
||||
|
||||
i915_flush_heuristically(i915, nr_indices);
|
||||
out:
|
||||
return;
|
||||
}
|
||||
@@ -534,6 +535,7 @@ i915_vbuf_render_draw_arrays(struct vbuf_render *render,
|
||||
nr);
|
||||
OUT_BATCH(start); /* Beginning vertex index */
|
||||
|
||||
i915_flush_heuristically(i915, nr);
|
||||
out:
|
||||
return;
|
||||
}
|
||||
@@ -657,6 +659,7 @@ i915_vbuf_render_draw_elements(struct vbuf_render *render,
|
||||
save_nr_indices,
|
||||
i915_render->fallback);
|
||||
|
||||
i915_flush_heuristically(i915, nr_indices);
|
||||
out:
|
||||
return;
|
||||
}
|
||||
|
@@ -243,7 +243,7 @@ i915_create_sampler_state(struct pipe_context *pipe,
|
||||
|
||||
/* Shadow:
|
||||
*/
|
||||
if (sampler->compare_mode == PIPE_TEX_COMPARE_R_TO_TEXTURE)
|
||||
if (sampler->compare_mode == PIPE_TEX_COMPARE_R_TO_TEXTURE)
|
||||
{
|
||||
cso->state[0] |= (SS2_SHADOW_ENABLE |
|
||||
i915_translate_compare_func(sampler->compare_func));
|
||||
|
@@ -349,25 +349,25 @@ static const struct
|
||||
uint hw_swizzle;
|
||||
} fixup_formats[] = {
|
||||
{ PIPE_FORMAT_R8G8B8A8_UNORM, 0x21030000 /* BGRA */},
|
||||
{ PIPE_FORMAT_L8_UNORM, 0x00000000 /* RRRR */},
|
||||
{ PIPE_FORMAT_I8_UNORM, 0x00000000 /* RRRR */},
|
||||
{ PIPE_FORMAT_L8_UNORM, 0x00030000 /* RRRA */},
|
||||
{ PIPE_FORMAT_I8_UNORM, 0x00030000 /* RRRA */},
|
||||
{ PIPE_FORMAT_A8_UNORM, 0x33330000 /* AAAA */},
|
||||
{ PIPE_FORMAT_NONE, 0x00000000},
|
||||
};
|
||||
|
||||
static boolean need_fixup(struct pipe_surface* p)
|
||||
static uint need_target_fixup(struct pipe_surface* p)
|
||||
{
|
||||
enum pipe_format f;
|
||||
/* if we don't have a surface bound yet, we don't need to fixup the shader */
|
||||
if (!p)
|
||||
return FALSE;
|
||||
return 0;
|
||||
|
||||
f = p->format;
|
||||
for(int i=0; fixup_formats[i].format != PIPE_FORMAT_NONE; i++)
|
||||
if (fixup_formats[i].format == f)
|
||||
return TRUE;
|
||||
return 1;
|
||||
|
||||
return FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uint fixup_swizzle(enum pipe_format f)
|
||||
@@ -383,29 +383,35 @@ static void
|
||||
validate_program(struct i915_context *i915, unsigned *batch_space)
|
||||
{
|
||||
struct pipe_surface *cbuf_surface = i915->framebuffer.cbufs[0];
|
||||
uint additional_size = need_target_fixup(cbuf_surface);
|
||||
|
||||
/* we need more batch space if we want to emulate rgba framebuffers */
|
||||
*batch_space = i915->fs->program_len + (need_fixup(cbuf_surface) ? 3 : 0);
|
||||
*batch_space = i915->fs->program_len + 3 * additional_size;
|
||||
}
|
||||
|
||||
static void
|
||||
emit_program(struct i915_context *i915)
|
||||
{
|
||||
struct pipe_surface *cbuf_surface = i915->framebuffer.cbufs[0];
|
||||
boolean need_format_fixup = need_fixup(cbuf_surface);
|
||||
uint target_fixup = need_target_fixup(cbuf_surface);
|
||||
uint i;
|
||||
|
||||
/* we should always have, at least, a pass-through program */
|
||||
assert(i915->fs->program_len > 0);
|
||||
for (i = 0; i < i915->fs->program_len; i++) {
|
||||
if ((i == 0) && need_format_fixup)
|
||||
OUT_BATCH(i915->fs->program[i] + 3);
|
||||
else
|
||||
OUT_BATCH(i915->fs->program[i]);
|
||||
|
||||
{
|
||||
/* first word has the size, we have to adjust that */
|
||||
uint size = (i915->fs->program[0]);
|
||||
size += target_fixup * 3;
|
||||
OUT_BATCH(size);
|
||||
}
|
||||
|
||||
/* output the declarations of the program */
|
||||
for (i=1 ; i < i915->fs->program_len; i++)
|
||||
OUT_BATCH(i915->fs->program[i]);
|
||||
|
||||
/* we emit an additional mov with swizzle to fake RGBA framebuffers */
|
||||
if (need_format_fixup) {
|
||||
if (target_fixup) {
|
||||
/* mov out_color, out_color.zyxw */
|
||||
OUT_BATCH(A0_MOV |
|
||||
(REG_TYPE_OC << A0_DEST_TYPE_SHIFT) |
|
||||
|
@@ -207,6 +207,12 @@ struct i915_winsys {
|
||||
|
||||
void (*buffer_destroy)(struct i915_winsys *iws,
|
||||
struct i915_winsys_buffer *buffer);
|
||||
|
||||
/**
|
||||
* Check if a buffer is busy.
|
||||
*/
|
||||
boolean (*buffer_is_busy)(struct i915_winsys *iws,
|
||||
struct i915_winsys_buffer *buffer);
|
||||
/*@}*/
|
||||
|
||||
|
||||
|
@@ -447,16 +447,8 @@ static uint32_t r300_translate_colorformat(enum pipe_format format)
|
||||
/*case PIPE_FORMAT_B8G8R8A8_SNORM:*/
|
||||
case PIPE_FORMAT_B8G8R8X8_UNORM:
|
||||
/*case PIPE_FORMAT_B8G8R8X8_SNORM:*/
|
||||
case PIPE_FORMAT_A8R8G8B8_UNORM:
|
||||
/*case PIPE_FORMAT_A8R8G8B8_SNORM:*/
|
||||
case PIPE_FORMAT_X8R8G8B8_UNORM:
|
||||
/*case PIPE_FORMAT_X8R8G8B8_SNORM:*/
|
||||
case PIPE_FORMAT_A8B8G8R8_UNORM:
|
||||
/*case PIPE_FORMAT_A8B8G8R8_SNORM:*/
|
||||
case PIPE_FORMAT_R8G8B8A8_UNORM:
|
||||
case PIPE_FORMAT_R8G8B8A8_SNORM:
|
||||
case PIPE_FORMAT_X8B8G8R8_UNORM:
|
||||
/*case PIPE_FORMAT_X8B8G8R8_SNORM:*/
|
||||
case PIPE_FORMAT_R8G8B8X8_UNORM:
|
||||
/*case PIPE_FORMAT_R8G8B8X8_SNORM:*/
|
||||
/* These formats work fine with ARGB8888 if US_OUT_FMT is set
|
||||
@@ -662,10 +654,6 @@ static uint32_t r300_translate_out_fmt(enum pipe_format format)
|
||||
R300_C2_SEL_R | R300_C3_SEL_A;
|
||||
|
||||
/* ARGB outputs. */
|
||||
case PIPE_FORMAT_A8R8G8B8_UNORM:
|
||||
/*case PIPE_FORMAT_A8R8G8B8_SNORM:*/
|
||||
case PIPE_FORMAT_X8R8G8B8_UNORM:
|
||||
/*case PIPE_FORMAT_X8R8G8B8_SNORM:*/
|
||||
case PIPE_FORMAT_A16_UNORM:
|
||||
case PIPE_FORMAT_A16_SNORM:
|
||||
case PIPE_FORMAT_A16_FLOAT:
|
||||
@@ -674,15 +662,6 @@ static uint32_t r300_translate_out_fmt(enum pipe_format format)
|
||||
R300_C0_SEL_A | R300_C1_SEL_R |
|
||||
R300_C2_SEL_G | R300_C3_SEL_B;
|
||||
|
||||
/* ABGR outputs. */
|
||||
case PIPE_FORMAT_A8B8G8R8_UNORM:
|
||||
/*case PIPE_FORMAT_A8B8G8R8_SNORM:*/
|
||||
case PIPE_FORMAT_X8B8G8R8_UNORM:
|
||||
/*case PIPE_FORMAT_X8B8G8R8_SNORM:*/
|
||||
return modifier |
|
||||
R300_C0_SEL_A | R300_C1_SEL_B |
|
||||
R300_C2_SEL_G | R300_C3_SEL_R;
|
||||
|
||||
/* RGBA outputs. */
|
||||
case PIPE_FORMAT_R8G8B8X8_UNORM:
|
||||
/*case PIPE_FORMAT_R8G8B8X8_SNORM:*/
|
||||
|
@@ -228,6 +228,7 @@ struct r600_query {
|
||||
#define R600_QUERY_STATE_STARTED (1 << 0)
|
||||
#define R600_QUERY_STATE_ENDED (1 << 1)
|
||||
#define R600_QUERY_STATE_SUSPENDED (1 << 2)
|
||||
#define R600_QUERY_STATE_FLUSHED (1 << 3)
|
||||
|
||||
#define R600_CONTEXT_DRAW_PENDING (1 << 0)
|
||||
#define R600_CONTEXT_DST_CACHES_DIRTY (1 << 1)
|
||||
@@ -245,6 +246,7 @@ struct r600_context {
|
||||
unsigned pm4_cdwords;
|
||||
unsigned pm4_dirty_cdwords;
|
||||
unsigned ctx_pm4_ndwords;
|
||||
unsigned init_dwords;
|
||||
unsigned nreloc;
|
||||
unsigned creloc;
|
||||
struct r600_reloc *reloc;
|
||||
@@ -293,7 +295,7 @@ boolean r600_context_query_result(struct r600_context *ctx,
|
||||
void r600_query_begin(struct r600_context *ctx, struct r600_query *query);
|
||||
void r600_query_end(struct r600_context *ctx, struct r600_query *query);
|
||||
void r600_context_queries_suspend(struct r600_context *ctx);
|
||||
void r600_context_queries_resume(struct r600_context *ctx);
|
||||
void r600_context_queries_resume(struct r600_context *ctx, boolean flushed);
|
||||
void r600_query_predication(struct r600_context *ctx, struct r600_query *query, int operation,
|
||||
int flag_wait);
|
||||
void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence,
|
||||
|
@@ -97,7 +97,7 @@ static void r600_blitter_end(struct pipe_context *ctx)
|
||||
rctx->saved_render_cond_mode);
|
||||
rctx->saved_render_cond = NULL;
|
||||
}
|
||||
r600_context_queries_resume(&rctx->ctx);
|
||||
r600_context_queries_resume(&rctx->ctx, FALSE);
|
||||
rctx->blit = false;
|
||||
}
|
||||
|
||||
|
@@ -126,9 +126,6 @@ static void r600_flush(struct pipe_context *ctx,
|
||||
if (rfence)
|
||||
*rfence = r600_create_fence(rctx);
|
||||
|
||||
if (!rctx->ctx.pm4_cdwords)
|
||||
return;
|
||||
|
||||
#if 0
|
||||
sprintf(dname, "gallium-%08d.bof", dc);
|
||||
if (dc < 20) {
|
||||
|
@@ -61,10 +61,7 @@ static boolean r600_get_query_result(struct pipe_context *ctx,
|
||||
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
|
||||
struct r600_query *rquery = (struct r600_query *)query;
|
||||
|
||||
if (rquery->num_results) {
|
||||
ctx->flush(ctx, NULL);
|
||||
}
|
||||
return r600_context_query_result(&rctx->ctx, (struct r600_query *)query, wait, vresult);
|
||||
return r600_context_query_result(&rctx->ctx, rquery, wait, vresult);
|
||||
}
|
||||
|
||||
static void r600_render_condition(struct pipe_context *ctx,
|
||||
|
@@ -939,6 +939,17 @@ static void r600_bc_src(struct r600_bc_alu_src *bc_src,
|
||||
bc_src->value = shader_src->value[bc_src->chan];
|
||||
}
|
||||
|
||||
static void r600_bc_src_set_abs(struct r600_bc_alu_src *bc_src)
|
||||
{
|
||||
bc_src->abs = 1;
|
||||
bc_src->neg = 0;
|
||||
}
|
||||
|
||||
static void r600_bc_src_toggle_neg(struct r600_bc_alu_src *bc_src)
|
||||
{
|
||||
bc_src->neg = !bc_src->neg;
|
||||
}
|
||||
|
||||
static void tgsi_dst(struct r600_shader_ctx *ctx,
|
||||
const struct tgsi_full_dst_register *tgsi_dst,
|
||||
unsigned swizzle,
|
||||
@@ -995,12 +1006,10 @@ static int tgsi_op2_s(struct r600_shader_ctx *ctx, int swap)
|
||||
/* handle some special cases */
|
||||
switch (ctx->inst_info->tgsi_opcode) {
|
||||
case TGSI_OPCODE_SUB:
|
||||
alu.src[1].neg = 1;
|
||||
r600_bc_src_toggle_neg(&alu.src[1]);
|
||||
break;
|
||||
case TGSI_OPCODE_ABS:
|
||||
alu.src[0].abs = 1;
|
||||
if (alu.src[0].neg)
|
||||
alu.src[0].neg = 0;
|
||||
r600_bc_src_set_abs(&alu.src[0]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -1388,7 +1397,7 @@ static int tgsi_lit(struct r600_shader_ctx *ctx)
|
||||
return r;
|
||||
}
|
||||
} else {
|
||||
/* dst.z = log(src.y) */
|
||||
/* tmp.z = log(src.y) */
|
||||
memset(&alu, 0, sizeof(struct r600_bc_alu));
|
||||
alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_LOG_CLAMPED);
|
||||
r600_bc_src(&alu.src[0], &ctx->src[0], 1);
|
||||
@@ -1404,13 +1413,12 @@ static int tgsi_lit(struct r600_shader_ctx *ctx)
|
||||
chan = alu.dst.chan;
|
||||
sel = alu.dst.sel;
|
||||
|
||||
/* tmp.x = amd MUL_LIT(src.w, dst.z, src.x ) */
|
||||
/* tmp.x = amd MUL_LIT(tmp.z, src.w, src.x ) */
|
||||
memset(&alu, 0, sizeof(struct r600_bc_alu));
|
||||
alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_MUL_LIT);
|
||||
r600_bc_src(&alu.src[0], &ctx->src[0], 3);
|
||||
alu.src[1].sel = sel;
|
||||
alu.src[1].chan = chan;
|
||||
|
||||
alu.src[0].sel = sel;
|
||||
alu.src[0].chan = chan;
|
||||
r600_bc_src(&alu.src[1], &ctx->src[0], 3);
|
||||
r600_bc_src(&alu.src[2], &ctx->src[0], 0);
|
||||
alu.dst.sel = ctx->temp_reg;
|
||||
alu.dst.chan = 0;
|
||||
@@ -1506,7 +1514,7 @@ static int tgsi_rsq(struct r600_shader_ctx *ctx)
|
||||
|
||||
for (i = 0; i < inst->Instruction.NumSrcRegs; i++) {
|
||||
r600_bc_src(&alu.src[i], &ctx->src[i], 0);
|
||||
alu.src[i].abs = 1;
|
||||
r600_bc_src_set_abs(&alu.src[i]);
|
||||
}
|
||||
alu.dst.sel = ctx->temp_reg;
|
||||
alu.dst.write = 1;
|
||||
@@ -2192,7 +2200,7 @@ static int tgsi_lrp(struct r600_shader_ctx *ctx)
|
||||
alu.src[0].sel = V_SQ_ALU_SRC_1;
|
||||
alu.src[0].chan = 0;
|
||||
r600_bc_src(&alu.src[1], &ctx->src[0], i);
|
||||
alu.src[1].neg = 1;
|
||||
r600_bc_src_toggle_neg(&alu.src[1]);
|
||||
alu.dst.sel = ctx->temp_reg;
|
||||
alu.dst.chan = i;
|
||||
if (i == lasti) {
|
||||
@@ -2489,7 +2497,7 @@ static int tgsi_log(struct r600_shader_ctx *ctx)
|
||||
int r;
|
||||
int i;
|
||||
|
||||
/* result.x = floor(log2(src)); */
|
||||
/* result.x = floor(log2(|src|)); */
|
||||
if (inst->Dst[0].Register.WriteMask & 1) {
|
||||
if (ctx->bc->chiprev == CHIPREV_CAYMAN) {
|
||||
for (i = 0; i < 3; i++) {
|
||||
@@ -2497,6 +2505,7 @@ static int tgsi_log(struct r600_shader_ctx *ctx)
|
||||
|
||||
alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_LOG_IEEE);
|
||||
r600_bc_src(&alu.src[0], &ctx->src[0], 0);
|
||||
r600_bc_src_set_abs(&alu.src[0]);
|
||||
|
||||
alu.dst.sel = ctx->temp_reg;
|
||||
alu.dst.chan = i;
|
||||
@@ -2514,6 +2523,7 @@ static int tgsi_log(struct r600_shader_ctx *ctx)
|
||||
|
||||
alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_LOG_IEEE);
|
||||
r600_bc_src(&alu.src[0], &ctx->src[0], 0);
|
||||
r600_bc_src_set_abs(&alu.src[0]);
|
||||
|
||||
alu.dst.sel = ctx->temp_reg;
|
||||
alu.dst.chan = 0;
|
||||
@@ -2538,7 +2548,7 @@ static int tgsi_log(struct r600_shader_ctx *ctx)
|
||||
return r;
|
||||
}
|
||||
|
||||
/* result.y = src.x / (2 ^ floor(log2(src.x))); */
|
||||
/* result.y = |src.x| / (2 ^ floor(log2(|src.x|))); */
|
||||
if ((inst->Dst[0].Register.WriteMask >> 1) & 1) {
|
||||
|
||||
if (ctx->bc->chiprev == CHIPREV_CAYMAN) {
|
||||
@@ -2547,6 +2557,7 @@ static int tgsi_log(struct r600_shader_ctx *ctx)
|
||||
|
||||
alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_LOG_IEEE);
|
||||
r600_bc_src(&alu.src[0], &ctx->src[0], 0);
|
||||
r600_bc_src_set_abs(&alu.src[0]);
|
||||
|
||||
alu.dst.sel = ctx->temp_reg;
|
||||
alu.dst.chan = i;
|
||||
@@ -2564,6 +2575,7 @@ static int tgsi_log(struct r600_shader_ctx *ctx)
|
||||
|
||||
alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_LOG_IEEE);
|
||||
r600_bc_src(&alu.src[0], &ctx->src[0], 0);
|
||||
r600_bc_src_set_abs(&alu.src[0]);
|
||||
|
||||
alu.dst.sel = ctx->temp_reg;
|
||||
alu.dst.chan = 1;
|
||||
@@ -2663,6 +2675,7 @@ static int tgsi_log(struct r600_shader_ctx *ctx)
|
||||
alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MUL);
|
||||
|
||||
r600_bc_src(&alu.src[0], &ctx->src[0], 0);
|
||||
r600_bc_src_set_abs(&alu.src[0]);
|
||||
|
||||
alu.src[1].sel = ctx->temp_reg;
|
||||
alu.src[1].chan = 1;
|
||||
@@ -2677,7 +2690,7 @@ static int tgsi_log(struct r600_shader_ctx *ctx)
|
||||
return r;
|
||||
}
|
||||
|
||||
/* result.z = log2(src);*/
|
||||
/* result.z = log2(|src|);*/
|
||||
if ((inst->Dst[0].Register.WriteMask >> 2) & 1) {
|
||||
if (ctx->bc->chiprev == CHIPREV_CAYMAN) {
|
||||
for (i = 0; i < 3; i++) {
|
||||
@@ -2685,6 +2698,7 @@ static int tgsi_log(struct r600_shader_ctx *ctx)
|
||||
|
||||
alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_LOG_IEEE);
|
||||
r600_bc_src(&alu.src[0], &ctx->src[0], 0);
|
||||
r600_bc_src_set_abs(&alu.src[0]);
|
||||
|
||||
alu.dst.sel = ctx->temp_reg;
|
||||
if (i == 2)
|
||||
@@ -2702,6 +2716,7 @@ static int tgsi_log(struct r600_shader_ctx *ctx)
|
||||
|
||||
alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_LOG_IEEE);
|
||||
r600_bc_src(&alu.src[0], &ctx->src[0], 0);
|
||||
r600_bc_src_set_abs(&alu.src[0]);
|
||||
|
||||
alu.dst.sel = ctx->temp_reg;
|
||||
alu.dst.write = 1;
|
||||
|
@@ -250,21 +250,21 @@ struct GalliumDXGIAdapter
|
||||
DXGI_ADAPTER_DESC1 desc;
|
||||
std::vector<ComPtr<IDXGIOutput> > outputs;
|
||||
int num_outputs;
|
||||
struct native_event_handler handler;
|
||||
|
||||
GalliumDXGIAdapter(GalliumDXGIFactory* factory, const struct native_platform* platform, void* dpy)
|
||||
{
|
||||
this->parent = factory;
|
||||
|
||||
/* FIXME handler should be static */
|
||||
handler.invalid_surface = handle_invalid_surface;
|
||||
handler.new_drm_screen = dxgi_loader_create_drm_screen;
|
||||
handler.new_sw_screen = dxgi_loader_create_sw_screen;
|
||||
platform->set_event_handler(&handler);
|
||||
|
||||
display = platform->create_display(dpy, FALSE, this);
|
||||
display = platform->create_display(dpy, FALSE);
|
||||
if(!display)
|
||||
display = platform->create_display(dpy, TRUE, this);
|
||||
display = platform->create_display(dpy, TRUE);
|
||||
if (display) {
|
||||
display->user_data = this;
|
||||
if (!display->init_screen(display)) {
|
||||
display->destroy(display);
|
||||
display = NULL;
|
||||
}
|
||||
}
|
||||
if(!display)
|
||||
throw E_FAIL;
|
||||
memset(&desc, 0, sizeof(desc));
|
||||
@@ -1413,6 +1413,11 @@ struct dxgi_binding
|
||||
|
||||
static dxgi_binding dxgi_default_binding;
|
||||
static __thread dxgi_binding dxgi_thread_binding;
|
||||
static const struct native_event_handler dxgi_event_handler = {
|
||||
GalliumDXGIAdapter::handle_invalid_surface,
|
||||
dxgi_loader_create_drm_screen,
|
||||
dxgi_loader_create_sw_screen
|
||||
};
|
||||
|
||||
void STDMETHODCALLTYPE GalliumDXGIUseNothing()
|
||||
{
|
||||
@@ -1427,7 +1432,7 @@ void STDMETHODCALLTYPE GalliumDXGIUseNothing()
|
||||
void STDMETHODCALLTYPE GalliumDXGIUseX11Display(Display* dpy, IGalliumDXGIBackend* backend)
|
||||
{
|
||||
GalliumDXGIUseNothing();
|
||||
dxgi_thread_binding.platform = native_get_x11_platform();
|
||||
dxgi_thread_binding.platform = native_get_x11_platform(&dxgi_event_handler);
|
||||
dxgi_thread_binding.display = dpy;
|
||||
|
||||
if(backend)
|
||||
@@ -1443,7 +1448,7 @@ void STDMETHODCALLTYPE GalliumDXGIUseX11Display(Display* dpy, IGalliumDXGIBacken
|
||||
void STDMETHODCALLTYPE GalliumDXGIUseDRMCard(int fd)
|
||||
{
|
||||
GalliumDXGIUseNothing();
|
||||
dxgi_thread_binding.platform = native_get_drm_platform();
|
||||
dxgi_thread_binding.platform = native_get_drm_platform(&dxgi_event_handler);
|
||||
dxgi_thread_binding.display = (void*)fd;
|
||||
dxgi_thread_binding.backend = 0;
|
||||
}
|
||||
@@ -1453,7 +1458,7 @@ void STDMETHODCALLTYPE GalliumDXGIUseDRMCard(int fd)
|
||||
void STDMETHODCALLTYPE GalliumDXGIUseFBDev(int fd)
|
||||
{
|
||||
GalliumDXGIUseNothing();
|
||||
dxgi_thread_binding.platform = native_get_fbdev_platform();
|
||||
dxgi_thread_binding.platform = native_get_fbdev_platform(&dxgi_event_handler);
|
||||
dxgi_thread_binding.display = (void*)fd;
|
||||
dxgi_thread_binding.backend = 0;
|
||||
}
|
||||
@@ -1463,7 +1468,7 @@ void STDMETHODCALLTYPE GalliumDXGIUseFBDev(int fd)
|
||||
void STDMETHODCALLTYPE GalliumDXGIUseHDC(HDC hdc, PFNHWNDRESOLVER resolver, void* resolver_cookie)
|
||||
{
|
||||
GalliumDXGIUseNothing();
|
||||
dxgi_thread_binding.platform = native_get_gdi_platform();
|
||||
dxgi_thread_binding.platform = native_get_gdi_platform(&dxgi_event_handler);
|
||||
dxgi_thread_binding.display = (void*)hdc;
|
||||
dxgi_thread_binding.backend = 0;
|
||||
}
|
||||
@@ -1493,7 +1498,7 @@ void STDMETHODCALLTYPE GalliumDXGIMakeDefault()
|
||||
else if(dxgi_default_binding.platform)
|
||||
factory = new GalliumDXGIFactory(dxgi_default_binding.platform, dxgi_default_binding.display, dxgi_default_binding.backend);
|
||||
else
|
||||
factory = new GalliumDXGIFactory(native_get_x11_platform(), NULL, NULL);
|
||||
factory = new GalliumDXGIFactory(native_get_x11_platform(&dxgi_event_handler), NULL, NULL);
|
||||
HRESULT hres = factory->QueryInterface(riid, out_factory);
|
||||
factory->Release();
|
||||
return hres;
|
||||
|
@@ -87,7 +87,7 @@ egl_g3d_lookup_egl_image(struct native_display *ndpy, void *egl_image)
|
||||
return resource;
|
||||
}
|
||||
|
||||
static struct native_event_handler egl_g3d_native_event_handler = {
|
||||
static const struct native_event_handler egl_g3d_native_event_handler = {
|
||||
egl_g3d_invalid_surface,
|
||||
egl_g3d_new_drm_screen,
|
||||
egl_g3d_new_sw_screen,
|
||||
@@ -110,40 +110,38 @@ egl_g3d_get_platform(_EGLDriver *drv, _EGLPlatformType plat)
|
||||
case _EGL_PLATFORM_WINDOWS:
|
||||
plat_name = "Windows";
|
||||
#ifdef HAVE_GDI_BACKEND
|
||||
nplat = native_get_gdi_platform();
|
||||
nplat = native_get_gdi_platform(&egl_g3d_native_event_handler);
|
||||
#endif
|
||||
break;
|
||||
case _EGL_PLATFORM_X11:
|
||||
plat_name = "X11";
|
||||
#ifdef HAVE_X11_BACKEND
|
||||
nplat = native_get_x11_platform();
|
||||
nplat = native_get_x11_platform(&egl_g3d_native_event_handler);
|
||||
#endif
|
||||
break;
|
||||
case _EGL_PLATFORM_WAYLAND:
|
||||
plat_name = "wayland";
|
||||
#ifdef HAVE_WAYLAND_BACKEND
|
||||
nplat = native_get_wayland_platform();
|
||||
nplat = native_get_wayland_platform(&egl_g3d_native_event_handler);
|
||||
#endif
|
||||
break;
|
||||
case _EGL_PLATFORM_DRM:
|
||||
plat_name = "DRM";
|
||||
#ifdef HAVE_DRM_BACKEND
|
||||
nplat = native_get_drm_platform();
|
||||
nplat = native_get_drm_platform(&egl_g3d_native_event_handler);
|
||||
#endif
|
||||
break;
|
||||
case _EGL_PLATFORM_FBDEV:
|
||||
plat_name = "FBDEV";
|
||||
#ifdef HAVE_FBDEV_BACKEND
|
||||
nplat = native_get_fbdev_platform();
|
||||
nplat = native_get_fbdev_platform(&egl_g3d_native_event_handler);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (nplat)
|
||||
nplat->set_event_handler(&egl_g3d_native_event_handler);
|
||||
else
|
||||
if (!nplat)
|
||||
_eglLog(_EGL_WARNING, "unsupported platform %s", plat_name);
|
||||
|
||||
gdrv->platforms[plat] = nplat;
|
||||
@@ -520,13 +518,20 @@ egl_g3d_initialize(_EGLDriver *drv, _EGLDisplay *dpy)
|
||||
gdpy->loader = gdrv->loader;
|
||||
dpy->DriverData = gdpy;
|
||||
|
||||
_eglLog(_EGL_INFO, "use %s for display %p", nplat->name, dpy->PlatformDisplay);
|
||||
gdpy->native = nplat->create_display(dpy->PlatformDisplay,
|
||||
dpy->Options.UseFallback, (void *) dpy);
|
||||
_eglLog(_EGL_INFO, "use %s for display %p",
|
||||
nplat->name, dpy->PlatformDisplay);
|
||||
gdpy->native =
|
||||
nplat->create_display(dpy->PlatformDisplay, dpy->Options.UseFallback);
|
||||
if (!gdpy->native) {
|
||||
_eglError(EGL_NOT_INITIALIZED, "eglInitialize(no usable display)");
|
||||
goto fail;
|
||||
}
|
||||
gdpy->native->user_data = (void *) dpy;
|
||||
if (!gdpy->native->init_screen(gdpy->native)) {
|
||||
_eglError(EGL_NOT_INITIALIZED,
|
||||
"eglInitialize(failed to initialize screen)");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (gdpy->loader->profile_masks[ST_API_OPENGL] & ST_PROFILE_DEFAULT_MASK)
|
||||
dpy->ClientAPIs |= EGL_OPENGL_BIT;
|
||||
|
@@ -152,6 +152,11 @@ struct native_display {
|
||||
*/
|
||||
void *user_data;
|
||||
|
||||
/**
|
||||
* Initialize and create the pipe screen.
|
||||
*/
|
||||
boolean (*init_screen)(struct native_display *ndpy);
|
||||
|
||||
void (*destroy)(struct native_display *ndpy);
|
||||
|
||||
/**
|
||||
@@ -259,26 +264,29 @@ ndpy_uninit(struct native_display *ndpy)
|
||||
struct native_platform {
|
||||
const char *name;
|
||||
|
||||
void (*set_event_handler)(struct native_event_handler *handler);
|
||||
struct native_display *(*create_display)(void *dpy,
|
||||
boolean use_sw,
|
||||
void *user_data);
|
||||
/**
|
||||
* Create the native display and usually establish a connection to the
|
||||
* display server.
|
||||
*
|
||||
* No event should be generated at this stage.
|
||||
*/
|
||||
struct native_display *(*create_display)(void *dpy, boolean use_sw);
|
||||
};
|
||||
|
||||
const struct native_platform *
|
||||
native_get_gdi_platform(void);
|
||||
native_get_gdi_platform(const struct native_event_handler *event_handler);
|
||||
|
||||
const struct native_platform *
|
||||
native_get_x11_platform(void);
|
||||
native_get_x11_platform(const struct native_event_handler *event_handler);
|
||||
|
||||
const struct native_platform *
|
||||
native_get_wayland_platform(void);
|
||||
native_get_wayland_platform(const struct native_event_handler *event_handler);
|
||||
|
||||
const struct native_platform *
|
||||
native_get_drm_platform(void);
|
||||
native_get_drm_platform(const struct native_event_handler *event_handler);
|
||||
|
||||
const struct native_platform *
|
||||
native_get_fbdev_platform(void);
|
||||
native_get_fbdev_platform(const struct native_event_handler *event_handler);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@@ -249,9 +249,15 @@ drm_create_pixmap_surface(struct native_display *ndpy,
|
||||
return drm_display_create_surface_from_resource(ndpy, bo->resource);
|
||||
}
|
||||
|
||||
static boolean
|
||||
drm_display_init_screen(struct native_display *ndpy)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static struct native_display *
|
||||
drm_create_display(struct gbm_gallium_drm_device *gbmdrm,
|
||||
struct native_event_handler *event_handler, void *user_data)
|
||||
const struct native_event_handler *event_handler)
|
||||
{
|
||||
struct drm_display *drmdpy;
|
||||
|
||||
@@ -267,10 +273,10 @@ drm_create_display(struct gbm_gallium_drm_device *gbmdrm,
|
||||
gbmdrm->lookup_egl_image_data = &drmdpy->base;
|
||||
|
||||
drmdpy->event_handler = event_handler;
|
||||
drmdpy->base.user_data = user_data;
|
||||
|
||||
drmdpy->base.screen = gbmdrm->screen;
|
||||
|
||||
drmdpy->base.init_screen = drm_display_init_screen;
|
||||
drmdpy->base.destroy = drm_display_destroy;
|
||||
drmdpy->base.get_param = drm_display_get_param;
|
||||
drmdpy->base.get_configs = drm_display_get_configs;
|
||||
@@ -287,16 +293,10 @@ drm_create_display(struct gbm_gallium_drm_device *gbmdrm,
|
||||
return &drmdpy->base;
|
||||
}
|
||||
|
||||
static struct native_event_handler *drm_event_handler;
|
||||
|
||||
static void
|
||||
native_set_event_handler(struct native_event_handler *event_handler)
|
||||
{
|
||||
drm_event_handler = event_handler;
|
||||
}
|
||||
static const struct native_event_handler *drm_event_handler;
|
||||
|
||||
static struct native_display *
|
||||
native_create_display(void *dpy, boolean use_sw, void *user_data)
|
||||
native_create_display(void *dpy, boolean use_sw)
|
||||
{
|
||||
struct gbm_gallium_drm_device *gbm;
|
||||
int fd;
|
||||
@@ -315,17 +315,17 @@ native_create_display(void *dpy, boolean use_sw, void *user_data)
|
||||
gbm->base.type != GBM_DRM_DRIVER_TYPE_GALLIUM)
|
||||
return NULL;
|
||||
|
||||
return drm_create_display(gbm, drm_event_handler, user_data);
|
||||
return drm_create_display(gbm, drm_event_handler);
|
||||
}
|
||||
|
||||
static const struct native_platform drm_platform = {
|
||||
"DRM", /* name */
|
||||
native_set_event_handler,
|
||||
native_create_display
|
||||
};
|
||||
|
||||
const struct native_platform *
|
||||
native_get_drm_platform(void)
|
||||
native_get_drm_platform(const struct native_event_handler *event_handler)
|
||||
{
|
||||
drm_event_handler = event_handler;
|
||||
return &drm_platform;
|
||||
}
|
||||
|
@@ -50,7 +50,7 @@ struct drm_surface;
|
||||
struct drm_display {
|
||||
struct native_display base;
|
||||
|
||||
struct native_event_handler *event_handler;
|
||||
const struct native_event_handler *event_handler;
|
||||
|
||||
int fd;
|
||||
char *device_name;
|
||||
|
@@ -26,6 +26,21 @@
|
||||
* Chia-I Wu <olv@lunarg.com>
|
||||
*/
|
||||
|
||||
/**
|
||||
* Considering fbdev as an in-kernel window system,
|
||||
*
|
||||
* - opening a device opens a connection
|
||||
* - there is only one window: the framebuffer
|
||||
* - fb_var_screeninfo decides window position, size, and even color format
|
||||
* - there is no pixmap
|
||||
*
|
||||
* Now EGL is built on top of this window system. So we should have
|
||||
*
|
||||
* - the fd as the handle of the native display
|
||||
* - reject all but one native window: NULL
|
||||
* - no pixmap support
|
||||
*/
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
@@ -45,16 +60,13 @@ struct fbdev_display {
|
||||
struct native_display base;
|
||||
|
||||
int fd;
|
||||
struct native_event_handler *event_handler;
|
||||
const struct native_event_handler *event_handler;
|
||||
|
||||
struct fb_fix_screeninfo finfo;
|
||||
struct fb_var_screeninfo vinfo;
|
||||
|
||||
struct fb_var_screeninfo config_vinfo;
|
||||
struct native_config config;
|
||||
struct native_connector connector;
|
||||
struct native_mode mode;
|
||||
|
||||
struct fbdev_surface *current_surface;
|
||||
boolean assume_fixed_vinfo;
|
||||
};
|
||||
|
||||
struct fbdev_surface {
|
||||
@@ -66,7 +78,7 @@ struct fbdev_surface {
|
||||
|
||||
unsigned int sequence_number;
|
||||
|
||||
boolean is_current;
|
||||
struct fbdev_sw_drawable drawable;
|
||||
};
|
||||
|
||||
static INLINE struct fbdev_display *
|
||||
@@ -103,38 +115,70 @@ fbdev_surface_validate(struct native_surface *nsurf, uint attachment_mask,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static boolean
|
||||
fbdev_surface_flush_frontbuffer(struct native_surface *nsurf)
|
||||
static enum pipe_format
|
||||
vinfo_to_format(const struct fb_var_screeninfo *vinfo)
|
||||
{
|
||||
struct fbdev_surface *fbsurf = fbdev_surface(nsurf);
|
||||
enum pipe_format format = PIPE_FORMAT_NONE;
|
||||
|
||||
if (!fbsurf->is_current)
|
||||
return TRUE;
|
||||
/* should also check channel offsets... */
|
||||
switch (vinfo->bits_per_pixel) {
|
||||
case 32:
|
||||
if (vinfo->red.length == 8 &&
|
||||
vinfo->green.length == 8 &&
|
||||
vinfo->blue.length == 8) {
|
||||
format = (vinfo->transp.length == 8) ?
|
||||
PIPE_FORMAT_B8G8R8A8_UNORM : PIPE_FORMAT_B8G8R8X8_UNORM;
|
||||
}
|
||||
break;
|
||||
case 16:
|
||||
if (vinfo->red.length == 5 &&
|
||||
vinfo->green.length == 6 &&
|
||||
vinfo->blue.length == 5 &&
|
||||
vinfo->transp.length == 0)
|
||||
format = PIPE_FORMAT_B5G6R5_UNORM;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return resource_surface_present(fbsurf->rsurf,
|
||||
NATIVE_ATTACHMENT_FRONT_LEFT, NULL);
|
||||
return format;
|
||||
}
|
||||
|
||||
static boolean
|
||||
fbdev_surface_swap_buffers(struct native_surface *nsurf)
|
||||
fbdev_surface_update_drawable(struct native_surface *nsurf,
|
||||
const struct fb_var_screeninfo *vinfo)
|
||||
{
|
||||
struct fbdev_surface *fbsurf = fbdev_surface(nsurf);
|
||||
struct fbdev_display *fbdpy = fbsurf->fbdpy;
|
||||
boolean ret = TRUE;
|
||||
unsigned x, y, width, height;
|
||||
|
||||
if (fbsurf->is_current) {
|
||||
ret = resource_surface_present(fbsurf->rsurf,
|
||||
NATIVE_ATTACHMENT_BACK_LEFT, NULL);
|
||||
x = vinfo->xoffset;
|
||||
y = vinfo->yoffset;
|
||||
width = MIN2(vinfo->xres, fbsurf->width);
|
||||
height = MIN2(vinfo->yres, fbsurf->height);
|
||||
|
||||
/* sanitize the values */
|
||||
if (x + width > vinfo->xres_virtual) {
|
||||
if (x > vinfo->xres_virtual)
|
||||
width = 0;
|
||||
else
|
||||
width = vinfo->xres_virtual - x;
|
||||
}
|
||||
if (y + height > vinfo->yres_virtual) {
|
||||
if (y > vinfo->yres_virtual)
|
||||
height = 0;
|
||||
else
|
||||
height = vinfo->yres_virtual - y;
|
||||
}
|
||||
|
||||
resource_surface_swap_buffers(fbsurf->rsurf,
|
||||
NATIVE_ATTACHMENT_FRONT_LEFT, NATIVE_ATTACHMENT_BACK_LEFT, TRUE);
|
||||
/* the front/back textures are swapped */
|
||||
fbsurf->sequence_number++;
|
||||
fbdpy->event_handler->invalid_surface(&fbdpy->base,
|
||||
&fbsurf->base, fbsurf->sequence_number);
|
||||
fbsurf->drawable.format = vinfo_to_format(vinfo);
|
||||
fbsurf->drawable.x = vinfo->xoffset;
|
||||
fbsurf->drawable.y = vinfo->yoffset;
|
||||
fbsurf->drawable.width = vinfo->xres;
|
||||
fbsurf->drawable.height = vinfo->yres;
|
||||
|
||||
return ret;
|
||||
return (fbsurf->drawable.format != PIPE_FORMAT_NONE &&
|
||||
fbsurf->drawable.width &&
|
||||
fbsurf->drawable.height);
|
||||
}
|
||||
|
||||
static boolean
|
||||
@@ -143,21 +187,43 @@ fbdev_surface_present(struct native_surface *nsurf,
|
||||
boolean preserve,
|
||||
uint swap_interval)
|
||||
{
|
||||
boolean ret;
|
||||
struct fbdev_surface *fbsurf = fbdev_surface(nsurf);
|
||||
struct fbdev_display *fbdpy = fbsurf->fbdpy;
|
||||
boolean ret = FALSE;
|
||||
|
||||
if (preserve || swap_interval)
|
||||
if (swap_interval)
|
||||
return FALSE;
|
||||
if (natt != NATIVE_ATTACHMENT_BACK_LEFT)
|
||||
return FALSE;
|
||||
|
||||
switch (natt) {
|
||||
case NATIVE_ATTACHMENT_FRONT_LEFT:
|
||||
ret = fbdev_surface_flush_frontbuffer(nsurf);
|
||||
break;
|
||||
case NATIVE_ATTACHMENT_BACK_LEFT:
|
||||
ret = fbdev_surface_swap_buffers(nsurf);
|
||||
break;
|
||||
default:
|
||||
ret = FALSE;
|
||||
break;
|
||||
if (!fbdpy->assume_fixed_vinfo) {
|
||||
struct fb_var_screeninfo vinfo;
|
||||
|
||||
memset(&vinfo, 0, sizeof(vinfo));
|
||||
if (ioctl(fbdpy->fd, FBIOGET_VSCREENINFO, &vinfo))
|
||||
return FALSE;
|
||||
|
||||
/* present the surface */
|
||||
if (fbdev_surface_update_drawable(&fbsurf->base, &vinfo)) {
|
||||
ret = resource_surface_present(fbsurf->rsurf,
|
||||
natt, (void *) &fbsurf->drawable);
|
||||
}
|
||||
|
||||
fbsurf->width = vinfo.xres;
|
||||
fbsurf->height = vinfo.yres;
|
||||
|
||||
if (resource_surface_set_size(fbsurf->rsurf,
|
||||
fbsurf->width, fbsurf->height)) {
|
||||
/* surface resized */
|
||||
fbsurf->sequence_number++;
|
||||
fbdpy->event_handler->invalid_surface(&fbdpy->base,
|
||||
&fbsurf->base, fbsurf->sequence_number);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* the drawable never changes */
|
||||
ret = resource_surface_present(fbsurf->rsurf,
|
||||
natt, (void *) &fbsurf->drawable);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -179,26 +245,48 @@ fbdev_surface_destroy(struct native_surface *nsurf)
|
||||
}
|
||||
|
||||
static struct native_surface *
|
||||
fbdev_display_create_scanout_surface(struct native_display *ndpy,
|
||||
const struct native_config *nconf,
|
||||
uint width, uint height)
|
||||
fbdev_display_create_window_surface(struct native_display *ndpy,
|
||||
EGLNativeWindowType win,
|
||||
const struct native_config *nconf)
|
||||
{
|
||||
struct fbdev_display *fbdpy = fbdev_display(ndpy);
|
||||
struct fbdev_surface *fbsurf;
|
||||
struct fb_var_screeninfo vinfo;
|
||||
|
||||
/* there is only one native window: NULL */
|
||||
if (win)
|
||||
return NULL;
|
||||
|
||||
fbsurf = CALLOC_STRUCT(fbdev_surface);
|
||||
if (!fbsurf)
|
||||
return NULL;
|
||||
|
||||
fbsurf->fbdpy = fbdpy;
|
||||
fbsurf->width = width;
|
||||
fbsurf->height = height;
|
||||
|
||||
/* get current vinfo */
|
||||
if (fbdpy->assume_fixed_vinfo) {
|
||||
vinfo = fbdpy->config_vinfo;
|
||||
}
|
||||
else {
|
||||
memset(&vinfo, 0, sizeof(vinfo));
|
||||
if (ioctl(fbdpy->fd, FBIOGET_VSCREENINFO, &vinfo)) {
|
||||
FREE(fbsurf);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
fbsurf->width = vinfo.xres;
|
||||
fbsurf->height = vinfo.yres;
|
||||
|
||||
if (!fbdev_surface_update_drawable(&fbsurf->base, &vinfo)) {
|
||||
FREE(fbsurf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fbsurf->rsurf = resource_surface_create(fbdpy->base.screen,
|
||||
nconf->color_format,
|
||||
PIPE_BIND_RENDER_TARGET |
|
||||
PIPE_BIND_DISPLAY_TARGET |
|
||||
PIPE_BIND_SCANOUT);
|
||||
PIPE_BIND_DISPLAY_TARGET);
|
||||
if (!fbsurf->rsurf) {
|
||||
FREE(fbsurf);
|
||||
return NULL;
|
||||
@@ -214,42 +302,43 @@ fbdev_display_create_scanout_surface(struct native_display *ndpy,
|
||||
return &fbsurf->base;
|
||||
}
|
||||
|
||||
static struct native_surface *
|
||||
fbdev_display_create_scanout_surface(struct native_display *ndpy,
|
||||
const struct native_config *nconf,
|
||||
uint width, uint height)
|
||||
{
|
||||
return fbdev_display_create_window_surface(ndpy,
|
||||
(EGLNativeWindowType) NULL, nconf);
|
||||
}
|
||||
|
||||
static boolean
|
||||
fbdev_display_program(struct native_display *ndpy, int crtc_idx,
|
||||
struct native_surface *nsurf, uint x, uint y,
|
||||
const struct native_connector **nconns, int num_nconns,
|
||||
const struct native_mode *nmode)
|
||||
{
|
||||
struct fbdev_display *fbdpy = fbdev_display(ndpy);
|
||||
struct fbdev_surface *fbsurf = fbdev_surface(nsurf);
|
||||
|
||||
if (x || y)
|
||||
return FALSE;
|
||||
|
||||
if (fbdpy->current_surface) {
|
||||
if (fbdpy->current_surface == fbsurf)
|
||||
return TRUE;
|
||||
fbdpy->current_surface->is_current = FALSE;
|
||||
}
|
||||
|
||||
if (fbsurf)
|
||||
fbsurf->is_current = TRUE;
|
||||
fbdpy->current_surface = fbsurf;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static const struct native_mode **
|
||||
fbdev_display_get_modes(struct native_display *ndpy,
|
||||
const struct native_connector *nconn,
|
||||
int *num_modes)
|
||||
const struct native_connector *nconn,
|
||||
int *num_modes)
|
||||
{
|
||||
struct fbdev_display *fbdpy = fbdev_display(ndpy);
|
||||
static struct native_mode mode;
|
||||
const struct native_mode **modes;
|
||||
|
||||
if (!mode.desc) {
|
||||
struct fbdev_display *fbdpy = fbdev_display(ndpy);
|
||||
mode.desc = "Current Mode";
|
||||
mode.width = fbdpy->config_vinfo.xres;
|
||||
mode.height = fbdpy->config_vinfo.yres;
|
||||
mode.refresh_rate = 60 * 1000; /* dummy */
|
||||
}
|
||||
|
||||
modes = MALLOC(sizeof(*modes));
|
||||
if (modes) {
|
||||
modes[0] = &fbdpy->mode;
|
||||
modes[0] = &mode;
|
||||
if (num_modes)
|
||||
*num_modes = 1;
|
||||
}
|
||||
@@ -261,12 +350,12 @@ static const struct native_connector **
|
||||
fbdev_display_get_connectors(struct native_display *ndpy, int *num_connectors,
|
||||
int *num_crtc)
|
||||
{
|
||||
struct fbdev_display *fbdpy = fbdev_display(ndpy);
|
||||
static struct native_connector connector;
|
||||
const struct native_connector **connectors;
|
||||
|
||||
connectors = MALLOC(sizeof(*connectors));
|
||||
if (connectors) {
|
||||
connectors[0] = &fbdpy->connector;
|
||||
connectors[0] = &connector;
|
||||
if (num_connectors)
|
||||
*num_connectors = 1;
|
||||
}
|
||||
@@ -274,7 +363,8 @@ fbdev_display_get_connectors(struct native_display *ndpy, int *num_connectors,
|
||||
return connectors;
|
||||
}
|
||||
|
||||
static struct native_display_modeset fbdev_display_modeset = {
|
||||
/* remove modeset support one day! */
|
||||
static const struct native_display_modeset fbdev_display_modeset = {
|
||||
.get_connectors = fbdev_display_get_connectors,
|
||||
.get_modes = fbdev_display_get_modes,
|
||||
.create_scanout_surface = fbdev_display_create_scanout_surface,
|
||||
@@ -304,8 +394,10 @@ fbdev_display_get_param(struct native_display *ndpy,
|
||||
int val;
|
||||
|
||||
switch (param) {
|
||||
case NATIVE_PARAM_USE_NATIVE_BUFFER:
|
||||
case NATIVE_PARAM_PRESERVE_BUFFER:
|
||||
val = 1;
|
||||
break;
|
||||
case NATIVE_PARAM_USE_NATIVE_BUFFER:
|
||||
case NATIVE_PARAM_MAX_SWAP_INTERVAL:
|
||||
default:
|
||||
val = 0;
|
||||
@@ -326,114 +418,55 @@ fbdev_display_destroy(struct native_display *ndpy)
|
||||
}
|
||||
|
||||
static boolean
|
||||
fbdev_display_init_modes(struct native_display *ndpy)
|
||||
{
|
||||
struct fbdev_display *fbdpy = fbdev_display(ndpy);
|
||||
struct native_mode *nmode = &fbdpy->mode;
|
||||
|
||||
nmode->desc = "Current Mode";
|
||||
nmode->width = fbdpy->vinfo.xres;
|
||||
nmode->height = fbdpy->vinfo.yres;
|
||||
nmode->refresh_rate = 60 * 1000; /* dummy */
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static boolean
|
||||
fbdev_display_init_connectors(struct native_display *ndpy)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static enum pipe_format
|
||||
vinfo_to_format(const struct fb_var_screeninfo *vinfo)
|
||||
{
|
||||
enum pipe_format format = PIPE_FORMAT_NONE;
|
||||
|
||||
switch (vinfo->bits_per_pixel) {
|
||||
case 32:
|
||||
if (vinfo->red.length == 8 &&
|
||||
vinfo->green.length == 8 &&
|
||||
vinfo->blue.length == 8) {
|
||||
format = (vinfo->transp.length == 8) ?
|
||||
PIPE_FORMAT_B8G8R8A8_UNORM : PIPE_FORMAT_B8G8R8X8_UNORM;
|
||||
}
|
||||
break;
|
||||
case 16:
|
||||
if (vinfo->red.length == 5 &&
|
||||
vinfo->green.length == 6 &&
|
||||
vinfo->blue.length == 5 &&
|
||||
vinfo->transp.length == 0)
|
||||
format = PIPE_FORMAT_B5G6R5_UNORM;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return format;
|
||||
}
|
||||
|
||||
static boolean
|
||||
fbdev_display_init_configs(struct native_display *ndpy)
|
||||
{
|
||||
struct fbdev_display *fbdpy = fbdev_display(ndpy);
|
||||
struct native_config *nconf = &fbdpy->config;
|
||||
|
||||
nconf->color_format = vinfo_to_format(&fbdpy->vinfo);
|
||||
if (nconf->color_format == PIPE_FORMAT_NONE)
|
||||
return FALSE;
|
||||
|
||||
nconf->buffer_mask =
|
||||
(1 << NATIVE_ATTACHMENT_FRONT_LEFT) |
|
||||
(1 << NATIVE_ATTACHMENT_BACK_LEFT);
|
||||
|
||||
nconf->scanout_bit = TRUE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static boolean
|
||||
fbdev_display_init(struct native_display *ndpy)
|
||||
fbdev_display_init_screen(struct native_display *ndpy)
|
||||
{
|
||||
struct fbdev_display *fbdpy = fbdev_display(ndpy);
|
||||
struct sw_winsys *ws;
|
||||
|
||||
if (ioctl(fbdpy->fd, FBIOGET_FSCREENINFO, &fbdpy->finfo))
|
||||
ws = fbdev_create_sw_winsys(fbdpy->fd);
|
||||
if (!ws)
|
||||
return FALSE;
|
||||
|
||||
if (ioctl(fbdpy->fd, FBIOGET_VSCREENINFO, &fbdpy->vinfo))
|
||||
fbdpy->base.screen = fbdpy->event_handler->new_sw_screen(&fbdpy->base, ws);
|
||||
if (!fbdpy->base.screen) {
|
||||
if (ws->destroy)
|
||||
ws->destroy(ws);
|
||||
return FALSE;
|
||||
|
||||
if (fbdpy->finfo.visual != FB_VISUAL_TRUECOLOR ||
|
||||
fbdpy->finfo.type != FB_TYPE_PACKED_PIXELS)
|
||||
return FALSE;
|
||||
|
||||
if (!fbdev_display_init_configs(&fbdpy->base) ||
|
||||
!fbdev_display_init_connectors(&fbdpy->base) ||
|
||||
!fbdev_display_init_modes(&fbdpy->base))
|
||||
return FALSE;
|
||||
|
||||
ws = fbdev_create_sw_winsys(fbdpy->fd, fbdpy->config.color_format);
|
||||
if (ws) {
|
||||
fbdpy->base.screen =
|
||||
fbdpy->event_handler->new_sw_screen(&fbdpy->base, ws);
|
||||
}
|
||||
|
||||
if (fbdpy->base.screen) {
|
||||
if (!fbdpy->base.screen->is_format_supported(fbdpy->base.screen,
|
||||
fbdpy->config.color_format, PIPE_TEXTURE_2D, 0,
|
||||
PIPE_BIND_RENDER_TARGET)) {
|
||||
fbdpy->base.screen->destroy(fbdpy->base.screen);
|
||||
fbdpy->base.screen = NULL;
|
||||
}
|
||||
if (!fbdpy->base.screen->is_format_supported(fbdpy->base.screen,
|
||||
fbdpy->config.color_format, PIPE_TEXTURE_2D, 0,
|
||||
PIPE_BIND_RENDER_TARGET)) {
|
||||
fbdpy->base.screen->destroy(fbdpy->base.screen);
|
||||
fbdpy->base.screen = NULL;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return (fbdpy->base.screen != NULL);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static boolean
|
||||
fbdev_display_init_config(struct native_display *ndpy)
|
||||
{
|
||||
struct fbdev_display *fbdpy = fbdev_display(ndpy);
|
||||
struct native_config *nconf = &fbdpy->config;
|
||||
|
||||
if (ioctl(fbdpy->fd, FBIOGET_VSCREENINFO, &fbdpy->config_vinfo))
|
||||
return FALSE;
|
||||
|
||||
nconf->color_format = vinfo_to_format(&fbdpy->config_vinfo);
|
||||
if (nconf->color_format == PIPE_FORMAT_NONE)
|
||||
return FALSE;
|
||||
|
||||
nconf->buffer_mask = (1 << NATIVE_ATTACHMENT_BACK_LEFT);
|
||||
|
||||
nconf->window_bit = TRUE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static struct native_display *
|
||||
fbdev_display_create(int fd, struct native_event_handler *event_handler,
|
||||
void *user_data)
|
||||
fbdev_display_create(int fd, const struct native_event_handler *event_handler)
|
||||
{
|
||||
struct fbdev_display *fbdpy;
|
||||
|
||||
@@ -443,32 +476,41 @@ fbdev_display_create(int fd, struct native_event_handler *event_handler,
|
||||
|
||||
fbdpy->fd = fd;
|
||||
fbdpy->event_handler = event_handler;
|
||||
fbdpy->base.user_data = user_data;
|
||||
|
||||
if (!fbdev_display_init(&fbdpy->base)) {
|
||||
FREE(fbdpy);
|
||||
return NULL;
|
||||
}
|
||||
if (ioctl(fbdpy->fd, FBIOGET_FSCREENINFO, &fbdpy->finfo))
|
||||
goto fail;
|
||||
|
||||
if (fbdpy->finfo.visual != FB_VISUAL_TRUECOLOR ||
|
||||
fbdpy->finfo.type != FB_TYPE_PACKED_PIXELS)
|
||||
goto fail;
|
||||
|
||||
if (!fbdev_display_init_config(&fbdpy->base))
|
||||
goto fail;
|
||||
|
||||
fbdpy->assume_fixed_vinfo = TRUE;
|
||||
|
||||
fbdpy->base.init_screen = fbdev_display_init_screen;
|
||||
fbdpy->base.destroy = fbdev_display_destroy;
|
||||
fbdpy->base.get_param = fbdev_display_get_param;
|
||||
fbdpy->base.get_configs = fbdev_display_get_configs;
|
||||
|
||||
fbdpy->base.create_window_surface = fbdev_display_create_window_surface;
|
||||
|
||||
/* we'd like to remove modeset support one day */
|
||||
fbdpy->config.scanout_bit = TRUE;
|
||||
fbdpy->base.modeset = &fbdev_display_modeset;
|
||||
|
||||
return &fbdpy->base;
|
||||
|
||||
fail:
|
||||
FREE(fbdpy);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct native_event_handler *fbdev_event_handler;
|
||||
|
||||
static void
|
||||
native_set_event_handler(struct native_event_handler *event_handler)
|
||||
{
|
||||
fbdev_event_handler = event_handler;
|
||||
}
|
||||
static const struct native_event_handler *fbdev_event_handler;
|
||||
|
||||
static struct native_display *
|
||||
native_create_display(void *dpy, boolean use_sw, void *user_data)
|
||||
native_create_display(void *dpy, boolean use_sw)
|
||||
{
|
||||
struct native_display *ndpy;
|
||||
int fd;
|
||||
@@ -483,7 +525,7 @@ native_create_display(void *dpy, boolean use_sw, void *user_data)
|
||||
if (fd < 0)
|
||||
return NULL;
|
||||
|
||||
ndpy = fbdev_display_create(fd, fbdev_event_handler, user_data);
|
||||
ndpy = fbdev_display_create(fd, fbdev_event_handler);
|
||||
if (!ndpy)
|
||||
close(fd);
|
||||
|
||||
@@ -492,12 +534,12 @@ native_create_display(void *dpy, boolean use_sw, void *user_data)
|
||||
|
||||
static const struct native_platform fbdev_platform = {
|
||||
"FBDEV", /* name */
|
||||
native_set_event_handler,
|
||||
native_create_display
|
||||
};
|
||||
|
||||
const struct native_platform *
|
||||
native_get_fbdev_platform(void)
|
||||
native_get_fbdev_platform(const struct native_event_handler *event_handler)
|
||||
{
|
||||
fbdev_event_handler = event_handler;
|
||||
return &fbdev_platform;
|
||||
}
|
||||
|
@@ -41,7 +41,7 @@ struct gdi_display {
|
||||
struct native_display base;
|
||||
|
||||
HDC hDC;
|
||||
struct native_event_handler *event_handler;
|
||||
const struct native_event_handler *event_handler;
|
||||
|
||||
struct native_config *configs;
|
||||
int num_configs;
|
||||
@@ -368,12 +368,30 @@ gdi_display_destroy(struct native_display *ndpy)
|
||||
FREE(gdpy);
|
||||
}
|
||||
|
||||
static boolean
|
||||
gdi_display_init_screen(struct native_display *ndpy)
|
||||
{
|
||||
struct gdi_display *gdpy = gdi_display(ndpy);
|
||||
struct sw_winsys *winsys;
|
||||
|
||||
winsys = gdi_create_sw_winsys();
|
||||
if (!winsys)
|
||||
return FALSE;
|
||||
|
||||
gdpy->base.screen = gdpy->event_handler->new_sw_screen(&gdpy->base, winsys);
|
||||
if (!gdpy->base.screen) {
|
||||
if (winsys->destroy)
|
||||
winsys->destroy(winsys);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static struct native_display *
|
||||
gdi_create_display(HDC hDC, struct native_event_handler *event_handler,
|
||||
void *user_data)
|
||||
gdi_create_display(HDC hDC, const struct native_event_handler *event_handler)
|
||||
{
|
||||
struct gdi_display *gdpy;
|
||||
struct sw_winsys *winsys;
|
||||
|
||||
gdpy = CALLOC_STRUCT(gdi_display);
|
||||
if (!gdpy)
|
||||
@@ -381,22 +399,8 @@ gdi_create_display(HDC hDC, struct native_event_handler *event_handler,
|
||||
|
||||
gdpy->hDC = hDC;
|
||||
gdpy->event_handler = event_handler;
|
||||
gdpy->base.user_data = user_data;
|
||||
|
||||
winsys = gdi_create_sw_winsys();
|
||||
if (!winsys) {
|
||||
FREE(gdpy);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gdpy->base.screen = gdpy->event_handler->new_sw_screen(&gdpy->base, winsys);
|
||||
if (!gdpy->base.screen) {
|
||||
if (winsys->destroy)
|
||||
winsys->destroy(winsys);
|
||||
FREE(gdpy);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gdpy->base.init_screen = gdi_display_init_screen;
|
||||
gdpy->base.destroy = gdi_display_destroy;
|
||||
gdpy->base.get_param = gdi_display_get_param;
|
||||
|
||||
@@ -406,28 +410,22 @@ gdi_create_display(HDC hDC, struct native_event_handler *event_handler,
|
||||
return &gdpy->base;
|
||||
}
|
||||
|
||||
static struct native_event_handler *gdi_event_handler;
|
||||
|
||||
static void
|
||||
native_set_event_handler(struct native_event_handler *event_handler)
|
||||
{
|
||||
gdi_event_handler = event_handler;
|
||||
}
|
||||
static const struct native_event_handler *gdi_event_handler;
|
||||
|
||||
static struct native_display *
|
||||
native_create_display(void *dpy, boolean use_sw, void *user_data)
|
||||
native_create_display(void *dpy, boolean use_sw)
|
||||
{
|
||||
return gdi_create_display((HDC) dpy, gdi_event_handler, user_data);
|
||||
return gdi_create_display((HDC) dpy, gdi_event_handler);
|
||||
}
|
||||
|
||||
static const struct native_platform gdi_platform = {
|
||||
"GDI", /* name */
|
||||
native_set_event_handler,
|
||||
native_create_display
|
||||
};
|
||||
|
||||
const struct native_platform *
|
||||
native_get_gdi_platform(void)
|
||||
native_get_gdi_platform(const struct native_event_handler *event_handler)
|
||||
{
|
||||
gdi_event_handler = event_handler;
|
||||
return &gdi_platform;
|
||||
}
|
||||
|
@@ -51,7 +51,7 @@
|
||||
struct wayland_drm_display {
|
||||
struct wayland_display base;
|
||||
|
||||
struct native_event_handler *event_handler;
|
||||
const struct native_event_handler *event_handler;
|
||||
|
||||
struct wl_drm *wl_drm;
|
||||
struct wl_drm *wl_server_drm; /* for EGL_WL_bind_wayland_display */
|
||||
@@ -285,8 +285,7 @@ static struct native_display_wayland_bufmgr wayland_drm_display_wayland_bufmgr =
|
||||
|
||||
struct wayland_display *
|
||||
wayland_create_drm_display(struct wl_display *dpy,
|
||||
struct native_event_handler *event_handler,
|
||||
void *user_data)
|
||||
const struct native_event_handler *event_handler)
|
||||
{
|
||||
struct wayland_drm_display *drmdpy;
|
||||
|
||||
@@ -295,7 +294,6 @@ wayland_create_drm_display(struct wl_display *dpy,
|
||||
return NULL;
|
||||
|
||||
drmdpy->event_handler = event_handler;
|
||||
drmdpy->base.base.user_data = user_data;
|
||||
|
||||
drmdpy->base.dpy = dpy;
|
||||
if (!drmdpy->base.dpy) {
|
||||
@@ -303,10 +301,7 @@ wayland_create_drm_display(struct wl_display *dpy,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!wayland_drm_display_init_screen(&drmdpy->base.base)) {
|
||||
wayland_drm_display_destroy(&drmdpy->base.base);
|
||||
return NULL;
|
||||
}
|
||||
drmdpy->base.base.init_screen = wayland_drm_display_init_screen;
|
||||
drmdpy->base.base.destroy = wayland_drm_display_destroy;
|
||||
drmdpy->base.base.buffer = &wayland_drm_display_buffer;
|
||||
drmdpy->base.base.wayland_bufmgr = &wayland_drm_display_wayland_bufmgr;
|
||||
|
@@ -47,7 +47,7 @@
|
||||
struct wayland_shm_display {
|
||||
struct wayland_display base;
|
||||
|
||||
struct native_event_handler *event_handler;
|
||||
const struct native_event_handler *event_handler;
|
||||
struct wl_shm *wl_shm;
|
||||
};
|
||||
|
||||
@@ -144,8 +144,7 @@ wayland_shm_display_init_screen(struct native_display *ndpy)
|
||||
|
||||
struct wayland_display *
|
||||
wayland_create_shm_display(struct wl_display *dpy,
|
||||
struct native_event_handler *event_handler,
|
||||
void *user_data)
|
||||
const struct native_event_handler *event_handler)
|
||||
{
|
||||
struct wayland_shm_display *shmdpy;
|
||||
|
||||
@@ -154,7 +153,6 @@ wayland_create_shm_display(struct wl_display *dpy,
|
||||
return NULL;
|
||||
|
||||
shmdpy->event_handler = event_handler;
|
||||
shmdpy->base.base.user_data = user_data;
|
||||
|
||||
shmdpy->base.dpy = dpy;
|
||||
if (!shmdpy->base.dpy) {
|
||||
@@ -162,11 +160,7 @@ wayland_create_shm_display(struct wl_display *dpy,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!wayland_shm_display_init_screen(&shmdpy->base.base)) {
|
||||
wayland_shm_display_destroy(&shmdpy->base.base);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
shmdpy->base.base.init_screen = wayland_shm_display_init_screen;
|
||||
shmdpy->base.base.destroy = wayland_shm_display_destroy;
|
||||
shmdpy->base.create_buffer = wayland_create_shm_buffer;
|
||||
|
||||
|
@@ -35,7 +35,7 @@
|
||||
|
||||
#include "native_wayland.h"
|
||||
|
||||
static struct native_event_handler *wayland_event_handler;
|
||||
static const struct native_event_handler *wayland_event_handler;
|
||||
|
||||
static void
|
||||
sync_callback(void *data)
|
||||
@@ -447,14 +447,8 @@ wayland_create_window_surface(struct native_display *ndpy,
|
||||
return &surface->base;
|
||||
}
|
||||
|
||||
static void
|
||||
native_set_event_handler(struct native_event_handler *event_handler)
|
||||
{
|
||||
wayland_event_handler = event_handler;
|
||||
}
|
||||
|
||||
static struct native_display *
|
||||
native_create_display(void *dpy, boolean use_sw, void *user_data)
|
||||
native_create_display(void *dpy, boolean use_sw)
|
||||
{
|
||||
struct wayland_display *display = NULL;
|
||||
boolean own_dpy = FALSE;
|
||||
@@ -471,12 +465,10 @@ native_create_display(void *dpy, boolean use_sw, void *user_data)
|
||||
if (use_sw) {
|
||||
_eglLog(_EGL_INFO, "use software fallback");
|
||||
display = wayland_create_shm_display((struct wl_display *) dpy,
|
||||
wayland_event_handler,
|
||||
user_data);
|
||||
wayland_event_handler);
|
||||
} else {
|
||||
display = wayland_create_drm_display((struct wl_display *) dpy,
|
||||
wayland_event_handler,
|
||||
user_data);
|
||||
wayland_event_handler);
|
||||
}
|
||||
|
||||
if (!display)
|
||||
@@ -495,13 +487,13 @@ native_create_display(void *dpy, boolean use_sw, void *user_data)
|
||||
|
||||
static const struct native_platform wayland_platform = {
|
||||
"wayland", /* name */
|
||||
native_set_event_handler,
|
||||
native_create_display
|
||||
};
|
||||
|
||||
const struct native_platform *
|
||||
native_get_wayland_platform(void)
|
||||
native_get_wayland_platform(const struct native_event_handler *event_handler)
|
||||
{
|
||||
wayland_event_handler = event_handler;
|
||||
return &wayland_platform;
|
||||
}
|
||||
|
||||
|
@@ -103,11 +103,10 @@ wayland_config(const struct native_config *nconf)
|
||||
|
||||
struct wayland_display *
|
||||
wayland_create_shm_display(struct wl_display *display,
|
||||
struct native_event_handler *event_handler,
|
||||
void *user_data);
|
||||
const struct native_event_handler *event_handler);
|
||||
|
||||
struct wayland_display *
|
||||
wayland_create_drm_display(struct wl_display *display,
|
||||
struct native_event_handler *event_handler,
|
||||
void *user_data);
|
||||
const struct native_event_handler *event_handler);
|
||||
|
||||
#endif /* _NATIVE_WAYLAND_H_ */
|
||||
|
@@ -49,7 +49,7 @@ struct dri2_display {
|
||||
Display *dpy;
|
||||
boolean own_dpy;
|
||||
|
||||
struct native_event_handler *event_handler;
|
||||
const struct native_event_handler *event_handler;
|
||||
|
||||
struct x11_screen *xscr;
|
||||
int xscr_number;
|
||||
@@ -870,8 +870,7 @@ static struct native_display_wayland_bufmgr dri2_display_wayland_bufmgr = {
|
||||
|
||||
struct native_display *
|
||||
x11_create_dri2_display(Display *dpy,
|
||||
struct native_event_handler *event_handler,
|
||||
void *user_data)
|
||||
const struct native_event_handler *event_handler)
|
||||
{
|
||||
struct dri2_display *dri2dpy;
|
||||
|
||||
@@ -880,7 +879,6 @@ x11_create_dri2_display(Display *dpy,
|
||||
return NULL;
|
||||
|
||||
dri2dpy->event_handler = event_handler;
|
||||
dri2dpy->base.user_data = user_data;
|
||||
|
||||
dri2dpy->dpy = dpy;
|
||||
if (!dri2dpy->dpy) {
|
||||
@@ -899,11 +897,6 @@ x11_create_dri2_display(Display *dpy,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!dri2_display_init_screen(&dri2dpy->base)) {
|
||||
dri2_display_destroy(&dri2dpy->base);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dri2dpy->surfaces = util_hash_table_create(dri2_display_hash_table_hash,
|
||||
dri2_display_hash_table_compare);
|
||||
if (!dri2dpy->surfaces) {
|
||||
@@ -911,6 +904,7 @@ x11_create_dri2_display(Display *dpy,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dri2dpy->base.init_screen = dri2_display_init_screen;
|
||||
dri2dpy->base.destroy = dri2_display_destroy;
|
||||
dri2dpy->base.get_param = dri2_display_get_param;
|
||||
dri2dpy->base.get_configs = dri2_display_get_configs;
|
||||
@@ -928,8 +922,7 @@ x11_create_dri2_display(Display *dpy,
|
||||
|
||||
struct native_display *
|
||||
x11_create_dri2_display(Display *dpy,
|
||||
struct native_event_handler *event_handler,
|
||||
void *user_data)
|
||||
const struct native_event_handler *event_handler)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
@@ -30,16 +30,10 @@
|
||||
|
||||
#include "native_x11.h"
|
||||
|
||||
static struct native_event_handler *x11_event_handler;
|
||||
|
||||
static void
|
||||
native_set_event_handler(struct native_event_handler *event_handler)
|
||||
{
|
||||
x11_event_handler = event_handler;
|
||||
}
|
||||
static const struct native_event_handler *x11_event_handler;
|
||||
|
||||
static struct native_display *
|
||||
native_create_display(void *dpy, boolean use_sw, void *user_data)
|
||||
native_create_display(void *dpy, boolean use_sw)
|
||||
{
|
||||
struct native_display *ndpy = NULL;
|
||||
boolean force_sw;
|
||||
@@ -48,12 +42,10 @@ native_create_display(void *dpy, boolean use_sw, void *user_data)
|
||||
|
||||
if (force_sw || use_sw) {
|
||||
_eglLog(_EGL_INFO, "use software fallback");
|
||||
ndpy = x11_create_ximage_display((Display *) dpy,
|
||||
x11_event_handler, user_data);
|
||||
ndpy = x11_create_ximage_display((Display *) dpy, x11_event_handler);
|
||||
}
|
||||
else {
|
||||
ndpy = x11_create_dri2_display((Display *) dpy,
|
||||
x11_event_handler, user_data);
|
||||
ndpy = x11_create_dri2_display((Display *) dpy, x11_event_handler);
|
||||
}
|
||||
|
||||
return ndpy;
|
||||
@@ -61,12 +53,12 @@ native_create_display(void *dpy, boolean use_sw, void *user_data)
|
||||
|
||||
static const struct native_platform x11_platform = {
|
||||
"X11", /* name */
|
||||
native_set_event_handler,
|
||||
native_create_display
|
||||
};
|
||||
|
||||
const struct native_platform *
|
||||
native_get_x11_platform(void)
|
||||
native_get_x11_platform(const struct native_event_handler *event_handler)
|
||||
{
|
||||
x11_event_handler = event_handler;
|
||||
return &x11_platform;
|
||||
}
|
||||
|
@@ -31,12 +31,10 @@
|
||||
|
||||
struct native_display *
|
||||
x11_create_ximage_display(Display *dpy,
|
||||
struct native_event_handler *event_handler,
|
||||
void *user_data);
|
||||
const struct native_event_handler *event_handler);
|
||||
|
||||
struct native_display *
|
||||
x11_create_dri2_display(Display *dpy,
|
||||
struct native_event_handler *event_handler,
|
||||
void *user_data);
|
||||
const struct native_event_handler *event_handler);
|
||||
|
||||
#endif /* _NATIVE_X11_H_ */
|
||||
|
@@ -43,7 +43,7 @@ struct ximage_display {
|
||||
Display *dpy;
|
||||
boolean own_dpy;
|
||||
|
||||
struct native_event_handler *event_handler;
|
||||
const struct native_event_handler *event_handler;
|
||||
|
||||
struct x11_screen *xscr;
|
||||
int xscr_number;
|
||||
@@ -484,13 +484,32 @@ ximage_display_destroy(struct native_display *ndpy)
|
||||
FREE(xdpy);
|
||||
}
|
||||
|
||||
static boolean
|
||||
ximage_display_init_screen(struct native_display *ndpy)
|
||||
{
|
||||
struct ximage_display *xdpy = ximage_display(ndpy);
|
||||
struct sw_winsys *winsys;
|
||||
|
||||
winsys = xlib_create_sw_winsys(xdpy->dpy);
|
||||
if (!winsys)
|
||||
return FALSE;
|
||||
|
||||
xdpy->base.screen =
|
||||
xdpy->event_handler->new_sw_screen(&xdpy->base, winsys);
|
||||
if (!xdpy->base.screen) {
|
||||
if (winsys->destroy)
|
||||
winsys->destroy(winsys);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
struct native_display *
|
||||
x11_create_ximage_display(Display *dpy,
|
||||
struct native_event_handler *event_handler,
|
||||
void *user_data)
|
||||
const struct native_event_handler *event_handler)
|
||||
{
|
||||
struct ximage_display *xdpy;
|
||||
struct sw_winsys *winsys = NULL;
|
||||
|
||||
xdpy = CALLOC_STRUCT(ximage_display);
|
||||
if (!xdpy)
|
||||
@@ -507,22 +526,17 @@ x11_create_ximage_display(Display *dpy,
|
||||
}
|
||||
|
||||
xdpy->event_handler = event_handler;
|
||||
xdpy->base.user_data = user_data;
|
||||
|
||||
xdpy->xscr_number = DefaultScreen(xdpy->dpy);
|
||||
xdpy->xscr = x11_screen_create(xdpy->dpy, xdpy->xscr_number);
|
||||
if (!xdpy->xscr)
|
||||
goto fail;
|
||||
|
||||
winsys = xlib_create_sw_winsys(xdpy->dpy);
|
||||
if (!winsys)
|
||||
goto fail;
|
||||
|
||||
xdpy->base.screen =
|
||||
xdpy->event_handler->new_sw_screen(&xdpy->base, winsys);
|
||||
if (!xdpy->base.screen)
|
||||
goto fail;
|
||||
if (!xdpy->xscr) {
|
||||
if (xdpy->own_dpy)
|
||||
XCloseDisplay(xdpy->dpy);
|
||||
FREE(xdpy);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xdpy->base.init_screen = ximage_display_init_screen;
|
||||
xdpy->base.destroy = ximage_display_destroy;
|
||||
xdpy->base.get_param = ximage_display_get_param;
|
||||
|
||||
@@ -532,14 +546,4 @@ x11_create_ximage_display(Display *dpy,
|
||||
xdpy->base.create_pixmap_surface = ximage_display_create_pixmap_surface;
|
||||
|
||||
return &xdpy->base;
|
||||
|
||||
fail:
|
||||
if (winsys && winsys->destroy)
|
||||
winsys->destroy(winsys);
|
||||
if (xdpy->xscr)
|
||||
x11_screen_destroy(xdpy->xscr);
|
||||
if (xdpy->dpy && xdpy->own_dpy)
|
||||
XCloseDisplay(xdpy->dpy);
|
||||
FREE(xdpy);
|
||||
return NULL;
|
||||
}
|
||||
|
@@ -42,7 +42,7 @@ egl_CPPFLAGS += \
|
||||
-I$(TOP)/src/egl/main \
|
||||
-D_EGL_MAIN=_eglMain
|
||||
egl_LIBS += $(TOP)/src/gallium/state_trackers/egl/libegl.a
|
||||
egl_SYS += $(LIBUDEV_LIBS) -lEGL -lm
|
||||
egl_SYS += $(LIBUDEV_LIBS) $(DLOPEN_LIBS) -lEGL -lm
|
||||
|
||||
# EGL platforms
|
||||
ifneq ($(findstring x11, $(EGL_PLATFORMS)),)
|
||||
@@ -70,7 +70,7 @@ egl_CPPFLAGS += -I$(TOP)/src/mesa $(API_DEFINES)
|
||||
# make st/mesa built-in when there is a single glapi provider
|
||||
ifeq ($(SHARED_GLAPI),1)
|
||||
egl_LIBS += $(TOP)/src/mesa/libmesagallium.a
|
||||
egl_SYS += $(DRI_LIB_DEPS) -l$(GLAPI_LIB)
|
||||
egl_SYS += -lm -lpthread $(DLOPEN_LIBS) -l$(GLAPI_LIB)
|
||||
else
|
||||
egl_CPPFLAGS += -D_EGL_EXTERNAL_GL=1
|
||||
OUTPUTS += st_GL
|
||||
@@ -154,7 +154,7 @@ egl_SYS := $(sort $(egl_SYS))
|
||||
# st_GL, built only when shared glapi is not enabled
|
||||
st_GL_CPPFLAGS := -I $(TOP)/src/mesa -I$(TOP)/src/gallium/include
|
||||
st_GL_LIBS := $(TOP)/src/mesa/libmesagallium.a $(GALLIUM_AUXILIARIES)
|
||||
st_GL_SYS := $(DRI_LIB_DEPS)
|
||||
st_GL_SYS := -lm -lpthread $(DLOPEN_LIBS)
|
||||
|
||||
# LLVM
|
||||
ifeq ($(MESA_LLVM),1)
|
||||
@@ -173,14 +173,14 @@ default: $(OUTPUTS)
|
||||
|
||||
$(OUTPUT_PATH)/egl_gallium.so: $(egl_OBJECTS) $(egl_LIBS)
|
||||
$(MKLIB) -o $(notdir $@) -noprefix -linker '$(CXX)' \
|
||||
-L$(TOP)/$(LIB_DIR) -ldflags '-Wl,--no-undefined $(LDFLAGS)' \
|
||||
-ldflags '-L$(TOP)/$(LIB_DIR) -Wl,--no-undefined $(LDFLAGS)' \
|
||||
-cplusplus -install $(OUTPUT_PATH) $(MKLIB_OPTIONS) \
|
||||
$(egl_OBJECTS) -Wl,--start-group $(egl_LIBS) -Wl,--end-group \
|
||||
$(egl_SYS)
|
||||
|
||||
$(OUTPUT_PATH)/st_GL.so: st_GL.o $(st_GL_LIBS)
|
||||
$(MKLIB) -o $(notdir $@) -noprefix -linker '$(CXX)' \
|
||||
-L$(TOP)/$(LIB_DIR) -ldflags '$(LDFLAGS)' \
|
||||
-ldflags '-L$(TOP)/$(LIB_DIR) $(LDFLAGS)' \
|
||||
-cplusplus -install $(OUTPUT_PATH) $(MKLIB_OPTIONS) \
|
||||
$< -Wl,--start-group $(st_GL_LIBS) -Wl,--end-group \
|
||||
$(st_GL_SYS)
|
||||
|
@@ -29,6 +29,9 @@
|
||||
#include "pipe/p_compiler.h"
|
||||
|
||||
PUBLIC struct st_api *
|
||||
st_api_create_OpenGL(void);
|
||||
|
||||
struct st_api *
|
||||
st_api_create_OpenGL(void)
|
||||
{
|
||||
return st_gl_api_create();
|
||||
|
@@ -18,6 +18,7 @@ GBM_INCLUDES = \
|
||||
GBM_LIBS = $(LIBUDEV_LIBS) $(LIBDRM_LIB) \
|
||||
$(TOP)/src/gallium/state_trackers/gbm/libgbm.a \
|
||||
$(TOP)/src/gallium/drivers/identity/libidentity.a \
|
||||
$(TOP)/src/gallium/drivers/galahad/libgalahad.a \
|
||||
$(TOP)/src/gallium/drivers/trace/libtrace.a \
|
||||
$(TOP)/src/gallium/drivers/rbug/librbug.a \
|
||||
$(GALLIUM_AUXILIARIES)
|
||||
@@ -37,44 +38,54 @@ pipe_INCLUDES = \
|
||||
-I$(TOP)/src/gallium/include \
|
||||
-I$(TOP)/src/gallium/winsys
|
||||
|
||||
pipe_LIBS = $(LIBDRM_LIB) \
|
||||
pipe_LIBS = \
|
||||
$(TOP)/src/gallium/drivers/identity/libidentity.a \
|
||||
$(TOP)/src/gallium/drivers/trace/libtrace.a \
|
||||
$(TOP)/src/gallium/drivers/rbug/librbug.a \
|
||||
$(GALLIUM_AUXILIARIES)
|
||||
|
||||
pipe_CLFLAGS = $(LIBDRM_CFLAGS)
|
||||
# as if we are DRI modules
|
||||
pipe_SYS = $(DRI_LIB_DEPS)
|
||||
|
||||
pipe_CLFLAGS = \
|
||||
-DGALLIUM_RBUG -DGALLIUM_TRACE -DGALLIUM_GALAHAD \
|
||||
$(LIBDRM_CFLAGS)
|
||||
|
||||
pipe_LDFLAGS = -Wl,--no-undefined
|
||||
|
||||
# i915 pipe driver
|
||||
i915_LIBS = -ldrm_intel \
|
||||
i915_LIBS = \
|
||||
$(TOP)/src/gallium/winsys/i915/drm/libi915drm.a \
|
||||
$(TOP)/src/gallium/drivers/i915/libi915.a
|
||||
i915_SYS = -ldrm_intel
|
||||
|
||||
# i965 pipe driver
|
||||
i965_LIBS = -ldrm_intel \
|
||||
i965_LIBS = \
|
||||
$(TOP)/src/gallium/winsys/i965/drm/libi965drm.a \
|
||||
$(TOP)/src/gallium/drivers/i965/libi965.a \
|
||||
$(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a
|
||||
i965_SYS = -ldrm_intel
|
||||
|
||||
# nouveau pipe driver
|
||||
nouveau_LIBS = -ldrm_nouveau \
|
||||
nouveau_LIBS = \
|
||||
$(TOP)/src/gallium/winsys/nouveau/drm/libnouveaudrm.a \
|
||||
$(TOP)/src/gallium/drivers/nvfx/libnvfx.a \
|
||||
$(TOP)/src/gallium/drivers/nv50/libnv50.a \
|
||||
$(TOP)/src/gallium/drivers/nvc0/libnvc0.a \
|
||||
$(TOP)/src/gallium/drivers/nouveau/libnouveau.a
|
||||
nouveau_SYS = -ldrm_nouveau
|
||||
|
||||
# r300 pipe driver
|
||||
r300_LIBS = -ldrm \
|
||||
r300_LIBS = \
|
||||
$(TOP)/src/gallium/winsys/radeon/drm/libradeonwinsys.a \
|
||||
$(TOP)/src/gallium/drivers/r300/libr300.a
|
||||
r300_SYS = -ldrm_radeon
|
||||
|
||||
# r600 pipe driver
|
||||
r600_LIBS = -ldrm -ldrm_radeon \
|
||||
r600_LIBS = \
|
||||
$(TOP)/src/gallium/winsys/r600/drm/libr600winsys.a \
|
||||
$(TOP)/src/gallium/drivers/r600/libr600.a
|
||||
r600_SYS = -ldrm_radeon
|
||||
|
||||
# vmwgfx pipe driver
|
||||
vmwgfx_LIBS = \
|
||||
@@ -83,7 +94,8 @@ vmwgfx_LIBS = \
|
||||
|
||||
# LLVM
|
||||
ifeq ($(MESA_LLVM),1)
|
||||
pipe_LIBS += $(LLVM_LIBS)
|
||||
pipe_LIBS += $(TOP)/src/gallium/drivers/llvmpipe/libllvmpipe.a
|
||||
pipe_SYS += $(LLVM_LIBS)
|
||||
pipe_LDFLAGS += $(LLVM_LDFLAGS)
|
||||
endif
|
||||
|
||||
@@ -140,7 +152,8 @@ $(pipe_TARGETS): $(PIPE_PREFIX)%.so: pipe_%.o
|
||||
$(MKLIB) -o $@ -noprefix -linker '$(CC)' \
|
||||
-ldflags '-L$(TOP)/$(LIB_DIR) $(pipe_LDFLAGS) $(LDFLAGS)' \
|
||||
$(MKLIB_OPTIONS) $< \
|
||||
-Wl,--start-group $($*_LIBS) $(pipe_LIBS) -Wl,--end-group
|
||||
-Wl,--start-group $(pipe_LIBS) $($*_LIBS) -Wl,--end-group \
|
||||
$(pipe_SYS) $($*_SYS)
|
||||
|
||||
$(pipe_OBJECTS): %.o: %.c
|
||||
$(CC) -c -o $@ $< $(pipe_INCLUDES) $(pipe_CFLAGS) $(CFLAGS)
|
||||
|
@@ -213,6 +213,15 @@ i915_drm_buffer_destroy(struct i915_winsys *iws,
|
||||
FREE(buffer);
|
||||
}
|
||||
|
||||
static boolean
|
||||
i915_drm_buffer_is_busy(struct i915_winsys *iws,
|
||||
struct i915_winsys_buffer *buffer)
|
||||
{
|
||||
struct i915_drm_buffer* i915_buffer = i915_drm_buffer(buffer);
|
||||
return drm_intel_bo_busy(i915_buffer->bo);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
i915_drm_winsys_init_buffer_functions(struct i915_drm_winsys *idws)
|
||||
{
|
||||
@@ -224,4 +233,5 @@ i915_drm_winsys_init_buffer_functions(struct i915_drm_winsys *idws)
|
||||
idws->base.buffer_unmap = i915_drm_buffer_unmap;
|
||||
idws->base.buffer_write = i915_drm_buffer_write;
|
||||
idws->base.buffer_destroy = i915_drm_buffer_destroy;
|
||||
idws->base.buffer_is_busy = i915_drm_buffer_is_busy;
|
||||
}
|
||||
|
@@ -62,6 +62,8 @@ void r600_init_cs(struct r600_context *ctx)
|
||||
ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_CONTEXT_CONTROL, 1, 0);
|
||||
ctx->pm4[ctx->pm4_cdwords++] = 0x80000000;
|
||||
ctx->pm4[ctx->pm4_cdwords++] = 0x80000000;
|
||||
|
||||
ctx->init_dwords = ctx->pm4_cdwords;
|
||||
}
|
||||
|
||||
static void INLINE r600_context_update_fenced_list(struct r600_context *ctx)
|
||||
@@ -1496,7 +1498,7 @@ void r600_context_flush(struct r600_context *ctx)
|
||||
int r;
|
||||
struct r600_block *enable_block = NULL;
|
||||
|
||||
if (!ctx->pm4_cdwords)
|
||||
if (ctx->pm4_cdwords == ctx->init_dwords)
|
||||
return;
|
||||
|
||||
/* suspend queries */
|
||||
@@ -1563,7 +1565,7 @@ void r600_context_flush(struct r600_context *ctx)
|
||||
r600_init_cs(ctx);
|
||||
|
||||
/* resume queries */
|
||||
r600_context_queries_resume(ctx);
|
||||
r600_context_queries_resume(ctx, TRUE);
|
||||
|
||||
/* set all valid group as dirty so they get reemited on
|
||||
* next draw command
|
||||
@@ -1723,7 +1725,7 @@ static boolean r600_query_result(struct r600_context *ctx, struct r600_query *qu
|
||||
|
||||
void r600_query_begin(struct r600_context *ctx, struct r600_query *query)
|
||||
{
|
||||
unsigned required_space;
|
||||
unsigned required_space, required_buffer;
|
||||
int num_backends = r600_get_num_backends(ctx->radeon);
|
||||
|
||||
/* query request needs 6/8 dwords for begin + 6/8 dwords for end */
|
||||
@@ -1737,9 +1739,13 @@ void r600_query_begin(struct r600_context *ctx, struct r600_query *query)
|
||||
r600_context_flush(ctx);
|
||||
}
|
||||
|
||||
required_buffer = query->num_results +
|
||||
4 * (query->type == PIPE_QUERY_OCCLUSION_COUNTER ? ctx->max_db : 1);
|
||||
|
||||
/* if query buffer is full force a flush */
|
||||
if (query->num_results*4 >= query->buffer_size - 16) {
|
||||
r600_context_flush(ctx);
|
||||
if (required_buffer*4 > query->buffer_size) {
|
||||
if (!(query->state & R600_QUERY_STATE_FLUSHED))
|
||||
r600_context_flush(ctx);
|
||||
r600_query_result(ctx, query, TRUE);
|
||||
}
|
||||
|
||||
@@ -1749,9 +1755,9 @@ void r600_query_begin(struct r600_context *ctx, struct r600_query *query)
|
||||
u32 *results;
|
||||
int i;
|
||||
|
||||
results = r600_bo_map(ctx->radeon, query->buffer, PB_USAGE_DONTBLOCK | PB_USAGE_CPU_WRITE, NULL);
|
||||
results = r600_bo_map(ctx->radeon, query->buffer, PB_USAGE_CPU_WRITE, NULL);
|
||||
if (results) {
|
||||
memset(results + (query->num_results * 4), 0, ctx->max_db * 4 * 4);
|
||||
memset(results + query->num_results, 0, ctx->max_db * 4 * 4);
|
||||
|
||||
for (i = num_backends; i < ctx->max_db; i++) {
|
||||
results[(i * 4)+1] = 0x80000000;
|
||||
@@ -1807,6 +1813,7 @@ void r600_query_end(struct r600_context *ctx, struct r600_query *query)
|
||||
query->num_results += 4 * (query->type == PIPE_QUERY_OCCLUSION_COUNTER ? ctx->max_db : 1);
|
||||
query->state ^= R600_QUERY_STATE_STARTED;
|
||||
query->state |= R600_QUERY_STATE_ENDED;
|
||||
query->state &= ~R600_QUERY_STATE_FLUSHED;
|
||||
ctx->num_query_running--;
|
||||
}
|
||||
|
||||
@@ -1875,7 +1882,7 @@ boolean r600_context_query_result(struct r600_context *ctx,
|
||||
{
|
||||
uint64_t *result = (uint64_t*)vresult;
|
||||
|
||||
if (query->num_results) {
|
||||
if (query->num_results && !(query->state & R600_QUERY_STATE_FLUSHED)) {
|
||||
r600_context_flush(ctx);
|
||||
}
|
||||
if (!r600_query_result(ctx, query, wait))
|
||||
@@ -1900,7 +1907,7 @@ void r600_context_queries_suspend(struct r600_context *ctx)
|
||||
}
|
||||
}
|
||||
|
||||
void r600_context_queries_resume(struct r600_context *ctx)
|
||||
void r600_context_queries_resume(struct r600_context *ctx, boolean flushed)
|
||||
{
|
||||
struct r600_query *query;
|
||||
|
||||
@@ -1908,6 +1915,7 @@ void r600_context_queries_resume(struct r600_context *ctx)
|
||||
if (query->state & R600_QUERY_STATE_SUSPENDED) {
|
||||
r600_query_begin(ctx, query);
|
||||
query->state ^= R600_QUERY_STATE_SUSPENDED;
|
||||
}
|
||||
} else if (flushed && query->state==R600_QUERY_STATE_ENDED)
|
||||
query->state |= R600_QUERY_STATE_FLUSHED;
|
||||
}
|
||||
}
|
||||
|
@@ -54,10 +54,8 @@ struct fbdev_sw_winsys
|
||||
struct sw_winsys base;
|
||||
|
||||
int fd;
|
||||
enum pipe_format format;
|
||||
|
||||
struct fb_fix_screeninfo finfo;
|
||||
void *fbmem;
|
||||
unsigned rows;
|
||||
unsigned stride;
|
||||
};
|
||||
@@ -77,22 +75,53 @@ fbdev_sw_winsys(struct sw_winsys *ws)
|
||||
static void
|
||||
fbdev_displaytarget_display(struct sw_winsys *ws,
|
||||
struct sw_displaytarget *dt,
|
||||
void *context_private)
|
||||
void *winsys_private)
|
||||
{
|
||||
struct fbdev_sw_winsys *fbdev = fbdev_sw_winsys(ws);
|
||||
struct fbdev_sw_displaytarget *fbdt = fbdev_sw_displaytarget(dt);
|
||||
unsigned rows, len, i;
|
||||
struct fbdev_sw_displaytarget *src = fbdev_sw_displaytarget(dt);
|
||||
const struct fbdev_sw_drawable *dst =
|
||||
(const struct fbdev_sw_drawable *) winsys_private;
|
||||
unsigned height, row_offset, row_len, i;
|
||||
void *fbmem;
|
||||
|
||||
rows = MIN2(fbdt->height, fbdev->rows);
|
||||
len = util_format_get_stride(fbdt->format, fbdt->width);
|
||||
len = MIN2(len, fbdev->stride);
|
||||
|
||||
for (i = 0; i < rows; i++) {
|
||||
void *dst = fbdev->fbmem + fbdev->stride * i;
|
||||
void *src = fbdt->data + fbdt->stride * i;
|
||||
|
||||
memcpy(dst, src, len);
|
||||
/* FIXME format conversion */
|
||||
if (dst->format != src->format) {
|
||||
assert(0);
|
||||
return;
|
||||
}
|
||||
|
||||
height = dst->height;
|
||||
if (dst->y + dst->height > fbdev->rows) {
|
||||
/* nothing to copy */
|
||||
if (dst->y >= fbdev->rows)
|
||||
return;
|
||||
|
||||
height = fbdev->rows - dst->y;
|
||||
}
|
||||
|
||||
row_offset = util_format_get_stride(dst->format, dst->x);
|
||||
row_len = util_format_get_stride(dst->format, dst->width);
|
||||
if (row_offset + row_len > fbdev->stride) {
|
||||
/* nothing to copy */
|
||||
if (row_offset >= fbdev->stride)
|
||||
return;
|
||||
|
||||
row_len = fbdev->stride - row_offset;
|
||||
}
|
||||
|
||||
fbmem = mmap(0, fbdev->finfo.smem_len,
|
||||
PROT_WRITE, MAP_SHARED, fbdev->fd, 0);
|
||||
if (fbmem == MAP_FAILED)
|
||||
return;
|
||||
|
||||
for (i = 0; i < height; i++) {
|
||||
char *from = (char *) src->data + src->stride * i;
|
||||
char *to = (char *) fbmem + fbdev->stride * (dst->y + i) + row_offset;
|
||||
|
||||
memcpy(to, from, row_len);
|
||||
}
|
||||
|
||||
munmap(fbmem, fbdev->finfo.smem_len);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -133,13 +162,9 @@ fbdev_displaytarget_create(struct sw_winsys *ws,
|
||||
unsigned alignment,
|
||||
unsigned *stride)
|
||||
{
|
||||
struct fbdev_sw_winsys *fbdev = fbdev_sw_winsys(ws);
|
||||
struct fbdev_sw_displaytarget *fbdt;
|
||||
unsigned nblocksy, size, format_stride;
|
||||
|
||||
if (fbdev->format != format)
|
||||
return NULL;
|
||||
|
||||
fbdt = CALLOC_STRUCT(fbdev_sw_displaytarget);
|
||||
if (!fbdt)
|
||||
return NULL;
|
||||
@@ -170,8 +195,7 @@ fbdev_is_displaytarget_format_supported(struct sw_winsys *ws,
|
||||
unsigned tex_usage,
|
||||
enum pipe_format format)
|
||||
{
|
||||
struct fbdev_sw_winsys *fbdev = fbdev_sw_winsys(ws);
|
||||
return (fbdev->format == format);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -179,12 +203,11 @@ fbdev_destroy(struct sw_winsys *ws)
|
||||
{
|
||||
struct fbdev_sw_winsys *fbdev = fbdev_sw_winsys(ws);
|
||||
|
||||
munmap(fbdev->fbmem, fbdev->finfo.smem_len);
|
||||
FREE(fbdev);
|
||||
}
|
||||
|
||||
struct sw_winsys *
|
||||
fbdev_create_sw_winsys(int fd, enum pipe_format format)
|
||||
fbdev_create_sw_winsys(int fd)
|
||||
{
|
||||
struct fbdev_sw_winsys *fbdev;
|
||||
|
||||
@@ -193,19 +216,11 @@ fbdev_create_sw_winsys(int fd, enum pipe_format format)
|
||||
return NULL;
|
||||
|
||||
fbdev->fd = fd;
|
||||
fbdev->format = format;
|
||||
if (ioctl(fbdev->fd, FBIOGET_FSCREENINFO, &fbdev->finfo)) {
|
||||
FREE(fbdev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fbdev->fbmem = mmap(0, fbdev->finfo.smem_len,
|
||||
PROT_WRITE, MAP_SHARED, fbdev->fd, 0);
|
||||
if (fbdev->fbmem == MAP_FAILED) {
|
||||
FREE(fbdev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fbdev->rows = fbdev->finfo.smem_len / fbdev->finfo.line_length;
|
||||
fbdev->stride = fbdev->finfo.line_length;
|
||||
|
||||
|
@@ -32,7 +32,14 @@
|
||||
struct sw_winsys;
|
||||
enum pipe_format;
|
||||
|
||||
/* for pipe_screen::flush_frontbuffer */
|
||||
struct fbdev_sw_drawable {
|
||||
enum pipe_format format;
|
||||
unsigned x, y;
|
||||
unsigned width, height;
|
||||
};
|
||||
|
||||
struct sw_winsys *
|
||||
fbdev_create_sw_winsys(int fd, enum pipe_format format);
|
||||
fbdev_create_sw_winsys(int fd);
|
||||
|
||||
#endif /* FBDEV_SW_WINSYS */
|
||||
|
@@ -1940,7 +1940,7 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
|
||||
break;
|
||||
|
||||
case fragment_shader:
|
||||
if (!global_scope || (var->mode != ir_var_in)) {
|
||||
if (!global_scope || (var->mode != ir_var_out)) {
|
||||
fail = true;
|
||||
string = "output";
|
||||
}
|
||||
|
@@ -96,6 +96,16 @@ void ir_print_visitor::indent(void)
|
||||
const char *
|
||||
ir_print_visitor::unique_name(ir_variable *var)
|
||||
{
|
||||
/* var->name can be NULL in function prototypes when a type is given for a
|
||||
* parameter but no name is given. In that case, just return an empty
|
||||
* string. Don't worry about tracking the generated name in the printable
|
||||
* names hash because this is the only scope where it can ever appear.
|
||||
*/
|
||||
if (var->name == NULL) {
|
||||
static unsigned arg = 1;
|
||||
return ralloc_asprintf(this->mem_ctx, "parameter@%u", arg++);
|
||||
}
|
||||
|
||||
/* Do we already have a name for this variable? */
|
||||
const char *name = (const char *) hash_table_find(this->printable_names, var);
|
||||
if (name != NULL)
|
||||
|
@@ -1194,16 +1194,43 @@ find_available_slots(unsigned used_mask, unsigned needed_count)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Assign locations for either VS inputs for FS outputs
|
||||
*
|
||||
* \param prog Shader program whose variables need locations assigned
|
||||
* \param target_index Selector for the program target to receive location
|
||||
* assignmnets. Must be either \c MESA_SHADER_VERTEX or
|
||||
* \c MESA_SHADER_FRAGMENT.
|
||||
* \param max_index Maximum number of generic locations. This corresponds
|
||||
* to either the maximum number of draw buffers or the
|
||||
* maximum number of generic attributes.
|
||||
*
|
||||
* \return
|
||||
* If locations are successfully assigned, true is returned. Otherwise an
|
||||
* error is emitted to the shader link log and false is returned.
|
||||
*
|
||||
* \bug
|
||||
* Locations set via \c glBindFragDataLocation are not currently supported.
|
||||
* Only locations assigned automatically by the linker, explicitly set by a
|
||||
* layout qualifier, or explicitly set by a built-in variable (e.g., \c
|
||||
* gl_FragColor) are supported for fragment shaders.
|
||||
*/
|
||||
bool
|
||||
assign_attribute_locations(gl_shader_program *prog, unsigned max_attribute_index)
|
||||
assign_attribute_or_color_locations(gl_shader_program *prog,
|
||||
unsigned target_index,
|
||||
unsigned max_index)
|
||||
{
|
||||
/* Mark invalid attribute locations as being used.
|
||||
/* Mark invalid locations as being used.
|
||||
*/
|
||||
unsigned used_locations = (max_attribute_index >= 32)
|
||||
? ~0 : ~((1 << max_attribute_index) - 1);
|
||||
unsigned used_locations = (max_index >= 32)
|
||||
? ~0 : ~((1 << max_index) - 1);
|
||||
|
||||
gl_shader *const sh = prog->_LinkedShaders[0];
|
||||
assert(sh->Type == GL_VERTEX_SHADER);
|
||||
assert((target_index == MESA_SHADER_VERTEX)
|
||||
|| (target_index == MESA_SHADER_FRAGMENT));
|
||||
|
||||
gl_shader *const sh = prog->_LinkedShaders[target_index];
|
||||
if (sh == NULL)
|
||||
return true;
|
||||
|
||||
/* Operate in a total of four passes.
|
||||
*
|
||||
@@ -1220,9 +1247,16 @@ assign_attribute_locations(gl_shader_program *prog, unsigned max_attribute_index
|
||||
* 4. Assign locations to any inputs without assigned locations.
|
||||
*/
|
||||
|
||||
invalidate_variable_locations(sh, ir_var_in, VERT_ATTRIB_GENERIC0);
|
||||
const int generic_base = (target_index == MESA_SHADER_VERTEX)
|
||||
? (int) VERT_ATTRIB_GENERIC0 : (int) FRAG_RESULT_DATA0;
|
||||
|
||||
if (prog->Attributes != NULL) {
|
||||
const enum ir_variable_mode direction =
|
||||
(target_index == MESA_SHADER_VERTEX) ? ir_var_in : ir_var_out;
|
||||
|
||||
|
||||
invalidate_variable_locations(sh, direction, generic_base);
|
||||
|
||||
if ((target_index == MESA_SHADER_VERTEX) && (prog->Attributes != NULL)) {
|
||||
for (unsigned i = 0; i < prog->Attributes->NumParameters; i++) {
|
||||
ir_variable *const var =
|
||||
sh->symbols->get_variable(prog->Attributes->Parameters[i].Name);
|
||||
@@ -1309,15 +1343,15 @@ assign_attribute_locations(gl_shader_program *prog, unsigned max_attribute_index
|
||||
foreach_list(node, sh->ir) {
|
||||
ir_variable *const var = ((ir_instruction *) node)->as_variable();
|
||||
|
||||
if ((var == NULL) || (var->mode != ir_var_in))
|
||||
if ((var == NULL) || (var->mode != direction))
|
||||
continue;
|
||||
|
||||
if (var->explicit_location) {
|
||||
const unsigned slots = count_attribute_slots(var->type);
|
||||
const unsigned use_mask = (1 << slots) - 1;
|
||||
const int attr = var->location - VERT_ATTRIB_GENERIC0;
|
||||
const int attr = var->location - generic_base;
|
||||
|
||||
if ((var->location >= (int)(max_attribute_index + VERT_ATTRIB_GENERIC0))
|
||||
if ((var->location >= (int)(max_index + generic_base))
|
||||
|| (var->location < 0)) {
|
||||
linker_error_printf(prog,
|
||||
"invalid explicit location %d specified for "
|
||||
@@ -1325,7 +1359,7 @@ assign_attribute_locations(gl_shader_program *prog, unsigned max_attribute_index
|
||||
(var->location < 0) ? var->location : attr,
|
||||
var->name);
|
||||
return false;
|
||||
} else if (var->location >= VERT_ATTRIB_GENERIC0) {
|
||||
} else if (var->location >= generic_base) {
|
||||
used_locations |= (use_mask << attr);
|
||||
}
|
||||
}
|
||||
@@ -1349,14 +1383,16 @@ assign_attribute_locations(gl_shader_program *prog, unsigned max_attribute_index
|
||||
|
||||
qsort(to_assign, num_attr, sizeof(to_assign[0]), temp_attr::compare);
|
||||
|
||||
/* VERT_ATTRIB_GENERIC0 is a pseudo-alias for VERT_ATTRIB_POS. It can only
|
||||
* be explicitly assigned by via glBindAttribLocation. Mark it as reserved
|
||||
* to prevent it from being automatically allocated below.
|
||||
*/
|
||||
find_deref_visitor find("gl_Vertex");
|
||||
find.run(sh->ir);
|
||||
if (find.variable_found())
|
||||
used_locations |= (1 << 0);
|
||||
if (target_index == MESA_SHADER_VERTEX) {
|
||||
/* VERT_ATTRIB_GENERIC0 is a pseudo-alias for VERT_ATTRIB_POS. It can
|
||||
* only be explicitly assigned by via glBindAttribLocation. Mark it as
|
||||
* reserved to prevent it from being automatically allocated below.
|
||||
*/
|
||||
find_deref_visitor find("gl_Vertex");
|
||||
find.run(sh->ir);
|
||||
if (find.variable_found())
|
||||
used_locations |= (1 << 0);
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < num_attr; i++) {
|
||||
/* Mask representing the contiguous slots that will be used by this
|
||||
@@ -1367,14 +1403,17 @@ assign_attribute_locations(gl_shader_program *prog, unsigned max_attribute_index
|
||||
int location = find_available_slots(used_locations, to_assign[i].slots);
|
||||
|
||||
if (location < 0) {
|
||||
const char *const string = (target_index == MESA_SHADER_VERTEX)
|
||||
? "vertex shader input" : "fragment shader output";
|
||||
|
||||
linker_error_printf(prog,
|
||||
"insufficient contiguous attribute locations "
|
||||
"available for vertex shader input `%s'",
|
||||
to_assign[i].var->name);
|
||||
"available for %s `%s'",
|
||||
string, to_assign[i].var->name);
|
||||
return false;
|
||||
}
|
||||
|
||||
to_assign[i].var->location = VERT_ATTRIB_GENERIC0 + location;
|
||||
to_assign[i].var->location = generic_base + location;
|
||||
used_locations |= (use_mask << location);
|
||||
}
|
||||
|
||||
@@ -1671,16 +1710,19 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
|
||||
|
||||
assign_uniform_locations(prog);
|
||||
|
||||
if (prog->_LinkedShaders[MESA_SHADER_VERTEX] != NULL) {
|
||||
/* FINISHME: The value of the max_attribute_index parameter is
|
||||
* FINISHME: implementation dependent based on the value of
|
||||
* FINISHME: GL_MAX_VERTEX_ATTRIBS. GL_MAX_VERTEX_ATTRIBS must be
|
||||
* FINISHME: at least 16, so hardcode 16 for now.
|
||||
*/
|
||||
if (!assign_attribute_locations(prog, 16)) {
|
||||
prog->LinkStatus = false;
|
||||
goto done;
|
||||
}
|
||||
/* FINISHME: The value of the max_attribute_index parameter is
|
||||
* FINISHME: implementation dependent based on the value of
|
||||
* FINISHME: GL_MAX_VERTEX_ATTRIBS. GL_MAX_VERTEX_ATTRIBS must be
|
||||
* FINISHME: at least 16, so hardcode 16 for now.
|
||||
*/
|
||||
if (!assign_attribute_or_color_locations(prog, MESA_SHADER_VERTEX, 16)) {
|
||||
prog->LinkStatus = false;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!assign_attribute_or_color_locations(prog, MESA_SHADER_FRAGMENT, ctx->Const.MaxDrawBuffers)) {
|
||||
prog->LinkStatus = false;
|
||||
goto done;
|
||||
}
|
||||
|
||||
unsigned prev;
|
||||
|
@@ -149,11 +149,9 @@ ir_visitor_status
|
||||
ir_if_to_cond_assign_visitor::visit_leave(ir_if *ir)
|
||||
{
|
||||
/* Only flatten when beyond the GPU's maximum supported nesting depth. */
|
||||
if (this->depth <= this->max_depth)
|
||||
if (this->depth-- <= this->max_depth)
|
||||
return visit_continue;
|
||||
|
||||
this->depth--;
|
||||
|
||||
bool found_control_flow = false;
|
||||
ir_variable *cond_var;
|
||||
ir_assignment *assign;
|
||||
|
@@ -51,11 +51,23 @@ public:
|
||||
this->var = var;
|
||||
this->write_mask = write_mask;
|
||||
this->constant = constant;
|
||||
this->initial_values = write_mask;
|
||||
}
|
||||
|
||||
acp_entry(const acp_entry *src)
|
||||
{
|
||||
this->var = src->var;
|
||||
this->write_mask = src->write_mask;
|
||||
this->constant = src->constant;
|
||||
this->initial_values = src->initial_values;
|
||||
}
|
||||
|
||||
ir_variable *var;
|
||||
ir_constant *constant;
|
||||
unsigned write_mask;
|
||||
|
||||
/** Mask of values initially available in the constant. */
|
||||
unsigned initial_values;
|
||||
};
|
||||
|
||||
|
||||
@@ -172,7 +184,7 @@ ir_constant_propagation_visitor::handle_rvalue(ir_rvalue **rvalue)
|
||||
for (int j = 0; j < 4; j++) {
|
||||
if (j == channel)
|
||||
break;
|
||||
if (found->write_mask & (1 << j))
|
||||
if (found->initial_values & (1 << j))
|
||||
rhs_channel++;
|
||||
}
|
||||
|
||||
@@ -285,8 +297,7 @@ ir_constant_propagation_visitor::handle_if_block(exec_list *instructions)
|
||||
/* Populate the initial acp with a constant of the original */
|
||||
foreach_iter(exec_list_iterator, iter, *orig_acp) {
|
||||
acp_entry *a = (acp_entry *)iter.get();
|
||||
this->acp->push_tail(new(this->mem_ctx) acp_entry(a->var, a->write_mask,
|
||||
a->constant));
|
||||
this->acp->push_tail(new(this->mem_ctx) acp_entry(a));
|
||||
}
|
||||
|
||||
visit_list_elements(this, instructions);
|
||||
|
@@ -78,7 +78,7 @@ upload_urb(struct brw_context *brw)
|
||||
assert(brw->urb.nr_vs_entries % 8 == 0);
|
||||
assert(brw->urb.nr_gs_entries % 8 == 0);
|
||||
/* GS requirement */
|
||||
assert(brw->gs.prog_active);
|
||||
assert(!brw->gs.prog_active);
|
||||
|
||||
BEGIN_BATCH(2);
|
||||
OUT_BATCH(_3DSTATE_PUSH_CONSTANT_ALLOC_VS << 16 | (2 - 2));
|
||||
|
@@ -175,7 +175,7 @@ do_blit_bitmap( struct gl_context *ctx,
|
||||
const GLubyte *bitmap )
|
||||
{
|
||||
struct intel_context *intel = intel_context(ctx);
|
||||
struct intel_region *dst = intel_drawbuf_region(intel);
|
||||
struct intel_region *dst;
|
||||
struct gl_framebuffer *fb = ctx->DrawBuffer;
|
||||
GLfloat tmpColor[4];
|
||||
GLubyte ubcolor[4];
|
||||
@@ -198,6 +198,9 @@ do_blit_bitmap( struct gl_context *ctx,
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
intel_prepare_render(intel);
|
||||
dst = intel_drawbuf_region(intel);
|
||||
|
||||
if (!dst)
|
||||
return GL_FALSE;
|
||||
|
||||
@@ -226,8 +229,6 @@ do_blit_bitmap( struct gl_context *ctx,
|
||||
if (!intel_check_blit_fragment_ops(ctx, tmpColor[3] == 1.0F))
|
||||
return GL_FALSE;
|
||||
|
||||
intel_prepare_render(intel);
|
||||
|
||||
/* Clip to buffer bounds and scissor. */
|
||||
if (!_mesa_clip_to_region(fb->_Xmin, fb->_Ymin,
|
||||
fb->_Xmax, fb->_Ymax,
|
||||
|
@@ -233,17 +233,10 @@ choose_pixel_format(const struct gl_config *v)
|
||||
&& v->blueMask == 0x0000ff)
|
||||
return PF_A8R8G8B8;
|
||||
else if (depth == 24
|
||||
&& v->depthBits == 32
|
||||
&& v->redMask == 0xff0000
|
||||
&& v->greenMask == 0x00ff00
|
||||
&& v->blueMask == 0x0000ff)
|
||||
return PF_X8R8G8B8;
|
||||
else if (depth == 24
|
||||
&& v->depthBits == 24
|
||||
&& v->redMask == 0xff0000
|
||||
&& v->greenMask == 0x00ff00
|
||||
&& v->blueMask == 0x0000ff)
|
||||
return PF_R8G8B8;
|
||||
&& v->redMask == 0xff0000
|
||||
&& v->greenMask == 0x00ff00
|
||||
&& v->blueMask == 0x0000ff)
|
||||
return PF_X8R8G8B8;
|
||||
else if (depth == 16
|
||||
&& v->redMask == 0xf800
|
||||
&& v->greenMask == 0x07e0
|
||||
@@ -351,13 +344,6 @@ swrast_new_renderbuffer(const struct gl_config *visual, GLboolean front)
|
||||
xrb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
xrb->bpp = 32;
|
||||
break;
|
||||
case PF_R8G8B8:
|
||||
xrb->Base.Format = MESA_FORMAT_RGB888;
|
||||
xrb->Base.InternalFormat = GL_RGB;
|
||||
xrb->Base._BaseFormat = GL_RGB;
|
||||
xrb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
xrb->bpp = 24;
|
||||
break;
|
||||
case PF_R5G6B5:
|
||||
xrb->Base.Format = MESA_FORMAT_RGB565;
|
||||
xrb->Base.InternalFormat = GL_RGB;
|
||||
|
@@ -123,7 +123,6 @@ swrast_renderbuffer(struct gl_renderbuffer *rb)
|
||||
#define PF_R5G6B5 2 /**< 16bpp TrueColor: 5-R, 6-G, 5-B bits */
|
||||
#define PF_R3G3B2 3 /**< 8bpp TrueColor: 3-R, 3-G, 2-B bits */
|
||||
#define PF_X8R8G8B8 4 /**< 32bpp TrueColor: 8-R, 8-G, 8-B bits */
|
||||
#define PF_R8G8B8 5 /**< 24bpp TrueColor: 8-R, 8-G, 8-B bits */
|
||||
|
||||
|
||||
/* swrast_span.c */
|
||||
|
@@ -81,22 +81,6 @@ static const GLubyte kernel[16] = {
|
||||
DST[BCOMP] = *SRC & 0xff
|
||||
|
||||
|
||||
/* 24-bit BGR */
|
||||
#define STORE_PIXEL_R8G8B8(DST, X, Y, VALUE) \
|
||||
DST[2] = VALUE[RCOMP]; \
|
||||
DST[1] = VALUE[GCOMP]; \
|
||||
DST[0] = VALUE[BCOMP]
|
||||
#define STORE_PIXEL_RGB_R8G8B8(DST, X, Y, VALUE) \
|
||||
DST[2] = VALUE[RCOMP]; \
|
||||
DST[1] = VALUE[GCOMP]; \
|
||||
DST[0] = VALUE[BCOMP]
|
||||
#define FETCH_PIXEL_R8G8B8(DST, SRC) \
|
||||
DST[ACOMP] = 0xff; \
|
||||
DST[RCOMP] = (*SRC >> 16) & 0xff; \
|
||||
DST[GCOMP] = (*SRC >> 8) & 0xff; \
|
||||
DST[BCOMP] = *SRC & 0xff
|
||||
|
||||
|
||||
/* 16-bit BGR */
|
||||
#define STORE_PIXEL_R5G6B5(DST, X, Y, VALUE) \
|
||||
do { \
|
||||
@@ -173,24 +157,6 @@ static const GLubyte kernel[16] = {
|
||||
#include "swrast/s_spantemp.h"
|
||||
|
||||
|
||||
/* 24-bit BGR */
|
||||
#define NAME(FUNC) FUNC##_R8G8B8
|
||||
#define RB_TYPE GLubyte
|
||||
#define SPAN_VARS \
|
||||
struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb);
|
||||
#define INIT_PIXEL_PTR(P, X, Y) \
|
||||
GLubyte *P = (GLubyte *)xrb->Base.Data + YFLIP(xrb, Y) * xrb->pitch + (3*X);
|
||||
#define INC_PIXEL_PTR(P) P+=3
|
||||
#define STORE_PIXEL(DST, X, Y, VALUE) \
|
||||
STORE_PIXEL_R8G8B8(DST, X, Y, VALUE)
|
||||
#define STORE_PIXEL_RGB(DST, X, Y, VALUE) \
|
||||
STORE_PIXEL_RGB_R8G8B8(DST, X, Y, VALUE)
|
||||
#define FETCH_PIXEL(DST, SRC) \
|
||||
FETCH_PIXEL_R8G8B8(DST, SRC)
|
||||
|
||||
#include "swrast/s_spantemp.h"
|
||||
|
||||
|
||||
/* 16-bit BGR */
|
||||
#define NAME(FUNC) FUNC##_R5G6B5
|
||||
#define RB_TYPE GLubyte
|
||||
@@ -263,24 +229,6 @@ static const GLubyte kernel[16] = {
|
||||
#include "swrast_spantemp.h"
|
||||
|
||||
|
||||
/* 24-bit BGR */
|
||||
#define NAME(FUNC) FUNC##_R8G8B8_front
|
||||
#define RB_TYPE GLubyte
|
||||
#define SPAN_VARS \
|
||||
struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb);
|
||||
#define INIT_PIXEL_PTR(P, X, Y) \
|
||||
GLubyte *P = (GLubyte *)row;
|
||||
#define INC_PIXEL_PTR(P) P+=3
|
||||
#define STORE_PIXEL(DST, X, Y, VALUE) \
|
||||
STORE_PIXEL_R8G8B8(DST, X, Y, VALUE)
|
||||
#define STORE_PIXEL_RGB(DST, X, Y, VALUE) \
|
||||
STORE_PIXEL_RGB_R8G8B8(DST, X, Y, VALUE)
|
||||
#define FETCH_PIXEL(DST, SRC) \
|
||||
FETCH_PIXEL_R8G8B8(DST, SRC)
|
||||
|
||||
#include "swrast_spantemp.h"
|
||||
|
||||
|
||||
/* 16-bit BGR */
|
||||
#define NAME(FUNC) FUNC##_R5G6B5_front
|
||||
#define RB_TYPE GLubyte
|
||||
@@ -342,15 +290,6 @@ swrast_set_span_funcs_back(struct swrast_renderbuffer *xrb,
|
||||
xrb->Base.PutValues = put_values_X8R8G8B8;
|
||||
xrb->Base.PutMonoValues = put_mono_values_X8R8G8B8;
|
||||
break;
|
||||
case PF_R8G8B8:
|
||||
xrb->Base.GetRow = get_row_R8G8B8;
|
||||
xrb->Base.GetValues = get_values_R8G8B8;
|
||||
xrb->Base.PutRow = put_row_R8G8B8;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_R8G8B8;
|
||||
xrb->Base.PutMonoRow = put_mono_row_R8G8B8;
|
||||
xrb->Base.PutValues = put_values_R8G8B8;
|
||||
xrb->Base.PutMonoValues = put_mono_values_R8G8B8;
|
||||
break;
|
||||
case PF_R5G6B5:
|
||||
xrb->Base.GetRow = get_row_R5G6B5;
|
||||
xrb->Base.GetValues = get_values_R5G6B5;
|
||||
@@ -407,15 +346,6 @@ swrast_set_span_funcs_front(struct swrast_renderbuffer *xrb,
|
||||
xrb->Base.PutValues = put_values_X8R8G8B8_front;
|
||||
xrb->Base.PutMonoValues = put_mono_values_X8R8G8B8_front;
|
||||
break;
|
||||
case PF_R8G8B8:
|
||||
xrb->Base.GetRow = get_row_R8G8B8_front;
|
||||
xrb->Base.GetValues = get_values_R8G8B8_front;
|
||||
xrb->Base.PutRow = put_row_R8G8B8_front;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_R8G8B8_front;
|
||||
xrb->Base.PutMonoRow = put_mono_row_R8G8B8_front;
|
||||
xrb->Base.PutValues = put_values_R8G8B8_front;
|
||||
xrb->Base.PutMonoValues = put_mono_values_R8G8B8_front;
|
||||
break;
|
||||
case PF_R5G6B5:
|
||||
xrb->Base.GetRow = get_row_R5G6B5_front;
|
||||
xrb->Base.GetValues = get_values_R5G6B5_front;
|
||||
|
@@ -35,7 +35,7 @@ struct gl_context;
|
||||
#define MESA_MAJOR 7
|
||||
#define MESA_MINOR 11
|
||||
#define MESA_PATCH 0
|
||||
#define MESA_VERSION_STRING "7.11-devel"
|
||||
#define MESA_VERSION_STRING "7.11-rc1"
|
||||
|
||||
/* To make version comparison easy */
|
||||
#define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
|
||||
|
@@ -803,48 +803,44 @@ ir_to_mesa_visitor::visit(ir_loop *ir)
|
||||
ir_dereference_variable *counter = NULL;
|
||||
|
||||
if (ir->counter != NULL)
|
||||
counter = new(ir) ir_dereference_variable(ir->counter);
|
||||
counter = new(mem_ctx) ir_dereference_variable(ir->counter);
|
||||
|
||||
if (ir->from != NULL) {
|
||||
assert(ir->counter != NULL);
|
||||
|
||||
ir_assignment *a = new(ir) ir_assignment(counter, ir->from, NULL);
|
||||
ir_assignment *a =
|
||||
new(mem_ctx) ir_assignment(counter, ir->from, NULL);
|
||||
|
||||
a->accept(this);
|
||||
delete a;
|
||||
}
|
||||
|
||||
emit(NULL, OPCODE_BGNLOOP);
|
||||
|
||||
if (ir->to) {
|
||||
ir_expression *e =
|
||||
new(ir) ir_expression(ir->cmp, glsl_type::bool_type,
|
||||
counter, ir->to);
|
||||
ir_if *if_stmt = new(ir) ir_if(e);
|
||||
new(mem_ctx) ir_expression(ir->cmp, glsl_type::bool_type,
|
||||
counter, ir->to);
|
||||
ir_if *if_stmt = new(mem_ctx) ir_if(e);
|
||||
|
||||
ir_loop_jump *brk = new(ir) ir_loop_jump(ir_loop_jump::jump_break);
|
||||
ir_loop_jump *brk =
|
||||
new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break);
|
||||
|
||||
if_stmt->then_instructions.push_tail(brk);
|
||||
|
||||
if_stmt->accept(this);
|
||||
|
||||
delete if_stmt;
|
||||
delete e;
|
||||
delete brk;
|
||||
}
|
||||
|
||||
visit_exec_list(&ir->body_instructions, this);
|
||||
|
||||
if (ir->increment) {
|
||||
ir_expression *e =
|
||||
new(ir) ir_expression(ir_binop_add, counter->type,
|
||||
counter, ir->increment);
|
||||
new(mem_ctx) ir_expression(ir_binop_add, counter->type,
|
||||
counter, ir->increment);
|
||||
|
||||
ir_assignment *a = new(ir) ir_assignment(counter, e, NULL);
|
||||
ir_assignment *a =
|
||||
new(mem_ctx) ir_assignment(counter, e, NULL);
|
||||
|
||||
a->accept(this);
|
||||
delete a;
|
||||
delete e;
|
||||
}
|
||||
|
||||
emit(NULL, OPCODE_ENDLOOP);
|
||||
|
@@ -1400,14 +1400,14 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint srcy,
|
||||
/* srcFormat can't be used as a texture format */
|
||||
if (type == GL_DEPTH) {
|
||||
texFormat = st_choose_format(screen, GL_DEPTH_COMPONENT,
|
||||
st->internal_target, GL_NONE, GL_NONE,
|
||||
GL_NONE, GL_NONE, st->internal_target,
|
||||
sample_count, PIPE_BIND_DEPTH_STENCIL);
|
||||
assert(texFormat != PIPE_FORMAT_NONE);
|
||||
}
|
||||
else {
|
||||
/* default color format */
|
||||
texFormat = st_choose_format(screen, GL_RGBA,
|
||||
st->internal_target, GL_NONE, GL_NONE,
|
||||
GL_NONE, GL_NONE, st->internal_target,
|
||||
sample_count, PIPE_BIND_SAMPLER_VIEW);
|
||||
assert(texFormat != PIPE_FORMAT_NONE);
|
||||
}
|
||||
|
@@ -842,7 +842,7 @@ decompress_with_blit(struct gl_context * ctx, GLenum target, GLint level,
|
||||
else {
|
||||
/* format translation via floats */
|
||||
GLuint row;
|
||||
enum pipe_format format = util_format_linear(dst_texture->format);
|
||||
enum pipe_format pformat = util_format_linear(dst_texture->format);
|
||||
for (row = 0; row < height; row++) {
|
||||
const GLbitfield transferOps = 0x0; /* bypassed for glGetTexImage() */
|
||||
GLfloat rgba[4 * MAX_WIDTH];
|
||||
@@ -854,7 +854,7 @@ decompress_with_blit(struct gl_context * ctx, GLenum target, GLint level,
|
||||
|
||||
/* get float[4] rgba row from surface */
|
||||
pipe_get_tile_rgba_format(pipe, tex_xfer, 0, row, width, 1,
|
||||
format, rgba);
|
||||
pformat, rgba);
|
||||
|
||||
_mesa_pack_rgba_span_float(ctx, width, (GLfloat (*)[4]) rgba, format,
|
||||
type, dest, &ctx->Pack, transferOps);
|
||||
|
@@ -68,15 +68,27 @@ GLenum
|
||||
st_format_datatype(enum pipe_format format)
|
||||
{
|
||||
const struct util_format_description *desc;
|
||||
int i;
|
||||
|
||||
desc = util_format_description(format);
|
||||
assert(desc);
|
||||
|
||||
/* Find the first non-VOID channel. */
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN) {
|
||||
if (format == PIPE_FORMAT_B5G5R5A1_UNORM ||
|
||||
format == PIPE_FORMAT_B5G6R5_UNORM) {
|
||||
return GL_UNSIGNED_SHORT;
|
||||
}
|
||||
else if (format == PIPE_FORMAT_R11G11B10_FLOAT ||
|
||||
format == PIPE_FORMAT_R9G9B9E5_FLOAT) {
|
||||
return GL_FLOAT;
|
||||
}
|
||||
else if (format == PIPE_FORMAT_Z24_UNORM_S8_USCALED ||
|
||||
format == PIPE_FORMAT_S8_USCALED_Z24_UNORM ||
|
||||
format == PIPE_FORMAT_Z24X8_UNORM ||
|
||||
@@ -85,25 +97,38 @@ st_format_datatype(enum pipe_format format)
|
||||
}
|
||||
else {
|
||||
const GLuint size = format_max_bits(format);
|
||||
|
||||
assert(i < 4);
|
||||
if (i == 4)
|
||||
return GL_NONE;
|
||||
|
||||
if (size == 8) {
|
||||
if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED)
|
||||
if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED)
|
||||
return GL_UNSIGNED_BYTE;
|
||||
else
|
||||
return GL_BYTE;
|
||||
}
|
||||
else if (size == 16) {
|
||||
if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED)
|
||||
if (desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT)
|
||||
return GL_HALF_FLOAT;
|
||||
if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED)
|
||||
return GL_UNSIGNED_SHORT;
|
||||
else
|
||||
return GL_SHORT;
|
||||
}
|
||||
else {
|
||||
assert( size <= 32 );
|
||||
if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED)
|
||||
else if (size <= 32) {
|
||||
if (desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT)
|
||||
return GL_FLOAT;
|
||||
if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED)
|
||||
return GL_UNSIGNED_INT;
|
||||
else
|
||||
return GL_INT;
|
||||
}
|
||||
else {
|
||||
assert(size == 64);
|
||||
assert(desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT);
|
||||
return GL_DOUBLE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (format == PIPE_FORMAT_UYVY) {
|
||||
|
Reference in New Issue
Block a user