Compare commits
308 Commits
vulkan-hea
...
10.6
Author | SHA1 | Date | |
---|---|---|---|
|
8957b696f9 | ||
|
ab9aacce2d | ||
|
1c261a97ec | ||
|
00aa3ee7cf | ||
|
256df77d51 | ||
|
f20d5a7bfc | ||
|
a1a567c125 | ||
|
f6c645d9d6 | ||
|
0dae12ac6e | ||
|
41b44abdcb | ||
|
1805e64739 | ||
|
5b6ac61231 | ||
|
dad649b66c | ||
|
e0a6546ddd | ||
|
34ad2da6b9 | ||
|
e158605a37 | ||
|
430c84f73c | ||
|
be6c2706c1 | ||
|
78b0f48c3b | ||
|
15020937bd | ||
|
69f2e709aa | ||
|
02387926ad | ||
|
91c6302734 | ||
|
9a4ebbe1ec | ||
|
eb06d2b649 | ||
|
0fe894db48 | ||
|
7b583e0583 | ||
|
8fd7f10ae0 | ||
|
a9df9b1854 | ||
|
a6714a9a04 | ||
|
022892323d | ||
|
34bfebda14 | ||
|
cb2209e9ef | ||
|
2ecfc4e38d | ||
|
3fa83e99de | ||
|
0869fefe1a | ||
|
cefbc3f7c1 | ||
|
3cbe492fb4 | ||
|
1f4ff00356 | ||
|
39ececa386 | ||
|
0a8c727a9d | ||
|
72785668ad | ||
|
d7cdb5be87 | ||
|
ff8f2402fd | ||
|
c5016cc9cb | ||
|
8789dd627c | ||
|
32efdc87cb | ||
|
c87643377d | ||
|
a08cb25d81 | ||
|
fc654a37ea | ||
|
4f531da24b | ||
|
e3e2a3e0e5 | ||
|
4b05739e9d | ||
|
67ba1b714a | ||
|
6811df8d35 | ||
|
cab11e0f73 | ||
|
0639ada675 | ||
|
e5861dab85 | ||
|
34d34076ff | ||
|
b0bce4c783 | ||
|
b2cdcc8b29 | ||
|
bfc5ed5322 | ||
|
3db7a7e814 | ||
|
6b968dde1e | ||
|
a85a781dad | ||
|
c759491e81 | ||
|
d93f14ec8e | ||
|
6ed069d5bc | ||
|
f0c7866eb9 | ||
|
792a07075b | ||
|
6b9ea26d7f | ||
|
90f74f1c0e | ||
|
a4aa31b224 | ||
|
65cc30d728 | ||
|
71fa292d48 | ||
|
209394406e | ||
|
3f06559076 | ||
|
6f92f4dea9 | ||
|
1a9310b8b1 | ||
|
278346a7d6 | ||
|
9a6b7e9dcd | ||
|
8427d56d96 | ||
|
e0b333a6a4 | ||
|
b6dffbe9f3 | ||
|
56c9b96376 | ||
|
b47e739f2f | ||
|
bf1c7b46e5 | ||
|
619163ca6a | ||
|
cc2226214d | ||
|
5ab8bd7d99 | ||
|
38457285b7 | ||
|
fa34225167 | ||
|
a43b3dd99b | ||
|
b9df15bef9 | ||
|
76cc235e2b | ||
|
4a2a49040e | ||
|
e9ab083702 | ||
|
e57c526b87 | ||
|
69649ea637 | ||
|
0a83119666 | ||
|
20bb0a771d | ||
|
16c65ec37f | ||
|
23bbe418fc | ||
|
f40be87996 | ||
|
e7e38e11c3 | ||
|
b7a8003c58 | ||
|
d18593b416 | ||
|
096282a662 | ||
|
c364a00cf9 | ||
|
e5a198e4dd | ||
|
0a7202385d | ||
|
d706b00522 | ||
|
d02bb82d52 | ||
|
3ebf4afbf7 | ||
|
99793e2541 | ||
|
6b2fcee64e | ||
|
95ecedf6d9 | ||
|
736f6e16d9 | ||
|
f13ba8a5ab | ||
|
791cf8a025 | ||
|
58b2e95c1f | ||
|
1f6798a70a | ||
|
84ef345dff | ||
|
7722a24cab | ||
|
880a0ce2e9 | ||
|
842a3af20b | ||
|
bc29f8f6b7 | ||
|
f2f62059dc | ||
|
2a72e18abb | ||
|
b70176d96b | ||
|
d8116f8ec5 | ||
|
8f8c842338 | ||
|
eddea78fb3 | ||
|
080c4713bc | ||
|
ba10c9ff50 | ||
|
f167d9b46c | ||
|
def2d2e018 | ||
|
831bf63e6b | ||
|
6321bf72be | ||
|
acaac69ccd | ||
|
fbc464803a | ||
|
56e4cc67fe | ||
|
a31dfd91b5 | ||
|
504903b827 | ||
|
c33ca1696a | ||
|
ccef8901de | ||
|
ddc976368f | ||
|
2eef0b7d86 | ||
|
954c18fb5c | ||
|
2a77b82a92 | ||
|
7efc693ef2 | ||
|
440f465f5f | ||
|
9656b34fae | ||
|
329763791b | ||
|
8132c7ac41 | ||
|
da8bc16739 | ||
|
6012eeca0b | ||
|
9c7f594705 | ||
|
9e62e1a1d3 | ||
|
4a3d6d04e1 | ||
|
9850b9ca73 | ||
|
89cbd91b17 | ||
|
9643cce94c | ||
|
187f919c90 | ||
|
5e92541945 | ||
|
6b6e14ac35 | ||
|
25daf2592c | ||
|
b85e389d6c | ||
|
57a6f5208d | ||
|
f3abea1577 | ||
|
6fbe4bf790 | ||
|
4c3a4ac6da | ||
|
2ca2f3701b | ||
|
fcc9f9e06e | ||
|
5de0e9f982 | ||
|
083840d365 | ||
|
afa43fa696 | ||
|
03cf14a713 | ||
|
e529d5ffb4 | ||
|
4d8c6edab4 | ||
|
8ef284366c | ||
|
0b5a9660dc | ||
|
1e8c43f4d0 | ||
|
6902a36d22 | ||
|
96bed9fea8 | ||
|
3fe9fe9cb9 | ||
|
1beb6738a7 | ||
|
f3e514a41d | ||
|
b150817c19 | ||
|
619b9e84bf | ||
|
cc7caf9239 | ||
|
a70904bc78 | ||
|
e00aab1654 | ||
|
887a18018d | ||
|
a09b91792c | ||
|
0eaf0e16dd | ||
|
542299185b | ||
|
16d35dbd56 | ||
|
e77d8eb4b6 | ||
|
1e84989ffc | ||
|
6ff3ae8deb | ||
|
a871e80fc6 | ||
|
f513cc8836 | ||
|
da588875ce | ||
|
684c81a75f | ||
|
9ffa1f7a1b | ||
|
c4dc2a5e2c | ||
|
d93677eb48 | ||
|
0db9835d3b | ||
|
ca079a77f9 | ||
|
9ba9c030ad | ||
|
c96d9c2371 | ||
|
f036512122 | ||
|
0c46196e1d | ||
|
74f2c1c282 | ||
|
8ed4c7acc2 | ||
|
fc3af254b1 | ||
|
9d2b9e7724 | ||
|
acfaacb18b | ||
|
0736a2aa79 | ||
|
1a153e1fd3 | ||
|
1f3ec92976 | ||
|
2040c18ecc | ||
|
b590ee6d45 | ||
|
5d327b3735 | ||
|
3b9cde5c81 | ||
|
9719f26cc6 | ||
|
81027ea1e2 | ||
|
a439cafc7c | ||
|
1c2a462125 | ||
|
279b1d85cc | ||
|
28b3e4f925 | ||
|
ea3d26eeb4 | ||
|
39aa6b8bea | ||
|
1a47d37c99 | ||
|
a2f216b329 | ||
|
9b8d492781 | ||
|
ef90205704 | ||
|
c6184b2b5c | ||
|
bf538839ed | ||
|
7abb5e3f13 | ||
|
2353b2197c | ||
|
10b7dba331 | ||
|
55104870a1 | ||
|
fbc04dcddb | ||
|
8631c00acb | ||
|
add82b672d | ||
|
3514680b91 | ||
|
4f68af254e | ||
|
70ac6a2655 | ||
|
9dc43dc361 | ||
|
038fc5a7f7 | ||
|
66e1ee52ad | ||
|
bc8fa4311e | ||
|
eafe639aee | ||
|
97eb22e959 | ||
|
964d358bc1 | ||
|
384ee736e7 | ||
|
3599928fc6 | ||
|
0330429005 | ||
|
828eeb65dc | ||
|
74e7328281 | ||
|
9e71637022 | ||
|
83eed1ea90 | ||
|
7ddacf6df3 | ||
|
83007290c6 | ||
|
38fb22cece | ||
|
1deda22b88 | ||
|
ef6670ca43 | ||
|
b8c030d9cf | ||
|
9c04f375db | ||
|
944bf20c17 | ||
|
b4da1d9ebd | ||
|
75691166be | ||
|
8c57dc26a7 | ||
|
230891cc9c | ||
|
ffd133bdbe | ||
|
77b116f1d3 | ||
|
1eef92e336 | ||
|
317fa3e7ef | ||
|
580351d3d3 | ||
|
534f5e8d80 | ||
|
74e2db8a92 | ||
|
c288bf3b89 | ||
|
18e05588df | ||
|
407e20d45d | ||
|
5eef18390d | ||
|
34ff020aea | ||
|
8fc109160e | ||
|
cb0c057a31 | ||
|
60294f8c39 | ||
|
6319fd51fe | ||
|
08baacb6db | ||
|
c23bbfc007 | ||
|
aa326e4e22 | ||
|
1595955974 | ||
|
a760db21ec | ||
|
2cf0e748c3 | ||
|
564c56de12 | ||
|
45986bd391 | ||
|
90644f9217 | ||
|
61c6819d1a | ||
|
bf33fc653d | ||
|
e4f74121db | ||
|
62fda88080 | ||
|
4c83138e5f | ||
|
f02f25dcf7 | ||
|
7c5cca5ee2 |
@@ -68,16 +68,7 @@ LOCAL_CFLAGS += \
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(MESA_ENABLE_LLVM),true)
|
||||
LOCAL_CFLAGS += \
|
||||
-DHAVE_LLVM=0x0305 -DLLVM_VERSION_PATCH=2 \
|
||||
-D__STDC_CONSTANT_MACROS \
|
||||
-D__STDC_FORMAT_MACROS \
|
||||
-D__STDC_LIMIT_MACROS
|
||||
endif
|
||||
|
||||
LOCAL_CPPFLAGS += \
|
||||
$(if $(filter true,$(MESA_LOLLIPOP_BUILD)),-D_USING_LIBCXX) \
|
||||
-Wno-error=non-virtual-dtor \
|
||||
-Wno-non-virtual-dtor
|
||||
|
||||
|
12
Android.mk
12
Android.mk
@@ -24,7 +24,7 @@
|
||||
# BOARD_GPU_DRIVERS should be defined. The valid values are
|
||||
#
|
||||
# classic drivers: i915 i965
|
||||
# gallium drivers: swrast freedreno i915g ilo nouveau r300g r600g radeonsi vc4 vmwgfx
|
||||
# gallium drivers: swrast freedreno i915g ilo nouveau r300g r600g radeonsi vmwgfx
|
||||
#
|
||||
# The main target is libGLES_mesa. For each classic driver enabled, a DRI
|
||||
# module will also be built. DRI modules will be loaded by libGLES_mesa.
|
||||
@@ -48,7 +48,7 @@ MESA_PYTHON2 := python
|
||||
DRM_GRALLOC_TOP := hardware/drm_gralloc
|
||||
|
||||
classic_drivers := i915 i965
|
||||
gallium_drivers := swrast freedreno i915g ilo nouveau r300g r600g radeonsi vmwgfx vc4
|
||||
gallium_drivers := swrast freedreno i915g ilo nouveau r300g r600g radeonsi vmwgfx
|
||||
|
||||
MESA_GPU_DRIVERS := $(strip $(BOARD_GPU_DRIVERS))
|
||||
|
||||
@@ -80,8 +80,6 @@ else
|
||||
MESA_BUILD_GALLIUM := false
|
||||
endif
|
||||
|
||||
MESA_ENABLE_LLVM := $(if $(filter radeonsi,$(MESA_GPU_DRIVERS)),true,false)
|
||||
|
||||
# add subdirectories
|
||||
ifneq ($(strip $(MESA_GPU_DRIVERS)),)
|
||||
|
||||
@@ -91,9 +89,13 @@ SUBDIRS := \
|
||||
src/glsl \
|
||||
src/mesa \
|
||||
src/util \
|
||||
src/egl/main \
|
||||
src/egl/main
|
||||
|
||||
ifeq ($(strip $(MESA_BUILD_CLASSIC)),true)
|
||||
SUBDIRS += \
|
||||
src/egl/drivers/dri2 \
|
||||
src/mesa/drivers/dri
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(MESA_BUILD_GALLIUM)),true)
|
||||
SUBDIRS += src/gallium
|
||||
|
@@ -13,4 +13,3 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/libGLES_mesa_int
|
||||
$(call add-clean-step, rm -rf $(HOST_OUT_release)/*/EXECUTABLES/mesa_*_intermediates)
|
||||
$(call add-clean-step, rm -rf $(HOST_OUT_release)/*/EXECUTABLES/glsl_compiler_intermediates)
|
||||
$(call add-clean-step, rm -rf $(HOST_OUT_release)/*/STATIC_LIBRARIES/libmesa_*_intermediates)
|
||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/*_dri_intermediates)
|
||||
|
8
bin/.cherry-ignore
Normal file
8
bin/.cherry-ignore
Normal file
@@ -0,0 +1,8 @@
|
||||
# The vec4 nir i965 work landed after the 10.6 branchpoint
|
||||
b8d2263c83d29f4626ac0fe0316978aa6262aefb i965/vec4_nir: Load constants as integers
|
||||
|
||||
# The issue/commit it fixes has landed post 10.6 branchpoint
|
||||
afa1efdc8522d987e3af7c7a6272021caa33eb82 mesa: fix errors when reading depth with glReadPixels
|
||||
|
||||
# The issue/commit is fixes has landed post 10.6 branchpoint
|
||||
7f8815bcb9af9b4b374ad7bd6e7cfa7529a6c980 i965: fix textureGrad for cubemaps
|
@@ -15,17 +15,14 @@
|
||||
# $ DRYRUN=yes bin/bugzilla_mesa.sh mesa-9.0.2..mesa-9.0.3 | wc -l
|
||||
|
||||
|
||||
# regex pattern: trim before url
|
||||
trim_before='s/.*\(http\)/\1/'
|
||||
# regex pattern: trim before bug number
|
||||
trim_before='s/.*show_bug.cgi?id=\([0-9]*\).*/\1/'
|
||||
|
||||
# regex pattern: trim after url
|
||||
trim_after='s/\(show_bug.cgi?id=[0-9]*\).*/\1/'
|
||||
|
||||
# regex pattern: always use https
|
||||
use_https='s/http:/https:/'
|
||||
# regex pattern: reconstruct the url
|
||||
use_after='s,^,https://bugs.freedesktop.org/show_bug.cgi?id=,'
|
||||
|
||||
# extract fdo urls from commit log
|
||||
urls=$(git log $* | grep 'bugs.freedesktop.org/show_bug' | sed -e $trim_before -e $trim_after -e $use_https | sort | uniq)
|
||||
urls=$(git log $* | grep 'bugs.freedesktop.org/show_bug' | sed -e $trim_before | sort -n -u | sed -e $use_after)
|
||||
|
||||
# if DRYRUN is set to "yes", simply print the URLs and don't fetch the
|
||||
# details from fdo bugzilla.
|
||||
|
@@ -14,7 +14,7 @@ git log --reverse --grep="cherry picked from commit" origin/master..HEAD |\
|
||||
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: .*[Cc]andidate\|CC:.*mesa-stable\)' HEAD..origin/master |\
|
||||
git log --reverse --pretty=%H -i --grep='^\([[:space:]]*NOTE: .*[Cc]andidate\|CC:.*10\.6.*mesa-stable\)' HEAD..origin/master |\
|
||||
while read sha
|
||||
do
|
||||
# Check to see whether the patch is on the ignore list.
|
||||
|
243
configure.ac
243
configure.ac
@@ -9,7 +9,6 @@ dnl Copyright © 2009-2014 Jon TURNEY
|
||||
dnl Copyright © 2011-2012 Benjamin Franzke
|
||||
dnl Copyright © 2008-2014 David Airlie
|
||||
dnl Copyright © 2009-2013 Brian Paul
|
||||
dnl Copyright © 2003-2007 Keith Packard, Daniel Stone
|
||||
dnl
|
||||
dnl Permission is hereby granted, free of charge, to any person obtaining a
|
||||
dnl copy of this software and associated documentation files (the "Software"),
|
||||
@@ -64,6 +63,8 @@ m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
||||
dnl Set internal versions
|
||||
OSMESA_VERSION=8
|
||||
AC_SUBST([OSMESA_VERSION])
|
||||
OPENCL_VERSION=1
|
||||
AC_SUBST([OPENCL_VERSION])
|
||||
|
||||
dnl Versions for external dependencies
|
||||
LIBDRM_REQUIRED=2.4.38
|
||||
@@ -714,15 +715,15 @@ AC_ARG_ENABLE([opengl],
|
||||
[enable_opengl="$enableval"],
|
||||
[enable_opengl=yes])
|
||||
AC_ARG_ENABLE([gles1],
|
||||
[AS_HELP_STRING([--disable-gles1],
|
||||
[disable support for OpenGL ES 1.x API @<:@default=enabled@:>@])],
|
||||
[AS_HELP_STRING([--enable-gles1],
|
||||
[enable support for OpenGL ES 1.x API @<:@default=disabled@:>@])],
|
||||
[enable_gles1="$enableval"],
|
||||
[enable_gles1=yes])
|
||||
[enable_gles1=no])
|
||||
AC_ARG_ENABLE([gles2],
|
||||
[AS_HELP_STRING([--disable-gles2],
|
||||
[disable support for OpenGL ES 2.x API @<:@default=enabled@:>@])],
|
||||
[AS_HELP_STRING([--enable-gles2],
|
||||
[enable support for OpenGL ES 2.x API @<:@default=disabled@:>@])],
|
||||
[enable_gles2="$enableval"],
|
||||
[enable_gles2=yes])
|
||||
[enable_gles2=no])
|
||||
|
||||
AC_ARG_ENABLE([dri],
|
||||
[AS_HELP_STRING([--enable-dri],
|
||||
@@ -910,6 +911,13 @@ fi
|
||||
AM_CONDITIONAL(HAVE_DRI_GLX, test "x$enable_glx" = xyes -a \
|
||||
"x$enable_dri" = xyes)
|
||||
|
||||
# Check for libdrm
|
||||
PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED],
|
||||
[have_libdrm=yes], [have_libdrm=no])
|
||||
if test "x$have_libdrm" = xyes; then
|
||||
DEFINES="$DEFINES -DHAVE_LIBDRM"
|
||||
fi
|
||||
|
||||
# Select which platform-dependent DRI code gets built
|
||||
case "$host_os" in
|
||||
darwin*)
|
||||
@@ -922,8 +930,8 @@ esac
|
||||
|
||||
AM_CONDITIONAL(HAVE_DRICOMMON, test "x$enable_dri" = xyes )
|
||||
AM_CONDITIONAL(HAVE_DRISW, test "x$enable_dri" = xyes )
|
||||
AM_CONDITIONAL(HAVE_DRI2, test "x$enable_dri" = xyes -a "x$dri_platform" = xdrm )
|
||||
AM_CONDITIONAL(HAVE_DRI3, test "x$enable_dri3" = xyes -a "x$dri_platform" = xdrm )
|
||||
AM_CONDITIONAL(HAVE_DRI2, test "x$enable_dri" = xyes -a "x$dri_platform" = xdrm -a "x$have_libdrm" = xyes )
|
||||
AM_CONDITIONAL(HAVE_DRI3, test "x$enable_dri3" = xyes -a "x$dri_platform" = xdrm -a "x$have_libdrm" = xyes )
|
||||
AM_CONDITIONAL(HAVE_APPLEDRI, test "x$enable_dri" = xyes -a "x$dri_platform" = xapple )
|
||||
|
||||
AC_ARG_ENABLE([shared-glapi],
|
||||
@@ -941,6 +949,12 @@ x*yes*yes*)
|
||||
;;
|
||||
esac
|
||||
|
||||
# Building Xlib-GLX requires shared glapi to be disabled.
|
||||
if test "x$enable_shared_glapi$enable_xlib_glx" = xyesyes; then
|
||||
AC_MSG_NOTICE([Shared GLAPI should not used with Xlib-GLX, disabling])
|
||||
enable_shared_glapi=no
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL(HAVE_SHARED_GLAPI, test "x$enable_shared_glapi" = xyes)
|
||||
|
||||
# Build the pipe-drivers as separate libraries/modules.
|
||||
@@ -973,151 +987,6 @@ fi
|
||||
|
||||
AC_SUBST([MESA_LLVM])
|
||||
|
||||
# SHA1 hashing
|
||||
AC_ARG_WITH([sha1],
|
||||
[AS_HELP_STRING([--with-sha1=libc|libmd|libnettle|libgcrypt|libcrypto|libsha1|CommonCrypto|CryptoAPI],
|
||||
[choose SHA1 implementation])])
|
||||
case "x$with_sha1" in
|
||||
x | xlibc | xlibmd | xlibnettle | xlibgcrypt | xlibcrypto | xlibsha1 | xCommonCrypto | xCryptoAPI)
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR([Illegal value for --with-sha1: $with_sha1])
|
||||
esac
|
||||
|
||||
AC_CHECK_FUNC([SHA1Init], [HAVE_SHA1_IN_LIBC=yes])
|
||||
if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_LIBC" = xyes; then
|
||||
with_sha1=libc
|
||||
fi
|
||||
if test "x$with_sha1" = xlibc && test "x$HAVE_SHA1_IN_LIBC" != xyes; then
|
||||
AC_MSG_ERROR([sha1 in libc requested but not found])
|
||||
fi
|
||||
if test "x$with_sha1" = xlibc; then
|
||||
AC_DEFINE([HAVE_SHA1_IN_LIBC], [1],
|
||||
[Use libc SHA1 functions])
|
||||
SHA1_LIBS=""
|
||||
fi
|
||||
AC_CHECK_FUNC([CC_SHA1_Init], [HAVE_SHA1_IN_COMMONCRYPTO=yes])
|
||||
if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_COMMONCRYPTO" = xyes; then
|
||||
with_sha1=CommonCrypto
|
||||
fi
|
||||
if test "x$with_sha1" = xCommonCrypto && test "x$HAVE_SHA1_IN_COMMONCRYPTO" != xyes; then
|
||||
AC_MSG_ERROR([CommonCrypto requested but not found])
|
||||
fi
|
||||
if test "x$with_sha1" = xCommonCrypto; then
|
||||
AC_DEFINE([HAVE_SHA1_IN_COMMONCRYPTO], [1],
|
||||
[Use CommonCrypto SHA1 functions])
|
||||
SHA1_LIBS=""
|
||||
fi
|
||||
dnl stdcall functions cannot be tested with AC_CHECK_LIB
|
||||
AC_CHECK_HEADER([wincrypt.h], [HAVE_SHA1_IN_CRYPTOAPI=yes], [], [#include <windows.h>])
|
||||
if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_CRYPTOAPI" = xyes; then
|
||||
with_sha1=CryptoAPI
|
||||
fi
|
||||
if test "x$with_sha1" = xCryptoAPI && test "x$HAVE_SHA1_IN_CRYPTOAPI" != xyes; then
|
||||
AC_MSG_ERROR([CryptoAPI requested but not found])
|
||||
fi
|
||||
if test "x$with_sha1" = xCryptoAPI; then
|
||||
AC_DEFINE([HAVE_SHA1_IN_CRYPTOAPI], [1],
|
||||
[Use CryptoAPI SHA1 functions])
|
||||
SHA1_LIBS=""
|
||||
fi
|
||||
AC_CHECK_LIB([md], [SHA1Init], [HAVE_LIBMD=yes])
|
||||
if test "x$with_sha1" = x && test "x$HAVE_LIBMD" = xyes; then
|
||||
with_sha1=libmd
|
||||
fi
|
||||
if test "x$with_sha1" = xlibmd && test "x$HAVE_LIBMD" != xyes; then
|
||||
AC_MSG_ERROR([libmd requested but not found])
|
||||
fi
|
||||
if test "x$with_sha1" = xlibmd; then
|
||||
AC_DEFINE([HAVE_SHA1_IN_LIBMD], [1],
|
||||
[Use libmd SHA1 functions])
|
||||
SHA1_LIBS=-lmd
|
||||
fi
|
||||
PKG_CHECK_MODULES([LIBSHA1], [libsha1], [HAVE_LIBSHA1=yes], [HAVE_LIBSHA1=no])
|
||||
if test "x$with_sha1" = x && test "x$HAVE_LIBSHA1" = xyes; then
|
||||
with_sha1=libsha1
|
||||
fi
|
||||
if test "x$with_sha1" = xlibsha1 && test "x$HAVE_LIBSHA1" != xyes; then
|
||||
AC_MSG_ERROR([libsha1 requested but not found])
|
||||
fi
|
||||
if test "x$with_sha1" = xlibsha1; then
|
||||
AC_DEFINE([HAVE_SHA1_IN_LIBSHA1], [1],
|
||||
[Use libsha1 for SHA1])
|
||||
SHA1_LIBS=-lsha1
|
||||
fi
|
||||
AC_CHECK_LIB([nettle], [nettle_sha1_init], [HAVE_LIBNETTLE=yes])
|
||||
if test "x$with_sha1" = x && test "x$HAVE_LIBNETTLE" = xyes; then
|
||||
with_sha1=libnettle
|
||||
fi
|
||||
if test "x$with_sha1" = xlibnettle && test "x$HAVE_LIBNETTLE" != xyes; then
|
||||
AC_MSG_ERROR([libnettle requested but not found])
|
||||
fi
|
||||
if test "x$with_sha1" = xlibnettle; then
|
||||
AC_DEFINE([HAVE_SHA1_IN_LIBNETTLE], [1],
|
||||
[Use libnettle SHA1 functions])
|
||||
SHA1_LIBS=-lnettle
|
||||
fi
|
||||
AC_CHECK_LIB([gcrypt], [gcry_md_open], [HAVE_LIBGCRYPT=yes])
|
||||
if test "x$with_sha1" = x && test "x$HAVE_LIBGCRYPT" = xyes; then
|
||||
with_sha1=libgcrypt
|
||||
fi
|
||||
if test "x$with_sha1" = xlibgcrypt && test "x$HAVE_LIBGCRYPT" != xyes; then
|
||||
AC_MSG_ERROR([libgcrypt requested but not found])
|
||||
fi
|
||||
if test "x$with_sha1" = xlibgcrypt; then
|
||||
AC_DEFINE([HAVE_SHA1_IN_LIBGCRYPT], [1],
|
||||
[Use libgcrypt SHA1 functions])
|
||||
SHA1_LIBS=-lgcrypt
|
||||
fi
|
||||
# We don't need all of the OpenSSL libraries, just libcrypto
|
||||
AC_CHECK_LIB([crypto], [SHA1_Init], [HAVE_LIBCRYPTO=yes])
|
||||
PKG_CHECK_MODULES([OPENSSL], [openssl], [HAVE_OPENSSL_PKC=yes],
|
||||
[HAVE_OPENSSL_PKC=no])
|
||||
if test "x$HAVE_LIBCRYPTO" = xyes || test "x$HAVE_OPENSSL_PKC" = xyes; then
|
||||
if test "x$with_sha1" = x; then
|
||||
with_sha1=libcrypto
|
||||
fi
|
||||
else
|
||||
if test "x$with_sha1" = xlibcrypto; then
|
||||
AC_MSG_ERROR([OpenSSL libcrypto requested but not found])
|
||||
fi
|
||||
fi
|
||||
if test "x$with_sha1" = xlibcrypto; then
|
||||
if test "x$HAVE_LIBCRYPTO" = xyes; then
|
||||
SHA1_LIBS=-lcrypto
|
||||
else
|
||||
SHA1_LIBS="$OPENSSL_LIBS"
|
||||
SHA1_CFLAGS="$OPENSSL_CFLAGS"
|
||||
fi
|
||||
fi
|
||||
AC_MSG_CHECKING([for SHA1 implementation])
|
||||
AC_MSG_RESULT([$with_sha1])
|
||||
AC_SUBST(SHA1_LIBS)
|
||||
AC_SUBST(SHA1_CFLAGS)
|
||||
|
||||
# Allow user to configure out the shader-cache feature
|
||||
AC_ARG_ENABLE([shader-cache],
|
||||
AS_HELP_STRING([--disable-shader-cache], [Disable binary shader cache]),
|
||||
[enable_shader_cache="$enableval"],
|
||||
[if test "x$with_sha1" != "x"; then
|
||||
enable_shader_cache=yes
|
||||
else
|
||||
enable_shader_cache=no
|
||||
fi])
|
||||
if test "x$with_sha1" = "x"; then
|
||||
if test "x$enable_shader_cache" = "xyes"; then
|
||||
AC_MSG_ERROR([Cannot enable shader cache (no SHA-1 implementation found)])
|
||||
fi
|
||||
fi
|
||||
AM_CONDITIONAL([ENABLE_SHADER_CACHE], [test x$enable_shader_cache = xyes])
|
||||
|
||||
# Check for libdrm
|
||||
PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED],
|
||||
[have_libdrm=yes], [have_libdrm=no])
|
||||
if test "x$have_libdrm" = xyes; then
|
||||
DEFINES="$DEFINES -DHAVE_LIBDRM"
|
||||
fi
|
||||
|
||||
case "$host_os" in
|
||||
linux*)
|
||||
need_pci_id=yes ;;
|
||||
@@ -1153,10 +1022,6 @@ AC_ARG_ENABLE([driglx-direct],
|
||||
[driglx_direct="$enableval"],
|
||||
[driglx_direct="yes"])
|
||||
|
||||
# Check for libcaca
|
||||
PKG_CHECK_EXISTS([caca], [have_libcaca=yes], [have_libcaca=no])
|
||||
AM_CONDITIONAL([HAVE_LIBCACA], [test x$have_libcaca = xyes])
|
||||
|
||||
dnl
|
||||
dnl libGL configuration per driver
|
||||
dnl
|
||||
@@ -1285,6 +1150,16 @@ AC_SUBST(GLX_TLS, ${GLX_USE_TLS})
|
||||
AS_IF([test "x$GLX_USE_TLS" = xyes -a "x$ax_pthread_ok" = xyes],
|
||||
[DEFINES="${DEFINES} -DGLX_USE_TLS"])
|
||||
|
||||
dnl Read-only text section on x86 hardened platforms
|
||||
AC_ARG_ENABLE([glx-read-only-text],
|
||||
[AS_HELP_STRING([--enable-glx-read-only-text],
|
||||
[Disable writable .text section on x86 (decreases performance) @<:@default=disabled@:>@])],
|
||||
[enable_glx_read_only_text="$enableval"],
|
||||
[enable_glx_read_only_text=no])
|
||||
if test "x$enable_glx_read_only_text" = xyes; then
|
||||
DEFINES="$DEFINES -DGLX_X86_READONLY_TEXT"
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl More DRI setup
|
||||
dnl
|
||||
@@ -1511,6 +1386,7 @@ if test "x$enable_gbm" = xyes; then
|
||||
fi
|
||||
|
||||
if test "x$enable_dri" = xyes; then
|
||||
GBM_BACKEND_DIRS="$GBM_BACKEND_DIRS dri"
|
||||
if test "x$enable_shared_glapi" = xno; then
|
||||
AC_MSG_ERROR([gbm_dri requires --enable-shared-glapi])
|
||||
fi
|
||||
@@ -1533,8 +1409,6 @@ GBM_PC_LIB_PRIV="$DLOPEN_LIBS"
|
||||
AC_SUBST([GBM_PC_REQ_PRIV])
|
||||
AC_SUBST([GBM_PC_LIB_PRIV])
|
||||
|
||||
AM_CONDITIONAL(HAVE_VULKAN, true)
|
||||
|
||||
dnl
|
||||
dnl EGL configuration
|
||||
dnl
|
||||
@@ -1651,6 +1525,10 @@ if test "x$enable_nine" = xyes; then
|
||||
if test "x$with_gallium_drivers" = xswrast; then
|
||||
AC_MSG_ERROR([nine requires at least one non-swrast gallium driver])
|
||||
fi
|
||||
if test $GCC_VERSION_MAJOR -lt 4 -o $GCC_VERSION_MAJOR -eq 4 -a $GCC_VERSION_MINOR -lt 6; then
|
||||
AC_MSG_ERROR([gcc >= 4.6 is required to build nine])
|
||||
fi
|
||||
|
||||
if test "x$enable_dri3" = xno; then
|
||||
AC_MSG_WARN([using nine together with wine requires DRI3 enabled system])
|
||||
fi
|
||||
@@ -1765,6 +1643,9 @@ egl_platforms=`IFS=', '; echo $with_egl_platforms`
|
||||
for plat in $egl_platforms; do
|
||||
case "$plat" in
|
||||
wayland)
|
||||
test "x$have_libdrm" != xyes &&
|
||||
AC_MSG_ERROR([EGL platform wayland requires libdrm >= $LIBDRM_REQUIRED])
|
||||
|
||||
PKG_CHECK_MODULES([WAYLAND], [wayland-client >= $WAYLAND_REQUIRED wayland-server >= $WAYLAND_REQUIRED])
|
||||
|
||||
if test "x$WAYLAND_SCANNER" = x; then
|
||||
@@ -1783,11 +1664,6 @@ for plat in $egl_platforms; do
|
||||
AC_MSG_ERROR([EGL platform drm requires libdrm >= $LIBDRM_REQUIRED])
|
||||
;;
|
||||
|
||||
surfaceless)
|
||||
test "x$have_libdrm" != xyes &&
|
||||
AC_MSG_ERROR([EGL platform surfaceless requires libdrm >= $LIBDRM_REQUIRED])
|
||||
;;
|
||||
|
||||
android|gdi|null)
|
||||
;;
|
||||
|
||||
@@ -1817,7 +1693,6 @@ fi
|
||||
AM_CONDITIONAL(HAVE_EGL_PLATFORM_X11, echo "$egl_platforms" | grep -q 'x11')
|
||||
AM_CONDITIONAL(HAVE_EGL_PLATFORM_WAYLAND, echo "$egl_platforms" | grep -q 'wayland')
|
||||
AM_CONDITIONAL(HAVE_EGL_PLATFORM_DRM, echo "$egl_platforms" | grep -q 'drm')
|
||||
AM_CONDITIONAL(HAVE_EGL_PLATFORM_SURFACELESS, echo "$egl_platforms" | grep -q 'surfaceless')
|
||||
AM_CONDITIONAL(HAVE_EGL_PLATFORM_NULL, echo "$egl_platforms" | grep -q 'null')
|
||||
|
||||
AM_CONDITIONAL(HAVE_EGL_DRIVER_DRI2, test "x$HAVE_EGL_DRIVER_DRI2" != "x")
|
||||
@@ -1933,7 +1808,10 @@ if test "x$enable_gallium_llvm" = xyes; then
|
||||
AC_MSG_ERROR([LLVM $LLVM_REQUIRED_VERSION_MAJOR.$LLVM_REQUIRED_VERSION_MINOR or newer is required])
|
||||
fi
|
||||
|
||||
LLVM_COMPONENTS="engine bitwriter mcjit mcdisassembler"
|
||||
LLVM_COMPONENTS="engine bitwriter"
|
||||
if $LLVM_CONFIG --components | grep -qw 'mcjit'; then
|
||||
LLVM_COMPONENTS="${LLVM_COMPONENTS} mcjit"
|
||||
fi
|
||||
|
||||
if test "x$enable_opencl" = xyes; then
|
||||
llvm_check_version_for "3" "5" "0" "opencl"
|
||||
@@ -1941,7 +1819,7 @@ if test "x$enable_gallium_llvm" = xyes; then
|
||||
LLVM_COMPONENTS="${LLVM_COMPONENTS} all-targets ipo linker instrumentation"
|
||||
LLVM_COMPONENTS="${LLVM_COMPONENTS} irreader option objcarcopts profiledata"
|
||||
fi
|
||||
DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DMESA_LLVM_VERSION_PATCH=$LLVM_VERSION_PATCH"
|
||||
DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DLLVM_VERSION_PATCH=$LLVM_VERSION_PATCH"
|
||||
MESA_LLVM=1
|
||||
|
||||
dnl Check for Clang internal headers
|
||||
@@ -2060,19 +1938,16 @@ require_egl_drm() {
|
||||
}
|
||||
|
||||
radeon_llvm_check() {
|
||||
if test ${LLVM_VERSION_INT} -lt 307; then
|
||||
amdgpu_llvm_target_name='r600'
|
||||
else
|
||||
amdgpu_llvm_target_name='amdgpu'
|
||||
fi
|
||||
if test "x$enable_gallium_llvm" != "xyes"; then
|
||||
AC_MSG_ERROR([--enable-gallium-llvm is required when building $1])
|
||||
fi
|
||||
llvm_check_version_for "3" "4" "2" $1
|
||||
if test true && $LLVM_CONFIG --targets-built | grep -iqvw $amdgpu_llvm_target_name ; then
|
||||
AC_MSG_ERROR([LLVM $amdgpu_llvm_target_name not enabled in your LLVM build.])
|
||||
if test true && $LLVM_CONFIG --targets-built | grep -qvw 'R600' ; then
|
||||
AC_MSG_ERROR([LLVM R600 Target not enabled. You can enable it when building the LLVM
|
||||
sources with the --enable-experimental-targets=R600
|
||||
configure flag])
|
||||
fi
|
||||
LLVM_COMPONENTS="${LLVM_COMPONENTS} $amdgpu_llvm_target_name bitreader ipo"
|
||||
LLVM_COMPONENTS="${LLVM_COMPONENTS} r600 bitreader ipo"
|
||||
NEED_RADEON_LLVM=yes
|
||||
if test "x$have_libelf" != xyes; then
|
||||
AC_MSG_ERROR([$1 requires libelf when using llvm])
|
||||
@@ -2324,13 +2199,6 @@ AC_SUBST([XA_MINOR], $XA_MINOR)
|
||||
AC_SUBST([XA_TINY], $XA_TINY)
|
||||
AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY")
|
||||
|
||||
PKG_CHECK_MODULES(VALGRIND, [valgrind],
|
||||
[have_valgrind=yes], [have_valgrind=no])
|
||||
if test "x$have_valgrind" = "xyes"; then
|
||||
AC_DEFINE([HAVE_VALGRIND], 1,
|
||||
[Use valgrind intrinsics to suppress false warnings])
|
||||
fi
|
||||
|
||||
dnl Restore LDFLAGS and CPPFLAGS
|
||||
LDFLAGS="$_SAVE_LDFLAGS"
|
||||
CPPFLAGS="$_SAVE_CPPFLAGS"
|
||||
@@ -2372,6 +2240,7 @@ AC_CONFIG_FILES([Makefile
|
||||
src/gallium/drivers/svga/Makefile
|
||||
src/gallium/drivers/trace/Makefile
|
||||
src/gallium/drivers/vc4/Makefile
|
||||
src/gallium/drivers/vc4/kernel/Makefile
|
||||
src/gallium/state_trackers/clover/Makefile
|
||||
src/gallium/state_trackers/dri/Makefile
|
||||
src/gallium/state_trackers/glx/xlib/Makefile
|
||||
@@ -2388,6 +2257,7 @@ AC_CONFIG_FILES([Makefile
|
||||
src/gallium/targets/libgl-xlib/Makefile
|
||||
src/gallium/targets/omx/Makefile
|
||||
src/gallium/targets/opencl/Makefile
|
||||
src/gallium/targets/opencl/mesa.icd
|
||||
src/gallium/targets/osmesa/Makefile
|
||||
src/gallium/targets/osmesa/osmesa.pc
|
||||
src/gallium/targets/pipe-loader/Makefile
|
||||
@@ -2438,7 +2308,6 @@ AC_CONFIG_FILES([Makefile
|
||||
src/mesa/drivers/osmesa/osmesa.pc
|
||||
src/mesa/drivers/x11/Makefile
|
||||
src/mesa/main/tests/Makefile
|
||||
src/vulkan/Makefile
|
||||
src/util/Makefile
|
||||
src/util/tests/hash_table/Makefile])
|
||||
|
||||
@@ -2524,12 +2393,6 @@ else
|
||||
echo " Gallium: no"
|
||||
fi
|
||||
|
||||
dnl Shader cache
|
||||
echo ""
|
||||
echo " Shader cache: $enable_shader_cache"
|
||||
if test "x$enable_shader_cache" = "xyes"; then
|
||||
echo " With SHA1 from: $with_sha1"
|
||||
fi
|
||||
|
||||
dnl Libraries
|
||||
echo ""
|
||||
|
24
docs/GL3.txt
24
docs/GL3.txt
@@ -98,13 +98,13 @@ GL 4.0, GLSL 4.00:
|
||||
GL_ARB_draw_indirect DONE (i965, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_gpu_shader5 DONE (i965, nvc0)
|
||||
- 'precise' qualifier DONE
|
||||
- Dynamically uniform sampler array indices DONE (r600, softpipe)
|
||||
- Dynamically uniform sampler array indices DONE (r600)
|
||||
- Dynamically uniform UBO array indices DONE (r600)
|
||||
- Implicit signed -> unsigned conversions DONE
|
||||
- Fused multiply-add DONE ()
|
||||
- Packing/bitfield/conversion functions DONE (r600, radeonsi, softpipe)
|
||||
- Enhanced textureGather DONE (r600, radeonsi, softpipe)
|
||||
- Geometry shader instancing DONE (r600, llvmpipe, softpipe)
|
||||
- Packing/bitfield/conversion functions DONE (r600, radeonsi)
|
||||
- Enhanced textureGather DONE (r600, radeonsi)
|
||||
- Geometry shader instancing DONE (r600)
|
||||
- Geometry shader multiple streams DONE ()
|
||||
- Enhanced per-sample shading DONE (r600, radeonsi)
|
||||
- Interpolation functions DONE (r600)
|
||||
@@ -115,7 +115,7 @@ GL 4.0, GLSL 4.00:
|
||||
GL_ARB_tessellation_shader started (Chris, Ilia)
|
||||
GL_ARB_texture_buffer_object_rgb32 DONE (i965, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_texture_cube_map_array DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_texture_gather DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_texture_gather DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe)
|
||||
GL_ARB_texture_query_lod DONE (i965, nv50, nvc0, r600, radeonsi)
|
||||
GL_ARB_transform_feedback2 DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_transform_feedback3 DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
@@ -153,18 +153,18 @@ GL 4.3, GLSL 4.30:
|
||||
GL_ARB_ES3_compatibility DONE (all drivers that support GLSL 3.30)
|
||||
GL_ARB_clear_buffer_object DONE (all drivers)
|
||||
GL_ARB_compute_shader in progress (jljusten)
|
||||
GL_ARB_copy_image DONE (i965) (gallium - in progress, VMware)
|
||||
GL_ARB_copy_image DONE (i965)
|
||||
GL_KHR_debug DONE (all drivers)
|
||||
GL_ARB_explicit_uniform_location DONE (all drivers that support GLSL)
|
||||
GL_ARB_fragment_layer_viewport DONE (nv50, nvc0, r600, llvmpipe)
|
||||
GL_ARB_framebuffer_no_attachments DONE (i965)
|
||||
GL_ARB_framebuffer_no_attachments not started
|
||||
GL_ARB_internalformat_query2 not started
|
||||
GL_ARB_invalidate_subdata DONE (all drivers)
|
||||
GL_ARB_multi_draw_indirect DONE (i965, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_program_interface_query DONE (all drivers)
|
||||
GL_ARB_robust_buffer_access_behavior not started
|
||||
GL_ARB_shader_image_size in progress (Martin Peres)
|
||||
GL_ARB_shader_storage_buffer_object in progress (Iago Toral, Samuel Iglesias)
|
||||
GL_ARB_shader_storage_buffer_object not started
|
||||
GL_ARB_stencil_texturing DONE (i965/gen8+, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_texture_buffer_range DONE (nv50, nvc0, i965, r600, radeonsi, llvmpipe)
|
||||
GL_ARB_texture_query_levels DONE (all drivers that support GLSL 1.30)
|
||||
@@ -177,7 +177,7 @@ GL 4.4, GLSL 4.40:
|
||||
|
||||
GL_MAX_VERTEX_ATTRIB_STRIDE DONE (all drivers)
|
||||
GL_ARB_buffer_storage DONE (i965, nv50, nvc0, r600, radeonsi)
|
||||
GL_ARB_clear_texture DONE (i965) (gallium - in progress, VMware)
|
||||
GL_ARB_clear_texture DONE (i965)
|
||||
GL_ARB_enhanced_layouts not started
|
||||
GL_ARB_multi_bind DONE (all drivers)
|
||||
GL_ARB_query_buffer_object not started
|
||||
@@ -190,7 +190,7 @@ GL 4.5, GLSL 4.50:
|
||||
GL_ARB_ES3_1_compatibility not started
|
||||
GL_ARB_clip_control DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_conditional_render_inverted DONE (i965, nv50, nvc0, llvmpipe, softpipe)
|
||||
GL_ARB_cull_distance in progress (Tobias)
|
||||
GL_ARB_cull_distance not started
|
||||
GL_ARB_derivative_control DONE (i965, nv50, nvc0, r600)
|
||||
GL_ARB_direct_state_access DONE (all drivers)
|
||||
- Transform Feedback object DONE
|
||||
@@ -216,12 +216,12 @@ GLES3.1, GLSL ES 3.1
|
||||
GL_ARB_compute_shader in progress (jljusten)
|
||||
GL_ARB_draw_indirect DONE (i965, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
GL_ARB_explicit_uniform_location DONE (all drivers that support GLSL)
|
||||
GL_ARB_framebuffer_no_attachments DONE (i965)
|
||||
GL_ARB_framebuffer_no_attachments not started
|
||||
GL_ARB_program_interface_query DONE (all drivers)
|
||||
GL_ARB_shader_atomic_counters DONE (i965)
|
||||
GL_ARB_shader_image_load_store in progress (curro)
|
||||
GL_ARB_shader_image_size in progress (Martin Peres)
|
||||
GL_ARB_shader_storage_buffer_object in progress (Iago Toral, Samuel Iglesias)
|
||||
GL_ARB_shader_storage_buffer_object not started
|
||||
GL_ARB_shading_language_packing DONE (all drivers)
|
||||
GL_ARB_separate_shader_objects DONE (all drivers)
|
||||
GL_ARB_stencil_texturing DONE (i965/gen8+, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
|
||||
|
@@ -17,240 +17,158 @@
|
||||
<h1>Development Notes</h1>
|
||||
|
||||
|
||||
<h2>Adding Extensions</h2>
|
||||
|
||||
<p>
|
||||
To add a new GL extension to Mesa you have to do at least the following.
|
||||
|
||||
<ul>
|
||||
<li><a href="#style">Coding Style</a>
|
||||
<li><a href="#submitting">Submitting Patches</a>
|
||||
<li><a href="#release">Making a New Mesa Release</a>
|
||||
<li><a href="#extensions">Adding Extensions</a>
|
||||
<li>
|
||||
If glext.h doesn't define the extension, edit include/GL/gl.h and add
|
||||
code like this:
|
||||
<pre>
|
||||
#ifndef GL_EXT_the_extension_name
|
||||
#define GL_EXT_the_extension_name 1
|
||||
/* declare the new enum tokens */
|
||||
/* prototype the new functions */
|
||||
/* TYPEDEFS for the new functions */
|
||||
#endif
|
||||
</pre>
|
||||
</li>
|
||||
<li>
|
||||
In the src/mapi/glapi/gen/ directory, add the new extension functions and
|
||||
enums to the gl_API.xml file.
|
||||
Then, a bunch of source files must be regenerated by executing the
|
||||
corresponding Python scripts.
|
||||
</li>
|
||||
<li>
|
||||
Add a new entry to the <code>gl_extensions</code> struct in mtypes.h
|
||||
</li>
|
||||
<li>
|
||||
Update the <code>extensions.c</code> file.
|
||||
</li>
|
||||
<li>
|
||||
From this point, the best way to proceed is to find another extension,
|
||||
similar to the new one, that's already implemented in Mesa and use it
|
||||
as an example.
|
||||
</li>
|
||||
<li>
|
||||
If the new extension adds new GL state, the functions in get.c, enable.c
|
||||
and attrib.c will most likely require new code.
|
||||
</li>
|
||||
<li>
|
||||
The dispatch tests check_table.cpp and dispatch_sanity.cpp
|
||||
should be updated with details about the new extensions functions. These
|
||||
tests are run using 'make check'
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2 id="style">Coding Style</h2>
|
||||
|
||||
<h2>Coding Style</h2>
|
||||
|
||||
<p>
|
||||
Mesa is over 20 years old and the coding style has evolved over time.
|
||||
Some old parts use a style that's a bit out of date.
|
||||
If the guidelines below don't cover something, try following the format of
|
||||
existing, neighboring code.
|
||||
Mesa's code style has changed over the years. Here's the latest.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Basic formatting guidelines
|
||||
Comment your code! It's extremely important that open-source code be
|
||||
well documented. Also, strive to write clean, easily understandable code.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>3-space indentation, no tabs.
|
||||
<li>Limit lines to 78 or fewer characters. The idea is to prevent line
|
||||
wrapping in 80-column editors and terminals. There are exceptions, such
|
||||
as if you're defining a large, static table of information.
|
||||
<li>Opening braces go on the same line as the if/for/while statement.
|
||||
For example:
|
||||
<p>
|
||||
3-space indentation
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you use tabs, set them to 8 columns
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Line width: the preferred width to fill comments and code in Mesa is 78
|
||||
columns. Exceptions are sometimes made for clarity (e.g. tabular data is
|
||||
sometimes filled to a much larger width so that extraneous carriage returns
|
||||
don't obscure the table).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Brace example:
|
||||
</p>
|
||||
<pre>
|
||||
if (condition) {
|
||||
foo;
|
||||
} else {
|
||||
bar;
|
||||
}
|
||||
if (condition) {
|
||||
foo;
|
||||
}
|
||||
else {
|
||||
bar;
|
||||
}
|
||||
|
||||
switch (condition) {
|
||||
case 0:
|
||||
foo();
|
||||
break;
|
||||
|
||||
case 1: {
|
||||
...
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
...
|
||||
break;
|
||||
}
|
||||
</pre>
|
||||
|
||||
<li>Put a space before/after operators. For example, <tt>a = b + c;</tt>
|
||||
and not <tt>a=b+c;</tt>
|
||||
|
||||
<li>This GNU indent command generally does the right thing for formatting:
|
||||
<p>
|
||||
Here's the GNU indent command which will best approximate my preferred style:
|
||||
(Note that it won't format switch statements in the preferred way)
|
||||
</p>
|
||||
<pre>
|
||||
indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
|
||||
indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
|
||||
</pre>
|
||||
|
||||
<li>Use comments wherever you think it would be helpful for other developers.
|
||||
Several specific cases and style examples follow. Note that we roughly
|
||||
follow <a href="http://www.stack.nl/~dimitri/doxygen/">Doxygen</a> conventions.
|
||||
<br>
|
||||
<br>
|
||||
Single-line comments:
|
||||
|
||||
<p>
|
||||
Local variable name example: localVarName (no underscores)
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Constants and macros are ALL_UPPERCASE, with _ between words
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Global variables are not allowed.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Function name examples:
|
||||
</p>
|
||||
<pre>
|
||||
/* null-out pointer to prevent dangling reference below */
|
||||
bufferObj = NULL;
|
||||
</pre>
|
||||
Or,
|
||||
<pre>
|
||||
bufferObj = NULL; /* prevent dangling reference below */
|
||||
</pre>
|
||||
Multi-line comment:
|
||||
<pre>
|
||||
/* If this is a new buffer object id, or one which was generated but
|
||||
* never used before, allocate a buffer object now.
|
||||
*/
|
||||
</pre>
|
||||
We try to quote the OpenGL specification where prudent:
|
||||
<pre>
|
||||
/* Page 38 of the PDF of the OpenGL ES 3.0 spec says:
|
||||
*
|
||||
* "An INVALID_OPERATION error is generated for any of the following
|
||||
* conditions:
|
||||
*
|
||||
* * <length> is zero."
|
||||
*
|
||||
* Additionally, page 94 of the PDF of the OpenGL 4.5 core spec
|
||||
* (30.10.2014) also says this, so it's no longer allowed for desktop GL,
|
||||
* either.
|
||||
*/
|
||||
</pre>
|
||||
Function comment example:
|
||||
<pre>
|
||||
/**
|
||||
* Create and initialize a new buffer object. Called via the
|
||||
* ctx->Driver.CreateObject() driver callback function.
|
||||
* \param name integer name of the object
|
||||
* \param type one of GL_FOO, GL_BAR, etc.
|
||||
* \return pointer to new object or NULL if error
|
||||
*/
|
||||
struct gl_object *
|
||||
_mesa_create_object(GLuint name, GLenum type)
|
||||
{
|
||||
/* function body */
|
||||
}
|
||||
glFooBar() - a public GL entry point (in glapi_dispatch.c)
|
||||
_mesa_FooBar() - the internal immediate mode function
|
||||
save_FooBar() - retained mode (display list) function in dlist.c
|
||||
foo_bar() - a static (private) function
|
||||
_mesa_foo_bar() - an internal non-static Mesa function
|
||||
</pre>
|
||||
|
||||
<li>Put the function return type and qualifiers on one line and the function
|
||||
name and parameters on the next, as seen above. This makes it easy to use
|
||||
<code>grep ^function_name dir/*</code> to find function definitions. Also,
|
||||
the opening brace goes on the next line by itself (see above.)
|
||||
|
||||
<li>Function names follow various conventions depending on the type of function:
|
||||
<pre>
|
||||
glFooBar() - a public GL entry point (in glapi_dispatch.c)
|
||||
_mesa_FooBar() - the internal immediate mode function
|
||||
save_FooBar() - retained mode (display list) function in dlist.c
|
||||
foo_bar() - a static (private) function
|
||||
_mesa_foo_bar() - an internal non-static Mesa function
|
||||
</pre>
|
||||
|
||||
<li>Constants, macros and enumerant names are ALL_UPPERCASE, with _ between
|
||||
words.
|
||||
<li>Mesa usually uses camel case for local variables (Ex: "localVarname")
|
||||
while gallium typically uses underscores (Ex: "local_var_name").
|
||||
<li>Global variables are almost never used because Mesa should be thread-safe.
|
||||
|
||||
<li>Booleans. Places that are not directly visible to the GL API
|
||||
should prefer the use of <tt>bool</tt>, <tt>true</tt>, and
|
||||
<p>
|
||||
Places that are not directly visible to the GL API should prefer the use
|
||||
of <tt>bool</tt>, <tt>true</tt>, and
|
||||
<tt>false</tt> over <tt>GLboolean</tt>, <tt>GL_TRUE</tt>, and
|
||||
<tt>GL_FALSE</tt>. In C code, this may mean that
|
||||
<tt>#include <stdbool.h></tt> needs to be added. The
|
||||
<tt>try_emit_</tt>* methods in src/mesa/program/ir_to_mesa.cpp and
|
||||
src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples.
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2 id="submitting">Submitting patches</h2>
|
||||
|
||||
<p>
|
||||
The basic guidelines for submitting patches are:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Patches should be sufficiently tested before submitting.
|
||||
<li>Code patches should follow Mesa coding conventions.
|
||||
<li>Whenever possible, patches should only effect individual Mesa/Gallium
|
||||
components.
|
||||
<li>Patches should never introduce build breaks and should be bisectable (see
|
||||
<code>git bisect</code>.)
|
||||
<li>Patches should be properly formatted (see below).
|
||||
<li>Patches should be submitted to mesa-dev for review using
|
||||
<code>git send-email</code>.
|
||||
<li>Patches should not mix code changes with code formatting changes (except,
|
||||
perhaps, in very trivial cases.)
|
||||
</ul>
|
||||
|
||||
<h3>Patch formatting</h3>
|
||||
<h2>Submitting patches</h2>
|
||||
|
||||
<p>
|
||||
The basic rules for patch formatting are:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Lines should be limited to 75 characters or less so that git logs
|
||||
displayed in 80-column terminals avoid line wrapping. Note that git
|
||||
log uses 4 spaces of indentation (4 + 75 < 80).
|
||||
<li>The first line should be a short, concise summary of the change prefixed
|
||||
with a module name. Examples:
|
||||
<pre>
|
||||
mesa: Add support for querying GL_VERTEX_ATTRIB_ARRAY_LONG
|
||||
|
||||
gallium: add PIPE_CAP_DEVICE_RESET_STATUS_QUERY
|
||||
|
||||
i965: Fix missing type in local variable declaration.
|
||||
</pre>
|
||||
<li>Subsequent patch comments should describe the change in more detail,
|
||||
if needed. For example:
|
||||
<pre>
|
||||
i965: Remove end-of-thread SEND alignment code.
|
||||
|
||||
This was present in Eric's initial implementation of the compaction code
|
||||
for Sandybridge (commit 077d01b6). There is no documentation saying this
|
||||
is necessary, and removing it causes no regressions in piglit on any
|
||||
platform.
|
||||
</pre>
|
||||
<li>A "Signed-off-by:" line is not required, but not discouraged either.
|
||||
<li>If a patch address a bugzilla issue, that should be noted in the
|
||||
patch comment. For example:
|
||||
<pre>
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89689
|
||||
</pre>
|
||||
<li>If there have been several revisions to a patch during the review
|
||||
process, they should be noted such as in this example:
|
||||
<pre>
|
||||
st/mesa: add ARB_texture_stencil8 support (v4)
|
||||
|
||||
if we support stencil texturing, enable texture_stencil8
|
||||
there is no requirement to support native S8 for this,
|
||||
the texture can be converted to x24s8 fine.
|
||||
|
||||
v2: fold fixes from Marek in:
|
||||
a) put S8 last in the list
|
||||
b) fix renderable to always test for d/s renderable
|
||||
fixup the texture case to use a stencil only format
|
||||
for picking the format for the texture view.
|
||||
v3: hit fallback for getteximage
|
||||
v4: put s8 back in front, it shouldn't get picked now (Ilia)
|
||||
</pre>
|
||||
<li>If someone tested your patch, document it with a line like this:
|
||||
<pre>
|
||||
Tested-by: Joe Hacker <jhacker@foo.com>
|
||||
</pre>
|
||||
<li>If the patch was reviewed (usually the case) or acked by someone,
|
||||
that should be documented with:
|
||||
<pre>
|
||||
Reviewed-by: Joe Hacker <jhacker@foo.com>
|
||||
Acked-by: Joe Hacker <jhacker@foo.com>
|
||||
</pre>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<h3>Testing Patches</h3>
|
||||
|
||||
<p>
|
||||
It should go without saying that patches must be tested. In general,
|
||||
do whatever testing is prudent.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
You should always run the Mesa test suite before submitting patches.
|
||||
The test suite can be run using the 'make check' command. All tests
|
||||
You should always run the Mesa Testsuite before submitting patches.
|
||||
The Testsuite can be run using the 'make check' command. All tests
|
||||
must pass before patches will be accepted, this may mean you have
|
||||
to update the tests themselves.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Whenever possible and applicable, test the patch with
|
||||
<a href="http://piglit.freedesktop.org">Piglit</a> to
|
||||
check for regressions.
|
||||
</p>
|
||||
|
||||
|
||||
<h3>Mailing Patches</h3>
|
||||
|
||||
<p>
|
||||
Patches should be sent to the Mesa mailing list for review.
|
||||
When submitting a patch make sure to use git send-email rather than attaching
|
||||
@@ -266,38 +184,7 @@ re-sending the whole series). Using --in-reply-to makes
|
||||
it harder for reviewers to accidentally review old patches.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
When submitting follow-up patches you should also login to
|
||||
<a href="https://patchwork.freedesktop.org">patchwork</a> and change the
|
||||
state of your old patches to Superseded.
|
||||
</p>
|
||||
|
||||
<h3>Reviewing Patches</h3>
|
||||
|
||||
<p>
|
||||
When you've reviewed a patch on the mailing list, please be unambiguous
|
||||
about your review. That is, state either
|
||||
<pre>
|
||||
Reviewed-by: Joe Hacker <jhacker@foo.com>
|
||||
</pre>
|
||||
or
|
||||
<pre>
|
||||
Acked-by: Joe Hacker <jhacker@foo.com>
|
||||
</pre>
|
||||
Rather than saying just "LGTM" or "Seems OK".
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If small changes are suggested, it's OK to say something like:
|
||||
<pre>
|
||||
With the above fixes, Reviewed-by: Joe Hacker <jhacker@foo.com>
|
||||
</pre>
|
||||
which tells the patch author that the patch can be committed, as long
|
||||
as the issues are resolved first.
|
||||
</p>
|
||||
|
||||
|
||||
<h3>Marking a commit as a candidate for a stable branch</h3>
|
||||
<h2>Marking a commit as a candidate for a stable branch</h2>
|
||||
|
||||
<p>
|
||||
If you want a commit to be applied to a stable branch,
|
||||
@@ -334,7 +221,7 @@ the upcoming stable release can always be seen on the
|
||||
<a href="http://cworth.org/~cworth/mesa-stable-queue/">Mesa Stable Queue</a>
|
||||
page.
|
||||
|
||||
<h3>Criteria for accepting patches to the stable branch</h3>
|
||||
<h2>Criteria for accepting patches to the stable branch</h2>
|
||||
|
||||
Mesa has a designated release manager for each stable branch, and the release
|
||||
manager is the only developer that should be pushing changes to these
|
||||
@@ -419,8 +306,7 @@ be rejected:
|
||||
regression that is unaacceptable for the stable branch.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2 id="release">Making a New Mesa Release</h2>
|
||||
<h2>Making a New Mesa Release</h2>
|
||||
|
||||
<p>
|
||||
These are the instructions for making a new Mesa release.
|
||||
@@ -570,7 +456,7 @@ Edit docs/relnotes/X.Y.Z.html to add the sha256sums printed as part of "make
|
||||
tarballs" in the previous step. Commit this change.
|
||||
</p>
|
||||
|
||||
<h3>Push all commits and the tag created above</h3>
|
||||
<h3>Push all commits and the tag creates above</h3>
|
||||
|
||||
<p>
|
||||
This is the first step that cannot easily be undone. The release is going
|
||||
@@ -597,7 +483,7 @@ signatures to the freedesktop.org server:
|
||||
mv ~/MesaLib-X.Y.Z* .
|
||||
</pre>
|
||||
|
||||
<h3>Back on mesa master, add the new release notes into the tree</h3>
|
||||
<h3>Back on mesa master, andd the new release notes into the tree</h3>
|
||||
|
||||
<p>
|
||||
Something like the following steps will do the trick:
|
||||
@@ -657,56 +543,6 @@ release announcement:
|
||||
</pre>
|
||||
</p>
|
||||
|
||||
|
||||
<h2 id="extensions">Adding Extensions</h2>
|
||||
|
||||
<p>
|
||||
To add a new GL extension to Mesa you have to do at least the following.
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
If glext.h doesn't define the extension, edit include/GL/gl.h and add
|
||||
code like this:
|
||||
<pre>
|
||||
#ifndef GL_EXT_the_extension_name
|
||||
#define GL_EXT_the_extension_name 1
|
||||
/* declare the new enum tokens */
|
||||
/* prototype the new functions */
|
||||
/* TYPEDEFS for the new functions */
|
||||
#endif
|
||||
</pre>
|
||||
</li>
|
||||
<li>
|
||||
In the src/mapi/glapi/gen/ directory, add the new extension functions and
|
||||
enums to the gl_API.xml file.
|
||||
Then, a bunch of source files must be regenerated by executing the
|
||||
corresponding Python scripts.
|
||||
</li>
|
||||
<li>
|
||||
Add a new entry to the <code>gl_extensions</code> struct in mtypes.h
|
||||
</li>
|
||||
<li>
|
||||
Update the <code>extensions.c</code> file.
|
||||
</li>
|
||||
<li>
|
||||
From this point, the best way to proceed is to find another extension,
|
||||
similar to the new one, that's already implemented in Mesa and use it
|
||||
as an example.
|
||||
</li>
|
||||
<li>
|
||||
If the new extension adds new GL state, the functions in get.c, enable.c
|
||||
and attrib.c will most likely require new code.
|
||||
</li>
|
||||
<li>
|
||||
The dispatch tests check_table.cpp and dispatch_sanity.cpp
|
||||
should be updated with details about the new extensions functions. These
|
||||
tests are run using 'make check'
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -16,31 +16,6 @@
|
||||
|
||||
<h1>News</h1>
|
||||
|
||||
<h2>June 20, 2015</h2>
|
||||
<p>
|
||||
<a href="relnotes/10.5.8.html">Mesa 10.5.8</a> is released.
|
||||
This is a bug-fix release.
|
||||
</p>
|
||||
|
||||
<h2>June 14, 2015</h2>
|
||||
<p>
|
||||
<a href="relnotes/10.6.0.html">Mesa 10.6.0</a> is released. This is a new
|
||||
development release. See the release notes for more information about
|
||||
the release.
|
||||
</p>
|
||||
|
||||
<h2>June 07, 2015</h2>
|
||||
<p>
|
||||
<a href="relnotes/10.5.7.html">Mesa 10.5.7</a> is released.
|
||||
This is a bug-fix release.
|
||||
</p>
|
||||
|
||||
<h2>May 23, 2015</h2>
|
||||
<p>
|
||||
<a href="relnotes/10.5.6.html">Mesa 10.5.6</a> is released.
|
||||
This is a bug-fix release.
|
||||
</p>
|
||||
|
||||
<h2>May 11, 2015</h2>
|
||||
<p>
|
||||
<a href="relnotes/10.5.5.html">Mesa 10.5.5</a> is released.
|
||||
|
@@ -21,10 +21,6 @@ The release notes summarize what's new or changed in each Mesa release.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="relnotes/10.5.8.html">10.5.8 release notes</a>
|
||||
<li><a href="relnotes/10.6.0.html">10.6.0 release notes</a>
|
||||
<li><a href="relnotes/10.5.7.html">10.5.7 release notes</a>
|
||||
<li><a href="relnotes/10.5.6.html">10.5.6 release notes</a>
|
||||
<li><a href="relnotes/10.5.5.html">10.5.5 release notes</a>
|
||||
<li><a href="relnotes/10.5.4.html">10.5.4 release notes</a>
|
||||
<li><a href="relnotes/10.5.3.html">10.5.3 release notes</a>
|
||||
|
@@ -1,147 +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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.5.6 Release Notes / May 23, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.5.6 is a bug fix release which fixes bugs found since the 10.5.5 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.5.6 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
89ff9cb08d0f6e3f34154864c3071253057cd21020759457c8ae27e0f70985d3 mesa-10.5.6.tar.gz
|
||||
66017853bde5f7a6647db3eede30512a091a3491daa1708e0ad8027c328ba595 mesa-10.5.6.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86792">Bug 86792</a> - [NVC0] Portal 2 Crashes in Wine</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90147">Bug 90147</a> - swrast: build error undeclared _SC_PHYS_PAGES on osx</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90350">Bug 90350</a> - [G96] Portal's portal are incorrectly rendered</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90363">Bug 90363</a> - [nv50] HW state is not reset correctly when using a new GL context</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Alex Deucher (1):</p>
|
||||
<ul>
|
||||
<li>radeonsi: add new bonaire pci id</li>
|
||||
</ul>
|
||||
|
||||
<p>Axel Davy (2):</p>
|
||||
<ul>
|
||||
<li>egl/wayland: properly destroy wayland objects</li>
|
||||
<li>glx/dri3: Add additional check for gpu offloading case</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (4):</p>
|
||||
<ul>
|
||||
<li>docs: Add sha256 sums for the 10.5.5 release</li>
|
||||
<li>egl/main: fix EGL_KHR_get_all_proc_addresses</li>
|
||||
<li>targets/osmesa: drop the -module tag from LDFLAGS</li>
|
||||
<li>Update version to 10.5.6</li>
|
||||
</ul>
|
||||
|
||||
<p>Francisco Jerez (4):</p>
|
||||
<ul>
|
||||
<li>clover: Refactor event::trigger and ::abort to prevent deadlock and reentrancy issues.</li>
|
||||
<li>clover: Wrap event::_status in a method to prevent unlocked access.</li>
|
||||
<li>clover: Implement locking of the wait_count, _chain and _status members of event.</li>
|
||||
<li>i965: Fix PBO cache coherency issue after _mesa_meta_pbo_GetTexSubImage().</li>
|
||||
</ul>
|
||||
|
||||
<p>Fredrik Höglund (2):</p>
|
||||
<ul>
|
||||
<li>main: Require that the texture exists in framebuffer_texture</li>
|
||||
<li>mesa: Generate GL_INVALID_VALUE in framebuffer_texture when layer < 0</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (7):</p>
|
||||
<ul>
|
||||
<li>nv50/ir: only propagate saturate up if some actual folding took place</li>
|
||||
<li>nv50: keep track of PGRAPH state in nv50_screen</li>
|
||||
<li>nvc0: keep track of PGRAPH state in nvc0_screen</li>
|
||||
<li>nvc0: reset the instanced elements state when doing blit using 3d engine</li>
|
||||
<li>nv50/ir: only enable mul saturate on G200+</li>
|
||||
<li>st/mesa: make sure to create a "clean" bool when doing i2b</li>
|
||||
<li>nvc0: switch mechanism for shader eviction to be a while loop</li>
|
||||
</ul>
|
||||
|
||||
<p>Jeremy Huddleston Sequoia (2):</p>
|
||||
<ul>
|
||||
<li>swrast: Build fix for darwin</li>
|
||||
<li>darwin: Fix install name of libOSMesa</li>
|
||||
</ul>
|
||||
|
||||
<p>Laura Ekstrand (2):</p>
|
||||
<ul>
|
||||
<li>main: Fix an error generated by FramebufferTexture</li>
|
||||
<li>main: Complete error conditions for glInvalidate*Framebuffer.</li>
|
||||
</ul>
|
||||
|
||||
<p>Marta Lofstedt (1):</p>
|
||||
<ul>
|
||||
<li>main: glGetIntegeri_v fails for GL_VERTEX_BINDING_STRIDE</li>
|
||||
</ul>
|
||||
|
||||
<p>Rob Clark (2):</p>
|
||||
<ul>
|
||||
<li>freedreno: enable a306</li>
|
||||
<li>freedreno: fix bug in tile/slot calculation</li>
|
||||
</ul>
|
||||
|
||||
<p>Roland Scheidegger (1):</p>
|
||||
<ul>
|
||||
<li>draw: (trivial) fix out-of-bounds vector initialization</li>
|
||||
</ul>
|
||||
|
||||
<p>Tim Rowley (1):</p>
|
||||
<ul>
|
||||
<li>mesa: fix shininess check for ffvertex_prog v2</li>
|
||||
</ul>
|
||||
|
||||
<p>Tom Stellard (2):</p>
|
||||
<ul>
|
||||
<li>clover: Add a mutex to guard queue::queued_events</li>
|
||||
<li>clover: Fix a bug with multi-threaded events v2</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@@ -1,103 +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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.5.7 Release Notes / June 07, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.5.7 is a bug fix release which fixes bugs found since the 10.5.6 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.5.7 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
8f865ce497435fdf25d4e35f3b5551b2bcd5f9bc6570561183be82af20d18b82 mesa-10.5.7.tar.gz
|
||||
04d06890cd69af8089d6ca76f40e46dcf9cacfe4a9788b32be620574d4638818 mesa-10.5.7.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89131">Bug 89131</a> - [Bisected] Graphical corruption in Weston, shows old framebuffer pieces</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Ben Widawsky (1):</p>
|
||||
<ul>
|
||||
<li>i965: Emit 3DSTATE_MULTISAMPLE before WM_HZ_OP (gen8+)</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (4):</p>
|
||||
<ul>
|
||||
<li>docs: Add sha256sums for the 10.5.6 release</li>
|
||||
<li>get-pick-list.sh: Require explicit "10.5" for nominating stable patches</li>
|
||||
<li>cherry-ignore: add clover build fix not applicable for 10.5</li>
|
||||
<li>Update version to 10.5.7</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (18):</p>
|
||||
<ul>
|
||||
<li>nvc0/ir: set ftz when sources are floats, not just destinations</li>
|
||||
<li>nv50/ir: guess that the constant offset is the starting slot of array</li>
|
||||
<li>nvc0/ir: LOAD's can't be used for shader inputs</li>
|
||||
<li>nvc0: a geometry shader can have up to 1024 vertices output</li>
|
||||
<li>nv50/ir: avoid messing up arg1 of PFETCH</li>
|
||||
<li>nv30: don't leak fragprog consts</li>
|
||||
<li>nv30: avoid leaking render state and draw shaders</li>
|
||||
<li>nv30: fix clip plane uploads and enable changes</li>
|
||||
<li>nv30/draw: avoid leaving stale pointers in draw state</li>
|
||||
<li>nv30/draw: draw expects constbuf size in bytes, not vec4 units</li>
|
||||
<li>st/mesa: don't leak glsl_to_tgsi object on link failure</li>
|
||||
<li>glsl: avoid leaking linked gl_shader when there's a late linker error</li>
|
||||
<li>nv30/draw: fix indexed draws with swtnl path and a resource index buffer</li>
|
||||
<li>nv30/draw: only use the DMA1 object (GART) if the bo is not in VRAM</li>
|
||||
<li>nv30/draw: allocate vertex buffers in gart</li>
|
||||
<li>nv30/draw: switch varying hookup logic to know about texcoords</li>
|
||||
<li>nv30: falling back to draw path for edgeflag does no good</li>
|
||||
<li>nv30: avoid doing extra work on clear and hitting unexpected states</li>
|
||||
</ul>
|
||||
|
||||
<p>Jason Ekstrand (1):</p>
|
||||
<ul>
|
||||
<li>i965/fs: Fix implied_mrf_writes for scratch writes</li>
|
||||
</ul>
|
||||
|
||||
<p>Marek Olšák (1):</p>
|
||||
<ul>
|
||||
<li>st/dri: fix postprocessing crash when there's no depth buffer</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@@ -1,112 +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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.5.8 Release Notes / June 20, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.5.8 is a bug fix release which fixes bugs found since the 10.5.7 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.5.8 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
611ddcfa3c1bf13f7e6ccac785c8749c3b74c9a78452bac70f8372cf6b209aa0 mesa-10.5.8.tar.gz
|
||||
2866b855c5299a4aed066338c77ff6467c389b2c30ada7647be8758663da2b54 mesa-10.5.8.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90310">Bug 90310</a> - Fails to build gallium_dri.so at linking stage with clang because of multiple redefinitions</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90347">Bug 90347</a> - [NVE0+] Failure to insert texbar under some circumstances (causing bad colors in Terasology)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90520">Bug 90520</a> - Register spilling clobbers registers used elsewhere in the shader</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90905">Bug 90905</a> - mesa: Finish subdir-objects transition</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Ben Widawsky (1):</p>
|
||||
<ul>
|
||||
<li>i965: Disable compaction for EOT send messages</li>
|
||||
</ul>
|
||||
|
||||
<p>Boyan Ding (1):</p>
|
||||
<ul>
|
||||
<li>egl/x11: Set version of swrastLoader to 2</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (2):</p>
|
||||
<ul>
|
||||
<li>docs: Add sha256sums for the 10.5.7 release</li>
|
||||
<li>Update version to 10.5.8</li>
|
||||
</ul>
|
||||
|
||||
<p>Erik Faye-Lund (1):</p>
|
||||
<ul>
|
||||
<li>mesa: build xmlconfig to a separate static library</li>
|
||||
</ul>
|
||||
|
||||
<p>Francisco Jerez (1):</p>
|
||||
<ul>
|
||||
<li>i965: Don't compact instructions with unmapped bits.</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (3):</p>
|
||||
<ul>
|
||||
<li>nvc0/ir: fix collection of first uses for texture barrier insertion</li>
|
||||
<li>nv50,nvc0: clamp uniform size to 64k</li>
|
||||
<li>nvc0/ir: can't have a join on a load with an indirect source</li>
|
||||
</ul>
|
||||
|
||||
<p>Jason Ekstrand (1):</p>
|
||||
<ul>
|
||||
<li>i965/fs: Don't let the EOT send message interfere with the MRF hack</li>
|
||||
</ul>
|
||||
|
||||
<p>Marek Olšák (1):</p>
|
||||
<ul>
|
||||
<li>egl: fix setting context flags</li>
|
||||
</ul>
|
||||
|
||||
<p>Roland Scheidegger (1):</p>
|
||||
<ul>
|
||||
<li>draw: (trivial) fix NULL pointer dereference</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
104
docs/relnotes/10.6.1.html
Normal file
104
docs/relnotes/10.6.1.html
Normal file
@@ -0,0 +1,104 @@
|
||||
<!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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.6.1 Release Notes / June 29, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.1 is a bug fix release which fixes bugs found since the 10.6.0 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.6.1 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
b4cccd4d0eabcc2bca00c3175d3ad88fdda57ffdb883a7998525b873a21fe607 mesa-10.6.1.tar.gz
|
||||
6c80a2b647e57c85dc36e609d9aed17f878f0d8e0cf9ace86d14cf604101e1eb mesa-10.6.1.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90347">Bug 90347</a> - [NVE0+] Failure to insert texbar under some circumstances (causing bad colors in Terasology)</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Anuj Phogat (4):</p>
|
||||
<ul>
|
||||
<li>mesa: Handle integer formats in need_rgb_to_luminance_conversion()</li>
|
||||
<li>mesa: Use helper function need_rgb_to_luminance_conversion()</li>
|
||||
<li>mesa: Turn need_rgb_to_luminance_conversion() in to a global function</li>
|
||||
<li>meta: Abort meta path if ReadPixels need rgb to luminance conversion</li>
|
||||
</ul>
|
||||
|
||||
<p>Ben Widawsky (1):</p>
|
||||
<ul>
|
||||
<li>i965/gen9: Implement Push Constant Buffer workaround</li>
|
||||
</ul>
|
||||
|
||||
<p>Boyan Ding (2):</p>
|
||||
<ul>
|
||||
<li>egl/x11: Set version of swrastLoader to 2</li>
|
||||
<li>egl/x11: Remove duplicate call to dri2_x11_add_configs_for_visuals</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (6):</p>
|
||||
<ul>
|
||||
<li>docs: Add sha256sums for the 10.6.0 release</li>
|
||||
<li>configure: warn about shared_glapi & xlib-glx only when both are set</li>
|
||||
<li>configure: error out when building backend-less libEGL</li>
|
||||
<li>configure: error out when building libEGL without shared-glapi</li>
|
||||
<li>gbm: do not (over)link against libglapi.so</li>
|
||||
<li>Update version to 10.6.1</li>
|
||||
</ul>
|
||||
|
||||
<p>Frank Henigman (1):</p>
|
||||
<ul>
|
||||
<li>gbm: dlopen libglapi so gbm_create_device works</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (9):</p>
|
||||
<ul>
|
||||
<li>nvc0/ir: fix collection of first uses for texture barrier insertion</li>
|
||||
<li>nv50,nvc0: clamp uniform size to 64k</li>
|
||||
<li>nvc0/ir: can't have a join on a load with an indirect source</li>
|
||||
<li>glsl: handle conversions to double when comparing param matches</li>
|
||||
<li>glsl: add version checks to conditionals for builtin variable enablement</li>
|
||||
<li>mesa: add GL_PROGRAM_PIPELINE support in KHR_debug calls</li>
|
||||
<li>glsl: binding point is a texture unit, which is a combined space</li>
|
||||
<li>nvc0: always put all tfb bufs into bufctx</li>
|
||||
<li>nv50,nvc0: make sure to pushbuf_refn before putting bo into pushbuf_data</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
165
docs/relnotes/10.6.2.html
Normal file
165
docs/relnotes/10.6.2.html
Normal file
@@ -0,0 +1,165 @@
|
||||
<!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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.6.2 Release Notes / July 11, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.2 is a bug fix release which fixes bugs found since the 10.6.1 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.6.2 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
9c7ab9300dda6c912faaaff97995ec1820ba21d114d9cf555f145cbad90995f4 mesa-10.6.2.tar.gz
|
||||
05753d3db4212900927b9894221a1669a10f56786e86a7e818b6e18a0817dca9 mesa-10.6.2.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=73528">Bug 73528</a> - Deferred lighting in Second Life causes system hiccups and screen flickering</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=80500">Bug 80500</a> - Flickering shadows in unreleased title trace</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82186">Bug 82186</a> - [r600g] BARTS GPU lockup with minecraft shaders</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84225">Bug 84225</a> - Allow constant-index-expression sampler array indexing with GLSL-ES < 300</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90537">Bug 90537</a> - radeonsi bo/va conflict on RADEON_GEM_VA (rscreen->ws->buffer_from_handle returns NULL)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90873">Bug 90873</a> - Kernel hang, TearFree On, Mate desktop environment</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91022">Bug 91022</a> - [g45 g965 bisected] assertions generated from textureGrad cube samplers fix</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91047">Bug 91047</a> - [SNB Bisected] Messed up Fog in Super Smash Bros. Melee in Dolphin</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91056">Bug 91056</a> - The Bard's Tale (2005, native) has rendering issues</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91117">Bug 91117</a> - Nimbus (running in wine) has rendering issues, objects are semi-transparent</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91124">Bug 91124</a> - Civilization V (in Wine) has rendering issues: text missing, menu bar corrupted</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91173">Bug 91173</a> - Oddworld: Stranger's Wrath HD: disfigured models in wrong colors</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91226">Bug 91226</a> - Crash in glLinkProgram (NEW)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91231">Bug 91231</a> - [NV92] Psychonauts (native) segfaults on start when DRI3 enabled</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Chris Wilson (1):</p>
|
||||
<ul>
|
||||
<li>loader: Look for any version of currently linked libudev.so</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (2):</p>
|
||||
<ul>
|
||||
<li>docs: Add sha256 checksums for the 10.6.1 release</li>
|
||||
<li>Update version to 10.6.2</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (8):</p>
|
||||
<ul>
|
||||
<li>nv50/ir: propagate modifier to right arg when const-folding mad</li>
|
||||
<li>nv50/ir: fix emission of address reg in 3rd source</li>
|
||||
<li>nv50/ir: copy joinAt when splitting both before and after</li>
|
||||
<li>mesa: reset the source packing when creating temp transfer image</li>
|
||||
<li>nv50/ir: don't emit src2 in immediate form</li>
|
||||
<li>mesa/prog: relative offsets into constbufs are not constant</li>
|
||||
<li>nv50/ir: UCMP arguments are float, so make sure modifiers are applied</li>
|
||||
<li>nvc0: turn sample counts off during blit</li>
|
||||
</ul>
|
||||
|
||||
<p>Kenneth Graunke (5):</p>
|
||||
<ul>
|
||||
<li>i965/fs: Fix ir_txs in emit_texture_gen4_simd16().</li>
|
||||
<li>i965: Reserve more batch space to accomodate Gen6 perfmonitors.</li>
|
||||
<li>i965/vs: Fix matNxM vertex attributes where M != 4.</li>
|
||||
<li>Revert "glsl: clone inputs and outputs during linking"</li>
|
||||
<li>Revert "i965: Delete linked GLSL IR when using NIR."</li>
|
||||
</ul>
|
||||
|
||||
<p>Marek Olšák (3):</p>
|
||||
<ul>
|
||||
<li>r600g: disable single-sample fast color clear due to hangs</li>
|
||||
<li>radeonsi: fix a hang with DrawTransformFeedback on 4 SE chips</li>
|
||||
<li>st/dri: don't set PIPE_BIND_SCANOUT for MSAA surfaces</li>
|
||||
</ul>
|
||||
|
||||
<p>Mario Kleiner (2):</p>
|
||||
<ul>
|
||||
<li>nouveau: Use dup fd as key in drm-winsys hash table to fix ZaphodHeads.</li>
|
||||
<li>winsys/radeon: Use dup fd as key in drm-winsys hash table to fix ZaphodHeads.</li>
|
||||
</ul>
|
||||
|
||||
<p>Matt Turner (2):</p>
|
||||
<ul>
|
||||
<li>i965/fs: Don't mess up stride for uniform integer multiplication.</li>
|
||||
<li>Revert SHA1 additions.</li>
|
||||
</ul>
|
||||
|
||||
<p>Michel Dänzer (1):</p>
|
||||
<ul>
|
||||
<li>winsys/radeon: Unmap GPU VM address range when destroying BO</li>
|
||||
</ul>
|
||||
|
||||
<p>Mike Stroyan (2):</p>
|
||||
<ul>
|
||||
<li>meta: Only change and restore viewport 0 in mesa meta mode</li>
|
||||
<li>i965: allocate at least 1 BLEND_STATE element</li>
|
||||
</ul>
|
||||
|
||||
<p>Neil Roberts (4):</p>
|
||||
<ul>
|
||||
<li>i965/skl: Set the pulls bary bit in 3DSTATE_PS_EXTRA</li>
|
||||
<li>glsl: Add missing check for whether an expression is an add operation</li>
|
||||
<li>glsl: Make sure not to dereference NULL</li>
|
||||
<li>i965: Don't try to print the GLSL IR if it has been freed</li>
|
||||
</ul>
|
||||
|
||||
<p>Tapani Pälli (8):</p>
|
||||
<ul>
|
||||
<li>glsl: clone inputs and outputs during linking</li>
|
||||
<li>i965: Delete linked GLSL IR when using NIR.</li>
|
||||
<li>glsl: Allow dynamic sampler array indexing with GLSL ES < 3.00</li>
|
||||
<li>mesa/glsl: new compiler option EmitNoIndirectSampler</li>
|
||||
<li>i965: use EmitNoIndirectSampler for gen < 7</li>
|
||||
<li>i915: use EmitNoIndirectSampler</li>
|
||||
<li>mesa/st: use EmitNoIndirectSampler if !ARB_gpu_shader5</li>
|
||||
<li>glsl: validate sampler array indexing for 'constant-index-expression'</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
106
docs/relnotes/10.6.3.html
Normal file
106
docs/relnotes/10.6.3.html
Normal file
@@ -0,0 +1,106 @@
|
||||
<!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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.6.3 Release Notes / July 26, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.3 is a bug fix release which fixes bugs found since the 10.6.2 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.6.3 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
c27e1e33798e69a6d2d2425aee8ac7b4c0b243066a65dd76cbb182ea31b1c7f2 mesa-10.6.3.tar.gz
|
||||
58592e07c350cd2e8969b73fa83048c657a39fe2f13f3b88f5e5818fe2e4676d mesa-10.6.3.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90728">Bug 90728</a> - dvd playback with vlc and vdpau causes segmentation fault</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91337">Bug 91337</a> - OSMesaGetProcAdress("OSMesaPixelStore") returns nil</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Brian Paul (1):</p>
|
||||
<ul>
|
||||
<li>osmesa: fix OSMesaPixelsStore typo</li>
|
||||
</ul>
|
||||
|
||||
<p>Chad Versace (1):</p>
|
||||
<ul>
|
||||
<li>mesa: Fix generation of git_sha1.h.tmp for gitlinks</li>
|
||||
</ul>
|
||||
|
||||
<p>Christian König (2):</p>
|
||||
<ul>
|
||||
<li>vl: cleanup video buffer private when the decoder is destroyed</li>
|
||||
<li>st/vdpau: fix mixer size checks</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (3):</p>
|
||||
<ul>
|
||||
<li>docs: Add sha256 checksums for the 10.6.2 release</li>
|
||||
<li>auxiliary/vl: use the correct screen index</li>
|
||||
<li>Update version to 10.6.3</li>
|
||||
</ul>
|
||||
|
||||
<p>Francisco Jerez (1):</p>
|
||||
<ul>
|
||||
<li>i965/gen9: Use custom MOCS entries set up by the kernel.</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (5):</p>
|
||||
<ul>
|
||||
<li>nv50, nvc0: enable at least one color RT if alphatest is enabled</li>
|
||||
<li>nvc0/ir: fix txq on indirect samplers</li>
|
||||
<li>nvc0/ir: don't worry about sampler in txq handling</li>
|
||||
<li>gm107/ir: fix indirect txq emission</li>
|
||||
<li>nv50: fix max level clamping on G80</li>
|
||||
</ul>
|
||||
|
||||
<p>Kenneth Graunke (1):</p>
|
||||
<ul>
|
||||
<li>program: Allow redundant OPTION ARB_fog_* directives.</li>
|
||||
</ul>
|
||||
|
||||
<p>Rob Clark (1):</p>
|
||||
<ul>
|
||||
<li>xa: don't leak fences</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
137
docs/relnotes/10.6.4.html
Normal file
137
docs/relnotes/10.6.4.html
Normal file
@@ -0,0 +1,137 @@
|
||||
<!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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.6.4 Release Notes / August 11, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.4 is a bug fix release which fixes bugs found since the 10.6.3 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.6.4 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
4960bf17d8b5d6a6503c6954ec6cf480b5cd930797bac901c60bea192675f85e mesa-10.6.4.tar.gz
|
||||
8f5ac103f0f503de2f7a985b0df349bd4ecdfe7f51c714be146fa5a9a3c07b77 mesa-10.6.4.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=73512">Bug 73512</a> - [clover] mesa.icd. should contain full path</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91290">Bug 91290</a> - SIGSEGV glcpp/glcpp-parse.y:1077</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Anuj Phogat (6):</p>
|
||||
<ul>
|
||||
<li>mesa: Turn get_readpixels_transfer_ops() in to a global function</li>
|
||||
<li>meta: Fix transfer operations check in meta pbo path for readpixels</li>
|
||||
<li>meta: Abort meta pbo path if readpixels need signed-unsigned conversion</li>
|
||||
<li>meta: Don't do fragment color clamping in _mesa_meta_pbo_GetTexSubImage</li>
|
||||
<li>mesa: Add a helper function _mesa_need_luminance_to_rgb_conversion()</li>
|
||||
<li>meta: Fix reading luminance texture as rgba in _mesa_meta_pbo_GetTexSubImage()</li>
|
||||
</ul>
|
||||
|
||||
<p>Ben Widawsky (1):</p>
|
||||
<ul>
|
||||
<li>i965/skl: Add production thread counts and URB size</li>
|
||||
</ul>
|
||||
|
||||
<p>Eduardo Lima Mitev (3):</p>
|
||||
<ul>
|
||||
<li>mesa: Fix errors values returned by glShaderBinary()</li>
|
||||
<li>mesa: Validate target before resolving tex obj in glTex(ture)SubImageXD</li>
|
||||
<li>mesa: Fix error returned by glCopyTexImage2D() upon an invalid internal format</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (6):</p>
|
||||
<ul>
|
||||
<li>docs: Add checksums for mesa 10.6.3 tarballs</li>
|
||||
<li>configure.ac: do not set HAVE_DRI(23) when libdrm is missing</li>
|
||||
<li>egl/wayland: libdrm is a hard requirement, treat it as such</li>
|
||||
<li>winsys/radeon: don't leak the fd when it is 0</li>
|
||||
<li>bugzilla_mesa.sh: sort the bugs list by number</li>
|
||||
<li>Update version to 10.6.4</li>
|
||||
</ul>
|
||||
|
||||
<p>Francisco Jerez (1):</p>
|
||||
<ul>
|
||||
<li>i965/fs: Fix fs_inst::regs_read() for sources in the ATTR file.</li>
|
||||
</ul>
|
||||
|
||||
<p>Frank Binns (2):</p>
|
||||
<ul>
|
||||
<li>egl/dri: Add error info needed for EGL_EXT_image_dma_buf_import extension</li>
|
||||
<li>egl: Add eglQuerySurface surface type check for EGL_LARGEST_PBUFFER attrib</li>
|
||||
</ul>
|
||||
|
||||
<p>Igor Gnatenko (1):</p>
|
||||
<ul>
|
||||
<li>opencl: use versioned .so in mesa.icd</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (1):</p>
|
||||
<ul>
|
||||
<li>nvc0: fix geometry program revalidation of clipping params</li>
|
||||
</ul>
|
||||
|
||||
<p>Kenneth Graunke (1):</p>
|
||||
<ul>
|
||||
<li>glsl: Fix a bug where LHS swizzles of swizzles were too small.</li>
|
||||
</ul>
|
||||
|
||||
<p>Marek Olšák (6):</p>
|
||||
<ul>
|
||||
<li>st/mesa: don't call st_validate_state in BlitFramebuffer</li>
|
||||
<li>radeonsi: upload shader rodata after updating scratch relocations</li>
|
||||
<li>st/mesa: don't ignore texture buffer state changes</li>
|
||||
<li>radeonsi: rework how shader pointers to descriptors are set</li>
|
||||
<li>radeonsi: completely rework updating descriptors without CP DMA</li>
|
||||
<li>r600g: fix the CB_SHADER_MASK setup</li>
|
||||
</ul>
|
||||
|
||||
<p>Samuel Iglesias Gonsalvez (1):</p>
|
||||
<ul>
|
||||
<li>glsl/glcpp: fix SIGSEGV when checking error condition for macro redefinition</li>
|
||||
</ul>
|
||||
|
||||
<p>Samuel Pitoiset (1):</p>
|
||||
<ul>
|
||||
<li>nv50: avoid segfault with enabled but unbound vertex attrib</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
124
docs/relnotes/10.6.5.html
Normal file
124
docs/relnotes/10.6.5.html
Normal file
@@ -0,0 +1,124 @@
|
||||
<!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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.6.5 Release Notes / August 22, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.5 is a bug fix release which fixes bugs found since the 10.6.4 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.6.5 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
afe290fc7af75a25df5ee52396a9f09e5dba85fb3e159304bdda265b8564b0d4 mesa-10.6.5.tar.gz
|
||||
fb6fac3c85bcfa9d06b8dd439169f23f0c0924a88e44362e738b99b1feff762f mesa-10.6.5.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85252">Bug 85252</a> - Segfault in compiler while processing ternary operator with void arguments</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91570">Bug 91570</a> - Upgrading mesa to 10.6 causes segfault in OpenGL applications with GeForce4 MX 440 / AGP 8X</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91610">Bug 91610</a> - [BSW] GPU hang for spec.shaders.point-vertex-id gl_instanceid divisor</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Adam Jackson (1):</p>
|
||||
<ul>
|
||||
<li>glx: Fix __glXWireToEvent for BufferSwapComplete</li>
|
||||
</ul>
|
||||
|
||||
<p>Alex Deucher (2):</p>
|
||||
<ul>
|
||||
<li>radeonsi: add new OLAND pci id</li>
|
||||
<li>radeonsi: properly set the raster_config for KV</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (4):</p>
|
||||
<ul>
|
||||
<li>docs: add sha256 checksums for 10.6.4</li>
|
||||
<li>vc4: add missing nir include, to fix the build</li>
|
||||
<li>Revert "radeonsi: properly set the raster_config for KV"</li>
|
||||
<li>Update version to 10.6.5</li>
|
||||
</ul>
|
||||
|
||||
<p>Frank Binns (1):</p>
|
||||
<ul>
|
||||
<li>egl/x11: don't abort when creating a DRI2 drawable fails</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (3):</p>
|
||||
<ul>
|
||||
<li>nouveau: no need to do tnl wakeup, state updates are always hooked up</li>
|
||||
<li>gm107/ir: indirect handle goes first on maxwell also</li>
|
||||
<li>nv50,nvc0: take level into account when doing eng2d multi-layer blits</li>
|
||||
</ul>
|
||||
|
||||
<p>Jason Ekstrand (4):</p>
|
||||
<ul>
|
||||
<li>meta/copy_image: Stash off the scissor</li>
|
||||
<li>mesa/formats: Only do byteswapping for packed formats</li>
|
||||
<li>mesa/formats: Fix swizzle flipping for big-endian targets</li>
|
||||
<li>mesa/formats: Don't flip channels of null array formats</li>
|
||||
</ul>
|
||||
|
||||
<p>Marek Olšák (3):</p>
|
||||
<ul>
|
||||
<li>radeonsi: fix polygon offset scale</li>
|
||||
<li>r600g: fix polygon offset scale</li>
|
||||
<li>r600g: allow setting geometry shader sampler states</li>
|
||||
</ul>
|
||||
|
||||
<p>Neil Roberts (1):</p>
|
||||
<ul>
|
||||
<li>i965/bdw: Fix setting the instancing state for the SGVS element</li>
|
||||
</ul>
|
||||
|
||||
<p>Oded Gabbay (2):</p>
|
||||
<ul>
|
||||
<li>mesa: clear existing swizzle info before bitwise-OR</li>
|
||||
<li>mesa/formats: don't byteswap when building array formats</li>
|
||||
</ul>
|
||||
|
||||
<p>Renaud Gaubert (1):</p>
|
||||
<ul>
|
||||
<li>glsl: avoid compiler's segfault when processing operators with void arguments</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
164
docs/relnotes/10.6.6.html
Normal file
164
docs/relnotes/10.6.6.html
Normal file
@@ -0,0 +1,164 @@
|
||||
<!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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.6.6 Release Notes / September 04, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.6 is a bug fix release which fixes bugs found since the 10.6.5 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.6.6 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
416517aa9df4791f97d34451a9e4da33c966afcd18c115c5769b92b15b018ef5 mesa-10.6.6.tar.gz
|
||||
570f2154b7340ff5db61ff103bc6e85165b8958798b78a50fa2df488e98e5778 mesa-10.6.6.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84677">Bug 84677</a> - Triangle disappears with glPolygonMode GL_LINE</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90734">Bug 90734</a> - glBufferSubData is corrupting data when buffer is > 32k</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90748">Bug 90748</a> - [BDW Bisected]dEQP-GLES3.functional.fbo.completeness.renderable.texture.depth.rg_half_float_oes fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90902">Bug 90902</a> - [bsw][regression] dEQP: "Found invalid pixel values"</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90925">Bug 90925</a> - "high fidelity": Segfault in _mesa_program_resource_find_name</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91254">Bug 91254</a> - (regresion) video using VA-API on Intel slow and freeze system with mesa 10.6 or 10.6.1</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91292">Bug 91292</a> - [BDW+] glVertexAttribDivisor not working in combination with glPolygonMode</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91673">Bug 91673</a> - Segfault when calling glTexSubImage2D on storage texture to bound FBO</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91726">Bug 91726</a> - R600 asserts in tgsi_cmp/make_src_for_op3</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Chris Wilson (2):</p>
|
||||
<ul>
|
||||
<li>i965: Prevent coordinate overflow in intel_emit_linear_blit</li>
|
||||
<li>i965: Always re-emit the pipeline select during invariant state emission</li>
|
||||
</ul>
|
||||
|
||||
<p>Daniel Scharrer (1):</p>
|
||||
<ul>
|
||||
<li>mesa: add missing queries for ARB_direct_state_access</li>
|
||||
</ul>
|
||||
|
||||
<p>Dave Airlie (8):</p>
|
||||
<ul>
|
||||
<li>mesa/arb_gpu_shader_fp64: add support for glGetUniformdv</li>
|
||||
<li>mesa/texgetimage: fix missing stencil check</li>
|
||||
<li>st/readpixels: fix accel path for skipimages.</li>
|
||||
<li>texcompress_s3tc/fxt1: fix stride checks (v1.1)</li>
|
||||
<li>mesa/readpixels: check strides are equal before skipping conversion</li>
|
||||
<li>mesa: enable texture stencil8 for multisample</li>
|
||||
<li>r600/sb: update last_cf for finalize if.</li>
|
||||
<li>r600g: fix calculation for gpr allocation</li>
|
||||
</ul>
|
||||
|
||||
<p>David Heidelberg (1):</p>
|
||||
<ul>
|
||||
<li>st/nine: Require gcc >= 4.6</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (2):</p>
|
||||
<ul>
|
||||
<li>docs: add sha256 checksums for 10.6.5</li>
|
||||
<li>get-pick-list.sh: Require explicit "10.6" for nominating stable patches</li>
|
||||
</ul>
|
||||
|
||||
<p>Glenn Kennard (4):</p>
|
||||
<ul>
|
||||
<li>r600g: Fix assert in tgsi_cmp</li>
|
||||
<li>r600g/sb: Handle undef in read port tracker</li>
|
||||
<li>r600g/sb: Don't read junk after EOP</li>
|
||||
<li>r600g/sb: Don't crash on empty if jump target</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (5):</p>
|
||||
<ul>
|
||||
<li>st/mesa: fix assignments with 4-operand arguments (i.e. BFI)</li>
|
||||
<li>st/mesa: pass through 4th opcode argument in bitmap/pixel visitors</li>
|
||||
<li>nv50,nvc0: disable depth bounds test on blit</li>
|
||||
<li>nv50: fix 2d engine blits for 64- and 128-bit formats</li>
|
||||
<li>mesa: only copy the requested teximage faces</li>
|
||||
</ul>
|
||||
|
||||
<p>Jason Ekstrand (1):</p>
|
||||
<ul>
|
||||
<li>i965/fs: Split VGRFs after lowering pull constants</li>
|
||||
</ul>
|
||||
|
||||
<p>Kenneth Graunke (3):</p>
|
||||
<ul>
|
||||
<li>i965: Fix copy propagation type changes.</li>
|
||||
<li>Revert "i965: Advertise a line width of 40.0 on Cherryview and Skylake."</li>
|
||||
<li>i965: Momentarily pretend to support ARB_texture_stencil8 for blits.</li>
|
||||
</ul>
|
||||
|
||||
<p>Marek Olšák (3):</p>
|
||||
<ul>
|
||||
<li>gallium/radeon: fix the ADDRESS_HI mask for EVENT_WRITE CIK packets</li>
|
||||
<li>mesa: create multisample fallback textures like normal textures</li>
|
||||
<li>radeonsi: fix a Unigine Heaven hang when drirc is missing</li>
|
||||
</ul>
|
||||
|
||||
<p>Matt Turner (1):</p>
|
||||
<ul>
|
||||
<li>i965/fs: Handle MRF destinations in lower_integer_multiplication().</li>
|
||||
</ul>
|
||||
|
||||
<p>Neil Roberts (2):</p>
|
||||
<ul>
|
||||
<li>i965: Swap the order of the vertex ID and edge flag attributes</li>
|
||||
<li>i965/bdw: Fix 3DSTATE_VF_INSTANCING when the edge flag is used</li>
|
||||
</ul>
|
||||
|
||||
<p>Tapani Pälli (5):</p>
|
||||
<ul>
|
||||
<li>mesa: update fbo state in glTexStorage</li>
|
||||
<li>glsl: build stageref mask using IR, not symbol table</li>
|
||||
<li>glsl: expose build_program_resource_list function</li>
|
||||
<li>glsl: create program resource list after LinkShader</li>
|
||||
<li>mesa: add GL_RED, GL_RG support for floating point textures</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
75
docs/relnotes/10.6.7.html
Normal file
75
docs/relnotes/10.6.7.html
Normal file
@@ -0,0 +1,75 @@
|
||||
<!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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.6.7 Release Notes / September 10, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.7 is a bug fix release which fixes bugs found since the 10.6.6 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.6.7 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
4ba10c59abee30d72476543a57afd2f33803dabf4620dc333b335d47966ff842 mesa-10.6.7.tar.gz
|
||||
feb1f640b915dada88a7c793dfaff0ae23580f8903f87a6b76469253de0d28d8 mesa-10.6.7.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90751">Bug 90751</a> - [BDW Bisected]dEQP-GLES3.functional.fbo.completeness.renderable.texture.stencil.stencil_index8 fails</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Dave Airlie (1):</p>
|
||||
<ul>
|
||||
<li>mesa/teximage: use correct extension for accept stencil texture.</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (3):</p>
|
||||
<ul>
|
||||
<li>docs: add sha256 checksums for 10.6.6</li>
|
||||
<li>Revert "i965: Momentarily pretend to support ARB_texture_stencil8 for blits."</li>
|
||||
<li>Update version to 10.6.7</li>
|
||||
</ul>
|
||||
|
||||
<p>Kenneth Graunke (1):</p>
|
||||
<ul>
|
||||
<li>glsl: Handle attribute aliasing in attribute storage limit check.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
136
docs/relnotes/10.6.8.html
Normal file
136
docs/relnotes/10.6.8.html
Normal file
@@ -0,0 +1,136 @@
|
||||
<!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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.6.8 Release Notes / September 20, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.8 is a bug fix release which fixes bugs found since the 10.6.7 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.6.8 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
1f34dba2a8059782e3e4e0f18b9628004e253b2c69085f735b846d2e63c9e250 mesa-10.6.8.tar.gz
|
||||
e36ee5ceeadb3966fb5ce5b4cf18322dbb76a4f075558ae49c3bba94f57d58fd mesa-10.6.8.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90621">Bug 90621</a> - Mesa fail to build from git</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91526">Bug 91526</a> - World of Warcraft (on Wine) has UI corruption with nouveau</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91719">Bug 91719</a> - [SNB,HSW,BYT] dEQP regressions associated with using NIR for vertex shaders</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Alejandro Piñeiro (1):</p>
|
||||
<ul>
|
||||
<li>i965/vec4: fill src_reg type using the constructor type parameter</li>
|
||||
</ul>
|
||||
|
||||
<p>Antia Puentes (1):</p>
|
||||
<ul>
|
||||
<li>i965/vec4: Fix saturation errors when coalescing registers</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (2):</p>
|
||||
<ul>
|
||||
<li>docs: add sha256 checksums for 10.6.7</li>
|
||||
<li>cherry-ignore: add commit non applicable for 10.6</li>
|
||||
</ul>
|
||||
|
||||
<p>Hans de Goede (4):</p>
|
||||
<ul>
|
||||
<li>nv30: Fix creation of scanout buffers</li>
|
||||
<li>nv30: Implement color resolve for msaa</li>
|
||||
<li>nv30: Fix max width / height checks in nv30 sifm code</li>
|
||||
<li>nv30: Disable msaa unless requested from the env by NV30_MAX_MSAA</li>
|
||||
</ul>
|
||||
|
||||
<p>Ian Romanick (2):</p>
|
||||
<ul>
|
||||
<li>mesa: Pass the type to _mesa_uniform_matrix as a glsl_base_type</li>
|
||||
<li>mesa: Don't allow wrong type setters for matrix uniforms</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (5):</p>
|
||||
<ul>
|
||||
<li>st/mesa: don't fall back to 16F when 32F is requested</li>
|
||||
<li>nvc0: always emit a full shader colormask</li>
|
||||
<li>nvc0: remove BGRA4 format support</li>
|
||||
<li>st/mesa: avoid integer overflows with buffers >= 512MB</li>
|
||||
<li>nv50, nvc0: fix max texture buffer size to 128M elements</li>
|
||||
</ul>
|
||||
|
||||
<p>Jason Ekstrand (1):</p>
|
||||
<ul>
|
||||
<li>i965/vec4: Don't reswizzle hardware registers</li>
|
||||
</ul>
|
||||
|
||||
<p>Jose Fonseca (1):</p>
|
||||
<ul>
|
||||
<li>gallivm: Workaround LLVM PR23628.</li>
|
||||
</ul>
|
||||
|
||||
<p>Kenneth Graunke (1):</p>
|
||||
<ul>
|
||||
<li>i965: Momentarily pretend to support ARB_texture_stencil8 for blits.</li>
|
||||
</ul>
|
||||
|
||||
<p>Oded Gabbay (1):</p>
|
||||
<ul>
|
||||
<li>llvmpipe: convert double to long long instead of unsigned long long</li>
|
||||
</ul>
|
||||
|
||||
<p>Ray Strode (1):</p>
|
||||
<ul>
|
||||
<li>gbm: convert gbm bo format to fourcc format on dma-buf import</li>
|
||||
</ul>
|
||||
|
||||
<p>Ulrich Weigand (1):</p>
|
||||
<ul>
|
||||
<li>mesa: Fix texture compression on big-endian systems</li>
|
||||
</ul>
|
||||
|
||||
<p>Vinson Lee (1):</p>
|
||||
<ul>
|
||||
<li>gallivm: Do not use NoFramePointerElim with LLVM 3.7.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
130
docs/relnotes/10.6.9.html
Normal file
130
docs/relnotes/10.6.9.html
Normal file
@@ -0,0 +1,130 @@
|
||||
<!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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.6.9 Release Notes / Octover 03, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.9 is a bug fix release which fixes bugs found since the 10.6.8 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.6.9 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
3406876aac67546d0c3e2cb97da330b62644c313e7992b95618662e13c54296a mesa-10.6.9.tar.gz
|
||||
b04c4de6280b863babc2929573da17218d92e9e4ba6272d548d135415723e8c3 mesa-10.6.9.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=38109">Bug 38109</a> - i915 driver crashes if too few vertices are submitted (Mesa 7.10.2)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=55552">Bug 55552</a> - Compile errors with --enable-mangling</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86281">Bug 86281</a> - brw_meta_fast_clear (brw=brw@entry=0x7fffd4097a08, fb=fb@entry=0x7fffd40fa900, buffers=buffers@entry=2, partial_clear=partial_clear@entry=false)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91970">Bug 91970</a> - [BSW regression] dEQP-GLES3.functional.shaders.precision.int.highp_mul_vertex</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=92072">Bug 92072</a> - Wine breakage since d082c5324 (st/mesa: don't call st_validate_state in BlitFramebuffer)</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Brian Paul (1):</p>
|
||||
<ul>
|
||||
<li>st/mesa: try PIPE_BIND_RENDER_TARGET when choosing float texture formats</li>
|
||||
</ul>
|
||||
|
||||
<p>Chris Wilson (1):</p>
|
||||
<ul>
|
||||
<li>i965: Remove early release of DRI2 miptree</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (4):</p>
|
||||
<ul>
|
||||
<li>docs: add sha256 checksums for 10.6.8</li>
|
||||
<li>cherry-ignore: add commit non applicable for 10.6</li>
|
||||
<li>cherry-ignore: add commit non applicable for 10.6</li>
|
||||
<li>Update version to 10.6.9</li>
|
||||
</ul>
|
||||
|
||||
<p>Iago Toral Quiroga (1):</p>
|
||||
<ul>
|
||||
<li>mesa: Fix GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE for default framebuffer.</li>
|
||||
</ul>
|
||||
|
||||
<p>Ian Romanick (5):</p>
|
||||
<ul>
|
||||
<li>t_dd_dmatmp: Make "count" actually be the count</li>
|
||||
<li>t_dd_dmatmp: Clean up improper code formatting from previous patch</li>
|
||||
<li>t_dd_dmatmp: Use '& 3' instead of '% 4' everywhere</li>
|
||||
<li>t_dd_dmatmp: Pull out common 'count -= count & 3' code</li>
|
||||
<li>t_dd_dmatmp: Use addition instead of subtraction in loop bounds</li>
|
||||
</ul>
|
||||
|
||||
<p>Jeremy Huddleston (1):</p>
|
||||
<ul>
|
||||
<li>configure.ac: Add support to enable read-only text segment on x86.</li>
|
||||
</ul>
|
||||
|
||||
<p>Kristian Høgsberg Kristensen (1):</p>
|
||||
<ul>
|
||||
<li>i965: Respect stride and subreg_offset for ATTR registers</li>
|
||||
</ul>
|
||||
|
||||
<p>Kyle Brenneman (3):</p>
|
||||
<ul>
|
||||
<li>glx: Fix build errors with --enable-mangling (v2)</li>
|
||||
<li>mapi: Make _glapi_get_stub work with "gl" or "mgl" prefix.</li>
|
||||
<li>glx: Don't hard-code the name "libGL.so.1" in driOpenDriver (v3)</li>
|
||||
</ul>
|
||||
|
||||
<p>Leo Liu (1):</p>
|
||||
<ul>
|
||||
<li>radeon/vce: fix vui time_scale zero error</li>
|
||||
</ul>
|
||||
|
||||
<p>Marek Olšák (1):</p>
|
||||
<ul>
|
||||
<li>st/mesa: fix front buffer regression after dropping st_validate_state in Blit</li>
|
||||
</ul>
|
||||
|
||||
<p>Roland Scheidegger (1):</p>
|
||||
<ul>
|
||||
<li>mesa: fix mipmap generation for immutable, compressed textures</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@@ -1,61 +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>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.7.0 Release Notes / TBD</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.7.0 is a new development release.
|
||||
People who are concerned with stability and reliability should stick
|
||||
with a previous release or wait for Mesa 10.7.1.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.7.0 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
TBD.
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
|
||||
<p>
|
||||
Note: some of the new features are only available with certain drivers.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>GL_ARB_framebuffer_no_attachments on i965</li>
|
||||
<li>GL_ARB_shader_stencil_export on llvmpipe</li>
|
||||
</ul>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
TBD.
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
TBD.
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@@ -1,12 +1,11 @@
|
||||
#ifndef __egl_h_
|
||||
#define __egl_h_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/* -*- mode: c; tab-width: 8; -*- */
|
||||
/* vi: set sw=4 ts=8: */
|
||||
/* Reference version of egl.h for EGL 1.4.
|
||||
* $Revision: 9356 $ on $Date: 2009-10-21 02:52:25 -0700 (Wed, 21 Oct 2009) $
|
||||
*/
|
||||
|
||||
/*
|
||||
** Copyright (c) 2013-2014 The Khronos Group Inc.
|
||||
** Copyright (c) 2007-2009 The Khronos Group Inc.
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person obtaining a
|
||||
** copy of this software and/or associated documentation files (the
|
||||
@@ -27,277 +26,304 @@ extern "C" {
|
||||
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||
*/
|
||||
/*
|
||||
** This header is generated from the Khronos OpenGL / OpenGL ES XML
|
||||
** API Registry. The current version of the Registry, generator scripts
|
||||
** used to make the header, and the header can be found at
|
||||
** http://www.opengl.org/registry/
|
||||
**
|
||||
** Khronos $Revision: 31039 $ on $Date: 2015-05-04 17:01:57 -0700 (Mon, 04 May 2015) $
|
||||
*/
|
||||
|
||||
#ifndef __egl_h_
|
||||
#define __egl_h_
|
||||
|
||||
/* All platform-dependent types and macro boilerplate (such as EGLAPI
|
||||
* and EGLAPIENTRY) should go in eglplatform.h.
|
||||
*/
|
||||
#include <EGL/eglplatform.h>
|
||||
|
||||
/* Generated on date 20150504 */
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Generated C header for:
|
||||
* API: egl
|
||||
* Versions considered: .*
|
||||
* Versions emitted: .*
|
||||
* Default extensions included: None
|
||||
* Additional extensions included: _nomatch_^
|
||||
* Extensions removed: _nomatch_^
|
||||
/* EGL Types */
|
||||
/* EGLint is defined in eglplatform.h */
|
||||
typedef unsigned int EGLBoolean;
|
||||
typedef unsigned int EGLenum;
|
||||
typedef void *EGLConfig;
|
||||
typedef void *EGLContext;
|
||||
typedef void *EGLDisplay;
|
||||
typedef void *EGLSurface;
|
||||
typedef void *EGLClientBuffer;
|
||||
|
||||
/* EGL Versioning */
|
||||
#define EGL_VERSION_1_0 1
|
||||
#define EGL_VERSION_1_1 1
|
||||
#define EGL_VERSION_1_2 1
|
||||
#define EGL_VERSION_1_3 1
|
||||
#define EGL_VERSION_1_4 1
|
||||
|
||||
/* EGL Enumerants. Bitmasks and other exceptional cases aside, most
|
||||
* enums are assigned unique values starting at 0x3000.
|
||||
*/
|
||||
|
||||
#ifndef EGL_VERSION_1_0
|
||||
#define EGL_VERSION_1_0 1
|
||||
typedef unsigned int EGLBoolean;
|
||||
typedef void *EGLDisplay;
|
||||
#include <KHR/khrplatform.h>
|
||||
#include <EGL/eglplatform.h>
|
||||
typedef void *EGLConfig;
|
||||
typedef void *EGLSurface;
|
||||
typedef void *EGLContext;
|
||||
/* EGL aliases */
|
||||
#define EGL_FALSE 0
|
||||
#define EGL_TRUE 1
|
||||
|
||||
/* Out-of-band handle values */
|
||||
#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0)
|
||||
#define EGL_NO_CONTEXT ((EGLContext)0)
|
||||
#define EGL_NO_DISPLAY ((EGLDisplay)0)
|
||||
#define EGL_NO_SURFACE ((EGLSurface)0)
|
||||
|
||||
/* Out-of-band attribute value */
|
||||
#define EGL_DONT_CARE ((EGLint)-1)
|
||||
|
||||
/* Errors / GetError return values */
|
||||
#define EGL_SUCCESS 0x3000
|
||||
#define EGL_NOT_INITIALIZED 0x3001
|
||||
#define EGL_BAD_ACCESS 0x3002
|
||||
#define EGL_BAD_ALLOC 0x3003
|
||||
#define EGL_BAD_ATTRIBUTE 0x3004
|
||||
#define EGL_BAD_CONFIG 0x3005
|
||||
#define EGL_BAD_CONTEXT 0x3006
|
||||
#define EGL_BAD_CURRENT_SURFACE 0x3007
|
||||
#define EGL_BAD_DISPLAY 0x3008
|
||||
#define EGL_BAD_MATCH 0x3009
|
||||
#define EGL_BAD_NATIVE_PIXMAP 0x300A
|
||||
#define EGL_BAD_NATIVE_WINDOW 0x300B
|
||||
#define EGL_BAD_PARAMETER 0x300C
|
||||
#define EGL_BAD_SURFACE 0x300D
|
||||
#define EGL_CONTEXT_LOST 0x300E /* EGL 1.1 - IMG_power_management */
|
||||
|
||||
/* Reserved 0x300F-0x301F for additional errors */
|
||||
|
||||
/* Config attributes */
|
||||
#define EGL_BUFFER_SIZE 0x3020
|
||||
#define EGL_ALPHA_SIZE 0x3021
|
||||
#define EGL_BLUE_SIZE 0x3022
|
||||
#define EGL_GREEN_SIZE 0x3023
|
||||
#define EGL_RED_SIZE 0x3024
|
||||
#define EGL_DEPTH_SIZE 0x3025
|
||||
#define EGL_STENCIL_SIZE 0x3026
|
||||
#define EGL_CONFIG_CAVEAT 0x3027
|
||||
#define EGL_CONFIG_ID 0x3028
|
||||
#define EGL_LEVEL 0x3029
|
||||
#define EGL_MAX_PBUFFER_HEIGHT 0x302A
|
||||
#define EGL_MAX_PBUFFER_PIXELS 0x302B
|
||||
#define EGL_MAX_PBUFFER_WIDTH 0x302C
|
||||
#define EGL_NATIVE_RENDERABLE 0x302D
|
||||
#define EGL_NATIVE_VISUAL_ID 0x302E
|
||||
#define EGL_NATIVE_VISUAL_TYPE 0x302F
|
||||
#define EGL_SAMPLES 0x3031
|
||||
#define EGL_SAMPLE_BUFFERS 0x3032
|
||||
#define EGL_SURFACE_TYPE 0x3033
|
||||
#define EGL_TRANSPARENT_TYPE 0x3034
|
||||
#define EGL_TRANSPARENT_BLUE_VALUE 0x3035
|
||||
#define EGL_TRANSPARENT_GREEN_VALUE 0x3036
|
||||
#define EGL_TRANSPARENT_RED_VALUE 0x3037
|
||||
#define EGL_NONE 0x3038 /* Attrib list terminator */
|
||||
#define EGL_BIND_TO_TEXTURE_RGB 0x3039
|
||||
#define EGL_BIND_TO_TEXTURE_RGBA 0x303A
|
||||
#define EGL_MIN_SWAP_INTERVAL 0x303B
|
||||
#define EGL_MAX_SWAP_INTERVAL 0x303C
|
||||
#define EGL_LUMINANCE_SIZE 0x303D
|
||||
#define EGL_ALPHA_MASK_SIZE 0x303E
|
||||
#define EGL_COLOR_BUFFER_TYPE 0x303F
|
||||
#define EGL_RENDERABLE_TYPE 0x3040
|
||||
#define EGL_MATCH_NATIVE_PIXMAP 0x3041 /* Pseudo-attribute (not queryable) */
|
||||
#define EGL_CONFORMANT 0x3042
|
||||
|
||||
/* Reserved 0x3041-0x304F for additional config attributes */
|
||||
|
||||
/* Config attribute values */
|
||||
#define EGL_SLOW_CONFIG 0x3050 /* EGL_CONFIG_CAVEAT value */
|
||||
#define EGL_NON_CONFORMANT_CONFIG 0x3051 /* EGL_CONFIG_CAVEAT value */
|
||||
#define EGL_TRANSPARENT_RGB 0x3052 /* EGL_TRANSPARENT_TYPE value */
|
||||
#define EGL_RGB_BUFFER 0x308E /* EGL_COLOR_BUFFER_TYPE value */
|
||||
#define EGL_LUMINANCE_BUFFER 0x308F /* EGL_COLOR_BUFFER_TYPE value */
|
||||
|
||||
/* More config attribute values, for EGL_TEXTURE_FORMAT */
|
||||
#define EGL_NO_TEXTURE 0x305C
|
||||
#define EGL_TEXTURE_RGB 0x305D
|
||||
#define EGL_TEXTURE_RGBA 0x305E
|
||||
#define EGL_TEXTURE_2D 0x305F
|
||||
|
||||
/* Config attribute mask bits */
|
||||
#define EGL_PBUFFER_BIT 0x0001 /* EGL_SURFACE_TYPE mask bits */
|
||||
#define EGL_PIXMAP_BIT 0x0002 /* EGL_SURFACE_TYPE mask bits */
|
||||
#define EGL_WINDOW_BIT 0x0004 /* EGL_SURFACE_TYPE mask bits */
|
||||
#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 /* EGL_SURFACE_TYPE mask bits */
|
||||
#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 /* EGL_SURFACE_TYPE mask bits */
|
||||
#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 /* EGL_SURFACE_TYPE mask bits */
|
||||
#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 /* EGL_SURFACE_TYPE mask bits */
|
||||
|
||||
#define EGL_OPENGL_ES_BIT 0x0001 /* EGL_RENDERABLE_TYPE mask bits */
|
||||
#define EGL_OPENVG_BIT 0x0002 /* EGL_RENDERABLE_TYPE mask bits */
|
||||
#define EGL_OPENGL_ES2_BIT 0x0004 /* EGL_RENDERABLE_TYPE mask bits */
|
||||
#define EGL_OPENGL_BIT 0x0008 /* EGL_RENDERABLE_TYPE mask bits */
|
||||
|
||||
/* QueryString targets */
|
||||
#define EGL_VENDOR 0x3053
|
||||
#define EGL_VERSION 0x3054
|
||||
#define EGL_EXTENSIONS 0x3055
|
||||
#define EGL_CLIENT_APIS 0x308D
|
||||
|
||||
/* QuerySurface / SurfaceAttrib / CreatePbufferSurface targets */
|
||||
#define EGL_HEIGHT 0x3056
|
||||
#define EGL_WIDTH 0x3057
|
||||
#define EGL_LARGEST_PBUFFER 0x3058
|
||||
#define EGL_TEXTURE_FORMAT 0x3080
|
||||
#define EGL_TEXTURE_TARGET 0x3081
|
||||
#define EGL_MIPMAP_TEXTURE 0x3082
|
||||
#define EGL_MIPMAP_LEVEL 0x3083
|
||||
#define EGL_RENDER_BUFFER 0x3086
|
||||
#define EGL_VG_COLORSPACE 0x3087
|
||||
#define EGL_VG_ALPHA_FORMAT 0x3088
|
||||
#define EGL_HORIZONTAL_RESOLUTION 0x3090
|
||||
#define EGL_VERTICAL_RESOLUTION 0x3091
|
||||
#define EGL_PIXEL_ASPECT_RATIO 0x3092
|
||||
#define EGL_SWAP_BEHAVIOR 0x3093
|
||||
#define EGL_MULTISAMPLE_RESOLVE 0x3099
|
||||
|
||||
/* EGL_RENDER_BUFFER values / BindTexImage / ReleaseTexImage buffer targets */
|
||||
#define EGL_BACK_BUFFER 0x3084
|
||||
#define EGL_SINGLE_BUFFER 0x3085
|
||||
|
||||
/* OpenVG color spaces */
|
||||
#define EGL_VG_COLORSPACE_sRGB 0x3089 /* EGL_VG_COLORSPACE value */
|
||||
#define EGL_VG_COLORSPACE_LINEAR 0x308A /* EGL_VG_COLORSPACE value */
|
||||
|
||||
/* OpenVG alpha formats */
|
||||
#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B /* EGL_ALPHA_FORMAT value */
|
||||
#define EGL_VG_ALPHA_FORMAT_PRE 0x308C /* EGL_ALPHA_FORMAT value */
|
||||
|
||||
/* Constant scale factor by which fractional display resolutions &
|
||||
* aspect ratio are scaled when queried as integer values.
|
||||
*/
|
||||
#define EGL_DISPLAY_SCALING 10000
|
||||
|
||||
/* Unknown display resolution/aspect ratio */
|
||||
#define EGL_UNKNOWN ((EGLint)-1)
|
||||
|
||||
/* Back buffer swap behaviors */
|
||||
#define EGL_BUFFER_PRESERVED 0x3094 /* EGL_SWAP_BEHAVIOR value */
|
||||
#define EGL_BUFFER_DESTROYED 0x3095 /* EGL_SWAP_BEHAVIOR value */
|
||||
|
||||
/* CreatePbufferFromClientBuffer buffer types */
|
||||
#define EGL_OPENVG_IMAGE 0x3096
|
||||
|
||||
/* QueryContext targets */
|
||||
#define EGL_CONTEXT_CLIENT_TYPE 0x3097
|
||||
|
||||
/* CreateContext attributes */
|
||||
#define EGL_CONTEXT_CLIENT_VERSION 0x3098
|
||||
|
||||
/* Multisample resolution behaviors */
|
||||
#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A /* EGL_MULTISAMPLE_RESOLVE value */
|
||||
#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B /* EGL_MULTISAMPLE_RESOLVE value */
|
||||
|
||||
/* BindAPI/QueryAPI targets */
|
||||
#define EGL_OPENGL_ES_API 0x30A0
|
||||
#define EGL_OPENVG_API 0x30A1
|
||||
#define EGL_OPENGL_API 0x30A2
|
||||
|
||||
/* GetCurrentSurface targets */
|
||||
#define EGL_DRAW 0x3059
|
||||
#define EGL_READ 0x305A
|
||||
|
||||
/* WaitNative engines */
|
||||
#define EGL_CORE_NATIVE_ENGINE 0x305B
|
||||
|
||||
/* EGL 1.2 tokens renamed for consistency in EGL 1.3 */
|
||||
#define EGL_COLORSPACE EGL_VG_COLORSPACE
|
||||
#define EGL_ALPHA_FORMAT EGL_VG_ALPHA_FORMAT
|
||||
#define EGL_COLORSPACE_sRGB EGL_VG_COLORSPACE_sRGB
|
||||
#define EGL_COLORSPACE_LINEAR EGL_VG_COLORSPACE_LINEAR
|
||||
#define EGL_ALPHA_FORMAT_NONPRE EGL_VG_ALPHA_FORMAT_NONPRE
|
||||
#define EGL_ALPHA_FORMAT_PRE EGL_VG_ALPHA_FORMAT_PRE
|
||||
|
||||
/* EGL extensions must request enum blocks from the Khronos
|
||||
* API Registrar, who maintains the enumerant registry. Submit
|
||||
* a bug in Khronos Bugzilla against task "Registry".
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* EGL Functions */
|
||||
|
||||
EGLAPI EGLint EGLAPIENTRY eglGetError(void);
|
||||
|
||||
EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy);
|
||||
|
||||
EGLAPI const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name);
|
||||
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs(EGLDisplay dpy, EGLConfig *configs,
|
||||
EGLint config_size, EGLint *num_config);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list,
|
||||
EGLConfig *configs, EGLint config_size,
|
||||
EGLint *num_config);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config,
|
||||
EGLint attribute, EGLint *value);
|
||||
|
||||
EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config,
|
||||
EGLNativeWindowType win,
|
||||
const EGLint *attrib_list);
|
||||
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config,
|
||||
const EGLint *attrib_list);
|
||||
EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config,
|
||||
EGLNativePixmapType pixmap,
|
||||
const EGLint *attrib_list);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface,
|
||||
EGLint attribute, EGLint *value);
|
||||
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api);
|
||||
EGLAPI EGLenum EGLAPIENTRY eglQueryAPI(void);
|
||||
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient(void);
|
||||
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread(void);
|
||||
|
||||
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer(
|
||||
EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer,
|
||||
EGLConfig config, const EGLint *attrib_list);
|
||||
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface,
|
||||
EGLint attribute, EGLint value);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
|
||||
|
||||
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval);
|
||||
|
||||
|
||||
EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config,
|
||||
EGLContext share_context,
|
||||
const EGLint *attrib_list);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw,
|
||||
EGLSurface read, EGLContext ctx);
|
||||
|
||||
EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void);
|
||||
EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw);
|
||||
EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx,
|
||||
EGLint attribute, EGLint *value);
|
||||
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface,
|
||||
EGLNativePixmapType target);
|
||||
|
||||
/* This is a generic function pointer type, whose name indicates it must
|
||||
* be cast to the proper type *and calling convention* before use.
|
||||
*/
|
||||
typedef void (*__eglMustCastToProperFunctionPointerType)(void);
|
||||
#define EGL_ALPHA_SIZE 0x3021
|
||||
#define EGL_BAD_ACCESS 0x3002
|
||||
#define EGL_BAD_ALLOC 0x3003
|
||||
#define EGL_BAD_ATTRIBUTE 0x3004
|
||||
#define EGL_BAD_CONFIG 0x3005
|
||||
#define EGL_BAD_CONTEXT 0x3006
|
||||
#define EGL_BAD_CURRENT_SURFACE 0x3007
|
||||
#define EGL_BAD_DISPLAY 0x3008
|
||||
#define EGL_BAD_MATCH 0x3009
|
||||
#define EGL_BAD_NATIVE_PIXMAP 0x300A
|
||||
#define EGL_BAD_NATIVE_WINDOW 0x300B
|
||||
#define EGL_BAD_PARAMETER 0x300C
|
||||
#define EGL_BAD_SURFACE 0x300D
|
||||
#define EGL_BLUE_SIZE 0x3022
|
||||
#define EGL_BUFFER_SIZE 0x3020
|
||||
#define EGL_CONFIG_CAVEAT 0x3027
|
||||
#define EGL_CONFIG_ID 0x3028
|
||||
#define EGL_CORE_NATIVE_ENGINE 0x305B
|
||||
#define EGL_DEPTH_SIZE 0x3025
|
||||
#define EGL_DONT_CARE ((EGLint)-1)
|
||||
#define EGL_DRAW 0x3059
|
||||
#define EGL_EXTENSIONS 0x3055
|
||||
#define EGL_FALSE 0
|
||||
#define EGL_GREEN_SIZE 0x3023
|
||||
#define EGL_HEIGHT 0x3056
|
||||
#define EGL_LARGEST_PBUFFER 0x3058
|
||||
#define EGL_LEVEL 0x3029
|
||||
#define EGL_MAX_PBUFFER_HEIGHT 0x302A
|
||||
#define EGL_MAX_PBUFFER_PIXELS 0x302B
|
||||
#define EGL_MAX_PBUFFER_WIDTH 0x302C
|
||||
#define EGL_NATIVE_RENDERABLE 0x302D
|
||||
#define EGL_NATIVE_VISUAL_ID 0x302E
|
||||
#define EGL_NATIVE_VISUAL_TYPE 0x302F
|
||||
#define EGL_NONE 0x3038
|
||||
#define EGL_NON_CONFORMANT_CONFIG 0x3051
|
||||
#define EGL_NOT_INITIALIZED 0x3001
|
||||
#define EGL_NO_CONTEXT ((EGLContext)0)
|
||||
#define EGL_NO_DISPLAY ((EGLDisplay)0)
|
||||
#define EGL_NO_SURFACE ((EGLSurface)0)
|
||||
#define EGL_PBUFFER_BIT 0x0001
|
||||
#define EGL_PIXMAP_BIT 0x0002
|
||||
#define EGL_READ 0x305A
|
||||
#define EGL_RED_SIZE 0x3024
|
||||
#define EGL_SAMPLES 0x3031
|
||||
#define EGL_SAMPLE_BUFFERS 0x3032
|
||||
#define EGL_SLOW_CONFIG 0x3050
|
||||
#define EGL_STENCIL_SIZE 0x3026
|
||||
#define EGL_SUCCESS 0x3000
|
||||
#define EGL_SURFACE_TYPE 0x3033
|
||||
#define EGL_TRANSPARENT_BLUE_VALUE 0x3035
|
||||
#define EGL_TRANSPARENT_GREEN_VALUE 0x3036
|
||||
#define EGL_TRANSPARENT_RED_VALUE 0x3037
|
||||
#define EGL_TRANSPARENT_RGB 0x3052
|
||||
#define EGL_TRANSPARENT_TYPE 0x3034
|
||||
#define EGL_TRUE 1
|
||||
#define EGL_VENDOR 0x3053
|
||||
#define EGL_VERSION 0x3054
|
||||
#define EGL_WIDTH 0x3057
|
||||
#define EGL_WINDOW_BIT 0x0004
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
|
||||
EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
|
||||
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
|
||||
EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
|
||||
EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
|
||||
EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void);
|
||||
EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw);
|
||||
EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id);
|
||||
EGLAPI EGLint EGLAPIENTRY eglGetError (void);
|
||||
EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
|
||||
EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine);
|
||||
#endif /* EGL_VERSION_1_0 */
|
||||
|
||||
#ifndef EGL_VERSION_1_1
|
||||
#define EGL_VERSION_1_1 1
|
||||
#define EGL_BACK_BUFFER 0x3084
|
||||
#define EGL_BIND_TO_TEXTURE_RGB 0x3039
|
||||
#define EGL_BIND_TO_TEXTURE_RGBA 0x303A
|
||||
#define EGL_CONTEXT_LOST 0x300E
|
||||
#define EGL_MIN_SWAP_INTERVAL 0x303B
|
||||
#define EGL_MAX_SWAP_INTERVAL 0x303C
|
||||
#define EGL_MIPMAP_TEXTURE 0x3082
|
||||
#define EGL_MIPMAP_LEVEL 0x3083
|
||||
#define EGL_NO_TEXTURE 0x305C
|
||||
#define EGL_TEXTURE_2D 0x305F
|
||||
#define EGL_TEXTURE_FORMAT 0x3080
|
||||
#define EGL_TEXTURE_RGB 0x305D
|
||||
#define EGL_TEXTURE_RGBA 0x305E
|
||||
#define EGL_TEXTURE_TARGET 0x3081
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval);
|
||||
#endif /* EGL_VERSION_1_1 */
|
||||
|
||||
#ifndef EGL_VERSION_1_2
|
||||
#define EGL_VERSION_1_2 1
|
||||
typedef unsigned int EGLenum;
|
||||
typedef void *EGLClientBuffer;
|
||||
#define EGL_ALPHA_FORMAT 0x3088
|
||||
#define EGL_ALPHA_FORMAT_NONPRE 0x308B
|
||||
#define EGL_ALPHA_FORMAT_PRE 0x308C
|
||||
#define EGL_ALPHA_MASK_SIZE 0x303E
|
||||
#define EGL_BUFFER_PRESERVED 0x3094
|
||||
#define EGL_BUFFER_DESTROYED 0x3095
|
||||
#define EGL_CLIENT_APIS 0x308D
|
||||
#define EGL_COLORSPACE 0x3087
|
||||
#define EGL_COLORSPACE_sRGB 0x3089
|
||||
#define EGL_COLORSPACE_LINEAR 0x308A
|
||||
#define EGL_COLOR_BUFFER_TYPE 0x303F
|
||||
#define EGL_CONTEXT_CLIENT_TYPE 0x3097
|
||||
#define EGL_DISPLAY_SCALING 10000
|
||||
#define EGL_HORIZONTAL_RESOLUTION 0x3090
|
||||
#define EGL_LUMINANCE_BUFFER 0x308F
|
||||
#define EGL_LUMINANCE_SIZE 0x303D
|
||||
#define EGL_OPENGL_ES_BIT 0x0001
|
||||
#define EGL_OPENVG_BIT 0x0002
|
||||
#define EGL_OPENGL_ES_API 0x30A0
|
||||
#define EGL_OPENVG_API 0x30A1
|
||||
#define EGL_OPENVG_IMAGE 0x3096
|
||||
#define EGL_PIXEL_ASPECT_RATIO 0x3092
|
||||
#define EGL_RENDERABLE_TYPE 0x3040
|
||||
#define EGL_RENDER_BUFFER 0x3086
|
||||
#define EGL_RGB_BUFFER 0x308E
|
||||
#define EGL_SINGLE_BUFFER 0x3085
|
||||
#define EGL_SWAP_BEHAVIOR 0x3093
|
||||
#define EGL_UNKNOWN ((EGLint)-1)
|
||||
#define EGL_VERTICAL_RESOLUTION 0x3091
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api);
|
||||
EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void);
|
||||
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void);
|
||||
#endif /* EGL_VERSION_1_2 */
|
||||
|
||||
#ifndef EGL_VERSION_1_3
|
||||
#define EGL_VERSION_1_3 1
|
||||
#define EGL_CONFORMANT 0x3042
|
||||
#define EGL_CONTEXT_CLIENT_VERSION 0x3098
|
||||
#define EGL_MATCH_NATIVE_PIXMAP 0x3041
|
||||
#define EGL_OPENGL_ES2_BIT 0x0004
|
||||
#define EGL_VG_ALPHA_FORMAT 0x3088
|
||||
#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B
|
||||
#define EGL_VG_ALPHA_FORMAT_PRE 0x308C
|
||||
#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040
|
||||
#define EGL_VG_COLORSPACE 0x3087
|
||||
#define EGL_VG_COLORSPACE_sRGB 0x3089
|
||||
#define EGL_VG_COLORSPACE_LINEAR 0x308A
|
||||
#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020
|
||||
#endif /* EGL_VERSION_1_3 */
|
||||
|
||||
#ifndef EGL_VERSION_1_4
|
||||
#define EGL_VERSION_1_4 1
|
||||
#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0)
|
||||
#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200
|
||||
#define EGL_MULTISAMPLE_RESOLVE 0x3099
|
||||
#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A
|
||||
#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B
|
||||
#define EGL_OPENGL_API 0x30A2
|
||||
#define EGL_OPENGL_BIT 0x0008
|
||||
#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400
|
||||
EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void);
|
||||
#endif /* EGL_VERSION_1_4 */
|
||||
|
||||
#ifndef EGL_VERSION_1_5
|
||||
#define EGL_VERSION_1_5 1
|
||||
typedef void *EGLSync;
|
||||
typedef intptr_t EGLAttrib;
|
||||
typedef khronos_utime_nanoseconds_t EGLTime;
|
||||
typedef void *EGLImage;
|
||||
#define EGL_CONTEXT_MAJOR_VERSION 0x3098
|
||||
#define EGL_CONTEXT_MINOR_VERSION 0x30FB
|
||||
#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD
|
||||
#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD
|
||||
#define EGL_NO_RESET_NOTIFICATION 0x31BE
|
||||
#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF
|
||||
#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001
|
||||
#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002
|
||||
#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0
|
||||
#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1
|
||||
#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2
|
||||
#define EGL_OPENGL_ES3_BIT 0x00000040
|
||||
#define EGL_CL_EVENT_HANDLE 0x309C
|
||||
#define EGL_SYNC_CL_EVENT 0x30FE
|
||||
#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF
|
||||
#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0
|
||||
#define EGL_SYNC_TYPE 0x30F7
|
||||
#define EGL_SYNC_STATUS 0x30F1
|
||||
#define EGL_SYNC_CONDITION 0x30F8
|
||||
#define EGL_SIGNALED 0x30F2
|
||||
#define EGL_UNSIGNALED 0x30F3
|
||||
#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001
|
||||
#define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull
|
||||
#define EGL_TIMEOUT_EXPIRED 0x30F5
|
||||
#define EGL_CONDITION_SATISFIED 0x30F6
|
||||
#define EGL_NO_SYNC ((EGLSync)0)
|
||||
#define EGL_SYNC_FENCE 0x30F9
|
||||
#define EGL_GL_COLORSPACE 0x309D
|
||||
#define EGL_GL_COLORSPACE_SRGB 0x3089
|
||||
#define EGL_GL_COLORSPACE_LINEAR 0x308A
|
||||
#define EGL_GL_RENDERBUFFER 0x30B9
|
||||
#define EGL_GL_TEXTURE_2D 0x30B1
|
||||
#define EGL_GL_TEXTURE_LEVEL 0x30BC
|
||||
#define EGL_GL_TEXTURE_3D 0x30B2
|
||||
#define EGL_GL_TEXTURE_ZOFFSET 0x30BD
|
||||
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3
|
||||
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4
|
||||
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5
|
||||
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6
|
||||
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7
|
||||
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8
|
||||
#define EGL_IMAGE_PRESERVED 0x30D2
|
||||
#define EGL_NO_IMAGE ((EGLImage)0)
|
||||
EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync);
|
||||
EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value);
|
||||
EGLAPI EGLImage EGLAPIENTRY eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage (EGLDisplay dpy, EGLImage image);
|
||||
EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list);
|
||||
EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
|
||||
EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags);
|
||||
#endif /* EGL_VERSION_1_5 */
|
||||
/* Now, define eglGetProcAddress using the generic function ptr. type */
|
||||
EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY
|
||||
eglGetProcAddress(const char *procname);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif /* __egl_h_ */
|
||||
|
@@ -6,7 +6,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2013-2014 The Khronos Group Inc.
|
||||
** Copyright (c) 2013 The Khronos Group Inc.
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person obtaining a
|
||||
** copy of this software and/or associated documentation files (the
|
||||
@@ -33,12 +33,12 @@ extern "C" {
|
||||
** used to make the header, and the header can be found at
|
||||
** http://www.opengl.org/registry/
|
||||
**
|
||||
** Khronos $Revision$ on $Date$
|
||||
** Khronos $Revision: 24567 $ on $Date: 2013-12-18 09:50:17 -0800 (Wed, 18 Dec 2013) $
|
||||
*/
|
||||
|
||||
#include <EGL/eglplatform.h>
|
||||
|
||||
#define EGL_EGLEXT_VERSION 20150508
|
||||
#define EGL_EGLEXT_VERSION 20131218
|
||||
|
||||
/* Generated C header for:
|
||||
* API: egl
|
||||
@@ -94,28 +94,12 @@ EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type,
|
||||
#define EGL_OPENGL_ES3_BIT_KHR 0x00000040
|
||||
#endif /* EGL_KHR_create_context */
|
||||
|
||||
#ifndef EGL_KHR_create_context_no_error
|
||||
#define EGL_KHR_create_context_no_error 1
|
||||
#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3
|
||||
#endif /* EGL_KHR_create_context_no_error */
|
||||
|
||||
#ifndef EGL_KHR_fence_sync
|
||||
#define EGL_KHR_fence_sync 1
|
||||
typedef khronos_utime_nanoseconds_t EGLTimeKHR;
|
||||
#ifdef KHRONOS_SUPPORT_INT64
|
||||
#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0
|
||||
#define EGL_SYNC_CONDITION_KHR 0x30F8
|
||||
#define EGL_SYNC_FENCE_KHR 0x30F9
|
||||
typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
|
||||
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
|
||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||
EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync);
|
||||
EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
|
||||
#endif
|
||||
#endif /* KHRONOS_SUPPORT_INT64 */
|
||||
#endif /* EGL_KHR_fence_sync */
|
||||
|
||||
@@ -223,38 +207,9 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface s
|
||||
#endif
|
||||
#endif /* EGL_KHR_lock_surface3 */
|
||||
|
||||
#ifndef EGL_KHR_partial_update
|
||||
#define EGL_KHR_partial_update 1
|
||||
#define EGL_BUFFER_AGE_KHR 0x313D
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
|
||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglSetDamageRegionKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
|
||||
#endif
|
||||
#endif /* EGL_KHR_partial_update */
|
||||
|
||||
#ifndef EGL_KHR_platform_android
|
||||
#define EGL_KHR_platform_android 1
|
||||
#define EGL_PLATFORM_ANDROID_KHR 0x3141
|
||||
#endif /* EGL_KHR_platform_android */
|
||||
|
||||
#ifndef EGL_KHR_platform_gbm
|
||||
#define EGL_KHR_platform_gbm 1
|
||||
#define EGL_PLATFORM_GBM_KHR 0x31D7
|
||||
#endif /* EGL_KHR_platform_gbm */
|
||||
|
||||
#ifndef EGL_KHR_platform_wayland
|
||||
#define EGL_KHR_platform_wayland 1
|
||||
#define EGL_PLATFORM_WAYLAND_KHR 0x31D8
|
||||
#endif /* EGL_KHR_platform_wayland */
|
||||
|
||||
#ifndef EGL_KHR_platform_x11
|
||||
#define EGL_KHR_platform_x11 1
|
||||
#define EGL_PLATFORM_X11_KHR 0x31D5
|
||||
#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6
|
||||
#endif /* EGL_KHR_platform_x11 */
|
||||
|
||||
#ifndef EGL_KHR_reusable_sync
|
||||
#define EGL_KHR_reusable_sync 1
|
||||
typedef khronos_utime_nanoseconds_t EGLTimeKHR;
|
||||
#ifdef KHRONOS_SUPPORT_INT64
|
||||
#define EGL_SYNC_STATUS_KHR 0x30F1
|
||||
#define EGL_SIGNALED_KHR 0x30F2
|
||||
@@ -266,9 +221,17 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSetDamageRegionKHR (EGLDisplay dpy, EGLSurface
|
||||
#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001
|
||||
#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull
|
||||
#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0)
|
||||
typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
|
||||
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
|
||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||
EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync);
|
||||
EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
|
||||
#endif
|
||||
#endif /* KHRONOS_SUPPORT_INT64 */
|
||||
#endif /* EGL_KHR_reusable_sync */
|
||||
@@ -370,14 +333,6 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy,
|
||||
#define EGL_KHR_surfaceless_context 1
|
||||
#endif /* EGL_KHR_surfaceless_context */
|
||||
|
||||
#ifndef EGL_KHR_swap_buffers_with_damage
|
||||
#define EGL_KHR_swap_buffers_with_damage 1
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
|
||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
|
||||
#endif
|
||||
#endif /* EGL_KHR_swap_buffers_with_damage */
|
||||
|
||||
#ifndef EGL_KHR_vg_parent_image
|
||||
#define EGL_KHR_vg_parent_image 1
|
||||
#define EGL_VG_PARENT_IMAGE_KHR 0x30BA
|
||||
@@ -434,12 +389,6 @@ EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR
|
||||
#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200
|
||||
#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */
|
||||
|
||||
#ifndef EGL_ANGLE_device_d3d
|
||||
#define EGL_ANGLE_device_d3d 1
|
||||
#define EGL_D3D9_DEVICE_ANGLE 0x33A0
|
||||
#define EGL_D3D11_DEVICE_ANGLE 0x33A1
|
||||
#endif /* EGL_ANGLE_device_d3d */
|
||||
|
||||
#ifndef EGL_ANGLE_query_surface_pointer
|
||||
#define EGL_ANGLE_query_surface_pointer 1
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
|
||||
@@ -452,11 +401,6 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
|
||||
#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1
|
||||
#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */
|
||||
|
||||
#ifndef EGL_ANGLE_window_fixed_size
|
||||
#define EGL_ANGLE_window_fixed_size 1
|
||||
#define EGL_FIXED_SIZE_ANGLE 0x3201
|
||||
#endif /* EGL_ANGLE_window_fixed_size */
|
||||
|
||||
#ifndef EGL_ARM_pixmap_multisample_discard
|
||||
#define EGL_ARM_pixmap_multisample_discard 1
|
||||
#define EGL_DISCARD_SAMPLES_ARM 0x3286
|
||||
@@ -479,42 +423,6 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
|
||||
#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF
|
||||
#endif /* EGL_EXT_create_context_robustness */
|
||||
|
||||
#ifndef EGL_EXT_device_base
|
||||
#define EGL_EXT_device_base 1
|
||||
typedef void *EGLDeviceEXT;
|
||||
#define EGL_NO_DEVICE_EXT ((EGLDeviceEXT)(0))
|
||||
#define EGL_BAD_DEVICE_EXT 0x322B
|
||||
#define EGL_DEVICE_EXT 0x322C
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value);
|
||||
typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
|
||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceAttribEXT (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value);
|
||||
EGLAPI const char *EGLAPIENTRY eglQueryDeviceStringEXT (EGLDeviceEXT device, EGLint name);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglQueryDevicesEXT (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
|
||||
#endif
|
||||
#endif /* EGL_EXT_device_base */
|
||||
|
||||
#ifndef EGL_EXT_device_drm
|
||||
#define EGL_EXT_device_drm 1
|
||||
#define EGL_DRM_DEVICE_FILE_EXT 0x3233
|
||||
#endif /* EGL_EXT_device_drm */
|
||||
|
||||
#ifndef EGL_EXT_device_enumeration
|
||||
#define EGL_EXT_device_enumeration 1
|
||||
#endif /* EGL_EXT_device_enumeration */
|
||||
|
||||
#ifndef EGL_EXT_device_openwf
|
||||
#define EGL_EXT_device_openwf 1
|
||||
#define EGL_OPENWF_DEVICE_ID_EXT 0x3237
|
||||
#endif /* EGL_EXT_device_openwf */
|
||||
|
||||
#ifndef EGL_EXT_device_query
|
||||
#define EGL_EXT_device_query 1
|
||||
#endif /* EGL_EXT_device_query */
|
||||
|
||||
#ifndef EGL_EXT_image_dma_buf_import
|
||||
#define EGL_EXT_image_dma_buf_import 1
|
||||
#define EGL_LINUX_DMA_BUF_EXT 0x3270
|
||||
@@ -546,48 +454,6 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint a
|
||||
#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134
|
||||
#endif /* EGL_EXT_multiview_window */
|
||||
|
||||
#ifndef EGL_EXT_output_base
|
||||
#define EGL_EXT_output_base 1
|
||||
typedef void *EGLOutputLayerEXT;
|
||||
typedef void *EGLOutputPortEXT;
|
||||
#define EGL_NO_OUTPUT_LAYER_EXT ((EGLOutputLayerEXT)0)
|
||||
#define EGL_NO_OUTPUT_PORT_EXT ((EGLOutputPortEXT)0)
|
||||
#define EGL_BAD_OUTPUT_LAYER_EXT 0x322D
|
||||
#define EGL_BAD_OUTPUT_PORT_EXT 0x322E
|
||||
#define EGL_SWAP_INTERVAL_EXT 0x322F
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value);
|
||||
typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value);
|
||||
typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name);
|
||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputLayersEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputPortsEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value);
|
||||
EGLAPI const char *EGLAPIENTRY eglQueryOutputLayerStringEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value);
|
||||
EGLAPI const char *EGLAPIENTRY eglQueryOutputPortStringEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name);
|
||||
#endif
|
||||
#endif /* EGL_EXT_output_base */
|
||||
|
||||
#ifndef EGL_EXT_output_drm
|
||||
#define EGL_EXT_output_drm 1
|
||||
#define EGL_DRM_CRTC_EXT 0x3234
|
||||
#define EGL_DRM_PLANE_EXT 0x3235
|
||||
#define EGL_DRM_CONNECTOR_EXT 0x3236
|
||||
#endif /* EGL_EXT_output_drm */
|
||||
|
||||
#ifndef EGL_EXT_output_openwf
|
||||
#define EGL_EXT_output_openwf 1
|
||||
#define EGL_OPENWF_PIPELINE_ID_EXT 0x3238
|
||||
#define EGL_OPENWF_PORT_ID_EXT 0x3239
|
||||
#endif /* EGL_EXT_output_openwf */
|
||||
|
||||
#ifndef EGL_EXT_platform_base
|
||||
#define EGL_EXT_platform_base 1
|
||||
typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list);
|
||||
@@ -600,11 +466,6 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy,
|
||||
#endif
|
||||
#endif /* EGL_EXT_platform_base */
|
||||
|
||||
#ifndef EGL_EXT_platform_device
|
||||
#define EGL_EXT_platform_device 1
|
||||
#define EGL_PLATFORM_DEVICE_EXT 0x313F
|
||||
#endif /* EGL_EXT_platform_device */
|
||||
|
||||
#ifndef EGL_EXT_platform_wayland
|
||||
#define EGL_EXT_platform_wayland 1
|
||||
#define EGL_PLATFORM_WAYLAND_EXT 0x31D8
|
||||
@@ -616,19 +477,6 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy,
|
||||
#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6
|
||||
#endif /* EGL_EXT_platform_x11 */
|
||||
|
||||
#ifndef EGL_EXT_protected_surface
|
||||
#define EGL_EXT_protected_surface 1
|
||||
#define EGL_PROTECTED_CONTENT_EXT 0x32C0
|
||||
#endif /* EGL_EXT_protected_surface */
|
||||
|
||||
#ifndef EGL_EXT_stream_consumer_egloutput
|
||||
#define EGL_EXT_stream_consumer_egloutput 1
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer);
|
||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerOutputEXT (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer);
|
||||
#endif
|
||||
#endif /* EGL_EXT_stream_consumer_egloutput */
|
||||
|
||||
#ifndef EGL_EXT_swap_buffers_with_damage
|
||||
#define EGL_EXT_swap_buffers_with_damage 1
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
|
||||
@@ -637,35 +485,6 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSu
|
||||
#endif
|
||||
#endif /* EGL_EXT_swap_buffers_with_damage */
|
||||
|
||||
#ifndef EGL_EXT_yuv_surface
|
||||
#define EGL_EXT_yuv_surface 1
|
||||
#define EGL_YUV_ORDER_EXT 0x3301
|
||||
#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311
|
||||
#define EGL_YUV_SUBSAMPLE_EXT 0x3312
|
||||
#define EGL_YUV_DEPTH_RANGE_EXT 0x3317
|
||||
#define EGL_YUV_CSC_STANDARD_EXT 0x330A
|
||||
#define EGL_YUV_PLANE_BPP_EXT 0x331A
|
||||
#define EGL_YUV_BUFFER_EXT 0x3300
|
||||
#define EGL_YUV_ORDER_YUV_EXT 0x3302
|
||||
#define EGL_YUV_ORDER_YVU_EXT 0x3303
|
||||
#define EGL_YUV_ORDER_YUYV_EXT 0x3304
|
||||
#define EGL_YUV_ORDER_UYVY_EXT 0x3305
|
||||
#define EGL_YUV_ORDER_YVYU_EXT 0x3306
|
||||
#define EGL_YUV_ORDER_VYUY_EXT 0x3307
|
||||
#define EGL_YUV_ORDER_AYUV_EXT 0x3308
|
||||
#define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313
|
||||
#define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314
|
||||
#define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315
|
||||
#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318
|
||||
#define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319
|
||||
#define EGL_YUV_CSC_STANDARD_601_EXT 0x330B
|
||||
#define EGL_YUV_CSC_STANDARD_709_EXT 0x330C
|
||||
#define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D
|
||||
#define EGL_YUV_PLANE_BPP_0_EXT 0x331B
|
||||
#define EGL_YUV_PLANE_BPP_8_EXT 0x331C
|
||||
#define EGL_YUV_PLANE_BPP_10_EXT 0x331D
|
||||
#endif /* EGL_EXT_yuv_surface */
|
||||
|
||||
#ifndef EGL_HI_clientpixmap
|
||||
#define EGL_HI_clientpixmap 1
|
||||
struct EGLClientPixmapHI {
|
||||
@@ -714,42 +533,11 @@ EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR
|
||||
#endif
|
||||
#endif /* EGL_MESA_drm_image */
|
||||
|
||||
#ifndef EGL_MESA_image_dma_buf_export
|
||||
#define EGL_MESA_image_dma_buf_export 1
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
|
||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
|
||||
#endif
|
||||
#endif /* EGL_MESA_image_dma_buf_export */
|
||||
|
||||
#ifndef EGL_MESA_platform_gbm
|
||||
#define EGL_MESA_platform_gbm 1
|
||||
#define EGL_PLATFORM_GBM_MESA 0x31D7
|
||||
#endif /* EGL_MESA_platform_gbm */
|
||||
|
||||
#ifndef EGL_NOK_swap_region
|
||||
#define EGL_NOK_swap_region 1
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
|
||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
|
||||
#endif
|
||||
#endif /* EGL_NOK_swap_region */
|
||||
|
||||
#ifndef EGL_NOK_swap_region2
|
||||
#define EGL_NOK_swap_region2 1
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
|
||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
|
||||
#endif
|
||||
#endif /* EGL_NOK_swap_region2 */
|
||||
|
||||
#ifndef EGL_NOK_texture_from_pixmap
|
||||
#define EGL_NOK_texture_from_pixmap 1
|
||||
#define EGL_Y_INVERTED_NOK 0x307F
|
||||
#endif /* EGL_NOK_texture_from_pixmap */
|
||||
|
||||
#ifndef EGL_NV_3dvision_surface
|
||||
#define EGL_NV_3dvision_surface 1
|
||||
#define EGL_AUTO_STEREO_NV 0x3136
|
||||
@@ -768,13 +556,6 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurfa
|
||||
#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133
|
||||
#endif /* EGL_NV_coverage_sample_resolve */
|
||||
|
||||
#ifndef EGL_NV_cuda_event
|
||||
#define EGL_NV_cuda_event 1
|
||||
#define EGL_CUDA_EVENT_HANDLE_NV 0x323B
|
||||
#define EGL_SYNC_CUDA_EVENT_NV 0x323C
|
||||
#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D
|
||||
#endif /* EGL_NV_cuda_event */
|
||||
|
||||
#ifndef EGL_NV_depth_nonlinear
|
||||
#define EGL_NV_depth_nonlinear 1
|
||||
#define EGL_DEPTH_ENCODING_NV 0x30E2
|
||||
@@ -782,11 +563,6 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurfa
|
||||
#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3
|
||||
#endif /* EGL_NV_depth_nonlinear */
|
||||
|
||||
#ifndef EGL_NV_device_cuda
|
||||
#define EGL_NV_device_cuda 1
|
||||
#define EGL_CUDA_DEVICE_NV 0x323A
|
||||
#endif /* EGL_NV_device_cuda */
|
||||
|
||||
#ifndef EGL_NV_native_query
|
||||
#define EGL_NV_native_query 1
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id);
|
||||
@@ -869,16 +645,6 @@ EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void);
|
||||
#endif /* KHRONOS_SUPPORT_INT64 */
|
||||
#endif /* EGL_NV_system_time */
|
||||
|
||||
#ifndef EGL_TIZEN_image_native_buffer
|
||||
#define EGL_TIZEN_image_native_buffer 1
|
||||
#define EGL_NATIVE_BUFFER_TIZEN 0x32A0
|
||||
#endif /* EGL_TIZEN_image_native_buffer */
|
||||
|
||||
#ifndef EGL_TIZEN_image_native_surface
|
||||
#define EGL_TIZEN_image_native_surface 1
|
||||
#define EGL_NATIVE_SURFACE_TIZEN 0x32A1
|
||||
#endif /* EGL_TIZEN_image_native_surface */
|
||||
|
||||
#include <EGL/eglmesaext.h>
|
||||
#include <EGL/eglextchromium.h>
|
||||
|
||||
|
@@ -87,14 +87,45 @@ typedef struct wl_buffer * (EGLAPIENTRYP PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWL) (
|
||||
|
||||
#endif
|
||||
|
||||
/* remnant of EGL_NOK_swap_region kept for compatibility because of a non-standard type name */
|
||||
#ifndef EGL_NOK_swap_region
|
||||
#define EGL_NOK_swap_region 1
|
||||
|
||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint* rects);
|
||||
#endif
|
||||
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOK) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint* rects);
|
||||
#endif
|
||||
|
||||
#ifndef EGL_NOK_texture_from_pixmap
|
||||
#define EGL_NOK_texture_from_pixmap 1
|
||||
|
||||
#define EGL_Y_INVERTED_NOK 0x307F
|
||||
#endif /* EGL_NOK_texture_from_pixmap */
|
||||
|
||||
#ifndef EGL_ANDROID_image_native_buffer
|
||||
#define EGL_ANDROID_image_native_buffer 1
|
||||
#define EGL_NATIVE_BUFFER_ANDROID 0x3140 /* eglCreateImageKHR target */
|
||||
#endif
|
||||
|
||||
#ifndef EGL_MESA_configless_context
|
||||
#define EGL_MESA_configless_context 1
|
||||
#define EGL_NO_CONFIG_MESA ((EGLConfig)0)
|
||||
#endif
|
||||
|
||||
#if KHRONOS_SUPPORT_INT64
|
||||
#ifndef EGL_MESA_image_dma_buf_export
|
||||
#define EGL_MESA_image_dma_buf_export 1
|
||||
#ifdef EGL_EGLEXT_PROTOTYPES
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *fourcc, EGLint *nplanes, EGLuint64KHR *modifiers);
|
||||
EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESA) (EGLDisplay dpy, EGLImageKHR image, EGLint *fourcc, EGLint *nplanes, EGLuint64KHR *modifiers);
|
||||
typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESA) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
|
||||
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@@ -2,7 +2,7 @@
|
||||
#define __eglplatform_h_
|
||||
|
||||
/*
|
||||
** Copyright (c) 2007-2013 The Khronos Group Inc.
|
||||
** Copyright (c) 2007-2009 The Khronos Group Inc.
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person obtaining a
|
||||
** copy of this software and/or associated documentation files (the
|
||||
@@ -25,7 +25,7 @@
|
||||
*/
|
||||
|
||||
/* Platform-specific types and definitions for egl.h
|
||||
* $Revision: 30994 $ on $Date: 2015-04-30 13:36:48 -0700 (Thu, 30 Apr 2015) $
|
||||
* $Revision: 12306 $ on $Date: 2010-08-25 09:51:28 -0700 (Wed, 25 Aug 2010) $
|
||||
*
|
||||
* Adopters may modify khrplatform.h and this file to suit their platform.
|
||||
* You are encouraged to submit all modifications to the Khronos group so that
|
||||
@@ -77,7 +77,7 @@ typedef HDC EGLNativeDisplayType;
|
||||
typedef HBITMAP EGLNativePixmapType;
|
||||
typedef HWND EGLNativeWindowType;
|
||||
|
||||
#elif defined(__APPLE__) || defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
|
||||
#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
|
||||
|
||||
typedef int EGLNativeDisplayType;
|
||||
typedef void *EGLNativeWindowType;
|
||||
@@ -95,15 +95,14 @@ typedef struct gbm_device *EGLNativeDisplayType;
|
||||
typedef struct gbm_bo *EGLNativePixmapType;
|
||||
typedef void *EGLNativeWindowType;
|
||||
|
||||
#elif defined(__ANDROID__) || defined(ANDROID)
|
||||
|
||||
#include <android/native_window.h>
|
||||
#elif defined(ANDROID) /* Android */
|
||||
|
||||
struct ANativeWindow;
|
||||
struct egl_native_pixmap_t;
|
||||
|
||||
typedef struct ANativeWindow* EGLNativeWindowType;
|
||||
typedef struct egl_native_pixmap_t* EGLNativePixmapType;
|
||||
typedef void* EGLNativeDisplayType;
|
||||
typedef struct ANativeWindow *EGLNativeWindowType;
|
||||
typedef struct egl_native_pixmap_t *EGLNativePixmapType;
|
||||
typedef void *EGLNativeDisplayType;
|
||||
|
||||
#elif defined(__unix__)
|
||||
|
||||
@@ -132,7 +131,9 @@ typedef khronos_uintptr_t EGLNativePixmapType;
|
||||
typedef khronos_uintptr_t EGLNativeWindowType;
|
||||
|
||||
#else
|
||||
|
||||
#error "Platform not recognized"
|
||||
|
||||
#endif
|
||||
|
||||
/* EGL 1.2 types, renamed for consistency in EGL 1.3 */
|
||||
|
@@ -1180,7 +1180,8 @@ enum __DRIChromaSiting {
|
||||
};
|
||||
|
||||
/**
|
||||
* \name Reasons that __DRIimageExtensionRec::createImageFromTexture might fail
|
||||
* \name Reasons that __DRIimageExtensionRec::createImageFromTexture or
|
||||
* __DRIimageExtensionRec::createImageFromDmaBufs might fail
|
||||
*/
|
||||
/*@{*/
|
||||
/** Success! */
|
||||
@@ -1189,11 +1190,14 @@ enum __DRIChromaSiting {
|
||||
/** Memory allocation failure */
|
||||
#define __DRI_IMAGE_ERROR_BAD_ALLOC 1
|
||||
|
||||
/** Client requested an invalid attribute for a texture object */
|
||||
/** Client requested an invalid attribute */
|
||||
#define __DRI_IMAGE_ERROR_BAD_MATCH 2
|
||||
|
||||
/** Client requested an invalid texture object */
|
||||
#define __DRI_IMAGE_ERROR_BAD_PARAMETER 3
|
||||
|
||||
/** Client requested an invalid pitch and/or offset */
|
||||
#define __DRI_IMAGE_ERROR_BAD_ACCESS 4
|
||||
/*@}*/
|
||||
|
||||
/**
|
||||
|
@@ -26,7 +26,7 @@
|
||||
|
||||
/* Khronos platform-specific types and definitions.
|
||||
*
|
||||
* $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $
|
||||
* $Revision: 9356 $ on $Date: 2009-10-21 02:52:25 -0700 (Wed, 21 Oct 2009) $
|
||||
*
|
||||
* Adopters may modify this file to suit their platform. Adopters are
|
||||
* encouraged to submit platform specific modifications to the Khronos
|
||||
@@ -106,9 +106,9 @@
|
||||
#elif defined (__SYMBIAN32__)
|
||||
# define KHRONOS_APICALL IMPORT_C
|
||||
#elif (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303) \
|
||||
|| (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
|
||||
|| (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
|
||||
/* KHRONOS_APIATTRIBUTES is not used by the client API headers yet */
|
||||
# define KHRONOS_APICALL __attribute__((visibility("default")))
|
||||
# define KHRONOS_APICALL __attribute__((visibility("default")))
|
||||
#else
|
||||
# define KHRONOS_APICALL
|
||||
#endif
|
||||
@@ -229,23 +229,10 @@ typedef signed char khronos_int8_t;
|
||||
typedef unsigned char khronos_uint8_t;
|
||||
typedef signed short int khronos_int16_t;
|
||||
typedef unsigned short int khronos_uint16_t;
|
||||
|
||||
/*
|
||||
* Types that differ between LLP64 and LP64 architectures - in LLP64,
|
||||
* pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
|
||||
* to be the only LLP64 architecture in current use.
|
||||
*/
|
||||
#ifdef _WIN64
|
||||
typedef signed long long int khronos_intptr_t;
|
||||
typedef unsigned long long int khronos_uintptr_t;
|
||||
typedef signed long long int khronos_ssize_t;
|
||||
typedef unsigned long long int khronos_usize_t;
|
||||
#else
|
||||
typedef signed long int khronos_intptr_t;
|
||||
typedef unsigned long int khronos_uintptr_t;
|
||||
typedef signed long int khronos_ssize_t;
|
||||
typedef unsigned long int khronos_usize_t;
|
||||
#endif
|
||||
|
||||
#if KHRONOS_SUPPORT_FLOAT
|
||||
/*
|
||||
|
@@ -63,6 +63,7 @@ CHIPSET(0x6608, OLAND_6608, OLAND)
|
||||
CHIPSET(0x6610, OLAND_6610, OLAND)
|
||||
CHIPSET(0x6611, OLAND_6611, OLAND)
|
||||
CHIPSET(0x6613, OLAND_6613, OLAND)
|
||||
CHIPSET(0x6617, OLAND_6617, OLAND)
|
||||
CHIPSET(0x6620, OLAND_6620, OLAND)
|
||||
CHIPSET(0x6621, OLAND_6621, OLAND)
|
||||
CHIPSET(0x6623, OLAND_6623, OLAND)
|
||||
|
@@ -1,90 +0,0 @@
|
||||
//
|
||||
// File: vk_platform.h
|
||||
//
|
||||
/*
|
||||
** Copyright (c) 2014-2015 The Khronos Group Inc.
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person obtaining a
|
||||
** copy of this software and/or associated documentation files (the
|
||||
** "Materials"), to deal in the Materials without restriction, including
|
||||
** without limitation the rights to use, copy, modify, merge, publish,
|
||||
** distribute, sublicense, and/or sell copies of the Materials, and to
|
||||
** permit persons to whom the Materials are furnished to do so, subject to
|
||||
** the following conditions:
|
||||
**
|
||||
** The above copyright notice and this permission notice shall be included
|
||||
** in all copies or substantial portions of the Materials.
|
||||
**
|
||||
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __VK_PLATFORM_H__
|
||||
#define __VK_PLATFORM_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif // __cplusplus
|
||||
|
||||
/*
|
||||
***************************************************************************************************
|
||||
* Platform-specific directives and type declarations
|
||||
***************************************************************************************************
|
||||
*/
|
||||
|
||||
#if defined(_WIN32)
|
||||
// On Windows, VKAPI should equate to the __stdcall convention
|
||||
#define VKAPI __stdcall
|
||||
#elif defined(__GNUC__)
|
||||
// On other platforms using GCC, VKAPI stays undefined
|
||||
#define VKAPI
|
||||
#else
|
||||
// Unsupported Platform!
|
||||
#error "Unsupported OS Platform detected!"
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#if !defined(VK_NO_STDINT_H)
|
||||
#if defined(_MSC_VER) && (_MSC_VER < 1600)
|
||||
typedef signed __int8 int8_t;
|
||||
typedef unsigned __int8 uint8_t;
|
||||
typedef signed __int16 int16_t;
|
||||
typedef unsigned __int16 uint16_t;
|
||||
typedef signed __int32 int32_t;
|
||||
typedef unsigned __int32 uint32_t;
|
||||
typedef signed __int64 int64_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#endif // !defined(VK_NO_STDINT_H)
|
||||
|
||||
typedef uint64_t VkDeviceSize;
|
||||
typedef uint32_t VkBool32;
|
||||
|
||||
typedef uint32_t VkSampleMask;
|
||||
typedef uint32_t VkFlags;
|
||||
|
||||
#if (UINTPTR_MAX >= UINT64_MAX)
|
||||
#define VK_UINTPTRLEAST64_MAX UINTPTR_MAX
|
||||
|
||||
typedef uintptr_t VkUintPtrLeast64;
|
||||
#else
|
||||
#define VK_UINTPTRLEAST64_MAX UINT64_MAX
|
||||
|
||||
typedef uint64_t VkUintPtrLeast64;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // __VK_PLATFORM_H__
|
@@ -1,212 +0,0 @@
|
||||
//
|
||||
// File: vk_wsi_display.h
|
||||
//
|
||||
/*
|
||||
** Copyright (c) 2014 The Khronos Group Inc.
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person obtaining a
|
||||
** copy of this software and/or associated documentation files (the
|
||||
** "Materials"), to deal in the Materials without restriction, including
|
||||
** without limitation the rights to use, copy, modify, merge, publish,
|
||||
** distribute, sublicense, and/or sell copies of the Materials, and to
|
||||
** permit persons to whom the Materials are furnished to do so, subject to
|
||||
** the following conditions:
|
||||
**
|
||||
** The above copyright notice and this permission notice shall be included
|
||||
** in all copies or substantial portions of the Materials.
|
||||
**
|
||||
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||
*/
|
||||
|
||||
#ifndef __VK_WSI_LUNARG_H__
|
||||
#define __VK_WSI_LUNARG_H__
|
||||
|
||||
#include "vulkan.h"
|
||||
|
||||
#define VK_WSI_LUNARG_REVISION 3
|
||||
#define VK_WSI_LUNARG_EXTENSION_NUMBER 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif // __cplusplus
|
||||
|
||||
// This macro defines INT_MAX in enumerations to force compilers to use 32 bits
|
||||
// to represent them. This may or may not be necessary on some compilers. The
|
||||
// option to compile it out may allow compilers that warn about missing enumerants
|
||||
// in switch statements to be silenced.
|
||||
// Using this macro is not needed for flag bit enums because those aren't used
|
||||
// as storage type anywhere.
|
||||
#define VK_MAX_ENUM(Prefix) VK_##Prefix##_MAX_ENUM = 0x7FFFFFFF
|
||||
|
||||
// This macro defines the BEGIN_RANGE, END_RANGE, NUM, and MAX_ENUM constants for
|
||||
// the enumerations.
|
||||
#define VK_ENUM_RANGE(Prefix, First, Last) \
|
||||
VK_##Prefix##_BEGIN_RANGE = VK_##Prefix##_##First, \
|
||||
VK_##Prefix##_END_RANGE = VK_##Prefix##_##Last, \
|
||||
VK_NUM_##Prefix = (VK_##Prefix##_END_RANGE - VK_##Prefix##_BEGIN_RANGE + 1), \
|
||||
VK_MAX_ENUM(Prefix)
|
||||
|
||||
// This is a helper macro to define the value of flag bit enum values.
|
||||
#define VK_BIT(bit) (1 << (bit))
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Objects
|
||||
|
||||
VK_DEFINE_HANDLE(VkDisplayWSI)
|
||||
VK_DEFINE_HANDLE(VkSwapChainWSI)
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Enumeration constants
|
||||
|
||||
#define VK_WSI_LUNARG_ENUM(type,id) ((type)(VK_WSI_LUNARG_EXTENSION_NUMBER * -1000 + (id)))
|
||||
|
||||
// Extend VkPhysicalDeviceInfoType enum with extension specific constants
|
||||
#define VK_PHYSICAL_DEVICE_INFO_TYPE_DISPLAY_PROPERTIES_WSI VK_WSI_LUNARG_ENUM(VkPhysicalDeviceInfoType, 0)
|
||||
#define VK_PHYSICAL_DEVICE_INFO_TYPE_QUEUE_PRESENT_PROPERTIES_WSI VK_WSI_LUNARG_ENUM(VkPhysicalDeviceInfoType, 1)
|
||||
|
||||
// Extend VkStructureType enum with extension specific constants
|
||||
#define VK_STRUCTURE_TYPE_SWAP_CHAIN_CREATE_INFO_WSI VK_WSI_LUNARG_ENUM(VkStructureType, 0)
|
||||
#define VK_STRUCTURE_TYPE_PRESENT_INFO_WSI VK_WSI_LUNARG_ENUM(VkStructureType, 1)
|
||||
|
||||
// Extend VkImageLayout enum with extension specific constants
|
||||
#define VK_IMAGE_LAYOUT_PRESENT_SOURCE_WSI VK_WSI_LUNARG_ENUM(VkImageLayout, 0)
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Enumerations
|
||||
|
||||
typedef enum VkDisplayInfoTypeWSI_
|
||||
{
|
||||
// Info type for vkGetDisplayInfo()
|
||||
VK_DISPLAY_INFO_TYPE_FORMAT_PROPERTIES_WSI = 0x00000003, // Return the VkFormat(s) supported for swap chains with the display
|
||||
|
||||
VK_ENUM_RANGE(DISPLAY_INFO_TYPE, FORMAT_PROPERTIES_WSI, FORMAT_PROPERTIES_WSI)
|
||||
} VkDisplayInfoTypeWSI;
|
||||
|
||||
typedef enum VkSwapChainInfoTypeWSI_
|
||||
{
|
||||
// Info type for vkGetSwapChainInfo()
|
||||
VK_SWAP_CHAIN_INFO_TYPE_PERSISTENT_IMAGES_WSI = 0x00000000, // Return information about the persistent images of the swapchain
|
||||
|
||||
VK_ENUM_RANGE(SWAP_CHAIN_INFO_TYPE, PERSISTENT_IMAGES_WSI, PERSISTENT_IMAGES_WSI)
|
||||
} VkSwapChainInfoTypeWSI;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Flags
|
||||
|
||||
typedef VkFlags VkSwapModeFlagsWSI;
|
||||
typedef enum VkSwapModeFlagBitsWSI_
|
||||
{
|
||||
VK_SWAP_MODE_FLIP_BIT_WSI = VK_BIT(0),
|
||||
VK_SWAP_MODE_BLIT_BIT_WSI = VK_BIT(1),
|
||||
} VkSwapModeFlagBitsWSI;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Structures
|
||||
|
||||
typedef struct VkDisplayPropertiesWSI_
|
||||
{
|
||||
VkDisplayWSI display; // Handle of the display object
|
||||
VkExtent2D physicalResolution; // Max resolution for CRT?
|
||||
} VkDisplayPropertiesWSI;
|
||||
|
||||
typedef struct VkDisplayFormatPropertiesWSI_
|
||||
{
|
||||
VkFormat swapChainFormat; // Format of the images of the swap chain
|
||||
} VkDisplayFormatPropertiesWSI;
|
||||
|
||||
typedef struct VkSwapChainCreateInfoWSI_
|
||||
{
|
||||
VkStructureType sType; // Must be VK_STRUCTURE_TYPE_SWAP_CHAIN_CREATE_INFO_WSI
|
||||
const void* pNext; // Pointer to next structure
|
||||
|
||||
// TBD: It is not yet clear what the use will be for the following two
|
||||
// values. It seems to be needed for more-global window-system handles
|
||||
// (e.g. X11 display). If not needed for the SDK, we will drop it from
|
||||
// this extension, and from a future version of this header.
|
||||
const void* pNativeWindowSystemHandle; // Pointer to native window system handle
|
||||
const void* pNativeWindowHandle; // Pointer to native window handle
|
||||
|
||||
uint32_t displayCount; // Number of displays the swap chain is created for
|
||||
const VkDisplayWSI* pDisplays; // displayCount number of display objects the swap chain is created for
|
||||
|
||||
uint32_t imageCount; // Number of images in the swap chain
|
||||
|
||||
VkFormat imageFormat; // Format of the images of the swap chain
|
||||
VkExtent2D imageExtent; // Width and height of the images of the swap chain
|
||||
uint32_t imageArraySize; // Number of layers of the images of the swap chain (needed for multi-view rendering)
|
||||
VkFlags imageUsageFlags; // Usage flags for the images of the swap chain (see VkImageUsageFlags)
|
||||
|
||||
VkFlags swapModeFlags; // Allowed swap modes (see VkSwapModeFlagsWSI)
|
||||
} VkSwapChainCreateInfoWSI;
|
||||
|
||||
typedef struct VkSwapChainImageInfoWSI_
|
||||
{
|
||||
VkImage image; // Persistent swap chain image handle
|
||||
VkDeviceMemory memory; // Persistent swap chain image's memory handle
|
||||
} VkSwapChainImageInfoWSI;
|
||||
|
||||
typedef struct VkPhysicalDeviceQueuePresentPropertiesWSI_
|
||||
{
|
||||
VkBool32 supportsPresent; // Tells whether the queue supports presenting
|
||||
} VkPhysicalDeviceQueuePresentPropertiesWSI;
|
||||
|
||||
typedef struct VkPresentInfoWSI_
|
||||
{
|
||||
VkStructureType sType; // Must be VK_STRUCTURE_TYPE_PRESENT_INFO_WSI
|
||||
const void* pNext; // Pointer to next structure
|
||||
VkImage image; // Image to present
|
||||
uint32_t flipInterval; // Flip interval
|
||||
} VkPresentInfoWSI;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Function types
|
||||
|
||||
typedef VkResult (VKAPI *PFN_vkGetDisplayInfoWSI)(VkDisplayWSI display, VkDisplayInfoTypeWSI infoType, size_t* pDataSize, void* pData);
|
||||
typedef VkResult (VKAPI *PFN_vkCreateSwapChainWSI)(VkDevice device, const VkSwapChainCreateInfoWSI* pCreateInfo, VkSwapChainWSI* pSwapChain);
|
||||
typedef VkResult (VKAPI *PFN_vkDestroySwapChainWSI)(VkSwapChainWSI swapChain);
|
||||
typedef VkResult (VKAPI *PFN_vkGetSwapChainInfoWSI)(VkSwapChainWSI swapChain, VkSwapChainInfoTypeWSI infoType, size_t* pDataSize, void* pData);
|
||||
typedef VkResult (VKAPI *PFN_vkQueuePresentWSI)(VkQueue queue, const VkPresentInfoWSI* pPresentInfo);
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Function prototypes
|
||||
|
||||
#ifdef VK_PROTOTYPES
|
||||
|
||||
VkResult VKAPI vkGetDisplayInfoWSI(
|
||||
VkDisplayWSI display,
|
||||
VkDisplayInfoTypeWSI infoType,
|
||||
size_t* pDataSize,
|
||||
void* pData);
|
||||
|
||||
VkResult VKAPI vkCreateSwapChainWSI(
|
||||
VkDevice device,
|
||||
const VkSwapChainCreateInfoWSI* pCreateInfo,
|
||||
VkSwapChainWSI* pSwapChain);
|
||||
|
||||
VkResult VKAPI vkDestroySwapChainWSI(
|
||||
VkSwapChainWSI swapChain);
|
||||
|
||||
VkResult VKAPI vkGetSwapChainInfoWSI(
|
||||
VkSwapChainWSI swapChain,
|
||||
VkSwapChainInfoTypeWSI infoType,
|
||||
size_t* pDataSize,
|
||||
void* pData);
|
||||
|
||||
VkResult VKAPI vkQueuePresentWSI(
|
||||
VkQueue queue,
|
||||
const VkPresentInfoWSI* pPresentInfo);
|
||||
|
||||
#endif // VK_PROTOTYPES
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // __VK_WSI_LUNARG_H__
|
File diff suppressed because it is too large
Load Diff
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
* Copyright © 2015 Intel Corporation
|
||||
*
|
||||
* 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 and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef __VULKAN_INTEL_H__
|
||||
#define __VULKAN_INTEL_H__
|
||||
|
||||
#include "vulkan.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif // __cplusplus
|
||||
|
||||
#define VK_STRUCTURE_TYPE_DMA_BUF_IMAGE_CREATE_INFO_INTEL 1024
|
||||
typedef struct VkDmaBufImageCreateInfo_
|
||||
{
|
||||
VkStructureType sType; // Must be VK_STRUCTURE_TYPE_DMA_BUF_IMAGE_CREATE_INFO_INTEL
|
||||
const void* pNext; // Pointer to next structure.
|
||||
int fd;
|
||||
VkFormat format;
|
||||
VkExtent3D extent; // Depth must be 1
|
||||
uint32_t strideInBytes;
|
||||
} VkDmaBufImageCreateInfo;
|
||||
|
||||
typedef VkResult (VKAPI *PFN_vkCreateDmaBufImageINTEL)(VkDevice device, const VkDmaBufImageCreateInfo* pCreateInfo, VkDeviceMemory* pMem, VkImage* pImage);
|
||||
|
||||
#ifdef VK_PROTOTYPES
|
||||
|
||||
VkResult VKAPI vkCreateDmaBufImageINTEL(
|
||||
VkDevice _device,
|
||||
const VkDmaBufImageCreateInfo* pCreateInfo,
|
||||
VkDeviceMemory* pMem,
|
||||
VkImage* pImage);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // __VULKAN_INTEL_H__
|
@@ -120,7 +120,6 @@ def generate(env):
|
||||
])
|
||||
elif llvm_version >= distutils.version.LooseVersion('3.5'):
|
||||
env.Prepend(LIBS = [
|
||||
'LLVMMCDisassembler',
|
||||
'LLVMBitWriter', 'LLVMMCJIT', 'LLVMRuntimeDyld',
|
||||
'LLVMX86Disassembler', 'LLVMX86AsmParser', 'LLVMX86CodeGen',
|
||||
'LLVMSelectionDAG', 'LLVMAsmPrinter', 'LLVMX86Desc',
|
||||
@@ -133,7 +132,6 @@ def generate(env):
|
||||
])
|
||||
else:
|
||||
env.Prepend(LIBS = [
|
||||
'LLVMMCDisassembler',
|
||||
'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser',
|
||||
'LLVMX86CodeGen', 'LLVMX86Desc', 'LLVMSelectionDAG',
|
||||
'LLVMAsmPrinter', 'LLVMMCParser', 'LLVMX86AsmPrinter',
|
||||
@@ -191,7 +189,7 @@ def generate(env):
|
||||
if '-fno-rtti' in cxxflags:
|
||||
env.Append(CXXFLAGS = ['-fno-rtti'])
|
||||
|
||||
components = ['engine', 'mcjit', 'bitwriter', 'x86asmprinter', 'mcdisassembler']
|
||||
components = ['engine', 'mcjit', 'bitwriter', 'x86asmprinter']
|
||||
|
||||
env.ParseConfig('llvm-config --libs ' + ' '.join(components))
|
||||
env.ParseConfig('llvm-config --ldflags')
|
||||
|
@@ -61,10 +61,6 @@ EXTRA_DIST = \
|
||||
AM_CFLAGS = $(VISIBILITY_CFLAGS)
|
||||
AM_CXXFLAGS = $(VISIBILITY_CXXFLAGS)
|
||||
|
||||
if HAVE_VULKAN
|
||||
SUBDIRS += vulkan
|
||||
endif
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/include/ \
|
||||
-I$(top_srcdir)/src/mapi/ \
|
||||
|
@@ -36,7 +36,6 @@ LOCAL_CFLAGS := \
|
||||
-DHAVE_ANDROID_PLATFORM
|
||||
|
||||
ifeq ($(MESA_LOLLIPOP_BUILD),true)
|
||||
LOCAL_CFLAGS_arm := -DDEFAULT_DRIVER_DIR=\"/system/lib/dri\"
|
||||
LOCAL_CFLAGS_x86 := -DDEFAULT_DRIVER_DIR=\"/system/lib/dri\"
|
||||
LOCAL_CFLAGS_x86_64 := -DDEFAULT_DRIVER_DIR=\"/system/lib64/dri\"
|
||||
else
|
||||
@@ -46,6 +45,7 @@ endif
|
||||
LOCAL_C_INCLUDES := \
|
||||
$(MESA_TOP)/src/mapi \
|
||||
$(MESA_TOP)/src/egl/main \
|
||||
$(MESA_TOP)/src/loader \
|
||||
$(DRM_GRALLOC_TOP)
|
||||
|
||||
LOCAL_STATIC_LIBRARIES := \
|
||||
|
@@ -65,9 +65,4 @@ libegl_dri2_la_SOURCES += platform_drm.c
|
||||
AM_CFLAGS += -DHAVE_DRM_PLATFORM
|
||||
endif
|
||||
|
||||
if HAVE_EGL_PLATFORM_SURFACELESS
|
||||
libegl_dri2_la_SOURCES += platform_surfaceless.c
|
||||
AM_CFLAGS += -DHAVE_SURFACELESS_PLATFORM
|
||||
endif
|
||||
|
||||
EXTRA_DIST = SConscript
|
||||
|
@@ -397,7 +397,7 @@ dri2_open_driver(_EGLDisplay *disp)
|
||||
|
||||
dri2_dpy->driver = NULL;
|
||||
end = search_paths + strlen(search_paths);
|
||||
for (p = search_paths; p < end; p = next + 1) {
|
||||
for (p = search_paths; p < end && dri2_dpy->driver == NULL; p = next + 1) {
|
||||
int len;
|
||||
next = strchr(p, ':');
|
||||
if (next == NULL)
|
||||
@@ -419,15 +419,6 @@ dri2_open_driver(_EGLDisplay *disp)
|
||||
/* not need continue to loop all paths once the driver is found */
|
||||
if (dri2_dpy->driver != NULL)
|
||||
break;
|
||||
|
||||
#ifdef ANDROID
|
||||
snprintf(path, sizeof path, "%.*s/gallium_dri.so", len, p);
|
||||
dri2_dpy->driver = dlopen(path, RTLD_NOW | RTLD_GLOBAL);
|
||||
if (dri2_dpy->driver == NULL)
|
||||
_eglLog(_EGL_DEBUG, "failed to open %s: %s\n", path, dlerror());
|
||||
else
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (dri2_dpy->driver == NULL) {
|
||||
@@ -667,13 +658,6 @@ dri2_initialize(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
return EGL_FALSE;
|
||||
|
||||
switch (disp->Platform) {
|
||||
#ifdef HAVE_SURFACELESS_PLATFORM
|
||||
case _EGL_PLATFORM_SURFACELESS:
|
||||
if (disp->Options.TestOnly)
|
||||
return EGL_TRUE;
|
||||
return dri2_initialize_surfaceless(drv, disp);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_X11_PLATFORM
|
||||
case _EGL_PLATFORM_X11:
|
||||
if (disp->Options.TestOnly)
|
||||
@@ -1272,8 +1256,7 @@ dri2_bind_tex_image(_EGLDriver *drv,
|
||||
format = __DRI_TEXTURE_FORMAT_RGBA;
|
||||
break;
|
||||
default:
|
||||
assert(!"Unexpected texture format in dri2_bind_tex_image()");
|
||||
format = __DRI_TEXTURE_FORMAT_RGBA;
|
||||
assert(0);
|
||||
}
|
||||
|
||||
switch (dri2_surf->base.TextureTarget) {
|
||||
@@ -1281,8 +1264,7 @@ dri2_bind_tex_image(_EGLDriver *drv,
|
||||
target = GL_TEXTURE_2D;
|
||||
break;
|
||||
default:
|
||||
target = GL_TEXTURE_2D;
|
||||
assert(!"Unexpected texture target in dri2_bind_tex_image()");
|
||||
assert(0);
|
||||
}
|
||||
|
||||
(*dri2_dpy->tex_buffer->setTexBuffer2)(dri2_ctx->dri_context,
|
||||
@@ -1528,6 +1510,10 @@ dri2_create_image_khr_texture_error(int dri_error)
|
||||
egl_error = EGL_BAD_PARAMETER;
|
||||
break;
|
||||
|
||||
case __DRI_IMAGE_ERROR_BAD_ACCESS:
|
||||
egl_error = EGL_BAD_ACCESS;
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(0);
|
||||
egl_error = EGL_BAD_MATCH;
|
||||
@@ -2141,13 +2127,11 @@ dri2_bind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
wl_drm_callbacks.authenticate =
|
||||
(int(*)(void *, uint32_t)) dri2_dpy->vtbl->authenticate;
|
||||
|
||||
#ifdef HAVE_LIBDRM
|
||||
if (drmGetCap(dri2_dpy->fd, DRM_CAP_PRIME, &cap) == 0 &&
|
||||
cap == (DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT) &&
|
||||
dri2_dpy->image->base.version >= 7 &&
|
||||
dri2_dpy->image->createImageFromFds != NULL)
|
||||
flags |= WAYLAND_DRM_PRIME;
|
||||
#endif
|
||||
|
||||
dri2_dpy->wl_server_drm =
|
||||
wayland_drm_init(wl_dpy, dri2_dpy->device_name,
|
||||
@@ -2232,7 +2216,7 @@ dri2_egl_unref_sync(struct dri2_egl_display *dri2_dpy,
|
||||
static _EGLSync *
|
||||
dri2_create_sync(_EGLDriver *drv, _EGLDisplay *dpy,
|
||||
EGLenum type, const EGLint *attrib_list,
|
||||
const EGLAttrib *attrib_list64)
|
||||
const EGLAttribKHR *attrib_list64)
|
||||
{
|
||||
_EGLContext *ctx = _eglGetCurrentContext();
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(dpy);
|
||||
@@ -2298,7 +2282,7 @@ dri2_destroy_sync(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync)
|
||||
|
||||
static EGLint
|
||||
dri2_client_wait_sync(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync,
|
||||
EGLint flags, EGLTime timeout)
|
||||
EGLint flags, EGLTimeKHR timeout)
|
||||
{
|
||||
_EGLContext *ctx = _eglGetCurrentContext();
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(dpy);
|
||||
|
@@ -351,9 +351,6 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp);
|
||||
EGLBoolean
|
||||
dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *disp);
|
||||
|
||||
EGLBoolean
|
||||
dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp);
|
||||
|
||||
void
|
||||
dri2_flush_drawable_for_swapbuffers(_EGLDisplay *disp, _EGLSurface *draw);
|
||||
|
||||
|
@@ -707,6 +707,10 @@ dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *dpy)
|
||||
dpy->Extensions.ANDROID_image_native_buffer = EGL_TRUE;
|
||||
dpy->Extensions.KHR_image_base = EGL_TRUE;
|
||||
|
||||
/* we're supporting EGL 1.4 */
|
||||
dpy->VersionMajor = 1;
|
||||
dpy->VersionMinor = 4;
|
||||
|
||||
/* Fill vtbl last to prevent accidentally calling virtual function during
|
||||
* initialization.
|
||||
*/
|
||||
|
@@ -611,9 +611,9 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
char buf[64];
|
||||
int n = snprintf(buf, sizeof(buf), DRM_DEV_NAME, DRM_DIR_NAME, 0);
|
||||
if (n != -1 && n < sizeof(buf))
|
||||
fd = loader_open_device(buf);
|
||||
fd = open(buf, O_RDWR);
|
||||
if (fd < 0)
|
||||
fd = loader_open_device("/dev/dri/card0");
|
||||
fd = open("/dev/dri/card0", O_RDWR);
|
||||
dri2_dpy->own_device = 1;
|
||||
gbm = gbm_create_device(fd);
|
||||
if (gbm == NULL)
|
||||
@@ -632,7 +632,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
}
|
||||
|
||||
if (fd < 0) {
|
||||
fd = fcntl(gbm_device_get_fd(gbm), F_DUPFD_CLOEXEC, 3);
|
||||
fd = dup(gbm_device_get_fd(gbm));
|
||||
if (fd < 0) {
|
||||
free(dri2_dpy);
|
||||
return EGL_FALSE;
|
||||
@@ -715,6 +715,10 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* we're supporting EGL 1.4 */
|
||||
disp->VersionMajor = 1;
|
||||
disp->VersionMinor = 4;
|
||||
|
||||
/* Fill vtbl last to prevent accidentally calling virtual function during
|
||||
* initialization.
|
||||
*/
|
||||
|
@@ -1,162 +0,0 @@
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
*
|
||||
* Copyright (c) 2014 The Chromium OS Authors.
|
||||
* Copyright © 2011 Intel Corporation
|
||||
*
|
||||
* 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 and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <xf86drm.h>
|
||||
#include <dlfcn.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "egl_dri2.h"
|
||||
#include "egl_dri2_fallbacks.h"
|
||||
#include "loader.h"
|
||||
|
||||
static struct dri2_egl_display_vtbl dri2_surfaceless_display_vtbl = {
|
||||
.create_pixmap_surface = dri2_fallback_create_pixmap_surface,
|
||||
.create_image = dri2_create_image_khr,
|
||||
.swap_interval = dri2_fallback_swap_interval,
|
||||
.swap_buffers_with_damage = dri2_fallback_swap_buffers_with_damage,
|
||||
.swap_buffers_region = dri2_fallback_swap_buffers_region,
|
||||
.post_sub_buffer = dri2_fallback_post_sub_buffer,
|
||||
.copy_buffers = dri2_fallback_copy_buffers,
|
||||
.query_buffer_age = dri2_fallback_query_buffer_age,
|
||||
.create_wayland_buffer_from_image = dri2_fallback_create_wayland_buffer_from_image,
|
||||
.get_sync_values = dri2_fallback_get_sync_values,
|
||||
};
|
||||
|
||||
static void
|
||||
surfaceless_flush_front_buffer(__DRIdrawable *driDrawable, void *loaderPrivate)
|
||||
{
|
||||
}
|
||||
|
||||
static __DRIbuffer *
|
||||
surfaceless_get_buffers_with_format(__DRIdrawable * driDrawable,
|
||||
int *width, int *height,
|
||||
unsigned int *attachments, int count,
|
||||
int *out_count, void *loaderPrivate)
|
||||
{
|
||||
struct dri2_egl_surface *dri2_surf = loaderPrivate;
|
||||
|
||||
dri2_surf->buffer_count = 1;
|
||||
if (width)
|
||||
*width = dri2_surf->base.Width;
|
||||
if (height)
|
||||
*height = dri2_surf->base.Height;
|
||||
*out_count = dri2_surf->buffer_count;;
|
||||
return dri2_surf->buffers;
|
||||
}
|
||||
|
||||
#define DRM_RENDER_DEV_NAME "%s/renderD%d"
|
||||
|
||||
EGLBoolean
|
||||
dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy;
|
||||
const char* err;
|
||||
int i;
|
||||
int driver_loaded = 0;
|
||||
|
||||
loader_set_logger(_eglLog);
|
||||
|
||||
dri2_dpy = calloc(1, sizeof *dri2_dpy);
|
||||
if (!dri2_dpy)
|
||||
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
|
||||
|
||||
disp->DriverData = (void *) dri2_dpy;
|
||||
|
||||
const int limit = 64;
|
||||
const int base = 128;
|
||||
for (i = 0; i < limit; ++i) {
|
||||
char *card_path;
|
||||
if (asprintf(&card_path, DRM_RENDER_DEV_NAME, DRM_DIR_NAME, base + i) < 0)
|
||||
continue;
|
||||
|
||||
dri2_dpy->fd = loader_open_device(card_path);
|
||||
|
||||
free(card_path);
|
||||
if (dri2_dpy->fd < 0)
|
||||
continue;
|
||||
|
||||
dri2_dpy->driver_name = loader_get_driver_for_fd(dri2_dpy->fd, 0);
|
||||
if (dri2_dpy->driver_name) {
|
||||
if (dri2_load_driver(disp)) {
|
||||
driver_loaded = 1;
|
||||
break;
|
||||
}
|
||||
free(dri2_dpy->driver_name);
|
||||
}
|
||||
close(dri2_dpy->fd);
|
||||
}
|
||||
|
||||
if (!driver_loaded) {
|
||||
err = "DRI2: failed to load driver";
|
||||
goto cleanup_display;
|
||||
}
|
||||
|
||||
dri2_dpy->dri2_loader_extension.base.name = __DRI_DRI2_LOADER;
|
||||
dri2_dpy->dri2_loader_extension.base.version = 3;
|
||||
dri2_dpy->dri2_loader_extension.getBuffers = NULL;
|
||||
dri2_dpy->dri2_loader_extension.flushFrontBuffer =
|
||||
surfaceless_flush_front_buffer;
|
||||
dri2_dpy->dri2_loader_extension.getBuffersWithFormat =
|
||||
surfaceless_get_buffers_with_format;
|
||||
|
||||
dri2_dpy->extensions[0] = &dri2_dpy->dri2_loader_extension.base;
|
||||
dri2_dpy->extensions[1] = &image_lookup_extension.base;
|
||||
dri2_dpy->extensions[2] = &use_invalidate.base;
|
||||
dri2_dpy->extensions[3] = NULL;
|
||||
|
||||
if (!dri2_create_screen(disp)) {
|
||||
err = "DRI2: failed to create screen";
|
||||
goto cleanup_driver;
|
||||
}
|
||||
|
||||
for (i = 0; dri2_dpy->driver_configs[i]; i++) {
|
||||
dri2_add_config(disp, dri2_dpy->driver_configs[i],
|
||||
i + 1, EGL_WINDOW_BIT, NULL, NULL);
|
||||
}
|
||||
|
||||
disp->Extensions.KHR_image_base = EGL_TRUE;
|
||||
|
||||
/* Fill vtbl last to prevent accidentally calling virtual function during
|
||||
* initialization.
|
||||
*/
|
||||
dri2_dpy->vtbl = &dri2_surfaceless_display_vtbl;
|
||||
|
||||
return EGL_TRUE;
|
||||
|
||||
cleanup_driver:
|
||||
dlclose(dri2_dpy->driver);
|
||||
free(dri2_dpy->driver_name);
|
||||
close(dri2_dpy->fd);
|
||||
cleanup_display:
|
||||
free(dri2_dpy);
|
||||
|
||||
return _eglError(EGL_NOT_INITIALIZED, err);
|
||||
}
|
@@ -891,7 +891,16 @@ drm_handle_device(void *data, struct wl_drm *drm, const char *device)
|
||||
if (!dri2_dpy->device_name)
|
||||
return;
|
||||
|
||||
dri2_dpy->fd = loader_open_device(dri2_dpy->device_name);
|
||||
#ifdef O_CLOEXEC
|
||||
dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR | O_CLOEXEC);
|
||||
if (dri2_dpy->fd == -1 && errno == EINVAL)
|
||||
#endif
|
||||
{
|
||||
dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR);
|
||||
if (dri2_dpy->fd != -1)
|
||||
fcntl(dri2_dpy->fd, F_SETFD, fcntl(dri2_dpy->fd, F_GETFD) |
|
||||
FD_CLOEXEC);
|
||||
}
|
||||
if (dri2_dpy->fd == -1) {
|
||||
_eglLog(_EGL_WARNING, "wayland-egl: could not open %s (%s)",
|
||||
dri2_dpy->device_name, strerror(errno));
|
||||
@@ -1197,6 +1206,10 @@ dri2_initialize_wayland_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
|
||||
disp->Extensions.EXT_swap_buffers_with_damage = EGL_TRUE;
|
||||
|
||||
/* we're supporting EGL 1.4 */
|
||||
disp->VersionMajor = 1;
|
||||
disp->VersionMinor = 4;
|
||||
|
||||
/* Fill vtbl last to prevent accidentally calling virtual function during
|
||||
* initialization.
|
||||
*/
|
||||
@@ -1840,6 +1853,10 @@ dri2_initialize_wayland_swrast(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
dri2_add_config(disp, config, i + 1, types, NULL, rgb565_masks);
|
||||
}
|
||||
|
||||
/* we're supporting EGL 1.4 */
|
||||
disp->VersionMajor = 1;
|
||||
disp->VersionMinor = 4;
|
||||
|
||||
/* Fill vtbl last to prevent accidentally calling virtual function during
|
||||
* initialization.
|
||||
*/
|
||||
|
@@ -43,7 +43,6 @@
|
||||
|
||||
#include "egl_dri2.h"
|
||||
#include "egl_dri2_fallbacks.h"
|
||||
#include "loader.h"
|
||||
|
||||
static EGLBoolean
|
||||
dri2_x11_swap_interval(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf,
|
||||
@@ -274,7 +273,25 @@ dri2_x11_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
|
||||
}
|
||||
|
||||
if (dri2_dpy->dri2) {
|
||||
xcb_dri2_create_drawable (dri2_dpy->conn, dri2_surf->drawable);
|
||||
xcb_void_cookie_t cookie;
|
||||
int conn_error;
|
||||
|
||||
cookie = xcb_dri2_create_drawable_checked(dri2_dpy->conn,
|
||||
dri2_surf->drawable);
|
||||
error = xcb_request_check(dri2_dpy->conn, cookie);
|
||||
conn_error = xcb_connection_has_error(dri2_dpy->conn);
|
||||
if (conn_error || error != NULL) {
|
||||
if (type == EGL_PBUFFER_BIT || conn_error || error->error_code == BadAlloc)
|
||||
_eglError(EGL_BAD_ALLOC, "xcb_dri2_create_drawable_checked");
|
||||
else if (type == EGL_WINDOW_BIT)
|
||||
_eglError(EGL_BAD_NATIVE_WINDOW,
|
||||
"xcb_dri2_create_drawable_checked");
|
||||
else
|
||||
_eglError(EGL_BAD_NATIVE_PIXMAP,
|
||||
"xcb_dri2_create_drawable_checked");
|
||||
free(error);
|
||||
goto cleanup_dri_drawable;
|
||||
}
|
||||
} else {
|
||||
if (type == EGL_PBUFFER_BIT) {
|
||||
dri2_surf->depth = _eglGetConfigKey(conf, EGL_BUFFER_SIZE);
|
||||
@@ -1130,6 +1147,10 @@ dri2_initialize_x11_swrast(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
goto cleanup_configs;
|
||||
}
|
||||
|
||||
/* we're supporting EGL 1.4 */
|
||||
disp->VersionMajor = 1;
|
||||
disp->VersionMinor = 4;
|
||||
|
||||
/* Fill vtbl last to prevent accidentally calling virtual function during
|
||||
* initialization.
|
||||
*/
|
||||
@@ -1231,7 +1252,16 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
if (!dri2_load_driver(disp))
|
||||
goto cleanup_conn;
|
||||
|
||||
dri2_dpy->fd = loader_open_device(dri2_dpy->device_name);
|
||||
#ifdef O_CLOEXEC
|
||||
dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR | O_CLOEXEC);
|
||||
if (dri2_dpy->fd == -1 && errno == EINVAL)
|
||||
#endif
|
||||
{
|
||||
dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR);
|
||||
if (dri2_dpy->fd != -1)
|
||||
fcntl(dri2_dpy->fd, F_SETFD, fcntl(dri2_dpy->fd, F_GETFD) |
|
||||
FD_CLOEXEC);
|
||||
}
|
||||
if (dri2_dpy->fd == -1) {
|
||||
_eglLog(_EGL_WARNING,
|
||||
"DRI2: could not open %s (%s)", dri2_dpy->device_name,
|
||||
@@ -1286,6 +1316,10 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
goto cleanup_configs;
|
||||
}
|
||||
|
||||
/* we're supporting EGL 1.4 */
|
||||
disp->VersionMajor = 1;
|
||||
disp->VersionMinor = 4;
|
||||
|
||||
/* Fill vtbl last to prevent accidentally calling virtual function during
|
||||
* initialization.
|
||||
*/
|
||||
|
@@ -9,6 +9,7 @@ env.Append(CPPDEFINES = [
|
||||
env.Append(CPPPATH = [
|
||||
'#/include',
|
||||
'#/src/egl/main',
|
||||
'#/src/loader',
|
||||
])
|
||||
|
||||
sources = [
|
||||
@@ -21,6 +22,10 @@ if env['platform'] == 'haiku':
|
||||
'_EGL_NATIVE_PLATFORM=haiku',
|
||||
])
|
||||
|
||||
env.Prepend(LIBS = [
|
||||
libloader,
|
||||
])
|
||||
|
||||
egl_haiku = env.ConvenienceLibrary(
|
||||
target = 'egl_haiku',
|
||||
source = sources,
|
||||
|
@@ -27,6 +27,7 @@
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "loader.h"
|
||||
#include "eglconfig.h"
|
||||
#include "eglcontext.h"
|
||||
#include "egldisplay.h"
|
||||
@@ -41,14 +42,7 @@
|
||||
#include <OpenGLKit.h>
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
# define TRACE(x...) printf("egl_haiku: " x)
|
||||
# define CALLED() TRACE("CALLED: %s\n", __PRETTY_FUNCTION__)
|
||||
#else
|
||||
# define TRACE(x...)
|
||||
# define CALLED()
|
||||
#endif
|
||||
#define ERROR(x...) printf("egl_haiku: " x)
|
||||
#define CALLOC_STRUCT(T) (struct T *) calloc(1, sizeof(struct T))
|
||||
|
||||
|
||||
_EGL_DRIVER_STANDARD_TYPECASTS(haiku_egl)
|
||||
@@ -57,6 +51,10 @@ _EGL_DRIVER_STANDARD_TYPECASTS(haiku_egl)
|
||||
struct haiku_egl_driver
|
||||
{
|
||||
_EGLDriver base;
|
||||
|
||||
void *handle;
|
||||
_EGLProc (*get_proc_address)(const char *procname);
|
||||
void (*glFlush)(void);
|
||||
};
|
||||
|
||||
struct haiku_egl_config
|
||||
@@ -76,6 +74,81 @@ struct haiku_egl_surface
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
static void
|
||||
swrastCreateDrawable(struct dri2_egl_display * dri2_dpy,
|
||||
struct dri2_egl_surface * dri2_surf, int depth)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
swrastDestroyDrawable(struct dri2_egl_display * dri2_dpy,
|
||||
struct dri2_egl_surface * dri2_surf)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
swrastGetDrawableInfo(__DRIdrawable * draw, int *x, int *y,
|
||||
int *w, int *h, void *loaderPrivate)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
swrastPutImage(__DRIdrawable * draw, int op, int x, int y,
|
||||
int w, int h, char *data, void *loaderPrivate)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
swrastGetImage(__DRIdrawable * read, int x, int y,
|
||||
int w, int h, char *data, void *loaderPrivate)
|
||||
{
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
static void
|
||||
haiku_log(EGLint level, const char *msg)
|
||||
{
|
||||
switch (level) {
|
||||
case _EGL_DEBUG:
|
||||
fprintf(stderr,"%s", msg);
|
||||
break;
|
||||
case _EGL_INFO:
|
||||
fprintf(stderr,"%s", msg);
|
||||
break;
|
||||
case _EGL_WARNING:
|
||||
fprintf(stderr,"%s", msg);
|
||||
break;
|
||||
case _EGL_FATAL:
|
||||
fprintf(stderr,"%s", msg);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called via eglCreateWindowSurface(), drv->API.CreateWindowSurface().
|
||||
*/
|
||||
static _EGLSurface *
|
||||
haiku_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
|
||||
_EGLConfig *conf, void *native_surface, const EGLint *attrib_list)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called via eglCreateWindowSurface(), drv->API.CreateWindowSurface().
|
||||
*/
|
||||
@@ -83,37 +156,25 @@ static _EGLSurface *
|
||||
haiku_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
_EGLConfig *conf, void *native_window, const EGLint *attrib_list)
|
||||
{
|
||||
CALLED();
|
||||
|
||||
struct haiku_egl_surface* surface;
|
||||
surface = (struct haiku_egl_surface*) calloc(1, sizeof (*surface));
|
||||
if (!surface) {
|
||||
_eglError(EGL_BAD_ALLOC, "haiku_create_window_surface");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!_eglInitSurface(&surface->surf, disp, EGL_WINDOW_BIT, conf, attrib_list))
|
||||
goto cleanup_surface;
|
||||
surface = (struct haiku_egl_surface*)calloc(1,sizeof (*surface));
|
||||
|
||||
_eglInitSurface(&surface->surf, disp, EGL_WINDOW_BIT, conf, attrib_list);
|
||||
(&surface->surf)->SwapInterval = 1;
|
||||
|
||||
TRACE("Creating window\n");
|
||||
_eglLog(_EGL_DEBUG, "Creating window");
|
||||
BWindow* win = (BWindow*)native_window;
|
||||
|
||||
TRACE("Creating GL view\n");
|
||||
_eglLog(_EGL_DEBUG, "Creating GL view");
|
||||
surface->gl = new BGLView(win->Bounds(), "OpenGL", B_FOLLOW_ALL_SIDES, 0,
|
||||
BGL_RGB | BGL_DOUBLE | BGL_ALPHA);
|
||||
|
||||
TRACE("Adding GL\n");
|
||||
_eglLog(_EGL_DEBUG, "Adding GL");
|
||||
win->AddChild(surface->gl);
|
||||
|
||||
TRACE("Showing window\n");
|
||||
_eglLog(_EGL_DEBUG, "Showing window");
|
||||
win->Show();
|
||||
return &surface->surf;
|
||||
|
||||
cleanup_surface:
|
||||
free(surface);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -136,10 +197,6 @@ haiku_create_pbuffer_surface(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
static EGLBoolean
|
||||
haiku_destroy_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf)
|
||||
{
|
||||
if (_eglPutSurface(surf)) {
|
||||
// XXX: detach haiku_egl_surface::gl from the native window and destroy it
|
||||
free(surf);
|
||||
}
|
||||
return EGL_TRUE;
|
||||
}
|
||||
|
||||
@@ -147,18 +204,13 @@ haiku_destroy_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf)
|
||||
static EGLBoolean
|
||||
haiku_add_configs_for_visuals(_EGLDisplay *dpy)
|
||||
{
|
||||
CALLED();
|
||||
printf("Adding configs\n");
|
||||
|
||||
struct haiku_egl_config* conf;
|
||||
conf = (struct haiku_egl_config*) calloc(1, sizeof (*conf));
|
||||
if (!conf) {
|
||||
_eglError(EGL_BAD_ALLOC, "haiku_add_configs_for_visuals");
|
||||
return NULL;
|
||||
}
|
||||
conf = CALLOC_STRUCT(haiku_egl_config);
|
||||
|
||||
_eglInitConfig(&conf->base, dpy, 1);
|
||||
TRACE("Config inited\n");
|
||||
|
||||
_eglLog(_EGL_DEBUG,"Config inited\n");
|
||||
_eglSetConfigKey(&conf->base, EGL_RED_SIZE, 8);
|
||||
_eglSetConfigKey(&conf->base, EGL_BLUE_SIZE, 8);
|
||||
_eglSetConfigKey(&conf->base, EGL_GREEN_SIZE, 8);
|
||||
@@ -189,40 +241,76 @@ haiku_add_configs_for_visuals(_EGLDisplay *dpy)
|
||||
_eglSetConfigKey(&conf->base, EGL_MAX_PBUFFER_PIXELS, 0); // TODO: How to get the right value ?
|
||||
_eglSetConfigKey(&conf->base, EGL_SURFACE_TYPE, EGL_WINDOW_BIT /*| EGL_PIXMAP_BIT | EGL_PBUFFER_BIT*/);
|
||||
|
||||
TRACE("Config configuated\n");
|
||||
printf("Config configuated\n");
|
||||
if (!_eglValidateConfig(&conf->base, EGL_FALSE)) {
|
||||
_eglLog(_EGL_DEBUG, "Haiku: failed to validate config");
|
||||
goto cleanup;
|
||||
_eglLog(_EGL_DEBUG, "Haiku failed to validate config");
|
||||
return EGL_FALSE;
|
||||
}
|
||||
TRACE("Validated config\n");
|
||||
printf("Validated config\n");
|
||||
|
||||
_eglLinkConfig(&conf->base);
|
||||
if (!_eglGetArraySize(dpy->Configs)) {
|
||||
_eglLog(_EGL_WARNING, "Haiku: failed to create any config");
|
||||
goto cleanup;
|
||||
return EGL_FALSE;
|
||||
}
|
||||
TRACE("Config successfull\n");
|
||||
|
||||
printf("Config successful!\n");
|
||||
|
||||
return EGL_TRUE;
|
||||
|
||||
cleanup:
|
||||
free(conf);
|
||||
return EGL_FALSE;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
EGLBoolean
|
||||
init_haiku(_EGLDriver *drv, _EGLDisplay *dpy)
|
||||
{
|
||||
CALLED();
|
||||
_eglLog(_EGL_DEBUG,"\nInitializing Haiku EGL\n");
|
||||
//_EGLDisplay* egl_dpy;
|
||||
|
||||
TRACE("Add configs\n");
|
||||
if (!haiku_add_configs_for_visuals(dpy))
|
||||
return EGL_FALSE;
|
||||
printf("Initializing Haiku EGL\n");
|
||||
_eglSetLogProc(haiku_log);
|
||||
|
||||
dpy->Version = 14;
|
||||
loader_set_logger(_eglLog);
|
||||
|
||||
/*egl_dpy = (_EGLDisplay*) calloc(1, sizeof(_EGLDisplay));
|
||||
if (!egl_dpy)
|
||||
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
|
||||
|
||||
dpy->DriverData=(void*) egl_dpy;
|
||||
if (!dpy->PlatformDisplay) {
|
||||
// OPEN DEVICE
|
||||
//dri2_dpy->bwindow = (void*)haiku_create_window();
|
||||
//dri2_dpy->own_device = true;
|
||||
} else {
|
||||
//dri2_dpy->bwindow = (BWindow*)dpy->PlatformDisplay;
|
||||
}*/
|
||||
|
||||
//dri2_dpy->driver_name = strdup("swrast");
|
||||
//if (!dri2_load_driver_swrast(dpy))
|
||||
// goto cleanup_conn;
|
||||
|
||||
/*dri2_dpy->swrast_loader_extension.base.name = __DRI_SWRAST_LOADER;
|
||||
dri2_dpy->swrast_loader_extension.base.version = __DRI_SWRAST_LOADER_VERSION;
|
||||
dri2_dpy->swrast_loader_extension.getDrawableInfo = swrastGetDrawableInfo;
|
||||
dri2_dpy->swrast_loader_extension.putImage = swrastPutImage;
|
||||
dri2_dpy->swrast_loader_extension.getImage = swrastGetImage;
|
||||
|
||||
dri2_dpy->extensions[0] = &dri2_dpy->swrast_loader_extension.base;
|
||||
dri2_dpy->extensions[1] = NULL;
|
||||
dri2_dpy->extensions[2] = NULL;*/
|
||||
|
||||
/*if (dri2_dpy->bwindow) {
|
||||
if (!dri2_haiku_add_configs_for_visuals(dri2_dpy, dpy))
|
||||
goto cleanup_configs;
|
||||
}*/
|
||||
_eglLog(_EGL_DEBUG,"Add configs");
|
||||
haiku_add_configs_for_visuals(dpy);
|
||||
|
||||
dpy->VersionMajor=1;
|
||||
dpy->VersionMinor=4;
|
||||
|
||||
TRACE("Initialization finished\n");
|
||||
//dpy->Extensions.KHR_create_context = true;
|
||||
|
||||
//dri2_dpy->vtbl = &dri2_haiku_display_vtbl;
|
||||
_eglLog(_EGL_DEBUG, "Initialization finished");
|
||||
|
||||
return EGL_TRUE;
|
||||
}
|
||||
@@ -241,24 +329,13 @@ _EGLContext*
|
||||
haiku_create_context(_EGLDriver *drv, _EGLDisplay *disp, _EGLConfig *conf,
|
||||
_EGLContext *share_list, const EGLint *attrib_list)
|
||||
{
|
||||
CALLED();
|
||||
|
||||
_eglLog(_EGL_DEBUG,"Creating context");
|
||||
struct haiku_egl_context* context;
|
||||
context = (struct haiku_egl_context*) calloc(1, sizeof (*context));
|
||||
if (!context) {
|
||||
_eglError(EGL_BAD_ALLOC, "haiku_create_context");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!_eglInitContext(&context->ctx, disp, conf, attrib_list))
|
||||
goto cleanup;
|
||||
|
||||
TRACE("Context created\n");
|
||||
context=(struct haiku_egl_context*)calloc(1,sizeof (*context));
|
||||
if(!_eglInitContext(&context->ctx, disp, conf, attrib_list))
|
||||
printf("ERROR creating context");
|
||||
_eglLog(_EGL_DEBUG, "Context created");
|
||||
return &context->ctx;
|
||||
|
||||
cleanup:
|
||||
free(context);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -266,13 +343,7 @@ extern "C"
|
||||
EGLBoolean
|
||||
haiku_destroy_context(_EGLDriver* drv, _EGLDisplay *disp, _EGLContext* ctx)
|
||||
{
|
||||
struct haiku_egl_context* context = haiku_egl_context(ctx);
|
||||
|
||||
if (_eglPutContext(ctx)) {
|
||||
// XXX: teardown the context ?
|
||||
free(context);
|
||||
ctx = NULL
|
||||
}
|
||||
ctx=NULL;
|
||||
return EGL_TRUE;
|
||||
}
|
||||
|
||||
@@ -282,16 +353,11 @@ EGLBoolean
|
||||
haiku_make_current(_EGLDriver* drv, _EGLDisplay* dpy, _EGLSurface *dsurf,
|
||||
_EGLSurface *rsurf, _EGLContext *ctx)
|
||||
{
|
||||
CALLED();
|
||||
|
||||
struct haiku_egl_context* cont = haiku_egl_context(ctx);
|
||||
struct haiku_egl_surface* surf = haiku_egl_surface(dsurf);
|
||||
struct haiku_egl_context* cont=haiku_egl_context(ctx);
|
||||
struct haiku_egl_surface* surf=haiku_egl_surface(dsurf);
|
||||
_EGLContext *old_ctx;
|
||||
_EGLSurface *old_dsurf, *old_rsurf;
|
||||
|
||||
if (!_eglBindContext(ctx, dsurf, rsurf, &old_ctx, &old_dsurf, &old_rsurf))
|
||||
return EGL_FALSE;
|
||||
|
||||
_EGLSurface *old_dsurf, *old_rsurf;
|
||||
_eglBindContext(ctx, dsurf, rsurf, &old_ctx, &old_dsurf, &old_rsurf);
|
||||
//cont->ctx.DrawSurface=&surf->surf;
|
||||
surf->gl->LockGL();
|
||||
return EGL_TRUE;
|
||||
@@ -302,8 +368,7 @@ extern "C"
|
||||
EGLBoolean
|
||||
haiku_swap_buffers(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf)
|
||||
{
|
||||
struct haiku_egl_surface* surface = haiku_egl_surface(surf);
|
||||
|
||||
struct haiku_egl_surface* surface=haiku_egl_surface(surf);
|
||||
surface->gl->SwapBuffers();
|
||||
//gl->Render();
|
||||
return EGL_TRUE;
|
||||
@@ -326,15 +391,9 @@ extern "C"
|
||||
_EGLDriver*
|
||||
_eglBuiltInDriverHaiku(const char *args)
|
||||
{
|
||||
CALLED();
|
||||
|
||||
_eglLog(_EGL_DEBUG,"Driver loaded");
|
||||
struct haiku_egl_driver* driver;
|
||||
driver = (struct haiku_egl_driver*) calloc(1, sizeof(*driver));
|
||||
if (!driver) {
|
||||
_eglError(EGL_BAD_ALLOC, "_eglBuiltInDriverHaiku");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
driver=(struct haiku_egl_driver*)calloc(1,sizeof(*driver));
|
||||
_eglInitDriverFallbacks(&driver->base);
|
||||
driver->base.API.Initialize = init_haiku;
|
||||
driver->base.API.Terminate = haiku_terminate;
|
||||
@@ -345,13 +404,32 @@ _eglBuiltInDriverHaiku(const char *args)
|
||||
driver->base.API.CreatePixmapSurface = haiku_create_pixmap_surface;
|
||||
driver->base.API.CreatePbufferSurface = haiku_create_pbuffer_surface;
|
||||
driver->base.API.DestroySurface = haiku_destroy_surface;
|
||||
/*
|
||||
driver->API.GetProcAddress = dri2_get_proc_address;
|
||||
driver->API.WaitClient = dri2_wait_client;
|
||||
driver->API.WaitNative = dri2_wait_native;
|
||||
driver->API.BindTexImage = dri2_bind_tex_image;
|
||||
driver->API.ReleaseTexImage = dri2_release_tex_image;
|
||||
driver->API.SwapInterval = dri2_swap_interval;
|
||||
*/
|
||||
|
||||
driver->base.API.SwapBuffers = haiku_swap_buffers;
|
||||
/*
|
||||
driver->API.SwapBuffersWithDamageEXT = dri2_swap_buffers_with_damage;
|
||||
driver->API.SwapBuffersRegionNOK = dri2_swap_buffers_region;
|
||||
driver->API.PostSubBufferNV = dri2_post_sub_buffer;
|
||||
driver->API.CopyBuffers = dri2_copy_buffers,
|
||||
driver->API.QueryBufferAge = dri2_query_buffer_age;
|
||||
driver->API.CreateImageKHR = dri2_create_image;
|
||||
driver->API.DestroyImageKHR = dri2_destroy_image_khr;
|
||||
driver->API.CreateWaylandBufferFromImageWL = dri2_create_wayland_buffer_from_image;
|
||||
driver->API.GetSyncValuesCHROMIUM = dri2_get_sync_values_chromium;
|
||||
*/
|
||||
|
||||
driver->base.Name = "Haiku";
|
||||
driver->base.Unload = haiku_unload;
|
||||
|
||||
TRACE("API Calls defined\n");
|
||||
|
||||
_eglLog(_EGL_DEBUG, "API Calls defined");
|
||||
|
||||
return &driver->base;
|
||||
}
|
||||
|
@@ -43,7 +43,10 @@ LOCAL_CFLAGS := \
|
||||
-D_EGL_DRIVER_SEARCH_DIR=\"/system/lib/egl\" \
|
||||
-D_EGL_OS_UNIX=1
|
||||
|
||||
LOCAL_STATIC_LIBRARIES :=
|
||||
|
||||
LOCAL_SHARED_LIBRARIES := \
|
||||
libglapi \
|
||||
libdl \
|
||||
libhardware \
|
||||
liblog \
|
||||
@@ -59,20 +62,95 @@ ifneq ($(MESA_GPU_DRIVERS),swrast)
|
||||
LOCAL_SHARED_LIBRARIES += libdrm
|
||||
endif
|
||||
|
||||
LOCAL_CFLAGS += -D_EGL_BUILT_IN_DRIVER_DRI2
|
||||
|
||||
ifeq ($(strip $(MESA_BUILD_CLASSIC)),true)
|
||||
LOCAL_CFLAGS += -D_EGL_BUILT_IN_DRIVER_DRI2
|
||||
LOCAL_STATIC_LIBRARIES += libmesa_egl_dri2
|
||||
|
||||
# require i915_dri and/or i965_dri
|
||||
LOCAL_REQUIRED_MODULES += \
|
||||
$(addsuffix _dri, $(filter i915 i965, $(MESA_GPU_DRIVERS)))
|
||||
endif # MESA_BUILD_CLASSIC
|
||||
|
||||
ifeq ($(strip $(MESA_BUILD_GALLIUM)),true)
|
||||
LOCAL_REQUIRED_MODULES += gallium_dri
|
||||
|
||||
gallium_DRIVERS :=
|
||||
|
||||
# swrast
|
||||
gallium_DRIVERS += libmesa_pipe_softpipe libmesa_winsys_sw_android
|
||||
|
||||
# freedreno
|
||||
ifneq ($(filter freedreno, $(MESA_GPU_DRIVERS)),)
|
||||
gallium_DRIVERS += libmesa_winsys_freedreno libmesa_pipe_freedreno
|
||||
LOCAL_SHARED_LIBRARIES += libdrm_freedreno
|
||||
endif
|
||||
|
||||
# i915g
|
||||
ifneq ($(filter i915g, $(MESA_GPU_DRIVERS)),)
|
||||
gallium_DRIVERS += libmesa_winsys_i915 libmesa_pipe_i915
|
||||
LOCAL_SHARED_LIBRARIES += libdrm_intel
|
||||
endif
|
||||
|
||||
# ilo
|
||||
ifneq ($(filter ilo, $(MESA_GPU_DRIVERS)),)
|
||||
gallium_DRIVERS += libmesa_winsys_intel libmesa_pipe_ilo
|
||||
LOCAL_SHARED_LIBRARIES += libdrm_intel
|
||||
endif
|
||||
|
||||
# nouveau
|
||||
ifneq ($(filter nouveau, $(MESA_GPU_DRIVERS)),)
|
||||
gallium_DRIVERS += libmesa_winsys_nouveau libmesa_pipe_nouveau
|
||||
LOCAL_SHARED_LIBRARIES += libdrm_nouveau
|
||||
LOCAL_SHARED_LIBRARIES += libstlport
|
||||
endif
|
||||
|
||||
# r300g/r600g/radeonsi
|
||||
ifneq ($(filter r300g r600g radeonsi, $(MESA_GPU_DRIVERS)),)
|
||||
gallium_DRIVERS += libmesa_winsys_radeon
|
||||
LOCAL_SHARED_LIBRARIES += libdrm_radeon
|
||||
ifneq ($(filter r300g, $(MESA_GPU_DRIVERS)),)
|
||||
gallium_DRIVERS += libmesa_pipe_r300
|
||||
endif # r300g
|
||||
ifneq ($(filter r600g radeonsi, $(MESA_GPU_DRIVERS)),)
|
||||
ifneq ($(filter r600g, $(MESA_GPU_DRIVERS)),)
|
||||
gallium_DRIVERS += libmesa_pipe_r600
|
||||
LOCAL_SHARED_LIBRARIES += libstlport
|
||||
endif # r600g
|
||||
ifneq ($(filter radeonsi, $(MESA_GPU_DRIVERS)),)
|
||||
gallium_DRIVERS += libmesa_pipe_radeonsi
|
||||
endif # radeonsi
|
||||
gallium_DRIVERS += libmesa_pipe_radeon
|
||||
endif # r600g || radeonsi
|
||||
endif # r300g || r600g || radeonsi
|
||||
|
||||
# vmwgfx
|
||||
ifneq ($(filter vmwgfx, $(MESA_GPU_DRIVERS)),)
|
||||
gallium_DRIVERS += libmesa_winsys_svga libmesa_pipe_svga
|
||||
endif
|
||||
|
||||
#
|
||||
# Notes about the order here:
|
||||
#
|
||||
# * libmesa_st_egl depends on libmesa_winsys_sw_android in $(gallium_DRIVERS)
|
||||
# * libmesa_pipe_r300 in $(gallium_DRIVERS) depends on libmesa_st_mesa and
|
||||
# libmesa_glsl
|
||||
# * libmesa_st_mesa depends on libmesa_glsl
|
||||
# * libmesa_glsl depends on libmesa_glsl_utils
|
||||
#
|
||||
LOCAL_STATIC_LIBRARIES := \
|
||||
libmesa_egl_gallium \
|
||||
libmesa_st_egl \
|
||||
$(gallium_DRIVERS) \
|
||||
libmesa_st_mesa \
|
||||
libmesa_util \
|
||||
libmesa_glsl \
|
||||
libmesa_glsl_utils \
|
||||
libmesa_gallium \
|
||||
$(LOCAL_STATIC_LIBRARIES)
|
||||
|
||||
endif # MESA_BUILD_GALLIUM
|
||||
|
||||
LOCAL_STATIC_LIBRARIES := \
|
||||
libmesa_egl_dri2 \
|
||||
$(LOCAL_STATIC_LIBRARIES) \
|
||||
libmesa_loader
|
||||
|
||||
LOCAL_MODULE := libGLES_mesa
|
||||
|
@@ -68,10 +68,6 @@ if HAVE_EGL_PLATFORM_NULL
|
||||
AM_CFLAGS += -DHAVE_NULL_PLATFORM
|
||||
endif
|
||||
|
||||
if HAVE_EGL_PLATFORM_SURFACELESS
|
||||
AM_CFLAGS += -DHAVE_SURFACELESS_PLATFORM
|
||||
endif
|
||||
|
||||
if HAVE_EGL_DRIVER_DRI2
|
||||
AM_CFLAGS += -D_EGL_BUILT_IN_DRIVER_DRI2
|
||||
AM_CFLAGS += -DHAVE_XCB_DRI2
|
||||
|
@@ -251,31 +251,6 @@ _eglUnlockDisplay(_EGLDisplay *dpy)
|
||||
}
|
||||
|
||||
|
||||
static EGLint *
|
||||
_eglConvertAttribsToInt(const EGLAttrib *attr_list)
|
||||
{
|
||||
EGLint *int_attribs = NULL;
|
||||
|
||||
/* Convert attributes from EGLAttrib[] to EGLint[] */
|
||||
if (attr_list) {
|
||||
int i, size = 0;
|
||||
|
||||
while (attr_list[size] != EGL_NONE)
|
||||
size += 2;
|
||||
|
||||
size += 1; /* add space for EGL_NONE */
|
||||
|
||||
int_attribs = calloc(size, sizeof(int_attribs[0]));
|
||||
if (!int_attribs)
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
int_attribs[i] = attr_list[i];
|
||||
}
|
||||
return int_attribs;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This is typically the first EGL function that an application calls.
|
||||
* It associates a private _EGLDisplay object to the native display.
|
||||
@@ -326,21 +301,6 @@ eglGetPlatformDisplayEXT(EGLenum platform, void *native_display,
|
||||
return _eglGetDisplayHandle(dpy);
|
||||
}
|
||||
|
||||
EGLDisplay EGLAPIENTRY
|
||||
eglGetPlatformDisplay(EGLenum platform, void *native_display,
|
||||
const EGLAttrib *attrib_list)
|
||||
{
|
||||
EGLDisplay display;
|
||||
EGLint *int_attribs = _eglConvertAttribsToInt(attrib_list);
|
||||
|
||||
if (attrib_list && !int_attribs)
|
||||
RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, NULL);
|
||||
|
||||
display = eglGetPlatformDisplayEXT(platform, native_display, int_attribs);
|
||||
free(int_attribs);
|
||||
return display;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the extension into the string and update the string pointer.
|
||||
*/
|
||||
@@ -447,26 +407,6 @@ _eglCreateAPIsString(_EGLDisplay *dpy)
|
||||
assert(strlen(dpy->ClientAPIsString) < sizeof(dpy->ClientAPIsString));
|
||||
}
|
||||
|
||||
static void
|
||||
_eglComputeVersion(_EGLDisplay *disp)
|
||||
{
|
||||
disp->Version = 14;
|
||||
|
||||
if (disp->Extensions.KHR_fence_sync &&
|
||||
disp->Extensions.KHR_cl_event2 &&
|
||||
disp->Extensions.KHR_wait_sync &&
|
||||
disp->Extensions.KHR_image_base &&
|
||||
disp->Extensions.KHR_gl_texture_2D_image &&
|
||||
disp->Extensions.KHR_gl_texture_3D_image &&
|
||||
disp->Extensions.KHR_gl_texture_cubemap_image &&
|
||||
disp->Extensions.KHR_gl_renderbuffer_image &&
|
||||
disp->Extensions.KHR_create_context &&
|
||||
disp->Extensions.EXT_create_context_robustness &&
|
||||
disp->Extensions.KHR_get_all_proc_addresses &&
|
||||
disp->Extensions.KHR_gl_colorspace &&
|
||||
disp->Extensions.KHR_surfaceless_context)
|
||||
disp->Version = 15;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is typically the second EGL function that an application calls.
|
||||
@@ -504,18 +444,17 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
|
||||
*/
|
||||
disp->Extensions.KHR_get_all_proc_addresses = EGL_TRUE;
|
||||
|
||||
_eglComputeVersion(disp);
|
||||
_eglCreateExtensionsString(disp);
|
||||
_eglCreateAPIsString(disp);
|
||||
_eglsnprintf(disp->VersionString, sizeof(disp->VersionString),
|
||||
"%d.%d (%s)", disp->Version / 10, disp->Version % 10,
|
||||
"%d.%d (%s)", disp->VersionMajor, disp->VersionMinor,
|
||||
disp->Driver->Name);
|
||||
}
|
||||
|
||||
/* Update applications version of major and minor if not NULL */
|
||||
if ((major != NULL) && (minor != NULL)) {
|
||||
*major = disp->Version / 10;
|
||||
*minor = disp->Version % 10;
|
||||
*major = disp->VersionMajor;
|
||||
*minor = disp->VersionMinor;
|
||||
}
|
||||
|
||||
RETURN_EGL_SUCCESS(disp, EGL_TRUE);
|
||||
@@ -782,24 +721,6 @@ eglCreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config,
|
||||
}
|
||||
|
||||
|
||||
EGLSurface EGLAPIENTRY
|
||||
eglCreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config,
|
||||
void *native_window,
|
||||
const EGLAttrib *attrib_list)
|
||||
{
|
||||
EGLSurface surface;
|
||||
EGLint *int_attribs = _eglConvertAttribsToInt(attrib_list);
|
||||
|
||||
if (attrib_list && !int_attribs)
|
||||
RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_NO_SURFACE);
|
||||
|
||||
surface = eglCreatePlatformWindowSurfaceEXT(dpy, config, native_window,
|
||||
int_attribs);
|
||||
free(int_attribs);
|
||||
return surface;
|
||||
}
|
||||
|
||||
|
||||
static EGLSurface
|
||||
_eglCreatePixmapSurfaceCommon(_EGLDisplay *disp, EGLConfig config,
|
||||
void *native_pixmap, const EGLint *attrib_list)
|
||||
@@ -853,24 +774,6 @@ eglCreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config,
|
||||
}
|
||||
|
||||
|
||||
EGLSurface EGLAPIENTRY
|
||||
eglCreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config,
|
||||
void *native_pixmap,
|
||||
const EGLAttrib *attrib_list)
|
||||
{
|
||||
EGLSurface surface;
|
||||
EGLint *int_attribs = _eglConvertAttribsToInt(attrib_list);
|
||||
|
||||
if (attrib_list && !int_attribs)
|
||||
RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_NO_SURFACE);
|
||||
|
||||
surface = eglCreatePlatformPixmapSurfaceEXT(dpy, config, native_pixmap,
|
||||
int_attribs);
|
||||
free(int_attribs);
|
||||
return surface;
|
||||
}
|
||||
|
||||
|
||||
EGLSurface EGLAPIENTRY
|
||||
eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config,
|
||||
const EGLint *attrib_list)
|
||||
@@ -1317,7 +1220,7 @@ eglReleaseThread(void)
|
||||
}
|
||||
|
||||
|
||||
static EGLImage EGLAPIENTRY
|
||||
static EGLImageKHR EGLAPIENTRY
|
||||
eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target,
|
||||
EGLClientBuffer buffer, const EGLint *attr_list)
|
||||
{
|
||||
@@ -1325,7 +1228,7 @@ eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target,
|
||||
_EGLContext *context = _eglLookupContext(ctx, disp);
|
||||
_EGLDriver *drv;
|
||||
_EGLImage *img;
|
||||
EGLImage ret;
|
||||
EGLImageKHR ret;
|
||||
|
||||
_EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv);
|
||||
if (!disp->Extensions.KHR_image_base)
|
||||
@@ -1346,24 +1249,8 @@ eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target,
|
||||
}
|
||||
|
||||
|
||||
EGLImage EGLAPIENTRY
|
||||
eglCreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target,
|
||||
EGLClientBuffer buffer, const EGLAttrib *attr_list)
|
||||
{
|
||||
EGLImage image;
|
||||
EGLint *int_attribs = _eglConvertAttribsToInt(attr_list);
|
||||
|
||||
if (attr_list && !int_attribs)
|
||||
RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_NO_IMAGE);
|
||||
|
||||
image = eglCreateImageKHR(dpy, ctx, target, buffer, int_attribs);
|
||||
free(int_attribs);
|
||||
return image;
|
||||
}
|
||||
|
||||
|
||||
EGLBoolean EGLAPIENTRY
|
||||
eglDestroyImage(EGLDisplay dpy, EGLImage image)
|
||||
static EGLBoolean EGLAPIENTRY
|
||||
eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
_EGLImage *img = _eglLookupImage(image, disp);
|
||||
@@ -1383,16 +1270,15 @@ eglDestroyImage(EGLDisplay dpy, EGLImage image)
|
||||
}
|
||||
|
||||
|
||||
static EGLSync
|
||||
static EGLSyncKHR
|
||||
_eglCreateSync(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list,
|
||||
const EGLAttrib *attrib_list64, EGLBoolean is64,
|
||||
EGLenum invalid_type_error)
|
||||
const EGLAttribKHR *attrib_list64, EGLBoolean is64)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
_EGLContext *ctx = _eglGetCurrentContext();
|
||||
_EGLDriver *drv;
|
||||
_EGLSync *sync;
|
||||
EGLSync ret;
|
||||
EGLSyncKHR ret;
|
||||
|
||||
_EGL_CHECK_DISPLAY(disp, EGL_NO_SYNC_KHR, drv);
|
||||
|
||||
@@ -1407,18 +1293,18 @@ _eglCreateSync(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list,
|
||||
switch (type) {
|
||||
case EGL_SYNC_FENCE_KHR:
|
||||
if (!disp->Extensions.KHR_fence_sync)
|
||||
RETURN_EGL_ERROR(disp, invalid_type_error, EGL_NO_SYNC_KHR);
|
||||
RETURN_EGL_ERROR(disp, EGL_BAD_ATTRIBUTE, EGL_NO_SYNC_KHR);
|
||||
break;
|
||||
case EGL_SYNC_REUSABLE_KHR:
|
||||
if (!disp->Extensions.KHR_reusable_sync)
|
||||
RETURN_EGL_ERROR(disp, invalid_type_error, EGL_NO_SYNC_KHR);
|
||||
RETURN_EGL_ERROR(disp, EGL_BAD_ATTRIBUTE, EGL_NO_SYNC_KHR);
|
||||
break;
|
||||
case EGL_SYNC_CL_EVENT_KHR:
|
||||
if (!disp->Extensions.KHR_cl_event2)
|
||||
RETURN_EGL_ERROR(disp, invalid_type_error, EGL_NO_SYNC_KHR);
|
||||
RETURN_EGL_ERROR(disp, EGL_BAD_ATTRIBUTE, EGL_NO_SYNC_KHR);
|
||||
break;
|
||||
default:
|
||||
RETURN_EGL_ERROR(disp, invalid_type_error, EGL_NO_SYNC_KHR);
|
||||
RETURN_EGL_ERROR(disp, EGL_BAD_ATTRIBUTE, EGL_NO_SYNC_KHR);
|
||||
}
|
||||
|
||||
sync = drv->API.CreateSyncKHR(drv, disp, type, attrib_list, attrib_list64);
|
||||
@@ -1428,32 +1314,22 @@ _eglCreateSync(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list,
|
||||
}
|
||||
|
||||
|
||||
static EGLSync EGLAPIENTRY
|
||||
static EGLSyncKHR EGLAPIENTRY
|
||||
eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
|
||||
{
|
||||
return _eglCreateSync(dpy, type, attrib_list, NULL, EGL_FALSE,
|
||||
EGL_BAD_ATTRIBUTE);
|
||||
return _eglCreateSync(dpy, type, attrib_list, NULL, EGL_FALSE);
|
||||
}
|
||||
|
||||
|
||||
static EGLSync EGLAPIENTRY
|
||||
eglCreateSync64KHR(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list)
|
||||
static EGLSyncKHR EGLAPIENTRY
|
||||
eglCreateSync64KHR(EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list)
|
||||
{
|
||||
return _eglCreateSync(dpy, type, NULL, attrib_list, EGL_TRUE,
|
||||
EGL_BAD_ATTRIBUTE);
|
||||
return _eglCreateSync(dpy, type, NULL, attrib_list, EGL_TRUE);
|
||||
}
|
||||
|
||||
|
||||
EGLSync EGLAPIENTRY
|
||||
eglCreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list)
|
||||
{
|
||||
return _eglCreateSync(dpy, type, NULL, attrib_list, EGL_TRUE,
|
||||
EGL_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
|
||||
EGLBoolean EGLAPIENTRY
|
||||
eglDestroySync(EGLDisplay dpy, EGLSync sync)
|
||||
static EGLBoolean EGLAPIENTRY
|
||||
eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
_EGLSync *s = _eglLookupSync(sync, disp);
|
||||
@@ -1471,8 +1347,8 @@ eglDestroySync(EGLDisplay dpy, EGLSync sync)
|
||||
}
|
||||
|
||||
|
||||
EGLint EGLAPIENTRY
|
||||
eglClientWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout)
|
||||
static EGLint EGLAPIENTRY
|
||||
eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
_EGLSync *s = _eglLookupSync(sync, disp);
|
||||
@@ -1493,7 +1369,7 @@ eglClientWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout)
|
||||
|
||||
|
||||
static EGLint EGLAPIENTRY
|
||||
eglWaitSyncKHR(EGLDisplay dpy, EGLSync sync, EGLint flags)
|
||||
eglWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
_EGLSync *s = _eglLookupSync(sync, disp);
|
||||
@@ -1518,19 +1394,8 @@ eglWaitSyncKHR(EGLDisplay dpy, EGLSync sync, EGLint flags)
|
||||
}
|
||||
|
||||
|
||||
EGLBoolean EGLAPIENTRY
|
||||
eglWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags)
|
||||
{
|
||||
/* The KHR version returns EGLint, while the core version returns
|
||||
* EGLBoolean. In both cases, the return values can only be EGL_FALSE and
|
||||
* EGL_TRUE.
|
||||
*/
|
||||
return eglWaitSyncKHR(dpy, sync, flags);
|
||||
}
|
||||
|
||||
|
||||
static EGLBoolean EGLAPIENTRY
|
||||
eglSignalSyncKHR(EGLDisplay dpy, EGLSync sync, EGLenum mode)
|
||||
eglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
_EGLSync *s = _eglLookupSync(sync, disp);
|
||||
@@ -1545,8 +1410,8 @@ eglSignalSyncKHR(EGLDisplay dpy, EGLSync sync, EGLenum mode)
|
||||
}
|
||||
|
||||
|
||||
EGLBoolean EGLAPIENTRY
|
||||
eglGetSyncAttrib(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value)
|
||||
static EGLBoolean EGLAPIENTRY
|
||||
eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
_EGLSync *s = _eglLookupSync(sync, disp);
|
||||
@@ -1556,30 +1421,12 @@ eglGetSyncAttrib(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *valu
|
||||
_EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv);
|
||||
assert(disp->Extensions.KHR_reusable_sync ||
|
||||
disp->Extensions.KHR_fence_sync);
|
||||
ret = drv->API.GetSyncAttrib(drv, disp, s, attribute, value);
|
||||
ret = drv->API.GetSyncAttribKHR(drv, disp, s, attribute, value);
|
||||
|
||||
RETURN_EGL_EVAL(disp, ret);
|
||||
}
|
||||
|
||||
|
||||
static EGLBoolean EGLAPIENTRY
|
||||
eglGetSyncAttribKHR(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLint *value)
|
||||
{
|
||||
EGLAttrib attrib = *value;
|
||||
EGLBoolean result = eglGetSyncAttrib(dpy, sync, attribute, &attrib);
|
||||
|
||||
/* The EGL_KHR_fence_sync spec says this about eglGetSyncAttribKHR:
|
||||
*
|
||||
* If any error occurs, <*value> is not modified.
|
||||
*/
|
||||
if (result == EGL_FALSE)
|
||||
return result;
|
||||
|
||||
*value = attrib;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
#ifdef EGL_NOK_swap_region
|
||||
|
||||
static EGLBoolean EGLAPIENTRY
|
||||
@@ -1612,13 +1459,13 @@ eglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface surface,
|
||||
|
||||
#ifdef EGL_MESA_drm_image
|
||||
|
||||
static EGLImage EGLAPIENTRY
|
||||
static EGLImageKHR EGLAPIENTRY
|
||||
eglCreateDRMImageMESA(EGLDisplay dpy, const EGLint *attr_list)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
_EGLDriver *drv;
|
||||
_EGLImage *img;
|
||||
EGLImage ret;
|
||||
EGLImageKHR ret;
|
||||
|
||||
_EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv);
|
||||
if (!disp->Extensions.MESA_drm_image)
|
||||
@@ -1631,7 +1478,7 @@ eglCreateDRMImageMESA(EGLDisplay dpy, const EGLint *attr_list)
|
||||
}
|
||||
|
||||
static EGLBoolean EGLAPIENTRY
|
||||
eglExportDRMImageMESA(EGLDisplay dpy, EGLImage image,
|
||||
eglExportDRMImageMESA(EGLDisplay dpy, EGLImageKHR image,
|
||||
EGLint *name, EGLint *handle, EGLint *stride)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
@@ -1713,7 +1560,7 @@ eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_resource *buffer,
|
||||
|
||||
#ifdef EGL_WL_create_wayland_buffer_from_image
|
||||
static struct wl_buffer * EGLAPIENTRY
|
||||
eglCreateWaylandBufferFromImageWL(EGLDisplay dpy, EGLImage image)
|
||||
eglCreateWaylandBufferFromImageWL(EGLDisplay dpy, EGLImageKHR image)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
_EGLImage *img;
|
||||
@@ -1777,7 +1624,7 @@ eglGetSyncValuesCHROMIUM(EGLDisplay display, EGLSurface surface,
|
||||
|
||||
#ifdef EGL_MESA_image_dma_buf_export
|
||||
static EGLBoolean EGLAPIENTRY
|
||||
eglExportDMABUFImageQueryMESA(EGLDisplay dpy, EGLImage image,
|
||||
eglExportDMABUFImageQueryMESA(EGLDisplay dpy, EGLImageKHR image,
|
||||
EGLint *fourcc, EGLint *nplanes,
|
||||
EGLuint64KHR *modifiers)
|
||||
{
|
||||
@@ -1799,7 +1646,7 @@ eglExportDMABUFImageQueryMESA(EGLDisplay dpy, EGLImage image,
|
||||
}
|
||||
|
||||
static EGLBoolean EGLAPIENTRY
|
||||
eglExportDMABUFImageMESA(EGLDisplay dpy, EGLImage image,
|
||||
eglExportDMABUFImageMESA(EGLDisplay dpy, EGLImageKHR image,
|
||||
int *fds, EGLint *strides, EGLint *offsets)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
@@ -1864,25 +1711,15 @@ eglGetProcAddress(const char *procname)
|
||||
{ "eglWaitClient", (_EGLProc) eglWaitClient },
|
||||
{ "eglWaitGL", (_EGLProc) eglWaitGL },
|
||||
{ "eglWaitNative", (_EGLProc) eglWaitNative },
|
||||
{ "eglCreateSync", (_EGLProc) eglCreateSync },
|
||||
{ "eglDestroySync", (_EGLProc) eglDestroySync },
|
||||
{ "eglClientWaitSync", (_EGLProc) eglClientWaitSync },
|
||||
{ "eglGetSyncAttrib", (_EGLProc) eglGetSyncAttrib },
|
||||
{ "eglWaitSync", (_EGLProc) eglWaitSync },
|
||||
{ "eglCreateImage", (_EGLProc) eglCreateImage },
|
||||
{ "eglDestroyImage", (_EGLProc) eglDestroyImage },
|
||||
{ "eglGetPlatformDisplay", (_EGLProc) eglGetPlatformDisplay },
|
||||
{ "eglCreatePlatformWindowSurface", (_EGLProc) eglCreatePlatformWindowSurface },
|
||||
{ "eglCreatePlatformPixmapSurface", (_EGLProc) eglCreatePlatformPixmapSurface },
|
||||
#ifdef EGL_MESA_drm_display
|
||||
{ "eglGetDRMDisplayMESA", (_EGLProc) eglGetDRMDisplayMESA },
|
||||
#endif
|
||||
{ "eglCreateImageKHR", (_EGLProc) eglCreateImageKHR },
|
||||
{ "eglDestroyImageKHR", (_EGLProc) eglDestroyImage },
|
||||
{ "eglDestroyImageKHR", (_EGLProc) eglDestroyImageKHR },
|
||||
{ "eglCreateSyncKHR", (_EGLProc) eglCreateSyncKHR },
|
||||
{ "eglCreateSync64KHR", (_EGLProc) eglCreateSync64KHR },
|
||||
{ "eglDestroySyncKHR", (_EGLProc) eglDestroySync },
|
||||
{ "eglClientWaitSyncKHR", (_EGLProc) eglClientWaitSync },
|
||||
{ "eglDestroySyncKHR", (_EGLProc) eglDestroySyncKHR },
|
||||
{ "eglClientWaitSyncKHR", (_EGLProc) eglClientWaitSyncKHR },
|
||||
{ "eglWaitSyncKHR", (_EGLProc) eglWaitSyncKHR },
|
||||
{ "eglSignalSyncKHR", (_EGLProc) eglSignalSyncKHR },
|
||||
{ "eglGetSyncAttribKHR", (_EGLProc) eglGetSyncAttribKHR },
|
||||
|
@@ -91,12 +91,12 @@ typedef _EGLImage *(*CreateImageKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLCo
|
||||
typedef EGLBoolean (*DestroyImageKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLImage *image);
|
||||
|
||||
|
||||
typedef _EGLSync *(*CreateSyncKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, EGLenum type, const EGLint *attrib_list, const EGLAttrib *attrib_list64);
|
||||
typedef _EGLSync *(*CreateSyncKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, EGLenum type, const EGLint *attrib_list, const EGLAttribKHR *attrib_list64);
|
||||
typedef EGLBoolean (*DestroySyncKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync);
|
||||
typedef EGLint (*ClientWaitSyncKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, EGLint flags, EGLTime timeout);
|
||||
typedef EGLint (*ClientWaitSyncKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, EGLint flags, EGLTimeKHR timeout);
|
||||
typedef EGLint (*WaitSyncKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync);
|
||||
typedef EGLBoolean (*SignalSyncKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, EGLenum mode);
|
||||
typedef EGLBoolean (*GetSyncAttrib_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, EGLint attribute, EGLAttrib *value);
|
||||
typedef EGLBoolean (*GetSyncAttribKHR_t)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync, EGLint attribute, EGLint *value);
|
||||
|
||||
|
||||
#ifdef EGL_NOK_swap_region
|
||||
@@ -178,7 +178,7 @@ struct _egl_api
|
||||
ClientWaitSyncKHR_t ClientWaitSyncKHR;
|
||||
WaitSyncKHR_t WaitSyncKHR;
|
||||
SignalSyncKHR_t SignalSyncKHR;
|
||||
GetSyncAttrib_t GetSyncAttrib;
|
||||
GetSyncAttribKHR_t GetSyncAttribKHR;
|
||||
|
||||
#ifdef EGL_NOK_swap_region
|
||||
SwapBuffersRegionNOK_t SwapBuffersRegionNOK;
|
||||
|
@@ -198,36 +198,6 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay *dpy,
|
||||
ctx->Flags |= EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR;
|
||||
break;
|
||||
|
||||
case EGL_CONTEXT_OPENGL_ROBUST_ACCESS:
|
||||
if (dpy->Version < 15) {
|
||||
err = EGL_BAD_ATTRIBUTE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (val == EGL_TRUE)
|
||||
ctx->Flags |= EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR;
|
||||
break;
|
||||
|
||||
case EGL_CONTEXT_OPENGL_DEBUG:
|
||||
if (dpy->Version < 15) {
|
||||
err = EGL_BAD_ATTRIBUTE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (val == EGL_TRUE)
|
||||
ctx->Flags |= EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR;
|
||||
break;
|
||||
|
||||
case EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE:
|
||||
if (dpy->Version < 15) {
|
||||
err = EGL_BAD_ATTRIBUTE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (val == EGL_TRUE)
|
||||
ctx->Flags |= EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR;
|
||||
break;
|
||||
|
||||
default:
|
||||
err = EGL_BAD_ATTRIBUTE;
|
||||
break;
|
||||
|
@@ -71,8 +71,7 @@ static const struct {
|
||||
{ _EGL_PLATFORM_DRM, "drm" },
|
||||
{ _EGL_PLATFORM_NULL, "null" },
|
||||
{ _EGL_PLATFORM_ANDROID, "android" },
|
||||
{ _EGL_PLATFORM_HAIKU, "haiku" },
|
||||
{ _EGL_PLATFORM_SURFACELESS, "surfaceless" },
|
||||
{ _EGL_PLATFORM_HAIKU, "haiku" }
|
||||
};
|
||||
|
||||
|
||||
|
@@ -51,7 +51,6 @@ enum _egl_platform_type {
|
||||
_EGL_PLATFORM_NULL,
|
||||
_EGL_PLATFORM_ANDROID,
|
||||
_EGL_PLATFORM_HAIKU,
|
||||
_EGL_PLATFORM_SURFACELESS,
|
||||
|
||||
_EGL_NUM_PLATFORMS,
|
||||
_EGL_INVALID_PLATFORM = -1
|
||||
@@ -102,7 +101,6 @@ struct _egl_extensions
|
||||
EGLBoolean KHR_image_pixmap;
|
||||
EGLBoolean KHR_vg_parent_image;
|
||||
EGLBoolean KHR_get_all_proc_addresses;
|
||||
EGLBoolean KHR_gl_colorspace;
|
||||
EGLBoolean KHR_gl_texture_2D_image;
|
||||
EGLBoolean KHR_gl_texture_cubemap_image;
|
||||
EGLBoolean KHR_gl_texture_3D_image;
|
||||
@@ -155,7 +153,8 @@ struct _egl_display
|
||||
|
||||
/* these fields are set by the driver during init */
|
||||
void *DriverData; /**< Driver private data */
|
||||
EGLint Version; /**< EGL version major*10+minor */
|
||||
EGLint VersionMajor; /**< EGL major version */
|
||||
EGLint VersionMinor; /**< EGL minor version */
|
||||
EGLint ClientAPIs; /**< Bitmask of APIs supported (EGL_xxx_BIT) */
|
||||
_EGLExtensions Extensions; /**< Extensions supported */
|
||||
|
||||
|
@@ -91,7 +91,7 @@ _eglInitDriverFallbacks(_EGLDriver *drv)
|
||||
drv->API.ClientWaitSyncKHR = NULL;
|
||||
drv->API.WaitSyncKHR = NULL;
|
||||
drv->API.SignalSyncKHR = NULL;
|
||||
drv->API.GetSyncAttrib = _eglGetSyncAttrib;
|
||||
drv->API.GetSyncAttribKHR = _eglGetSyncAttribKHR;
|
||||
|
||||
#ifdef EGL_MESA_drm_image
|
||||
drv->API.CreateDRMImageMESA = NULL;
|
||||
|
@@ -50,6 +50,16 @@ struct _egl_global _eglGlobal =
|
||||
_eglFiniDisplay
|
||||
},
|
||||
|
||||
/* ClientExtensions */
|
||||
{
|
||||
true, /* EGL_EXT_client_extensions */
|
||||
true, /* EGL_EXT_platform_base */
|
||||
true, /* EGL_EXT_platform_x11 */
|
||||
true, /* EGL_EXT_platform_wayland */
|
||||
true, /* EGL_MESA_platform_gbm */
|
||||
true, /* EGL_KHR_client_get_all_proc_addresses */
|
||||
},
|
||||
|
||||
/* ClientExtensionsString */
|
||||
"EGL_EXT_client_extensions"
|
||||
" EGL_EXT_platform_base"
|
||||
|
@@ -50,6 +50,15 @@ struct _egl_global
|
||||
EGLint NumAtExitCalls;
|
||||
void (*AtExitCalls[10])(void);
|
||||
|
||||
struct _egl_client_extensions {
|
||||
bool EXT_client_extensions;
|
||||
bool EXT_platform_base;
|
||||
bool EXT_platform_x11;
|
||||
bool EXT_platform_wayland;
|
||||
bool MESA_platform_gbm;
|
||||
bool KHR_get_all_proc_addresses;
|
||||
} ClientExtensions;
|
||||
|
||||
const char *ClientExtensionString;
|
||||
};
|
||||
|
||||
|
@@ -121,11 +121,11 @@ _eglPutImage(_EGLImage *img)
|
||||
* Link an image to its display and return the handle of the link.
|
||||
* The handle can be passed to client directly.
|
||||
*/
|
||||
static inline EGLImage
|
||||
static inline EGLImageKHR
|
||||
_eglLinkImage(_EGLImage *img)
|
||||
{
|
||||
_eglLinkResource(&img->Resource, _EGL_RESOURCE_IMAGE);
|
||||
return (EGLImage) img;
|
||||
return (EGLImageKHR) img;
|
||||
}
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@ _eglUnlinkImage(_EGLImage *img)
|
||||
* Return NULL if the handle has no corresponding linked image.
|
||||
*/
|
||||
static inline _EGLImage *
|
||||
_eglLookupImage(EGLImage image, _EGLDisplay *dpy)
|
||||
_eglLookupImage(EGLImageKHR image, _EGLDisplay *dpy)
|
||||
{
|
||||
_EGLImage *img = (_EGLImage *) image;
|
||||
if (!dpy || !_eglCheckResource((void *) img, _EGL_RESOURCE_IMAGE, dpy))
|
||||
@@ -157,12 +157,12 @@ _eglLookupImage(EGLImage image, _EGLDisplay *dpy)
|
||||
/**
|
||||
* Return the handle of a linked image, or EGL_NO_IMAGE_KHR.
|
||||
*/
|
||||
static inline EGLImage
|
||||
static inline EGLImageKHR
|
||||
_eglGetImageHandle(_EGLImage *img)
|
||||
{
|
||||
_EGLResource *res = (_EGLResource *) img;
|
||||
return (res && _eglIsResourceLinked(res)) ?
|
||||
(EGLImage) img : EGL_NO_IMAGE_KHR;
|
||||
(EGLImageKHR) img : EGL_NO_IMAGE_KHR;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -309,7 +309,8 @@ _eglQuerySurface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surface,
|
||||
*value = surface->Config->ConfigID;
|
||||
break;
|
||||
case EGL_LARGEST_PBUFFER:
|
||||
*value = surface->LargestPbuffer;
|
||||
if (surface->Type == EGL_PBUFFER_BIT)
|
||||
*value = surface->LargestPbuffer;
|
||||
break;
|
||||
case EGL_TEXTURE_FORMAT:
|
||||
/* texture attributes: only for pbuffers, no error otherwise */
|
||||
|
@@ -67,7 +67,7 @@ _eglParseSyncAttribList(_EGLSync *sync, const EGLint *attrib_list)
|
||||
|
||||
|
||||
static EGLint
|
||||
_eglParseSyncAttribList64(_EGLSync *sync, const EGLAttrib *attrib_list)
|
||||
_eglParseSyncAttribList64(_EGLSync *sync, const EGLAttribKHR *attrib_list)
|
||||
{
|
||||
EGLint i, err = EGL_SUCCESS;
|
||||
|
||||
@@ -103,7 +103,7 @@ _eglParseSyncAttribList64(_EGLSync *sync, const EGLAttrib *attrib_list)
|
||||
|
||||
EGLBoolean
|
||||
_eglInitSync(_EGLSync *sync, _EGLDisplay *dpy, EGLenum type,
|
||||
const EGLint *attrib_list, const EGLAttrib *attrib_list64)
|
||||
const EGLint *attrib_list, const EGLAttribKHR *attrib_list64)
|
||||
{
|
||||
EGLint err;
|
||||
|
||||
@@ -141,8 +141,8 @@ _eglInitSync(_EGLSync *sync, _EGLDisplay *dpy, EGLenum type,
|
||||
|
||||
|
||||
EGLBoolean
|
||||
_eglGetSyncAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync,
|
||||
EGLint attribute, EGLAttrib *value)
|
||||
_eglGetSyncAttribKHR(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync,
|
||||
EGLint attribute, EGLint *value)
|
||||
{
|
||||
if (!value)
|
||||
return _eglError(EGL_BAD_PARAMETER, "eglGetSyncAttribKHR");
|
||||
|
@@ -47,18 +47,18 @@ struct _egl_sync
|
||||
EGLenum Type;
|
||||
EGLenum SyncStatus;
|
||||
EGLenum SyncCondition;
|
||||
EGLAttrib CLEvent;
|
||||
EGLAttribKHR CLEvent;
|
||||
};
|
||||
|
||||
|
||||
extern EGLBoolean
|
||||
_eglInitSync(_EGLSync *sync, _EGLDisplay *dpy, EGLenum type,
|
||||
const EGLint *attrib_list, const EGLAttrib *attrib_list64);
|
||||
const EGLint *attrib_list, const EGLAttribKHR *attrib_list64);
|
||||
|
||||
|
||||
extern EGLBoolean
|
||||
_eglGetSyncAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync,
|
||||
EGLint attribute, EGLAttrib *value);
|
||||
_eglGetSyncAttribKHR(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync,
|
||||
EGLint attribute, EGLint *value);
|
||||
|
||||
|
||||
/**
|
||||
@@ -87,11 +87,11 @@ _eglPutSync(_EGLSync *sync)
|
||||
* Link a sync to its display and return the handle of the link.
|
||||
* The handle can be passed to client directly.
|
||||
*/
|
||||
static inline EGLSync
|
||||
static inline EGLSyncKHR
|
||||
_eglLinkSync(_EGLSync *sync)
|
||||
{
|
||||
_eglLinkResource(&sync->Resource, _EGL_RESOURCE_SYNC);
|
||||
return (EGLSync) sync;
|
||||
return (EGLSyncKHR) sync;
|
||||
}
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@ _eglUnlinkSync(_EGLSync *sync)
|
||||
* Return NULL if the handle has no corresponding linked sync.
|
||||
*/
|
||||
static inline _EGLSync *
|
||||
_eglLookupSync(EGLSync handle, _EGLDisplay *dpy)
|
||||
_eglLookupSync(EGLSyncKHR handle, _EGLDisplay *dpy)
|
||||
{
|
||||
_EGLSync *sync = (_EGLSync *) handle;
|
||||
if (!dpy || !_eglCheckResource((void *) sync, _EGL_RESOURCE_SYNC, dpy))
|
||||
@@ -122,12 +122,12 @@ _eglLookupSync(EGLSync handle, _EGLDisplay *dpy)
|
||||
/**
|
||||
* Return the handle of a linked sync, or EGL_NO_SYNC_KHR.
|
||||
*/
|
||||
static inline EGLSync
|
||||
static inline EGLSyncKHR
|
||||
_eglGetSyncHandle(_EGLSync *sync)
|
||||
{
|
||||
_EGLResource *res = (_EGLResource *) sync;
|
||||
return (res && _eglIsResourceLinked(res)) ?
|
||||
(EGLSync) sync : EGL_NO_SYNC_KHR;
|
||||
(EGLSyncKHR) sync : EGL_NO_SYNC_KHR;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -29,12 +29,4 @@ LOCAL_C_INCLUDES += \
|
||||
$(GALLIUM_TOP)/winsys \
|
||||
$(GALLIUM_TOP)/drivers
|
||||
|
||||
ifeq ($(MESA_ENABLE_LLVM),true)
|
||||
LOCAL_C_INCLUDES += \
|
||||
external/llvm/include \
|
||||
external/llvm/device/include \
|
||||
external/libcxx/include \
|
||||
external/elfutils/$(if $(filter true,$(MESA_LOLLIPOP_BUILD)),0.153/)libelf
|
||||
endif
|
||||
|
||||
include $(MESA_COMMON_MK)
|
||||
|
@@ -33,9 +33,7 @@ SUBDIRS := auxiliary
|
||||
#
|
||||
|
||||
# swrast
|
||||
ifneq ($(filter swrast,$(MESA_GPU_DRIVERS)),)
|
||||
SUBDIRS += winsys/sw/dri winsys/sw/kms-dri drivers/softpipe
|
||||
endif
|
||||
SUBDIRS += winsys/sw/android drivers/softpipe
|
||||
|
||||
# freedreno
|
||||
ifneq ($(filter freedreno, $(MESA_GPU_DRIVERS)),)
|
||||
@@ -76,17 +74,10 @@ endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# vc4
|
||||
ifneq ($(filter vc4, $(MESA_GPU_DRIVERS)),)
|
||||
SUBDIRS += winsys/vc4/drm drivers/vc4
|
||||
endif
|
||||
|
||||
# vmwgfx
|
||||
ifneq ($(filter vmwgfx, $(MESA_GPU_DRIVERS)),)
|
||||
SUBDIRS += winsys/svga/drm drivers/svga
|
||||
endif
|
||||
|
||||
# Gallium state trackers and target for dri
|
||||
SUBDIRS += state_trackers/dri targets/dri
|
||||
|
||||
include $(call all-named-subdir-makefiles,$(SUBDIRS))
|
||||
mkfiles := $(patsubst %,$(GALLIUM_TOP)/%/Android.mk,$(SUBDIRS))
|
||||
include $(mkfiles)
|
||||
|
@@ -30,23 +30,12 @@ include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := \
|
||||
$(C_SOURCES) \
|
||||
$(NIR_SOURCES) \
|
||||
$(VL_STUB_SOURCES)
|
||||
|
||||
LOCAL_C_INCLUDES := \
|
||||
$(GALLIUM_TOP)/auxiliary/util
|
||||
|
||||
ifeq ($(MESA_ENABLE_LLVM),true)
|
||||
LOCAL_SRC_FILES += \
|
||||
$(GALLIVM_SOURCES) \
|
||||
$(GALLIVM_CPP_SOURCES)
|
||||
|
||||
LOCAL_CPPFLAGS := -std=c++11
|
||||
endif
|
||||
|
||||
# We need libmesa_glsl to get NIR's generated include directories.
|
||||
LOCAL_MODULE := libmesa_gallium
|
||||
LOCAL_STATIC_LIBRARIES += libmesa_glsl
|
||||
|
||||
# generate sources
|
||||
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
|
||||
|
@@ -190,15 +190,9 @@ static void tgsi_gs_prepare(struct draw_geometry_shader *shader,
|
||||
const unsigned constants_size[PIPE_MAX_CONSTANT_BUFFERS])
|
||||
{
|
||||
struct tgsi_exec_machine *machine = shader->machine;
|
||||
int j;
|
||||
|
||||
tgsi_exec_set_constant_buffers(machine, PIPE_MAX_CONSTANT_BUFFERS,
|
||||
constants, constants_size);
|
||||
|
||||
if (shader->info.uses_invocationid) {
|
||||
unsigned i = machine->SysSemanticToIndex[TGSI_SEMANTIC_INVOCATIONID];
|
||||
for (j = 0; j < TGSI_QUAD_SIZE; j++)
|
||||
machine->SystemValue[i].i[j] = shader->invocation_id;
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned tgsi_gs_run(struct draw_geometry_shader *shader,
|
||||
@@ -391,8 +385,7 @@ llvm_gs_run(struct draw_geometry_shader *shader,
|
||||
(struct vertex_header*)input,
|
||||
input_primitives,
|
||||
shader->draw->instance_id,
|
||||
shader->llvm_prim_ids,
|
||||
shader->invocation_id);
|
||||
shader->llvm_prim_ids);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -562,7 +555,7 @@ int draw_geometry_shader_run(struct draw_geometry_shader *shader,
|
||||
* overflown vertices into some area where they won't harm anyone */
|
||||
unsigned total_verts_per_buffer = shader->primitive_boundary *
|
||||
num_in_primitives;
|
||||
unsigned invocation;
|
||||
|
||||
//Assume at least one primitive
|
||||
max_out_prims = MAX2(max_out_prims, 1);
|
||||
|
||||
@@ -571,7 +564,7 @@ int draw_geometry_shader_run(struct draw_geometry_shader *shader,
|
||||
output_verts->stride = output_verts->vertex_size;
|
||||
output_verts->verts =
|
||||
(struct vertex_header *)MALLOC(output_verts->vertex_size *
|
||||
total_verts_per_buffer * shader->num_invocations);
|
||||
total_verts_per_buffer);
|
||||
debug_assert(output_verts->verts);
|
||||
|
||||
#if 0
|
||||
@@ -599,7 +592,7 @@ int draw_geometry_shader_run(struct draw_geometry_shader *shader,
|
||||
shader->input = input;
|
||||
shader->input_info = input_info;
|
||||
FREE(shader->primitive_lengths);
|
||||
shader->primitive_lengths = MALLOC(max_out_prims * sizeof(unsigned) * shader->num_invocations);
|
||||
shader->primitive_lengths = MALLOC(max_out_prims * sizeof(unsigned));
|
||||
|
||||
|
||||
#ifdef HAVE_LLVM
|
||||
@@ -629,27 +622,24 @@ int draw_geometry_shader_run(struct draw_geometry_shader *shader,
|
||||
}
|
||||
#endif
|
||||
|
||||
for (invocation = 0; invocation < shader->num_invocations; invocation++) {
|
||||
shader->invocation_id = invocation;
|
||||
shader->prepare(shader, constants, constants_size);
|
||||
|
||||
shader->prepare(shader, constants, constants_size);
|
||||
if (input_prim->linear)
|
||||
gs_run(shader, input_prim, input_verts,
|
||||
output_prims, output_verts);
|
||||
else
|
||||
gs_run_elts(shader, input_prim, input_verts,
|
||||
output_prims, output_verts);
|
||||
|
||||
if (input_prim->linear)
|
||||
gs_run(shader, input_prim, input_verts,
|
||||
output_prims, output_verts);
|
||||
else
|
||||
gs_run_elts(shader, input_prim, input_verts,
|
||||
output_prims, output_verts);
|
||||
|
||||
/* Flush the remaining primitives. Will happen if
|
||||
* num_input_primitives % 4 != 0
|
||||
*/
|
||||
if (shader->fetched_prim_count > 0) {
|
||||
gs_flush(shader);
|
||||
}
|
||||
debug_assert(shader->fetched_prim_count == 0);
|
||||
/* Flush the remaining primitives. Will happen if
|
||||
* num_input_primitives % 4 != 0
|
||||
*/
|
||||
if (shader->fetched_prim_count > 0) {
|
||||
gs_flush(shader);
|
||||
}
|
||||
|
||||
debug_assert(shader->fetched_prim_count == 0);
|
||||
|
||||
/* Update prim_info:
|
||||
*/
|
||||
output_prims->linear = TRUE;
|
||||
@@ -781,8 +771,6 @@ draw_create_geometry_shader(struct draw_context *draw,
|
||||
gs->info.properties[TGSI_PROPERTY_GS_OUTPUT_PRIM];
|
||||
gs->max_output_vertices =
|
||||
gs->info.properties[TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES];
|
||||
gs->num_invocations =
|
||||
gs->info.properties[TGSI_PROPERTY_GS_INVOCATIONS];
|
||||
if (!gs->max_output_vertices)
|
||||
gs->max_output_vertices = 32;
|
||||
|
||||
|
@@ -90,8 +90,6 @@ struct draw_geometry_shader {
|
||||
unsigned vector_length;
|
||||
unsigned max_out_prims;
|
||||
|
||||
unsigned num_invocations;
|
||||
unsigned invocation_id;
|
||||
#ifdef HAVE_LLVM
|
||||
struct draw_gs_inputs *gs_input;
|
||||
struct draw_gs_jit_context *jit_context;
|
||||
|
@@ -97,7 +97,6 @@ create_jit_dvbuffer_type(struct gallivm_state *gallivm,
|
||||
dvbuffer_type = LLVMStructTypeInContext(gallivm->context, elem_types,
|
||||
Elements(elem_types), 0);
|
||||
|
||||
(void) target; /* silence unused var warning for non-debug build */
|
||||
LP_CHECK_MEMBER_OFFSET(struct draw_vertex_buffer, map,
|
||||
target, dvbuffer_type,
|
||||
DRAW_JIT_DVBUFFER_MAP);
|
||||
@@ -134,7 +133,6 @@ create_jit_texture_type(struct gallivm_state *gallivm, const char *struct_name)
|
||||
texture_type = LLVMStructTypeInContext(gallivm->context, elem_types,
|
||||
Elements(elem_types), 0);
|
||||
|
||||
(void) target; /* silence unused var warning for non-debug build */
|
||||
LP_CHECK_MEMBER_OFFSET(struct draw_jit_texture, width,
|
||||
target, texture_type,
|
||||
DRAW_JIT_TEXTURE_WIDTH);
|
||||
@@ -292,7 +290,6 @@ create_gs_jit_context_type(struct gallivm_state *gallivm,
|
||||
context_type = LLVMStructTypeInContext(gallivm->context, elem_types,
|
||||
Elements(elem_types), 0);
|
||||
|
||||
(void) target; /* silence unused var warning for non-debug build */
|
||||
LP_CHECK_MEMBER_OFFSET(struct draw_gs_jit_context, constants,
|
||||
target, context_type, DRAW_GS_JIT_CTX_CONSTANTS);
|
||||
LP_CHECK_MEMBER_OFFSET(struct draw_gs_jit_context, num_constants,
|
||||
@@ -356,7 +353,6 @@ create_jit_vertex_buffer_type(struct gallivm_state *gallivm,
|
||||
vb_type = LLVMStructTypeInContext(gallivm->context, elem_types,
|
||||
Elements(elem_types), 0);
|
||||
|
||||
(void) target; /* silence unused var warning for non-debug build */
|
||||
LP_CHECK_MEMBER_OFFSET(struct pipe_vertex_buffer, stride,
|
||||
target, vb_type, 0);
|
||||
LP_CHECK_MEMBER_OFFSET(struct pipe_vertex_buffer, buffer_offset,
|
||||
@@ -2069,7 +2065,7 @@ draw_gs_llvm_generate(struct draw_llvm *llvm,
|
||||
struct gallivm_state *gallivm = variant->gallivm;
|
||||
LLVMContextRef context = gallivm->context;
|
||||
LLVMTypeRef int32_type = LLVMInt32TypeInContext(context);
|
||||
LLVMTypeRef arg_types[7];
|
||||
LLVMTypeRef arg_types[6];
|
||||
LLVMTypeRef func_type;
|
||||
LLVMValueRef variant_func;
|
||||
LLVMValueRef context_ptr;
|
||||
@@ -2105,7 +2101,6 @@ draw_gs_llvm_generate(struct draw_llvm *llvm,
|
||||
arg_types[4] = int32_type; /* instance_id */
|
||||
arg_types[5] = LLVMPointerType(
|
||||
LLVMVectorType(int32_type, vector_length), 0); /* prim_id_ptr */
|
||||
arg_types[6] = int32_type;
|
||||
|
||||
func_type = LLVMFunctionType(int32_type, arg_types, Elements(arg_types), 0);
|
||||
|
||||
@@ -2126,7 +2121,6 @@ draw_gs_llvm_generate(struct draw_llvm *llvm,
|
||||
num_prims = LLVMGetParam(variant_func, 3);
|
||||
system_values.instance_id = LLVMGetParam(variant_func, 4);
|
||||
prim_id_ptr = LLVMGetParam(variant_func, 5);
|
||||
system_values.invocation_id = LLVMGetParam(variant_func, 6);
|
||||
|
||||
lp_build_name(context_ptr, "context");
|
||||
lp_build_name(input_array, "input");
|
||||
@@ -2134,7 +2128,6 @@ draw_gs_llvm_generate(struct draw_llvm *llvm,
|
||||
lp_build_name(num_prims, "num_prims");
|
||||
lp_build_name(system_values.instance_id, "instance_id");
|
||||
lp_build_name(prim_id_ptr, "prim_id_ptr");
|
||||
lp_build_name(system_values.invocation_id, "invocation_id");
|
||||
|
||||
variant->context_ptr = context_ptr;
|
||||
variant->io_ptr = io_ptr;
|
||||
|
@@ -298,8 +298,7 @@ typedef int
|
||||
struct vertex_header *output,
|
||||
unsigned num_prims,
|
||||
unsigned instance_id,
|
||||
int *prim_ids,
|
||||
unsigned invocation_id);
|
||||
int *prim_ids);
|
||||
|
||||
struct draw_llvm_variant_key
|
||||
{
|
||||
|
@@ -51,7 +51,7 @@
|
||||
|
||||
|
||||
/** Approx number of new tokens for instructions in aa_transform_inst() */
|
||||
#define NUM_NEW_TOKENS 53
|
||||
#define NUM_NEW_TOKENS 50
|
||||
|
||||
|
||||
/**
|
||||
@@ -137,7 +137,6 @@ struct aa_transform_context {
|
||||
uint tempsUsed; /**< bitmask */
|
||||
int colorOutput; /**< which output is the primary color */
|
||||
uint samplersUsed; /**< bitfield of samplers used */
|
||||
bool hasSview;
|
||||
int freeSampler; /** an available sampler for the pstipple */
|
||||
int maxInput, maxGeneric; /**< max input index found */
|
||||
int colorTemp, texTemp; /**< temp registers */
|
||||
@@ -166,9 +165,6 @@ aa_transform_decl(struct tgsi_transform_context *ctx,
|
||||
aactx->samplersUsed |= 1 << i;
|
||||
}
|
||||
}
|
||||
else if (decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) {
|
||||
aactx->hasSview = true;
|
||||
}
|
||||
else if (decl->Declaration.File == TGSI_FILE_INPUT) {
|
||||
if ((int) decl->Range.Last > aactx->maxInput)
|
||||
aactx->maxInput = decl->Range.Last;
|
||||
@@ -236,17 +232,6 @@ aa_transform_prolog(struct tgsi_transform_context *ctx)
|
||||
/* declare new sampler */
|
||||
tgsi_transform_sampler_decl(ctx, aactx->freeSampler);
|
||||
|
||||
/* if the src shader has SVIEW decl's for each SAMP decl, we
|
||||
* need to continue the trend and ensure there is a matching
|
||||
* SVIEW for the new SAMP we just created
|
||||
*/
|
||||
if (aactx->hasSview) {
|
||||
tgsi_transform_sampler_view_decl(ctx,
|
||||
aactx->freeSampler,
|
||||
TGSI_TEXTURE_2D,
|
||||
TGSI_RETURN_TYPE_FLOAT);
|
||||
}
|
||||
|
||||
/* declare new temp regs */
|
||||
tgsi_transform_temp_decl(ctx, aactx->texTemp);
|
||||
tgsi_transform_temp_decl(ctx, aactx->colorTemp);
|
||||
|
@@ -53,7 +53,7 @@
|
||||
|
||||
|
||||
/** Approx number of new tokens for instructions in pstip_transform_inst() */
|
||||
#define NUM_NEW_TOKENS 53
|
||||
#define NUM_NEW_TOKENS 50
|
||||
|
||||
|
||||
/**
|
||||
@@ -126,7 +126,6 @@ struct pstip_transform_context {
|
||||
int wincoordInput;
|
||||
int maxInput;
|
||||
uint samplersUsed; /**< bitfield of samplers used */
|
||||
bool hasSview;
|
||||
int freeSampler; /** an available sampler for the pstipple */
|
||||
int texTemp; /**< temp registers */
|
||||
int numImmed;
|
||||
@@ -150,9 +149,6 @@ pstip_transform_decl(struct tgsi_transform_context *ctx,
|
||||
pctx->samplersUsed |= 1 << i;
|
||||
}
|
||||
}
|
||||
else if (decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) {
|
||||
pctx->hasSview = true;
|
||||
}
|
||||
else if (decl->Declaration.File == TGSI_FILE_INPUT) {
|
||||
pctx->maxInput = MAX2(pctx->maxInput, (int) decl->Range.Last);
|
||||
if (decl->Semantic.Name == TGSI_SEMANTIC_POSITION)
|
||||
@@ -236,17 +232,6 @@ pstip_transform_prolog(struct tgsi_transform_context *ctx)
|
||||
/* declare new sampler */
|
||||
tgsi_transform_sampler_decl(ctx, pctx->freeSampler);
|
||||
|
||||
/* if the src shader has SVIEW decl's for each SAMP decl, we
|
||||
* need to continue the trend and ensure there is a matching
|
||||
* SVIEW for the new SAMP we just created
|
||||
*/
|
||||
if (pctx->hasSview) {
|
||||
tgsi_transform_sampler_view_decl(ctx,
|
||||
pctx->freeSampler,
|
||||
TGSI_TEXTURE_2D,
|
||||
TGSI_RETURN_TYPE_FLOAT);
|
||||
}
|
||||
|
||||
/* declare new temp regs */
|
||||
tgsi_transform_temp_decl(ctx, pctx->texTemp);
|
||||
|
||||
|
@@ -311,7 +311,7 @@ lp_build_const_elem(struct gallivm_state *gallivm,
|
||||
else {
|
||||
double dscale = lp_const_scale(type);
|
||||
|
||||
elem = LLVMConstInt(elem_type, round(val*dscale), 0);
|
||||
elem = LLVMConstInt(elem_type, (long long) round(val*dscale), 0);
|
||||
}
|
||||
|
||||
return elem;
|
||||
|
@@ -28,12 +28,40 @@
|
||||
#include <stddef.h>
|
||||
|
||||
#include <llvm-c/Core.h>
|
||||
#include <llvm-c/Disassembler.h>
|
||||
#include <llvm/Target/TargetMachine.h>
|
||||
#include <llvm/Target/TargetInstrInfo.h>
|
||||
#include <llvm/Support/raw_ostream.h>
|
||||
#include <llvm/Support/Format.h>
|
||||
|
||||
#if HAVE_LLVM >= 0x0306
|
||||
#include <llvm/Target/TargetSubtargetInfo.h>
|
||||
#else
|
||||
#include <llvm/Support/MemoryObject.h>
|
||||
#endif
|
||||
|
||||
#include <llvm/Support/TargetRegistry.h>
|
||||
#include <llvm/MC/MCSubtargetInfo.h>
|
||||
|
||||
#include <llvm/Support/Host.h>
|
||||
|
||||
#include <llvm/IR/Module.h>
|
||||
|
||||
#include <llvm/MC/MCDisassembler.h>
|
||||
#include <llvm/MC/MCAsmInfo.h>
|
||||
#include <llvm/MC/MCInst.h>
|
||||
#include <llvm/MC/MCInstPrinter.h>
|
||||
#include <llvm/MC/MCRegisterInfo.h>
|
||||
|
||||
#if HAVE_LLVM >= 0x0305
|
||||
#define OwningPtr std::unique_ptr
|
||||
#else
|
||||
#include <llvm/ADT/OwningPtr.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_LLVM >= 0x0305
|
||||
#include <llvm/MC/MCContext.h>
|
||||
#endif
|
||||
|
||||
#include "util/u_math.h"
|
||||
#include "util/u_debug.h"
|
||||
|
||||
@@ -105,7 +133,7 @@ lp_get_module_id(LLVMModuleRef module)
|
||||
extern "C" void
|
||||
lp_debug_dump_value(LLVMValueRef value)
|
||||
{
|
||||
#if (defined(PIPE_OS_WINDOWS) && !defined(PIPE_CC_MSVC)) || defined(PIPE_OS_EMBEDDED)
|
||||
#if (defined(PIPE_OS_WINDOWS) && !defined(PIPE_CC_MSVC)) || defined(PIPE_OS_EMBDDED)
|
||||
raw_debug_ostream os;
|
||||
llvm::unwrap(value)->print(os);
|
||||
os.flush();
|
||||
@@ -115,6 +143,46 @@ lp_debug_dump_value(LLVMValueRef value)
|
||||
}
|
||||
|
||||
|
||||
#if HAVE_LLVM < 0x0306
|
||||
|
||||
/*
|
||||
* MemoryObject wrapper around a buffer of memory, to be used by MC
|
||||
* disassembler.
|
||||
*/
|
||||
class BufferMemoryObject:
|
||||
public llvm::MemoryObject
|
||||
{
|
||||
private:
|
||||
const uint8_t *Bytes;
|
||||
uint64_t Length;
|
||||
public:
|
||||
BufferMemoryObject(const uint8_t *bytes, uint64_t length) :
|
||||
Bytes(bytes), Length(length)
|
||||
{
|
||||
}
|
||||
|
||||
uint64_t getBase() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t getExtent() const
|
||||
{
|
||||
return Length;
|
||||
}
|
||||
|
||||
int readByte(uint64_t addr, uint8_t *byte) const
|
||||
{
|
||||
if (addr > getExtent())
|
||||
return -1;
|
||||
*byte = Bytes[addr];
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
#endif /* HAVE_LLVM < 0x0306 */
|
||||
|
||||
|
||||
/*
|
||||
* Disassemble a function, using the LLVM MC disassembler.
|
||||
*
|
||||
@@ -125,6 +193,8 @@ lp_debug_dump_value(LLVMValueRef value)
|
||||
static size_t
|
||||
disassemble(const void* func, llvm::raw_ostream & Out)
|
||||
{
|
||||
using namespace llvm;
|
||||
|
||||
const uint8_t *bytes = (const uint8_t *)func;
|
||||
|
||||
/*
|
||||
@@ -132,23 +202,101 @@ disassemble(const void* func, llvm::raw_ostream & Out)
|
||||
*/
|
||||
const uint64_t extent = 96 * 1024;
|
||||
|
||||
uint64_t max_pc = 0;
|
||||
|
||||
/*
|
||||
* Initialize all used objects.
|
||||
*/
|
||||
|
||||
std::string Triple = llvm::sys::getProcessTriple();
|
||||
LLVMDisasmContextRef D = LLVMCreateDisasm(Triple.c_str(), NULL, 0, NULL, NULL);
|
||||
char outline[1024];
|
||||
std::string Triple = sys::getDefaultTargetTriple();
|
||||
|
||||
if (!D) {
|
||||
Out << "error: couldn't create disassembler for triple " << Triple << "\n";
|
||||
std::string Error;
|
||||
const Target *T = TargetRegistry::lookupTarget(Triple, Error);
|
||||
|
||||
#if HAVE_LLVM >= 0x0304
|
||||
OwningPtr<const MCAsmInfo> AsmInfo(T->createMCAsmInfo(*T->createMCRegInfo(Triple), Triple));
|
||||
#else
|
||||
OwningPtr<const MCAsmInfo> AsmInfo(T->createMCAsmInfo(Triple));
|
||||
#endif
|
||||
|
||||
if (!AsmInfo) {
|
||||
Out << "error: no assembly info for target " << Triple << "\n";
|
||||
Out.flush();
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned int AsmPrinterVariant = AsmInfo->getAssemblerDialect();
|
||||
|
||||
OwningPtr<const MCRegisterInfo> MRI(T->createMCRegInfo(Triple));
|
||||
if (!MRI) {
|
||||
Out << "error: no register info for target " << Triple.c_str() << "\n";
|
||||
Out.flush();
|
||||
return 0;
|
||||
}
|
||||
|
||||
OwningPtr<const MCInstrInfo> MII(T->createMCInstrInfo());
|
||||
if (!MII) {
|
||||
Out << "error: no instruction info for target " << Triple.c_str() << "\n";
|
||||
Out.flush();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if HAVE_LLVM >= 0x0305
|
||||
OwningPtr<const MCSubtargetInfo> STI(T->createMCSubtargetInfo(Triple, sys::getHostCPUName(), ""));
|
||||
OwningPtr<MCContext> MCCtx(new MCContext(AsmInfo.get(), MRI.get(), 0));
|
||||
OwningPtr<const MCDisassembler> DisAsm(T->createMCDisassembler(*STI, *MCCtx));
|
||||
#else
|
||||
OwningPtr<const MCSubtargetInfo> STI(T->createMCSubtargetInfo(Triple, sys::getHostCPUName(), ""));
|
||||
OwningPtr<const MCDisassembler> DisAsm(T->createMCDisassembler(*STI));
|
||||
#endif
|
||||
if (!DisAsm) {
|
||||
Out << "error: no disassembler for target " << Triple << "\n";
|
||||
Out.flush();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#if HAVE_LLVM >= 0x0307
|
||||
OwningPtr<MCInstPrinter> Printer(
|
||||
T->createMCInstPrinter(llvm::Triple(Triple), AsmPrinterVariant, *AsmInfo, *MII, *MRI));
|
||||
#else
|
||||
OwningPtr<MCInstPrinter> Printer(
|
||||
T->createMCInstPrinter(AsmPrinterVariant, *AsmInfo, *MII, *MRI, *STI));
|
||||
#endif
|
||||
if (!Printer) {
|
||||
Out << "error: no instruction printer for target " << Triple.c_str() << "\n";
|
||||
Out.flush();
|
||||
return 0;
|
||||
}
|
||||
|
||||
TargetOptions options;
|
||||
#if defined(DEBUG) && HAVE_LLVM < 0x0307
|
||||
options.JITEmitDebugInfo = true;
|
||||
#endif
|
||||
#if defined(PIPE_ARCH_X86)
|
||||
options.StackAlignmentOverride = 4;
|
||||
#endif
|
||||
#if defined(DEBUG) || defined(PROFILE)
|
||||
#if HAVE_LLVM < 0x0307
|
||||
options.NoFramePointerElim = true;
|
||||
#endif
|
||||
#endif
|
||||
OwningPtr<TargetMachine> TM(T->createTargetMachine(Triple, sys::getHostCPUName(), "", options));
|
||||
|
||||
/*
|
||||
* Wrap the data in a MemoryObject
|
||||
*/
|
||||
#if HAVE_LLVM >= 0x0306
|
||||
ArrayRef<uint8_t> memoryObject((const uint8_t *)bytes, extent);
|
||||
#else
|
||||
BufferMemoryObject memoryObject((const uint8_t *)bytes, extent);
|
||||
#endif
|
||||
|
||||
uint64_t pc;
|
||||
pc = 0;
|
||||
while (pc < extent) {
|
||||
size_t Size;
|
||||
while (true) {
|
||||
MCInst Inst;
|
||||
uint64_t Size;
|
||||
|
||||
/*
|
||||
* Print address. We use addresses relative to the start of the function,
|
||||
@@ -157,13 +305,11 @@ disassemble(const void* func, llvm::raw_ostream & Out)
|
||||
|
||||
Out << llvm::format("%6lu:\t", (unsigned long)pc);
|
||||
|
||||
Size = LLVMDisasmInstruction(D, (uint8_t *)bytes + pc, extent - pc, 0, outline,
|
||||
sizeof outline);
|
||||
|
||||
if (!Size) {
|
||||
Out << "invalid\n";
|
||||
if (!DisAsm->getInstruction(Inst, Size, memoryObject,
|
||||
pc,
|
||||
nulls(), nulls())) {
|
||||
Out << "invalid";
|
||||
pc += 1;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -173,7 +319,7 @@ disassemble(const void* func, llvm::raw_ostream & Out)
|
||||
if (0) {
|
||||
unsigned i;
|
||||
for (i = 0; i < Size; ++i) {
|
||||
Out << llvm::format("%02x ", bytes[pc + i]);
|
||||
Out << llvm::format("%02x ", ((const uint8_t*)bytes)[pc + i]);
|
||||
}
|
||||
for (; i < 16; ++i) {
|
||||
Out << " ";
|
||||
@@ -183,21 +329,11 @@ disassemble(const void* func, llvm::raw_ostream & Out)
|
||||
/*
|
||||
* Print the instruction.
|
||||
*/
|
||||
|
||||
Out << outline;
|
||||
|
||||
Out << "\n";
|
||||
|
||||
/*
|
||||
* Stop disassembling on return statements, if there is no record of a
|
||||
* jump to a successive address.
|
||||
*
|
||||
* XXX: This currently assumes x86
|
||||
*/
|
||||
|
||||
if (Size == 1 && bytes[pc] == 0xc3) {
|
||||
break;
|
||||
}
|
||||
#if HAVE_LLVM >= 0x0307
|
||||
Printer->printInst(&Inst, Out, "", *STI);
|
||||
#else
|
||||
Printer->printInst(&Inst, Out, "");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Advance.
|
||||
@@ -205,6 +341,70 @@ disassemble(const void* func, llvm::raw_ostream & Out)
|
||||
|
||||
pc += Size;
|
||||
|
||||
const MCInstrDesc &TID = MII->get(Inst.getOpcode());
|
||||
|
||||
/*
|
||||
* Keep track of forward jumps to a nearby address.
|
||||
*/
|
||||
|
||||
if (TID.isBranch()) {
|
||||
for (unsigned i = 0; i < Inst.getNumOperands(); ++i) {
|
||||
const MCOperand &operand = Inst.getOperand(i);
|
||||
if (operand.isImm()) {
|
||||
uint64_t jump;
|
||||
|
||||
/*
|
||||
* FIXME: Handle both relative and absolute addresses correctly.
|
||||
* EDInstInfo actually has this info, but operandTypes and
|
||||
* operandFlags enums are not exposed in the public interface.
|
||||
*/
|
||||
|
||||
if (1) {
|
||||
/*
|
||||
* PC relative addr.
|
||||
*/
|
||||
|
||||
jump = pc + operand.getImm();
|
||||
} else {
|
||||
/*
|
||||
* Absolute addr.
|
||||
*/
|
||||
|
||||
jump = (uint64_t)operand.getImm();
|
||||
}
|
||||
|
||||
/*
|
||||
* Output the address relative to the function start, given
|
||||
* that MC will print the addresses relative the current pc.
|
||||
*/
|
||||
Out << "\t\t; " << jump;
|
||||
|
||||
/*
|
||||
* Ignore far jumps given it could be actually a tail return to
|
||||
* a random address.
|
||||
*/
|
||||
|
||||
if (jump > max_pc &&
|
||||
jump < extent) {
|
||||
max_pc = jump;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Out << "\n";
|
||||
|
||||
/*
|
||||
* Stop disassembling on return statements, if there is no record of a
|
||||
* jump to a successive address.
|
||||
*/
|
||||
|
||||
if (TID.isReturn()) {
|
||||
if (pc > max_pc) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (pc >= extent) {
|
||||
Out << "disassembly larger than " << extent << "bytes, aborting\n";
|
||||
break;
|
||||
@@ -214,8 +414,6 @@ disassemble(const void* func, llvm::raw_ostream & Out)
|
||||
Out << "\n";
|
||||
Out.flush();
|
||||
|
||||
LLVMDisasmDispose(D);
|
||||
|
||||
/*
|
||||
* Print GDB command, useful to verify output.
|
||||
*/
|
||||
@@ -246,7 +444,7 @@ lp_disassemble(LLVMValueRef func, const void *code) {
|
||||
extern "C" void
|
||||
lp_profile(LLVMValueRef func, const void *code)
|
||||
{
|
||||
#if defined(__linux__) && defined(PROFILE)
|
||||
#if defined(__linux__) && (defined(DEBUG) || defined(PROFILE))
|
||||
static boolean first_time = TRUE;
|
||||
static FILE *perf_map_file = NULL;
|
||||
static int perf_asm_fd = -1;
|
||||
|
@@ -405,7 +405,6 @@ lp_build_fetch_rgba_aos(struct gallivm_state *gallivm,
|
||||
aligned, base_ptr, offset, TRUE);
|
||||
|
||||
assert(format_desc->block.bits <= vec_len);
|
||||
(void) vec_len; /* silence unused var warning for non-debug build */
|
||||
|
||||
packed = LLVMBuildBitCast(gallivm->builder, packed, dst_vec_type, "");
|
||||
return lp_build_format_swizzle_aos(format_desc, &bld, packed);
|
||||
|
@@ -533,16 +533,6 @@ gallivm_compile_module(struct gallivm_state *gallivm)
|
||||
if (0) {
|
||||
debug_printf("optimizing func %s...\n", LLVMGetValueName(func));
|
||||
}
|
||||
|
||||
/* Disable frame pointer omission on debug/profile builds */
|
||||
/* XXX: And workaround http://llvm.org/PR21435 */
|
||||
#if HAVE_LLVM >= 0x0307 && \
|
||||
(defined(DEBUG) || defined(PROFILE) || \
|
||||
defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64))
|
||||
LLVMAddTargetDependentFunctionAttr(func, "no-frame-pointer-elim", "true");
|
||||
LLVMAddTargetDependentFunctionAttr(func, "no-frame-pointer-elim-non-leaf", "true");
|
||||
#endif
|
||||
|
||||
LLVMRunFunctionPassManager(gallivm->passmgr, func);
|
||||
func = LLVMGetNextFunction(func);
|
||||
}
|
||||
|
@@ -51,12 +51,8 @@
|
||||
|
||||
#define LP_MAX_TGSI_PREDS 16
|
||||
|
||||
#define LP_MAX_TGSI_CONSTS 4096
|
||||
|
||||
#define LP_MAX_TGSI_CONST_BUFFERS 16
|
||||
|
||||
#define LP_MAX_TGSI_CONST_BUFFER_SIZE (LP_MAX_TGSI_CONSTS * sizeof(float[4]))
|
||||
|
||||
/*
|
||||
* For quick access we cache registers in statically
|
||||
* allocated arrays. Here we define the maximum size
|
||||
@@ -104,7 +100,7 @@ gallivm_get_shader_param(enum pipe_shader_cap param)
|
||||
case PIPE_SHADER_CAP_MAX_OUTPUTS:
|
||||
return 32;
|
||||
case PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE:
|
||||
return LP_MAX_TGSI_CONST_BUFFER_SIZE;
|
||||
return sizeof(float[4]) * 4096;
|
||||
case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
|
||||
return PIPE_MAX_CONSTANT_BUFFERS;
|
||||
case PIPE_SHADER_CAP_MAX_TEMPS:
|
||||
@@ -129,7 +125,6 @@ gallivm_get_shader_param(enum pipe_shader_cap param)
|
||||
case PIPE_SHADER_CAP_PREFERRED_IR:
|
||||
return PIPE_SHADER_IR_TGSI;
|
||||
case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED:
|
||||
case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
|
||||
return 1;
|
||||
case PIPE_SHADER_CAP_DOUBLES:
|
||||
case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
|
||||
|
@@ -2501,7 +2501,7 @@ lp_build_sample_soa_code(struct gallivm_state *gallivm,
|
||||
* all zero as mandated by d3d10 in this case.
|
||||
*/
|
||||
unsigned chan;
|
||||
LLVMValueRef zero = lp_build_zero(gallivm, type);
|
||||
LLVMValueRef zero = lp_build_const_vec(gallivm, type, 0.0F);
|
||||
for (chan = 0; chan < 4; chan++) {
|
||||
texel_out[chan] = zero;
|
||||
}
|
||||
@@ -2748,37 +2748,11 @@ lp_build_sample_soa_code(struct gallivm_state *gallivm,
|
||||
else {
|
||||
LLVMValueRef lod_fpart = NULL, lod_positive = NULL;
|
||||
LLVMValueRef ilevel0 = NULL, ilevel1 = NULL;
|
||||
boolean use_aos;
|
||||
|
||||
if (util_format_is_pure_integer(static_texture_state->format) &&
|
||||
!util_format_has_depth(bld.format_desc) &&
|
||||
(static_sampler_state->min_mip_filter == PIPE_TEX_MIPFILTER_LINEAR ||
|
||||
static_sampler_state->min_img_filter == PIPE_TEX_FILTER_LINEAR ||
|
||||
static_sampler_state->mag_img_filter == PIPE_TEX_FILTER_LINEAR)) {
|
||||
/*
|
||||
* Bail if impossible filtering is specified (the awkard additional
|
||||
* depth check is because it is legal in gallium to have things like S8Z24
|
||||
* here which would say it's pure int despite such formats should sample
|
||||
* the depth component).
|
||||
* In GL such filters make the texture incomplete, this makes it robust
|
||||
* against state trackers which set this up regardless (we'd crash in the
|
||||
* lerp later (except for gather)).
|
||||
* Must do this after fetch_texel code since with GL state tracker we'll
|
||||
* get some junk sampler for buffer textures.
|
||||
*/
|
||||
unsigned chan;
|
||||
LLVMValueRef zero = lp_build_zero(gallivm, type);
|
||||
for (chan = 0; chan < 4; chan++) {
|
||||
texel_out[chan] = zero;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
use_aos = util_format_fits_8unorm(bld.format_desc) &&
|
||||
op_is_tex &&
|
||||
/* not sure this is strictly needed or simply impossible */
|
||||
derived_sampler_state.compare_mode == PIPE_TEX_COMPARE_NONE &&
|
||||
lp_is_simple_wrap_mode(derived_sampler_state.wrap_s);
|
||||
boolean use_aos = util_format_fits_8unorm(bld.format_desc) &&
|
||||
op_is_tex &&
|
||||
/* not sure this is strictly needed or simply impossible */
|
||||
derived_sampler_state.compare_mode == PIPE_TEX_COMPARE_NONE &&
|
||||
lp_is_simple_wrap_mode(derived_sampler_state.wrap_s);
|
||||
|
||||
use_aos &= bld.num_lods <= num_quads ||
|
||||
derived_sampler_state.min_img_filter ==
|
||||
|
@@ -165,7 +165,6 @@ struct lp_bld_tgsi_system_values {
|
||||
LLVMValueRef vertex_id_nobase;
|
||||
LLVMValueRef prim_id;
|
||||
LLVMValueRef basevertex;
|
||||
LLVMValueRef invocation_id;
|
||||
};
|
||||
|
||||
|
||||
|
@@ -232,9 +232,23 @@ lp_emit_store_aos(
|
||||
/*
|
||||
* Saturate the value
|
||||
*/
|
||||
if (inst->Instruction.Saturate) {
|
||||
|
||||
switch (inst->Instruction.Saturate) {
|
||||
case TGSI_SAT_NONE:
|
||||
break;
|
||||
|
||||
case TGSI_SAT_ZERO_ONE:
|
||||
value = lp_build_max(&bld->bld_base.base, value, bld->bld_base.base.zero);
|
||||
value = lp_build_min(&bld->bld_base.base, value, bld->bld_base.base.one);
|
||||
break;
|
||||
|
||||
case TGSI_SAT_MINUS_PLUS_ONE:
|
||||
value = lp_build_max(&bld->bld_base.base, value, lp_build_const_vec(bld->bld_base.base.gallivm, bld->bld_base.base.type, -1.0));
|
||||
value = lp_build_min(&bld->bld_base.base, value, bld->bld_base.base.one);
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -1532,11 +1532,6 @@ emit_fetch_system_value(
|
||||
atype = TGSI_TYPE_UNSIGNED;
|
||||
break;
|
||||
|
||||
case TGSI_SEMANTIC_INVOCATIONID:
|
||||
res = lp_build_broadcast_scalar(&bld_base->uint_bld, bld->system_values.invocation_id);
|
||||
atype = TGSI_TYPE_UNSIGNED;
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(!"unexpected semantic in emit_fetch_system_value");
|
||||
res = bld_base->base.zero;
|
||||
@@ -1675,11 +1670,30 @@ emit_store_chan(
|
||||
*
|
||||
* It is always assumed to be float.
|
||||
*/
|
||||
if (inst->Instruction.Saturate) {
|
||||
switch( inst->Instruction.Saturate ) {
|
||||
case TGSI_SAT_NONE:
|
||||
break;
|
||||
|
||||
case TGSI_SAT_ZERO_ONE:
|
||||
assert(dtype == TGSI_TYPE_FLOAT ||
|
||||
dtype == TGSI_TYPE_UNTYPED);
|
||||
value = LLVMBuildBitCast(builder, value, float_bld->vec_type, "");
|
||||
value = lp_build_clamp_zero_one_nanzero(float_bld, value);
|
||||
break;
|
||||
|
||||
case TGSI_SAT_MINUS_PLUS_ONE:
|
||||
assert(dtype == TGSI_TYPE_FLOAT ||
|
||||
dtype == TGSI_TYPE_UNTYPED);
|
||||
value = LLVMBuildBitCast(builder, value, float_bld->vec_type, "");
|
||||
/* This will give -1.0 for NaN which is probably not what we want. */
|
||||
value = lp_build_max_ext(float_bld, value,
|
||||
lp_build_const_vec(gallivm, float_bld->type, -1.0),
|
||||
GALLIVM_NAN_RETURN_OTHER_SECOND_NONNAN);
|
||||
value = lp_build_min(float_bld, value, float_bld->one);
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
|
||||
if (reg->Register.Indirect) {
|
||||
|
@@ -58,9 +58,6 @@ struct ttn_compile {
|
||||
struct ttn_reg_info *temp_regs;
|
||||
nir_ssa_def **imm_defs;
|
||||
|
||||
unsigned num_samp_types;
|
||||
nir_alu_type *samp_types;
|
||||
|
||||
nir_register *addr_reg;
|
||||
|
||||
/**
|
||||
@@ -159,30 +156,6 @@ ttn_emit_declaration(struct ttn_compile *c)
|
||||
/* Nothing to record for system values. */
|
||||
} else if (file == TGSI_FILE_SAMPLER) {
|
||||
/* Nothing to record for samplers. */
|
||||
} else if (file == TGSI_FILE_SAMPLER_VIEW) {
|
||||
struct tgsi_declaration_sampler_view *sview = &decl->SamplerView;
|
||||
nir_alu_type type;
|
||||
|
||||
assert((sview->ReturnTypeX == sview->ReturnTypeY) &&
|
||||
(sview->ReturnTypeX == sview->ReturnTypeZ) &&
|
||||
(sview->ReturnTypeX == sview->ReturnTypeW));
|
||||
|
||||
switch (sview->ReturnTypeX) {
|
||||
case TGSI_RETURN_TYPE_SINT:
|
||||
type = nir_type_int;
|
||||
break;
|
||||
case TGSI_RETURN_TYPE_UINT:
|
||||
type = nir_type_unsigned;
|
||||
break;
|
||||
case TGSI_RETURN_TYPE_FLOAT:
|
||||
default:
|
||||
type = nir_type_float;
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; i < array_size; i++) {
|
||||
c->samp_types[decl->Range.First + i] = type;
|
||||
}
|
||||
} else {
|
||||
nir_variable *var;
|
||||
assert(file == TGSI_FILE_INPUT ||
|
||||
@@ -428,6 +401,7 @@ ttn_src_for_file_and_index(struct ttn_compile *c, unsigned file, unsigned index,
|
||||
|
||||
load->num_components = 4;
|
||||
load->const_index[0] = index;
|
||||
load->const_index[1] = 1;
|
||||
if (dim) {
|
||||
if (dimind) {
|
||||
load->src[srcn] =
|
||||
@@ -1053,7 +1027,7 @@ ttn_tex(struct ttn_compile *c, nir_alu_dest dest, nir_ssa_def **src)
|
||||
struct tgsi_full_instruction *tgsi_inst = &c->token->FullInstruction;
|
||||
nir_tex_instr *instr;
|
||||
nir_texop op;
|
||||
unsigned num_srcs, samp = 1, sview, i;
|
||||
unsigned num_srcs, samp = 1, i;
|
||||
|
||||
switch (tgsi_inst->Instruction.Opcode) {
|
||||
case TGSI_OPCODE_TEX:
|
||||
@@ -1132,18 +1106,6 @@ ttn_tex(struct ttn_compile *c, nir_alu_dest dest, nir_ssa_def **src)
|
||||
assert(tgsi_inst->Src[samp].Register.File == TGSI_FILE_SAMPLER);
|
||||
instr->sampler_index = tgsi_inst->Src[samp].Register.Index;
|
||||
|
||||
/* TODO if we supported any opc's which take an explicit SVIEW
|
||||
* src, we would use that here instead. But for the "legacy"
|
||||
* texture opc's the SVIEW index is same as SAMP index:
|
||||
*/
|
||||
sview = instr->sampler_index;
|
||||
|
||||
if (sview < c->num_samp_types) {
|
||||
instr->dest_type = c->samp_types[sview];
|
||||
} else {
|
||||
instr->dest_type = nir_type_float;
|
||||
}
|
||||
|
||||
unsigned src_number = 0;
|
||||
|
||||
instr->src[src_number].src =
|
||||
@@ -1324,7 +1286,6 @@ static const nir_op op_trans[TGSI_OPCODE_LAST] = {
|
||||
[TGSI_OPCODE_SEQ] = nir_op_seq,
|
||||
[TGSI_OPCODE_SGT] = 0,
|
||||
[TGSI_OPCODE_SIN] = nir_op_fsin,
|
||||
[TGSI_OPCODE_SNE] = nir_op_sne,
|
||||
[TGSI_OPCODE_SLE] = 0,
|
||||
[TGSI_OPCODE_TEX] = 0,
|
||||
[TGSI_OPCODE_TXD] = 0,
|
||||
@@ -1664,6 +1625,7 @@ ttn_emit_instruction(struct ttn_compile *c)
|
||||
}
|
||||
|
||||
if (tgsi_inst->Instruction.Saturate) {
|
||||
assert(tgsi_inst->Instruction.Saturate == TGSI_SAT_ZERO_ONE);
|
||||
assert(!dest.dest.is_ssa);
|
||||
ttn_move_dest(b, dest, nir_fsat(b, ttn_src_for_dest(b, &dest)));
|
||||
}
|
||||
@@ -1710,6 +1672,7 @@ ttn_add_output_stores(struct ttn_compile *c)
|
||||
nir_intrinsic_instr_create(b->shader, nir_intrinsic_store_output);
|
||||
store->num_components = 4;
|
||||
store->const_index[0] = var->data.driver_location + i;
|
||||
store->const_index[1] = 1;
|
||||
store->src[0].reg.reg = c->output_regs[var->data.driver_location].reg;
|
||||
nir_instr_insert_after_cf_list(b->cf_node_list, &store->instr);
|
||||
}
|
||||
@@ -1750,9 +1713,6 @@ tgsi_to_nir(const void *tgsi_tokens,
|
||||
c->imm_defs = rzalloc_array(c, nir_ssa_def *,
|
||||
scan.file_max[TGSI_FILE_IMMEDIATE] + 1);
|
||||
|
||||
c->num_samp_types = scan.file_max[TGSI_FILE_SAMPLER_VIEW] + 1;
|
||||
c->samp_types = rzalloc_array(c, nir_alu_type, c->num_samp_types);
|
||||
|
||||
c->if_stack = rzalloc_array(c, struct exec_list *,
|
||||
(scan.opcode_count[TGSI_OPCODE_IF] +
|
||||
scan.opcode_count[TGSI_OPCODE_UIF]) * 2);
|
||||
|
@@ -376,7 +376,6 @@ fenced_buffer_finish_locked(struct fenced_manager *fenced_mgr,
|
||||
/* TODO: remove consequents buffers with the same fence? */
|
||||
|
||||
assert(!destroyed);
|
||||
(void) destroyed; /* silence unused var warning for non-debug build */
|
||||
|
||||
fenced_buf->flags &= ~PB_USAGE_GPU_READ_WRITE;
|
||||
|
||||
|
@@ -49,7 +49,7 @@
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#if defined(PIPE_OS_UNIX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD) || defined(PIPE_OS_SOLARIS) || defined(PIPE_OS_HAIKU) || defined(PIPE_OS_CYGWIN)
|
||||
|
||||
|
||||
/*
|
||||
|
@@ -610,7 +610,7 @@ tgsi_default_instruction( void )
|
||||
instruction.Type = TGSI_TOKEN_TYPE_INSTRUCTION;
|
||||
instruction.NrTokens = 0;
|
||||
instruction.Opcode = TGSI_OPCODE_MOV;
|
||||
instruction.Saturate = 0;
|
||||
instruction.Saturate = TGSI_SAT_NONE;
|
||||
instruction.Predicate = 0;
|
||||
instruction.NumDstRegs = 1;
|
||||
instruction.NumSrcRegs = 1;
|
||||
@@ -632,7 +632,7 @@ tgsi_build_instruction(unsigned opcode,
|
||||
struct tgsi_instruction instruction;
|
||||
|
||||
assert (opcode <= TGSI_OPCODE_LAST);
|
||||
assert (saturate <= 1);
|
||||
assert (saturate <= TGSI_SAT_MINUS_PLUS_ONE);
|
||||
assert (num_dst_regs <= 3);
|
||||
assert (num_src_regs <= 15);
|
||||
|
||||
|
@@ -286,15 +286,15 @@ iter_declaration(
|
||||
if (decl->Declaration.File == TGSI_FILE_INPUT &&
|
||||
(iter->processor.Processor == TGSI_PROCESSOR_GEOMETRY ||
|
||||
(!patch &&
|
||||
(iter->processor.Processor == TGSI_PROCESSOR_TESS_CTRL ||
|
||||
iter->processor.Processor == TGSI_PROCESSOR_TESS_EVAL)))) {
|
||||
(iter->processor.Processor == TGSI_PROCESSOR_TESSCTRL ||
|
||||
iter->processor.Processor == TGSI_PROCESSOR_TESSEVAL)))) {
|
||||
TXT("[]");
|
||||
}
|
||||
|
||||
/* all non-patch tess ctrl shader outputs are two dimensional */
|
||||
if (decl->Declaration.File == TGSI_FILE_OUTPUT &&
|
||||
!patch &&
|
||||
iter->processor.Processor == TGSI_PROCESSOR_TESS_CTRL) {
|
||||
iter->processor.Processor == TGSI_PROCESSOR_TESSCTRL) {
|
||||
TXT("[]");
|
||||
}
|
||||
|
||||
@@ -539,8 +539,17 @@ iter_instruction(
|
||||
|
||||
TXT( info->mnemonic );
|
||||
|
||||
if (inst->Instruction.Saturate) {
|
||||
switch (inst->Instruction.Saturate) {
|
||||
case TGSI_SAT_NONE:
|
||||
break;
|
||||
case TGSI_SAT_ZERO_ONE:
|
||||
TXT( "_SAT" );
|
||||
break;
|
||||
case TGSI_SAT_MINUS_PLUS_ONE:
|
||||
TXT( "_SATNV" );
|
||||
break;
|
||||
default:
|
||||
assert( 0 );
|
||||
}
|
||||
|
||||
for (i = 0; i < inst->Instruction.NumDstRegs; i++) {
|
||||
|
@@ -1765,12 +1765,14 @@ store_dest(struct tgsi_exec_machine *mach,
|
||||
if (!dst)
|
||||
return;
|
||||
|
||||
if (!inst->Instruction.Saturate) {
|
||||
switch (inst->Instruction.Saturate) {
|
||||
case TGSI_SAT_NONE:
|
||||
for (i = 0; i < TGSI_QUAD_SIZE; i++)
|
||||
if (execmask & (1 << i))
|
||||
dst->i[i] = chan->i[i];
|
||||
}
|
||||
else {
|
||||
break;
|
||||
|
||||
case TGSI_SAT_ZERO_ONE:
|
||||
for (i = 0; i < TGSI_QUAD_SIZE; i++)
|
||||
if (execmask & (1 << i)) {
|
||||
if (chan->f[i] < 0.0f)
|
||||
@@ -1780,6 +1782,22 @@ store_dest(struct tgsi_exec_machine *mach,
|
||||
else
|
||||
dst->i[i] = chan->i[i];
|
||||
}
|
||||
break;
|
||||
|
||||
case TGSI_SAT_MINUS_PLUS_ONE:
|
||||
for (i = 0; i < TGSI_QUAD_SIZE; i++)
|
||||
if (execmask & (1 << i)) {
|
||||
if (chan->f[i] < -1.0f)
|
||||
dst->f[i] = -1.0f;
|
||||
else if (chan->f[i] > 1.0f)
|
||||
dst->f[i] = 1.0f;
|
||||
else
|
||||
dst->i[i] = chan->i[i];
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
assert( 0 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1934,7 +1952,7 @@ fetch_texel( struct tgsi_sampler *sampler,
|
||||
#define TEX_MODIFIER_LOD_BIAS 2
|
||||
#define TEX_MODIFIER_EXPLICIT_LOD 3
|
||||
#define TEX_MODIFIER_LEVEL_ZERO 4
|
||||
#define TEX_MODIFIER_GATHER 5
|
||||
|
||||
|
||||
/*
|
||||
* Fetch all 3 (for s,t,r coords) texel offsets, put them into int array.
|
||||
@@ -1988,35 +2006,6 @@ fetch_assign_deriv_channel(struct tgsi_exec_machine *mach,
|
||||
derivs[1][3] = d.f[3];
|
||||
}
|
||||
|
||||
static uint
|
||||
fetch_sampler_unit(struct tgsi_exec_machine *mach,
|
||||
const struct tgsi_full_instruction *inst,
|
||||
uint sampler)
|
||||
{
|
||||
uint unit;
|
||||
|
||||
if (inst->Src[sampler].Register.Indirect) {
|
||||
const struct tgsi_full_src_register *reg = &inst->Src[sampler];
|
||||
union tgsi_exec_channel indir_index, index2;
|
||||
|
||||
index2.i[0] =
|
||||
index2.i[1] =
|
||||
index2.i[2] =
|
||||
index2.i[3] = reg->Indirect.Index;
|
||||
|
||||
fetch_src_file_channel(mach,
|
||||
0,
|
||||
reg->Indirect.File,
|
||||
reg->Indirect.Swizzle,
|
||||
&index2,
|
||||
&ZeroVec,
|
||||
&indir_index);
|
||||
unit = inst->Src[sampler].Register.Index + indir_index.i[0];
|
||||
} else {
|
||||
unit = inst->Src[sampler].Register.Index;
|
||||
}
|
||||
return unit;
|
||||
}
|
||||
|
||||
/*
|
||||
* execute a texture instruction.
|
||||
@@ -2030,15 +2019,14 @@ exec_tex(struct tgsi_exec_machine *mach,
|
||||
const struct tgsi_full_instruction *inst,
|
||||
uint modifier, uint sampler)
|
||||
{
|
||||
const uint unit = inst->Src[sampler].Register.Index;
|
||||
const union tgsi_exec_channel *args[5], *proj = NULL;
|
||||
union tgsi_exec_channel r[5];
|
||||
enum tgsi_sampler_control control = tgsi_sampler_lod_none;
|
||||
uint chan;
|
||||
uint unit;
|
||||
int8_t offsets[3];
|
||||
int dim, shadow_ref, i;
|
||||
|
||||
unit = fetch_sampler_unit(mach, inst, sampler);
|
||||
/* always fetch all 3 offsets, overkill but keeps code simple */
|
||||
fetch_texel_offsets(mach, inst, offsets);
|
||||
|
||||
@@ -2081,8 +2069,6 @@ exec_tex(struct tgsi_exec_machine *mach,
|
||||
control = tgsi_sampler_lod_explicit;
|
||||
else if (modifier == TEX_MODIFIER_LOD_BIAS)
|
||||
control = tgsi_sampler_lod_bias;
|
||||
else if (modifier == TEX_MODIFIER_GATHER)
|
||||
control = tgsi_sampler_gather;
|
||||
}
|
||||
else {
|
||||
for (i = dim; i < Elements(args); i++)
|
||||
@@ -2137,13 +2123,12 @@ static void
|
||||
exec_txd(struct tgsi_exec_machine *mach,
|
||||
const struct tgsi_full_instruction *inst)
|
||||
{
|
||||
const uint unit = inst->Src[3].Register.Index;
|
||||
union tgsi_exec_channel r[4];
|
||||
float derivs[3][2][TGSI_QUAD_SIZE];
|
||||
uint chan;
|
||||
uint unit;
|
||||
int8_t offsets[3];
|
||||
|
||||
unit = fetch_sampler_unit(mach, inst, 3);
|
||||
/* always fetch all 3 offsets, overkill but keeps code simple */
|
||||
fetch_texel_offsets(mach, inst, offsets);
|
||||
|
||||
@@ -2245,15 +2230,14 @@ static void
|
||||
exec_txf(struct tgsi_exec_machine *mach,
|
||||
const struct tgsi_full_instruction *inst)
|
||||
{
|
||||
const uint unit = inst->Src[1].Register.Index;
|
||||
union tgsi_exec_channel r[4];
|
||||
uint chan;
|
||||
uint unit;
|
||||
float rgba[TGSI_NUM_CHANNELS][TGSI_QUAD_SIZE];
|
||||
int j;
|
||||
int8_t offsets[3];
|
||||
unsigned target;
|
||||
|
||||
unit = fetch_sampler_unit(mach, inst, 1);
|
||||
/* always fetch all 3 offsets, overkill but keeps code simple */
|
||||
fetch_texel_offsets(mach, inst, offsets);
|
||||
|
||||
@@ -2328,14 +2312,12 @@ static void
|
||||
exec_txq(struct tgsi_exec_machine *mach,
|
||||
const struct tgsi_full_instruction *inst)
|
||||
{
|
||||
const uint unit = inst->Src[1].Register.Index;
|
||||
int result[4];
|
||||
union tgsi_exec_channel r[4], src;
|
||||
uint chan;
|
||||
uint unit;
|
||||
int i,j;
|
||||
|
||||
unit = fetch_sampler_unit(mach, inst, 1);
|
||||
|
||||
fetch_source(mach, &src, &inst->Src[0], TGSI_CHAN_X, TGSI_EXEC_DATA_INT);
|
||||
|
||||
/* XXX: This interface can't return per-pixel values */
|
||||
@@ -3333,14 +3315,16 @@ store_double_channel(struct tgsi_exec_machine *mach,
|
||||
union tgsi_double_channel temp;
|
||||
const uint execmask = mach->ExecMask;
|
||||
|
||||
if (!inst->Instruction.Saturate) {
|
||||
switch (inst->Instruction.Saturate) {
|
||||
case TGSI_SAT_NONE:
|
||||
for (i = 0; i < TGSI_QUAD_SIZE; i++)
|
||||
if (execmask & (1 << i)) {
|
||||
dst[0].u[i] = chan->u[i][0];
|
||||
dst[1].u[i] = chan->u[i][1];
|
||||
}
|
||||
}
|
||||
else {
|
||||
break;
|
||||
|
||||
case TGSI_SAT_ZERO_ONE:
|
||||
for (i = 0; i < TGSI_QUAD_SIZE; i++)
|
||||
if (execmask & (1 << i)) {
|
||||
if (chan->d[i] < 0.0)
|
||||
@@ -3353,6 +3337,25 @@ store_double_channel(struct tgsi_exec_machine *mach,
|
||||
dst[0].u[i] = temp.u[i][0];
|
||||
dst[1].u[i] = temp.u[i][1];
|
||||
}
|
||||
break;
|
||||
|
||||
case TGSI_SAT_MINUS_PLUS_ONE:
|
||||
for (i = 0; i < TGSI_QUAD_SIZE; i++)
|
||||
if (execmask & (1 << i)) {
|
||||
if (chan->d[i] < -1.0)
|
||||
temp.d[i] = -1.0;
|
||||
else if (chan->d[i] > 1.0)
|
||||
temp.d[i] = 1.0;
|
||||
else
|
||||
temp.d[i] = chan->d[i];
|
||||
|
||||
dst[0].u[i] = temp.u[i][0];
|
||||
dst[1].u[i] = temp.u[i][1];
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
assert( 0 );
|
||||
}
|
||||
|
||||
store_dest_double(mach, &dst[0], reg, inst, chan_0, TGSI_EXEC_DATA_UINT);
|
||||
@@ -4371,13 +4374,6 @@ exec_instruction(
|
||||
exec_tex(mach, inst, TEX_MODIFIER_PROJECTED, 1);
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_TG4:
|
||||
/* src[0] = texcoord */
|
||||
/* src[1] = component */
|
||||
/* src[2] = sampler unit */
|
||||
exec_tex(mach, inst, TEX_MODIFIER_GATHER, 2);
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_UP2H:
|
||||
assert (0);
|
||||
break;
|
||||
@@ -4435,12 +4431,8 @@ exec_instruction(
|
||||
mach->BreakStack[mach->BreakStackTop++] = mach->BreakType;
|
||||
mach->FuncStack[mach->FuncStackTop++] = mach->FuncMask;
|
||||
|
||||
/* Finally, jump to the subroutine. The label is a pointer
|
||||
* (an instruction number) to the BGNSUB instruction.
|
||||
*/
|
||||
/* Finally, jump to the subroutine */
|
||||
*pc = inst->Label.Label;
|
||||
assert(mach->Instructions[*pc].Instruction.Opcode
|
||||
== TGSI_OPCODE_BGNSUB);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@@ -93,8 +93,7 @@ enum tgsi_sampler_control {
|
||||
tgsi_sampler_lod_bias,
|
||||
tgsi_sampler_lod_explicit,
|
||||
tgsi_sampler_lod_zero,
|
||||
tgsi_sampler_derivs_explicit,
|
||||
tgsi_sampler_gather,
|
||||
tgsi_sampler_derivs_explicit
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -458,7 +457,6 @@ tgsi_exec_get_shader_param(enum pipe_shader_cap param)
|
||||
return 1;
|
||||
case PIPE_SHADER_CAP_DOUBLES:
|
||||
case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:
|
||||
case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
|
||||
return 1;
|
||||
case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
|
||||
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||
|
@@ -302,9 +302,9 @@ tgsi_get_processor_name( uint processor )
|
||||
return "fragment shader";
|
||||
case TGSI_PROCESSOR_GEOMETRY:
|
||||
return "geometry shader";
|
||||
case TGSI_PROCESSOR_TESS_CTRL:
|
||||
case TGSI_PROCESSOR_TESSCTRL:
|
||||
return "tessellation control shader";
|
||||
case TGSI_PROCESSOR_TESS_EVAL:
|
||||
case TGSI_PROCESSOR_TESSEVAL:
|
||||
return "tessellation evaluation shader";
|
||||
default:
|
||||
return "unknown shader type!";
|
||||
|
@@ -1133,7 +1133,8 @@ transform_samp(struct tgsi_transform_context *tctx,
|
||||
|
||||
/* MOV_SAT tmpA.<mask>, tmpA */
|
||||
if (mask) {
|
||||
create_mov(tctx, &ctx->tmp[A].dst, &ctx->tmp[A].src, mask, 1);
|
||||
create_mov(tctx, &ctx->tmp[A].dst, &ctx->tmp[A].src, mask,
|
||||
TGSI_SAT_ZERO_ONE);
|
||||
}
|
||||
|
||||
/* modify the texture samp instruction to take fixed up coord: */
|
||||
|
@@ -415,8 +415,8 @@ iter_declaration(
|
||||
decl->Semantic.Name == TGSI_SEMANTIC_TESSINNER;
|
||||
if (file == TGSI_FILE_INPUT && !patch && (
|
||||
processor == TGSI_PROCESSOR_GEOMETRY ||
|
||||
processor == TGSI_PROCESSOR_TESS_CTRL ||
|
||||
processor == TGSI_PROCESSOR_TESS_EVAL)) {
|
||||
processor == TGSI_PROCESSOR_TESSCTRL ||
|
||||
processor == TGSI_PROCESSOR_TESSEVAL)) {
|
||||
uint vert;
|
||||
for (vert = 0; vert < ctx->implied_array_size; ++vert) {
|
||||
scan_register *reg = MALLOC(sizeof(scan_register));
|
||||
@@ -424,7 +424,7 @@ iter_declaration(
|
||||
check_and_declare(ctx, reg);
|
||||
}
|
||||
} else if (file == TGSI_FILE_OUTPUT && !patch &&
|
||||
processor == TGSI_PROCESSOR_TESS_CTRL) {
|
||||
processor == TGSI_PROCESSOR_TESSCTRL) {
|
||||
uint vert;
|
||||
for (vert = 0; vert < ctx->implied_out_array_size; ++vert) {
|
||||
scan_register *reg = MALLOC(sizeof(scan_register));
|
||||
@@ -489,7 +489,7 @@ iter_property(
|
||||
prop->Property.PropertyName == TGSI_PROPERTY_GS_INPUT_PRIM) {
|
||||
ctx->implied_array_size = u_vertices_per_prim(prop->u[0].Data);
|
||||
}
|
||||
if (iter->processor.Processor == TGSI_PROCESSOR_TESS_CTRL &&
|
||||
if (iter->processor.Processor == TGSI_PROCESSOR_TESSCTRL &&
|
||||
prop->Property.PropertyName == TGSI_PROPERTY_TCS_VERTICES_OUT)
|
||||
ctx->implied_out_array_size = prop->u[0].Data;
|
||||
return TRUE;
|
||||
@@ -499,8 +499,8 @@ static boolean
|
||||
prolog(struct tgsi_iterate_context *iter)
|
||||
{
|
||||
struct sanity_check_ctx *ctx = (struct sanity_check_ctx *) iter;
|
||||
if (iter->processor.Processor == TGSI_PROCESSOR_TESS_CTRL ||
|
||||
iter->processor.Processor == TGSI_PROCESSOR_TESS_EVAL)
|
||||
if (iter->processor.Processor == TGSI_PROCESSOR_TESSCTRL ||
|
||||
iter->processor.Processor == TGSI_PROCESSOR_TESSEVAL)
|
||||
ctx->implied_array_size = 32;
|
||||
return TRUE;
|
||||
}
|
||||
|
@@ -62,7 +62,6 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
|
||||
info->file_max[i] = -1;
|
||||
for (i = 0; i < Elements(info->const_file_max); i++)
|
||||
info->const_file_max[i] = -1;
|
||||
info->properties[TGSI_PROPERTY_GS_INVOCATIONS] = 1;
|
||||
|
||||
/**
|
||||
** Setup to begin parsing input shader
|
||||
@@ -75,8 +74,8 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
|
||||
assert(procType == TGSI_PROCESSOR_FRAGMENT ||
|
||||
procType == TGSI_PROCESSOR_VERTEX ||
|
||||
procType == TGSI_PROCESSOR_GEOMETRY ||
|
||||
procType == TGSI_PROCESSOR_TESS_CTRL ||
|
||||
procType == TGSI_PROCESSOR_TESS_EVAL ||
|
||||
procType == TGSI_PROCESSOR_TESSCTRL ||
|
||||
procType == TGSI_PROCESSOR_TESSEVAL ||
|
||||
procType == TGSI_PROCESSOR_COMPUTE);
|
||||
info->processor = procType;
|
||||
|
||||
@@ -168,31 +167,13 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
|
||||
= &parse.FullToken.FullDeclaration;
|
||||
const uint file = fulldecl->Declaration.File;
|
||||
uint reg;
|
||||
|
||||
if (fulldecl->Declaration.Array) {
|
||||
unsigned array_id = fulldecl->Array.ArrayID;
|
||||
|
||||
switch (file) {
|
||||
case TGSI_FILE_INPUT:
|
||||
assert(array_id < ARRAY_SIZE(info->input_array_first));
|
||||
info->input_array_first[array_id] = fulldecl->Range.First;
|
||||
info->input_array_last[array_id] = fulldecl->Range.Last;
|
||||
break;
|
||||
case TGSI_FILE_OUTPUT:
|
||||
assert(array_id < ARRAY_SIZE(info->output_array_first));
|
||||
info->output_array_first[array_id] = fulldecl->Range.First;
|
||||
info->output_array_last[array_id] = fulldecl->Range.Last;
|
||||
break;
|
||||
}
|
||||
info->array_max[file] = MAX2(info->array_max[file], array_id);
|
||||
}
|
||||
|
||||
if (fulldecl->Declaration.Array)
|
||||
info->array_max[file] = MAX2(info->array_max[file], fulldecl->Array.ArrayID);
|
||||
for (reg = fulldecl->Range.First;
|
||||
reg <= fulldecl->Range.Last;
|
||||
reg++) {
|
||||
unsigned semName = fulldecl->Semantic.Name;
|
||||
unsigned semIndex =
|
||||
fulldecl->Semantic.Index + (reg - fulldecl->Range.First);
|
||||
unsigned semIndex = fulldecl->Semantic.Index;
|
||||
|
||||
/* only first 32 regs will appear in this bitfield */
|
||||
info->file_mask[file] |= (1 << reg);
|
||||
@@ -249,8 +230,6 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
|
||||
}
|
||||
else if (semName == TGSI_SEMANTIC_PRIMID) {
|
||||
info->uses_primid = TRUE;
|
||||
} else if (semName == TGSI_SEMANTIC_INVOCATIONID) {
|
||||
info->uses_invocationid = TRUE;
|
||||
}
|
||||
}
|
||||
else if (file == TGSI_FILE_OUTPUT) {
|
||||
@@ -260,8 +239,8 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
|
||||
|
||||
if (procType == TGSI_PROCESSOR_VERTEX ||
|
||||
procType == TGSI_PROCESSOR_GEOMETRY ||
|
||||
procType == TGSI_PROCESSOR_TESS_CTRL ||
|
||||
procType == TGSI_PROCESSOR_TESS_EVAL) {
|
||||
procType == TGSI_PROCESSOR_TESSCTRL ||
|
||||
procType == TGSI_PROCESSOR_TESSEVAL) {
|
||||
if (semName == TGSI_SEMANTIC_CLIPDIST) {
|
||||
info->num_written_clipdistance +=
|
||||
util_bitcount(fulldecl->Declaration.UsageMask);
|
||||
|
@@ -65,10 +65,6 @@ struct tgsi_shader_info
|
||||
int file_max[TGSI_FILE_COUNT]; /**< highest index of declared registers */
|
||||
int const_file_max[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
|
||||
ubyte input_array_first[PIPE_MAX_SHADER_INPUTS];
|
||||
ubyte input_array_last[PIPE_MAX_SHADER_INPUTS];
|
||||
ubyte output_array_first[PIPE_MAX_SHADER_OUTPUTS];
|
||||
ubyte output_array_last[PIPE_MAX_SHADER_OUTPUTS];
|
||||
unsigned array_max[TGSI_FILE_COUNT]; /**< highest index array per register file */
|
||||
|
||||
uint immediate_count; /**< number of immediates declared */
|
||||
@@ -89,7 +85,6 @@ struct tgsi_shader_info
|
||||
boolean uses_basevertex;
|
||||
boolean uses_primid;
|
||||
boolean uses_frontface;
|
||||
boolean uses_invocationid;
|
||||
boolean writes_psize;
|
||||
boolean writes_clipvertex;
|
||||
boolean writes_viewport_index;
|
||||
|
@@ -297,10 +297,6 @@ static boolean parse_header( struct translate_ctx *ctx )
|
||||
processor = TGSI_PROCESSOR_VERTEX;
|
||||
else if (str_match_nocase_whole( &ctx->cur, "GEOM" ))
|
||||
processor = TGSI_PROCESSOR_GEOMETRY;
|
||||
else if (str_match_nocase_whole( &ctx->cur, "TESS_CTRL" ))
|
||||
processor = TGSI_PROCESSOR_TESS_CTRL;
|
||||
else if (str_match_nocase_whole( &ctx->cur, "TESS_EVAL" ))
|
||||
processor = TGSI_PROCESSOR_TESS_EVAL;
|
||||
else if (str_match_nocase_whole( &ctx->cur, "COMP" ))
|
||||
processor = TGSI_PROCESSOR_COMPUTE;
|
||||
else {
|
||||
@@ -907,7 +903,7 @@ match_inst(const char **pcur,
|
||||
/* simple case: the whole string matches the instruction name */
|
||||
if (str_match_nocase_whole(&cur, info->mnemonic)) {
|
||||
*pcur = cur;
|
||||
*saturate = 0;
|
||||
*saturate = TGSI_SAT_NONE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -915,7 +911,13 @@ match_inst(const char **pcur,
|
||||
/* the instruction has a suffix, figure it out */
|
||||
if (str_match_nocase_whole(&cur, "_SAT")) {
|
||||
*pcur = cur;
|
||||
*saturate = 1;
|
||||
*saturate = TGSI_SAT_ZERO_ONE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (str_match_nocase_whole(&cur, "_SATNV")) {
|
||||
*pcur = cur;
|
||||
*saturate = TGSI_SAT_MINUS_PLUS_ONE;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -929,7 +931,7 @@ parse_instruction(
|
||||
boolean has_label )
|
||||
{
|
||||
uint i;
|
||||
uint saturate = 0;
|
||||
uint saturate = TGSI_SAT_NONE;
|
||||
const struct tgsi_opcode_info *info;
|
||||
struct tgsi_full_instruction inst;
|
||||
const char *cur;
|
||||
|
@@ -143,27 +143,6 @@ tgsi_transform_sampler_decl(struct tgsi_transform_context *ctx,
|
||||
ctx->emit_declaration(ctx, &decl);
|
||||
}
|
||||
|
||||
static INLINE void
|
||||
tgsi_transform_sampler_view_decl(struct tgsi_transform_context *ctx,
|
||||
unsigned index,
|
||||
unsigned target,
|
||||
enum tgsi_return_type type)
|
||||
{
|
||||
struct tgsi_full_declaration decl;
|
||||
|
||||
decl = tgsi_default_full_declaration();
|
||||
decl.Declaration.File = TGSI_FILE_SAMPLER_VIEW;
|
||||
decl.Declaration.UsageMask = 0xf;
|
||||
decl.Range.First =
|
||||
decl.Range.Last = index;
|
||||
decl.SamplerView.Resource = target;
|
||||
decl.SamplerView.ReturnTypeX = type;
|
||||
decl.SamplerView.ReturnTypeY = type;
|
||||
decl.SamplerView.ReturnTypeZ = type;
|
||||
decl.SamplerView.ReturnTypeW = type;
|
||||
|
||||
ctx->emit_declaration(ctx, &decl);
|
||||
}
|
||||
|
||||
static INLINE void
|
||||
tgsi_transform_immediate_decl(struct tgsi_transform_context *ctx,
|
||||
|
@@ -26,7 +26,6 @@
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
#include "pipe/p_screen.h"
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "tgsi/tgsi_ureg.h"
|
||||
@@ -97,7 +96,7 @@ struct const_decl {
|
||||
struct ureg_program
|
||||
{
|
||||
unsigned processor;
|
||||
bool supports_any_inout_decl_range;
|
||||
struct pipe_context *pipe;
|
||||
|
||||
struct {
|
||||
unsigned semantic_name;
|
||||
@@ -105,13 +104,17 @@ struct ureg_program
|
||||
unsigned interp;
|
||||
unsigned char cylindrical_wrap;
|
||||
unsigned interp_location;
|
||||
unsigned first;
|
||||
unsigned last;
|
||||
unsigned array_id;
|
||||
} input[UREG_MAX_INPUT];
|
||||
unsigned nr_inputs, nr_input_regs;
|
||||
} fs_input[UREG_MAX_INPUT];
|
||||
unsigned nr_fs_inputs;
|
||||
|
||||
unsigned vs_inputs[PIPE_MAX_ATTRIBS/32];
|
||||
unsigned vs_inputs[UREG_MAX_INPUT/32];
|
||||
|
||||
struct {
|
||||
unsigned index;
|
||||
unsigned semantic_name;
|
||||
unsigned semantic_index;
|
||||
} gs_input[UREG_MAX_INPUT];
|
||||
unsigned nr_gs_inputs;
|
||||
|
||||
struct {
|
||||
unsigned index;
|
||||
@@ -124,11 +127,8 @@ struct ureg_program
|
||||
unsigned semantic_name;
|
||||
unsigned semantic_index;
|
||||
unsigned usage_mask; /* = TGSI_WRITEMASK_* */
|
||||
unsigned first;
|
||||
unsigned last;
|
||||
unsigned array_id;
|
||||
} output[UREG_MAX_OUTPUT];
|
||||
unsigned nr_outputs, nr_output_regs;
|
||||
unsigned nr_outputs;
|
||||
|
||||
struct {
|
||||
union {
|
||||
@@ -254,42 +254,30 @@ ureg_DECL_fs_input_cyl_centroid(struct ureg_program *ureg,
|
||||
unsigned semantic_index,
|
||||
unsigned interp_mode,
|
||||
unsigned cylindrical_wrap,
|
||||
unsigned interp_location,
|
||||
unsigned array_id,
|
||||
unsigned array_size)
|
||||
unsigned interp_location)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < ureg->nr_inputs; i++) {
|
||||
if (ureg->input[i].semantic_name == semantic_name &&
|
||||
ureg->input[i].semantic_index == semantic_index) {
|
||||
assert(ureg->input[i].interp == interp_mode);
|
||||
assert(ureg->input[i].cylindrical_wrap == cylindrical_wrap);
|
||||
assert(ureg->input[i].interp_location == interp_location);
|
||||
assert(ureg->input[i].array_id == array_id);
|
||||
for (i = 0; i < ureg->nr_fs_inputs; i++) {
|
||||
if (ureg->fs_input[i].semantic_name == semantic_name &&
|
||||
ureg->fs_input[i].semantic_index == semantic_index) {
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if (ureg->nr_inputs < UREG_MAX_INPUT) {
|
||||
assert(array_size >= 1);
|
||||
ureg->input[i].semantic_name = semantic_name;
|
||||
ureg->input[i].semantic_index = semantic_index;
|
||||
ureg->input[i].interp = interp_mode;
|
||||
ureg->input[i].cylindrical_wrap = cylindrical_wrap;
|
||||
ureg->input[i].interp_location = interp_location;
|
||||
ureg->input[i].first = ureg->nr_input_regs;
|
||||
ureg->input[i].last = ureg->nr_input_regs + array_size - 1;
|
||||
ureg->input[i].array_id = array_id;
|
||||
ureg->nr_input_regs += array_size;
|
||||
ureg->nr_inputs++;
|
||||
if (ureg->nr_fs_inputs < UREG_MAX_INPUT) {
|
||||
ureg->fs_input[i].semantic_name = semantic_name;
|
||||
ureg->fs_input[i].semantic_index = semantic_index;
|
||||
ureg->fs_input[i].interp = interp_mode;
|
||||
ureg->fs_input[i].cylindrical_wrap = cylindrical_wrap;
|
||||
ureg->fs_input[i].interp_location = interp_location;
|
||||
ureg->nr_fs_inputs++;
|
||||
} else {
|
||||
set_bad(ureg);
|
||||
}
|
||||
|
||||
out:
|
||||
return ureg_src_array_register(TGSI_FILE_INPUT, ureg->input[i].first,
|
||||
array_id);
|
||||
return ureg_src_register(TGSI_FILE_INPUT, i);
|
||||
}
|
||||
|
||||
|
||||
@@ -298,22 +286,29 @@ ureg_DECL_vs_input( struct ureg_program *ureg,
|
||||
unsigned index )
|
||||
{
|
||||
assert(ureg->processor == TGSI_PROCESSOR_VERTEX);
|
||||
assert(index / 32 < ARRAY_SIZE(ureg->vs_inputs));
|
||||
|
||||
|
||||
ureg->vs_inputs[index/32] |= 1 << (index % 32);
|
||||
return ureg_src_register( TGSI_FILE_INPUT, index );
|
||||
}
|
||||
|
||||
|
||||
struct ureg_src
|
||||
ureg_DECL_input(struct ureg_program *ureg,
|
||||
unsigned semantic_name,
|
||||
unsigned semantic_index,
|
||||
unsigned array_id,
|
||||
unsigned array_size)
|
||||
ureg_DECL_gs_input(struct ureg_program *ureg,
|
||||
unsigned index,
|
||||
unsigned semantic_name,
|
||||
unsigned semantic_index)
|
||||
{
|
||||
return ureg_DECL_fs_input_cyl_centroid(ureg, semantic_name, semantic_index,
|
||||
0, 0, 0, array_id, array_size);
|
||||
if (ureg->nr_gs_inputs < UREG_MAX_INPUT) {
|
||||
ureg->gs_input[ureg->nr_gs_inputs].index = index;
|
||||
ureg->gs_input[ureg->nr_gs_inputs].semantic_name = semantic_name;
|
||||
ureg->gs_input[ureg->nr_gs_inputs].semantic_index = semantic_index;
|
||||
ureg->nr_gs_inputs++;
|
||||
} else {
|
||||
set_bad(ureg);
|
||||
}
|
||||
|
||||
/* XXX: Add suport for true 2D input registers. */
|
||||
return ureg_src_register(TGSI_FILE_INPUT, index);
|
||||
}
|
||||
|
||||
|
||||
@@ -337,12 +332,10 @@ ureg_DECL_system_value(struct ureg_program *ureg,
|
||||
|
||||
|
||||
struct ureg_dst
|
||||
ureg_DECL_output_masked(struct ureg_program *ureg,
|
||||
unsigned name,
|
||||
unsigned index,
|
||||
unsigned usage_mask,
|
||||
unsigned array_id,
|
||||
unsigned array_size)
|
||||
ureg_DECL_output_masked( struct ureg_program *ureg,
|
||||
unsigned name,
|
||||
unsigned index,
|
||||
unsigned usage_mask )
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
@@ -350,8 +343,7 @@ ureg_DECL_output_masked(struct ureg_program *ureg,
|
||||
|
||||
for (i = 0; i < ureg->nr_outputs; i++) {
|
||||
if (ureg->output[i].semantic_name == name &&
|
||||
ureg->output[i].semantic_index == index) {
|
||||
assert(ureg->output[i].array_id == array_id);
|
||||
ureg->output[i].semantic_index == index) {
|
||||
ureg->output[i].usage_mask |= usage_mask;
|
||||
goto out;
|
||||
}
|
||||
@@ -361,10 +353,6 @@ ureg_DECL_output_masked(struct ureg_program *ureg,
|
||||
ureg->output[i].semantic_name = name;
|
||||
ureg->output[i].semantic_index = index;
|
||||
ureg->output[i].usage_mask = usage_mask;
|
||||
ureg->output[i].first = ureg->nr_output_regs;
|
||||
ureg->output[i].last = ureg->nr_output_regs + array_size - 1;
|
||||
ureg->output[i].array_id = array_id;
|
||||
ureg->nr_output_regs += array_size;
|
||||
ureg->nr_outputs++;
|
||||
}
|
||||
else {
|
||||
@@ -372,30 +360,16 @@ ureg_DECL_output_masked(struct ureg_program *ureg,
|
||||
}
|
||||
|
||||
out:
|
||||
return ureg_dst_array_register(TGSI_FILE_OUTPUT, ureg->output[i].first,
|
||||
array_id);
|
||||
return ureg_dst_register( TGSI_FILE_OUTPUT, i );
|
||||
}
|
||||
|
||||
|
||||
struct ureg_dst
|
||||
ureg_DECL_output(struct ureg_program *ureg,
|
||||
unsigned name,
|
||||
unsigned index)
|
||||
ureg_DECL_output( struct ureg_program *ureg,
|
||||
unsigned name,
|
||||
unsigned index )
|
||||
{
|
||||
return ureg_DECL_output_masked(ureg, name, index, TGSI_WRITEMASK_XYZW,
|
||||
0, 1);
|
||||
}
|
||||
|
||||
struct ureg_dst
|
||||
ureg_DECL_output_array(struct ureg_program *ureg,
|
||||
unsigned semantic_name,
|
||||
unsigned semantic_index,
|
||||
unsigned array_id,
|
||||
unsigned array_size)
|
||||
{
|
||||
return ureg_DECL_output_masked(ureg, semantic_name, semantic_index,
|
||||
TGSI_WRITEMASK_XYZW,
|
||||
array_id, array_size);
|
||||
return ureg_DECL_output_masked(ureg, name, index, TGSI_WRITEMASK_XYZW);
|
||||
}
|
||||
|
||||
|
||||
@@ -908,11 +882,7 @@ ureg_emit_src( struct ureg_program *ureg,
|
||||
out[n].ind.File = src.IndirectFile;
|
||||
out[n].ind.Swizzle = src.IndirectSwizzle;
|
||||
out[n].ind.Index = src.IndirectIndex;
|
||||
if (!ureg->supports_any_inout_decl_range &&
|
||||
(src.File == TGSI_FILE_INPUT || src.File == TGSI_FILE_OUTPUT))
|
||||
out[n].ind.ArrayID = 0;
|
||||
else
|
||||
out[n].ind.ArrayID = src.ArrayID;
|
||||
out[n].ind.ArrayID = src.ArrayID;
|
||||
n++;
|
||||
}
|
||||
|
||||
@@ -928,11 +898,7 @@ ureg_emit_src( struct ureg_program *ureg,
|
||||
out[n].ind.File = src.DimIndFile;
|
||||
out[n].ind.Swizzle = src.DimIndSwizzle;
|
||||
out[n].ind.Index = src.DimIndIndex;
|
||||
if (!ureg->supports_any_inout_decl_range &&
|
||||
(src.File == TGSI_FILE_INPUT || src.File == TGSI_FILE_OUTPUT))
|
||||
out[n].ind.ArrayID = 0;
|
||||
else
|
||||
out[n].ind.ArrayID = src.ArrayID;
|
||||
out[n].ind.ArrayID = src.ArrayID;
|
||||
} else {
|
||||
out[n].dim.Indirect = 0;
|
||||
out[n].dim.Index = src.DimensionIndex;
|
||||
@@ -974,11 +940,7 @@ ureg_emit_dst( struct ureg_program *ureg,
|
||||
out[n].ind.File = dst.IndirectFile;
|
||||
out[n].ind.Swizzle = dst.IndirectSwizzle;
|
||||
out[n].ind.Index = dst.IndirectIndex;
|
||||
if (!ureg->supports_any_inout_decl_range &&
|
||||
(dst.File == TGSI_FILE_INPUT || dst.File == TGSI_FILE_OUTPUT))
|
||||
out[n].ind.ArrayID = 0;
|
||||
else
|
||||
out[n].ind.ArrayID = dst.ArrayID;
|
||||
out[n].ind.ArrayID = dst.ArrayID;
|
||||
n++;
|
||||
}
|
||||
|
||||
@@ -994,11 +956,7 @@ ureg_emit_dst( struct ureg_program *ureg,
|
||||
out[n].ind.File = dst.DimIndFile;
|
||||
out[n].ind.Swizzle = dst.DimIndSwizzle;
|
||||
out[n].ind.Index = dst.DimIndIndex;
|
||||
if (!ureg->supports_any_inout_decl_range &&
|
||||
(dst.File == TGSI_FILE_INPUT || dst.File == TGSI_FILE_OUTPUT))
|
||||
out[n].ind.ArrayID = 0;
|
||||
else
|
||||
out[n].ind.ArrayID = dst.ArrayID;
|
||||
out[n].ind.ArrayID = dst.ArrayID;
|
||||
} else {
|
||||
out[n].dim.Indirect = 0;
|
||||
out[n].dim.Index = dst.DimensionIndex;
|
||||
@@ -1069,12 +1027,6 @@ ureg_emit_insn(struct ureg_program *ureg,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Emit a label token.
|
||||
* \param label_token returns a token number indicating where the label
|
||||
* needs to be patched later. Later, this value should be passed to the
|
||||
* ureg_fixup_label() function.
|
||||
*/
|
||||
void
|
||||
ureg_emit_label(struct ureg_program *ureg,
|
||||
unsigned extended_token,
|
||||
@@ -1302,14 +1254,12 @@ ureg_label_insn(struct ureg_program *ureg,
|
||||
static void
|
||||
emit_decl_semantic(struct ureg_program *ureg,
|
||||
unsigned file,
|
||||
unsigned first,
|
||||
unsigned last,
|
||||
unsigned index,
|
||||
unsigned semantic_name,
|
||||
unsigned semantic_index,
|
||||
unsigned usage_mask,
|
||||
unsigned array_id)
|
||||
unsigned usage_mask)
|
||||
{
|
||||
union tgsi_any_token *out = get_tokens(ureg, DOMAIN_DECL, array_id ? 4 : 3);
|
||||
union tgsi_any_token *out = get_tokens(ureg, DOMAIN_DECL, 3);
|
||||
|
||||
out[0].value = 0;
|
||||
out[0].decl.Type = TGSI_TOKEN_TYPE_DECLARATION;
|
||||
@@ -1317,37 +1267,28 @@ emit_decl_semantic(struct ureg_program *ureg,
|
||||
out[0].decl.File = file;
|
||||
out[0].decl.UsageMask = usage_mask;
|
||||
out[0].decl.Semantic = 1;
|
||||
out[0].decl.Array = array_id != 0;
|
||||
|
||||
out[1].value = 0;
|
||||
out[1].decl_range.First = first;
|
||||
out[1].decl_range.Last = last;
|
||||
out[1].decl_range.First = index;
|
||||
out[1].decl_range.Last = index;
|
||||
|
||||
out[2].value = 0;
|
||||
out[2].decl_semantic.Name = semantic_name;
|
||||
out[2].decl_semantic.Index = semantic_index;
|
||||
|
||||
if (array_id) {
|
||||
out[3].value = 0;
|
||||
out[3].array.ArrayID = array_id;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
emit_decl_fs(struct ureg_program *ureg,
|
||||
unsigned file,
|
||||
unsigned first,
|
||||
unsigned last,
|
||||
unsigned index,
|
||||
unsigned semantic_name,
|
||||
unsigned semantic_index,
|
||||
unsigned interpolate,
|
||||
unsigned cylindrical_wrap,
|
||||
unsigned interpolate_location,
|
||||
unsigned array_id)
|
||||
unsigned interpolate_location)
|
||||
{
|
||||
union tgsi_any_token *out = get_tokens(ureg, DOMAIN_DECL,
|
||||
array_id ? 5 : 4);
|
||||
union tgsi_any_token *out = get_tokens(ureg, DOMAIN_DECL, 4);
|
||||
|
||||
out[0].value = 0;
|
||||
out[0].decl.Type = TGSI_TOKEN_TYPE_DECLARATION;
|
||||
@@ -1356,11 +1297,10 @@ emit_decl_fs(struct ureg_program *ureg,
|
||||
out[0].decl.UsageMask = TGSI_WRITEMASK_XYZW; /* FIXME! */
|
||||
out[0].decl.Interpolate = 1;
|
||||
out[0].decl.Semantic = 1;
|
||||
out[0].decl.Array = array_id != 0;
|
||||
|
||||
out[1].value = 0;
|
||||
out[1].decl_range.First = first;
|
||||
out[1].decl_range.Last = last;
|
||||
out[1].decl_range.First = index;
|
||||
out[1].decl_range.Last = index;
|
||||
|
||||
out[2].value = 0;
|
||||
out[2].decl_interp.Interpolate = interpolate;
|
||||
@@ -1370,11 +1310,6 @@ emit_decl_fs(struct ureg_program *ureg,
|
||||
out[3].value = 0;
|
||||
out[3].decl_semantic.Name = semantic_name;
|
||||
out[3].decl_semantic.Index = semantic_index;
|
||||
|
||||
if (array_id) {
|
||||
out[4].value = 0;
|
||||
out[4].array.ArrayID = array_id;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1513,73 +1448,37 @@ emit_property(struct ureg_program *ureg,
|
||||
|
||||
static void emit_decls( struct ureg_program *ureg )
|
||||
{
|
||||
unsigned i,j;
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < Elements(ureg->properties); i++)
|
||||
if (ureg->properties[i] != ~0)
|
||||
emit_property(ureg, i, ureg->properties[i]);
|
||||
|
||||
if (ureg->processor == TGSI_PROCESSOR_VERTEX) {
|
||||
for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
|
||||
for (i = 0; i < UREG_MAX_INPUT; i++) {
|
||||
if (ureg->vs_inputs[i/32] & (1 << (i%32))) {
|
||||
emit_decl_range( ureg, TGSI_FILE_INPUT, i, 1 );
|
||||
}
|
||||
}
|
||||
} else if (ureg->processor == TGSI_PROCESSOR_FRAGMENT) {
|
||||
if (ureg->supports_any_inout_decl_range) {
|
||||
for (i = 0; i < ureg->nr_inputs; i++) {
|
||||
emit_decl_fs(ureg,
|
||||
TGSI_FILE_INPUT,
|
||||
ureg->input[i].first,
|
||||
ureg->input[i].last,
|
||||
ureg->input[i].semantic_name,
|
||||
ureg->input[i].semantic_index,
|
||||
ureg->input[i].interp,
|
||||
ureg->input[i].cylindrical_wrap,
|
||||
ureg->input[i].interp_location,
|
||||
ureg->input[i].array_id);
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (i = 0; i < ureg->nr_inputs; i++) {
|
||||
for (j = ureg->input[i].first; j <= ureg->input[i].last; j++) {
|
||||
emit_decl_fs(ureg,
|
||||
TGSI_FILE_INPUT,
|
||||
j, j,
|
||||
ureg->input[i].semantic_name,
|
||||
ureg->input[i].semantic_index +
|
||||
(j - ureg->input[i].first),
|
||||
ureg->input[i].interp,
|
||||
ureg->input[i].cylindrical_wrap,
|
||||
ureg->input[i].interp_location, 0);
|
||||
}
|
||||
}
|
||||
for (i = 0; i < ureg->nr_fs_inputs; i++) {
|
||||
emit_decl_fs(ureg,
|
||||
TGSI_FILE_INPUT,
|
||||
i,
|
||||
ureg->fs_input[i].semantic_name,
|
||||
ureg->fs_input[i].semantic_index,
|
||||
ureg->fs_input[i].interp,
|
||||
ureg->fs_input[i].cylindrical_wrap,
|
||||
ureg->fs_input[i].interp_location);
|
||||
}
|
||||
} else {
|
||||
if (ureg->supports_any_inout_decl_range) {
|
||||
for (i = 0; i < ureg->nr_inputs; i++) {
|
||||
emit_decl_semantic(ureg,
|
||||
TGSI_FILE_INPUT,
|
||||
ureg->input[i].first,
|
||||
ureg->input[i].last,
|
||||
ureg->input[i].semantic_name,
|
||||
ureg->input[i].semantic_index,
|
||||
TGSI_WRITEMASK_XYZW,
|
||||
ureg->input[i].array_id);
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (i = 0; i < ureg->nr_inputs; i++) {
|
||||
for (j = ureg->input[i].first; j <= ureg->input[i].last; j++) {
|
||||
emit_decl_semantic(ureg,
|
||||
TGSI_FILE_INPUT,
|
||||
j, j,
|
||||
ureg->input[i].semantic_name,
|
||||
ureg->input[i].semantic_index +
|
||||
(j - ureg->input[i].first),
|
||||
TGSI_WRITEMASK_XYZW, 0);
|
||||
}
|
||||
}
|
||||
for (i = 0; i < ureg->nr_gs_inputs; i++) {
|
||||
emit_decl_semantic(ureg,
|
||||
TGSI_FILE_INPUT,
|
||||
ureg->gs_input[i].index,
|
||||
ureg->gs_input[i].semantic_name,
|
||||
ureg->gs_input[i].semantic_index,
|
||||
TGSI_WRITEMASK_XYZW);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1587,36 +1486,18 @@ static void emit_decls( struct ureg_program *ureg )
|
||||
emit_decl_semantic(ureg,
|
||||
TGSI_FILE_SYSTEM_VALUE,
|
||||
ureg->system_value[i].index,
|
||||
ureg->system_value[i].index,
|
||||
ureg->system_value[i].semantic_name,
|
||||
ureg->system_value[i].semantic_index,
|
||||
TGSI_WRITEMASK_XYZW, 0);
|
||||
TGSI_WRITEMASK_XYZW);
|
||||
}
|
||||
|
||||
if (ureg->supports_any_inout_decl_range) {
|
||||
for (i = 0; i < ureg->nr_outputs; i++) {
|
||||
emit_decl_semantic(ureg,
|
||||
TGSI_FILE_OUTPUT,
|
||||
ureg->output[i].first,
|
||||
ureg->output[i].last,
|
||||
ureg->output[i].semantic_name,
|
||||
ureg->output[i].semantic_index,
|
||||
ureg->output[i].usage_mask,
|
||||
ureg->output[i].array_id);
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (i = 0; i < ureg->nr_outputs; i++) {
|
||||
for (j = ureg->output[i].first; j <= ureg->output[i].last; j++) {
|
||||
emit_decl_semantic(ureg,
|
||||
TGSI_FILE_OUTPUT,
|
||||
j, j,
|
||||
ureg->output[i].semantic_name,
|
||||
ureg->output[i].semantic_index +
|
||||
(j - ureg->output[i].first),
|
||||
ureg->output[i].usage_mask, 0);
|
||||
}
|
||||
}
|
||||
for (i = 0; i < ureg->nr_outputs; i++) {
|
||||
emit_decl_semantic(ureg,
|
||||
TGSI_FILE_OUTPUT,
|
||||
i,
|
||||
ureg->output[i].semantic_name,
|
||||
ureg->output[i].semantic_index,
|
||||
ureg->output[i].usage_mask);
|
||||
}
|
||||
|
||||
for (i = 0; i < ureg->nr_samplers; i++) {
|
||||
@@ -1786,20 +1667,10 @@ void *ureg_create_shader( struct ureg_program *ureg,
|
||||
else
|
||||
memset(&state.stream_output, 0, sizeof(state.stream_output));
|
||||
|
||||
switch (ureg->processor) {
|
||||
case TGSI_PROCESSOR_VERTEX:
|
||||
return pipe->create_vs_state(pipe, &state);
|
||||
case TGSI_PROCESSOR_TESS_CTRL:
|
||||
return pipe->create_tcs_state(pipe, &state);
|
||||
case TGSI_PROCESSOR_TESS_EVAL:
|
||||
return pipe->create_tes_state(pipe, &state);
|
||||
case TGSI_PROCESSOR_GEOMETRY:
|
||||
return pipe->create_gs_state(pipe, &state);
|
||||
case TGSI_PROCESSOR_FRAGMENT:
|
||||
return pipe->create_fs_state(pipe, &state);
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
if (ureg->processor == TGSI_PROCESSOR_VERTEX)
|
||||
return pipe->create_vs_state( pipe, &state );
|
||||
else
|
||||
return pipe->create_fs_state( pipe, &state );
|
||||
}
|
||||
|
||||
|
||||
@@ -1830,38 +1701,7 @@ void ureg_free_tokens( const struct tgsi_token *tokens )
|
||||
}
|
||||
|
||||
|
||||
static INLINE unsigned
|
||||
pipe_shader_from_tgsi_processor(unsigned processor)
|
||||
{
|
||||
switch (processor) {
|
||||
case TGSI_PROCESSOR_VERTEX:
|
||||
return PIPE_SHADER_VERTEX;
|
||||
case TGSI_PROCESSOR_TESS_CTRL:
|
||||
return PIPE_SHADER_TESS_CTRL;
|
||||
case TGSI_PROCESSOR_TESS_EVAL:
|
||||
return PIPE_SHADER_TESS_EVAL;
|
||||
case TGSI_PROCESSOR_GEOMETRY:
|
||||
return PIPE_SHADER_GEOMETRY;
|
||||
case TGSI_PROCESSOR_FRAGMENT:
|
||||
return PIPE_SHADER_FRAGMENT;
|
||||
case TGSI_PROCESSOR_COMPUTE:
|
||||
return PIPE_SHADER_COMPUTE;
|
||||
default:
|
||||
assert(0);
|
||||
return PIPE_SHADER_VERTEX;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct ureg_program *
|
||||
ureg_create(unsigned processor)
|
||||
{
|
||||
return ureg_create_with_screen(processor, NULL);
|
||||
}
|
||||
|
||||
|
||||
struct ureg_program *
|
||||
ureg_create_with_screen(unsigned processor, struct pipe_screen *screen)
|
||||
struct ureg_program *ureg_create( unsigned processor )
|
||||
{
|
||||
int i;
|
||||
struct ureg_program *ureg = CALLOC_STRUCT( ureg_program );
|
||||
@@ -1869,11 +1709,6 @@ ureg_create_with_screen(unsigned processor, struct pipe_screen *screen)
|
||||
goto no_ureg;
|
||||
|
||||
ureg->processor = processor;
|
||||
ureg->supports_any_inout_decl_range =
|
||||
screen &&
|
||||
screen->get_shader_param(screen,
|
||||
pipe_shader_from_tgsi_processor(processor),
|
||||
PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE) != 0;
|
||||
|
||||
for (i = 0; i < Elements(ureg->properties); i++)
|
||||
ureg->properties[i] = ~0;
|
||||
|
@@ -36,7 +36,6 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct pipe_screen;
|
||||
struct ureg_program;
|
||||
struct pipe_stream_output_info;
|
||||
|
||||
@@ -99,10 +98,7 @@ struct ureg_dst
|
||||
struct pipe_context;
|
||||
|
||||
struct ureg_program *
|
||||
ureg_create(unsigned processor);
|
||||
|
||||
struct ureg_program *
|
||||
ureg_create_with_screen(unsigned processor, struct pipe_screen *screen);
|
||||
ureg_create( unsigned processor );
|
||||
|
||||
const struct tgsi_token *
|
||||
ureg_finalize( struct ureg_program * );
|
||||
@@ -176,9 +172,7 @@ ureg_DECL_fs_input_cyl_centroid(struct ureg_program *,
|
||||
unsigned semantic_index,
|
||||
unsigned interp_mode,
|
||||
unsigned cylindrical_wrap,
|
||||
unsigned interp_location,
|
||||
unsigned array_id,
|
||||
unsigned array_size);
|
||||
unsigned interp_location);
|
||||
|
||||
static INLINE struct ureg_src
|
||||
ureg_DECL_fs_input_cyl(struct ureg_program *ureg,
|
||||
@@ -192,7 +186,7 @@ ureg_DECL_fs_input_cyl(struct ureg_program *ureg,
|
||||
semantic_index,
|
||||
interp_mode,
|
||||
cylindrical_wrap,
|
||||
0, 0, 1);
|
||||
0);
|
||||
}
|
||||
|
||||
static INLINE struct ureg_src
|
||||
@@ -205,7 +199,7 @@ ureg_DECL_fs_input(struct ureg_program *ureg,
|
||||
semantic_name,
|
||||
semantic_index,
|
||||
interp_mode,
|
||||
0, 0, 0, 1);
|
||||
0, 0);
|
||||
}
|
||||
|
||||
struct ureg_src
|
||||
@@ -213,11 +207,10 @@ ureg_DECL_vs_input( struct ureg_program *,
|
||||
unsigned index );
|
||||
|
||||
struct ureg_src
|
||||
ureg_DECL_input(struct ureg_program *,
|
||||
unsigned semantic_name,
|
||||
unsigned semantic_index,
|
||||
unsigned array_id,
|
||||
unsigned array_size);
|
||||
ureg_DECL_gs_input(struct ureg_program *,
|
||||
unsigned index,
|
||||
unsigned semantic_name,
|
||||
unsigned semantic_index);
|
||||
|
||||
struct ureg_src
|
||||
ureg_DECL_system_value(struct ureg_program *,
|
||||
@@ -226,24 +219,15 @@ ureg_DECL_system_value(struct ureg_program *,
|
||||
unsigned semantic_index);
|
||||
|
||||
struct ureg_dst
|
||||
ureg_DECL_output_masked(struct ureg_program *,
|
||||
unsigned semantic_name,
|
||||
unsigned semantic_index,
|
||||
unsigned usage_mask,
|
||||
unsigned array_id,
|
||||
unsigned array_size);
|
||||
ureg_DECL_output_masked( struct ureg_program *,
|
||||
unsigned semantic_name,
|
||||
unsigned semantic_index,
|
||||
unsigned usage_mask );
|
||||
|
||||
struct ureg_dst
|
||||
ureg_DECL_output(struct ureg_program *,
|
||||
unsigned semantic_name,
|
||||
unsigned semantic_index);
|
||||
|
||||
struct ureg_dst
|
||||
ureg_DECL_output_array(struct ureg_program *ureg,
|
||||
unsigned semantic_name,
|
||||
unsigned semantic_index,
|
||||
unsigned array_id,
|
||||
unsigned array_size);
|
||||
ureg_DECL_output( struct ureg_program *,
|
||||
unsigned semantic_name,
|
||||
unsigned semantic_index );
|
||||
|
||||
struct ureg_src
|
||||
ureg_DECL_immediate( struct ureg_program *,
|
||||
@@ -1178,24 +1162,17 @@ ureg_src_dimension_indirect( struct ureg_src reg, struct ureg_src addr,
|
||||
return reg;
|
||||
}
|
||||
|
||||
static INLINE struct ureg_src
|
||||
ureg_src_array_offset(struct ureg_src reg, int offset)
|
||||
{
|
||||
reg.Index += offset;
|
||||
return reg;
|
||||
}
|
||||
|
||||
static INLINE struct ureg_dst
|
||||
ureg_dst_array_offset( struct ureg_dst reg, int offset )
|
||||
{
|
||||
assert(reg.File == TGSI_FILE_TEMPORARY);
|
||||
reg.Index += offset;
|
||||
return reg;
|
||||
}
|
||||
|
||||
static INLINE struct ureg_dst
|
||||
ureg_dst_array_register(unsigned file,
|
||||
unsigned index,
|
||||
unsigned array_id)
|
||||
ureg_dst_register( unsigned file,
|
||||
unsigned index )
|
||||
{
|
||||
struct ureg_dst dst;
|
||||
|
||||
@@ -1219,18 +1196,11 @@ ureg_dst_array_register(unsigned file,
|
||||
dst.DimIndFile = TGSI_FILE_NULL;
|
||||
dst.DimIndIndex = 0;
|
||||
dst.DimIndSwizzle = 0;
|
||||
dst.ArrayID = array_id;
|
||||
dst.ArrayID = 0;
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
static INLINE struct ureg_dst
|
||||
ureg_dst_register(unsigned file,
|
||||
unsigned index)
|
||||
{
|
||||
return ureg_dst_array_register(file, index, 0);
|
||||
}
|
||||
|
||||
static INLINE struct ureg_dst
|
||||
ureg_dst( struct ureg_src src )
|
||||
{
|
||||
@@ -1266,9 +1236,8 @@ ureg_dst( struct ureg_src src )
|
||||
}
|
||||
|
||||
static INLINE struct ureg_src
|
||||
ureg_src_array_register(unsigned file,
|
||||
unsigned index,
|
||||
unsigned array_id)
|
||||
ureg_src_register(unsigned file,
|
||||
unsigned index)
|
||||
{
|
||||
struct ureg_src src;
|
||||
|
||||
@@ -1290,18 +1259,11 @@ ureg_src_array_register(unsigned file,
|
||||
src.DimIndFile = TGSI_FILE_NULL;
|
||||
src.DimIndIndex = 0;
|
||||
src.DimIndSwizzle = 0;
|
||||
src.ArrayID = array_id;
|
||||
src.ArrayID = 0;
|
||||
|
||||
return src;
|
||||
}
|
||||
|
||||
static INLINE struct ureg_src
|
||||
ureg_src_register(unsigned file,
|
||||
unsigned index)
|
||||
{
|
||||
return ureg_src_array_register(file, index, 0);
|
||||
}
|
||||
|
||||
static INLINE struct ureg_src
|
||||
ureg_src( struct ureg_dst dst )
|
||||
{
|
||||
|
@@ -65,7 +65,7 @@ struct blit_state
|
||||
struct pipe_vertex_element velem[2];
|
||||
|
||||
void *vs;
|
||||
void *fs[PIPE_MAX_TEXTURE_TYPES][TGSI_WRITEMASK_XYZW + 1][3];
|
||||
void *fs[PIPE_MAX_TEXTURE_TYPES][TGSI_WRITEMASK_XYZW + 1];
|
||||
|
||||
struct pipe_resource *vbuf; /**< quad vertices */
|
||||
unsigned vbuf_slot;
|
||||
@@ -135,17 +135,15 @@ void
|
||||
util_destroy_blit(struct blit_state *ctx)
|
||||
{
|
||||
struct pipe_context *pipe = ctx->pipe;
|
||||
unsigned i, j, k;
|
||||
unsigned i, j;
|
||||
|
||||
if (ctx->vs)
|
||||
pipe->delete_vs_state(pipe, ctx->vs);
|
||||
|
||||
for (i = 0; i < Elements(ctx->fs); i++) {
|
||||
for (j = 0; j < Elements(ctx->fs[i]); j++) {
|
||||
for (k = 0; k < Elements(ctx->fs[i][j]); k++) {
|
||||
if (ctx->fs[i][j][k])
|
||||
pipe->delete_fs_state(pipe, ctx->fs[i][j][k]);
|
||||
}
|
||||
if (ctx->fs[i][j])
|
||||
pipe->delete_fs_state(pipe, ctx->fs[i][j]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,34 +158,18 @@ util_destroy_blit(struct blit_state *ctx)
|
||||
*/
|
||||
static INLINE void
|
||||
set_fragment_shader(struct blit_state *ctx, uint writemask,
|
||||
enum pipe_format format,
|
||||
enum pipe_texture_target pipe_tex)
|
||||
{
|
||||
enum tgsi_return_type stype;
|
||||
unsigned idx;
|
||||
|
||||
if (util_format_is_pure_uint(format)) {
|
||||
stype = TGSI_RETURN_TYPE_UINT;
|
||||
idx = 0;
|
||||
} else if (util_format_is_pure_sint(format)) {
|
||||
stype = TGSI_RETURN_TYPE_SINT;
|
||||
idx = 1;
|
||||
} else {
|
||||
stype = TGSI_RETURN_TYPE_FLOAT;
|
||||
idx = 2;
|
||||
}
|
||||
|
||||
if (!ctx->fs[pipe_tex][writemask][idx]) {
|
||||
if (!ctx->fs[pipe_tex][writemask]) {
|
||||
unsigned tgsi_tex = util_pipe_tex_to_tgsi_tex(pipe_tex, 0);
|
||||
|
||||
ctx->fs[pipe_tex][writemask][idx] =
|
||||
ctx->fs[pipe_tex][writemask] =
|
||||
util_make_fragment_tex_shader_writemask(ctx->pipe, tgsi_tex,
|
||||
TGSI_INTERPOLATE_LINEAR,
|
||||
writemask,
|
||||
stype);
|
||||
writemask);
|
||||
}
|
||||
|
||||
cso_set_fragment_shader_handle(ctx->cso, ctx->fs[pipe_tex][writemask][idx]);
|
||||
cso_set_fragment_shader_handle(ctx->cso, ctx->fs[pipe_tex][writemask]);
|
||||
}
|
||||
|
||||
|
||||
@@ -589,7 +571,6 @@ util_blit_pixels_tex(struct blit_state *ctx,
|
||||
|
||||
/* shaders */
|
||||
set_fragment_shader(ctx, TGSI_WRITEMASK_XYZW,
|
||||
src_sampler_view->format,
|
||||
src_sampler_view->texture->target);
|
||||
set_vertex_shader(ctx);
|
||||
cso_set_tessctrl_shader_handle(ctx->cso, NULL);
|
||||
|
@@ -81,8 +81,6 @@ struct blitter_context_priv
|
||||
/* FS which outputs a color from a texture,
|
||||
where the index is PIPE_TEXTURE_* to be sampled. */
|
||||
void *fs_texfetch_col[PIPE_MAX_TEXTURE_TYPES];
|
||||
void *fs_texfetch_col_uint[PIPE_MAX_TEXTURE_TYPES];
|
||||
void *fs_texfetch_col_sint[PIPE_MAX_TEXTURE_TYPES];
|
||||
|
||||
/* FS which outputs a depth from a texture,
|
||||
where the index is PIPE_TEXTURE_* to be sampled. */
|
||||
@@ -92,8 +90,6 @@ struct blitter_context_priv
|
||||
|
||||
/* FS which outputs one sample from a multisample texture. */
|
||||
void *fs_texfetch_col_msaa[PIPE_MAX_TEXTURE_TYPES];
|
||||
void *fs_texfetch_col_msaa_uint[PIPE_MAX_TEXTURE_TYPES];
|
||||
void *fs_texfetch_col_msaa_sint[PIPE_MAX_TEXTURE_TYPES];
|
||||
void *fs_texfetch_depth_msaa[PIPE_MAX_TEXTURE_TYPES];
|
||||
void *fs_texfetch_depthstencil_msaa[PIPE_MAX_TEXTURE_TYPES];
|
||||
void *fs_texfetch_stencil_msaa[PIPE_MAX_TEXTURE_TYPES];
|
||||
@@ -442,10 +438,6 @@ void util_blitter_destroy(struct blitter_context *blitter)
|
||||
for (i = 0; i < PIPE_MAX_TEXTURE_TYPES; i++) {
|
||||
if (ctx->fs_texfetch_col[i])
|
||||
ctx->delete_fs_state(pipe, ctx->fs_texfetch_col[i]);
|
||||
if (ctx->fs_texfetch_col_sint[i])
|
||||
ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_sint[i]);
|
||||
if (ctx->fs_texfetch_col_uint[i])
|
||||
ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_uint[i]);
|
||||
if (ctx->fs_texfetch_depth[i])
|
||||
ctx->delete_fs_state(pipe, ctx->fs_texfetch_depth[i]);
|
||||
if (ctx->fs_texfetch_depthstencil[i])
|
||||
@@ -455,10 +447,6 @@ void util_blitter_destroy(struct blitter_context *blitter)
|
||||
|
||||
if (ctx->fs_texfetch_col_msaa[i])
|
||||
ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_msaa[i]);
|
||||
if (ctx->fs_texfetch_col_msaa_sint[i])
|
||||
ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_msaa_sint[i]);
|
||||
if (ctx->fs_texfetch_col_msaa_uint[i])
|
||||
ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_msaa_uint[i]);
|
||||
if (ctx->fs_texfetch_depth_msaa[i])
|
||||
ctx->delete_fs_state(pipe, ctx->fs_texfetch_depth_msaa[i]);
|
||||
if (ctx->fs_texfetch_depthstencil_msaa[i])
|
||||
@@ -856,29 +844,25 @@ static void *blitter_get_fs_texfetch_col(struct blitter_context_priv *ctx,
|
||||
{
|
||||
struct pipe_context *pipe = ctx->base.pipe;
|
||||
unsigned tgsi_tex = util_pipe_tex_to_tgsi_tex(target, src_nr_samples);
|
||||
enum tgsi_return_type stype;
|
||||
|
||||
assert(target < PIPE_MAX_TEXTURE_TYPES);
|
||||
|
||||
if (util_format_is_pure_uint(format))
|
||||
stype = TGSI_RETURN_TYPE_UINT;
|
||||
else if (util_format_is_pure_sint(format))
|
||||
stype = TGSI_RETURN_TYPE_SINT;
|
||||
else
|
||||
stype = TGSI_RETURN_TYPE_FLOAT;
|
||||
|
||||
if (src_nr_samples > 1) {
|
||||
void **shader;
|
||||
|
||||
if (dst_nr_samples <= 1) {
|
||||
/* The destination has one sample, so we'll do color resolve. */
|
||||
boolean is_uint, is_sint;
|
||||
unsigned index = GET_MSAA_RESOLVE_FS_IDX(src_nr_samples);
|
||||
|
||||
is_uint = util_format_is_pure_uint(format);
|
||||
is_sint = util_format_is_pure_sint(format);
|
||||
|
||||
assert(filter < 2);
|
||||
|
||||
if (stype == TGSI_RETURN_TYPE_UINT)
|
||||
if (is_uint)
|
||||
shader = &ctx->fs_resolve_uint[target][index][filter];
|
||||
else if (stype == TGSI_RETURN_TYPE_SINT)
|
||||
else if (is_sint)
|
||||
shader = &ctx->fs_resolve_sint[target][index][filter];
|
||||
else
|
||||
shader = &ctx->fs_resolve[target][index][filter];
|
||||
@@ -888,12 +872,12 @@ static void *blitter_get_fs_texfetch_col(struct blitter_context_priv *ctx,
|
||||
if (filter == PIPE_TEX_FILTER_LINEAR) {
|
||||
*shader = util_make_fs_msaa_resolve_bilinear(pipe, tgsi_tex,
|
||||
src_nr_samples,
|
||||
stype);
|
||||
is_uint, is_sint);
|
||||
}
|
||||
else {
|
||||
*shader = util_make_fs_msaa_resolve(pipe, tgsi_tex,
|
||||
src_nr_samples,
|
||||
stype);
|
||||
is_uint, is_sint);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -901,37 +885,24 @@ static void *blitter_get_fs_texfetch_col(struct blitter_context_priv *ctx,
|
||||
/* The destination has multiple samples, we'll do
|
||||
* an MSAA->MSAA copy.
|
||||
*/
|
||||
if (stype == TGSI_RETURN_TYPE_UINT)
|
||||
shader = &ctx->fs_texfetch_col_msaa_uint[target];
|
||||
else if (stype == TGSI_RETURN_TYPE_SINT)
|
||||
shader = &ctx->fs_texfetch_col_msaa_sint[target];
|
||||
else
|
||||
shader = &ctx->fs_texfetch_col_msaa[target];
|
||||
shader = &ctx->fs_texfetch_col_msaa[target];
|
||||
|
||||
/* Create the fragment shader on-demand. */
|
||||
if (!*shader) {
|
||||
assert(!ctx->cached_all_shaders);
|
||||
*shader = util_make_fs_blit_msaa_color(pipe, tgsi_tex, stype);
|
||||
*shader = util_make_fs_blit_msaa_color(pipe, tgsi_tex);
|
||||
}
|
||||
}
|
||||
|
||||
return *shader;
|
||||
} else {
|
||||
void **shader;
|
||||
|
||||
if (stype == TGSI_RETURN_TYPE_UINT)
|
||||
shader = &ctx->fs_texfetch_col_uint[target];
|
||||
else if (stype == TGSI_RETURN_TYPE_SINT)
|
||||
shader = &ctx->fs_texfetch_col_sint[target];
|
||||
else
|
||||
shader = &ctx->fs_texfetch_col[target];
|
||||
void **shader = &ctx->fs_texfetch_col[target];
|
||||
|
||||
/* Create the fragment shader on-demand. */
|
||||
if (!*shader) {
|
||||
assert(!ctx->cached_all_shaders);
|
||||
*shader = util_make_fragment_tex_shader(pipe, tgsi_tex,
|
||||
TGSI_INTERPOLATE_LINEAR,
|
||||
stype);
|
||||
TGSI_INTERPOLATE_LINEAR);
|
||||
}
|
||||
|
||||
return *shader;
|
||||
@@ -1095,10 +1066,6 @@ void util_blitter_cache_all_shaders(struct blitter_context *blitter)
|
||||
*/
|
||||
blitter_get_fs_texfetch_col(ctx, PIPE_FORMAT_R32_FLOAT, target,
|
||||
samples, samples, 0);
|
||||
blitter_get_fs_texfetch_col(ctx, PIPE_FORMAT_R32_UINT, target,
|
||||
samples, samples, 0);
|
||||
blitter_get_fs_texfetch_col(ctx, PIPE_FORMAT_R32_SINT, target,
|
||||
samples, samples, 0);
|
||||
blitter_get_fs_texfetch_depth(ctx, target, samples);
|
||||
if (ctx->has_stencil_export) {
|
||||
blitter_get_fs_texfetch_depthstencil(ctx, target, samples);
|
||||
|
@@ -65,10 +65,11 @@ util_format_etc1_rgb8_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, con
|
||||
void
|
||||
util_format_etc1_rgb8_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
|
||||
{
|
||||
const unsigned bw = 4, bh = 4;
|
||||
struct etc1_block block;
|
||||
uint8_t tmp[3];
|
||||
|
||||
assert(i < 4 && j < 4); /* check i, j against 4x4 block size */
|
||||
assert(i < bw && j < bh);
|
||||
|
||||
etc1_parse_block(&block, src);
|
||||
etc1_fetch_texel(&block, i, j, tmp);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user