Compare commits
219 Commits
20.1
...
mesa-9.2.3
Author | SHA1 | Date | |
---|---|---|---|
|
f4657c4e10 | ||
|
a6252a56a5 | ||
|
cf33e6d85d | ||
|
69d5778b36 | ||
|
9b8c5847e6 | ||
|
6e491b875f | ||
|
57cd553eda | ||
|
95a708abe6 | ||
|
8c2e3c8275 | ||
|
81245daed3 | ||
|
e5ed198f35 | ||
|
52a6ebe200 | ||
|
5dc0d13e3d | ||
|
dbeb24c39b | ||
|
621a461cd9 | ||
|
259448d02f | ||
|
c8e0d10c0a | ||
|
26c599e00a | ||
|
6f966b58a1 | ||
|
6e557f03f3 | ||
|
7ab2b8c4c4 | ||
|
0048df9cd0 | ||
|
8f0742051e | ||
|
8eb1046996 | ||
|
cc6ad9ce2c | ||
|
82d5b5e20f | ||
|
bf9be81b47 | ||
|
995dc3782b | ||
|
cd5ea2788d | ||
|
f1257f5fe0 | ||
|
cde1ff2d7c | ||
|
eb69e251a8 | ||
|
fb3e55f898 | ||
|
6d6d8fb073 | ||
|
9eae0c95f8 | ||
|
fac3094fef | ||
|
8c4c3d01ee | ||
|
2c3aa1b4ee | ||
|
5377bc3e40 | ||
|
486aecac7e | ||
|
8fc8f38d94 | ||
|
dfcc8caf25 | ||
|
c8ae770068 | ||
|
88513d6485 | ||
|
2eb55601bb | ||
|
26ffbf6f39 | ||
|
421141192f | ||
|
be029eb993 | ||
|
f7fba18e2e | ||
|
42b6d94537 | ||
|
563c488453 | ||
|
4babf9ba6b | ||
|
8a9099d4ef | ||
|
beebb2d9d5 | ||
|
e021b50227 | ||
|
3801e9a87e | ||
|
faec15dc7a | ||
|
5461cc1f00 | ||
|
4fbbf49cc5 | ||
|
130fda3d3b | ||
|
3a2926fdbf | ||
|
616da8f818 | ||
|
72295c5f67 | ||
|
a6a2039a44 | ||
|
f53b9849a1 | ||
|
50ffa8bac5 | ||
|
0547f28134 | ||
|
47da22626d | ||
|
c3de1eea7f | ||
|
ab9322534c | ||
|
2cda3f0e90 | ||
|
3b852f9d52 | ||
|
fd31f5ee1d | ||
|
c0253baaa0 | ||
|
9dd4e1ef85 | ||
|
fbbe25ef26 | ||
|
e5f788e1e0 | ||
|
26ae6ec1e8 | ||
|
9586f4de71 | ||
|
fa892ecc04 | ||
|
2377205bcb | ||
|
8218eebc80 | ||
|
46273ba256 | ||
|
d3f99fb532 | ||
|
6fb2032c35 | ||
|
c0abf6499f | ||
|
1a9bda1f34 | ||
|
59781051eb | ||
|
f31a1d9f8d | ||
|
3370dfdf3e | ||
|
2153557906 | ||
|
dda7358377 | ||
|
3fd1ca7949 | ||
|
4aa9f013d5 | ||
|
7aefdab219 | ||
|
fe6526f439 | ||
|
08b192d26a | ||
|
c1c076dd8d | ||
|
368fc4f3ec | ||
|
e14baf425b | ||
|
dce3865306 | ||
|
8efdaedfc2 | ||
|
c47804d286 | ||
|
5114ac3f87 | ||
|
f0bc10679e | ||
|
3f438bfa4c | ||
|
60e1b03455 | ||
|
cf537c405b | ||
|
601926515e | ||
|
c9a7d6950b | ||
|
89aff30f9b | ||
|
3eae076d70 | ||
|
3ec07eaaa5 | ||
|
35c9345711 | ||
|
74fcc65b58 | ||
|
b802f6a124 | ||
|
170b952cfe | ||
|
b97305bc21 | ||
|
ecd1d92baf | ||
|
c8b5222074 | ||
|
bd83ff1923 | ||
|
a8b08c5ccd | ||
|
796b4a7b40 | ||
|
d3004acdd1 | ||
|
684316512c | ||
|
9f7f727345 | ||
|
1fb22bf143 | ||
|
9fa7313e34 | ||
|
6296abed15 | ||
|
5b8c943eb2 | ||
|
d72f7720a6 | ||
|
b40d9e4f41 | ||
|
e2185778e2 | ||
|
a98d5f2663 | ||
|
24d1949ddc | ||
|
996bc26c87 | ||
|
b055c8689e | ||
|
d6d0175203 | ||
|
4ba5fd1052 | ||
|
872c09586c | ||
|
4f44202aae | ||
|
33b581f6f6 | ||
|
c088c24588 | ||
|
7d6dcb61cd | ||
|
8025bac852 | ||
|
5d6dc93490 | ||
|
31f582abd4 | ||
|
0b131ae24f | ||
|
8ee4a4e417 | ||
|
0c405cd0e8 | ||
|
b76ff3dbcd | ||
|
cb8e109492 | ||
|
4006fc4656 | ||
|
731a08341e | ||
|
3da0c76ec0 | ||
|
10ff10c89e | ||
|
12da1bcb3b | ||
|
195e995968 | ||
|
6f9b090719 | ||
|
70c9e07bd4 | ||
|
d383ff0843 | ||
|
d1419857d7 | ||
|
c15b2d86e2 | ||
|
1e0ad955e7 | ||
|
9aeb967e75 | ||
|
001c29cb18 | ||
|
c331562158 | ||
|
8e1d37161f | ||
|
78e760c234 | ||
|
71891ce017 | ||
|
a19bc84380 | ||
|
73bde3b8ff | ||
|
4a37827752 | ||
|
adc87c5e3f | ||
|
4d7ebeb51e | ||
|
6d8f471640 | ||
|
687415cf70 | ||
|
e4f81bdbc4 | ||
|
6c25c0a0da | ||
|
526e71bfcc | ||
|
06aee8a56c | ||
|
b319e3975e | ||
|
d4c2c5a739 | ||
|
a3f48d97cd | ||
|
030ada7a50 | ||
|
b61036fa2d | ||
|
ddf6f591a9 | ||
|
e3dbfc5769 | ||
|
cdcba2878a | ||
|
8efee44c38 | ||
|
3bdd95270d | ||
|
5476049e38 | ||
|
a2dbaeb2d8 | ||
|
ded1695494 | ||
|
3213c60d81 | ||
|
678ac190a5 | ||
|
771b576da6 | ||
|
9c66a29358 | ||
|
5154c93fa8 | ||
|
8a27c824ec | ||
|
4953bf3837 | ||
|
c7bfe87721 | ||
|
c6f6b4e161 | ||
|
4f5e18cb3e | ||
|
e108bb07a0 | ||
|
55241e9958 | ||
|
6237090330 | ||
|
55ab069e5f | ||
|
925e8a200b | ||
|
014b9ceb62 | ||
|
8f80e55002 | ||
|
579eae3012 | ||
|
cb06c9b2aa | ||
|
253a4c3e73 | ||
|
99666d81e4 | ||
|
e8bc520713 | ||
|
49f40ebefa | ||
|
9b8ad64362 | ||
|
ee421aec32 |
@@ -35,7 +35,7 @@ LOCAL_C_INCLUDES += \
|
|||||||
|
|
||||||
# define ANDROID_VERSION (e.g., 4.0.x => 0x0400)
|
# define ANDROID_VERSION (e.g., 4.0.x => 0x0400)
|
||||||
LOCAL_CFLAGS += \
|
LOCAL_CFLAGS += \
|
||||||
-DPACKAGE_VERSION=\"9.2.0-devel\" \
|
-DPACKAGE_VERSION=\"9.2.3\" \
|
||||||
-DPACKAGE_BUGREPORT=\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\" \
|
-DPACKAGE_BUGREPORT=\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\" \
|
||||||
-DANDROID_VERSION=0x0$(MESA_ANDROID_MAJOR_VERSION)0$(MESA_ANDROID_MINOR_VERSION)
|
-DANDROID_VERSION=0x0$(MESA_ANDROID_MAJOR_VERSION)0$(MESA_ANDROID_MINOR_VERSION)
|
||||||
|
|
||||||
|
@@ -50,6 +50,7 @@ EXTRA_FILES = \
|
|||||||
bin/install-sh \
|
bin/install-sh \
|
||||||
bin/ltmain.sh \
|
bin/ltmain.sh \
|
||||||
bin/missing \
|
bin/missing \
|
||||||
|
bin/test-driver \
|
||||||
bin/ylwrap \
|
bin/ylwrap \
|
||||||
src/glsl/glsl_parser.cpp \
|
src/glsl/glsl_parser.cpp \
|
||||||
src/glsl/glsl_parser.h \
|
src/glsl/glsl_parser.h \
|
||||||
@@ -57,12 +58,6 @@ EXTRA_FILES = \
|
|||||||
src/glsl/glcpp/glcpp-lex.c \
|
src/glsl/glcpp/glcpp-lex.c \
|
||||||
src/glsl/glcpp/glcpp-parse.c \
|
src/glsl/glcpp/glcpp-parse.c \
|
||||||
src/glsl/glcpp/glcpp-parse.h \
|
src/glsl/glcpp/glcpp-parse.h \
|
||||||
src/mesa/main/api_exec_es1.c \
|
|
||||||
src/mesa/main/api_exec_es1_dispatch.h \
|
|
||||||
src/mesa/main/api_exec_es1_remap_helper.h \
|
|
||||||
src/mesa/main/api_exec_es2.c \
|
|
||||||
src/mesa/main/api_exec_es2_dispatch.h \
|
|
||||||
src/mesa/main/api_exec_es2_remap_helper.h \
|
|
||||||
src/mesa/program/lex.yy.c \
|
src/mesa/program/lex.yy.c \
|
||||||
src/mesa/program/program_parse.tab.c \
|
src/mesa/program/program_parse.tab.c \
|
||||||
src/mesa/program/program_parse.tab.h \
|
src/mesa/program/program_parse.tab.h \
|
||||||
|
@@ -70,7 +70,7 @@ if env['gles']:
|
|||||||
# Environment setup
|
# Environment setup
|
||||||
|
|
||||||
env.Append(CPPDEFINES = [
|
env.Append(CPPDEFINES = [
|
||||||
('PACKAGE_VERSION', '\\"9.2.0-devel\\"'),
|
('PACKAGE_VERSION', '\\"9.2.3\\"'),
|
||||||
('PACKAGE_BUGREPORT', '\\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\\"'),
|
('PACKAGE_BUGREPORT', '\\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\\"'),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
17
bin/.cherry-ignore
Normal file
17
bin/.cherry-ignore
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Already cherry picked without -x
|
||||||
|
d8ac987f6ab228df1a478b36c3d889992754374f glsl: Disallow uniform block layout qualifiers on non-uniform block vars.
|
||||||
|
|
||||||
|
# The bug fixed by this patch does not exist in 9.2. Discussed with Marek and
|
||||||
|
# Brian Paul on the mesa-stable mailing list.
|
||||||
|
89a665eb5fa176f68223bf54a472d6a0567c3546 draw: fix segfaults with aaline and aapoint stages disabled
|
||||||
|
|
||||||
|
# Previously cherry picked (patch originally appeared twice on master with a
|
||||||
|
# revert in between)
|
||||||
|
4e5eb8ba25054ede4798fa424e6f32b23aba0f98 i965/vec4: Only zero out unused message components when there are any.
|
||||||
|
|
||||||
|
# Backported as 7ab2b8c4c4607817c91946dcba943b29f1bd1895 but without "cherry
|
||||||
|
# picked from" in commit message
|
||||||
|
360a141f24a9d00891665b7fedb77ffb116944ca wayland: Don't rely on static variable for identifying wl_drm buffers
|
||||||
|
|
||||||
|
# Code being fixed is not present in 9.2
|
||||||
|
f278d49c4bcfedbda10cb224cb251e3755e88288 i965: Do not set bilinear_filter flag in case of multisample blits
|
@@ -14,7 +14,7 @@ git log --reverse --grep="cherry picked from commit" origin/master..HEAD |\
|
|||||||
sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked
|
sed -e 's/^[[:space:]]*(cherry picked from commit[[:space:]]*//' -e 's/)//' > already_picked
|
||||||
|
|
||||||
# Grep for commits that were marked as a candidate for the stable tree.
|
# Grep for commits that were marked as a candidate for the stable tree.
|
||||||
git log --reverse --pretty=%H -i --grep='^[[:space:]]*NOTE: .*[Cc]andidate' HEAD..origin/master |\
|
git log --reverse --pretty=%H -i --grep='^\([[:space:]]*NOTE: .*[Cc]andidate.*9\.2\|CC:.*9\.2.*mesa-stable\)' HEAD..origin/master |\
|
||||||
while read sha
|
while read sha
|
||||||
do
|
do
|
||||||
# Check to see whether the patch is on the ignore list.
|
# Check to see whether the patch is on the ignore list.
|
||||||
|
38
configure.ac
38
configure.ac
@@ -6,7 +6,7 @@ dnl Tell the user about autoconf.html in the --help output
|
|||||||
m4_divert_once([HELP_END], [
|
m4_divert_once([HELP_END], [
|
||||||
See docs/autoconf.html for more details on the options for Mesa.])
|
See docs/autoconf.html for more details on the options for Mesa.])
|
||||||
|
|
||||||
AC_INIT([Mesa], [9.2.0-devel],
|
AC_INIT([Mesa], [9.2.3],
|
||||||
[https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa])
|
[https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa])
|
||||||
AC_CONFIG_AUX_DIR([bin])
|
AC_CONFIG_AUX_DIR([bin])
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
@@ -579,6 +579,11 @@ AC_ARG_ENABLE([osmesa],
|
|||||||
[enable OSMesa library @<:@default=disabled@:>@])],
|
[enable OSMesa library @<:@default=disabled@:>@])],
|
||||||
[enable_osmesa="$enableval"],
|
[enable_osmesa="$enableval"],
|
||||||
[enable_osmesa=no])
|
[enable_osmesa=no])
|
||||||
|
AC_ARG_ENABLE([gallium-osmesa],
|
||||||
|
[AS_HELP_STRING([--enable-gallium-osmesa],
|
||||||
|
[enable Gallium implementation of the OSMesa library @<:@default=disabled@:>@])],
|
||||||
|
[enable_gallium_osmesa="$enableval"],
|
||||||
|
[enable_gallium_osmesa=no])
|
||||||
AC_ARG_ENABLE([egl],
|
AC_ARG_ENABLE([egl],
|
||||||
[AS_HELP_STRING([--disable-egl],
|
[AS_HELP_STRING([--disable-egl],
|
||||||
[disable EGL library @<:@default=enabled@:>@])],
|
[disable EGL library @<:@default=enabled@:>@])],
|
||||||
@@ -769,7 +774,13 @@ if test "x$enable_dri" = xyes; then
|
|||||||
GALLIUM_STATE_TRACKERS_DIRS="dri $GALLIUM_STATE_TRACKERS_DIRS"
|
GALLIUM_STATE_TRACKERS_DIRS="dri $GALLIUM_STATE_TRACKERS_DIRS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$enable_osmesa" = xyes; then
|
if test "x$enable_gallium_osmesa" = xyes; then
|
||||||
|
if test -z "$with_gallium_drivers"; then
|
||||||
|
AC_MSG_ERROR([Cannot enable gallium_osmesa without Gallium])
|
||||||
|
fi
|
||||||
|
if test "x$enable_osmesa" = xyes; then
|
||||||
|
AC_MSG_ERROR([Cannot enable both classic and Gallium OSMesa implementations])
|
||||||
|
fi
|
||||||
GALLIUM_STATE_TRACKERS_DIRS="osmesa $GALLIUM_STATE_TRACKERS_DIRS"
|
GALLIUM_STATE_TRACKERS_DIRS="osmesa $GALLIUM_STATE_TRACKERS_DIRS"
|
||||||
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS osmesa"
|
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS osmesa"
|
||||||
fi
|
fi
|
||||||
@@ -1135,7 +1146,7 @@ x16|x32)
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if test "x$enable_osmesa" = xyes; then
|
if test "x$enable_osmesa" = xyes -o "x$enable_gallium_osmesa" = xyes; then
|
||||||
# only link libraries with osmesa if shared
|
# only link libraries with osmesa if shared
|
||||||
if test "$enable_static" = no; then
|
if test "$enable_static" = no; then
|
||||||
OSMESA_LIB_DEPS="-lm $PTHREAD_LIBS $SELINUX_LIBS $DLOPEN_LIBS"
|
OSMESA_LIB_DEPS="-lm $PTHREAD_LIBS $SELINUX_LIBS $DLOPEN_LIBS"
|
||||||
@@ -1914,8 +1925,8 @@ AM_CONDITIONAL(NEED_GALLIUM_SOFTPIPE_DRIVER, test "x$HAVE_GALLIUM_SVGA" = xyes -
|
|||||||
"x$HAVE_GALLIUM_I915" = xyes -o \
|
"x$HAVE_GALLIUM_I915" = xyes -o \
|
||||||
"x$HAVE_GALLIUM_SOFTPIPE" = xyes)
|
"x$HAVE_GALLIUM_SOFTPIPE" = xyes)
|
||||||
AM_CONDITIONAL(NEED_GALLIUM_LLVMPIPE_DRIVER, test "x$HAVE_GALLIUM_I915" = xyes -o \
|
AM_CONDITIONAL(NEED_GALLIUM_LLVMPIPE_DRIVER, test "x$HAVE_GALLIUM_I915" = xyes -o \
|
||||||
"x$HAVE_GALLIUM_SOFTPIPE" = xyes -a \
|
"x$HAVE_GALLIUM_SOFTPIPE" = xyes \
|
||||||
"x$MESA_LLVM" = x1)
|
&& test "x$MESA_LLVM" = x1)
|
||||||
|
|
||||||
if test "x$enable_gallium_loader" = xyes; then
|
if test "x$enable_gallium_loader" = xyes; then
|
||||||
GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/null"
|
GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/null"
|
||||||
@@ -1962,9 +1973,11 @@ AC_SUBST([ELF_LIB])
|
|||||||
|
|
||||||
AM_CONDITIONAL(NEED_LIBPROGRAM, test "x$with_gallium_drivers" != x -o \
|
AM_CONDITIONAL(NEED_LIBPROGRAM, test "x$with_gallium_drivers" != x -o \
|
||||||
"x$enable_xlib_glx" = xyes -o \
|
"x$enable_xlib_glx" = xyes -o \
|
||||||
"x$enable_osmesa" = xyes)
|
"x$enable_osmesa" = xyes -o \
|
||||||
|
"x$enable_gallium_osmesa" = xyes)
|
||||||
AM_CONDITIONAL(HAVE_X11_DRIVER, test "x$enable_xlib_glx" = xyes)
|
AM_CONDITIONAL(HAVE_X11_DRIVER, test "x$enable_xlib_glx" = xyes)
|
||||||
AM_CONDITIONAL(HAVE_OSMESA, test "x$enable_osmesa" = xyes)
|
AM_CONDITIONAL(HAVE_OSMESA, test "x$enable_osmesa" = xyes)
|
||||||
|
AM_CONDITIONAL(HAVE_GALLIUM_OSMESA, test "x$enable_gallium_osmesa" = xyes)
|
||||||
|
|
||||||
AM_CONDITIONAL(HAVE_X86_ASM, echo "$DEFINES" | grep 'X86_ASM' >/dev/null 2>&1)
|
AM_CONDITIONAL(HAVE_X86_ASM, echo "$DEFINES" | grep 'X86_ASM' >/dev/null 2>&1)
|
||||||
AM_CONDITIONAL(HAVE_X86_64_ASM, echo "$DEFINES" | grep 'X86_64_ASM' >/dev/null 2>&1)
|
AM_CONDITIONAL(HAVE_X86_64_ASM, echo "$DEFINES" | grep 'X86_64_ASM' >/dev/null 2>&1)
|
||||||
@@ -2053,6 +2066,7 @@ AC_CONFIG_FILES([Makefile
|
|||||||
src/gallium/targets/gbm/Makefile
|
src/gallium/targets/gbm/Makefile
|
||||||
src/gallium/targets/opencl/Makefile
|
src/gallium/targets/opencl/Makefile
|
||||||
src/gallium/targets/osmesa/Makefile
|
src/gallium/targets/osmesa/Makefile
|
||||||
|
src/gallium/targets/osmesa/osmesa.pc
|
||||||
src/gallium/targets/pipe-loader/Makefile
|
src/gallium/targets/pipe-loader/Makefile
|
||||||
src/gallium/targets/libgl-xlib/Makefile
|
src/gallium/targets/libgl-xlib/Makefile
|
||||||
src/gallium/targets/vdpau-nouveau/Makefile
|
src/gallium/targets/vdpau-nouveau/Makefile
|
||||||
@@ -2151,11 +2165,17 @@ echo " OpenVG: $enable_openvg"
|
|||||||
|
|
||||||
dnl Driver info
|
dnl Driver info
|
||||||
echo ""
|
echo ""
|
||||||
if test "x$enable_osmesa" != xno; then
|
case "x$enable_osmesa$enable_gallium_osmesa" in
|
||||||
|
xnoyes)
|
||||||
|
echo " OSMesa: lib$OSMESA_LIB (Gallium)"
|
||||||
|
;;
|
||||||
|
xyesno)
|
||||||
echo " OSMesa: lib$OSMESA_LIB"
|
echo " OSMesa: lib$OSMESA_LIB"
|
||||||
else
|
;;
|
||||||
|
xnono)
|
||||||
echo " OSMesa: no"
|
echo " OSMesa: no"
|
||||||
fi
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
if test "x$enable_dri" != xno; then
|
if test "x$enable_dri" != xno; then
|
||||||
# cleanup the drivers var
|
# cleanup the drivers var
|
||||||
|
@@ -16,6 +16,12 @@
|
|||||||
|
|
||||||
<h1>News</h1>
|
<h1>News</h1>
|
||||||
|
|
||||||
|
<h2>August 1, 2013</h2>
|
||||||
|
<p>
|
||||||
|
<a href="relnotes/9.1.6.html">Mesa 9.1.6</a> is released.
|
||||||
|
This is a bug fix release.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h2>July 17, 2013</h2>
|
<h2>July 17, 2013</h2>
|
||||||
<p>
|
<p>
|
||||||
<a href="relnotes/9.1.5.html">Mesa 9.1.5</a> is released.
|
<a href="relnotes/9.1.5.html">Mesa 9.1.5</a> is released.
|
||||||
|
@@ -22,6 +22,7 @@ The release notes summarize what's new or changed in each Mesa release.
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="relnotes/9.2.html">9.2 release notes</a>
|
<li><a href="relnotes/9.2.html">9.2 release notes</a>
|
||||||
|
<li><a href="relnotes/9.1.6.html">9.1.6 release notes</a>
|
||||||
<li><a href="relnotes/9.1.5.html">9.1.5 release notes</a>
|
<li><a href="relnotes/9.1.5.html">9.1.5 release notes</a>
|
||||||
<li><a href="relnotes/9.1.4.html">9.1.4 release notes</a>
|
<li><a href="relnotes/9.1.4.html">9.1.4 release notes</a>
|
||||||
<li><a href="relnotes/9.1.3.html">9.1.3 release notes</a>
|
<li><a href="relnotes/9.1.3.html">9.1.3 release notes</a>
|
||||||
|
@@ -30,7 +30,9 @@ because GL_ARB_compatibility is not supported.
|
|||||||
|
|
||||||
<h2>MD5 checksums</h2>
|
<h2>MD5 checksums</h2>
|
||||||
<pre>
|
<pre>
|
||||||
TBD
|
4ed2af5943141a85a21869053a2fc2eb MesaLib-9.1.5.tar.bz2
|
||||||
|
47181066acf3231d74e027b2033f9455 MesaLib-9.1.5.tar.gz
|
||||||
|
4c9c6615bd99215325250f87ed34058f MesaLib-9.1.5.zip
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<h2>New features</h2>
|
<h2>New features</h2>
|
||||||
|
168
docs/relnotes/9.1.6.html
Normal file
168
docs/relnotes/9.1.6.html
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
<!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 9.1.6 Release Notes / August 1, 2013</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 9.1.6 is a bug fix release which fixes bugs found since the 9.1.5 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 9.1 implements the OpenGL 3.1 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.1. OpenGL
|
||||||
|
3.1 is <strong>only</strong> available if requested at context creation
|
||||||
|
because GL_ARB_compatibility is not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>MD5 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
443a2a352667294b53d56cb1a74114e9 MesaLib-9.1.6.tar.bz2
|
||||||
|
08d3069cccd6821e5f33e0840bca0718 MesaLib-9.1.6.tar.gz
|
||||||
|
90aa7a6d9878cdbfcb055312f356d6b9 MesaLib-9.1.6.zip
|
||||||
|
</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=47824">Bug 47824</a> - osmesa using --enable-shared-glapi depends on libgl</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62362">Bug 62362</a> - Crash when using Wayland EGL platform</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=63435">Bug 63435</a> - [Regression since 9.0] Flickering in EGL OpenGL full-screen window with swap interval 1</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=64087">Bug 64087</a> - Webgl conformance shader-with-non-reserved-words crash when mesa is compiled without --enable-debug</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=64330">Bug 64330</a> - WebGL snake demo crash in loop_analysis.cpp:506: bool is_loop_terminator(ir_if*): assertion „inst != __null“ failed.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=65236">Bug 65236</a> - [i965] Rendering artifacts in VDrift/GL2</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=66558">Bug 66558</a> - RS690: 3D artifacts when playing SuperTuxKart</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=66847">Bug 66847</a> - compilation broken with llvm 3.3</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=66850">Bug 66850</a> - glGenerateMipmap crashes when using GL_TEXTURE_2D_ARRAY with compressed internal format</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=66921">Bug 66921</a> - [r300g] Heroes of Newerth: HiZ related corruption</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=67283">Bug 67283</a> - VDPAU doesn't work on hybrid laptop through DRI_PRIME</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
<p>The full set of changes can be viewed by using the following GIT command:</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
git log mesa-9.1.5..mesa-9.1.6
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>Andreas Boll (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>configure.ac: Require llvm-3.2 for r600g/radeonsi llvm backends</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Brian Paul (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: handle 2D texture arrays in get_tex_rgba_compressed()</li>
|
||||||
|
<li>meta: handle 2D texture arrays in decompress_texture_image()</li>
|
||||||
|
<li>mesa: implement mipmap generation for compressed 2D array textures</li>
|
||||||
|
<li>mesa: improve free() cleanup in generate_mipmap_compressed()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Carl Worth (7):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add 9.1.5 release md5sums</li>
|
||||||
|
<li>Merge 'origin/9.1' into stable</li>
|
||||||
|
<li>cherry-ignore: Drop 13 patches from the pick list</li>
|
||||||
|
<li>get-pick-list.sh: Include commits mentionining "CC: mesa-stable..." in pick list</li>
|
||||||
|
<li>get-pick-list: Allow for non-whitespace between "CC:" and "mesa-stable"</li>
|
||||||
|
<li>get-pick-list: Ignore commits which CC mesa-stable unless they say "9.1"</li>
|
||||||
|
<li>Bump version to 9.1.6</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Chris Forbes (5):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965/Gen4: Zero extra coordinates for ir_tex</li>
|
||||||
|
<li>i965/vs: Fix flaky texture swizzling</li>
|
||||||
|
<li>i965/vs: set up sampler state pointer for Gen4/5.</li>
|
||||||
|
<li>i965/vs: Put lod parameter in the correct place for Gen4</li>
|
||||||
|
<li>i965/vs: Gen4/5: enable front colors if back colors are written</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Christoph Bumiller (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nv50,nvc0: s/uint16/uint32 for constant buffer offset</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Dave Airlie (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallium/vl: add prime support</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Eric Anholt (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>egl: Restore "bogus" DRI2 invalidate event code.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jeremy Huddleston Sequoia (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>Apple: glFlush() is not needed with CGLFlushDrawable()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Kenneth Graunke (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glsl: Classify "layout" like other identifiers.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Kristian Høgsberg (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>egl-wayland: Fix left-over wl_display_roundtrip() usage</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Maarten Lankhorst (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>osmesa: link against static libglapi library too to get the gl exports</li>
|
||||||
|
<li>nvc0: force use of correct firmware file</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>r300g/swtcl: fix geometry corruption by uploading indices to a buffer</li>
|
||||||
|
<li>r300g/swtcl: fix a lockup in MSAA resolve</li>
|
||||||
|
<li>Revert "r300g: allow HiZ with a 16-bit zbuffer"</li>
|
||||||
|
<li>r600g: increase array size for shader inputs and outputs</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Matt Turner (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: NULL check prog on shader compilation failure.</li>
|
||||||
|
<li>i965/vs: Print error if vertex shader fails to compile.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Paul Berry (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glsl: Handle empty if statement encountered during loop analysis.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
206
docs/relnotes/9.2.1.html
Normal file
206
docs/relnotes/9.2.1.html
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
<!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 9.2.1 Release Notes / (October 4, 2013)</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 9.2.1 is a bug fix release which fixes bugs found since the 9.2 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 9.2 implements the OpenGL 3.1 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.1. OpenGL
|
||||||
|
3.1 is <strong>only</strong> available if requested at context creation
|
||||||
|
because GL_ARB_compatibility is not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>MD5 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
e6cdfa84dfddd86e3d36ec7ff4b6478a MesaLib-9.2.1.tar.gz
|
||||||
|
dd4c82667d9c19c28a553b12eba3f8a0 MesaLib-9.2.1.tar.bz2
|
||||||
|
d9af0f5607f7d275793d293057ca9ac6 MesaLib-9.2.1.zip
|
||||||
|
</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=66779">Bug 66779</a> - Use of uninitialized stack variable with brw_search_cache()</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=68233">Bug 68233</a> - Valgrind errors in mesa</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=68250">Bug 68250</a> - Automatic mipmap generation with texture compression produces borders that fade to black</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=68637">Bug 68637</a> - [Bisected IVB/HSW]Unigine demo crash</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=68753">Bug 68753</a> - [regression bisected] GLSL ES: structs members can't have precision qualifiers anymore in 9.2</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=69525">Bug 69525</a> - [GM45, bisected] Piglit tex-shadow2drect fails</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>The full set of changes can be viewed by using the following GIT command:</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
git log mesa-9.2..mesa-9.2.1
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
|
<p>Alex Deucher (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>radeon/winsys: pad IBs to a multiple of 8 DWs</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Andreas Boll (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>os: First check for __GLIBC__ and then for PIPE_OS_BSD</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Anuj Phogat (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glsl: Allow precision qualifiers for sampler types</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Brian Paul (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: minor fixes for 9.2 release notes</li>
|
||||||
|
<li>mesa: check for bufSize > 0 in _mesa_GetSynciv()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Carl Worth (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>cherry-ignore: Ignore a commit which appeared twice on master</li>
|
||||||
|
<li>Use -Bsymbolic when linking libEGL.so</li>
|
||||||
|
<li>mesa: Bump version to 9.2.1</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Chris Forbes (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965/fs: Gen4: Zero out extra coordinates when using shadow compare</li>
|
||||||
|
<li>i965: Fix cube array coordinate normalization</li>
|
||||||
|
<li>i965: fix bogus swizzle in brw_cubemap_normalize</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Christoph Bumiller (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nvc0/ir: add f32 long immediate cannot saturate</li>
|
||||||
|
<li>nvc0: delete compute object on screen destruction</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Dave Airlie (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/mesa: don't dereference stObj->pt if NULL</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Dominik Behr (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glsl: propagate max_array_access through function calls</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Emil Velikov (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nouveau: initialise the nouveau_transfer maps</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Eric Anholt (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: Rip out more extension checking from texformat.c.</li>
|
||||||
|
<li>mesa: Don't choose S3TC for generic compression if we can't compress.</li>
|
||||||
|
<li>i965/gen4: Fix fragment program rectangle texture shadow compares.</li>
|
||||||
|
<li>i965: Reenable glBitmap() after the sRGB winsys enabling.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ian Romanick (7):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add 9.2 release md5sums</li>
|
||||||
|
<li>Add .cherry-ignore file</li>
|
||||||
|
<li>mesa: Note that 89a665e should not be picked</li>
|
||||||
|
<li>glsl: Reallow precision qualifiers on structure members</li>
|
||||||
|
<li>mesa: Support GL_MAX_VERTEX_OUTPUT_COMPONENTS query with ES3</li>
|
||||||
|
<li>mesa: Remove all traces of GL_OES_matrix_get</li>
|
||||||
|
<li>mesa: Don't return any data for GL_SHADER_BINARY_FORMATS</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ilia Mirkin (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nv30: find first unused texcoord rather than bailing if first is used</li>
|
||||||
|
<li>nv30: fix inconsistent setting of push->user_priv</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Joakim Sindholt (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nvc0: fix blitctx memory leak</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Johannes Obermayr (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/gbm: Add $(WAYLAND_CFLAGS) for HAVE_EGL_PLATFORM_WAYLAND.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Kenneth Graunke (5):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965/vs: Detect GRF sources in split_virtual_grfs send-from-GRF code.</li>
|
||||||
|
<li>i965/fs: Detect GRF sources in split_virtual_grfs send-from-GRF code.</li>
|
||||||
|
<li>i965/vec4: Only zero out unused message components when there are any.</li>
|
||||||
|
<li>i965: Fix brw_vs_prog_data_compare to actually check field members.</li>
|
||||||
|
<li>meta: Set correct viewport and projection in decompress_texture_image.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Maarten Lankhorst (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/dri: do not create a new context for msaa copy</li>
|
||||||
|
<li>nvc0: restore viewport after blit</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>r600g: fix constant buffer cache flushing</li>
|
||||||
|
<li>r600g: fix texture buffer object cache flushing</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Paul Berry (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Initialize inout_offset parameter to brw_search_cache().</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Rico Schüller (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glx: Initialize OpenGL version to 1.0</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Tiziano Bacocco (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nvc0/ir: fix use after free in texture barrier insertion pass</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Torsten Duwe (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>wayland-egl.pc requires wayland-client.pc.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
100
docs/relnotes/9.2.2.html
Normal file
100
docs/relnotes/9.2.2.html
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
<!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 9.2.2 Release Notes / (October 18, 2013)</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 9.2.2 is a bug fix release which fixes bugs found since the 9.2.1 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 9.2 implements the OpenGL 3.1 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.1. OpenGL
|
||||||
|
3.1 is <strong>only</strong> available if requested at context creation
|
||||||
|
because GL_ARB_compatibility is not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>MD5 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
df801a975045150790e10e2ccf32193f MesaLib-9.2.2.tar.gz
|
||||||
|
20887f8020db7d1736a01ae9cd5d8c38 MesaLib-9.2.2.tar.bz2
|
||||||
|
1676f4f1b157c838d077dadd31ba6c84 MesaLib-9.2.2.zip
|
||||||
|
</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=69449">Bug 69449</a> - Valgrind error in program_resource_visitor::recursion</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=70411">Bug 70411</a> - glInvalidateFramebuffer fails with GL_INVALID_ENUM</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>The full set of changes can be viewed by using the following GIT command:</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
git log mesa-9.2.1..mesa-9.2.2
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>Brian Paul (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: add missing <pre> tag</li>
|
||||||
|
<li>svga: fix incorrect memcpy src in svga_buffer_upload_piecewise()</li>
|
||||||
|
<li>mesa: consolidate cube width=height error checking</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Carl Worth (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add md5sums for 9.2.1 release</li>
|
||||||
|
<li>Bump version to 9.2.2</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Constantin Baranov (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: Add missing switch break in invalidate_framebuffer_storage()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Eric Anholt (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Don't forget the cube map padding on gen5+.</li>
|
||||||
|
<li>mesa: Fix compiler warnings when ALIGN's alignment is "1 << value".</li>
|
||||||
|
<li>i965: Fix 3D texture layout by more literally copying from the spec.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Francisco Jerez (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glsl: Fix usage of the wrong union member in program_resource_visitor::recursion.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Tom Stellard (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>radeonsi: Use 'SI' as the LLVM processor for CIK on LLVM <= 3.3</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
113
docs/relnotes/9.2.3.html
Normal file
113
docs/relnotes/9.2.3.html
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
<!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 9.2.3 Release Notes / (November 13, 2013)</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 9.2.3 is a bug fix release which fixes bugs found since the 9.2.2 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 9.2 implements the OpenGL 3.1 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.1. OpenGL
|
||||||
|
3.1 is <strong>only</strong> available if requested at context creation
|
||||||
|
because GL_ARB_compatibility is not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>MD5 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
TBA
|
||||||
|
</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=69437">Bug 69437</a> - Composite Bypass no longer works</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>The full set of changes can be viewed by using the following GIT command:</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
git log mesa-9.2.2..mesa-9.2.3
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>Brian Paul (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/mesa: move out of memory check in st_draw_vbo()</li>
|
||||||
|
<li>osmesa: fix broken triangle/line drawing when using float color buffer</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Carl Worth (7):</p>
|
||||||
|
<ul>
|
||||||
|
<li>Remove error when calling glGenQueries/glDeleteQueries while a query is active</li>
|
||||||
|
<li>Bump version to 9.2.3</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Daniel Vetter (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: CS writes/reads should use I915_GEM_INSTRUCTION</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Eric Anholt (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Fix texture buffer rendering after a whole buffer replacement.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Kenneth Graunke (6):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Emit post-sync non-zero flush before 3DSTATE_GS_SVB_INDEX.</li>
|
||||||
|
<li>i965: Emit post-sync non-zero flush before 3DSTATE_DRAWING_RECTANGLE.</li>
|
||||||
|
<li>i965: Also guard 3DSTATE_DRAWING_RECTANGLE with a flush in blorp.</li>
|
||||||
|
<li>i965: Move post-sync non-zero flush for 3DSTATE_MULTISAMPLE.</li>
|
||||||
|
<li>i965: Also emit HIER_DEPTH and STENCIL packets when disabling depth.</li>
|
||||||
|
<li>i965: Also emit HiZ and Stencil packets when disabling depth on Gen6.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Kristian Høgsberg (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>wayland: Don't rely on static variable for identifying wl_drm buffers</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>radeonsi: fix blitting the last 2 mipmap levels of compressed textures</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Petr Sebor (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>meta: enable vertex attributes in the context of the newly created array object</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Scott Graham (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: fixes for MSVC 2013</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -14,7 +14,7 @@
|
|||||||
<iframe src="../contents.html"></iframe>
|
<iframe src="../contents.html"></iframe>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
|
||||||
<h1>Mesa 9.2 Release Notes / (date TBD)</h1>
|
<h1>Mesa 9.2 Release Notes / (August 27, 2013)</h1>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Mesa 9.2 is a new development release.
|
Mesa 9.2 is a new development release.
|
||||||
@@ -33,7 +33,9 @@ because GL_ARB_compatibility is not supported.
|
|||||||
|
|
||||||
<h2>MD5 checksums</h2>
|
<h2>MD5 checksums</h2>
|
||||||
<pre>
|
<pre>
|
||||||
tbd
|
4f93c6475ec656fc1f7b93aeffc9b6c4 MesaLib-9.2.0.tar.gz
|
||||||
|
4185b6aae890bc62a964f4b24cc1aca8 MesaLib-9.2.0.tar.bz2
|
||||||
|
3bc5339bc98b9c37777ffd14e3a8eca4 MesaLib-9.2.0.zip
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
@@ -44,21 +46,166 @@ Note: some of the new features are only available with certain drivers.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>GL_ARB_shading_language_420pack in all drivers that support GLSL 1.30.</li>
|
||||||
<li>GL_ARB_texture_buffer_range</li>
|
<li>GL_ARB_texture_buffer_range</li>
|
||||||
<li>GL_ARB_texture_multisample</li>
|
<li>GL_ARB_texture_multisample</li>
|
||||||
<li>GL_ARB_texture_storage_multisample</li>
|
<li>GL_ARB_texture_storage_multisample</li>
|
||||||
<li>GL_ARB_texture_query_lod</li>
|
<li>GL_ARB_texture_query_lod</li>
|
||||||
<li>Enable GL_ARB_texture_storage on radeon, r200, and nouveau</li>
|
<li>GL_ARB_texture_storage on radeon, r200, and nouveau</li>
|
||||||
|
<li>GL_EXT_discard_framebuffer in all OpenGL ES (all versions) drivers</li>
|
||||||
|
<li>GL_EXT_framebuffer_multisample_blit_scaled on i965</li>
|
||||||
<li>Added new freedreno gallium driver</li>
|
<li>Added new freedreno gallium driver</li>
|
||||||
<li>OSMesa interface for gallium llvmpipe/softpipe drivers</li>
|
<li>OSMesa interface for gallium llvmpipe/softpipe drivers</li>
|
||||||
<li>Gallium Heads-Up Display (HUD) feature for performance monitoring</li>
|
<li>Gallium Heads-Up Display (HUD) feature for performance monitoring</li>
|
||||||
|
<li>Added support for UVD (2.2 and 3.0) video decoding on r600g and radeonsi through VDPAU (requires Kernel 3.10 or later)</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<h2>Bug fixes</h2>
|
<h2>Bug fixes</h2>
|
||||||
|
|
||||||
<p>TBD -- This list is likely incomplete.</p>
|
<p>Attempts have been made to <b>not</b> include bugs fixed in previous 9.1
|
||||||
|
releases or bugs that were regressions during 9.2 development. This list is
|
||||||
|
likely incomplete.</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=41787">Bug 41787</a> - [llvmpipe] stencil broken</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=44618">Bug 44618</a> - Cross-compilation broken by glsl builtin_compiler</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=46632">Bug 46632</a> - Make the alignment checks for the readpixel blit fastpath a bit more lenient</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=47116">Bug 47116</a> - Enemy territory freezes with rs880 and commit fbebd431ec4e2e461a0cbcd5f3a04a000b8f6bbf</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=47248">Bug 47248</a> - autogen missing dependency on flex and bison, causes infinite loop in glsl build</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=48694">Bug 48694</a> - radeonsi_pipe.c:322:7: error: ‘PIPE_CAP_DUAL_SOURCE_BLEND’ undeclared</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=50655">Bug 50655</a> - [r600g][RV670 HD3870] Ioquake games causes GPU lockup (waiting for 0x00003039 last fence id 0x00003030)</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=51471">Bug 51471</a> - [965gm] Corrupted graphics in corners of screen with pixel shaders enabled</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=51782">Bug 51782</a> - mesa-8.0.3: fails to compile against uclibc</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=54240">Bug 54240</a> - [swrast] piglit fbo-generatemipmap-filtering regression</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=55503">Bug 55503</a> - Constant vertex attributes broken</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=55783">Bug 55783</a> - glEnable(GL_FRAMEBUFFER_SRGB) has no effect on the backbuffer</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=55825">Bug 55825</a> - [Bisected i965]Oglc max_values(advanced.fragmentProgram.GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB) causes OOM-killer</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=56920">Bug 56920</a> - [sandybridge][uxa] graphics very glitchy and always flickering</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=57753">Bug 57753</a> - leak in loop_analysis</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=57875">Bug 57875</a> - Second Life viewer bad rendering with git-ec83535</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=58666">Bug 58666</a> - rv670 + llvm = errors.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=58680">Bug 58680</a> - [IVB] Graphical glitches in 0 A.D</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=58872">Bug 58872</a> - Mac OS X configure: error: Couldn't find clock_gettime</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59322">Bug 59322</a> - r300g MSAA breaks Half-Life 2 in Wine</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59364">Bug 59364</a> - [bisected] Mesa build fails: clientattrib.c:33:22: fatal error: indirect.h: No such file or directory</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59439">Bug 59439</a> - glCopyPixels generates no fragments (occlusion_query_meta_fragments test fails)</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59440">Bug 59440</a> - glBitmap generates no fragments (occlusion_query_meta_fragments test fails)</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59494">Bug 59494</a> - [Bisected]Piglit glean_depthStencil fails</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59592">Bug 59592</a> - Radeon HD 5670: reproducable GPU lockups with htile enabled</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59648">Bug 59648</a> - [SNB/IVB/HSW Bisected]Piglit spec/ARB_uniform_buffer/object_layout-std140-base-size-and-alignment fails</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59701">Bug 59701</a> - lp_test_arit fails on non-sse41 capable machines, breaking make check</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59737">Bug 59737</a> - [bisected] 0d108116bd80b757fb01a84a9f1946ef870b57b8 breaks osmesa when cross compiling</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59740">Bug 59740</a> - [i965 Bisected]Oglc api-error(negative.glEvalMesh) fails</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59851">Bug 59851</a> - AC_ARG_WITH misusage leading to mesa configure failure</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59873">Bug 59873</a> - [swrast] piglit ext_framebuffer_multisample-interpolation 0 centroid-edges regression</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=59876">Bug 59876</a> - glGetTexLevelParameteriv broken for indirect rendering</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60038">Bug 60038</a> - [osmesa] [git] building 32-bit mesa on 64 bit fails</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60047">Bug 60047</a> - [softpipe] piglit masked-clear regression</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60052">Bug 60052</a> - [Bisected]Piglit glx_extension_string_sanity fail</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60082">Bug 60082</a> - [ FAILED ] DispatchSanity_test.GL31_CORE</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60086">Bug 60086</a> - Wayland platform backend crashes if there's no back buffer during dri2_swap_buffers</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60098">Bug 60098</a> - [softpipe] Unexpected PIPE_CAP 78 query</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60172">Bug 60172</a> - Planeshift: triangles where grass would be</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60200">Bug 60200</a> - radeon_bo with virtual address referencing mismatch</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60212">Bug 60212</a> - [Bisected] Weston black output</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60524">Bug 60524</a> - [softpipe] piglit depthstencil-render-miplevels 146 s=z24_s8 regression</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60527">Bug 60527</a> - [softpipe] fbo-stencil GL_DEPTH24_STENCIL8 clear regression</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60633">Bug 60633</a> - EXT_texture_sRGB does not work in game The Cave on IvyBridge</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60737">Bug 60737</a> - In GLSL ES, a missing FS precision qualifier does not generate an error</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60866">Bug 60866</a> - GLSL performance issues for uniform buffer objects</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61036">Bug 61036</a> - Shader fails to build in LLVMpipe, aborts program</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61200">Bug 61200</a> - insufficient linking of libxatracker.so</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61635">Bug 61635</a> - glVertexAttribPointer(id, GL_UNSIGNED_BYTE, GL_FALSE,...) does not work</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62466">Bug 62466</a> - r600g hyperz lockups with KSP 0.19</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62669">Bug 62669</a> - HyperZ freeze when playing PrBoom-Plus demo with lots of monsters</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62721">Bug 62721</a> - GPU lockup in Minecraft 1.5.1 with HyperZ</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=62830">Bug 62830</a> - [i965 bisected] Wrong Lightning on Freespace 2 SCP (patch attached)</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=63124">Bug 63124</a> - [r600g] HyperZ lockup on REDWOOD in Half Life 2 Deathmatch</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=63702">Bug 63702</a> - tiling2d in radeon trash vdpau UVD textures</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=64935">Bug 64935</a> - [swrast] s_texfetch.c:1335: set_fetch_functions: Assertion `texImage->FetchTexel' failed.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=64959">Bug 64959</a> - Cannot build against EGL without X11</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=65112">Bug 65112</a> - glcpp hangs parsing line continuations</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=65958">Bug 65958</a> - GPU Lockup on Trinity 7500G</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=66450">Bug 66450</a> - JUNIPER UVD accelerated playback of MPEG 1/2 streams does not work</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=66606">Bug 66606</a> - [i965 bisected]GLBenchmark 2.5.1/2.7.0 sometimes render error with gnome-session enabling SNA</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=66713">Bug 66713</a> - Team Fortress 2 crashes with r600-sb on HD4850</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=67354">Bug 67354</a> - glsl_parser.cpp is broken with bison 3.0</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=67548">Bug 67548</a> - glGetAttribLocation seems to be broken</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=67927">Bug 67927</a> - R600_DEBUG=sb: Celestia show 2 earths, one wrongly rendered</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=67934">Bug 67934</a> - [SNB/IVB/HSW 9.2 Bisected]Ogles2conform/GL2Tests/glUniform/glUniform.test fails with gnome-session enable compositing</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=68162">Bug 68162</a> - [radeonsi] texture rendering is broken in Source-Engine games</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=68195">Bug 68195</a> - piglit tests vs-struct-pad and fs-struct-pad both fail</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
<h2>Changes</h2>
|
<h2>Changes</h2>
|
||||||
|
|
||||||
@@ -70,7 +217,8 @@ Note: some of the new features are only available with certain drivers.
|
|||||||
the (unsupported) GDI driver.</li>
|
the (unsupported) GDI driver.</li>
|
||||||
<li>GL_EXT_separate_shader_objects has been removed from all Gallium drivers,
|
<li>GL_EXT_separate_shader_objects has been removed from all Gallium drivers,
|
||||||
because it disallows a critical GLSL shader optimization.
|
because it disallows a critical GLSL shader optimization.
|
||||||
GL_ARB_separate_shader_objects doesn't have this issue.
|
GL_ARB_separate_shader_objects doesn't have this issue.</li>
|
||||||
|
<li>i965 Gen6+ requires Kernel 3.6 or later. (92d2f5a)</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@@ -35,7 +35,8 @@
|
|||||||
#define bool _Bool
|
#define bool _Bool
|
||||||
|
|
||||||
/* For compilers that don't have the builtin _Bool type. */
|
/* For compilers that don't have the builtin _Bool type. */
|
||||||
#if defined(_MSC_VER) || (__STDC_VERSION__ < 199901L && __GNUC__ < 3)
|
#if (defined(_MSC_VER) && _MSC_VER < 1800) || \
|
||||||
|
(defined __GNUC__&& __STDC_VERSION__ < 199901L && __GNUC__ < 3)
|
||||||
typedef unsigned char _Bool;
|
typedef unsigned char _Bool;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -29,6 +29,10 @@ if HAVE_DRI_GLX
|
|||||||
SUBDIRS += glx
|
SUBDIRS += glx
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if HAVE_EGL_PLATFORM_WAYLAND
|
||||||
|
SUBDIRS += egl/wayland
|
||||||
|
endif
|
||||||
|
|
||||||
if HAVE_GBM
|
if HAVE_GBM
|
||||||
SUBDIRS += gbm
|
SUBDIRS += gbm
|
||||||
endif
|
endif
|
||||||
|
@@ -21,8 +21,4 @@
|
|||||||
|
|
||||||
SUBDIRS=
|
SUBDIRS=
|
||||||
|
|
||||||
if HAVE_EGL_PLATFORM_WAYLAND
|
|
||||||
SUBDIRS += wayland
|
|
||||||
endif
|
|
||||||
|
|
||||||
SUBDIRS += drivers main
|
SUBDIRS += drivers main
|
||||||
|
@@ -28,6 +28,7 @@ AM_CFLAGS = \
|
|||||||
-I$(top_srcdir)/src/egl/wayland/wayland-drm \
|
-I$(top_srcdir)/src/egl/wayland/wayland-drm \
|
||||||
-I$(top_builddir)/src/egl/wayland/wayland-drm \
|
-I$(top_builddir)/src/egl/wayland/wayland-drm \
|
||||||
$(DEFINES) \
|
$(DEFINES) \
|
||||||
|
$(VISIBILITY_CFLAGS) \
|
||||||
$(LIBDRM_CFLAGS) \
|
$(LIBDRM_CFLAGS) \
|
||||||
$(LIBUDEV_CFLAGS) \
|
$(LIBUDEV_CFLAGS) \
|
||||||
$(LIBKMS_CFLAGS) \
|
$(LIBKMS_CFLAGS) \
|
||||||
|
@@ -1203,7 +1203,7 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx,
|
|||||||
EGLint err;
|
EGLint err;
|
||||||
int32_t plane;
|
int32_t plane;
|
||||||
|
|
||||||
if (!wayland_buffer_is_drm(&buffer->buffer))
|
if (!wayland_buffer_is_drm(dri2_dpy->wl_server_drm, &buffer->buffer))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
err = _eglParseImageAttribList(&attrs, disp, attr_list);
|
err = _eglParseImageAttribList(&attrs, disp, attr_list);
|
||||||
@@ -1585,6 +1585,11 @@ dri2_bind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *disp,
|
|||||||
if (!dri2_dpy->wl_server_drm)
|
if (!dri2_dpy->wl_server_drm)
|
||||||
return EGL_FALSE;
|
return EGL_FALSE;
|
||||||
|
|
||||||
|
#ifdef HAVE_DRM_PLATFORM
|
||||||
|
if (dri2_dpy->gbm_dri)
|
||||||
|
dri2_dpy->gbm_dri->wl_drm = dri2_dpy->wl_server_drm;
|
||||||
|
#endif
|
||||||
|
|
||||||
return EGL_TRUE;
|
return EGL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1611,9 +1616,10 @@ dri2_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *disp,
|
|||||||
EGLint attribute, EGLint *value)
|
EGLint attribute, EGLint *value)
|
||||||
{
|
{
|
||||||
struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
|
struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
|
||||||
|
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||||
const struct wl_drm_components_descriptor *format;
|
const struct wl_drm_components_descriptor *format;
|
||||||
|
|
||||||
if (!wayland_buffer_is_drm(&buffer->buffer))
|
if (!wayland_buffer_is_drm(dri2_dpy->wl_server_drm, &buffer->buffer))
|
||||||
return EGL_FALSE;
|
return EGL_FALSE;
|
||||||
|
|
||||||
format = buffer->driver_format;
|
format = buffer->driver_format;
|
||||||
|
@@ -743,6 +743,20 @@ dri2_swap_buffers_msc(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw,
|
|||||||
free(reply);
|
free(reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Since we aren't watching for the server's invalidate events like we're
|
||||||
|
* supposed to (due to XCB providing no mechanism for filtering the events
|
||||||
|
* the way xlib does), and SwapBuffers is a common cause of invalidate
|
||||||
|
* events, just shove one down to the driver, even though we haven't told
|
||||||
|
* the driver that we're the kind of loader that provides reliable
|
||||||
|
* invalidate events. This causes the driver to request buffers again at
|
||||||
|
* its next draw, so that we get the correct buffers if a pageflip
|
||||||
|
* happened. The driver should still be using the viewport hack to catch
|
||||||
|
* window resizes.
|
||||||
|
*/
|
||||||
|
if (dri2_dpy->flush &&
|
||||||
|
dri2_dpy->flush->base.version >= 3 && dri2_dpy->flush->invalidate)
|
||||||
|
(*dri2_dpy->flush->invalidate)(dri2_surf->dri_drawable);
|
||||||
|
|
||||||
return swap_count;
|
return swap_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
AM_CFLAGS = \
|
AM_CFLAGS = \
|
||||||
-I$(top_srcdir)/include \
|
-I$(top_srcdir)/include \
|
||||||
-I$(top_srcdir)/src/egl/main \
|
-I$(top_srcdir)/src/egl/main \
|
||||||
|
$(VISIBILITY_CFLAGS) \
|
||||||
$(X11_CFLAGS) \
|
$(X11_CFLAGS) \
|
||||||
$(DEFINES)
|
$(DEFINES)
|
||||||
|
|
||||||
|
@@ -29,6 +29,7 @@ AM_CFLAGS = \
|
|||||||
-I$(top_srcdir)/include \
|
-I$(top_srcdir)/include \
|
||||||
-I$(top_srcdir)/src/gbm/main \
|
-I$(top_srcdir)/src/gbm/main \
|
||||||
$(DEFINES) \
|
$(DEFINES) \
|
||||||
|
$(VISIBILITY_CFLAGS) \
|
||||||
$(EGL_CFLAGS) \
|
$(EGL_CFLAGS) \
|
||||||
-D_EGL_NATIVE_PLATFORM=$(EGL_NATIVE_PLATFORM) \
|
-D_EGL_NATIVE_PLATFORM=$(EGL_NATIVE_PLATFORM) \
|
||||||
-D_EGL_DRIVER_SEARCH_DIR=\"$(EGL_DRIVER_INSTALL_DIR)\" \
|
-D_EGL_DRIVER_SEARCH_DIR=\"$(EGL_DRIVER_INSTALL_DIR)\" \
|
||||||
@@ -74,7 +75,7 @@ libEGL_la_SOURCES = \
|
|||||||
|
|
||||||
libEGL_la_LIBADD = \
|
libEGL_la_LIBADD = \
|
||||||
$(EGL_LIB_DEPS)
|
$(EGL_LIB_DEPS)
|
||||||
libEGL_la_LDFLAGS = -version-number 1:0 -no-undefined
|
libEGL_la_LDFLAGS = -Wl,-Bsymbolic -version-number 1:0 -no-undefined
|
||||||
|
|
||||||
if HAVE_EGL_PLATFORM_X11
|
if HAVE_EGL_PLATFORM_X11
|
||||||
AM_CFLAGS += -DHAVE_X11_PLATFORM
|
AM_CFLAGS += -DHAVE_X11_PLATFORM
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
AM_CFLAGS = -I$(top_srcdir)/src/egl/main \
|
AM_CFLAGS = -I$(top_srcdir)/src/egl/main \
|
||||||
-I$(top_srcdir)/include \
|
-I$(top_srcdir)/include \
|
||||||
$(DEFINES) \
|
$(DEFINES) \
|
||||||
|
$(VISIBILITY_CFLAGS) \
|
||||||
$(WAYLAND_CFLAGS)
|
$(WAYLAND_CFLAGS)
|
||||||
|
|
||||||
noinst_LTLIBRARIES = libwayland-drm.la
|
noinst_LTLIBRARIES = libwayland-drm.la
|
||||||
|
@@ -45,6 +45,7 @@ struct wl_drm {
|
|||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
|
||||||
struct wayland_drm_callbacks *callbacks;
|
struct wayland_drm_callbacks *callbacks;
|
||||||
|
struct wl_buffer_interface buffer_interface;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -63,10 +64,6 @@ buffer_destroy(struct wl_client *client, struct wl_resource *resource)
|
|||||||
wl_resource_destroy(resource);
|
wl_resource_destroy(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
const static struct wl_buffer_interface drm_buffer_interface = {
|
|
||||||
buffer_destroy
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
create_buffer(struct wl_client *client, struct wl_resource *resource,
|
create_buffer(struct wl_client *client, struct wl_resource *resource,
|
||||||
uint32_t id, uint32_t name, int fd,
|
uint32_t id, uint32_t name, int fd,
|
||||||
@@ -107,7 +104,7 @@ create_buffer(struct wl_client *client, struct wl_resource *resource,
|
|||||||
buffer->buffer.resource.object.id = id;
|
buffer->buffer.resource.object.id = id;
|
||||||
buffer->buffer.resource.object.interface = &wl_buffer_interface;
|
buffer->buffer.resource.object.interface = &wl_buffer_interface;
|
||||||
buffer->buffer.resource.object.implementation =
|
buffer->buffer.resource.object.implementation =
|
||||||
(void (**)(void)) &drm_buffer_interface;
|
(void (**)(void)) &drm->buffer_interface;
|
||||||
buffer->buffer.resource.data = buffer;
|
buffer->buffer.resource.data = buffer;
|
||||||
|
|
||||||
buffer->buffer.resource.destroy = destroy_buffer;
|
buffer->buffer.resource.destroy = destroy_buffer;
|
||||||
@@ -246,6 +243,7 @@ wayland_drm_init(struct wl_display *display, char *device_name,
|
|||||||
drm->callbacks = callbacks;
|
drm->callbacks = callbacks;
|
||||||
drm->user_data = user_data;
|
drm->user_data = user_data;
|
||||||
drm->flags = flags;
|
drm->flags = flags;
|
||||||
|
drm->buffer_interface.destroy = buffer_destroy;
|
||||||
|
|
||||||
wl_display_add_global(display, &wl_drm_interface, drm, bind_drm);
|
wl_display_add_global(display, &wl_drm_interface, drm, bind_drm);
|
||||||
|
|
||||||
@@ -263,10 +261,10 @@ wayland_drm_uninit(struct wl_drm *drm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
wayland_buffer_is_drm(struct wl_buffer *buffer)
|
wayland_buffer_is_drm(struct wl_drm *drm, struct wl_buffer *buffer)
|
||||||
{
|
{
|
||||||
return buffer->resource.object.implementation ==
|
return buffer->resource.object.implementation ==
|
||||||
(void (**)(void)) &drm_buffer_interface;
|
(void (**)(void)) &drm->buffer_interface;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
|
@@ -99,7 +99,7 @@ void
|
|||||||
wayland_drm_uninit(struct wl_drm *drm);
|
wayland_drm_uninit(struct wl_drm *drm);
|
||||||
|
|
||||||
int
|
int
|
||||||
wayland_buffer_is_drm(struct wl_buffer *buffer);
|
wayland_buffer_is_drm(struct wl_drm *drm, struct wl_buffer *buffer);
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
wayland_drm_buffer_get_format(struct wl_buffer *buffer_base);
|
wayland_drm_buffer_get_format(struct wl_buffer *buffer_base);
|
||||||
|
@@ -2,6 +2,7 @@ pkgconfigdir = $(libdir)/pkgconfig
|
|||||||
pkgconfig_DATA = wayland-egl.pc
|
pkgconfig_DATA = wayland-egl.pc
|
||||||
|
|
||||||
AM_CFLAGS = $(DEFINES) \
|
AM_CFLAGS = $(DEFINES) \
|
||||||
|
$(VISIBILITY_CFLAGS) \
|
||||||
$(WAYLAND_CFLAGS)
|
$(WAYLAND_CFLAGS)
|
||||||
|
|
||||||
lib_LTLIBRARIES = libwayland-egl.la
|
lib_LTLIBRARIES = libwayland-egl.la
|
||||||
|
@@ -6,5 +6,6 @@ includedir=@includedir@
|
|||||||
Name: wayland-egl
|
Name: wayland-egl
|
||||||
Description: Mesa wayland-egl library
|
Description: Mesa wayland-egl library
|
||||||
Version: @VERSION@
|
Version: @VERSION@
|
||||||
|
Requires: wayland-client
|
||||||
Libs: -L${libdir} -lwayland-egl
|
Libs: -L${libdir} -lwayland-egl
|
||||||
Cflags: -I${includedir}
|
Cflags: -I${includedir}
|
||||||
|
@@ -38,13 +38,17 @@ libgallium_la_SOURCES += \
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
indices/u_indices_gen.c: $(srcdir)/indices/u_indices_gen.py
|
indices/u_indices_gen.c: $(srcdir)/indices/u_indices_gen.py
|
||||||
|
$(MKDIR_P) indices
|
||||||
$(AM_V_GEN) $(PYTHON2) $< > $@
|
$(AM_V_GEN) $(PYTHON2) $< > $@
|
||||||
|
|
||||||
indices/u_unfilled_gen.c: $(srcdir)/indices/u_unfilled_gen.py
|
indices/u_unfilled_gen.c: $(srcdir)/indices/u_unfilled_gen.py
|
||||||
|
$(MKDIR_P) indices
|
||||||
$(AM_V_GEN) $(PYTHON2) $< > $@
|
$(AM_V_GEN) $(PYTHON2) $< > $@
|
||||||
|
|
||||||
util/u_format_srgb.c: $(srcdir)/util/u_format_srgb.py
|
util/u_format_srgb.c: $(srcdir)/util/u_format_srgb.py
|
||||||
|
$(MKDIR_P) util
|
||||||
$(AM_V_GEN) $(PYTHON2) $< > $@
|
$(AM_V_GEN) $(PYTHON2) $< > $@
|
||||||
|
|
||||||
util/u_format_table.c: $(srcdir)/util/u_format_table.py $(srcdir)/util/u_format_pack.py $(srcdir)/util/u_format_parse.py $(srcdir)/util/u_format.csv
|
util/u_format_table.c: $(srcdir)/util/u_format_table.py $(srcdir)/util/u_format_pack.py $(srcdir)/util/u_format_parse.py $(srcdir)/util/u_format.csv
|
||||||
|
$(MKDIR_P) util
|
||||||
$(AM_V_GEN) $(PYTHON2) $(srcdir)/util/u_format_table.py $(srcdir)/util/u_format.csv > $@
|
$(AM_V_GEN) $(PYTHON2) $(srcdir)/util/u_format_table.py $(srcdir)/util/u_format.csv > $@
|
||||||
|
@@ -58,7 +58,7 @@ draw_get_option_use_llvm(void)
|
|||||||
|
|
||||||
#ifdef PIPE_ARCH_X86
|
#ifdef PIPE_ARCH_X86
|
||||||
util_cpu_detect();
|
util_cpu_detect();
|
||||||
/* require SSE2 due to LLVM PR6960. */
|
/* require SSE2 due to LLVM PR6960. XXX Might be fixed by now? */
|
||||||
if (!util_cpu_caps.has_sse2)
|
if (!util_cpu_caps.has_sse2)
|
||||||
value = FALSE;
|
value = FALSE;
|
||||||
#endif
|
#endif
|
||||||
@@ -78,6 +78,9 @@ draw_create_context(struct pipe_context *pipe, boolean try_llvm)
|
|||||||
if (draw == NULL)
|
if (draw == NULL)
|
||||||
goto err_out;
|
goto err_out;
|
||||||
|
|
||||||
|
/* we need correct cpu caps for disabling denorms in draw_vbo() */
|
||||||
|
util_cpu_detect();
|
||||||
|
|
||||||
#if HAVE_LLVM
|
#if HAVE_LLVM
|
||||||
if (try_llvm && draw_get_option_use_llvm()) {
|
if (try_llvm && draw_get_option_use_llvm()) {
|
||||||
draw->llvm = draw_llvm_create(draw);
|
draw->llvm = draw_llvm_create(draw);
|
||||||
|
@@ -32,10 +32,10 @@
|
|||||||
|
|
||||||
#if defined(PIPE_SUBSYSTEM_WINDOWS_USER)
|
#if defined(PIPE_SUBSYSTEM_WINDOWS_USER)
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
#elif defined(PIPE_OS_BSD) || defined(PIPE_OS_APPLE)
|
|
||||||
# include <stdlib.h>
|
|
||||||
#elif defined(__GLIBC__)
|
#elif defined(__GLIBC__)
|
||||||
# include <errno.h>
|
# include <errno.h>
|
||||||
|
#elif defined(PIPE_OS_BSD) || defined(PIPE_OS_APPLE)
|
||||||
|
# include <stdlib.h>
|
||||||
#else
|
#else
|
||||||
#warning unexpected platform in os_process.c
|
#warning unexpected platform in os_process.c
|
||||||
#endif
|
#endif
|
||||||
@@ -68,11 +68,11 @@ os_get_process_name(char *procname, size_t size)
|
|||||||
|
|
||||||
name = lpProcessName;
|
name = lpProcessName;
|
||||||
|
|
||||||
|
#elif defined(__GLIBC__)
|
||||||
|
name = program_invocation_short_name;
|
||||||
#elif defined(PIPE_OS_BSD) || defined(PIPE_OS_APPLE)
|
#elif defined(PIPE_OS_BSD) || defined(PIPE_OS_APPLE)
|
||||||
/* *BSD and OS X */
|
/* *BSD and OS X */
|
||||||
name = getprogname();
|
name = getprogname();
|
||||||
#elif defined(__GLIBC__)
|
|
||||||
name = program_invocation_short_name;
|
|
||||||
#else
|
#else
|
||||||
#warning unexpected platform in os_process.c
|
#warning unexpected platform in os_process.c
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@@ -77,6 +77,14 @@ void pp_debug(const char *, ...);
|
|||||||
struct program *pp_init_prog(struct pp_queue_t *, struct pipe_context *pipe,
|
struct program *pp_init_prog(struct pp_queue_t *, struct pipe_context *pipe,
|
||||||
struct cso_context *);
|
struct cso_context *);
|
||||||
void pp_init_fbos(struct pp_queue_t *, unsigned int, unsigned int);
|
void pp_init_fbos(struct pp_queue_t *, unsigned int, unsigned int);
|
||||||
|
void pp_blit(struct pipe_context *pipe,
|
||||||
|
struct pipe_resource *src_tex,
|
||||||
|
int srcX0, int srcY0,
|
||||||
|
int srcX1, int srcY1,
|
||||||
|
int srcZ0,
|
||||||
|
struct pipe_surface *dst,
|
||||||
|
int dstX0, int dstY0,
|
||||||
|
int dstX1, int dstY1);
|
||||||
|
|
||||||
/* The filters */
|
/* The filters */
|
||||||
|
|
||||||
|
@@ -31,7 +31,6 @@
|
|||||||
|
|
||||||
#include "pipe/p_screen.h"
|
#include "pipe/p_screen.h"
|
||||||
#include "util/u_inlines.h"
|
#include "util/u_inlines.h"
|
||||||
#include "util/u_blit.h"
|
|
||||||
#include "util/u_math.h"
|
#include "util/u_math.h"
|
||||||
#include "util/u_debug.h"
|
#include "util/u_debug.h"
|
||||||
#include "util/u_memory.h"
|
#include "util/u_memory.h"
|
||||||
@@ -111,13 +110,6 @@ pp_init(struct pipe_context *pipe, const unsigned int *enabled,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ppq->p->blitctx = util_create_blit(ppq->p->pipe, cso);
|
|
||||||
|
|
||||||
if (ppq->p->blitctx == NULL) {
|
|
||||||
pp_debug("Unable to create a blit context.\n");
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
ppq->n_filters = curpos;
|
ppq->n_filters = curpos;
|
||||||
ppq->n_tmp = (curpos > 2 ? 2 : 1);
|
ppq->n_tmp = (curpos > 2 ? 2 : 1);
|
||||||
ppq->n_inner_tmp = tmp_req;
|
ppq->n_inner_tmp = tmp_req;
|
||||||
@@ -180,11 +172,6 @@ pp_free(struct pp_queue_t *ppq)
|
|||||||
pp_free_fbos(ppq);
|
pp_free_fbos(ppq);
|
||||||
|
|
||||||
if (ppq && ppq->p) {
|
if (ppq && ppq->p) {
|
||||||
/* Only destroy created contexts. */
|
|
||||||
if (ppq->p->blitctx) {
|
|
||||||
util_destroy_blit(ppq->p->blitctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ppq->p->pipe && ppq->filters && ppq->shaders) {
|
if (ppq->p->pipe && ppq->filters && ppq->shaders) {
|
||||||
for (i = 0; i < ppq->n_filters; i++) {
|
for (i = 0; i < ppq->n_filters; i++) {
|
||||||
unsigned int filter = ppq->filters[i];
|
unsigned int filter = ppq->filters[i];
|
||||||
|
@@ -43,7 +43,6 @@
|
|||||||
#include "postprocess/postprocess.h"
|
#include "postprocess/postprocess.h"
|
||||||
#include "postprocess/pp_mlaa.h"
|
#include "postprocess/pp_mlaa.h"
|
||||||
#include "postprocess/pp_filters.h"
|
#include "postprocess/pp_filters.h"
|
||||||
#include "util/u_blit.h"
|
|
||||||
#include "util/u_box.h"
|
#include "util/u_box.h"
|
||||||
#include "util/u_sampler.h"
|
#include "util/u_sampler.h"
|
||||||
#include "util/u_inlines.h"
|
#include "util/u_inlines.h"
|
||||||
@@ -191,10 +190,9 @@ pp_jimenezmlaa_run(struct pp_queue_t *ppq, struct pipe_resource *in,
|
|||||||
pp_filter_set_fb(p);
|
pp_filter_set_fb(p);
|
||||||
|
|
||||||
/* Blit the input to the output */
|
/* Blit the input to the output */
|
||||||
util_blit_pixels(p->blitctx, in, 0, 0, 0,
|
pp_blit(p->pipe, in, 0, 0,
|
||||||
w, h, 0, p->framebuffer.cbufs[0],
|
w, h, 0, p->framebuffer.cbufs[0],
|
||||||
0, 0, w, h, 0, PIPE_TEX_MIPFILTER_NEAREST,
|
0, 0, w, h);
|
||||||
TGSI_WRITEMASK_XYZW, 0);
|
|
||||||
|
|
||||||
u_sampler_view_default_template(&v_tmp, in, in->format);
|
u_sampler_view_default_template(&v_tmp, in, in->format);
|
||||||
arr[0] = p->pipe->create_sampler_view(p->pipe, in, &v_tmp);
|
arr[0] = p->pipe->create_sampler_view(p->pipe, in, &v_tmp);
|
||||||
|
@@ -56,8 +56,6 @@ struct program
|
|||||||
struct pipe_resource *vbuf;
|
struct pipe_resource *vbuf;
|
||||||
struct pipe_surface surf;
|
struct pipe_surface surf;
|
||||||
struct pipe_sampler_view *view;
|
struct pipe_sampler_view *view;
|
||||||
|
|
||||||
struct blit_state *blitctx;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -28,12 +28,50 @@
|
|||||||
#include "postprocess.h"
|
#include "postprocess.h"
|
||||||
|
|
||||||
#include "postprocess/pp_filters.h"
|
#include "postprocess/pp_filters.h"
|
||||||
#include "util/u_blit.h"
|
|
||||||
#include "util/u_inlines.h"
|
#include "util/u_inlines.h"
|
||||||
#include "util/u_sampler.h"
|
#include "util/u_sampler.h"
|
||||||
|
|
||||||
#include "tgsi/tgsi_parse.h"
|
#include "tgsi/tgsi_parse.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
pp_blit(struct pipe_context *pipe,
|
||||||
|
struct pipe_resource *src_tex,
|
||||||
|
int srcX0, int srcY0,
|
||||||
|
int srcX1, int srcY1,
|
||||||
|
int srcZ0,
|
||||||
|
struct pipe_surface *dst,
|
||||||
|
int dstX0, int dstY0,
|
||||||
|
int dstX1, int dstY1)
|
||||||
|
{
|
||||||
|
struct pipe_blit_info blit;
|
||||||
|
|
||||||
|
memset(&blit, 0, sizeof(blit));
|
||||||
|
|
||||||
|
blit.src.resource = src_tex;
|
||||||
|
blit.src.level = 0;
|
||||||
|
blit.src.format = src_tex->format;
|
||||||
|
blit.src.box.x = srcX0;
|
||||||
|
blit.src.box.y = srcY0;
|
||||||
|
blit.src.box.z = srcZ0;
|
||||||
|
blit.src.box.width = srcX1 - srcX0;
|
||||||
|
blit.src.box.height = srcY1 - srcY0;
|
||||||
|
blit.src.box.depth = 1;
|
||||||
|
|
||||||
|
blit.dst.resource = dst->texture;
|
||||||
|
blit.dst.level = dst->u.tex.level;
|
||||||
|
blit.dst.format = dst->format;
|
||||||
|
blit.dst.box.x = dstX0;
|
||||||
|
blit.dst.box.y = dstY0;
|
||||||
|
blit.dst.box.z = 0;
|
||||||
|
blit.dst.box.width = dstX1 - dstX0;
|
||||||
|
blit.dst.box.height = dstY1 - dstY0;
|
||||||
|
blit.dst.box.depth = 1;
|
||||||
|
|
||||||
|
blit.mask = PIPE_MASK_RGBA;
|
||||||
|
|
||||||
|
pipe->blit(pipe, &blit);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main run function of the PP queue. Called on swapbuffers/flush.
|
* Main run function of the PP queue. Called on swapbuffers/flush.
|
||||||
*
|
*
|
||||||
@@ -66,10 +104,10 @@ pp_run(struct pp_queue_t *ppq, struct pipe_resource *in,
|
|||||||
unsigned int w = ppq->p->framebuffer.width;
|
unsigned int w = ppq->p->framebuffer.width;
|
||||||
unsigned int h = ppq->p->framebuffer.height;
|
unsigned int h = ppq->p->framebuffer.height;
|
||||||
|
|
||||||
util_blit_pixels(ppq->p->blitctx, in, 0, 0, 0,
|
|
||||||
w, h, 0, ppq->tmps[0],
|
pp_blit(ppq->p->pipe, in, 0, 0,
|
||||||
0, 0, w, h, 0, PIPE_TEX_MIPFILTER_NEAREST,
|
w, h, 0, ppq->tmps[0],
|
||||||
TGSI_WRITEMASK_XYZW, 0);
|
0, 0, w, h);
|
||||||
|
|
||||||
in = ppq->tmp[0];
|
in = ppq->tmp[0];
|
||||||
}
|
}
|
||||||
@@ -218,8 +256,8 @@ pp_tgsi_to_state(struct pipe_context *pipe, const char *text, bool isvs,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tgsi_text_translate(text, tokens, Elements(tokens)) == FALSE) {
|
if (tgsi_text_translate(text, tokens, PP_MAX_TOKENS) == FALSE) {
|
||||||
pp_debug("Failed to translate %s\n", name);
|
_debug_printf("pp: Failed to translate a shader for %s\n", name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -111,7 +111,6 @@ util_format_s3tc_init(void)
|
|||||||
util_dl_proc fetch_2d_texel_rgba_dxt3;
|
util_dl_proc fetch_2d_texel_rgba_dxt3;
|
||||||
util_dl_proc fetch_2d_texel_rgba_dxt5;
|
util_dl_proc fetch_2d_texel_rgba_dxt5;
|
||||||
util_dl_proc tx_compress_dxtn;
|
util_dl_proc tx_compress_dxtn;
|
||||||
char *force_s3tc_enable;
|
|
||||||
|
|
||||||
if (!first_time)
|
if (!first_time)
|
||||||
return;
|
return;
|
||||||
@@ -122,15 +121,8 @@ util_format_s3tc_init(void)
|
|||||||
|
|
||||||
library = util_dl_open(DXTN_LIBNAME);
|
library = util_dl_open(DXTN_LIBNAME);
|
||||||
if (!library) {
|
if (!library) {
|
||||||
if ((force_s3tc_enable = getenv("force_s3tc_enable")) &&
|
debug_printf("couldn't open " DXTN_LIBNAME ", software DXTn "
|
||||||
!strcmp(force_s3tc_enable, "true")) {
|
"compression/decompression unavailable\n");
|
||||||
debug_printf("couldn't open " DXTN_LIBNAME ", enabling DXTn due to "
|
|
||||||
"force_s3tc_enable=true environment variable\n");
|
|
||||||
util_format_s3tc_enabled = TRUE;
|
|
||||||
} else {
|
|
||||||
debug_printf("couldn't open " DXTN_LIBNAME ", software DXTn "
|
|
||||||
"compression/decompression unavailable\n");
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -32,8 +32,10 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include <X11/Xlib-xcb.h>
|
#include <X11/Xlib-xcb.h>
|
||||||
|
#include <X11/extensions/dri2tokens.h>
|
||||||
#include <xcb/dri2.h>
|
#include <xcb/dri2.h>
|
||||||
#include <xf86drm.h>
|
#include <xf86drm.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
#include "pipe/p_screen.h"
|
#include "pipe/p_screen.h"
|
||||||
#include "pipe/p_context.h"
|
#include "pipe/p_context.h"
|
||||||
@@ -305,6 +307,7 @@ vl_screen_create(Display *display, int screen)
|
|||||||
xcb_generic_error_t *error = NULL;
|
xcb_generic_error_t *error = NULL;
|
||||||
char *device_name;
|
char *device_name;
|
||||||
int fd, device_name_length;
|
int fd, device_name_length;
|
||||||
|
unsigned int driverType;
|
||||||
|
|
||||||
drm_magic_t magic;
|
drm_magic_t magic;
|
||||||
|
|
||||||
@@ -332,7 +335,22 @@ vl_screen_create(Display *display, int screen)
|
|||||||
s = xcb_setup_roots_iterator(xcb_get_setup(scrn->conn));
|
s = xcb_setup_roots_iterator(xcb_get_setup(scrn->conn));
|
||||||
while (screen--)
|
while (screen--)
|
||||||
xcb_screen_next(&s);
|
xcb_screen_next(&s);
|
||||||
connect_cookie = xcb_dri2_connect_unchecked(scrn->conn, s.data->root, XCB_DRI2_DRIVER_TYPE_DRI);
|
driverType = XCB_DRI2_DRIVER_TYPE_DRI;
|
||||||
|
#ifdef DRI2DriverPrimeShift
|
||||||
|
{
|
||||||
|
char *prime = getenv("DRI_PRIME");
|
||||||
|
if (prime) {
|
||||||
|
unsigned int primeid;
|
||||||
|
errno = 0;
|
||||||
|
primeid = strtoul(prime, NULL, 0);
|
||||||
|
if (errno == 0)
|
||||||
|
driverType |=
|
||||||
|
((primeid & DRI2DriverPrimeMask) << DRI2DriverPrimeShift);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
connect_cookie = xcb_dri2_connect_unchecked(scrn->conn, s.data->root, driverType);
|
||||||
connect = xcb_dri2_connect_reply(scrn->conn, connect_cookie, NULL);
|
connect = xcb_dri2_connect_reply(scrn->conn, connect_cookie, NULL);
|
||||||
if (connect == NULL || connect->driver_name_length + connect->device_name_length == 0)
|
if (connect == NULL || connect->driver_name_length + connect->device_name_length == 0)
|
||||||
goto free_screen;
|
goto free_screen;
|
||||||
|
@@ -168,6 +168,8 @@ The integer capabilities:
|
|||||||
since they are linked) a driver can support. Returning 0 is equivalent
|
since they are linked) a driver can support. Returning 0 is equivalent
|
||||||
to returning 1 because every driver has to support at least a single
|
to returning 1 because every driver has to support at least a single
|
||||||
viewport/scissor combination.
|
viewport/scissor combination.
|
||||||
|
* ''PIPE_CAP_ENDIANNESS``:: The endianness of the device. Either
|
||||||
|
PIPE_ENDIAN_BIG or PIPE_ENDIAN_LITTLE.
|
||||||
|
|
||||||
|
|
||||||
.. _pipe_capf:
|
.. _pipe_capf:
|
||||||
|
@@ -227,6 +227,9 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_MAX_TEXEL_OFFSET:
|
case PIPE_CAP_MAX_TEXEL_OFFSET:
|
||||||
return 7;
|
return 7;
|
||||||
|
|
||||||
|
case PIPE_CAP_ENDIANNESS:
|
||||||
|
return PIPE_ENDIAN_LITTLE;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
DBG("unknown param %d", param);
|
DBG("unknown param %d", param);
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -263,6 +263,8 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
|
|||||||
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
|
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
|
||||||
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
|
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
|
||||||
return 0;
|
return 0;
|
||||||
|
case PIPE_CAP_ENDIANNESS:
|
||||||
|
return PIPE_ENDIAN_LITTLE;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap);
|
debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap);
|
||||||
|
@@ -421,6 +421,8 @@ ilo_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||||||
return 1 << 27;
|
return 1 << 27;
|
||||||
case PIPE_CAP_MAX_VIEWPORTS:
|
case PIPE_CAP_MAX_VIEWPORTS:
|
||||||
return ILO_MAX_VIEWPORTS;
|
return ILO_MAX_VIEWPORTS;
|
||||||
|
case PIPE_CAP_ENDIANNESS:
|
||||||
|
return PIPE_ENDIAN_LITTLE;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -836,7 +836,7 @@ lp_build_depth_stencil_test(struct gallivm_state *gallivm,
|
|||||||
LLVMValueRef stencil_vals = NULL;
|
LLVMValueRef stencil_vals = NULL;
|
||||||
LLVMValueRef z_bitmask = NULL, stencil_shift = NULL;
|
LLVMValueRef z_bitmask = NULL, stencil_shift = NULL;
|
||||||
LLVMValueRef z_pass = NULL, s_pass_mask = NULL;
|
LLVMValueRef z_pass = NULL, s_pass_mask = NULL;
|
||||||
LLVMValueRef orig_mask = lp_build_mask_value(mask);
|
LLVMValueRef current_mask = lp_build_mask_value(mask);
|
||||||
LLVMValueRef front_facing = NULL;
|
LLVMValueRef front_facing = NULL;
|
||||||
boolean have_z, have_s;
|
boolean have_z, have_s;
|
||||||
|
|
||||||
@@ -984,7 +984,7 @@ lp_build_depth_stencil_test(struct gallivm_state *gallivm,
|
|||||||
|
|
||||||
/* apply stencil-fail operator */
|
/* apply stencil-fail operator */
|
||||||
{
|
{
|
||||||
LLVMValueRef s_fail_mask = lp_build_andnot(&s_bld, orig_mask, s_pass_mask);
|
LLVMValueRef s_fail_mask = lp_build_andnot(&s_bld, current_mask, s_pass_mask);
|
||||||
stencil_vals = lp_build_stencil_op(&s_bld, stencil, S_FAIL_OP,
|
stencil_vals = lp_build_stencil_op(&s_bld, stencil, S_FAIL_OP,
|
||||||
stencil_refs, stencil_vals,
|
stencil_refs, stencil_vals,
|
||||||
s_fail_mask, front_facing);
|
s_fail_mask, front_facing);
|
||||||
@@ -1032,6 +1032,11 @@ lp_build_depth_stencil_test(struct gallivm_state *gallivm,
|
|||||||
/* compare src Z to dst Z, returning 'pass' mask */
|
/* compare src Z to dst Z, returning 'pass' mask */
|
||||||
z_pass = lp_build_cmp(&z_bld, depth->func, z_src, z_dst);
|
z_pass = lp_build_cmp(&z_bld, depth->func, z_src, z_dst);
|
||||||
|
|
||||||
|
/* mask off bits that failed stencil test */
|
||||||
|
if (s_pass_mask) {
|
||||||
|
current_mask = LLVMBuildAnd(builder, current_mask, s_pass_mask, "");
|
||||||
|
}
|
||||||
|
|
||||||
if (!stencil[0].enabled) {
|
if (!stencil[0].enabled) {
|
||||||
/* We can potentially skip all remaining operations here, but only
|
/* We can potentially skip all remaining operations here, but only
|
||||||
* if stencil is disabled because we still need to update the stencil
|
* if stencil is disabled because we still need to update the stencil
|
||||||
@@ -1041,25 +1046,19 @@ lp_build_depth_stencil_test(struct gallivm_state *gallivm,
|
|||||||
|
|
||||||
if (do_branch) {
|
if (do_branch) {
|
||||||
lp_build_mask_check(mask);
|
lp_build_mask_check(mask);
|
||||||
do_branch = FALSE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (depth->writemask) {
|
if (depth->writemask) {
|
||||||
LLVMValueRef zselectmask;
|
LLVMValueRef z_pass_mask;
|
||||||
|
|
||||||
/* mask off bits that failed Z test */
|
/* mask off bits that failed Z test */
|
||||||
zselectmask = LLVMBuildAnd(builder, orig_mask, z_pass, "");
|
z_pass_mask = LLVMBuildAnd(builder, current_mask, z_pass, "");
|
||||||
|
|
||||||
/* mask off bits that failed stencil test */
|
|
||||||
if (s_pass_mask) {
|
|
||||||
zselectmask = LLVMBuildAnd(builder, zselectmask, s_pass_mask, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Mix the old and new Z buffer values.
|
/* Mix the old and new Z buffer values.
|
||||||
* z_dst[i] = zselectmask[i] ? z_src[i] : z_dst[i]
|
* z_dst[i] = zselectmask[i] ? z_src[i] : z_dst[i]
|
||||||
*/
|
*/
|
||||||
z_dst = lp_build_select(&z_bld, zselectmask, z_src, z_dst);
|
z_dst = lp_build_select(&z_bld, z_pass_mask, z_src, z_dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stencil[0].enabled) {
|
if (stencil[0].enabled) {
|
||||||
@@ -1067,13 +1066,13 @@ lp_build_depth_stencil_test(struct gallivm_state *gallivm,
|
|||||||
LLVMValueRef z_fail_mask, z_pass_mask;
|
LLVMValueRef z_fail_mask, z_pass_mask;
|
||||||
|
|
||||||
/* apply Z-fail operator */
|
/* apply Z-fail operator */
|
||||||
z_fail_mask = lp_build_andnot(&s_bld, orig_mask, z_pass);
|
z_fail_mask = lp_build_andnot(&s_bld, current_mask, z_pass);
|
||||||
stencil_vals = lp_build_stencil_op(&s_bld, stencil, Z_FAIL_OP,
|
stencil_vals = lp_build_stencil_op(&s_bld, stencil, Z_FAIL_OP,
|
||||||
stencil_refs, stencil_vals,
|
stencil_refs, stencil_vals,
|
||||||
z_fail_mask, front_facing);
|
z_fail_mask, front_facing);
|
||||||
|
|
||||||
/* apply Z-pass operator */
|
/* apply Z-pass operator */
|
||||||
z_pass_mask = LLVMBuildAnd(builder, orig_mask, z_pass, "");
|
z_pass_mask = LLVMBuildAnd(builder, current_mask, z_pass, "");
|
||||||
stencil_vals = lp_build_stencil_op(&s_bld, stencil, Z_PASS_OP,
|
stencil_vals = lp_build_stencil_op(&s_bld, stencil, Z_PASS_OP,
|
||||||
stencil_refs, stencil_vals,
|
stencil_refs, stencil_vals,
|
||||||
z_pass_mask, front_facing);
|
z_pass_mask, front_facing);
|
||||||
@@ -1083,7 +1082,7 @@ lp_build_depth_stencil_test(struct gallivm_state *gallivm,
|
|||||||
/* No depth test: apply Z-pass operator to stencil buffer values which
|
/* No depth test: apply Z-pass operator to stencil buffer values which
|
||||||
* passed the stencil test.
|
* passed the stencil test.
|
||||||
*/
|
*/
|
||||||
s_pass_mask = LLVMBuildAnd(builder, orig_mask, s_pass_mask, "");
|
s_pass_mask = LLVMBuildAnd(builder, current_mask, s_pass_mask, "");
|
||||||
stencil_vals = lp_build_stencil_op(&s_bld, stencil, Z_PASS_OP,
|
stencil_vals = lp_build_stencil_op(&s_bld, stencil, Z_PASS_OP,
|
||||||
stencil_refs, stencil_vals,
|
stencil_refs, stencil_vals,
|
||||||
s_pass_mask, front_facing);
|
s_pass_mask, front_facing);
|
||||||
|
@@ -231,6 +231,8 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||||||
return 0;
|
return 0;
|
||||||
case PIPE_CAP_MAX_VIEWPORTS:
|
case PIPE_CAP_MAX_VIEWPORTS:
|
||||||
return PIPE_MAX_VIEWPORTS;
|
return PIPE_MAX_VIEWPORTS;
|
||||||
|
case PIPE_CAP_ENDIANNESS:
|
||||||
|
return PIPE_ENDIAN_NATIVE;
|
||||||
}
|
}
|
||||||
/* should only get here on unhandled cases */
|
/* should only get here on unhandled cases */
|
||||||
debug_printf("Unexpected PIPE_CAP %d query\n", param);
|
debug_printf("Unexpected PIPE_CAP %d query\n", param);
|
||||||
|
@@ -289,6 +289,7 @@ nouveau_buffer_cache(struct nouveau_context *nv, struct nv04_resource *buf)
|
|||||||
tx.base.box.x = 0;
|
tx.base.box.x = 0;
|
||||||
tx.base.box.width = buf->base.width0;
|
tx.base.box.width = buf->base.width0;
|
||||||
tx.bo = NULL;
|
tx.bo = NULL;
|
||||||
|
tx.map = NULL;
|
||||||
|
|
||||||
if (!buf->data)
|
if (!buf->data)
|
||||||
if (!nouveau_buffer_malloc(buf))
|
if (!nouveau_buffer_malloc(buf))
|
||||||
@@ -690,6 +691,7 @@ nouveau_buffer_migrate(struct nouveau_context *nv,
|
|||||||
tx.base.box.x = 0;
|
tx.base.box.x = 0;
|
||||||
tx.base.box.width = buf->base.width0;
|
tx.base.box.width = buf->base.width0;
|
||||||
tx.bo = NULL;
|
tx.bo = NULL;
|
||||||
|
tx.map = NULL;
|
||||||
if (!nouveau_transfer_staging(nv, &tx, FALSE))
|
if (!nouveau_transfer_staging(nv, &tx, FALSE))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
nouveau_transfer_write(nv, &tx, 0, tx.base.box.width);
|
nouveau_transfer_write(nv, &tx, 0, tx.base.box.width);
|
||||||
|
@@ -208,7 +208,7 @@ nv30_context_create(struct pipe_screen *pscreen, void *priv)
|
|||||||
/*XXX: *cough* per-context pushbufs */
|
/*XXX: *cough* per-context pushbufs */
|
||||||
push = screen->base.pushbuf;
|
push = screen->base.pushbuf;
|
||||||
nv30->base.pushbuf = push;
|
nv30->base.pushbuf = push;
|
||||||
nv30->base.pushbuf->user_priv = push->user_priv; /* hack at validate time */
|
nv30->base.pushbuf->user_priv = &nv30->bufctx; /* hack at validate time */
|
||||||
nv30->base.pushbuf->rsvd_kick = 16; /* hack in screen before first space */
|
nv30->base.pushbuf->rsvd_kick = 16; /* hack in screen before first space */
|
||||||
nv30->base.pushbuf->kick_notify = nv30_context_kick_notify;
|
nv30->base.pushbuf->kick_notify = nv30_context_kick_notify;
|
||||||
|
|
||||||
|
@@ -111,9 +111,6 @@ nv30_format_info_table[PIPE_FORMAT_COUNT] = {
|
|||||||
_(R16G16_SNORM , __V_),
|
_(R16G16_SNORM , __V_),
|
||||||
_(R16G16B16_SNORM , __V_),
|
_(R16G16B16_SNORM , __V_),
|
||||||
_(R16G16B16A16_SNORM , __V_),
|
_(R16G16B16A16_SNORM , __V_),
|
||||||
_(R8_USCALED , __V_),
|
|
||||||
_(R8G8_USCALED , __V_),
|
|
||||||
_(R8G8B8_USCALED , __V_),
|
|
||||||
_(R8G8B8A8_USCALED , __V_),
|
_(R8G8B8A8_USCALED , __V_),
|
||||||
_(R16_FLOAT , __V_),
|
_(R16_FLOAT , __V_),
|
||||||
_(R16G16_FLOAT , __V_), //S_V_),
|
_(R16G16_FLOAT , __V_), //S_V_),
|
||||||
@@ -160,9 +157,6 @@ nv30_vtxfmt_table[PIPE_FORMAT_COUNT] = {
|
|||||||
_(R8G8_UNORM , U8_UNORM , 2),
|
_(R8G8_UNORM , U8_UNORM , 2),
|
||||||
_(R8G8B8_UNORM , U8_UNORM , 3),
|
_(R8G8B8_UNORM , U8_UNORM , 3),
|
||||||
_(R8G8B8A8_UNORM , U8_UNORM , 4),
|
_(R8G8B8A8_UNORM , U8_UNORM , 4),
|
||||||
_(R8_USCALED , U8_USCALED , 1),
|
|
||||||
_(R8G8_USCALED , U8_USCALED , 2),
|
|
||||||
_(R8G8B8_USCALED , U8_USCALED , 3),
|
|
||||||
_(R8G8B8A8_USCALED , U8_USCALED , 4),
|
_(R8G8B8A8_USCALED , U8_USCALED , 4),
|
||||||
_(R16_SNORM , V16_SNORM , 1),
|
_(R16_SNORM , V16_SNORM , 1),
|
||||||
_(R16G16_SNORM , V16_SNORM , 2),
|
_(R16G16_SNORM , V16_SNORM , 2),
|
||||||
|
@@ -113,6 +113,7 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_TEXTURE_BARRIER:
|
case PIPE_CAP_TEXTURE_BARRIER:
|
||||||
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
||||||
case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
|
case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
|
||||||
|
case PIPE_CAP_CUBE_MAP_ARRAY:
|
||||||
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
|
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
|
||||||
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
|
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
|
||||||
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
|
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
|
||||||
@@ -130,6 +131,8 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
|
case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
|
||||||
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
|
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
|
||||||
return 1;
|
return 1;
|
||||||
|
case PIPE_CAP_ENDIANNESS:
|
||||||
|
return PIPE_ENDIAN_LITTLE;
|
||||||
default:
|
default:
|
||||||
debug_printf("unknown param %d\n", param);
|
debug_printf("unknown param %d\n", param);
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -40,13 +40,15 @@ nv30_emit_vtxattr(struct nv30_context *nv30, struct pipe_vertex_buffer *vb,
|
|||||||
const unsigned nc = util_format_get_nr_components(ve->src_format);
|
const unsigned nc = util_format_get_nr_components(ve->src_format);
|
||||||
struct nouveau_pushbuf *push = nv30->base.pushbuf;
|
struct nouveau_pushbuf *push = nv30->base.pushbuf;
|
||||||
struct nv04_resource *res = nv04_resource(vb->buffer);
|
struct nv04_resource *res = nv04_resource(vb->buffer);
|
||||||
|
const struct util_format_description *desc =
|
||||||
|
util_format_description(ve->src_format);
|
||||||
const void *data;
|
const void *data;
|
||||||
float v[4];
|
float v[4];
|
||||||
|
|
||||||
data = nouveau_resource_map_offset(&nv30->base, res, vb->buffer_offset +
|
data = nouveau_resource_map_offset(&nv30->base, res, vb->buffer_offset +
|
||||||
ve->src_offset, NOUVEAU_BO_RD);
|
ve->src_offset, NOUVEAU_BO_RD);
|
||||||
|
|
||||||
util_format_read_4f(ve->src_format, v, 0, data, 0, 0, 0, 1, 1);
|
desc->unpack_rgba_float(v, 0, data, 0, 1, 1);
|
||||||
|
|
||||||
switch (nc) {
|
switch (nc) {
|
||||||
case 4:
|
case 4:
|
||||||
|
@@ -976,9 +976,8 @@ nvfx_fragprog_assign_generic(struct nv30_context *nvfx, struct nvfx_fpc *fpc,
|
|||||||
fpc->r_input[idx] = nvfx_reg(NVFXSR_INPUT, hw);
|
fpc->r_input[idx] = nvfx_reg(NVFXSR_INPUT, hw);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
return TRUE;
|
return FALSE;
|
||||||
default:
|
default:
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@@ -189,6 +189,8 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
return 0;
|
return 0;
|
||||||
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
|
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
|
||||||
return PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50;
|
return PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50;
|
||||||
|
case PIPE_CAP_ENDIANNESS:
|
||||||
|
return PIPE_ENDIAN_LITTLE;
|
||||||
default:
|
default:
|
||||||
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
|
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -40,7 +40,7 @@ struct nv50_constbuf {
|
|||||||
const uint8_t *data;
|
const uint8_t *data;
|
||||||
} u;
|
} u;
|
||||||
uint32_t size; /* max 65536 */
|
uint32_t size; /* max 65536 */
|
||||||
uint16_t offset;
|
uint32_t offset;
|
||||||
boolean user; /* should only be TRUE if u.data is valid and non-NULL */
|
boolean user; /* should only be TRUE if u.data is valid and non-NULL */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -140,10 +140,20 @@ nv50_emit_vtxattr(struct nv50_context *nv50, struct pipe_vertex_buffer *vb,
|
|||||||
const void *data = (const uint8_t *)vb->user_buffer + ve->src_offset;
|
const void *data = (const uint8_t *)vb->user_buffer + ve->src_offset;
|
||||||
float v[4];
|
float v[4];
|
||||||
const unsigned nc = util_format_get_nr_components(ve->src_format);
|
const unsigned nc = util_format_get_nr_components(ve->src_format);
|
||||||
|
const struct util_format_description *desc =
|
||||||
|
util_format_description(ve->src_format);
|
||||||
|
|
||||||
assert(vb->user_buffer);
|
assert(vb->user_buffer);
|
||||||
|
|
||||||
util_format_read_4f(ve->src_format, v, 0, data, 0, 0, 0, 1, 1);
|
if (desc->channel[0].pure_integer) {
|
||||||
|
if (desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) {
|
||||||
|
desc->unpack_rgba_sint((int32_t *)v, 0, data, 0, 1, 1);
|
||||||
|
} else {
|
||||||
|
desc->unpack_rgba_uint((uint32_t *)v, 0, data, 0, 1, 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
desc->unpack_rgba_float(v, 0, data, 0, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
switch (nc) {
|
switch (nc) {
|
||||||
case 4:
|
case 4:
|
||||||
|
@@ -624,17 +624,13 @@ nv84_video_buffer_create(struct pipe_context *pipe,
|
|||||||
union nouveau_bo_config cfg;
|
union nouveau_bo_config cfg;
|
||||||
unsigned bo_size;
|
unsigned bo_size;
|
||||||
|
|
||||||
if (getenv("XVMC_VL"))
|
if (getenv("XVMC_VL") || template->buffer_format != PIPE_FORMAT_NV12)
|
||||||
return vl_video_buffer_create(pipe, template);
|
return vl_video_buffer_create(pipe, template);
|
||||||
|
|
||||||
if (!template->interlaced) {
|
if (!template->interlaced) {
|
||||||
debug_printf("Require interlaced video buffers\n");
|
debug_printf("Require interlaced video buffers\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (template->buffer_format != PIPE_FORMAT_NV12) {
|
|
||||||
debug_printf("Must use NV12 format\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (template->chroma_format != PIPE_VIDEO_CHROMA_FORMAT_420) {
|
if (template->chroma_format != PIPE_VIDEO_CHROMA_FORMAT_420) {
|
||||||
debug_printf("Must use 4:2:0 format\n");
|
debug_printf("Must use 4:2:0 format\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@@ -136,12 +136,11 @@ nv84_decoder_bsp(struct nv84_decoder *dec,
|
|||||||
params.iseqparm.chroma_format_idc = 1;
|
params.iseqparm.chroma_format_idc = 1;
|
||||||
|
|
||||||
params.iseqparm.pic_width_in_mbs_minus1 = mb(dec->base.width) - 1;
|
params.iseqparm.pic_width_in_mbs_minus1 = mb(dec->base.width) - 1;
|
||||||
if (desc->field_pic_flag)
|
if (desc->field_pic_flag || desc->mb_adaptive_frame_field_flag)
|
||||||
params.iseqparm.pic_height_in_map_units_minus1 = mb_half(dec->base.height) - 1;
|
params.iseqparm.pic_height_in_map_units_minus1 = mb_half(dec->base.height) - 1;
|
||||||
else
|
else
|
||||||
params.iseqparm.pic_height_in_map_units_minus1 = mb(dec->base.height) - 1;
|
params.iseqparm.pic_height_in_map_units_minus1 = mb(dec->base.height) - 1;
|
||||||
|
|
||||||
/* TODO: interlaced still doesn't work, maybe due to ref frame management. */
|
|
||||||
if (desc->bottom_field_flag)
|
if (desc->bottom_field_flag)
|
||||||
params.ipicparm.curr_pic_order_cnt = desc->field_order_cnt[1];
|
params.ipicparm.curr_pic_order_cnt = desc->field_order_cnt[1];
|
||||||
else
|
else
|
||||||
|
@@ -39,10 +39,10 @@ struct h264_iparm1 {
|
|||||||
uint32_t h1; // 1fc
|
uint32_t h1; // 1fc
|
||||||
uint32_t h2; // 200
|
uint32_t h2; // 200
|
||||||
uint32_t h3; // 204
|
uint32_t h3; // 204
|
||||||
uint32_t unk208;
|
uint32_t mb_adaptive_frame_field_flag; // 208
|
||||||
uint32_t field_pic_flag;
|
uint32_t field_pic_flag; // 20c
|
||||||
uint32_t format;
|
uint32_t format; // 210
|
||||||
uint32_t unk214;
|
uint32_t unk214; // 214
|
||||||
};
|
};
|
||||||
|
|
||||||
struct h264_iparm2 {
|
struct h264_iparm2 {
|
||||||
@@ -56,7 +56,7 @@ struct h264_iparm2 {
|
|||||||
uint32_t h2; // 1c
|
uint32_t h2; // 1c
|
||||||
uint32_t h3; // 20
|
uint32_t h3; // 20
|
||||||
uint32_t unk24;
|
uint32_t unk24;
|
||||||
uint32_t unk28;
|
uint32_t mb_adaptive_frame_field_flag; // 28
|
||||||
uint32_t top; // 2c
|
uint32_t top; // 2c
|
||||||
uint32_t bottom; // 30
|
uint32_t bottom; // 30
|
||||||
uint32_t is_reference; // 34
|
uint32_t is_reference; // 34
|
||||||
@@ -100,6 +100,7 @@ nv84_decoder_vp_h264(struct nv84_decoder *dec,
|
|||||||
param1.height = param1.h2 = height;
|
param1.height = param1.h2 = height;
|
||||||
param1.h1 = param1.h3 = align(height, 32);
|
param1.h1 = param1.h3 = align(height, 32);
|
||||||
param1.format = 0x3231564e; /* 'NV12' */
|
param1.format = 0x3231564e; /* 'NV12' */
|
||||||
|
param1.mb_adaptive_frame_field_flag = desc->mb_adaptive_frame_field_flag;
|
||||||
param1.field_pic_flag = desc->field_pic_flag;
|
param1.field_pic_flag = desc->field_pic_flag;
|
||||||
|
|
||||||
param2.width = width;
|
param2.width = width;
|
||||||
@@ -115,6 +116,7 @@ nv84_decoder_vp_h264(struct nv84_decoder *dec,
|
|||||||
param2.top = desc->bottom_field_flag ? 2 : 1;
|
param2.top = desc->bottom_field_flag ? 2 : 1;
|
||||||
param2.bottom = desc->bottom_field_flag;
|
param2.bottom = desc->bottom_field_flag;
|
||||||
}
|
}
|
||||||
|
param2.mb_adaptive_frame_field_flag = desc->mb_adaptive_frame_field_flag;
|
||||||
param2.is_reference = desc->is_reference;
|
param2.is_reference = desc->is_reference;
|
||||||
|
|
||||||
PUSH_SPACE(push, 5 + 16 + 3 + 2 + 6 + (is_ref ? 2 : 0) + 3 + 2 + 4 + 2);
|
PUSH_SPACE(push, 5 + 16 + 3 + 2 + 6 + (is_ref ? 2 : 0) + 3 + 2 + 4 + 2);
|
||||||
|
@@ -441,6 +441,7 @@ NVC0LegalizePostRA::insertTextureBarriers(Function *fn)
|
|||||||
if (i->op == OP_TEXBAR) {
|
if (i->op == OP_TEXBAR) {
|
||||||
if (i->subOp >= max) {
|
if (i->subOp >= max) {
|
||||||
delete_Instruction(prog, i);
|
delete_Instruction(prog, i);
|
||||||
|
i = NULL;
|
||||||
} else {
|
} else {
|
||||||
max = i->subOp;
|
max = i->subOp;
|
||||||
if (prev && prev->op == OP_TEXBAR && prev->subOp >= max) {
|
if (prev && prev->op == OP_TEXBAR && prev->subOp >= max) {
|
||||||
@@ -452,7 +453,7 @@ NVC0LegalizePostRA::insertTextureBarriers(Function *fn)
|
|||||||
if (isTextureOp(i->op)) {
|
if (isTextureOp(i->op)) {
|
||||||
max++;
|
max++;
|
||||||
}
|
}
|
||||||
if (!i->isNop())
|
if (i && !i->isNop())
|
||||||
prev = i;
|
prev = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -337,6 +337,11 @@ TargetNVC0::insnCanLoad(const Instruction *i, int s,
|
|||||||
// (except if we implement more constraints)
|
// (except if we implement more constraints)
|
||||||
if (ld->getSrc(0)->asImm()->reg.data.u32 & 0xfff)
|
if (ld->getSrc(0)->asImm()->reg.data.u32 & 0xfff)
|
||||||
return false;
|
return false;
|
||||||
|
} else
|
||||||
|
if (i->op == OP_ADD && i->sType == TYPE_F32) {
|
||||||
|
// add f32 LIMM cannot saturate
|
||||||
|
if (i->saturate && (reg.data.u32 & 0xfff))
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -431,6 +436,13 @@ TargetNVC0::isSatSupported(const Instruction *insn) const
|
|||||||
if (insn->dType == TYPE_U32)
|
if (insn->dType == TYPE_U32)
|
||||||
return (insn->op == OP_ADD) || (insn->op == OP_MAD);
|
return (insn->op == OP_ADD) || (insn->op == OP_MAD);
|
||||||
|
|
||||||
|
// add f32 LIMM cannot saturate
|
||||||
|
if (insn->op == OP_ADD && insn->sType == TYPE_F32) {
|
||||||
|
if (insn->getSrc(1)->asImm() &&
|
||||||
|
insn->getSrc(1)->reg.data.u32 & 0xfff)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return insn->dType == TYPE_F32;
|
return insn->dType == TYPE_F32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -111,6 +111,7 @@ nvc0_destroy(struct pipe_context *pipe)
|
|||||||
nouveau_pushbuf_kick(nvc0->base.pushbuf, nvc0->base.pushbuf->channel);
|
nouveau_pushbuf_kick(nvc0->base.pushbuf, nvc0->base.pushbuf->channel);
|
||||||
|
|
||||||
nvc0_context_unreference_resources(nvc0);
|
nvc0_context_unreference_resources(nvc0);
|
||||||
|
nvc0_blitctx_destroy(nvc0);
|
||||||
|
|
||||||
#ifdef NVC0_WITH_DRAW_MODULE
|
#ifdef NVC0_WITH_DRAW_MODULE
|
||||||
draw_destroy(nvc0->draw);
|
draw_destroy(nvc0->draw);
|
||||||
|
@@ -96,6 +96,7 @@
|
|||||||
struct nvc0_blitctx;
|
struct nvc0_blitctx;
|
||||||
|
|
||||||
boolean nvc0_blitctx_create(struct nvc0_context *);
|
boolean nvc0_blitctx_create(struct nvc0_context *);
|
||||||
|
void nvc0_blitctx_destroy(struct nvc0_context *);
|
||||||
|
|
||||||
struct nvc0_context {
|
struct nvc0_context {
|
||||||
struct nouveau_context base;
|
struct nouveau_context base;
|
||||||
@@ -197,6 +198,7 @@ struct nvc0_context {
|
|||||||
struct pipe_surface *surfaces[2][NVC0_MAX_SURFACE_SLOTS];
|
struct pipe_surface *surfaces[2][NVC0_MAX_SURFACE_SLOTS];
|
||||||
uint16_t surfaces_dirty[2];
|
uint16_t surfaces_dirty[2];
|
||||||
uint16_t surfaces_valid[2];
|
uint16_t surfaces_valid[2];
|
||||||
|
uint32_t vport_int[2];
|
||||||
|
|
||||||
struct util_dynarray global_residents;
|
struct util_dynarray global_residents;
|
||||||
|
|
||||||
|
@@ -179,6 +179,8 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
return 1;
|
return 1;
|
||||||
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
|
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
|
||||||
return PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50;
|
return PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50;
|
||||||
|
case PIPE_CAP_ENDIANNESS:
|
||||||
|
return PIPE_ENDIAN_LITTLE;
|
||||||
default:
|
default:
|
||||||
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
|
NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -369,6 +371,7 @@ nvc0_screen_destroy(struct pipe_screen *pscreen)
|
|||||||
nouveau_object_del(&screen->eng3d);
|
nouveau_object_del(&screen->eng3d);
|
||||||
nouveau_object_del(&screen->eng2d);
|
nouveau_object_del(&screen->eng2d);
|
||||||
nouveau_object_del(&screen->m2mf);
|
nouveau_object_del(&screen->m2mf);
|
||||||
|
nouveau_object_del(&screen->compute);
|
||||||
|
|
||||||
nouveau_screen_fini(&screen->base);
|
nouveau_screen_fini(&screen->base);
|
||||||
|
|
||||||
@@ -510,6 +513,7 @@ nvc0_screen_resize_tls_area(struct nvc0_screen *screen,
|
|||||||
}
|
}
|
||||||
|
|
||||||
size *= (screen->base.device->chipset >= 0xe0) ? 64 : 48; /* max warps */
|
size *= (screen->base.device->chipset >= 0xe0) ? 64 : 48; /* max warps */
|
||||||
|
size = align(size, 0x8000);
|
||||||
size *= screen->mp_count;
|
size *= screen->mp_count;
|
||||||
|
|
||||||
size = align(size, 1 << 17);
|
size = align(size, 1 << 17);
|
||||||
|
@@ -245,9 +245,11 @@ nvc0_validate_viewport(struct nvc0_context *nvc0)
|
|||||||
zmin = vp->translate[2] - fabsf(vp->scale[2]);
|
zmin = vp->translate[2] - fabsf(vp->scale[2]);
|
||||||
zmax = vp->translate[2] + fabsf(vp->scale[2]);
|
zmax = vp->translate[2] + fabsf(vp->scale[2]);
|
||||||
|
|
||||||
|
nvc0->vport_int[0] = (w << 16) | x;
|
||||||
|
nvc0->vport_int[1] = (h << 16) | y;
|
||||||
BEGIN_NVC0(push, NVC0_3D(VIEWPORT_HORIZ(0)), 2);
|
BEGIN_NVC0(push, NVC0_3D(VIEWPORT_HORIZ(0)), 2);
|
||||||
PUSH_DATA (push, (w << 16) | x);
|
PUSH_DATA (push, nvc0->vport_int[0]);
|
||||||
PUSH_DATA (push, (h << 16) | y);
|
PUSH_DATA (push, nvc0->vport_int[1]);
|
||||||
BEGIN_NVC0(push, NVC0_3D(DEPTH_RANGE_NEAR(0)), 2);
|
BEGIN_NVC0(push, NVC0_3D(DEPTH_RANGE_NEAR(0)), 2);
|
||||||
PUSH_DATAf(push, zmin);
|
PUSH_DATAf(push, zmin);
|
||||||
PUSH_DATAf(push, zmax);
|
PUSH_DATAf(push, zmax);
|
||||||
|
@@ -38,7 +38,7 @@ struct nvc0_constbuf {
|
|||||||
const void *data;
|
const void *data;
|
||||||
} u;
|
} u;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
uint16_t offset;
|
uint32_t offset;
|
||||||
boolean user; /* should only be TRUE if u.data is valid and non-NULL */
|
boolean user; /* should only be TRUE if u.data is valid and non-NULL */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -948,8 +948,8 @@ nvc0_blit_3d(struct nvc0_context *nvc0, const struct pipe_blit_info *info)
|
|||||||
/* restore viewport */
|
/* restore viewport */
|
||||||
|
|
||||||
BEGIN_NVC0(push, NVC0_3D(VIEWPORT_HORIZ(0)), 2);
|
BEGIN_NVC0(push, NVC0_3D(VIEWPORT_HORIZ(0)), 2);
|
||||||
PUSH_DATA (push, nvc0->framebuffer.width << 16);
|
PUSH_DATA (push, nvc0->vport_int[0]);
|
||||||
PUSH_DATA (push, nvc0->framebuffer.height << 16);
|
PUSH_DATA (push, nvc0->vport_int[1]);
|
||||||
IMMED_NVC0(push, NVC0_3D(VIEWPORT_TRANSFORM_EN), 1);
|
IMMED_NVC0(push, NVC0_3D(VIEWPORT_TRANSFORM_EN), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1246,6 +1246,13 @@ nvc0_blitctx_create(struct nvc0_context *nvc0)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nvc0_blitctx_destroy(struct nvc0_context *nvc0)
|
||||||
|
{
|
||||||
|
if (nvc0->blit)
|
||||||
|
FREE(nvc0->blit);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nvc0_init_surface_functions(struct nvc0_context *nvc0)
|
nvc0_init_surface_functions(struct nvc0_context *nvc0)
|
||||||
{
|
{
|
||||||
|
@@ -153,7 +153,7 @@ static void nvc0_video_getpath(enum pipe_video_profile profile, char *path)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PIPE_VIDEO_CODEC_VC1: {
|
case PIPE_VIDEO_CODEC_VC1: {
|
||||||
sprintf(path, "/lib/firmware/nouveau/vuc-vc1-%u", profile - PIPE_VIDEO_PROFILE_VC1_SIMPLE);
|
sprintf(path, "/lib/firmware/nouveau/vuc-vc1-0");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PIPE_VIDEO_CODEC_MPEG4_AVC: {
|
case PIPE_VIDEO_CODEC_MPEG4_AVC: {
|
||||||
|
@@ -78,11 +78,11 @@ nve4_screen_compute_setup(struct nvc0_screen *screen,
|
|||||||
*/
|
*/
|
||||||
BEGIN_NVC0(push, NVE4_COMPUTE(MP_TEMP_SIZE_HIGH(0)), 3);
|
BEGIN_NVC0(push, NVE4_COMPUTE(MP_TEMP_SIZE_HIGH(0)), 3);
|
||||||
PUSH_DATAh(push, screen->tls->size / screen->mp_count);
|
PUSH_DATAh(push, screen->tls->size / screen->mp_count);
|
||||||
PUSH_DATA (push, screen->tls->size / screen->mp_count);
|
PUSH_DATA (push, (screen->tls->size / screen->mp_count) & ~0x7fff);
|
||||||
PUSH_DATA (push, 0xff);
|
PUSH_DATA (push, 0xff);
|
||||||
BEGIN_NVC0(push, NVE4_COMPUTE(MP_TEMP_SIZE_HIGH(1)), 3);
|
BEGIN_NVC0(push, NVE4_COMPUTE(MP_TEMP_SIZE_HIGH(1)), 3);
|
||||||
PUSH_DATAh(push, screen->tls->size / screen->mp_count);
|
PUSH_DATAh(push, screen->tls->size / screen->mp_count);
|
||||||
PUSH_DATA (push, screen->tls->size / screen->mp_count);
|
PUSH_DATA (push, (screen->tls->size / screen->mp_count) & ~0x7fff);
|
||||||
PUSH_DATA (push, 0xff);
|
PUSH_DATA (push, 0xff);
|
||||||
|
|
||||||
/* Unified address space ? Who needs that ? Certainly not OpenCL.
|
/* Unified address space ? Who needs that ? Certainly not OpenCL.
|
||||||
|
@@ -18,7 +18,8 @@ AM_CFLAGS = \
|
|||||||
$(RADEON_CFLAGS)
|
$(RADEON_CFLAGS)
|
||||||
|
|
||||||
r300_compiler_tests_LDADD = libr300.la libr300-helper.la \
|
r300_compiler_tests_LDADD = libr300.la libr300-helper.la \
|
||||||
$(top_builddir)/src/gallium/auxiliary/libgallium.la
|
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
|
||||||
|
$(GALLIUM_DRI_LIB_DEPS)
|
||||||
r300_compiler_tests_CPPFLAGS = \
|
r300_compiler_tests_CPPFLAGS = \
|
||||||
-I$(top_srcdir)/src/gallium/drivers/r300/compiler
|
-I$(top_srcdir)/src/gallium/drivers/r300/compiler
|
||||||
r300_compiler_tests_SOURCES = \
|
r300_compiler_tests_SOURCES = \
|
||||||
|
@@ -80,7 +80,7 @@ static void test_runner_rc_optimize(struct test_result * result)
|
|||||||
|
|
||||||
unsigned radeon_compiler_optimize_run_tests()
|
unsigned radeon_compiler_optimize_run_tests()
|
||||||
{
|
{
|
||||||
struct test tests[] = {
|
static struct test tests[] = {
|
||||||
{"rc_optimize() => peephole_mul_omod()", test_runner_rc_optimize},
|
{"rc_optimize() => peephole_mul_omod()", test_runner_rc_optimize},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
@@ -91,8 +91,8 @@ static void tex_1d_swizzle(struct test_result *result)
|
|||||||
|
|
||||||
unsigned radeon_compiler_regalloc_run_tests()
|
unsigned radeon_compiler_regalloc_run_tests()
|
||||||
{
|
{
|
||||||
struct test tests[] = {
|
static struct test tests[] = {
|
||||||
{"rc_pair_regalloc() => TEX 1D Swizzle - r300", tex_1d_swizzle},
|
{"rc_pair_regalloc() => TEX 1D Swizzle - r300", tex_1d_swizzle },
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
return run_tests(tests);
|
return run_tests(tests);
|
||||||
|
@@ -96,7 +96,7 @@ static void test_runner_rc_inst_can_use_presub(struct test_result * result)
|
|||||||
|
|
||||||
unsigned radeon_compiler_util_run_tests()
|
unsigned radeon_compiler_util_run_tests()
|
||||||
{
|
{
|
||||||
struct test tests[] = {
|
static struct test tests[] = {
|
||||||
{"rc_inst_can_use_presub()", test_runner_rc_inst_can_use_presub},
|
{"rc_inst_can_use_presub()", test_runner_rc_inst_can_use_presub},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
@@ -104,7 +104,6 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS:
|
case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS:
|
||||||
case PIPE_CAP_USER_INDEX_BUFFERS:
|
case PIPE_CAP_USER_INDEX_BUFFERS:
|
||||||
case PIPE_CAP_USER_CONSTANT_BUFFERS:
|
case PIPE_CAP_USER_CONSTANT_BUFFERS:
|
||||||
case PIPE_CAP_DEPTH_CLIP_DISABLE: /* XXX implemented, but breaks Regnum Online */
|
|
||||||
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
|
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@@ -138,6 +137,7 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
|
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
|
||||||
case PIPE_CAP_INDEP_BLEND_ENABLE:
|
case PIPE_CAP_INDEP_BLEND_ENABLE:
|
||||||
case PIPE_CAP_INDEP_BLEND_FUNC:
|
case PIPE_CAP_INDEP_BLEND_FUNC:
|
||||||
|
case PIPE_CAP_DEPTH_CLIP_DISABLE:
|
||||||
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
||||||
case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
|
case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
|
||||||
case PIPE_CAP_TGSI_INSTANCEID:
|
case PIPE_CAP_TGSI_INSTANCEID:
|
||||||
@@ -190,6 +190,8 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||||||
/* Render targets. */
|
/* Render targets. */
|
||||||
case PIPE_CAP_MAX_RENDER_TARGETS:
|
case PIPE_CAP_MAX_RENDER_TARGETS:
|
||||||
return 4;
|
return 4;
|
||||||
|
case PIPE_CAP_ENDIANNESS:
|
||||||
|
return PIPE_ENDIAN_LITTLE;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -1333,8 +1333,7 @@ static void* r300_create_rs_state(struct pipe_context* pipe,
|
|||||||
|
|
||||||
if (r300_screen(pipe->screen)->caps.has_tcl) {
|
if (r300_screen(pipe->screen)->caps.has_tcl) {
|
||||||
vap_clip_cntl = (state->clip_plane_enable & 63) |
|
vap_clip_cntl = (state->clip_plane_enable & 63) |
|
||||||
R300_PS_UCP_MODE_CLIP_AS_TRIFAN |
|
R300_PS_UCP_MODE_CLIP_AS_TRIFAN;
|
||||||
(state->depth_clip ? 0 : R300_CLIP_DISABLE);
|
|
||||||
} else {
|
} else {
|
||||||
vap_clip_cntl = R300_CLIP_DISABLE;
|
vap_clip_cntl = R300_CLIP_DISABLE;
|
||||||
}
|
}
|
||||||
|
@@ -236,14 +236,21 @@ void r600_flush_emit(struct r600_context *rctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (rctx->flags & R600_CONTEXT_INV_CONST_CACHE) {
|
if (rctx->flags & R600_CONTEXT_INV_CONST_CACHE) {
|
||||||
cp_coher_cntl |= S_0085F0_SH_ACTION_ENA(1);
|
/* Direct constant addressing uses the shader cache.
|
||||||
|
* Indirect contant addressing uses the vertex cache. */
|
||||||
|
cp_coher_cntl |= S_0085F0_SH_ACTION_ENA(1) |
|
||||||
|
(rctx->has_vertex_cache ? S_0085F0_VC_ACTION_ENA(1)
|
||||||
|
: S_0085F0_TC_ACTION_ENA(1));
|
||||||
}
|
}
|
||||||
if (rctx->flags & R600_CONTEXT_INV_VERTEX_CACHE) {
|
if (rctx->flags & R600_CONTEXT_INV_VERTEX_CACHE) {
|
||||||
cp_coher_cntl |= rctx->has_vertex_cache ? S_0085F0_VC_ACTION_ENA(1)
|
cp_coher_cntl |= rctx->has_vertex_cache ? S_0085F0_VC_ACTION_ENA(1)
|
||||||
: S_0085F0_TC_ACTION_ENA(1);
|
: S_0085F0_TC_ACTION_ENA(1);
|
||||||
}
|
}
|
||||||
if (rctx->flags & R600_CONTEXT_INV_TEX_CACHE) {
|
if (rctx->flags & R600_CONTEXT_INV_TEX_CACHE) {
|
||||||
cp_coher_cntl |= S_0085F0_TC_ACTION_ENA(1);
|
/* Textures use the texture cache.
|
||||||
|
* Texture buffer objects use the vertex cache. */
|
||||||
|
cp_coher_cntl |= S_0085F0_TC_ACTION_ENA(1) |
|
||||||
|
(rctx->has_vertex_cache ? S_0085F0_VC_ACTION_ENA(1) : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't use the DB CP COHER logic on r6xx.
|
/* Don't use the DB CP COHER logic on r6xx.
|
||||||
|
@@ -679,6 +679,8 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||||||
|
|
||||||
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
|
case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
|
||||||
return PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_R600;
|
return PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_R600;
|
||||||
|
case PIPE_CAP_ENDIANNESS:
|
||||||
|
return PIPE_ENDIAN_LITTLE;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -1490,7 +1490,8 @@ unsigned post_scheduler::try_add_instruction(node *n) {
|
|||||||
|
|
||||||
// FIXME workaround for some problems with MULADD in trans slot on r700,
|
// FIXME workaround for some problems with MULADD in trans slot on r700,
|
||||||
// (is it really needed on r600?)
|
// (is it really needed on r600?)
|
||||||
if (a->bc.op == ALU_OP3_MULADD && !ctx.is_egcm()) {
|
if ((a->bc.op == ALU_OP3_MULADD || a->bc.op == ALU_OP3_MULADD_IEEE) &&
|
||||||
|
!ctx.is_egcm()) {
|
||||||
allowed_slots &= 0x0F;
|
allowed_slots &= 0x0F;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -124,7 +124,7 @@ unsigned radeon_llvm_compile(LLVMModuleRef M, struct radeon_llvm_binary *binary,
|
|||||||
r = LLVMTargetMachineEmitToMemoryBuffer(tm, M, LLVMObjectFile, &err,
|
r = LLVMTargetMachineEmitToMemoryBuffer(tm, M, LLVMObjectFile, &err,
|
||||||
&out_buffer);
|
&out_buffer);
|
||||||
if (r) {
|
if (r) {
|
||||||
fprintf(stderr, err);
|
fprintf(stderr, "%s", err);
|
||||||
FREE(err);
|
FREE(err);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@@ -322,6 +322,21 @@ static void r600_compressed_to_blittable(struct pipe_resource *tex,
|
|||||||
rtex->surface.level[0].npix_y = util_format_get_nblocksy(orig->format, orig->npix0_y);
|
rtex->surface.level[0].npix_y = util_format_get_nblocksy(orig->format, orig->npix0_y);
|
||||||
rtex->surface.level[level].npix_x = util_format_get_nblocksx(orig->format, orig->npix_x);
|
rtex->surface.level[level].npix_x = util_format_get_nblocksx(orig->format, orig->npix_x);
|
||||||
rtex->surface.level[level].npix_y = util_format_get_nblocksy(orig->format, orig->npix_y);
|
rtex->surface.level[level].npix_y = util_format_get_nblocksy(orig->format, orig->npix_y);
|
||||||
|
|
||||||
|
/* By dividing the dimensions by 4, we effectively decrement
|
||||||
|
* last_level by 2, therefore the last 2 mipmap levels disappear and
|
||||||
|
* aren't blittable. Note that the last 3 mipmap levels (4x4, 2x2,
|
||||||
|
* 1x1) have equal slice sizes, which is an important assumption
|
||||||
|
* for this to work.
|
||||||
|
*
|
||||||
|
* In order to make the last 2 mipmap levels blittable, we have to
|
||||||
|
* add the slice size of the last mipmap level to the texture
|
||||||
|
* address, so that even though the hw thinks it reads last_level-2,
|
||||||
|
* it will actually read last_level-1, and if we add the slice size*2,
|
||||||
|
* it will read last_level. That's how this workaround works.
|
||||||
|
*/
|
||||||
|
if (level > rtex->resource.b.b.last_level-2)
|
||||||
|
rtex->mipmap_shift = level - (rtex->resource.b.b.last_level-2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void r600_change_format(struct pipe_resource *tex,
|
static void r600_change_format(struct pipe_resource *tex,
|
||||||
@@ -355,6 +370,7 @@ static void r600_reset_blittable_to_orig(struct pipe_resource *tex,
|
|||||||
rtex->surface.level[0].npix_y = orig->npix0_y;
|
rtex->surface.level[0].npix_y = orig->npix0_y;
|
||||||
rtex->surface.level[level].npix_x = orig->npix_x;
|
rtex->surface.level[level].npix_x = orig->npix_x;
|
||||||
rtex->surface.level[level].npix_y = orig->npix_y;
|
rtex->surface.level[level].npix_y = orig->npix_y;
|
||||||
|
rtex->mipmap_shift = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void r600_resource_copy_region(struct pipe_context *ctx,
|
static void r600_resource_copy_region(struct pipe_context *ctx,
|
||||||
|
@@ -53,6 +53,8 @@ struct r600_resource_texture {
|
|||||||
struct r600_resource_texture *flushed_depth_texture;
|
struct r600_resource_texture *flushed_depth_texture;
|
||||||
boolean is_flushing_texture;
|
boolean is_flushing_texture;
|
||||||
struct radeon_surface surface;
|
struct radeon_surface surface;
|
||||||
|
|
||||||
|
unsigned mipmap_shift;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct r600_surface {
|
struct r600_surface {
|
||||||
|
@@ -298,11 +298,15 @@ const char *r600_get_llvm_processor_name(enum radeon_family family)
|
|||||||
case CHIP_PITCAIRN: return "pitcairn";
|
case CHIP_PITCAIRN: return "pitcairn";
|
||||||
case CHIP_VERDE: return "verde";
|
case CHIP_VERDE: return "verde";
|
||||||
case CHIP_OLAND: return "oland";
|
case CHIP_OLAND: return "oland";
|
||||||
|
#if HAVE_LLVM <= 0x0303
|
||||||
|
default: return "SI";
|
||||||
|
#else
|
||||||
case CHIP_HAINAN: return "hainan";
|
case CHIP_HAINAN: return "hainan";
|
||||||
case CHIP_BONAIRE: return "bonaire";
|
case CHIP_BONAIRE: return "bonaire";
|
||||||
case CHIP_KABINI: return "kabini";
|
case CHIP_KABINI: return "kabini";
|
||||||
case CHIP_KAVERI: return "kaveri";
|
case CHIP_KAVERI: return "kaveri";
|
||||||
default: return "";
|
default: return "";
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -440,6 +444,8 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||||||
|
|
||||||
case PIPE_CAP_MAX_TEXEL_OFFSET:
|
case PIPE_CAP_MAX_TEXEL_OFFSET:
|
||||||
return 7;
|
return 7;
|
||||||
|
case PIPE_CAP_ENDIANNESS:
|
||||||
|
return PIPE_ENDIAN_LITTLE;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -198,6 +198,8 @@ static void declare_input_fs(
|
|||||||
struct si_shader *shader = &si_shader_ctx->shader->shader;
|
struct si_shader *shader = &si_shader_ctx->shader->shader;
|
||||||
struct lp_build_context * base =
|
struct lp_build_context * base =
|
||||||
&si_shader_ctx->radeon_bld.soa.bld_base.base;
|
&si_shader_ctx->radeon_bld.soa.bld_base.base;
|
||||||
|
struct lp_build_context *uint =
|
||||||
|
&si_shader_ctx->radeon_bld.soa.bld_base.uint_bld;
|
||||||
struct gallivm_state * gallivm = base->gallivm;
|
struct gallivm_state * gallivm = base->gallivm;
|
||||||
LLVMTypeRef input_type = LLVMFloatTypeInContext(gallivm->context);
|
LLVMTypeRef input_type = LLVMFloatTypeInContext(gallivm->context);
|
||||||
LLVMValueRef main_fn = si_shader_ctx->radeon_bld.main_fn;
|
LLVMValueRef main_fn = si_shader_ctx->radeon_bld.main_fn;
|
||||||
@@ -341,6 +343,22 @@ static void declare_input_fs(
|
|||||||
}
|
}
|
||||||
|
|
||||||
shader->ninterp++;
|
shader->ninterp++;
|
||||||
|
} else if (decl->Semantic.Name == TGSI_SEMANTIC_FOG) {
|
||||||
|
LLVMValueRef args[4];
|
||||||
|
|
||||||
|
args[0] = uint->zero;
|
||||||
|
args[1] = attr_number;
|
||||||
|
args[2] = params;
|
||||||
|
args[3] = interp_param;
|
||||||
|
si_shader_ctx->radeon_bld.inputs[radeon_llvm_reg_index_soa(input_index, 0)] =
|
||||||
|
build_intrinsic(base->gallivm->builder, intr_name,
|
||||||
|
input_type, args, args[3] ? 4 : 3,
|
||||||
|
LLVMReadNoneAttribute | LLVMNoUnwindAttribute);
|
||||||
|
si_shader_ctx->radeon_bld.inputs[radeon_llvm_reg_index_soa(input_index, 1)] =
|
||||||
|
si_shader_ctx->radeon_bld.inputs[radeon_llvm_reg_index_soa(input_index, 2)] =
|
||||||
|
lp_build_const_float(gallivm, 0.0f);
|
||||||
|
si_shader_ctx->radeon_bld.inputs[radeon_llvm_reg_index_soa(input_index, 3)] =
|
||||||
|
lp_build_const_float(gallivm, 1.0f);
|
||||||
} else {
|
} else {
|
||||||
for (chan = 0; chan < TGSI_NUM_CHANNELS; chan++) {
|
for (chan = 0; chan < TGSI_NUM_CHANNELS; chan++) {
|
||||||
LLVMValueRef args[4];
|
LLVMValueRef args[4];
|
||||||
@@ -562,12 +580,11 @@ static void si_alpha_test(struct lp_build_tgsi_context *bld_base,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void si_llvm_emit_clipvertex(struct lp_build_tgsi_context * bld_base,
|
static void si_llvm_emit_clipvertex(struct lp_build_tgsi_context * bld_base,
|
||||||
unsigned index)
|
LLVMValueRef (*pos)[9], unsigned index)
|
||||||
{
|
{
|
||||||
struct si_shader_context *si_shader_ctx = si_shader_context(bld_base);
|
struct si_shader_context *si_shader_ctx = si_shader_context(bld_base);
|
||||||
struct lp_build_context *base = &bld_base->base;
|
struct lp_build_context *base = &bld_base->base;
|
||||||
struct lp_build_context *uint = &si_shader_ctx->radeon_bld.soa.bld_base.uint_bld;
|
struct lp_build_context *uint = &si_shader_ctx->radeon_bld.soa.bld_base.uint_bld;
|
||||||
LLVMValueRef args[9];
|
|
||||||
unsigned reg_index;
|
unsigned reg_index;
|
||||||
unsigned chan;
|
unsigned chan;
|
||||||
unsigned const_chan;
|
unsigned const_chan;
|
||||||
@@ -582,6 +599,8 @@ static void si_llvm_emit_clipvertex(struct lp_build_tgsi_context * bld_base,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (reg_index = 0; reg_index < 2; reg_index ++) {
|
for (reg_index = 0; reg_index < 2; reg_index ++) {
|
||||||
|
LLVMValueRef *args = pos[2 + reg_index];
|
||||||
|
|
||||||
args[5] =
|
args[5] =
|
||||||
args[6] =
|
args[6] =
|
||||||
args[7] =
|
args[7] =
|
||||||
@@ -612,10 +631,6 @@ static void si_llvm_emit_clipvertex(struct lp_build_tgsi_context * bld_base,
|
|||||||
args[3] = lp_build_const_int32(base->gallivm,
|
args[3] = lp_build_const_int32(base->gallivm,
|
||||||
V_008DFC_SQ_EXP_POS + 2 + reg_index);
|
V_008DFC_SQ_EXP_POS + 2 + reg_index);
|
||||||
args[4] = uint->zero;
|
args[4] = uint->zero;
|
||||||
lp_build_intrinsic(base->gallivm->builder,
|
|
||||||
"llvm.SI.export",
|
|
||||||
LLVMVoidTypeInContext(base->gallivm->context),
|
|
||||||
args, 9);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -630,17 +645,18 @@ static void si_llvm_emit_epilogue(struct lp_build_tgsi_context * bld_base)
|
|||||||
struct tgsi_parse_context *parse = &si_shader_ctx->parse;
|
struct tgsi_parse_context *parse = &si_shader_ctx->parse;
|
||||||
LLVMValueRef args[9];
|
LLVMValueRef args[9];
|
||||||
LLVMValueRef last_args[9] = { 0 };
|
LLVMValueRef last_args[9] = { 0 };
|
||||||
|
LLVMValueRef pos_args[4][9] = { { 0 } };
|
||||||
unsigned semantic_name;
|
unsigned semantic_name;
|
||||||
unsigned color_count = 0;
|
unsigned color_count = 0;
|
||||||
unsigned param_count = 0;
|
unsigned param_count = 0;
|
||||||
int depth_index = -1, stencil_index = -1;
|
int depth_index = -1, stencil_index = -1;
|
||||||
|
int i;
|
||||||
|
|
||||||
while (!tgsi_parse_end_of_tokens(parse)) {
|
while (!tgsi_parse_end_of_tokens(parse)) {
|
||||||
struct tgsi_full_declaration *d =
|
struct tgsi_full_declaration *d =
|
||||||
&parse->FullToken.FullDeclaration;
|
&parse->FullToken.FullDeclaration;
|
||||||
unsigned target;
|
unsigned target;
|
||||||
unsigned index;
|
unsigned index;
|
||||||
int i;
|
|
||||||
|
|
||||||
tgsi_parse_token(parse);
|
tgsi_parse_token(parse);
|
||||||
|
|
||||||
@@ -716,7 +732,7 @@ handle_semantic:
|
|||||||
target = V_008DFC_SQ_EXP_POS + 2 + d->Semantic.Index;
|
target = V_008DFC_SQ_EXP_POS + 2 + d->Semantic.Index;
|
||||||
break;
|
break;
|
||||||
case TGSI_SEMANTIC_CLIPVERTEX:
|
case TGSI_SEMANTIC_CLIPVERTEX:
|
||||||
si_llvm_emit_clipvertex(bld_base, index);
|
si_llvm_emit_clipvertex(bld_base, pos_args, index);
|
||||||
shader->clip_dist_write = 0xFF;
|
shader->clip_dist_write = 0xFF;
|
||||||
continue;
|
continue;
|
||||||
case TGSI_SEMANTIC_FOG:
|
case TGSI_SEMANTIC_FOG:
|
||||||
@@ -734,9 +750,13 @@ handle_semantic:
|
|||||||
|
|
||||||
si_llvm_init_export_args(bld_base, d, index, target, args);
|
si_llvm_init_export_args(bld_base, d, index, target, args);
|
||||||
|
|
||||||
if (si_shader_ctx->type == TGSI_PROCESSOR_VERTEX ?
|
if (si_shader_ctx->type == TGSI_PROCESSOR_VERTEX &&
|
||||||
(semantic_name == TGSI_SEMANTIC_POSITION) :
|
target >= V_008DFC_SQ_EXP_POS &&
|
||||||
(semantic_name == TGSI_SEMANTIC_COLOR)) {
|
target <= (V_008DFC_SQ_EXP_POS + 3)) {
|
||||||
|
memcpy(pos_args[target - V_008DFC_SQ_EXP_POS],
|
||||||
|
args, sizeof(args));
|
||||||
|
} else if (si_shader_ctx->type == TGSI_PROCESSOR_FRAGMENT &&
|
||||||
|
semantic_name == TGSI_SEMANTIC_COLOR) {
|
||||||
if (last_args[0]) {
|
if (last_args[0]) {
|
||||||
lp_build_intrinsic(base->gallivm->builder,
|
lp_build_intrinsic(base->gallivm->builder,
|
||||||
"llvm.SI.export",
|
"llvm.SI.export",
|
||||||
@@ -784,7 +804,10 @@ handle_semantic:
|
|||||||
args[7] =
|
args[7] =
|
||||||
args[8] =
|
args[8] =
|
||||||
args[6] = LLVMBuildLoad(base->gallivm->builder, out_ptr, "");
|
args[6] = LLVMBuildLoad(base->gallivm->builder, out_ptr, "");
|
||||||
mask |= 0x2;
|
/* Only setting the stencil component bit (0x2) here
|
||||||
|
* breaks some stencil piglit tests
|
||||||
|
*/
|
||||||
|
mask |= 0x3;
|
||||||
|
|
||||||
if (depth_index < 0)
|
if (depth_index < 0)
|
||||||
args[5] = args[6];
|
args[5] = args[6];
|
||||||
@@ -806,66 +829,87 @@ handle_semantic:
|
|||||||
memcpy(last_args, args, sizeof(args));
|
memcpy(last_args, args, sizeof(args));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!last_args[0]) {
|
if (si_shader_ctx->type == TGSI_PROCESSOR_VERTEX) {
|
||||||
assert(si_shader_ctx->type == TGSI_PROCESSOR_FRAGMENT);
|
unsigned pos_idx = 0;
|
||||||
|
|
||||||
/* Specify which components to enable */
|
for (i = 0; i < 4; i++)
|
||||||
last_args[0] = lp_build_const_int32(base->gallivm, 0x0);
|
if (pos_args[i][0])
|
||||||
|
shader->nr_pos_exports++;
|
||||||
|
|
||||||
/* Specify the target we are exporting */
|
for (i = 0; i < 4; i++) {
|
||||||
last_args[3] = lp_build_const_int32(base->gallivm, V_008DFC_SQ_EXP_MRT);
|
if (!pos_args[i][0])
|
||||||
|
continue;
|
||||||
|
|
||||||
/* Set COMPR flag to zero to export data as 32-bit */
|
|
||||||
last_args[4] = uint->zero;
|
|
||||||
|
|
||||||
/* dummy bits */
|
|
||||||
last_args[5]= uint->zero;
|
|
||||||
last_args[6]= uint->zero;
|
|
||||||
last_args[7]= uint->zero;
|
|
||||||
last_args[8]= uint->zero;
|
|
||||||
|
|
||||||
si_shader_ctx->shader->spi_shader_col_format |=
|
|
||||||
V_028714_SPI_SHADER_32_ABGR;
|
|
||||||
si_shader_ctx->shader->cb_shader_mask |= S_02823C_OUTPUT0_ENABLE(0xf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Specify whether the EXEC mask represents the valid mask */
|
|
||||||
last_args[1] = lp_build_const_int32(base->gallivm,
|
|
||||||
si_shader_ctx->type == TGSI_PROCESSOR_FRAGMENT);
|
|
||||||
|
|
||||||
if (shader->fs_write_all && shader->nr_cbufs > 1) {
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* Specify that this is not yet the last export */
|
|
||||||
last_args[2] = lp_build_const_int32(base->gallivm, 0);
|
|
||||||
|
|
||||||
for (i = 1; i < shader->nr_cbufs; i++) {
|
|
||||||
/* Specify the target we are exporting */
|
/* Specify the target we are exporting */
|
||||||
last_args[3] = lp_build_const_int32(base->gallivm,
|
pos_args[i][3] = lp_build_const_int32(base->gallivm, V_008DFC_SQ_EXP_POS + pos_idx++);
|
||||||
V_008DFC_SQ_EXP_MRT + i);
|
|
||||||
|
if (pos_idx == shader->nr_pos_exports)
|
||||||
|
/* Specify that this is the last export */
|
||||||
|
pos_args[i][2] = uint->one;
|
||||||
|
|
||||||
lp_build_intrinsic(base->gallivm->builder,
|
lp_build_intrinsic(base->gallivm->builder,
|
||||||
"llvm.SI.export",
|
"llvm.SI.export",
|
||||||
LLVMVoidTypeInContext(base->gallivm->context),
|
LLVMVoidTypeInContext(base->gallivm->context),
|
||||||
last_args, 9);
|
pos_args[i], 9);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!last_args[0]) {
|
||||||
|
/* Specify which components to enable */
|
||||||
|
last_args[0] = lp_build_const_int32(base->gallivm, 0x0);
|
||||||
|
|
||||||
|
/* Specify the target we are exporting */
|
||||||
|
last_args[3] = lp_build_const_int32(base->gallivm, V_008DFC_SQ_EXP_MRT);
|
||||||
|
|
||||||
|
/* Set COMPR flag to zero to export data as 32-bit */
|
||||||
|
last_args[4] = uint->zero;
|
||||||
|
|
||||||
|
/* dummy bits */
|
||||||
|
last_args[5]= uint->zero;
|
||||||
|
last_args[6]= uint->zero;
|
||||||
|
last_args[7]= uint->zero;
|
||||||
|
last_args[8]= uint->zero;
|
||||||
|
|
||||||
si_shader_ctx->shader->spi_shader_col_format |=
|
si_shader_ctx->shader->spi_shader_col_format |=
|
||||||
si_shader_ctx->shader->spi_shader_col_format << 4;
|
V_028714_SPI_SHADER_32_ABGR;
|
||||||
si_shader_ctx->shader->cb_shader_mask |=
|
si_shader_ctx->shader->cb_shader_mask |= S_02823C_OUTPUT0_ENABLE(0xf);
|
||||||
si_shader_ctx->shader->cb_shader_mask << 4;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
last_args[3] = lp_build_const_int32(base->gallivm, V_008DFC_SQ_EXP_MRT);
|
/* Specify whether the EXEC mask represents the valid mask */
|
||||||
|
last_args[1] = uint->one;
|
||||||
|
|
||||||
|
if (shader->fs_write_all && shader->nr_cbufs > 1) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Specify that this is not yet the last export */
|
||||||
|
last_args[2] = lp_build_const_int32(base->gallivm, 0);
|
||||||
|
|
||||||
|
for (i = 1; i < shader->nr_cbufs; i++) {
|
||||||
|
/* Specify the target we are exporting */
|
||||||
|
last_args[3] = lp_build_const_int32(base->gallivm,
|
||||||
|
V_008DFC_SQ_EXP_MRT + i);
|
||||||
|
|
||||||
|
lp_build_intrinsic(base->gallivm->builder,
|
||||||
|
"llvm.SI.export",
|
||||||
|
LLVMVoidTypeInContext(base->gallivm->context),
|
||||||
|
last_args, 9);
|
||||||
|
|
||||||
|
si_shader_ctx->shader->spi_shader_col_format |=
|
||||||
|
si_shader_ctx->shader->spi_shader_col_format << 4;
|
||||||
|
si_shader_ctx->shader->cb_shader_mask |=
|
||||||
|
si_shader_ctx->shader->cb_shader_mask << 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
last_args[3] = lp_build_const_int32(base->gallivm, V_008DFC_SQ_EXP_MRT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Specify that this is the last export */
|
||||||
|
last_args[2] = lp_build_const_int32(base->gallivm, 1);
|
||||||
|
|
||||||
|
lp_build_intrinsic(base->gallivm->builder,
|
||||||
|
"llvm.SI.export",
|
||||||
|
LLVMVoidTypeInContext(base->gallivm->context),
|
||||||
|
last_args, 9);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Specify that this is the last export */
|
|
||||||
last_args[2] = lp_build_const_int32(base->gallivm, 1);
|
|
||||||
|
|
||||||
lp_build_intrinsic(base->gallivm->builder,
|
|
||||||
"llvm.SI.export",
|
|
||||||
LLVMVoidTypeInContext(base->gallivm->context),
|
|
||||||
last_args, 9);
|
|
||||||
|
|
||||||
/* XXX: Look up what this function does */
|
/* XXX: Look up what this function does */
|
||||||
/* ctx->shader->output[i].spi_sid = r600_spi_sid(&ctx->shader->output[i]);*/
|
/* ctx->shader->output[i].spi_sid = r600_spi_sid(&ctx->shader->output[i]);*/
|
||||||
}
|
}
|
||||||
|
@@ -113,6 +113,7 @@ struct si_shader {
|
|||||||
bool vs_out_misc_write;
|
bool vs_out_misc_write;
|
||||||
bool vs_out_point_size;
|
bool vs_out_point_size;
|
||||||
unsigned nr_cbufs;
|
unsigned nr_cbufs;
|
||||||
|
unsigned nr_pos_exports;
|
||||||
unsigned clip_dist_write;
|
unsigned clip_dist_write;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -2394,6 +2394,7 @@ static struct pipe_sampler_view *si_create_sampler_view(struct pipe_context *ctx
|
|||||||
|
|
||||||
va = r600_resource_va(ctx->screen, texture);
|
va = r600_resource_va(ctx->screen, texture);
|
||||||
va += surflevel[0].offset;
|
va += surflevel[0].offset;
|
||||||
|
va += tmp->mipmap_shift * surflevel[texture->last_level].slice_size;
|
||||||
view->state[0] = va >> 8;
|
view->state[0] = va >> 8;
|
||||||
view->state[1] = (S_008F14_BASE_ADDRESS_HI(va >> 40) |
|
view->state[1] = (S_008F14_BASE_ADDRESS_HI(va >> 40) |
|
||||||
S_008F14_DATA_FORMAT(format) |
|
S_008F14_DATA_FORMAT(format) |
|
||||||
@@ -2404,8 +2405,8 @@ static struct pipe_sampler_view *si_create_sampler_view(struct pipe_context *ctx
|
|||||||
S_008F1C_DST_SEL_Y(si_map_swizzle(swizzle[1])) |
|
S_008F1C_DST_SEL_Y(si_map_swizzle(swizzle[1])) |
|
||||||
S_008F1C_DST_SEL_Z(si_map_swizzle(swizzle[2])) |
|
S_008F1C_DST_SEL_Z(si_map_swizzle(swizzle[2])) |
|
||||||
S_008F1C_DST_SEL_W(si_map_swizzle(swizzle[3])) |
|
S_008F1C_DST_SEL_W(si_map_swizzle(swizzle[3])) |
|
||||||
S_008F1C_BASE_LEVEL(state->u.tex.first_level) |
|
S_008F1C_BASE_LEVEL(state->u.tex.first_level - tmp->mipmap_shift) |
|
||||||
S_008F1C_LAST_LEVEL(state->u.tex.last_level) |
|
S_008F1C_LAST_LEVEL(state->u.tex.last_level - tmp->mipmap_shift) |
|
||||||
S_008F1C_TILING_INDEX(si_tile_mode_index(tmp, 0, false)) |
|
S_008F1C_TILING_INDEX(si_tile_mode_index(tmp, 0, false)) |
|
||||||
S_008F1C_POW2_PAD(texture->last_level > 0) |
|
S_008F1C_POW2_PAD(texture->last_level > 0) |
|
||||||
S_008F1C_TYPE(si_tex_dim(texture->target)));
|
S_008F1C_TYPE(si_tex_dim(texture->target)));
|
||||||
|
@@ -74,13 +74,13 @@ static void si_pipe_shader_vs(struct pipe_context *ctx, struct si_pipe_shader *s
|
|||||||
|
|
||||||
si_pm4_set_reg(pm4, R_02870C_SPI_SHADER_POS_FORMAT,
|
si_pm4_set_reg(pm4, R_02870C_SPI_SHADER_POS_FORMAT,
|
||||||
S_02870C_POS0_EXPORT_FORMAT(V_02870C_SPI_SHADER_4COMP) |
|
S_02870C_POS0_EXPORT_FORMAT(V_02870C_SPI_SHADER_4COMP) |
|
||||||
S_02870C_POS1_EXPORT_FORMAT(shader->shader.vs_out_misc_write ?
|
S_02870C_POS1_EXPORT_FORMAT(shader->shader.nr_pos_exports > 1 ?
|
||||||
V_02870C_SPI_SHADER_4COMP :
|
V_02870C_SPI_SHADER_4COMP :
|
||||||
V_02870C_SPI_SHADER_NONE) |
|
V_02870C_SPI_SHADER_NONE) |
|
||||||
S_02870C_POS2_EXPORT_FORMAT((shader->shader.clip_dist_write & 0x0F) ?
|
S_02870C_POS2_EXPORT_FORMAT(shader->shader.nr_pos_exports > 2 ?
|
||||||
V_02870C_SPI_SHADER_4COMP :
|
V_02870C_SPI_SHADER_4COMP :
|
||||||
V_02870C_SPI_SHADER_NONE) |
|
V_02870C_SPI_SHADER_NONE) |
|
||||||
S_02870C_POS3_EXPORT_FORMAT((shader->shader.clip_dist_write & 0xF0) ?
|
S_02870C_POS3_EXPORT_FORMAT(shader->shader.nr_pos_exports > 3 ?
|
||||||
V_02870C_SPI_SHADER_4COMP :
|
V_02870C_SPI_SHADER_4COMP :
|
||||||
V_02870C_SPI_SHADER_NONE));
|
V_02870C_SPI_SHADER_NONE));
|
||||||
|
|
||||||
@@ -91,10 +91,10 @@ static void si_pipe_shader_vs(struct pipe_context *ctx, struct si_pipe_shader *s
|
|||||||
|
|
||||||
num_user_sgprs = SI_VS_NUM_USER_SGPR;
|
num_user_sgprs = SI_VS_NUM_USER_SGPR;
|
||||||
num_sgprs = shader->num_sgprs;
|
num_sgprs = shader->num_sgprs;
|
||||||
if (num_user_sgprs > num_sgprs)
|
if (num_user_sgprs > num_sgprs) {
|
||||||
num_sgprs = num_user_sgprs;
|
/* Last 2 reserved SGPRs are used for VCC */
|
||||||
/* Last 2 reserved SGPRs are used for VCC */
|
num_sgprs = num_user_sgprs + 2;
|
||||||
num_sgprs += 2;
|
}
|
||||||
assert(num_sgprs <= 104);
|
assert(num_sgprs <= 104);
|
||||||
|
|
||||||
vgpr_comp_cnt = shader->shader.uses_instanceid ? 3 : 0;
|
vgpr_comp_cnt = shader->shader.uses_instanceid ? 3 : 0;
|
||||||
@@ -190,7 +190,8 @@ static void si_pipe_shader_ps(struct pipe_context *ctx, struct si_pipe_shader *s
|
|||||||
exports_ps = 2;
|
exports_ps = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
spi_ps_in_control = S_0286D8_NUM_INTERP(shader->shader.ninterp);
|
spi_ps_in_control = S_0286D8_NUM_INTERP(shader->shader.ninterp) |
|
||||||
|
S_0286D8_BC_OPTIMIZE_DISABLE(1);
|
||||||
|
|
||||||
spi_baryc_cntl = 0;
|
spi_baryc_cntl = 0;
|
||||||
if (have_perspective)
|
if (have_perspective)
|
||||||
@@ -235,10 +236,10 @@ static void si_pipe_shader_ps(struct pipe_context *ctx, struct si_pipe_shader *s
|
|||||||
|
|
||||||
num_user_sgprs = SI_PS_NUM_USER_SGPR;
|
num_user_sgprs = SI_PS_NUM_USER_SGPR;
|
||||||
num_sgprs = shader->num_sgprs;
|
num_sgprs = shader->num_sgprs;
|
||||||
if (num_user_sgprs > num_sgprs)
|
if (num_user_sgprs > num_sgprs) {
|
||||||
num_sgprs = num_user_sgprs;
|
/* Last 2 reserved SGPRs are used for VCC */
|
||||||
/* Last 2 reserved SGPRs are used for VCC */
|
num_sgprs = num_user_sgprs + 2;
|
||||||
num_sgprs += 2;
|
}
|
||||||
assert(num_sgprs <= 104);
|
assert(num_sgprs <= 104);
|
||||||
|
|
||||||
si_pm4_set_reg(pm4, R_00B028_SPI_SHADER_PGM_RSRC1_PS,
|
si_pm4_set_reg(pm4, R_00B028_SPI_SHADER_PGM_RSRC1_PS,
|
||||||
|
@@ -183,6 +183,8 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||||||
return 0;
|
return 0;
|
||||||
case PIPE_CAP_MAX_VIEWPORTS:
|
case PIPE_CAP_MAX_VIEWPORTS:
|
||||||
return 1;
|
return 1;
|
||||||
|
case PIPE_CAP_ENDIANNESS:
|
||||||
|
return PIPE_ENDIAN_NATIVE;
|
||||||
}
|
}
|
||||||
/* should only get here on unhandled cases */
|
/* should only get here on unhandled cases */
|
||||||
debug_printf("Unexpected PIPE_CAP %d query\n", param);
|
debug_printf("Unexpected PIPE_CAP %d query\n", param);
|
||||||
|
@@ -502,7 +502,7 @@ svga_buffer_upload_piecewise(struct svga_screen *ss,
|
|||||||
PIPE_TRANSFER_DISCARD_RANGE);
|
PIPE_TRANSFER_DISCARD_RANGE);
|
||||||
assert(map);
|
assert(map);
|
||||||
if (map) {
|
if (map) {
|
||||||
memcpy(map, sbuf->swbuf, size);
|
memcpy(map, (const char *) sbuf->swbuf + offset, size);
|
||||||
sws->buffer_unmap(sws, hwbuf);
|
sws->buffer_unmap(sws, hwbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -270,6 +270,8 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||||||
return 1;
|
return 1;
|
||||||
case PIPE_CAP_MAX_VIEWPORTS:
|
case PIPE_CAP_MAX_VIEWPORTS:
|
||||||
return 1;
|
return 1;
|
||||||
|
case PIPE_CAP_ENDIANNESS:
|
||||||
|
return PIPE_ENDIAN_LITTLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_printf("Unexpected PIPE_CAP_ query %u\n", param);
|
debug_printf("Unexpected PIPE_CAP_ query %u\n", param);
|
||||||
|
@@ -507,12 +507,22 @@ enum pipe_cap {
|
|||||||
PIPE_CAP_QUERY_PIPELINE_STATISTICS = 81,
|
PIPE_CAP_QUERY_PIPELINE_STATISTICS = 81,
|
||||||
PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK = 82,
|
PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK = 82,
|
||||||
PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE = 83,
|
PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE = 83,
|
||||||
PIPE_CAP_MAX_VIEWPORTS = 84
|
PIPE_CAP_MAX_VIEWPORTS = 84,
|
||||||
|
PIPE_CAP_ENDIANNESS = 85
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0)
|
#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0)
|
||||||
#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_R600 (1 << 1)
|
#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_R600 (1 << 1)
|
||||||
|
|
||||||
|
enum pipe_endian {
|
||||||
|
PIPE_ENDIAN_LITTLE = 0,
|
||||||
|
PIPE_ENDIAN_BIG = 1,
|
||||||
|
#if defined(PIPE_ARCH_LITTLE_ENDIAN)
|
||||||
|
PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_LITTLE
|
||||||
|
#elif defined(PIPE_ARCH_BIG_ENDIAN)
|
||||||
|
PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_BIG
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation limits which are queried through
|
* Implementation limits which are queried through
|
||||||
|
@@ -239,8 +239,12 @@ struct st_visual
|
|||||||
*/
|
*/
|
||||||
struct st_config_options
|
struct st_config_options
|
||||||
{
|
{
|
||||||
boolean force_glsl_extensions_warn;
|
boolean disable_blend_func_extended;
|
||||||
boolean disable_glsl_line_continuations;
|
boolean disable_glsl_line_continuations;
|
||||||
|
boolean disable_shader_bit_encoding;
|
||||||
|
boolean force_glsl_extensions_warn;
|
||||||
|
unsigned force_glsl_version;
|
||||||
|
boolean force_s3tc_enable;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -338,7 +342,8 @@ struct st_framebuffer_iface
|
|||||||
* the last call might be destroyed. This behavior might change in the
|
* the last call might be destroyed. This behavior might change in the
|
||||||
* future.
|
* future.
|
||||||
*/
|
*/
|
||||||
boolean (*validate)(struct st_framebuffer_iface *stfbi,
|
boolean (*validate)(struct st_context_iface *stctx,
|
||||||
|
struct st_framebuffer_iface *stfbi,
|
||||||
const enum st_attachment_type *statts,
|
const enum st_attachment_type *statts,
|
||||||
unsigned count,
|
unsigned count,
|
||||||
struct pipe_resource **out);
|
struct pipe_resource **out);
|
||||||
|
@@ -25,7 +25,7 @@ if HAVE_X11_DRIVER
|
|||||||
SUBDIRS += glx
|
SUBDIRS += glx
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if HAVE_OSMESA
|
if HAVE_GALLIUM_OSMESA
|
||||||
SUBDIRS += osmesa
|
SUBDIRS += osmesa
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@@ -192,7 +192,8 @@ clGetDeviceInfo(cl_device_id dev, cl_device_info param,
|
|||||||
return scalar_property<size_t>(buf, size, size_ret, 0);
|
return scalar_property<size_t>(buf, size, size_ret, 0);
|
||||||
|
|
||||||
case CL_DEVICE_ENDIAN_LITTLE:
|
case CL_DEVICE_ENDIAN_LITTLE:
|
||||||
return scalar_property<cl_bool>(buf, size, size_ret, CL_TRUE);
|
return scalar_property<cl_bool>(buf, size, size_ret,
|
||||||
|
dev->endianness() == PIPE_ENDIAN_LITTLE);
|
||||||
|
|
||||||
case CL_DEVICE_AVAILABLE:
|
case CL_DEVICE_AVAILABLE:
|
||||||
case CL_DEVICE_COMPILER_AVAILABLE:
|
case CL_DEVICE_COMPILER_AVAILABLE:
|
||||||
|
@@ -192,3 +192,8 @@ _cl_device_id::ir_target() const {
|
|||||||
PIPE_COMPUTE_CAP_IR_TARGET);
|
PIPE_COMPUTE_CAP_IR_TARGET);
|
||||||
return { target.data() };
|
return { target.data() };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum pipe_endian
|
||||||
|
_cl_device_id::endianness() const {
|
||||||
|
return (enum pipe_endian)pipe->get_param(pipe, PIPE_CAP_ENDIANNESS);
|
||||||
|
}
|
||||||
|
@@ -66,6 +66,7 @@ public:
|
|||||||
std::string vendor_name() const;
|
std::string vendor_name() const;
|
||||||
enum pipe_shader_ir ir_format() const;
|
enum pipe_shader_ir ir_format() const;
|
||||||
std::string ir_target() const;
|
std::string ir_target() const;
|
||||||
|
enum pipe_endian endianness() const;
|
||||||
|
|
||||||
friend struct _cl_command_queue;
|
friend struct _cl_command_queue;
|
||||||
friend class clover::root_resource;
|
friend class clover::root_resource;
|
||||||
|
@@ -22,31 +22,32 @@
|
|||||||
|
|
||||||
#include "core/kernel.hpp"
|
#include "core/kernel.hpp"
|
||||||
#include "core/resource.hpp"
|
#include "core/resource.hpp"
|
||||||
|
#include "util/u_math.h"
|
||||||
#include "pipe/p_context.h"
|
#include "pipe/p_context.h"
|
||||||
|
|
||||||
using namespace clover;
|
using namespace clover;
|
||||||
|
|
||||||
_cl_kernel::_cl_kernel(clover::program &prog,
|
_cl_kernel::_cl_kernel(clover::program &prog,
|
||||||
const std::string &name,
|
const std::string &name,
|
||||||
const std::vector<clover::module::argument> &args) :
|
const std::vector<clover::module::argument> &margs) :
|
||||||
prog(prog), __name(name), exec(*this) {
|
prog(prog), __name(name), exec(*this) {
|
||||||
for (auto arg : args) {
|
for (auto marg : margs) {
|
||||||
if (arg.type == module::argument::scalar)
|
if (marg.type == module::argument::scalar)
|
||||||
this->args.emplace_back(new scalar_argument(arg.size));
|
args.emplace_back(new scalar_argument(marg.size));
|
||||||
else if (arg.type == module::argument::global)
|
else if (marg.type == module::argument::global)
|
||||||
this->args.emplace_back(new global_argument(arg.size));
|
args.emplace_back(new global_argument);
|
||||||
else if (arg.type == module::argument::local)
|
else if (marg.type == module::argument::local)
|
||||||
this->args.emplace_back(new local_argument());
|
args.emplace_back(new local_argument);
|
||||||
else if (arg.type == module::argument::constant)
|
else if (marg.type == module::argument::constant)
|
||||||
this->args.emplace_back(new constant_argument());
|
args.emplace_back(new constant_argument);
|
||||||
else if (arg.type == module::argument::image2d_rd ||
|
else if (marg.type == module::argument::image2d_rd ||
|
||||||
arg.type == module::argument::image3d_rd)
|
marg.type == module::argument::image3d_rd)
|
||||||
this->args.emplace_back(new image_rd_argument());
|
args.emplace_back(new image_rd_argument);
|
||||||
else if (arg.type == module::argument::image2d_wr ||
|
else if (marg.type == module::argument::image2d_wr ||
|
||||||
arg.type == module::argument::image3d_wr)
|
marg.type == module::argument::image3d_wr)
|
||||||
this->args.emplace_back(new image_wr_argument());
|
args.emplace_back(new image_wr_argument);
|
||||||
else if (arg.type == module::argument::sampler)
|
else if (marg.type == module::argument::sampler)
|
||||||
this->args.emplace_back(new sampler_argument());
|
args.emplace_back(new sampler_argument);
|
||||||
else
|
else
|
||||||
throw error(CL_INVALID_KERNEL_DEFINITION);
|
throw error(CL_INVALID_KERNEL_DEFINITION);
|
||||||
}
|
}
|
||||||
@@ -129,7 +130,6 @@ _cl_kernel::module(const clover::command_queue &q) const {
|
|||||||
return prog.binaries().find(&q.dev)->second;
|
return prog.binaries().find(&q.dev)->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
_cl_kernel::exec_context::exec_context(clover::kernel &kern) :
|
_cl_kernel::exec_context::exec_context(clover::kernel &kern) :
|
||||||
kern(kern), q(NULL), mem_local(0), st(NULL) {
|
kern(kern), q(NULL), mem_local(0), st(NULL) {
|
||||||
}
|
}
|
||||||
@@ -143,8 +143,12 @@ void *
|
|||||||
_cl_kernel::exec_context::bind(clover::command_queue *__q) {
|
_cl_kernel::exec_context::bind(clover::command_queue *__q) {
|
||||||
std::swap(q, __q);
|
std::swap(q, __q);
|
||||||
|
|
||||||
for (auto &arg : kern.args)
|
// Bind kernel arguments.
|
||||||
arg->bind(*this);
|
auto margs = kern.module(*q).sym(kern.name()).args;
|
||||||
|
for_each([=](std::unique_ptr<kernel::argument> &karg,
|
||||||
|
const module::argument &marg) {
|
||||||
|
karg->bind(*this, marg);
|
||||||
|
}, kern.args.begin(), kern.args.end(), margs.begin());
|
||||||
|
|
||||||
// Create a new compute state if anything changed.
|
// Create a new compute state if anything changed.
|
||||||
if (!st || q != __q ||
|
if (!st || q != __q ||
|
||||||
@@ -176,8 +180,83 @@ _cl_kernel::exec_context::unbind() {
|
|||||||
mem_local = 0;
|
mem_local = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
_cl_kernel::argument::argument(size_t size) :
|
namespace {
|
||||||
__size(size), __set(false) {
|
template<typename T>
|
||||||
|
std::vector<uint8_t>
|
||||||
|
bytes(const T& x) {
|
||||||
|
return { (uint8_t *)&x, (uint8_t *)&x + sizeof(x) };
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Transform buffer \a v from the native byte order into the byte
|
||||||
|
/// order specified by \a e.
|
||||||
|
///
|
||||||
|
template<typename T>
|
||||||
|
void
|
||||||
|
byteswap(T &v, pipe_endian e) {
|
||||||
|
if (PIPE_ENDIAN_NATIVE != e)
|
||||||
|
std::reverse(v.begin(), v.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Pad buffer \a v to the next multiple of \a n.
|
||||||
|
///
|
||||||
|
template<typename T>
|
||||||
|
void
|
||||||
|
align(T &v, size_t n) {
|
||||||
|
v.resize(util_align_npot(v.size(), n));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
msb(const std::vector<uint8_t> &s) {
|
||||||
|
if (PIPE_ENDIAN_NATIVE == PIPE_ENDIAN_LITTLE)
|
||||||
|
return s.back() & 0x80;
|
||||||
|
else
|
||||||
|
return s.front() & 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Resize buffer \a v to size \a n using sign or zero extension
|
||||||
|
/// according to \a ext.
|
||||||
|
///
|
||||||
|
template<typename T>
|
||||||
|
void
|
||||||
|
extend(T &v, enum clover::module::argument::ext_type ext, size_t n) {
|
||||||
|
const size_t m = std::min(v.size(), n);
|
||||||
|
const bool sign_ext = (ext == module::argument::sign_ext);
|
||||||
|
const uint8_t fill = (sign_ext && msb(v) ? ~0 : 0);
|
||||||
|
T w(n, fill);
|
||||||
|
|
||||||
|
if (PIPE_ENDIAN_NATIVE == PIPE_ENDIAN_LITTLE)
|
||||||
|
std::copy_n(v.begin(), m, w.begin());
|
||||||
|
else
|
||||||
|
std::copy_n(v.end() - m, m, w.end() - m);
|
||||||
|
|
||||||
|
std::swap(v, w);
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Append buffer \a w to \a v.
|
||||||
|
///
|
||||||
|
template<typename T>
|
||||||
|
void
|
||||||
|
insert(T &v, const T &w) {
|
||||||
|
v.insert(v.end(), w.begin(), w.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Append \a n elements to the end of buffer \a v.
|
||||||
|
///
|
||||||
|
template<typename T>
|
||||||
|
size_t
|
||||||
|
allocate(T &v, size_t n) {
|
||||||
|
size_t pos = v.size();
|
||||||
|
v.resize(pos + n);
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_cl_kernel::argument::argument() : __set(false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@@ -190,13 +269,12 @@ _cl_kernel::argument::storage() const {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
_cl_kernel::scalar_argument::scalar_argument(size_t size) :
|
_cl_kernel::scalar_argument::scalar_argument(size_t size) : size(size) {
|
||||||
argument(size) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::scalar_argument::set(size_t size, const void *value) {
|
_cl_kernel::scalar_argument::set(size_t size, const void *value) {
|
||||||
if (size != __size)
|
if (size != this->size)
|
||||||
throw error(CL_INVALID_ARG_SIZE);
|
throw error(CL_INVALID_ARG_SIZE);
|
||||||
|
|
||||||
v = { (uint8_t *)value, (uint8_t *)value + size };
|
v = { (uint8_t *)value, (uint8_t *)value + size };
|
||||||
@@ -204,18 +282,20 @@ _cl_kernel::scalar_argument::set(size_t size, const void *value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::scalar_argument::bind(exec_context &ctx) {
|
_cl_kernel::scalar_argument::bind(exec_context &ctx,
|
||||||
ctx.input.insert(ctx.input.end(), v.begin(), v.end());
|
const clover::module::argument &marg) {
|
||||||
|
auto w = v;
|
||||||
|
|
||||||
|
extend(w, marg.ext_type, marg.target_size);
|
||||||
|
byteswap(w, ctx.q->dev.endianness());
|
||||||
|
align(ctx.input, marg.target_align);
|
||||||
|
insert(ctx.input, w);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::scalar_argument::unbind(exec_context &ctx) {
|
_cl_kernel::scalar_argument::unbind(exec_context &ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_cl_kernel::global_argument::global_argument(size_t size) :
|
|
||||||
argument(size) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::global_argument::set(size_t size, const void *value) {
|
_cl_kernel::global_argument::set(size_t size, const void *value) {
|
||||||
if (size != sizeof(cl_mem))
|
if (size != sizeof(cl_mem))
|
||||||
@@ -229,27 +309,17 @@ _cl_kernel::global_argument::set(size_t size, const void *value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::global_argument::bind(exec_context &ctx) {
|
_cl_kernel::global_argument::bind(exec_context &ctx,
|
||||||
size_t offset = ctx.input.size();
|
const clover::module::argument &marg) {
|
||||||
size_t idx = ctx.g_buffers.size();
|
align(ctx.input, marg.target_align);
|
||||||
|
ctx.g_handles.push_back(allocate(ctx.input, marg.target_size));
|
||||||
ctx.input.resize(offset + __size);
|
ctx.g_buffers.push_back(obj->resource(ctx.q).pipe);
|
||||||
|
|
||||||
ctx.g_buffers.resize(idx + 1);
|
|
||||||
ctx.g_buffers[idx] = obj->resource(ctx.q).pipe;
|
|
||||||
|
|
||||||
ctx.g_handles.resize(idx + 1);
|
|
||||||
ctx.g_handles[idx] = offset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::global_argument::unbind(exec_context &ctx) {
|
_cl_kernel::global_argument::unbind(exec_context &ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_cl_kernel::local_argument::local_argument() :
|
|
||||||
argument(sizeof(uint32_t)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
_cl_kernel::local_argument::storage() const {
|
_cl_kernel::local_argument::storage() const {
|
||||||
return __storage;
|
return __storage;
|
||||||
@@ -265,12 +335,14 @@ _cl_kernel::local_argument::set(size_t size, const void *value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::local_argument::bind(exec_context &ctx) {
|
_cl_kernel::local_argument::bind(exec_context &ctx,
|
||||||
size_t offset = ctx.input.size();
|
const clover::module::argument &marg) {
|
||||||
size_t ptr = ctx.mem_local;
|
auto v = bytes(ctx.mem_local);
|
||||||
|
|
||||||
ctx.input.resize(offset + sizeof(uint32_t));
|
extend(v, module::argument::zero_ext, marg.target_size);
|
||||||
*(uint32_t *)&ctx.input[offset] = ptr;
|
byteswap(v, ctx.q->dev.endianness());
|
||||||
|
align(ctx.input, marg.target_align);
|
||||||
|
insert(ctx.input, v);
|
||||||
|
|
||||||
ctx.mem_local += __storage;
|
ctx.mem_local += __storage;
|
||||||
}
|
}
|
||||||
@@ -279,10 +351,6 @@ void
|
|||||||
_cl_kernel::local_argument::unbind(exec_context &ctx) {
|
_cl_kernel::local_argument::unbind(exec_context &ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_cl_kernel::constant_argument::constant_argument() :
|
|
||||||
argument(sizeof(uint32_t)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::constant_argument::set(size_t size, const void *value) {
|
_cl_kernel::constant_argument::set(size_t size, const void *value) {
|
||||||
if (size != sizeof(cl_mem))
|
if (size != sizeof(cl_mem))
|
||||||
@@ -296,15 +364,17 @@ _cl_kernel::constant_argument::set(size_t size, const void *value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::constant_argument::bind(exec_context &ctx) {
|
_cl_kernel::constant_argument::bind(exec_context &ctx,
|
||||||
size_t offset = ctx.input.size();
|
const clover::module::argument &marg) {
|
||||||
size_t idx = ctx.resources.size();
|
auto v = bytes(ctx.resources.size() << 24);
|
||||||
|
|
||||||
ctx.input.resize(offset + sizeof(uint32_t));
|
extend(v, module::argument::zero_ext, marg.target_size);
|
||||||
*(uint32_t *)&ctx.input[offset] = idx << 24;
|
byteswap(v, ctx.q->dev.endianness());
|
||||||
|
align(ctx.input, marg.target_align);
|
||||||
|
insert(ctx.input, v);
|
||||||
|
|
||||||
ctx.resources.resize(idx + 1);
|
st = obj->resource(ctx.q).bind_surface(*ctx.q, false);
|
||||||
ctx.resources[idx] = st = obj->resource(ctx.q).bind_surface(*ctx.q, false);
|
ctx.resources.push_back(st);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -312,10 +382,6 @@ _cl_kernel::constant_argument::unbind(exec_context &ctx) {
|
|||||||
obj->resource(ctx.q).unbind_surface(*ctx.q, st);
|
obj->resource(ctx.q).unbind_surface(*ctx.q, st);
|
||||||
}
|
}
|
||||||
|
|
||||||
_cl_kernel::image_rd_argument::image_rd_argument() :
|
|
||||||
argument(sizeof(uint32_t)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::image_rd_argument::set(size_t size, const void *value) {
|
_cl_kernel::image_rd_argument::set(size_t size, const void *value) {
|
||||||
if (size != sizeof(cl_mem))
|
if (size != sizeof(cl_mem))
|
||||||
@@ -329,15 +395,17 @@ _cl_kernel::image_rd_argument::set(size_t size, const void *value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::image_rd_argument::bind(exec_context &ctx) {
|
_cl_kernel::image_rd_argument::bind(exec_context &ctx,
|
||||||
size_t offset = ctx.input.size();
|
const clover::module::argument &marg) {
|
||||||
size_t idx = ctx.sviews.size();
|
auto v = bytes(ctx.sviews.size());
|
||||||
|
|
||||||
ctx.input.resize(offset + sizeof(uint32_t));
|
extend(v, module::argument::zero_ext, marg.target_size);
|
||||||
*(uint32_t *)&ctx.input[offset] = idx;
|
byteswap(v, ctx.q->dev.endianness());
|
||||||
|
align(ctx.input, marg.target_align);
|
||||||
|
insert(ctx.input, v);
|
||||||
|
|
||||||
ctx.sviews.resize(idx + 1);
|
st = obj->resource(ctx.q).bind_sampler_view(*ctx.q);
|
||||||
ctx.sviews[idx] = st = obj->resource(ctx.q).bind_sampler_view(*ctx.q);
|
ctx.sviews.push_back(st);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -345,10 +413,6 @@ _cl_kernel::image_rd_argument::unbind(exec_context &ctx) {
|
|||||||
obj->resource(ctx.q).unbind_sampler_view(*ctx.q, st);
|
obj->resource(ctx.q).unbind_sampler_view(*ctx.q, st);
|
||||||
}
|
}
|
||||||
|
|
||||||
_cl_kernel::image_wr_argument::image_wr_argument() :
|
|
||||||
argument(sizeof(uint32_t)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::image_wr_argument::set(size_t size, const void *value) {
|
_cl_kernel::image_wr_argument::set(size_t size, const void *value) {
|
||||||
if (size != sizeof(cl_mem))
|
if (size != sizeof(cl_mem))
|
||||||
@@ -362,15 +426,17 @@ _cl_kernel::image_wr_argument::set(size_t size, const void *value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::image_wr_argument::bind(exec_context &ctx) {
|
_cl_kernel::image_wr_argument::bind(exec_context &ctx,
|
||||||
size_t offset = ctx.input.size();
|
const clover::module::argument &marg) {
|
||||||
size_t idx = ctx.resources.size();
|
auto v = bytes(ctx.resources.size());
|
||||||
|
|
||||||
ctx.input.resize(offset + sizeof(uint32_t));
|
extend(v, module::argument::zero_ext, marg.target_size);
|
||||||
*(uint32_t *)&ctx.input[offset] = idx;
|
byteswap(v, ctx.q->dev.endianness());
|
||||||
|
align(ctx.input, marg.target_align);
|
||||||
|
insert(ctx.input, v);
|
||||||
|
|
||||||
ctx.resources.resize(idx + 1);
|
st = obj->resource(ctx.q).bind_surface(*ctx.q, true);
|
||||||
ctx.resources[idx] = st = obj->resource(ctx.q).bind_surface(*ctx.q, true);
|
ctx.resources.push_back(st);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -378,10 +444,6 @@ _cl_kernel::image_wr_argument::unbind(exec_context &ctx) {
|
|||||||
obj->resource(ctx.q).unbind_surface(*ctx.q, st);
|
obj->resource(ctx.q).unbind_surface(*ctx.q, st);
|
||||||
}
|
}
|
||||||
|
|
||||||
_cl_kernel::sampler_argument::sampler_argument() :
|
|
||||||
argument(0) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::sampler_argument::set(size_t size, const void *value) {
|
_cl_kernel::sampler_argument::set(size_t size, const void *value) {
|
||||||
if (size != sizeof(cl_sampler))
|
if (size != sizeof(cl_sampler))
|
||||||
@@ -392,11 +454,10 @@ _cl_kernel::sampler_argument::set(size_t size, const void *value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_cl_kernel::sampler_argument::bind(exec_context &ctx) {
|
_cl_kernel::sampler_argument::bind(exec_context &ctx,
|
||||||
size_t idx = ctx.samplers.size();
|
const clover::module::argument &marg) {
|
||||||
|
st = obj->bind(*ctx.q);
|
||||||
ctx.samplers.resize(idx + 1);
|
ctx.samplers.push_back(st);
|
||||||
ctx.samplers[idx] = st = obj->bind(*ctx.q);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -68,14 +68,11 @@ private:
|
|||||||
public:
|
public:
|
||||||
class argument {
|
class argument {
|
||||||
public:
|
public:
|
||||||
argument(size_t size);
|
argument();
|
||||||
|
|
||||||
/// \a true if the argument has been set.
|
/// \a true if the argument has been set.
|
||||||
bool set() const;
|
bool set() const;
|
||||||
|
|
||||||
/// Argument size in the input buffer.
|
|
||||||
size_t size() const;
|
|
||||||
|
|
||||||
/// Storage space required for the referenced object.
|
/// Storage space required for the referenced object.
|
||||||
virtual size_t storage() const;
|
virtual size_t storage() const;
|
||||||
|
|
||||||
@@ -84,19 +81,19 @@ public:
|
|||||||
|
|
||||||
/// Allocate the necessary resources to bind the specified
|
/// Allocate the necessary resources to bind the specified
|
||||||
/// object to this argument, and update \a ctx accordingly.
|
/// object to this argument, and update \a ctx accordingly.
|
||||||
virtual void bind(exec_context &ctx) = 0;
|
virtual void bind(exec_context &ctx,
|
||||||
|
const clover::module::argument &marg) = 0;
|
||||||
|
|
||||||
/// Free any resources that were allocated in bind().
|
/// Free any resources that were allocated in bind().
|
||||||
virtual void unbind(exec_context &ctx) = 0;
|
virtual void unbind(exec_context &ctx) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
size_t __size;
|
|
||||||
bool __set;
|
bool __set;
|
||||||
};
|
};
|
||||||
|
|
||||||
_cl_kernel(clover::program &prog,
|
_cl_kernel(clover::program &prog,
|
||||||
const std::string &name,
|
const std::string &name,
|
||||||
const std::vector<clover::module::argument> &args);
|
const std::vector<clover::module::argument> &margs);
|
||||||
|
|
||||||
void launch(clover::command_queue &q,
|
void launch(clover::command_queue &q,
|
||||||
const std::vector<size_t> &grid_offset,
|
const std::vector<size_t> &grid_offset,
|
||||||
@@ -122,19 +119,20 @@ private:
|
|||||||
scalar_argument(size_t size);
|
scalar_argument(size_t size);
|
||||||
|
|
||||||
virtual void set(size_t size, const void *value);
|
virtual void set(size_t size, const void *value);
|
||||||
virtual void bind(exec_context &ctx);
|
virtual void bind(exec_context &ctx,
|
||||||
|
const clover::module::argument &marg);
|
||||||
virtual void unbind(exec_context &ctx);
|
virtual void unbind(exec_context &ctx);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
size_t size;
|
||||||
std::vector<uint8_t> v;
|
std::vector<uint8_t> v;
|
||||||
};
|
};
|
||||||
|
|
||||||
class global_argument : public argument {
|
class global_argument : public argument {
|
||||||
public:
|
public:
|
||||||
global_argument(size_t size);
|
|
||||||
|
|
||||||
virtual void set(size_t size, const void *value);
|
virtual void set(size_t size, const void *value);
|
||||||
virtual void bind(exec_context &ctx);
|
virtual void bind(exec_context &ctx,
|
||||||
|
const clover::module::argument &marg);
|
||||||
virtual void unbind(exec_context &ctx);
|
virtual void unbind(exec_context &ctx);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -143,12 +141,11 @@ private:
|
|||||||
|
|
||||||
class local_argument : public argument {
|
class local_argument : public argument {
|
||||||
public:
|
public:
|
||||||
local_argument();
|
|
||||||
|
|
||||||
virtual size_t storage() const;
|
virtual size_t storage() const;
|
||||||
|
|
||||||
virtual void set(size_t size, const void *value);
|
virtual void set(size_t size, const void *value);
|
||||||
virtual void bind(exec_context &ctx);
|
virtual void bind(exec_context &ctx,
|
||||||
|
const clover::module::argument &marg);
|
||||||
virtual void unbind(exec_context &ctx);
|
virtual void unbind(exec_context &ctx);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -157,10 +154,9 @@ private:
|
|||||||
|
|
||||||
class constant_argument : public argument {
|
class constant_argument : public argument {
|
||||||
public:
|
public:
|
||||||
constant_argument();
|
|
||||||
|
|
||||||
virtual void set(size_t size, const void *value);
|
virtual void set(size_t size, const void *value);
|
||||||
virtual void bind(exec_context &ctx);
|
virtual void bind(exec_context &ctx,
|
||||||
|
const clover::module::argument &marg);
|
||||||
virtual void unbind(exec_context &ctx);
|
virtual void unbind(exec_context &ctx);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -170,10 +166,9 @@ private:
|
|||||||
|
|
||||||
class image_rd_argument : public argument {
|
class image_rd_argument : public argument {
|
||||||
public:
|
public:
|
||||||
image_rd_argument();
|
|
||||||
|
|
||||||
virtual void set(size_t size, const void *value);
|
virtual void set(size_t size, const void *value);
|
||||||
virtual void bind(exec_context &ctx);
|
virtual void bind(exec_context &ctx,
|
||||||
|
const clover::module::argument &marg);
|
||||||
virtual void unbind(exec_context &ctx);
|
virtual void unbind(exec_context &ctx);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -183,10 +178,9 @@ private:
|
|||||||
|
|
||||||
class image_wr_argument : public argument {
|
class image_wr_argument : public argument {
|
||||||
public:
|
public:
|
||||||
image_wr_argument();
|
|
||||||
|
|
||||||
virtual void set(size_t size, const void *value);
|
virtual void set(size_t size, const void *value);
|
||||||
virtual void bind(exec_context &ctx);
|
virtual void bind(exec_context &ctx,
|
||||||
|
const clover::module::argument &marg);
|
||||||
virtual void unbind(exec_context &ctx);
|
virtual void unbind(exec_context &ctx);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -196,10 +190,9 @@ private:
|
|||||||
|
|
||||||
class sampler_argument : public argument {
|
class sampler_argument : public argument {
|
||||||
public:
|
public:
|
||||||
sampler_argument();
|
|
||||||
|
|
||||||
virtual void set(size_t size, const void *value);
|
virtual void set(size_t size, const void *value);
|
||||||
virtual void bind(exec_context &ctx);
|
virtual void bind(exec_context &ctx,
|
||||||
|
const clover::module::argument &marg);
|
||||||
virtual void unbind(exec_context &ctx);
|
virtual void unbind(exec_context &ctx);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@@ -68,11 +68,32 @@ namespace clover {
|
|||||||
sampler
|
sampler
|
||||||
};
|
};
|
||||||
|
|
||||||
argument(enum type type, size_t size) : type(type), size(size) { }
|
enum ext_type {
|
||||||
argument() : type(scalar), size(0) { }
|
zero_ext,
|
||||||
|
sign_ext
|
||||||
|
};
|
||||||
|
|
||||||
|
argument(enum type type, size_t size,
|
||||||
|
size_t target_size, size_t target_align,
|
||||||
|
enum ext_type ext_type) :
|
||||||
|
type(type), size(size),
|
||||||
|
target_size(target_size), target_align(target_align),
|
||||||
|
ext_type(ext_type) { }
|
||||||
|
|
||||||
|
argument(enum type type, size_t size) :
|
||||||
|
type(type), size(size),
|
||||||
|
target_size(size), target_align(1),
|
||||||
|
ext_type(zero_ext) { }
|
||||||
|
|
||||||
|
argument() : type(scalar), size(0),
|
||||||
|
target_size(0), target_align(1),
|
||||||
|
ext_type(zero_ext) { }
|
||||||
|
|
||||||
type type;
|
type type;
|
||||||
size_t size;
|
size_t size;
|
||||||
|
size_t target_size;
|
||||||
|
size_t target_align;
|
||||||
|
ext_type ext_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct symbol {
|
struct symbol {
|
||||||
|
@@ -174,7 +174,7 @@ mapping::mapping(command_queue &q, resource &r,
|
|||||||
pctx(q.pipe) {
|
pctx(q.pipe) {
|
||||||
unsigned usage = ((flags & CL_MAP_WRITE ? PIPE_TRANSFER_WRITE : 0 ) |
|
unsigned usage = ((flags & CL_MAP_WRITE ? PIPE_TRANSFER_WRITE : 0 ) |
|
||||||
(flags & CL_MAP_READ ? PIPE_TRANSFER_READ : 0 ) |
|
(flags & CL_MAP_READ ? PIPE_TRANSFER_READ : 0 ) |
|
||||||
(blocking ? PIPE_TRANSFER_UNSYNCHRONIZED : 0));
|
(!blocking ? PIPE_TRANSFER_UNSYNCHRONIZED : 0));
|
||||||
|
|
||||||
p = pctx->transfer_map(pctx, r.pipe, 0, usage,
|
p = pctx->transfer_map(pctx, r.pipe, 0, usage,
|
||||||
box(origin + r.offset, region), &pxfer);
|
box(origin + r.offset, region), &pxfer);
|
||||||
|
@@ -304,14 +304,21 @@ namespace {
|
|||||||
for (llvm::Function::arg_iterator I = kernel_func->arg_begin(),
|
for (llvm::Function::arg_iterator I = kernel_func->arg_begin(),
|
||||||
E = kernel_func->arg_end(); I != E; ++I) {
|
E = kernel_func->arg_end(); I != E; ++I) {
|
||||||
llvm::Argument &arg = *I;
|
llvm::Argument &arg = *I;
|
||||||
llvm::Type *arg_type = arg.getType();
|
|
||||||
#if HAVE_LLVM < 0x0302
|
#if HAVE_LLVM < 0x0302
|
||||||
llvm::TargetData TD(kernel_func->getParent());
|
llvm::TargetData TD(kernel_func->getParent());
|
||||||
#else
|
#else
|
||||||
llvm::DataLayout TD(kernel_func->getParent()->getDataLayout());
|
llvm::DataLayout TD(kernel_func->getParent()->getDataLayout());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
llvm::Type *arg_type = arg.getType();
|
||||||
unsigned arg_size = TD.getTypeStoreSize(arg_type);
|
unsigned arg_size = TD.getTypeStoreSize(arg_type);
|
||||||
|
|
||||||
|
llvm::Type *target_type = arg_type->isIntegerTy() ?
|
||||||
|
TD.getSmallestLegalIntType(mod->getContext(), arg_size * 8) :
|
||||||
|
arg_type;
|
||||||
|
unsigned target_size = TD.getTypeStoreSize(target_type);
|
||||||
|
unsigned target_align = TD.getABITypeAlignment(target_type);
|
||||||
|
|
||||||
if (llvm::isa<llvm::PointerType>(arg_type) && arg.hasByValAttr()) {
|
if (llvm::isa<llvm::PointerType>(arg_type) && arg.hasByValAttr()) {
|
||||||
arg_type =
|
arg_type =
|
||||||
llvm::dyn_cast<llvm::PointerType>(arg_type)->getElementType();
|
llvm::dyn_cast<llvm::PointerType>(arg_type)->getElementType();
|
||||||
@@ -324,11 +331,24 @@ namespace {
|
|||||||
unsigned address_space = llvm::cast<llvm::PointerType>(arg_type)->getAddressSpace();
|
unsigned address_space = llvm::cast<llvm::PointerType>(arg_type)->getAddressSpace();
|
||||||
switch (address_space) {
|
switch (address_space) {
|
||||||
default:
|
default:
|
||||||
args.push_back(module::argument(module::argument::global, arg_size));
|
args.push_back(
|
||||||
|
module::argument(module::argument::global, arg_size,
|
||||||
|
target_size, target_align,
|
||||||
|
module::argument::zero_ext));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
args.push_back(module::argument(module::argument::scalar, arg_size));
|
llvm::AttributeSet attrs = kernel_func->getAttributes();
|
||||||
|
enum module::argument::ext_type ext_type =
|
||||||
|
(attrs.hasAttribute(arg.getArgNo() + 1,
|
||||||
|
llvm::Attribute::SExt) ?
|
||||||
|
module::argument::sign_ext :
|
||||||
|
module::argument::zero_ext);
|
||||||
|
|
||||||
|
args.push_back(
|
||||||
|
module::argument(module::argument::scalar, arg_size,
|
||||||
|
target_size, target_align, ext_type));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -52,10 +52,18 @@ dri_pp_query(struct dri_context *ctx)
|
|||||||
static void dri_fill_st_options(struct st_config_options *options,
|
static void dri_fill_st_options(struct st_config_options *options,
|
||||||
const struct driOptionCache * optionCache)
|
const struct driOptionCache * optionCache)
|
||||||
{
|
{
|
||||||
options->force_glsl_extensions_warn =
|
options->disable_blend_func_extended =
|
||||||
driQueryOptionb(optionCache, "force_glsl_extensions_warn");
|
driQueryOptionb(optionCache, "disable_blend_func_extended");
|
||||||
options->disable_glsl_line_continuations =
|
options->disable_glsl_line_continuations =
|
||||||
driQueryOptionb(optionCache, "disable_glsl_line_continuations");
|
driQueryOptionb(optionCache, "disable_glsl_line_continuations");
|
||||||
|
options->disable_shader_bit_encoding =
|
||||||
|
driQueryOptionb(optionCache, "disable_shader_bit_encoding");
|
||||||
|
options->force_glsl_extensions_warn =
|
||||||
|
driQueryOptionb(optionCache, "force_glsl_extensions_warn");
|
||||||
|
options->force_glsl_version =
|
||||||
|
driQueryOptioni(optionCache, "force_glsl_version");
|
||||||
|
options->force_s3tc_enable =
|
||||||
|
driQueryOptionb(optionCache, "force_s3tc_enable");
|
||||||
}
|
}
|
||||||
|
|
||||||
GLboolean
|
GLboolean
|
||||||
|
@@ -42,11 +42,13 @@ static void
|
|||||||
swap_fences_unref(struct dri_drawable *draw);
|
swap_fences_unref(struct dri_drawable *draw);
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
dri_st_framebuffer_validate(struct st_framebuffer_iface *stfbi,
|
dri_st_framebuffer_validate(struct st_context_iface *stctx,
|
||||||
|
struct st_framebuffer_iface *stfbi,
|
||||||
const enum st_attachment_type *statts,
|
const enum st_attachment_type *statts,
|
||||||
unsigned count,
|
unsigned count,
|
||||||
struct pipe_resource **out)
|
struct pipe_resource **out)
|
||||||
{
|
{
|
||||||
|
struct dri_context *ctx = (struct dri_context *)stctx->st_manager_private;
|
||||||
struct dri_drawable *drawable =
|
struct dri_drawable *drawable =
|
||||||
(struct dri_drawable *) stfbi->st_manager_private;
|
(struct dri_drawable *) stfbi->st_manager_private;
|
||||||
struct dri_screen *screen = dri_screen(drawable->sPriv);
|
struct dri_screen *screen = dri_screen(drawable->sPriv);
|
||||||
@@ -78,7 +80,7 @@ dri_st_framebuffer_validate(struct st_framebuffer_iface *stfbi,
|
|||||||
if (new_stamp && drawable->update_drawable_info)
|
if (new_stamp && drawable->update_drawable_info)
|
||||||
drawable->update_drawable_info(drawable);
|
drawable->update_drawable_info(drawable);
|
||||||
|
|
||||||
drawable->allocate_textures(drawable, statts, count);
|
drawable->allocate_textures(ctx, drawable, statts, count);
|
||||||
|
|
||||||
/* add existing textures */
|
/* add existing textures */
|
||||||
for (i = 0; i < ST_ATTACHMENT_COUNT; i++) {
|
for (i = 0; i < ST_ATTACHMENT_COUNT; i++) {
|
||||||
@@ -183,7 +185,8 @@ dri_destroy_buffer(__DRIdrawable * dPriv)
|
|||||||
* exist. Used by the TFP extension.
|
* exist. Used by the TFP extension.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
dri_drawable_validate_att(struct dri_drawable *drawable,
|
dri_drawable_validate_att(struct dri_context *ctx,
|
||||||
|
struct dri_drawable *drawable,
|
||||||
enum st_attachment_type statt)
|
enum st_attachment_type statt)
|
||||||
{
|
{
|
||||||
enum st_attachment_type statts[ST_ATTACHMENT_COUNT];
|
enum st_attachment_type statts[ST_ATTACHMENT_COUNT];
|
||||||
@@ -203,7 +206,7 @@ dri_drawable_validate_att(struct dri_drawable *drawable,
|
|||||||
|
|
||||||
drawable->texture_stamp = drawable->dPriv->lastStamp - 1;
|
drawable->texture_stamp = drawable->dPriv->lastStamp - 1;
|
||||||
|
|
||||||
drawable->base.validate(&drawable->base, statts, count, NULL);
|
drawable->base.validate(ctx->st, &drawable->base, statts, count, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -217,7 +220,7 @@ dri_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target,
|
|||||||
struct dri_drawable *drawable = dri_drawable(dPriv);
|
struct dri_drawable *drawable = dri_drawable(dPriv);
|
||||||
struct pipe_resource *pt;
|
struct pipe_resource *pt;
|
||||||
|
|
||||||
dri_drawable_validate_att(drawable, ST_ATTACHMENT_FRONT_LEFT);
|
dri_drawable_validate_att(ctx, drawable, ST_ATTACHMENT_FRONT_LEFT);
|
||||||
|
|
||||||
/* Use the pipe resource associated with the X drawable */
|
/* Use the pipe resource associated with the X drawable */
|
||||||
pt = drawable->textures[ST_ATTACHMENT_FRONT_LEFT];
|
pt = drawable->textures[ST_ATTACHMENT_FRONT_LEFT];
|
||||||
|
@@ -71,7 +71,8 @@ struct dri_drawable
|
|||||||
struct pipe_surface *drisw_surface;
|
struct pipe_surface *drisw_surface;
|
||||||
|
|
||||||
/* hooks filled in by dri2 & drisw */
|
/* hooks filled in by dri2 & drisw */
|
||||||
void (*allocate_textures)(struct dri_drawable *drawable,
|
void (*allocate_textures)(struct dri_context *ctx,
|
||||||
|
struct dri_drawable *drawable,
|
||||||
const enum st_attachment_type *statts,
|
const enum st_attachment_type *statts,
|
||||||
unsigned count);
|
unsigned count);
|
||||||
|
|
||||||
|
@@ -41,6 +41,7 @@
|
|||||||
#include "state_tracker/drm_driver.h"
|
#include "state_tracker/drm_driver.h"
|
||||||
|
|
||||||
#include "util/u_debug.h"
|
#include "util/u_debug.h"
|
||||||
|
#include "util/u_format_s3tc.h"
|
||||||
|
|
||||||
#define MSAA_VISUAL_MAX_SAMPLES 32
|
#define MSAA_VISUAL_MAX_SAMPLES 32
|
||||||
|
|
||||||
@@ -48,14 +49,8 @@
|
|||||||
|
|
||||||
PUBLIC const char __driConfigOptions[] =
|
PUBLIC const char __driConfigOptions[] =
|
||||||
DRI_CONF_BEGIN
|
DRI_CONF_BEGIN
|
||||||
DRI_CONF_SECTION_PERFORMANCE
|
|
||||||
DRI_CONF_FTHROTTLE_MODE(DRI_CONF_FTHROTTLE_IRQS)
|
|
||||||
DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_0)
|
|
||||||
DRI_CONF_SECTION_END
|
|
||||||
|
|
||||||
DRI_CONF_SECTION_QUALITY
|
DRI_CONF_SECTION_QUALITY
|
||||||
/* DRI_CONF_FORCE_S3TC_ENABLE("false") */
|
DRI_CONF_FORCE_S3TC_ENABLE("false")
|
||||||
DRI_CONF_ALLOW_LARGE_TEXTURES(1)
|
|
||||||
DRI_CONF_PP_CELSHADE(0)
|
DRI_CONF_PP_CELSHADE(0)
|
||||||
DRI_CONF_PP_NORED(0)
|
DRI_CONF_PP_NORED(0)
|
||||||
DRI_CONF_PP_NOGREEN(0)
|
DRI_CONF_PP_NOGREEN(0)
|
||||||
@@ -67,6 +62,9 @@ PUBLIC const char __driConfigOptions[] =
|
|||||||
DRI_CONF_SECTION_DEBUG
|
DRI_CONF_SECTION_DEBUG
|
||||||
DRI_CONF_FORCE_GLSL_EXTENSIONS_WARN("false")
|
DRI_CONF_FORCE_GLSL_EXTENSIONS_WARN("false")
|
||||||
DRI_CONF_DISABLE_GLSL_LINE_CONTINUATIONS("false")
|
DRI_CONF_DISABLE_GLSL_LINE_CONTINUATIONS("false")
|
||||||
|
DRI_CONF_DISABLE_BLEND_FUNC_EXTENDED("false")
|
||||||
|
DRI_CONF_DISABLE_SHADER_BIT_ENCODING("false")
|
||||||
|
DRI_CONF_FORCE_GLSL_VERSION(0)
|
||||||
DRI_CONF_SECTION_END
|
DRI_CONF_SECTION_END
|
||||||
|
|
||||||
DRI_CONF_SECTION_MISCELLANEOUS
|
DRI_CONF_SECTION_MISCELLANEOUS
|
||||||
@@ -76,7 +74,7 @@ PUBLIC const char __driConfigOptions[] =
|
|||||||
|
|
||||||
#define false 0
|
#define false 0
|
||||||
|
|
||||||
static const uint __driNConfigOptions = 12;
|
static const uint __driNConfigOptions = 13;
|
||||||
|
|
||||||
static const __DRIconfig **
|
static const __DRIconfig **
|
||||||
dri_fill_in_modes(struct dri_screen *screen)
|
dri_fill_in_modes(struct dri_screen *screen)
|
||||||
@@ -416,6 +414,20 @@ dri_init_screen_helper(struct dri_screen *screen,
|
|||||||
screen->sPriv->myNum,
|
screen->sPriv->myNum,
|
||||||
driver_descriptor.name);
|
driver_descriptor.name);
|
||||||
|
|
||||||
|
/* Handle force_s3tc_enable. */
|
||||||
|
if (!util_format_s3tc_enabled &&
|
||||||
|
driQueryOptionb(&screen->optionCache, "force_s3tc_enable")) {
|
||||||
|
/* Ensure libtxc_dxtn has been loaded if available.
|
||||||
|
* Forcing S3TC on before calling this would prevent loading
|
||||||
|
* the library.
|
||||||
|
* This is just a precaution, the driver should have called it
|
||||||
|
* already.
|
||||||
|
*/
|
||||||
|
util_format_s3tc_init();
|
||||||
|
|
||||||
|
util_format_s3tc_enabled = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
return dri_fill_in_modes(screen);
|
return dri_fill_in_modes(screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user