Compare commits
157 Commits
mesa-20.3.
...
intel-2012
Author | SHA1 | Date | |
---|---|---|---|
|
895a5873d1 | ||
|
4b507f809c | ||
|
94cc306e41 | ||
|
4be397e164 | ||
|
6a3c578dcd | ||
|
8d00f077c9 | ||
|
8aab8a50d3 | ||
|
cf7634d966 | ||
|
2a81037439 | ||
|
b565197c5c | ||
|
a5776ac0b8 | ||
|
79d9471efd | ||
|
0a72dbd350 | ||
|
5fe5aa8e55 | ||
|
8e01950625 | ||
|
95c47f07a1 | ||
|
77b1d2e09c | ||
|
8f772b34b0 | ||
|
3913cd19b8 | ||
|
d56ee24335 | ||
|
8dc79ae7d7 | ||
|
22b7ddc7f0 | ||
|
dc74c9d0f4 | ||
|
b4419477fb | ||
|
dee121b885 | ||
|
0c3c77ba17 | ||
|
0f5d87c3dd | ||
|
8e73273cb9 | ||
|
e75051d196 | ||
|
32faf7ab0d | ||
|
161aababc6 | ||
|
e5fdeef1e0 | ||
|
a8d0652c04 | ||
|
ad4b3b93de | ||
|
7851d398de | ||
|
19a15cd5ba | ||
|
c566267f5c | ||
|
8491e03b2b | ||
|
78c9adb17e | ||
|
e1cb50b15d | ||
|
c8fda5f44a | ||
|
542f6feda9 | ||
|
71b5503164 | ||
|
b2048c5e90 | ||
|
ddb9ecca3b | ||
|
76732c9ca5 | ||
|
c8669c7ba7 | ||
|
f9a8673a7a | ||
|
f88046a1f0 | ||
|
8ebcf34d87 | ||
|
3b794e4a56 | ||
|
0470fa395f | ||
|
6512610f9a | ||
|
03cfc8d660 | ||
|
a1f1add42d | ||
|
a2f28ceea2 | ||
|
421dda800d | ||
|
89e76252ca | ||
|
f2b4f588f5 | ||
|
dbe13c105f | ||
|
9fc4a39dbf | ||
|
604cd6b966 | ||
|
e642d61d13 | ||
|
d9197f9037 | ||
|
fc62ee7e0d | ||
|
50ba62e231 | ||
|
549129838c | ||
|
0586a94929 | ||
|
fdabc7d9f6 | ||
|
cb84fe5e10 | ||
|
cc18cc282f | ||
|
5ef472dd83 | ||
|
7c60a95a0e | ||
|
8aaef12a59 | ||
|
a87b0110b9 | ||
|
5174eed793 | ||
|
8c1c18769e | ||
|
849a3d243d | ||
|
36bc0fe4f2 | ||
|
76c1c34c4a | ||
|
21e9850d53 | ||
|
62bc4af0e1 | ||
|
68da5dfc2c | ||
|
96fd94ba94 | ||
|
239e9bef92 | ||
|
e87174cf4b | ||
|
127dc6d136 | ||
|
602e9a0f37 | ||
|
5c66640ac7 | ||
|
cb9765ca94 | ||
|
5db1deab51 | ||
|
4cdbf27fac | ||
|
0fb12a40e4 | ||
|
f16031513f | ||
|
0dc989ea5b | ||
|
c01f896062 | ||
|
b56c93dfff | ||
|
90ec1db9f4 | ||
|
dd0dd9aa52 | ||
|
7dc8dc0f7c | ||
|
961567d0fe | ||
|
de4e222794 | ||
|
f57bc97c7a | ||
|
bb16b471d2 | ||
|
d87c319390 | ||
|
cf81335712 | ||
|
8d06574d2b | ||
|
4eecc8d007 | ||
|
b1ce5749b9 | ||
|
82a08e2f46 | ||
|
3dd84a58bb | ||
|
0231c54ebb | ||
|
2fe673fec3 | ||
|
f6a66a33f7 | ||
|
38d1191f41 | ||
|
a940c74bc3 | ||
|
c3454d95af | ||
|
27e056ff15 | ||
|
e81717e9e7 | ||
|
86735d78e6 | ||
|
890b405232 | ||
|
1e314197dd | ||
|
437c40eee4 | ||
|
7cfd42cefe | ||
|
8f7990c5f2 | ||
|
a834381506 | ||
|
fafaf56479 | ||
|
f94b6d706f | ||
|
a5a86652f1 | ||
|
66e8f863d3 | ||
|
c586fce4fb | ||
|
405d47bbe7 | ||
|
04f902b472 | ||
|
f9bb66b1ce | ||
|
10b9a02952 | ||
|
1f4d074f75 | ||
|
42ef3f68c9 | ||
|
e2b4f9aac3 | ||
|
8b8416676e | ||
|
6e9baa85a9 | ||
|
3f6ce3454f | ||
|
7f011e2075 | ||
|
41d14eaf19 | ||
|
13b8eb6452 | ||
|
c7775e842b | ||
|
2a69de60bf | ||
|
8cffec495c | ||
|
284fe97515 | ||
|
6886da783a | ||
|
b982fa8e8f | ||
|
d240dcee6d | ||
|
0097809879 | ||
|
ef557eacff | ||
|
de92b7adca | ||
|
3ffd5dfbce | ||
|
03785fe360 | ||
|
7b676fd738 |
@@ -40,7 +40,7 @@ LOCAL_CFLAGS += \
|
||||
-DANDROID_VERSION=0x0$(major)0$(minor)
|
||||
|
||||
LOCAL_CFLAGS += \
|
||||
-DPTHREADS \
|
||||
-DHAVE_PTHREAD=1 \
|
||||
-fvisibility=hidden \
|
||||
-Wno-sign-compare
|
||||
|
||||
|
@@ -21,6 +21,8 @@
|
||||
|
||||
SUBDIRS = src
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
doxygen:
|
||||
cd doxygen && $(MAKE)
|
||||
|
||||
@@ -52,13 +54,14 @@ distclean-local:
|
||||
|
||||
# Rules for making release tarballs
|
||||
|
||||
PACKAGE_VERSION=8.1-devel
|
||||
PACKAGE_VERSION=9.0
|
||||
PACKAGE_DIR = Mesa-$(PACKAGE_VERSION)
|
||||
PACKAGE_NAME = MesaLib-$(PACKAGE_VERSION)
|
||||
|
||||
EXTRA_FILES = \
|
||||
aclocal.m4 \
|
||||
configure \
|
||||
bin/install-sh \
|
||||
src/glsl/glsl_parser.cc \
|
||||
src/glsl/glsl_parser.h \
|
||||
src/glsl/glsl_lexer.cc \
|
||||
|
29
bin/get-pick-list.sh
Executable file
29
bin/get-pick-list.sh
Executable file
@@ -0,0 +1,29 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Script for generating a list of candidates for cherry-picking to a stable branch
|
||||
|
||||
# Grep for commits with "cherry picked from commit" in the commit message.
|
||||
git log --reverse --grep="cherry picked from commit" origin/master..HEAD |\
|
||||
grep "cherry picked from commit" |\
|
||||
sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked
|
||||
|
||||
# Grep for commits that were marked as a candidate for the stable tree.
|
||||
git log --reverse --pretty=%H -i --grep='^[[:space:]]*NOTE: This is a candidate' HEAD..origin/master |\
|
||||
while read sha
|
||||
do
|
||||
# Check to see whether the patch is on the ignore list.
|
||||
if [ -f .git/cherry-ignore ] ; then
|
||||
if grep -q ^$sha .git/cherry-ignore ; then
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check to see if it has already been picked over.
|
||||
if grep -q ^$sha already_picked ; then
|
||||
continue
|
||||
fi
|
||||
|
||||
git log -n1 --pretty=oneline $sha | cat
|
||||
done
|
||||
|
||||
rm -f already_picked
|
42
bin/mklib
42
bin/mklib
@@ -319,6 +319,25 @@ case $ARCH in
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check if objects are 32-bit and we're running in 64-bit
|
||||
# environment. If so, pass -m32 flag to linker.
|
||||
add_abi_flag_to_opts() {
|
||||
case $(file $1) in
|
||||
*32-bit*x86-64*)
|
||||
# x86_64 x32 ABI.
|
||||
OPTS="-mx32 ${OPTS}"
|
||||
;;
|
||||
*64-bit*x86-64*)
|
||||
# x86_64 64-bit ABI.
|
||||
OPTS="-m64 ${OPTS}"
|
||||
;;
|
||||
*32-bit*Intel*)
|
||||
# x86 32-bit ABI.
|
||||
OPTS="-m32 ${OPTS}"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
if [ $NOPREFIX = 1 ] ; then
|
||||
# No "lib" or ".so" part
|
||||
echo "mklib: Making" $ARCH "shared library: " ${LIBNAME}
|
||||
@@ -330,15 +349,8 @@ case $ARCH in
|
||||
;;
|
||||
esac
|
||||
|
||||
# Check if objects are 32-bit and we're running in 64-bit
|
||||
# environment. If so, pass -m32 flag to linker.
|
||||
set ${OBJECTS}
|
||||
ABI32=`file $1 | grep 32-bit`
|
||||
ARM=`file $1 | grep ARM`
|
||||
# Do not add "-m32" option for arm.
|
||||
if [ -z "$ARM" -a "${ABI32}" -a `uname -m` = "x86_64" ] ; then
|
||||
OPTS="-m32 ${OPTS}"
|
||||
fi
|
||||
# Check to see if we are building for a different ABI.
|
||||
add_abi_flag_to_opts ${OBJECTS}
|
||||
|
||||
if [ "${ALTOPTS}" ] ; then
|
||||
OPTS=${ALTOPTS}
|
||||
@@ -389,15 +401,9 @@ case $ARCH in
|
||||
# exptmp is removed below
|
||||
fi
|
||||
|
||||
# Check if objects are 32-bit and we're running in 64-bit
|
||||
# environment. If so, pass -m32 flag to linker.
|
||||
set ${OBJECTS}
|
||||
ABI32=`file $1 | grep 32-bit`
|
||||
ARM=`file $1 | grep ARM`
|
||||
# Do not add "-m32" option for arm.
|
||||
if [ -z "$ARM" -a "${ABI32}" -a `uname -m` = "x86_64" ] ; then
|
||||
OPTS="-m32 ${OPTS}"
|
||||
fi
|
||||
# Check to see if we are building for a different ABI.
|
||||
add_abi_flag_to_opts ${OBJECTS}
|
||||
|
||||
if [ "${ALTOPTS}" ] ; then
|
||||
OPTS=${ALTOPTS}
|
||||
fi
|
||||
|
@@ -94,7 +94,7 @@ MOTIF_CFLAGS = -I/usr/include/Motif1.2
|
||||
# Directories to build
|
||||
LIB_DIR = lib
|
||||
SRC_DIRS = glsl mapi/glapi mapi/vgapi mesa \
|
||||
gallium egl gallium/winsys gallium/targets glu
|
||||
gallium egl gallium/winsys gallium/targets
|
||||
DRIVER_DIRS = x11 osmesa
|
||||
|
||||
# Gallium directories and
|
||||
|
145
configure.ac
145
configure.ac
@@ -6,9 +6,10 @@ dnl Tell the user about autoconf.html in the --help output
|
||||
m4_divert_once([HELP_END], [
|
||||
See docs/autoconf.html for more details on the options for Mesa.])
|
||||
|
||||
AC_INIT([Mesa], [8.1.0],
|
||||
AC_INIT([Mesa], [9.0.0],
|
||||
[https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa])
|
||||
AC_CONFIG_AUX_DIR([bin])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
AC_CANONICAL_HOST
|
||||
AM_INIT_AUTOMAKE([foreign])
|
||||
|
||||
@@ -26,6 +27,10 @@ m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
||||
LT_PREREQ([2.2])
|
||||
LT_INIT([disable-static])
|
||||
|
||||
dnl Set internal versions
|
||||
OSMESA_VERSION=8
|
||||
AC_SUBST([OSMESA_VERSION])
|
||||
|
||||
dnl Versions for external dependencies
|
||||
LIBDRM_REQUIRED=2.4.24
|
||||
LIBDRM_RADEON_REQUIRED=2.4.39
|
||||
@@ -155,13 +160,13 @@ DEFINES=""
|
||||
AC_SUBST([DEFINES])
|
||||
case "$host_os" in
|
||||
linux*|*-gnu*|gnu*)
|
||||
DEFINES="$DEFINES -D_GNU_SOURCE -DPTHREADS"
|
||||
DEFINES="$DEFINES -D_GNU_SOURCE -DHAVE_PTHREAD"
|
||||
;;
|
||||
solaris*)
|
||||
DEFINES="$DEFINES -DPTHREADS -DSVR4"
|
||||
DEFINES="$DEFINES -DHAVE_PTHREAD -DSVR4"
|
||||
;;
|
||||
cygwin*)
|
||||
DEFINES="$DEFINES -DPTHREADS"
|
||||
DEFINES="$DEFINES -DHAVE_PTHREAD"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -340,18 +345,12 @@ AC_ARG_WITH([gl-lib-name],
|
||||
[specify GL library name @<:@default=GL@:>@])],
|
||||
[GL_LIB=$withval],
|
||||
[GL_LIB=GL])
|
||||
AC_ARG_WITH([glu-lib-name],
|
||||
[AS_HELP_STRING([--with-glu-lib-name@<:@=NAME@:>@],
|
||||
[specify GLU library name @<:@default=GLU@:>@])],
|
||||
[GLU_LIB=$withval],
|
||||
[GLU_LIB=GLU])
|
||||
AC_ARG_WITH([osmesa-lib-name],
|
||||
[AS_HELP_STRING([--with-osmesa-lib-name@<:@=NAME@:>@],
|
||||
[specify OSMesa library name @<:@default=OSMesa@:>@])],
|
||||
[OSMESA_LIB=$withval],
|
||||
[OSMESA_LIB=OSMesa])
|
||||
AS_IF([test "x$GL_LIB" = xyes], [GL_LIB=GL])
|
||||
AS_IF([test "x$GLU_LIB" = xyes], [GLU_LIB=GLU])
|
||||
AS_IF([test "x$OSMESA_LIB" = xyes], [OSMESA_LIB=OSMesa])
|
||||
|
||||
dnl
|
||||
@@ -366,11 +365,9 @@ AC_ARG_ENABLE([mangling],
|
||||
if test "x${enable_mangling}" = "xyes" ; then
|
||||
DEFINES="${DEFINES} -DUSE_MGL_NAMESPACE"
|
||||
GL_LIB="Mangled${GL_LIB}"
|
||||
GLU_LIB="Mangled${GLU_LIB}"
|
||||
OSMESA_LIB="Mangled${OSMESA_LIB}"
|
||||
fi
|
||||
AC_SUBST([GL_LIB])
|
||||
AC_SUBST([GLU_LIB])
|
||||
AC_SUBST([OSMESA_LIB])
|
||||
|
||||
dnl
|
||||
@@ -389,7 +386,6 @@ if test "x$enable_texture_float" = xyes; then
|
||||
fi
|
||||
|
||||
GL_LIB_NAME='lib$(GL_LIB).'${LIB_EXTENSION}
|
||||
GLU_LIB_NAME='lib$(GLU_LIB).'${LIB_EXTENSION}
|
||||
OSMESA_LIB_NAME='lib$(OSMESA_LIB).'${LIB_EXTENSION}
|
||||
EGL_LIB_NAME='lib$(EGL_LIB).'${LIB_EXTENSION}
|
||||
GLESv1_CM_LIB_NAME='lib$(GLESv1_CM_LIB).'${LIB_EXTENSION}
|
||||
@@ -398,7 +394,6 @@ VG_LIB_NAME='lib$(VG_LIB).'${LIB_EXTENSION}
|
||||
GLAPI_LIB_NAME='lib$(GLAPI_LIB).'${LIB_EXTENSION}
|
||||
|
||||
GL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
|
||||
GLU_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLU_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
|
||||
EGL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(EGL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
|
||||
EGL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(EGL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
|
||||
GLESv1_CM_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLESv1_CM_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
|
||||
@@ -407,7 +402,6 @@ VG_LIB_GLOB=${LIB_PREFIX_GLOB}'$(VG_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENS
|
||||
GLAPI_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLAPI_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
|
||||
|
||||
AC_SUBST([GL_LIB_NAME])
|
||||
AC_SUBST([GLU_LIB_NAME])
|
||||
AC_SUBST([OSMESA_LIB_NAME])
|
||||
AC_SUBST([EGL_LIB_NAME])
|
||||
AC_SUBST([GLESv1_CM_LIB_NAME])
|
||||
@@ -416,7 +410,6 @@ AC_SUBST([VG_LIB_NAME])
|
||||
AC_SUBST([GLAPI_LIB_NAME])
|
||||
|
||||
AC_SUBST([GL_LIB_GLOB])
|
||||
AC_SUBST([GLU_LIB_GLOB])
|
||||
AC_SUBST([EGL_LIB_GLOB])
|
||||
AC_SUBST([GLESv1_CM_LIB_GLOB])
|
||||
AC_SUBST([GLESv2_LIB_GLOB])
|
||||
@@ -507,6 +500,13 @@ AC_SUBST([DLOPEN_LIBS])
|
||||
dnl See if posix_memalign is available
|
||||
AC_CHECK_FUNC([posix_memalign], [DEFINES="$DEFINES -DHAVE_POSIX_MEMALIGN"])
|
||||
|
||||
dnl Check for pthreads
|
||||
AX_PTHREAD
|
||||
dnl AX_PTHREADS leaves PTHREAD_LIBS empty for gcc and sets PTHREAD_CFLAGS
|
||||
dnl to -pthread, which causes problems if we need -lpthread to appear in
|
||||
dnl pkgconfig files.
|
||||
test -z "$PTHREAD_LIBS" && PTHREAD_LIBS="-lpthread"
|
||||
|
||||
dnl SELinux awareness.
|
||||
AC_ARG_ENABLE([selinux],
|
||||
[AS_HELP_STRING([--enable-selinux],
|
||||
@@ -521,6 +521,7 @@ if test "x$enable_selinux" = "xyes"; then
|
||||
SELINUX_LIBS="-lselinux"
|
||||
DEFINES="$DEFINES -DMESA_SELINUX"
|
||||
fi
|
||||
AC_SUBST([SELINUX_LIBS])
|
||||
|
||||
dnl Options for APIs
|
||||
AC_ARG_ENABLE([opengl],
|
||||
@@ -861,19 +862,18 @@ xyesyes)
|
||||
GL_PC_REQ_PRIV="x11 xext"
|
||||
X11_INCLUDES="$X11_INCLUDES $XLIBGL_CFLAGS"
|
||||
GL_LIB_DEPS="$XLIBGL_LIBS"
|
||||
GL_LIB_DEPS="$GL_LIB_DEPS $SELINUX_LIBS -lm -lpthread $DLOPEN_LIBS"
|
||||
GL_PC_LIB_PRIV="$GL_PC_LIB_PRIV $SELINUX_LIBS -lm -lpthread"
|
||||
GL_LIB_DEPS="$GL_LIB_DEPS $SELINUX_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
GL_PC_LIB_PRIV="$GL_PC_LIB_PRIV $SELINUX_LIBS -lm $PTHREAD_LIBS"
|
||||
;;
|
||||
xyesno)
|
||||
# DRI-based GLX
|
||||
PKG_CHECK_MODULES([GLPROTO], [glproto >= $GLPROTO_REQUIRED])
|
||||
GL_PC_REQ_PRIV="glproto >= $GLPROTO_REQUIRED"
|
||||
if test x"$driglx_direct" = xyes; then
|
||||
if test "x$have_libdrm" != xyes; then
|
||||
AC_MSG_ERROR([Direct rendering requires libdrm >= $LIBDRM_REQUIRED])
|
||||
fi
|
||||
PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
|
||||
GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED dri2proto >= $DRI2PROTO_REQUIRED"
|
||||
GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED"
|
||||
fi
|
||||
|
||||
# find the DRI deps for libGL
|
||||
@@ -890,9 +890,9 @@ xyesno)
|
||||
X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
|
||||
GL_LIB_DEPS="$DRIGL_LIBS"
|
||||
|
||||
# need DRM libs, -lpthread, etc.
|
||||
GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
|
||||
GL_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
|
||||
# need DRM libs, $PTHREAD_LIBS, etc.
|
||||
GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
GL_PC_LIB_PRIV="-lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -900,10 +900,10 @@ esac
|
||||
# builds.
|
||||
AM_CONDITIONAL(HAVE_XF86VIDMODE, test "x$HAVE_XF86VIDMODE" = xyes)
|
||||
|
||||
GLESv1_CM_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
|
||||
GLESv1_CM_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
|
||||
GLESv2_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
|
||||
GLESv2_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
|
||||
GLESv1_CM_LIB_DEPS="$LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
GLESv1_CM_PC_LIB_PRIV="-lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
GLESv2_LIB_DEPS="$LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
GLESv2_PC_LIB_PRIV="-lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
|
||||
AC_SUBST([GL_LIB_DEPS])
|
||||
AC_SUBST([GL_PC_REQ_PRIV])
|
||||
@@ -915,12 +915,7 @@ AC_SUBST([GLESv1_CM_PC_LIB_PRIV])
|
||||
AC_SUBST([GLESv2_LIB_DEPS])
|
||||
AC_SUBST([GLESv2_PC_LIB_PRIV])
|
||||
|
||||
GLAPI_LIB_DEPS="-lpthread $SELINUX_LIBS"
|
||||
AC_SUBST([GLAPI_LIB_DEPS])
|
||||
|
||||
|
||||
DRI_LIB_DEPS="\$(top_builddir)/src/mesa/libdricore/libdricore${VERSION}.la"
|
||||
GALLIUM_DRI_LIB_DEPS="\$(TOP)/\$(LIB_DIR)/libdricore${VERSION}.so"
|
||||
|
||||
AC_SUBST([HAVE_XF86VIDMODE])
|
||||
|
||||
@@ -950,8 +945,8 @@ AC_ARG_ENABLE([glx-tls],
|
||||
[GLX_USE_TLS=no])
|
||||
AC_SUBST(GLX_TLS, ${GLX_USE_TLS})
|
||||
|
||||
AS_IF([test "x$GLX_USE_TLS" = xyes],
|
||||
[DEFINES="${DEFINES} -DGLX_USE_TLS -DPTHREADS"])
|
||||
AS_IF([test "x$GLX_USE_TLS" = xyes -a "x$ax_pthread_ok" = xyes],
|
||||
[DEFINES="${DEFINES} -DGLX_USE_TLS -DHAVE_PTHREAD"])
|
||||
|
||||
dnl
|
||||
dnl More DRI setup
|
||||
@@ -1035,7 +1030,7 @@ if test "x$enable_dri" = xyes; then
|
||||
esac
|
||||
;;
|
||||
freebsd* | dragonfly* | *netbsd*)
|
||||
DEFINES="$DEFINES -DPTHREADS -DUSE_EXTERNAL_DXTN_LIB=1"
|
||||
DEFINES="$DEFINES -DHAVE_PTHREAD -DUSE_EXTERNAL_DXTN_LIB=1"
|
||||
DEFINES="$DEFINES -DIN_DRI_DRIVER -DHAVE_ALIAS"
|
||||
|
||||
if test "x$DRI_DIRS" = "xyes"; then
|
||||
@@ -1094,9 +1089,10 @@ if test "x$enable_dri" = xyes; then
|
||||
fi
|
||||
|
||||
# put all the necessary libs together
|
||||
DRI_LIB_DEPS="$DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm -lpthread $DLOPEN_LIBS"
|
||||
GALLIUM_DRI_LIB_DEPS="$GALLIUM_DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm -lpthread $DLOPEN_LIBS"
|
||||
DRI_LIB_DEPS="$DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
GALLIUM_DRI_LIB_DEPS="$GALLIUM_DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
fi
|
||||
AM_CONDITIONAL(NEED_LIBDRICORE, test -n "$DRI_DIRS")
|
||||
AC_SUBST([DRI_DIRS])
|
||||
AC_SUBST([EXPAT_INCLUDES])
|
||||
AC_SUBST([DRI_LIB_DEPS])
|
||||
@@ -1191,12 +1187,12 @@ esac
|
||||
if test "x$enable_osmesa" = xyes; then
|
||||
# only link libraries with osmesa if shared
|
||||
if test "$enable_static" = no; then
|
||||
OSMESA_LIB_DEPS="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS"
|
||||
OSMESA_LIB_DEPS="-lm $PTHREAD_LIBS $SELINUX_LIBS $DLOPEN_LIBS"
|
||||
else
|
||||
OSMESA_LIB_DEPS=""
|
||||
fi
|
||||
OSMESA_MESA_DEPS=""
|
||||
OSMESA_PC_LIB_PRIV="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS"
|
||||
OSMESA_PC_LIB_PRIV="-lm $PTHREAD_LIBS $SELINUX_LIBS $DLOPEN_LIBS"
|
||||
fi
|
||||
|
||||
AC_SUBST([OSMESA_LIB_DEPS])
|
||||
@@ -1226,8 +1222,6 @@ if test "x$enable_gbm" = xyes; then
|
||||
if test "x$enable_shared_glapi" = xno; then
|
||||
AC_MSG_ERROR([gbm_dri requires --enable-shared-glapi])
|
||||
fi
|
||||
PKG_CHECK_MODULES([LIBKMS], [libkms], [],
|
||||
AC_MSG_ERROR([gbm needs libkms]))
|
||||
fi
|
||||
fi
|
||||
GBM_PC_REQ_PRIV="libudev"
|
||||
@@ -1242,7 +1236,7 @@ EGL_CLIENT_APIS=""
|
||||
|
||||
if test "x$enable_egl" = xyes; then
|
||||
SRC_DIRS="$SRC_DIRS egl"
|
||||
EGL_LIB_DEPS="$DLOPEN_LIBS $SELINUX_LIBS -lpthread"
|
||||
EGL_LIB_DEPS="$DLOPEN_LIBS $SELINUX_LIBS $PTHREAD_LIBS"
|
||||
|
||||
AC_CHECK_FUNC(mincore, [DEFINES="$DEFINES -DHAVE_MINCORE"])
|
||||
|
||||
@@ -1365,11 +1359,11 @@ if test "x$enable_openvg" = xyes; then
|
||||
fi
|
||||
|
||||
EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(VG_LIB)'
|
||||
VG_LIB_DEPS="$VG_LIB_DEPS $SELINUX_LIBS -lpthread"
|
||||
VG_LIB_DEPS="$VG_LIB_DEPS $SELINUX_LIBS $PTHREAD_LIBS"
|
||||
CORE_DIRS="$CORE_DIRS mapi/vgapi"
|
||||
GALLIUM_STATE_TRACKERS_DIRS="vega $GALLIUM_STATE_TRACKERS_DIRS"
|
||||
HAVE_ST_VEGA=yes
|
||||
VG_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
|
||||
VG_PC_LIB_PRIV="-lm $PTHREAD_LIBS $DLOPEN_LIBS"
|
||||
AC_SUBST([VG_PC_LIB_PRIV])
|
||||
fi
|
||||
|
||||
@@ -1465,60 +1459,6 @@ if test "x$enable_opencl" = xyes; then
|
||||
enable_gallium_loader=yes
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl GLU configuration
|
||||
dnl
|
||||
AC_ARG_ENABLE([glu],
|
||||
[AS_HELP_STRING([--disable-glu],
|
||||
[enable OpenGL Utility library @<:@default=enabled@:>@])],
|
||||
[enable_glu="$enableval"],
|
||||
[enable_glu=yes])
|
||||
|
||||
if test "x$enable_glu" = xyes; then
|
||||
if test "x$enable_glx" = xno -a "x$enable_osmesa" = xno; then
|
||||
AC_MSG_NOTICE([Disabling GLU since there is no OpenGL driver])
|
||||
enable_glu=no
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$enable_glu" = xyes; then
|
||||
SRC_DIRS="$SRC_DIRS glu"
|
||||
|
||||
if test "x$enable_glx" = xno; then
|
||||
# Link libGLU to libOSMesa instead of libGL
|
||||
GLU_LIB_DEPS=""
|
||||
GLU_PC_REQ="osmesa"
|
||||
if test "$enable_static" = no; then
|
||||
GLU_MESA_DEPS='-l$(OSMESA_LIB)'
|
||||
else
|
||||
GLU_MESA_DEPS=""
|
||||
fi
|
||||
else
|
||||
# If static, empty GLU_LIB_DEPS and add libs for programs to link
|
||||
GLU_PC_REQ="gl"
|
||||
GLU_PC_LIB_PRIV="-lm"
|
||||
if test "$enable_static" = no; then
|
||||
GLU_LIB_DEPS="-lm"
|
||||
GLU_MESA_DEPS='-l$(GL_LIB)'
|
||||
else
|
||||
GLU_LIB_DEPS=""
|
||||
GLU_MESA_DEPS=""
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test "$enable_static" = no; then
|
||||
GLU_LIB_DEPS="$GLU_LIB_DEPS $OS_CPLUSPLUS_LIBS"
|
||||
fi
|
||||
GLU_PC_LIB_PRIV="$GLU_PC_LIB_PRIV $OS_CPLUSPLUS_LIBS"
|
||||
AC_SUBST([GLU_LIB_DEPS])
|
||||
AC_SUBST([GLU_MESA_DEPS])
|
||||
AC_SUBST([GLU_PC_REQ])
|
||||
AC_SUBST([GLU_PC_REQ_PRIV])
|
||||
AC_SUBST([GLU_PC_LIB_PRIV])
|
||||
AC_SUBST([GLU_PC_CFLAGS])
|
||||
|
||||
AC_SUBST([PROGRAM_DIRS])
|
||||
|
||||
dnl
|
||||
dnl Gallium configuration
|
||||
dnl
|
||||
@@ -1576,7 +1516,7 @@ for plat in $egl_platforms; do
|
||||
;;
|
||||
|
||||
wayland)
|
||||
PKG_CHECK_MODULES([WAYLAND], [wayland-client wayland-server],, \
|
||||
PKG_CHECK_MODULES([WAYLAND], [wayland-client >= 0.99.0 wayland-server >= 0.99.0],, \
|
||||
[AC_MSG_ERROR([cannot find libwayland-client])])
|
||||
GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/wayland"
|
||||
|
||||
@@ -1986,10 +1926,6 @@ AM_CONDITIONAL(HAVE_X86_ASM, echo "$DEFINES" | grep 'X86_ASM' >/dev/null 2>&1)
|
||||
AM_CONDITIONAL(HAVE_X86_64_ASM, echo "$DEFINES" | grep 'X86_64_ASM' >/dev/null 2>&1)
|
||||
AM_CONDITIONAL(HAVE_SPARC_ASM, echo "$DEFINES" | grep 'SPARC_ASM' >/dev/null 2>&1)
|
||||
|
||||
# To pass as an argument to libtool's -version-number flag
|
||||
VERSION_NUMBER=`echo "$VERSION" | $SED 's/\./:/g'`
|
||||
AC_SUBST([VERSION_NUMBER])
|
||||
|
||||
dnl prepend CORE_DIRS to SRC_DIRS
|
||||
SRC_DIRS="$CORE_DIRS $SRC_DIRS"
|
||||
|
||||
@@ -2115,9 +2051,6 @@ xyesno)
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo " GLU: $enable_glu"
|
||||
|
||||
dnl EGL
|
||||
echo ""
|
||||
echo " EGL: $enable_egl"
|
||||
|
@@ -17,10 +17,6 @@
|
||||
<li><a href="#dri">DRI Driver Options</a></li>
|
||||
<li><a href="#osmesa">OSMesa Driver Options</a></li>
|
||||
</ul>
|
||||
<li><p><a href="#library">Library Options</a>
|
||||
<ul>
|
||||
<li><a href="#glu">GLU</a></li>
|
||||
</ul>
|
||||
<li><p><a href="#demos">Demo Program Options</a>
|
||||
</ol>
|
||||
|
||||
@@ -219,12 +215,6 @@ libraries that will be built. More details on the specific GL libraries
|
||||
can be found in the <a href="install.html">basic installation
|
||||
instructions</a>.
|
||||
|
||||
<dl>
|
||||
<dt id="glu">GLU <dd><p> The libGLU library will be built by default
|
||||
on all drivers. This can be disable with the option
|
||||
<code>--disable-glu</code>.
|
||||
</dl>
|
||||
|
||||
|
||||
<h2 id="demos">4. Demo Program Options</h2>
|
||||
|
||||
|
@@ -74,7 +74,6 @@
|
||||
<li><a href="http://sourceforge.net/projects/mesa3d" target="_parent">SourceForge homepage</a>
|
||||
<li><a href="repository.html" target="MainFrame">Source Code Repository</a>
|
||||
<li><a href="sourcetree.html" target="MainFrame">Source Code Tree</a>
|
||||
<li><a href="glu.html" target="MainFrame">SGI's GLU</a>
|
||||
<li><a href="utilities.html" target="MainFrame">Utilities</a>
|
||||
<li><a href="helpwanted.html" target="MainFrame">Help Wanted</a>
|
||||
<li><a href="devinfo.html" target="MainFrame">Development Notes</a>
|
||||
|
@@ -169,7 +169,7 @@ branch is relevant.
|
||||
<dd>MESA_MAJOR, MESA_MINOR and MESA_TINY</dd>
|
||||
<dt>Makefile.am</dt>
|
||||
<dd>PACKAGE_VERSION</dd>
|
||||
<dt>autoconf.ac</dt>
|
||||
<dt>configure.ac</dt>
|
||||
<dd>AC_INIT</dd>
|
||||
<dt>src/mesa/main/version.h</dt>
|
||||
<dd>MESA_MAJOR, MESA_MINOR, MESA_PATCH and MESA_VERSION_STRING</dd>
|
||||
|
@@ -197,7 +197,7 @@ few preprocessor defines.</p>
|
||||
|
||||
<ul>
|
||||
<li>If <tt>GLX_USE_TLS</tt> is defined, method #4 is used.</li>
|
||||
<li>If <tt>PTHREADS</tt> is defined, method #3 is used.</li>
|
||||
<li>If <tt>HAVE_PTHREAD</tt> is defined, method #3 is used.</li>
|
||||
<li>If <tt>WIN32_THREADS</tt> is defined, method #2 is used.</li>
|
||||
<li>If none of the preceeding are defined, method #1 is used.</li>
|
||||
</ul>
|
||||
|
@@ -69,7 +69,6 @@ docs/ - documentation
|
||||
src/ - source code for libraries
|
||||
src/mesa - sources for the main Mesa library and device drivers
|
||||
src/gallium - sources for Gallium and Gallium drivers
|
||||
src/glu - libGLU source code
|
||||
src/glx - sources for building libGL with full GLX and DRI support
|
||||
</pre>
|
||||
|
||||
@@ -80,7 +79,12 @@ instructions</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<h1>Demos and GLUT</h1>
|
||||
<h1>Demos, GLUT, and GLU</h1>
|
||||
|
||||
<p>
|
||||
A package of SGI's GLU library is available
|
||||
<a href="ftp://ftp.freedesktop.org/pub/mesa/glu/" target="_parent">here</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
A package of Mark Kilgard's GLUT library is available
|
||||
@@ -93,9 +97,13 @@ The Mesa demos collection is available
|
||||
</p>
|
||||
|
||||
<p>
|
||||
In the past, GLUT and the Mesa demos were released in conjunction with
|
||||
Mesa releases. But since GLUT and the demos change infrequently, they
|
||||
were split off some time ago.
|
||||
In the past, GLUT, GLU and the Mesa demos were released in conjunction with
|
||||
Mesa releases. But since GLUT, GLU and the demos change infrequently, they
|
||||
were split off into their own git repositories:
|
||||
|
||||
<a href="http://cgit.freedesktop.org/mesa/glut/">GLUT</a>,
|
||||
<a href="http://cgit.freedesktop.org/mesa/glu/">GLU</a> and
|
||||
<a href="http://cgit.freedesktop.org/mesa/demos/">Demos</a>,
|
||||
</p>
|
||||
|
||||
|
||||
|
@@ -226,10 +226,6 @@ Basically you'll want the following:
|
||||
</li><li>/usr/lib/libGL.so.1 - a symlink to libGL.so.1.xyz
|
||||
</li><li>/usr/lib/libGL.so.xyz - the actual OpenGL/Mesa library. xyz denotes the
|
||||
Mesa version number.
|
||||
</li><li>/usr/lib/libGLU.so - a symlink to libGLU.so.1
|
||||
</li><li>/usr/lib/libGLU.so.1 - a symlink to libGLU.so.1.3.xyz
|
||||
</li><li>/usr/lib/libGLU.so.xyz - the OpenGL Utility library. xyz denotes the Mesa
|
||||
version number.
|
||||
</li></ul>
|
||||
<p>
|
||||
After installing XFree86/X.org and the DRI drivers, some of these files
|
||||
|
@@ -1,46 +0,0 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>SGI GLU</title>
|
||||
<link rel="stylesheet" type="text/css" href="mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>SGI SI GLU</h1>
|
||||
|
||||
(Silicon Graphics, Inc. Sample Implementation of the OpenGL Utility library)
|
||||
|
||||
<p>
|
||||
SGI open-sourced their OpenGL Sample Implementation (SI) in January, 2000.
|
||||
This includes the GLU library.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The SI GLU library implements GLU version 1.3 whereas the original
|
||||
Mesa GLU library only implemented version 1.2.
|
||||
We recommend using the SI GLU library instead of Mesa's GLU library
|
||||
since it's more up-to-date, complete and reliable.
|
||||
We're no longer developing the original Mesa GLU library.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The SI GLU library code is included in the Mesa distribution.
|
||||
You don't have to download it separately.
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
<b>Olivier Michel</b> has made Linux RPMs of GLU for i386 and PowerPC.
|
||||
You can download them from the
|
||||
<a href="http://www.sourceforge.net/project/showfiles.php?group_id=3"
|
||||
target="_parent">download area</a> under <b>Miscellaneous</b>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Visit the <a href="http://oss.sgi.com/projects/ogl-sample/" target="_parent">
|
||||
OpenGL Sample Implementation home page</a> for more information about the SI.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -151,9 +151,6 @@ You'll see a set of library files similar to this:
|
||||
lrwxrwxrwx 1 brian users 10 Mar 26 07:53 libGL.so -> libGL.so.1*
|
||||
lrwxrwxrwx 1 brian users 19 Mar 26 07:53 libGL.so.1 -> libGL.so.1.5.060100*
|
||||
-rwxr-xr-x 1 brian users 3375861 Mar 26 07:53 libGL.so.1.5.060100*
|
||||
lrwxrwxrwx 1 brian users 11 Mar 26 07:53 libGLU.so -> libGLU.so.1*
|
||||
lrwxrwxrwx 1 brian users 20 Mar 26 07:53 libGLU.so.1 -> libGLU.so.1.3.060100*
|
||||
-rwxr-xr-x 1 brian users 549269 Mar 26 07:53 libGLU.so.1.3.060100*
|
||||
lrwxrwxrwx 1 brian users 14 Mar 26 07:53 libOSMesa.so -> libOSMesa.so.6*
|
||||
lrwxrwxrwx 1 brian users 23 Mar 26 07:53 libOSMesa.so.6 -> libOSMesa.so.6.1.060100*
|
||||
-rwxr-xr-x 1 brian users 23871 Mar 26 07:53 libOSMesa.so.6.1.060100*
|
||||
@@ -162,8 +159,6 @@ lrwxrwxrwx 1 brian users 23 Mar 26 07:53 libOSMesa.so.6 -> libOSM
|
||||
<p>
|
||||
<b>libGL</b> is the main OpenGL library (i.e. Mesa).
|
||||
<br>
|
||||
<b>libGLU</b> is the OpenGL Utility library.
|
||||
<br>
|
||||
<b>libOSMesa</b> is the OSMesa (Off-Screen) interface library.
|
||||
</p>
|
||||
|
||||
|
@@ -95,8 +95,6 @@ Device drivers src/mesa/drivers/* MIT, generally
|
||||
|
||||
Ext headers include/GL/glext.h Khronos
|
||||
include/GL/glxext.h
|
||||
|
||||
SGI GLU library src/glu/sgi/ SGI Free B
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
|
@@ -9,6 +9,16 @@
|
||||
|
||||
<h1>News</h1>
|
||||
|
||||
<h2>October 8, 2012</h2>
|
||||
|
||||
<p>
|
||||
<a href="relnotes-9.0.html">Mesa 9.0</a> is released.
|
||||
This is the first version of Mesa to support OpenGL 3.1 and GLSL 1.40
|
||||
(with the i965 driver).
|
||||
See the release notes for more information about the release.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>July 10, 2012</h2>
|
||||
|
||||
<p>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>Mesa 9.0 Release Notes / date TBD</h1>
|
||||
<h1>Mesa 9.0 Release Notes / October 8th, 2012</h1>
|
||||
|
||||
<p>
|
||||
Mesa 9.0 is a new development release.
|
||||
@@ -26,7 +26,9 @@ because GL_ARB_compatibility is not supported.
|
||||
|
||||
<h2>MD5 checksums</h2>
|
||||
<pre>
|
||||
tbd
|
||||
be4cd34c6599a7cb9d254b05c48bdb1f MesaLib-9.0.tar.gz
|
||||
60e557ce407be3732711da484ab3db6c MesaLib-9.0.tar.bz2
|
||||
16b128544cd3f7e237927bb9f8aab7ce MesaLib-9.0.zip
|
||||
</pre>
|
||||
|
||||
|
||||
@@ -37,10 +39,14 @@ Note: some of the new features are only available with certain drivers.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Added new Gallium3D - nv30 driver</li>
|
||||
<li>Added new Gallium3D - radeonsi driver</li>
|
||||
<li>Added OpenCL state tracker Clover</li>
|
||||
<li>Completed VDPAU state tracker (video decoding support is currently limited to MPEG1 and MPEG2)</li>
|
||||
<li>GL_ARB_base_instance</li>
|
||||
<li>GL_ARB_blend_func_extended</li>
|
||||
<li>GL_ARB_debug_output</li>
|
||||
<li>GL_ARB_invalidate_subdate - Currently a "no-op" implementation. This
|
||||
<li>GL_ARB_invalidate_subdata - Currently a "no-op" implementation. This
|
||||
extension is always enabled in all drivers.</li>
|
||||
<li>GL_ARB_shader_bit_encoding</li>
|
||||
<li>GL_ARB_texture_buffer_object</li>
|
||||
@@ -52,6 +58,7 @@ extension is always enabled in all drivers.</li>
|
||||
<li>GL_EXT_read_format_bgra for ES 1.1 and 2.0</li>
|
||||
<li>GL_EXT_texture_rg for ES 2.x</li>
|
||||
<li>GL_NV_read_buffer for ES 2.0</li>
|
||||
<li>GLX_ARB_create_context_robustness</li>
|
||||
<li>EGL_KHR_create_context</li>
|
||||
<li>EGL_KHR_surfaceless_context - This replaces the
|
||||
EGL_KHR_surfaceless_{gles1,gles2,opengl} extensions that were never approved
|
||||
@@ -67,10 +74,18 @@ by Khronos.</li>
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>
|
||||
<ul>
|
||||
<li>
|
||||
The legacy/static Makefile system (ex: 'make linux-dri') has been removed.
|
||||
<br>
|
||||
The two supported build methods are now autoconf/automake and SCons.
|
||||
</p>
|
||||
</li>
|
||||
<li>Removed support for GL_ARB_shadow_ambient extension</li>
|
||||
<li>Removed Gallium3D - nvfx driver (use nv30 instead)</li>
|
||||
<li>
|
||||
libGLU has been moved into its own repository, found at <a href="http://cgit.freedesktop.org/mesa/glu/">http://cgit.freedesktop.org/mesa/glu/</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</body>
|
||||
|
@@ -14,12 +14,14 @@ The release notes summarize what's new or changed in each Mesa release.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="relnotes-8.1.html">8.1 release notes</a>
|
||||
<li><a href="relnotes-9.0.html">9.0 release notes</a>
|
||||
<li><a href="relnotes-8.0.4.html">8.0.4 release notes</a>
|
||||
<li><a href="relnotes-8.0.3.html">8.0.3 release notes</a>
|
||||
<li><a href="relnotes-8.0.2.html">8.0.2 release notes</a>
|
||||
<li><a href="relnotes-8.0.1.html">8.0.1 release notes</a>
|
||||
<li><a href="relnotes-8.0.html">8.0 release notes</a>
|
||||
<li><a href="relnotes-7.11.2.html">7.11.2 release notes</a>
|
||||
<li><a href="relnotes-7.11.1.html">7.11.1 release notes</a>
|
||||
<li><a href="relnotes-7.11.html">7.11 release notes</a>
|
||||
<li><a href="relnotes-7.10.3.html">7.10.3 release notes</a>
|
||||
<li><a href="relnotes-7.10.2.html">7.10.2 release notes</a>
|
||||
|
@@ -146,11 +146,6 @@ each directory.
|
||||
</ul>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><b>glu</b> - The OpenGL Utility library
|
||||
<ul>
|
||||
<li><b>sgi</b> - GLU from SGI
|
||||
<li><b>mesa</b> - Mesa version of GLU (deprecated)
|
||||
</ul>
|
||||
<li><b>glx</b> - The GLX library code for building libGL. This is used for
|
||||
direct rendering drivers. It will dynamically load one of the
|
||||
xxx_dri.so drivers.
|
||||
|
@@ -29,9 +29,9 @@ extern "C" {
|
||||
*/
|
||||
|
||||
/* Header file version number, required by OpenGL ABI for Linux */
|
||||
/* glext.h last updated $Date: 2012-08-06 02:01:01 -0700 (Mon, 06 Aug 2012) $ */
|
||||
/* glext.h last updated $Date: 2012-09-19 19:02:24 -0700 (Wed, 19 Sep 2012) $ */
|
||||
/* Current version at http://www.opengl.org/registry/ */
|
||||
#define GL_GLEXT_VERSION 83
|
||||
#define GL_GLEXT_VERSION 85
|
||||
/* Function declaration macros - to move into glplatform.h */
|
||||
|
||||
#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
|
||||
@@ -88,9 +88,6 @@ extern "C" {
|
||||
#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22
|
||||
#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23
|
||||
#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
|
||||
#endif
|
||||
|
||||
#ifndef GL_VERSION_1_2_DEPRECATED
|
||||
#define GL_RESCALE_NORMAL 0x803A
|
||||
#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8
|
||||
#define GL_SINGLE_COLOR 0x81F9
|
||||
@@ -110,9 +107,6 @@ extern "C" {
|
||||
#define GL_BLEND_EQUATION 0x8009
|
||||
#define GL_FUNC_SUBTRACT 0x800A
|
||||
#define GL_FUNC_REVERSE_SUBTRACT 0x800B
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_imaging_DEPRECATED
|
||||
#define GL_CONVOLUTION_1D 0x8010
|
||||
#define GL_CONVOLUTION_2D 0x8011
|
||||
#define GL_SEPARABLE_2D 0x8012
|
||||
@@ -239,9 +233,6 @@ extern "C" {
|
||||
#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
|
||||
#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
|
||||
#define GL_CLAMP_TO_BORDER 0x812D
|
||||
#endif
|
||||
|
||||
#ifndef GL_VERSION_1_3_DEPRECATED
|
||||
#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1
|
||||
#define GL_MAX_TEXTURE_UNITS 0x84E2
|
||||
#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3
|
||||
@@ -298,9 +289,6 @@ extern "C" {
|
||||
#define GL_TEXTURE_DEPTH_SIZE 0x884A
|
||||
#define GL_TEXTURE_COMPARE_MODE 0x884C
|
||||
#define GL_TEXTURE_COMPARE_FUNC 0x884D
|
||||
#endif
|
||||
|
||||
#ifndef GL_VERSION_1_4_DEPRECATED
|
||||
#define GL_POINT_SIZE_MIN 0x8126
|
||||
#define GL_POINT_SIZE_MAX 0x8127
|
||||
#define GL_POINT_DISTANCE_ATTENUATION 0x8129
|
||||
@@ -354,9 +342,7 @@ extern "C" {
|
||||
#define GL_DYNAMIC_READ 0x88E9
|
||||
#define GL_DYNAMIC_COPY 0x88EA
|
||||
#define GL_SAMPLES_PASSED 0x8914
|
||||
#endif
|
||||
|
||||
#ifndef GL_VERSION_1_5_DEPRECATED
|
||||
#define GL_SRC1_ALPHA 0x8589
|
||||
#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896
|
||||
#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897
|
||||
#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898
|
||||
@@ -378,7 +364,6 @@ extern "C" {
|
||||
#define GL_SRC1_RGB 0x8581
|
||||
#define GL_SRC2_RGB 0x8582
|
||||
#define GL_SRC0_ALPHA 0x8588
|
||||
#define GL_SRC1_ALPHA 0x8589
|
||||
#define GL_SRC2_ALPHA 0x858A
|
||||
#endif
|
||||
|
||||
@@ -463,9 +448,6 @@ extern "C" {
|
||||
#define GL_STENCIL_BACK_REF 0x8CA3
|
||||
#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
|
||||
#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
|
||||
#endif
|
||||
|
||||
#ifndef GL_VERSION_2_0_DEPRECATED
|
||||
#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643
|
||||
#define GL_POINT_SPRITE 0x8861
|
||||
#define GL_COORD_REPLACE 0x8862
|
||||
@@ -489,9 +471,6 @@ extern "C" {
|
||||
#define GL_SRGB8_ALPHA8 0x8C43
|
||||
#define GL_COMPRESSED_SRGB 0x8C48
|
||||
#define GL_COMPRESSED_SRGB_ALPHA 0x8C49
|
||||
#endif
|
||||
|
||||
#ifndef GL_VERSION_2_1_DEPRECATED
|
||||
#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F
|
||||
#define GL_SLUMINANCE_ALPHA 0x8C44
|
||||
#define GL_SLUMINANCE8_ALPHA8 0x8C45
|
||||
@@ -726,9 +705,6 @@ extern "C" {
|
||||
/* reuse GL_RG32UI */
|
||||
/* Reuse tokens from ARB_vertex_array_object */
|
||||
/* reuse GL_VERTEX_ARRAY_BINDING */
|
||||
#endif
|
||||
|
||||
#ifndef GL_VERSION_3_0_DEPRECATED
|
||||
#define GL_CLAMP_VERTEX_COLOR 0x891A
|
||||
#define GL_CLAMP_FRAGMENT_COLOR 0x891B
|
||||
#define GL_ALPHA_INTEGER 0x8D97
|
||||
@@ -749,7 +725,6 @@ extern "C" {
|
||||
#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B
|
||||
#define GL_TEXTURE_BINDING_BUFFER 0x8C2C
|
||||
#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D
|
||||
#define GL_TEXTURE_BUFFER_FORMAT 0x8C2E
|
||||
#define GL_TEXTURE_RECTANGLE 0x84F5
|
||||
#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6
|
||||
#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7
|
||||
@@ -1015,6 +990,7 @@ extern "C" {
|
||||
/* reuse GL_MEDIUM_INT */
|
||||
/* reuse GL_HIGH_INT */
|
||||
/* reuse GL_SHADER_COMPILER */
|
||||
/* reuse GL_SHADER_BINARY_FORMATS */
|
||||
/* reuse GL_NUM_SHADER_BINARY_FORMATS */
|
||||
/* reuse GL_MAX_VERTEX_UNIFORM_VECTORS */
|
||||
/* reuse GL_MAX_VARYING_VECTORS */
|
||||
@@ -2030,9 +2006,6 @@ extern "C" {
|
||||
#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
|
||||
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
|
||||
#define GL_MAX_SAMPLES 0x8D57
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_framebuffer_object_DEPRECATED
|
||||
#define GL_INDEX 0x8222
|
||||
#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14
|
||||
#define GL_TEXTURE_INTENSITY_TYPE 0x8C15
|
||||
@@ -2264,6 +2237,7 @@ extern "C" {
|
||||
#ifndef GL_ARB_texture_gather
|
||||
#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E
|
||||
#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F
|
||||
#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_texture_query_lod
|
||||
@@ -2441,6 +2415,7 @@ extern "C" {
|
||||
#define GL_MEDIUM_INT 0x8DF4
|
||||
#define GL_HIGH_INT 0x8DF5
|
||||
#define GL_SHADER_COMPILER 0x8DFA
|
||||
#define GL_SHADER_BINARY_FORMATS 0x8DF8
|
||||
#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
|
||||
#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
|
||||
#define GL_MAX_VARYING_VECTORS 0x8DFC
|
||||
@@ -2744,6 +2719,7 @@ extern "C" {
|
||||
#define GL_PROGRAM_PIPELINE 0x82E4
|
||||
#define GL_SAMPLER 0x82E6
|
||||
#define GL_DISPLAY_LIST 0x82E7
|
||||
/* DISPLAY_LIST used in compatibility profile only */
|
||||
#define GL_MAX_LABEL_LENGTH 0x82E8
|
||||
#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143
|
||||
#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144
|
||||
@@ -2787,33 +2763,25 @@ extern "C" {
|
||||
#ifndef GL_ARB_copy_image
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_debug_group
|
||||
/* reuse GL_DEBUG_TYPE_MARKER */
|
||||
/* reuse GL_DEBUG_TYPE_PUSH_GROUP */
|
||||
/* reuse GL_DEBUG_TYPE_POP_GROUP */
|
||||
/* reuse GL_DEBUG_SEVERITY_NOTIFICATION */
|
||||
/* reuse GL_MAX_DEBUG_GROUP_STACK_DEPTH */
|
||||
/* reuse GL_DEBUG_GROUP_STACK_DEPTH */
|
||||
/* reuse GL_STACK_UNDERFLOW */
|
||||
/* reuse GL_STACK_OVERFLOW */
|
||||
#ifndef GL_ARB_texture_view
|
||||
#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB
|
||||
#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC
|
||||
#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD
|
||||
#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE
|
||||
#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_debug_label
|
||||
/* reuse GL_BUFFER */
|
||||
/* reuse GL_SHADER */
|
||||
/* reuse GL_PROGRAM */
|
||||
/* reuse GL_QUERY */
|
||||
/* reuse GL_PROGRAM_PIPELINE */
|
||||
/* reuse GL_SAMPLER */
|
||||
/* DISPLAY_LIST used in compatibility profile only */
|
||||
/* reuse GL_DISPLAY_LIST */
|
||||
/* reuse GL_MAX_LABEL_LENGTH */
|
||||
/* reuse GL_VERTEX_ARRAY */
|
||||
#ifndef GL_ARB_vertex_attrib_binding
|
||||
#define GL_VERTEX_ATTRIB_BINDING 0x82D4
|
||||
#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5
|
||||
#define GL_VERTEX_BINDING_DIVISOR 0x82D6
|
||||
#define GL_VERTEX_BINDING_OFFSET 0x82D7
|
||||
#define GL_VERTEX_BINDING_STRIDE 0x82D8
|
||||
#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
|
||||
#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_debug_output2
|
||||
/* reuse GL_CONTEXT_FLAG_DEBUG_BIT */
|
||||
/* reuse GL_DEBUG_OUTPUT */
|
||||
#ifndef GL_ARB_robustness_isolation
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_ES3_compatibility
|
||||
@@ -3050,7 +3018,7 @@ extern "C" {
|
||||
#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE
|
||||
#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF
|
||||
#define GL_SHADER_STORAGE_BARRIER_BIT 0x2000
|
||||
#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS
|
||||
#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS
|
||||
/* reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */
|
||||
#endif
|
||||
|
||||
@@ -3070,27 +3038,6 @@ extern "C" {
|
||||
#ifndef GL_ARB_texture_storage_multisample
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_texture_view
|
||||
#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB
|
||||
#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC
|
||||
#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD
|
||||
#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE
|
||||
#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_vertex_attrib_binding
|
||||
#define GL_VERTEX_ATTRIB_BINDING 0x82D4
|
||||
#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5
|
||||
#define GL_VERTEX_BINDING_DIVISOR 0x82D6
|
||||
#define GL_VERTEX_BINDING_OFFSET 0x82D7
|
||||
#define GL_VERTEX_BINDING_STRIDE 0x82D8
|
||||
#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
|
||||
#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_robustness_isolation
|
||||
#endif
|
||||
|
||||
#ifndef GL_EXT_abgr
|
||||
#define GL_ABGR_EXT 0x8000
|
||||
#endif
|
||||
@@ -4947,6 +4894,8 @@ extern "C" {
|
||||
#define GL_RGB4_S3TC 0x83A1
|
||||
#define GL_RGBA_S3TC 0x83A2
|
||||
#define GL_RGBA4_S3TC 0x83A3
|
||||
#define GL_RGBA_DXT5_S3TC 0x83A4
|
||||
#define GL_RGBA4_DXT5_S3TC 0x83A5
|
||||
#endif
|
||||
|
||||
#ifndef GL_ATI_draw_buffers
|
||||
@@ -4970,7 +4919,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef GL_ATI_pixel_format_float
|
||||
#define GL_TYPE_RGBA_FLOAT_ATI 0x8820
|
||||
#define GL_RGBA_FLOAT_MODE_ATI 0x8820
|
||||
#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835
|
||||
#endif
|
||||
|
||||
@@ -5430,7 +5379,7 @@ extern "C" {
|
||||
#define GL_PRIMITIVES_GENERATED_NV 0x8C87
|
||||
#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88
|
||||
#define GL_RASTERIZER_DISCARD_NV 0x8C89
|
||||
#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_ATTRIBS_NV 0x8C8A
|
||||
#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A
|
||||
#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B
|
||||
#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C
|
||||
#define GL_SEPARATE_ATTRIBS_NV 0x8C8D
|
||||
@@ -5947,6 +5896,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef GL_AMD_debug_output
|
||||
#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143
|
||||
#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144
|
||||
#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145
|
||||
#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146
|
||||
@@ -6176,6 +6126,18 @@ extern "C" {
|
||||
#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194
|
||||
#endif
|
||||
|
||||
#ifndef GL_AMD_sparse_texture
|
||||
#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195
|
||||
#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196
|
||||
#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197
|
||||
#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198
|
||||
#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199
|
||||
#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A
|
||||
#define GL_MIN_SPARSE_LEVEL_AMD 0x919B
|
||||
#define GL_MIN_LOD_WARNING_AMD 0x919C
|
||||
#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************/
|
||||
|
||||
@@ -6292,18 +6254,6 @@ GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end,
|
||||
GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
|
||||
GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
|
||||
GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
|
||||
typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
|
||||
typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
|
||||
typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
|
||||
typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
|
||||
typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
#endif
|
||||
|
||||
#ifndef GL_VERSION_1_2_DEPRECATED
|
||||
#define GL_VERSION_1_2_DEPRECATED 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
|
||||
GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params);
|
||||
GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params);
|
||||
@@ -6337,6 +6287,12 @@ GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean si
|
||||
GLAPI void APIENTRY glResetHistogram (GLenum target);
|
||||
GLAPI void APIENTRY glResetMinmax (GLenum target);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
|
||||
typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
|
||||
typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
|
||||
typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
|
||||
typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
|
||||
typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
|
||||
typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
|
||||
typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
|
||||
@@ -6383,21 +6339,6 @@ GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint
|
||||
GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
|
||||
GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
|
||||
GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, GLvoid *img);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
|
||||
typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
|
||||
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
|
||||
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
|
||||
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
|
||||
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
|
||||
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
|
||||
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
|
||||
typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img);
|
||||
#endif
|
||||
|
||||
#ifndef GL_VERSION_1_3_DEPRECATED
|
||||
#define GL_VERSION_1_3_DEPRECATED 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glClientActiveTexture (GLenum texture);
|
||||
GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s);
|
||||
GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v);
|
||||
@@ -6436,6 +6377,15 @@ GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m);
|
||||
GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m);
|
||||
GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
|
||||
typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
|
||||
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
|
||||
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
|
||||
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
|
||||
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
|
||||
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
|
||||
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
|
||||
typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img);
|
||||
typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
|
||||
typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);
|
||||
typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);
|
||||
@@ -6485,19 +6435,6 @@ GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param);
|
||||
GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params);
|
||||
GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param);
|
||||
GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
|
||||
typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
|
||||
typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount);
|
||||
typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);
|
||||
typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params);
|
||||
typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param);
|
||||
typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params);
|
||||
#endif
|
||||
|
||||
#ifndef GL_VERSION_1_4_DEPRECATED
|
||||
#define GL_VERSION_1_4_DEPRECATED 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glFogCoordf (GLfloat coord);
|
||||
GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord);
|
||||
GLAPI void APIENTRY glFogCoordd (GLdouble coord);
|
||||
@@ -6537,6 +6474,13 @@ GLAPI void APIENTRY glWindowPos3iv (const GLint *v);
|
||||
GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z);
|
||||
GLAPI void APIENTRY glWindowPos3sv (const GLshort *v);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
|
||||
typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
|
||||
typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount);
|
||||
typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);
|
||||
typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params);
|
||||
typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param);
|
||||
typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params);
|
||||
typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord);
|
||||
typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord);
|
||||
typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord);
|
||||
@@ -7074,10 +7018,7 @@ typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB,
|
||||
/* ARB_clear_buffer_object */
|
||||
/* ARB_compute_shader */
|
||||
/* ARB_copy_image */
|
||||
/* ARB_debug_group */
|
||||
/* ARB_debug_label */
|
||||
/* KHR_debug (ARB_debug_output promoted to KHR without suffixes) */
|
||||
/* ARB_debug_output2 (no entry points) */
|
||||
/* KHR_debug (includes ARB_debug_output commands promoted to KHR without suffixes) */
|
||||
/* ARB_explicit_uniform_location (no entry points) */
|
||||
/* ARB_framebuffer_no_attachments */
|
||||
/* ARB_internalformat_query2 */
|
||||
@@ -8621,7 +8562,6 @@ typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum ta
|
||||
|
||||
#ifndef GL_KHR_debug
|
||||
#define GL_KHR_debug 1
|
||||
/* KHR_debug also reuses entry points from ARB_debug_group and ARB_debug_label */
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
|
||||
GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
|
||||
@@ -8682,18 +8622,46 @@ GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint
|
||||
typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_debug_group
|
||||
#define GL_ARB_debug_group 1
|
||||
/* ARB_debug_group reuses entry points from KHR_debug */
|
||||
#ifndef GL_ARB_texture_view
|
||||
#define GL_ARB_texture_view 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_debug_label
|
||||
#define GL_ARB_debug_label 1
|
||||
/* ARB_debug_label reuses entry points from KHR_debug */
|
||||
#ifndef GL_ARB_vertex_attrib_binding
|
||||
#define GL_ARB_vertex_attrib_binding 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
|
||||
GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
|
||||
GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex);
|
||||
GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor);
|
||||
GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
|
||||
GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
|
||||
GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
|
||||
GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex);
|
||||
typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor);
|
||||
typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
|
||||
typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
|
||||
typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor);
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_debug_output2
|
||||
#define GL_ARB_debug_output2 1
|
||||
#ifndef GL_ARB_robustness_isolation
|
||||
#define GL_ARB_robustness_isolation 1
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_ES3_compatibility
|
||||
@@ -8824,48 +8792,6 @@ typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture
|
||||
typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_texture_view
|
||||
#define GL_ARB_texture_view 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_vertex_attrib_binding
|
||||
#define GL_ARB_vertex_attrib_binding 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
|
||||
GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
|
||||
GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex);
|
||||
GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor);
|
||||
GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
|
||||
GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
|
||||
GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
|
||||
GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex);
|
||||
typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor);
|
||||
typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
|
||||
typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
|
||||
typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
|
||||
typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor);
|
||||
#endif
|
||||
|
||||
#ifndef GL_ARB_robustness_isolation
|
||||
#define GL_ARB_robustness_isolation 1
|
||||
#endif
|
||||
|
||||
#ifndef GL_EXT_abgr
|
||||
#define GL_EXT_abgr 1
|
||||
#endif
|
||||
@@ -9607,11 +9533,15 @@ GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname,
|
||||
GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param);
|
||||
GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params);
|
||||
GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params);
|
||||
GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params);
|
||||
GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);
|
||||
typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);
|
||||
typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
|
||||
typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
|
||||
typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
|
||||
typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
|
||||
#endif
|
||||
|
||||
#ifndef GL_EXT_pixel_transform_color_table
|
||||
@@ -9963,11 +9893,11 @@ typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLen
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight);
|
||||
GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight);
|
||||
GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer);
|
||||
GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);
|
||||
typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight);
|
||||
typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer);
|
||||
typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_light_max_exponent
|
||||
@@ -12543,7 +12473,7 @@ typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glVDPAUInitNV (const GLvoid *vdpDevice, const GLvoid *getProcAddress);
|
||||
GLAPI void APIENTRY glVDPAUFiniNV (void);
|
||||
GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
|
||||
GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
|
||||
GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
|
||||
GLAPI void APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface);
|
||||
GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface);
|
||||
@@ -12554,7 +12484,7 @@ GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSur
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const GLvoid *vdpDevice, const GLvoid *getProcAddress);
|
||||
typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void);
|
||||
typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
|
||||
typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
|
||||
typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
|
||||
typedef void (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface);
|
||||
typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface);
|
||||
@@ -12792,6 +12722,16 @@ typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle)
|
||||
#define GL_AMD_query_buffer_object 1
|
||||
#endif
|
||||
|
||||
#ifndef GL_AMD_sparse_texture
|
||||
#define GL_AMD_sparse_texture 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
|
||||
GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
|
||||
typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
353
include/GL/glu.h
353
include/GL/glu.h
@@ -1,353 +0,0 @@
|
||||
/*
|
||||
* SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
|
||||
* Copyright (C) 1991-2000 Silicon Graphics, 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, sublicense,
|
||||
* 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 including the dates of first publication and
|
||||
* either this permission notice or a reference to
|
||||
* http://oss.sgi.com/projects/FreeB/
|
||||
* 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
|
||||
* SILICON GRAPHICS, INC. 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.
|
||||
*
|
||||
* Except as contained in this notice, the name of Silicon Graphics, Inc.
|
||||
* shall not be used in advertising or otherwise to promote the sale, use or
|
||||
* other dealings in this Software without prior written authorization from
|
||||
* Silicon Graphics, Inc.
|
||||
*/
|
||||
|
||||
#ifndef __glu_h__
|
||||
#define __glu_h__
|
||||
|
||||
#if defined(USE_MGL_NAMESPACE)
|
||||
#include "glu_mangle.h"
|
||||
#endif
|
||||
|
||||
#include <GL/gl.h>
|
||||
|
||||
#ifndef GLAPIENTRY
|
||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||
#define GLAPIENTRY __stdcall
|
||||
#else
|
||||
#define GLAPIENTRY
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef GLAPIENTRYP
|
||||
#define GLAPIENTRYP GLAPIENTRY *
|
||||
#endif
|
||||
|
||||
#if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GLU32)
|
||||
# undef GLAPI
|
||||
# define GLAPI __declspec(dllexport)
|
||||
#elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL)
|
||||
/* tag specifying we're building for DLL runtime support */
|
||||
# undef GLAPI
|
||||
# define GLAPI __declspec(dllimport)
|
||||
#elif !defined(GLAPI)
|
||||
/* for use with static link lib build of Win32 edition only */
|
||||
# define GLAPI extern
|
||||
#endif /* _STATIC_MESA support */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*************************************************************/
|
||||
|
||||
/* Extensions */
|
||||
#define GLU_EXT_object_space_tess 1
|
||||
#define GLU_EXT_nurbs_tessellator 1
|
||||
|
||||
/* Boolean */
|
||||
#define GLU_FALSE 0
|
||||
#define GLU_TRUE 1
|
||||
|
||||
/* Version */
|
||||
#define GLU_VERSION_1_1 1
|
||||
#define GLU_VERSION_1_2 1
|
||||
#define GLU_VERSION_1_3 1
|
||||
|
||||
/* StringName */
|
||||
#define GLU_VERSION 100800
|
||||
#define GLU_EXTENSIONS 100801
|
||||
|
||||
/* ErrorCode */
|
||||
#define GLU_INVALID_ENUM 100900
|
||||
#define GLU_INVALID_VALUE 100901
|
||||
#define GLU_OUT_OF_MEMORY 100902
|
||||
#define GLU_INCOMPATIBLE_GL_VERSION 100903
|
||||
#define GLU_INVALID_OPERATION 100904
|
||||
|
||||
/* NurbsDisplay */
|
||||
/* GLU_FILL */
|
||||
#define GLU_OUTLINE_POLYGON 100240
|
||||
#define GLU_OUTLINE_PATCH 100241
|
||||
|
||||
/* NurbsCallback */
|
||||
#define GLU_NURBS_ERROR 100103
|
||||
#define GLU_ERROR 100103
|
||||
#define GLU_NURBS_BEGIN 100164
|
||||
#define GLU_NURBS_BEGIN_EXT 100164
|
||||
#define GLU_NURBS_VERTEX 100165
|
||||
#define GLU_NURBS_VERTEX_EXT 100165
|
||||
#define GLU_NURBS_NORMAL 100166
|
||||
#define GLU_NURBS_NORMAL_EXT 100166
|
||||
#define GLU_NURBS_COLOR 100167
|
||||
#define GLU_NURBS_COLOR_EXT 100167
|
||||
#define GLU_NURBS_TEXTURE_COORD 100168
|
||||
#define GLU_NURBS_TEX_COORD_EXT 100168
|
||||
#define GLU_NURBS_END 100169
|
||||
#define GLU_NURBS_END_EXT 100169
|
||||
#define GLU_NURBS_BEGIN_DATA 100170
|
||||
#define GLU_NURBS_BEGIN_DATA_EXT 100170
|
||||
#define GLU_NURBS_VERTEX_DATA 100171
|
||||
#define GLU_NURBS_VERTEX_DATA_EXT 100171
|
||||
#define GLU_NURBS_NORMAL_DATA 100172
|
||||
#define GLU_NURBS_NORMAL_DATA_EXT 100172
|
||||
#define GLU_NURBS_COLOR_DATA 100173
|
||||
#define GLU_NURBS_COLOR_DATA_EXT 100173
|
||||
#define GLU_NURBS_TEXTURE_COORD_DATA 100174
|
||||
#define GLU_NURBS_TEX_COORD_DATA_EXT 100174
|
||||
#define GLU_NURBS_END_DATA 100175
|
||||
#define GLU_NURBS_END_DATA_EXT 100175
|
||||
|
||||
/* NurbsError */
|
||||
#define GLU_NURBS_ERROR1 100251
|
||||
#define GLU_NURBS_ERROR2 100252
|
||||
#define GLU_NURBS_ERROR3 100253
|
||||
#define GLU_NURBS_ERROR4 100254
|
||||
#define GLU_NURBS_ERROR5 100255
|
||||
#define GLU_NURBS_ERROR6 100256
|
||||
#define GLU_NURBS_ERROR7 100257
|
||||
#define GLU_NURBS_ERROR8 100258
|
||||
#define GLU_NURBS_ERROR9 100259
|
||||
#define GLU_NURBS_ERROR10 100260
|
||||
#define GLU_NURBS_ERROR11 100261
|
||||
#define GLU_NURBS_ERROR12 100262
|
||||
#define GLU_NURBS_ERROR13 100263
|
||||
#define GLU_NURBS_ERROR14 100264
|
||||
#define GLU_NURBS_ERROR15 100265
|
||||
#define GLU_NURBS_ERROR16 100266
|
||||
#define GLU_NURBS_ERROR17 100267
|
||||
#define GLU_NURBS_ERROR18 100268
|
||||
#define GLU_NURBS_ERROR19 100269
|
||||
#define GLU_NURBS_ERROR20 100270
|
||||
#define GLU_NURBS_ERROR21 100271
|
||||
#define GLU_NURBS_ERROR22 100272
|
||||
#define GLU_NURBS_ERROR23 100273
|
||||
#define GLU_NURBS_ERROR24 100274
|
||||
#define GLU_NURBS_ERROR25 100275
|
||||
#define GLU_NURBS_ERROR26 100276
|
||||
#define GLU_NURBS_ERROR27 100277
|
||||
#define GLU_NURBS_ERROR28 100278
|
||||
#define GLU_NURBS_ERROR29 100279
|
||||
#define GLU_NURBS_ERROR30 100280
|
||||
#define GLU_NURBS_ERROR31 100281
|
||||
#define GLU_NURBS_ERROR32 100282
|
||||
#define GLU_NURBS_ERROR33 100283
|
||||
#define GLU_NURBS_ERROR34 100284
|
||||
#define GLU_NURBS_ERROR35 100285
|
||||
#define GLU_NURBS_ERROR36 100286
|
||||
#define GLU_NURBS_ERROR37 100287
|
||||
|
||||
/* NurbsProperty */
|
||||
#define GLU_AUTO_LOAD_MATRIX 100200
|
||||
#define GLU_CULLING 100201
|
||||
#define GLU_SAMPLING_TOLERANCE 100203
|
||||
#define GLU_DISPLAY_MODE 100204
|
||||
#define GLU_PARAMETRIC_TOLERANCE 100202
|
||||
#define GLU_SAMPLING_METHOD 100205
|
||||
#define GLU_U_STEP 100206
|
||||
#define GLU_V_STEP 100207
|
||||
#define GLU_NURBS_MODE 100160
|
||||
#define GLU_NURBS_MODE_EXT 100160
|
||||
#define GLU_NURBS_TESSELLATOR 100161
|
||||
#define GLU_NURBS_TESSELLATOR_EXT 100161
|
||||
#define GLU_NURBS_RENDERER 100162
|
||||
#define GLU_NURBS_RENDERER_EXT 100162
|
||||
|
||||
/* NurbsSampling */
|
||||
#define GLU_OBJECT_PARAMETRIC_ERROR 100208
|
||||
#define GLU_OBJECT_PARAMETRIC_ERROR_EXT 100208
|
||||
#define GLU_OBJECT_PATH_LENGTH 100209
|
||||
#define GLU_OBJECT_PATH_LENGTH_EXT 100209
|
||||
#define GLU_PATH_LENGTH 100215
|
||||
#define GLU_PARAMETRIC_ERROR 100216
|
||||
#define GLU_DOMAIN_DISTANCE 100217
|
||||
|
||||
/* NurbsTrim */
|
||||
#define GLU_MAP1_TRIM_2 100210
|
||||
#define GLU_MAP1_TRIM_3 100211
|
||||
|
||||
/* QuadricDrawStyle */
|
||||
#define GLU_POINT 100010
|
||||
#define GLU_LINE 100011
|
||||
#define GLU_FILL 100012
|
||||
#define GLU_SILHOUETTE 100013
|
||||
|
||||
/* QuadricCallback */
|
||||
/* GLU_ERROR */
|
||||
|
||||
/* QuadricNormal */
|
||||
#define GLU_SMOOTH 100000
|
||||
#define GLU_FLAT 100001
|
||||
#define GLU_NONE 100002
|
||||
|
||||
/* QuadricOrientation */
|
||||
#define GLU_OUTSIDE 100020
|
||||
#define GLU_INSIDE 100021
|
||||
|
||||
/* TessCallback */
|
||||
#define GLU_TESS_BEGIN 100100
|
||||
#define GLU_BEGIN 100100
|
||||
#define GLU_TESS_VERTEX 100101
|
||||
#define GLU_VERTEX 100101
|
||||
#define GLU_TESS_END 100102
|
||||
#define GLU_END 100102
|
||||
#define GLU_TESS_ERROR 100103
|
||||
#define GLU_TESS_EDGE_FLAG 100104
|
||||
#define GLU_EDGE_FLAG 100104
|
||||
#define GLU_TESS_COMBINE 100105
|
||||
#define GLU_TESS_BEGIN_DATA 100106
|
||||
#define GLU_TESS_VERTEX_DATA 100107
|
||||
#define GLU_TESS_END_DATA 100108
|
||||
#define GLU_TESS_ERROR_DATA 100109
|
||||
#define GLU_TESS_EDGE_FLAG_DATA 100110
|
||||
#define GLU_TESS_COMBINE_DATA 100111
|
||||
|
||||
/* TessContour */
|
||||
#define GLU_CW 100120
|
||||
#define GLU_CCW 100121
|
||||
#define GLU_INTERIOR 100122
|
||||
#define GLU_EXTERIOR 100123
|
||||
#define GLU_UNKNOWN 100124
|
||||
|
||||
/* TessProperty */
|
||||
#define GLU_TESS_WINDING_RULE 100140
|
||||
#define GLU_TESS_BOUNDARY_ONLY 100141
|
||||
#define GLU_TESS_TOLERANCE 100142
|
||||
|
||||
/* TessError */
|
||||
#define GLU_TESS_ERROR1 100151
|
||||
#define GLU_TESS_ERROR2 100152
|
||||
#define GLU_TESS_ERROR3 100153
|
||||
#define GLU_TESS_ERROR4 100154
|
||||
#define GLU_TESS_ERROR5 100155
|
||||
#define GLU_TESS_ERROR6 100156
|
||||
#define GLU_TESS_ERROR7 100157
|
||||
#define GLU_TESS_ERROR8 100158
|
||||
#define GLU_TESS_MISSING_BEGIN_POLYGON 100151
|
||||
#define GLU_TESS_MISSING_BEGIN_CONTOUR 100152
|
||||
#define GLU_TESS_MISSING_END_POLYGON 100153
|
||||
#define GLU_TESS_MISSING_END_CONTOUR 100154
|
||||
#define GLU_TESS_COORD_TOO_LARGE 100155
|
||||
#define GLU_TESS_NEED_COMBINE_CALLBACK 100156
|
||||
|
||||
/* TessWinding */
|
||||
#define GLU_TESS_WINDING_ODD 100130
|
||||
#define GLU_TESS_WINDING_NONZERO 100131
|
||||
#define GLU_TESS_WINDING_POSITIVE 100132
|
||||
#define GLU_TESS_WINDING_NEGATIVE 100133
|
||||
#define GLU_TESS_WINDING_ABS_GEQ_TWO 100134
|
||||
|
||||
/*************************************************************/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
class GLUnurbs;
|
||||
class GLUquadric;
|
||||
class GLUtesselator;
|
||||
#else
|
||||
typedef struct GLUnurbs GLUnurbs;
|
||||
typedef struct GLUquadric GLUquadric;
|
||||
typedef struct GLUtesselator GLUtesselator;
|
||||
#endif
|
||||
|
||||
typedef GLUnurbs GLUnurbsObj;
|
||||
typedef GLUquadric GLUquadricObj;
|
||||
typedef GLUtesselator GLUtesselatorObj;
|
||||
typedef GLUtesselator GLUtriangulatorObj;
|
||||
|
||||
#define GLU_TESS_MAX_COORD 1.0e150
|
||||
|
||||
/* Internal convenience typedefs */
|
||||
typedef void (GLAPIENTRYP _GLUfuncptr)(void);
|
||||
|
||||
GLAPI void GLAPIENTRY gluBeginCurve (GLUnurbs* nurb);
|
||||
GLAPI void GLAPIENTRY gluBeginPolygon (GLUtesselator* tess);
|
||||
GLAPI void GLAPIENTRY gluBeginSurface (GLUnurbs* nurb);
|
||||
GLAPI void GLAPIENTRY gluBeginTrim (GLUnurbs* nurb);
|
||||
GLAPI GLint GLAPIENTRY gluBuild1DMipmapLevels (GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data);
|
||||
GLAPI GLint GLAPIENTRY gluBuild1DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, const void *data);
|
||||
GLAPI GLint GLAPIENTRY gluBuild2DMipmapLevels (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data);
|
||||
GLAPI GLint GLAPIENTRY gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data);
|
||||
GLAPI GLint GLAPIENTRY gluBuild3DMipmapLevels (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data);
|
||||
GLAPI GLint GLAPIENTRY gluBuild3DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
|
||||
GLAPI GLboolean GLAPIENTRY gluCheckExtension (const GLubyte *extName, const GLubyte *extString);
|
||||
GLAPI void GLAPIENTRY gluCylinder (GLUquadric* quad, GLdouble base, GLdouble top, GLdouble height, GLint slices, GLint stacks);
|
||||
GLAPI void GLAPIENTRY gluDeleteNurbsRenderer (GLUnurbs* nurb);
|
||||
GLAPI void GLAPIENTRY gluDeleteQuadric (GLUquadric* quad);
|
||||
GLAPI void GLAPIENTRY gluDeleteTess (GLUtesselator* tess);
|
||||
GLAPI void GLAPIENTRY gluDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops);
|
||||
GLAPI void GLAPIENTRY gluEndCurve (GLUnurbs* nurb);
|
||||
GLAPI void GLAPIENTRY gluEndPolygon (GLUtesselator* tess);
|
||||
GLAPI void GLAPIENTRY gluEndSurface (GLUnurbs* nurb);
|
||||
GLAPI void GLAPIENTRY gluEndTrim (GLUnurbs* nurb);
|
||||
GLAPI const GLubyte * GLAPIENTRY gluErrorString (GLenum error);
|
||||
GLAPI void GLAPIENTRY gluGetNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat* data);
|
||||
GLAPI const GLubyte * GLAPIENTRY gluGetString (GLenum name);
|
||||
GLAPI void GLAPIENTRY gluGetTessProperty (GLUtesselator* tess, GLenum which, GLdouble* data);
|
||||
GLAPI void GLAPIENTRY gluLoadSamplingMatrices (GLUnurbs* nurb, const GLfloat *model, const GLfloat *perspective, const GLint *view);
|
||||
GLAPI void GLAPIENTRY gluLookAt (GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ);
|
||||
GLAPI GLUnurbs* GLAPIENTRY gluNewNurbsRenderer (void);
|
||||
GLAPI GLUquadric* GLAPIENTRY gluNewQuadric (void);
|
||||
GLAPI GLUtesselator* GLAPIENTRY gluNewTess (void);
|
||||
GLAPI void GLAPIENTRY gluNextContour (GLUtesselator* tess, GLenum type);
|
||||
GLAPI void GLAPIENTRY gluNurbsCallback (GLUnurbs* nurb, GLenum which, _GLUfuncptr CallBackFunc);
|
||||
GLAPI void GLAPIENTRY gluNurbsCallbackData (GLUnurbs* nurb, GLvoid* userData);
|
||||
GLAPI void GLAPIENTRY gluNurbsCallbackDataEXT (GLUnurbs* nurb, GLvoid* userData);
|
||||
GLAPI void GLAPIENTRY gluNurbsCurve (GLUnurbs* nurb, GLint knotCount, GLfloat *knots, GLint stride, GLfloat *control, GLint order, GLenum type);
|
||||
GLAPI void GLAPIENTRY gluNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat value);
|
||||
GLAPI void GLAPIENTRY gluNurbsSurface (GLUnurbs* nurb, GLint sKnotCount, GLfloat* sKnots, GLint tKnotCount, GLfloat* tKnots, GLint sStride, GLint tStride, GLfloat* control, GLint sOrder, GLint tOrder, GLenum type);
|
||||
GLAPI void GLAPIENTRY gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
|
||||
GLAPI void GLAPIENTRY gluPartialDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops, GLdouble start, GLdouble sweep);
|
||||
GLAPI void GLAPIENTRY gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
|
||||
GLAPI void GLAPIENTRY gluPickMatrix (GLdouble x, GLdouble y, GLdouble delX, GLdouble delY, GLint *viewport);
|
||||
GLAPI GLint GLAPIENTRY gluProject (GLdouble objX, GLdouble objY, GLdouble objZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* winX, GLdouble* winY, GLdouble* winZ);
|
||||
GLAPI void GLAPIENTRY gluPwlCurve (GLUnurbs* nurb, GLint count, GLfloat* data, GLint stride, GLenum type);
|
||||
GLAPI void GLAPIENTRY gluQuadricCallback (GLUquadric* quad, GLenum which, _GLUfuncptr CallBackFunc);
|
||||
GLAPI void GLAPIENTRY gluQuadricDrawStyle (GLUquadric* quad, GLenum draw);
|
||||
GLAPI void GLAPIENTRY gluQuadricNormals (GLUquadric* quad, GLenum normal);
|
||||
GLAPI void GLAPIENTRY gluQuadricOrientation (GLUquadric* quad, GLenum orientation);
|
||||
GLAPI void GLAPIENTRY gluQuadricTexture (GLUquadric* quad, GLboolean texture);
|
||||
GLAPI GLint GLAPIENTRY gluScaleImage (GLenum format, GLsizei wIn, GLsizei hIn, GLenum typeIn, const void *dataIn, GLsizei wOut, GLsizei hOut, GLenum typeOut, GLvoid* dataOut);
|
||||
GLAPI void GLAPIENTRY gluSphere (GLUquadric* quad, GLdouble radius, GLint slices, GLint stacks);
|
||||
GLAPI void GLAPIENTRY gluTessBeginContour (GLUtesselator* tess);
|
||||
GLAPI void GLAPIENTRY gluTessBeginPolygon (GLUtesselator* tess, GLvoid* data);
|
||||
GLAPI void GLAPIENTRY gluTessCallback (GLUtesselator* tess, GLenum which, _GLUfuncptr CallBackFunc);
|
||||
GLAPI void GLAPIENTRY gluTessEndContour (GLUtesselator* tess);
|
||||
GLAPI void GLAPIENTRY gluTessEndPolygon (GLUtesselator* tess);
|
||||
GLAPI void GLAPIENTRY gluTessNormal (GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ);
|
||||
GLAPI void GLAPIENTRY gluTessProperty (GLUtesselator* tess, GLenum which, GLdouble data);
|
||||
GLAPI void GLAPIENTRY gluTessVertex (GLUtesselator* tess, GLdouble *location, GLvoid* data);
|
||||
GLAPI GLint GLAPIENTRY gluUnProject (GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* objX, GLdouble* objY, GLdouble* objZ);
|
||||
GLAPI GLint GLAPIENTRY gluUnProject4 (GLdouble winX, GLdouble winY, GLdouble winZ, GLdouble clipW, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble nearVal, GLdouble farVal, GLdouble* objX, GLdouble* objY, GLdouble* objZ, GLdouble* objW);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __glu_h__ */
|
@@ -1,86 +0,0 @@
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 3.0
|
||||
* Copyright (C) 1995-1998 Brian Paul
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GLU_MANGLE_H
|
||||
#define GLU_MANGLE_H
|
||||
|
||||
|
||||
#define gluLookAt mgluLookAt
|
||||
#define gluOrtho2D mgluOrtho2D
|
||||
#define gluPerspective mgluPerspective
|
||||
#define gluPickMatrix mgluPickMatrix
|
||||
#define gluProject mgluProject
|
||||
#define gluUnProject mgluUnProject
|
||||
#define gluErrorString mgluErrorString
|
||||
#define gluScaleImage mgluScaleImage
|
||||
#define gluBuild1DMipmaps mgluBuild1DMipmaps
|
||||
#define gluBuild2DMipmaps mgluBuild2DMipmaps
|
||||
#define gluNewQuadric mgluNewQuadric
|
||||
#define gluDeleteQuadric mgluDeleteQuadric
|
||||
#define gluQuadricDrawStyle mgluQuadricDrawStyle
|
||||
#define gluQuadricOrientation mgluQuadricOrientation
|
||||
#define gluQuadricNormals mgluQuadricNormals
|
||||
#define gluQuadricTexture mgluQuadricTexture
|
||||
#define gluQuadricCallback mgluQuadricCallback
|
||||
#define gluCylinder mgluCylinder
|
||||
#define gluSphere mgluSphere
|
||||
#define gluDisk mgluDisk
|
||||
#define gluPartialDisk mgluPartialDisk
|
||||
#define gluNewNurbsRenderer mgluNewNurbsRenderer
|
||||
#define gluDeleteNurbsRenderer mgluDeleteNurbsRenderer
|
||||
#define gluLoadSamplingMatrices mgluLoadSamplingMatrices
|
||||
#define gluNurbsProperty mgluNurbsProperty
|
||||
#define gluGetNurbsProperty mgluGetNurbsProperty
|
||||
#define gluBeginCurve mgluBeginCurve
|
||||
#define gluEndCurve mgluEndCurve
|
||||
#define gluNurbsCurve mgluNurbsCurve
|
||||
#define gluBeginSurface mgluBeginSurface
|
||||
#define gluEndSurface mgluEndSurface
|
||||
#define gluNurbsSurface mgluNurbsSurface
|
||||
#define gluBeginTrim mgluBeginTrim
|
||||
#define gluEndTrim mgluEndTrim
|
||||
#define gluPwlCurve mgluPwlCurve
|
||||
#define gluNurbsCallback mgluNurbsCallback
|
||||
#define gluNewTess mgluNewTess
|
||||
#define gluDeleteTess mgluDeleteTess
|
||||
#define gluTessBeginPolygon mgluTessBeginPolygon
|
||||
#define gluTessBeginContour mgluTessBeginContour
|
||||
#define gluTessVertex mgluTessVertex
|
||||
#define gluTessEndPolygon mgluTessEndPolygon
|
||||
#define gluTessEndContour mgluTessEndContour
|
||||
#define gluTessProperty mgluTessProperty
|
||||
#define gluTessNormal mgluTessNormal
|
||||
#define gluTessCallback mgluTessCallback
|
||||
#define gluGetTessProperty mgluGetTessProperty
|
||||
#define gluBeginPolygon mgluBeginPolygon
|
||||
#define gluNextContour mgluNextContour
|
||||
#define gluEndPolygon mgluEndPolygon
|
||||
#define gluGetString mgluGetString
|
||||
#define gluBuild1DMipmapLevels mgluBuild1DMipmapLevels
|
||||
#define gluBuild2DMipmapLevels mgluBuild2DMipmapLevels
|
||||
#define gluBuild3DMipmapLevels mgluBuild3DMipmapLevels
|
||||
#define gluBuild3DMipmaps mgluBuild3DMipmaps
|
||||
#define gluCheckExtension mgluCheckExtension
|
||||
#define gluUnProject4 mgluUnProject4
|
||||
#define gluNurbsCallbackData mgluNurbsCallbackData
|
||||
#define gluNurbsCallbackDataEXT mgluNurbsCallbackDataEXT
|
||||
|
||||
#endif
|
@@ -923,6 +923,10 @@ struct __DRIdri2ExtensionRec {
|
||||
* __DRI_IMAGE_FORMAT_NONE is for images that aren't directly usable
|
||||
* by the driver (YUV planar formats) but serve as a base image for
|
||||
* creating sub-images for the different planes within the image.
|
||||
*
|
||||
* R8, GR88 and NONE should not be used with createImageFormName or
|
||||
* createImage, and are returned by query from sub images created with
|
||||
* createImageFromNames (NONE, see above) and fromPlane (R8 & GR88).
|
||||
*/
|
||||
#define __DRI_IMAGE_FORMAT_RGB565 0x1001
|
||||
#define __DRI_IMAGE_FORMAT_XRGB8888 0x1002
|
||||
@@ -937,6 +941,49 @@ struct __DRIdri2ExtensionRec {
|
||||
#define __DRI_IMAGE_USE_SCANOUT 0x0002
|
||||
#define __DRI_IMAGE_USE_CURSOR 0x0004 /* Depricated */
|
||||
|
||||
|
||||
/**
|
||||
* Four CC formats that matches with WL_DRM_FORMAT_* from wayland_drm.h
|
||||
* and GBM_FORMAT_* from gbm.h, used with createImageFromNames.
|
||||
*
|
||||
* \since 5
|
||||
*/
|
||||
|
||||
#define __DRI_IMAGE_FOURCC_RGB565 0x36314752
|
||||
#define __DRI_IMAGE_FOURCC_ARGB8888 0x34325241
|
||||
#define __DRI_IMAGE_FOURCC_XRGB8888 0x34325258
|
||||
#define __DRI_IMAGE_FOURCC_ABGR8888 0x34324241
|
||||
#define __DRI_IMAGE_FOURCC_XBGR8888 0x34324258
|
||||
#define __DRI_IMAGE_FOURCC_YUV410 0x39565559
|
||||
#define __DRI_IMAGE_FOURCC_YUV411 0x31315559
|
||||
#define __DRI_IMAGE_FOURCC_YUV420 0x32315559
|
||||
#define __DRI_IMAGE_FOURCC_YUV422 0x36315559
|
||||
#define __DRI_IMAGE_FOURCC_YUV444 0x34325559
|
||||
#define __DRI_IMAGE_FOURCC_NV12 0x3231564e
|
||||
#define __DRI_IMAGE_FOURCC_NV16 0x3631564e
|
||||
#define __DRI_IMAGE_FOURCC_YUYV 0x56595559
|
||||
|
||||
|
||||
/**
|
||||
* Queryable on images created by createImageFromNames.
|
||||
*
|
||||
* RGB and RGBA are may be usable directly as images but its still
|
||||
* recommended to call fromPlanar with plane == 0.
|
||||
*
|
||||
* Y_U_V, Y_UV and Y_XUXV all requires call to fromPlanar to create
|
||||
* usable sub-images, sampling from images return raw YUV data and
|
||||
* color conversion needs to be done in the shader.
|
||||
*
|
||||
* \since 5
|
||||
*/
|
||||
|
||||
#define __DRI_IMAGE_COMPONENTS_RGB 0x3001
|
||||
#define __DRI_IMAGE_COMPONENTS_RGBA 0x3002
|
||||
#define __DRI_IMAGE_COMPONENTS_Y_U_V 0x3003
|
||||
#define __DRI_IMAGE_COMPONENTS_Y_UV 0x3004
|
||||
#define __DRI_IMAGE_COMPONENTS_Y_XUXV 0x3005
|
||||
|
||||
|
||||
/**
|
||||
* queryImage attributes
|
||||
*/
|
||||
@@ -947,6 +994,7 @@ struct __DRIdri2ExtensionRec {
|
||||
#define __DRI_IMAGE_ATTRIB_FORMAT 0x2003 /* available in versions 3+ */
|
||||
#define __DRI_IMAGE_ATTRIB_WIDTH 0x2004 /* available in versions 4+ */
|
||||
#define __DRI_IMAGE_ATTRIB_HEIGHT 0x2005
|
||||
#define __DRI_IMAGE_ATTRIB_COMPONENTS 0x2006 /* available in versions 5+ */
|
||||
|
||||
typedef struct __DRIimageRec __DRIimage;
|
||||
typedef struct __DRIimageExtensionRec __DRIimageExtension;
|
||||
@@ -983,6 +1031,19 @@ struct __DRIimageExtensionRec {
|
||||
*/
|
||||
GLboolean (*validateUsage)(__DRIimage *image, unsigned int use);
|
||||
|
||||
/**
|
||||
* Unlike createImageFromName __DRI_IMAGE_FORMAT is not but instead
|
||||
* __DRI_IMAGE_FOURCC and strides are in bytes not pixels. Stride is
|
||||
* also per block and not per pixel (for non-RGB, see gallium blocks).
|
||||
*
|
||||
* \since 5
|
||||
*/
|
||||
__DRIimage *(*createImageFromNames)(__DRIscreen *screen,
|
||||
int width, int height, int fourcc,
|
||||
int *names, int num_names,
|
||||
int *strides, int *offsets,
|
||||
void *loaderPrivate);
|
||||
|
||||
/**
|
||||
* Create an image out of a sub-region of a parent image. This
|
||||
* entry point lets us create individual __DRIimages for different
|
||||
@@ -998,10 +1059,8 @@ struct __DRIimageExtensionRec {
|
||||
*
|
||||
* \since 5
|
||||
*/
|
||||
__DRIimage *(*createSubImage)(__DRIimage *image,
|
||||
int width, int height, int format,
|
||||
int offset, int pitch,
|
||||
void *loaderPrivate);
|
||||
__DRIimage *(*fromPlanar)(__DRIimage *image, int plane,
|
||||
void *loaderPrivate);
|
||||
};
|
||||
|
||||
|
||||
|
5
m4/.gitignore
vendored
Normal file
5
m4/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
libtool.m4
|
||||
ltoptions.m4
|
||||
ltsugar.m4
|
||||
ltversion.m4
|
||||
lt~obsolete.m4
|
309
m4/ax_pthread.m4
Normal file
309
m4/ax_pthread.m4
Normal file
@@ -0,0 +1,309 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_pthread.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# This macro figures out how to build C programs using POSIX threads. It
|
||||
# sets the PTHREAD_LIBS output variable to the threads library and linker
|
||||
# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
|
||||
# flags that are needed. (The user can also force certain compiler
|
||||
# flags/libs to be tested by setting these environment variables.)
|
||||
#
|
||||
# Also sets PTHREAD_CC to any special C compiler that is needed for
|
||||
# multi-threaded programs (defaults to the value of CC otherwise). (This
|
||||
# is necessary on AIX to use the special cc_r compiler alias.)
|
||||
#
|
||||
# NOTE: You are assumed to not only compile your program with these flags,
|
||||
# but also link it with them as well. e.g. you should link with
|
||||
# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
|
||||
#
|
||||
# If you are only building threads programs, you may wish to use these
|
||||
# variables in your default LIBS, CFLAGS, and CC:
|
||||
#
|
||||
# LIBS="$PTHREAD_LIBS $LIBS"
|
||||
# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
# CC="$PTHREAD_CC"
|
||||
#
|
||||
# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
|
||||
# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
|
||||
# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
|
||||
#
|
||||
# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
|
||||
# PTHREAD_PRIO_INHERIT symbol is defined when compiling with
|
||||
# PTHREAD_CFLAGS.
|
||||
#
|
||||
# ACTION-IF-FOUND is a list of shell commands to run if a threads library
|
||||
# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
|
||||
# is not found. If ACTION-IF-FOUND is not specified, the default action
|
||||
# will define HAVE_PTHREAD.
|
||||
#
|
||||
# Please let the authors know if this macro fails on any platform, or if
|
||||
# you have any other suggestions or comments. This macro was based on work
|
||||
# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
|
||||
# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
|
||||
# Alejandro Forero Cuervo to the autoconf macro repository. We are also
|
||||
# grateful for the helpful feedback of numerous users.
|
||||
#
|
||||
# Updated for Autoconf 2.68 by Daniel Richard G.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
||||
# Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation, either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 18
|
||||
|
||||
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
|
||||
AC_DEFUN([AX_PTHREAD], [
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_LANG_PUSH([C])
|
||||
ax_pthread_ok=no
|
||||
|
||||
# We used to check for pthread.h first, but this fails if pthread.h
|
||||
# requires special compiler flags (e.g. on True64 or Sequent).
|
||||
# It gets checked for in the link test anyway.
|
||||
|
||||
# First of all, check if the user has set any of the PTHREAD_LIBS,
|
||||
# etcetera environment variables, and if threads linking works using
|
||||
# them:
|
||||
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
|
||||
AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
|
||||
AC_MSG_RESULT($ax_pthread_ok)
|
||||
if test x"$ax_pthread_ok" = xno; then
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
fi
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
fi
|
||||
|
||||
# We must check for the threads library under a number of different
|
||||
# names; the ordering is very important because some systems
|
||||
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
|
||||
# libraries is broken (non-POSIX).
|
||||
|
||||
# Create a list of thread flags to try. Items starting with a "-" are
|
||||
# C compiler flags, and other items are library names, except for "none"
|
||||
# which indicates that we try without any flags at all, and "pthread-config"
|
||||
# which is a program returning the flags for the Pth emulation library.
|
||||
|
||||
ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||
|
||||
# The ordering *is* (sometimes) important. Some notes on the
|
||||
# individual items follow:
|
||||
|
||||
# pthreads: AIX (must check this before -lpthread)
|
||||
# none: in case threads are in libc; should be tried before -Kthread and
|
||||
# other compiler flags to prevent continual compiler warnings
|
||||
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
|
||||
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
||||
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
||||
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
|
||||
# -pthreads: Solaris/gcc
|
||||
# -mthreads: Mingw32/gcc, Lynx/gcc
|
||||
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
||||
# doesn't hurt to check since this sometimes defines pthreads too;
|
||||
# also defines -D_REENTRANT)
|
||||
# ... -mt is also the pthreads flag for HP/aCC
|
||||
# pthread: Linux, etcetera
|
||||
# --thread-safe: KAI C++
|
||||
# pthread-config: use pthread-config program (for GNU Pth library)
|
||||
|
||||
case ${host_os} in
|
||||
solaris*)
|
||||
|
||||
# On Solaris (at least, for some versions), libc contains stubbed
|
||||
# (non-functional) versions of the pthreads routines, so link-based
|
||||
# tests will erroneously succeed. (We need to link with -pthreads/-mt/
|
||||
# -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
|
||||
# a function called by this macro, so we could check for that, but
|
||||
# who knows whether they'll stub that too in a future libc.) So,
|
||||
# we'll just look for -pthreads and -lpthread first:
|
||||
|
||||
ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
|
||||
;;
|
||||
|
||||
darwin*)
|
||||
ax_pthread_flags="-pthread $ax_pthread_flags"
|
||||
;;
|
||||
esac
|
||||
|
||||
if test x"$ax_pthread_ok" = xno; then
|
||||
for flag in $ax_pthread_flags; do
|
||||
|
||||
case $flag in
|
||||
none)
|
||||
AC_MSG_CHECKING([whether pthreads work without any flags])
|
||||
;;
|
||||
|
||||
-*)
|
||||
AC_MSG_CHECKING([whether pthreads work with $flag])
|
||||
PTHREAD_CFLAGS="$flag"
|
||||
;;
|
||||
|
||||
pthread-config)
|
||||
AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
|
||||
if test x"$ax_pthread_config" = xno; then continue; fi
|
||||
PTHREAD_CFLAGS="`pthread-config --cflags`"
|
||||
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
||||
;;
|
||||
|
||||
*)
|
||||
AC_MSG_CHECKING([for the pthreads library -l$flag])
|
||||
PTHREAD_LIBS="-l$flag"
|
||||
;;
|
||||
esac
|
||||
|
||||
save_LIBS="$LIBS"
|
||||
save_CFLAGS="$CFLAGS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
|
||||
# Check for various functions. We must include pthread.h,
|
||||
# since some functions may be macros. (On the Sequent, we
|
||||
# need a special flag -Kthread to make this header compile.)
|
||||
# We check for pthread_join because it is in -lpthread on IRIX
|
||||
# while pthread_create is in libc. We check for pthread_attr_init
|
||||
# due to DEC craziness with -lpthreads. We check for
|
||||
# pthread_cleanup_push because it is one of the few pthread
|
||||
# functions on Solaris that doesn't have a non-functional libc stub.
|
||||
# We try pthread_create on general principles.
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
|
||||
static void routine(void *a) { a = 0; }
|
||||
static void *start_routine(void *a) { return a; }],
|
||||
[pthread_t th; pthread_attr_t attr;
|
||||
pthread_create(&th, 0, start_routine, 0);
|
||||
pthread_join(th, 0);
|
||||
pthread_attr_init(&attr);
|
||||
pthread_cleanup_push(routine, 0);
|
||||
pthread_cleanup_pop(0) /* ; */])],
|
||||
[ax_pthread_ok=yes],
|
||||
[])
|
||||
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
AC_MSG_RESULT($ax_pthread_ok)
|
||||
if test "x$ax_pthread_ok" = xyes; then
|
||||
break;
|
||||
fi
|
||||
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
done
|
||||
fi
|
||||
|
||||
# Various other checks:
|
||||
if test "x$ax_pthread_ok" = xyes; then
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
|
||||
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
|
||||
AC_MSG_CHECKING([for joinable pthread attribute])
|
||||
attr_name=unknown
|
||||
for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
|
||||
[int attr = $attr; return attr /* ; */])],
|
||||
[attr_name=$attr; break],
|
||||
[])
|
||||
done
|
||||
AC_MSG_RESULT($attr_name)
|
||||
if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
|
||||
AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
|
||||
[Define to necessary symbol if this constant
|
||||
uses a non-standard name on your system.])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([if more special flags are required for pthreads])
|
||||
flag=no
|
||||
case ${host_os} in
|
||||
aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
|
||||
osf* | hpux*) flag="-D_REENTRANT";;
|
||||
solaris*)
|
||||
if test "$GCC" = "yes"; then
|
||||
flag="-D_REENTRANT"
|
||||
else
|
||||
flag="-mt -D_REENTRANT"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
AC_MSG_RESULT(${flag})
|
||||
if test "x$flag" != xno; then
|
||||
PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
|
||||
ax_cv_PTHREAD_PRIO_INHERIT, [
|
||||
AC_LINK_IFELSE([
|
||||
AC_LANG_PROGRAM([[#include <pthread.h>]], [[int i = PTHREAD_PRIO_INHERIT;]])],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT=yes],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT=no])
|
||||
])
|
||||
AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"],
|
||||
AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.]))
|
||||
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
# More AIX lossage: must compile with xlc_r or cc_r
|
||||
if test x"$GCC" != xyes; then
|
||||
AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
|
||||
else
|
||||
PTHREAD_CC=$CC
|
||||
fi
|
||||
else
|
||||
PTHREAD_CC="$CC"
|
||||
fi
|
||||
|
||||
AC_SUBST(PTHREAD_LIBS)
|
||||
AC_SUBST(PTHREAD_CFLAGS)
|
||||
AC_SUBST(PTHREAD_CC)
|
||||
|
||||
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||
if test x"$ax_pthread_ok" = xyes; then
|
||||
ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
|
||||
:
|
||||
else
|
||||
ax_pthread_ok=no
|
||||
$2
|
||||
fi
|
||||
AC_LANG_POP
|
||||
])dnl AX_PTHREAD
|
@@ -251,7 +251,7 @@ def generate(env):
|
||||
'_SVID_SOURCE',
|
||||
'_BSD_SOURCE',
|
||||
'_GNU_SOURCE',
|
||||
'PTHREADS',
|
||||
'HAVE_PTHREAD',
|
||||
'HAVE_POSIX_MEMALIGN',
|
||||
]
|
||||
if env['platform'] == 'darwin':
|
||||
@@ -498,7 +498,7 @@ def generate(env):
|
||||
|
||||
# Default libs
|
||||
libs = []
|
||||
if env['platform'] in ('posix', 'linux', 'freebsd', 'darwin'):
|
||||
if env['platform'] in ('darwin', 'freebsd', 'linux', 'posix', 'sunos'):
|
||||
libs += ['m', 'pthread', 'dl']
|
||||
env.Append(LIBS = libs)
|
||||
|
||||
|
@@ -27,8 +27,6 @@ if not env['embedded']:
|
||||
SConscript('glx/SConscript')
|
||||
if env['platform'] not in ['darwin', 'haiku', 'sunos']:
|
||||
SConscript('egl/main/SConscript')
|
||||
if env['platform'] not in ['darwin']:
|
||||
SConscript('glu/sgi/SConscript')
|
||||
|
||||
if env['gles']:
|
||||
SConscript('mapi/shared-glapi/SConscript')
|
||||
|
@@ -1093,68 +1093,16 @@ dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
* wl_drm format code to a description of the planes in the buffer
|
||||
* that lets us create a __DRIimage for each of the planes. */
|
||||
|
||||
static const struct wl_drm_format_descriptor {
|
||||
uint32_t wl_format;
|
||||
static const struct wl_drm_components_descriptor {
|
||||
uint32_t dri_components;
|
||||
EGLint components;
|
||||
int nplanes;
|
||||
struct {
|
||||
int buffer_index;
|
||||
int width_shift;
|
||||
int height_shift;
|
||||
uint32_t dri_format;
|
||||
int cpp;
|
||||
} planes[3];
|
||||
} wl_drm_formats[] = {
|
||||
{ WL_DRM_FORMAT_ARGB8888, EGL_TEXTURE_RGBA, 1,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_ARGB8888, 4 }, } },
|
||||
|
||||
{ WL_DRM_FORMAT_XRGB8888, EGL_TEXTURE_RGB, 1,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_XRGB8888, 4 }, } },
|
||||
|
||||
{ WL_DRM_FORMAT_YUV410, EGL_TEXTURE_Y_U_V_WL, 3,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||
{ 1, 2, 2, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||
{ 2, 2, 2, __DRI_IMAGE_FORMAT_R8, 1 } } },
|
||||
|
||||
{ WL_DRM_FORMAT_YUV411, EGL_TEXTURE_Y_U_V_WL, 3,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||
{ 1, 2, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||
{ 2, 2, 0, __DRI_IMAGE_FORMAT_R8, 1 } } },
|
||||
|
||||
{ WL_DRM_FORMAT_YUV420, EGL_TEXTURE_Y_U_V_WL, 3,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||
{ 1, 1, 1, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||
{ 2, 1, 1, __DRI_IMAGE_FORMAT_R8, 1 } } },
|
||||
|
||||
{ WL_DRM_FORMAT_YUV422, EGL_TEXTURE_Y_U_V_WL, 3,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||
{ 1, 1, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||
{ 2, 1, 0, __DRI_IMAGE_FORMAT_R8, 1 } } },
|
||||
|
||||
{ WL_DRM_FORMAT_YUV444, EGL_TEXTURE_Y_U_V_WL, 3,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||
{ 1, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||
{ 2, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 } } },
|
||||
|
||||
{ WL_DRM_FORMAT_NV12, EGL_TEXTURE_Y_UV_WL, 2,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||
{ 1, 1, 1, __DRI_IMAGE_FORMAT_GR88, 2 } } },
|
||||
|
||||
{ WL_DRM_FORMAT_NV16, EGL_TEXTURE_Y_UV_WL, 2,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_R8, 1 },
|
||||
{ 1, 1, 0, __DRI_IMAGE_FORMAT_GR88, 2 } } },
|
||||
|
||||
/* For YUYV buffers, we set up two overlapping DRI images and treat
|
||||
* them as planar buffers in the compositors. Plane 0 is GR88 and
|
||||
* samples YU or YV pairs and places Y into the R component, while
|
||||
* plane 1 is ARGB and samples YUYV clusters and places pairs and
|
||||
* places U into the G component and V into A. This lets the
|
||||
* texture sampler interpolate the Y components correctly when
|
||||
* sampling from plane 0, and interpolate U and V correctly when
|
||||
* sampling from plane 1. */
|
||||
{ WL_DRM_FORMAT_YUYV, EGL_TEXTURE_Y_XUXV_WL, 2,
|
||||
{ { 0, 0, 0, __DRI_IMAGE_FORMAT_GR88, 2 },
|
||||
{ 0, 1, 0, __DRI_IMAGE_FORMAT_ARGB8888, 4 } } }
|
||||
} wl_drm_components[] = {
|
||||
{ __DRI_IMAGE_COMPONENTS_RGB, EGL_TEXTURE_RGB, 1 },
|
||||
{ __DRI_IMAGE_COMPONENTS_RGBA, EGL_TEXTURE_RGBA, 1 },
|
||||
{ __DRI_IMAGE_COMPONENTS_Y_U_V, EGL_TEXTURE_Y_U_V_WL, 3 },
|
||||
{ __DRI_IMAGE_COMPONENTS_Y_UV, EGL_TEXTURE_Y_UV_WL, 2 },
|
||||
{ __DRI_IMAGE_COMPONENTS_Y_XUXV, EGL_TEXTURE_Y_XUXV_WL, 2 },
|
||||
};
|
||||
|
||||
static _EGLImage *
|
||||
@@ -1164,13 +1112,11 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
{
|
||||
struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
const struct wl_drm_components_descriptor *f;
|
||||
__DRIimage *dri_image;
|
||||
_EGLImageAttribs attrs;
|
||||
EGLint err;
|
||||
uint32_t format;
|
||||
int32_t offset, stride, plane, width, height;
|
||||
int cpp, index;
|
||||
const struct wl_drm_format_descriptor *f;
|
||||
int32_t plane;
|
||||
|
||||
if (!wayland_buffer_is_drm(&buffer->buffer))
|
||||
return NULL;
|
||||
@@ -1189,17 +1135,12 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
width = buffer->buffer.width >> f->planes[plane].width_shift;
|
||||
height = buffer->buffer.height >> f->planes[plane].height_shift;
|
||||
format = f->planes[plane].dri_format;
|
||||
cpp = f->planes[plane].cpp;
|
||||
index = f->planes[plane].buffer_index;
|
||||
offset = buffer->offset[index];
|
||||
stride = buffer->stride[index];
|
||||
dri_image = dri2_dpy->image->fromPlanar(buffer->driver_buffer, plane, NULL);
|
||||
|
||||
dri_image = dri2_dpy->image->createSubImage(buffer->driver_buffer,
|
||||
width, height, format,
|
||||
offset, stride / cpp, NULL);
|
||||
if (dri_image == NULL) {
|
||||
_eglError(EGL_BAD_PARAMETER, "dri2_create_image_wayland_wl_buffer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dri2_create_image(disp, dri_image);
|
||||
}
|
||||
@@ -1360,24 +1301,31 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name,
|
||||
{
|
||||
_EGLDisplay *disp = user_data;
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
int i;
|
||||
__DRIimage *img;
|
||||
int i, dri_components = 0;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(wl_drm_formats); i++)
|
||||
if (wl_drm_formats[i].wl_format == buffer->format) {
|
||||
buffer->driver_format = &wl_drm_formats[i];
|
||||
break;
|
||||
}
|
||||
img = dri2_dpy->image->createImageFromNames(dri2_dpy->dri_screen,
|
||||
buffer->buffer.width,
|
||||
buffer->buffer.height,
|
||||
buffer->format, (int*)&name, 1,
|
||||
buffer->stride,
|
||||
buffer->offset,
|
||||
NULL);
|
||||
|
||||
if (buffer->driver_format == NULL)
|
||||
if (img == NULL)
|
||||
return;
|
||||
|
||||
buffer->driver_buffer =
|
||||
dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen,
|
||||
buffer->buffer.width,
|
||||
buffer->buffer.height,
|
||||
__DRI_IMAGE_FORMAT_NONE, name,
|
||||
buffer->stride[0] / 4,
|
||||
NULL);
|
||||
dri2_dpy->image->queryImage(img, __DRI_IMAGE_ATTRIB_COMPONENTS, &dri_components);
|
||||
|
||||
buffer->driver_format = NULL;
|
||||
for (i = 0; i < ARRAY_SIZE(wl_drm_components); i++)
|
||||
if (wl_drm_components[i].dri_components == dri_components)
|
||||
buffer->driver_format = &wl_drm_components[i];
|
||||
|
||||
if (buffer->driver_format == NULL)
|
||||
dri2_dpy->image->destroyImage(img);
|
||||
else
|
||||
buffer->driver_buffer = img;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1442,7 +1390,7 @@ dri2_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
EGLint attribute, EGLint *value)
|
||||
{
|
||||
struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
|
||||
const struct wl_drm_format_descriptor *format;
|
||||
const struct wl_drm_components_descriptor *format;
|
||||
|
||||
if (!wayland_buffer_is_drm(&buffer->buffer))
|
||||
return EGL_FALSE;
|
||||
|
@@ -122,8 +122,10 @@ struct dri2_egl_display
|
||||
|
||||
#ifdef HAVE_WAYLAND_PLATFORM
|
||||
struct wl_display *wl_dpy;
|
||||
struct wl_registry *wl_registry;
|
||||
struct wl_drm *wl_server_drm;
|
||||
struct wl_drm *wl_drm;
|
||||
struct wl_event_queue *wl_queue;
|
||||
int authenticated;
|
||||
int formats;
|
||||
#endif
|
||||
@@ -174,7 +176,7 @@ struct dri2_egl_surface
|
||||
__DRIbuffer *dri_buffers[__DRI_BUFFER_COUNT];
|
||||
__DRIbuffer *third_buffer;
|
||||
__DRIbuffer *pending_buffer;
|
||||
EGLBoolean block_swap_buffers;
|
||||
struct wl_callback *frame_callback;
|
||||
int format;
|
||||
#endif
|
||||
|
||||
|
@@ -500,6 +500,14 @@ droid_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *dpy)
|
||||
for (j = 0; dri2_dpy->driver_configs[j]; j++) {
|
||||
const EGLint surface_type = EGL_WINDOW_BIT | EGL_PBUFFER_BIT;
|
||||
struct dri2_egl_config *dri2_conf;
|
||||
unsigned int double_buffered = 0;
|
||||
|
||||
dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[j],
|
||||
__DRI_ATTRIB_DOUBLE_BUFFER, &double_buffered);
|
||||
|
||||
/* support only double buffered configs */
|
||||
if (!double_buffered)
|
||||
continue;
|
||||
|
||||
dri2_conf = dri2_add_config(dpy, dri2_dpy->driver_configs[j],
|
||||
count + 1, visuals[i].size, surface_type, NULL,
|
||||
@@ -525,17 +533,6 @@ droid_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *dpy)
|
||||
/* there is no front buffer so no OpenGL */
|
||||
dri2_conf->base.RenderableType &= ~EGL_OPENGL_BIT;
|
||||
dri2_conf->base.Conformant &= ~EGL_OPENGL_BIT;
|
||||
|
||||
/*
|
||||
* We want to make sure GL_DRAW_BUFFER for windows or pbuffers is always
|
||||
* GL_BACK. For EGL configs that do not have a double DRI config, clear
|
||||
* the surface type.
|
||||
*
|
||||
* This is just to be on the safe side. dri2_add_config never sets
|
||||
* EGL_WINDOW_BIT or EGL_PBUFFER_BIT for such configs.
|
||||
*/
|
||||
if (!dri2_conf->dri_double_config)
|
||||
dri2_conf->base.SurfaceType = 0;
|
||||
}
|
||||
|
||||
return (count != 0);
|
||||
@@ -660,18 +657,29 @@ droid_open_device(void)
|
||||
return (fd >= 0) ? dup(fd) : -1;
|
||||
}
|
||||
|
||||
/* support versions < JellyBean */
|
||||
#ifndef ALOGW
|
||||
#define ALOGW LOGW
|
||||
#endif
|
||||
#ifndef ALOGD
|
||||
#define ALOGD LOGD
|
||||
#endif
|
||||
#ifndef ALOGI
|
||||
#define ALOGI LOGI
|
||||
#endif
|
||||
|
||||
static void
|
||||
droid_log(EGLint level, const char *msg)
|
||||
{
|
||||
switch (level) {
|
||||
case _EGL_DEBUG:
|
||||
LOGD("%s", msg);
|
||||
ALOGD("%s", msg);
|
||||
break;
|
||||
case _EGL_INFO:
|
||||
LOGI("%s", msg);
|
||||
ALOGI("%s", msg);
|
||||
break;
|
||||
case _EGL_WARNING:
|
||||
LOGW("%s", msg);
|
||||
ALOGW("%s", msg);
|
||||
break;
|
||||
case _EGL_FATAL:
|
||||
LOG_FATAL("%s", msg);
|
||||
|
@@ -45,6 +45,34 @@ enum wl_drm_format_flags {
|
||||
HAS_XRGB8888 = 2
|
||||
};
|
||||
|
||||
static void
|
||||
sync_callback(void *data, struct wl_callback *callback, uint32_t serial)
|
||||
{
|
||||
int *done = data;
|
||||
|
||||
*done = 1;
|
||||
wl_callback_destroy(callback);
|
||||
}
|
||||
|
||||
static const struct wl_callback_listener sync_listener = {
|
||||
sync_callback
|
||||
};
|
||||
|
||||
static int
|
||||
roundtrip(struct dri2_egl_display *dri2_dpy)
|
||||
{
|
||||
struct wl_callback *callback;
|
||||
int done = 0, ret = 0;
|
||||
|
||||
callback = wl_display_sync(dri2_dpy->wl_dpy);
|
||||
wl_callback_add_listener(callback, &sync_listener, &done);
|
||||
wl_proxy_set_queue((struct wl_proxy *) callback, dri2_dpy->wl_queue);
|
||||
while (ret != -1 && !done)
|
||||
ret = wl_display_dispatch_queue(dri2_dpy->wl_dpy, dri2_dpy->wl_queue);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
wl_buffer_release(void *data, struct wl_buffer *buffer)
|
||||
{
|
||||
@@ -80,7 +108,6 @@ dri2_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
struct dri2_egl_config *dri2_conf = dri2_egl_config(conf);
|
||||
struct dri2_egl_surface *dri2_surf;
|
||||
struct dri2_egl_buffer *dri2_buf;
|
||||
int i;
|
||||
|
||||
(void) drv;
|
||||
@@ -104,7 +131,7 @@ dri2_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
|
||||
|
||||
dri2_surf->pending_buffer = NULL;
|
||||
dri2_surf->third_buffer = NULL;
|
||||
dri2_surf->block_swap_buffers = EGL_FALSE;
|
||||
dri2_surf->frame_callback = NULL;
|
||||
|
||||
if (conf->AlphaSize == 0)
|
||||
dri2_surf->format = WL_DRM_FORMAT_XRGB8888;
|
||||
@@ -118,17 +145,6 @@ dri2_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
|
||||
dri2_surf->base.Width = -1;
|
||||
dri2_surf->base.Height = -1;
|
||||
break;
|
||||
case EGL_PIXMAP_BIT:
|
||||
dri2_surf->wl_pix = (struct wl_egl_pixmap *) window;
|
||||
|
||||
dri2_surf->base.Width = dri2_surf->wl_pix->width;
|
||||
dri2_surf->base.Height = dri2_surf->wl_pix->height;
|
||||
|
||||
if (dri2_surf->wl_pix->driver_private) {
|
||||
dri2_buf = dri2_surf->wl_pix->driver_private;
|
||||
dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT] = dri2_buf->dri_buffer;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
goto cleanup_surf;
|
||||
}
|
||||
@@ -166,15 +182,6 @@ dri2_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
window, attrib_list);
|
||||
}
|
||||
|
||||
static _EGLSurface *
|
||||
dri2_create_pixmap_surface(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
_EGLConfig *conf, EGLNativePixmapType pixmap,
|
||||
const EGLint *attrib_list)
|
||||
{
|
||||
return dri2_create_surface(drv, disp, EGL_PIXMAP_BIT, conf,
|
||||
pixmap, attrib_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called via eglDestroySurface(), drv->API.DestroySurface().
|
||||
*/
|
||||
@@ -197,8 +204,7 @@ dri2_destroy_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf)
|
||||
wl_buffer_destroy(dri2_surf->wl_drm_buffer[i]);
|
||||
|
||||
for (i = 0; i < __DRI_BUFFER_COUNT; ++i)
|
||||
if (dri2_surf->dri_buffers[i] && !(i == __DRI_BUFFER_FRONT_LEFT &&
|
||||
dri2_surf->base.Type == EGL_PIXMAP_BIT))
|
||||
if (dri2_surf->dri_buffers[i])
|
||||
dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
|
||||
dri2_surf->dri_buffers[i]);
|
||||
|
||||
@@ -212,22 +218,6 @@ dri2_destroy_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf)
|
||||
return EGL_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
dri2_wl_egl_pixmap_destroy(struct wl_egl_pixmap *egl_pixmap)
|
||||
{
|
||||
struct dri2_egl_buffer *dri2_buf = egl_pixmap->driver_private;
|
||||
|
||||
assert(dri2_buf);
|
||||
|
||||
dri2_buf->dri2_dpy->dri2->releaseBuffer(dri2_buf->dri2_dpy->dri_screen,
|
||||
dri2_buf->dri_buffer);
|
||||
|
||||
free(dri2_buf);
|
||||
|
||||
egl_pixmap->driver_private = NULL;
|
||||
egl_pixmap->destroy = NULL;
|
||||
}
|
||||
|
||||
static struct wl_buffer *
|
||||
wayland_create_buffer(struct dri2_egl_surface *dri2_surf,
|
||||
__DRIbuffer *buffer)
|
||||
@@ -267,30 +257,6 @@ dri2_process_back_buffer(struct dri2_egl_surface *dri2_surf, unsigned format)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
dri2_process_front_buffer(struct dri2_egl_surface *dri2_surf, unsigned format)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy =
|
||||
dri2_egl_display(dri2_surf->base.Resource.Display);
|
||||
struct dri2_egl_buffer *dri2_buf;
|
||||
|
||||
switch (dri2_surf->base.Type) {
|
||||
case EGL_PIXMAP_BIT:
|
||||
dri2_buf = malloc(sizeof *dri2_buf);
|
||||
if (!dri2_buf)
|
||||
return;
|
||||
|
||||
dri2_buf->dri_buffer = dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT];
|
||||
dri2_buf->dri2_dpy = dri2_dpy;
|
||||
|
||||
dri2_surf->wl_pix->driver_private = dri2_buf;
|
||||
dri2_surf->wl_pix->destroy = dri2_wl_egl_pixmap_destroy;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
dri2_release_pending_buffer(void *data,
|
||||
struct wl_callback *callback, uint32_t time)
|
||||
@@ -333,11 +299,13 @@ dri2_release_buffers(struct dri2_egl_surface *dri2_surf)
|
||||
switch (i) {
|
||||
case __DRI_BUFFER_FRONT_LEFT:
|
||||
if (dri2_surf->pending_buffer)
|
||||
wl_display_roundtrip(dri2_dpy->wl_dpy);
|
||||
roundtrip(dri2_dpy);
|
||||
dri2_surf->pending_buffer = dri2_surf->dri_buffers[i];
|
||||
callback = wl_display_sync(dri2_dpy->wl_dpy);
|
||||
wl_callback_add_listener(callback,
|
||||
&release_buffer_listener, dri2_surf);
|
||||
wl_proxy_set_queue((struct wl_proxy *) callback,
|
||||
dri2_dpy->wl_queue);
|
||||
break;
|
||||
default:
|
||||
dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
|
||||
@@ -466,9 +434,7 @@ dri2_get_buffers_with_format(__DRIdrawable * driDrawable,
|
||||
if (!dri2_surf->dri_buffers[attachments[i]])
|
||||
continue;
|
||||
|
||||
if (attachments[i] == __DRI_BUFFER_FRONT_LEFT)
|
||||
dri2_process_front_buffer(dri2_surf, attachments[i+1]);
|
||||
else if (attachments[i] == __DRI_BUFFER_BACK_LEFT)
|
||||
if (attachments[i] == __DRI_BUFFER_BACK_LEFT)
|
||||
dri2_process_back_buffer(dri2_surf, attachments[i+1]);
|
||||
}
|
||||
|
||||
@@ -479,13 +445,7 @@ dri2_get_buffers_with_format(__DRIdrawable * driDrawable,
|
||||
dri2_surf->buffer_count++;
|
||||
}
|
||||
|
||||
assert(dri2_surf->base.Type == EGL_PIXMAP_BIT ||
|
||||
dri2_surf->dri_buffers[__DRI_BUFFER_BACK_LEFT]);
|
||||
|
||||
if (dri2_surf->base.Type == EGL_PIXMAP_BIT && !dri2_surf->wl_pix->buffer)
|
||||
dri2_surf->wl_pix->buffer =
|
||||
wayland_create_buffer(dri2_surf,
|
||||
dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT]);
|
||||
assert(dri2_surf->dri_buffers[__DRI_BUFFER_BACK_LEFT]);
|
||||
|
||||
*out_count = dri2_surf->buffer_count;
|
||||
if (dri2_surf->buffer_count == 0)
|
||||
@@ -552,7 +512,7 @@ wayland_frame_callback(void *data, struct wl_callback *callback, uint32_t time)
|
||||
{
|
||||
struct dri2_egl_surface *dri2_surf = data;
|
||||
|
||||
dri2_surf->block_swap_buffers = EGL_FALSE;
|
||||
dri2_surf->frame_callback = NULL;
|
||||
wl_callback_destroy(callback);
|
||||
}
|
||||
|
||||
@@ -569,17 +529,18 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw)
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw);
|
||||
struct dri2_egl_driver *dri2_drv = dri2_egl_driver(drv);
|
||||
struct wl_callback *callback;
|
||||
int ret = 0;
|
||||
|
||||
if (dri2_surf->block_swap_buffers) {
|
||||
wl_display_flush(dri2_dpy->wl_dpy);
|
||||
while (dri2_surf->block_swap_buffers)
|
||||
wl_display_iterate(dri2_dpy->wl_dpy, WL_DISPLAY_READABLE);
|
||||
}
|
||||
while (dri2_surf->frame_callback && ret != -1)
|
||||
ret = wl_display_dispatch_queue(dri2_dpy->wl_dpy, dri2_dpy->wl_queue);
|
||||
if (ret < 0)
|
||||
return EGL_FALSE;
|
||||
|
||||
dri2_surf->block_swap_buffers = EGL_TRUE;
|
||||
callback = wl_surface_frame(dri2_surf->wl_win->surface);
|
||||
wl_callback_add_listener(callback, &frame_listener, dri2_surf);
|
||||
dri2_surf->frame_callback = wl_surface_frame(dri2_surf->wl_win->surface);
|
||||
wl_callback_add_listener(dri2_surf->frame_callback,
|
||||
&frame_listener, dri2_surf);
|
||||
wl_proxy_set_queue((struct wl_proxy *) dri2_surf->frame_callback,
|
||||
dri2_dpy->wl_queue);
|
||||
|
||||
if (dri2_surf->base.Type == EGL_WINDOW_BIT) {
|
||||
pointer_swap(
|
||||
@@ -611,6 +572,8 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw)
|
||||
|
||||
wl_surface_damage(dri2_surf->wl_win->surface, 0, 0,
|
||||
dri2_surf->base.Width, dri2_surf->base.Height);
|
||||
|
||||
wl_surface_commit(dri2_surf->wl_win->surface);
|
||||
}
|
||||
|
||||
_EGLContext *ctx;
|
||||
@@ -626,71 +589,6 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw)
|
||||
return EGL_TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called via eglCreateImageKHR(), drv->API.CreateImageKHR().
|
||||
*/
|
||||
static _EGLImage *
|
||||
dri2_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
EGLClientBuffer buffer, const EGLint *attr_list)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
struct wl_egl_pixmap *wl_egl_pixmap = (struct wl_egl_pixmap *) buffer;
|
||||
struct dri2_egl_buffer *dri2_buf;
|
||||
EGLint wl_attr_list[] = {
|
||||
EGL_WIDTH, 0,
|
||||
EGL_HEIGHT, 0,
|
||||
EGL_DRM_BUFFER_STRIDE_MESA, 0,
|
||||
EGL_DRM_BUFFER_FORMAT_MESA, EGL_DRM_BUFFER_FORMAT_ARGB32_MESA,
|
||||
EGL_NONE
|
||||
};
|
||||
|
||||
dri2_buf = malloc(sizeof *dri2_buf);
|
||||
if (!dri2_buf)
|
||||
return NULL;
|
||||
|
||||
dri2_buf->dri2_dpy = dri2_dpy;
|
||||
dri2_buf->dri_buffer =
|
||||
dri2_dpy->dri2->allocateBuffer(dri2_dpy->dri_screen,
|
||||
__DRI_BUFFER_FRONT_LEFT, 32,
|
||||
wl_egl_pixmap->width,
|
||||
wl_egl_pixmap->height);
|
||||
|
||||
wl_egl_pixmap->destroy = dri2_wl_egl_pixmap_destroy;
|
||||
wl_egl_pixmap->driver_private = dri2_buf;
|
||||
|
||||
/* FIXME: Get buffer format from attr_list somehow... or from the
|
||||
wl_egl_piaxmap. */
|
||||
wl_egl_pixmap->buffer =
|
||||
wl_drm_create_buffer(dri2_dpy->wl_drm,
|
||||
dri2_buf->dri_buffer->name,
|
||||
wl_egl_pixmap->width,
|
||||
wl_egl_pixmap->height,
|
||||
dri2_buf->dri_buffer->pitch,
|
||||
WL_DRM_FORMAT_ARGB8888);
|
||||
|
||||
wl_attr_list[1] = wl_egl_pixmap->width;
|
||||
wl_attr_list[3] = wl_egl_pixmap->height;
|
||||
wl_attr_list[5] = dri2_buf->dri_buffer->pitch / 4;
|
||||
|
||||
return dri2_create_image_khr(disp->Driver, disp, ctx, EGL_DRM_BUFFER_MESA,
|
||||
(EGLClientBuffer)(intptr_t) dri2_buf->dri_buffer->name, wl_attr_list);
|
||||
}
|
||||
|
||||
static _EGLImage *
|
||||
dri2_wayland_create_image_khr(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
_EGLContext *ctx, EGLenum target,
|
||||
EGLClientBuffer buffer, const EGLint *attr_list)
|
||||
{
|
||||
(void) drv;
|
||||
|
||||
switch (target) {
|
||||
case EGL_NATIVE_PIXMAP_KHR:
|
||||
return dri2_create_image_khr_pixmap(disp, ctx, buffer, attr_list);
|
||||
default:
|
||||
return dri2_create_image_khr(drv, disp, ctx, target, buffer, attr_list);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
dri2_wayland_authenticate(_EGLDisplay *disp, uint32_t id)
|
||||
{
|
||||
@@ -700,7 +598,8 @@ dri2_wayland_authenticate(_EGLDisplay *disp, uint32_t id)
|
||||
dri2_dpy->authenticated = 0;
|
||||
|
||||
wl_drm_authenticate(dri2_dpy->wl_drm, id);
|
||||
wl_display_roundtrip(dri2_dpy->wl_dpy);
|
||||
if (roundtrip(dri2_dpy) < 0)
|
||||
ret = -1;
|
||||
|
||||
if (!dri2_dpy->authenticated)
|
||||
ret = -1;
|
||||
@@ -795,22 +694,37 @@ static const struct wl_drm_listener drm_listener = {
|
||||
drm_handle_authenticated
|
||||
};
|
||||
|
||||
static void
|
||||
registry_handle_global(void *data, struct wl_registry *registry, uint32_t name,
|
||||
const char *interface, uint32_t version)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = data;
|
||||
|
||||
if (strcmp(interface, "wl_drm") == 0) {
|
||||
dri2_dpy->wl_drm =
|
||||
wl_registry_bind(registry, name, &wl_drm_interface, 1);
|
||||
wl_drm_add_listener(dri2_dpy->wl_drm, &drm_listener, dri2_dpy);
|
||||
}
|
||||
}
|
||||
|
||||
static const struct wl_registry_listener registry_listener = {
|
||||
registry_handle_global
|
||||
};
|
||||
|
||||
EGLBoolean
|
||||
dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy;
|
||||
const __DRIconfig *config;
|
||||
uint32_t id, types;
|
||||
uint32_t types;
|
||||
int i;
|
||||
static const unsigned int argb_masks[4] =
|
||||
{ 0xff0000, 0xff00, 0xff, 0xff000000 };
|
||||
static const unsigned int rgb_masks[4] = { 0xff0000, 0xff00, 0xff, 0 };
|
||||
|
||||
drv->API.CreateWindowSurface = dri2_create_window_surface;
|
||||
drv->API.CreatePixmapSurface = dri2_create_pixmap_surface;
|
||||
drv->API.DestroySurface = dri2_destroy_surface;
|
||||
drv->API.SwapBuffers = dri2_swap_buffers;
|
||||
drv->API.CreateImageKHR = dri2_wayland_create_image_khr;
|
||||
drv->API.Terminate = dri2_terminate;
|
||||
|
||||
dri2_dpy = malloc(sizeof *dri2_dpy);
|
||||
@@ -829,22 +743,19 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
dri2_dpy->wl_dpy = disp->PlatformDisplay;
|
||||
}
|
||||
|
||||
id = wl_display_get_global(dri2_dpy->wl_dpy, "wl_drm", 1);
|
||||
if (id == 0)
|
||||
wl_display_roundtrip(dri2_dpy->wl_dpy);
|
||||
id = wl_display_get_global(dri2_dpy->wl_dpy, "wl_drm", 1);
|
||||
if (id == 0)
|
||||
dri2_dpy->wl_queue = wl_display_create_queue(dri2_dpy->wl_dpy);
|
||||
dri2_dpy->wl_registry = wl_display_get_registry(dri2_dpy->wl_dpy);
|
||||
wl_proxy_set_queue((struct wl_proxy *) dri2_dpy->wl_registry,
|
||||
dri2_dpy->wl_queue);
|
||||
wl_registry_add_listener(dri2_dpy->wl_registry,
|
||||
®istry_listener, dri2_dpy);
|
||||
if (roundtrip(dri2_dpy) < 0 || dri2_dpy->wl_drm == NULL)
|
||||
goto cleanup_dpy;
|
||||
dri2_dpy->wl_drm = wl_display_bind(dri2_dpy->wl_dpy, id, &wl_drm_interface);
|
||||
if (!dri2_dpy->wl_drm)
|
||||
goto cleanup_dpy;
|
||||
wl_drm_add_listener(dri2_dpy->wl_drm, &drm_listener, dri2_dpy);
|
||||
wl_display_roundtrip(dri2_dpy->wl_dpy);
|
||||
if (dri2_dpy->fd == -1)
|
||||
|
||||
if (roundtrip(dri2_dpy) < 0 || dri2_dpy->fd == -1)
|
||||
goto cleanup_drm;
|
||||
|
||||
wl_display_roundtrip(dri2_dpy->wl_dpy);
|
||||
if (!dri2_dpy->authenticated)
|
||||
if (roundtrip(dri2_dpy) < 0 || !dri2_dpy->authenticated)
|
||||
goto cleanup_fd;
|
||||
|
||||
dri2_dpy->driver_name = dri2_get_driver_for_fd(dri2_dpy->fd);
|
||||
@@ -871,7 +782,7 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
if (!dri2_create_screen(disp))
|
||||
goto cleanup_driver;
|
||||
|
||||
types = EGL_WINDOW_BIT | EGL_PIXMAP_BIT;
|
||||
types = EGL_WINDOW_BIT;
|
||||
for (i = 0; dri2_dpy->driver_configs[i]; i++) {
|
||||
config = dri2_dpy->driver_configs[i];
|
||||
if (dri2_dpy->formats & HAS_XRGB8888)
|
||||
@@ -880,8 +791,6 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
dri2_add_config(disp, config, i + 1, 0, types, NULL, argb_masks);
|
||||
}
|
||||
|
||||
disp->Extensions.KHR_image_pixmap = EGL_TRUE;
|
||||
|
||||
disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
|
||||
dri2_dpy->authenticate = dri2_wayland_authenticate;
|
||||
|
||||
|
@@ -778,10 +778,9 @@ dri2_swap_buffers_region(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw,
|
||||
if (numRects > (int)ARRAY_SIZE(rectangles))
|
||||
return dri2_copy_region(drv, disp, draw, dri2_surf->region);
|
||||
|
||||
/* FIXME: Invert y here? */
|
||||
for (i = 0; i < numRects; i++) {
|
||||
rectangles[i].x = rects[i * 4];
|
||||
rectangles[i].y = rects[i * 4 + 1];
|
||||
rectangles[i].y = dri2_surf->base.Height - rects[i * 4 + 1] - rects[i * 4 + 3];
|
||||
rectangles[i].width = rects[i * 4 + 2];
|
||||
rectangles[i].height = rects[i * 4 + 3];
|
||||
}
|
||||
|
@@ -229,17 +229,14 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay *dpy,
|
||||
*
|
||||
* "* If an OpenGL context is requested, the requested version
|
||||
* is greater than 3.2, and the value for attribute
|
||||
* EGL_CONTEXT_PROFILE_MASK_KHR has no bits set; has any
|
||||
* bits set other than EGL_CONTEXT_CORE_PROFILE_BIT_KHR and
|
||||
* EGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_KHR; has more than
|
||||
* one of these bits set; or if the implementation does not
|
||||
* support the requested profile, then an
|
||||
* EGL_BAD_PROFILE_KHR error is generated."
|
||||
*
|
||||
* However, it does not define EGL_BAD_PROFILE_KHR. For now use
|
||||
* EGL_BAD_ATTRIBUTE.
|
||||
* EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR has no bits set; has
|
||||
* any bits set other than EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR
|
||||
* and EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR; has
|
||||
* more than one of these bits set; or if the implementation does
|
||||
* not support the requested profile, then an EGL_BAD_MATCH error
|
||||
* is generated."
|
||||
*/
|
||||
err = EGL_BAD_ATTRIBUTE;
|
||||
err = EGL_BAD_MATCH;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -42,7 +42,7 @@
|
||||
static _EGLThreadInfo dummy_thread = _EGL_THREAD_INFO_INITIALIZER;
|
||||
|
||||
|
||||
#if PTHREADS
|
||||
#if HAVE_PTHREAD
|
||||
#include <pthread.h>
|
||||
|
||||
static _EGL_DECLARE_MUTEX(_egl_TSDMutex);
|
||||
@@ -108,7 +108,7 @@ static INLINE EGLBoolean _eglInitTSD(void (*dtor)(_EGLThreadInfo *))
|
||||
return EGL_TRUE;
|
||||
}
|
||||
|
||||
#else /* PTHREADS */
|
||||
#else /* HAVE_PTHREAD */
|
||||
static const _EGLThreadInfo *_egl_TSD;
|
||||
static void (*_egl_FreeTSD)(_EGLThreadInfo *);
|
||||
|
||||
@@ -137,7 +137,7 @@ static INLINE EGLBoolean _eglInitTSD(void (*dtor)(_EGLThreadInfo *))
|
||||
return EGL_TRUE;
|
||||
}
|
||||
|
||||
#endif /* !PTHREADS */
|
||||
#endif /* !HAVE_PTHREAD */
|
||||
|
||||
|
||||
static void
|
||||
|
@@ -31,7 +31,7 @@
|
||||
|
||||
#include "eglcompiler.h"
|
||||
|
||||
#ifdef PTHREADS
|
||||
#ifdef HAVE_PTHREAD
|
||||
#include <pthread.h>
|
||||
|
||||
typedef pthread_mutex_t _EGLMutex;
|
||||
|
@@ -36,17 +36,6 @@
|
||||
#include "wayland-drm.h"
|
||||
#include "wayland-drm-server-protocol.h"
|
||||
|
||||
/* Git master of Wayland is moving towards a stable version of the
|
||||
* protocol, but breaking from 0.85 in the process. For the time
|
||||
* being, it's convenient to be able to build Mesa against both master
|
||||
* and 0.85.x of Wayland. To make this work we'll do a compile-time
|
||||
* version check and work around the difference in API and protocol */
|
||||
#if defined (WAYLAND_VERSION_MAJOR) && \
|
||||
WAYLAND_VERSION_MAJOR == 0 && \
|
||||
WAYLAND_VERSION_MINOR == 85
|
||||
#define HAS_WAYLAND_0_85
|
||||
#endif
|
||||
|
||||
struct wl_drm {
|
||||
struct wl_display *display;
|
||||
|
||||
@@ -69,25 +58,10 @@ destroy_buffer(struct wl_resource *resource)
|
||||
static void
|
||||
buffer_destroy(struct wl_client *client, struct wl_resource *resource)
|
||||
{
|
||||
#ifdef HAS_WAYLAND_0_85
|
||||
wl_resource_destroy(resource, 0);
|
||||
#else
|
||||
wl_resource_destroy(resource);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef HAS_WAYLAND_0_85
|
||||
static void
|
||||
buffer_damage(struct wl_client *client, struct wl_resource *buffer,
|
||||
int32_t x, int32_t y, int32_t width, int32_t height)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
const static struct wl_buffer_interface drm_buffer_interface = {
|
||||
#ifdef HAS_WAYLAND_0_85
|
||||
buffer_damage,
|
||||
#endif
|
||||
buffer_destroy
|
||||
};
|
||||
|
||||
|
@@ -26,17 +26,6 @@ struct wl_egl_window {
|
||||
int attached_height;
|
||||
};
|
||||
|
||||
struct wl_egl_pixmap {
|
||||
struct wl_buffer *buffer;
|
||||
|
||||
int width;
|
||||
int height;
|
||||
|
||||
void (*destroy) (struct wl_egl_pixmap *egl_pixmap);
|
||||
|
||||
void *driver_private;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@@ -48,36 +48,3 @@ wl_egl_window_get_attached_size(struct wl_egl_window *egl_window,
|
||||
if (height)
|
||||
*height = egl_window->attached_height;
|
||||
}
|
||||
|
||||
WL_EGL_EXPORT struct wl_egl_pixmap *
|
||||
wl_egl_pixmap_create(int width, int height, uint32_t flags)
|
||||
{
|
||||
struct wl_egl_pixmap *egl_pixmap;
|
||||
|
||||
egl_pixmap = malloc(sizeof *egl_pixmap);
|
||||
if (egl_pixmap == NULL)
|
||||
return NULL;
|
||||
|
||||
egl_pixmap->width = width;
|
||||
egl_pixmap->height = height;
|
||||
|
||||
egl_pixmap->destroy = NULL;
|
||||
egl_pixmap->buffer = NULL;
|
||||
egl_pixmap->driver_private = NULL;
|
||||
|
||||
return egl_pixmap;
|
||||
}
|
||||
|
||||
WL_EGL_EXPORT void
|
||||
wl_egl_pixmap_destroy(struct wl_egl_pixmap *egl_pixmap)
|
||||
{
|
||||
if (egl_pixmap->destroy)
|
||||
egl_pixmap->destroy(egl_pixmap);
|
||||
free(egl_pixmap);
|
||||
}
|
||||
|
||||
WL_EGL_EXPORT struct wl_buffer *
|
||||
wl_egl_pixmap_create_buffer(struct wl_egl_pixmap *egl_pixmap)
|
||||
{
|
||||
return egl_pixmap->buffer;
|
||||
}
|
||||
|
@@ -621,7 +621,7 @@ draw_set_indexes(struct draw_context *draw,
|
||||
elem_size == 2 ||
|
||||
elem_size == 4);
|
||||
draw->pt.user.elts = elements;
|
||||
draw->pt.user.eltSize = elem_size;
|
||||
draw->pt.user.eltSizeIB = elem_size;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -174,6 +174,7 @@ struct draw_context
|
||||
/** vertex element/index buffer (ex: glDrawElements) */
|
||||
const void *elts;
|
||||
/** bytes per index (0, 1, 2 or 4) */
|
||||
unsigned eltSizeIB;
|
||||
unsigned eltSize;
|
||||
int eltBias;
|
||||
unsigned min_index;
|
||||
|
@@ -362,7 +362,7 @@ draw_pt_arrays_restart(struct draw_context *draw,
|
||||
|
||||
assert(info->primitive_restart);
|
||||
|
||||
if (draw->pt.user.elts) {
|
||||
if (draw->pt.user.eltSize) {
|
||||
/* indexed prims (draw_elements) */
|
||||
cur_start = start;
|
||||
cur_count = 0;
|
||||
@@ -433,12 +433,8 @@ draw_arrays_instanced(struct draw_context *draw,
|
||||
info.count = count;
|
||||
info.start_instance = startInstance;
|
||||
info.instance_count = instanceCount;
|
||||
|
||||
info.indexed = (draw->pt.user.elts != NULL);
|
||||
if (!info.indexed) {
|
||||
info.min_index = start;
|
||||
info.max_index = start + count - 1;
|
||||
}
|
||||
info.min_index = start;
|
||||
info.max_index = start + count - 1;
|
||||
|
||||
draw_vbo(draw, &info);
|
||||
}
|
||||
@@ -465,6 +461,7 @@ draw_vbo(struct draw_context *draw,
|
||||
draw->pt.user.eltBias = info->index_bias;
|
||||
draw->pt.user.min_index = info->min_index;
|
||||
draw->pt.user.max_index = info->max_index;
|
||||
draw->pt.user.eltSize = info->indexed ? draw->pt.user.eltSizeIB : 0;
|
||||
|
||||
if (0)
|
||||
debug_printf("draw_vbo(mode=%u start=%u count=%u):\n",
|
||||
|
@@ -1213,6 +1213,21 @@ void util_blitter_copy_texture_view(struct blitter_context *blitter,
|
||||
pipe->bind_fragment_sampler_states(pipe, 2, samplers);
|
||||
|
||||
pipe_sampler_view_reference(&views[1], NULL);
|
||||
} else if (blit_stencil) {
|
||||
/* Set a stencil-only sampler view for it not to sample depth instead. */
|
||||
struct pipe_sampler_view templ;
|
||||
struct pipe_sampler_view *view;
|
||||
|
||||
templ = *src;
|
||||
templ.format = util_format_stencil_only(templ.format);
|
||||
assert(templ.format != PIPE_FORMAT_NONE);
|
||||
|
||||
view = pipe->create_sampler_view(pipe, src->texture, &templ);
|
||||
|
||||
pipe->set_fragment_sampler_views(pipe, 1, &view);
|
||||
pipe->bind_fragment_sampler_states(pipe, 1, &ctx->sampler_state);
|
||||
|
||||
pipe_sampler_view_reference(&view, NULL);
|
||||
} else {
|
||||
pipe->set_fragment_sampler_views(pipe, 1, &src);
|
||||
pipe->bind_fragment_sampler_states(pipe, 1, &ctx->sampler_state);
|
||||
|
@@ -56,8 +56,7 @@ nv30_miptree_get_handle(struct pipe_screen *pscreen,
|
||||
if (!mt || !mt->base.bo)
|
||||
return FALSE;
|
||||
|
||||
stride = util_format_get_stride(mt->base.base.format,
|
||||
mt->base.base.width0);
|
||||
stride = mt->level[0].pitch;
|
||||
|
||||
return nouveau_screen_bo_get_handle(pscreen, mt->base.bo, stride, handle);
|
||||
}
|
||||
|
@@ -133,8 +133,7 @@ nv50_miptree_get_handle(struct pipe_screen *pscreen,
|
||||
if (!mt || !mt->base.bo)
|
||||
return FALSE;
|
||||
|
||||
stride = util_format_get_stride(mt->base.base.format,
|
||||
mt->base.base.width0);
|
||||
stride = mt->level[0].pitch;
|
||||
|
||||
return nouveau_screen_bo_get_handle(pscreen,
|
||||
mt->base.bo,
|
||||
|
@@ -41,6 +41,16 @@ struct r300_fragment_shader;
|
||||
struct r300_vertex_shader;
|
||||
struct r300_stencilref_context;
|
||||
|
||||
enum colormask_swizzle {
|
||||
COLORMASK_BGRA,
|
||||
COLORMASK_RGBA,
|
||||
COLORMASK_RRRR,
|
||||
COLORMASK_AAAA,
|
||||
COLORMASK_GRRG,
|
||||
COLORMASK_ARRA,
|
||||
COLORMASK_NUM_SWIZZLES
|
||||
};
|
||||
|
||||
struct r300_atom {
|
||||
/* Name, for debugging. */
|
||||
const char* name;
|
||||
@@ -66,7 +76,7 @@ struct r300_aa_state {
|
||||
struct r300_blend_state {
|
||||
struct pipe_blend_state state;
|
||||
|
||||
uint32_t cb_clamp[8];
|
||||
uint32_t cb_clamp[COLORMASK_NUM_SWIZZLES][8];
|
||||
uint32_t cb_noclamp[8];
|
||||
uint32_t cb_no_readwrite[8];
|
||||
};
|
||||
@@ -320,6 +330,8 @@ struct r300_surface {
|
||||
|
||||
/* Whether the CBZB clear is allowed on the surface. */
|
||||
boolean cbzb_allowed;
|
||||
|
||||
unsigned colormask_swizzle;
|
||||
};
|
||||
|
||||
struct r300_texture_desc {
|
||||
|
@@ -45,10 +45,12 @@ void r300_emit_blend_state(struct r300_context* r300,
|
||||
CS_LOCALS(r300);
|
||||
|
||||
if (fb->nr_cbufs) {
|
||||
if (fb->cbufs[0]->format == PIPE_FORMAT_R16G16B16A16_FLOAT)
|
||||
if (fb->cbufs[0]->format == PIPE_FORMAT_R16G16B16A16_FLOAT) {
|
||||
WRITE_CS_TABLE(blend->cb_noclamp, size);
|
||||
else
|
||||
WRITE_CS_TABLE(blend->cb_clamp, size);
|
||||
} else {
|
||||
unsigned swz = r300_surface(fb->cbufs[0])->colormask_swizzle;
|
||||
WRITE_CS_TABLE(blend->cb_clamp[swz], size);
|
||||
}
|
||||
} else {
|
||||
WRITE_CS_TABLE(blend->cb_no_readwrite, size);
|
||||
}
|
||||
|
@@ -169,15 +169,52 @@ static boolean blend_discard_if_src_alpha_color_1(unsigned srcRGB, unsigned srcA
|
||||
dstA == PIPE_BLENDFACTOR_ONE);
|
||||
}
|
||||
|
||||
/* The hardware colormask is clunky a must be swizzled depending on the format.
|
||||
* This was figured out by trial-and-error. */
|
||||
static unsigned bgra_cmask(unsigned mask)
|
||||
{
|
||||
/* Gallium uses RGBA color ordering while R300 expects BGRA. */
|
||||
|
||||
return ((mask & PIPE_MASK_R) << 2) |
|
||||
((mask & PIPE_MASK_B) >> 2) |
|
||||
(mask & (PIPE_MASK_G | PIPE_MASK_A));
|
||||
}
|
||||
|
||||
static unsigned rgba_cmask(unsigned mask)
|
||||
{
|
||||
return mask & PIPE_MASK_RGBA;
|
||||
}
|
||||
|
||||
static unsigned rrrr_cmask(unsigned mask)
|
||||
{
|
||||
return (mask & PIPE_MASK_R) |
|
||||
((mask & PIPE_MASK_R) << 1) |
|
||||
((mask & PIPE_MASK_R) << 2) |
|
||||
((mask & PIPE_MASK_R) << 3);
|
||||
}
|
||||
|
||||
static unsigned aaaa_cmask(unsigned mask)
|
||||
{
|
||||
return ((mask & PIPE_MASK_A) >> 3) |
|
||||
((mask & PIPE_MASK_A) >> 2) |
|
||||
((mask & PIPE_MASK_A) >> 1) |
|
||||
(mask & PIPE_MASK_A);
|
||||
}
|
||||
|
||||
static unsigned grrg_cmask(unsigned mask)
|
||||
{
|
||||
return ((mask & PIPE_MASK_R) << 1) |
|
||||
((mask & PIPE_MASK_R) << 2) |
|
||||
((mask & PIPE_MASK_G) >> 1) |
|
||||
((mask & PIPE_MASK_G) << 2);
|
||||
}
|
||||
|
||||
static unsigned arra_cmask(unsigned mask)
|
||||
{
|
||||
return ((mask & PIPE_MASK_R) << 1) |
|
||||
((mask & PIPE_MASK_R) << 2) |
|
||||
((mask & PIPE_MASK_A) >> 3) |
|
||||
(mask & PIPE_MASK_A);
|
||||
}
|
||||
|
||||
/* Create a new blend state based on the CSO blend state.
|
||||
*
|
||||
* This encompasses alpha blending, logic/raster ops, and blend dithering. */
|
||||
@@ -190,9 +227,9 @@ static void* r300_create_blend_state(struct pipe_context* pipe,
|
||||
uint32_t blend_control_noclamp = 0; /* R300_RB3D_CBLEND: 0x4e04 */
|
||||
uint32_t alpha_blend_control = 0; /* R300_RB3D_ABLEND: 0x4e08 */
|
||||
uint32_t alpha_blend_control_noclamp = 0; /* R300_RB3D_ABLEND: 0x4e08 */
|
||||
uint32_t color_channel_mask = 0; /* R300_RB3D_COLOR_CHANNEL_MASK: 0x4e0c */
|
||||
uint32_t rop = 0; /* R300_RB3D_ROPCNTL: 0x4e18 */
|
||||
uint32_t dither = 0; /* R300_RB3D_DITHER_CTL: 0x4e50 */
|
||||
int i;
|
||||
CB_LOCALS;
|
||||
|
||||
blend->state = *state;
|
||||
@@ -331,20 +368,6 @@ static void* r300_create_blend_state(struct pipe_context* pipe,
|
||||
(state->logicop_func) << R300_RB3D_ROPCNTL_ROP_SHIFT;
|
||||
}
|
||||
|
||||
/* Color channel masks for all MRTs. */
|
||||
color_channel_mask = bgra_cmask(state->rt[0].colormask);
|
||||
if (r300screen->caps.is_r500 && state->independent_blend_enable) {
|
||||
if (state->rt[1].blend_enable) {
|
||||
color_channel_mask |= bgra_cmask(state->rt[1].colormask) << 4;
|
||||
}
|
||||
if (state->rt[2].blend_enable) {
|
||||
color_channel_mask |= bgra_cmask(state->rt[2].colormask) << 8;
|
||||
}
|
||||
if (state->rt[3].blend_enable) {
|
||||
color_channel_mask |= bgra_cmask(state->rt[3].colormask) << 12;
|
||||
}
|
||||
}
|
||||
|
||||
/* Neither fglrx nor classic r300 ever set this, regardless of dithering
|
||||
* state. Since it's an optional implementation detail, we can leave it
|
||||
* out and never dither.
|
||||
@@ -358,14 +381,27 @@ static void* r300_create_blend_state(struct pipe_context* pipe,
|
||||
*/
|
||||
|
||||
/* Build a command buffer. */
|
||||
BEGIN_CB(blend->cb_clamp, 8);
|
||||
OUT_CB_REG(R300_RB3D_ROPCNTL, rop);
|
||||
OUT_CB_REG_SEQ(R300_RB3D_CBLEND, 3);
|
||||
OUT_CB(blend_control);
|
||||
OUT_CB(alpha_blend_control);
|
||||
OUT_CB(color_channel_mask);
|
||||
OUT_CB_REG(R300_RB3D_DITHER_CTL, dither);
|
||||
END_CB;
|
||||
{
|
||||
unsigned (*func[COLORMASK_NUM_SWIZZLES])(unsigned) = {
|
||||
bgra_cmask,
|
||||
rgba_cmask,
|
||||
rrrr_cmask,
|
||||
aaaa_cmask,
|
||||
grrg_cmask,
|
||||
arra_cmask
|
||||
};
|
||||
|
||||
for (i = 0; i < COLORMASK_NUM_SWIZZLES; i++) {
|
||||
BEGIN_CB(blend->cb_clamp[i], 8);
|
||||
OUT_CB_REG(R300_RB3D_ROPCNTL, rop);
|
||||
OUT_CB_REG_SEQ(R300_RB3D_CBLEND, 3);
|
||||
OUT_CB(blend_control);
|
||||
OUT_CB(alpha_blend_control);
|
||||
OUT_CB(func[i](state->rt[0].colormask));
|
||||
OUT_CB_REG(R300_RB3D_DITHER_CTL, dither);
|
||||
END_CB;
|
||||
}
|
||||
}
|
||||
|
||||
/* Build a command buffer. */
|
||||
BEGIN_CB(blend->cb_noclamp, 8);
|
||||
@@ -373,7 +409,7 @@ static void* r300_create_blend_state(struct pipe_context* pipe,
|
||||
OUT_CB_REG_SEQ(R300_RB3D_CBLEND, 3);
|
||||
OUT_CB(blend_control_noclamp);
|
||||
OUT_CB(alpha_blend_control_noclamp);
|
||||
OUT_CB(color_channel_mask);
|
||||
OUT_CB(rgba_cmask(state->rt[0].colormask));
|
||||
OUT_CB_REG(R300_RB3D_DITHER_CTL, dither);
|
||||
END_CB;
|
||||
|
||||
|
@@ -704,10 +704,87 @@ static uint32_t r300_translate_out_fmt(enum pipe_format format)
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t r300_translate_colormask_swizzle(enum pipe_format format)
|
||||
{
|
||||
switch (format) {
|
||||
case PIPE_FORMAT_A8_UNORM:
|
||||
case PIPE_FORMAT_A8_SNORM:
|
||||
case PIPE_FORMAT_A16_UNORM:
|
||||
case PIPE_FORMAT_A16_SNORM:
|
||||
case PIPE_FORMAT_A16_FLOAT:
|
||||
case PIPE_FORMAT_A32_FLOAT:
|
||||
return COLORMASK_AAAA;
|
||||
|
||||
case PIPE_FORMAT_I8_UNORM:
|
||||
case PIPE_FORMAT_I8_SNORM:
|
||||
case PIPE_FORMAT_L8_UNORM:
|
||||
case PIPE_FORMAT_L8_SNORM:
|
||||
case PIPE_FORMAT_R8_UNORM:
|
||||
case PIPE_FORMAT_R8_SNORM:
|
||||
case PIPE_FORMAT_R32_FLOAT:
|
||||
case PIPE_FORMAT_L32_FLOAT:
|
||||
case PIPE_FORMAT_I32_FLOAT:
|
||||
return COLORMASK_RRRR;
|
||||
|
||||
case PIPE_FORMAT_L8A8_SNORM:
|
||||
case PIPE_FORMAT_L8A8_UNORM:
|
||||
case PIPE_FORMAT_L16A16_UNORM:
|
||||
case PIPE_FORMAT_L16A16_SNORM:
|
||||
case PIPE_FORMAT_L16A16_FLOAT:
|
||||
case PIPE_FORMAT_L32A32_FLOAT:
|
||||
return COLORMASK_ARRA;
|
||||
|
||||
case PIPE_FORMAT_R8G8_SNORM:
|
||||
case PIPE_FORMAT_R8G8_UNORM:
|
||||
case PIPE_FORMAT_R16G16_UNORM:
|
||||
case PIPE_FORMAT_R16G16_SNORM:
|
||||
case PIPE_FORMAT_R16G16_FLOAT:
|
||||
case PIPE_FORMAT_R32G32_FLOAT:
|
||||
return COLORMASK_GRRG;
|
||||
|
||||
case PIPE_FORMAT_B5G6R5_UNORM:
|
||||
case PIPE_FORMAT_B5G5R5A1_UNORM:
|
||||
case PIPE_FORMAT_B5G5R5X1_UNORM:
|
||||
case PIPE_FORMAT_B4G4R4A4_UNORM:
|
||||
case PIPE_FORMAT_B4G4R4X4_UNORM:
|
||||
case PIPE_FORMAT_B8G8R8A8_UNORM:
|
||||
/*case PIPE_FORMAT_B8G8R8A8_SNORM:*/
|
||||
case PIPE_FORMAT_B8G8R8X8_UNORM:
|
||||
/*case PIPE_FORMAT_B8G8R8X8_SNORM:*/
|
||||
case PIPE_FORMAT_B10G10R10A2_UNORM:
|
||||
return COLORMASK_BGRA;
|
||||
|
||||
case PIPE_FORMAT_R8G8B8X8_UNORM:
|
||||
/*case PIPE_FORMAT_R8G8B8X8_SNORM:*/
|
||||
case PIPE_FORMAT_R8G8B8A8_UNORM:
|
||||
case PIPE_FORMAT_R8G8B8A8_SNORM:
|
||||
case PIPE_FORMAT_R10G10B10A2_UNORM:
|
||||
case PIPE_FORMAT_R10G10B10X2_SNORM:
|
||||
case PIPE_FORMAT_R16_UNORM:
|
||||
case PIPE_FORMAT_R16G16B16A16_UNORM:
|
||||
case PIPE_FORMAT_R16_SNORM:
|
||||
case PIPE_FORMAT_R16G16B16A16_SNORM:
|
||||
case PIPE_FORMAT_R16_FLOAT:
|
||||
case PIPE_FORMAT_R16G16B16A16_FLOAT:
|
||||
case PIPE_FORMAT_R32G32B32A32_FLOAT:
|
||||
case PIPE_FORMAT_L16_UNORM:
|
||||
case PIPE_FORMAT_L16_SNORM:
|
||||
case PIPE_FORMAT_L16_FLOAT:
|
||||
case PIPE_FORMAT_I16_UNORM:
|
||||
case PIPE_FORMAT_I16_SNORM:
|
||||
case PIPE_FORMAT_I16_FLOAT:
|
||||
return COLORMASK_RGBA;
|
||||
|
||||
default:
|
||||
return ~0; /* Unsupported. */
|
||||
}
|
||||
}
|
||||
|
||||
boolean r300_is_colorbuffer_format_supported(enum pipe_format format)
|
||||
{
|
||||
return r300_translate_colorformat(format) != ~0 &&
|
||||
r300_translate_out_fmt(format) != ~0;
|
||||
r300_translate_out_fmt(format) != ~0 &&
|
||||
r300_translate_colormask_swizzle(format) != ~0;
|
||||
}
|
||||
|
||||
boolean r300_is_zs_format_supported(enum pipe_format format)
|
||||
@@ -827,6 +904,8 @@ static void r300_texture_setup_fb_state(struct r300_surface *surf)
|
||||
R300_COLOR_TILE(tex->tex.macrotile[level]) |
|
||||
R300_COLOR_MICROTILE(tex->tex.microtile);
|
||||
surf->format = r300_translate_out_fmt(surf->base.format);
|
||||
surf->colormask_swizzle =
|
||||
r300_translate_colormask_swizzle(surf->base.format);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -643,13 +643,6 @@ boolean evergreen_is_format_supported(struct pipe_screen *screen,
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* require render-target support for multisample resources */
|
||||
if (util_format_is_depth_or_stencil(format)) {
|
||||
usage |= PIPE_BIND_DEPTH_STENCIL;
|
||||
} else {
|
||||
usage |= PIPE_BIND_RENDER_TARGET;
|
||||
}
|
||||
}
|
||||
|
||||
if ((usage & PIPE_BIND_SAMPLER_VIEW) &&
|
||||
@@ -917,10 +910,12 @@ static void *evergreen_create_rs_state(struct pipe_context *ctx,
|
||||
|
||||
if (rctx->chip_class == CAYMAN) {
|
||||
r600_pipe_state_add_reg(rstate, CM_R_028BE4_PA_SU_VTX_CNTL,
|
||||
S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules));
|
||||
S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules) |
|
||||
S_028C08_QUANT_MODE(V_028C08_X_1_256TH));
|
||||
} else {
|
||||
r600_pipe_state_add_reg(rstate, R_028C08_PA_SU_VTX_CNTL,
|
||||
S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules));
|
||||
S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules) |
|
||||
S_028C08_QUANT_MODE(V_028C08_X_1_256TH));
|
||||
}
|
||||
r600_pipe_state_add_reg(rstate, R_028B7C_PA_SU_POLY_OFFSET_CLAMP, fui(state->offset_clamp));
|
||||
r600_pipe_state_add_reg(rstate, R_028814_PA_SU_SC_MODE_CNTL,
|
||||
@@ -1496,13 +1491,24 @@ static void evergreen_init_depth_surface(struct r600_context *rctx,
|
||||
|
||||
if (rtex->surface.flags & RADEON_SURF_SBUFFER) {
|
||||
uint64_t stencil_offset = rtex->surface.stencil_offset;
|
||||
unsigned stile_split = rtex->surface.stencil_tile_split;
|
||||
unsigned i, stile_split = rtex->surface.stencil_tile_split;
|
||||
|
||||
stile_split = eg_tile_split(stile_split);
|
||||
stencil_offset += r600_resource_va(screen, surf->base.texture);
|
||||
stencil_offset += rtex->surface.level[level].offset / 4;
|
||||
stencil_offset >>= 8;
|
||||
|
||||
/* We're guessing the stencil offset from the depth offset.
|
||||
* Make sure each mipmap level has a unique offset. */
|
||||
for (i = 1; i <= level; i++) {
|
||||
/* If two levels have the same address, add 256
|
||||
* to the offset of the smaller level. */
|
||||
if ((rtex->surface.level[i-1].offset / 4) >> 8 ==
|
||||
(rtex->surface.level[i].offset / 4) >> 8) {
|
||||
stencil_offset++;
|
||||
}
|
||||
}
|
||||
|
||||
surf->db_stencil_base = stencil_offset;
|
||||
surf->db_stencil_info = 1 | S_028044_TILE_SPLIT(stile_split);
|
||||
} else {
|
||||
|
@@ -1955,6 +1955,17 @@
|
||||
#define S_028C08_PIX_CENTER_HALF(x) (((x) & 0x1) << 0)
|
||||
#define G_028C08_PIX_CENTER_HALF(x) (((x) >> 0) & 0x1)
|
||||
#define C_028C08_PIX_CENTER_HALF 0xFFFFFFFE
|
||||
#define S_028C08_QUANT_MODE(x) (((x) & 0x7) << 3)
|
||||
#define G_028C08_QUANT_MODE(x) (((x) >> 3) & 0x7)
|
||||
#define C_028C08_QUANT_MODE 0xFFFFFFC7
|
||||
#define V_028C08_X_1_16TH 0x00
|
||||
#define V_028C08_X_1_8TH 0x01
|
||||
#define V_028C08_X_1_4TH 0x02
|
||||
#define V_028C08_X_1_2 0x03
|
||||
#define V_028C08_X_1 0x04
|
||||
#define V_028C08_X_1_256TH 0x05
|
||||
#define V_028C08_X_1_1024TH 0x06
|
||||
#define V_028C08_X_1_4096TH 0x07
|
||||
#define R_028C0C_PA_CL_GB_VERT_CLIP_ADJ 0x00028C0C
|
||||
#define R_028C10_PA_CL_GB_VERT_DISC_ADJ 0x00028C10
|
||||
#define R_028C14_PA_CL_GB_HORZ_CLIP_ADJ 0x00028C14
|
||||
|
@@ -2752,31 +2752,47 @@ int r600_vertex_elements_build_fetch_shader(struct r600_context *rctx, struct r6
|
||||
unsigned fetch_resource_start = rctx->chip_class >= EVERGREEN ? 0 : 160;
|
||||
unsigned format, num_format, format_comp, endian;
|
||||
uint32_t *bytecode;
|
||||
int i, r;
|
||||
int i, j, r;
|
||||
|
||||
memset(&bc, 0, sizeof(bc));
|
||||
r600_bytecode_init(&bc, rctx->chip_class, rctx->family);
|
||||
|
||||
for (i = 0; i < ve->count; i++) {
|
||||
if (elements[i].instance_divisor > 1) {
|
||||
struct r600_bytecode_alu alu;
|
||||
|
||||
memset(&alu, 0, sizeof(alu));
|
||||
alu.inst = BC_INST(&bc, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MULHI_UINT);
|
||||
alu.src[0].sel = 0;
|
||||
alu.src[0].chan = 3;
|
||||
|
||||
alu.src[1].sel = V_SQ_ALU_SRC_LITERAL;
|
||||
alu.src[1].value = (1ll << 32) / elements[i].instance_divisor + 1;
|
||||
|
||||
alu.dst.sel = i + 1;
|
||||
alu.dst.chan = 3;
|
||||
alu.dst.write = 1;
|
||||
alu.last = 1;
|
||||
|
||||
if ((r = r600_bytecode_add_alu(&bc, &alu))) {
|
||||
r600_bytecode_clear(&bc);
|
||||
return r;
|
||||
if (rctx->chip_class == CAYMAN) {
|
||||
for (j = 0; j < 4; j++) {
|
||||
struct r600_bytecode_alu alu;
|
||||
memset(&alu, 0, sizeof(alu));
|
||||
alu.inst = BC_INST(&bc, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MULHI_UINT);
|
||||
alu.src[0].sel = 0;
|
||||
alu.src[0].chan = 3;
|
||||
alu.src[1].sel = V_SQ_ALU_SRC_LITERAL;
|
||||
alu.src[1].value = (1ll << 32) / elements[i].instance_divisor + 1;
|
||||
alu.dst.sel = i + 1;
|
||||
alu.dst.chan = j;
|
||||
alu.dst.write = j == 3;
|
||||
alu.last = j == 3;
|
||||
if ((r = r600_bytecode_add_alu(&bc, &alu))) {
|
||||
r600_bytecode_clear(&bc);
|
||||
return r;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
struct r600_bytecode_alu alu;
|
||||
memset(&alu, 0, sizeof(alu));
|
||||
alu.inst = BC_INST(&bc, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MULHI_UINT);
|
||||
alu.src[0].sel = 0;
|
||||
alu.src[0].chan = 3;
|
||||
alu.src[1].sel = V_SQ_ALU_SRC_LITERAL;
|
||||
alu.src[1].value = (1ll << 32) / elements[i].instance_divisor + 1;
|
||||
alu.dst.sel = i + 1;
|
||||
alu.dst.chan = 3;
|
||||
alu.dst.write = 1;
|
||||
alu.last = 1;
|
||||
if ((r = r600_bytecode_add_alu(&bc, &alu))) {
|
||||
r600_bytecode_clear(&bc);
|
||||
return r;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1878,6 +1878,11 @@ static int cayman_emit_float_instr(struct r600_shader_ctx *ctx)
|
||||
alu.inst = ctx->inst_info->r600_opcode;
|
||||
for (j = 0; j < inst->Instruction.NumSrcRegs; j++) {
|
||||
r600_bytecode_src(&alu.src[j], &ctx->src[j], 0);
|
||||
|
||||
/* RSQ should take the absolute value of src */
|
||||
if (ctx->inst_info->tgsi_opcode == TGSI_OPCODE_RSQ) {
|
||||
r600_bytecode_src_set_abs(&alu.src[j]);
|
||||
}
|
||||
}
|
||||
tgsi_dst(ctx, &inst->Dst[0], i, &alu.dst);
|
||||
alu.dst.write = (inst->Dst[0].Register.WriteMask >> i) & 1;
|
||||
@@ -4373,10 +4378,8 @@ static int tgsi_exp(struct r600_shader_ctx *ctx)
|
||||
|
||||
alu.dst.sel = ctx->temp_reg;
|
||||
alu.dst.chan = i;
|
||||
if (i == 0)
|
||||
alu.dst.write = 1;
|
||||
if (i == 2)
|
||||
alu.last = 1;
|
||||
alu.dst.write = i == 0;
|
||||
alu.last = i == 2;
|
||||
r = r600_bytecode_add_alu(ctx->bc, &alu);
|
||||
if (r)
|
||||
return r;
|
||||
|
@@ -592,6 +592,10 @@ boolean r600_is_format_supported(struct pipe_screen *screen,
|
||||
format == PIPE_FORMAT_R11G11B10_FLOAT)
|
||||
return FALSE;
|
||||
|
||||
/* MSAA integer colorbuffers hang. */
|
||||
if (util_format_is_pure_integer(format))
|
||||
return FALSE;
|
||||
|
||||
switch (sample_count) {
|
||||
case 2:
|
||||
case 4:
|
||||
@@ -600,15 +604,6 @@ boolean r600_is_format_supported(struct pipe_screen *screen,
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* require render-target support for multisample resources */
|
||||
if (util_format_is_depth_or_stencil(format)) {
|
||||
usage |= PIPE_BIND_DEPTH_STENCIL;
|
||||
} else if (util_format_is_pure_integer(format)) {
|
||||
return FALSE; /* no integer textures */
|
||||
} else {
|
||||
usage |= PIPE_BIND_RENDER_TARGET;
|
||||
}
|
||||
}
|
||||
|
||||
if ((usage & PIPE_BIND_SAMPLER_VIEW) &&
|
||||
@@ -948,7 +943,8 @@ static void *r600_create_rs_state(struct pipe_context *ctx,
|
||||
r600_pipe_state_add_reg(rstate, R_028A4C_PA_SC_MODE_CNTL, sc_mode_cntl);
|
||||
|
||||
r600_pipe_state_add_reg(rstate, R_028C08_PA_SU_VTX_CNTL,
|
||||
S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules));
|
||||
S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules) |
|
||||
S_028C08_QUANT_MODE(V_028C08_X_1_256TH));
|
||||
|
||||
r600_pipe_state_add_reg(rstate, R_028DFC_PA_SU_POLY_OFFSET_CLAMP, fui(state->offset_clamp));
|
||||
r600_pipe_state_add_reg(rstate, R_028814_PA_SU_SC_MODE_CNTL,
|
||||
|
@@ -108,7 +108,7 @@ void r600_init_common_atoms(struct r600_context *rctx)
|
||||
{
|
||||
r600_init_atom(&rctx->surface_sync_cmd.atom, r600_emit_surface_sync, 5, EMIT_EARLY);
|
||||
r600_init_atom(&rctx->r6xx_flush_and_inv_cmd, r600_emit_r6xx_flush_and_inv, 2, EMIT_EARLY);
|
||||
r600_init_atom(&rctx->alphatest_state.atom, r600_emit_alphatest_state, 3, 0);
|
||||
r600_init_atom(&rctx->alphatest_state.atom, r600_emit_alphatest_state, 6, 0);
|
||||
r600_atom_dirty(rctx, &rctx->alphatest_state.atom);
|
||||
}
|
||||
|
||||
|
@@ -592,13 +592,6 @@ bool r600_init_flushed_depth_texture(struct pipe_context *ctx,
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Needs adjustment for pixelformat:
|
||||
*/
|
||||
static INLINE unsigned u_box_volume( const struct pipe_box *box )
|
||||
{
|
||||
return box->width * box->depth * box->height;
|
||||
}
|
||||
|
||||
struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
|
||||
struct pipe_resource *texture,
|
||||
unsigned level,
|
||||
@@ -622,9 +615,6 @@ struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
|
||||
use_staging_texture = TRUE;
|
||||
}
|
||||
|
||||
if ((usage & PIPE_TRANSFER_READ) && u_box_volume(box) > 1024)
|
||||
use_staging_texture = TRUE;
|
||||
|
||||
/* Use a staging texture for uploads if the underlying BO is busy. */
|
||||
if (!(usage & PIPE_TRANSFER_READ) &&
|
||||
(rctx->ws->cs_is_buffer_referenced(rctx->cs, rtex->resource.cs_buf, RADEON_USAGE_READWRITE) ||
|
||||
|
@@ -2194,6 +2194,15 @@
|
||||
#define S_028C08_PIX_CENTER_HALF(x) (((x) & 0x1) << 0)
|
||||
#define G_028C08_PIX_CENTER_HALF(x) (((x) >> 0) & 0x1)
|
||||
#define C_028C08_PIX_CENTER_HALF 0xFFFFFFFE
|
||||
#define S_028C08_QUANT_MODE(x) (((x) & 0x7) << 3)
|
||||
#define G_028C08_QUANT_MODE(x) (((x) >> 3) & 0x7)
|
||||
#define C_028C08_QUANT_MODE 0xFFFFFFC7
|
||||
#define V_028C08_X_1_16TH 0x00
|
||||
#define V_028C08_X_1_8TH 0x01
|
||||
#define V_028C08_X_1_4TH 0x02
|
||||
#define V_028C08_X_1_2 0x03
|
||||
#define V_028C08_X_1 0x04
|
||||
#define V_028C08_X_1_256TH 0x05
|
||||
#define R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX 0x028C1C
|
||||
#define R_028C48_PA_SC_AA_MASK 0x028C48
|
||||
#define R_028810_PA_CL_CLIP_CNTL 0x028810
|
||||
|
@@ -20,8 +20,6 @@ tablegen = $(TBLGEN) -I $(LLVM_INCLUDEDIR) $1 $2 -o $3
|
||||
|
||||
HAVE_LLVM_INTRINSICS = $(shell grep IntrinsicsR600.td $(LLVM_INCLUDEDIR)/llvm/Intrinsics.td)
|
||||
|
||||
gen: $(GENERATED_SOURCES)
|
||||
|
||||
SIRegisterInfo.td: SIGenRegisterInfo.pl
|
||||
$(PERL) $^ > $@
|
||||
|
||||
@@ -38,37 +36,37 @@ endif
|
||||
R600RegisterInfo.td: R600GenRegisterInfo.pl
|
||||
$(PERL) $^ > $@
|
||||
|
||||
AMDGPUGenRegisterInfo.inc: *.td
|
||||
AMDGPUGenRegisterInfo.inc: $(TD_FILES)
|
||||
$(call tablegen, -gen-register-info, AMDGPU.td, $@)
|
||||
|
||||
AMDGPUGenInstrInfo.inc: *.td
|
||||
AMDGPUGenInstrInfo.inc: $(TD_FILES)
|
||||
$(call tablegen, -gen-instr-info, AMDGPU.td, $@)
|
||||
|
||||
AMDGPUGenAsmWriter.inc: *.td
|
||||
AMDGPUGenAsmWriter.inc: $(TD_FILES)
|
||||
$(call tablegen, -gen-asm-writer, AMDGPU.td, $@)
|
||||
|
||||
AMDGPUGenDAGISel.inc: *.td
|
||||
AMDGPUGenDAGISel.inc: $(TD_FILES)
|
||||
$(call tablegen, -gen-dag-isel, AMDGPU.td, $@)
|
||||
|
||||
AMDGPUGenCallingConv.inc: *.td
|
||||
AMDGPUGenCallingConv.inc: $(TD_FILES)
|
||||
$(call tablegen, -gen-callingconv, AMDGPU.td, $@)
|
||||
|
||||
AMDGPUGenSubtargetInfo.inc: *.td
|
||||
AMDGPUGenSubtargetInfo.inc: $(TD_FILES)
|
||||
$(call tablegen, -gen-subtarget, AMDGPU.td, $@)
|
||||
|
||||
AMDGPUGenEDInfo.inc: *.td
|
||||
AMDGPUGenEDInfo.inc: $(TD_FILES)
|
||||
$(call tablegen, -gen-enhanced-disassembly-info, AMDGPU.td, $@)
|
||||
|
||||
AMDGPUGenIntrinsics.inc: *.td
|
||||
AMDGPUGenIntrinsics.inc: $(TD_FILES)
|
||||
$(call tablegen, -gen-tgt-intrinsic, AMDGPU.td, $@)
|
||||
|
||||
AMDGPUGenCodeEmitter.inc: *.td
|
||||
AMDGPUGenCodeEmitter.inc: $(TD_FILES)
|
||||
$(call tablegen, -gen-emitter, AMDGPU.td, $@)
|
||||
|
||||
AMDGPUGenMCCodeEmitter.inc: *.td
|
||||
AMDGPUGenMCCodeEmitter.inc: $(TD_FILES)
|
||||
$(call tablegen, -mc-emitter -gen-emitter, AMDGPU.td, $@)
|
||||
|
||||
AMDGPUGenDFAPacketizer.inc: *.td
|
||||
AMDGPUGenDFAPacketizer.inc: $(TD_FILES)
|
||||
$(call tablegen, -gen-dfa-packetizer, AMDGPU.td, $@)
|
||||
|
||||
LOADER_LIBS=$(shell llvm-config --libs bitreader asmparser)
|
||||
|
@@ -1,4 +1,29 @@
|
||||
|
||||
TD_FILES := \
|
||||
AMDGPU.td \
|
||||
AMDGPUInstrInfo.td \
|
||||
AMDGPUInstructions.td \
|
||||
AMDGPUIntrinsics.td \
|
||||
AMDGPURegisterInfo.td \
|
||||
AMDILBase.td \
|
||||
AMDILInstrInfo.td \
|
||||
AMDILIntrinsics.td \
|
||||
AMDILRegisterInfo.td \
|
||||
Processors.td \
|
||||
R600Instructions.td \
|
||||
R600Intrinsics.td \
|
||||
R600IntrinsicsNoOpenCL.td \
|
||||
R600IntrinsicsOpenCL.td \
|
||||
R600RegisterInfo.td \
|
||||
R600Schedule.td \
|
||||
SIInstrFormats.td \
|
||||
SIInstrInfo.td \
|
||||
SIInstructions.td \
|
||||
SIIntrinsics.td \
|
||||
SIRegisterInfo.td \
|
||||
SISchedule.td
|
||||
|
||||
|
||||
GENERATED_SOURCES := \
|
||||
R600Intrinsics.td \
|
||||
R600RegisterInfo.td \
|
||||
|
@@ -86,6 +86,7 @@ struct __DRIimageRec {
|
||||
unsigned level;
|
||||
unsigned layer;
|
||||
uint32_t dri_format;
|
||||
uint32_t dri_components;
|
||||
|
||||
void *loader_private;
|
||||
};
|
||||
|
@@ -574,6 +574,7 @@ dri2_create_image(__DRIscreen *_screen,
|
||||
img->level = 0;
|
||||
img->layer = 0;
|
||||
img->dri_format = format;
|
||||
img->dri_components = 0;
|
||||
|
||||
img->loader_private = loaderPrivate;
|
||||
return img;
|
||||
@@ -612,6 +613,11 @@ dri2_query_image(__DRIimage *image, int attrib, int *value)
|
||||
case __DRI_IMAGE_ATTRIB_HEIGHT:
|
||||
*value = image->texture->height0;
|
||||
return GL_TRUE;
|
||||
case __DRI_IMAGE_ATTRIB_COMPONENTS:
|
||||
if (image->dri_components == 0)
|
||||
return GL_FALSE;
|
||||
*value = image->dri_components;
|
||||
return GL_TRUE;
|
||||
default:
|
||||
return GL_FALSE;
|
||||
}
|
||||
@@ -630,6 +636,8 @@ dri2_dup_image(__DRIimage *image, void *loaderPrivate)
|
||||
pipe_resource_reference(&img->texture, image->texture);
|
||||
img->level = image->level;
|
||||
img->layer = image->layer;
|
||||
/* This should be 0 for sub images, but dup is also used for base images. */
|
||||
img->dri_components = image->dri_components;
|
||||
img->loader_private = loaderPrivate;
|
||||
|
||||
return img;
|
||||
@@ -649,6 +657,76 @@ dri2_validate_usage(__DRIimage *image, unsigned int use)
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
static __DRIimage *
|
||||
dri2_from_names(__DRIscreen *screen, int width, int height, int format,
|
||||
int *names, int num_names, int *strides, int *offsets,
|
||||
void *loaderPrivate)
|
||||
{
|
||||
__DRIimage *img;
|
||||
int stride, dri_components;
|
||||
|
||||
if (num_names != 1)
|
||||
return NULL;
|
||||
if (offsets[0] != 0)
|
||||
return NULL;
|
||||
|
||||
switch(format) {
|
||||
case __DRI_IMAGE_FOURCC_RGB565:
|
||||
format = __DRI_IMAGE_FORMAT_RGB565;
|
||||
dri_components = __DRI_IMAGE_COMPONENTS_RGB;
|
||||
break;
|
||||
case __DRI_IMAGE_FOURCC_ARGB8888:
|
||||
format = __DRI_IMAGE_FORMAT_ARGB8888;
|
||||
dri_components = __DRI_IMAGE_COMPONENTS_RGBA;
|
||||
break;
|
||||
case __DRI_IMAGE_FOURCC_XRGB8888:
|
||||
format = __DRI_IMAGE_FORMAT_XRGB8888;
|
||||
dri_components = __DRI_IMAGE_COMPONENTS_RGB;
|
||||
break;
|
||||
case __DRI_IMAGE_FOURCC_ABGR8888:
|
||||
format = __DRI_IMAGE_FORMAT_ABGR8888;
|
||||
dri_components = __DRI_IMAGE_COMPONENTS_RGBA;
|
||||
break;
|
||||
case __DRI_IMAGE_FOURCC_XBGR8888:
|
||||
format = __DRI_IMAGE_FORMAT_XBGR8888;
|
||||
dri_components = __DRI_IMAGE_COMPONENTS_RGB;
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Strides are in bytes not pixels. */
|
||||
stride = strides[0] /4;
|
||||
|
||||
img = dri2_create_image_from_name(screen, width, height, format,
|
||||
names[0], stride, loaderPrivate);
|
||||
if (img == NULL)
|
||||
return NULL;
|
||||
|
||||
img->dri_components = dri_components;
|
||||
return img;
|
||||
}
|
||||
|
||||
static __DRIimage *
|
||||
dri2_from_planar(__DRIimage *image, int plane, void *loaderPrivate)
|
||||
{
|
||||
__DRIimage *img;
|
||||
|
||||
if (plane != 0)
|
||||
return NULL;
|
||||
|
||||
if (image->dri_components == 0)
|
||||
return NULL;
|
||||
|
||||
img = dri2_dup_image(image, loaderPrivate);
|
||||
if (img == NULL)
|
||||
return NULL;
|
||||
|
||||
/* set this to 0 for sub images. */
|
||||
img->dri_components = 0;
|
||||
return img;
|
||||
}
|
||||
|
||||
static void
|
||||
dri2_destroy_image(__DRIimage *img)
|
||||
{
|
||||
@@ -657,7 +735,7 @@ dri2_destroy_image(__DRIimage *img)
|
||||
}
|
||||
|
||||
static struct __DRIimageExtensionRec dri2ImageExtension = {
|
||||
{ __DRI_IMAGE, 4 },
|
||||
{ __DRI_IMAGE, 5 },
|
||||
dri2_create_image_from_name,
|
||||
dri2_create_image_from_renderbuffer,
|
||||
dri2_destroy_image,
|
||||
@@ -665,6 +743,8 @@ static struct __DRIimageExtensionRec dri2ImageExtension = {
|
||||
dri2_query_image,
|
||||
dri2_dup_image,
|
||||
dri2_validate_usage,
|
||||
dri2_from_names,
|
||||
dri2_from_planar,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@@ -182,34 +182,42 @@ static const struct wl_drm_listener drm_listener = {
|
||||
drm_handle_authenticated
|
||||
};
|
||||
|
||||
static void
|
||||
registry_handle_global(void *data, struct wl_registry *registry, uint32_t name,
|
||||
const char *interface, uint32_t version)
|
||||
{
|
||||
struct wayland_drm_display *drmdpy = data;
|
||||
|
||||
if (strcmp(interface, "wl_drm") == 0) {
|
||||
drmdpy->wl_drm = wl_registry_bind(registry, name, &wl_drm_interface, 1);
|
||||
wl_drm_add_listener(drmdpy->wl_drm, &drm_listener, drmdpy);
|
||||
}
|
||||
}
|
||||
|
||||
static const struct wl_registry_listener registry_listener = {
|
||||
registry_handle_global
|
||||
};
|
||||
|
||||
static boolean
|
||||
wayland_drm_display_init_screen(struct native_display *ndpy)
|
||||
{
|
||||
struct wayland_drm_display *drmdpy = wayland_drm_display(ndpy);
|
||||
uint32_t id;
|
||||
|
||||
id = wl_display_get_global(drmdpy->base.dpy, "wl_drm", 1);
|
||||
if (id == 0)
|
||||
wl_display_roundtrip(drmdpy->base.dpy);
|
||||
id = wl_display_get_global(drmdpy->base.dpy, "wl_drm", 1);
|
||||
if (id == 0)
|
||||
return FALSE;
|
||||
|
||||
drmdpy->wl_drm = wl_display_bind(drmdpy->base.dpy, id, &wl_drm_interface);
|
||||
if (!drmdpy->wl_drm)
|
||||
drmdpy->base.queue = wl_display_create_queue(drmdpy->base.dpy);
|
||||
drmdpy->base.registry = wl_display_get_registry(drmdpy->base.dpy);
|
||||
wl_proxy_set_queue((struct wl_proxy *) drmdpy->base.registry,
|
||||
drmdpy->base.queue);
|
||||
wl_registry_add_listener(drmdpy->base.registry, ®istry_listener, drmdpy);
|
||||
if (wayland_roundtrip(&drmdpy->base) < 0 || drmdpy->wl_drm == NULL)
|
||||
return FALSE;
|
||||
|
||||
wl_drm_add_listener(drmdpy->wl_drm, &drm_listener, drmdpy);
|
||||
wl_display_roundtrip(drmdpy->base.dpy);
|
||||
if (drmdpy->fd == -1)
|
||||
if (wayland_roundtrip(&drmdpy->base) < 0 || drmdpy->fd == -1)
|
||||
return FALSE;
|
||||
|
||||
wl_display_roundtrip(drmdpy->base.dpy);
|
||||
if (!drmdpy->authenticated)
|
||||
if (wayland_roundtrip(&drmdpy->base) < 0 || !drmdpy->authenticated)
|
||||
return FALSE;
|
||||
|
||||
if (drmdpy->base.formats == 0)
|
||||
wl_display_roundtrip(drmdpy->base.dpy);
|
||||
if (drmdpy->base.formats == 0)
|
||||
return FALSE;
|
||||
|
||||
|
@@ -133,26 +133,36 @@ static const struct wl_shm_listener shm_listener = {
|
||||
shm_handle_format
|
||||
};
|
||||
|
||||
static void
|
||||
registry_handle_global(void *data, struct wl_registry *registry, uint32_t name,
|
||||
const char *interface, uint32_t version)
|
||||
{
|
||||
struct wayland_shm_display *shmdpy = data;
|
||||
|
||||
if (strcmp(interface, "wl_shm") == 0) {
|
||||
shmdpy->wl_shm = wl_registry_bind(registry, name, &wl_shm_interface, 1);
|
||||
wl_shm_add_listener(shmdpy->wl_shm, &shm_listener, shmdpy);
|
||||
}
|
||||
}
|
||||
|
||||
static const struct wl_registry_listener registry_listener = {
|
||||
registry_handle_global
|
||||
};
|
||||
|
||||
static boolean
|
||||
wayland_shm_display_init_screen(struct native_display *ndpy)
|
||||
{
|
||||
struct wayland_shm_display *shmdpy = wayland_shm_display(ndpy);
|
||||
struct sw_winsys *winsys = NULL;
|
||||
uint32_t id;
|
||||
|
||||
id = wl_display_get_global(shmdpy->base.dpy, "wl_shm", 1);
|
||||
if (id == 0)
|
||||
wl_display_iterate(shmdpy->base.dpy, WL_DISPLAY_READABLE);
|
||||
id = wl_display_get_global(shmdpy->base.dpy, "wl_shm", 1);
|
||||
if (id == 0)
|
||||
shmdpy->base.queue = wl_display_create_queue(shmdpy->base.dpy);
|
||||
shmdpy->base.registry = wl_display_get_registry(shmdpy->base.dpy);
|
||||
wl_proxy_set_queue((struct wl_proxy *) shmdpy->base.registry,
|
||||
shmdpy->base.queue);
|
||||
wl_registry_add_listener(shmdpy->base.registry, ®istry_listener, shmdpy);
|
||||
if (wayland_roundtrip(&shmdpy->base) < 0 || shmdpy->wl_shm == NULL)
|
||||
return FALSE;
|
||||
|
||||
shmdpy->wl_shm = wl_display_bind(shmdpy->base.dpy, id, &wl_shm_interface);
|
||||
if (!shmdpy->wl_shm)
|
||||
return FALSE;
|
||||
|
||||
wl_shm_add_listener(shmdpy->wl_shm, &shm_listener, shmdpy);
|
||||
|
||||
if (shmdpy->base.formats == 0)
|
||||
wl_display_roundtrip(shmdpy->base.dpy);
|
||||
if (shmdpy->base.formats == 0)
|
||||
|
@@ -35,6 +35,34 @@
|
||||
|
||||
#include "native_wayland.h"
|
||||
|
||||
static void
|
||||
sync_callback(void *data, struct wl_callback *callback, uint32_t serial)
|
||||
{
|
||||
int *done = data;
|
||||
|
||||
*done = 1;
|
||||
wl_callback_destroy(callback);
|
||||
}
|
||||
|
||||
static const struct wl_callback_listener sync_listener = {
|
||||
sync_callback
|
||||
};
|
||||
|
||||
int
|
||||
wayland_roundtrip(struct wayland_display *display)
|
||||
{
|
||||
struct wl_callback *callback;
|
||||
int done = 0, ret = 0;
|
||||
|
||||
callback = wl_display_sync(display->dpy);
|
||||
wl_callback_add_listener(callback, &sync_listener, &done);
|
||||
wl_proxy_set_queue((struct wl_proxy *) callback, display->queue);
|
||||
while (ret == 0 && !done)
|
||||
ret = wl_display_dispatch_queue(display->dpy, display->queue);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct native_event_handler *wayland_event_handler;
|
||||
|
||||
const static struct {
|
||||
@@ -71,7 +99,6 @@ wayland_display_get_configs(struct native_display *ndpy, int *num_configs)
|
||||
(1 << NATIVE_ATTACHMENT_BACK_LEFT);
|
||||
|
||||
nconf->window_bit = TRUE;
|
||||
nconf->pixmap_bit = TRUE;
|
||||
|
||||
nconf->color_format = wayland_formats[i].format;
|
||||
display->num_configs++;
|
||||
@@ -93,7 +120,6 @@ static int
|
||||
wayland_display_get_param(struct native_display *ndpy,
|
||||
enum native_param_type param)
|
||||
{
|
||||
struct wayland_display *display = wayland_display(ndpy);
|
||||
int val;
|
||||
|
||||
switch (param) {
|
||||
@@ -111,49 +137,6 @@ wayland_display_get_param(struct native_display *ndpy,
|
||||
return val;
|
||||
}
|
||||
|
||||
static boolean
|
||||
wayland_display_get_pixmap_format(struct native_display *ndpy,
|
||||
EGLNativePixmapType pix,
|
||||
enum pipe_format *format)
|
||||
{
|
||||
/* all wl_egl_pixmaps are supported */
|
||||
*format = PIPE_FORMAT_NONE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
wayland_pixmap_destroy(struct wl_egl_pixmap *egl_pixmap)
|
||||
{
|
||||
struct pipe_resource *resource = egl_pixmap->driver_private;
|
||||
|
||||
assert(resource);
|
||||
|
||||
pipe_resource_reference(&resource, NULL);
|
||||
if (egl_pixmap->buffer) {
|
||||
wl_buffer_destroy(egl_pixmap->buffer);
|
||||
egl_pixmap->buffer = NULL;
|
||||
}
|
||||
|
||||
egl_pixmap->driver_private = NULL;
|
||||
egl_pixmap->destroy = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
wayland_pixmap_surface_initialize(struct wayland_surface *surface)
|
||||
{
|
||||
struct wayland_display *display = wayland_display(&surface->display->base);
|
||||
const enum native_attachment front_natt = NATIVE_ATTACHMENT_FRONT_LEFT;
|
||||
|
||||
if (surface->pix->buffer != NULL)
|
||||
return;
|
||||
|
||||
surface->pix->buffer = display->create_buffer(display, surface, front_natt);
|
||||
surface->pix->destroy = wayland_pixmap_destroy;
|
||||
surface->pix->driver_private =
|
||||
resource_surface_get_single_resource(surface->rsurf, front_natt);
|
||||
}
|
||||
|
||||
static void
|
||||
wayland_release_pending_resource(void *data,
|
||||
struct wl_callback *callback,
|
||||
@@ -188,7 +171,7 @@ wayland_window_surface_handle_resize(struct wayland_surface *surface)
|
||||
surface->win->width, surface->win->height)) {
|
||||
|
||||
if (surface->pending_resource)
|
||||
wl_display_roundtrip(display->dpy);
|
||||
wayland_roundtrip(display);
|
||||
|
||||
if (front_resource) {
|
||||
struct wl_callback *callback;
|
||||
@@ -198,6 +181,7 @@ wayland_window_surface_handle_resize(struct wayland_surface *surface)
|
||||
|
||||
callback = wl_display_sync(display->dpy);
|
||||
wl_callback_add_listener(callback, &release_buffer_listener, surface);
|
||||
wl_proxy_set_queue((struct wl_proxy *) callback, display->queue);
|
||||
}
|
||||
|
||||
for (i = 0; i < WL_BUFFER_COUNT; ++i) {
|
||||
@@ -234,9 +218,6 @@ wayland_surface_validate(struct native_surface *nsurf, uint attachment_mask,
|
||||
|
||||
resource_surface_get_size(surface->rsurf, (uint *) width, (uint *) height);
|
||||
|
||||
if (surface->type == WL_PIXMAP_SURFACE)
|
||||
wayland_pixmap_surface_initialize(surface);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -245,7 +226,7 @@ wayland_frame_callback(void *data, struct wl_callback *callback, uint32_t time)
|
||||
{
|
||||
struct wayland_surface *surface = data;
|
||||
|
||||
surface->block_swap_buffers = FALSE;
|
||||
surface->frame_callback = NULL;
|
||||
|
||||
wl_callback_destroy(callback);
|
||||
}
|
||||
@@ -269,15 +250,17 @@ wayland_surface_swap_buffers(struct native_surface *nsurf)
|
||||
{
|
||||
struct wayland_surface *surface = wayland_surface(nsurf);
|
||||
struct wayland_display *display = surface->display;
|
||||
struct wl_callback *callback;
|
||||
int ret = 0;
|
||||
|
||||
while (surface->block_swap_buffers)
|
||||
wl_display_iterate(display->dpy, WL_DISPLAY_READABLE);
|
||||
while (surface->frame_callback && ret != -1)
|
||||
ret = wl_display_dispatch_queue(display->dpy, display->queue);
|
||||
if (ret == -1)
|
||||
return EGL_FALSE;
|
||||
|
||||
surface->block_swap_buffers = TRUE;
|
||||
|
||||
callback = wl_surface_frame(surface->win->surface);
|
||||
wl_callback_add_listener(callback, &frame_listener, surface);
|
||||
surface->frame_callback = wl_surface_frame(surface->win->surface);
|
||||
wl_callback_add_listener(surface->frame_callback, &frame_listener, surface);
|
||||
wl_proxy_set_queue((struct wl_proxy *) surface->frame_callback,
|
||||
display->queue);
|
||||
|
||||
if (surface->type == WL_WINDOW_SURFACE) {
|
||||
resource_surface_swap_buffers(surface->rsurf,
|
||||
@@ -349,6 +332,7 @@ wayland_surface_present(struct native_surface *nsurf,
|
||||
if (surface->type == WL_WINDOW_SURFACE) {
|
||||
resource_surface_get_size(surface->rsurf, &width, &height);
|
||||
wl_surface_damage(surface->win->surface, 0, 0, width, height);
|
||||
wl_surface_commit(surface->win->surface);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -376,61 +360,6 @@ wayland_surface_destroy(struct native_surface *nsurf)
|
||||
}
|
||||
|
||||
|
||||
|
||||
static struct native_surface *
|
||||
wayland_create_pixmap_surface(struct native_display *ndpy,
|
||||
EGLNativePixmapType pix,
|
||||
const struct native_config *nconf)
|
||||
{
|
||||
struct wayland_display *display = wayland_display(ndpy);
|
||||
struct wayland_surface *surface;
|
||||
struct wl_egl_pixmap *egl_pixmap = (struct wl_egl_pixmap *) pix;
|
||||
enum native_attachment natt = NATIVE_ATTACHMENT_FRONT_LEFT;
|
||||
uint bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW |
|
||||
PIPE_BIND_DISPLAY_TARGET | PIPE_BIND_SCANOUT;
|
||||
|
||||
surface = CALLOC_STRUCT(wayland_surface);
|
||||
if (!surface)
|
||||
return NULL;
|
||||
|
||||
surface->display = display;
|
||||
|
||||
surface->pending_resource = NULL;
|
||||
surface->type = WL_PIXMAP_SURFACE;
|
||||
surface->pix = egl_pixmap;
|
||||
|
||||
if (nconf)
|
||||
surface->color_format = nconf->color_format;
|
||||
else /* FIXME: derive format from wl_visual */
|
||||
surface->color_format = PIPE_FORMAT_B8G8R8A8_UNORM;
|
||||
|
||||
surface->attachment_mask = (1 << NATIVE_ATTACHMENT_FRONT_LEFT);
|
||||
|
||||
surface->rsurf = resource_surface_create(display->base.screen,
|
||||
surface->color_format, bind);
|
||||
|
||||
if (!surface->rsurf) {
|
||||
FREE(surface);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
resource_surface_set_size(surface->rsurf,
|
||||
egl_pixmap->width, egl_pixmap->height);
|
||||
|
||||
/* the pixmap is already allocated, so import it */
|
||||
if (surface->pix->buffer != NULL)
|
||||
resource_surface_import_resource(surface->rsurf, natt,
|
||||
surface->pix->driver_private);
|
||||
|
||||
surface->base.destroy = wayland_surface_destroy;
|
||||
surface->base.present = wayland_surface_present;
|
||||
surface->base.validate = wayland_surface_validate;
|
||||
surface->base.wait = wayland_surface_wait;
|
||||
|
||||
return &surface->base;
|
||||
}
|
||||
|
||||
|
||||
static struct native_surface *
|
||||
wayland_create_window_surface(struct native_display *ndpy,
|
||||
EGLNativeWindowType win,
|
||||
@@ -452,7 +381,7 @@ wayland_create_window_surface(struct native_display *ndpy,
|
||||
surface->win = (struct wl_egl_window *) win;
|
||||
|
||||
surface->pending_resource = NULL;
|
||||
surface->block_swap_buffers = FALSE;
|
||||
surface->frame_callback = NULL;
|
||||
surface->type = WL_WINDOW_SURFACE;
|
||||
|
||||
surface->buffer[WL_BUFFER_FRONT] = NULL;
|
||||
@@ -505,10 +434,7 @@ native_create_display(void *dpy, boolean use_sw)
|
||||
|
||||
display->base.get_param = wayland_display_get_param;
|
||||
display->base.get_configs = wayland_display_get_configs;
|
||||
display->base.get_pixmap_format = wayland_display_get_pixmap_format;
|
||||
display->base.copy_to_pixmap = native_display_copy_to_pixmap;
|
||||
display->base.create_window_surface = wayland_create_window_surface;
|
||||
display->base.create_pixmap_surface = wayland_create_pixmap_surface;
|
||||
|
||||
display->own_dpy = own_dpy;
|
||||
|
||||
|
@@ -45,6 +45,8 @@ struct wayland_display {
|
||||
struct native_display base;
|
||||
|
||||
struct wl_display *dpy;
|
||||
struct wl_event_queue *queue;
|
||||
struct wl_registry *registry;
|
||||
boolean own_dpy;
|
||||
/* supported formats */
|
||||
uint32_t formats;
|
||||
@@ -65,7 +67,6 @@ enum wayland_buffer_type {
|
||||
|
||||
enum wayland_surface_type {
|
||||
WL_WINDOW_SURFACE,
|
||||
WL_PIXMAP_SURFACE,
|
||||
WL_PBUFFER_SURFACE
|
||||
};
|
||||
|
||||
@@ -74,7 +75,6 @@ struct wayland_surface {
|
||||
struct wayland_display *display;
|
||||
|
||||
struct wl_egl_window *win;
|
||||
struct wl_egl_pixmap *pix;
|
||||
enum wayland_surface_type type;
|
||||
int dx, dy;
|
||||
struct resource_surface *rsurf;
|
||||
@@ -85,7 +85,7 @@ struct wayland_surface {
|
||||
struct wl_buffer *buffer[WL_BUFFER_COUNT];
|
||||
unsigned int attachment_mask;
|
||||
|
||||
boolean block_swap_buffers;
|
||||
struct wl_callback *frame_callback;
|
||||
boolean premultiplied_alpha;
|
||||
};
|
||||
|
||||
@@ -119,4 +119,7 @@ struct wayland_display *
|
||||
wayland_create_drm_display(struct wl_display *display,
|
||||
const struct native_event_handler *event_handler);
|
||||
|
||||
int
|
||||
wayland_roundtrip(struct wayland_display *drmdpy);
|
||||
|
||||
#endif /* _NATIVE_WAYLAND_H_ */
|
||||
|
@@ -1,7 +1,7 @@
|
||||
TOP = ../../../..
|
||||
include $(TOP)/configs/current
|
||||
|
||||
LIBNAME = modesetting_drv.so
|
||||
LIBNAME = i915_drv.so
|
||||
|
||||
C_SOURCES = \
|
||||
intel_target.c \
|
||||
|
@@ -52,7 +52,7 @@ static PciChipsets intel_xorg_pci_devices[] = {
|
||||
};
|
||||
|
||||
static XF86ModuleVersionInfo intel_xorg_version = {
|
||||
"modesetting",
|
||||
"i915",
|
||||
MODULEVENDORSTRING,
|
||||
MODINFOSTRING1,
|
||||
MODINFOSTRING2,
|
||||
|
@@ -214,9 +214,10 @@ int radeon_get_reloc(struct radeon_cs_context *csc, struct radeon_bo *bo)
|
||||
unsigned hash = bo->handle & (sizeof(csc->is_handle_added)-1);
|
||||
|
||||
if (csc->is_handle_added[hash]) {
|
||||
reloc = csc->relocs_hashlist[hash];
|
||||
i = csc->reloc_indices_hashlist[hash];
|
||||
reloc = &csc->relocs[i];
|
||||
if (reloc->handle == bo->handle) {
|
||||
return csc->reloc_indices_hashlist[hash];
|
||||
return i;
|
||||
}
|
||||
|
||||
/* Hash collision, look for the BO in the list of relocs linearly. */
|
||||
@@ -233,7 +234,6 @@ int radeon_get_reloc(struct radeon_cs_context *csc, struct radeon_bo *bo)
|
||||
* AAAAAAAAAAABBBBBBBBBBBBBBCCCCCCCC
|
||||
* will collide here: ^ and here: ^,
|
||||
* meaning that we should get very few collisions in the end. */
|
||||
csc->relocs_hashlist[hash] = reloc;
|
||||
csc->reloc_indices_hashlist[hash] = i;
|
||||
/*printf("write_reloc collision, hash: %i, handle: %i\n", hash, bo->handle);*/
|
||||
return i;
|
||||
@@ -257,10 +257,11 @@ static unsigned radeon_add_reloc(struct radeon_cs_context *csc,
|
||||
enum radeon_bo_domain wd = usage & RADEON_USAGE_WRITE ? domains : 0;
|
||||
|
||||
if (csc->is_handle_added[hash]) {
|
||||
reloc = csc->relocs_hashlist[hash];
|
||||
i = csc->reloc_indices_hashlist[hash];
|
||||
reloc = &csc->relocs[i];
|
||||
if (reloc->handle == bo->handle) {
|
||||
update_reloc_domains(reloc, rd, wd, added_domains);
|
||||
return csc->reloc_indices_hashlist[hash];
|
||||
return i;
|
||||
}
|
||||
|
||||
/* Hash collision, look for the BO in the list of relocs linearly. */
|
||||
@@ -270,7 +271,6 @@ static unsigned radeon_add_reloc(struct radeon_cs_context *csc,
|
||||
if (reloc->handle == bo->handle) {
|
||||
update_reloc_domains(reloc, rd, wd, added_domains);
|
||||
|
||||
csc->relocs_hashlist[hash] = reloc;
|
||||
csc->reloc_indices_hashlist[hash] = i;
|
||||
/*printf("write_reloc collision, hash: %i, handle: %i\n", hash, bo->handle);*/
|
||||
return i;
|
||||
@@ -303,7 +303,6 @@ static unsigned radeon_add_reloc(struct radeon_cs_context *csc,
|
||||
reloc->flags = 0;
|
||||
|
||||
csc->is_handle_added[hash] = TRUE;
|
||||
csc->relocs_hashlist[hash] = reloc;
|
||||
csc->reloc_indices_hashlist[hash] = csc->crelocs;
|
||||
|
||||
csc->chunks[1].length_dw += RELOC_DWORDS;
|
||||
|
@@ -48,7 +48,6 @@ struct radeon_cs_context {
|
||||
|
||||
/* 0 = BO not added, 1 = BO added */
|
||||
char is_handle_added[256];
|
||||
struct drm_radeon_cs_reloc *relocs_hashlist[256];
|
||||
unsigned reloc_indices_hashlist[256];
|
||||
|
||||
unsigned used_vram;
|
||||
|
@@ -303,6 +303,9 @@ static boolean do_winsys_init(struct radeon_drm_winsys *ws)
|
||||
&ws->info.r600_ib_vm_max_size))
|
||||
ws->info.r600_virtual_address = FALSE;
|
||||
}
|
||||
/* Remove this line once the virtual address space feature is fixed. */
|
||||
if (ws->gen == R600 && !debug_get_bool_option("RADEON_VA", FALSE))
|
||||
ws->info.r600_virtual_address = FALSE;
|
||||
}
|
||||
|
||||
/* Get max pipes, this is only needed for compute shaders. All evergreen+
|
||||
|
@@ -33,8 +33,10 @@
|
||||
#include <limits.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#include <unistd.h>
|
||||
#include <dlfcn.h>
|
||||
#include <xf86drm.h>
|
||||
|
||||
#include <GL/gl.h> /* dri_interface needs GL types */
|
||||
#include <GL/internal/dri_interface.h>
|
||||
@@ -300,19 +302,12 @@ static int
|
||||
gbm_dri_bo_write(struct gbm_bo *_bo, const void *buf, size_t count)
|
||||
{
|
||||
struct gbm_dri_bo *bo = gbm_dri_bo(_bo);
|
||||
void *ptr;
|
||||
int ret;
|
||||
|
||||
if (bo->bo == NULL)
|
||||
if (bo->image != NULL)
|
||||
return -1;
|
||||
|
||||
ret = kms_bo_map(bo->bo, &ptr);
|
||||
if (ret < 0)
|
||||
return -1;
|
||||
memcpy(bo->map, buf, count);
|
||||
|
||||
memcpy(ptr, buf, count);
|
||||
|
||||
kms_bo_unmap(bo->bo);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -321,11 +316,17 @@ gbm_dri_bo_destroy(struct gbm_bo *_bo)
|
||||
{
|
||||
struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm);
|
||||
struct gbm_dri_bo *bo = gbm_dri_bo(_bo);
|
||||
struct drm_mode_destroy_dumb arg;
|
||||
|
||||
if (bo->image != NULL)
|
||||
if (bo->image != NULL) {
|
||||
dri->image->destroyImage(bo->image);
|
||||
if (bo->bo != NULL)
|
||||
kms_bo_destroy(&bo->bo);
|
||||
} else {
|
||||
munmap(bo->map, bo->size);
|
||||
memset(&arg, 0, sizeof(arg));
|
||||
arg.handle = bo->handle;
|
||||
drmIoctl(dri->base.base.fd, DRM_IOCTL_MODE_DESTROY_DUMB, &arg);
|
||||
}
|
||||
|
||||
free(bo);
|
||||
}
|
||||
|
||||
@@ -363,7 +364,7 @@ gbm_dri_bo_import(struct gbm_device *gbm,
|
||||
struct gbm_dri_bo *bo;
|
||||
__DRIimage *image;
|
||||
unsigned dri_use = 0;
|
||||
int dri_format, width, height, gbm_format, stride, cpp, offset;
|
||||
int gbm_format;
|
||||
|
||||
/* Required for query image WIDTH & HEIGHT */
|
||||
if (dri->image->base.version < 4)
|
||||
@@ -375,21 +376,19 @@ gbm_dri_bo_import(struct gbm_device *gbm,
|
||||
{
|
||||
struct wl_drm_buffer *wb = (struct wl_drm_buffer *) buffer;
|
||||
|
||||
if (!wayland_buffer_is_drm(buffer))
|
||||
return NULL;
|
||||
|
||||
image = wb->driver_buffer;
|
||||
stride = wb->stride[0];
|
||||
offset = wb->offset[0];
|
||||
cpp = 4;
|
||||
|
||||
switch (wb->format) {
|
||||
case WL_DRM_FORMAT_XRGB8888:
|
||||
dri_format = __DRI_IMAGE_FORMAT_XRGB8888;
|
||||
gbm_format = GBM_FORMAT_XRGB8888;
|
||||
break;
|
||||
case WL_DRM_FORMAT_ARGB8888:
|
||||
dri_format = __DRI_IMAGE_FORMAT_ARGB8888;
|
||||
gbm_format = GBM_FORMAT_ARGB8888;
|
||||
break;
|
||||
case WL_DRM_FORMAT_YUYV:
|
||||
dri_format = __DRI_IMAGE_FORMAT_ARGB8888;
|
||||
gbm_format = GBM_FORMAT_YUYV;
|
||||
break;
|
||||
default:
|
||||
@@ -401,15 +400,15 @@ gbm_dri_bo_import(struct gbm_device *gbm,
|
||||
|
||||
case GBM_BO_IMPORT_EGL_IMAGE:
|
||||
{
|
||||
int dri_format;
|
||||
if (dri->lookup_image == NULL)
|
||||
return NULL;
|
||||
|
||||
image = dri->lookup_image(dri->screen, buffer, dri->lookup_user_data);
|
||||
dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_FORMAT, &dri_format);
|
||||
gbm_format = gbm_dri_to_gbm_format(dri_format);
|
||||
dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_STRIDE, &stride);
|
||||
offset = 0;
|
||||
cpp = 4;
|
||||
if (gbm_format == 0)
|
||||
return NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -422,13 +421,7 @@ gbm_dri_bo_import(struct gbm_device *gbm,
|
||||
if (bo == NULL)
|
||||
return NULL;
|
||||
|
||||
dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_WIDTH, &width);
|
||||
dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_HEIGHT, &height);
|
||||
|
||||
bo->image = dri->image->createSubImage(image,
|
||||
width, height, dri_format,
|
||||
offset, stride / cpp, NULL);
|
||||
|
||||
bo->image = dri->image->dupImage(image, NULL);
|
||||
|
||||
if (usage & GBM_BO_USE_SCANOUT)
|
||||
dri_use |= __DRI_IMAGE_USE_SCANOUT;
|
||||
@@ -441,16 +434,81 @@ gbm_dri_bo_import(struct gbm_device *gbm,
|
||||
}
|
||||
|
||||
bo->base.base.gbm = gbm;
|
||||
bo->base.base.width = width;
|
||||
bo->base.base.height = height;
|
||||
bo->base.base.stride = stride;
|
||||
bo->base.base.format = gbm_format;
|
||||
|
||||
dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_WIDTH,
|
||||
(int*)&bo->base.base.width);
|
||||
dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_HEIGHT,
|
||||
(int*)&bo->base.base.height);
|
||||
dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_STRIDE,
|
||||
(int*)&bo->base.base.stride);
|
||||
dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_HANDLE,
|
||||
&bo->base.base.handle.s32);
|
||||
|
||||
return &bo->base.base;
|
||||
}
|
||||
|
||||
static struct gbm_bo *
|
||||
create_dumb(struct gbm_device *gbm,
|
||||
uint32_t width, uint32_t height,
|
||||
uint32_t format, uint32_t usage)
|
||||
{
|
||||
struct gbm_dri_device *dri = gbm_dri_device(gbm);
|
||||
struct drm_mode_create_dumb create_arg;
|
||||
struct drm_mode_map_dumb map_arg;
|
||||
struct gbm_dri_bo *bo;
|
||||
struct drm_mode_destroy_dumb destroy_arg;
|
||||
int ret;
|
||||
|
||||
if (!(usage & GBM_BO_USE_CURSOR_64X64))
|
||||
return NULL;
|
||||
if (format != GBM_FORMAT_ARGB8888)
|
||||
return NULL;
|
||||
|
||||
bo = calloc(1, sizeof *bo);
|
||||
if (bo == NULL)
|
||||
return NULL;
|
||||
|
||||
create_arg.bpp = 32;
|
||||
create_arg.width = width;
|
||||
create_arg.height = height;
|
||||
|
||||
ret = drmIoctl(dri->base.base.fd, DRM_IOCTL_MODE_CREATE_DUMB, &create_arg);
|
||||
if (ret)
|
||||
goto free_bo;
|
||||
|
||||
bo->base.base.gbm = gbm;
|
||||
bo->base.base.width = width;
|
||||
bo->base.base.height = height;
|
||||
bo->base.base.stride = create_arg.pitch;
|
||||
bo->base.base.handle.u32 = create_arg.handle;
|
||||
bo->handle = create_arg.handle;
|
||||
bo->size = create_arg.size;
|
||||
|
||||
memset(&map_arg, 0, sizeof(map_arg));
|
||||
map_arg.handle = bo->handle;
|
||||
|
||||
ret = drmIoctl(dri->base.base.fd, DRM_IOCTL_MODE_MAP_DUMB, &map_arg);
|
||||
if (ret)
|
||||
goto destroy_dumb;
|
||||
|
||||
bo->map = mmap(0, bo->size, PROT_WRITE,
|
||||
MAP_SHARED, dri->base.base.fd, map_arg.offset);
|
||||
if (bo->map == MAP_FAILED)
|
||||
goto destroy_dumb;
|
||||
|
||||
return &bo->base.base;
|
||||
|
||||
destroy_dumb:
|
||||
memset(&destroy_arg, 0, sizeof destroy_arg);
|
||||
destroy_arg.handle = create_arg.handle;
|
||||
drmIoctl(dri->base.base.fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroy_arg);
|
||||
free_bo:
|
||||
free(bo);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct gbm_bo *
|
||||
gbm_dri_bo_create(struct gbm_device *gbm,
|
||||
uint32_t width, uint32_t height,
|
||||
@@ -461,6 +519,9 @@ gbm_dri_bo_create(struct gbm_device *gbm,
|
||||
int dri_format;
|
||||
unsigned dri_use = 0;
|
||||
|
||||
if (usage & GBM_BO_USE_WRITE)
|
||||
return create_dumb(gbm, width, height, format, usage);
|
||||
|
||||
bo = calloc(1, sizeof *bo);
|
||||
if (bo == NULL)
|
||||
return NULL;
|
||||
@@ -469,33 +530,6 @@ gbm_dri_bo_create(struct gbm_device *gbm,
|
||||
bo->base.base.width = width;
|
||||
bo->base.base.height = height;
|
||||
|
||||
if (usage & GBM_BO_USE_WRITE) {
|
||||
int ret;
|
||||
unsigned attrs[7] = {
|
||||
KMS_WIDTH, 64,
|
||||
KMS_HEIGHT, 64,
|
||||
KMS_BO_TYPE, KMS_BO_TYPE_SCANOUT_X8R8G8B8,
|
||||
KMS_TERMINATE_PROP_LIST,
|
||||
};
|
||||
|
||||
if (!(usage & GBM_BO_USE_CURSOR_64X64))
|
||||
return NULL;
|
||||
|
||||
if (dri->kms == NULL)
|
||||
return NULL;
|
||||
|
||||
ret = kms_bo_create(dri->kms, attrs, &bo->bo);
|
||||
if (ret < 0) {
|
||||
free(bo);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
kms_bo_get_prop(bo->bo, KMS_PITCH, &bo->base.base.stride);
|
||||
kms_bo_get_prop(bo->bo, KMS_HANDLE, (unsigned*)&bo->base.base.handle);
|
||||
|
||||
return &bo->base.base;
|
||||
}
|
||||
|
||||
switch (format) {
|
||||
case GBM_FORMAT_RGB565:
|
||||
dri_format =__DRI_IMAGE_FORMAT_RGB565;
|
||||
@@ -601,10 +635,6 @@ dri_device_create(int fd)
|
||||
dri->base.type = GBM_DRM_DRIVER_TYPE_DRI;
|
||||
dri->base.base.name = "drm";
|
||||
|
||||
kms_create(fd, &dri->kms);
|
||||
if (dri->kms == NULL)
|
||||
goto err_kms;
|
||||
|
||||
ret = dri_screen_create(dri);
|
||||
if (ret)
|
||||
goto err_dri;
|
||||
@@ -612,9 +642,8 @@ dri_device_create(int fd)
|
||||
return &dri->base.base;
|
||||
|
||||
err_dri:
|
||||
kms_destroy(&dri->kms);
|
||||
err_kms:
|
||||
free(dri);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@@ -30,8 +30,6 @@
|
||||
|
||||
#include "gbmint.h"
|
||||
|
||||
#include "libkms.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "common_drm.h"
|
||||
|
||||
@@ -43,9 +41,6 @@ struct gbm_dri_surface;
|
||||
struct gbm_dri_device {
|
||||
struct gbm_drm_device base;
|
||||
|
||||
/* Only used for cursors */
|
||||
struct kms_driver *kms;
|
||||
|
||||
void *driver;
|
||||
|
||||
__DRIscreen *screen;
|
||||
@@ -79,7 +74,8 @@ struct gbm_dri_bo {
|
||||
__DRIimage *image;
|
||||
|
||||
/* Only used for cursors */
|
||||
struct kms_bo *bo;
|
||||
uint32_t handle, size;
|
||||
void *map;
|
||||
};
|
||||
|
||||
struct gbm_dri_surface {
|
||||
|
@@ -23,7 +23,7 @@
|
||||
# builtin_compiler is built before libglsl to generate builtin_function.cpp for libglsl.
|
||||
# For this to work, a dummy version of builtin_function.cpp, builtin_stubs.cpp, is used.
|
||||
|
||||
AM_CFLAGS = \
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_srcdir)/src/mapi \
|
||||
-I$(top_srcdir)/src/mesa/ \
|
||||
@@ -31,8 +31,8 @@ AM_CFLAGS = \
|
||||
$(DEFINES) \
|
||||
$(LIBRARY_DEFINES) \
|
||||
$(API_DEFINES)
|
||||
|
||||
AM_CXXFLAGS = $(AM_CFLAGS)
|
||||
AM_CFLAGS = $(VISIBILITY_CFLAGS)
|
||||
AM_CXXFLAGS = $(VISIBILITY_CXXFLAGS)
|
||||
|
||||
AM_LFLAGS = --nounistd -o$(LEX_OUTPUT_ROOT).c
|
||||
|
||||
|
@@ -17,7 +17,7 @@ env.Prepend(CPPPATH = [
|
||||
# Make glcpp-parse.h and glsl_parser.h reachable from the include path.
|
||||
env.Append(CPPPATH = [Dir('.').abspath, Dir('glcpp').abspath])
|
||||
|
||||
env.Append(YACCFLAGS = '-d')
|
||||
env.Append(YACCFLAGS = '-d -p "glcpp_parser_"')
|
||||
|
||||
parser_env = env.Clone()
|
||||
parser_env.Append(YACCFLAGS = [
|
||||
|
@@ -2086,9 +2086,24 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
|
||||
} else {
|
||||
var->location = qual->location;
|
||||
}
|
||||
|
||||
if (qual->flags.q.explicit_index) {
|
||||
var->explicit_index = true;
|
||||
var->index = qual->index;
|
||||
/* From the GLSL 4.30 specification, section 4.4.2 (Output
|
||||
* Layout Qualifiers):
|
||||
*
|
||||
* "It is also a compile-time error if a fragment shader
|
||||
* sets a layout index to less than 0 or greater than 1."
|
||||
*
|
||||
* Older specifications don't mandate a behavior; we take
|
||||
* this as a clarification and always generate the error.
|
||||
*/
|
||||
if (qual->index < 0 || qual->index > 1) {
|
||||
_mesa_glsl_error(loc, state,
|
||||
"explicit index may only be 0 or 1\n");
|
||||
} else {
|
||||
var->explicit_index = true;
|
||||
var->index = qual->index;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (qual->flags.q.explicit_index) {
|
||||
|
@@ -31,7 +31,7 @@ AM_CFLAGS = \
|
||||
$(LIBRARY_DEFINES) \
|
||||
$(API_DEFINES)
|
||||
|
||||
AM_YFLAGS = -v -d
|
||||
AM_YFLAGS = -v -d -p "glcpp_parser_"
|
||||
AM_LFLAGS = --nounistd -o$(LEX_OUTPUT_ROOT).c
|
||||
|
||||
noinst_LTLIBRARIES = libglcpp.la
|
||||
|
@@ -133,8 +133,6 @@ _glcpp_parser_skip_stack_change_if (glcpp_parser_t *parser, YYLTYPE *loc,
|
||||
static void
|
||||
_glcpp_parser_skip_stack_pop (glcpp_parser_t *parser, YYLTYPE *loc);
|
||||
|
||||
#define yylex glcpp_parser_lex
|
||||
|
||||
static int
|
||||
glcpp_parser_lex (YYSTYPE *yylval, YYLTYPE *yylloc, glcpp_parser_t *parser);
|
||||
|
||||
@@ -1197,12 +1195,6 @@ glcpp_parser_create (const struct gl_extensions *extensions, int api)
|
||||
return parser;
|
||||
}
|
||||
|
||||
int
|
||||
glcpp_parser_parse (glcpp_parser_t *parser)
|
||||
{
|
||||
return yyparse (parser);
|
||||
}
|
||||
|
||||
void
|
||||
glcpp_parser_destroy (glcpp_parser_t *parser)
|
||||
{
|
||||
|
@@ -111,7 +111,7 @@ main (int argc, char *argv[])
|
||||
if (shader == NULL)
|
||||
return 1;
|
||||
|
||||
ret = preprocess(ctx, &shader, &info_log, NULL, API_OPENGL);
|
||||
ret = glcpp_preprocess(ctx, &shader, &info_log, NULL, API_OPENGL);
|
||||
|
||||
printf("%s", shader);
|
||||
fprintf(stderr, "%s", info_log);
|
||||
|
@@ -196,7 +196,7 @@ void
|
||||
glcpp_parser_destroy (glcpp_parser_t *parser);
|
||||
|
||||
int
|
||||
preprocess(void *ralloc_ctx, const char **shader, char **info_log,
|
||||
glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log,
|
||||
const struct gl_extensions *extensions, int api);
|
||||
|
||||
/* Functions for writing to the info log */
|
||||
|
@@ -150,7 +150,7 @@ remove_line_continuations(glcpp_parser_t *ctx, const char *shader)
|
||||
}
|
||||
|
||||
int
|
||||
preprocess(void *ralloc_ctx, const char **shader, char **info_log,
|
||||
glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log,
|
||||
const struct gl_extensions *extensions, int api)
|
||||
{
|
||||
int errors;
|
||||
|
@@ -296,7 +296,7 @@ _mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target);
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern int preprocess(void *ctx, const char **shader, char **info_log,
|
||||
extern int glcpp_preprocess(void *ctx, const char **shader, char **info_log,
|
||||
const struct gl_extensions *extensions, int api);
|
||||
|
||||
extern void _mesa_destroy_shader_compiler(void);
|
||||
|
@@ -882,6 +882,7 @@ move_non_declarations(exec_list *instructions, exec_node *last,
|
||||
|
||||
assert(inst->as_assignment()
|
||||
|| inst->as_call()
|
||||
|| inst->as_if() /* for initializers with the ?: operator */
|
||||
|| ((var != NULL) && (var->mode == ir_var_temporary)));
|
||||
|
||||
if (make_copies) {
|
||||
|
@@ -144,7 +144,7 @@ compile_shader(struct gl_context *ctx, struct gl_shader *shader)
|
||||
new(shader) _mesa_glsl_parse_state(ctx, shader->Type, shader);
|
||||
|
||||
const char *source = shader->Source;
|
||||
state->error = preprocess(state, &source, &state->info_log,
|
||||
state->error = glcpp_preprocess(state, &source, &state->info_log,
|
||||
state->extensions, ctx->API) != 0;
|
||||
|
||||
if (!state->error) {
|
||||
|
@@ -41,14 +41,6 @@ _CRTIMP int _vscprintf(const char *format, va_list argptr);
|
||||
|
||||
#include "ralloc.h"
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define likely(x) __builtin_expect(!!(x),1)
|
||||
#define unlikely(x) __builtin_expect(!!(x),0)
|
||||
#else
|
||||
#define likely(x) !!(x)
|
||||
#define unlikely(x) !!(x)
|
||||
#endif
|
||||
|
||||
#ifndef va_copy
|
||||
#ifdef __va_copy
|
||||
#define va_copy(dest, src) __va_copy((dest), (src))
|
||||
|
@@ -54,6 +54,7 @@ extern "C" {
|
||||
#include <stddef.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdbool.h>
|
||||
#include "main/compiler.h"
|
||||
|
||||
/**
|
||||
* \def ralloc(ctx, type)
|
||||
@@ -301,7 +302,7 @@ bool ralloc_strncat(char **dest, const char *str, size_t n);
|
||||
*
|
||||
* \return The newly allocated string.
|
||||
*/
|
||||
char *ralloc_asprintf (const void *ctx, const char *fmt, ...);
|
||||
char *ralloc_asprintf (const void *ctx, const char *fmt, ...) PRINTFLIKE(2, 3);
|
||||
|
||||
/**
|
||||
* Print to a string, given a va_list.
|
||||
@@ -334,7 +335,8 @@ char *ralloc_vasprintf(const void *ctx, const char *fmt, va_list args);
|
||||
* \return True unless allocation failed.
|
||||
*/
|
||||
bool ralloc_asprintf_rewrite_tail(char **str, size_t *start,
|
||||
const char *fmt, ...);
|
||||
const char *fmt, ...)
|
||||
PRINTFLIKE(3, 4);
|
||||
|
||||
/**
|
||||
* Rewrite the tail of an existing string, starting at a given index.
|
||||
@@ -376,7 +378,8 @@ bool ralloc_vasprintf_rewrite_tail(char **str, size_t *start, const char *fmt,
|
||||
*
|
||||
* \return True unless allocation failed.
|
||||
*/
|
||||
bool ralloc_asprintf_append (char **str, const char *fmt, ...);
|
||||
bool ralloc_asprintf_append (char **str, const char *fmt, ...)
|
||||
PRINTFLIKE(2, 3);
|
||||
|
||||
/**
|
||||
* Append formatted text to the supplied string, given a va_list.
|
||||
|
@@ -216,7 +216,7 @@ int test_optpass(int argc, char **argv)
|
||||
} else {
|
||||
shader->Source = input.c_str();
|
||||
const char *source = shader->Source;
|
||||
state->error = preprocess(state, &source, &state->info_log,
|
||||
state->error = glcpp_preprocess(state, &source, &state->info_log,
|
||||
state->extensions, ctx->API) != 0;
|
||||
|
||||
if (!state->error) {
|
||||
|
@@ -1,12 +1,9 @@
|
||||
INC = \
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_builddir)/src/gtest/include \
|
||||
-I$(top_builddir)/src/mesa \
|
||||
-I$(top_builddir)/src/mapi \
|
||||
-I$(top_builddir)/src/glsl
|
||||
|
||||
AM_CFLAGS = $(INC)
|
||||
AM_CXXFLAGS = $(INC)
|
||||
|
||||
TESTS_ENVIRONMENT= \
|
||||
export PYTHON2=$(PYTHON2); \
|
||||
export PYTHON_FLAGS=$(PYTHON_FLAGS);
|
||||
@@ -24,12 +21,14 @@ uniform_initializer_test_SOURCES = \
|
||||
copy_constant_to_storage_tests.cpp \
|
||||
set_uniform_initializer_tests.cpp \
|
||||
uniform_initializer_utils.cpp
|
||||
|
||||
uniform_initializer_test_CFLAGS = \
|
||||
$(PTHREAD_CFLAGS)
|
||||
uniform_initializer_test_LDADD = \
|
||||
$(top_builddir)/src/gtest/libgtest.la \
|
||||
$(top_builddir)/src/glsl/libglsl.la \
|
||||
$(top_builddir)/src/mesa/libmesa.la \
|
||||
-lpthread
|
||||
$(PTHREAD_LIBS)
|
||||
|
||||
ralloc_test_SOURCES = ralloc_test.cpp $(top_builddir)/src/glsl/ralloc.c
|
||||
ralloc_test_LDADD = $(top_builddir)/src/gtest/libgtest.la -lpthread
|
||||
ralloc_test_CFLAGS = $(PTHREAD_CFLAGS)
|
||||
ralloc_test_LDADD = $(top_builddir)/src/gtest/libgtest.la $(PTHREAD_LIBS)
|
||||
|
1
src/glu/.gitignore
vendored
1
src/glu/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
exptmp
|
@@ -1,40 +0,0 @@
|
||||
# src/glu/Makefile
|
||||
|
||||
TOP = ../..
|
||||
|
||||
include $(TOP)/configs/current
|
||||
|
||||
|
||||
SUBDIRS = sgi
|
||||
|
||||
|
||||
default: $(TOP)/configs/current
|
||||
@for dir in $(SUBDIRS) ; do \
|
||||
(cd $$dir && $(MAKE)) || exit 1 ; \
|
||||
done
|
||||
|
||||
# GLU pkg-config file
|
||||
pcedit = sed \
|
||||
-e 's,@INSTALL_DIR@,$(INSTALL_DIR),' \
|
||||
-e 's,@INSTALL_LIB_DIR@,$(INSTALL_LIB_DIR),' \
|
||||
-e 's,@INSTALL_INC_DIR@,$(INSTALL_INC_DIR),' \
|
||||
-e 's,@VERSION@,$(MESA_MAJOR).$(MESA_MINOR).$(MESA_TINY),' \
|
||||
-e 's,@GLU_PC_REQ@,$(GLU_PC_REQ),' \
|
||||
-e 's,@GLU_PC_REQ_PRIV@,$(GLU_PC_REQ_PRIV),' \
|
||||
-e 's,@GLU_PC_LIB_PRIV@,$(GLU_PC_LIB_PRIV),' \
|
||||
-e 's,@GLU_PC_CFLAGS@,$(GLU_PC_CFLAGS),' \
|
||||
-e 's,@GLU_LIB@,$(GLU_LIB),'
|
||||
glu.pc: glu.pc.in
|
||||
$(pcedit) $< > $@
|
||||
|
||||
install: glu.pc
|
||||
$(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)
|
||||
$(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
|
||||
$(MINSTALL) $(TOP)/$(LIB_DIR)/$(GLU_LIB_GLOB) $(DESTDIR)$(INSTALL_LIB_DIR)
|
||||
$(INSTALL) -m 644 glu.pc $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
|
||||
|
||||
clean:
|
||||
-@for dir in $(SUBDIRS) ; do \
|
||||
(cd $$dir && $(MAKE) clean) ; \
|
||||
done
|
||||
-rm -f *.pc
|
@@ -1,13 +0,0 @@
|
||||
prefix=@INSTALL_DIR@
|
||||
exec_prefix=${prefix}
|
||||
libdir=@INSTALL_LIB_DIR@
|
||||
includedir=@INSTALL_INC_DIR@
|
||||
|
||||
Name: glu
|
||||
Description: Mesa OpenGL Utility library
|
||||
Requires: @GLU_PC_REQ@
|
||||
Requires.private: @GLU_PC_REQ_PRIV@
|
||||
Version: @VERSION@
|
||||
Libs: -L${libdir} -l@GLU_LIB@
|
||||
Libs.private: @GLU_PC_LIB_PRIV@
|
||||
Cflags: -I${includedir} @GLU_PC_CFLAGS@
|
1
src/glu/sgi/.gitignore
vendored
1
src/glu/sgi/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
exptmp
|
@@ -1,144 +0,0 @@
|
||||
# src/glu/sgi/Makefile
|
||||
|
||||
.SUFFIXES : .cc
|
||||
|
||||
TOP = ../../..
|
||||
|
||||
include $(TOP)/configs/current
|
||||
|
||||
GLU_MAJOR = 1
|
||||
GLU_MINOR = 3
|
||||
GLU_TINY = 0$(MESA_MAJOR)$(MESA_MINOR)0$(MESA_TINY)
|
||||
|
||||
INCDIRS = -I$(TOP)/include -Iinclude -Iinternals -Ilibnurbs/internals -Ilibnurbs/interface -Ilibnurbs/nurbtess
|
||||
|
||||
C_SOURCES = \
|
||||
libutil/error.c \
|
||||
libutil/glue.c \
|
||||
libutil/mipmap.c \
|
||||
libutil/project.c \
|
||||
libutil/quad.c \
|
||||
libutil/registry.c \
|
||||
libtess/dict.c \
|
||||
libtess/geom.c \
|
||||
libtess/memalloc.c \
|
||||
libtess/mesh.c \
|
||||
libtess/normal.c \
|
||||
libtess/priorityq.c \
|
||||
libtess/render.c \
|
||||
libtess/sweep.c \
|
||||
libtess/tess.c \
|
||||
libtess/tessmono.c
|
||||
|
||||
CC_SOURCES = \
|
||||
libnurbs/interface/bezierEval.cc \
|
||||
libnurbs/interface/bezierPatch.cc \
|
||||
libnurbs/interface/bezierPatchMesh.cc \
|
||||
libnurbs/interface/glcurveval.cc \
|
||||
libnurbs/interface/glinterface.cc \
|
||||
libnurbs/interface/glrenderer.cc \
|
||||
libnurbs/interface/glsurfeval.cc \
|
||||
libnurbs/interface/incurveeval.cc \
|
||||
libnurbs/interface/insurfeval.cc \
|
||||
libnurbs/internals/arc.cc \
|
||||
libnurbs/internals/arcsorter.cc \
|
||||
libnurbs/internals/arctess.cc \
|
||||
libnurbs/internals/backend.cc \
|
||||
libnurbs/internals/basiccrveval.cc \
|
||||
libnurbs/internals/basicsurfeval.cc \
|
||||
libnurbs/internals/bin.cc \
|
||||
libnurbs/internals/bufpool.cc \
|
||||
libnurbs/internals/cachingeval.cc \
|
||||
libnurbs/internals/ccw.cc \
|
||||
libnurbs/internals/coveandtiler.cc \
|
||||
libnurbs/internals/curve.cc \
|
||||
libnurbs/internals/curvelist.cc \
|
||||
libnurbs/internals/curvesub.cc \
|
||||
libnurbs/internals/dataTransform.cc \
|
||||
libnurbs/internals/displaylist.cc \
|
||||
libnurbs/internals/flist.cc \
|
||||
libnurbs/internals/flistsorter.cc \
|
||||
libnurbs/internals/hull.cc \
|
||||
libnurbs/internals/intersect.cc \
|
||||
libnurbs/internals/knotvector.cc \
|
||||
libnurbs/internals/mapdesc.cc \
|
||||
libnurbs/internals/mapdescv.cc \
|
||||
libnurbs/internals/maplist.cc \
|
||||
libnurbs/internals/mesher.cc \
|
||||
libnurbs/internals/monoTriangulationBackend.cc \
|
||||
libnurbs/internals/monotonizer.cc \
|
||||
libnurbs/internals/mycode.cc \
|
||||
libnurbs/internals/nurbsinterfac.cc \
|
||||
libnurbs/internals/nurbstess.cc \
|
||||
libnurbs/internals/patch.cc \
|
||||
libnurbs/internals/patchlist.cc \
|
||||
libnurbs/internals/quilt.cc \
|
||||
libnurbs/internals/reader.cc \
|
||||
libnurbs/internals/renderhints.cc \
|
||||
libnurbs/internals/slicer.cc \
|
||||
libnurbs/internals/sorter.cc \
|
||||
libnurbs/internals/splitarcs.cc \
|
||||
libnurbs/internals/subdivider.cc \
|
||||
libnurbs/internals/tobezier.cc \
|
||||
libnurbs/internals/trimline.cc \
|
||||
libnurbs/internals/trimregion.cc \
|
||||
libnurbs/internals/trimvertpool.cc \
|
||||
libnurbs/internals/uarray.cc \
|
||||
libnurbs/internals/varray.cc \
|
||||
libnurbs/nurbtess/directedLine.cc \
|
||||
libnurbs/nurbtess/gridWrap.cc \
|
||||
libnurbs/nurbtess/monoChain.cc \
|
||||
libnurbs/nurbtess/monoPolyPart.cc \
|
||||
libnurbs/nurbtess/monoTriangulation.cc \
|
||||
libnurbs/nurbtess/partitionX.cc \
|
||||
libnurbs/nurbtess/partitionY.cc \
|
||||
libnurbs/nurbtess/polyDBG.cc \
|
||||
libnurbs/nurbtess/polyUtil.cc \
|
||||
libnurbs/nurbtess/primitiveStream.cc \
|
||||
libnurbs/nurbtess/quicksort.cc \
|
||||
libnurbs/nurbtess/rectBlock.cc \
|
||||
libnurbs/nurbtess/sampleComp.cc \
|
||||
libnurbs/nurbtess/sampleCompBot.cc \
|
||||
libnurbs/nurbtess/sampleCompRight.cc \
|
||||
libnurbs/nurbtess/sampleCompTop.cc \
|
||||
libnurbs/nurbtess/sampleMonoPoly.cc \
|
||||
libnurbs/nurbtess/sampledLine.cc \
|
||||
libnurbs/nurbtess/searchTree.cc
|
||||
|
||||
SOURCES = $(C_SOURCES) $(CC_SOURCES)
|
||||
|
||||
C_OBJECTS = $(C_SOURCES:.c=.o)
|
||||
CC_OBJECTS = $(CC_SOURCES:.cc=.o)
|
||||
OBJECTS = $(C_OBJECTS) $(CC_OBJECTS)
|
||||
|
||||
|
||||
##### RULES #####
|
||||
|
||||
.c.o:
|
||||
$(CC) -c $(INCDIRS) $(CFLAGS) -DNDEBUG -DLIBRARYBUILD $< -o $@
|
||||
|
||||
.cc.o:
|
||||
$(CXX) -c $(INCDIRS) $(CXXFLAGS) -DNDEBUG -DLIBRARYBUILD $< -o $@
|
||||
|
||||
|
||||
##### TARGETS #####
|
||||
|
||||
default:
|
||||
$(MAKE) $(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME)
|
||||
|
||||
$(TOP)/$(LIB_DIR):
|
||||
-mkdir $(TOP)/$(LIB_DIR)
|
||||
|
||||
# Make the library:
|
||||
$(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME): $(OBJECTS)
|
||||
$(MKLIB) -o $(GLU_LIB) -linker '$(CXX)' -ldflags '$(LDFLAGS)' \
|
||||
-major $(GLU_MAJOR) -minor $(GLU_MINOR) -patch $(GLU_TINY) \
|
||||
-cplusplus $(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
|
||||
-exports glu.exports -id $(INSTALL_LIB_DIR)/lib$(GLU_LIB).$(GLU_MAJOR).dylib \
|
||||
$(GLU_LIB_DEPS) $(OBJECTS)
|
||||
|
||||
|
||||
clean:
|
||||
-rm -f *.o */*.o */*/*.o
|
||||
-rm -f *.lo */*.lo */*/*.lo
|
||||
-rm -f *.la */*.la */*/*.la
|
@@ -1,143 +0,0 @@
|
||||
Import('*')
|
||||
|
||||
env = env.Clone()
|
||||
|
||||
env.Prepend(CPPPATH = [
|
||||
'include',
|
||||
'internals',
|
||||
'libnurbs/internals',
|
||||
'libnurbs/interface',
|
||||
'libnurbs/nurbtess',
|
||||
])
|
||||
|
||||
env.Prepend(CPPDEFINES = [
|
||||
'LIBRARYBUILD',
|
||||
'RESOLVE_3D_TEXTURE_SUPPORT',
|
||||
])
|
||||
|
||||
sources = [
|
||||
'libutil/error.c',
|
||||
'libutil/glue.c',
|
||||
'libutil/mipmap.c',
|
||||
'libutil/project.c',
|
||||
'libutil/quad.c',
|
||||
'libutil/registry.c',
|
||||
'libtess/dict.c',
|
||||
'libtess/geom.c',
|
||||
'libtess/memalloc.c',
|
||||
'libtess/mesh.c',
|
||||
'libtess/normal.c',
|
||||
'libtess/priorityq.c',
|
||||
'libtess/render.c',
|
||||
'libtess/sweep.c',
|
||||
'libtess/tess.c',
|
||||
'libtess/tessmono.c',
|
||||
'libnurbs/interface/bezierEval.cc',
|
||||
'libnurbs/interface/bezierPatch.cc',
|
||||
'libnurbs/interface/bezierPatchMesh.cc',
|
||||
'libnurbs/interface/glcurveval.cc',
|
||||
'libnurbs/interface/glinterface.cc',
|
||||
'libnurbs/interface/glrenderer.cc',
|
||||
'libnurbs/interface/glsurfeval.cc',
|
||||
'libnurbs/interface/incurveeval.cc',
|
||||
'libnurbs/interface/insurfeval.cc',
|
||||
'libnurbs/internals/arc.cc',
|
||||
'libnurbs/internals/arcsorter.cc',
|
||||
'libnurbs/internals/arctess.cc',
|
||||
'libnurbs/internals/backend.cc',
|
||||
'libnurbs/internals/basiccrveval.cc',
|
||||
'libnurbs/internals/basicsurfeval.cc',
|
||||
'libnurbs/internals/bin.cc',
|
||||
'libnurbs/internals/bufpool.cc',
|
||||
'libnurbs/internals/cachingeval.cc',
|
||||
'libnurbs/internals/ccw.cc',
|
||||
'libnurbs/internals/coveandtiler.cc',
|
||||
'libnurbs/internals/curve.cc',
|
||||
'libnurbs/internals/curvelist.cc',
|
||||
'libnurbs/internals/curvesub.cc',
|
||||
'libnurbs/internals/dataTransform.cc',
|
||||
'libnurbs/internals/displaylist.cc',
|
||||
'libnurbs/internals/flist.cc',
|
||||
'libnurbs/internals/flistsorter.cc',
|
||||
'libnurbs/internals/hull.cc',
|
||||
'libnurbs/internals/intersect.cc',
|
||||
'libnurbs/internals/knotvector.cc',
|
||||
'libnurbs/internals/mapdesc.cc',
|
||||
'libnurbs/internals/mapdescv.cc',
|
||||
'libnurbs/internals/maplist.cc',
|
||||
'libnurbs/internals/mesher.cc',
|
||||
'libnurbs/internals/monoTriangulationBackend.cc',
|
||||
'libnurbs/internals/monotonizer.cc',
|
||||
'libnurbs/internals/mycode.cc',
|
||||
'libnurbs/internals/nurbsinterfac.cc',
|
||||
'libnurbs/internals/nurbstess.cc',
|
||||
'libnurbs/internals/patch.cc',
|
||||
'libnurbs/internals/patchlist.cc',
|
||||
'libnurbs/internals/quilt.cc',
|
||||
'libnurbs/internals/reader.cc',
|
||||
'libnurbs/internals/renderhints.cc',
|
||||
'libnurbs/internals/slicer.cc',
|
||||
'libnurbs/internals/sorter.cc',
|
||||
'libnurbs/internals/splitarcs.cc',
|
||||
'libnurbs/internals/subdivider.cc',
|
||||
'libnurbs/internals/tobezier.cc',
|
||||
'libnurbs/internals/trimline.cc',
|
||||
'libnurbs/internals/trimregion.cc',
|
||||
'libnurbs/internals/trimvertpool.cc',
|
||||
'libnurbs/internals/uarray.cc',
|
||||
'libnurbs/internals/varray.cc',
|
||||
'libnurbs/nurbtess/directedLine.cc',
|
||||
'libnurbs/nurbtess/gridWrap.cc',
|
||||
'libnurbs/nurbtess/monoChain.cc',
|
||||
'libnurbs/nurbtess/monoPolyPart.cc',
|
||||
'libnurbs/nurbtess/monoTriangulation.cc',
|
||||
'libnurbs/nurbtess/partitionX.cc',
|
||||
'libnurbs/nurbtess/partitionY.cc',
|
||||
'libnurbs/nurbtess/polyDBG.cc',
|
||||
'libnurbs/nurbtess/polyUtil.cc',
|
||||
'libnurbs/nurbtess/primitiveStream.cc',
|
||||
'libnurbs/nurbtess/quicksort.cc',
|
||||
'libnurbs/nurbtess/rectBlock.cc',
|
||||
'libnurbs/nurbtess/sampleComp.cc',
|
||||
'libnurbs/nurbtess/sampleCompBot.cc',
|
||||
'libnurbs/nurbtess/sampleCompRight.cc',
|
||||
'libnurbs/nurbtess/sampleCompTop.cc',
|
||||
'libnurbs/nurbtess/sampleMonoPoly.cc',
|
||||
'libnurbs/nurbtess/sampledLine.cc',
|
||||
'libnurbs/nurbtess/searchTree.cc',
|
||||
]
|
||||
|
||||
if env['platform'] == 'windows':
|
||||
# -D_OPENGL32_ -Iinclude -DBUILD_GL32
|
||||
env.PrependUnique(LIBS = [
|
||||
'gdi32',
|
||||
'user32',
|
||||
'opengl32',
|
||||
])
|
||||
target = 'glu32'
|
||||
sources += ['glu.def']
|
||||
else:
|
||||
env.PrependUnique(LIBS = [
|
||||
'GL',
|
||||
])
|
||||
target = 'glu'
|
||||
|
||||
if env['platform'] == 'haiku':
|
||||
glu = env.StaticLibrary(
|
||||
target = target,
|
||||
source = sources
|
||||
)
|
||||
else:
|
||||
glu = env.SharedLibrary(
|
||||
target = target,
|
||||
source = sources
|
||||
)
|
||||
env.Alias('glu', env.InstallSharedLibrary(glu, version=(1, 3, 0)))
|
||||
|
||||
|
||||
if env['platform'] == 'windows':
|
||||
glu = env.FindIxes(glu, 'LIBPREFIX', 'LIBSUFFIX')
|
||||
else:
|
||||
glu = env.FindIxes(glu, 'SHLIBPREFIX', 'SHLIBSUFFIX')
|
||||
|
||||
Export('glu')
|
@@ -1,4 +0,0 @@
|
||||
/*
|
||||
* This file contains nothing. It's just there so there's at least a single
|
||||
* source file for libGLU.la in this directory.
|
||||
*/
|
@@ -1,88 +0,0 @@
|
||||
;DESCRIPTION 'Mesa GLU (OpenGL work-alike) for Win32'
|
||||
VERSION 5.1
|
||||
;
|
||||
; Module definition file for GLU (GLU32.DLL)
|
||||
;
|
||||
; Note: The GLU functions use the STDCALL
|
||||
; function calling convention. Microsoft's
|
||||
; GLU32 uses this convention and so must the
|
||||
; Mesa GLU32 so that the Mesa DLL can be used
|
||||
; as a drop-in replacement.
|
||||
;
|
||||
; The linker exports STDCALL entry points with
|
||||
; 'decorated' names; e.g., _glBegin@0, where the
|
||||
; trailing number is the number of bytes of
|
||||
; parameter data pushed onto the stack. The
|
||||
; callee is responsible for popping this data
|
||||
; off the stack, usually via a RETF n instruction.
|
||||
;
|
||||
; However, the Microsoft GLU32.DLL does not export
|
||||
; the decorated names, even though the calling convention
|
||||
; is STDCALL. So, this module definition file is
|
||||
; needed to force the Mesa GLU32.DLL to export the
|
||||
; symbols in the same manner as the Microsoft DLL.
|
||||
; Were it not for this problem, this file would not
|
||||
; be needed (for the glu* functions) since the entry
|
||||
; points are compiled with dllexport declspec.
|
||||
;
|
||||
|
||||
EXPORTS
|
||||
gluBeginCurve
|
||||
gluBeginPolygon
|
||||
gluBeginSurface
|
||||
gluBeginTrim
|
||||
gluBuild1DMipmapLevels
|
||||
gluBuild1DMipmaps
|
||||
gluBuild2DMipmapLevels
|
||||
gluBuild2DMipmaps
|
||||
gluBuild3DMipmapLevels
|
||||
gluBuild3DMipmaps
|
||||
gluCheckExtension
|
||||
gluCylinder
|
||||
gluDeleteNurbsRenderer
|
||||
gluDeleteQuadric
|
||||
gluDeleteTess
|
||||
gluDisk
|
||||
gluEndCurve
|
||||
gluEndPolygon
|
||||
gluEndSurface
|
||||
gluEndTrim
|
||||
gluErrorString
|
||||
gluGetNurbsProperty
|
||||
gluGetString
|
||||
gluGetTessProperty
|
||||
gluLoadSamplingMatrices
|
||||
gluLookAt
|
||||
gluNewNurbsRenderer
|
||||
gluNewQuadric
|
||||
gluNewTess
|
||||
gluNextContour
|
||||
gluNurbsCallback
|
||||
gluNurbsCallbackData
|
||||
gluNurbsCallbackDataEXT
|
||||
gluNurbsCurve
|
||||
gluNurbsProperty
|
||||
gluNurbsSurface
|
||||
gluOrtho2D
|
||||
gluPartialDisk
|
||||
gluPerspective
|
||||
gluPickMatrix
|
||||
gluProject
|
||||
gluPwlCurve
|
||||
gluQuadricCallback
|
||||
gluQuadricDrawStyle
|
||||
gluQuadricNormals
|
||||
gluQuadricOrientation
|
||||
gluQuadricTexture
|
||||
gluScaleImage
|
||||
gluSphere
|
||||
gluTessBeginContour
|
||||
gluTessBeginPolygon
|
||||
gluTessCallback
|
||||
gluTessEndContour
|
||||
gluTessEndPolygon
|
||||
gluTessNormal
|
||||
gluTessProperty
|
||||
gluTessVertex
|
||||
gluUnProject
|
||||
gluUnProject4
|
@@ -1,118 +0,0 @@
|
||||
gluBeginCurve
|
||||
gluBeginPolygon
|
||||
gluBeginSurface
|
||||
gluBeginTrim
|
||||
gluBuild1DMipmapLevels
|
||||
gluBuild1DMipmaps
|
||||
gluBuild2DMipmapLevels
|
||||
gluBuild2DMipmaps
|
||||
gluBuild3DMipmapLevels
|
||||
gluBuild3DMipmaps
|
||||
gluCheckExtension
|
||||
gluCylinder
|
||||
gluDeleteNurbsRenderer
|
||||
gluDeleteQuadric
|
||||
gluDeleteTess
|
||||
gluDisk
|
||||
gluEndCurve
|
||||
gluEndPolygon
|
||||
gluEndSurface
|
||||
gluEndTrim
|
||||
gluErrorString
|
||||
gluGetNurbsProperty
|
||||
gluGetString
|
||||
gluGetTessProperty
|
||||
gluLoadSamplingMatrices
|
||||
gluLookAt
|
||||
gluNewNurbsRenderer
|
||||
gluNewQuadric
|
||||
gluNewTess
|
||||
gluNextContour
|
||||
gluNurbsCallback
|
||||
gluNurbsCallbackData
|
||||
gluNurbsCallbackDataEXT
|
||||
gluNurbsCurve
|
||||
gluNurbsProperty
|
||||
gluNurbsSurface
|
||||
gluOrtho2D
|
||||
gluPartialDisk
|
||||
gluPerspective
|
||||
gluPickMatrix
|
||||
gluProject
|
||||
gluPwlCurve
|
||||
gluQuadricCallback
|
||||
gluQuadricDrawStyle
|
||||
gluQuadricNormals
|
||||
gluQuadricOrientation
|
||||
gluQuadricTexture
|
||||
gluScaleImage
|
||||
gluSphere
|
||||
gluTessBeginContour
|
||||
gluTessBeginPolygon
|
||||
gluTessCallback
|
||||
gluTessEndContour
|
||||
gluTessEndPolygon
|
||||
gluTessNormal
|
||||
gluTessProperty
|
||||
gluTessVertex
|
||||
gluUnProject
|
||||
gluUnProject4
|
||||
mgluBeginCurve
|
||||
mgluBeginPolygon
|
||||
mgluBeginSurface
|
||||
mgluBeginTrim
|
||||
mgluBuild1DMipmapLevels
|
||||
mgluBuild1DMipmaps
|
||||
mgluBuild2DMipmapLevels
|
||||
mgluBuild2DMipmaps
|
||||
mgluBuild3DMipmapLevels
|
||||
mgluBuild3DMipmaps
|
||||
mgluCheckExtension
|
||||
mgluCylinder
|
||||
mgluDeleteNurbsRenderer
|
||||
mgluDeleteQuadric
|
||||
mgluDeleteTess
|
||||
mgluDisk
|
||||
mgluEndCurve
|
||||
mgluEndPolygon
|
||||
mgluEndSurface
|
||||
mgluEndTrim
|
||||
mgluErrorString
|
||||
mgluGetNurbsProperty
|
||||
mgluGetString
|
||||
mgluGetTessProperty
|
||||
mgluLoadSamplingMatrices
|
||||
mgluLookAt
|
||||
mgluNewNurbsRenderer
|
||||
mgluNewQuadric
|
||||
mgluNewTess
|
||||
mgluNextContour
|
||||
mgluNurbsCallback
|
||||
mgluNurbsCallbackData
|
||||
mgluNurbsCallbackDataEXT
|
||||
mgluNurbsCurve
|
||||
mgluNurbsProperty
|
||||
mgluNurbsSurface
|
||||
mgluOrtho2D
|
||||
mgluPartialDisk
|
||||
mgluPerspective
|
||||
mgluPickMatrix
|
||||
mgluProject
|
||||
mgluPwlCurve
|
||||
mgluQuadricCallback
|
||||
mgluQuadricDrawStyle
|
||||
mgluQuadricNormals
|
||||
mgluQuadricOrientation
|
||||
mgluQuadricTexture
|
||||
mgluScaleImage
|
||||
mgluSphere
|
||||
mgluTessBeginContour
|
||||
mgluTessBeginPolygon
|
||||
mgluTessCallback
|
||||
mgluTessEndContour
|
||||
mgluTessEndPolygon
|
||||
mgluTessNormal
|
||||
mgluTessProperty
|
||||
mgluTessVertex
|
||||
mgluUnProject
|
||||
mgluUnProject4
|
@@ -1,59 +0,0 @@
|
||||
_*gluBeginCurve
|
||||
_*gluBeginPolygon
|
||||
_*gluBeginSurface
|
||||
_*gluBeginTrim
|
||||
_*gluBuild1DMipmapLevels
|
||||
_*gluBuild1DMipmaps
|
||||
_*gluBuild2DMipmapLevels
|
||||
_*gluBuild2DMipmaps
|
||||
_*gluBuild3DMipmapLevels
|
||||
_*gluBuild3DMipmaps
|
||||
_*gluCheckExtension
|
||||
_*gluCylinder
|
||||
_*gluDeleteNurbsRenderer
|
||||
_*gluDeleteQuadric
|
||||
_*gluDeleteTess
|
||||
_*gluDisk
|
||||
_*gluEndCurve
|
||||
_*gluEndPolygon
|
||||
_*gluEndSurface
|
||||
_*gluEndTrim
|
||||
_*gluErrorString
|
||||
_*gluGetNurbsProperty
|
||||
_*gluGetString
|
||||
_*gluGetTessProperty
|
||||
_*gluLoadSamplingMatrices
|
||||
_*gluLookAt
|
||||
_*gluNewNurbsRenderer
|
||||
_*gluNewQuadric
|
||||
_*gluNewTess
|
||||
_*gluNextContour
|
||||
_*gluNurbsCallback
|
||||
_*gluNurbsCallbackData
|
||||
_*gluNurbsCallbackDataEXT
|
||||
_*gluNurbsCurve
|
||||
_*gluNurbsProperty
|
||||
_*gluNurbsSurface
|
||||
_*gluOrtho2D
|
||||
_*gluPartialDisk
|
||||
_*gluPerspective
|
||||
_*gluPickMatrix
|
||||
_*gluProject
|
||||
_*gluPwlCurve
|
||||
_*gluQuadricCallback
|
||||
_*gluQuadricDrawStyle
|
||||
_*gluQuadricNormals
|
||||
_*gluQuadricOrientation
|
||||
_*gluQuadricTexture
|
||||
_*gluScaleImage
|
||||
_*gluSphere
|
||||
_*gluTessBeginContour
|
||||
_*gluTessBeginPolygon
|
||||
_*gluTessCallback
|
||||
_*gluTessEndContour
|
||||
_*gluTessEndPolygon
|
||||
_*gluTessNormal
|
||||
_*gluTessProperty
|
||||
_*gluTessVertex
|
||||
_*gluUnProject
|
||||
_*gluUnProject4
|
@@ -1,86 +0,0 @@
|
||||
/*
|
||||
** gluos.h - operating system dependencies for GLU
|
||||
**
|
||||
*/
|
||||
#ifdef __VMS
|
||||
#ifdef __cplusplus
|
||||
#pragma message disable nocordel
|
||||
#pragma message disable codeunreachable
|
||||
#pragma message disable codcauunr
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __WATCOMC__
|
||||
/* Disable *lots* of warnings to get a clean build. I can't be bothered fixing the
|
||||
* code at the moment, as it is pretty ugly.
|
||||
*/
|
||||
#pragma warning 7 10
|
||||
#pragma warning 13 10
|
||||
#pragma warning 14 10
|
||||
#pragma warning 367 10
|
||||
#pragma warning 379 10
|
||||
#pragma warning 726 10
|
||||
#pragma warning 836 10
|
||||
#endif
|
||||
|
||||
#ifdef BUILD_FOR_SNAP
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <malloc.h>
|
||||
|
||||
#elif defined(_WIN32)
|
||||
|
||||
#include <stdlib.h> /* For _MAX_PATH definition */
|
||||
#include <stdio.h>
|
||||
#include <malloc.h>
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#define NOGDI
|
||||
#define NOIME
|
||||
#define NOMINMAX
|
||||
|
||||
#ifdef __MINGW64_VERSION_MAJOR
|
||||
#undef _WIN32_WINNT
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32_WINNT
|
||||
/* XXX: Workaround a bug in mingw-w64's headers when NOGDI is set and
|
||||
* _WIN32_WINNT >= 0x0600 */
|
||||
#define _WIN32_WINNT 0x0400
|
||||
#endif
|
||||
#ifndef STRICT
|
||||
#define STRICT 1
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
/* Disable warnings */
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(disable : 4101)
|
||||
#pragma warning(disable : 4244)
|
||||
#pragma warning(disable : 4761)
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1300
|
||||
#pragma comment(linker, "/OPT:NOWIN98")
|
||||
#endif
|
||||
|
||||
#ifndef WINGDIAPI
|
||||
#define WINGDIAPI
|
||||
#endif
|
||||
|
||||
#elif defined(__OS2__)
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <malloc.h>
|
||||
#define WINGDIAPI
|
||||
|
||||
#else
|
||||
|
||||
/* Disable Microsoft-specific keywords */
|
||||
#define GLAPIENTRY
|
||||
#define WINGDIAPI
|
||||
|
||||
#endif
|
@@ -1,260 +0,0 @@
|
||||
/*
|
||||
** License Applicability. Except to the extent portions of this file are
|
||||
** made subject to an alternative license as permitted in the SGI Free
|
||||
** Software License B, Version 1.1 (the "License"), the contents of this
|
||||
** file are subject only to the provisions of the License. You may not use
|
||||
** this file except in compliance with the License. You may obtain a copy
|
||||
** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
|
||||
** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
|
||||
**
|
||||
** http://oss.sgi.com/projects/FreeB
|
||||
**
|
||||
** Note that, as provided in the License, the Software is distributed on an
|
||||
** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
|
||||
** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
|
||||
** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
|
||||
** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
|
||||
**
|
||||
** Original Code. The Original Code is: OpenGL Sample Implementation,
|
||||
** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
|
||||
** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
|
||||
** Copyright in any portions created by third parties is as indicated
|
||||
** elsewhere herein. All Rights Reserved.
|
||||
**
|
||||
** Additional Notice Provisions: The application programming interfaces
|
||||
** established by SGI in conjunction with the Original Code are The
|
||||
** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
|
||||
** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
|
||||
** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
|
||||
** Window System(R) (Version 1.3), released October 19, 1998. This software
|
||||
** was created using the OpenGL(R) version 1.2.1 Sample Implementation
|
||||
** published by SGI, but has not been independently verified as being
|
||||
** compliant with the OpenGL(R) version 1.2.1 Specification.
|
||||
**
|
||||
*/
|
||||
/*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <math.h>
|
||||
#include "bezierEval.h"
|
||||
|
||||
#ifdef __WATCOMC__
|
||||
#pragma warning 14 10
|
||||
#endif
|
||||
|
||||
#define TOLERANCE 0.0001
|
||||
|
||||
#ifndef MAX_ORDER
|
||||
#define MAX_ORDER 16
|
||||
#endif
|
||||
|
||||
#ifndef MAX_DIMENSION
|
||||
#define MAX_DIMENSION 4
|
||||
#endif
|
||||
|
||||
static void normalize(float vec[3]);
|
||||
static void crossProduct(float x[3], float y[3], float ret[3]);
|
||||
#if 0 // UNUSED
|
||||
static void bezierCurveEvalfast(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retpoint[]);
|
||||
#endif
|
||||
|
||||
static float binomialCoefficients[8][8] = {
|
||||
{1,0,0,0,0,0,0,0},
|
||||
{1,1,0,0,0,0,0,0},
|
||||
{1,2,1,0,0,0,0,0},
|
||||
{1,3,3,1,0,0,0,0},
|
||||
{1,4,6,4,1,0,0,0},
|
||||
{1,5,10,10,5,1,0,0},
|
||||
{1,6,15,20,15,6,1,0},
|
||||
{1,7,21,35,35,21,7,1}
|
||||
};
|
||||
|
||||
void bezierCurveEval(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retpoint[])
|
||||
{
|
||||
float uprime = (u-u0)/(u1-u0);
|
||||
float *ctlptr = ctlpoints;
|
||||
float oneMinusX = 1.0f-uprime;
|
||||
float XPower = 1.0f;
|
||||
|
||||
int i,k;
|
||||
for(k=0; k<dimension; k++)
|
||||
retpoint[k] = (*(ctlptr + k));
|
||||
|
||||
for(i=1; i<order; i++){
|
||||
ctlptr += stride;
|
||||
XPower *= uprime;
|
||||
for(k=0; k<dimension; k++) {
|
||||
retpoint[k] = retpoint[k]*oneMinusX + ctlptr[k]* binomialCoefficients[order-1][i] * XPower;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if 0 // UNUSED
|
||||
/*order = degree +1 >=1.
|
||||
*/
|
||||
void bezierCurveEvalfast(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retpoint[])
|
||||
{
|
||||
float uprime = (u-u0)/(u1-u0);
|
||||
float buf[MAX_ORDER][MAX_ORDER][MAX_DIMENSION];
|
||||
float* ctlptr = ctlpoints;
|
||||
int r, i,j;
|
||||
for(i=0; i<order; i++) {
|
||||
for(j=0; j<dimension; j++)
|
||||
buf[0][i][j] = ctlptr[j];
|
||||
ctlptr += stride;
|
||||
}
|
||||
for(r=1; r<order; r++){
|
||||
for(i=0; i<order-r; i++) {
|
||||
for(j=0; j<dimension; j++)
|
||||
buf[r][i][j] = (1-uprime)*buf[r-1][i][j] + uprime*buf[r-1][i+1][j];
|
||||
}
|
||||
}
|
||||
|
||||
for(j=0; j<dimension; j++)
|
||||
retpoint[j] = buf[order-1][0][j];
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*order = degree +1 >=1.
|
||||
*/
|
||||
void bezierCurveEvalDer(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retDer[])
|
||||
{
|
||||
int i,k;
|
||||
float width = u1-u0;
|
||||
float *ctlptr = ctlpoints;
|
||||
|
||||
float buf[MAX_ORDER][MAX_DIMENSION];
|
||||
if(order == 1){
|
||||
for(k=0; k<dimension; k++)
|
||||
retDer[k]=0;
|
||||
}
|
||||
for(i=0; i<order-1; i++){
|
||||
for(k=0; k<dimension; k++) {
|
||||
buf[i][k] = (ctlptr[stride+k] - ctlptr[k])*(order-1)/width;
|
||||
}
|
||||
ctlptr += stride;
|
||||
}
|
||||
|
||||
bezierCurveEval(u0, u1, order-1, (float*) buf, MAX_DIMENSION, dimension, u, retDer);
|
||||
}
|
||||
|
||||
void bezierCurveEvalDerGen(int der, float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retDer[])
|
||||
{
|
||||
int i,k,r;
|
||||
float *ctlptr = ctlpoints;
|
||||
float width=u1-u0;
|
||||
float buf[MAX_ORDER][MAX_ORDER][MAX_DIMENSION];
|
||||
if(der<0) der=0;
|
||||
for(i=0; i<order; i++){
|
||||
for(k=0; k<dimension; k++){
|
||||
buf[0][i][k] = ctlptr[k];
|
||||
}
|
||||
ctlptr += stride;
|
||||
}
|
||||
|
||||
|
||||
for(r=1; r<=der; r++){
|
||||
for(i=0; i<order-r; i++){
|
||||
for(k=0; k<dimension; k++){
|
||||
buf[r][i][k] = (buf[r-1][i+1][k] - buf[r-1][i][k])*(order-r)/width;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bezierCurveEval(u0, u1, order-der, (float *) (buf[der]), MAX_DIMENSION, dimension, u, retDer);
|
||||
}
|
||||
|
||||
/*the Bezier bivarite polynomial is:
|
||||
* sum[i:0,uorder-1][j:0,vorder-1] { ctlpoints[i*ustride+j*vstride] * B(i)*B(j)
|
||||
* where B(i) and B(j) are basis functions
|
||||
*/
|
||||
void bezierSurfEvalDerGen(int uder, int vder, float u0, float u1, int uorder, float v0, float v1, int vorder, int dimension, float *ctlpoints, int ustride, int vstride, float u, float v, float ret[])
|
||||
{
|
||||
int i;
|
||||
float newPoints[MAX_ORDER][MAX_DIMENSION];
|
||||
|
||||
for(i=0; i<uorder; i++){
|
||||
|
||||
bezierCurveEvalDerGen(vder, v0, v1, vorder, ctlpoints+ustride*i, vstride, dimension, v, newPoints[i]);
|
||||
|
||||
}
|
||||
|
||||
bezierCurveEvalDerGen(uder, u0, u1, uorder, (float *) newPoints, MAX_DIMENSION, dimension, u, ret);
|
||||
}
|
||||
|
||||
|
||||
/*division by w is performed*/
|
||||
void bezierSurfEval(float u0, float u1, int uorder, float v0, float v1, int vorder, int dimension, float *ctlpoints, int ustride, int vstride, float u, float v, float ret[])
|
||||
{
|
||||
bezierSurfEvalDerGen(0, 0, u0, u1, uorder, v0, v1, vorder, dimension, ctlpoints, ustride, vstride, u, v, ret);
|
||||
if(dimension == 4) /*homogeneous*/{
|
||||
ret[0] /= ret[3];
|
||||
ret[1] /= ret[3];
|
||||
ret[2] /= ret[3];
|
||||
}
|
||||
}
|
||||
|
||||
void bezierSurfEvalNormal(float u0, float u1, int uorder, float v0, float v1, int vorder, int dimension, float *ctlpoints, int ustride, int vstride, float u, float v, float retNormal[])
|
||||
{
|
||||
float partialU[4];
|
||||
float partialV[4];
|
||||
assert(dimension>=3 && dimension <=4);
|
||||
bezierSurfEvalDerGen(1,0, u0, u1, uorder, v0, v1, vorder, dimension, ctlpoints, ustride, vstride, u, v, partialU);
|
||||
bezierSurfEvalDerGen(0,1, u0, u1, uorder, v0, v1, vorder, dimension, ctlpoints, ustride, vstride, u, v, partialV);
|
||||
|
||||
if(dimension == 3){/*inhomogeneous*/
|
||||
crossProduct(partialU, partialV, retNormal);
|
||||
|
||||
normalize(retNormal);
|
||||
|
||||
return;
|
||||
}
|
||||
else { /*homogeneous*/
|
||||
float val[4]; /*the point coordinates (without derivative)*/
|
||||
float newPartialU[MAX_DIMENSION];
|
||||
float newPartialV[MAX_DIMENSION];
|
||||
int i;
|
||||
bezierSurfEvalDerGen(0,0, u0, u1, uorder, v0, v1, vorder, dimension, ctlpoints, ustride, vstride, u, v, val);
|
||||
|
||||
for(i=0; i<=2; i++){
|
||||
newPartialU[i] = partialU[i] * val[3] - val[i] * partialU[3];
|
||||
newPartialV[i] = partialV[i] * val[3] - val[i] * partialV[3];
|
||||
}
|
||||
crossProduct(newPartialU, newPartialV, retNormal);
|
||||
normalize(retNormal);
|
||||
}
|
||||
}
|
||||
|
||||
/*if size is 0, then nothing is done*/
|
||||
static void normalize(float vec[3])
|
||||
{
|
||||
float size = (float)sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]);
|
||||
|
||||
if(size < TOLERANCE)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "Warning: in oglBSpline.c normal is 0\n");
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
else {
|
||||
vec[0] = vec[0]/size;
|
||||
vec[1] = vec[1]/size;
|
||||
vec[2] = vec[2]/size;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void crossProduct(float x[3], float y[3], float ret[3])
|
||||
{
|
||||
ret[0] = x[1]*y[2] - y[1]*x[2];
|
||||
ret[1] = x[2]*y[0] - y[2]*x[0];
|
||||
ret[2] = x[0]*y[1] - y[0]*x[1];
|
||||
|
||||
}
|
||||
|
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
* SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
|
||||
* Copyright (C) 1991-2000 Silicon Graphics, 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, sublicense,
|
||||
* 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 including the dates of first publication and
|
||||
* either this permission notice or a reference to
|
||||
* http://oss.sgi.com/projects/FreeB/
|
||||
* 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
|
||||
* SILICON GRAPHICS, INC. 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.
|
||||
*
|
||||
* Except as contained in this notice, the name of Silicon Graphics, Inc.
|
||||
* shall not be used in advertising or otherwise to promote the sale, use or
|
||||
* other dealings in this Software without prior written authorization from
|
||||
* Silicon Graphics, Inc.
|
||||
*/
|
||||
/*
|
||||
*/
|
||||
|
||||
#ifndef _BEZIEREVAL_H
|
||||
#define _BEZIEREVAL_H
|
||||
|
||||
void bezierCurveEval(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retpoint[]);
|
||||
void bezierCurveEvalDer(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retDer[]);
|
||||
void bezierCurveEvalDerGen(int der, float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retDer[]);
|
||||
|
||||
|
||||
void bezierSurfEvalDerGen(int uder, int vder, float u0, float u1, int uorder, float v0, float v1, int vorder, int dimension, float *ctlpoints, int ustride, int vstride, float u, float v, float ret[]);
|
||||
|
||||
void bezierSurfEval(float u0, float u1, int uorder, float v0, float v1, int vorder, int dimension, float *ctlpoints, int ustride, int vstride, float u, float v, float ret[]);
|
||||
|
||||
void bezierSurfEvalNormal(float u0, float u1, int uorder, float v0, float v1, int vorder, int dimension, float *ctlpoints, int ustride, int vstride, float u, float v, float retNormal[]);
|
||||
|
||||
|
||||
#endif
|
@@ -1,206 +0,0 @@
|
||||
/*
|
||||
** License Applicability. Except to the extent portions of this file are
|
||||
** made subject to an alternative license as permitted in the SGI Free
|
||||
** Software License B, Version 1.1 (the "License"), the contents of this
|
||||
** file are subject only to the provisions of the License. You may not use
|
||||
** this file except in compliance with the License. You may obtain a copy
|
||||
** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
|
||||
** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
|
||||
**
|
||||
** http://oss.sgi.com/projects/FreeB
|
||||
**
|
||||
** Note that, as provided in the License, the Software is distributed on an
|
||||
** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
|
||||
** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
|
||||
** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
|
||||
** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
|
||||
**
|
||||
** Original Code. The Original Code is: OpenGL Sample Implementation,
|
||||
** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
|
||||
** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
|
||||
** Copyright in any portions created by third parties is as indicated
|
||||
** elsewhere herein. All Rights Reserved.
|
||||
**
|
||||
** Additional Notice Provisions: The application programming interfaces
|
||||
** established by SGI in conjunction with the Original Code are The
|
||||
** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
|
||||
** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
|
||||
** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
|
||||
** Window System(R) (Version 1.3), released October 19, 1998. This software
|
||||
** was created using the OpenGL(R) version 1.2.1 Sample Implementation
|
||||
** published by SGI, but has not been independently verified as being
|
||||
** compliant with the OpenGL(R) version 1.2.1 Specification.
|
||||
**
|
||||
*/
|
||||
/*
|
||||
*/
|
||||
|
||||
#include "gluos.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <GL/glu.h> /*for drawing bzier patch*/
|
||||
#include "bezierPatch.h"
|
||||
#include "bezierEval.h"
|
||||
|
||||
/*
|
||||
*allocate an instance of bezierPatch. The control points are unknown. But
|
||||
*the space of this array is allocated with size of
|
||||
* uorder*vorder*dimension
|
||||
*
|
||||
*/
|
||||
bezierPatch* bezierPatchMake(float umin, float vmin, float umax, float vmax, int uorder, int vorder, int dimension)
|
||||
{
|
||||
bezierPatch* ret = (bezierPatch*) malloc(sizeof(bezierPatch));
|
||||
assert(ret);
|
||||
ret->umin = umin;
|
||||
ret->vmin = vmin;
|
||||
ret->umax = umax;
|
||||
ret->vmax = vmax;
|
||||
ret->uorder = uorder;
|
||||
ret->vorder = vorder;
|
||||
ret->dimension = dimension;
|
||||
ret->ctlpoints = (float*) malloc(sizeof(float) * dimension * uorder * vorder);
|
||||
assert(ret->ctlpoints);
|
||||
|
||||
ret->next = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bezierPatch* bezierPatchMake2(float umin, float vmin, float umax, float vmax, int uorder, int vorder, int dimension, int ustride, int vstride, float* ctlpoints)
|
||||
{
|
||||
bezierPatch* ret = (bezierPatch*) malloc(sizeof(bezierPatch));
|
||||
assert(ret);
|
||||
ret->umin = umin;
|
||||
ret->vmin = vmin;
|
||||
ret->umax = umax;
|
||||
ret->vmax = vmax;
|
||||
ret->uorder = uorder;
|
||||
ret->vorder = vorder;
|
||||
ret->dimension = dimension;
|
||||
ret->ctlpoints = (float*) malloc(sizeof(float) * dimension * uorder * vorder);
|
||||
assert(ret->ctlpoints);
|
||||
|
||||
/*copy the control points there*/
|
||||
int the_ustride = vorder * dimension;
|
||||
int the_vstride = dimension;
|
||||
for(int i=0; i<uorder; i++)
|
||||
for(int j=0; j<vorder; j++)
|
||||
for(int k=0; k<dimension; k++)
|
||||
ret->ctlpoints[i * the_ustride + j*the_vstride+k] = ctlpoints[i*ustride+j*vstride+k];
|
||||
|
||||
ret->next = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
*deallocate the space as allocated by Make
|
||||
*/
|
||||
void bezierPatchDelete(bezierPatch *b)
|
||||
{
|
||||
free(b->ctlpoints);
|
||||
free(b);
|
||||
}
|
||||
|
||||
/*delete the whole linked list
|
||||
*/
|
||||
void bezierPatchDeleteList(bezierPatch *b)
|
||||
{
|
||||
bezierPatch *temp;
|
||||
while (b != NULL) {
|
||||
temp = b;
|
||||
b = b->next;
|
||||
bezierPatchDelete(temp);
|
||||
}
|
||||
}
|
||||
|
||||
bezierPatch* bezierPatchInsert(bezierPatch *list, bezierPatch *b)
|
||||
{
|
||||
b->next = list;
|
||||
return b;
|
||||
}
|
||||
|
||||
/*print the data stored in this patch*/
|
||||
void bezierPatchPrint(bezierPatch *b)
|
||||
{
|
||||
printf("bezierPatch:\n");
|
||||
printf("umin,umax=(%f,%f), (vmin, vmax)=(%f,%f)\n", b->umin, b->umax, b->vmin, b->vmax);
|
||||
printf("uorder=%i, vorder=%i\n", b->uorder, b->vorder);
|
||||
printf("idmension = %i\n", b->dimension);
|
||||
}
|
||||
|
||||
/*print the whole list*/
|
||||
void bezierPatchPrintList(bezierPatch *list)
|
||||
{
|
||||
bezierPatch* temp;
|
||||
for(temp=list; temp != NULL; temp = temp->next)
|
||||
bezierPatchPrint(temp);
|
||||
}
|
||||
|
||||
void bezierPatchEval(bezierPatch *b, float u, float v, float ret[])
|
||||
{
|
||||
if( u >= b->umin && u<= b->umax
|
||||
&& v >= b->vmin && v<= b->vmax)
|
||||
{
|
||||
|
||||
bezierSurfEval(b->umin, b->umax, b->uorder, b->vmin, b->vmax, b->vorder, b->dimension, b->ctlpoints, b->dimension * b->vorder, b->dimension, u, v, ret);
|
||||
|
||||
}
|
||||
else if(b->next != NULL)
|
||||
bezierPatchEval(b->next, u,v, ret);
|
||||
else
|
||||
bezierSurfEval(b->umin, b->umax, b->uorder, b->vmin, b->vmax, b->vorder, b->dimension, b->ctlpoints, b->dimension * b->vorder, b->dimension, u, v, ret);
|
||||
}
|
||||
|
||||
/*the returned normal is normlized
|
||||
*/
|
||||
void bezierPatchEvalNormal(bezierPatch *b, float u, float v, float ret[])
|
||||
{
|
||||
bezierSurfEvalNormal(b->umin, b->umax, b->uorder, b->vmin, b->vmax, b->vorder, b->dimension, b->ctlpoints, b->dimension * b->vorder, b->dimension, u, v, ret);
|
||||
|
||||
if( u >= b->umin && u<= b->umax
|
||||
&& v >= b->vmin && v<= b->vmax)
|
||||
{
|
||||
bezierSurfEvalNormal(b->umin, b->umax, b->uorder, b->vmin, b->vmax, b->vorder, b->dimension, b->ctlpoints, b->dimension * b->vorder, b->dimension, u, v, ret);
|
||||
}
|
||||
else if(b->next != NULL)
|
||||
bezierPatchEvalNormal(b->next, u,v, ret);
|
||||
else
|
||||
bezierSurfEvalNormal(b->umin, b->umax, b->uorder, b->vmin, b->vmax, b->vorder, b->dimension, b->ctlpoints, b->dimension * b->vorder, b->dimension, u, v, ret);
|
||||
|
||||
}
|
||||
|
||||
void bezierPatchDraw(bezierPatch *bpatch, int u_reso, int v_reso)
|
||||
{
|
||||
if(bpatch->dimension == 3)
|
||||
glMap2f(GL_MAP2_VERTEX_3, bpatch->umin, bpatch->umax, 3*bpatch->vorder, bpatch->uorder, bpatch->vmin, bpatch->vmax,3, bpatch->vorder, (GLfloat*) bpatch->ctlpoints);
|
||||
else
|
||||
glMap2f(GL_MAP2_VERTEX_4, bpatch->umin, bpatch->umax, 4*bpatch->vorder, bpatch->uorder, bpatch->vmin, bpatch->vmax,3, bpatch->vorder, (GLfloat*) bpatch->ctlpoints);
|
||||
|
||||
glMapGrid2f(u_reso, bpatch->umin, bpatch->umax,
|
||||
v_reso, bpatch->vmin, bpatch->vmax);
|
||||
glEvalMesh2(GL_LINE, 0, u_reso, 0, v_reso);
|
||||
}
|
||||
|
||||
void bezierPatchListDraw(bezierPatch *list, int u_reso, int v_reso)
|
||||
{
|
||||
bezierPatch *temp;
|
||||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_LIGHT0);
|
||||
glEnable(GL_MAP2_VERTEX_3);
|
||||
glEnable(GL_AUTO_NORMAL);
|
||||
glEnable(GL_NORMALIZE);
|
||||
glColor3f(1,0,0);
|
||||
#ifdef DEBUG
|
||||
printf("mapmap\n");
|
||||
#endif
|
||||
|
||||
|
||||
for(temp = list; temp != NULL; temp = temp->next)
|
||||
bezierPatchDraw(temp, u_reso, v_reso);
|
||||
}
|
||||
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user