Compare commits
162 Commits
chadv/wip/
...
mesa-10.6.
Author | SHA1 | Date | |
---|---|---|---|
|
ddc976368f | ||
|
2eef0b7d86 | ||
|
954c18fb5c | ||
|
2a77b82a92 | ||
|
7efc693ef2 | ||
|
440f465f5f | ||
|
9656b34fae | ||
|
329763791b | ||
|
8132c7ac41 | ||
|
da8bc16739 | ||
|
6012eeca0b | ||
|
9c7f594705 | ||
|
9e62e1a1d3 | ||
|
4a3d6d04e1 | ||
|
9850b9ca73 | ||
|
89cbd91b17 | ||
|
9643cce94c | ||
|
187f919c90 | ||
|
5e92541945 | ||
|
6b6e14ac35 | ||
|
25daf2592c | ||
|
b85e389d6c | ||
|
57a6f5208d | ||
|
f3abea1577 | ||
|
6fbe4bf790 | ||
|
4c3a4ac6da | ||
|
2ca2f3701b | ||
|
fcc9f9e06e | ||
|
5de0e9f982 | ||
|
083840d365 | ||
|
afa43fa696 | ||
|
03cf14a713 | ||
|
e529d5ffb4 | ||
|
4d8c6edab4 | ||
|
8ef284366c | ||
|
0b5a9660dc | ||
|
1e8c43f4d0 | ||
|
6902a36d22 | ||
|
96bed9fea8 | ||
|
3fe9fe9cb9 | ||
|
1beb6738a7 | ||
|
f3e514a41d | ||
|
b150817c19 | ||
|
619b9e84bf | ||
|
cc7caf9239 | ||
|
a70904bc78 | ||
|
e00aab1654 | ||
|
887a18018d | ||
|
a09b91792c | ||
|
0eaf0e16dd | ||
|
542299185b | ||
|
16d35dbd56 | ||
|
e77d8eb4b6 | ||
|
1e84989ffc | ||
|
6ff3ae8deb | ||
|
a871e80fc6 | ||
|
f513cc8836 | ||
|
da588875ce | ||
|
684c81a75f | ||
|
9ffa1f7a1b | ||
|
c4dc2a5e2c | ||
|
d93677eb48 | ||
|
0db9835d3b | ||
|
ca079a77f9 | ||
|
9ba9c030ad | ||
|
c96d9c2371 | ||
|
f036512122 | ||
|
0c46196e1d | ||
|
74f2c1c282 | ||
|
8ed4c7acc2 | ||
|
fc3af254b1 | ||
|
9d2b9e7724 | ||
|
acfaacb18b | ||
|
0736a2aa79 | ||
|
1a153e1fd3 | ||
|
1f3ec92976 | ||
|
2040c18ecc | ||
|
b590ee6d45 | ||
|
5d327b3735 | ||
|
3b9cde5c81 | ||
|
9719f26cc6 | ||
|
81027ea1e2 | ||
|
a439cafc7c | ||
|
1c2a462125 | ||
|
279b1d85cc | ||
|
28b3e4f925 | ||
|
ea3d26eeb4 | ||
|
39aa6b8bea | ||
|
1a47d37c99 | ||
|
a2f216b329 | ||
|
9b8d492781 | ||
|
ef90205704 | ||
|
c6184b2b5c | ||
|
bf538839ed | ||
|
7abb5e3f13 | ||
|
2353b2197c | ||
|
10b7dba331 | ||
|
55104870a1 | ||
|
fbc04dcddb | ||
|
8631c00acb | ||
|
add82b672d | ||
|
3514680b91 | ||
|
4f68af254e | ||
|
70ac6a2655 | ||
|
9dc43dc361 | ||
|
038fc5a7f7 | ||
|
66e1ee52ad | ||
|
bc8fa4311e | ||
|
eafe639aee | ||
|
97eb22e959 | ||
|
964d358bc1 | ||
|
384ee736e7 | ||
|
3599928fc6 | ||
|
0330429005 | ||
|
828eeb65dc | ||
|
74e7328281 | ||
|
9e71637022 | ||
|
83eed1ea90 | ||
|
7ddacf6df3 | ||
|
83007290c6 | ||
|
38fb22cece | ||
|
1deda22b88 | ||
|
ef6670ca43 | ||
|
b8c030d9cf | ||
|
9c04f375db | ||
|
944bf20c17 | ||
|
b4da1d9ebd | ||
|
75691166be | ||
|
8c57dc26a7 | ||
|
230891cc9c | ||
|
ffd133bdbe | ||
|
77b116f1d3 | ||
|
1eef92e336 | ||
|
317fa3e7ef | ||
|
580351d3d3 | ||
|
534f5e8d80 | ||
|
74e2db8a92 | ||
|
c288bf3b89 | ||
|
18e05588df | ||
|
407e20d45d | ||
|
5eef18390d | ||
|
34ff020aea | ||
|
8fc109160e | ||
|
cb0c057a31 | ||
|
60294f8c39 | ||
|
6319fd51fe | ||
|
08baacb6db | ||
|
c23bbfc007 | ||
|
aa326e4e22 | ||
|
1595955974 | ||
|
a760db21ec | ||
|
2cf0e748c3 | ||
|
564c56de12 | ||
|
45986bd391 | ||
|
90644f9217 | ||
|
61c6819d1a | ||
|
bf33fc653d | ||
|
e4f74121db | ||
|
62fda88080 | ||
|
4c83138e5f | ||
|
f02f25dcf7 | ||
|
7c5cca5ee2 |
159
configure.ac
159
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"),
|
||||
@@ -649,6 +648,7 @@ if test "x$enable_asm" = xyes; then
|
||||
fi
|
||||
|
||||
AC_CHECK_HEADER([xlocale.h], [DEFINES="$DEFINES -DHAVE_XLOCALE_H"])
|
||||
AC_CHECK_HEADER([sys/sysctl.h], [DEFINES="$DEFINES -DHAVE_SYS_SYSCTL_H"])
|
||||
AC_CHECK_FUNC([strtof], [DEFINES="$DEFINES -DHAVE_STRTOF"])
|
||||
|
||||
dnl Check to see if dlopen is in default libraries (like Solaris, which
|
||||
@@ -941,7 +941,7 @@ x*yes*yes*)
|
||||
esac
|
||||
|
||||
# Building Xlib-GLX requires shared glapi to be disabled.
|
||||
if test "x$enable_xlib_glx" = xyes; then
|
||||
if test "x$enable_shared_glapi$enable_xlib_glx" = xyesyes; then
|
||||
AC_MSG_NOTICE([Shared GLAPI should not used with Xlib-GLX, disabling])
|
||||
enable_shared_glapi=no
|
||||
fi
|
||||
@@ -978,144 +978,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])
|
||||
@@ -1547,8 +1409,15 @@ if test "x$enable_egl" = xyes; then
|
||||
|
||||
if test "$enable_static" != yes; then
|
||||
if test "x$enable_dri" = xyes; then
|
||||
HAVE_EGL_DRIVER_DRI2=1
|
||||
fi
|
||||
HAVE_EGL_DRIVER_DRI2=1
|
||||
if test "x$enable_shared_glapi" = xno; then
|
||||
AC_MSG_ERROR([egl_dri2 requires --enable-shared-glapi])
|
||||
fi
|
||||
else
|
||||
# Avoid building an "empty" libEGL. Drop/update this
|
||||
# when other backends (haiku?) come along.
|
||||
AC_MSG_ERROR([egl requires --enable-dri])
|
||||
fi
|
||||
|
||||
fi
|
||||
fi
|
||||
@@ -2504,12 +2373,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.6.0 Release Notes / TBD</h1>
|
||||
<h1>Mesa 10.6.0 Release Notes / June 14, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.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.
|
||||
9bc659abdba26202509304f259723aaa4343dba6aac4bd87d5baea11d23c8c63 mesa-10.6.0.tar.gz
|
||||
f37e2633978deed02ff0522abc36c709586e2b555fd439a82ab71dce2c866c76 mesa-10.6.0.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
@@ -71,7 +72,246 @@ 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=15006">Bug 15006</a> - translate & rotate the line cause Aliasing</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=27007">Bug 27007</a> - Lines disappear with GL_LINE_SMOOTH</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=28832">Bug 28832</a> - piglit/general/line-aa-width fail</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=60797">Bug 60797</a> - 1px lines in octave plot aliased to 0</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=67564">Bug 67564</a> - HiZ buffers are much larger than necessary</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=69226">Bug 69226</a> - Cannot enable basic shaders with Second Life aborts attempt</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=71591">Bug 71591</a> - Second Life shaders fail to compile (extension declared in middle of shader)</li>
|
||||
|
||||
<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=81025">Bug 81025</a> - [IVB/BYT Bisected]Piglit spec_ARB_draw_indirect_arb_draw_indirect-draw-elements-prim-restart-ugly fails</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=82668">Bug 82668</a> - Can't set int attributes to certain values on 32-bit</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82831">Bug 82831</a> - i965: Support GL_ARB_blend_func_extended in SIMD16</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83962">Bug 83962</a> - [HSW/BYT]Piglit spec_ARB_gpu_shader5_arb_gpu_shader5-emitstreamvertex_nodraw fails</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=86792">Bug 86792</a> - [NVC0] Portal 2 Crashes in Wine</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=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=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=86980">Bug 86980</a> - [swrast] piglit fp-rfl regression</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87258">Bug 87258</a> - [BDW/BSW Bisected]Piglit spec_ARB_shader_atomic_counters_array-indexing fails</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=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=88521">Bug 88521</a> - GLBenchmark 2.7 TRex renders with artifacts on Gen8 with !UXA</li>
|
||||
|
||||
<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=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=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=88815">Bug 88815</a> - Incorrect handling of GLSL #line directive</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=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=88999">Bug 88999</a> - [SKL] Compiz crashes after opening unity dash</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89014">Bug 89014</a> - PIPE_QUERY_GPU_FINISHED is not acting as expected on SI</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89026">Bug 89026</a> - Renderbuffer layered state used for framebuffer completeness test</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=89039">Bug 89039</a> - [SKL]etqw system hang</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89058">Bug 89058</a> - [SKL]Render error in some games (etqw-demo, nexuiz, portal)</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=89094">Bug 89094</a> - [SNB/IVB/HSW/BYT Bisected]Ogles3conform ES3-CTS.gtf.GL3Tests.shadow.shadow_execution_vert fails</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=89112">Bug 89112</a> - u_atomic_test: u_atomic_test.c:124: test_atomic_8bits_bool: Assertion `r == 65 && "p_atomic_add"' failed.</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89118">Bug 89118</a> - [SKL Bisected]many Ogles3conform cases core dumped</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89131">Bug 89131</a> - [Bisected] Graphical corruption in Weston, shows old framebuffer pieces</li>
|
||||
|
||||
<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=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=89210">Bug 89210</a> - GS statistics fail on SNB</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89218">Bug 89218</a> - lower_instructions.cpp:648:48: error: invalid suffix 'd' on floating constant</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=89260">Bug 89260</a> - macros.h:34:25: fatal error: util/u_math.h: No such file or directory</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=89328">Bug 89328</a> - python required to build Mesa release tarballs</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89342">Bug 89342</a> - main/light.c:159:62: error: 'M_PI' undeclared (first use in this function)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89343">Bug 89343</a> - compiler/tests/radeon_compiler_optimize_tests.c:43:3: error: implicit declaration of function ‘fprintf’ [-Werror=implicit-function-declaration]</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89345">Bug 89345</a> - imports.h:452:58: error: expected declaration specifiers or '...' before 'va_list'</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89364">Bug 89364</a> - c99_alloca.h:40:22: fatal error: alloca.h: No such file or directory</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89372">Bug 89372</a> - [softpipe] piglit glsl-1.50 generate-zero-primitives regression</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89387">Bug 89387</a> - Double delete in lp_bld_misc.cpp</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>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89433">Bug 89433</a> - GCC 4.2 does not support -Wvla</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89455">Bug 89455</a> - [NVC0/Gallium] Unigine Heaven black and white boxes</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89457">Bug 89457</a> - [BSW Bisected]ogles3conform ES3-CTS.gtf.GL3Tests.shadow.shadow_execution_vert fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89477">Bug 89477</a> - include/no_extern_c.h:47:1: error: template with C linkage</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89508">Bug 89508</a> - Bad int(floatBitsToInt(vec4))</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=89569">Bug 89569</a> - Papo & Yo crash on startup [HSW]</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=89662">Bug 89662</a> - context.c:943: undefined reference to `_glapi_new_nop_table'</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89670">Bug 89670</a> - cmod_propagation_test.andnz_one regression</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89679">Bug 89679</a> - [NV50] Portal/Half-Life 2 will not start (native Steam)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89689">Bug 89689</a> - [Regression] Weston on DRM backend won't start with new version of mesa</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89722">Bug 89722</a> - [ILK Bisected]Ogles2conform/ES2-CTS.gtf.GL.equal.equal_vec2_frag fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89726">Bug 89726</a> - [Bisected] dEQP-GLES3: uniform linking logic in the presence of structs</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89746">Bug 89746</a> - Mesa and LLVM 3.6+ break opengl for genymotion</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89754">Bug 89754</a> - vertexAttrib fails WebGL Conformance test with mesa drivers</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89758">Bug 89758</a> - pow WebGL Conformance test with mesa drivers</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89759">Bug 89759</a> - WebGL OGL ES GLSL conformance test with mesa drivers fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89831">Bug 89831</a> - [r600] r600_asm.c:310:assign_alu_units: Assertion `0' failed.</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89899">Bug 89899</a> - nir/nir_lower_tex_projector.c:112: error: unknown field ‘ssa’ specified in initializer</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89957">Bug 89957</a> - vm protection faults in piglit lest: texsubimage cube_map_array pbo</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89960">Bug 89960</a> - [softpipe] piglit copy-pixels regreession</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89961">Bug 89961</a> - [BDW/BSW Bisected]Synmark2_v6 OglDrvRes/OglDrvShComp/OglDrvState/OglPSPom Image Validation fail</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89963">Bug 89963</a> - lp_bld_debug.cpp:100:31: error: no matching function for call to ‘llvm::raw_ostream::raw_ostream()’</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90000">Bug 90000</a> - [i965 Bisected NIR] Piglit/gglean_fragprog1-z-write_test fail</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90109">Bug 90109</a> - [SNB+ Bisected]Ogles3conform ES3-CTS.shaders.uniform_block.random.basic_arrays.3 fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90114">Bug 90114</a> - [SNB+ Bisected]Ogles3conform ES3-CTS.shaders.struct.uniform.sampler_array_fragment fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90130">Bug 90130</a> - gl_PrimitiveId seems to reset at 340</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90147">Bug 90147</a> - swrast: build error undeclared _SC_PHYS_PAGES on osx</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90149">Bug 90149</a> - [SNB+ Bisected]ES3-CTS.gtf.GL3Tests.uniform_buffer_object.uniform_buffer_object_getactiveuniformsiv_for_nonexistent_uniform_indices fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90153">Bug 90153</a> - [SKL Bisected]ES3-CTS.gtf.GL3Tests.uniform_buffer_object.uniform_buffer_object_all_valid_basic_types fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90167">Bug 90167</a> - [softpipe] piglit depthstencil-default_fb-drawpixels-32f_24_8_rev regression</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90207">Bug 90207</a> - [r600g, bisected] regression: NI/Turks crash on WebGL Water (most WebGL stuff)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90213">Bug 90213</a> - glDrawPixels with GL_COLOR_INDEX never returns.</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90243">Bug 90243</a> - [bisected] regression: spec.!opengl 3_2.get-active-attrib-returns-all-inputs</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90258">Bug 90258</a> - [IVB] spec.glsl-1_10.execution.fs-dfdy-accuracy fails intermittently</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90310">Bug 90310</a> - Fails to build gallium_dri.so at linking stage with clang because of multiple redefinitions</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90350">Bug 90350</a> - [G96] Portal's portal are incorrectly rendered</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90363">Bug 90363</a> - [nv50] HW state is not reset correctly when using a new GL context</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90397">Bug 90397</a> - ARB_program_interface_query: glGetProgramResourceiv() returns wrong value for GL_REFERENCED_BY_*_SHADER prop for GL_UNIFORM for members of an interface block with an instance name</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90466">Bug 90466</a> - arm: linker error ndefined reference to `nir_metadata_preserve'</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90520">Bug 90520</a> - Register spilling clobbers registers used elsewhere in the shader</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90547">Bug 90547</a> - [BDW/BSW/SKL Bisected]Piglit/glean@vertprog1-rsq_test_2_(reciprocal_square_root_of_negative_value) fais</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90580">Bug 90580</a> - [HSW bisected] integer multiplication bug</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90629">Bug 90629</a> - [i965] SIMD16 dual_source_blend assertion `src[i].file != GRF || src[i].width == dst.width' failed</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90749">Bug 90749</a> - [BDW Bisected]dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines_wide fails</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90830">Bug 90830</a> - [bsw bisected regression] GPU hang for spec.arb_gpu_shader5.execution.sampler_array_indexing.vs-nonzero-base</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90839">Bug 90839</a> - [10.5.5/10.6 regression, bisected] PBO glDrawPixels no longer using blit fastpath</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90905">Bug 90905</a> - mesa: Finish subdir-objects transition</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=9951">Bug 9951</a> - GL_LINE_SMOOTH and GL_POLYGON_SMOOTH with i965 driver</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
|
104
docs/relnotes/10.6.1.html
Normal file
104
docs/relnotes/10.6.1.html
Normal file
@@ -0,0 +1,104 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.6.1 Release Notes / June 29, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.1 is a bug fix release which fixes bugs found since the 10.6.0 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.6.1 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
b4cccd4d0eabcc2bca00c3175d3ad88fdda57ffdb883a7998525b873a21fe607 mesa-10.6.1.tar.gz
|
||||
6c80a2b647e57c85dc36e609d9aed17f878f0d8e0cf9ace86d14cf604101e1eb mesa-10.6.1.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90347">Bug 90347</a> - [NVE0+] Failure to insert texbar under some circumstances (causing bad colors in Terasology)</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Anuj Phogat (4):</p>
|
||||
<ul>
|
||||
<li>mesa: Handle integer formats in need_rgb_to_luminance_conversion()</li>
|
||||
<li>mesa: Use helper function need_rgb_to_luminance_conversion()</li>
|
||||
<li>mesa: Turn need_rgb_to_luminance_conversion() in to a global function</li>
|
||||
<li>meta: Abort meta path if ReadPixels need rgb to luminance conversion</li>
|
||||
</ul>
|
||||
|
||||
<p>Ben Widawsky (1):</p>
|
||||
<ul>
|
||||
<li>i965/gen9: Implement Push Constant Buffer workaround</li>
|
||||
</ul>
|
||||
|
||||
<p>Boyan Ding (2):</p>
|
||||
<ul>
|
||||
<li>egl/x11: Set version of swrastLoader to 2</li>
|
||||
<li>egl/x11: Remove duplicate call to dri2_x11_add_configs_for_visuals</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (6):</p>
|
||||
<ul>
|
||||
<li>docs: Add sha256sums for the 10.6.0 release</li>
|
||||
<li>configure: warn about shared_glapi & xlib-glx only when both are set</li>
|
||||
<li>configure: error out when building backend-less libEGL</li>
|
||||
<li>configure: error out when building libEGL without shared-glapi</li>
|
||||
<li>gbm: do not (over)link against libglapi.so</li>
|
||||
<li>Update version to 10.6.1</li>
|
||||
</ul>
|
||||
|
||||
<p>Frank Henigman (1):</p>
|
||||
<ul>
|
||||
<li>gbm: dlopen libglapi so gbm_create_device works</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (9):</p>
|
||||
<ul>
|
||||
<li>nvc0/ir: fix collection of first uses for texture barrier insertion</li>
|
||||
<li>nv50,nvc0: clamp uniform size to 64k</li>
|
||||
<li>nvc0/ir: can't have a join on a load with an indirect source</li>
|
||||
<li>glsl: handle conversions to double when comparing param matches</li>
|
||||
<li>glsl: add version checks to conditionals for builtin variable enablement</li>
|
||||
<li>mesa: add GL_PROGRAM_PIPELINE support in KHR_debug calls</li>
|
||||
<li>glsl: binding point is a texture unit, which is a combined space</li>
|
||||
<li>nvc0: always put all tfb bufs into bufctx</li>
|
||||
<li>nv50,nvc0: make sure to pushbuf_refn before putting bo into pushbuf_data</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
165
docs/relnotes/10.6.2.html
Normal file
165
docs/relnotes/10.6.2.html
Normal file
@@ -0,0 +1,165 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.6.2 Release Notes / July 11, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.2 is a bug fix release which fixes bugs found since the 10.6.1 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.6.2 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
9c7ab9300dda6c912faaaff97995ec1820ba21d114d9cf555f145cbad90995f4 mesa-10.6.2.tar.gz
|
||||
05753d3db4212900927b9894221a1669a10f56786e86a7e818b6e18a0817dca9 mesa-10.6.2.tar.xz
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=73528">Bug 73528</a> - Deferred lighting in Second Life causes system hiccups and screen flickering</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=80500">Bug 80500</a> - Flickering shadows in unreleased title trace</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82186">Bug 82186</a> - [r600g] BARTS GPU lockup with minecraft shaders</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84225">Bug 84225</a> - Allow constant-index-expression sampler array indexing with GLSL-ES < 300</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90537">Bug 90537</a> - radeonsi bo/va conflict on RADEON_GEM_VA (rscreen->ws->buffer_from_handle returns NULL)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90873">Bug 90873</a> - Kernel hang, TearFree On, Mate desktop environment</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91022">Bug 91022</a> - [g45 g965 bisected] assertions generated from textureGrad cube samplers fix</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91047">Bug 91047</a> - [SNB Bisected] Messed up Fog in Super Smash Bros. Melee in Dolphin</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91056">Bug 91056</a> - The Bard's Tale (2005, native) has rendering issues</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91117">Bug 91117</a> - Nimbus (running in wine) has rendering issues, objects are semi-transparent</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91124">Bug 91124</a> - Civilization V (in Wine) has rendering issues: text missing, menu bar corrupted</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91173">Bug 91173</a> - Oddworld: Stranger's Wrath HD: disfigured models in wrong colors</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91226">Bug 91226</a> - Crash in glLinkProgram (NEW)</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91231">Bug 91231</a> - [NV92] Psychonauts (native) segfaults on start when DRI3 enabled</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Chris Wilson (1):</p>
|
||||
<ul>
|
||||
<li>loader: Look for any version of currently linked libudev.so</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (2):</p>
|
||||
<ul>
|
||||
<li>docs: Add sha256 checksums for the 10.6.1 release</li>
|
||||
<li>Update version to 10.6.2</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (8):</p>
|
||||
<ul>
|
||||
<li>nv50/ir: propagate modifier to right arg when const-folding mad</li>
|
||||
<li>nv50/ir: fix emission of address reg in 3rd source</li>
|
||||
<li>nv50/ir: copy joinAt when splitting both before and after</li>
|
||||
<li>mesa: reset the source packing when creating temp transfer image</li>
|
||||
<li>nv50/ir: don't emit src2 in immediate form</li>
|
||||
<li>mesa/prog: relative offsets into constbufs are not constant</li>
|
||||
<li>nv50/ir: UCMP arguments are float, so make sure modifiers are applied</li>
|
||||
<li>nvc0: turn sample counts off during blit</li>
|
||||
</ul>
|
||||
|
||||
<p>Kenneth Graunke (5):</p>
|
||||
<ul>
|
||||
<li>i965/fs: Fix ir_txs in emit_texture_gen4_simd16().</li>
|
||||
<li>i965: Reserve more batch space to accomodate Gen6 perfmonitors.</li>
|
||||
<li>i965/vs: Fix matNxM vertex attributes where M != 4.</li>
|
||||
<li>Revert "glsl: clone inputs and outputs during linking"</li>
|
||||
<li>Revert "i965: Delete linked GLSL IR when using NIR."</li>
|
||||
</ul>
|
||||
|
||||
<p>Marek Olšák (3):</p>
|
||||
<ul>
|
||||
<li>r600g: disable single-sample fast color clear due to hangs</li>
|
||||
<li>radeonsi: fix a hang with DrawTransformFeedback on 4 SE chips</li>
|
||||
<li>st/dri: don't set PIPE_BIND_SCANOUT for MSAA surfaces</li>
|
||||
</ul>
|
||||
|
||||
<p>Mario Kleiner (2):</p>
|
||||
<ul>
|
||||
<li>nouveau: Use dup fd as key in drm-winsys hash table to fix ZaphodHeads.</li>
|
||||
<li>winsys/radeon: Use dup fd as key in drm-winsys hash table to fix ZaphodHeads.</li>
|
||||
</ul>
|
||||
|
||||
<p>Matt Turner (2):</p>
|
||||
<ul>
|
||||
<li>i965/fs: Don't mess up stride for uniform integer multiplication.</li>
|
||||
<li>Revert SHA1 additions.</li>
|
||||
</ul>
|
||||
|
||||
<p>Michel Dänzer (1):</p>
|
||||
<ul>
|
||||
<li>winsys/radeon: Unmap GPU VM address range when destroying BO</li>
|
||||
</ul>
|
||||
|
||||
<p>Mike Stroyan (2):</p>
|
||||
<ul>
|
||||
<li>meta: Only change and restore viewport 0 in mesa meta mode</li>
|
||||
<li>i965: allocate at least 1 BLEND_STATE element</li>
|
||||
</ul>
|
||||
|
||||
<p>Neil Roberts (4):</p>
|
||||
<ul>
|
||||
<li>i965/skl: Set the pulls bary bit in 3DSTATE_PS_EXTRA</li>
|
||||
<li>glsl: Add missing check for whether an expression is an add operation</li>
|
||||
<li>glsl: Make sure not to dereference NULL</li>
|
||||
<li>i965: Don't try to print the GLSL IR if it has been freed</li>
|
||||
</ul>
|
||||
|
||||
<p>Tapani Pälli (8):</p>
|
||||
<ul>
|
||||
<li>glsl: clone inputs and outputs during linking</li>
|
||||
<li>i965: Delete linked GLSL IR when using NIR.</li>
|
||||
<li>glsl: Allow dynamic sampler array indexing with GLSL ES < 3.00</li>
|
||||
<li>mesa/glsl: new compiler option EmitNoIndirectSampler</li>
|
||||
<li>i965: use EmitNoIndirectSampler for gen < 7</li>
|
||||
<li>i915: use EmitNoIndirectSampler</li>
|
||||
<li>mesa/st: use EmitNoIndirectSampler if !ARB_gpu_shader5</li>
|
||||
<li>glsl: validate sampler array indexing for 'constant-index-expression'</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
105
docs/relnotes/10.6.3.html
Normal file
105
docs/relnotes/10.6.3.html
Normal file
@@ -0,0 +1,105 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>Mesa Release Notes</title>
|
||||
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>The Mesa 3D Graphics Library</h1>
|
||||
</div>
|
||||
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.6.3 Release Notes / July 26, 2015</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.6.3 is a bug fix release which fixes bugs found since the 10.6.2 release.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 10.6.3 implements the OpenGL 3.3 API, but the version reported by
|
||||
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||
3.3 is <strong>only</strong> available if requested at context creation
|
||||
because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
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=90728">Bug 90728</a> - dvd playback with vlc and vdpau causes segmentation fault</li>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91337">Bug 91337</a> - OSMesaGetProcAdress("OSMesaPixelStore") returns nil</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Changes</h2>
|
||||
|
||||
<p>Brian Paul (1):</p>
|
||||
<ul>
|
||||
<li>osmesa: fix OSMesaPixelsStore typo</li>
|
||||
</ul>
|
||||
|
||||
<p>Chad Versace (1):</p>
|
||||
<ul>
|
||||
<li>mesa: Fix generation of git_sha1.h.tmp for gitlinks</li>
|
||||
</ul>
|
||||
|
||||
<p>Christian König (2):</p>
|
||||
<ul>
|
||||
<li>vl: cleanup video buffer private when the decoder is destroyed</li>
|
||||
<li>st/vdpau: fix mixer size checks</li>
|
||||
</ul>
|
||||
|
||||
<p>Emil Velikov (3):</p>
|
||||
<ul>
|
||||
<li>docs: Add sha256 checksums for the 10.6.2 release</li>
|
||||
<li>auxiliary/vl: use the correct screen index</li>
|
||||
<li>Update version to 10.6.3</li>
|
||||
</ul>
|
||||
|
||||
<p>Francisco Jerez (1):</p>
|
||||
<ul>
|
||||
<li>i965/gen9: Use custom MOCS entries set up by the kernel.</li>
|
||||
</ul>
|
||||
|
||||
<p>Ilia Mirkin (5):</p>
|
||||
<ul>
|
||||
<li>nv50, nvc0: enable at least one color RT if alphatest is enabled</li>
|
||||
<li>nvc0/ir: fix txq on indirect samplers</li>
|
||||
<li>nvc0/ir: don't worry about sampler in txq handling</li>
|
||||
<li>gm107/ir: fix indirect txq emission</li>
|
||||
<li>nv50: fix max level clamping on G80</li>
|
||||
</ul>
|
||||
|
||||
<p>Kenneth Graunke (1):</p>
|
||||
<ul>
|
||||
<li>program: Allow redundant OPTION ARB_fog_* directives.</li>
|
||||
</ul>
|
||||
|
||||
<p>Rob Clark (1):</p>
|
||||
<ul>
|
||||
<li>xa: don't leak fences</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@@ -72,4 +72,5 @@ noinst_LTLIBRARIES = libglsl_util.la
|
||||
libglsl_util_la_SOURCES = \
|
||||
mesa/main/imports.c \
|
||||
mesa/program/prog_hash_table.c \
|
||||
mesa/program/symbol_table.c
|
||||
mesa/program/symbol_table.c \
|
||||
mesa/program/dummy_errors.c
|
||||
|
@@ -1112,7 +1112,7 @@ dri2_initialize_x11_swrast(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
goto cleanup_conn;
|
||||
|
||||
dri2_dpy->swrast_loader_extension.base.name = __DRI_SWRAST_LOADER;
|
||||
dri2_dpy->swrast_loader_extension.base.version = __DRI_SWRAST_LOADER_VERSION;
|
||||
dri2_dpy->swrast_loader_extension.base.version = 2;
|
||||
dri2_dpy->swrast_loader_extension.getDrawableInfo = swrastGetDrawableInfo;
|
||||
dri2_dpy->swrast_loader_extension.putImage = swrastPutImage;
|
||||
dri2_dpy->swrast_loader_extension.getImage = swrastGetImage;
|
||||
@@ -1283,11 +1283,6 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
|
||||
dri2_x11_setup_swap_interval(dri2_dpy);
|
||||
|
||||
if (dri2_dpy->conn) {
|
||||
if (!dri2_x11_add_configs_for_visuals(dri2_dpy, disp))
|
||||
goto cleanup_configs;
|
||||
}
|
||||
|
||||
disp->Extensions.KHR_image_pixmap = EGL_TRUE;
|
||||
disp->Extensions.NOK_swap_region = EGL_TRUE;
|
||||
disp->Extensions.NOK_texture_from_pixmap = EGL_TRUE;
|
||||
|
@@ -131,7 +131,7 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay *dpy,
|
||||
break;
|
||||
}
|
||||
|
||||
ctx->Flags = val;
|
||||
ctx->Flags |= val;
|
||||
break;
|
||||
|
||||
case EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR:
|
||||
@@ -194,7 +194,8 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay *dpy,
|
||||
break;
|
||||
}
|
||||
|
||||
ctx->Flags = EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR;
|
||||
if (val == EGL_TRUE)
|
||||
ctx->Flags |= EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@@ -300,6 +300,8 @@ void cso_destroy_context( struct cso_context *ctx )
|
||||
unsigned i, shader;
|
||||
|
||||
if (ctx->pipe) {
|
||||
ctx->pipe->set_index_buffer(ctx->pipe, NULL);
|
||||
|
||||
ctx->pipe->bind_blend_state( ctx->pipe, NULL );
|
||||
ctx->pipe->bind_rasterizer_state( ctx->pipe, NULL );
|
||||
|
||||
@@ -326,13 +328,18 @@ void cso_destroy_context( struct cso_context *ctx )
|
||||
|
||||
ctx->pipe->bind_depth_stencil_alpha_state( ctx->pipe, NULL );
|
||||
ctx->pipe->bind_fs_state( ctx->pipe, NULL );
|
||||
ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_FRAGMENT, 0, NULL);
|
||||
ctx->pipe->bind_vs_state( ctx->pipe, NULL );
|
||||
ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_VERTEX, 0, NULL);
|
||||
if (ctx->has_geometry_shader) {
|
||||
ctx->pipe->bind_gs_state(ctx->pipe, NULL);
|
||||
ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_GEOMETRY, 0, NULL);
|
||||
}
|
||||
if (ctx->has_tessellation) {
|
||||
ctx->pipe->bind_tcs_state(ctx->pipe, NULL);
|
||||
ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_TESS_CTRL, 0, NULL);
|
||||
ctx->pipe->bind_tes_state(ctx->pipe, NULL);
|
||||
ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_TESS_EVAL, 0, NULL);
|
||||
}
|
||||
ctx->pipe->bind_vertex_elements_state( ctx->pipe, NULL );
|
||||
|
||||
|
@@ -1965,7 +1965,7 @@ draw_llvm_set_sampler_state(struct draw_context *draw,
|
||||
for (i = 0; i < draw->num_samplers[PIPE_SHADER_VERTEX]; i++) {
|
||||
struct draw_jit_sampler *jit_sam = &draw->llvm->jit_context.samplers[i];
|
||||
|
||||
if (draw->samplers[i]) {
|
||||
if (draw->samplers[PIPE_SHADER_VERTEX][i]) {
|
||||
const struct pipe_sampler_state *s
|
||||
= draw->samplers[PIPE_SHADER_VERTEX][i];
|
||||
jit_sam->min_lod = s->min_lod;
|
||||
@@ -1978,7 +1978,7 @@ draw_llvm_set_sampler_state(struct draw_context *draw,
|
||||
for (i = 0; i < draw->num_samplers[PIPE_SHADER_GEOMETRY]; i++) {
|
||||
struct draw_jit_sampler *jit_sam = &draw->llvm->gs_jit_context.samplers[i];
|
||||
|
||||
if (draw->samplers[i]) {
|
||||
if (draw->samplers[PIPE_SHADER_GEOMETRY][i]) {
|
||||
const struct pipe_sampler_state *s
|
||||
= draw->samplers[PIPE_SHADER_GEOMETRY][i];
|
||||
jit_sam->min_lod = s->min_lod;
|
||||
|
@@ -42,6 +42,7 @@
|
||||
#include "pipe/p_compiler.h"
|
||||
|
||||
#include "c99_math.h"
|
||||
#include <assert.h>
|
||||
#include <float.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
|
@@ -84,6 +84,9 @@ static const unsigned const_empty_block_mask_420[3][2][2] = {
|
||||
|
||||
struct video_buffer_private
|
||||
{
|
||||
struct list_head list;
|
||||
struct pipe_video_buffer *video_buffer;
|
||||
|
||||
struct pipe_sampler_view *sampler_view_planes[VL_NUM_COMPONENTS];
|
||||
struct pipe_surface *surfaces[VL_MAX_SURFACES];
|
||||
|
||||
@@ -99,6 +102,8 @@ destroy_video_buffer_private(void *private)
|
||||
struct video_buffer_private *priv = private;
|
||||
unsigned i;
|
||||
|
||||
list_del(&priv->list);
|
||||
|
||||
for (i = 0; i < VL_NUM_COMPONENTS; ++i)
|
||||
pipe_sampler_view_reference(&priv->sampler_view_planes[i], NULL);
|
||||
|
||||
@@ -126,6 +131,9 @@ get_video_buffer_private(struct vl_mpeg12_decoder *dec, struct pipe_video_buffer
|
||||
|
||||
priv = CALLOC_STRUCT(video_buffer_private);
|
||||
|
||||
list_add(&priv->list, &dec->buffer_privates);
|
||||
priv->video_buffer = buf;
|
||||
|
||||
sv = buf->get_sampler_view_planes(buf);
|
||||
for (i = 0; i < VL_NUM_COMPONENTS; ++i)
|
||||
if (sv[i])
|
||||
@@ -141,6 +149,18 @@ get_video_buffer_private(struct vl_mpeg12_decoder *dec, struct pipe_video_buffer
|
||||
return priv;
|
||||
}
|
||||
|
||||
static void
|
||||
free_video_buffer_privates(struct vl_mpeg12_decoder *dec)
|
||||
{
|
||||
struct video_buffer_private *priv, *next;
|
||||
|
||||
LIST_FOR_EACH_ENTRY_SAFE(priv, next, &dec->buffer_privates, list) {
|
||||
struct pipe_video_buffer *buf = priv->video_buffer;
|
||||
|
||||
vl_video_buffer_set_associated_data(buf, &dec->base, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
init_zscan_buffer(struct vl_mpeg12_decoder *dec, struct vl_mpeg12_buffer *buffer)
|
||||
{
|
||||
@@ -464,6 +484,8 @@ vl_mpeg12_destroy(struct pipe_video_codec *decoder)
|
||||
|
||||
assert(decoder);
|
||||
|
||||
free_video_buffer_privates(dec);
|
||||
|
||||
/* Asserted in softpipe_delete_fs_state() for some reason */
|
||||
dec->context->bind_vs_state(dec->context, NULL);
|
||||
dec->context->bind_fs_state(dec->context, NULL);
|
||||
@@ -1187,6 +1209,8 @@ vl_create_mpeg12_decoder(struct pipe_context *context,
|
||||
if (!init_pipe_state(dec))
|
||||
goto error_pipe_state;
|
||||
|
||||
list_inithead(&dec->buffer_privates);
|
||||
|
||||
return &dec->base;
|
||||
|
||||
error_pipe_state:
|
||||
|
@@ -30,6 +30,8 @@
|
||||
|
||||
#include "pipe/p_video_codec.h"
|
||||
|
||||
#include "util/list.h"
|
||||
|
||||
#include "vl_mpeg12_bitstream.h"
|
||||
#include "vl_zscan.h"
|
||||
#include "vl_idct.h"
|
||||
@@ -77,6 +79,8 @@ struct vl_mpeg12_decoder
|
||||
|
||||
unsigned current_buffer;
|
||||
struct vl_mpeg12_buffer *dec_buffers[4];
|
||||
|
||||
struct list_head buffer_privates;
|
||||
};
|
||||
|
||||
struct vl_mpeg12_buffer
|
||||
|
@@ -293,6 +293,16 @@ vl_screen_get_private(struct vl_screen *vscreen)
|
||||
return vscreen;
|
||||
}
|
||||
|
||||
static xcb_screen_t *
|
||||
get_xcb_screen(xcb_screen_iterator_t iter, int screen)
|
||||
{
|
||||
for (; iter.rem; --screen, xcb_screen_next(&iter))
|
||||
if (screen == 0)
|
||||
return iter.data;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct vl_screen*
|
||||
vl_screen_create(Display *display, int screen)
|
||||
{
|
||||
@@ -334,8 +344,7 @@ vl_screen_create(Display *display, int screen)
|
||||
goto free_query;
|
||||
|
||||
s = xcb_setup_roots_iterator(xcb_get_setup(scrn->conn));
|
||||
while (screen--)
|
||||
xcb_screen_next(&s);
|
||||
|
||||
driverType = XCB_DRI2_DRIVER_TYPE_DRI;
|
||||
#ifdef DRI2DriverPrimeShift
|
||||
{
|
||||
@@ -351,7 +360,7 @@ vl_screen_create(Display *display, int screen)
|
||||
}
|
||||
#endif
|
||||
|
||||
connect_cookie = xcb_dri2_connect_unchecked(scrn->conn, s.data->root, driverType);
|
||||
connect_cookie = xcb_dri2_connect_unchecked(scrn->conn, get_xcb_screen(s, screen)->root, driverType);
|
||||
connect = xcb_dri2_connect_reply(scrn->conn, connect_cookie, NULL);
|
||||
if (connect == NULL || connect->driver_name_length + connect->device_name_length == 0)
|
||||
goto free_connect;
|
||||
@@ -370,7 +379,7 @@ vl_screen_create(Display *display, int screen)
|
||||
if (drmGetMagic(fd, &magic))
|
||||
goto free_connect;
|
||||
|
||||
authenticate_cookie = xcb_dri2_authenticate_unchecked(scrn->conn, s.data->root, magic);
|
||||
authenticate_cookie = xcb_dri2_authenticate_unchecked(scrn->conn, get_xcb_screen(s, screen)->root, magic);
|
||||
authenticate = xcb_dri2_authenticate_reply(scrn->conn, authenticate_cookie, NULL);
|
||||
|
||||
if (authenticate == NULL || !authenticate->authenticated)
|
||||
|
@@ -21,6 +21,8 @@ libfreedreno_la_SOURCES = \
|
||||
|
||||
noinst_PROGRAMS = ir3_compiler
|
||||
|
||||
# XXX: Required due to the C++ sources in libnir/libglsl_util
|
||||
nodist_EXTRA_ir3_compiler_SOURCES = dummy.cpp
|
||||
ir3_compiler_SOURCES = \
|
||||
ir3/ir3_cmdline.c
|
||||
|
||||
@@ -29,7 +31,6 @@ ir3_compiler_LDADD = \
|
||||
../../auxiliary/libgallium.la \
|
||||
$(top_builddir)/src/glsl/libnir.la \
|
||||
$(top_builddir)/src/libglsl_util.la \
|
||||
-lstdc++ \
|
||||
$(top_builddir)/src/util/libmesautil.la \
|
||||
$(GALLIUM_COMMON_LIB_DEPS) \
|
||||
$(FREEDRENO_LIBS)
|
||||
|
@@ -413,12 +413,15 @@ fd3_program_emit(struct fd_ringbuffer *ring, struct fd3_emit *emit,
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO: Figure out if there's a way to make it spit out 0's and
|
||||
* 1's for the .z and .w components.
|
||||
/* Replace the .xy coordinates with S/T from the point sprite. Set
|
||||
* interpolation bits for .zw such that they become .01
|
||||
*/
|
||||
if (emit->sprite_coord_enable & (1 << sem2idx(fp->inputs[j].semantic)))
|
||||
if (emit->sprite_coord_enable & (1 << sem2idx(fp->inputs[j].semantic))) {
|
||||
vpsrepl[inloc / 16] |= (emit->sprite_coord_mode ? 0x0d : 0x09)
|
||||
<< ((inloc % 16) * 2);
|
||||
vinterp[(inloc + 2) / 16] |= 2 << (((inloc + 2) % 16) * 2);
|
||||
vinterp[(inloc + 3) / 16] |= 3 << (((inloc + 3) % 16) * 2);
|
||||
}
|
||||
}
|
||||
|
||||
OUT_PKT0(ring, REG_A3XX_VPC_ATTR, 2);
|
||||
|
@@ -360,11 +360,3 @@ int main(int argc, char **argv)
|
||||
}
|
||||
dump_info(&v, info);
|
||||
}
|
||||
|
||||
void _mesa_error_no_memory(const char *caller);
|
||||
|
||||
void
|
||||
_mesa_error_no_memory(const char *caller)
|
||||
{
|
||||
fprintf(stderr, "Mesa error: out of memory in %s", caller);
|
||||
}
|
||||
|
@@ -1615,7 +1615,7 @@ trans_samp(const struct instr_translater *t,
|
||||
instr->cat1.src_type = type_mov;
|
||||
instr->cat1.dst_type = type_mov;
|
||||
add_dst_reg(ctx, instr, &tmp_dst, i);
|
||||
add_src_reg(ctx, instr, &zero, 0);
|
||||
add_src_reg(ctx, instr, &zero, zero.SwizzleX);
|
||||
i++;
|
||||
}
|
||||
if (tgt->array) {
|
||||
@@ -1669,15 +1669,18 @@ trans_samp(const struct instr_translater *t,
|
||||
*/
|
||||
if (inst->Instruction.Opcode == TGSI_OPCODE_TXD) {
|
||||
while (collect->regs_count < 5)
|
||||
ssa_src(ctx, ir3_reg_create(collect, 0, IR3_REG_SSA), &zero, 0);
|
||||
ssa_src(ctx, ir3_reg_create(collect, 0, IR3_REG_SSA),
|
||||
&zero, zero.SwizzleX);
|
||||
for (i = 0; i < tgt->dims; i++)
|
||||
ssa_src(ctx, ir3_reg_create(collect, 0, IR3_REG_SSA), dpdx, i);
|
||||
if (tgt->dims < 2)
|
||||
ssa_src(ctx, ir3_reg_create(collect, 0, IR3_REG_SSA), &zero, 0);
|
||||
ssa_src(ctx, ir3_reg_create(collect, 0, IR3_REG_SSA),
|
||||
&zero, zero.SwizzleX);
|
||||
for (i = 0; i < tgt->dims; i++)
|
||||
ssa_src(ctx, ir3_reg_create(collect, 0, IR3_REG_SSA), dpdy, i);
|
||||
if (tgt->dims < 2)
|
||||
ssa_src(ctx, ir3_reg_create(collect, 0, IR3_REG_SSA), &zero, 0);
|
||||
ssa_src(ctx, ir3_reg_create(collect, 0, IR3_REG_SSA),
|
||||
&zero, zero.SwizzleX);
|
||||
tinf.src_wrmask |= ((1 << (2 * MAX2(tgt->dims, 2))) - 1) << 4;
|
||||
}
|
||||
|
||||
@@ -1700,7 +1703,8 @@ trans_samp(const struct instr_translater *t,
|
||||
ssa_src(ctx, ir3_reg_create(collect, 0, IR3_REG_SSA),
|
||||
offset, i);
|
||||
if (tgt->dims < 2)
|
||||
ssa_src(ctx, ir3_reg_create(collect, 0, IR3_REG_SSA), &zero, 0);
|
||||
ssa_src(ctx, ir3_reg_create(collect, 0, IR3_REG_SSA),
|
||||
&zero, zero.SwizzleX);
|
||||
}
|
||||
if (inst->Instruction.Opcode == TGSI_OPCODE_TXB2)
|
||||
ssa_src(ctx, ir3_reg_create(collect, 0, IR3_REG_SSA),
|
||||
|
@@ -315,7 +315,7 @@ llvmpipe_check_render_cond(struct llvmpipe_context *lp)
|
||||
|
||||
b = pipe->get_query_result(pipe, lp->render_cond_query, wait, (void*)&result);
|
||||
if (b)
|
||||
return (!result == lp->render_cond_cond);
|
||||
return ((!result) == lp->render_cond_cond);
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
@@ -332,6 +332,9 @@ BasicBlock::splitBefore(Instruction *insn, bool attach)
|
||||
BasicBlock *bb = new BasicBlock(func);
|
||||
assert(!insn || insn->op != OP_PHI);
|
||||
|
||||
bb->joinAt = joinAt;
|
||||
joinAt = NULL;
|
||||
|
||||
splitCommon(insn, bb, attach);
|
||||
return bb;
|
||||
}
|
||||
|
@@ -2437,8 +2437,14 @@ CodeEmitterGM107::emitTXQ()
|
||||
break;
|
||||
}
|
||||
|
||||
emitInsn (0xdf4a0000);
|
||||
emitField(0x24, 13, insn->tex.r);
|
||||
if (insn->tex.rIndirectSrc >= 0) {
|
||||
emitInsn (0xdf500000);
|
||||
} else {
|
||||
emitInsn (0xdf480000);
|
||||
emitField(0x24, 13, insn->tex.r);
|
||||
}
|
||||
|
||||
emitField(0x31, 1, insn->tex.liveOnly);
|
||||
emitField(0x1f, 4, insn->tex.mask);
|
||||
emitField(0x16, 6, type);
|
||||
emitGPR (0x08, insn->src(0));
|
||||
|
@@ -499,10 +499,14 @@ CodeEmitterNV50::emitForm_MAD(const Instruction *i)
|
||||
setSrc(i, 2, 2);
|
||||
|
||||
if (i->getIndirect(0, 0)) {
|
||||
assert(!i->getIndirect(1, 0));
|
||||
assert(!i->srcExists(1) || !i->getIndirect(1, 0));
|
||||
assert(!i->srcExists(2) || !i->getIndirect(2, 0));
|
||||
setAReg16(i, 0);
|
||||
} else {
|
||||
} else if (i->srcExists(1) && i->getIndirect(1, 0)) {
|
||||
assert(!i->srcExists(2) || !i->getIndirect(2, 0));
|
||||
setAReg16(i, 1);
|
||||
} else {
|
||||
setAReg16(i, 2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -546,7 +550,7 @@ CodeEmitterNV50::emitForm_MUL(const Instruction *i)
|
||||
}
|
||||
|
||||
// usual immediate form
|
||||
// - 1 to 3 sources where last is immediate (rir, gir)
|
||||
// - 1 to 3 sources where second is immediate (rir, gir)
|
||||
// - no address or predicate possible
|
||||
void
|
||||
CodeEmitterNV50::emitForm_IMM(const Instruction *i)
|
||||
@@ -562,7 +566,7 @@ CodeEmitterNV50::emitForm_IMM(const Instruction *i)
|
||||
if (Target::operationSrcNr[i->op] > 1) {
|
||||
setSrc(i, 0, 0);
|
||||
setImmediate(i, 1);
|
||||
setSrc(i, 2, 1);
|
||||
// If there is another source, it has to be the same as the dest reg.
|
||||
} else {
|
||||
setImmediate(i, 0);
|
||||
}
|
||||
|
@@ -434,7 +434,6 @@ nv50_ir::DataType Instruction::inferSrcType() const
|
||||
case TGSI_OPCODE_USLT:
|
||||
case TGSI_OPCODE_USNE:
|
||||
case TGSI_OPCODE_USHR:
|
||||
case TGSI_OPCODE_UCMP:
|
||||
case TGSI_OPCODE_ATOMUADD:
|
||||
case TGSI_OPCODE_ATOMXCHG:
|
||||
case TGSI_OPCODE_ATOMCAS:
|
||||
@@ -1356,18 +1355,20 @@ Converter::srcToSym(tgsi::Instruction::SrcRegister src, int c)
|
||||
{
|
||||
const int swz = src.getSwizzle(c);
|
||||
|
||||
/* TODO: Use Array ID when it's available for the index */
|
||||
return makeSym(src.getFile(),
|
||||
src.is2D() ? src.getIndex(1) : 0,
|
||||
src.isIndirect(0) ? -1 : src.getIndex(0), swz,
|
||||
src.getIndex(0), swz,
|
||||
src.getIndex(0) * 16 + swz * 4);
|
||||
}
|
||||
|
||||
Symbol *
|
||||
Converter::dstToSym(tgsi::Instruction::DstRegister dst, int c)
|
||||
{
|
||||
/* TODO: Use Array ID when it's available for the index */
|
||||
return makeSym(dst.getFile(),
|
||||
dst.is2D() ? dst.getIndex(1) : 0,
|
||||
dst.isIndirect(0) ? -1 : dst.getIndex(0), c,
|
||||
dst.getIndex(0), c,
|
||||
dst.getIndex(0) * 16 + c * 4);
|
||||
}
|
||||
|
||||
@@ -1696,6 +1697,7 @@ Converter::insertConvergenceOps(BasicBlock *conv, BasicBlock *fork)
|
||||
join->fixed = 1;
|
||||
conv->insertHead(join);
|
||||
|
||||
assert(!fork->joinAt);
|
||||
fork->joinAt = new_FlowInstruction(func, OP_JOINAT, conv);
|
||||
fork->insertBefore(fork->getExit(), fork->joinAt);
|
||||
}
|
||||
@@ -1737,7 +1739,7 @@ Converter::handleTXQ(Value *dst0[4], enum TexQuery query)
|
||||
}
|
||||
tex->setSrc((c = 0), fetchSrc(0, 0)); // mip level
|
||||
|
||||
setTexRS(tex, c, 1, -1);
|
||||
setTexRS(tex, ++c, 1, -1);
|
||||
|
||||
bb->insertTail(tex);
|
||||
}
|
||||
@@ -2578,6 +2580,8 @@ Converter::handleInstruction(const struct tgsi_full_instruction *insn)
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_UCMP:
|
||||
srcTy = TYPE_U32;
|
||||
/* fallthrough */
|
||||
case TGSI_OPCODE_CMP:
|
||||
FOR_EACH_DST_ENABLED_CHANNEL(0, c, tgsi) {
|
||||
src0 = fetchSrc(0, c);
|
||||
|
@@ -240,6 +240,7 @@ GM107LoweringPass::visit(Instruction *i)
|
||||
Value *ptr = bld.mkOp2v(OP_SHL, TYPE_U32, bld.getSSA(),
|
||||
i->getIndirect(0, 0), bld.mkImm(4));
|
||||
i->setIndirect(0, 0, ptr);
|
||||
i->op = OP_VFETCH;
|
||||
} else {
|
||||
i->op = OP_VFETCH;
|
||||
assert(prog->getType() != Program::TYPE_FRAGMENT); // INTERP
|
||||
|
@@ -871,6 +871,7 @@ NV50LoweringPreSSA::handleTXL(TexInstruction *i)
|
||||
BasicBlock *joinBB = i->bb->splitAfter(i);
|
||||
|
||||
bld.setPosition(currBB, true);
|
||||
assert(!currBB->joinAt);
|
||||
currBB->joinAt = bld.mkFlow(OP_JOINAT, joinBB, CC_ALWAYS, NULL);
|
||||
|
||||
for (int l = 0; l <= 3; ++l) {
|
||||
|
@@ -100,8 +100,7 @@ void
|
||||
NVC0LegalizeSSA::handleFTZ(Instruction *i)
|
||||
{
|
||||
// Only want to flush float inputs
|
||||
if (i->sType != TYPE_F32)
|
||||
return;
|
||||
assert(i->sType == TYPE_F32);
|
||||
|
||||
// If we're already flushing denorms (and NaN's) to zero, no need for this.
|
||||
if (i->dnz)
|
||||
@@ -129,7 +128,7 @@ NVC0LegalizeSSA::visit(BasicBlock *bb)
|
||||
Instruction *next;
|
||||
for (Instruction *i = bb->getEntry(); i; i = next) {
|
||||
next = i->next;
|
||||
if (i->dType == TYPE_F32) {
|
||||
if (i->sType == TYPE_F32) {
|
||||
if (prog->getType() != Program::TYPE_COMPUTE)
|
||||
handleFTZ(i);
|
||||
continue;
|
||||
@@ -169,7 +168,7 @@ NVC0LegalizePostRA::insnDominatedBy(const Instruction *later,
|
||||
|
||||
void
|
||||
NVC0LegalizePostRA::addTexUse(std::list<TexUse> &uses,
|
||||
Instruction *usei, const Instruction *insn)
|
||||
Instruction *usei, const Instruction *texi)
|
||||
{
|
||||
bool add = true;
|
||||
for (std::list<TexUse>::iterator it = uses.begin();
|
||||
@@ -184,7 +183,7 @@ NVC0LegalizePostRA::addTexUse(std::list<TexUse> &uses,
|
||||
++it;
|
||||
}
|
||||
if (add)
|
||||
uses.push_back(TexUse(usei, insn));
|
||||
uses.push_back(TexUse(usei, texi));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -196,7 +195,8 @@ NVC0LegalizePostRA::findOverwritingDefs(const Instruction *texi,
|
||||
while (insn->op == OP_MOV && insn->getDef(0)->equals(insn->getSrc(0)))
|
||||
insn = insn->getSrc(0)->getUniqueInsn();
|
||||
|
||||
if (!insn->bb->reachableBy(texi->bb, term))
|
||||
// NOTE: the tex itself is, of course, not an overwriting definition
|
||||
if (insn == texi || !insn->bb->reachableBy(texi->bb, term))
|
||||
return;
|
||||
|
||||
switch (insn->op) {
|
||||
@@ -244,7 +244,12 @@ NVC0LegalizePostRA::findFirstUses(
|
||||
visited.insert(usei);
|
||||
|
||||
if (usei->op == OP_PHI || usei->op == OP_UNION) {
|
||||
// need a barrier before WAW cases
|
||||
// need a barrier before WAW cases, like:
|
||||
// %r0 = tex
|
||||
// if ...
|
||||
// texbar <- is required or tex might replace x again
|
||||
// %r1 = x <- overwriting def
|
||||
// %r2 = phi %r0, %r1
|
||||
for (int s = 0; usei->srcExists(s); ++s) {
|
||||
Instruction *defi = usei->getSrc(s)->getUniqueInsn();
|
||||
if (defi && &usei->src(s) != *u)
|
||||
@@ -263,7 +268,7 @@ NVC0LegalizePostRA::findFirstUses(
|
||||
usei->subOp != NV50_IR_SUBOP_MOV_FINAL) {
|
||||
findFirstUses(texi, usei, uses, visited);
|
||||
} else {
|
||||
addTexUse(uses, usei, insn);
|
||||
addTexUse(uses, usei, texi);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -951,7 +956,47 @@ NVC0LoweringPass::handleTXD(TexInstruction *txd)
|
||||
bool
|
||||
NVC0LoweringPass::handleTXQ(TexInstruction *txq)
|
||||
{
|
||||
// TODO: indirect resource/sampler index
|
||||
if (txq->tex.rIndirectSrc < 0)
|
||||
return true;
|
||||
|
||||
Value *ticRel = txq->getIndirectR();
|
||||
const int chipset = prog->getTarget()->getChipset();
|
||||
|
||||
txq->setIndirectS(NULL);
|
||||
txq->tex.sIndirectSrc = -1;
|
||||
|
||||
assert(ticRel);
|
||||
|
||||
if (chipset < NVISA_GK104_CHIPSET) {
|
||||
LValue *src = new_LValue(func, FILE_GPR); // 0xttxsaaaa
|
||||
|
||||
txq->setSrc(txq->tex.rIndirectSrc, NULL);
|
||||
if (txq->tex.r)
|
||||
ticRel = bld.mkOp2v(OP_ADD, TYPE_U32, bld.getScratch(),
|
||||
ticRel, bld.mkImm(txq->tex.r));
|
||||
|
||||
bld.mkOp2(OP_SHL, TYPE_U32, src, ticRel, bld.mkImm(0x17));
|
||||
|
||||
txq->moveSources(0, 1);
|
||||
txq->setSrc(0, src);
|
||||
} else {
|
||||
Value *hnd = loadTexHandle(
|
||||
bld.mkOp2v(OP_SHL, TYPE_U32, bld.getSSA(),
|
||||
txq->getIndirectR(), bld.mkImm(2)),
|
||||
txq->tex.r);
|
||||
txq->tex.r = 0xff;
|
||||
txq->tex.s = 0x1f;
|
||||
|
||||
if (chipset < NVISA_GM107_CHIPSET) {
|
||||
txq->setIndirectR(NULL);
|
||||
txq->moveSources(0, 1);
|
||||
txq->setSrc(0, hnd);
|
||||
txq->tex.rIndirectSrc = 0;
|
||||
} else {
|
||||
txq->setIndirectR(hnd);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1751,6 +1796,7 @@ NVC0LoweringPass::visit(Instruction *i)
|
||||
Value *ptr = bld.mkOp2v(OP_SHL, TYPE_U32, bld.getSSA(),
|
||||
i->getIndirect(0, 0), bld.mkImm(4));
|
||||
i->setIndirect(0, 0, ptr);
|
||||
i->op = OP_VFETCH;
|
||||
} else {
|
||||
i->op = OP_VFETCH;
|
||||
assert(prog->getType() != Program::TYPE_FRAGMENT); // INTERP
|
||||
|
@@ -236,6 +236,9 @@ LoadPropagation::visit(BasicBlock *bb)
|
||||
if (i->op == OP_CALL) // calls have args as sources, they must be in regs
|
||||
continue;
|
||||
|
||||
if (i->op == OP_PFETCH) // pfetch expects arg1 to be a reg
|
||||
continue;
|
||||
|
||||
if (i->srcExists(1))
|
||||
checkSwapSrc01(i);
|
||||
|
||||
@@ -574,6 +577,11 @@ ConstantFolding::expr(Instruction *i,
|
||||
case OP_POPCNT:
|
||||
res.data.u32 = util_bitcount(a->data.u32 & b->data.u32);
|
||||
break;
|
||||
case OP_PFETCH:
|
||||
// The two arguments to pfetch are logically added together. Normally
|
||||
// the second argument will not be constant, but that can happen.
|
||||
res.data.u32 = a->data.u32 + b->data.u32;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
@@ -588,12 +596,17 @@ ConstantFolding::expr(Instruction *i,
|
||||
|
||||
i->getSrc(0)->reg.data = res.data;
|
||||
|
||||
if (i->op == OP_MAD || i->op == OP_FMA) {
|
||||
switch (i->op) {
|
||||
case OP_MAD:
|
||||
case OP_FMA: {
|
||||
i->op = OP_ADD;
|
||||
|
||||
/* Move the immediate to the second arg, otherwise the ADD operation
|
||||
* won't be emittable
|
||||
*/
|
||||
i->setSrc(1, i->getSrc(0));
|
||||
i->src(1).mod = i->src(2).mod;
|
||||
i->setSrc(0, i->getSrc(2));
|
||||
i->src(0).mod = i->src(2).mod;
|
||||
i->setSrc(2, NULL);
|
||||
|
||||
ImmediateValue src0;
|
||||
@@ -603,8 +616,14 @@ ConstantFolding::expr(Instruction *i,
|
||||
bld.setPosition(i, false);
|
||||
i->setSrc(1, bld.loadImm(NULL, res.data.u32));
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
case OP_PFETCH:
|
||||
// Leave PFETCH alone... we just folded its 2 args into 1.
|
||||
break;
|
||||
default:
|
||||
i->op = i->saturate ? OP_SAT : OP_MOV; /* SAT handled by unary() */
|
||||
break;
|
||||
}
|
||||
i->subOp = 0;
|
||||
}
|
||||
@@ -2216,7 +2235,7 @@ FlatteningPass::visit(BasicBlock *bb)
|
||||
insn->op != OP_LINTERP && // probably just nve4
|
||||
insn->op != OP_PINTERP && // probably just nve4
|
||||
((insn->op != OP_LOAD && insn->op != OP_STORE) ||
|
||||
typeSizeof(insn->dType) <= 4) &&
|
||||
(typeSizeof(insn->dType) <= 4 && !insn->src(0).isIndirect(0))) &&
|
||||
!insn->isNop()) {
|
||||
insn->join = 1;
|
||||
bb->remove(bb->getExit());
|
||||
|
@@ -58,7 +58,7 @@ nv30_clear(struct pipe_context *pipe, unsigned buffers,
|
||||
struct pipe_framebuffer_state *fb = &nv30->framebuffer;
|
||||
uint32_t colr = 0, zeta = 0, mode = 0;
|
||||
|
||||
if (!nv30_state_validate(nv30, TRUE))
|
||||
if (!nv30_state_validate(nv30, NV30_NEW_FRAMEBUFFER | NV30_NEW_SCISSOR, TRUE))
|
||||
return;
|
||||
|
||||
if (buffers & PIPE_CLEAR_COLOR && fb->nr_cbufs) {
|
||||
|
@@ -204,7 +204,7 @@ void
|
||||
nv30_render_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info);
|
||||
|
||||
boolean
|
||||
nv30_state_validate(struct nv30_context *nv30, boolean hwtnl);
|
||||
nv30_state_validate(struct nv30_context *nv30, uint32_t mask, boolean hwtnl);
|
||||
|
||||
void
|
||||
nv30_state_release(struct nv30_context *nv30);
|
||||
|
@@ -71,12 +71,12 @@ nv30_render_allocate_vertices(struct vbuf_render *render,
|
||||
struct nv30_render *r = nv30_render(render);
|
||||
struct nv30_context *nv30 = r->nv30;
|
||||
|
||||
r->length = vertex_size * nr_vertices;
|
||||
r->length = (uint32_t)vertex_size * (uint32_t)nr_vertices;
|
||||
|
||||
if (r->offset + r->length >= render->max_vertex_buffer_bytes) {
|
||||
pipe_resource_reference(&r->buffer, NULL);
|
||||
r->buffer = pipe_buffer_create(&nv30->screen->base.base,
|
||||
PIPE_BIND_VERTEX_BUFFER, 0,
|
||||
PIPE_BIND_VERTEX_BUFFER, PIPE_USAGE_STREAM,
|
||||
render->max_vertex_buffer_bytes);
|
||||
if (!r->buffer)
|
||||
return FALSE;
|
||||
@@ -91,10 +91,14 @@ static void *
|
||||
nv30_render_map_vertices(struct vbuf_render *render)
|
||||
{
|
||||
struct nv30_render *r = nv30_render(render);
|
||||
char *map = pipe_buffer_map(&r->nv30->base.pipe, r->buffer,
|
||||
PIPE_TRANSFER_WRITE |
|
||||
PIPE_TRANSFER_UNSYNCHRONIZED, &r->transfer);
|
||||
return map + r->offset;
|
||||
char *map = pipe_buffer_map_range(
|
||||
&r->nv30->base.pipe, r->buffer,
|
||||
r->offset, r->length,
|
||||
PIPE_TRANSFER_WRITE |
|
||||
PIPE_TRANSFER_DISCARD_RANGE,
|
||||
&r->transfer);
|
||||
assert(map);
|
||||
return map;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -103,6 +107,7 @@ nv30_render_unmap_vertices(struct vbuf_render *render,
|
||||
{
|
||||
struct nv30_render *r = nv30_render(render);
|
||||
pipe_buffer_unmap(&r->nv30->base.pipe, r->transfer);
|
||||
r->transfer = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -126,10 +131,10 @@ nv30_render_draw_elements(struct vbuf_render *render,
|
||||
for (i = 0; i < r->vertex_info.num_attribs; i++) {
|
||||
PUSH_RESRC(push, NV30_3D(VTXBUF(i)), BUFCTX_VTXTMP,
|
||||
nv04_resource(r->buffer), r->offset + r->vtxptr[i],
|
||||
NOUVEAU_BO_LOW | NOUVEAU_BO_RD, 0, 0);
|
||||
NOUVEAU_BO_LOW | NOUVEAU_BO_RD, 0, NV30_3D_VTXBUF_DMA1);
|
||||
}
|
||||
|
||||
if (!nv30_state_validate(nv30, FALSE))
|
||||
if (!nv30_state_validate(nv30, ~0, FALSE))
|
||||
return;
|
||||
|
||||
BEGIN_NV04(push, NV30_3D(VERTEX_BEGIN_END), 1);
|
||||
@@ -171,10 +176,10 @@ nv30_render_draw_arrays(struct vbuf_render *render, unsigned start, uint nr)
|
||||
for (i = 0; i < r->vertex_info.num_attribs; i++) {
|
||||
PUSH_RESRC(push, NV30_3D(VTXBUF(i)), BUFCTX_VTXTMP,
|
||||
nv04_resource(r->buffer), r->offset + r->vtxptr[i],
|
||||
NOUVEAU_BO_LOW | NOUVEAU_BO_RD, 0, 0);
|
||||
NOUVEAU_BO_LOW | NOUVEAU_BO_RD, 0, NV30_3D_VTXBUF_DMA1);
|
||||
}
|
||||
|
||||
if (!nv30_state_validate(nv30, FALSE))
|
||||
if (!nv30_state_validate(nv30, ~0, FALSE))
|
||||
return;
|
||||
|
||||
BEGIN_NV04(push, NV30_3D(VERTEX_BEGIN_END), 1);
|
||||
@@ -213,22 +218,24 @@ static const struct {
|
||||
[TGSI_SEMANTIC_BCOLOR ] = { EMIT_4F, INTERP_LINEAR , 1, 3, 0x00000004 },
|
||||
[TGSI_SEMANTIC_FOG ] = { EMIT_4F, INTERP_PERSPECTIVE, 5, 5, 0x00000010 },
|
||||
[TGSI_SEMANTIC_PSIZE ] = { EMIT_1F_PSIZE, INTERP_POS , 6, 6, 0x00000020 },
|
||||
[TGSI_SEMANTIC_GENERIC ] = { EMIT_4F, INTERP_PERSPECTIVE, 8, 7, 0x00004000 }
|
||||
[TGSI_SEMANTIC_TEXCOORD] = { EMIT_4F, INTERP_PERSPECTIVE, 8, 7, 0x00004000 },
|
||||
};
|
||||
|
||||
static boolean
|
||||
vroute_add(struct nv30_render *r, uint attrib, uint sem, uint *idx)
|
||||
{
|
||||
struct pipe_screen *pscreen = &r->nv30->screen->base.base;
|
||||
struct nv30_screen *screen = r->nv30->screen;
|
||||
struct nv30_fragprog *fp = r->nv30->fragprog.program;
|
||||
struct vertex_info *vinfo = &r->vertex_info;
|
||||
enum pipe_format format;
|
||||
uint emit = EMIT_OMIT;
|
||||
uint result = *idx;
|
||||
|
||||
if (sem == TGSI_SEMANTIC_GENERIC && result >= 8) {
|
||||
for (result = 0; result < 8; result++) {
|
||||
if (fp->texcoord[result] == *idx) {
|
||||
if (sem == TGSI_SEMANTIC_GENERIC) {
|
||||
uint num_texcoords = (screen->eng3d->oclass < NV40_3D_CLASS) ? 8 : 10;
|
||||
for (result = 0; result < num_texcoords; result++) {
|
||||
if (fp->texcoord[result] == *idx + 8) {
|
||||
sem = TGSI_SEMANTIC_TEXCOORD;
|
||||
emit = vroute[sem].emit;
|
||||
break;
|
||||
}
|
||||
@@ -243,11 +250,11 @@ vroute_add(struct nv30_render *r, uint attrib, uint sem, uint *idx)
|
||||
draw_emit_vertex_attr(vinfo, emit, vroute[sem].interp, attrib);
|
||||
format = draw_translate_vinfo_format(emit);
|
||||
|
||||
r->vtxfmt[attrib] = nv30_vtxfmt(pscreen, format)->hw;
|
||||
r->vtxptr[attrib] = vinfo->size | NV30_3D_VTXBUF_DMA1;
|
||||
r->vtxfmt[attrib] = nv30_vtxfmt(&screen->base.base, format)->hw;
|
||||
r->vtxptr[attrib] = vinfo->size;
|
||||
vinfo->size += draw_translate_vinfo_size(emit);
|
||||
|
||||
if (nv30_screen(pscreen)->eng3d->oclass < NV40_3D_CLASS) {
|
||||
if (screen->eng3d->oclass < NV40_3D_CLASS) {
|
||||
r->vtxprog[attrib][0] = 0x001f38d8;
|
||||
r->vtxprog[attrib][1] = 0x0080001b | (attrib << 9);
|
||||
r->vtxprog[attrib][2] = 0x0836106c;
|
||||
@@ -259,7 +266,12 @@ vroute_add(struct nv30_render *r, uint attrib, uint sem, uint *idx)
|
||||
r->vtxprog[attrib][3] = 0x6041ff80 | (result + vroute[sem].vp40) << 2;
|
||||
}
|
||||
|
||||
*idx = vroute[sem].ow40 << result;
|
||||
if (result < 8)
|
||||
*idx = vroute[sem].ow40 << result;
|
||||
else {
|
||||
assert(sem == TGSI_SEMANTIC_TEXCOORD);
|
||||
*idx = 0x00001000 << (result - 8);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -313,7 +325,7 @@ nv30_render_validate(struct nv30_context *nv30)
|
||||
|
||||
while (pntc && attrib < 16) {
|
||||
uint index = ffs(pntc) - 1; pntc &= ~(1 << index);
|
||||
if (vroute_add(r, attrib, TGSI_SEMANTIC_GENERIC, &index)) {
|
||||
if (vroute_add(r, attrib, TGSI_SEMANTIC_TEXCOORD, &index)) {
|
||||
vp_attribs |= (1 << attrib++);
|
||||
vp_results |= index;
|
||||
}
|
||||
@@ -398,17 +410,17 @@ nv30_render_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
|
||||
if (nv30->vertprog.constbuf) {
|
||||
void *map = nv04_resource(nv30->vertprog.constbuf)->data;
|
||||
draw_set_mapped_constant_buffer(draw, PIPE_SHADER_VERTEX, 0,
|
||||
map, nv30->vertprog.constbuf_nr);
|
||||
map, nv30->vertprog.constbuf_nr * 16);
|
||||
} else {
|
||||
draw_set_mapped_constant_buffer(draw, PIPE_SHADER_VERTEX, 0, NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < nv30->num_vtxbufs; i++) {
|
||||
const void *map = nv30->vtxbuf[i].user_buffer;
|
||||
if (!map) {
|
||||
if (!nv30->vtxbuf[i].buffer) {
|
||||
continue;
|
||||
}
|
||||
map = pipe_buffer_map(pipe, nv30->vtxbuf[i].buffer,
|
||||
if (nv30->vtxbuf[i].buffer)
|
||||
map = pipe_buffer_map(pipe, nv30->vtxbuf[i].buffer,
|
||||
PIPE_TRANSFER_UNSYNCHRONIZED |
|
||||
PIPE_TRANSFER_READ, &transfer[i]);
|
||||
}
|
||||
@@ -418,9 +430,9 @@ nv30_render_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
|
||||
if (info->indexed) {
|
||||
const void *map = nv30->idxbuf.user_buffer;
|
||||
if (!map)
|
||||
pipe_buffer_map(pipe, nv30->idxbuf.buffer,
|
||||
PIPE_TRANSFER_UNSYNCHRONIZED |
|
||||
PIPE_TRANSFER_READ, &transferi);
|
||||
map = pipe_buffer_map(pipe, nv30->idxbuf.buffer,
|
||||
PIPE_TRANSFER_UNSYNCHRONIZED |
|
||||
PIPE_TRANSFER_READ, &transferi);
|
||||
draw_set_indexes(draw,
|
||||
(ubyte *) map + nv30->idxbuf.offset,
|
||||
nv30->idxbuf.index_size, ~0);
|
||||
@@ -444,6 +456,12 @@ nv30_render_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
|
||||
static void
|
||||
nv30_render_destroy(struct vbuf_render *render)
|
||||
{
|
||||
struct nv30_render *r = nv30_render(render);
|
||||
|
||||
if (r->transfer)
|
||||
pipe_buffer_unmap(&r->nv30->base.pipe, r->transfer);
|
||||
pipe_resource_reference(&r->buffer, NULL);
|
||||
nouveau_heap_free(&r->vertprog);
|
||||
FREE(render);
|
||||
}
|
||||
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "draw/draw_context.h"
|
||||
#include "tgsi/tgsi_parse.h"
|
||||
|
||||
#include "nv_object.xml.h"
|
||||
@@ -147,8 +148,12 @@ nv30_fp_state_delete(struct pipe_context *pipe, void *hwcso)
|
||||
|
||||
pipe_resource_reference(&fp->buffer, NULL);
|
||||
|
||||
if (fp->draw)
|
||||
draw_delete_fragment_shader(nv30_context(pipe)->draw, fp->draw);
|
||||
|
||||
FREE((void *)fp->pipe.tokens);
|
||||
FREE(fp->insn);
|
||||
FREE(fp->consts);
|
||||
FREE(fp);
|
||||
}
|
||||
|
||||
|
@@ -272,15 +272,13 @@ nv30_validate_clip(struct nv30_context *nv30)
|
||||
uint32_t clpd_enable = 0;
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
if (nv30->rast->pipe.clip_plane_enable & (1 << i)) {
|
||||
if (nv30->dirty & NV30_NEW_CLIP) {
|
||||
BEGIN_NV04(push, NV30_3D(VP_UPLOAD_CONST_ID), 5);
|
||||
PUSH_DATA (push, i);
|
||||
PUSH_DATAp(push, nv30->clip.ucp[i], 4);
|
||||
}
|
||||
|
||||
clpd_enable |= 1 << (1 + 4*i);
|
||||
if (nv30->dirty & NV30_NEW_CLIP) {
|
||||
BEGIN_NV04(push, NV30_3D(VP_UPLOAD_CONST_ID), 5);
|
||||
PUSH_DATA (push, i);
|
||||
PUSH_DATAp(push, nv30->clip.ucp[i], 4);
|
||||
}
|
||||
if (nv30->rast->pipe.clip_plane_enable & (1 << i))
|
||||
clpd_enable |= 2 << (4*i);
|
||||
}
|
||||
|
||||
BEGIN_NV04(push, NV30_3D(VP_CLIP_PLANES_ENABLE), 1);
|
||||
@@ -389,7 +387,7 @@ static struct state_validate hwtnl_validate_list[] = {
|
||||
{ nv30_validate_stipple, NV30_NEW_STIPPLE },
|
||||
{ nv30_validate_scissor, NV30_NEW_SCISSOR | NV30_NEW_RASTERIZER },
|
||||
{ nv30_validate_viewport, NV30_NEW_VIEWPORT },
|
||||
{ nv30_validate_clip, NV30_NEW_CLIP },
|
||||
{ nv30_validate_clip, NV30_NEW_CLIP | NV30_NEW_RASTERIZER },
|
||||
{ nv30_fragprog_validate, NV30_NEW_FRAGPROG | NV30_NEW_FRAGCONST },
|
||||
{ nv30_vertprog_validate, NV30_NEW_VERTPROG | NV30_NEW_VERTCONST |
|
||||
NV30_NEW_FRAGPROG | NV30_NEW_RASTERIZER },
|
||||
@@ -456,7 +454,7 @@ nv30_state_context_switch(struct nv30_context *nv30)
|
||||
}
|
||||
|
||||
boolean
|
||||
nv30_state_validate(struct nv30_context *nv30, boolean hwtnl)
|
||||
nv30_state_validate(struct nv30_context *nv30, uint32_t mask, boolean hwtnl)
|
||||
{
|
||||
struct nouveau_screen *screen = &nv30->screen->base;
|
||||
struct nouveau_pushbuf *push = nv30->base.pushbuf;
|
||||
@@ -481,14 +479,16 @@ nv30_state_validate(struct nv30_context *nv30, boolean hwtnl)
|
||||
else
|
||||
validate = swtnl_validate_list;
|
||||
|
||||
if (nv30->dirty) {
|
||||
mask &= nv30->dirty;
|
||||
|
||||
if (mask) {
|
||||
while (validate->func) {
|
||||
if (nv30->dirty & validate->mask)
|
||||
if (mask & validate->mask)
|
||||
validate->func(nv30);
|
||||
validate++;
|
||||
}
|
||||
|
||||
nv30->dirty = 0;
|
||||
nv30->dirty &= ~mask;
|
||||
}
|
||||
|
||||
nouveau_pushbuf_bufctx(push, bctx);
|
||||
|
@@ -564,7 +564,7 @@ nv30_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
|
||||
if (nv30->vbo_user && !(nv30->dirty & (NV30_NEW_VERTEX | NV30_NEW_ARRAYS)))
|
||||
nv30_update_user_vbufs(nv30);
|
||||
|
||||
nv30_state_validate(nv30, TRUE);
|
||||
nv30_state_validate(nv30, ~0, TRUE);
|
||||
if (nv30->draw_flags) {
|
||||
nv30_render_vbo(pipe, info);
|
||||
return;
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "draw/draw_context.h"
|
||||
#include "util/u_dynarray.h"
|
||||
#include "tgsi/tgsi_parse.h"
|
||||
|
||||
@@ -237,6 +238,10 @@ nv30_vp_state_delete(struct pipe_context *pipe, void *hwcso)
|
||||
|
||||
if (vp->translated)
|
||||
nv30_vertprog_destroy(vp);
|
||||
|
||||
if (vp->draw)
|
||||
draw_delete_vertex_shader(nv30_context(pipe)->draw, vp->draw);
|
||||
|
||||
FREE((void *)vp->pipe.tokens);
|
||||
FREE(vp);
|
||||
}
|
||||
|
@@ -872,9 +872,8 @@ nvfx_vertprog_parse_decl_output(struct nvfx_vpc *vpc,
|
||||
}
|
||||
break;
|
||||
case TGSI_SEMANTIC_EDGEFLAG:
|
||||
/* not really an error just a fallback */
|
||||
NOUVEAU_ERR("cannot handle edgeflag output\n");
|
||||
return FALSE;
|
||||
vpc->r_result[idx] = nvfx_reg(NVFXSR_NONE, 0);
|
||||
return TRUE;
|
||||
default:
|
||||
NOUVEAU_ERR("bad output semantic\n");
|
||||
return FALSE;
|
||||
|
@@ -419,7 +419,7 @@ nv50_miptree_from_handle(struct pipe_screen *pscreen,
|
||||
FREE(mt);
|
||||
return NULL;
|
||||
}
|
||||
mt->base.domain = NOUVEAU_BO_VRAM;
|
||||
mt->base.domain = mt->base.bo->flags & NOUVEAU_BO_APER;
|
||||
mt->base.address = mt->base.bo->offset;
|
||||
|
||||
mt->base.base = *templ;
|
||||
|
@@ -434,6 +434,7 @@ nv50_query_pushbuf_submit(struct nouveau_pushbuf *push,
|
||||
/* XXX: does this exist ? */
|
||||
#define NV50_IB_ENTRY_1_NO_PREFETCH (0 << (31 - 8))
|
||||
|
||||
PUSH_REFN(push, q->bo, NOUVEAU_BO_RD | NOUVEAU_BO_GART);
|
||||
nouveau_pushbuf_space(push, 0, 0, 1);
|
||||
nouveau_pushbuf_data(push, q->bo, q->offset + result_offset, 4 |
|
||||
NV50_IB_ENTRY_1_NO_PREFETCH);
|
||||
|
@@ -811,12 +811,12 @@ nv50_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
||||
nv50->constbuf[s][i].user = (cb && cb->user_buffer) ? TRUE : FALSE;
|
||||
if (nv50->constbuf[s][i].user) {
|
||||
nv50->constbuf[s][i].u.data = cb->user_buffer;
|
||||
nv50->constbuf[s][i].size = cb->buffer_size;
|
||||
nv50->constbuf[s][i].size = MIN2(cb->buffer_size, 0x10000);
|
||||
nv50->constbuf_valid[s] |= 1 << i;
|
||||
} else
|
||||
if (res) {
|
||||
nv50->constbuf[s][i].offset = cb->buffer_offset;
|
||||
nv50->constbuf[s][i].size = align(cb->buffer_size, 0x100);
|
||||
nv50->constbuf[s][i].size = MIN2(align(cb->buffer_size, 0x100), 0x10000);
|
||||
nv50->constbuf_valid[s] |= 1 << i;
|
||||
} else {
|
||||
nv50->constbuf_valid[s] &= ~(1 << i);
|
||||
|
@@ -296,6 +296,23 @@ nv50_check_program_ucps(struct nv50_context *nv50,
|
||||
nv50_fp_linkage_validate(nv50);
|
||||
}
|
||||
|
||||
/* alpha test is disabled if there are no color RTs, so make sure we have at
|
||||
* least one if alpha test is enabled. Note that this must run after
|
||||
* nv50_validate_fb, otherwise that will override the RT count setting.
|
||||
*/
|
||||
static void
|
||||
nv50_validate_derived_2(struct nv50_context *nv50)
|
||||
{
|
||||
struct nouveau_pushbuf *push = nv50->base.pushbuf;
|
||||
|
||||
if (nv50->zsa && nv50->zsa->pipe.alpha.enabled &&
|
||||
nv50->framebuffer.nr_cbufs == 0) {
|
||||
nv50_fb_set_null_rt(push, 0);
|
||||
BEGIN_NV04(push, NV50_3D(RT_CONTROL), 1);
|
||||
PUSH_DATA (push, (076543210 << 4) | 1);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
nv50_validate_clip(struct nv50_context *nv50)
|
||||
{
|
||||
@@ -456,6 +473,7 @@ static struct state_validate {
|
||||
{ nv50_gp_linkage_validate, NV50_NEW_GMTYPROG | NV50_NEW_VERTPROG },
|
||||
{ nv50_validate_derived_rs, NV50_NEW_FRAGPROG | NV50_NEW_RASTERIZER |
|
||||
NV50_NEW_VERTPROG | NV50_NEW_GMTYPROG },
|
||||
{ nv50_validate_derived_2, NV50_NEW_ZSA | NV50_NEW_FRAMEBUFFER },
|
||||
{ nv50_validate_clip, NV50_NEW_CLIP | NV50_NEW_RASTERIZER |
|
||||
NV50_NEW_VERTPROG | NV50_NEW_GMTYPROG },
|
||||
{ nv50_constbufs_validate, NV50_NEW_CONSTBUF },
|
||||
|
@@ -71,6 +71,7 @@ nv50_create_texture_view(struct pipe_context *pipe,
|
||||
uint32_t flags,
|
||||
enum pipe_texture_target target)
|
||||
{
|
||||
const uint32_t class_3d = nouveau_context(pipe)->screen->class_3d;
|
||||
const struct util_format_description *desc;
|
||||
uint64_t addr;
|
||||
uint32_t *tic;
|
||||
@@ -201,11 +202,17 @@ nv50_create_texture_view(struct pipe_context *pipe,
|
||||
|
||||
tic[5] = (mt->base.base.height0 << mt->ms_y) & 0xffff;
|
||||
tic[5] |= depth << 16;
|
||||
tic[5] |= mt->base.base.last_level << NV50_TIC_5_LAST_LEVEL__SHIFT;
|
||||
if (class_3d > NV50_3D_CLASS)
|
||||
tic[5] |= mt->base.base.last_level << NV50_TIC_5_LAST_LEVEL__SHIFT;
|
||||
else
|
||||
tic[5] |= view->pipe.u.tex.last_level << NV50_TIC_5_LAST_LEVEL__SHIFT;
|
||||
|
||||
tic[6] = (mt->ms_x > 1) ? 0x88000000 : 0x03000000; /* sampling points */
|
||||
|
||||
tic[7] = (view->pipe.u.tex.last_level << 4) | view->pipe.u.tex.first_level;
|
||||
if (class_3d > NV50_3D_CLASS)
|
||||
tic[7] = (view->pipe.u.tex.last_level << 4) | view->pipe.u.tex.first_level;
|
||||
else
|
||||
tic[7] = 0;
|
||||
|
||||
if (unlikely(!(tic[2] & NV50_TIC_2_NORMALIZED_COORDS)))
|
||||
if (mt->base.base.last_level)
|
||||
|
@@ -628,6 +628,7 @@ nv50_draw_elements(struct nv50_context *nv50, boolean shorten,
|
||||
BEGIN_NV04(push, NV50_3D(VERTEX_BEGIN_GL), 1);
|
||||
PUSH_DATA (push, prim);
|
||||
|
||||
PUSH_REFN(push, buf->bo, NOUVEAU_BO_RD | buf->domain);
|
||||
nouveau_pushbuf_space(push, 8, 0, 1);
|
||||
|
||||
switch (index_size) {
|
||||
|
@@ -392,7 +392,7 @@ nvc0_gp_gen_header(struct nvc0_program *gp, struct nv50_ir_prog_info *info)
|
||||
break;
|
||||
}
|
||||
|
||||
gp->hdr[4] = info->prop.gp.maxVertices & 0x1ff;
|
||||
gp->hdr[4] = MIN2(info->prop.gp.maxVertices, 1024);
|
||||
|
||||
return nvc0_vtgp_gen_header(gp, info);
|
||||
}
|
||||
|
@@ -617,6 +617,7 @@ nvc0_query_pushbuf_submit(struct nouveau_pushbuf *push,
|
||||
|
||||
#define NVC0_IB_ENTRY_1_NO_PREFETCH (1 << (31 - 8))
|
||||
|
||||
PUSH_REFN(push, q->bo, NOUVEAU_BO_RD | NOUVEAU_BO_GART);
|
||||
nouveau_pushbuf_space(push, 0, 0, 1);
|
||||
nouveau_pushbuf_data(push, q->bo, q->offset + result_offset, 4 |
|
||||
NVC0_IB_ENTRY_1_NO_PREFETCH);
|
||||
|
@@ -262,11 +262,13 @@ nvc0_tfb_validate(struct nvc0_context *nvc0)
|
||||
if (tfb)
|
||||
targ->stride = tfb->stride[b];
|
||||
|
||||
buf = nv04_resource(targ->pipe.buffer);
|
||||
|
||||
BCTX_REFN(nvc0->bufctx_3d, TFB, buf, WR);
|
||||
|
||||
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);
|
||||
@@ -280,7 +282,6 @@ nvc0_tfb_validate(struct nvc0_context *nvc0)
|
||||
PUSH_DATA(push, 0); /* TFB_BUFFER_OFFSET */
|
||||
targ->clean = FALSE;
|
||||
}
|
||||
BCTX_REFN(nvc0->bufctx_3d, TFB, buf, WR);
|
||||
}
|
||||
for (; b < 4; ++b)
|
||||
IMMED_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 0);
|
||||
|
@@ -793,12 +793,12 @@ nvc0_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
||||
nvc0->constbuf[s][i].user = (cb && cb->user_buffer) ? TRUE : FALSE;
|
||||
if (nvc0->constbuf[s][i].user) {
|
||||
nvc0->constbuf[s][i].u.data = cb->user_buffer;
|
||||
nvc0->constbuf[s][i].size = cb->buffer_size;
|
||||
nvc0->constbuf[s][i].size = MIN2(cb->buffer_size, 0x10000);
|
||||
nvc0->constbuf_valid[s] |= 1 << i;
|
||||
} else
|
||||
if (cb) {
|
||||
nvc0->constbuf[s][i].offset = cb->buffer_offset;
|
||||
nvc0->constbuf[s][i].size = align(cb->buffer_size, 0x100);
|
||||
nvc0->constbuf[s][i].size = MIN2(align(cb->buffer_size, 0x100), 0x10000);
|
||||
nvc0->constbuf_valid[s] |= 1 << i;
|
||||
}
|
||||
else {
|
||||
|
@@ -535,6 +535,23 @@ nvc0_validate_derived_1(struct nvc0_context *nvc0)
|
||||
}
|
||||
}
|
||||
|
||||
/* alpha test is disabled if there are no color RTs, so make sure we have at
|
||||
* least one if alpha test is enabled. Note that this must run after
|
||||
* nvc0_validate_fb, otherwise that will override the RT count setting.
|
||||
*/
|
||||
static void
|
||||
nvc0_validate_derived_2(struct nvc0_context *nvc0)
|
||||
{
|
||||
struct nouveau_pushbuf *push = nvc0->base.pushbuf;
|
||||
|
||||
if (nvc0->zsa && nvc0->zsa->pipe.alpha.enabled &&
|
||||
nvc0->framebuffer.nr_cbufs == 0) {
|
||||
nvc0_fb_set_null_rt(push, 0);
|
||||
BEGIN_NVC0(push, NVC0_3D(RT_CONTROL), 1);
|
||||
PUSH_DATA (push, (076543210 << 4) | 1);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
nvc0_switch_pipe_context(struct nvc0_context *ctx_to)
|
||||
{
|
||||
@@ -597,6 +614,7 @@ static struct state_validate {
|
||||
{ nvc0_fragprog_validate, NVC0_NEW_FRAGPROG },
|
||||
{ nvc0_validate_derived_1, NVC0_NEW_FRAGPROG | NVC0_NEW_ZSA |
|
||||
NVC0_NEW_RASTERIZER },
|
||||
{ nvc0_validate_derived_2, NVC0_NEW_ZSA | NVC0_NEW_FRAMEBUFFER },
|
||||
{ nvc0_validate_clip, NVC0_NEW_CLIP | NVC0_NEW_RASTERIZER |
|
||||
NVC0_NEW_VERTPROG |
|
||||
NVC0_NEW_TEVLPROG |
|
||||
|
@@ -1376,6 +1376,7 @@ static void
|
||||
nvc0_blit(struct pipe_context *pipe, const struct pipe_blit_info *info)
|
||||
{
|
||||
struct nvc0_context *nvc0 = nvc0_context(pipe);
|
||||
struct nouveau_pushbuf *push = nvc0->base.pushbuf;
|
||||
boolean eng3d = FALSE;
|
||||
|
||||
if (util_format_is_depth_or_stencil(info->dst.resource->format)) {
|
||||
@@ -1439,11 +1440,17 @@ nvc0_blit(struct pipe_context *pipe, const struct pipe_blit_info *info)
|
||||
info->src.box.height != -info->dst.box.height))
|
||||
eng3d = TRUE;
|
||||
|
||||
if (nvc0->screen->num_occlusion_queries_active)
|
||||
IMMED_NVC0(push, NVC0_3D(SAMPLECNT_ENABLE), 0);
|
||||
|
||||
if (!eng3d)
|
||||
nvc0_blit_eng2d(nvc0, info);
|
||||
else
|
||||
nvc0_blit_3d(nvc0, info);
|
||||
|
||||
if (nvc0->screen->num_occlusion_queries_active)
|
||||
IMMED_NVC0(push, NVC0_3D(SAMPLECNT_ENABLE), 1);
|
||||
|
||||
NOUVEAU_DRV_STAT(&nvc0->screen->base, tex_blit_count, 1);
|
||||
}
|
||||
|
||||
|
@@ -829,6 +829,7 @@ nvc0_draw_indirect(struct nvc0_context *nvc0, const struct pipe_draw_info *info)
|
||||
}
|
||||
PUSH_DATA(push, nvc0_prim_gl(info->mode));
|
||||
#define NVC0_IB_ENTRY_1_NO_PREFETCH (1 << (31 - 8))
|
||||
PUSH_REFN(push, buf->bo, NOUVEAU_BO_RD | buf->domain);
|
||||
nouveau_pushbuf_space(push, 0, 0, 1);
|
||||
nouveau_pushbuf_data(push,
|
||||
buf->bo, offset, NVC0_IB_ENTRY_1_NO_PREFETCH | size);
|
||||
|
@@ -393,7 +393,12 @@ static void r600_clear(struct pipe_context *ctx, unsigned buffers,
|
||||
struct r600_context *rctx = (struct r600_context *)ctx;
|
||||
struct pipe_framebuffer_state *fb = &rctx->framebuffer.state;
|
||||
|
||||
if (buffers & PIPE_CLEAR_COLOR && rctx->b.chip_class >= EVERGREEN) {
|
||||
/* Single-sample fast color clear is broken on r600g:
|
||||
* https://bugs.freedesktop.org/show_bug.cgi?id=73528
|
||||
* https://bugs.freedesktop.org/show_bug.cgi?id=82186
|
||||
*/
|
||||
if (buffers & PIPE_CLEAR_COLOR && rctx->b.chip_class >= EVERGREEN &&
|
||||
rctx->framebuffer.nr_samples > 1) {
|
||||
evergreen_do_fast_color_clear(&rctx->b, fb, &rctx->framebuffer.atom,
|
||||
&buffers, color);
|
||||
}
|
||||
|
@@ -139,6 +139,10 @@ static unsigned si_get_ia_multi_vgt_param(struct si_context *sctx,
|
||||
(info->indirect || info->instance_count > 1))
|
||||
wd_switch_on_eop = true;
|
||||
|
||||
/* USE_OPAQUE doesn't work when WD_SWITCH_ON_EOP is 0. */
|
||||
if (info->count_from_stream_output)
|
||||
wd_switch_on_eop = true;
|
||||
|
||||
/* If the WD switch is false, the IA switch must be false too. */
|
||||
assert(wd_switch_on_eop || !ia_switch_on_eop);
|
||||
}
|
||||
|
@@ -835,8 +835,15 @@ static void si_update_spi_tmpring_size(struct si_context *sctx)
|
||||
si_pm4_bind_state(sctx, ps, sctx->ps_shader->current->pm4);
|
||||
if (si_update_scratch_buffer(sctx, sctx->gs_shader))
|
||||
si_pm4_bind_state(sctx, gs, sctx->gs_shader->current->pm4);
|
||||
if (si_update_scratch_buffer(sctx, sctx->vs_shader))
|
||||
si_pm4_bind_state(sctx, vs, sctx->vs_shader->current->pm4);
|
||||
|
||||
/* VS can be bound as ES or VS. */
|
||||
if (sctx->gs_shader) {
|
||||
if (si_update_scratch_buffer(sctx, sctx->vs_shader))
|
||||
si_pm4_bind_state(sctx, es, sctx->vs_shader->current->pm4);
|
||||
} else {
|
||||
if (si_update_scratch_buffer(sctx, sctx->vs_shader))
|
||||
si_pm4_bind_state(sctx, vs, sctx->vs_shader->current->pm4);
|
||||
}
|
||||
}
|
||||
|
||||
/* The LLVM shader backend should be reporting aligned scratch_sizes. */
|
||||
|
@@ -31,7 +31,12 @@ extern "C" {
|
||||
PUBLIC bool
|
||||
opencl_dri_event_add_ref(cl_event event)
|
||||
{
|
||||
return clRetainEvent(event) == CL_SUCCESS;
|
||||
/* This should fail if the event hasn't been created by
|
||||
* clEnqueueReleaseGLObjects or clEnqueueReleaseEGLObjects.
|
||||
*
|
||||
* TODO: implement the CL functions
|
||||
*/
|
||||
return false; /*return clRetainEvent(event) == CL_SUCCESS;*/
|
||||
}
|
||||
|
||||
PUBLIC bool
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include "CL/cl.h"
|
||||
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
|
||||
namespace clover {
|
||||
class command_queue;
|
||||
|
@@ -554,7 +554,7 @@ dri2_allocate_textures(struct dri_context *ctx,
|
||||
|
||||
if (drawable->textures[statt]) {
|
||||
templ.format = drawable->textures[statt]->format;
|
||||
templ.bind = drawable->textures[statt]->bind;
|
||||
templ.bind = drawable->textures[statt]->bind & ~PIPE_BIND_SCANOUT;
|
||||
templ.nr_samples = drawable->stvis.samples;
|
||||
|
||||
/* Try to reuse the resource.
|
||||
@@ -1483,7 +1483,7 @@ dri2_init_screen(__DRIscreen * sPriv)
|
||||
}
|
||||
}
|
||||
|
||||
if (pscreen->get_param(pscreen, PIPE_CAP_DEVICE_RESET_STATUS_QUERY)) {
|
||||
if (pscreen && pscreen->get_param(pscreen, PIPE_CAP_DEVICE_RESET_STATUS_QUERY)) {
|
||||
sPriv->extensions = dri_robust_screen_extensions;
|
||||
screen->has_reset_status_query = true;
|
||||
}
|
||||
|
@@ -244,11 +244,10 @@ dri_make_current(__DRIcontext * cPriv,
|
||||
|
||||
ctx->stapi->make_current(ctx->stapi, ctx->st, &draw->base, &read->base);
|
||||
|
||||
// This is ok to call here. If they are already init, it's a no-op.
|
||||
if (draw->textures[ST_ATTACHMENT_BACK_LEFT] && draw->textures[ST_ATTACHMENT_DEPTH_STENCIL]
|
||||
&& ctx->pp)
|
||||
pp_init_fbos(ctx->pp, draw->textures[ST_ATTACHMENT_BACK_LEFT]->width0,
|
||||
draw->textures[ST_ATTACHMENT_BACK_LEFT]->height0);
|
||||
/* This is ok to call here. If they are already init, it's a no-op. */
|
||||
if (ctx->pp && draw->textures[ST_ATTACHMENT_BACK_LEFT])
|
||||
pp_init_fbos(ctx->pp, draw->textures[ST_ATTACHMENT_BACK_LEFT]->width0,
|
||||
draw->textures[ST_ATTACHMENT_BACK_LEFT]->height0);
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
@@ -886,7 +886,7 @@ static struct name_function functions[] = {
|
||||
{ "OSMesaDestroyContext", (OSMESAproc) OSMesaDestroyContext },
|
||||
{ "OSMesaMakeCurrent", (OSMESAproc) OSMesaMakeCurrent },
|
||||
{ "OSMesaGetCurrentContext", (OSMESAproc) OSMesaGetCurrentContext },
|
||||
{ "OSMesaPixelsStore", (OSMESAproc) OSMesaPixelStore },
|
||||
{ "OSMesaPixelStore", (OSMESAproc) OSMesaPixelStore },
|
||||
{ "OSMesaGetIntegerv", (OSMESAproc) OSMesaGetIntegerv },
|
||||
{ "OSMesaGetDepthBuffer", (OSMESAproc) OSMesaGetDepthBuffer },
|
||||
{ "OSMesaGetColorBuffer", (OSMESAproc) OSMesaGetColorBuffer },
|
||||
|
@@ -49,7 +49,8 @@ vlVdpVideoMixerCreate(VdpDevice device,
|
||||
vlVdpVideoMixer *vmixer = NULL;
|
||||
VdpStatus ret;
|
||||
struct pipe_screen *screen;
|
||||
unsigned max_width, max_height, i;
|
||||
uint32_t max_2d_texture_level;
|
||||
unsigned max_size, i;
|
||||
|
||||
vlVdpDevice *dev = vlGetDataHTAB(device);
|
||||
if (!dev)
|
||||
@@ -134,18 +135,17 @@ vlVdpVideoMixerCreate(VdpDevice device,
|
||||
VDPAU_MSG(VDPAU_WARN, "[VDPAU] Max layers > 4 not supported\n", vmixer->max_layers);
|
||||
goto no_params;
|
||||
}
|
||||
max_width = screen->get_video_param(screen, PIPE_VIDEO_PROFILE_UNKNOWN,
|
||||
PIPE_VIDEO_ENTRYPOINT_BITSTREAM, PIPE_VIDEO_CAP_MAX_WIDTH);
|
||||
max_height = screen->get_video_param(screen, PIPE_VIDEO_PROFILE_UNKNOWN,
|
||||
PIPE_VIDEO_ENTRYPOINT_BITSTREAM, PIPE_VIDEO_CAP_MAX_HEIGHT);
|
||||
if (vmixer->video_width < 48 ||
|
||||
vmixer->video_width > max_width) {
|
||||
VDPAU_MSG(VDPAU_WARN, "[VDPAU] 48 < %u < %u not valid for width\n", vmixer->video_width, max_width);
|
||||
|
||||
max_2d_texture_level = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS);
|
||||
max_size = pow(2, max_2d_texture_level-1);
|
||||
if (vmixer->video_width < 48 || vmixer->video_width > max_size) {
|
||||
VDPAU_MSG(VDPAU_WARN, "[VDPAU] 48 < %u < %u not valid for width\n",
|
||||
vmixer->video_width, max_size);
|
||||
goto no_params;
|
||||
}
|
||||
if (vmixer->video_height < 48 ||
|
||||
vmixer->video_height > max_height) {
|
||||
VDPAU_MSG(VDPAU_WARN, "[VDPAU] 48 < %u < %u not valid for height\n", vmixer->video_height, max_height);
|
||||
if (vmixer->video_height < 48 || vmixer->video_height > max_size) {
|
||||
VDPAU_MSG(VDPAU_WARN, "[VDPAU] 48 < %u < %u not valid for height\n",
|
||||
vmixer->video_height, max_size);
|
||||
goto no_params;
|
||||
}
|
||||
vmixer->luma_key_min = 0.f;
|
||||
|
@@ -37,7 +37,11 @@
|
||||
XA_EXPORT void
|
||||
xa_context_flush(struct xa_context *ctx)
|
||||
{
|
||||
ctx->pipe->flush(ctx->pipe, &ctx->last_fence, 0);
|
||||
if (ctx->last_fence) {
|
||||
struct pipe_screen *screen = ctx->xa->screen;
|
||||
screen->fence_reference(screen, &ctx->last_fence, NULL);
|
||||
}
|
||||
ctx->pipe->flush(ctx->pipe, &ctx->last_fence, 0);
|
||||
}
|
||||
|
||||
XA_EXPORT struct xa_context *
|
||||
|
@@ -461,7 +461,7 @@ xa_surface_redefine(struct xa_surface *srf,
|
||||
xa_min(save_height, template->height0), &src_box);
|
||||
pipe->resource_copy_region(pipe, texture,
|
||||
0, 0, 0, 0, srf->tex, 0, &src_box);
|
||||
pipe->flush(pipe, &xa->default_ctx->last_fence, 0);
|
||||
xa_context_flush(xa->default_ctx);
|
||||
}
|
||||
|
||||
pipe_resource_reference(&srf->tex, texture);
|
||||
@@ -535,15 +535,3 @@ xa_surface_format(const struct xa_surface *srf)
|
||||
{
|
||||
return srf->fdesc.xa_format;
|
||||
}
|
||||
|
||||
/*
|
||||
* _mesa_error_no_memory() is expected by NIR to be provided by the
|
||||
* user. Normally this is in mesa st, but other state trackers
|
||||
* must provide their own.
|
||||
*/
|
||||
void _mesa_error_no_memory(const char *caller);
|
||||
void
|
||||
_mesa_error_no_memory(const char *caller)
|
||||
{
|
||||
debug_printf("Mesa error: out of memory in %s", caller);
|
||||
}
|
||||
|
@@ -154,7 +154,7 @@ xa_yuv_planar_blit(struct xa_context *r,
|
||||
box++;
|
||||
}
|
||||
|
||||
r->pipe->flush(r->pipe, &r->last_fence, 0);
|
||||
xa_context_flush(r);
|
||||
|
||||
xa_ctx_sampler_views_destroy(r);
|
||||
xa_ctx_srf_destroy(r);
|
||||
|
@@ -74,6 +74,8 @@ endif # HAVE_LD_VERSION_SCRIPT
|
||||
d3dadapter9_la_LIBADD = \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgalliumvl_stub.la \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
|
||||
$(top_builddir)/src/glsl/libnir.la \
|
||||
$(top_builddir)/src/libglsl_util.la \
|
||||
$(top_builddir)/src/gallium/state_trackers/nine/libninetracker.la \
|
||||
$(top_builddir)/src/util/libmesautil.la \
|
||||
$(top_builddir)/src/gallium/winsys/sw/wrapper/libwsw.la \
|
||||
|
@@ -53,12 +53,6 @@ gallium_dri_la_LIBADD = \
|
||||
$(LIBDRM_LIBS) \
|
||||
$(GALLIUM_COMMON_LIB_DEPS)
|
||||
|
||||
# XXX: Temporary allow duplicated symbols, as the loader pulls in xmlconfig.c
|
||||
# which already provides driParse* and driQuery* amongst others.
|
||||
# Remove this hack as we come up with a cleaner solution.
|
||||
gallium_dri_la_LDFLAGS += \
|
||||
-Wl,--allow-multiple-definition
|
||||
|
||||
EXTRA_gallium_dri_la_DEPENDENCIES = \
|
||||
dri.sym \
|
||||
$(top_srcdir)/src/gallium/targets/dri-vdpau.dyn
|
||||
|
@@ -42,7 +42,6 @@ nodist_EXTRA_lib@OSMESA_LIB@_la_SOURCES = dummy.cpp
|
||||
lib@OSMESA_LIB@_la_SOURCES = target.c
|
||||
|
||||
lib@OSMESA_LIB@_la_LDFLAGS = \
|
||||
-module \
|
||||
-no-undefined \
|
||||
-version-number @OSMESA_VERSION@ \
|
||||
$(GC_SECTIONS) \
|
||||
|
@@ -52,6 +52,8 @@ endif
|
||||
|
||||
PIPE_LIBS += \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
|
||||
$(top_builddir)/src/glsl/libnir.la \
|
||||
$(top_builddir)/src/libglsl_util.la \
|
||||
$(top_builddir)/src/util/libmesautil.la \
|
||||
$(top_builddir)/src/gallium/drivers/rbug/librbug.la \
|
||||
$(top_builddir)/src/gallium/drivers/trace/libtrace.la \
|
||||
|
@@ -120,7 +120,11 @@ nouveau_drm_screen_create(int fd)
|
||||
if (!screen)
|
||||
goto err;
|
||||
|
||||
util_hash_table_set(fd_tab, intptr_to_pointer(fd), screen);
|
||||
/* Use dupfd in hash table, to avoid errors if the original fd gets
|
||||
* closed by its owner. The hash key needs to live at least as long as
|
||||
* the screen.
|
||||
*/
|
||||
util_hash_table_set(fd_tab, intptr_to_pointer(dupfd), screen);
|
||||
screen->refcount = 1;
|
||||
pipe_mutex_unlock(nouveau_screen_mutex);
|
||||
return &screen->base;
|
||||
|
@@ -305,14 +305,34 @@ static void radeon_bo_destroy(struct pb_buffer *_buf)
|
||||
if (bo->ptr)
|
||||
os_munmap(bo->ptr, bo->base.size);
|
||||
|
||||
if (mgr->va) {
|
||||
if (bo->rws->va_unmap_working) {
|
||||
struct drm_radeon_gem_va va;
|
||||
|
||||
va.handle = bo->handle;
|
||||
va.vm_id = 0;
|
||||
va.operation = RADEON_VA_UNMAP;
|
||||
va.flags = RADEON_VM_PAGE_READABLE |
|
||||
RADEON_VM_PAGE_WRITEABLE |
|
||||
RADEON_VM_PAGE_SNOOPED;
|
||||
va.offset = bo->va;
|
||||
|
||||
if (drmCommandWriteRead(bo->rws->fd, DRM_RADEON_GEM_VA, &va,
|
||||
sizeof(va)) != 0 &&
|
||||
va.operation == RADEON_VA_RESULT_ERROR) {
|
||||
fprintf(stderr, "radeon: Failed to deallocate virtual address for buffer:\n");
|
||||
fprintf(stderr, "radeon: size : %d bytes\n", bo->base.size);
|
||||
fprintf(stderr, "radeon: va : 0x%016llx\n", (unsigned long long)bo->va);
|
||||
}
|
||||
}
|
||||
|
||||
radeon_bomgr_free_va(mgr, bo->va, bo->base.size);
|
||||
}
|
||||
|
||||
/* Close object. */
|
||||
args.handle = bo->handle;
|
||||
drmIoctl(bo->rws->fd, DRM_IOCTL_GEM_CLOSE, &args);
|
||||
|
||||
if (mgr->va) {
|
||||
radeon_bomgr_free_va(mgr, bo->va, bo->base.size);
|
||||
}
|
||||
|
||||
pipe_mutex_destroy(bo->map_mutex);
|
||||
|
||||
if (bo->initial_domain & RADEON_DOMAIN_VRAM)
|
||||
|
@@ -57,6 +57,8 @@
|
||||
#define RADEON_INFO_READ_REG 0x24
|
||||
#endif
|
||||
|
||||
#define RADEON_INFO_VA_UNMAP_WORKING 0x25
|
||||
|
||||
static struct util_hash_table *fd_tab = NULL;
|
||||
pipe_static_mutex(fd_tab_mutex);
|
||||
|
||||
@@ -399,6 +401,8 @@ static boolean do_winsys_init(struct radeon_drm_winsys *ws)
|
||||
if (!radeon_get_drm_value(ws->fd, RADEON_INFO_IB_VM_MAX_SIZE, NULL,
|
||||
&ib_vm_max_size))
|
||||
ws->info.r600_virtual_address = FALSE;
|
||||
radeon_get_drm_value(ws->fd, RADEON_INFO_VA_UNMAP_WORKING, NULL,
|
||||
&ws->va_unmap_working);
|
||||
}
|
||||
if (ws->gen == DRV_R600 && !debug_get_bool_option("RADEON_VA", FALSE))
|
||||
ws->info.r600_virtual_address = FALSE;
|
||||
@@ -484,6 +488,10 @@ static void radeon_winsys_destroy(struct radeon_winsys *rws)
|
||||
if (ws->gen >= DRV_R600) {
|
||||
radeon_surface_manager_free(ws->surf_man);
|
||||
}
|
||||
|
||||
if (ws->fd)
|
||||
close(ws->fd);
|
||||
|
||||
FREE(rws);
|
||||
}
|
||||
|
||||
@@ -696,7 +704,7 @@ radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ws->fd = fd;
|
||||
ws->fd = dup(fd);
|
||||
|
||||
if (!do_winsys_init(ws))
|
||||
goto fail;
|
||||
@@ -712,7 +720,7 @@ radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create)
|
||||
goto fail;
|
||||
|
||||
if (ws->gen >= DRV_R600) {
|
||||
ws->surf_man = radeon_surface_manager_new(fd);
|
||||
ws->surf_man = radeon_surface_manager_new(ws->fd);
|
||||
if (!ws->surf_man)
|
||||
goto fail;
|
||||
}
|
||||
@@ -753,7 +761,7 @@ radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
util_hash_table_set(fd_tab, intptr_to_pointer(fd), ws);
|
||||
util_hash_table_set(fd_tab, intptr_to_pointer(ws->fd), ws);
|
||||
|
||||
/* We must unlock the mutex once the winsys is fully initialized, so that
|
||||
* other threads attempting to create the winsys from the same fd will
|
||||
@@ -770,6 +778,9 @@ fail:
|
||||
ws->kman->destroy(ws->kman);
|
||||
if (ws->surf_man)
|
||||
radeon_surface_manager_free(ws->surf_man);
|
||||
if (ws->fd)
|
||||
close(ws->fd);
|
||||
|
||||
FREE(ws);
|
||||
return NULL;
|
||||
}
|
||||
|
@@ -74,6 +74,7 @@ struct radeon_drm_winsys {
|
||||
enum radeon_generation gen;
|
||||
struct radeon_info info;
|
||||
uint32_t va_start;
|
||||
uint32_t va_unmap_working;
|
||||
uint32_t accel_working2;
|
||||
|
||||
struct pb_manager *kman;
|
||||
|
@@ -52,7 +52,8 @@ libgbm_dri_la_CFLAGS = \
|
||||
$(LIBDRM_CFLAGS)
|
||||
|
||||
libgbm_la_LIBADD += \
|
||||
libgbm_dri.la $(top_builddir)/src/mapi/shared-glapi/libglapi.la $(LIBDRM_LIBS)
|
||||
libgbm_dri.la \
|
||||
$(LIBDRM_LIBS)
|
||||
endif
|
||||
|
||||
TESTS = gbm-symbols-check
|
||||
|
@@ -311,6 +311,14 @@ dri_open_driver(struct gbm_dri_device *dri)
|
||||
if (search_paths == NULL)
|
||||
search_paths = DEFAULT_DRIVER_DIR;
|
||||
|
||||
/* Temporarily work around dri driver libs that need symbols in libglapi
|
||||
* but don't automatically link it in.
|
||||
*/
|
||||
/* XXX: Library name differs on per platforms basis. Update this as
|
||||
* osx/cygwin/windows/bsd gets support for GBM..
|
||||
*/
|
||||
dlopen("libglapi.so.0", RTLD_LAZY | RTLD_GLOBAL);
|
||||
|
||||
dri->driver = NULL;
|
||||
end = search_paths + strlen(search_paths);
|
||||
for (p = search_paths; p < end && dri->driver == NULL; p = next + 1) {
|
||||
|
@@ -89,8 +89,7 @@ tests_general_ir_test_SOURCES = \
|
||||
tests/builtin_variable_test.cpp \
|
||||
tests/invalidate_locations_test.cpp \
|
||||
tests/general_ir_test.cpp \
|
||||
tests/varyings_test.cpp \
|
||||
tests/common.c
|
||||
tests/varyings_test.cpp
|
||||
tests_general_ir_test_CFLAGS = \
|
||||
$(PTHREAD_CFLAGS)
|
||||
tests_general_ir_test_LDADD = \
|
||||
@@ -103,8 +102,7 @@ tests_uniform_initializer_test_SOURCES = \
|
||||
tests/copy_constant_to_storage_tests.cpp \
|
||||
tests/set_uniform_initializer_tests.cpp \
|
||||
tests/uniform_initializer_utils.cpp \
|
||||
tests/uniform_initializer_utils.h \
|
||||
tests/common.c
|
||||
tests/uniform_initializer_utils.h
|
||||
tests_uniform_initializer_test_CFLAGS = \
|
||||
$(PTHREAD_CFLAGS)
|
||||
tests_uniform_initializer_test_LDADD = \
|
||||
@@ -114,8 +112,7 @@ tests_uniform_initializer_test_LDADD = \
|
||||
$(PTHREAD_LIBS)
|
||||
|
||||
tests_sampler_types_test_SOURCES = \
|
||||
tests/sampler_types_test.cpp \
|
||||
tests/common.c
|
||||
tests/sampler_types_test.cpp
|
||||
tests_sampler_types_test_CFLAGS = \
|
||||
$(PTHREAD_CFLAGS)
|
||||
tests_sampler_types_test_LDADD = \
|
||||
@@ -133,8 +130,7 @@ libglcpp_la_SOURCES = \
|
||||
$(LIBGLCPP_FILES)
|
||||
|
||||
glcpp_glcpp_SOURCES = \
|
||||
glcpp/glcpp.c \
|
||||
tests/common.c
|
||||
glcpp/glcpp.c
|
||||
glcpp_glcpp_LDADD = \
|
||||
libglcpp.la \
|
||||
$(top_builddir)/src/libglsl_util.la \
|
||||
@@ -164,7 +160,6 @@ glsl_compiler_LDADD = \
|
||||
|
||||
glsl_test_SOURCES = \
|
||||
standalone_scaffolding.cpp \
|
||||
tests/common.c \
|
||||
test.cpp \
|
||||
test_optpass.cpp \
|
||||
test_optpass.h
|
||||
|
@@ -71,6 +71,7 @@ env.Command('imports.c', '#src/mesa/main/imports.c', Copy('$TARGET', '$SOURCE'))
|
||||
env.Prepend(CPPPATH = ['#src/mesa/program'])
|
||||
env.Command('prog_hash_table.c', '#src/mesa/program/prog_hash_table.c', Copy('$TARGET', '$SOURCE'))
|
||||
env.Command('symbol_table.c', '#src/mesa/program/symbol_table.c', Copy('$TARGET', '$SOURCE'))
|
||||
env.Command('dummy_errors.c', '#src/mesa/program/dummy_errors.c', Copy('$TARGET', '$SOURCE'))
|
||||
|
||||
compiler_objs = env.StaticObject(source_lists['GLSL_COMPILER_CXX_FILES'])
|
||||
|
||||
@@ -78,6 +79,7 @@ mesa_objs = env.StaticObject([
|
||||
'imports.c',
|
||||
'prog_hash_table.c',
|
||||
'symbol_table.c',
|
||||
'dummy_errors.c',
|
||||
])
|
||||
|
||||
compiler_objs += mesa_objs
|
||||
@@ -115,6 +117,6 @@ env.Alias('glsl_compiler', glsl_compiler)
|
||||
|
||||
glcpp = env.Program(
|
||||
target = 'glcpp/glcpp',
|
||||
source = ['glcpp/glcpp.c', 'tests/common.c'] + mesa_objs,
|
||||
source = ['glcpp/glcpp.c'] + mesa_objs,
|
||||
)
|
||||
env.Alias('glcpp', glcpp)
|
||||
|
@@ -225,25 +225,25 @@ _mesa_ast_array_index_to_hir(void *mem_ctx,
|
||||
* values *do* diverge, then the behavior of the operation requiring a
|
||||
* dynamically uniform expression is undefined.
|
||||
*/
|
||||
if (array->type->element_type()->is_sampler()) {
|
||||
if (!state->is_version(130, 100)) {
|
||||
if (state->es_shader) {
|
||||
_mesa_glsl_warning(&loc, state,
|
||||
"sampler arrays indexed with non-constant "
|
||||
"expressions is optional in %s",
|
||||
state->get_version_string());
|
||||
} else {
|
||||
_mesa_glsl_warning(&loc, state,
|
||||
"sampler arrays indexed with non-constant "
|
||||
"expressions will be forbidden in GLSL 1.30 "
|
||||
"and later");
|
||||
}
|
||||
} else if (!state->is_version(400, 0) && !state->ARB_gpu_shader5_enable) {
|
||||
_mesa_glsl_error(&loc, state,
|
||||
"sampler arrays indexed with non-constant "
|
||||
"expressions is forbidden in GLSL 1.30 and "
|
||||
"later");
|
||||
}
|
||||
if (array->type->without_array()->is_sampler()) {
|
||||
if (!state->is_version(400, 0) && !state->ARB_gpu_shader5_enable) {
|
||||
if (state->is_version(130, 300))
|
||||
_mesa_glsl_error(&loc, state,
|
||||
"sampler arrays indexed with non-constant "
|
||||
"expressions are forbidden in GLSL %s "
|
||||
"and later",
|
||||
state->es_shader ? "ES 3.00" : "1.30");
|
||||
else if (state->es_shader)
|
||||
_mesa_glsl_warning(&loc, state,
|
||||
"sampler arrays indexed with non-constant "
|
||||
"expressions will be forbidden in GLSL "
|
||||
"3.00 and later");
|
||||
else
|
||||
_mesa_glsl_warning(&loc, state,
|
||||
"sampler arrays indexed with non-constant "
|
||||
"expressions will be forbidden in GLSL "
|
||||
"1.30 and later");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -2086,7 +2086,7 @@ validate_binding_qualifier(struct _mesa_glsl_parse_state *state,
|
||||
* with an array of size N, all elements of the array from binding
|
||||
* through binding + N - 1 must be within this range."
|
||||
*/
|
||||
unsigned limit = ctx->Const.Program[state->stage].MaxTextureImageUnits;
|
||||
unsigned limit = ctx->Const.MaxCombinedTextureImageUnits;
|
||||
|
||||
if (max_index >= limit) {
|
||||
_mesa_glsl_error(loc, state, "layout(binding = %d) for %d samplers "
|
||||
|
@@ -876,9 +876,9 @@ void
|
||||
builtin_variable_generator::generate_gs_special_vars()
|
||||
{
|
||||
add_output(VARYING_SLOT_LAYER, int_t, "gl_Layer");
|
||||
if (state->ARB_viewport_array_enable)
|
||||
if (state->is_version(410, 0) || state->ARB_viewport_array_enable)
|
||||
add_output(VARYING_SLOT_VIEWPORT, int_t, "gl_ViewportIndex");
|
||||
if (state->ARB_gpu_shader5_enable)
|
||||
if (state->is_version(400, 0) || state->ARB_gpu_shader5_enable)
|
||||
add_system_value(SYSTEM_VALUE_INVOCATION_ID, int_t, "gl_InvocationID");
|
||||
|
||||
/* Although gl_PrimitiveID appears in tessellation control and tessellation
|
||||
@@ -946,7 +946,7 @@ builtin_variable_generator::generate_fs_special_vars()
|
||||
var->enable_extension_warning("GL_AMD_shader_stencil_export");
|
||||
}
|
||||
|
||||
if (state->ARB_sample_shading_enable) {
|
||||
if (state->is_version(400, 0) || state->ARB_sample_shading_enable) {
|
||||
add_system_value(SYSTEM_VALUE_SAMPLE_ID, int_t, "gl_SampleID");
|
||||
add_system_value(SYSTEM_VALUE_SAMPLE_POS, vec2_t, "gl_SamplePosition");
|
||||
/* From the ARB_sample_shading specification:
|
||||
@@ -959,11 +959,11 @@ builtin_variable_generator::generate_fs_special_vars()
|
||||
add_output(FRAG_RESULT_SAMPLE_MASK, array(int_t, 1), "gl_SampleMask");
|
||||
}
|
||||
|
||||
if (state->ARB_gpu_shader5_enable) {
|
||||
if (state->is_version(400, 0) || state->ARB_gpu_shader5_enable) {
|
||||
add_system_value(SYSTEM_VALUE_SAMPLE_MASK_IN, array(int_t, 1), "gl_SampleMaskIn");
|
||||
}
|
||||
|
||||
if (state->ARB_fragment_layer_viewport_enable) {
|
||||
if (state->is_version(430, 0) || state->ARB_fragment_layer_viewport_enable) {
|
||||
add_input(VARYING_SLOT_LAYER, int_t, "gl_Layer");
|
||||
add_input(VARYING_SLOT_VIEWPORT, int_t, "gl_ViewportIndex");
|
||||
}
|
||||
|
@@ -148,9 +148,11 @@ get_parameter_match_type(const ir_variable *param,
|
||||
if (from_type == to_type)
|
||||
return PARAMETER_EXACT_MATCH;
|
||||
|
||||
/* XXX: When ARB_gpu_shader_fp64 support is added, check for float->double,
|
||||
* and int/uint->double conversions
|
||||
*/
|
||||
if (to_type->base_type == GLSL_TYPE_DOUBLE) {
|
||||
if (from_type->base_type == GLSL_TYPE_FLOAT)
|
||||
return PARAMETER_FLOAT_TO_DOUBLE;
|
||||
return PARAMETER_INT_TO_DOUBLE;
|
||||
}
|
||||
|
||||
if (to_type->base_type == GLSL_TYPE_FLOAT)
|
||||
return PARAMETER_INT_TO_FLOAT;
|
||||
|
@@ -346,6 +346,39 @@ private:
|
||||
bool uses_non_zero_stream;
|
||||
};
|
||||
|
||||
/* Class that finds array derefs and check if indexes are dynamic. */
|
||||
class dynamic_sampler_array_indexing_visitor : public ir_hierarchical_visitor
|
||||
{
|
||||
public:
|
||||
dynamic_sampler_array_indexing_visitor() :
|
||||
dynamic_sampler_array_indexing(false)
|
||||
{
|
||||
}
|
||||
|
||||
ir_visitor_status visit_enter(ir_dereference_array *ir)
|
||||
{
|
||||
if (!ir->variable_referenced())
|
||||
return visit_continue;
|
||||
|
||||
if (!ir->variable_referenced()->type->contains_sampler())
|
||||
return visit_continue;
|
||||
|
||||
if (!ir->array_index->constant_expression_value()) {
|
||||
dynamic_sampler_array_indexing = true;
|
||||
return visit_stop;
|
||||
}
|
||||
return visit_continue;
|
||||
}
|
||||
|
||||
bool uses_dynamic_sampler_array_indexing()
|
||||
{
|
||||
return dynamic_sampler_array_indexing;
|
||||
}
|
||||
|
||||
private:
|
||||
bool dynamic_sampler_array_indexing;
|
||||
};
|
||||
|
||||
} /* anonymous namespace */
|
||||
|
||||
void
|
||||
@@ -2736,6 +2769,40 @@ build_program_resource_list(struct gl_context *ctx,
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* This check is done to make sure we allow only constant expression
|
||||
* indexing and "constant-index-expression" (indexing with an expression
|
||||
* that includes loop induction variable).
|
||||
*/
|
||||
static bool
|
||||
validate_sampler_array_indexing(struct gl_context *ctx,
|
||||
struct gl_shader_program *prog)
|
||||
{
|
||||
dynamic_sampler_array_indexing_visitor v;
|
||||
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
if (prog->_LinkedShaders[i] == NULL)
|
||||
continue;
|
||||
|
||||
bool no_dynamic_indexing =
|
||||
ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectSampler;
|
||||
|
||||
/* Search for array derefs in shader. */
|
||||
v.run(prog->_LinkedShaders[i]->ir);
|
||||
if (v.uses_dynamic_sampler_array_indexing()) {
|
||||
const char *msg = "sampler arrays indexed with non-constant "
|
||||
"expressions is forbidden in GLSL %s %u";
|
||||
/* Backend has indicated that it has no dynamic indexing support. */
|
||||
if (no_dynamic_indexing) {
|
||||
linker_error(prog, msg, prog->IsES ? "ES" : "", prog->Version);
|
||||
return false;
|
||||
} else {
|
||||
linker_warning(prog, msg, prog->IsES ? "ES" : "", prog->Version);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
|
||||
@@ -2829,8 +2896,11 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
|
||||
link_intrastage_shaders(mem_ctx, ctx, prog, shader_list[stage],
|
||||
num_shaders[stage]);
|
||||
|
||||
if (!prog->LinkStatus)
|
||||
if (!prog->LinkStatus) {
|
||||
if (sh)
|
||||
ctx->Driver.DeleteShader(ctx, sh);
|
||||
goto done;
|
||||
}
|
||||
|
||||
switch (stage) {
|
||||
case MESA_SHADER_VERTEX:
|
||||
@@ -2843,8 +2913,11 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
|
||||
validate_fragment_shader_executable(prog, sh);
|
||||
break;
|
||||
}
|
||||
if (!prog->LinkStatus)
|
||||
if (!prog->LinkStatus) {
|
||||
if (sh)
|
||||
ctx->Driver.DeleteShader(ctx, sh);
|
||||
goto done;
|
||||
}
|
||||
|
||||
_mesa_reference_shader(ctx, &prog->_LinkedShaders[stage], sh);
|
||||
}
|
||||
@@ -2948,6 +3021,16 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
|
||||
lower_const_arrays_to_uniforms(prog->_LinkedShaders[i]->ir);
|
||||
}
|
||||
|
||||
/* Validation for special cases where we allow sampler array indexing
|
||||
* with loop induction variable. This check emits a warning or error
|
||||
* depending if backend can handle dynamic indexing.
|
||||
*/
|
||||
if ((!prog->IsES && prog->Version < 130) ||
|
||||
(prog->IsES && prog->Version < 300)) {
|
||||
if (!validate_sampler_array_indexing(ctx, prog))
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Check and validate stream emissions in geometry shaders */
|
||||
validate_geometry_shader_emissions(ctx, prog);
|
||||
|
||||
|
@@ -100,6 +100,18 @@ public:
|
||||
|
||||
virtual ir_visitor_status visit_enter(ir_dereference_array *ir)
|
||||
{
|
||||
/* Force unroll in case of dynamic indexing with sampler arrays
|
||||
* when EmitNoIndirectSampler is set.
|
||||
*/
|
||||
if (options->EmitNoIndirectSampler) {
|
||||
if ((ir->array->type->is_array() &&
|
||||
ir->array->type->contains_sampler()) &&
|
||||
!ir->array_index->constant_expression_value()) {
|
||||
unsupported_variable_indexing = true;
|
||||
return visit_continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for arrays variably-indexed by a loop induction variable.
|
||||
* Unrolling the loop may convert that access into constant-indexing.
|
||||
*
|
||||
|
@@ -41,12 +41,6 @@
|
||||
|
||||
static int glsl_version = 330;
|
||||
|
||||
extern "C" void
|
||||
_mesa_error_no_memory(const char *caller)
|
||||
{
|
||||
fprintf(stderr, "Mesa error: out of memory in %s", caller);
|
||||
}
|
||||
|
||||
static void
|
||||
initialize_context(struct gl_context *ctx, gl_api api)
|
||||
{
|
||||
|
@@ -580,7 +580,7 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
|
||||
continue;
|
||||
|
||||
ir_expression *add_expr = floor_expr->operands[0]->as_expression();
|
||||
if (!add_expr)
|
||||
if (!add_expr || add_expr->operation != ir_binop_add)
|
||||
continue;
|
||||
|
||||
for (int j = 0; j < 2; j++) {
|
||||
@@ -589,7 +589,7 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
|
||||
continue;
|
||||
|
||||
ir_constant *point_five = add_expr->operands[1 - j]->as_constant();
|
||||
if (!point_five->is_value(0.5, 0))
|
||||
if (!point_five || !point_five->is_value(0.5, 0))
|
||||
continue;
|
||||
|
||||
if (abs_expr->operands[0]->equals(sign_expr->operands[0])) {
|
||||
|
@@ -41,15 +41,11 @@ libloader_la_CPPFLAGS += \
|
||||
-I$(top_builddir)/src/mesa/drivers/dri/common/ \
|
||||
-I$(top_srcdir)/src/mesa/ \
|
||||
-I$(top_srcdir)/src/mapi/ \
|
||||
-DUSE_DRICONF \
|
||||
$(EXPAT_CFLAGS)
|
||||
-DUSE_DRICONF
|
||||
|
||||
libloader_la_SOURCES += \
|
||||
$(top_srcdir)/src/mesa/drivers/dri/common/xmlconfig.c
|
||||
libloader_la_LIBADD += \
|
||||
$(top_builddir)/src/mesa/drivers/dri/common/libxmlconfig.la
|
||||
|
||||
libloader_la_LIBADD += \
|
||||
-lm \
|
||||
$(EXPAT_LIBS)
|
||||
endif
|
||||
|
||||
if !HAVE_LIBDRM
|
||||
|
@@ -112,26 +112,36 @@ static void *udev_handle = NULL;
|
||||
static void *
|
||||
udev_dlopen_handle(void)
|
||||
{
|
||||
if (!udev_handle) {
|
||||
udev_handle = dlopen("libudev.so.1", RTLD_LOCAL | RTLD_LAZY);
|
||||
char name[80];
|
||||
unsigned flags = RTLD_NOLOAD | RTLD_LOCAL | RTLD_LAZY;
|
||||
int version;
|
||||
|
||||
if (!udev_handle) {
|
||||
/* libudev.so.1 changed the return types of the two unref functions
|
||||
* from voids to pointers. We don't use those return values, and the
|
||||
* only ABI I've heard that cares about this kind of change (calling
|
||||
* a function with a void * return that actually only returns void)
|
||||
* might be ia64.
|
||||
*/
|
||||
udev_handle = dlopen("libudev.so.0", RTLD_LOCAL | RTLD_LAZY);
|
||||
/* libudev.so.1 changed the return types of the two unref functions
|
||||
* from voids to pointers. We don't use those return values, and the
|
||||
* only ABI I've heard that cares about this kind of change (calling
|
||||
* a function with a void * return that actually only returns void)
|
||||
* might be ia64.
|
||||
*/
|
||||
|
||||
if (!udev_handle) {
|
||||
log_(_LOADER_WARNING, "Couldn't dlopen libudev.so.1 or "
|
||||
"libudev.so.0, driver detection may be broken.\n");
|
||||
}
|
||||
/* First try opening an already linked libudev, then try loading one */
|
||||
do {
|
||||
for (version = 1; version >= 0; version--) {
|
||||
snprintf(name, sizeof(name), "libudev.so.%d", version);
|
||||
udev_handle = dlopen(name, flags);
|
||||
if (udev_handle)
|
||||
return udev_handle;
|
||||
}
|
||||
}
|
||||
|
||||
return udev_handle;
|
||||
if ((flags & RTLD_NOLOAD) == 0)
|
||||
break;
|
||||
|
||||
flags &= ~RTLD_NOLOAD;
|
||||
} while (1);
|
||||
|
||||
log_(_LOADER_WARNING,
|
||||
"Couldn't dlopen libudev.so.1 or "
|
||||
"libudev.so.0, driver detection may be broken.\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int dlsym_failed = 0;
|
||||
|
@@ -61,6 +61,7 @@ EXTRA_DIST= \
|
||||
$(MESA_GLAPI_DIR)/glapi_x86-64.S \
|
||||
$(MESA_GLAPI_DIR)/glapi_sparc.S \
|
||||
$(COMMON_GLX) \
|
||||
apiexec.py \
|
||||
gl_apitemp.py \
|
||||
gl_enums.py \
|
||||
gl_genexec.py \
|
||||
@@ -267,7 +268,7 @@ $(MESA_GLAPI_DIR)/glapi_sparc.S: gl_SPARC_asm.py $(COMMON)
|
||||
$(MESA_DIR)/main/enums.c: gl_enums.py $(COMMON)
|
||||
$(PYTHON_GEN) $< -f $(srcdir)/gl_and_es_API.xml > $@
|
||||
|
||||
$(MESA_DIR)/main/api_exec.c: gl_genexec.py $(COMMON)
|
||||
$(MESA_DIR)/main/api_exec.c: gl_genexec.py apiexec.py $(COMMON)
|
||||
$(PYTHON_GEN) $< -f $(srcdir)/gl_and_es_API.xml > $@
|
||||
|
||||
$(MESA_DIR)/main/dispatch.h: gl_table.py $(COMMON)
|
||||
|
240
src/mapi/glapi/gen/apiexec.py
Normal file
240
src/mapi/glapi/gen/apiexec.py
Normal file
@@ -0,0 +1,240 @@
|
||||
# Copyright (C) 2015 Intel Corporation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
# IN THE SOFTWARE.
|
||||
|
||||
class exec_info():
|
||||
"""Information relating GL APIs to a function.
|
||||
|
||||
Each of the four attributes of this class, compatibility, core, es1, and
|
||||
es2, specify the minimum API version where a function can possibly exist
|
||||
in Mesa. The version is specified as an integer of (real GL version *
|
||||
10). For example, glCreateProgram was added in OpenGL 2.0, so
|
||||
compatibility=20 and core=31.
|
||||
|
||||
If the attribute is None, then it cannot be supported by that
|
||||
API. For example, glNewList was removed from core profiles, so
|
||||
compatibility=10 and core=None.
|
||||
|
||||
Each of the attributes that is not None must have a valid value. The
|
||||
valid ranges are:
|
||||
|
||||
compatiblity: [10, 30]
|
||||
core: [31, )
|
||||
es1: [10, 11]
|
||||
es2: [20, )
|
||||
|
||||
These ranges are enforced by the constructor.
|
||||
"""
|
||||
def __init__(self, compatibility=None, core=None, es1=None, es2=None):
|
||||
if compatibility is not None:
|
||||
assert isinstance(compatibility, int)
|
||||
assert compatibility >= 10
|
||||
assert compatibility <= 30
|
||||
|
||||
if core is not None:
|
||||
assert isinstance(core, int)
|
||||
assert core >= 31
|
||||
|
||||
if es1 is not None:
|
||||
assert isinstance(es1, int)
|
||||
assert es1 == 10 or es1 == 11
|
||||
|
||||
if es2 is not None:
|
||||
assert isinstance(es2, int)
|
||||
assert es2 >= 20
|
||||
|
||||
self.compatibility = compatibility
|
||||
self.core = core
|
||||
self.es1 = es1
|
||||
self.es2 = es2
|
||||
|
||||
functions = {
|
||||
# OpenGL 3.1 / GL_ARB_texture_buffer_object. Mesa only exposes this
|
||||
# extension with core profile.
|
||||
"TexBuffer": exec_info(core=31),
|
||||
|
||||
# OpenGL 3.2 / GL_ARB_geometry_shader4. Mesa does not support
|
||||
# GL_ARB_geometry_shader4, so OpenGL 3.2 is required.
|
||||
"FramebufferTexture": exec_info(core=32),
|
||||
|
||||
# OpenGL 4.0 / GL_ARB_gpu_shader_fp64. The extension spec says:
|
||||
#
|
||||
# "OpenGL 3.2 and GLSL 1.50 are required."
|
||||
"Uniform1d": exec_info(core=32),
|
||||
"Uniform2d": exec_info(core=32),
|
||||
"Uniform3d": exec_info(core=32),
|
||||
"Uniform4d": exec_info(core=32),
|
||||
"Uniform1dv": exec_info(core=32),
|
||||
"Uniform2dv": exec_info(core=32),
|
||||
"Uniform3dv": exec_info(core=32),
|
||||
"Uniform4dv": exec_info(core=32),
|
||||
"UniformMatrix2dv": exec_info(core=32),
|
||||
"UniformMatrix3dv": exec_info(core=32),
|
||||
"UniformMatrix4dv": exec_info(core=32),
|
||||
"UniformMatrix2x3dv": exec_info(core=32),
|
||||
"UniformMatrix2x4dv": exec_info(core=32),
|
||||
"UniformMatrix3x2dv": exec_info(core=32),
|
||||
"UniformMatrix3x4dv": exec_info(core=32),
|
||||
"UniformMatrix4x2dv": exec_info(core=32),
|
||||
"UniformMatrix4x3dv": exec_info(core=32),
|
||||
"GetUniformdv": exec_info(core=32),
|
||||
|
||||
# OpenGL 4.1 / GL_ARB_vertex_attrib_64bit. The extension spec says:
|
||||
#
|
||||
# "OpenGL 3.0 and GLSL 1.30 are required.
|
||||
#
|
||||
# ARB_gpu_shader_fp64 (or equivalent functionality) is required."
|
||||
#
|
||||
# For Mesa this effectively means OpenGL 3.2 is required. It seems
|
||||
# unlikely that Mesa will ever get support for any of the NV extensions
|
||||
# that add "equivalent functionality."
|
||||
"VertexAttribL1d": exec_info(core=32),
|
||||
"VertexAttribL2d": exec_info(core=32),
|
||||
"VertexAttribL3d": exec_info(core=32),
|
||||
"VertexAttribL4d": exec_info(core=32),
|
||||
"VertexAttribL1dv": exec_info(core=32),
|
||||
"VertexAttribL2dv": exec_info(core=32),
|
||||
"VertexAttribL3dv": exec_info(core=32),
|
||||
"VertexAttribL4dv": exec_info(core=32),
|
||||
"VertexAttribLPointer": exec_info(core=32),
|
||||
"GetVertexAttribLdv": exec_info(core=32),
|
||||
|
||||
# OpenGL 4.1 / GL_ARB_viewport_array. The extension spec says:
|
||||
#
|
||||
# "OpenGL 3.2 or the EXT_geometry_shader4 or ARB_geometry_shader4
|
||||
# extensions are required."
|
||||
#
|
||||
# Mesa does not support either of the geometry shader extensions, so
|
||||
# OpenGL 3.2 is required.
|
||||
"ViewportArrayv": exec_info(core=32),
|
||||
"ViewportIndexedf": exec_info(core=32),
|
||||
"ViewportIndexedfv": exec_info(core=32),
|
||||
"ScissorArrayv": exec_info(core=32),
|
||||
"ScissorIndexed": exec_info(core=32),
|
||||
"ScissorIndexedv": exec_info(core=32),
|
||||
"DepthRangeArrayv": exec_info(core=32),
|
||||
"DepthRangeIndexed": exec_info(core=32),
|
||||
# GetFloati_v also GL_ARB_shader_atomic_counters
|
||||
# GetDoublei_v also GL_ARB_shader_atomic_counters
|
||||
|
||||
# OpenGL 4.3 / GL_ARB_texture_buffer_range. Mesa can expose the extension
|
||||
# with OpenGL 3.1.
|
||||
"TexBufferRange": exec_info(core=31),
|
||||
|
||||
# OpenGL 4.5 / GL_ARB_direct_state_access. Mesa can expose the extension
|
||||
# with core profile.
|
||||
"CreateTransformFeedbacks": exec_info(core=31),
|
||||
"TransformFeedbackBufferBase": exec_info(core=31),
|
||||
"TransformFeedbackBufferRange": exec_info(core=31),
|
||||
"GetTransformFeedbackiv": exec_info(core=31),
|
||||
"GetTransformFeedbacki_v": exec_info(core=31),
|
||||
"GetTransformFeedbacki64_v": exec_info(core=31),
|
||||
"CreateBuffers": exec_info(core=31),
|
||||
"NamedBufferStorage": exec_info(core=31),
|
||||
"NamedBufferData": exec_info(core=31),
|
||||
"NamedBufferSubData": exec_info(core=31),
|
||||
"CopyNamedBufferSubData": exec_info(core=31),
|
||||
"ClearNamedBufferData": exec_info(core=31),
|
||||
"ClearNamedBufferSubData": exec_info(core=31),
|
||||
"MapNamedBuffer": exec_info(core=31),
|
||||
"MapNamedBufferRange": exec_info(core=31),
|
||||
"UnmapNamedBuffer": exec_info(core=31),
|
||||
"FlushMappedNamedBufferRange": exec_info(core=31),
|
||||
"GetNamedBufferParameteriv": exec_info(core=31),
|
||||
"GetNamedBufferParameteri64v": exec_info(core=31),
|
||||
"GetNamedBufferPointerv": exec_info(core=31),
|
||||
"GetNamedBufferSubData": exec_info(core=31),
|
||||
"CreateFramebuffers": exec_info(core=31),
|
||||
"NamedFramebufferRenderbuffer": exec_info(core=31),
|
||||
"NamedFramebufferParameteri": exec_info(core=31),
|
||||
"NamedFramebufferTexture": exec_info(core=31),
|
||||
"NamedFramebufferTextureLayer": exec_info(core=31),
|
||||
"NamedFramebufferDrawBuffer": exec_info(core=31),
|
||||
"NamedFramebufferDrawBuffers": exec_info(core=31),
|
||||
"NamedFramebufferReadBuffer": exec_info(core=31),
|
||||
"InvalidateNamedFramebufferData": exec_info(core=31),
|
||||
"InvalidateNamedFramebufferSubData": exec_info(core=31),
|
||||
"ClearNamedFramebufferiv": exec_info(core=31),
|
||||
"ClearNamedFramebufferuiv": exec_info(core=31),
|
||||
"ClearNamedFramebufferfv": exec_info(core=31),
|
||||
"ClearNamedFramebufferfi": exec_info(core=31),
|
||||
"BlitNamedFramebuffer": exec_info(core=31),
|
||||
"CheckNamedFramebufferStatus": exec_info(core=31),
|
||||
"GetNamedFramebufferParameteriv": exec_info(core=31),
|
||||
"GetNamedFramebufferAttachmentParameteriv": exec_info(core=31),
|
||||
"CreateRenderbuffers": exec_info(core=31),
|
||||
"NamedRenderbufferStorage": exec_info(core=31),
|
||||
"NamedRenderbufferStorageMultisample": exec_info(core=31),
|
||||
"GetNamedRenderbufferParameteriv": exec_info(core=31),
|
||||
"CreateTextures": exec_info(core=31),
|
||||
"TextureBuffer": exec_info(core=31),
|
||||
"TextureBufferRange": exec_info(core=31),
|
||||
"TextureStorage1D": exec_info(core=31),
|
||||
"TextureStorage2D": exec_info(core=31),
|
||||
"TextureStorage3D": exec_info(core=31),
|
||||
"TextureStorage2DMultisample": exec_info(core=31),
|
||||
"TextureStorage3DMultisample": exec_info(core=31),
|
||||
"TextureSubImage1D": exec_info(core=31),
|
||||
"TextureSubImage2D": exec_info(core=31),
|
||||
"TextureSubImage3D": exec_info(core=31),
|
||||
"CompressedTextureSubImage1D": exec_info(core=31),
|
||||
"CompressedTextureSubImage2D": exec_info(core=31),
|
||||
"CompressedTextureSubImage3D": exec_info(core=31),
|
||||
"CopyTextureSubImage1D": exec_info(core=31),
|
||||
"CopyTextureSubImage2D": exec_info(core=31),
|
||||
"CopyTextureSubImage3D": exec_info(core=31),
|
||||
"TextureParameterf": exec_info(core=31),
|
||||
"TextureParameterfv": exec_info(core=31),
|
||||
"TextureParameteri": exec_info(core=31),
|
||||
"TextureParameterIiv": exec_info(core=31),
|
||||
"TextureParameterIuiv": exec_info(core=31),
|
||||
"TextureParameteriv": exec_info(core=31),
|
||||
"GenerateTextureMipmap": exec_info(core=31),
|
||||
"BindTextureUnit": exec_info(core=31),
|
||||
"GetTextureImage": exec_info(core=31),
|
||||
"GetCompressedTextureImage": exec_info(core=31),
|
||||
"GetTextureLevelParameterfv": exec_info(core=31),
|
||||
"GetTextureLevelParameteriv": exec_info(core=31),
|
||||
"GetTextureParameterfv": exec_info(core=31),
|
||||
"GetTextureParameterIiv": exec_info(core=31),
|
||||
"GetTextureParameterIuiv": exec_info(core=31),
|
||||
"GetTextureParameteriv": exec_info(core=31),
|
||||
"CreateVertexArrays": exec_info(core=31),
|
||||
"DisableVertexArrayAttrib": exec_info(core=31),
|
||||
"EnableVertexArrayAttrib": exec_info(core=31),
|
||||
"VertexArrayElementBuffer": exec_info(core=31),
|
||||
"VertexArrayVertexBuffer": exec_info(core=31),
|
||||
"VertexArrayVertexBuffers": exec_info(core=31),
|
||||
"VertexArrayAttribFormat": exec_info(core=31),
|
||||
"VertexArrayAttribIFormat": exec_info(core=31),
|
||||
"VertexArrayAttribLFormat": exec_info(core=31),
|
||||
"VertexArrayAttribBinding": exec_info(core=31),
|
||||
"VertexArrayBindingDivisor": exec_info(core=31),
|
||||
"GetVertexArrayiv": exec_info(core=31),
|
||||
"GetVertexArrayIndexediv": exec_info(core=31),
|
||||
"GetVertexArrayIndexed64iv": exec_info(core=31),
|
||||
"CreateSamplers": exec_info(core=31),
|
||||
"CreateProgramPipelines": exec_info(core=31),
|
||||
"CreateQueries": exec_info(core=31),
|
||||
"GetQueryBufferObjectiv": exec_info(core=31),
|
||||
"GetQueryBufferObjectuiv": exec_info(core=31),
|
||||
"GetQueryBufferObjecti64v": exec_info(core=31),
|
||||
"GetQueryBufferObjectui64v": exec_info(core=31),
|
||||
}
|
@@ -29,6 +29,7 @@ import collections
|
||||
import license
|
||||
import gl_XML
|
||||
import sys, getopt
|
||||
import apiexec
|
||||
|
||||
|
||||
exec_flavor_map = {
|
||||
@@ -175,18 +176,49 @@ class PrintCode(gl_XML.gl_print_base):
|
||||
raise Exception(
|
||||
'Unrecognized exec flavor {0!r}'.format(f.exec_flavor))
|
||||
condition_parts = []
|
||||
if f.desktop:
|
||||
if f.deprecated:
|
||||
if f.name in apiexec.functions:
|
||||
ex = apiexec.functions[f.name]
|
||||
unconditional_count = 0
|
||||
|
||||
if ex.compatibility is not None:
|
||||
condition_parts.append('ctx->API == API_OPENGL_COMPAT')
|
||||
else:
|
||||
condition_parts.append('_mesa_is_desktop_gl(ctx)')
|
||||
if 'es1' in f.api_map:
|
||||
condition_parts.append('ctx->API == API_OPENGLES')
|
||||
if 'es2' in f.api_map:
|
||||
if f.api_map['es2'] > 2.0:
|
||||
condition_parts.append('(ctx->API == API_OPENGLES2 && ctx->Version >= {0})'.format(int(f.api_map['es2'] * 10)))
|
||||
else:
|
||||
condition_parts.append('ctx->API == API_OPENGLES2')
|
||||
unconditional_count += 1
|
||||
|
||||
if ex.core is not None:
|
||||
condition_parts.append('ctx->API == API_OPENGL_CORE')
|
||||
unconditional_count += 1
|
||||
|
||||
if ex.es1 is not None:
|
||||
condition_parts.append('ctx->API == API_OPENGLES')
|
||||
unconditional_count += 1
|
||||
|
||||
if ex.es2 is not None:
|
||||
if ex.es2 > 20:
|
||||
condition_parts.append('(ctx->API == API_OPENGLES2 && ctx->Version >= {0})'.format(ex.es2))
|
||||
else:
|
||||
condition_parts.append('ctx->API == API_OPENGLES2')
|
||||
unconditional_count += 1
|
||||
|
||||
# If the function is unconditionally available in all four
|
||||
# APIs, then it is always available. Replace the complex
|
||||
# tautology condition with "true" and let GCC do the right
|
||||
# thing.
|
||||
if unconditional_count == 4:
|
||||
condition_parts = ['true']
|
||||
else:
|
||||
if f.desktop:
|
||||
if f.deprecated:
|
||||
condition_parts.append('ctx->API == API_OPENGL_COMPAT')
|
||||
else:
|
||||
condition_parts.append('_mesa_is_desktop_gl(ctx)')
|
||||
if 'es1' in f.api_map:
|
||||
condition_parts.append('ctx->API == API_OPENGLES')
|
||||
if 'es2' in f.api_map:
|
||||
if f.api_map['es2'] > 2.0:
|
||||
condition_parts.append('(ctx->API == API_OPENGLES2 && ctx->Version >= {0})'.format(int(f.api_map['es2'] * 10)))
|
||||
else:
|
||||
condition_parts.append('ctx->API == API_OPENGLES2')
|
||||
|
||||
if not condition_parts:
|
||||
# This function does not exist in any API.
|
||||
continue
|
||||
|
@@ -44,7 +44,8 @@ LOCAL_C_INCLUDES := \
|
||||
LOCAL_SRC_FILES := \
|
||||
main/imports.c \
|
||||
program/prog_hash_table.c \
|
||||
program/symbol_table.c
|
||||
program/symbol_table.c \
|
||||
program/dummy_errors.c
|
||||
|
||||
include $(MESA_COMMON_MK)
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
@@ -68,7 +69,8 @@ LOCAL_C_INCLUDES := \
|
||||
LOCAL_SRC_FILES := \
|
||||
main/imports.c \
|
||||
program/prog_hash_table.c \
|
||||
program/symbol_table.c
|
||||
program/symbol_table.c \
|
||||
program/dummy_errors.c
|
||||
|
||||
include $(MESA_COMMON_MK)
|
||||
include $(BUILD_HOST_STATIC_LIBRARY)
|
||||
|
@@ -40,8 +40,11 @@ gl_HEADERS = $(top_srcdir)/include/GL/*.h
|
||||
|
||||
.PHONY: main/git_sha1.h.tmp
|
||||
main/git_sha1.h.tmp:
|
||||
@# Don't assume that $(top_srcdir)/.git is a directory. It may be
|
||||
@# a gitlink file if $(top_srcdir) is a submodule checkout or a linked
|
||||
@# worktree.
|
||||
@touch main/git_sha1.h.tmp
|
||||
@if test -d $(top_srcdir)/.git; then \
|
||||
@if test -e $(top_srcdir)/.git; then \
|
||||
if which git > /dev/null; then \
|
||||
git --git-dir=$(top_srcdir)/.git log -n 1 --oneline | \
|
||||
sed 's/^\([^ ]*\) .*/#define MESA_GIT_SHA1 "git-\1"/' \
|
||||
|
@@ -728,7 +728,7 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)
|
||||
save->DepthNear = ctx->ViewportArray[0].Near;
|
||||
save->DepthFar = ctx->ViewportArray[0].Far;
|
||||
/* set depth range to default */
|
||||
_mesa_DepthRange(0.0, 1.0);
|
||||
_mesa_set_depth_range(ctx, 0, 0.0, 1.0);
|
||||
}
|
||||
|
||||
if (state & MESA_META_CLAMP_FRAGMENT_COLOR) {
|
||||
@@ -1129,7 +1129,7 @@ _mesa_meta_end(struct gl_context *ctx)
|
||||
_mesa_set_viewport(ctx, 0, save->ViewportX, save->ViewportY,
|
||||
save->ViewportW, save->ViewportH);
|
||||
}
|
||||
_mesa_DepthRange(save->DepthNear, save->DepthFar);
|
||||
_mesa_set_depth_range(ctx, 0, save->DepthNear, save->DepthFar);
|
||||
}
|
||||
|
||||
if (state & MESA_META_CLAMP_FRAGMENT_COLOR &&
|
||||
|
@@ -34,6 +34,7 @@
|
||||
#include "macros.h"
|
||||
#include "meta.h"
|
||||
#include "pbo.h"
|
||||
#include "readpix.h"
|
||||
#include "shaderapi.h"
|
||||
#include "state.h"
|
||||
#include "teximage.h"
|
||||
@@ -257,6 +258,7 @@ _mesa_meta_pbo_GetTexSubImage(struct gl_context *ctx, GLuint dims,
|
||||
GLuint pbo = 0, pbo_tex = 0, fbos[2] = { 0, 0 };
|
||||
int full_height, image_height;
|
||||
struct gl_texture_image *pbo_tex_image;
|
||||
struct gl_renderbuffer *rb = NULL;
|
||||
GLenum status;
|
||||
bool success = false;
|
||||
int z;
|
||||
@@ -273,6 +275,13 @@ _mesa_meta_pbo_GetTexSubImage(struct gl_context *ctx, GLuint dims,
|
||||
if (ctx->_ImageTransferState)
|
||||
return false;
|
||||
|
||||
|
||||
if (!tex_image) {
|
||||
rb = ctx->ReadBuffer->_ColorReadBuffer;
|
||||
if (_mesa_need_rgb_to_luminance_conversion(rb->Format, format))
|
||||
return false;
|
||||
}
|
||||
|
||||
/* For arrays, use a tall (height * depth) 2D texture but taking into
|
||||
* account the inter-image padding specified with the image height packing
|
||||
* property.
|
||||
|
@@ -60,6 +60,7 @@ mesa_dri_drivers_la_LIBADD = \
|
||||
../../libmesa.la \
|
||||
common/libmegadriver_stub.la \
|
||||
common/libdricommon.la \
|
||||
common/libxmlconfig.la \
|
||||
$(MEGADRIVERS_DEPS) \
|
||||
$(DRI_LIB_DEPS) \
|
||||
$()
|
||||
|
@@ -48,7 +48,9 @@ else
|
||||
LOCAL_SHARED_LIBRARIES := libdrm
|
||||
endif
|
||||
|
||||
LOCAL_SRC_FILES := $(DRI_COMMON_FILES)
|
||||
LOCAL_SRC_FILES := \
|
||||
$(DRI_COMMON_FILES) \
|
||||
$(XMLCONFIG_FILES)
|
||||
|
||||
MESA_DRI_OPTIONS_H := $(intermediates)/xmlpool/options.h
|
||||
LOCAL_GENERATED_SOURCES := $(MESA_DRI_OPTIONS_H)
|
||||
|
@@ -33,16 +33,20 @@ AM_CFLAGS = \
|
||||
-I$(top_srcdir)/src/gallium/include \
|
||||
-I$(top_srcdir)/src/gallium/auxiliary \
|
||||
$(DEFINES) \
|
||||
$(EXPAT_CFLAGS) \
|
||||
$(VISIBILITY_CFLAGS)
|
||||
|
||||
noinst_LTLIBRARIES = \
|
||||
libdricommon.la \
|
||||
libxmlconfig.la \
|
||||
libmegadriver_stub.la \
|
||||
libdri_test_stubs.la
|
||||
|
||||
libdricommon_la_SOURCES = $(DRI_COMMON_FILES)
|
||||
|
||||
libxmlconfig_la_SOURCES = $(XMLCONFIG_FILES)
|
||||
libxmlconfig_la_CFLAGS = $(AM_CFLAGS) $(EXPAT_CFLAGS)
|
||||
libxmlconfig_la_LIBADD = $(EXPAT_LIBS) -lm
|
||||
|
||||
libdri_test_stubs_la_SOURCES = $(test_stubs_FILES)
|
||||
libdri_test_stubs_la_CFLAGS = $(AM_CFLAGS) -DNO_MAIN
|
||||
|
||||
|
@@ -2,7 +2,9 @@ DRI_COMMON_FILES := \
|
||||
utils.c \
|
||||
utils.h \
|
||||
dri_util.c \
|
||||
dri_util.h \
|
||||
dri_util.h
|
||||
|
||||
XMLCONFIG_FILES := \
|
||||
xmlconfig.c \
|
||||
xmlconfig.h
|
||||
|
||||
|
@@ -37,7 +37,7 @@ drienv.PkgUseModules('DRM')
|
||||
# else
|
||||
#env.Append(CPPDEFINES = ['__NOT_HAVE_DRM_H'])
|
||||
|
||||
sources = drienv.ParseSourceList('Makefile.sources', 'DRI_COMMON_FILES')
|
||||
sources = drienv.ParseSourceList('Makefile.sources', ['DRI_COMMON_FILES', 'XMLCONFIG_FILES' ])
|
||||
|
||||
dri_common = drienv.ConvenienceLibrary(
|
||||
target = 'dri_common',
|
||||
|
@@ -255,6 +255,8 @@ i915CreateContext(int api,
|
||||
* FINISHME: vertex shaders?
|
||||
*/
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].EmitCondCodes = true;
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].EmitNoIndirectSampler =
|
||||
true;
|
||||
|
||||
struct gl_shader_compiler_options *const fs_options =
|
||||
& ctx->Const.ShaderCompilerOptions[MESA_SHADER_FRAGMENT];
|
||||
@@ -266,6 +268,7 @@ i915CreateContext(int api,
|
||||
fs_options->EmitNoIndirectOutput = true;
|
||||
fs_options->EmitNoIndirectUniform = true;
|
||||
fs_options->EmitNoIndirectTemp = true;
|
||||
fs_options->EmitNoIndirectSampler = true;
|
||||
|
||||
ctx->Const.MaxDrawBuffers = 1;
|
||||
ctx->Const.QueryCounterBits.SamplesPassed = 0;
|
||||
|
@@ -83,7 +83,6 @@ intelInitExtensions(struct gl_context *ctx)
|
||||
if (intel->gen >= 3) {
|
||||
ctx->Extensions.ARB_ES2_compatibility = true;
|
||||
ctx->Extensions.ARB_depth_texture = true;
|
||||
ctx->Extensions.ARB_direct_state_access = true;
|
||||
ctx->Extensions.ARB_fragment_program = true;
|
||||
ctx->Extensions.ARB_shadow = true;
|
||||
ctx->Extensions.ARB_texture_non_power_of_two = true;
|
||||
|
@@ -48,6 +48,7 @@ libi965_dri_la_LIBADD = $(INTEL_LIBS)
|
||||
TEST_LIBS = \
|
||||
libi965_dri.la \
|
||||
../common/libdricommon.la \
|
||||
../common/libxmlconfig.la \
|
||||
../common/libmegadriver_stub.la \
|
||||
../../../libmesa.la \
|
||||
$(DRI_LIB_DEPS) \
|
||||
|
@@ -442,6 +442,13 @@ brw_initialize_context_constants(struct brw_context *brw)
|
||||
ctx->Const.LineWidthGranularity = 0.5;
|
||||
}
|
||||
|
||||
/* For non-antialiased lines, we have to round the line width to the
|
||||
* nearest whole number. Make sure that we don't advertise a line
|
||||
* width that, when rounded, will be beyond the actual hardware
|
||||
* maximum.
|
||||
*/
|
||||
assert(roundf(ctx->Const.MaxLineWidth) <= ctx->Const.MaxLineWidth);
|
||||
|
||||
ctx->Const.MinPointSize = 1.0;
|
||||
ctx->Const.MinPointSizeAA = 1.0;
|
||||
ctx->Const.MaxPointSize = 255.0;
|
||||
@@ -577,6 +584,10 @@ brw_initialize_context_constants(struct brw_context *brw)
|
||||
(i == MESA_SHADER_FRAGMENT);
|
||||
ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectUniform = false;
|
||||
ctx->Const.ShaderCompilerOptions[i].LowerClipDistance = true;
|
||||
|
||||
/* !ARB_gpu_shader5 */
|
||||
if (brw->gen < 7)
|
||||
ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectSampler = true;
|
||||
}
|
||||
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].OptimizeForAOS = true;
|
||||
|
@@ -415,6 +415,7 @@ struct brw_wm_prog_data {
|
||||
bool uses_pos_offset;
|
||||
bool uses_omask;
|
||||
bool uses_kill;
|
||||
bool pulls_bary;
|
||||
uint32_t prog_offset_16;
|
||||
|
||||
/**
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user