Compare commits
150 Commits
amber
...
mesa-10.5.
Author | SHA1 | Date | |
---|---|---|---|
|
5e59f895c4 | ||
|
ebbfa79755 | ||
|
fda3bc1e03 | ||
|
e98909b056 | ||
|
d83d2ea9a6 | ||
|
d6413ed98f | ||
|
3147f0bd25 | ||
|
c2760f0a16 | ||
|
859b4afc97 | ||
|
d33bf8150f | ||
|
8ebda1f144 | ||
|
0410d9b186 | ||
|
af3e6e2858 | ||
|
29810e43da | ||
|
2e0f2ad59c | ||
|
411f975a81 | ||
|
3fa76f3f79 | ||
|
5e572b1cce | ||
|
2beab3c01c | ||
|
d80bc65016 | ||
|
2abba086ca | ||
|
11c0ff60ef | ||
|
0f32ac3920 | ||
|
ce13666feb | ||
|
065a24bd96 | ||
|
1dec8bbb8e | ||
|
af4d1096f7 | ||
|
645d7f464b | ||
|
80c4ba0c83 | ||
|
aca5fdae06 | ||
|
7abc57b669 | ||
|
20ea65beb3 | ||
|
38777e1345 | ||
|
4de2f25083 | ||
|
fbd06fe65c | ||
|
c232d765af | ||
|
0d625e1ae7 | ||
|
e9e182658d | ||
|
82ef4994dd | ||
|
c3fc8b2870 | ||
|
aea510a95f | ||
|
c898d5c931 | ||
|
32a7f119dc | ||
|
578ac079c7 | ||
|
0ea3c150cf | ||
|
b542424ab8 | ||
|
d8ed6aa474 | ||
|
5b1bd4fc9e | ||
|
cddbb3a7ba | ||
|
e4d3bd6855 | ||
|
614e7ebdad | ||
|
7f32fa0dcb | ||
|
a15de1ae1a | ||
|
31fcb21ef5 | ||
|
0cd8e357e3 | ||
|
8b4db9c687 | ||
|
b0400a58db | ||
|
ef1c87ba09 | ||
|
a71223eb59 | ||
|
47a3ae1f20 | ||
|
dbf974636a | ||
|
35909f0e12 | ||
|
b83333ac5b | ||
|
30079d6846 | ||
|
e5eab59b57 | ||
|
57f54b067b | ||
|
e0670715bc | ||
|
8357abf4c3 | ||
|
b0f60c891a | ||
|
73efd2891f | ||
|
73f8e342a7 | ||
|
53d66c0c7c | ||
|
560fb4ee45 | ||
|
446aa309e1 | ||
|
4c45e23938 | ||
|
9267820be6 | ||
|
b730f6e18e | ||
|
f5fbed4831 | ||
|
f7cc5fb2cb | ||
|
0d3e4ed134 | ||
|
97357d475f | ||
|
c899144da6 | ||
|
b973acc093 | ||
|
90411b56f6 | ||
|
19422e433c | ||
|
1b00847bb2 | ||
|
a0264d4076 | ||
|
c7d4987897 | ||
|
c32d835281 | ||
|
54cc3cdff4 | ||
|
c0f425bb81 | ||
|
7c448551eb | ||
|
3e54be2e8a | ||
|
6f52686d77 | ||
|
1527f569e5 | ||
|
dfbaa8a843 | ||
|
9e8446beb1 | ||
|
9e5af14163 | ||
|
ed7272ade9 | ||
|
3592cbb21f | ||
|
5e026a2f63 | ||
|
04dc301669 | ||
|
4952a37697 | ||
|
aac12f4542 | ||
|
760407ff9e | ||
|
3cb2120088 | ||
|
b97e7ad355 | ||
|
bf563d59b2 | ||
|
7f7c35e854 | ||
|
b554a10e82 | ||
|
11cab7b36a | ||
|
80ec8ee3a1 | ||
|
d7fe0d9ce7 | ||
|
afe00ddc20 | ||
|
b9b8c10273 | ||
|
7f72b69c62 | ||
|
9bd832c24c | ||
|
ae275a653a | ||
|
86aaa10ce7 | ||
|
3e513ea65c | ||
|
2f8e96f71d | ||
|
c65ca6c815 | ||
|
4fa129cd9b | ||
|
4c2e35e0aa | ||
|
474f33e690 | ||
|
20471e9423 | ||
|
f0a736160b | ||
|
3a2043fddd | ||
|
39d823fa58 | ||
|
7bcdde5174 | ||
|
f2e513b2c0 | ||
|
c6b0a1638c | ||
|
694d656551 | ||
|
c38068f5c1 | ||
|
88d47387b8 | ||
|
c08e9605c2 | ||
|
fe98850c5f | ||
|
6f14955b71 | ||
|
8ab5a28bd6 | ||
|
4d6bc2c0ff | ||
|
631e76500d | ||
|
28650815ac | ||
|
b9518a41d4 | ||
|
550d7c26e7 | ||
|
716886c338 | ||
|
8898b68a3f | ||
|
93675c7aac | ||
|
6555c00b19 | ||
|
d03de1dd7d | ||
|
b1b7b5b068 |
@@ -21,7 +21,7 @@
|
||||
|
||||
SUBDIRS = src
|
||||
|
||||
DISTCHECK_CONFIGURE_FLAGS = \
|
||||
AM_DISTCHECK_CONFIGURE_FLAGS = \
|
||||
--enable-dri3 \
|
||||
--enable-gallium-tests \
|
||||
--enable-gbm \
|
||||
|
26
bin/.cherry-ignore
Normal file
26
bin/.cherry-ignore
Normal file
@@ -0,0 +1,26 @@
|
||||
# Cherry-picked without -x
|
||||
# nir: resolve nir.h dependency list (fix make distcheck)
|
||||
556fc4b84df99a1cd4b18c11fb16f7854a948b2a
|
||||
|
||||
# nir: add missing header to the sources list
|
||||
72e602905dd9d86450a936d5a22bf21758844b38
|
||||
|
||||
# configure: rework wayland_scanner handling(fix make distcheck)
|
||||
153539bd9d4445b504110958306f00632222f840
|
||||
|
||||
# auxiliary/vl: bring back the VL code for the dri targets
|
||||
c39dbfdd0f764b1aaa7319b4694e7335692993dd
|
||||
|
||||
# mesa: rename format_info.c to format_info.h
|
||||
3f6c28f2a976e35128b7a4a513cfa60af00301e1
|
||||
# mesa: fix dependency tracking of generated sources
|
||||
d22391cb165af4ed2f9a9e5d6233072a432cc969
|
||||
# mesa: drop Makefile from get_hash.h dependency list
|
||||
2c0f72d5389a9838cc4fbf4cc4f4291aa56c7845
|
||||
# mapi: fix *glapi dependency tracking
|
||||
fe5fddd7e2df74233a2a02ae021418485f39d11c
|
||||
# xmlpool: make sure we ship options.h
|
||||
8d8ca64c28170ec7e9ffa01638bcf8fd30a96088
|
||||
|
||||
# The optimisations mentioned are not available in 10.5
|
||||
627c68308683abbd6e563a09af6013a33938a790 i965/fs: in MAD optimizations, switch last argument to be immediate
|
179
configure.ac
179
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"),
|
||||
@@ -79,6 +78,7 @@ XCBDRI2_REQUIRED=1.8
|
||||
XCBGLX_REQUIRED=1.8.1
|
||||
XSHMFENCE_REQUIRED=1.1
|
||||
XVMC_REQUIRED=1.0.6
|
||||
PYTHON_MAKO_REQUIRED=0.3.4
|
||||
|
||||
dnl Check for progs
|
||||
AC_PROG_CPP
|
||||
@@ -114,7 +114,10 @@ if test "x$INDENT" != "xcat"; then
|
||||
fi
|
||||
fi
|
||||
|
||||
AX_CHECK_PYTHON_MAKO_MODULE(0.3.4)
|
||||
AX_CHECK_PYTHON_MAKO_MODULE($PYTHON_MAKO_REQUIRED)
|
||||
if test -n "$PYTHON2" -a "x$acv_mako_found" != "xyes"; then
|
||||
AC_MSG_ERROR([Python mako module v$PYTHON_MAKO_REQUIRED or higher not found])
|
||||
fi
|
||||
|
||||
AC_PROG_INSTALL
|
||||
|
||||
@@ -935,144 +938,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])
|
||||
@@ -1572,14 +1437,23 @@ if test -n "$with_gallium_drivers" -a "x$with_gallium_drivers" != xswrast; then
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$enable_dri" = xyes -o \
|
||||
"x$enable_xvmc" = xyes -o \
|
||||
"x$enable_vdpau" = xyes -o \
|
||||
"x$enable_omx" = xyes -o \
|
||||
"x$enable_va" = xyes; then
|
||||
need_gallium_vl=yes
|
||||
fi
|
||||
AM_CONDITIONAL(NEED_GALLIUM_VL, test "x$need_gallium_vl" = xyes)
|
||||
|
||||
if test "x$enable_xvmc" = xyes -o \
|
||||
"x$enable_vdpau" = xyes -o \
|
||||
"x$enable_omx" = xyes -o \
|
||||
"x$enable_va" = xyes; then
|
||||
PKG_CHECK_MODULES([VL], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED])
|
||||
need_gallium_vl=yes
|
||||
need_gallium_vl_winsys=yes
|
||||
fi
|
||||
AM_CONDITIONAL(NEED_GALLIUM_VL, test "x$need_gallium_vl" = xyes)
|
||||
AM_CONDITIONAL(NEED_GALLIUM_VL_WINSYS, test "x$need_gallium_vl_winsys" = xyes)
|
||||
|
||||
if test "x$enable_xvmc" = xyes; then
|
||||
PKG_CHECK_MODULES([XVMC], [xvmc >= $XVMC_REQUIRED])
|
||||
@@ -1730,6 +1604,13 @@ if test "x$with_egl_platforms" != "x" -a "x$enable_egl" != xyes; then
|
||||
AC_MSG_ERROR([cannot build egl state tracker without EGL library])
|
||||
fi
|
||||
|
||||
PKG_CHECK_MODULES([WAYLAND_SCANNER], [wayland_scanner],
|
||||
WAYLAND_SCANNER=`$PKG_CONFIG --variable=wayland_scanner wayland_scanner`,
|
||||
WAYLAND_SCANNER='')
|
||||
if test "x$WAYLAND_SCANNER" = x; then
|
||||
AC_PATH_PROG([WAYLAND_SCANNER], [wayland-scanner])
|
||||
fi
|
||||
|
||||
# Do per-EGL platform setups and checks
|
||||
egl_platforms=`IFS=', '; echo $with_egl_platforms`
|
||||
for plat in $egl_platforms; do
|
||||
@@ -1737,9 +1618,9 @@ for plat in $egl_platforms; do
|
||||
wayland)
|
||||
PKG_CHECK_MODULES([WAYLAND], [wayland-client >= $WAYLAND_REQUIRED wayland-server >= $WAYLAND_REQUIRED])
|
||||
|
||||
WAYLAND_PREFIX=`$PKG_CONFIG --variable=prefix wayland-client`
|
||||
AC_PATH_PROG([WAYLAND_SCANNER], [wayland-scanner],,
|
||||
[${WAYLAND_PREFIX}/bin$PATH_SEPARATOR$PATH])
|
||||
if test "x$WAYLAND_SCANNER" = x; then
|
||||
AC_MSG_ERROR([wayland-scanner is needed to compile the wayland egl platform])
|
||||
fi
|
||||
;;
|
||||
|
||||
x11)
|
||||
@@ -1770,7 +1651,7 @@ done
|
||||
# libEGL wants to default to the first platform specified in
|
||||
# ./configure. parse that here.
|
||||
if test "x$egl_platforms" != "x"; then
|
||||
FIRST_PLATFORM_CAPS=`echo $egl_platforms | sed 's| .*||' | tr 'a-z' 'A-Z'`
|
||||
FIRST_PLATFORM_CAPS=`echo $egl_platforms | sed 's| .*||' | tr '[[a-z]]' '[[A-Z]]'`
|
||||
EGL_NATIVE_PLATFORM="_EGL_PLATFORM_$FIRST_PLATFORM_CAPS"
|
||||
else
|
||||
EGL_NATIVE_PLATFORM="_EGL_INVALID_PLATFORM"
|
||||
@@ -2513,12 +2394,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 ""
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.5.0 Release Notes / TBD</h1>
|
||||
<h1>Mesa 10.5.0 Release Notes / March 06, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.5.0 is a new development release.
|
||||
@@ -31,9 +31,10 @@ because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>MD5 checksums</h2>
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
TBD.
|
||||
2bb6e2e982ee4d8264d52d638c2a4e3f8a164190336d72d4e34ae1304d87ed91 mesa-10.5.0.tar.gz
|
||||
d7ca9f9044bbdd674377e3eebceef1fae339c8817b9aa435c2053e4fea44e5d3 mesa-10.5.0.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
@@ -55,7 +56,150 @@ Note: some of the new features are only available with certain drivers.
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
TBD.
|
||||
<p>This list is likely incomplete.</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=10370">Bug 10370</a> - Incorrect pixels read back if draw bitmap texture through Display list</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=45348">Bug 45348</a> - [swrast] piglit fbo-drawbuffers-arbfp regression</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60879">Bug 60879</a> - [radeonsi] X11 can't start with acceleration enabled</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=67672">Bug 67672</a> - [llvmpipe] lp_test_arit fails on old CPUs</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=77544">Bug 77544</a> - i965: Try to use LINE instructions to perform MAD with immediate arguments</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=78770">Bug 78770</a> - [SNB bisected]Webglc conformance/textures/texture-size-limit.html fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=80568">Bug 80568</a> - [gen4] GPU Crash During Google Chrome Operation</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82477">Bug 82477</a> - [softpipe] piglit fp-long-alu regression</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82585">Bug 82585</a> - geometry shader with optional out variable segfaults</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82991">Bug 82991</a> - Inverted bumpmap in webgl applications</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83463">Bug 83463</a> - [swrast] piglit glsl-vs-clamp-1 regression</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83500">Bug 83500</a> - si_dma_copy_tile causes GPU hangs</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83510">Bug 83510</a> - Graphical glitches in Unreal Engine 4</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83908">Bug 83908</a> - [i965] Incorrect icon colors in Steam Big Picture</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84212">Bug 84212</a> - [BSW]ES3-CTS.shaders.loops.do_while_dynamic_iterations.vector_counter_vertex fails and causes GPU hang</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84651">Bug 84651</a> - Distorted graphics or black window when running Battle.net app on Intel hardware via wine</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84777">Bug 84777</a> - [BSW]Piglit spec_glsl-1.50_execution_geometry-basic fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85367">Bug 85367</a> - [gen4] GPU hang in glmark-es2</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85467">Bug 85467</a> - [llvmpipe] piglit gl-1.0-dlist-beginend failure with llvm-3.6.0svn</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85529">Bug 85529</a> - Surfaces not drawn in Unvanquished</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85647">Bug 85647</a> - Random radeonsi crashes with mesa 10.3.x</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85696">Bug 85696</a> - r600g+nine: Bioshock shader failure after 7b1c0cbc90d456384b0950ad21faa3c61a6b43ff</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86089">Bug 86089</a> - [r600g][mesa 10.4.0-dev] shader failure - r600_sb::bc_finalizer::cf_peephole() when starting Second Life</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86618">Bug 86618</a> - [NV96] neg modifiers not working in MIN and MAX operations</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86760">Bug 86760</a> - mesa doesn't build: recipe for target 'r600_llvm.lo' failed</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86764">Bug 86764</a> - [SNB+ Bisected]Piglit glean/pointSprite fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86788">Bug 86788</a> - (bisected) 32bit UrbanTerror 4.1 timedemo sse4.1 segfault...</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86811">Bug 86811</a> - [BDW/BSW Bisected]Piglit spec_arb_shading_language_packing_execution_built-in-functions_vs-unpackSnorm4x8 fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86837">Bug 86837</a> - kodi segfault since auxiliary/vl: rework the build of the VL code</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86939">Bug 86939</a> - test_vf_float_conversions.cpp:63:12: error: expected primary-expression before ‘union’</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86944">Bug 86944</a> - glsl_parser_extras.cpp", line 1455: Error: Badly formed expression. (Oracle Studio)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86958">Bug 86958</a> - lp_bld_misc.cpp:503:40: error: no matching function for call to ‘llvm::EngineBuilder::setMCJITMemoryManager(ShaderMemoryManager*&)’</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86969">Bug 86969</a> - _drm_intel_gem_bo_references() function takes half the CPU with Witcher2 game</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87076">Bug 87076</a> - Dead Island needs allow_glsl_extension_directive_midshader</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87516">Bug 87516</a> - glProgramBinary violates spec</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87619">Bug 87619</a> - Changes to state such as render targets change fragment shader without marking it dirty.</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87658">Bug 87658</a> - [llvmpipe] SEGV in sse2_has_daz on ancient Pentium4-M</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87694">Bug 87694</a> - [SNB] Crash in brw_begin_transform_feedback</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87886">Bug 87886</a> - constant fps drops with Intel and Radeon</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87887">Bug 87887</a> - [i965 Bisected]ES2-CTS.gtf.GL.cos.cos_float_vert_xvary fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87913">Bug 87913</a> - CPU cacheline size of 0 can be returned by CPUID leaf 0x80000006 in some virtual machines</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88079">Bug 88079</a> - dEQP-GLES3.functional.fbo.completeness.renderable.renderbuffer.color0 tests fail due to enabling of GL_RGB and GL_RGBA</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88170">Bug 88170</a> - 32 bits opengl apps crash with latest llvm 3.6 git / mesa git / radeonsi</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88219">Bug 88219</a> - include/c11/threads_posix.h:197: undefined reference to `pthread_mutex_lock'</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88227">Bug 88227</a> - Radeonsi: High GTT usage in Prison Architect large map</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88248">Bug 88248</a> - Calling glClear while there is an occlusion query in progress messes up the results</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88335">Bug 88335</a> - format_pack.c:9567:22: error: expected ')'</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88385">Bug 88385</a> - [SNB+ Bisected]Ogles3conform ES3-CTS.gtf.GL3Tests.packed_pixels.packed_pixels core dumped</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88467">Bug 88467</a> - nir.c:140: error: ‘nir_src’ has no member named ‘ssa’</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88478">Bug 88478</a> - #error "<malloc.h> has been replaced by <stdlib.h>"</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88519">Bug 88519</a> - sha1.c:210:22: error: 'grcy_md_hd_t' undeclared (first use in this function)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88523">Bug 88523</a> - sha1.c:37: error: 'SHA1_CTX' undeclared (first use in this function)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88561">Bug 88561</a> - [radeonsi][regression,bisected] Depth test/buffer issues in Portal</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88658">Bug 88658</a> - (bisected) Slow video playback on Kabini</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88662">Bug 88662</a> - unaligned access to gl_dlist_node</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88783">Bug 88783</a> - FTBFS: Clover: src/gallium/state_trackers/clover/llvm/invocation.cpp:335:49: error: no matching function for call to 'llvm::TargetLibraryInfo::TargetLibraryInfo(llvm::Triple)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88792">Bug 88792</a> - [BDW/BSW Bisected]Piglit spec_ARB_pixel_buffer_object_pbo-read-argb8888 fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88806">Bug 88806</a> - nir/nir_constant_expressions.c:2754:15: error: controlling expression type 'unsigned int' not compatible with any generic association type</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88841">Bug 88841</a> - [SNB/IVB/HSW/BDW Bisected]Piglit spec_EGL_NOK_texture_from_pixmap_basic fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88852">Bug 88852</a> - macros.h(181) : error C2143: syntax error : missing '{' before 'enum [tag]'</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88905">Bug 88905</a> - [SNB+ Bisected]Ogles3conform ES3-CTS.gtf.GL3Tests.packed_pixels.packed_pixels fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88930">Bug 88930</a> - [osmesa] osbuffer->textures should be indexed by attachment type</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88962">Bug 88962</a> - [osmesa] Crash on postprocessing if z buffer is NULL</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89032">Bug 89032</a> - [BDW/BSW/SKL Bisected]Piglit spec_OpenGL_1.1_infinite-spot-light fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89037">Bug 89037</a> - [SKL]Piglit spec_EXT_texture_array_copyteximage_1D_ARRAY_samples=2 sporadically causes GPU hang</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89068">Bug 89068</a> - glTexImage2D regression by texstore_rgba switch to _mesa_format_convert</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89069">Bug 89069</a> - Lack of grass in The Talos Principle on radeonsi (native\wine\nine)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89180">Bug 89180</a> - [IVB regression] Rendering issues in Mass Effect through VMware Workstation</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86330">Bug 86330</a> - lp_bld_debug.cpp:112: multiple definition of `raw_debug_ostream::write_impl(char const*, unsigned long)'</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
|
217
docs/relnotes/10.5.1.html
Normal file
217
docs/relnotes/10.5.1.html
Normal file
@@ -0,0 +1,217 @@
|
||||
<!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.1 Release Notes / March 13, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.5.1 is a bug fix release which fixes bugs found since the 10.5.0 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.5.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>
|
||||
b5b6256a6d46023e16a675257fd11a0f94d7b3e60a76cf112952da3d0fef8e9b mesa-10.5.1.tar.gz
|
||||
ffc51943d15c6812ee7611d053d8980a683fbd6a4986cff567b12cc66637d679 mesa-10.5.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=79202">Bug 79202</a> - valgrind errors in glsl-fs-uniform-array-loop-unroll.shader_test; random code generation</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84613">Bug 84613</a> - [G965, bisected] piglit regressions : glslparsertest.glsl2</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86747">Bug 86747</a> - Noise in Football Manager 2014 textures</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86974">Bug 86974</a> - INTEL_DEBUG=shader_time always asserts in fs_generator::generate_code() when Mesa is built with --enable-debug (= with asserts)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88246">Bug 88246</a> - Commit 2881b12 causes 43 DrawElements test regressions</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88793">Bug 88793</a> - [BDW/BSW Bisected]Piglit/shaders_glsl-max-varyings fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88883">Bug 88883</a> - ir-a2xx.c: variable changed in assert statement</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88885">Bug 88885</a> - Transform feedback uses incorrect interleaving if a previous draw did not write gl_Position</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89095">Bug 89095</a> - [SNB/IVB/BYT Bisected]Webglc conformance/glsl/functions/glsl-function-mix-float.html fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89156">Bug 89156</a> - r300g: GL_COMPRESSED_RED_RGTC1 / ATI1N support broken</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89224">Bug 89224</a> - Incorrect rendering of Unigine Valley running in VM on VMware Workstation</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89292">Bug 89292</a> - [regression,bisected] incomplete screenshots in some cases</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89311">Bug 89311</a> - [regression, bisected] dEQP: Added entry points for glCompressedTextureSubImage*D.</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89312">Bug 89312</a> - [regression, bisected] main: Added entry points for CopyTextureSubImage*D. (d6b7c40cecfe01)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89315">Bug 89315</a> - [HSW, regression, bisected] i965/fs: Emit MAD instructions when possible.</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89317">Bug 89317</a> - [HSW, regression, bisected] i965: Add LINTERP/CINTERP to can_do_cmod() (d91390634)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89416">Bug 89416</a> - UE4Editor crash after load project</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89430">Bug 89430</a> - [g965][bisected] arb_copy_image-targets gl_texture* tests fail</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Andrey Sudnik (1):</p>
|
||||
<ul>
|
||||
<li>i965/vec4: Don't lose the saturate modifier in copy propagation.</li>
|
||||
</ul>
|
||||
|
||||
<p>Chris Forbes (1):</p>
|
||||
<ul>
|
||||
<li>i965/gs: Check newly-generated GS-out VUE map against correct stage</li>
|
||||
</ul>
|
||||
|
||||
<p>Daniel Stone (1):</p>
|
||||
<ul>
|
||||
<li>egl: Take alpha bits into account when selecting GBM formats</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (5):</p>
|
||||
<ul>
|
||||
<li>docs: Add sha256 sums for the 10.5.0 release</li>
|
||||
<li>egl/main: no longer export internal function</li>
|
||||
<li>cherry-ignore: ignore a few more commits picked without -x</li>
|
||||
<li>mapi: fix commit 90411b56f6bc817e229d8801ac0adad6d4e3fb7a</li>
|
||||
<li>Update version to 10.5.1</li>
|
||||
</ul>
|
||||
|
||||
<p>Frank Henigman (1):</p>
|
||||
<ul>
|
||||
<li>intel: fix EGLImage renderbuffer _BaseFormat</li>
|
||||
</ul>
|
||||
|
||||
<p>Iago Toral Quiroga (1):</p>
|
||||
<ul>
|
||||
<li>i965: Fix out-of-bounds accesses into pull_constant_loc array</li>
|
||||
</ul>
|
||||
|
||||
<p>Ian Romanick (1):</p>
|
||||
<ul>
|
||||
<li>i965/fs/nir: Use emit_math for nir_op_fpow</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (3):</p>
|
||||
<ul>
|
||||
<li>freedreno: move fb state copy after checking for size change</li>
|
||||
<li>freedreno/ir3: fix array count returned by TXQ</li>
|
||||
<li>freedreno/ir3: get the # of miplevels from getinfo</li>
|
||||
</ul>
|
||||
|
||||
<p>Jason Ekstrand (2):</p>
|
||||
<ul>
|
||||
<li>meta/TexSubImage: Stash everything other than PIXEL_TRANSFER/store in meta_begin</li>
|
||||
<li>main/base_tex_format: Properly handle STENCIL_INDEX1/4/16</li>
|
||||
</ul>
|
||||
|
||||
<p>Kenneth Graunke (8):</p>
|
||||
<ul>
|
||||
<li>i965: Split Gen4-5 BlitFramebuffer code; prefer BLT over Meta.</li>
|
||||
<li>glsl: Mark array access when copying to a temporary for the ?: operator.</li>
|
||||
<li>i965/fs: Set force_writemask_all on shader_time instructions.</li>
|
||||
<li>i965/fs: Set smear on shader_time diff register.</li>
|
||||
<li>i965/fs: Make emit_shader_time_write return rather than emit.</li>
|
||||
<li>i965/fs: Make get_timestamp() pass back the MOV rather than emitting it.</li>
|
||||
<li>i965/fs: Make emit_shader_time_end() insert before EOT.</li>
|
||||
<li>i965/fs: Don't issue FB writes for bound but unwritten color targets.</li>
|
||||
</ul>
|
||||
|
||||
<p>Laura Ekstrand (2):</p>
|
||||
<ul>
|
||||
<li>main: Fix target checking for CompressedTexSubImage*D.</li>
|
||||
<li>main: Fix target checking for CopyTexSubImage*D.</li>
|
||||
</ul>
|
||||
|
||||
<p>Marc-Andre Lureau (1):</p>
|
||||
<ul>
|
||||
<li>gallium/auxiliary/indices: fix start param</li>
|
||||
</ul>
|
||||
|
||||
<p>Marek Olšák (3):</p>
|
||||
<ul>
|
||||
<li>r300g: fix RGTC1 and LATC1 SNORM formats</li>
|
||||
<li>r300g: fix a crash when resolving into an sRGB texture</li>
|
||||
<li>r300g: fix sRGB->sRGB blits</li>
|
||||
</ul>
|
||||
|
||||
<p>Matt Turner (12):</p>
|
||||
<ul>
|
||||
<li>i965/vec4: Fix implementation of i2b.</li>
|
||||
<li>mesa: Indent break statements and add a missing one.</li>
|
||||
<li>mesa: Free memory allocated for luminance in readpixels.</li>
|
||||
<li>mesa: Correct backwards NULL check.</li>
|
||||
<li>i965: Consider scratch writes to have side effects.</li>
|
||||
<li>i965/fs: Don't use backend_visitor::instructions after creating the CFG.</li>
|
||||
<li>r300g: Use PATH_MAX instead of limiting ourselves to 100 chars.</li>
|
||||
<li>r300g: Check return value of snprintf().</li>
|
||||
<li>i965/fs: Don't propagate cmod to inst with different type.</li>
|
||||
<li>i965: Tell intel_get_memcpy() which direction the memcpy() is going.</li>
|
||||
<li>Revert SHA1 additions.</li>
|
||||
<li>i965: Avoid applying negate to wrong MAD source.</li>
|
||||
</ul>
|
||||
|
||||
<p>Neil Roberts (4):</p>
|
||||
<ul>
|
||||
<li>meta: In pbo_{Get,}TexSubImage don't repeatedly rebind the source tex</li>
|
||||
<li>Revert "common: Fix PBOs for 1D_ARRAY."</li>
|
||||
<li>meta: Allow GL_UN/PACK_IMAGE_HEIGHT in _mesa_meta_pbo_Get/TexSubImage</li>
|
||||
<li>meta: Fix the y offset for 1D_ARRAY in _mesa_meta_pbo_TexSubImage</li>
|
||||
</ul>
|
||||
|
||||
<p>Rob Clark (11):</p>
|
||||
<ul>
|
||||
<li>freedreno/ir3: fix silly typo for binning pass shaders</li>
|
||||
<li>freedreno/a2xx: fix increment in assert</li>
|
||||
<li>freedreno/a4xx: bit of cleanup</li>
|
||||
<li>freedreno: update generated headers</li>
|
||||
<li>freedreno/a4xx: set PC_PRIM_VTX_CNTL.VAROUT properly</li>
|
||||
<li>freedreno: update generated headers</li>
|
||||
<li>freedreno/a4xx: aniso filtering</li>
|
||||
<li>freedreno/ir3: fix up cat6 instruction encodings</li>
|
||||
<li>freedreno/ir3: add support for memory (cat6) instructions</li>
|
||||
<li>freedreno/ir3: handle flat bypass for a4xx</li>
|
||||
<li>freedreno/ir3: fix failed assert in grouping</li>
|
||||
</ul>
|
||||
|
||||
<p>Stefan Dösinger (1):</p>
|
||||
<ul>
|
||||
<li>r300g: Fix the ATI1N swizzle (RGTC1 and LATC1)</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
129
docs/relnotes/10.5.2.html
Normal file
129
docs/relnotes/10.5.2.html
Normal file
@@ -0,0 +1,129 @@
|
||||
<!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.2 Release Notes / March 28, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.5.2 is a bug fix release which fixes bugs found since the 10.5.1 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.5.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>
|
||||
TBD
|
||||
</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=88534">Bug 88534</a> - include/c11/threads_posix.h PTHREAD_MUTEX_RECURSIVE_NP not defined</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89328">Bug 89328</a> - python required to build Mesa release tarballs</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89530">Bug 89530</a> - FTBFS in loader: missing fstat</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89590">Bug 89590</a> - Crash in glLinkProgram with shaders with multiple constant arrays</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89680">Bug 89680</a> - Hard link exist in Mesa 10.5.1 sources</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Anuj Phogat (1):</p>
|
||||
<ul>
|
||||
<li>glsl: Generate link error for non-matching gl_FragCoord redeclarations</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (7):</p>
|
||||
<ul>
|
||||
<li>docs: Add sha256 sums for the 10.5.1 release</li>
|
||||
<li>automake: add missing egl files to the tarball</li>
|
||||
<li>st/egl: don't ship the dri2.c link at the tarball</li>
|
||||
<li>loader: include <sys/stat.h> for non-sysfs builds</li>
|
||||
<li>auxiliary/os: fix the android build - s/drm_munmap/os_munmap/</li>
|
||||
<li>cherry-ignore: add commit non applicable for 10.5</li>
|
||||
<li>Update version to 10.5.2</li>
|
||||
</ul>
|
||||
|
||||
<p>Felix Janda (1):</p>
|
||||
<ul>
|
||||
<li>c11/threads: Use PTHREAD_MUTEX_RECURSIVE by default</li>
|
||||
</ul>
|
||||
|
||||
<p>Francisco Jerez (1):</p>
|
||||
<ul>
|
||||
<li>i965: Set nr_params to the number of uniform components in the VS/GS path.</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (2):</p>
|
||||
<ul>
|
||||
<li>freedreno/a3xx: use the same layer size for all slices</li>
|
||||
<li>freedreno: fix slice pitch calculations</li>
|
||||
</ul>
|
||||
|
||||
<p>Marek Olšák (1):</p>
|
||||
<ul>
|
||||
<li>radeonsi: increase coords array size for radeon_llvm_emit_prepare_cube_coords</li>
|
||||
</ul>
|
||||
|
||||
<p>Mario Kleiner (2):</p>
|
||||
<ul>
|
||||
<li>glx: Handle out-of-sequence swap completion events correctly. (v2)</li>
|
||||
<li>mapi: Make private copies of name strings provided by client.</li>
|
||||
</ul>
|
||||
|
||||
<p>Rob Clark (1):</p>
|
||||
<ul>
|
||||
<li>freedreno: update generated headers</li>
|
||||
</ul>
|
||||
|
||||
<p>Samuel Iglesias Gonsalvez (2):</p>
|
||||
<ul>
|
||||
<li>glsl: optimize (0 cmp x + y) into (-x cmp y).</li>
|
||||
<li>configure: Introduce new output variable to ax_check_python_mako_module.m4</li>
|
||||
</ul>
|
||||
|
||||
<p>Tapani Pälli (1):</p>
|
||||
<ul>
|
||||
<li>glsl: fix names in lower_constant_arrays_to_uniforms</li>
|
||||
</ul>
|
||||
|
||||
<p>Tom Stellard (1):</p>
|
||||
<ul>
|
||||
<li>clover: Return 0 as storage size for local kernel args that are not set v2</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@@ -177,13 +177,8 @@ mtx_init(mtx_t *mtx, int type)
|
||||
&& type != (mtx_try|mtx_recursive))
|
||||
return thrd_error;
|
||||
pthread_mutexattr_init(&attr);
|
||||
if ((type & mtx_recursive) != 0) {
|
||||
#if defined(__linux__) || defined(__linux)
|
||||
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
|
||||
#else
|
||||
if ((type & mtx_recursive) != 0)
|
||||
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
|
||||
#endif
|
||||
}
|
||||
pthread_mutex_init(mtx, &attr);
|
||||
pthread_mutexattr_destroy(&attr);
|
||||
return thrd_success;
|
||||
|
@@ -3,9 +3,9 @@
|
||||
|
||||
if BUILD_SHARED
|
||||
if HAVE_COMPAT_SYMLINKS
|
||||
all-local : .libs/install-mesa-links
|
||||
all-local : .install-mesa-links
|
||||
|
||||
.libs/install-mesa-links : $(lib_LTLIBRARIES)
|
||||
.install-mesa-links : $(lib_LTLIBRARIES)
|
||||
$(AM_V_GEN)$(MKDIR_P) $(top_builddir)/$(LIB_DIR); \
|
||||
for f in $(join $(addsuffix .libs/,$(dir $(lib_LTLIBRARIES))),$(notdir $(lib_LTLIBRARIES:%.la=%.$(LIB_EXT)*))); do \
|
||||
if test -h .libs/$$f; then \
|
||||
@@ -19,6 +19,7 @@ clean-local:
|
||||
for f in $(notdir $(lib_LTLIBRARIES:%.la=.libs/%.$(LIB_EXT)*)); do \
|
||||
$(RM) $(top_builddir)/$(LIB_DIR)/$$f; \
|
||||
done;
|
||||
$(RM) .install-mesa-links
|
||||
|
||||
endif
|
||||
endif
|
||||
|
@@ -54,8 +54,10 @@ else:
|
||||
" | $PYTHON2 -
|
||||
|
||||
if test $? -ne 0 ; then
|
||||
AC_MSG_ERROR(mako $1 or later is required.)
|
||||
AC_MSG_RESULT(no)
|
||||
AC_SUBST(acv_mako_found, 'no')
|
||||
else
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_SUBST(acv_mako_found, 'yes')
|
||||
fi
|
||||
])
|
||||
|
@@ -53,7 +53,10 @@ if HAVE_GALLIUM
|
||||
SUBDIRS += gallium
|
||||
endif
|
||||
|
||||
EXTRA_DIST = egl/docs getopt hgl SConscript
|
||||
EXTRA_DIST = \
|
||||
egl/drivers/haiku \
|
||||
egl/docs \
|
||||
getopt hgl SConscript
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/include/ \
|
||||
|
@@ -64,3 +64,5 @@ if HAVE_EGL_PLATFORM_DRM
|
||||
libegl_dri2_la_SOURCES += platform_drm.c
|
||||
AM_CFLAGS += -DHAVE_DRM_PLATFORM
|
||||
endif
|
||||
|
||||
EXTRA_DIST = SConscript
|
||||
|
@@ -534,7 +534,7 @@ dri2_setup_screen(_EGLDisplay *disp)
|
||||
disp->Extensions.KHR_gl_texture_2D_image = EGL_TRUE;
|
||||
disp->Extensions.KHR_gl_texture_cubemap_image = EGL_TRUE;
|
||||
}
|
||||
#ifdef HAVE_DRM_PLATFORM
|
||||
#ifdef HAVE_LIBDRM
|
||||
if (dri2_dpy->image->base.version >= 8 &&
|
||||
dri2_dpy->image->createImageFromDmaBufs) {
|
||||
disp->Extensions.EXT_image_dma_buf_import = EGL_TRUE;
|
||||
@@ -1335,7 +1335,7 @@ dri2_create_image_khr_renderbuffer(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
return dri2_create_image_from_dri(disp, dri_image);
|
||||
}
|
||||
|
||||
#ifdef HAVE_DRM_PLATFORM
|
||||
#ifdef HAVE_LIBDRM
|
||||
static _EGLImage *
|
||||
dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, _EGLContext *ctx,
|
||||
EGLClientBuffer buffer, const EGLint *attr_list)
|
||||
@@ -1571,7 +1571,7 @@ dri2_create_wayland_buffer_from_image(_EGLDriver *drv, _EGLDisplay *dpy,
|
||||
return dri2_dpy->vtbl->create_wayland_buffer_from_image(drv, dpy, img);
|
||||
}
|
||||
|
||||
#ifdef HAVE_DRM_PLATFORM
|
||||
#ifdef HAVE_LIBDRM
|
||||
static EGLBoolean
|
||||
dri2_check_dma_buf_attribs(const _EGLImageAttribs *attrs)
|
||||
{
|
||||
@@ -1821,7 +1821,7 @@ dri2_create_image_khr(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
return dri2_create_image_khr_texture(disp, ctx, target, buffer, attr_list);
|
||||
case EGL_GL_RENDERBUFFER_KHR:
|
||||
return dri2_create_image_khr_renderbuffer(disp, ctx, buffer, attr_list);
|
||||
#ifdef HAVE_DRM_PLATFORM
|
||||
#ifdef HAVE_LIBDRM
|
||||
case EGL_DRM_BUFFER_MESA:
|
||||
return dri2_create_image_mesa_drm_buffer(disp, ctx, buffer, attr_list);
|
||||
#endif
|
||||
@@ -1829,7 +1829,7 @@ dri2_create_image_khr(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
case EGL_WAYLAND_BUFFER_WL:
|
||||
return dri2_create_image_wayland_wl_buffer(disp, ctx, buffer, attr_list);
|
||||
#endif
|
||||
#ifdef HAVE_DRM_PLATFORM
|
||||
#ifdef HAVE_LIBDRM
|
||||
case EGL_LINUX_DMA_BUF_EXT:
|
||||
return dri2_create_image_dma_buf(disp, ctx, buffer, attr_list);
|
||||
#endif
|
||||
@@ -1853,7 +1853,7 @@ dri2_destroy_image_khr(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *image)
|
||||
return EGL_TRUE;
|
||||
}
|
||||
|
||||
#ifdef HAVE_DRM_PLATFORM
|
||||
#ifdef HAVE_LIBDRM
|
||||
static _EGLImage *
|
||||
dri2_create_drm_image_mesa(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
const EGLint *attr_list)
|
||||
@@ -2215,7 +2215,7 @@ _eglBuiltInDriverDRI2(const char *args)
|
||||
dri2_drv->base.API.CreateImageKHR = dri2_create_image;
|
||||
dri2_drv->base.API.DestroyImageKHR = dri2_destroy_image_khr;
|
||||
dri2_drv->base.API.CreateWaylandBufferFromImageWL = dri2_create_wayland_buffer_from_image;
|
||||
#ifdef HAVE_DRM_PLATFORM
|
||||
#ifdef HAVE_LIBDRM
|
||||
dri2_drv->base.API.CreateDRMImageMESA = dri2_create_drm_image_mesa;
|
||||
dri2_drv->base.API.ExportDRMImageMESA = dri2_export_drm_image_mesa;
|
||||
#endif
|
||||
|
@@ -668,15 +668,21 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
|
||||
for (i = 0; dri2_dpy->driver_configs[i]; i++) {
|
||||
EGLint format, attr_list[3];
|
||||
unsigned int mask;
|
||||
unsigned int red, alpha;
|
||||
|
||||
dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i],
|
||||
__DRI_ATTRIB_RED_MASK, &mask);
|
||||
if (mask == 0x3ff00000)
|
||||
__DRI_ATTRIB_RED_MASK, &red);
|
||||
dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i],
|
||||
__DRI_ATTRIB_ALPHA_MASK, &alpha);
|
||||
if (red == 0x3ff00000 && alpha == 0x00000000)
|
||||
format = GBM_FORMAT_XRGB2101010;
|
||||
else if (mask == 0x00ff0000)
|
||||
else if (red == 0x3ff00000 && alpha == 0xc0000000)
|
||||
format = GBM_FORMAT_ARGB2101010;
|
||||
else if (red == 0x00ff0000 && alpha == 0x00000000)
|
||||
format = GBM_FORMAT_XRGB8888;
|
||||
else if (mask == 0xf800)
|
||||
else if (red == 0x00ff0000 && alpha == 0xff000000)
|
||||
format = GBM_FORMAT_ARGB8888;
|
||||
else if (red == 0xf800)
|
||||
format = GBM_FORMAT_RGB565;
|
||||
else
|
||||
continue;
|
||||
|
@@ -292,6 +292,26 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
|
||||
struct dri2_egl_display *dri2_dpy =
|
||||
dri2_egl_display(dri2_surf->base.Resource.Display);
|
||||
int i;
|
||||
unsigned int dri_image_format;
|
||||
|
||||
/* currently supports three WL DRM formats,
|
||||
* WL_DRM_FORMAT_ARGB8888, WL_DRM_FORMAT_XRGB8888,
|
||||
* and WL_DRM_FORMAT_RGB565
|
||||
*/
|
||||
switch (dri2_surf->format) {
|
||||
case WL_DRM_FORMAT_ARGB8888:
|
||||
dri_image_format = __DRI_IMAGE_FORMAT_ARGB8888;
|
||||
break;
|
||||
case WL_DRM_FORMAT_XRGB8888:
|
||||
dri_image_format = __DRI_IMAGE_FORMAT_XRGB8888;
|
||||
break;
|
||||
case WL_DRM_FORMAT_RGB565:
|
||||
dri_image_format = __DRI_IMAGE_FORMAT_RGB565;
|
||||
break;
|
||||
default:
|
||||
/* format is not supported */
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* We always want to throttle to some event (either a frame callback or
|
||||
* a sync request) after the commit so that we can be sure the
|
||||
@@ -322,7 +342,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
|
||||
dri2_dpy->image->createImage(dri2_dpy->dri_screen,
|
||||
dri2_surf->base.Width,
|
||||
dri2_surf->base.Height,
|
||||
__DRI_IMAGE_FORMAT_ARGB8888,
|
||||
dri_image_format,
|
||||
__DRI_IMAGE_USE_SHARE,
|
||||
NULL);
|
||||
dri2_surf->back->age = 0;
|
||||
@@ -462,11 +482,26 @@ dri2_wl_get_buffers(__DRIdrawable * driDrawable,
|
||||
unsigned int *attachments, int count,
|
||||
int *out_count, void *loaderPrivate)
|
||||
{
|
||||
struct dri2_egl_surface *dri2_surf = loaderPrivate;
|
||||
unsigned int *attachments_with_format;
|
||||
__DRIbuffer *buffer;
|
||||
const unsigned int format = 32;
|
||||
unsigned int bpp;
|
||||
|
||||
int i;
|
||||
|
||||
switch (dri2_surf->format) {
|
||||
case WL_DRM_FORMAT_ARGB8888:
|
||||
case WL_DRM_FORMAT_XRGB8888:
|
||||
bpp = 32;
|
||||
break;
|
||||
case WL_DRM_FORMAT_RGB565:
|
||||
bpp = 16;
|
||||
break;
|
||||
default:
|
||||
/* format is not supported */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
attachments_with_format = calloc(count, 2 * sizeof(unsigned int));
|
||||
if (!attachments_with_format) {
|
||||
*out_count = 0;
|
||||
@@ -475,7 +510,7 @@ dri2_wl_get_buffers(__DRIdrawable * driDrawable,
|
||||
|
||||
for (i = 0; i < count; ++i) {
|
||||
attachments_with_format[2*i] = attachments[i];
|
||||
attachments_with_format[2*i + 1] = format;
|
||||
attachments_with_format[2*i + 1] = bpp;
|
||||
}
|
||||
|
||||
buffer =
|
||||
|
@@ -49,7 +49,7 @@ extern _EGLArray *
|
||||
_eglCreateArray(const char *name, EGLint init_size);
|
||||
|
||||
|
||||
PUBLIC void
|
||||
extern void
|
||||
_eglDestroyArray(_EGLArray *array, void (*free_cb)(void *));
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ void *
|
||||
_eglFindArray(_EGLArray *array, void *elem);
|
||||
|
||||
|
||||
PUBLIC EGLint
|
||||
extern EGLint
|
||||
_eglFilterArray(_EGLArray *array, void **data, EGLint size,
|
||||
_EGLArrayForEach filter, void *filter_data);
|
||||
|
||||
|
@@ -75,7 +75,7 @@ _eglInitConfig(_EGLConfig *conf, _EGLDisplay *dpy, EGLint id)
|
||||
*
|
||||
* Note that we just save the ptr to the config (we don't copy the config).
|
||||
*/
|
||||
PUBLIC EGLConfig
|
||||
EGLConfig
|
||||
_eglLinkConfig(_EGLConfig *conf)
|
||||
{
|
||||
_EGLDisplay *dpy = conf->Display;
|
||||
|
@@ -162,11 +162,11 @@ _eglGetConfigKey(const _EGLConfig *conf, EGLint key)
|
||||
}
|
||||
|
||||
|
||||
PUBLIC void
|
||||
extern void
|
||||
_eglInitConfig(_EGLConfig *config, _EGLDisplay *dpy, EGLint id);
|
||||
|
||||
|
||||
PUBLIC EGLConfig
|
||||
extern EGLConfig
|
||||
_eglLinkConfig(_EGLConfig *conf);
|
||||
|
||||
|
||||
@@ -184,25 +184,25 @@ _eglGetConfigHandle(_EGLConfig *conf)
|
||||
}
|
||||
|
||||
|
||||
PUBLIC EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglValidateConfig(const _EGLConfig *conf, EGLBoolean for_matching);
|
||||
|
||||
|
||||
PUBLIC EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglMatchConfig(const _EGLConfig *conf, const _EGLConfig *criteria);
|
||||
|
||||
|
||||
PUBLIC EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglParseConfigAttribList(_EGLConfig *conf, _EGLDisplay *dpy,
|
||||
const EGLint *attrib_list);
|
||||
|
||||
|
||||
PUBLIC EGLint
|
||||
extern EGLint
|
||||
_eglCompareConfigs(const _EGLConfig *conf1, const _EGLConfig *conf2,
|
||||
const _EGLConfig *criteria, EGLBoolean compare_id);
|
||||
|
||||
|
||||
PUBLIC EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglFilterConfigArray(_EGLArray *array, EGLConfig *configs,
|
||||
EGLint config_size, EGLint *num_configs,
|
||||
EGLBoolean (*match)(const _EGLConfig *, void *),
|
||||
|
@@ -63,7 +63,7 @@ struct _egl_context
|
||||
};
|
||||
|
||||
|
||||
PUBLIC EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglInitContext(_EGLContext *ctx, _EGLDisplay *dpy,
|
||||
_EGLConfig *config, const EGLint *attrib_list);
|
||||
|
||||
@@ -72,7 +72,7 @@ extern EGLBoolean
|
||||
_eglQueryContext(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx, EGLint attribute, EGLint *value);
|
||||
|
||||
|
||||
PUBLIC EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglBindContext(_EGLContext *ctx, _EGLSurface *draw, _EGLSurface *read,
|
||||
_EGLContext **old_ctx,
|
||||
_EGLSurface **old_draw, _EGLSurface **old_read);
|
||||
|
@@ -242,7 +242,7 @@ _eglIsCurrentThreadDummy(void)
|
||||
/**
|
||||
* Return the currently bound context of the given API, or NULL.
|
||||
*/
|
||||
PUBLIC _EGLContext *
|
||||
_EGLContext *
|
||||
_eglGetAPIContext(EGLenum api)
|
||||
{
|
||||
_EGLThreadInfo *t = _eglGetCurrentThread();
|
||||
|
@@ -90,7 +90,7 @@ _eglConvertApiFromIndex(EGLint idx)
|
||||
}
|
||||
|
||||
|
||||
PUBLIC _EGLThreadInfo *
|
||||
extern _EGLThreadInfo *
|
||||
_eglGetCurrentThread(void);
|
||||
|
||||
|
||||
@@ -102,15 +102,15 @@ extern EGLBoolean
|
||||
_eglIsCurrentThreadDummy(void);
|
||||
|
||||
|
||||
PUBLIC _EGLContext *
|
||||
extern _EGLContext *
|
||||
_eglGetAPIContext(EGLenum api);
|
||||
|
||||
|
||||
PUBLIC _EGLContext *
|
||||
extern _EGLContext *
|
||||
_eglGetCurrentContext(void);
|
||||
|
||||
|
||||
PUBLIC EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglError(EGLint errCode, const char *msg);
|
||||
|
||||
|
||||
|
@@ -177,11 +177,11 @@ extern _EGLDisplay *
|
||||
_eglFindDisplay(_EGLPlatformType plat, void *plat_dpy);
|
||||
|
||||
|
||||
PUBLIC void
|
||||
extern void
|
||||
_eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *dpy);
|
||||
|
||||
|
||||
PUBLIC void
|
||||
extern void
|
||||
_eglCleanupDisplay(_EGLDisplay *disp);
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@ extern EGLBoolean
|
||||
_eglCheckDisplayHandle(EGLDisplay dpy);
|
||||
|
||||
|
||||
PUBLIC EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglCheckResource(void *res, _EGLResourceType type, _EGLDisplay *dpy);
|
||||
|
||||
|
||||
@@ -221,11 +221,11 @@ extern void
|
||||
_eglInitResource(_EGLResource *res, EGLint size, _EGLDisplay *dpy);
|
||||
|
||||
|
||||
PUBLIC void
|
||||
extern void
|
||||
_eglGetResource(_EGLResource *res);
|
||||
|
||||
|
||||
PUBLIC EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglPutResource(_EGLResource *res);
|
||||
|
||||
|
||||
|
@@ -96,7 +96,7 @@ extern _EGLDriver *
|
||||
_eglBuiltInDriverGLX(const char *args);
|
||||
|
||||
|
||||
PUBLIC _EGLDriver *
|
||||
extern _EGLDriver *
|
||||
_eglMain(const char *args);
|
||||
|
||||
|
||||
@@ -113,11 +113,11 @@ _eglUnloadDrivers(void);
|
||||
|
||||
|
||||
/* defined in eglfallbacks.c */
|
||||
PUBLIC void
|
||||
extern void
|
||||
_eglInitDriverFallbacks(_EGLDriver *drv);
|
||||
|
||||
|
||||
PUBLIC void
|
||||
extern void
|
||||
_eglSearchPathForEach(EGLBoolean (*callback)(const char *, size_t, void *),
|
||||
void *callback_data);
|
||||
|
||||
|
@@ -80,12 +80,12 @@ struct _egl_image
|
||||
};
|
||||
|
||||
|
||||
PUBLIC EGLint
|
||||
extern EGLint
|
||||
_eglParseImageAttribList(_EGLImageAttribs *attrs, _EGLDisplay *dpy,
|
||||
const EGLint *attrib_list);
|
||||
|
||||
|
||||
PUBLIC EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglInitImage(_EGLImage *img, _EGLDisplay *dpy);
|
||||
|
||||
|
||||
|
@@ -43,15 +43,15 @@
|
||||
typedef void (*_EGLLogProc)(EGLint level, const char *msg);
|
||||
|
||||
|
||||
PUBLIC void
|
||||
extern void
|
||||
_eglSetLogProc(_EGLLogProc logger);
|
||||
|
||||
|
||||
PUBLIC void
|
||||
extern void
|
||||
_eglSetLogLevel(EGLint level);
|
||||
|
||||
|
||||
PUBLIC void
|
||||
extern void
|
||||
_eglLog(EGLint level, const char *fmtStr, ...);
|
||||
|
||||
|
||||
|
@@ -67,11 +67,11 @@ struct _egl_screen
|
||||
};
|
||||
|
||||
|
||||
PUBLIC void
|
||||
extern void
|
||||
_eglInitScreen(_EGLScreen *screen, _EGLDisplay *dpy, EGLint num_modes);
|
||||
|
||||
|
||||
PUBLIC EGLScreenMESA
|
||||
extern EGLScreenMESA
|
||||
_eglLinkScreen(_EGLScreen *screen);
|
||||
|
||||
|
||||
|
@@ -78,7 +78,7 @@ struct _egl_surface
|
||||
};
|
||||
|
||||
|
||||
PUBLIC EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglInitSurface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type,
|
||||
_EGLConfig *config, const EGLint *attrib_list);
|
||||
|
||||
@@ -91,10 +91,10 @@ extern EGLBoolean
|
||||
_eglSurfaceAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint attribute, EGLint value);
|
||||
|
||||
|
||||
PUBLIC extern EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglBindTexImage(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint buffer);
|
||||
|
||||
PUBLIC extern EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglReleaseTexImage(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, EGLint buffer);
|
||||
|
||||
|
||||
|
@@ -48,7 +48,7 @@ struct _egl_sync
|
||||
};
|
||||
|
||||
|
||||
PUBLIC EGLBoolean
|
||||
extern EGLBoolean
|
||||
_eglInitSync(_EGLSync *sync, _EGLDisplay *dpy, EGLenum type,
|
||||
const EGLint *attrib_list);
|
||||
|
||||
|
@@ -53,24 +53,40 @@ libgalliumvl_stub_la_SOURCES = \
|
||||
|
||||
if NEED_GALLIUM_VL
|
||||
|
||||
noinst_LTLIBRARIES += libgalliumvl.la
|
||||
|
||||
libgalliumvl_la_CFLAGS = \
|
||||
COMMON_VL_CFLAGS = \
|
||||
$(AM_CFLAGS) \
|
||||
$(VL_CFLAGS) \
|
||||
$(DRI2PROTO_CFLAGS) \
|
||||
$(LIBDRM_CFLAGS) \
|
||||
$(GALLIUM_PIPE_LOADER_DEFINES) \
|
||||
-DPIPE_SEARCH_DIR=\"$(libdir)/gallium-pipe\"
|
||||
|
||||
if HAVE_GALLIUM_STATIC_TARGETS
|
||||
libgalliumvl_la_CFLAGS += \
|
||||
COMMON_VL_CFLAGS += \
|
||||
-DGALLIUM_STATIC_TARGETS=1
|
||||
|
||||
endif # HAVE_GALLIUM_STATIC_TARGETS
|
||||
|
||||
noinst_LTLIBRARIES += libgalliumvl.la
|
||||
|
||||
libgalliumvl_la_CFLAGS = \
|
||||
$(COMMON_VL_CFLAGS)
|
||||
|
||||
libgalliumvl_la_SOURCES = \
|
||||
$(VL_SOURCES)
|
||||
|
||||
if NEED_GALLIUM_VL_WINSYS
|
||||
|
||||
noinst_LTLIBRARIES += libgalliumvlwinsys.la
|
||||
|
||||
libgalliumvlwinsys_la_CFLAGS = \
|
||||
$(COMMON_VL_CFLAGS)
|
||||
|
||||
libgalliumvlwinsys_la_SOURCES = \
|
||||
$(VL_WINSYS_SOURCES)
|
||||
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
EXTRA_DIST = \
|
||||
|
@@ -334,10 +334,13 @@ VL_SOURCES := \
|
||||
vl/vl_video_buffer.h \
|
||||
vl/vl_vlc.h \
|
||||
vl/vl_winsys.h \
|
||||
vl/vl_winsys_dri.c \
|
||||
vl/vl_zscan.c \
|
||||
vl/vl_zscan.h
|
||||
|
||||
# XXX: Nuke this as our dri targets no longer depend on VL.
|
||||
VL_WINSYS_SOURCES := \
|
||||
vl/vl_winsys_dri.c
|
||||
|
||||
VL_STUB_SOURCES := \
|
||||
vl/vl_stubs.c
|
||||
|
||||
|
@@ -193,7 +193,7 @@ def lineloop(intype, outtype, inpv, outpv):
|
||||
print ' for (i = start, j = 0; j < nr - 2; j+=2, i++) { '
|
||||
do_line( intype, outtype, 'out+j', 'i', 'i+1', inpv, outpv );
|
||||
print ' }'
|
||||
do_line( intype, outtype, 'out+j', 'i', '0', inpv, outpv );
|
||||
do_line( intype, outtype, 'out+j', 'i', 'start', inpv, outpv );
|
||||
postamble()
|
||||
|
||||
def tris(intype, outtype, inpv, outpv):
|
||||
@@ -218,7 +218,7 @@ def tristrip(intype, outtype, inpv, outpv):
|
||||
def trifan(intype, outtype, inpv, outpv):
|
||||
preamble(intype, outtype, inpv, outpv, prim='trifan')
|
||||
print ' for (i = start, j = 0; j < nr; j+=3, i++) { '
|
||||
do_tri( intype, outtype, 'out+j', '0', 'i+1', 'i+2', inpv, outpv );
|
||||
do_tri( intype, outtype, 'out+j', 'start', 'i+1', 'i+2', inpv, outpv );
|
||||
print ' }'
|
||||
postamble()
|
||||
|
||||
@@ -228,9 +228,9 @@ def polygon(intype, outtype, inpv, outpv):
|
||||
preamble(intype, outtype, inpv, outpv, prim='polygon')
|
||||
print ' for (i = start, j = 0; j < nr; j+=3, i++) { '
|
||||
if inpv == FIRST:
|
||||
do_tri( intype, outtype, 'out+j', '0', 'i+1', 'i+2', inpv, outpv );
|
||||
do_tri( intype, outtype, 'out+j', 'start', 'i+1', 'i+2', inpv, outpv );
|
||||
else:
|
||||
do_tri( intype, outtype, 'out+j', 'i+1', 'i+2', '0', inpv, outpv );
|
||||
do_tri( intype, outtype, 'out+j', 'i+1', 'i+2', 'start', inpv, outpv );
|
||||
print ' }'
|
||||
postamble()
|
||||
|
||||
|
@@ -118,7 +118,7 @@ os_get_total_physical_memory(uint64_t *size)
|
||||
*size = phys_pages * page_size;
|
||||
return (phys_pages > 0 && page_size > 0);
|
||||
#elif defined(PIPE_OS_APPLE) || defined(PIPE_OS_BSD)
|
||||
size_t len = sizeof(size);
|
||||
size_t len = sizeof(*size);
|
||||
int mib[2];
|
||||
|
||||
mib[0] = CTL_HW;
|
||||
@@ -134,7 +134,7 @@ os_get_total_physical_memory(uint64_t *size)
|
||||
#error Unsupported *BSD
|
||||
#endif
|
||||
|
||||
return (sysctl(mib, 2, &size, &len, NULL, 0) == 0);
|
||||
return (sysctl(mib, 2, size, &len, NULL, 0) == 0);
|
||||
#elif defined(PIPE_OS_HAIKU)
|
||||
system_info info;
|
||||
status_t ret;
|
||||
|
@@ -70,8 +70,8 @@ static INLINE void *os_mmap(void *addr, size_t length, int prot, int flags,
|
||||
return __mmap2(addr, length, prot, flags, fd, (size_t) (offset >> 12));
|
||||
}
|
||||
|
||||
# define drm_munmap(addr, length) \
|
||||
munmap(addr, length)
|
||||
# define os_munmap(addr, length) \
|
||||
munmap(addr, length)
|
||||
|
||||
#else
|
||||
/* assume large file support exists */
|
||||
|
@@ -13,8 +13,8 @@ The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10551 bytes, from 2014-11-13 22:44:30)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 15085 bytes, from 2014-12-20 21:49:41)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64344 bytes, from 2014-12-12 20:22:26)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 51270 bytes, from 2015-01-18 23:05:48)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64771 bytes, from 2015-03-15 21:55:57)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 51942 bytes, from 2015-02-24 17:14:02)
|
||||
|
||||
Copyright (C) 2013-2014 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
|
@@ -439,7 +439,8 @@ static int instr_emit_alu(struct ir2_instruction *instr, uint32_t *dwords,
|
||||
assert(sdst_reg->flags == dst_reg->flags);
|
||||
|
||||
if (src3_reg) {
|
||||
assert(src3_reg == instr->regs[reg++]);
|
||||
assert(src3_reg == instr->regs[reg]);
|
||||
reg++;
|
||||
} else {
|
||||
src3_reg = instr->regs[reg++];
|
||||
}
|
||||
|
@@ -13,10 +13,10 @@ The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10551 bytes, from 2014-11-13 22:44:30)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 15085 bytes, from 2014-12-20 21:49:41)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64344 bytes, from 2014-12-12 20:22:26)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 51270 bytes, from 2015-01-18 23:05:48)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64771 bytes, from 2015-03-15 21:55:57)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 51942 bytes, from 2015-02-24 17:14:02)
|
||||
|
||||
Copyright (C) 2013-2014 by the following authors:
|
||||
Copyright (C) 2013-2015 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -130,6 +130,10 @@ enum a3xx_tex_fmt {
|
||||
TFMT_I420_Y = 24,
|
||||
TFMT_I420_U = 26,
|
||||
TFMT_I420_V = 27,
|
||||
TFMT_ATC_RGB = 32,
|
||||
TFMT_ATC_RGBA_EXPLICIT = 33,
|
||||
TFMT_ETC1 = 34,
|
||||
TFMT_ATC_RGBA_INTERPOLATED = 35,
|
||||
TFMT_DXT1 = 36,
|
||||
TFMT_DXT3 = 37,
|
||||
TFMT_DXT5 = 38,
|
||||
@@ -854,6 +858,12 @@ static inline uint32_t A3XX_RB_MODE_CONTROL_RENDER_MODE(enum a3xx_render_mode va
|
||||
{
|
||||
return ((val) << A3XX_RB_MODE_CONTROL_RENDER_MODE__SHIFT) & A3XX_RB_MODE_CONTROL_RENDER_MODE__MASK;
|
||||
}
|
||||
#define A3XX_RB_MODE_CONTROL_MRT__MASK 0x00003000
|
||||
#define A3XX_RB_MODE_CONTROL_MRT__SHIFT 12
|
||||
static inline uint32_t A3XX_RB_MODE_CONTROL_MRT(uint32_t val)
|
||||
{
|
||||
return ((val) << A3XX_RB_MODE_CONTROL_MRT__SHIFT) & A3XX_RB_MODE_CONTROL_MRT__MASK;
|
||||
}
|
||||
#define A3XX_RB_MODE_CONTROL_MARB_CACHE_SPLIT_MODE 0x00008000
|
||||
#define A3XX_RB_MODE_CONTROL_PACKER_TIMER_ENABLE 0x00010000
|
||||
|
||||
@@ -2107,6 +2117,12 @@ static inline uint32_t A3XX_SP_FS_OBJ_OFFSET_REG_SHADEROBJOFFSET(uint32_t val)
|
||||
#define REG_A3XX_SP_FS_FLAT_SHAD_MODE_REG_1 0x000022e9
|
||||
|
||||
#define REG_A3XX_SP_FS_OUTPUT_REG 0x000022ec
|
||||
#define A3XX_SP_FS_OUTPUT_REG_MRT__MASK 0x00000003
|
||||
#define A3XX_SP_FS_OUTPUT_REG_MRT__SHIFT 0
|
||||
static inline uint32_t A3XX_SP_FS_OUTPUT_REG_MRT(uint32_t val)
|
||||
{
|
||||
return ((val) << A3XX_SP_FS_OUTPUT_REG_MRT__SHIFT) & A3XX_SP_FS_OUTPUT_REG_MRT__MASK;
|
||||
}
|
||||
#define A3XX_SP_FS_OUTPUT_REG_DEPTH_ENABLE 0x00000080
|
||||
#define A3XX_SP_FS_OUTPUT_REG_DEPTH_REGID__MASK 0x0000ff00
|
||||
#define A3XX_SP_FS_OUTPUT_REG_DEPTH_REGID__SHIFT 8
|
||||
@@ -2661,7 +2677,7 @@ static inline uint32_t A3XX_TEX_CONST_2_SWAP(enum a3xx_color_swap val)
|
||||
}
|
||||
|
||||
#define REG_A3XX_TEX_CONST_3 0x00000003
|
||||
#define A3XX_TEX_CONST_3_LAYERSZ1__MASK 0x0000000f
|
||||
#define A3XX_TEX_CONST_3_LAYERSZ1__MASK 0x00001fff
|
||||
#define A3XX_TEX_CONST_3_LAYERSZ1__SHIFT 0
|
||||
static inline uint32_t A3XX_TEX_CONST_3_LAYERSZ1(uint32_t val)
|
||||
{
|
||||
|
@@ -365,7 +365,10 @@ fd3_program_emit(struct fd_ringbuffer *ring, struct fd3_emit *emit)
|
||||
COND(vp->writes_psize, A3XX_VPC_ATTR_PSIZE));
|
||||
OUT_RING(ring, 0x00000000);
|
||||
} else {
|
||||
uint32_t vinterp[4] = {0}, flatshade[2] = {0};
|
||||
uint32_t vinterp[4], flatshade[2];
|
||||
|
||||
memset(vinterp, 0, sizeof(vinterp));
|
||||
memset(flatshade, 0, sizeof(flatshade));
|
||||
|
||||
/* figure out VARYING_INTERP / FLAT_SHAD register values: */
|
||||
for (j = -1; (j = ir3_next_varying(fp, j)) < (int)fp->inputs_count; ) {
|
||||
|
@@ -13,8 +13,8 @@ The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10551 bytes, from 2014-11-13 22:44:30)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 15085 bytes, from 2014-12-20 21:49:41)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64344 bytes, from 2014-12-12 20:22:26)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 51270 bytes, from 2015-01-18 23:05:48)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64771 bytes, from 2015-03-15 21:55:57)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 51942 bytes, from 2015-02-24 17:14:02)
|
||||
|
||||
Copyright (C) 2013-2015 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
@@ -150,6 +150,7 @@ enum a4xx_depth_format {
|
||||
enum a4xx_tex_filter {
|
||||
A4XX_TEX_NEAREST = 0,
|
||||
A4XX_TEX_LINEAR = 1,
|
||||
A4XX_TEX_ANISO = 2,
|
||||
};
|
||||
|
||||
enum a4xx_tex_clamp {
|
||||
@@ -159,6 +160,14 @@ enum a4xx_tex_clamp {
|
||||
A4XX_TEX_CLAMP_NONE = 3,
|
||||
};
|
||||
|
||||
enum a4xx_tex_aniso {
|
||||
A4XX_TEX_ANISO_1 = 0,
|
||||
A4XX_TEX_ANISO_2 = 1,
|
||||
A4XX_TEX_ANISO_4 = 2,
|
||||
A4XX_TEX_ANISO_8 = 3,
|
||||
A4XX_TEX_ANISO_16 = 4,
|
||||
};
|
||||
|
||||
enum a4xx_tex_swiz {
|
||||
A4XX_TEX_X = 0,
|
||||
A4XX_TEX_Y = 1,
|
||||
@@ -936,6 +945,10 @@ static inline uint32_t REG_A4XX_RBBM_CLOCK_DELAY_RB_MARB_CCU_L1_REG(uint32_t i0)
|
||||
|
||||
#define REG_A4XX_CP_IB2_BUFSZ 0x00000209
|
||||
|
||||
#define REG_A4XX_CP_ME_NRT_ADDR 0x0000020c
|
||||
|
||||
#define REG_A4XX_CP_ME_NRT_DATA 0x0000020d
|
||||
|
||||
#define REG_A4XX_CP_ME_RB_DONE_DATA 0x00000217
|
||||
|
||||
#define REG_A4XX_CP_QUEUE_THRESH2 0x00000219
|
||||
@@ -946,9 +959,9 @@ static inline uint32_t REG_A4XX_RBBM_CLOCK_DELAY_RB_MARB_CCU_L1_REG(uint32_t i0)
|
||||
|
||||
#define REG_A4XX_CP_ROQ_DATA 0x0000021d
|
||||
|
||||
#define REG_A4XX_CP_MEQ_ADDR 0x0000021e
|
||||
#define REG_A4XX_CP_MEQ_ADDR 0x0000021e
|
||||
|
||||
#define REG_A4XX_CP_MEQ_DATA 0x0000021f
|
||||
#define REG_A4XX_CP_MEQ_DATA 0x0000021f
|
||||
|
||||
#define REG_A4XX_CP_MERCIU_ADDR 0x00000220
|
||||
|
||||
@@ -1424,6 +1437,10 @@ static inline uint32_t REG_A4XX_VSC_PIPE_DATA_LENGTH_REG(uint32_t i0) { return 0
|
||||
|
||||
#define REG_A4XX_VFD_PERFCTR_VFD_SEL_7 0x00000e4a
|
||||
|
||||
#define REG_A4XX_VGT_CL_INITIATOR 0x000021d0
|
||||
|
||||
#define REG_A4XX_VGT_EVENT_INITIATOR 0x000021d9
|
||||
|
||||
#define REG_A4XX_VFD_CONTROL_0 0x00002200
|
||||
#define A4XX_VFD_CONTROL_0_TOTALATTRTOVS__MASK 0x000000ff
|
||||
#define A4XX_VFD_CONTROL_0_TOTALATTRTOVS__SHIFT 0
|
||||
@@ -2041,7 +2058,12 @@ static inline uint32_t A4XX_HLSQ_GS_CONTROL_REG_INSTRLENGTH(uint32_t val)
|
||||
#define REG_A4XX_PC_BIN_BASE 0x000021c0
|
||||
|
||||
#define REG_A4XX_PC_PRIM_VTX_CNTL 0x000021c4
|
||||
#define A4XX_PC_PRIM_VTX_CNTL_VAROUT 0x00000001
|
||||
#define A4XX_PC_PRIM_VTX_CNTL_VAROUT__MASK 0x0000000f
|
||||
#define A4XX_PC_PRIM_VTX_CNTL_VAROUT__SHIFT 0
|
||||
static inline uint32_t A4XX_PC_PRIM_VTX_CNTL_VAROUT(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_PC_PRIM_VTX_CNTL_VAROUT__SHIFT) & A4XX_PC_PRIM_VTX_CNTL_VAROUT__MASK;
|
||||
}
|
||||
#define A4XX_PC_PRIM_VTX_CNTL_PROVOKING_VTX_LAST 0x02000000
|
||||
#define A4XX_PC_PRIM_VTX_CNTL_PSIZE 0x04000000
|
||||
|
||||
@@ -2166,6 +2188,12 @@ static inline uint32_t A4XX_TEX_SAMP_0_WRAP_R(enum a4xx_tex_clamp val)
|
||||
{
|
||||
return ((val) << A4XX_TEX_SAMP_0_WRAP_R__SHIFT) & A4XX_TEX_SAMP_0_WRAP_R__MASK;
|
||||
}
|
||||
#define A4XX_TEX_SAMP_0_ANISO__MASK 0x0001c000
|
||||
#define A4XX_TEX_SAMP_0_ANISO__SHIFT 14
|
||||
static inline uint32_t A4XX_TEX_SAMP_0_ANISO(enum a4xx_tex_aniso val)
|
||||
{
|
||||
return ((val) << A4XX_TEX_SAMP_0_ANISO__SHIFT) & A4XX_TEX_SAMP_0_ANISO__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_TEX_SAMP_1 0x00000001
|
||||
#define A4XX_TEX_SAMP_1_COMPARE_FUNC__MASK 0x0000000e
|
||||
|
@@ -100,6 +100,9 @@ fixup_shader_state(struct fd_context *ctx, struct ir3_shader_key *key)
|
||||
if (last_key->alpha != key->alpha)
|
||||
ctx->prog.dirty |= FD_SHADER_DIRTY_FP;
|
||||
|
||||
if (last_key->rasterflat != key->rasterflat)
|
||||
ctx->prog.dirty |= FD_SHADER_DIRTY_FP;
|
||||
|
||||
fd4_ctx->last_key = *key;
|
||||
}
|
||||
}
|
||||
@@ -118,6 +121,7 @@ fd4_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info)
|
||||
.binning_pass = true,
|
||||
.color_two_side = ctx->rasterizer ? ctx->rasterizer->light_twoside : false,
|
||||
.alpha = util_format_is_alpha(pipe_surface_format(pfb->cbufs[0])),
|
||||
.rasterflat = ctx->rasterizer && ctx->rasterizer->flatshade,
|
||||
// TODO set .half_precision based on render target format,
|
||||
// ie. float16 and smaller use half, float32 use full..
|
||||
.half_precision = !!(fd_mesa_debug & FD_DBG_FRAGHALF),
|
||||
@@ -130,7 +134,6 @@ fd4_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info)
|
||||
.fsaturate_r = fd4_ctx->fsaturate_r,
|
||||
},
|
||||
.format = fd4_emit_format(pfb->cbufs[0]),
|
||||
.rasterflat = ctx->rasterizer && ctx->rasterizer->flatshade,
|
||||
};
|
||||
unsigned dirty;
|
||||
|
||||
|
@@ -425,13 +425,9 @@ fd4_emit_state(struct fd_context *ctx, struct fd_ringbuffer *ring,
|
||||
OUT_PKT0(ring, REG_A4XX_GRAS_SU_POLY_OFFSET_SCALE, 2);
|
||||
OUT_RING(ring, rasterizer->gras_su_poly_offset_scale);
|
||||
OUT_RING(ring, rasterizer->gras_su_poly_offset_offset);
|
||||
}
|
||||
|
||||
if (dirty & (FD_DIRTY_RASTERIZER | FD_DIRTY_PROG)) {
|
||||
uint32_t val = fd4_rasterizer_stateobj(ctx->rasterizer)
|
||||
->gras_cl_clip_cntl;
|
||||
OUT_PKT0(ring, REG_A4XX_GRAS_CL_CLIP_CNTL, 1);
|
||||
OUT_RING(ring, val);
|
||||
OUT_RING(ring, rasterizer->gras_cl_clip_cntl);
|
||||
}
|
||||
|
||||
/* NOTE: since primitive_restart is not actually part of any
|
||||
@@ -444,7 +440,12 @@ fd4_emit_state(struct fd_context *ctx, struct fd_ringbuffer *ring,
|
||||
->pc_prim_vtx_cntl;
|
||||
|
||||
val |= COND(vp->writes_psize, A4XX_PC_PRIM_VTX_CNTL_PSIZE);
|
||||
val |= COND(fp->total_in > 0, A4XX_PC_PRIM_VTX_CNTL_VAROUT);
|
||||
if (fp->total_in > 0) {
|
||||
uint32_t varout = align(fp->total_in, 16) / 16;
|
||||
if (varout > 1)
|
||||
varout = align(varout, 2);
|
||||
val |= A4XX_PC_PRIM_VTX_CNTL_VAROUT(varout);
|
||||
}
|
||||
|
||||
OUT_PKT0(ring, REG_A4XX_PC_PRIM_VTX_CNTL, 2);
|
||||
OUT_RING(ring, val);
|
||||
|
@@ -55,7 +55,6 @@ struct fd4_emit {
|
||||
struct ir3_shader_key key;
|
||||
enum a4xx_color_fmt format;
|
||||
uint32_t dirty;
|
||||
bool rasterflat;
|
||||
|
||||
/* cached to avoid repeated lookups of same variants: */
|
||||
struct ir3_shader_variant *vp, *fp;
|
||||
|
@@ -375,7 +375,7 @@ fd4_emit_tile_mem2gmem(struct fd_context *ctx, struct fd_tile *tile)
|
||||
|
||||
OUT_PKT0(ring, REG_A4XX_PC_PRIM_VTX_CNTL, 1);
|
||||
OUT_RING(ring, A4XX_PC_PRIM_VTX_CNTL_PROVOKING_VTX_LAST |
|
||||
A4XX_PC_PRIM_VTX_CNTL_VAROUT);
|
||||
A4XX_PC_PRIM_VTX_CNTL_VAROUT(1));
|
||||
|
||||
OUT_PKT0(ring, REG_A4XX_VFD_INDEX_OFFSET, 2);
|
||||
OUT_RING(ring, 0); /* VFD_INDEX_OFFSET */
|
||||
@@ -436,13 +436,6 @@ fd4_emit_sysmem_prep(struct fd_context *ctx)
|
||||
{
|
||||
struct pipe_framebuffer_state *pfb = &ctx->framebuffer;
|
||||
struct fd_ringbuffer *ring = ctx->ring;
|
||||
uint32_t pitch = 0;
|
||||
|
||||
if (pfb->cbufs[0]) {
|
||||
struct pipe_surface *psurf = pfb->cbufs[0];
|
||||
unsigned lvl = psurf->u.tex.level;
|
||||
pitch = fd_resource(psurf->texture)->slices[lvl].pitch;
|
||||
}
|
||||
|
||||
fd4_emit_restore(ctx);
|
||||
|
||||
|
@@ -420,8 +420,28 @@ fd4_program_emit(struct fd_ringbuffer *ring, struct fd4_emit *emit)
|
||||
COND(s[VS].v->writes_psize, A4XX_VPC_ATTR_PSIZE));
|
||||
OUT_RING(ring, 0x00000000);
|
||||
} else {
|
||||
uint32_t vinterp[8] = {0}, flatshade[2] = {0};
|
||||
uint32_t vinterp[8], flatshade[2];
|
||||
|
||||
memset(vinterp, 0, sizeof(vinterp));
|
||||
memset(flatshade, 0, sizeof(flatshade));
|
||||
|
||||
/* TODO: looks like we need to do int varyings in the frag
|
||||
* shader on a4xx (no flatshad reg?):
|
||||
*
|
||||
* (sy)(ss)nop
|
||||
* (sy)ldlv.u32 r0.x,l[r0.x], 1
|
||||
* ldlv.u32 r0.y,l[r0.x+1], 1
|
||||
* (ss)bary.f (ei)r63.x, 0, r0.x
|
||||
* (ss)(rpt1)cov.s32f16 hr0.x, (r)r0.x
|
||||
* (rpt5)nop
|
||||
* sam (f16)(xyzw)hr0.x, hr0.x, s#0, t#0
|
||||
*
|
||||
* for now, don't set FLAT on vinterp[], since that
|
||||
* at least works well enough for pure float impl (ie.
|
||||
* pre glsl130).. we'll have to do a bit more work to
|
||||
* handle this properly:
|
||||
*/
|
||||
#if 0
|
||||
/* figure out VARYING_INTERP / FLAT_SHAD register values: */
|
||||
for (j = -1; (j = ir3_next_varying(s[FS].v, j)) < (int)s[FS].v->inputs_count; ) {
|
||||
uint32_t interp = s[FS].v->inputs[j].interpolate;
|
||||
@@ -443,25 +463,7 @@ fd4_program_emit(struct fd_ringbuffer *ring, struct fd4_emit *emit)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* HACK: looks like we need to do int varyings in the frag
|
||||
* shader on a4xx (no flatshad reg?):
|
||||
*
|
||||
* (sy)(ss)nop
|
||||
* (sy)ldlv.u32 r0.x,l[r0.x], 1
|
||||
* ldlv.u32 r0.y,l[r0.x+1], 1
|
||||
* (ss)bary.f (ei)r63.x, 0, r0.x
|
||||
* (ss)(rpt1)cov.s32f16 hr0.x, (r)r0.x
|
||||
* (rpt5)nop
|
||||
* sam (f16)(xyzw)hr0.x, hr0.x, s#0, t#0
|
||||
*
|
||||
* for now, don't set FLAT on vinterp[], since that
|
||||
* at least works well enough for pure float impl (ie.
|
||||
* pre glsl130).. we'll have to do a bit more work to
|
||||
* handle this properly:
|
||||
*/
|
||||
for (i = 0; i < ARRAY_SIZE(vinterp); i++)
|
||||
vinterp[i] = 0;
|
||||
#endif
|
||||
|
||||
OUT_PKT0(ring, REG_A4XX_VPC_ATTR, 2);
|
||||
OUT_RING(ring, A4XX_VPC_ATTR_TOTALATTR(s[FS].v->total_in) |
|
||||
|
@@ -68,13 +68,13 @@ tex_clamp(unsigned wrap)
|
||||
}
|
||||
|
||||
static enum a4xx_tex_filter
|
||||
tex_filter(unsigned filter)
|
||||
tex_filter(unsigned filter, bool aniso)
|
||||
{
|
||||
switch (filter) {
|
||||
case PIPE_TEX_FILTER_NEAREST:
|
||||
return A4XX_TEX_NEAREST;
|
||||
case PIPE_TEX_FILTER_LINEAR:
|
||||
return A4XX_TEX_LINEAR;
|
||||
return aniso ? A4XX_TEX_ANISO : A4XX_TEX_LINEAR;
|
||||
default:
|
||||
DBG("invalid filter: %u", filter);
|
||||
return 0;
|
||||
@@ -86,6 +86,7 @@ fd4_sampler_state_create(struct pipe_context *pctx,
|
||||
const struct pipe_sampler_state *cso)
|
||||
{
|
||||
struct fd4_sampler_stateobj *so = CALLOC_STRUCT(fd4_sampler_stateobj);
|
||||
unsigned aniso = util_last_bit(MIN2(cso->max_anisotropy >> 1, 8));
|
||||
bool miplinear = false;
|
||||
|
||||
if (!so)
|
||||
@@ -98,8 +99,9 @@ fd4_sampler_state_create(struct pipe_context *pctx,
|
||||
|
||||
so->texsamp0 =
|
||||
COND(miplinear, A4XX_TEX_SAMP_0_MIPFILTER_LINEAR_NEAR) |
|
||||
A4XX_TEX_SAMP_0_XY_MAG(tex_filter(cso->mag_img_filter)) |
|
||||
A4XX_TEX_SAMP_0_XY_MIN(tex_filter(cso->min_img_filter)) |
|
||||
A4XX_TEX_SAMP_0_XY_MAG(tex_filter(cso->mag_img_filter, aniso)) |
|
||||
A4XX_TEX_SAMP_0_XY_MIN(tex_filter(cso->min_img_filter, aniso)) |
|
||||
A4XX_TEX_SAMP_0_ANISO(aniso) |
|
||||
A4XX_TEX_SAMP_0_WRAP_S(tex_clamp(cso->wrap_s)) |
|
||||
A4XX_TEX_SAMP_0_WRAP_T(tex_clamp(cso->wrap_t)) |
|
||||
A4XX_TEX_SAMP_0_WRAP_R(tex_clamp(cso->wrap_r));
|
||||
|
@@ -13,8 +13,8 @@ The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10551 bytes, from 2014-11-13 22:44:30)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 15085 bytes, from 2014-12-20 21:49:41)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64344 bytes, from 2014-12-12 20:22:26)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 51270 bytes, from 2015-01-18 23:05:48)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64771 bytes, from 2015-03-15 21:55:57)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 51942 bytes, from 2015-02-24 17:14:02)
|
||||
|
||||
Copyright (C) 2013-2014 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
|
@@ -13,8 +13,8 @@ The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10551 bytes, from 2014-11-13 22:44:30)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 15085 bytes, from 2014-12-20 21:49:41)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64344 bytes, from 2014-12-12 20:22:26)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 51270 bytes, from 2015-01-18 23:05:48)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64771 bytes, from 2015-03-15 21:55:57)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 51942 bytes, from 2015-02-24 17:14:02)
|
||||
|
||||
Copyright (C) 2013-2014 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
|
@@ -213,9 +213,16 @@ setup_slices(struct fd_resource *rsc, uint32_t alignment)
|
||||
for (level = 0; level <= prsc->last_level; level++) {
|
||||
struct fd_resource_slice *slice = fd_resource_slice(rsc, level);
|
||||
|
||||
slice->pitch = align(width, 32);
|
||||
slice->pitch = width = align(width, 32);
|
||||
slice->offset = size;
|
||||
slice->size0 = align(slice->pitch * height * rsc->cpp, alignment);
|
||||
/* 1d array, 2d array, 3d textures (but not cube!) must all have the
|
||||
* same layer size for each miplevel on a3xx. These are also the
|
||||
* targets that have non-1 alignment.
|
||||
*/
|
||||
if (level == 0 || layers_in_level == 1 || alignment == 1)
|
||||
slice->size0 = align(slice->pitch * height * rsc->cpp, alignment);
|
||||
else
|
||||
slice->size0 = rsc->slices[0].size0;
|
||||
|
||||
size += slice->size0 * depth * layers_in_level;
|
||||
|
||||
|
@@ -123,12 +123,12 @@ fd_set_framebuffer_state(struct pipe_context *pctx,
|
||||
|
||||
fd_context_render(pctx);
|
||||
|
||||
util_copy_framebuffer_state(cso, framebuffer);
|
||||
|
||||
if ((cso->width != framebuffer->width) ||
|
||||
(cso->height != framebuffer->height))
|
||||
ctx->needs_rb_fbd = true;
|
||||
|
||||
util_copy_framebuffer_state(cso, framebuffer);
|
||||
|
||||
ctx->dirty |= FD_DIRTY_FRAMEBUFFER;
|
||||
|
||||
ctx->disabled_scissor.minx = 0;
|
||||
|
@@ -448,117 +448,114 @@ static void print_instr_cat5(instr_t *instr)
|
||||
}
|
||||
}
|
||||
|
||||
static int32_t u2i(uint32_t val, int nbits)
|
||||
{
|
||||
return ((val >> (nbits-1)) * ~((1 << nbits) - 1)) | val;
|
||||
}
|
||||
|
||||
static void print_instr_cat6(instr_t *instr)
|
||||
{
|
||||
instr_cat6_t *cat6 = &instr->cat6;
|
||||
char sd = 0, ss = 0; /* dst/src address space */
|
||||
bool full = type_size(cat6->type) == 32;
|
||||
bool nodst = false;
|
||||
|
||||
printf(".%s ", type[cat6->type]);
|
||||
|
||||
switch (cat6->opc) {
|
||||
case OPC_STG:
|
||||
sd = 'g';
|
||||
break;
|
||||
case OPC_STP:
|
||||
sd = 'p';
|
||||
break;
|
||||
case OPC_STL:
|
||||
case OPC_STLW:
|
||||
sd = 'l';
|
||||
break;
|
||||
|
||||
case OPC_LDG:
|
||||
ss = 'g';
|
||||
break;
|
||||
case OPC_LDP:
|
||||
ss = 'p';
|
||||
break;
|
||||
case OPC_LDL:
|
||||
case OPC_LDLW:
|
||||
case OPC_LDLV:
|
||||
/* load instructions: */
|
||||
print_reg_dst((reg_t)(cat6->a.dst), type_size(cat6->type) == 32, false);
|
||||
printf(",");
|
||||
switch (cat6->opc) {
|
||||
case OPC_LDG:
|
||||
printf("g");
|
||||
break;
|
||||
case OPC_LDP:
|
||||
printf("p");
|
||||
break;
|
||||
case OPC_LDL:
|
||||
case OPC_LDLW:
|
||||
case OPC_LDLV:
|
||||
printf("l");
|
||||
break;
|
||||
}
|
||||
printf("[");
|
||||
print_reg_src((reg_t)(cat6->a.src), true,
|
||||
false, false, false, false, false, false);
|
||||
if (cat6->a.off)
|
||||
printf("%+d", cat6->a.off);
|
||||
printf("]");
|
||||
ss = 'l';
|
||||
break;
|
||||
case OPC_PREFETCH:
|
||||
/* similar to load instructions: */
|
||||
printf("g[");
|
||||
print_reg_src((reg_t)(cat6->a.src), true,
|
||||
false, false, false, false, false, false);
|
||||
if (cat6->a.off)
|
||||
printf("%+d", cat6->a.off);
|
||||
printf("]");
|
||||
break;
|
||||
case OPC_STG:
|
||||
case OPC_STP:
|
||||
case OPC_STL:
|
||||
case OPC_STLW:
|
||||
/* store instructions: */
|
||||
switch (cat6->opc) {
|
||||
case OPC_STG:
|
||||
printf("g");
|
||||
break;
|
||||
case OPC_STP:
|
||||
printf("p");
|
||||
break;
|
||||
case OPC_STL:
|
||||
case OPC_STLW:
|
||||
printf("l");
|
||||
break;
|
||||
}
|
||||
printf("[");
|
||||
print_reg_dst((reg_t)(cat6->b.dst), true, false);
|
||||
if (cat6->b.off || cat6->b.off_hi)
|
||||
printf("%+d", u2i((cat6->b.off_hi << 8) | cat6->b.off, 13));
|
||||
printf("]");
|
||||
printf(",");
|
||||
print_reg_src((reg_t)(cat6->b.src), type_size(cat6->type) == 32,
|
||||
false, false, false, false, false, false);
|
||||
|
||||
case OPC_L2G:
|
||||
ss = 'l';
|
||||
sd = 'g';
|
||||
break;
|
||||
|
||||
case OPC_G2L:
|
||||
ss = 'g';
|
||||
sd = 'l';
|
||||
break;
|
||||
|
||||
case OPC_PREFETCH:
|
||||
ss = 'g';
|
||||
nodst = true;
|
||||
break;
|
||||
|
||||
case OPC_STI:
|
||||
/* sti has same encoding as other store instructions, but
|
||||
* slightly different syntax:
|
||||
*/
|
||||
print_reg_dst((reg_t)(cat6->b.dst), false /* XXX is it always half? */, false);
|
||||
if (cat6->b.off || cat6->b.off_hi)
|
||||
printf("%+d", u2i((cat6->b.off_hi << 8) | cat6->b.off, 13));
|
||||
printf(",");
|
||||
print_reg_src((reg_t)(cat6->b.src), type_size(cat6->type) == 32,
|
||||
false, false, false, false, false, false);
|
||||
full = false; // XXX or inverts??
|
||||
break;
|
||||
}
|
||||
|
||||
printf(", %d", cat6->iim_val);
|
||||
if (cat6->has_off) {
|
||||
if (!nodst) {
|
||||
if (sd)
|
||||
printf("%c[", sd);
|
||||
print_reg_dst((reg_t)(cat6->a.dst), full, false);
|
||||
if (sd)
|
||||
printf("]");
|
||||
printf(", ");
|
||||
}
|
||||
if (ss)
|
||||
printf("%c[", ss);
|
||||
print_reg_src((reg_t)(cat6->a.src1), true,
|
||||
false, false, cat6->a.src1_im, false, false, false);
|
||||
printf("%+d", cat6->a.off);
|
||||
if (ss)
|
||||
printf("]");
|
||||
printf(", ");
|
||||
print_reg_src((reg_t)(cat6->a.src2), full,
|
||||
false, false, cat6->a.src2_im, false, false, false);
|
||||
} else {
|
||||
if (!nodst) {
|
||||
if (sd)
|
||||
printf("%c[", sd);
|
||||
print_reg_dst((reg_t)(cat6->b.dst), full, false);
|
||||
if (sd)
|
||||
printf("]");
|
||||
printf(", ");
|
||||
}
|
||||
if (ss)
|
||||
printf("%c[", ss);
|
||||
print_reg_src((reg_t)(cat6->b.src1), true,
|
||||
false, false, cat6->b.src1_im, false, false, false);
|
||||
if (ss)
|
||||
printf("]");
|
||||
printf(", ");
|
||||
print_reg_src((reg_t)(cat6->b.src2), full,
|
||||
false, false, cat6->b.src2_im, false, false, false);
|
||||
}
|
||||
|
||||
if (debug & PRINT_VERBOSE) {
|
||||
switch (cat6->opc) {
|
||||
case OPC_LDG:
|
||||
case OPC_LDP:
|
||||
/* load instructions: */
|
||||
if (cat6->a.dummy1|cat6->a.dummy2|cat6->a.dummy3)
|
||||
printf("\t{6: %x,%x,%x}", cat6->a.dummy1, cat6->a.dummy2, cat6->a.dummy3);
|
||||
if ((cat6->a.must_be_one1 != 1) || (cat6->a.must_be_one2 != 1))
|
||||
printf("{?? %d,%d ??}", cat6->a.must_be_one1, cat6->a.must_be_one2);
|
||||
if (cat6->a.dummy2|cat6->a.dummy3)
|
||||
printf("\t{6: %x,%x}", cat6->a.dummy2, cat6->a.dummy3);
|
||||
break;
|
||||
case OPC_STG:
|
||||
case OPC_STP:
|
||||
case OPC_STI:
|
||||
/* store instructions: */
|
||||
if (cat6->b.dummy1|cat6->b.dummy2)
|
||||
printf("\t{6: %x,%x}", cat6->b.dummy1, cat6->b.dummy2);
|
||||
if ((cat6->b.must_be_one1 != 1) || (cat6->b.must_be_one2 != 1) ||
|
||||
(cat6->b.must_be_zero1 != 0))
|
||||
printf("{?? %d,%d,%d ??}", cat6->b.must_be_one1, cat6->b.must_be_one2,
|
||||
cat6->b.must_be_zero1);
|
||||
if (cat6->b.dummy2|cat6->b.dummy2)
|
||||
printf("\t{6: %x,%x}", cat6->b.dummy2, cat6->b.dummy3);
|
||||
if (cat6->b.ignore0)
|
||||
printf("\t{?? %x}", cat6->b.ignore0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -572,15 +572,15 @@ typedef struct PACKED {
|
||||
uint32_t opc_cat : 3;
|
||||
} instr_cat5_t;
|
||||
|
||||
/* used for load instructions: */
|
||||
/* [src1 + off], src2: */
|
||||
typedef struct PACKED {
|
||||
/* dword0: */
|
||||
uint32_t must_be_one1 : 1;
|
||||
int16_t off : 13;
|
||||
uint32_t src : 8;
|
||||
uint32_t dummy1 : 1;
|
||||
uint32_t must_be_one2 : 1;
|
||||
int32_t iim_val : 8;
|
||||
uint32_t mustbe1 : 1;
|
||||
int32_t off : 13;
|
||||
uint32_t src1 : 8;
|
||||
uint32_t src1_im : 1;
|
||||
uint32_t src2_im : 1;
|
||||
uint32_t src2 : 8;
|
||||
|
||||
/* dword1: */
|
||||
uint32_t dst : 8;
|
||||
@@ -593,35 +593,38 @@ typedef struct PACKED {
|
||||
uint32_t opc_cat : 3;
|
||||
} instr_cat6a_t;
|
||||
|
||||
/* used for store instructions: */
|
||||
/* [src1], src2: */
|
||||
typedef struct PACKED {
|
||||
/* dword0: */
|
||||
uint32_t must_be_zero1 : 1;
|
||||
uint32_t src : 8;
|
||||
uint32_t off_hi : 5; /* high bits of 'off'... ugly! */
|
||||
uint32_t dummy1 : 9;
|
||||
uint32_t must_be_one1 : 1;
|
||||
int32_t iim_val : 8;
|
||||
uint32_t mustbe0 : 1;
|
||||
uint32_t src1 : 8;
|
||||
uint32_t ignore0 : 13;
|
||||
uint32_t src1_im : 1;
|
||||
uint32_t src2_im : 1;
|
||||
uint32_t src2 : 8;
|
||||
|
||||
/* dword1: */
|
||||
uint16_t off : 8;
|
||||
uint32_t must_be_one2 : 1;
|
||||
uint32_t dst : 8;
|
||||
uint32_t dummy2 : 9;
|
||||
uint32_t type : 3;
|
||||
uint32_t dummy2 : 2;
|
||||
uint32_t dummy3 : 2;
|
||||
uint32_t opc : 5;
|
||||
uint32_t jmp_tgt : 1;
|
||||
uint32_t sync : 1;
|
||||
uint32_t opc_cat : 3;
|
||||
} instr_cat6b_t;
|
||||
|
||||
/* I think some of the other cat6 instructions use additional
|
||||
* sub-encodings..
|
||||
*/
|
||||
|
||||
typedef union PACKED {
|
||||
instr_cat6a_t a;
|
||||
instr_cat6b_t b;
|
||||
struct PACKED {
|
||||
/* dword0: */
|
||||
uint32_t pad1 : 24;
|
||||
int32_t iim_val : 8;
|
||||
uint32_t has_off : 1;
|
||||
uint32_t pad1 : 31;
|
||||
|
||||
/* dword1: */
|
||||
uint32_t pad2 : 17;
|
||||
|
@@ -113,6 +113,8 @@ static uint32_t reg(struct ir3_register *reg, struct ir3_info *info,
|
||||
|
||||
if (reg->flags & IR3_REG_CONST) {
|
||||
info->max_const = MAX2(info->max_const, max);
|
||||
} else if (val.num == 63) {
|
||||
/* ignore writes to dummy register r63.x */
|
||||
} else if ((max != REG_A0) && (max != REG_P0)) {
|
||||
if (reg->flags & IR3_REG_HALF) {
|
||||
info->max_half_reg = MAX2(info->max_half_reg, max);
|
||||
@@ -474,58 +476,40 @@ static int emit_cat5(struct ir3_instruction *instr, void *ptr,
|
||||
static int emit_cat6(struct ir3_instruction *instr, void *ptr,
|
||||
struct ir3_info *info)
|
||||
{
|
||||
struct ir3_register *dst = instr->regs[0];
|
||||
struct ir3_register *src = instr->regs[1];
|
||||
struct ir3_register *dst = instr->regs[0];
|
||||
struct ir3_register *src1 = instr->regs[1];
|
||||
struct ir3_register *src2 = (instr->regs_count >= 3) ? instr->regs[2] : NULL;
|
||||
instr_cat6_t *cat6 = ptr;
|
||||
|
||||
iassert(instr->regs_count == 2);
|
||||
iassert(instr->regs_count >= 2);
|
||||
|
||||
switch (instr->opc) {
|
||||
/* load instructions: */
|
||||
case OPC_LDG:
|
||||
case OPC_LDP:
|
||||
case OPC_LDL:
|
||||
case OPC_LDLW:
|
||||
case OPC_LDLV:
|
||||
case OPC_PREFETCH: {
|
||||
if (instr->cat6.offset) {
|
||||
instr_cat6a_t *cat6a = ptr;
|
||||
|
||||
iassert(!((dst->flags ^ type_flags(instr->cat6.type)) & IR3_REG_HALF));
|
||||
cat6->has_off = true;
|
||||
|
||||
cat6a->must_be_one1 = 1;
|
||||
cat6a->must_be_one2 = 1;
|
||||
cat6a->off = instr->cat6.offset;
|
||||
cat6a->src = reg(src, info, instr->repeat, 0);
|
||||
cat6a->dst = reg(dst, info, instr->repeat, IR3_REG_R | IR3_REG_HALF);
|
||||
break;
|
||||
}
|
||||
/* store instructions: */
|
||||
case OPC_STG:
|
||||
case OPC_STP:
|
||||
case OPC_STL:
|
||||
case OPC_STLW:
|
||||
case OPC_STI: {
|
||||
cat6a->src1 = reg(src1, info, instr->repeat, IR3_REG_IMMED);
|
||||
cat6a->src1_im = !!(src1->flags & IR3_REG_IMMED);
|
||||
if (src2) {
|
||||
cat6a->src2 = reg(src2, info, instr->repeat, IR3_REG_IMMED);
|
||||
cat6a->src2_im = !!(src2->flags & IR3_REG_IMMED);
|
||||
}
|
||||
cat6a->off = instr->cat6.offset;
|
||||
} else {
|
||||
instr_cat6b_t *cat6b = ptr;
|
||||
uint32_t src_flags = type_flags(instr->cat6.type);
|
||||
uint32_t dst_flags = (instr->opc == OPC_STI) ? IR3_REG_HALF : 0;
|
||||
|
||||
iassert(!((src->flags ^ src_flags) & IR3_REG_HALF));
|
||||
cat6->has_off = false;
|
||||
|
||||
cat6b->must_be_one1 = 1;
|
||||
cat6b->must_be_one2 = 1;
|
||||
cat6b->src = reg(src, info, instr->repeat, src_flags);
|
||||
cat6b->off_hi = instr->cat6.offset >> 8;
|
||||
cat6b->off = instr->cat6.offset;
|
||||
cat6b->dst = reg(dst, info, instr->repeat, IR3_REG_R | dst_flags);
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
// TODO
|
||||
break;
|
||||
cat6b->dst = reg(dst, info, instr->repeat, IR3_REG_R | IR3_REG_HALF);
|
||||
cat6b->src1 = reg(src1, info, instr->repeat, IR3_REG_IMMED);
|
||||
cat6b->src1_im = !!(src1->flags & IR3_REG_IMMED);
|
||||
if (src2) {
|
||||
cat6b->src2 = reg(src2, info, instr->repeat, IR3_REG_IMMED);
|
||||
cat6b->src2_im = !!(src2->flags & IR3_REG_IMMED);
|
||||
}
|
||||
}
|
||||
|
||||
cat6->iim_val = instr->cat6.iim_val;
|
||||
cat6->type = instr->cat6.type;
|
||||
cat6->opc = instr->opc;
|
||||
cat6->jmp_tgt = !!(instr->flags & IR3_INSTR_JP);
|
||||
|
@@ -420,8 +420,19 @@ static inline bool is_tex(struct ir3_instruction *instr)
|
||||
return (instr->category == 5);
|
||||
}
|
||||
|
||||
static inline bool is_mem(struct ir3_instruction *instr)
|
||||
{
|
||||
return (instr->category == 6);
|
||||
}
|
||||
|
||||
static inline bool is_input(struct ir3_instruction *instr)
|
||||
{
|
||||
/* in some cases, ldlv is used to fetch varying without
|
||||
* interpolation.. fortunately inloc is the first src
|
||||
* register in either case
|
||||
*/
|
||||
if (is_mem(instr) && (instr->opc == OPC_LDLV))
|
||||
return true;
|
||||
return (instr->category == 2) && (instr->opc == OPC_BARY_F);
|
||||
}
|
||||
|
||||
|
@@ -102,6 +102,11 @@ struct ir3_compile_context {
|
||||
/* for calculating input/output positions/linkages: */
|
||||
unsigned next_inloc;
|
||||
|
||||
/* a4xx (at least patchlevel 0) cannot seem to flat-interpolate
|
||||
* so we need to use ldlv.u32 to load the varying directly:
|
||||
*/
|
||||
bool flat_bypass;
|
||||
|
||||
unsigned num_internal_temps;
|
||||
struct tgsi_src_register internal_temps[8];
|
||||
|
||||
@@ -198,9 +203,13 @@ compile_init(struct ir3_compile_context *ctx, struct ir3_shader_variant *so,
|
||||
} else if (ir3_shader_gpuid(so->shader) >= 400) {
|
||||
/* a4xx seems to have *no* sam.p */
|
||||
lconfig.lower_TXP = ~0; /* lower all txp */
|
||||
/* need special handling for "flat" */
|
||||
ctx->flat_bypass = true;
|
||||
} else {
|
||||
/* a3xx just needs to avoid sam.p for 3d tex */
|
||||
lconfig.lower_TXP = (1 << TGSI_TEXTURE_3D);
|
||||
/* no special handling for "flat" */
|
||||
ctx->flat_bypass = false;
|
||||
}
|
||||
|
||||
ctx->tokens = tgsi_transform_lowering(&lconfig, tokens, &ctx->info);
|
||||
@@ -1537,6 +1546,7 @@ trans_txq(const struct instr_translater *t,
|
||||
struct tgsi_dst_register *dst = &inst->Dst[0].Register;
|
||||
struct tgsi_src_register *level = &inst->Src[0].Register;
|
||||
struct tgsi_src_register *samp = &inst->Src[1].Register;
|
||||
const struct target_info *tgt = &tex_targets[inst->Texture.Texture];
|
||||
struct tex_info tinf;
|
||||
|
||||
memset(&tinf, 0, sizeof(tinf));
|
||||
@@ -1550,8 +1560,67 @@ trans_txq(const struct instr_translater *t,
|
||||
instr->cat5.tex = samp->Index;
|
||||
instr->flags |= tinf.flags;
|
||||
|
||||
add_dst_reg_wrmask(ctx, instr, dst, 0, dst->WriteMask);
|
||||
add_src_reg_wrmask(ctx, instr, level, level->SwizzleX, 0x1);
|
||||
if (tgt->array && (dst->WriteMask & (1 << tgt->dims))) {
|
||||
/* Array size actually ends up in .w rather than .z. This doesn't
|
||||
* matter for miplevel 0, but for higher mips the value in z is
|
||||
* minified whereas w stays. Also, the value in TEX_CONST_3_DEPTH is
|
||||
* returned, which means that we have to add 1 to it for arrays.
|
||||
*/
|
||||
struct tgsi_dst_register tmp_dst;
|
||||
struct tgsi_src_register *tmp_src;
|
||||
type_t type_mov = get_utype(ctx);
|
||||
|
||||
tmp_src = get_internal_temp(ctx, &tmp_dst);
|
||||
add_dst_reg_wrmask(ctx, instr, &tmp_dst, 0,
|
||||
dst->WriteMask | TGSI_WRITEMASK_W);
|
||||
add_src_reg_wrmask(ctx, instr, level, level->SwizzleX, 0x1);
|
||||
|
||||
if (dst->WriteMask & TGSI_WRITEMASK_X) {
|
||||
instr = instr_create(ctx, 1, 0);
|
||||
instr->cat1.src_type = type_mov;
|
||||
instr->cat1.dst_type = type_mov;
|
||||
add_dst_reg(ctx, instr, dst, 0);
|
||||
add_src_reg(ctx, instr, tmp_src, src_swiz(tmp_src, 0));
|
||||
}
|
||||
|
||||
if (tgt->dims == 2) {
|
||||
if (dst->WriteMask & TGSI_WRITEMASK_Y) {
|
||||
instr = instr_create(ctx, 1, 0);
|
||||
instr->cat1.src_type = type_mov;
|
||||
instr->cat1.dst_type = type_mov;
|
||||
add_dst_reg(ctx, instr, dst, 1);
|
||||
add_src_reg(ctx, instr, tmp_src, src_swiz(tmp_src, 1));
|
||||
}
|
||||
}
|
||||
|
||||
instr = instr_create(ctx, 2, OPC_ADD_U);
|
||||
add_dst_reg(ctx, instr, dst, tgt->dims);
|
||||
add_src_reg(ctx, instr, tmp_src, src_swiz(tmp_src, 3));
|
||||
ir3_reg_create(instr, 0, IR3_REG_IMMED)->iim_val = 1;
|
||||
} else {
|
||||
add_dst_reg_wrmask(ctx, instr, dst, 0, dst->WriteMask);
|
||||
add_src_reg_wrmask(ctx, instr, level, level->SwizzleX, 0x1);
|
||||
}
|
||||
|
||||
if (dst->WriteMask & TGSI_WRITEMASK_W) {
|
||||
/* The # of levels comes from getinfo.z. We need to add 1 to it, since
|
||||
* the value in TEX_CONST_0 is zero-based.
|
||||
*/
|
||||
struct tgsi_dst_register tmp_dst;
|
||||
struct tgsi_src_register *tmp_src;
|
||||
|
||||
tmp_src = get_internal_temp(ctx, &tmp_dst);
|
||||
instr = instr_create(ctx, 5, OPC_GETINFO);
|
||||
instr->cat5.type = get_utype(ctx);
|
||||
instr->cat5.samp = samp->Index;
|
||||
instr->cat5.tex = samp->Index;
|
||||
add_dst_reg_wrmask(ctx, instr, &tmp_dst, 0, TGSI_WRITEMASK_Z);
|
||||
|
||||
instr = instr_create(ctx, 2, OPC_ADD_U);
|
||||
add_dst_reg(ctx, instr, dst, 3);
|
||||
add_src_reg(ctx, instr, tmp_src, src_swiz(tmp_src, 2));
|
||||
ir3_reg_create(instr, 0, IR3_REG_IMMED)->iim_val = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* DDX/DDY */
|
||||
@@ -2718,11 +2787,23 @@ decl_semantic(const struct tgsi_declaration_semantic *sem)
|
||||
|
||||
static struct ir3_instruction *
|
||||
decl_in_frag_bary(struct ir3_compile_context *ctx, unsigned regid,
|
||||
unsigned j, unsigned inloc)
|
||||
unsigned j, unsigned inloc, bool use_ldlv)
|
||||
{
|
||||
struct ir3_instruction *instr;
|
||||
struct ir3_register *src;
|
||||
|
||||
if (use_ldlv) {
|
||||
/* ldlv.u32 dst, l[#inloc], 1 */
|
||||
instr = instr_create(ctx, 6, OPC_LDLV);
|
||||
instr->cat6.type = TYPE_U32;
|
||||
instr->cat6.iim_val = 1;
|
||||
ir3_reg_create(instr, regid, 0); /* dummy dst */
|
||||
ir3_reg_create(instr, 0, IR3_REG_IMMED)->iim_val = inloc;
|
||||
ir3_reg_create(instr, 0, IR3_REG_IMMED)->iim_val = 1;
|
||||
|
||||
return instr;
|
||||
}
|
||||
|
||||
/* bary.f dst, #inloc, r0.x */
|
||||
instr = instr_create(ctx, 2, OPC_BARY_F);
|
||||
ir3_reg_create(instr, regid, 0); /* dummy dst */
|
||||
@@ -2916,9 +2997,31 @@ decl_in(struct ir3_compile_context *ctx, struct tgsi_full_declaration *decl)
|
||||
so->frag_face = true;
|
||||
instr = decl_in_frag_face(ctx, r + j, j);
|
||||
} else {
|
||||
bool use_ldlv = false;
|
||||
|
||||
/* I don't believe it is valid to not have Interp
|
||||
* on a normal frag shader input, and various parts
|
||||
* that that handle flat/smooth shading make this
|
||||
* assumption as well.
|
||||
*/
|
||||
compile_assert(ctx, decl->Declaration.Interpolate);
|
||||
|
||||
if (ctx->flat_bypass) {
|
||||
switch (decl->Interp.Interpolate) {
|
||||
case TGSI_INTERPOLATE_COLOR:
|
||||
if (!ctx->so->key.rasterflat)
|
||||
break;
|
||||
/* fallthrough */
|
||||
case TGSI_INTERPOLATE_CONSTANT:
|
||||
use_ldlv = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
so->inputs[n].bary = true;
|
||||
|
||||
instr = decl_in_frag_bary(ctx, r + j, j,
|
||||
so->inputs[n].inloc + j - 8);
|
||||
so->inputs[n].inloc + j - 8, use_ldlv);
|
||||
}
|
||||
} else {
|
||||
instr = create_input(ctx->block, NULL, (i * 4) + j);
|
||||
@@ -3220,7 +3323,7 @@ ir3_compile_shader(struct ir3_shader_variant *so,
|
||||
if (key.binning_pass) {
|
||||
for (i = 0, j = 0; i < so->outputs_count; i++) {
|
||||
unsigned name = sem2name(so->outputs[i].semantic);
|
||||
unsigned idx = sem2name(so->outputs[i].semantic);
|
||||
unsigned idx = sem2idx(so->outputs[i].semantic);
|
||||
|
||||
/* throw away everything but first position/psize */
|
||||
if ((idx == 0) && ((name == TGSI_SEMANTIC_POSITION) ||
|
||||
|
@@ -67,7 +67,7 @@ int ir3_delayslots(struct ir3_instruction *assigner,
|
||||
return 6;
|
||||
|
||||
/* handled via sync flags: */
|
||||
if (is_sfu(assigner) || is_tex(assigner))
|
||||
if (is_sfu(assigner) || is_tex(assigner) || is_mem(assigner))
|
||||
return 0;
|
||||
|
||||
/* assigner must be alu: */
|
||||
|
@@ -50,50 +50,7 @@ static bool check_stop(struct ir3_instruction *instr)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* bleh.. we need to do the same group_n() thing for both inputs/outputs
|
||||
* (where we have a simple instr[] array), and fanin nodes (where we have
|
||||
* an extra indirection via reg->instr).
|
||||
*/
|
||||
struct group_ops {
|
||||
struct ir3_instruction *(*get)(void *arr, int idx);
|
||||
void (*set)(void *arr, int idx, struct ir3_instruction *instr);
|
||||
};
|
||||
|
||||
static struct ir3_instruction *arr_get(void *arr, int idx)
|
||||
{
|
||||
return ((struct ir3_instruction **)arr)[idx];
|
||||
}
|
||||
static void arr_set_out(void *arr, int idx, struct ir3_instruction *instr)
|
||||
{
|
||||
((struct ir3_instruction **)arr)[idx] = instr;
|
||||
}
|
||||
static void arr_set_in(void *arr, int idx, struct ir3_instruction *instr)
|
||||
{
|
||||
debug_printf("cannot insert mov before input!\n");
|
||||
debug_assert(0);
|
||||
}
|
||||
static struct group_ops arr_ops_out = { arr_get, arr_set_out };
|
||||
static struct group_ops arr_ops_in = { arr_get, arr_set_in };
|
||||
|
||||
static struct ir3_instruction *instr_get(void *arr, int idx)
|
||||
{
|
||||
return ssa(((struct ir3_instruction *)arr)->regs[idx+1]);
|
||||
}
|
||||
static void instr_set(void *arr, int idx, struct ir3_instruction *instr)
|
||||
{
|
||||
((struct ir3_instruction *)arr)->regs[idx+1]->instr = instr;
|
||||
}
|
||||
static struct group_ops instr_ops = { instr_get, instr_set };
|
||||
|
||||
|
||||
|
||||
static bool conflicts(struct ir3_instruction *a, struct ir3_instruction *b)
|
||||
{
|
||||
return (a && b) && (a != b);
|
||||
}
|
||||
|
||||
static struct ir3_instruction *
|
||||
create_mov(struct ir3_instruction *instr)
|
||||
static struct ir3_instruction * create_mov(struct ir3_instruction *instr)
|
||||
{
|
||||
struct ir3_instruction *mov;
|
||||
|
||||
@@ -106,6 +63,67 @@ create_mov(struct ir3_instruction *instr)
|
||||
return mov;
|
||||
}
|
||||
|
||||
/* bleh.. we need to do the same group_n() thing for both inputs/outputs
|
||||
* (where we have a simple instr[] array), and fanin nodes (where we have
|
||||
* an extra indirection via reg->instr).
|
||||
*/
|
||||
struct group_ops {
|
||||
struct ir3_instruction *(*get)(void *arr, int idx);
|
||||
void (*insert_mov)(void *arr, int idx, struct ir3_instruction *instr);
|
||||
};
|
||||
|
||||
static struct ir3_instruction *arr_get(void *arr, int idx)
|
||||
{
|
||||
return ((struct ir3_instruction **)arr)[idx];
|
||||
}
|
||||
static void arr_insert_mov_out(void *arr, int idx, struct ir3_instruction *instr)
|
||||
{
|
||||
((struct ir3_instruction **)arr)[idx] = create_mov(instr);
|
||||
}
|
||||
static void arr_insert_mov_in(void *arr, int idx, struct ir3_instruction *instr)
|
||||
{
|
||||
/* so, we can't insert a mov in front of a meta:in.. and the downstream
|
||||
* instruction already has a pointer to 'instr'. So we cheat a bit and
|
||||
* morph the meta:in instruction into a mov and insert a new meta:in
|
||||
* in front.
|
||||
*/
|
||||
struct ir3_instruction *in;
|
||||
|
||||
debug_assert(instr->regs_count == 1);
|
||||
|
||||
in = ir3_instr_create(instr->block, -1, OPC_META_INPUT);
|
||||
in->inout.block = instr->block;
|
||||
ir3_reg_create(in, instr->regs[0]->num, 0);
|
||||
|
||||
/* create src reg for meta:in and fixup to now be a mov: */
|
||||
ir3_reg_create(instr, 0, IR3_REG_SSA)->instr = in;
|
||||
instr->category = 1;
|
||||
instr->opc = 0;
|
||||
instr->cat1.src_type = TYPE_F32;
|
||||
instr->cat1.dst_type = TYPE_F32;
|
||||
|
||||
((struct ir3_instruction **)arr)[idx] = in;
|
||||
}
|
||||
static struct group_ops arr_ops_out = { arr_get, arr_insert_mov_out };
|
||||
static struct group_ops arr_ops_in = { arr_get, arr_insert_mov_in };
|
||||
|
||||
static struct ir3_instruction *instr_get(void *arr, int idx)
|
||||
{
|
||||
return ssa(((struct ir3_instruction *)arr)->regs[idx+1]);
|
||||
}
|
||||
static void instr_insert_mov(void *arr, int idx, struct ir3_instruction *instr)
|
||||
{
|
||||
((struct ir3_instruction *)arr)->regs[idx+1]->instr = create_mov(instr);
|
||||
}
|
||||
static struct group_ops instr_ops = { instr_get, instr_insert_mov };
|
||||
|
||||
|
||||
|
||||
static bool conflicts(struct ir3_instruction *a, struct ir3_instruction *b)
|
||||
{
|
||||
return (a && b) && (a != b);
|
||||
}
|
||||
|
||||
static void group_n(struct group_ops *ops, void *arr, unsigned n)
|
||||
{
|
||||
unsigned i, j;
|
||||
@@ -135,8 +153,7 @@ restart:
|
||||
conflict = true;
|
||||
|
||||
if (conflict) {
|
||||
instr = create_mov(instr);
|
||||
ops->set(arr, i, instr);
|
||||
ops->insert_mov(arr, i, instr);
|
||||
/* inserting the mov may have caused a conflict
|
||||
* against the previous:
|
||||
*/
|
||||
|
@@ -168,6 +168,8 @@ static void legalize(struct ir3_legalize_ctx *ctx)
|
||||
*/
|
||||
ctx->has_samp = true;
|
||||
regmask_set(&needs_sy, n->regs[0]);
|
||||
} else if (is_mem(n)) {
|
||||
regmask_set(&needs_sy, n->regs[0]);
|
||||
}
|
||||
|
||||
/* both tex/sfu appear to not always immediately consume
|
||||
@@ -185,8 +187,44 @@ static void legalize(struct ir3_legalize_ctx *ctx)
|
||||
last_input = n;
|
||||
}
|
||||
|
||||
if (last_input)
|
||||
if (last_input) {
|
||||
/* special hack.. if using ldlv to bypass interpolation,
|
||||
* we need to insert a dummy bary.f on which we can set
|
||||
* the (ei) flag:
|
||||
*/
|
||||
if (is_mem(last_input) && (last_input->opc == OPC_LDLV)) {
|
||||
int i, cnt;
|
||||
|
||||
/* note that ir3_instr_create() inserts into
|
||||
* shader->instrs[] and increments the count..
|
||||
* so we need to bump up the cnt initially (to
|
||||
* avoid it clobbering the last real instr) and
|
||||
* restore it after.
|
||||
*/
|
||||
cnt = ++shader->instrs_count;
|
||||
|
||||
/* inserting instructions would be a bit nicer if list.. */
|
||||
for (i = cnt - 2; i >= 0; i--) {
|
||||
if (shader->instrs[i] == last_input) {
|
||||
|
||||
/* (ss)bary.f (ei)r63.x, 0, r0.x */
|
||||
last_input = ir3_instr_create(block, 2, OPC_BARY_F);
|
||||
last_input->flags |= IR3_INSTR_SS;
|
||||
ir3_reg_create(last_input, regid(63, 0), 0);
|
||||
ir3_reg_create(last_input, 0, IR3_REG_IMMED)->iim_val = 0;
|
||||
ir3_reg_create(last_input, regid(0, 0), 0);
|
||||
|
||||
shader->instrs[i + 1] = last_input;
|
||||
|
||||
break;
|
||||
}
|
||||
shader->instrs[i + 1] = shader->instrs[i];
|
||||
}
|
||||
|
||||
shader->instrs_count = cnt;
|
||||
}
|
||||
last_input->regs[0]->flags |= IR3_REG_EI;
|
||||
}
|
||||
|
||||
if (last_rel)
|
||||
last_rel->flags |= IR3_INSTR_UL;
|
||||
|
@@ -246,6 +246,7 @@ ir3_shader_variant(struct ir3_shader *shader, struct ir3_shader_key key)
|
||||
key.color_two_side = false;
|
||||
key.half_precision = false;
|
||||
key.alpha = false;
|
||||
key.rasterflat = false;
|
||||
if (key.has_per_samp) {
|
||||
key.fsaturate_s = 0;
|
||||
key.fsaturate_t = 0;
|
||||
|
@@ -77,6 +77,10 @@ struct ir3_shader_key {
|
||||
* let's start with this and see how it goes:
|
||||
*/
|
||||
unsigned alpha : 1;
|
||||
/* used when shader needs to handle flat varyings (a4xx),
|
||||
* for TGSI_INTERPOLATE_COLOR:
|
||||
*/
|
||||
unsigned rasterflat : 1;
|
||||
};
|
||||
uint32_t global;
|
||||
};
|
||||
|
@@ -252,7 +252,12 @@ nvc0_tfb_validate(struct nvc0_context *nvc0)
|
||||
|
||||
for (b = 0; b < nvc0->num_tfbbufs; ++b) {
|
||||
struct nvc0_so_target *targ = nvc0_so_target(nvc0->tfbbuf[b]);
|
||||
struct nv04_resource *buf = nv04_resource(targ->pipe.buffer);
|
||||
struct nv04_resource *buf;
|
||||
|
||||
if (!targ) {
|
||||
IMMED_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tfb)
|
||||
targ->stride = tfb->stride[b];
|
||||
@@ -260,6 +265,8 @@ nvc0_tfb_validate(struct nvc0_context *nvc0)
|
||||
if (!(nvc0->tfbbuf_dirty & (1 << b)))
|
||||
continue;
|
||||
|
||||
buf = nv04_resource(targ->pipe.buffer);
|
||||
|
||||
if (!targ->clean)
|
||||
nvc0_query_fifo_wait(push, targ->pq);
|
||||
BEGIN_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 5);
|
||||
|
@@ -1089,9 +1089,11 @@ nvc0_set_transform_feedback_targets(struct pipe_context *pipe,
|
||||
pipe_so_target_reference(&nvc0->tfbbuf[i], targets[i]);
|
||||
}
|
||||
for (; i < nvc0->num_tfbbufs; ++i) {
|
||||
nvc0->tfbbuf_dirty |= 1 << i;
|
||||
nvc0_so_target_save_offset(pipe, nvc0->tfbbuf[i], i, &serialize);
|
||||
pipe_so_target_reference(&nvc0->tfbbuf[i], NULL);
|
||||
if (nvc0->tfbbuf[i]) {
|
||||
nvc0->tfbbuf_dirty |= 1 << i;
|
||||
nvc0_so_target_save_offset(pipe, nvc0->tfbbuf[i], i, &serialize);
|
||||
pipe_so_target_reference(&nvc0->tfbbuf[i], NULL);
|
||||
}
|
||||
}
|
||||
nvc0->num_tfbbufs = num_targets;
|
||||
|
||||
|
@@ -1401,11 +1401,14 @@ nvc0_blit(struct pipe_context *pipe, const struct pipe_blit_info *info)
|
||||
} else
|
||||
if (!nv50_2d_src_format_faithful(info->src.format)) {
|
||||
if (!util_format_is_luminance(info->src.format)) {
|
||||
if (!nv50_2d_dst_format_ops_supported(info->dst.format))
|
||||
eng3d = TRUE;
|
||||
else
|
||||
if (util_format_is_intensity(info->src.format))
|
||||
eng3d = info->src.format != PIPE_FORMAT_I8_UNORM;
|
||||
else
|
||||
if (!nv50_2d_dst_format_ops_supported(info->dst.format))
|
||||
eng3d = TRUE;
|
||||
if (util_format_is_alpha(info->src.format))
|
||||
eng3d = info->src.format != PIPE_FORMAT_A8_UNORM;
|
||||
else
|
||||
eng3d = !nv50_2d_format_supported(info->src.format);
|
||||
}
|
||||
|
@@ -28,6 +28,7 @@
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <regex.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -528,7 +529,6 @@ void init_compiler(
|
||||
}
|
||||
|
||||
#define MAX_LINE_LENGTH 100
|
||||
#define MAX_PATH_LENGTH 100
|
||||
|
||||
unsigned load_program(
|
||||
struct radeon_compiler *c,
|
||||
@@ -536,14 +536,19 @@ unsigned load_program(
|
||||
const char *filename)
|
||||
{
|
||||
char line[MAX_LINE_LENGTH];
|
||||
char path[MAX_PATH_LENGTH];
|
||||
char path[PATH_MAX];
|
||||
FILE *file;
|
||||
unsigned *count;
|
||||
char **string_store;
|
||||
unsigned i = 0;
|
||||
int n;
|
||||
|
||||
memset(line, 0, sizeof(line));
|
||||
snprintf(path, MAX_PATH_LENGTH, TEST_PATH "/%s", filename);
|
||||
n = snprintf(path, PATH_MAX, TEST_PATH "/%s", filename);
|
||||
if (n < 0 || n >= PATH_MAX) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
file = fopen(path, "r");
|
||||
if (!file) {
|
||||
return 0;
|
||||
|
@@ -803,6 +803,15 @@ static void r300_blit(struct pipe_context *pipe,
|
||||
(struct pipe_framebuffer_state*)r300->fb_state.state;
|
||||
struct pipe_blit_info info = *blit;
|
||||
|
||||
/* The driver supports sRGB textures but not framebuffers. Blitting
|
||||
* from sRGB to sRGB should be the same as blitting from linear
|
||||
* to linear, so use that, This avoids incorrect linearization.
|
||||
*/
|
||||
if (util_format_is_srgb(info.src.format)) {
|
||||
info.src.format = util_format_linear(info.src.format);
|
||||
info.dst.format = util_format_linear(info.dst.format);
|
||||
}
|
||||
|
||||
/* MSAA resolve. */
|
||||
if (info.src.resource->nr_samples > 1 &&
|
||||
!util_format_is_depth_or_stencil(info.src.resource->format)) {
|
||||
|
@@ -170,24 +170,10 @@ static void get_external_state(
|
||||
}
|
||||
|
||||
state->unit[i].non_normalized_coords = !s->state.normalized_coords;
|
||||
state->unit[i].convert_unorm_to_snorm =
|
||||
v->base.format == PIPE_FORMAT_RGTC1_SNORM ||
|
||||
v->base.format == PIPE_FORMAT_LATC1_SNORM;
|
||||
state->unit[i].convert_unorm_to_snorm = 0;
|
||||
|
||||
/* Pass texture swizzling to the compiler, some lowering passes need it. */
|
||||
if (v->base.format == PIPE_FORMAT_RGTC1_SNORM ||
|
||||
v->base.format == PIPE_FORMAT_LATC1_SNORM) {
|
||||
unsigned char swizzle[4];
|
||||
|
||||
util_format_compose_swizzles(
|
||||
util_format_description(v->base.format)->swizzle,
|
||||
v->swizzle,
|
||||
swizzle);
|
||||
|
||||
state->unit[i].texture_swizzle =
|
||||
RC_MAKE_SWIZZLE(swizzle[0], swizzle[1],
|
||||
swizzle[2], swizzle[3]);
|
||||
} else if (state->unit[i].compare_mode_enabled) {
|
||||
if (state->unit[i].compare_mode_enabled) {
|
||||
state->unit[i].texture_swizzle =
|
||||
RC_MAKE_SWIZZLE(v->swizzle[0], v->swizzle[1],
|
||||
v->swizzle[2], v->swizzle[3]);
|
||||
|
@@ -169,20 +169,21 @@ uint32_t r300_translate_texformat(enum pipe_format format,
|
||||
|
||||
/* Add swizzling. */
|
||||
/* The RGTC1_SNORM and LATC1_SNORM swizzle is done in the shader. */
|
||||
if (format != PIPE_FORMAT_RGTC1_SNORM &&
|
||||
if (util_format_is_compressed(format) &&
|
||||
dxtc_swizzle &&
|
||||
format != PIPE_FORMAT_RGTC2_UNORM &&
|
||||
format != PIPE_FORMAT_RGTC2_SNORM &&
|
||||
format != PIPE_FORMAT_LATC2_UNORM &&
|
||||
format != PIPE_FORMAT_LATC2_SNORM &&
|
||||
format != PIPE_FORMAT_RGTC1_UNORM &&
|
||||
format != PIPE_FORMAT_RGTC1_SNORM &&
|
||||
format != PIPE_FORMAT_LATC1_UNORM &&
|
||||
format != PIPE_FORMAT_LATC1_SNORM) {
|
||||
if (util_format_is_compressed(format) &&
|
||||
dxtc_swizzle &&
|
||||
format != PIPE_FORMAT_RGTC2_UNORM &&
|
||||
format != PIPE_FORMAT_RGTC2_SNORM &&
|
||||
format != PIPE_FORMAT_LATC2_UNORM &&
|
||||
format != PIPE_FORMAT_LATC2_SNORM) {
|
||||
result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view,
|
||||
TRUE);
|
||||
} else {
|
||||
result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view,
|
||||
FALSE);
|
||||
}
|
||||
result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view,
|
||||
TRUE);
|
||||
} else {
|
||||
result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view,
|
||||
FALSE);
|
||||
}
|
||||
|
||||
/* S3TC formats. */
|
||||
@@ -213,6 +214,7 @@ uint32_t r300_translate_texformat(enum pipe_format format,
|
||||
switch (format) {
|
||||
case PIPE_FORMAT_RGTC1_SNORM:
|
||||
case PIPE_FORMAT_LATC1_SNORM:
|
||||
result |= sign_bit[0];
|
||||
case PIPE_FORMAT_LATC1_UNORM:
|
||||
case PIPE_FORMAT_RGTC1_UNORM:
|
||||
return R500_TX_FORMAT_ATI1N | result;
|
||||
@@ -936,14 +938,16 @@ static void r300_texture_setup_fb_state(struct r300_surface *surf)
|
||||
surf->pitch_zmask = tex->tex.zmask_stride_in_pixels[level];
|
||||
surf->pitch_hiz = tex->tex.hiz_stride_in_pixels[level];
|
||||
} else {
|
||||
enum pipe_format format = util_format_linear(surf->base.format);
|
||||
|
||||
surf->pitch =
|
||||
stride |
|
||||
r300_translate_colorformat(surf->base.format) |
|
||||
r300_translate_colorformat(format) |
|
||||
R300_COLOR_TILE(tex->tex.macrotile[level]) |
|
||||
R300_COLOR_MICROTILE(tex->tex.microtile);
|
||||
surf->format = r300_translate_out_fmt(surf->base.format);
|
||||
surf->format = r300_translate_out_fmt(format);
|
||||
surf->colormask_swizzle =
|
||||
r300_translate_colormask_swizzle(surf->base.format);
|
||||
r300_translate_colormask_swizzle(format);
|
||||
surf->pitch_cmask = tex->tex.cmask_stride_in_pixels;
|
||||
}
|
||||
}
|
||||
|
@@ -266,7 +266,7 @@ bool rp_gpr_tracker::try_reserve(alu_node* n) {
|
||||
|
||||
for (i = 0; i < nsrc; ++i) {
|
||||
value *v = n->src[i];
|
||||
if (v->is_readonly()) {
|
||||
if (v->is_readonly() || v->is_undef()) {
|
||||
const_count++;
|
||||
if (trans && const_count == 3)
|
||||
break;
|
||||
@@ -295,7 +295,7 @@ bool rp_gpr_tracker::try_reserve(alu_node* n) {
|
||||
if (need_unreserve && i--) {
|
||||
do {
|
||||
value *v = n->src[i];
|
||||
if (!v->is_readonly()) {
|
||||
if (!v->is_readonly() && !v->is_undef()) {
|
||||
if (i == 1 && opt)
|
||||
continue;
|
||||
unreserve(bs_cycle(trans, bs, i), n->bc.src[i].sel,
|
||||
|
@@ -80,10 +80,6 @@ void radeon_llvm_shader_type(LLVMValueRef F, unsigned type)
|
||||
sprintf(Str, "%1d", llvm_type);
|
||||
|
||||
LLVMAddTargetDependentFunctionAttr(F, "ShaderType", Str);
|
||||
|
||||
if (type != TGSI_PROCESSOR_COMPUTE) {
|
||||
LLVMAddTargetDependentFunctionAttr(F, "unsafe-fp-math", "true");
|
||||
}
|
||||
}
|
||||
|
||||
static void init_r600_target()
|
||||
|
@@ -748,7 +748,7 @@ static void txp_fetch_args(
|
||||
const struct tgsi_full_instruction * inst = emit_data->inst;
|
||||
LLVMValueRef src_w;
|
||||
unsigned chan;
|
||||
LLVMValueRef coords[4];
|
||||
LLVMValueRef coords[5];
|
||||
|
||||
emit_data->dst_type = LLVMVectorType(bld_base->base.elem_type, 4);
|
||||
src_w = lp_build_emit_fetch(bld_base, emit_data->inst, 0, TGSI_CHAN_W);
|
||||
|
@@ -1520,7 +1520,7 @@ static void tex_fetch_args(
|
||||
const struct tgsi_full_instruction * inst = emit_data->inst;
|
||||
unsigned opcode = inst->Instruction.Opcode;
|
||||
unsigned target = inst->Texture.Texture;
|
||||
LLVMValueRef coords[4];
|
||||
LLVMValueRef coords[5];
|
||||
LLVMValueRef address[16];
|
||||
int ref_pos;
|
||||
unsigned num_coords = tgsi_util_get_texture_coord_dim(target, &ref_pos);
|
||||
|
@@ -735,12 +735,16 @@ static void si_delete_rs_state(struct pipe_context *ctx, void *state)
|
||||
*/
|
||||
static void si_update_dsa_stencil_ref(struct si_context *sctx)
|
||||
{
|
||||
struct si_pm4_state *pm4 = CALLOC_STRUCT(si_pm4_state);
|
||||
struct si_pm4_state *pm4;
|
||||
struct pipe_stencil_ref *ref = &sctx->stencil_ref;
|
||||
struct si_state_dsa *dsa = sctx->queued.named.dsa;
|
||||
struct si_state_dsa *dsa = sctx->queued.named.dsa;
|
||||
|
||||
if (pm4 == NULL)
|
||||
return;
|
||||
if (!dsa)
|
||||
return;
|
||||
|
||||
pm4 = CALLOC_STRUCT(si_pm4_state);
|
||||
if (pm4 == NULL)
|
||||
return;
|
||||
|
||||
si_pm4_set_reg(pm4, R_028430_DB_STENCILREFMASK,
|
||||
S_028430_STENCILTESTVAL(ref->ref_value[0]) |
|
||||
|
@@ -367,24 +367,21 @@ void si_emit_cache_flush(struct r600_common_context *sctx, struct r600_atom *ato
|
||||
{
|
||||
struct radeon_winsys_cs *cs = sctx->rings.gfx.cs;
|
||||
uint32_t cp_coher_cntl = 0;
|
||||
uint32_t sqc_caches = 0;
|
||||
uint32_t compute =
|
||||
PKT3_SHADER_TYPE_S(!!(sctx->flags & SI_CONTEXT_FLAG_COMPUTE));
|
||||
|
||||
/* SI has a bug that it always flushes ICACHE and KCACHE if either
|
||||
* bit is set. An alternative way is to write SQC_CACHES. */
|
||||
if (sctx->chip_class == SI &&
|
||||
sctx->flags & BOTH_ICACHE_KCACHE &&
|
||||
(sctx->flags & BOTH_ICACHE_KCACHE) != BOTH_ICACHE_KCACHE) {
|
||||
sqc_caches =
|
||||
S_008C08_INST_INVALIDATE(!!(sctx->flags & SI_CONTEXT_INV_ICACHE)) |
|
||||
S_008C08_DATA_INVALIDATE(!!(sctx->flags & SI_CONTEXT_INV_KCACHE));
|
||||
} else {
|
||||
if (sctx->flags & SI_CONTEXT_INV_ICACHE)
|
||||
cp_coher_cntl |= S_0085F0_SH_ICACHE_ACTION_ENA(1);
|
||||
if (sctx->flags & SI_CONTEXT_INV_KCACHE)
|
||||
cp_coher_cntl |= S_0085F0_SH_KCACHE_ACTION_ENA(1);
|
||||
}
|
||||
* bit is set. An alternative way is to write SQC_CACHES, but that
|
||||
* doesn't seem to work reliably. Since the bug doesn't affect
|
||||
* correctness (it only does more work than necessary) and
|
||||
* the performance impact is likely negligible, there is no plan
|
||||
* to fix it.
|
||||
*/
|
||||
|
||||
if (sctx->flags & SI_CONTEXT_INV_ICACHE)
|
||||
cp_coher_cntl |= S_0085F0_SH_ICACHE_ACTION_ENA(1);
|
||||
if (sctx->flags & SI_CONTEXT_INV_KCACHE)
|
||||
cp_coher_cntl |= S_0085F0_SH_KCACHE_ACTION_ENA(1);
|
||||
|
||||
if (sctx->flags & SI_CONTEXT_INV_TC_L1)
|
||||
cp_coher_cntl |= S_0085F0_TCL1_ACTION_ENA(1);
|
||||
@@ -451,10 +448,6 @@ void si_emit_cache_flush(struct r600_common_context *sctx, struct r600_atom *ato
|
||||
* It looks like SURFACE_SYNC flushes caches immediately and doesn't
|
||||
* wait for any engines. This should be last.
|
||||
*/
|
||||
if (sqc_caches) {
|
||||
r600_write_config_reg(cs, R_008C08_SQC_CACHES, sqc_caches);
|
||||
cs->buf[cs->cdw-3] |= compute; /* set the compute bit in the header */
|
||||
}
|
||||
if (cp_coher_cntl) {
|
||||
if (sctx->chip_class >= CIK) {
|
||||
radeon_emit(cs, PKT3(PKT3_ACQUIRE_MEM, 5, 0) | compute);
|
||||
|
@@ -661,9 +661,11 @@ bcolor:
|
||||
}
|
||||
}
|
||||
|
||||
if (j == vsinfo->num_outputs) {
|
||||
/* No corresponding output found, load defaults into input */
|
||||
tmp |= S_028644_OFFSET(0x20);
|
||||
if (j == vsinfo->num_outputs && !G_028644_PT_SPRITE_TEX(tmp)) {
|
||||
/* No corresponding output found, load defaults into input.
|
||||
* Don't set any other bits.
|
||||
* (FLAT_SHADE=1 completely changes behavior) */
|
||||
tmp = S_028644_OFFSET(0x20);
|
||||
}
|
||||
|
||||
si_pm4_set_reg(pm4,
|
||||
|
@@ -175,7 +175,7 @@ namespace clover {
|
||||
virtual void unbind(exec_context &ctx);
|
||||
|
||||
private:
|
||||
size_t _storage;
|
||||
size_t _storage = 0;
|
||||
};
|
||||
|
||||
class constant_argument : public argument {
|
||||
|
@@ -52,6 +52,5 @@ x11_FILES := \
|
||||
x11/native_ximage.c
|
||||
|
||||
x11_drm_FILES := \
|
||||
x11/dri2.c \
|
||||
x11/x11_screen.c \
|
||||
x11/x11_screen.h
|
||||
|
@@ -39,7 +39,8 @@ else:
|
||||
'#/src/mapi',
|
||||
])
|
||||
sources.append(env.ParseSourceList('Makefile.sources', 'x11_FILES'))
|
||||
if env['drm']:
|
||||
if env['drm'] and False:
|
||||
# XXX: Disabled as we're don't generate the x11/dri2.c symlink at buildtime.
|
||||
env.Append(CPPDEFINES = ['GLX_DIRECT_RENDERING'])
|
||||
sources.append(env.ParseSourceList('Makefile.sources', 'x11_drm_FILES'))
|
||||
if env['drm'] and False:
|
||||
|
@@ -1 +0,0 @@
|
||||
../../../../glx/dri2.c
|
@@ -706,6 +706,11 @@ static void slice_header(vid_dec_PrivateType *priv, struct vl_rbsp *rbsp,
|
||||
if (pic_order_cnt_lsb != priv->codec_data.h264.pic_order_cnt_lsb)
|
||||
vid_dec_h264_EndFrame(priv);
|
||||
|
||||
if (IdrPicFlag) {
|
||||
priv->codec_data.h264.pic_order_cnt_msb = 0;
|
||||
priv->codec_data.h264.pic_order_cnt_lsb = 0;
|
||||
}
|
||||
|
||||
if ((pic_order_cnt_lsb < priv->codec_data.h264.pic_order_cnt_lsb) &&
|
||||
(priv->codec_data.h264.pic_order_cnt_lsb - pic_order_cnt_lsb) >= (max_pic_order_cnt_lsb / 2))
|
||||
pic_order_cnt_msb = priv->codec_data.h264.pic_order_cnt_msb + max_pic_order_cnt_lsb;
|
||||
|
@@ -44,7 +44,7 @@ gallium_dri_la_LIBADD = \
|
||||
$(top_builddir)/src/mesa/drivers/dri/common/libdricommon.la \
|
||||
$(top_builddir)/src/mesa/drivers/dri/common/libmegadriver_stub.la \
|
||||
$(top_builddir)/src/gallium/state_trackers/dri/libdri.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvl_stub.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvl.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
|
||||
$(top_builddir)/src/gallium/drivers/galahad/libgalahad.la \
|
||||
$(top_builddir)/src/gallium/drivers/noop/libnoop.la \
|
||||
|
@@ -24,6 +24,7 @@ endif # HAVE_LD_VERSION_SCRIPT
|
||||
|
||||
libomx_mesa_la_LIBADD = \
|
||||
$(top_builddir)/src/gallium/state_trackers/omx/libomxtracker.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvlwinsys.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvl.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
|
||||
$(top_builddir)/src/util/libmesautil.la \
|
||||
|
@@ -46,6 +46,11 @@ PIPE_LIBS += \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvl_stub.la
|
||||
endif
|
||||
|
||||
if NEED_GALLIUM_VL_WINSYS
|
||||
PIPE_LIBS+= \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvlwinsys.la
|
||||
endif
|
||||
|
||||
PIPE_LIBS += \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
|
||||
$(top_builddir)/src/util/libmesautil.la \
|
||||
|
@@ -25,6 +25,7 @@ endif # HAVE_LD_VERSION_SCRIPT
|
||||
# NOTE: gallium_drv_video does not use(link against) libva
|
||||
gallium_drv_video_la_LIBADD = \
|
||||
$(top_builddir)/src/gallium/state_trackers/va/libvatracker.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvlwinsys.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvl.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
|
||||
$(top_builddir)/src/util/libmesautil.la \
|
||||
|
@@ -30,6 +30,7 @@ endif # HAVE_LD_DYNAMIC_LIST
|
||||
# NOTE: libvdpau_gallium does not use(link against) libvdpau
|
||||
libvdpau_gallium_la_LIBADD = \
|
||||
$(top_builddir)/src/gallium/state_trackers/vdpau/libvdpautracker.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvlwinsys.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvl.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
|
||||
$(top_builddir)/src/util/libmesautil.la \
|
||||
|
@@ -24,6 +24,7 @@ endif # HAVE_LD_VERSION_SCRIPT
|
||||
|
||||
libXvMCgallium_la_LIBADD = \
|
||||
$(top_builddir)/src/gallium/state_trackers/xvmc/libxvmctracker.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvlwinsys.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvl.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
|
||||
$(top_builddir)/src/util/libmesautil.la \
|
||||
|
@@ -240,7 +240,7 @@ nir/nir_opcodes.h: nir/nir_opcodes.py nir/nir_opcodes_h.py
|
||||
$(MKDIR_P) nir; \
|
||||
$(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/nir/nir_opcodes_h.py > $@
|
||||
|
||||
nir/nir.h: $(top_builddir)/src/glsl/nir/nir_opcodes.h
|
||||
nir/nir.h: nir/nir_opcodes.h
|
||||
|
||||
nir/nir_opcodes.c: nir/nir_opcodes.py nir/nir_opcodes_c.py
|
||||
$(MKDIR_P) nir; \
|
||||
|
@@ -21,6 +21,7 @@ NIR_FILES = \
|
||||
nir/glsl_to_nir.h \
|
||||
nir/nir.c \
|
||||
nir/nir.h \
|
||||
nir/nir_constant_expressions.h \
|
||||
nir/nir_dominance.c \
|
||||
nir/nir_from_ssa.c \
|
||||
nir/nir_intrinsics.c \
|
||||
|
@@ -1603,6 +1603,12 @@ ast_expression::do_hir(exec_list *instructions,
|
||||
&& cond_val != NULL) {
|
||||
result = cond_val->value.b[0] ? op[1] : op[2];
|
||||
} else {
|
||||
/* The copy to conditional_tmp reads the whole array. */
|
||||
if (type->is_array()) {
|
||||
mark_whole_array_access(op[1]);
|
||||
mark_whole_array_access(op[2]);
|
||||
}
|
||||
|
||||
ir_variable *const tmp =
|
||||
new(ctx) ir_variable(type, "conditional_tmp", ir_var_temporary);
|
||||
instructions->push_tail(tmp);
|
||||
|
@@ -110,39 +110,39 @@ DECL_TYPE(sampler2DRectShadow, GL_SAMPLER_2D_RECT_SHADOW, GLSL_TYPE_SA
|
||||
|
||||
DECL_TYPE(samplerExternalOES, GL_SAMPLER_EXTERNAL_OES, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_EXTERNAL, 0, 0, GLSL_TYPE_FLOAT)
|
||||
|
||||
DECL_TYPE(image1D, GL_IMAGE_1D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_FLOAT);
|
||||
DECL_TYPE(image2D, GL_IMAGE_2D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_FLOAT);
|
||||
DECL_TYPE(image3D, GL_IMAGE_3D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_FLOAT);
|
||||
DECL_TYPE(image2DRect, GL_IMAGE_2D_RECT, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_FLOAT);
|
||||
DECL_TYPE(imageCube, GL_IMAGE_CUBE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_FLOAT);
|
||||
DECL_TYPE(imageBuffer, GL_IMAGE_BUFFER, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_FLOAT);
|
||||
DECL_TYPE(image1DArray, GL_IMAGE_1D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_FLOAT);
|
||||
DECL_TYPE(image2DArray, GL_IMAGE_2D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_FLOAT);
|
||||
DECL_TYPE(imageCubeArray, GL_IMAGE_CUBE_MAP_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_FLOAT);
|
||||
DECL_TYPE(image2DMS, GL_IMAGE_2D_MULTISAMPLE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_FLOAT);
|
||||
DECL_TYPE(image2DMSArray, GL_IMAGE_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_FLOAT);
|
||||
DECL_TYPE(iimage1D, GL_INT_IMAGE_1D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_INT);
|
||||
DECL_TYPE(iimage2D, GL_INT_IMAGE_2D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_INT);
|
||||
DECL_TYPE(iimage3D, GL_INT_IMAGE_3D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_INT);
|
||||
DECL_TYPE(iimage2DRect, GL_INT_IMAGE_2D_RECT, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_INT);
|
||||
DECL_TYPE(iimageCube, GL_INT_IMAGE_CUBE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_INT);
|
||||
DECL_TYPE(iimageBuffer, GL_INT_IMAGE_BUFFER, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_INT);
|
||||
DECL_TYPE(iimage1DArray, GL_INT_IMAGE_1D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_INT);
|
||||
DECL_TYPE(iimage2DArray, GL_INT_IMAGE_2D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_INT);
|
||||
DECL_TYPE(iimageCubeArray, GL_INT_IMAGE_CUBE_MAP_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_INT);
|
||||
DECL_TYPE(iimage2DMS, GL_INT_IMAGE_2D_MULTISAMPLE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_INT);
|
||||
DECL_TYPE(iimage2DMSArray, GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_INT);
|
||||
DECL_TYPE(uimage1D, GL_UNSIGNED_INT_IMAGE_1D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_UINT);
|
||||
DECL_TYPE(uimage2D, GL_UNSIGNED_INT_IMAGE_2D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_UINT);
|
||||
DECL_TYPE(uimage3D, GL_UNSIGNED_INT_IMAGE_3D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_UINT);
|
||||
DECL_TYPE(uimage2DRect, GL_UNSIGNED_INT_IMAGE_2D_RECT, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_UINT);
|
||||
DECL_TYPE(uimageCube, GL_UNSIGNED_INT_IMAGE_CUBE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_UINT);
|
||||
DECL_TYPE(uimageBuffer, GL_UNSIGNED_INT_IMAGE_BUFFER, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_UINT);
|
||||
DECL_TYPE(uimage1DArray, GL_UNSIGNED_INT_IMAGE_1D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_UINT);
|
||||
DECL_TYPE(uimage2DArray, GL_UNSIGNED_INT_IMAGE_2D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_UINT);
|
||||
DECL_TYPE(uimageCubeArray, GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_UINT);
|
||||
DECL_TYPE(uimage2DMS, GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_UINT);
|
||||
DECL_TYPE(uimage2DMSArray, GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_UINT);
|
||||
DECL_TYPE(image1D, GL_IMAGE_1D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_FLOAT)
|
||||
DECL_TYPE(image2D, GL_IMAGE_2D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_FLOAT)
|
||||
DECL_TYPE(image3D, GL_IMAGE_3D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_FLOAT)
|
||||
DECL_TYPE(image2DRect, GL_IMAGE_2D_RECT, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_FLOAT)
|
||||
DECL_TYPE(imageCube, GL_IMAGE_CUBE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_FLOAT)
|
||||
DECL_TYPE(imageBuffer, GL_IMAGE_BUFFER, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_FLOAT)
|
||||
DECL_TYPE(image1DArray, GL_IMAGE_1D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_FLOAT)
|
||||
DECL_TYPE(image2DArray, GL_IMAGE_2D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_FLOAT)
|
||||
DECL_TYPE(imageCubeArray, GL_IMAGE_CUBE_MAP_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_FLOAT)
|
||||
DECL_TYPE(image2DMS, GL_IMAGE_2D_MULTISAMPLE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_FLOAT)
|
||||
DECL_TYPE(image2DMSArray, GL_IMAGE_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_FLOAT)
|
||||
DECL_TYPE(iimage1D, GL_INT_IMAGE_1D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_INT)
|
||||
DECL_TYPE(iimage2D, GL_INT_IMAGE_2D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_INT)
|
||||
DECL_TYPE(iimage3D, GL_INT_IMAGE_3D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_INT)
|
||||
DECL_TYPE(iimage2DRect, GL_INT_IMAGE_2D_RECT, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_INT)
|
||||
DECL_TYPE(iimageCube, GL_INT_IMAGE_CUBE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_INT)
|
||||
DECL_TYPE(iimageBuffer, GL_INT_IMAGE_BUFFER, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_INT)
|
||||
DECL_TYPE(iimage1DArray, GL_INT_IMAGE_1D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_INT)
|
||||
DECL_TYPE(iimage2DArray, GL_INT_IMAGE_2D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_INT)
|
||||
DECL_TYPE(iimageCubeArray, GL_INT_IMAGE_CUBE_MAP_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_INT)
|
||||
DECL_TYPE(iimage2DMS, GL_INT_IMAGE_2D_MULTISAMPLE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_INT)
|
||||
DECL_TYPE(iimage2DMSArray, GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_INT)
|
||||
DECL_TYPE(uimage1D, GL_UNSIGNED_INT_IMAGE_1D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_UINT)
|
||||
DECL_TYPE(uimage2D, GL_UNSIGNED_INT_IMAGE_2D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_UINT)
|
||||
DECL_TYPE(uimage3D, GL_UNSIGNED_INT_IMAGE_3D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_UINT)
|
||||
DECL_TYPE(uimage2DRect, GL_UNSIGNED_INT_IMAGE_2D_RECT, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_UINT)
|
||||
DECL_TYPE(uimageCube, GL_UNSIGNED_INT_IMAGE_CUBE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_UINT)
|
||||
DECL_TYPE(uimageBuffer, GL_UNSIGNED_INT_IMAGE_BUFFER, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_UINT)
|
||||
DECL_TYPE(uimage1DArray, GL_UNSIGNED_INT_IMAGE_1D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_UINT)
|
||||
DECL_TYPE(uimage2DArray, GL_UNSIGNED_INT_IMAGE_2D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_UINT)
|
||||
DECL_TYPE(uimageCubeArray, GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_UINT)
|
||||
DECL_TYPE(uimage2DMS, GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_UINT)
|
||||
DECL_TYPE(uimage2DMSArray, GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_UINT)
|
||||
|
||||
DECL_TYPE(atomic_uint, GL_UNSIGNED_INT_ATOMIC_COUNTER, GLSL_TYPE_ATOMIC_UINT, 1, 1)
|
||||
|
||||
|
@@ -44,7 +44,7 @@ static int isnormal(double x)
|
||||
{
|
||||
return _fpclass(x) == _FPCLASS_NN || _fpclass(x) == _FPCLASS_PN;
|
||||
}
|
||||
#elif defined(__SUNPRO_CC)
|
||||
#elif defined(__SUNPRO_CC) && !defined(isnormal)
|
||||
#include <ieeefp.h>
|
||||
static int isnormal(double x)
|
||||
{
|
||||
|
@@ -1364,24 +1364,13 @@ link_fs_input_layout_qualifiers(struct gl_shader_program *prog,
|
||||
* "If gl_FragCoord is redeclared in any fragment shader in a program,
|
||||
* it must be redeclared in all the fragment shaders in that program
|
||||
* that have a static use gl_FragCoord."
|
||||
*
|
||||
* Exclude the case when one of the 'linked_shader' or 'shader' redeclares
|
||||
* gl_FragCoord with no layout qualifiers but the other one doesn't
|
||||
* redeclare it. If we strictly follow GLSL 1.50 spec's language, it
|
||||
* should be a link error. But, generating link error for this case will
|
||||
* be a wrong behaviour which spec didn't intend to do and it could also
|
||||
* break some applications.
|
||||
*/
|
||||
if ((linked_shader->redeclares_gl_fragcoord
|
||||
&& !shader->redeclares_gl_fragcoord
|
||||
&& shader->uses_gl_fragcoord
|
||||
&& (linked_shader->origin_upper_left
|
||||
|| linked_shader->pixel_center_integer))
|
||||
&& shader->uses_gl_fragcoord)
|
||||
|| (shader->redeclares_gl_fragcoord
|
||||
&& !linked_shader->redeclares_gl_fragcoord
|
||||
&& linked_shader->uses_gl_fragcoord
|
||||
&& (shader->origin_upper_left
|
||||
|| shader->pixel_center_integer))) {
|
||||
&& linked_shader->uses_gl_fragcoord)) {
|
||||
linker_error(prog, "fragment shader defined with conflicting "
|
||||
"layout qualifiers for gl_FragCoord\n");
|
||||
}
|
||||
|
@@ -49,7 +49,6 @@ public:
|
||||
{
|
||||
instructions = insts;
|
||||
progress = false;
|
||||
index = 0;
|
||||
}
|
||||
|
||||
bool run()
|
||||
@@ -63,7 +62,6 @@ public:
|
||||
private:
|
||||
exec_list *instructions;
|
||||
bool progress;
|
||||
unsigned index;
|
||||
};
|
||||
|
||||
void
|
||||
@@ -82,7 +80,7 @@ lower_const_array_visitor::handle_rvalue(ir_rvalue **rvalue)
|
||||
|
||||
void *mem_ctx = ralloc_parent(con);
|
||||
|
||||
char *uniform_name = ralloc_asprintf(mem_ctx, "constarray__%d", index++);
|
||||
char *uniform_name = ralloc_asprintf(mem_ctx, "constarray__%p", dra);
|
||||
|
||||
ir_variable *uni =
|
||||
new(mem_ctx) ir_variable(con->type, uniform_name, ir_var_uniform);
|
||||
|
@@ -578,9 +578,18 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
|
||||
if (!is_vec_zero(zero))
|
||||
continue;
|
||||
|
||||
return new(mem_ctx) ir_expression(ir->operation,
|
||||
add->operands[0],
|
||||
neg(add->operands[1]));
|
||||
/* Depending of the zero position we want to optimize
|
||||
* (0 cmp x+y) into (-x cmp y) or (x+y cmp 0) into (x cmp -y)
|
||||
*/
|
||||
if (add_pos == 1) {
|
||||
return new(mem_ctx) ir_expression(ir->operation,
|
||||
neg(add->operands[0]),
|
||||
add->operands[1]);
|
||||
} else {
|
||||
return new(mem_ctx) ir_expression(ir->operation,
|
||||
add->operands[0],
|
||||
neg(add->operands[1]));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -696,48 +705,65 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
|
||||
* a saturate operation
|
||||
*/
|
||||
for (int op = 0; op < 2; op++) {
|
||||
ir_expression *minmax = op_expr[op];
|
||||
ir_expression *inner_expr = op_expr[op];
|
||||
ir_constant *outer_const = op_const[1 - op];
|
||||
ir_expression_operation op_cond = (ir->operation == ir_binop_max) ?
|
||||
ir_binop_min : ir_binop_max;
|
||||
|
||||
if (!minmax || !outer_const || (minmax->operation != op_cond))
|
||||
if (!inner_expr || !outer_const || (inner_expr->operation != op_cond))
|
||||
continue;
|
||||
|
||||
/* One of these has to be a constant */
|
||||
if (!inner_expr->operands[0]->as_constant() &&
|
||||
!inner_expr->operands[1]->as_constant())
|
||||
break;
|
||||
|
||||
/* Found a min(max) combination. Now try to see if its operands
|
||||
* meet our conditions that we can do just a single saturate operation
|
||||
*/
|
||||
for (int minmax_op = 0; minmax_op < 2; minmax_op++) {
|
||||
ir_rvalue *inner_val_a = minmax->operands[minmax_op];
|
||||
ir_rvalue *inner_val_b = minmax->operands[1 - minmax_op];
|
||||
ir_rvalue *x = inner_expr->operands[minmax_op];
|
||||
ir_rvalue *y = inner_expr->operands[1 - minmax_op];
|
||||
|
||||
if (!inner_val_a || !inner_val_b)
|
||||
ir_constant *inner_const = y->as_constant();
|
||||
if (!inner_const)
|
||||
continue;
|
||||
|
||||
/* Found a {min|max} ({max|min} (x, 0.0), 1.0) operation and its variations */
|
||||
if ((outer_const->is_one() && inner_val_a->is_zero()) ||
|
||||
(inner_val_a->is_one() && outer_const->is_zero()))
|
||||
return saturate(inner_val_b);
|
||||
/* min(max(x, 0.0), 1.0) is sat(x) */
|
||||
if (ir->operation == ir_binop_min &&
|
||||
inner_const->is_zero() &&
|
||||
outer_const->is_one())
|
||||
return saturate(x);
|
||||
|
||||
/* Found a {min|max} ({max|min} (x, 0.0), b) where b < 1.0
|
||||
* and its variations
|
||||
*/
|
||||
if (is_less_than_one(outer_const) && inner_val_b->is_zero())
|
||||
return expr(ir_binop_min, saturate(inner_val_a), outer_const);
|
||||
/* max(min(x, 1.0), 0.0) is sat(x) */
|
||||
if (ir->operation == ir_binop_max &&
|
||||
inner_const->is_one() &&
|
||||
outer_const->is_zero())
|
||||
return saturate(x);
|
||||
|
||||
if (!inner_val_b->as_constant())
|
||||
continue;
|
||||
/* min(max(x, 0.0), b) where b < 1.0 is sat(min(x, b)) */
|
||||
if (ir->operation == ir_binop_min &&
|
||||
inner_const->is_zero() &&
|
||||
is_less_than_one(outer_const))
|
||||
return saturate(expr(ir_binop_min, x, outer_const));
|
||||
|
||||
if (is_less_than_one(inner_val_b->as_constant()) && outer_const->is_zero())
|
||||
return expr(ir_binop_min, saturate(inner_val_a), inner_val_b);
|
||||
/* max(min(x, b), 0.0) where b < 1.0 is sat(min(x, b)) */
|
||||
if (ir->operation == ir_binop_max &&
|
||||
is_less_than_one(inner_const) &&
|
||||
outer_const->is_zero())
|
||||
return saturate(expr(ir_binop_min, x, inner_const));
|
||||
|
||||
/* Found a {min|max} ({max|min} (x, b), 1.0), where b > 0.0
|
||||
* and its variations
|
||||
*/
|
||||
if (outer_const->is_one() && is_greater_than_zero(inner_val_b->as_constant()))
|
||||
return expr(ir_binop_max, saturate(inner_val_a), inner_val_b);
|
||||
if (inner_val_b->as_constant()->is_one() && is_greater_than_zero(outer_const))
|
||||
return expr(ir_binop_max, saturate(inner_val_a), outer_const);
|
||||
/* max(min(x, 1.0), b) where b > 0.0 is sat(max(x, b)) */
|
||||
if (ir->operation == ir_binop_max &&
|
||||
inner_const->is_one() &&
|
||||
is_greater_than_zero(outer_const))
|
||||
return saturate(expr(ir_binop_max, x, outer_const));
|
||||
|
||||
/* min(max(x, b), 1.0) where b > 0.0 is sat(max(x, b)) */
|
||||
if (ir->operation == ir_binop_min &&
|
||||
is_greater_than_zero(inner_const) &&
|
||||
outer_const->is_one())
|
||||
return saturate(expr(ir_binop_max, x, inner_const));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -128,6 +128,9 @@ ir_copy_propagation_visitor::visit_enter(ir_function_signature *ir)
|
||||
|
||||
visit_list_elements(this, &ir->body);
|
||||
|
||||
ralloc_free(this->acp);
|
||||
ralloc_free(this->kills);
|
||||
|
||||
this->kills = orig_kills;
|
||||
this->acp = orig_acp;
|
||||
this->killed_all = orig_killed_all;
|
||||
@@ -215,7 +218,7 @@ ir_copy_propagation_visitor::handle_if_block(exec_list *instructions)
|
||||
|
||||
/* Populate the initial acp with a copy of the original */
|
||||
foreach_in_list(acp_entry, a, orig_acp) {
|
||||
this->acp->push_tail(new(this->mem_ctx) acp_entry(a->lhs, a->rhs));
|
||||
this->acp->push_tail(new(this->acp) acp_entry(a->lhs, a->rhs));
|
||||
}
|
||||
|
||||
visit_list_elements(this, instructions);
|
||||
@@ -226,12 +229,15 @@ ir_copy_propagation_visitor::handle_if_block(exec_list *instructions)
|
||||
|
||||
exec_list *new_kills = this->kills;
|
||||
this->kills = orig_kills;
|
||||
ralloc_free(this->acp);
|
||||
this->acp = orig_acp;
|
||||
this->killed_all = this->killed_all || orig_killed_all;
|
||||
|
||||
foreach_in_list(kill_entry, k, new_kills) {
|
||||
kill(k->var);
|
||||
}
|
||||
|
||||
ralloc_free(new_kills);
|
||||
}
|
||||
|
||||
ir_visitor_status
|
||||
@@ -269,6 +275,7 @@ ir_copy_propagation_visitor::visit_enter(ir_loop *ir)
|
||||
|
||||
exec_list *new_kills = this->kills;
|
||||
this->kills = orig_kills;
|
||||
ralloc_free(this->acp);
|
||||
this->acp = orig_acp;
|
||||
this->killed_all = this->killed_all || orig_killed_all;
|
||||
|
||||
@@ -276,6 +283,8 @@ ir_copy_propagation_visitor::visit_enter(ir_loop *ir)
|
||||
kill(k->var);
|
||||
}
|
||||
|
||||
ralloc_free(new_kills);
|
||||
|
||||
/* already descended into the children. */
|
||||
return visit_continue_with_parent;
|
||||
}
|
||||
@@ -294,7 +303,7 @@ ir_copy_propagation_visitor::kill(ir_variable *var)
|
||||
|
||||
/* Add the LHS variable to the list of killed variables in this block.
|
||||
*/
|
||||
this->kills->push_tail(new(this->mem_ctx) kill_entry(var));
|
||||
this->kills->push_tail(new(this->kills) kill_entry(var));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -322,7 +331,7 @@ ir_copy_propagation_visitor::add_copy(ir_assignment *ir)
|
||||
ir->condition = new(ralloc_parent(ir)) ir_constant(false);
|
||||
this->progress = true;
|
||||
} else {
|
||||
entry = new(this->mem_ctx) acp_entry(lhs_var, rhs_var);
|
||||
entry = new(this->acp) acp_entry(lhs_var, rhs_var);
|
||||
this->acp->push_tail(entry);
|
||||
}
|
||||
}
|
||||
|
@@ -156,6 +156,9 @@ ir_copy_propagation_elements_visitor::visit_enter(ir_function_signature *ir)
|
||||
|
||||
visit_list_elements(this, &ir->body);
|
||||
|
||||
ralloc_free(this->acp);
|
||||
ralloc_free(this->kills);
|
||||
|
||||
this->kills = orig_kills;
|
||||
this->acp = orig_acp;
|
||||
this->killed_all = orig_killed_all;
|
||||
@@ -173,9 +176,9 @@ ir_copy_propagation_elements_visitor::visit_leave(ir_assignment *ir)
|
||||
kill_entry *k;
|
||||
|
||||
if (lhs)
|
||||
k = new(mem_ctx) kill_entry(var, ir->write_mask);
|
||||
k = new(this->kills) kill_entry(var, ir->write_mask);
|
||||
else
|
||||
k = new(mem_ctx) kill_entry(var, ~0);
|
||||
k = new(this->kills) kill_entry(var, ~0);
|
||||
|
||||
kill(k);
|
||||
}
|
||||
@@ -334,7 +337,7 @@ ir_copy_propagation_elements_visitor::handle_if_block(exec_list *instructions)
|
||||
|
||||
/* Populate the initial acp with a copy of the original */
|
||||
foreach_in_list(acp_entry, a, orig_acp) {
|
||||
this->acp->push_tail(new(this->mem_ctx) acp_entry(a));
|
||||
this->acp->push_tail(new(this->acp) acp_entry(a));
|
||||
}
|
||||
|
||||
visit_list_elements(this, instructions);
|
||||
@@ -345,6 +348,7 @@ ir_copy_propagation_elements_visitor::handle_if_block(exec_list *instructions)
|
||||
|
||||
exec_list *new_kills = this->kills;
|
||||
this->kills = orig_kills;
|
||||
ralloc_free(this->acp);
|
||||
this->acp = orig_acp;
|
||||
this->killed_all = this->killed_all || orig_killed_all;
|
||||
|
||||
@@ -354,6 +358,8 @@ ir_copy_propagation_elements_visitor::handle_if_block(exec_list *instructions)
|
||||
foreach_in_list_safe(kill_entry, k, new_kills) {
|
||||
kill(k);
|
||||
}
|
||||
|
||||
ralloc_free(new_kills);
|
||||
}
|
||||
|
||||
ir_visitor_status
|
||||
@@ -391,6 +397,7 @@ ir_copy_propagation_elements_visitor::visit_enter(ir_loop *ir)
|
||||
|
||||
exec_list *new_kills = this->kills;
|
||||
this->kills = orig_kills;
|
||||
ralloc_free(this->acp);
|
||||
this->acp = orig_acp;
|
||||
this->killed_all = this->killed_all || orig_killed_all;
|
||||
|
||||
@@ -398,6 +405,8 @@ ir_copy_propagation_elements_visitor::visit_enter(ir_loop *ir)
|
||||
kill(k);
|
||||
}
|
||||
|
||||
ralloc_free(new_kills);
|
||||
|
||||
/* already descended into the children. */
|
||||
return visit_continue_with_parent;
|
||||
}
|
||||
@@ -423,6 +432,7 @@ ir_copy_propagation_elements_visitor::kill(kill_entry *k)
|
||||
if (k->next)
|
||||
k->remove();
|
||||
|
||||
ralloc_steal(this->kills, k);
|
||||
this->kills->push_tail(k);
|
||||
}
|
||||
|
||||
|
@@ -3,6 +3,7 @@ EXTRA_DIST = RELEASE_NOTES
|
||||
noinst_LTLIBRARIES = libappleglx.la
|
||||
|
||||
AM_CFLAGS = \
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_srcdir)/src/glx \
|
||||
-I$(top_srcdir)/src/mesa \
|
||||
|
@@ -65,10 +65,23 @@ dri2_convert_glx_query_renderer_attribs(int attribute)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Convert internal dri context profile bits into GLX context profile bits */
|
||||
static inline void
|
||||
dri_convert_context_profile_bits(int attribute, unsigned int *value)
|
||||
{
|
||||
if (attribute == GLX_RENDERER_PREFERRED_PROFILE_MESA) {
|
||||
if (value[0] == (1U << __DRI_API_OPENGL_CORE))
|
||||
value[0] = GLX_CONTEXT_CORE_PROFILE_BIT_ARB;
|
||||
else if (value[0] == (1U << __DRI_API_OPENGL))
|
||||
value[0] = GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB;
|
||||
}
|
||||
}
|
||||
|
||||
_X_HIDDEN int
|
||||
dri2_query_renderer_integer(struct glx_screen *base, int attribute,
|
||||
unsigned int *value)
|
||||
{
|
||||
int ret;
|
||||
struct dri2_screen *const psc = (struct dri2_screen *) base;
|
||||
|
||||
/* Even though there are invalid values (and
|
||||
@@ -81,8 +94,11 @@ dri2_query_renderer_integer(struct glx_screen *base, int attribute,
|
||||
if (psc->rendererQuery == NULL)
|
||||
return -1;
|
||||
|
||||
return psc->rendererQuery->queryInteger(psc->driScreen, dri_attribute,
|
||||
value);
|
||||
ret = psc->rendererQuery->queryInteger(psc->driScreen, dri_attribute,
|
||||
value);
|
||||
dri_convert_context_profile_bits(attribute, value);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
_X_HIDDEN int
|
||||
@@ -108,6 +124,7 @@ _X_HIDDEN int
|
||||
dri3_query_renderer_integer(struct glx_screen *base, int attribute,
|
||||
unsigned int *value)
|
||||
{
|
||||
int ret;
|
||||
struct dri3_screen *const psc = (struct dri3_screen *) base;
|
||||
|
||||
/* Even though there are invalid values (and
|
||||
@@ -120,8 +137,11 @@ dri3_query_renderer_integer(struct glx_screen *base, int attribute,
|
||||
if (psc->rendererQuery == NULL)
|
||||
return -1;
|
||||
|
||||
return psc->rendererQuery->queryInteger(psc->driScreen, dri_attribute,
|
||||
value);
|
||||
ret = psc->rendererQuery->queryInteger(psc->driScreen, dri_attribute,
|
||||
value);
|
||||
dri_convert_context_profile_bits(attribute, value);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
_X_HIDDEN int
|
||||
@@ -147,6 +167,7 @@ _X_HIDDEN int
|
||||
drisw_query_renderer_integer(struct glx_screen *base, int attribute,
|
||||
unsigned int *value)
|
||||
{
|
||||
int ret;
|
||||
struct drisw_screen *const psc = (struct drisw_screen *) base;
|
||||
|
||||
/* Even though there are invalid values (and
|
||||
@@ -159,8 +180,11 @@ drisw_query_renderer_integer(struct glx_screen *base, int attribute,
|
||||
if (psc->rendererQuery == NULL)
|
||||
return -1;
|
||||
|
||||
return psc->rendererQuery->queryInteger(psc->driScreen, dri_attribute,
|
||||
value);
|
||||
ret = psc->rendererQuery->queryInteger(psc->driScreen, dri_attribute,
|
||||
value);
|
||||
dri_convert_context_profile_bits(attribute, value);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
_X_HIDDEN int
|
||||
|
@@ -143,8 +143,13 @@ __glXWireToEvent(Display *dpy, XEvent *event, xEvent *wire)
|
||||
aevent->ust = ((CARD64)awire->ust_hi << 32) | awire->ust_lo;
|
||||
aevent->msc = ((CARD64)awire->msc_hi << 32) | awire->msc_lo;
|
||||
|
||||
if (awire->sbc < glxDraw->lastEventSbc)
|
||||
glxDraw->eventSbcWrap += 0x100000000;
|
||||
/* Handle 32-Bit wire sbc wraparound in both directions to cope with out
|
||||
* of sequence 64-Bit sbc's
|
||||
*/
|
||||
if ((int64_t) awire->sbc < ((int64_t) glxDraw->lastEventSbc - 0x40000000))
|
||||
glxDraw->eventSbcWrap += 0x100000000;
|
||||
if ((int64_t) awire->sbc > ((int64_t) glxDraw->lastEventSbc + 0x40000000))
|
||||
glxDraw->eventSbcWrap -= 0x100000000;
|
||||
glxDraw->lastEventSbc = awire->sbc;
|
||||
aevent->sbc = awire->sbc + glxDraw->eventSbcWrap;
|
||||
return True;
|
||||
|
@@ -221,7 +221,10 @@ DRI_glXUseXFont(struct glx_context *CC, Font font, int first, int count, int lis
|
||||
XGCValues values;
|
||||
unsigned long valuemask;
|
||||
XFontStruct *fs;
|
||||
|
||||
#if !defined(GLX_USE_APPLEGL)
|
||||
__GLXDRIdrawable *glxdraw;
|
||||
#endif
|
||||
|
||||
GLint swapbytes, lsbfirst, rowlength;
|
||||
GLint skiprows, skippixels, alignment;
|
||||
@@ -234,9 +237,11 @@ DRI_glXUseXFont(struct glx_context *CC, Font font, int first, int count, int lis
|
||||
dpy = CC->currentDpy;
|
||||
win = CC->currentDrawable;
|
||||
|
||||
#if !defined(GLX_USE_APPLEGL)
|
||||
glxdraw = GetGLXDRIDrawable(CC->currentDpy, CC->currentDrawable);
|
||||
if (glxdraw)
|
||||
win = glxdraw->xDrawable;
|
||||
#endif
|
||||
|
||||
fs = XQueryFont(dpy, font);
|
||||
if (!fs) {
|
||||
|
@@ -64,6 +64,7 @@
|
||||
* Rob Clark <robclark@freedesktop.org>
|
||||
*/
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@@ -80,7 +81,6 @@
|
||||
#endif
|
||||
#endif
|
||||
#ifdef HAVE_SYSFS
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#include "loader.h"
|
||||
|
@@ -66,7 +66,7 @@ if HAVE_SHARED_GLAPI
|
||||
BUILT_SOURCES += shared-glapi/glapi_mapi_tmp.h
|
||||
|
||||
lib_LTLIBRARIES += shared-glapi/libglapi.la
|
||||
shared_glapi_libglapi_la_SOURCES = $(MAPI_GLAPI_FILES)
|
||||
shared_glapi_libglapi_la_SOURCES = $(MAPI_GLAPI_FILES) shared-glapi/glapi_mapi_tmp.h
|
||||
shared_glapi_libglapi_la_CPPFLAGS = \
|
||||
$(AM_CPPFLAGS) \
|
||||
-DMAPI_MODE_GLAPI \
|
||||
@@ -115,7 +115,7 @@ glapi_libglapi_la_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src/mesa
|
||||
|
||||
if HAVE_SHARED_GLAPI
|
||||
glapi_libglapi_la_SOURCES += $(MAPI_BRIDGE_FILES)
|
||||
glapi_libglapi_la_SOURCES += $(MAPI_BRIDGE_FILES) glapi/glapi_mapi_tmp.h
|
||||
glapi_libglapi_la_CPPFLAGS += \
|
||||
-DMAPI_MODE_BRIDGE \
|
||||
-DMAPI_ABI_HEADER=\"glapi/glapi_mapi_tmp.h\"
|
||||
|
@@ -110,7 +110,7 @@ stub_add_dynamic(const char *name)
|
||||
if (!stub->addr)
|
||||
return NULL;
|
||||
|
||||
stub->name = (const void *) name;
|
||||
stub->name = (const void *) strdup(name);
|
||||
/* to be fixed later */
|
||||
stub->slot = -1;
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user