Compare commits
214 Commits
mesa-10.2.
...
10.2
Author | SHA1 | Date | |
---|---|---|---|
|
52bd154980 | ||
|
9f1149876f | ||
|
b797208e6c | ||
|
8200c621a7 | ||
|
44dd7cbd52 | ||
|
bda7518e7c | ||
|
7d3f6f7995 | ||
|
907da04eb6 | ||
|
18336b99b2 | ||
|
38c5650656 | ||
|
b4584d9eed | ||
|
08923a1029 | ||
|
fc8fc3bfc8 | ||
|
f95fcb1716 | ||
|
1e2b4120f7 | ||
|
d2fba17b3d | ||
|
c68183afef | ||
|
ff935f267e | ||
|
be5e98ac2b | ||
|
804e3fc92c | ||
|
6eaa23d1ff | ||
|
e221e797b5 | ||
|
e1c04225c1 | ||
|
768fac116d | ||
|
4027062a3c | ||
|
d3c45235b6 | ||
|
e475222167 | ||
|
af2a612912 | ||
|
b8971318e7 | ||
|
5750eb3342 | ||
|
274c5424d0 | ||
|
f10161e477 | ||
|
3f570286fc | ||
|
9242770724 | ||
|
8e0f72995f | ||
|
ac75d9b6b6 | ||
|
b14b3e678f | ||
|
64d51e2507 | ||
|
25f5457e84 | ||
|
7ffc8556ca | ||
|
65324b89b8 | ||
|
0c739aa1d2 | ||
|
55d28925e6 | ||
|
ec7d081e13 | ||
|
c4fa2bc796 | ||
|
0dad6d0ab0 | ||
|
00ef4b0ab1 | ||
|
eb7c7032c3 | ||
|
a708926792 | ||
|
2a967f7128 | ||
|
eb38556137 | ||
|
836b0ae8b6 | ||
|
3fe59905fc | ||
|
8fe85c7742 | ||
|
c89719e955 | ||
|
6e46a1c0b3 | ||
|
86b7073739 | ||
|
36b8a16236 | ||
|
fefeba913b | ||
|
ac37c3c66e | ||
|
438346b6c5 | ||
|
8d9a4112f2 | ||
|
f293bb9664 | ||
|
0931f475fa | ||
|
6f8d2db2ef | ||
|
0374fdd5b6 | ||
|
fa03aa9a8a | ||
|
301a23c624 | ||
|
12e4e88c95 | ||
|
0ecb1cfad3 | ||
|
42bd348d21 | ||
|
e8d7e3bc57 | ||
|
869e6e3955 | ||
|
a92c1b1904 | ||
|
c5885eca15 | ||
|
f1ff7753f1 | ||
|
7b78cf4ae2 | ||
|
395d4e11cf | ||
|
cab73f6eba | ||
|
0e52107ff8 | ||
|
aba5b15068 | ||
|
477babf6f4 | ||
|
1cab5b5144 | ||
|
6761e28a46 | ||
|
0cdebea90c | ||
|
6601260464 | ||
|
a3eb6989ad | ||
|
eda6510425 | ||
|
8cb517e43a | ||
|
cdfc7c6c74 | ||
|
62f60edd77 | ||
|
66f88a4640 | ||
|
d82ca4e2b2 | ||
|
8b056fc486 | ||
|
346dda24bf | ||
|
efc7aa3187 | ||
|
5532cf9d7e | ||
|
bca8865aec | ||
|
629df2fbdd | ||
|
22ec7df0d7 | ||
|
1e0820032d | ||
|
485fd2a4eb | ||
|
56a455f5ba | ||
|
3e541f0ab8 | ||
|
82d46ebc07 | ||
|
29e2f11f5d | ||
|
8dc1caa1ad | ||
|
eef8b88e63 | ||
|
326648add1 | ||
|
ad0d1a1ab3 | ||
|
712933f1d6 | ||
|
8829b3c37a | ||
|
4c02b3d90e | ||
|
b6fe3e7ac2 | ||
|
323f0246ef | ||
|
686247ff62 | ||
|
d21e0d34fc | ||
|
8bb6628cb9 | ||
|
69d6ceda43 | ||
|
1abd1d0430 | ||
|
3baf37f076 | ||
|
12d68e9aaf | ||
|
a53047f6d1 | ||
|
b83b9b677b | ||
|
853cd6a4f7 | ||
|
c66da3d457 | ||
|
f75dfcee10 | ||
|
490d8ddf87 | ||
|
b9c5a8f869 | ||
|
c84b367b18 | ||
|
71102219ea | ||
|
d26ac40bad | ||
|
50dcc2eb26 | ||
|
0dfcf50639 | ||
|
6ff3da2509 | ||
|
378def4cab | ||
|
fcb6c0d2b8 | ||
|
d59406cdb7 | ||
|
f2023b8dc8 | ||
|
37114cc2eb | ||
|
f876eae80b | ||
|
8e91b094c8 | ||
|
6893c25c7b | ||
|
62ebb85cd4 | ||
|
8c8dc8c9e9 | ||
|
775895110c | ||
|
386648c555 | ||
|
0e6d8ca573 | ||
|
1233cdd98d | ||
|
7a856002d3 | ||
|
d8074a6a1c | ||
|
816d37e5c5 | ||
|
efe8cb1e53 | ||
|
54733e5cb8 | ||
|
6388ad51ff | ||
|
ab0ad8f7e9 | ||
|
1c386d5c35 | ||
|
e3c0c23873 | ||
|
2a90fbfce4 | ||
|
d374cfe0bc | ||
|
b56908d7db | ||
|
c6a6acb6b4 | ||
|
64ff84abae | ||
|
8f4e03c397 | ||
|
258f35441a | ||
|
cb04294b42 | ||
|
d389a863f2 | ||
|
7fcfdfb17b | ||
|
8612a12a62 | ||
|
8f787d3ca2 | ||
|
b323fa8957 | ||
|
d5d94598cb | ||
|
2efd0a3479 | ||
|
1a832e5846 | ||
|
d55a897929 | ||
|
276c6bb369 | ||
|
0273f22a10 | ||
|
e731031372 | ||
|
906727dccb | ||
|
d69c9114df | ||
|
9b062d2020 | ||
|
37005cafa4 | ||
|
abe859d56e | ||
|
1e6620997f | ||
|
9fd133747b | ||
|
5e1bfed1ca | ||
|
0618881c82 | ||
|
d00d73d1e1 | ||
|
33cb9f9503 | ||
|
0186858227 | ||
|
b20c82f74c | ||
|
8f77fbb6af | ||
|
afcb63802f | ||
|
8b2d1068b5 | ||
|
f96e3e5351 | ||
|
55b6821a9f | ||
|
a1b7c7d88e | ||
|
ff9cea8776 | ||
|
95ff8c6f18 | ||
|
e11b3f8fbc | ||
|
da80e6a1c4 | ||
|
5ba1cf1893 | ||
|
ff02e7995c | ||
|
ee4274c393 | ||
|
7b21ee08db | ||
|
f9718e4b93 | ||
|
3ca2119593 | ||
|
ad79d7e987 | ||
|
9bd6dc9371 | ||
|
89e3b89796 | ||
|
bcff69f18f | ||
|
6ae4aff303 | ||
|
500849f9cf | ||
|
05add05438 |
@@ -24,7 +24,7 @@
|
|||||||
# BOARD_GPU_DRIVERS should be defined. The valid values are
|
# BOARD_GPU_DRIVERS should be defined. The valid values are
|
||||||
#
|
#
|
||||||
# classic drivers: i915 i965
|
# classic drivers: i915 i965
|
||||||
# gallium drivers: swrast i915g ilo nouveau r300g r600g radeonsi vmwgfx
|
# gallium drivers: swrast freedreno i915g ilo nouveau r300g r600g radeonsi vmwgfx
|
||||||
#
|
#
|
||||||
# The main target is libGLES_mesa. For each classic driver enabled, a DRI
|
# The main target is libGLES_mesa. For each classic driver enabled, a DRI
|
||||||
# module will also be built. DRI modules will be loaded by libGLES_mesa.
|
# module will also be built. DRI modules will be loaded by libGLES_mesa.
|
||||||
@@ -42,7 +42,7 @@ DRM_TOP := external/drm
|
|||||||
DRM_GRALLOC_TOP := hardware/drm_gralloc
|
DRM_GRALLOC_TOP := hardware/drm_gralloc
|
||||||
|
|
||||||
classic_drivers := i915 i965
|
classic_drivers := i915 i965
|
||||||
gallium_drivers := swrast i915g ilo nouveau r300g r600g radeonsi vmwgfx
|
gallium_drivers := swrast freedreno i915g ilo nouveau r300g r600g radeonsi vmwgfx
|
||||||
|
|
||||||
MESA_GPU_DRIVERS := $(strip $(BOARD_GPU_DRIVERS))
|
MESA_GPU_DRIVERS := $(strip $(BOARD_GPU_DRIVERS))
|
||||||
|
|
||||||
|
11
Makefile.am
11
Makefile.am
@@ -64,14 +64,13 @@ IGNORE_FILES = \
|
|||||||
|
|
||||||
parsers: configure
|
parsers: configure
|
||||||
$(MAKE) -C src/glsl glsl_parser.cpp glsl_parser.h glsl_lexer.cpp glcpp/glcpp-lex.c glcpp/glcpp-parse.c glcpp/glcpp-parse.h
|
$(MAKE) -C src/glsl glsl_parser.cpp glsl_parser.h glsl_lexer.cpp glcpp/glcpp-lex.c glcpp/glcpp-parse.c glcpp/glcpp-parse.h
|
||||||
$(MAKE) -C src/mesa program/lex.yy.c program/program_parse.tab.c program/program_parse.tab.h
|
|
||||||
|
|
||||||
# Everything for new a Mesa release:
|
# Everything for new a Mesa release:
|
||||||
ARCHIVES = $(PACKAGE_NAME).tar.gz \
|
ARCHIVES = $(PACKAGE_NAME).tar.gz \
|
||||||
$(PACKAGE_NAME).tar.bz2 \
|
$(PACKAGE_NAME).tar.bz2 \
|
||||||
$(PACKAGE_NAME).zip
|
$(PACKAGE_NAME).zip
|
||||||
|
|
||||||
tarballs: md5
|
tarballs: checksums
|
||||||
rm -f ../$(PACKAGE_DIR) $(PACKAGE_NAME).tar
|
rm -f ../$(PACKAGE_DIR) $(PACKAGE_NAME).tar
|
||||||
|
|
||||||
manifest.txt: .git
|
manifest.txt: .git
|
||||||
@@ -98,9 +97,9 @@ $(PACKAGE_NAME).zip: parsers ../$(PACKAGE_DIR) manifest.txt
|
|||||||
zip -q -@ $(PACKAGE_NAME).zip < $(PACKAGE_DIR)/manifest.txt ; \
|
zip -q -@ $(PACKAGE_NAME).zip < $(PACKAGE_DIR)/manifest.txt ; \
|
||||||
mv $(PACKAGE_NAME).zip $(PACKAGE_DIR)
|
mv $(PACKAGE_NAME).zip $(PACKAGE_DIR)
|
||||||
|
|
||||||
md5: $(ARCHIVES)
|
checksums: $(ARCHIVES)
|
||||||
@-md5sum $(PACKAGE_NAME).tar.gz
|
@-sha256sum $(PACKAGE_NAME).tar.gz
|
||||||
@-md5sum $(PACKAGE_NAME).tar.bz2
|
@-sha256sum $(PACKAGE_NAME).tar.bz2
|
||||||
@-md5sum $(PACKAGE_NAME).zip
|
@-sha256sum $(PACKAGE_NAME).zip
|
||||||
|
|
||||||
.PHONY: tarballs md5
|
.PHONY: tarballs md5
|
||||||
|
@@ -1,3 +1,30 @@
|
|||||||
# The first is the change, and the second is the revert of that change.
|
# The first is the change, and the second is the revert of that change.
|
||||||
e6967270c75a5b669152127bb7a746d55f4407a6 i965: Fix depth (array slices) computation for 1D_ARRAY render targets.
|
e6967270c75a5b669152127bb7a746d55f4407a6 i965: Fix depth (array slices) computation for 1D_ARRAY render targets.
|
||||||
155f98d49fdc2f46c760f8214327b3804ee60079 Revert "i965: Fix depth (array slices) computation for 1D_ARRAY render targets."
|
155f98d49fdc2f46c760f8214327b3804ee60079 Revert "i965: Fix depth (array slices) computation for 1D_ARRAY render targets."
|
||||||
|
|
||||||
|
# This patch didn't have enough in the commit message to convince me it
|
||||||
|
# is a bug fix, (email sent to author asking for more information).
|
||||||
|
41d759d076737f94976f5294b734dbc437a12bae
|
||||||
|
|
||||||
|
# These patch were already cherry-picked before the 10.2.4 release.
|
||||||
|
#
|
||||||
|
# But get-pick-list.sh doesn't realize that because the commit messages for
|
||||||
|
# these on the stable branch reference commit IDs that don't actually appear
|
||||||
|
# on master. I'm not sure what happened, (perhaps master was force-pushed at
|
||||||
|
# some point?).
|
||||||
|
2eaf3f670fea4ce4466340141244e41a45542c13
|
||||||
|
e5adc560cc8544200faa3e04504202839626ab37
|
||||||
|
cf1b5eee7f36af29d1d5caba3538ad4985e51f81
|
||||||
|
|
||||||
|
# The patch depends on earlier ones that are not part of 10.2.
|
||||||
|
b3121bfd413973f460e2cc9a9f852bdfa1265fcf mesa: guard better when building with sse4.1 optimisations
|
||||||
|
|
||||||
|
# The PIPE_CAP is not in mesa 10.2 - breaks the build.
|
||||||
|
72969e0efb7a5a011629c1001e81aa2329ede6b1 radeon/compute: Report a value for PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE
|
||||||
|
|
||||||
|
# No whitespace fixes for the stable branches.
|
||||||
|
38fccc37c1fa57c1fd373e8d71621bb4aed31083 radeonsi/compute: Whitespace fixes
|
||||||
|
|
||||||
|
# The commit relies of patches restructuring r600_resource, which never made
|
||||||
|
# it in the 10.2 branch.
|
||||||
|
a15088338ebe544efd90bfa7934cb99521488141 radeonsi/compute: Stop leaking the input buffer
|
||||||
|
@@ -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\|CC:.*mesa-stable\)' HEAD..origin/master |\
|
git log --reverse --pretty=%H -i --grep='^\([[:space:]]*NOTE: .*[Cc]andidate\|CC:.*10\.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.
|
||||||
|
24
configure.ac
24
configure.ac
@@ -494,10 +494,10 @@ AC_CHECK_FUNC([dlopen], [DEFINES="$DEFINES -DHAVE_DLOPEN"],
|
|||||||
AC_SUBST([DLOPEN_LIBS])
|
AC_SUBST([DLOPEN_LIBS])
|
||||||
|
|
||||||
dnl Check if that library also has dladdr
|
dnl Check if that library also has dladdr
|
||||||
save_LDFLAGS="$LDFLAGS"
|
save_LIBS="$LIBS"
|
||||||
LDFLAGS="$LDFLAGS $DLOPEN_LIBS"
|
LIBS="$LIBS $DLOPEN_LIBS"
|
||||||
AC_CHECK_FUNCS([dladdr])
|
AC_CHECK_FUNCS([dladdr])
|
||||||
LDFLAGS="$save_LDFLAGS"
|
LIBS="$save_LIBS"
|
||||||
|
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
darwin*|mingw*)
|
darwin*|mingw*)
|
||||||
@@ -1273,6 +1273,10 @@ if test "x$enable_gallium_gbm" = xyes; then
|
|||||||
AC_MSG_ERROR([gbm_gallium requires --enable-dri to build])
|
AC_MSG_ERROR([gbm_gallium requires --enable-dri to build])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "x$enable_gallium_egl" != xyes; then
|
||||||
|
AC_MSG_ERROR([gbm_gallium is only used by egl_gallium])
|
||||||
|
fi
|
||||||
|
|
||||||
GALLIUM_STATE_TRACKERS_DIRS="gbm $GALLIUM_STATE_TRACKERS_DIRS"
|
GALLIUM_STATE_TRACKERS_DIRS="gbm $GALLIUM_STATE_TRACKERS_DIRS"
|
||||||
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS gbm"
|
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS gbm"
|
||||||
enable_gallium_loader=yes
|
enable_gallium_loader=yes
|
||||||
@@ -1579,6 +1583,7 @@ strip_unwanted_llvm_flags() {
|
|||||||
# Use \> (marks the end of the word)
|
# Use \> (marks the end of the word)
|
||||||
echo `$1` | sed \
|
echo `$1` | sed \
|
||||||
-e 's/-DNDEBUG\>//g' \
|
-e 's/-DNDEBUG\>//g' \
|
||||||
|
-e 's/-D_GNU_SOURCE\>//g' \
|
||||||
-e 's/-pedantic\>//g' \
|
-e 's/-pedantic\>//g' \
|
||||||
-e 's/-Wcovered-switch-default\>//g' \
|
-e 's/-Wcovered-switch-default\>//g' \
|
||||||
-e 's/-O.\>//g' \
|
-e 's/-O.\>//g' \
|
||||||
@@ -1626,11 +1631,10 @@ if test "x$enable_gallium_llvm" = xyes; then
|
|||||||
AC_COMPUTE_INT([LLVM_VERSION_MINOR], [LLVM_VERSION_MINOR],
|
AC_COMPUTE_INT([LLVM_VERSION_MINOR], [LLVM_VERSION_MINOR],
|
||||||
[#include "${LLVM_INCLUDEDIR}/llvm/Config/llvm-config.h"])
|
[#include "${LLVM_INCLUDEDIR}/llvm/Config/llvm-config.h"])
|
||||||
|
|
||||||
dnl In LLVM 3.4.1 patch level was defined in config.h and not
|
LLVM_VERSION_PATCH=`echo $LLVM_VERSION | cut -d. -f3 | egrep -o '^[[0-9]]+'`
|
||||||
dnl llvm-config.h
|
if test -z "$LLVM_VERSION_PATCH"; then
|
||||||
AC_COMPUTE_INT([LLVM_VERSION_PATCH], [LLVM_VERSION_PATCH],
|
LLVM_VERSION_PATCH=0
|
||||||
[#include "${LLVM_INCLUDEDIR}/llvm/Config/config.h"],
|
fi
|
||||||
LLVM_VERSION_PATCH=0) dnl Default if LLVM_VERSION_PATCH not found
|
|
||||||
|
|
||||||
if test -n "${LLVM_VERSION_MAJOR}"; then
|
if test -n "${LLVM_VERSION_MAJOR}"; then
|
||||||
LLVM_VERSION_INT="${LLVM_VERSION_MAJOR}0${LLVM_VERSION_MINOR}"
|
LLVM_VERSION_INT="${LLVM_VERSION_MAJOR}0${LLVM_VERSION_MINOR}"
|
||||||
@@ -1757,6 +1761,7 @@ gallium_check_st() {
|
|||||||
|
|
||||||
gallium_require_llvm() {
|
gallium_require_llvm() {
|
||||||
if test "x$MESA_LLVM" = x0; then
|
if test "x$MESA_LLVM" = x0; then
|
||||||
|
case "$host" in *gnux32) return;; esac
|
||||||
case "$host_cpu" in
|
case "$host_cpu" in
|
||||||
i*86|x86_64|amd64) AC_MSG_ERROR([LLVM is required to build $1 on x86 and x86_64]);;
|
i*86|x86_64|amd64) AC_MSG_ERROR([LLVM is required to build $1 on x86 and x86_64]);;
|
||||||
esac
|
esac
|
||||||
@@ -1809,6 +1814,9 @@ if test -n "$with_gallium_drivers"; then
|
|||||||
case "x$driver" in
|
case "x$driver" in
|
||||||
xsvga)
|
xsvga)
|
||||||
HAVE_GALLIUM_SVGA=yes
|
HAVE_GALLIUM_SVGA=yes
|
||||||
|
if test "x$have_libdrm" != xyes; then
|
||||||
|
AC_MSG_ERROR([Building svga requires libdrm >= $LIBDRM_REQUIRED])
|
||||||
|
fi
|
||||||
GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS svga softpipe"
|
GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS svga softpipe"
|
||||||
gallium_require_drm_loader
|
gallium_require_drm_loader
|
||||||
gallium_check_st "svga/drm" "dri-vmwgfx" ""
|
gallium_check_st "svga/drm" "dri-vmwgfx" ""
|
||||||
|
@@ -31,6 +31,9 @@ because compatibility contexts are not supported.
|
|||||||
|
|
||||||
<h2>SHA256 checksums</h2>
|
<h2>SHA256 checksums</h2>
|
||||||
<pre>
|
<pre>
|
||||||
|
38c4a40364000f89cddaa1694f6f3cfb444981d1110238ce603093585477399c MesaLib-10.2.2.tar.bz2
|
||||||
|
2af2ec8b4db624c352e961eefbcce6c8d1f86d44c5542f6f378c50e1b958d453 MesaLib-10.2.2.tar.gz
|
||||||
|
d4c0372da59367a344d62ebcdf5cf61039c9cae6925f40f2dab8f8d95cf22da9 MesaLib-10.2.2.zip
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
|
130
docs/relnotes/10.2.3.html
Normal file
130
docs/relnotes/10.2.3.html
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
|
<title>Mesa Release Notes</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<h1>The Mesa 3D Graphics Library</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<iframe src="../contents.html"></iframe>
|
||||||
|
<div class="content">
|
||||||
|
|
||||||
|
<h1>Mesa 10.2.3 Release Notes / July 7, 2014</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.3 is a bug fix release which fixes bugs found since the 10.2.2 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.3 implements the OpenGL 3.3 API, but the version reported by
|
||||||
|
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||||
|
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||||
|
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||||
|
3.3 is <strong>only</strong> available if requested at context creation
|
||||||
|
because compatibility contexts are not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>SHA256 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
e482a96170c98b17d6aba0d6e4dda4b9a2e61c39587bb64ac38cadfa4aba4aeb MesaLib-10.2.3.tar.bz2
|
||||||
|
96cffacaa1c52ae659b3b0f91be2eebf5528b748934256751261fb79ea3d6636 MesaLib-10.2.3.tar.gz
|
||||||
|
82cab6ff14c8038ee39842dbdea0d447a78d119efd8d702d1497bc7c246434e9 MesaLib-10.2.3.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=76223">Bug 76223</a> - </li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=79823">Bug 79823</a> - </li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=80015">Bug 80015</a> - </li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>Aaron Watry (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>radeon/llvm: Allocate space for kernel metadata operands</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Carl Worth (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 sums for the 10.2.2 release</li>
|
||||||
|
<li>cherry-ignore: Add a patch that's been rejected</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ilia Mirkin (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nouveau: dup fd before passing it to device</li>
|
||||||
|
<li>nv50: disable dedicated ubo upload method</li>
|
||||||
|
<li>nv50: do an explicit flush on draw when there are persistent buffers</li>
|
||||||
|
<li>nvc0: add a memory barrier when there are persistent UBOs</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jasper St. Pierre (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glxext: Send the Drawable's ID in the GLX_BufferSwapComplete event</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Kenneth Graunke (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Don't emit SURFACE_STATEs for gather workarounds on Broadwell.</li>
|
||||||
|
<li>i965: Include marketing names for Broadwell GPUs.</li>
|
||||||
|
<li>i965/disasm: Fix INTEL_DEBUG=fs on Broadwell for ARB_fp applications.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Michel Dänzer (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>radeon/llvm: Use the llvm.rsq.clamped intrinsic for RSQ</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Rob Clark (9):</p>
|
||||||
|
<ul>
|
||||||
|
<li>xa: fix segfault</li>
|
||||||
|
<li>freedreno: use OUT_RELOCW when buffer is written</li>
|
||||||
|
<li>freedreno/a3xx: fix depth/stencil GMEM positioning</li>
|
||||||
|
<li>freedreno/a3xx: fix depth/stencil gmem restore</li>
|
||||||
|
<li>freedreno/a3xx: fix blend opcode</li>
|
||||||
|
<li>freedreno: few caps fixes</li>
|
||||||
|
<li>freedreno/a3xx: texture fixes</li>
|
||||||
|
<li>freedreno: fix for null textures</li>
|
||||||
|
<li>freedreno/a3xx: vtx formats</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Roland Scheidegger (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>draw: (trivial) fix clamping of viewport index</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Takashi Iwai (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>llvmpipe: Fix zero-division in llvmpipe_texture_layout()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Thomas Hellstrom (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/xa: Don't close the drm fd on failure v2</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Tobias Klausmann (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nv50/ir: allow gl_ViewportIndex to work on non-provoking vertices</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
127
docs/relnotes/10.2.4.html
Normal file
127
docs/relnotes/10.2.4.html
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
|
<title>Mesa Release Notes</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<h1>The Mesa 3D Graphics Library</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<iframe src="../contents.html"></iframe>
|
||||||
|
<div class="content">
|
||||||
|
|
||||||
|
<h1>Mesa 10.2.4 Release Notes / July 18, 2014</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.4 is a bug fix release which fixes bugs found since the 10.2.3 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.4 implements the OpenGL 3.3 API, but the version reported by
|
||||||
|
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||||
|
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||||
|
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||||
|
3.3 is <strong>only</strong> available if requested at context creation
|
||||||
|
because compatibility contexts are not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>SHA256 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
06a2341244eb85c283f59f70161e06ded106f835ed9b6be1ef0243bd9344811a MesaLib-10.2.4.tar.bz2
|
||||||
|
33e3c8b4343503e7d7d17416c670438860a2fd99ec93ea3327f73c3abe33b5e4 MesaLib-10.2.4.tar.gz
|
||||||
|
e26791a4a62a61b82e506e6ba031812d09697d1a831e8239af67e5722a8ee538 MesaLib-10.2.4.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=81157">Bug 81157</a> - [BDW]Piglit some spec_glsl-1.50_execution_built-in-functions* cases fail</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>Abdiel Janulgue (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965/fs: Refactor check for potential copy propagated instructions.</li>
|
||||||
|
<li>i965/fs: skip copy-propate for logical instructions with negated src entries</li>
|
||||||
|
<li>i965/vec4: skip copy-propate for logical instructions with negated src entries</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Brian Paul (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: fix geometry shader memory leaks</li>
|
||||||
|
<li>st/mesa: fix geometry shader memory leak</li>
|
||||||
|
<li>gallium/u_blitter: fix some shader memory leaks</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Carl Worth (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 checksums for the 10.2.3 release</li>
|
||||||
|
<li>Update VERSION to 10.2.4</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Eric Anholt (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Generalize the pixel_x/y workaround for all UW types.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ilia Mirkin (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nv50/ir: retrieve shadow compare from first arg</li>
|
||||||
|
<li>nv50/ir: ignore bias for samplerCubeShadow on nv50</li>
|
||||||
|
<li>nvc0/ir: do quadops on the right texture coordinates for TXD</li>
|
||||||
|
<li>nvc0/ir: use manual TXD when offsets are involved</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jordan Justen (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Add auxiliary surface field #defines for Broadwell.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Kenneth Graunke (9):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Don't copy propagate abs into Broadwell logic instructions.</li>
|
||||||
|
<li>i965: Set execution size to 8 for instructions with force_sechalf set.</li>
|
||||||
|
<li>i965/fs: Set force_uncompressed and force_sechalf on samplepos setup.</li>
|
||||||
|
<li>i965/fs: Use WE_all for gl_SampleID header register munging.</li>
|
||||||
|
<li>i965: Add plumbing for Broadwell's auxiliary surface support.</li>
|
||||||
|
<li>i965: Drop SINT workaround for CMS layout on Broadwell.</li>
|
||||||
|
<li>i965: Hook up the MCS buffers in SURFACE_STATE on Broadwell.</li>
|
||||||
|
<li>i965: Add 2x MSAA support to the MCS allocation function.</li>
|
||||||
|
<li>i965: Enable compressed multisample support (CMS) on Broadwell.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallium: fix u_default_transfer_inline_write for textures</li>
|
||||||
|
<li>st/mesa: fix samplerCubeShadow with bias</li>
|
||||||
|
<li>radeonsi: fix samplerCubeShadow with bias</li>
|
||||||
|
<li>radeonsi: add support for TXB2</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Matt Turner (8):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965/vec4: Don't return void from a void function.</li>
|
||||||
|
<li>i965/vec4: Don't fix_math_operand() on Gen >= 8.</li>
|
||||||
|
<li>i965/fs: Don't fix_math_operand() on Gen >= 8.</li>
|
||||||
|
<li>i965/fs: Make try_constant_propagate() static.</li>
|
||||||
|
<li>i965/fs: Constant propagate into 2-src math instructions on Gen8.</li>
|
||||||
|
<li>i965/vec4: Constant propagate into 2-src math instructions on Gen8.</li>
|
||||||
|
<li>i965/fs: Don't use brw_imm_* unnecessarily.</li>
|
||||||
|
<li>i965/fs: Set correct number of regs_written for MCS fetches.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
188
docs/relnotes/10.2.5.html
Normal file
188
docs/relnotes/10.2.5.html
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
|
<title>Mesa Release Notes</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<h1>The Mesa 3D Graphics Library</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<iframe src="../contents.html"></iframe>
|
||||||
|
<div class="content">
|
||||||
|
|
||||||
|
<h1>Mesa 10.2.5 Release Notes / August 2, 2014</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.5 is a bug fix release which fixes bugs found since the 10.2.4 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.5 implements the OpenGL 3.3 API, but the version reported by
|
||||||
|
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||||
|
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||||
|
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||||
|
3.3 is <strong>only</strong> available if requested at context creation
|
||||||
|
because compatibility contexts are not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>SHA256 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
b4459f0bf7f4a3c8fb78ece3c9d2eac3d0e5bf38cb470f2a72705e744bd0310d MesaLib-10.2.5.tar.bz2
|
||||||
|
7b4dd0cb683f8c7dc48a3e7a315742bed58ddcd7b756c462aca4177bd1acdc79 MesaLib-10.2.5.tar.gz
|
||||||
|
6180565914fb238dd77ccdaff96b6155d9a6e1b3e981ebbf6a6851301b384fed MesaLib-10.2.5.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=80991">Bug 80991</a> - [BDW]Piglit spec_ARB_sample_shading_builtin-gl-sample-mask_2 fails</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>Abdiel Janulgue (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965/fs: Refactor check for potential copy propagated instructions.</li>
|
||||||
|
<li>i965/fs: skip copy-propate for logical instructions with negated src entries</li>
|
||||||
|
<li>i965/vec4: skip copy-propate for logical instructions with negated src entries</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Adel Gadllah (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i915: Fix up intelInitScreen2 for DRI3</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Anuj Phogat (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Fix z_offset computation in intel_miptree_unmap_depthstencil()</li>
|
||||||
|
<li>mesa: Don't use memcpy() in _mesa_texstore() for float depth texture data</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Brian Paul (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: fix geometry shader memory leaks</li>
|
||||||
|
<li>st/mesa: fix geometry shader memory leak</li>
|
||||||
|
<li>gallium/u_blitter: fix some shader memory leaks</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Carl Worth (6):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 checksums for the 10.2.3 release</li>
|
||||||
|
<li>Update VERSION to 10.2.4</li>
|
||||||
|
<li>Add release notes for 10.2.4</li>
|
||||||
|
<li>docs: Add SHA256 checksums for the 10.2.4 release</li>
|
||||||
|
<li>cherry-ignore: Ignore a few patches picked in the previous stable release</li>
|
||||||
|
<li>Update version to 10.2.5</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Christian König (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>radeonsi: fix order of r600_need_dma_space and r600_context_bo_reloc</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Eric Anholt (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Generalize the pixel_x/y workaround for all UW types.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ian Romanick (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: Don't allow GL_TEXTURE_BORDER queries outside compat profile</li>
|
||||||
|
<li>mesa: Don't allow GL_TEXTURE_{LUMINANCE,INTENSITY}_* queries outside compat profile</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ilia Mirkin (5):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nv50/ir: retrieve shadow compare from first arg</li>
|
||||||
|
<li>nv50/ir: ignore bias for samplerCubeShadow on nv50</li>
|
||||||
|
<li>nvc0/ir: do quadops on the right texture coordinates for TXD</li>
|
||||||
|
<li>nvc0/ir: use manual TXD when offsets are involved</li>
|
||||||
|
<li>nvc0: make sure that the local memory allocation is aligned to 0x10</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jason Ekstrand (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>main/format_pack: Fix a wrong datatype in pack_ubyte_R8G8_UNORM</li>
|
||||||
|
<li>main/get_hash_params: Add GL_SAMPLE_SHADING_ARB</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jordan Justen (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Add auxiliary surface field #defines for Broadwell.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>José Fonseca (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/wgl: Clamp wglChoosePixelFormatARB's output nNumFormats to nMaxFormats.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Kenneth Graunke (13):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Don't copy propagate abs into Broadwell logic instructions.</li>
|
||||||
|
<li>i965: Set execution size to 8 for instructions with force_sechalf set.</li>
|
||||||
|
<li>i965/fs: Set force_uncompressed and force_sechalf on samplepos setup.</li>
|
||||||
|
<li>i965/fs: Use WE_all for gl_SampleID header register munging.</li>
|
||||||
|
<li>i965: Add plumbing for Broadwell's auxiliary surface support.</li>
|
||||||
|
<li>i965: Drop SINT workaround for CMS layout on Broadwell.</li>
|
||||||
|
<li>i965: Hook up the MCS buffers in SURFACE_STATE on Broadwell.</li>
|
||||||
|
<li>i965: Add 2x MSAA support to the MCS allocation function.</li>
|
||||||
|
<li>i965: Enable compressed multisample support (CMS) on Broadwell.</li>
|
||||||
|
<li>i965: Add missing persample_shading field to brw_wm_debug_recompile.</li>
|
||||||
|
<li>i965/fs: Fix gl_SampleID for 2x MSAA and SIMD16 mode.</li>
|
||||||
|
<li>i965/fs: Fix gl_SampleMask handling for SIMD16 on Gen8+.</li>
|
||||||
|
<li>i965/fs: Set LastRT on the final FB write on Broadwell.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (14):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallium: fix u_default_transfer_inline_write for textures</li>
|
||||||
|
<li>st/mesa: fix samplerCubeShadow with bias</li>
|
||||||
|
<li>radeonsi: fix samplerCubeShadow with bias</li>
|
||||||
|
<li>radeonsi: add support for TXB2</li>
|
||||||
|
<li>r600g: switch SNORM conversion to DX and GLES behavior</li>
|
||||||
|
<li>radeonsi: fix CMASK and HTILE calculations for Hawaii</li>
|
||||||
|
<li>gallium/util: add a helper for calculating primitive count from vertex count</li>
|
||||||
|
<li>radeonsi: fix a hang with instancing on Hawaii</li>
|
||||||
|
<li>radeonsi: fix a hang with streamout on Hawaii</li>
|
||||||
|
<li>winsys/radeon: fix vram_size overflow with Hawaii</li>
|
||||||
|
<li>radeonsi: fix occlusion queries on Hawaii</li>
|
||||||
|
<li>r600g,radeonsi: switch all occurences of array_size to util_max_layer</li>
|
||||||
|
<li>radeonsi: fix build because of lack of draw_indirect infrastructure in 10.2</li>
|
||||||
|
<li>radeonsi: use DRAW_PREAMBLE on CIK</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Matt Turner (8):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965/vec4: Don't return void from a void function.</li>
|
||||||
|
<li>i965/vec4: Don't fix_math_operand() on Gen >= 8.</li>
|
||||||
|
<li>i965/fs: Don't fix_math_operand() on Gen >= 8.</li>
|
||||||
|
<li>i965/fs: Make try_constant_propagate() static.</li>
|
||||||
|
<li>i965/fs: Constant propagate into 2-src math instructions on Gen8.</li>
|
||||||
|
<li>i965/vec4: Constant propagate into 2-src math instructions on Gen8.</li>
|
||||||
|
<li>i965/fs: Don't use brw_imm_* unnecessarily.</li>
|
||||||
|
<li>i965/fs: Set correct number of regs_written for MCS fetches.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Thorsten Glaser (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nv50: fix build failure on m68k due to invalid struct alignment assumptions</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Tom Stellard (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>clover: Call end_query before getting timestamp result v2</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
118
docs/relnotes/10.2.6.html
Normal file
118
docs/relnotes/10.2.6.html
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
|
<title>Mesa Release Notes</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<h1>The Mesa 3D Graphics Library</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<iframe src="../contents.html"></iframe>
|
||||||
|
<div class="content">
|
||||||
|
|
||||||
|
<h1>Mesa 10.2.6 Release Notes / August 19, 2014</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.6 is a bug fix release which fixes bugs found since the 10.2.5 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.6 implements the OpenGL 3.3 API, but the version reported by
|
||||||
|
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||||
|
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||||
|
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||||
|
3.3 is <strong>only</strong> available if requested at context creation
|
||||||
|
because compatibility contexts are not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>SHA256 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
193314d2adba98e43697d726739ac46b4299aae324fa1821aa226890c28ac806 MesaLib-10.2.6.tar.bz2
|
||||||
|
f7a45a5977b485eb95ac024205c584a0c112fe3951c2313c797579bb16a7a448 MesaLib-10.2.6.tar.gz
|
||||||
|
6d086d6fcda8f317adfaaae40011decf2f2e2dc80819c4a7a77c76f73512e8d8 MesaLib-10.2.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=81450">Bug 81450</a> - [BDW]Piglit spec_glsl-1.30_execution_tex-miplevel-selection_textureGrad_1DArray cases intel_do_flush_locked failed</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>Anuj Phogat (15):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: Fix error condition for valid texture targets in glTexStorage* functions</li>
|
||||||
|
<li>mesa: Turn target_can_be_compressed() in to a utility function</li>
|
||||||
|
<li>mesa: Add error condition for using compressed internalformat in glTexStorage3D()</li>
|
||||||
|
<li>mesa: Fix condition for using compressed internalformat in glCompressedTexImage3D()</li>
|
||||||
|
<li>mesa: Add utility function _mesa_is_enum_format_snorm()</li>
|
||||||
|
<li>mesa: Don't allow snorm internal formats in glCopyTexImage*() in GLES3</li>
|
||||||
|
<li>mesa: Add a helper function _mesa_is_enum_format_unsized()</li>
|
||||||
|
<li>mesa: Add a gles3 error condition for sized internalformat in glCopyTexImage*()</li>
|
||||||
|
<li>mesa: Add gles3 error condition for GL_RGBA10_A2 buffer format in glCopyTexImage*()</li>
|
||||||
|
<li>mesa: Add utility function _mesa_is_enum_format_unorm()</li>
|
||||||
|
<li>mesa: Add gles3 condition for normalized internal formats in glCopyTexImage*()</li>
|
||||||
|
<li>mesa: Allow GL_TEXTURE_CUBE_MAP target with compressed internal formats</li>
|
||||||
|
<li>meta: Use _mesa_get_format_bits() to get the GL_RED_BITS</li>
|
||||||
|
<li>egl: Fix OpenGL ES version checks in _eglParseContextAttribList()</li>
|
||||||
|
<li>meta: Fix datatype computation in get_temp_image_type()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Brian Paul (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: fix assertion in _mesa_drawbuffers()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Carl Worth (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 sums to the 10.2.5 release notes</li>
|
||||||
|
<li>Update VERSION to 10.2.6</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ilia Mirkin (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa/st: only convert AND(a, NOT(b)) into MAD when not using native integers</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jordan Justen (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965/miptree: Layout 1D Array as 2D Array with height of 1</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Maarten Lankhorst (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>configure.ac: Do not require llvm on x32</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/mesa: fix blit-based partial TexSubImage for 1D arrays</li>
|
||||||
|
<li>radeon,r200: fix buffer validation after CS flush</li>
|
||||||
|
<li>radeonsi: fix a hang with instancing in Unigine Heaven/Valley on Hawaii</li>
|
||||||
|
<li>radeonsi: fix CMASK and HTILE allocation on Tahiti</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Pali Rohár (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>configure: check for dladdr via AC_CHECK_FUNC/AC_CHECK_LIB</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Roland Scheidegger (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallivm: fix up out-of-bounds level when using conformant out-of-bound behavior</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
211
docs/relnotes/10.2.7.html
Normal file
211
docs/relnotes/10.2.7.html
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
|
<title>Mesa Release Notes</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<h1>The Mesa 3D Graphics Library</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<iframe src="../contents.html"></iframe>
|
||||||
|
<div class="content">
|
||||||
|
|
||||||
|
<h1>Mesa 10.2.7 Release Notes / September 06, 2014</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.7 is a bug fix release which fixes bugs found since the 10.2.6 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.7 implements the OpenGL 3.3 API, but the version reported by
|
||||||
|
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||||
|
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||||
|
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||||
|
3.3 is <strong>only</strong> available if requested at context creation
|
||||||
|
because compatibility contexts are not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>SHA256 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
cb67dfaabf88acba29aa2cf0dd58ee17b21ebf9594f8d1226c41794da8de3e9d MesaLib-10.2.7.tar.gz
|
||||||
|
27b958063a4c002071f14ed45c7d2a1ee52cd85e4ac8876e8a1c273495a7d43f MesaLib-10.2.7.tar.bz2
|
||||||
|
a2796a2d5bbbc2edd22857ecc267cba68dfe5d0296f5d84ba7510877b216cc40 MesaLib-10.2.7.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=36193">Bug 36193</a> - [i965] brw_eu_emit.c:182: validate_reg: Assertion `execsize >= width' failed.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=66184">Bug 66184</a> - src/mesa/state_tracker/st_glsl_to_tgsi.cpp:3216:simplify_cmp: Assertion `inst->dst.index < 4096' failed.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=70441">Bug 70441</a> - [Gen4-5 clip] Piglit spec_OpenGL_1.1_polygon-offset hits (execsize >= width) assertion</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=76188">Bug 76188</a> - EGL_EXT_image_dma_buf_import fd ownership is incorrect</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=76789">Bug 76789</a> - [radeonsi] si_descriptors.c requires -std=gnu99 or -fms-extensions</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82139">Bug 82139</a> - [r600g, bisected] multiple ubo piglit regressions</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82255">Bug 82255</a> - [VP2] Chroma planes are vertically stretched during VDPAU playback</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82671">Bug 82671</a> - [r600g-evergreen][compute]Empty kernel execution causes crash</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82709">Bug 82709</a> - OpenCL not working on radeon hainan</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82814">Bug 82814</a> - glDrawBuffers(0, NULL) segfaults in _mesa_drawbuffers</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83079">Bug 83079</a> - [NVC0] Dota 2 (Linux native and Wine) crash with Nouveau Drivers</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83355">Bug 83355</a> - FTBFS: src/mesa/program/program_lexer.l:122:64: error: unknown type name 'YYSTYPE'</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>Adam Jackson (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>radeonsi: Don't use anonymous struct trick in atom tracking</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Alex Deucher (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>radeonsi: add new CIK pci ids</li>
|
||||||
|
<li>radeonsi: add new SI pci ids</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Andreas Boll (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>winsys/radeon: fix nop packet padding for hawaii</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Anuj Phogat (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Bail on vec4 copy propagation for scratch writes with source modifiers</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Brian Paul (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: fix NULL pointer deref bug in _mesa_drawbuffers()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Carl Worth (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 sums for the 10.2.6 release</li>
|
||||||
|
<li>Makefile: Switch from md5sums to sha256sums</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Dave Airlie (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: add missing parens in vec4 visitor</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Emil Velikov (17):</p>
|
||||||
|
<ul>
|
||||||
|
<li>configure.ac: bail out if building gallium_gbm without gallium_egl</li>
|
||||||
|
<li>android: gallium/nouveau: fix include folders, link against libstlport</li>
|
||||||
|
<li>android: egl/main: fixup the nouveau build</li>
|
||||||
|
<li>automake: gallium/freedreno: drop spurious include dirs</li>
|
||||||
|
<li>android: gallium/freedreno: add preliminary build</li>
|
||||||
|
<li>android: egl/main: add/enable freedreno</li>
|
||||||
|
<li>android: gallium/auxiliary: drop log2/log2f redefitions</li>
|
||||||
|
<li>android: drop HAL_PIXEL_FORMAT_RGBA_{5551,4444}</li>
|
||||||
|
<li>android: glsl: the stlport over the limited Android STL</li>
|
||||||
|
<li>android: dri/i915: do not build an 'empty' driver</li>
|
||||||
|
<li>cherry-ignore: remove patch that lacking previous dependencies</li>
|
||||||
|
<li>cherry-ignore: PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE is not it 10.2</li>
|
||||||
|
<li>cherry-ignore: drop whitespace fix</li>
|
||||||
|
<li>cherry-ignore: reject a15088338eb</li>
|
||||||
|
<li>get-pick-list.sh: Require explicit "10.2" for nominating stable patches</li>
|
||||||
|
<li>mesa: fix make tarballs</li>
|
||||||
|
<li>Update VERSION to 10.2.7</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ian Romanick (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: Handle uninitialized textures like other textures in get_tex_level_parameter_image</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ilia Mirkin (9):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nouveau: make sure to invalidate any vbo state as well</li>
|
||||||
|
<li>nouveau: don't keep stale pointer to free'd data</li>
|
||||||
|
<li>nvc0/ir: avoid infinite recursion when finding first uses of tex</li>
|
||||||
|
<li>nv50: zero out unbound samplers</li>
|
||||||
|
<li>nvc0: don't make 1d staging textures linear</li>
|
||||||
|
<li>nv50/ir: avoid creating instructions that can't be emitted</li>
|
||||||
|
<li>nv50: set the miptree address when clearing bo's in vp2 init</li>
|
||||||
|
<li>nv50: mt address may not be the underlying bo's start address</li>
|
||||||
|
<li>nv50: attach the buffer bo to the miptree structures</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jan Vesely (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallivm: Fix build with latest LLVM</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>José Fonseca (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: Move declaration to top of block.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Kenneth Graunke (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965/vec4: Set NoMask for GS_OPCODE_SET_VERTEX_COUNT on Gen8+.</li>
|
||||||
|
<li>i965/vec4: Respect ir->force_writemask_all in Gen8 code generation.</li>
|
||||||
|
<li>i965/clip: Fix brw_clip_unfilled.c/compute_offset's assembly.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>r600g: fix constant buffer fetches</li>
|
||||||
|
<li>radeonsi: save scissor state and sample mask for u_blitter</li>
|
||||||
|
<li>glsl_to_tgsi: allocate and enlarge arrays for temporaries on demand</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Paulo Sergio Travaglia (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>android: gallium/radeon: attempt to fix the android build</li>
|
||||||
|
<li>android: egl/main: resolve radeon linking issues</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Pekka Paalanen (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>egl_dri2: fix EXT_image_dma_buf_import fds</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Robert Bragg (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>meta: save and restore swizzle for _GenerateMipmap</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Tom Stellard (7):</p>
|
||||||
|
<ul>
|
||||||
|
<li>radeon/compute: Fix reported values for MAX_GLOBAL_SIZE and MAX_MEM_ALLOC_SIZE</li>
|
||||||
|
<li>radeonsi/compute: Update reference counts for buffers in si_set_global_binding()</li>
|
||||||
|
<li>radeonsi/compute: Call si_pm4_free_state() after emitting compute state</li>
|
||||||
|
<li>clover: Flush the command queue in clReleaseCommandQueue()</li>
|
||||||
|
<li>radeon: Add work-around for missing Hainan support in clang < 3.6 v2</li>
|
||||||
|
<li>pipe-loader: Fix memory leak v2</li>
|
||||||
|
<li>r600g/compute: Don't initialize vertex_buffer_state masks to 0x2</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Vinson Lee (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallivm: Fix build with LLVM >= 3.6 r215967.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
130
docs/relnotes/10.2.8.html
Normal file
130
docs/relnotes/10.2.8.html
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
|
<title>Mesa Release Notes</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<h1>The Mesa 3D Graphics Library</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<iframe src="../contents.html"></iframe>
|
||||||
|
<div class="content">
|
||||||
|
|
||||||
|
<h1>Mesa 10.2.8 Release Notes / September 19, 2014</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.8 is a bug fix release which fixes bugs found since the 10.2.7 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.8 implements the OpenGL 3.3 API, but the version reported by
|
||||||
|
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||||
|
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||||
|
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||||
|
3.3 is <strong>only</strong> available if requested at context creation
|
||||||
|
because compatibility contexts are not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>SHA256 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
4c5a25ccaf1a9734bbd10d62a1420cc8fd35a1060ce679f2fc846769a25fbeec MesaLib-10.2.8.tar.gz
|
||||||
|
1ef9ad3f241788d454f2ff8c9d65b6849dfc31c8fe91f70fd2930b81c8af1398 MesaLib-10.2.8.tar.bz2
|
||||||
|
d26218da3b44734b1d555267b4c63c48803c4c8b14d2bc53071be57014da37fa MesaLib-10.2.8.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=77493">Bug 77493</a> - lp_test_arit fails with llvm >= llvm-3.5svn r206094</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82539">Bug 82539</a> - vmw_screen_dri.lo In file included from vmw_screen_dri.c:41: vmwgfx_drm.h:32:17: error: drm.h: No such file or directory</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82882">Bug 82882</a> - [swrast] piglit glsl-fs-uniform-bool-1 regression</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83432">Bug 83432</a> - r600_query.c:269:r600_emit_query_end: Assertion `ctx->num_pipelinestat_queries > 0' failed [Gallium HUD]</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83567">Bug 83567</a> - Mesa 10.2.6 does not compile with llvm 3.5</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83735">Bug 83735</a> - [mesa-10.2.x] broken with llvm-3.5 and old CPUs</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
<p>Aaron Watry (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallivm: Fix build after LLVM commit 211259</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Christoph Bumiller (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nv50/ir/util: fix BitSet issues</li>
|
||||||
|
<li>nvc0/ir: clarify recursion fix to finding first tex uses</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Emil Velikov (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 sums for the 10.2.7 release</li>
|
||||||
|
<li>configure: bail out if building svga without libdrm</li>
|
||||||
|
<li>Update VERSION to 10.2.8</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ilia Mirkin (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nv50/ir: avoid array overrun when checking for supported mods</li>
|
||||||
|
<li>nouveau: only enable the depth test if there actually is a depth buffer</li>
|
||||||
|
<li>nouveau: only enable stencil func if the visual has stencil bits</li>
|
||||||
|
<li>nouveau: change internal variables to avoid conflicts with macro args</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jonathan Gray (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>configure.ac: strip _GNU_SOURCE from llvm-config output</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>José Fonseca (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallivm: Disable workaround for PR12833 on LLVM 3.2+.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Maarten Lankhorst (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nouveau: re-allocate bo's on overflow</li>
|
||||||
|
<li>nouveau: fix MPEG4 hw decoding</li>
|
||||||
|
<li>nouveau: rework reference frame handling</li>
|
||||||
|
<li>nouveau: remove unneeded assert</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>r600g,radeonsi: make sure there's enough CS space before resuming queries</li>
|
||||||
|
<li>mesa: set UniformBooleanTrue = 1.0f by default</li>
|
||||||
|
<li>st/mesa: use 1.0f as boolean true on drivers without integer support</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Richard Sandiford (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallivm: Fix uses of 2^24</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Roland Scheidegger (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallivm: set mcpu when initializing llvm execution engine</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Thomas Hellstrom (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>winsys/svga: Fix incorrect type usage in IOCTL v2</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
101
docs/relnotes/10.2.9.html
Normal file
101
docs/relnotes/10.2.9.html
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
|
<title>Mesa Release Notes</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<h1>The Mesa 3D Graphics Library</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<iframe src="../contents.html"></iframe>
|
||||||
|
<div class="content">
|
||||||
|
|
||||||
|
<h1>Mesa 10.2.9 Release Notes / October 12, 2014</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.9 is a bug fix release which fixes bugs found since the 10.2.8 release.
|
||||||
|
This is the final planned release for the 10.2 branch.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.2.9 implements the OpenGL 3.3 API, but the version reported by
|
||||||
|
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||||
|
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||||
|
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||||
|
3.3 is <strong>only</strong> available if requested at context creation
|
||||||
|
because compatibility contexts are not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>SHA256 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
f8d62857eed8f604a57710c58a8ffcfb8dab2dc4977ec27c956c7c4fd14032f6 MesaLib-10.2.9.tar.gz
|
||||||
|
f6031f8b7113a92325b60635c504c510490eebb2e707119bbff7bd86aa34657d MesaLib-10.2.9.tar.bz2
|
||||||
|
11c0ef4f3308fc29d9f15a77fd8f4842a946fce9e830250a1c95b171a446171a MesaLib-10.2.9.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=79462">Bug 79462</a> - [NVC0/Codegen] Shader compilation falis in spill logic</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83570">Bug 83570</a> - Glyphy demo throws unhandled Integer division by zero exception</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
<p>Andreas Pokorny (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>egl/drm: expose KHR_image_pixmap extension</li>
|
||||||
|
<li>i915: Fix black buffers when importing prime fds</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Emil Velikov (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 sums for the 10.2.8 release</li>
|
||||||
|
<li>Update VERSION to 10.2.9</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ilia Mirkin (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nv50/ir: avoid deleting pseudo instructions too early</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>radeonsi: release GS rings at context destruction</li>
|
||||||
|
<li>radeonsi: properly destroy the GS copy shader and scratch_bo for compute</li>
|
||||||
|
<li>st/dri: remove GALLIUM_MSAA and __GL_FSAA_MODE environment variables</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Roland Scheidegger (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallivm: fix idiv</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Thomas Hellstrom (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/xa: Fix regression in xa_yuv_planar_blit()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Tom Stellard (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>configure.ac: Compute LLVM_VERSION_PATCH using llvm-config</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>rconde (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallivm,tgsi: fix idiv by zero crash</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -518,7 +518,7 @@ typedef struct {
|
|||||||
unsigned long serial; /* # of last request processed by server */
|
unsigned long serial; /* # of last request processed by server */
|
||||||
Bool send_event; /* true if this came from a SendEvent request */
|
Bool send_event; /* true if this came from a SendEvent request */
|
||||||
Display *display; /* Display the event was read from */
|
Display *display; /* Display the event was read from */
|
||||||
GLXDrawable drawable; /* drawable on which event was requested in event mask */
|
Drawable drawable; /* drawable on which event was requested in event mask */
|
||||||
int event_type;
|
int event_type;
|
||||||
int64_t ust;
|
int64_t ust;
|
||||||
int64_t msc;
|
int64_t msc;
|
||||||
|
@@ -91,24 +91,24 @@ CHIPSET(0x0F32, byt, "Intel(R) Bay Trail")
|
|||||||
CHIPSET(0x0F33, byt, "Intel(R) Bay Trail")
|
CHIPSET(0x0F33, byt, "Intel(R) Bay Trail")
|
||||||
CHIPSET(0x0157, byt, "Intel(R) Bay Trail")
|
CHIPSET(0x0157, byt, "Intel(R) Bay Trail")
|
||||||
CHIPSET(0x0155, byt, "Intel(R) Bay Trail")
|
CHIPSET(0x0155, byt, "Intel(R) Bay Trail")
|
||||||
CHIPSET(0x1602, bdw_gt1, "Intel(R) Broadwell")
|
CHIPSET(0x1602, bdw_gt1, "Intel(R) Broadwell GT1")
|
||||||
CHIPSET(0x1606, bdw_gt1, "Intel(R) Broadwell")
|
CHIPSET(0x1606, bdw_gt1, "Intel(R) Broadwell GT1")
|
||||||
CHIPSET(0x160A, bdw_gt1, "Intel(R) Broadwell")
|
CHIPSET(0x160A, bdw_gt1, "Intel(R) Broadwell GT1")
|
||||||
CHIPSET(0x160B, bdw_gt1, "Intel(R) Broadwell")
|
CHIPSET(0x160B, bdw_gt1, "Intel(R) Broadwell GT1")
|
||||||
CHIPSET(0x160D, bdw_gt1, "Intel(R) Broadwell")
|
CHIPSET(0x160D, bdw_gt1, "Intel(R) Broadwell GT1")
|
||||||
CHIPSET(0x160E, bdw_gt1, "Intel(R) Broadwell")
|
CHIPSET(0x160E, bdw_gt1, "Intel(R) Broadwell GT1")
|
||||||
CHIPSET(0x1612, bdw_gt2, "Intel(R) Broadwell")
|
CHIPSET(0x1612, bdw_gt2, "Intel(R) HD Graphics 5600 (Broadwell GT2)")
|
||||||
CHIPSET(0x1616, bdw_gt2, "Intel(R) Broadwell")
|
CHIPSET(0x1616, bdw_gt2, "Intel(R) HD Graphics 5500 (Broadwell GT2)")
|
||||||
CHIPSET(0x161A, bdw_gt2, "Intel(R) Broadwell")
|
CHIPSET(0x161A, bdw_gt2, "Intel(R) Broadwell GT2")
|
||||||
CHIPSET(0x161B, bdw_gt2, "Intel(R) Broadwell")
|
CHIPSET(0x161B, bdw_gt2, "Intel(R) Broadwell GT2")
|
||||||
CHIPSET(0x161D, bdw_gt2, "Intel(R) Broadwell")
|
CHIPSET(0x161D, bdw_gt2, "Intel(R) Broadwell GT2")
|
||||||
CHIPSET(0x161E, bdw_gt2, "Intel(R) Broadwell")
|
CHIPSET(0x161E, bdw_gt2, "Intel(R) HD Graphics 5300 (Broadwell GT2)")
|
||||||
CHIPSET(0x1622, bdw_gt3, "Intel(R) Broadwell")
|
CHIPSET(0x1622, bdw_gt3, "Intel(R) Iris Pro 6200 (Broadwell GT3e)")
|
||||||
CHIPSET(0x1626, bdw_gt3, "Intel(R) Broadwell")
|
CHIPSET(0x1626, bdw_gt3, "Intel(R) HD Graphics 6000 (Broadwell GT3)")
|
||||||
CHIPSET(0x162A, bdw_gt3, "Intel(R) Broadwell")
|
CHIPSET(0x162A, bdw_gt3, "Intel(R) Iris Pro P6300 (Broadwell GT3e)")
|
||||||
CHIPSET(0x162B, bdw_gt3, "Intel(R) Broadwell")
|
CHIPSET(0x162B, bdw_gt3, "Intel(R) Iris 6100 (Broadwell GT3)")
|
||||||
CHIPSET(0x162D, bdw_gt3, "Intel(R) Broadwell")
|
CHIPSET(0x162D, bdw_gt3, "Intel(R) Broadwell GT3")
|
||||||
CHIPSET(0x162E, bdw_gt3, "Intel(R) Broadwell")
|
CHIPSET(0x162E, bdw_gt3, "Intel(R) Broadwell GT3")
|
||||||
CHIPSET(0x22B0, chv, "Intel(R) Cherryview")
|
CHIPSET(0x22B0, chv, "Intel(R) Cherryview")
|
||||||
CHIPSET(0x22B1, chv, "Intel(R) Cherryview")
|
CHIPSET(0x22B1, chv, "Intel(R) Cherryview")
|
||||||
CHIPSET(0x22B2, chv, "Intel(R) Cherryview")
|
CHIPSET(0x22B2, chv, "Intel(R) Cherryview")
|
||||||
|
@@ -38,6 +38,7 @@ CHIPSET(0x6828, VERDE_6828, VERDE)
|
|||||||
CHIPSET(0x6829, VERDE_6829, VERDE)
|
CHIPSET(0x6829, VERDE_6829, VERDE)
|
||||||
CHIPSET(0x682A, VERDE_682A, VERDE)
|
CHIPSET(0x682A, VERDE_682A, VERDE)
|
||||||
CHIPSET(0x682B, VERDE_682B, VERDE)
|
CHIPSET(0x682B, VERDE_682B, VERDE)
|
||||||
|
CHIPSET(0x682C, VERDE_682C, VERDE)
|
||||||
CHIPSET(0x682D, VERDE_682D, VERDE)
|
CHIPSET(0x682D, VERDE_682D, VERDE)
|
||||||
CHIPSET(0x682F, VERDE_682F, VERDE)
|
CHIPSET(0x682F, VERDE_682F, VERDE)
|
||||||
CHIPSET(0x6830, VERDE_6830, VERDE)
|
CHIPSET(0x6830, VERDE_6830, VERDE)
|
||||||
@@ -54,8 +55,11 @@ CHIPSET(0x6600, OLAND_6600, OLAND)
|
|||||||
CHIPSET(0x6601, OLAND_6601, OLAND)
|
CHIPSET(0x6601, OLAND_6601, OLAND)
|
||||||
CHIPSET(0x6602, OLAND_6602, OLAND)
|
CHIPSET(0x6602, OLAND_6602, OLAND)
|
||||||
CHIPSET(0x6603, OLAND_6603, OLAND)
|
CHIPSET(0x6603, OLAND_6603, OLAND)
|
||||||
|
CHIPSET(0x6604, OLAND_6604, OLAND)
|
||||||
|
CHIPSET(0x6605, OLAND_6605, OLAND)
|
||||||
CHIPSET(0x6606, OLAND_6606, OLAND)
|
CHIPSET(0x6606, OLAND_6606, OLAND)
|
||||||
CHIPSET(0x6607, OLAND_6607, OLAND)
|
CHIPSET(0x6607, OLAND_6607, OLAND)
|
||||||
|
CHIPSET(0x6608, OLAND_6608, OLAND)
|
||||||
CHIPSET(0x6610, OLAND_6610, OLAND)
|
CHIPSET(0x6610, OLAND_6610, OLAND)
|
||||||
CHIPSET(0x6611, OLAND_6611, OLAND)
|
CHIPSET(0x6611, OLAND_6611, OLAND)
|
||||||
CHIPSET(0x6613, OLAND_6613, OLAND)
|
CHIPSET(0x6613, OLAND_6613, OLAND)
|
||||||
@@ -73,6 +77,8 @@ CHIPSET(0x666F, HAINAN_666F, HAINAN)
|
|||||||
|
|
||||||
CHIPSET(0x6640, BONAIRE_6640, BONAIRE)
|
CHIPSET(0x6640, BONAIRE_6640, BONAIRE)
|
||||||
CHIPSET(0x6641, BONAIRE_6641, BONAIRE)
|
CHIPSET(0x6641, BONAIRE_6641, BONAIRE)
|
||||||
|
CHIPSET(0x6646, BONAIRE_6646, BONAIRE)
|
||||||
|
CHIPSET(0x6647, BONAIRE_6647, BONAIRE)
|
||||||
CHIPSET(0x6649, BONAIRE_6649, BONAIRE)
|
CHIPSET(0x6649, BONAIRE_6649, BONAIRE)
|
||||||
CHIPSET(0x6650, BONAIRE_6650, BONAIRE)
|
CHIPSET(0x6650, BONAIRE_6650, BONAIRE)
|
||||||
CHIPSET(0x6651, BONAIRE_6651, BONAIRE)
|
CHIPSET(0x6651, BONAIRE_6651, BONAIRE)
|
||||||
@@ -132,6 +138,7 @@ CHIPSET(0x1313, KAVERI_1313, KAVERI)
|
|||||||
CHIPSET(0x1315, KAVERI_1315, KAVERI)
|
CHIPSET(0x1315, KAVERI_1315, KAVERI)
|
||||||
CHIPSET(0x1316, KAVERI_1316, KAVERI)
|
CHIPSET(0x1316, KAVERI_1316, KAVERI)
|
||||||
CHIPSET(0x1317, KAVERI_1317, KAVERI)
|
CHIPSET(0x1317, KAVERI_1317, KAVERI)
|
||||||
|
CHIPSET(0x1318, KAVERI_1318, KAVERI)
|
||||||
CHIPSET(0x131B, KAVERI_131B, KAVERI)
|
CHIPSET(0x131B, KAVERI_131B, KAVERI)
|
||||||
CHIPSET(0x131C, KAVERI_131C, KAVERI)
|
CHIPSET(0x131C, KAVERI_131C, KAVERI)
|
||||||
CHIPSET(0x131D, KAVERI_131D, KAVERI)
|
CHIPSET(0x131D, KAVERI_131D, KAVERI)
|
||||||
|
@@ -1663,36 +1663,13 @@ dri2_check_dma_buf_format(const _EGLImageAttribs *attrs)
|
|||||||
/**
|
/**
|
||||||
* The spec says:
|
* The spec says:
|
||||||
*
|
*
|
||||||
* "If eglCreateImageKHR is successful for a EGL_LINUX_DMA_BUF_EXT target,
|
* "If eglCreateImageKHR is successful for a EGL_LINUX_DMA_BUF_EXT target, the
|
||||||
* the EGL takes ownership of the file descriptor and is responsible for
|
* EGL will take a reference to the dma_buf(s) which it will release at any
|
||||||
* closing it, which it may do at any time while the EGLDisplay is
|
* time while the EGLDisplay is initialized. It is the responsibility of the
|
||||||
* initialized."
|
* application to close the dma_buf file descriptors."
|
||||||
|
*
|
||||||
|
* Therefore we must never close or otherwise modify the file descriptors.
|
||||||
*/
|
*/
|
||||||
static void
|
|
||||||
dri2_take_dma_buf_ownership(const int *fds, unsigned num_fds)
|
|
||||||
{
|
|
||||||
int already_closed[num_fds];
|
|
||||||
unsigned num_closed = 0;
|
|
||||||
unsigned i, j;
|
|
||||||
|
|
||||||
for (i = 0; i < num_fds; ++i) {
|
|
||||||
/**
|
|
||||||
* The same file descriptor can be referenced multiple times in case more
|
|
||||||
* than one plane is found in the same buffer, just with a different
|
|
||||||
* offset.
|
|
||||||
*/
|
|
||||||
for (j = 0; j < num_closed; ++j) {
|
|
||||||
if (already_closed[j] == fds[i])
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (j == num_closed) {
|
|
||||||
close(fds[i]);
|
|
||||||
already_closed[num_closed++] = fds[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static _EGLImage *
|
static _EGLImage *
|
||||||
dri2_create_image_dma_buf(_EGLDisplay *disp, _EGLContext *ctx,
|
dri2_create_image_dma_buf(_EGLDisplay *disp, _EGLContext *ctx,
|
||||||
EGLClientBuffer buffer, const EGLint *attr_list)
|
EGLClientBuffer buffer, const EGLint *attr_list)
|
||||||
@@ -1755,8 +1732,6 @@ dri2_create_image_dma_buf(_EGLDisplay *disp, _EGLContext *ctx,
|
|||||||
return EGL_NO_IMAGE_KHR;
|
return EGL_NO_IMAGE_KHR;
|
||||||
|
|
||||||
res = dri2_create_image_from_dri(disp, dri_image);
|
res = dri2_create_image_from_dri(disp, dri_image);
|
||||||
if (res)
|
|
||||||
dri2_take_dma_buf_ownership(fds, num_fds);
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@@ -54,8 +54,6 @@ get_format_bpp(int native)
|
|||||||
bpp = 3;
|
bpp = 3;
|
||||||
break;
|
break;
|
||||||
case HAL_PIXEL_FORMAT_RGB_565:
|
case HAL_PIXEL_FORMAT_RGB_565:
|
||||||
case HAL_PIXEL_FORMAT_RGBA_5551:
|
|
||||||
case HAL_PIXEL_FORMAT_RGBA_4444:
|
|
||||||
bpp = 2;
|
bpp = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -371,8 +369,6 @@ dri2_create_image_android_native_buffer(_EGLDisplay *disp, _EGLContext *ctx,
|
|||||||
format = __DRI_IMAGE_FORMAT_XBGR8888;
|
format = __DRI_IMAGE_FORMAT_XBGR8888;
|
||||||
break;
|
break;
|
||||||
case HAL_PIXEL_FORMAT_RGB_888:
|
case HAL_PIXEL_FORMAT_RGB_888:
|
||||||
case HAL_PIXEL_FORMAT_RGBA_5551:
|
|
||||||
case HAL_PIXEL_FORMAT_RGBA_4444:
|
|
||||||
/* unsupported */
|
/* unsupported */
|
||||||
default:
|
default:
|
||||||
_eglLog(_EGL_WARNING, "unsupported native buffer format 0x%x", buf->format);
|
_eglLog(_EGL_WARNING, "unsupported native buffer format 0x%x", buf->format);
|
||||||
|
@@ -572,6 +572,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
disp->Extensions.EXT_buffer_age = EGL_TRUE;
|
disp->Extensions.EXT_buffer_age = EGL_TRUE;
|
||||||
|
disp->Extensions.KHR_image_pixmap = EGL_TRUE;
|
||||||
|
|
||||||
#ifdef HAVE_WAYLAND_PLATFORM
|
#ifdef HAVE_WAYLAND_PLATFORM
|
||||||
disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
|
disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
|
||||||
|
@@ -95,6 +95,12 @@ gallium_DRIVERS :=
|
|||||||
# swrast
|
# swrast
|
||||||
gallium_DRIVERS += libmesa_pipe_softpipe libmesa_winsys_sw_android
|
gallium_DRIVERS += libmesa_pipe_softpipe libmesa_winsys_sw_android
|
||||||
|
|
||||||
|
# freedreno
|
||||||
|
ifneq ($(filter freedreno, $(MESA_GPU_DRIVERS)),)
|
||||||
|
gallium_DRIVERS += libmesa_winsys_freedreno libmesa_pipe_freedreno
|
||||||
|
LOCAL_SHARED_LIBRARIES += libdrm_freedreno
|
||||||
|
endif
|
||||||
|
|
||||||
# i915g
|
# i915g
|
||||||
ifneq ($(filter i915g, $(MESA_GPU_DRIVERS)),)
|
ifneq ($(filter i915g, $(MESA_GPU_DRIVERS)),)
|
||||||
gallium_DRIVERS += libmesa_winsys_i915 libmesa_pipe_i915
|
gallium_DRIVERS += libmesa_winsys_i915 libmesa_pipe_i915
|
||||||
@@ -109,28 +115,29 @@ endif
|
|||||||
|
|
||||||
# nouveau
|
# nouveau
|
||||||
ifneq ($(filter nouveau, $(MESA_GPU_DRIVERS)),)
|
ifneq ($(filter nouveau, $(MESA_GPU_DRIVERS)),)
|
||||||
gallium_DRIVERS += \
|
gallium_DRIVERS += libmesa_winsys_nouveau libmesa_pipe_nouveau
|
||||||
libmesa_winsys_nouveau \
|
|
||||||
libmesa_pipe_nvfx \
|
|
||||||
libmesa_pipe_nv50 \
|
|
||||||
libmesa_pipe_nvc0 \
|
|
||||||
libmesa_pipe_nouveau
|
|
||||||
LOCAL_SHARED_LIBRARIES += libdrm_nouveau
|
LOCAL_SHARED_LIBRARIES += libdrm_nouveau
|
||||||
|
LOCAL_SHARED_LIBRARIES += libstlport
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# r300g/r600g/radeonsi
|
# r300g/r600g/radeonsi
|
||||||
ifneq ($(filter r300g r600g radeonsi, $(MESA_GPU_DRIVERS)),)
|
ifneq ($(filter r300g r600g radeonsi, $(MESA_GPU_DRIVERS)),)
|
||||||
gallium_DRIVERS += libmesa_winsys_radeon
|
gallium_DRIVERS += libmesa_winsys_radeon
|
||||||
|
LOCAL_SHARED_LIBRARIES += libdrm_radeon
|
||||||
ifneq ($(filter r300g, $(MESA_GPU_DRIVERS)),)
|
ifneq ($(filter r300g, $(MESA_GPU_DRIVERS)),)
|
||||||
gallium_DRIVERS += libmesa_pipe_r300
|
gallium_DRIVERS += libmesa_pipe_r300
|
||||||
endif
|
endif # r300g
|
||||||
|
ifneq ($(filter r600g radeonsi, $(MESA_GPU_DRIVERS)),)
|
||||||
ifneq ($(filter r600g, $(MESA_GPU_DRIVERS)),)
|
ifneq ($(filter r600g, $(MESA_GPU_DRIVERS)),)
|
||||||
gallium_DRIVERS += libmesa_pipe_r600
|
gallium_DRIVERS += libmesa_pipe_r600
|
||||||
endif
|
LOCAL_SHARED_LIBRARIES += libstlport
|
||||||
|
endif # r600g
|
||||||
ifneq ($(filter radeonsi, $(MESA_GPU_DRIVERS)),)
|
ifneq ($(filter radeonsi, $(MESA_GPU_DRIVERS)),)
|
||||||
gallium_DRIVERS += libmesa_pipe_radeonsi
|
gallium_DRIVERS += libmesa_pipe_radeonsi
|
||||||
endif
|
endif # radeonsi
|
||||||
endif
|
gallium_DRIVERS += libmesa_pipe_radeon
|
||||||
|
endif # r600g || radeonsi
|
||||||
|
endif # r300g || r600g || radeonsi
|
||||||
|
|
||||||
# vmwgfx
|
# vmwgfx
|
||||||
ifneq ($(filter vmwgfx, $(MESA_GPU_DRIVERS)),)
|
ifneq ($(filter vmwgfx, $(MESA_GPU_DRIVERS)),)
|
||||||
|
@@ -322,11 +322,14 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay *dpy,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
default:
|
|
||||||
/* Don't put additional version checks here. We don't know that
|
/* Don't put additional version checks here. We don't know that
|
||||||
* there won't be versions > 3.0.
|
* there won't be versions > 3.0.
|
||||||
*/
|
*/
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
err = EGL_BAD_MATCH;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -34,6 +34,11 @@ SUBDIRS := \
|
|||||||
# swrast
|
# swrast
|
||||||
SUBDIRS += winsys/sw/android drivers/softpipe
|
SUBDIRS += winsys/sw/android drivers/softpipe
|
||||||
|
|
||||||
|
# freedreno
|
||||||
|
ifneq ($(filter freedreno, $(MESA_GPU_DRIVERS)),)
|
||||||
|
SUBDIRS += winsys/freedreno/drm drivers/freedreno
|
||||||
|
endif
|
||||||
|
|
||||||
# i915g
|
# i915g
|
||||||
ifneq ($(filter i915g, $(MESA_GPU_DRIVERS)),)
|
ifneq ($(filter i915g, $(MESA_GPU_DRIVERS)),)
|
||||||
SUBDIRS += winsys/i915/drm drivers/i915
|
SUBDIRS += winsys/i915/drm drivers/i915
|
||||||
@@ -57,6 +62,8 @@ SUBDIRS += winsys/radeon/drm
|
|||||||
ifneq ($(filter r300g, $(MESA_GPU_DRIVERS)),)
|
ifneq ($(filter r300g, $(MESA_GPU_DRIVERS)),)
|
||||||
SUBDIRS += drivers/r300
|
SUBDIRS += drivers/r300
|
||||||
endif
|
endif
|
||||||
|
ifneq ($(filter r600g radeonsi, $(MESA_GPU_DRIVERS)),)
|
||||||
|
SUBDIRS += drivers/radeon
|
||||||
ifneq ($(filter r600g, $(MESA_GPU_DRIVERS)),)
|
ifneq ($(filter r600g, $(MESA_GPU_DRIVERS)),)
|
||||||
SUBDIRS += drivers/r600
|
SUBDIRS += drivers/r600
|
||||||
endif
|
endif
|
||||||
@@ -64,6 +71,7 @@ ifneq ($(filter radeonsi, $(MESA_GPU_DRIVERS)),)
|
|||||||
SUBDIRS += drivers/radeonsi
|
SUBDIRS += drivers/radeonsi
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
# vmwgfx
|
# vmwgfx
|
||||||
ifneq ($(filter vmwgfx, $(MESA_GPU_DRIVERS)),)
|
ifneq ($(filter vmwgfx, $(MESA_GPU_DRIVERS)),)
|
||||||
|
@@ -493,7 +493,7 @@ draw_stats_clipper_primitives(struct draw_context *draw,
|
|||||||
static INLINE unsigned
|
static INLINE unsigned
|
||||||
draw_clamp_viewport_idx(int idx)
|
draw_clamp_viewport_idx(int idx)
|
||||||
{
|
{
|
||||||
return ((PIPE_MAX_VIEWPORTS > idx || idx < 0) ? idx : 0);
|
return ((PIPE_MAX_VIEWPORTS > idx && idx >= 0) ? idx : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1852,7 +1852,7 @@ lp_build_trunc(struct lp_build_context *bld,
|
|||||||
const struct lp_type type = bld->type;
|
const struct lp_type type = bld->type;
|
||||||
struct lp_type inttype;
|
struct lp_type inttype;
|
||||||
struct lp_build_context intbld;
|
struct lp_build_context intbld;
|
||||||
LLVMValueRef cmpval = lp_build_const_vec(bld->gallivm, type, 2^24);
|
LLVMValueRef cmpval = lp_build_const_vec(bld->gallivm, type, 1<<24);
|
||||||
LLVMValueRef trunc, res, anosign, mask;
|
LLVMValueRef trunc, res, anosign, mask;
|
||||||
LLVMTypeRef int_vec_type = bld->int_vec_type;
|
LLVMTypeRef int_vec_type = bld->int_vec_type;
|
||||||
LLVMTypeRef vec_type = bld->vec_type;
|
LLVMTypeRef vec_type = bld->vec_type;
|
||||||
@@ -1907,7 +1907,7 @@ lp_build_round(struct lp_build_context *bld,
|
|||||||
const struct lp_type type = bld->type;
|
const struct lp_type type = bld->type;
|
||||||
struct lp_type inttype;
|
struct lp_type inttype;
|
||||||
struct lp_build_context intbld;
|
struct lp_build_context intbld;
|
||||||
LLVMValueRef cmpval = lp_build_const_vec(bld->gallivm, type, 2^24);
|
LLVMValueRef cmpval = lp_build_const_vec(bld->gallivm, type, 1<<24);
|
||||||
LLVMValueRef res, anosign, mask;
|
LLVMValueRef res, anosign, mask;
|
||||||
LLVMTypeRef int_vec_type = bld->int_vec_type;
|
LLVMTypeRef int_vec_type = bld->int_vec_type;
|
||||||
LLVMTypeRef vec_type = bld->vec_type;
|
LLVMTypeRef vec_type = bld->vec_type;
|
||||||
@@ -1960,7 +1960,7 @@ lp_build_floor(struct lp_build_context *bld,
|
|||||||
const struct lp_type type = bld->type;
|
const struct lp_type type = bld->type;
|
||||||
struct lp_type inttype;
|
struct lp_type inttype;
|
||||||
struct lp_build_context intbld;
|
struct lp_build_context intbld;
|
||||||
LLVMValueRef cmpval = lp_build_const_vec(bld->gallivm, type, 2^24);
|
LLVMValueRef cmpval = lp_build_const_vec(bld->gallivm, type, 1<<24);
|
||||||
LLVMValueRef trunc, res, anosign, mask;
|
LLVMValueRef trunc, res, anosign, mask;
|
||||||
LLVMTypeRef int_vec_type = bld->int_vec_type;
|
LLVMTypeRef int_vec_type = bld->int_vec_type;
|
||||||
LLVMTypeRef vec_type = bld->vec_type;
|
LLVMTypeRef vec_type = bld->vec_type;
|
||||||
@@ -2029,7 +2029,7 @@ lp_build_ceil(struct lp_build_context *bld,
|
|||||||
const struct lp_type type = bld->type;
|
const struct lp_type type = bld->type;
|
||||||
struct lp_type inttype;
|
struct lp_type inttype;
|
||||||
struct lp_build_context intbld;
|
struct lp_build_context intbld;
|
||||||
LLVMValueRef cmpval = lp_build_const_vec(bld->gallivm, type, 2^24);
|
LLVMValueRef cmpval = lp_build_const_vec(bld->gallivm, type, 1<<24);
|
||||||
LLVMValueRef trunc, res, anosign, mask, tmp;
|
LLVMValueRef trunc, res, anosign, mask, tmp;
|
||||||
LLVMTypeRef int_vec_type = bld->int_vec_type;
|
LLVMTypeRef int_vec_type = bld->int_vec_type;
|
||||||
LLVMTypeRef vec_type = bld->vec_type;
|
LLVMTypeRef vec_type = bld->vec_type;
|
||||||
|
@@ -34,6 +34,10 @@
|
|||||||
#include <llvm/Support/Format.h>
|
#include <llvm/Support/Format.h>
|
||||||
#include <llvm/Support/MemoryObject.h>
|
#include <llvm/Support/MemoryObject.h>
|
||||||
|
|
||||||
|
#if HAVE_LLVM >= 0x0306
|
||||||
|
#include <llvm/Target/TargetSubtargetInfo.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if HAVE_LLVM >= 0x0300
|
#if HAVE_LLVM >= 0x0300
|
||||||
#include <llvm/Support/TargetRegistry.h>
|
#include <llvm/Support/TargetRegistry.h>
|
||||||
#include <llvm/MC/MCSubtargetInfo.h>
|
#include <llvm/MC/MCSubtargetInfo.h>
|
||||||
@@ -57,7 +61,9 @@
|
|||||||
#include <llvm/MC/MCRegisterInfo.h>
|
#include <llvm/MC/MCRegisterInfo.h>
|
||||||
#endif /* HAVE_LLVM >= 0x0301 */
|
#endif /* HAVE_LLVM >= 0x0301 */
|
||||||
|
|
||||||
#if HAVE_LLVM >= 0x0303
|
#if HAVE_LLVM >= 0x0305
|
||||||
|
#define OwningPtr std::unique_ptr
|
||||||
|
#elif HAVE_LLVM >= 0x0303
|
||||||
#include <llvm/ADT/OwningPtr.h>
|
#include <llvm/ADT/OwningPtr.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -302,7 +308,11 @@ disassemble(const void* func, llvm::raw_ostream & Out)
|
|||||||
OwningPtr<TargetMachine> TM(T->createTargetMachine(Triple, ""));
|
OwningPtr<TargetMachine> TM(T->createTargetMachine(Triple, ""));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_LLVM >= 0x0306
|
||||||
|
const TargetInstrInfo *TII = TM->getSubtargetImpl()->getInstrInfo();
|
||||||
|
#else
|
||||||
const TargetInstrInfo *TII = TM->getInstrInfo();
|
const TargetInstrInfo *TII = TM->getInstrInfo();
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wrap the data in a MemoryObject
|
* Wrap the data in a MemoryObject
|
||||||
|
@@ -73,6 +73,10 @@
|
|||||||
#include <llvm/Support/CBindingWrapping.h>
|
#include <llvm/Support/CBindingWrapping.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_LLVM >= 0x0305
|
||||||
|
#include <llvm/Support/Host.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "pipe/p_config.h"
|
#include "pipe/p_config.h"
|
||||||
#include "util/u_debug.h"
|
#include "util/u_debug.h"
|
||||||
#include "util/u_cpu_detect.h"
|
#include "util/u_cpu_detect.h"
|
||||||
@@ -266,7 +270,11 @@ lp_build_create_jit_compiler_for_module(LLVMExecutionEngineRef *OutJIT,
|
|||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
std::string Error;
|
std::string Error;
|
||||||
|
#if HAVE_LLVM >= 0x0306
|
||||||
|
EngineBuilder builder(std::unique_ptr<Module>(unwrap(M)));
|
||||||
|
#else
|
||||||
EngineBuilder builder(unwrap(M));
|
EngineBuilder builder(unwrap(M));
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LLVM 3.1+ haven't more "extern unsigned llvm::StackAlignmentOverride" and
|
* LLVM 3.1+ haven't more "extern unsigned llvm::StackAlignmentOverride" and
|
||||||
@@ -305,8 +313,8 @@ lp_build_create_jit_compiler_for_module(LLVMExecutionEngineRef *OutJIT,
|
|||||||
/*
|
/*
|
||||||
* AVX feature is not automatically detected from CPUID by the X86 target
|
* AVX feature is not automatically detected from CPUID by the X86 target
|
||||||
* yet, because the old (yet default) JIT engine is not capable of
|
* yet, because the old (yet default) JIT engine is not capable of
|
||||||
* emitting the opcodes. But as we're using MCJIT here, it is safe to
|
* emitting the opcodes. On newer llvm versions it is and at least some
|
||||||
* add set this attribute.
|
* versions (tested with 3.3) will emit avx opcodes without this anyway.
|
||||||
*/
|
*/
|
||||||
MAttrs.push_back("+avx");
|
MAttrs.push_back("+avx");
|
||||||
if (util_cpu_caps.has_f16c) {
|
if (util_cpu_caps.has_f16c) {
|
||||||
@@ -316,12 +324,30 @@ lp_build_create_jit_compiler_for_module(LLVMExecutionEngineRef *OutJIT,
|
|||||||
}
|
}
|
||||||
builder.setJITMemoryManager(JITMemoryManager::CreateDefaultMemManager());
|
builder.setJITMemoryManager(JITMemoryManager::CreateDefaultMemManager());
|
||||||
|
|
||||||
|
#if HAVE_LLVM >= 0x0305
|
||||||
|
StringRef MCPU = llvm::sys::getHostCPUName();
|
||||||
|
/*
|
||||||
|
* The cpu bits are no longer set automatically, so need to set mcpu manually.
|
||||||
|
* Note that the MAttrs set above will be sort of ignored (since we should
|
||||||
|
* not set any which would not be set by specifying the cpu anyway).
|
||||||
|
* It ought to be safe though since getHostCPUName() should include bits
|
||||||
|
* not only from the cpu but environment as well (for instance if it's safe
|
||||||
|
* to use avx instructions which need OS support). According to
|
||||||
|
* http://llvm.org/bugs/show_bug.cgi?id=19429 however if I understand this
|
||||||
|
* right it may be necessary to specify older cpu (or disable mattrs) though
|
||||||
|
* when not using MCJIT so no instructions are generated which the old JIT
|
||||||
|
* can't handle. Not entirely sure if we really need to do anything yet.
|
||||||
|
*/
|
||||||
|
builder.setMCPU(MCPU);
|
||||||
|
#endif
|
||||||
|
|
||||||
ExecutionEngine *JIT;
|
ExecutionEngine *JIT;
|
||||||
#if 0
|
|
||||||
|
#if HAVE_LLVM >= 0x0302
|
||||||
JIT = builder.create();
|
JIT = builder.create();
|
||||||
#else
|
#else
|
||||||
/*
|
/*
|
||||||
* Workaround http://llvm.org/bugs/show_bug.cgi?id=12833
|
* Workaround http://llvm.org/PR12833
|
||||||
*/
|
*/
|
||||||
StringRef MArch = "";
|
StringRef MArch = "";
|
||||||
StringRef MCPU = "";
|
StringRef MCPU = "";
|
||||||
|
@@ -927,6 +927,7 @@ lp_build_nearest_mip_level(struct lp_build_sample_context *bld,
|
|||||||
bld->int_coord_bld.type,
|
bld->int_coord_bld.type,
|
||||||
out);
|
out);
|
||||||
}
|
}
|
||||||
|
level = lp_build_andnot(&bld->int_coord_bld, level, *out_of_bounds);
|
||||||
*level_out = level;
|
*level_out = level;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@@ -1248,8 +1248,24 @@ idiv_emit_cpu(
|
|||||||
struct lp_build_tgsi_context * bld_base,
|
struct lp_build_tgsi_context * bld_base,
|
||||||
struct lp_build_emit_data * emit_data)
|
struct lp_build_emit_data * emit_data)
|
||||||
{
|
{
|
||||||
emit_data->output[emit_data->chan] = lp_build_div(&bld_base->int_bld,
|
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||||
emit_data->args[0], emit_data->args[1]);
|
LLVMValueRef div_mask = lp_build_cmp(&bld_base->uint_bld,
|
||||||
|
PIPE_FUNC_EQUAL, emit_data->args[1],
|
||||||
|
bld_base->uint_bld.zero);
|
||||||
|
/* We want to make sure that we never divide/mod by zero to not
|
||||||
|
* generate sigfpe. We don't want to crash just because the
|
||||||
|
* shader is doing something weird. */
|
||||||
|
LLVMValueRef divisor = LLVMBuildOr(builder,
|
||||||
|
div_mask,
|
||||||
|
emit_data->args[1], "");
|
||||||
|
LLVMValueRef result = lp_build_div(&bld_base->int_bld,
|
||||||
|
emit_data->args[0], divisor);
|
||||||
|
LLVMValueRef not_div_mask = LLVMBuildNot(builder,
|
||||||
|
div_mask,"");
|
||||||
|
/* idiv by zero doesn't have a guaranteed return value chose 0 for now. */
|
||||||
|
emit_data->output[emit_data->chan] = LLVMBuildAnd(builder,
|
||||||
|
not_div_mask,
|
||||||
|
result, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TGSI_OPCODE_INEG (CPU Only) */
|
/* TGSI_OPCODE_INEG (CPU Only) */
|
||||||
@@ -1675,15 +1691,15 @@ udiv_emit_cpu(
|
|||||||
LLVMValueRef div_mask = lp_build_cmp(&bld_base->uint_bld,
|
LLVMValueRef div_mask = lp_build_cmp(&bld_base->uint_bld,
|
||||||
PIPE_FUNC_EQUAL, emit_data->args[1],
|
PIPE_FUNC_EQUAL, emit_data->args[1],
|
||||||
bld_base->uint_bld.zero);
|
bld_base->uint_bld.zero);
|
||||||
/* We want to make sure that we never divide/mod by zero to not
|
/* We want to make sure that we never divide/mod by zero to not
|
||||||
* generate sigfpe. We don't want to crash just because the
|
* generate sigfpe. We don't want to crash just because the
|
||||||
* shader is doing something weird. */
|
* shader is doing something weird. */
|
||||||
LLVMValueRef divisor = LLVMBuildOr(builder,
|
LLVMValueRef divisor = LLVMBuildOr(builder,
|
||||||
div_mask,
|
div_mask,
|
||||||
emit_data->args[1], "");
|
emit_data->args[1], "");
|
||||||
LLVMValueRef result = lp_build_div(&bld_base->uint_bld,
|
LLVMValueRef result = lp_build_div(&bld_base->uint_bld,
|
||||||
emit_data->args[0], divisor);
|
emit_data->args[0], divisor);
|
||||||
/* udiv by zero is guaranteed to return 0xffffffff */
|
/* udiv by zero is guaranteed to return 0xffffffff at least with d3d10 */
|
||||||
emit_data->output[emit_data->chan] = LLVMBuildOr(builder,
|
emit_data->output[emit_data->chan] = LLVMBuildOr(builder,
|
||||||
div_mask,
|
div_mask,
|
||||||
result, "");
|
result, "");
|
||||||
|
@@ -66,7 +66,7 @@ struct pipe_loader_device {
|
|||||||
} pci;
|
} pci;
|
||||||
} u; /**< Discriminated by \a type */
|
} u; /**< Discriminated by \a type */
|
||||||
|
|
||||||
const char *driver_name;
|
char *driver_name;
|
||||||
const struct pipe_loader_ops *ops;
|
const struct pipe_loader_ops *ops;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -256,6 +256,7 @@ pipe_loader_drm_release(struct pipe_loader_device **dev)
|
|||||||
util_dl_close(ddev->lib);
|
util_dl_close(ddev->lib);
|
||||||
|
|
||||||
close(ddev->fd);
|
close(ddev->fd);
|
||||||
|
FREE(ddev->base.driver_name);
|
||||||
FREE(ddev);
|
FREE(ddev);
|
||||||
*dev = NULL;
|
*dev = NULL;
|
||||||
}
|
}
|
||||||
|
@@ -3332,10 +3332,10 @@ micro_idiv(union tgsi_exec_channel *dst,
|
|||||||
const union tgsi_exec_channel *src0,
|
const union tgsi_exec_channel *src0,
|
||||||
const union tgsi_exec_channel *src1)
|
const union tgsi_exec_channel *src1)
|
||||||
{
|
{
|
||||||
dst->i[0] = src0->i[0] / src1->i[0];
|
dst->i[0] = src1->i[0] ? src0->i[0] / src1->i[0] : 0;
|
||||||
dst->i[1] = src0->i[1] / src1->i[1];
|
dst->i[1] = src1->i[1] ? src0->i[1] / src1->i[1] : 0;
|
||||||
dst->i[2] = src0->i[2] / src1->i[2];
|
dst->i[2] = src1->i[2] ? src0->i[2] / src1->i[2] : 0;
|
||||||
dst->i[3] = src0->i[3] / src1->i[3];
|
dst->i[3] = src1->i[3] ? src0->i[3] / src1->i[3] : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -383,6 +383,15 @@ void util_blitter_destroy(struct blitter_context *blitter)
|
|||||||
if (ctx->fs_texfetch_stencil[i])
|
if (ctx->fs_texfetch_stencil[i])
|
||||||
ctx->delete_fs_state(pipe, ctx->fs_texfetch_stencil[i]);
|
ctx->delete_fs_state(pipe, ctx->fs_texfetch_stencil[i]);
|
||||||
|
|
||||||
|
if (ctx->fs_texfetch_col_msaa[i])
|
||||||
|
ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_msaa[i]);
|
||||||
|
if (ctx->fs_texfetch_depth_msaa[i])
|
||||||
|
ctx->delete_fs_state(pipe, ctx->fs_texfetch_depth_msaa[i]);
|
||||||
|
if (ctx->fs_texfetch_depthstencil_msaa[i])
|
||||||
|
ctx->delete_fs_state(pipe, ctx->fs_texfetch_depthstencil_msaa[i]);
|
||||||
|
if (ctx->fs_texfetch_stencil_msaa[i])
|
||||||
|
ctx->delete_fs_state(pipe, ctx->fs_texfetch_stencil_msaa[i]);
|
||||||
|
|
||||||
for (j = 0; j< Elements(ctx->fs_resolve[i]); j++)
|
for (j = 0; j< Elements(ctx->fs_resolve[i]); j++)
|
||||||
for (f = 0; f < 2; f++)
|
for (f = 0; f < 2; f++)
|
||||||
if (ctx->fs_resolve[i][j][f])
|
if (ctx->fs_resolve[i][j][f])
|
||||||
|
@@ -149,28 +149,6 @@ roundf(float x)
|
|||||||
#endif /* _MSC_VER */
|
#endif /* _MSC_VER */
|
||||||
|
|
||||||
|
|
||||||
#ifdef PIPE_OS_ANDROID
|
|
||||||
|
|
||||||
static INLINE
|
|
||||||
double log2(double d)
|
|
||||||
{
|
|
||||||
return log(d) * (1.0 / M_LN2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* workaround a conflict with main/imports.h */
|
|
||||||
#ifdef log2f
|
|
||||||
#undef log2f
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static INLINE
|
|
||||||
float log2f(float f)
|
|
||||||
{
|
|
||||||
return logf(f) * (float) (1.0 / M_LN2);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if __STDC_VERSION__ < 199901L && (!defined(__cplusplus) || defined(_MSC_VER))
|
#if __STDC_VERSION__ < 199901L && (!defined(__cplusplus) || defined(_MSC_VER))
|
||||||
static INLINE long int
|
static INLINE long int
|
||||||
lrint(double d)
|
lrint(double d)
|
||||||
|
@@ -136,6 +136,21 @@ u_prim_vertex_count(unsigned prim)
|
|||||||
return (likely(prim < PIPE_PRIM_MAX)) ? &prim_table[prim] : NULL;
|
return (likely(prim < PIPE_PRIM_MAX)) ? &prim_table[prim] : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a vertex count, return the number of primitives.
|
||||||
|
* For polygons, return the number of triangles.
|
||||||
|
*/
|
||||||
|
static INLINE unsigned
|
||||||
|
u_prims_for_vertices(unsigned prim, unsigned num)
|
||||||
|
{
|
||||||
|
const struct u_prim_vertex_count *info = u_prim_vertex_count(prim);
|
||||||
|
|
||||||
|
if (num < info->min)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return 1 + ((num - info->min) / info->incr);
|
||||||
|
}
|
||||||
|
|
||||||
static INLINE boolean u_validate_pipe_prim( unsigned pipe_prim, unsigned nr )
|
static INLINE boolean u_validate_pipe_prim( unsigned pipe_prim, unsigned nr )
|
||||||
{
|
{
|
||||||
const struct u_prim_vertex_count *count = u_prim_vertex_count(pipe_prim);
|
const struct u_prim_vertex_count *count = u_prim_vertex_count(pipe_prim);
|
||||||
|
@@ -25,8 +25,8 @@ void u_default_transfer_inline_write( struct pipe_context *pipe,
|
|||||||
usage |= PIPE_TRANSFER_WRITE;
|
usage |= PIPE_TRANSFER_WRITE;
|
||||||
|
|
||||||
/* transfer_inline_write implicitly discards the rewritten buffer range */
|
/* transfer_inline_write implicitly discards the rewritten buffer range */
|
||||||
/* XXX this looks very broken for non-buffer resources having more than one dim. */
|
if (resource->target == PIPE_BUFFER &&
|
||||||
if (box->x == 0 && box->width == resource->width0) {
|
box->x == 0 && box->width == resource->width0) {
|
||||||
usage |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE;
|
usage |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE;
|
||||||
} else {
|
} else {
|
||||||
usage |= PIPE_TRANSFER_DISCARD_RANGE;
|
usage |= PIPE_TRANSFER_DISCARD_RANGE;
|
||||||
|
44
src/gallium/drivers/freedreno/Android.mk
Normal file
44
src/gallium/drivers/freedreno/Android.mk
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# Copyright (C) 2014 Emil Velikov <emil.l.velikov@gmail.com>
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
# copy of this software and associated documentation files (the "Software"),
|
||||||
|
# to deal in the Software without restriction, including without limitation
|
||||||
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
# and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
# Software is furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included
|
||||||
|
# in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
# DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
LOCAL_PATH := $(call my-dir)
|
||||||
|
|
||||||
|
# get C_SOURCES
|
||||||
|
include $(LOCAL_PATH)/Makefile.sources
|
||||||
|
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
|
LOCAL_SRC_FILES := \
|
||||||
|
$(C_SOURCES) \
|
||||||
|
$(a2xx_SOURCES) \
|
||||||
|
$(a3xx_SOURCES)
|
||||||
|
|
||||||
|
LOCAL_CFLAGS := \
|
||||||
|
-Wno-packed-bitfield-compat
|
||||||
|
|
||||||
|
LOCAL_C_INCLUDES := \
|
||||||
|
$(LOCAL_PATH)/ir3 \
|
||||||
|
$(TARGET_OUT_HEADERS)/libdrm \
|
||||||
|
$(TARGET_OUT_HEADERS)/freedreno
|
||||||
|
|
||||||
|
LOCAL_MODULE := libmesa_pipe_freedreno
|
||||||
|
|
||||||
|
include $(GALLIUM_COMMON_MK)
|
||||||
|
include $(BUILD_STATIC_LIBRARY)
|
@@ -5,8 +5,6 @@ include $(top_srcdir)/src/gallium/Automake.inc
|
|||||||
|
|
||||||
AM_CFLAGS = \
|
AM_CFLAGS = \
|
||||||
-Wno-packed-bitfield-compat \
|
-Wno-packed-bitfield-compat \
|
||||||
-I$(top_srcdir)/src/gallium/drivers/freedreno/a3xx \
|
|
||||||
-I$(top_srcdir)/src/gallium/drivers/freedreno/a2xx \
|
|
||||||
$(GALLIUM_DRIVER_CFLAGS) \
|
$(GALLIUM_DRIVER_CFLAGS) \
|
||||||
$(FREEDRENO_CFLAGS)
|
$(FREEDRENO_CFLAGS)
|
||||||
|
|
||||||
|
@@ -10,11 +10,11 @@ git clone https://github.com/freedreno/envytools.git
|
|||||||
The rules-ng-ng source files this header was generated from are:
|
The rules-ng-ng source files this header was generated from are:
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27)
|
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32580 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10186 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-06-02 15:21:30)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 57831 bytes, from 2014-05-19 21:02:34)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 58020 bytes, from 2014-06-13 17:29:47)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26293 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-06-13 17:28:10)
|
||||||
|
|
||||||
Copyright (C) 2013-2014 by the following authors:
|
Copyright (C) 2013-2014 by the following authors:
|
||||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||||
@@ -203,6 +203,15 @@ enum a2xx_rb_copy_sample_select {
|
|||||||
SAMPLE_0123 = 6,
|
SAMPLE_0123 = 6,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum a2xx_rb_blend_opcode {
|
||||||
|
BLEND_DST_PLUS_SRC = 0,
|
||||||
|
BLEND_SRC_MINUS_DST = 1,
|
||||||
|
BLEND_MIN_DST_SRC = 2,
|
||||||
|
BLEND_MAX_DST_SRC = 3,
|
||||||
|
BLEND_DST_MINUS_SRC = 4,
|
||||||
|
BLEND_DST_PLUS_SRC_BIAS = 5,
|
||||||
|
};
|
||||||
|
|
||||||
enum adreno_mmu_clnt_beh {
|
enum adreno_mmu_clnt_beh {
|
||||||
BEH_NEVR = 0,
|
BEH_NEVR = 0,
|
||||||
BEH_TRAN_RNG = 1,
|
BEH_TRAN_RNG = 1,
|
||||||
@@ -996,7 +1005,7 @@ static inline uint32_t A2XX_RB_BLEND_CONTROL_COLOR_SRCBLEND(enum adreno_rb_blend
|
|||||||
}
|
}
|
||||||
#define A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__MASK 0x000000e0
|
#define A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__MASK 0x000000e0
|
||||||
#define A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__SHIFT 5
|
#define A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__SHIFT 5
|
||||||
static inline uint32_t A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN(enum adreno_rb_blend_opcode val)
|
static inline uint32_t A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN(enum a2xx_rb_blend_opcode val)
|
||||||
{
|
{
|
||||||
return ((val) << A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__SHIFT) & A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__MASK;
|
return ((val) << A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__SHIFT) & A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__MASK;
|
||||||
}
|
}
|
||||||
@@ -1014,7 +1023,7 @@ static inline uint32_t A2XX_RB_BLEND_CONTROL_ALPHA_SRCBLEND(enum adreno_rb_blend
|
|||||||
}
|
}
|
||||||
#define A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__MASK 0x00e00000
|
#define A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__MASK 0x00e00000
|
||||||
#define A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__SHIFT 21
|
#define A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__SHIFT 21
|
||||||
static inline uint32_t A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN(enum adreno_rb_blend_opcode val)
|
static inline uint32_t A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN(enum a2xx_rb_blend_opcode val)
|
||||||
{
|
{
|
||||||
return ((val) << A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__SHIFT) & A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__MASK;
|
return ((val) << A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__SHIFT) & A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__MASK;
|
||||||
}
|
}
|
||||||
|
@@ -34,6 +34,27 @@
|
|||||||
#include "fd2_context.h"
|
#include "fd2_context.h"
|
||||||
#include "fd2_util.h"
|
#include "fd2_util.h"
|
||||||
|
|
||||||
|
|
||||||
|
static enum a2xx_rb_blend_opcode
|
||||||
|
blend_func(unsigned func)
|
||||||
|
{
|
||||||
|
switch (func) {
|
||||||
|
case PIPE_BLEND_ADD:
|
||||||
|
return BLEND_DST_PLUS_SRC;
|
||||||
|
case PIPE_BLEND_MIN:
|
||||||
|
return BLEND_MIN_DST_SRC;
|
||||||
|
case PIPE_BLEND_MAX:
|
||||||
|
return BLEND_MAX_DST_SRC;
|
||||||
|
case PIPE_BLEND_SUBTRACT:
|
||||||
|
return BLEND_SRC_MINUS_DST;
|
||||||
|
case PIPE_BLEND_REVERSE_SUBTRACT:
|
||||||
|
return BLEND_DST_MINUS_SRC;
|
||||||
|
default:
|
||||||
|
DBG("invalid blend func: %x", func);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
fd2_blend_state_create(struct pipe_context *pctx,
|
fd2_blend_state_create(struct pipe_context *pctx,
|
||||||
const struct pipe_blend_state *cso)
|
const struct pipe_blend_state *cso)
|
||||||
@@ -61,10 +82,10 @@ fd2_blend_state_create(struct pipe_context *pctx,
|
|||||||
|
|
||||||
so->rb_blendcontrol =
|
so->rb_blendcontrol =
|
||||||
A2XX_RB_BLEND_CONTROL_COLOR_SRCBLEND(fd_blend_factor(rt->rgb_src_factor)) |
|
A2XX_RB_BLEND_CONTROL_COLOR_SRCBLEND(fd_blend_factor(rt->rgb_src_factor)) |
|
||||||
A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN(fd_blend_func(rt->rgb_func)) |
|
A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN(blend_func(rt->rgb_func)) |
|
||||||
A2XX_RB_BLEND_CONTROL_COLOR_DESTBLEND(fd_blend_factor(rt->rgb_dst_factor)) |
|
A2XX_RB_BLEND_CONTROL_COLOR_DESTBLEND(fd_blend_factor(rt->rgb_dst_factor)) |
|
||||||
A2XX_RB_BLEND_CONTROL_ALPHA_SRCBLEND(fd_blend_factor(rt->alpha_src_factor)) |
|
A2XX_RB_BLEND_CONTROL_ALPHA_SRCBLEND(fd_blend_factor(rt->alpha_src_factor)) |
|
||||||
A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN(fd_blend_func(rt->alpha_func)) |
|
A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN(blend_func(rt->alpha_func)) |
|
||||||
A2XX_RB_BLEND_CONTROL_ALPHA_DESTBLEND(fd_blend_factor(rt->alpha_dst_factor));
|
A2XX_RB_BLEND_CONTROL_ALPHA_DESTBLEND(fd_blend_factor(rt->alpha_dst_factor));
|
||||||
|
|
||||||
if (rt->colormask & PIPE_MASK_R)
|
if (rt->colormask & PIPE_MASK_R)
|
||||||
|
@@ -10,11 +10,11 @@ git clone https://github.com/freedreno/envytools.git
|
|||||||
The rules-ng-ng source files this header was generated from are:
|
The rules-ng-ng source files this header was generated from are:
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27)
|
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32580 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10186 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-06-02 15:21:30)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 57831 bytes, from 2014-05-19 21:02:34)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 58020 bytes, from 2014-06-13 17:29:47)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26293 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-06-13 17:28:10)
|
||||||
|
|
||||||
Copyright (C) 2013-2014 by the following authors:
|
Copyright (C) 2013-2014 by the following authors:
|
||||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||||
@@ -186,16 +186,26 @@ enum a3xx_rop_code {
|
|||||||
ROP_SET = 15,
|
ROP_SET = 15,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum a3xx_rb_blend_opcode {
|
||||||
|
BLEND_DST_PLUS_SRC = 0,
|
||||||
|
BLEND_SRC_MINUS_DST = 1,
|
||||||
|
BLEND_DST_MINUS_SRC = 2,
|
||||||
|
BLEND_MIN_DST_SRC = 3,
|
||||||
|
BLEND_MAX_DST_SRC = 4,
|
||||||
|
};
|
||||||
|
|
||||||
enum a3xx_tex_filter {
|
enum a3xx_tex_filter {
|
||||||
A3XX_TEX_NEAREST = 0,
|
A3XX_TEX_NEAREST = 0,
|
||||||
A3XX_TEX_LINEAR = 1,
|
A3XX_TEX_LINEAR = 1,
|
||||||
|
A3XX_TEX_ANISO = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum a3xx_tex_clamp {
|
enum a3xx_tex_clamp {
|
||||||
A3XX_TEX_REPEAT = 0,
|
A3XX_TEX_REPEAT = 0,
|
||||||
A3XX_TEX_CLAMP_TO_EDGE = 1,
|
A3XX_TEX_CLAMP_TO_EDGE = 1,
|
||||||
A3XX_TEX_MIRROR_REPEAT = 2,
|
A3XX_TEX_MIRROR_REPEAT = 2,
|
||||||
A3XX_TEX_CLAMP_NONE = 3,
|
A3XX_TEX_CLAMP_TO_BORDER = 3,
|
||||||
|
A3XX_TEX_MIRROR_CLAMP = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum a3xx_tex_swiz {
|
enum a3xx_tex_swiz {
|
||||||
@@ -877,7 +887,7 @@ static inline uint32_t A3XX_RB_MRT_BLEND_CONTROL_RGB_SRC_FACTOR(enum adreno_rb_b
|
|||||||
}
|
}
|
||||||
#define A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__MASK 0x000000e0
|
#define A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__MASK 0x000000e0
|
||||||
#define A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__SHIFT 5
|
#define A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__SHIFT 5
|
||||||
static inline uint32_t A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE(enum adreno_rb_blend_opcode val)
|
static inline uint32_t A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE(enum a3xx_rb_blend_opcode val)
|
||||||
{
|
{
|
||||||
return ((val) << A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__SHIFT) & A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__MASK;
|
return ((val) << A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__SHIFT) & A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__MASK;
|
||||||
}
|
}
|
||||||
@@ -895,7 +905,7 @@ static inline uint32_t A3XX_RB_MRT_BLEND_CONTROL_ALPHA_SRC_FACTOR(enum adreno_rb
|
|||||||
}
|
}
|
||||||
#define A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__MASK 0x00e00000
|
#define A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__MASK 0x00e00000
|
||||||
#define A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__SHIFT 21
|
#define A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__SHIFT 21
|
||||||
static inline uint32_t A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE(enum adreno_rb_blend_opcode val)
|
static inline uint32_t A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE(enum a3xx_rb_blend_opcode val)
|
||||||
{
|
{
|
||||||
return ((val) << A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__SHIFT) & A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__MASK;
|
return ((val) << A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__SHIFT) & A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__MASK;
|
||||||
}
|
}
|
||||||
@@ -978,6 +988,7 @@ static inline uint32_t A3XX_RB_COPY_CONTROL_MSAA_RESOLVE(enum a3xx_msaa_samples
|
|||||||
{
|
{
|
||||||
return ((val) << A3XX_RB_COPY_CONTROL_MSAA_RESOLVE__SHIFT) & A3XX_RB_COPY_CONTROL_MSAA_RESOLVE__MASK;
|
return ((val) << A3XX_RB_COPY_CONTROL_MSAA_RESOLVE__SHIFT) & A3XX_RB_COPY_CONTROL_MSAA_RESOLVE__MASK;
|
||||||
}
|
}
|
||||||
|
#define A3XX_RB_COPY_CONTROL_DEPTHCLEAR 0x00000008
|
||||||
#define A3XX_RB_COPY_CONTROL_MODE__MASK 0x00000070
|
#define A3XX_RB_COPY_CONTROL_MODE__MASK 0x00000070
|
||||||
#define A3XX_RB_COPY_CONTROL_MODE__SHIFT 4
|
#define A3XX_RB_COPY_CONTROL_MODE__SHIFT 4
|
||||||
static inline uint32_t A3XX_RB_COPY_CONTROL_MODE(enum adreno_rb_copy_control_mode val)
|
static inline uint32_t A3XX_RB_COPY_CONTROL_MODE(enum adreno_rb_copy_control_mode val)
|
||||||
@@ -1078,7 +1089,7 @@ static inline uint32_t A3XX_RB_DEPTH_INFO_DEPTH_FORMAT(enum adreno_rb_depth_form
|
|||||||
#define A3XX_RB_DEPTH_INFO_DEPTH_BASE__SHIFT 11
|
#define A3XX_RB_DEPTH_INFO_DEPTH_BASE__SHIFT 11
|
||||||
static inline uint32_t A3XX_RB_DEPTH_INFO_DEPTH_BASE(uint32_t val)
|
static inline uint32_t A3XX_RB_DEPTH_INFO_DEPTH_BASE(uint32_t val)
|
||||||
{
|
{
|
||||||
return ((val >> 10) << A3XX_RB_DEPTH_INFO_DEPTH_BASE__SHIFT) & A3XX_RB_DEPTH_INFO_DEPTH_BASE__MASK;
|
return ((val >> 12) << A3XX_RB_DEPTH_INFO_DEPTH_BASE__SHIFT) & A3XX_RB_DEPTH_INFO_DEPTH_BASE__MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define REG_A3XX_RB_DEPTH_PITCH 0x00002103
|
#define REG_A3XX_RB_DEPTH_PITCH 0x00002103
|
||||||
@@ -1526,6 +1537,12 @@ static inline uint32_t A3XX_VFD_DECODE_INSTR_REGID(uint32_t val)
|
|||||||
{
|
{
|
||||||
return ((val) << A3XX_VFD_DECODE_INSTR_REGID__SHIFT) & A3XX_VFD_DECODE_INSTR_REGID__MASK;
|
return ((val) << A3XX_VFD_DECODE_INSTR_REGID__SHIFT) & A3XX_VFD_DECODE_INSTR_REGID__MASK;
|
||||||
}
|
}
|
||||||
|
#define A3XX_VFD_DECODE_INSTR_SWAP__MASK 0x00c00000
|
||||||
|
#define A3XX_VFD_DECODE_INSTR_SWAP__SHIFT 22
|
||||||
|
static inline uint32_t A3XX_VFD_DECODE_INSTR_SWAP(enum a3xx_color_swap val)
|
||||||
|
{
|
||||||
|
return ((val) << A3XX_VFD_DECODE_INSTR_SWAP__SHIFT) & A3XX_VFD_DECODE_INSTR_SWAP__MASK;
|
||||||
|
}
|
||||||
#define A3XX_VFD_DECODE_INSTR_SHIFTCNT__MASK 0x1f000000
|
#define A3XX_VFD_DECODE_INSTR_SHIFTCNT__MASK 0x1f000000
|
||||||
#define A3XX_VFD_DECODE_INSTR_SHIFTCNT__SHIFT 24
|
#define A3XX_VFD_DECODE_INSTR_SHIFTCNT__SHIFT 24
|
||||||
static inline uint32_t A3XX_VFD_DECODE_INSTR_SHIFTCNT(uint32_t val)
|
static inline uint32_t A3XX_VFD_DECODE_INSTR_SHIFTCNT(uint32_t val)
|
||||||
|
@@ -34,6 +34,27 @@
|
|||||||
#include "fd3_context.h"
|
#include "fd3_context.h"
|
||||||
#include "fd3_util.h"
|
#include "fd3_util.h"
|
||||||
|
|
||||||
|
|
||||||
|
static enum a3xx_rb_blend_opcode
|
||||||
|
blend_func(unsigned func)
|
||||||
|
{
|
||||||
|
switch (func) {
|
||||||
|
case PIPE_BLEND_ADD:
|
||||||
|
return BLEND_DST_PLUS_SRC;
|
||||||
|
case PIPE_BLEND_MIN:
|
||||||
|
return BLEND_MIN_DST_SRC;
|
||||||
|
case PIPE_BLEND_MAX:
|
||||||
|
return BLEND_MAX_DST_SRC;
|
||||||
|
case PIPE_BLEND_SUBTRACT:
|
||||||
|
return BLEND_SRC_MINUS_DST;
|
||||||
|
case PIPE_BLEND_REVERSE_SUBTRACT:
|
||||||
|
return BLEND_DST_MINUS_SRC;
|
||||||
|
default:
|
||||||
|
DBG("invalid blend func: %x", func);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
fd3_blend_state_create(struct pipe_context *pctx,
|
fd3_blend_state_create(struct pipe_context *pctx,
|
||||||
const struct pipe_blend_state *cso)
|
const struct pipe_blend_state *cso)
|
||||||
@@ -80,10 +101,10 @@ fd3_blend_state_create(struct pipe_context *pctx,
|
|||||||
|
|
||||||
so->rb_mrt[i].blend_control =
|
so->rb_mrt[i].blend_control =
|
||||||
A3XX_RB_MRT_BLEND_CONTROL_RGB_SRC_FACTOR(fd_blend_factor(rt->rgb_src_factor)) |
|
A3XX_RB_MRT_BLEND_CONTROL_RGB_SRC_FACTOR(fd_blend_factor(rt->rgb_src_factor)) |
|
||||||
A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE(fd_blend_func(rt->rgb_func)) |
|
A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE(blend_func(rt->rgb_func)) |
|
||||||
A3XX_RB_MRT_BLEND_CONTROL_RGB_DEST_FACTOR(fd_blend_factor(rt->rgb_dst_factor)) |
|
A3XX_RB_MRT_BLEND_CONTROL_RGB_DEST_FACTOR(fd_blend_factor(rt->rgb_dst_factor)) |
|
||||||
A3XX_RB_MRT_BLEND_CONTROL_ALPHA_SRC_FACTOR(fd_blend_factor(rt->alpha_src_factor)) |
|
A3XX_RB_MRT_BLEND_CONTROL_ALPHA_SRC_FACTOR(fd_blend_factor(rt->alpha_src_factor)) |
|
||||||
A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE(fd_blend_func(rt->alpha_func)) |
|
A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE(blend_func(rt->alpha_func)) |
|
||||||
A3XX_RB_MRT_BLEND_CONTROL_ALPHA_DEST_FACTOR(fd_blend_factor(rt->alpha_dst_factor)) |
|
A3XX_RB_MRT_BLEND_CONTROL_ALPHA_DEST_FACTOR(fd_blend_factor(rt->alpha_dst_factor)) |
|
||||||
A3XX_RB_MRT_BLEND_CONTROL_CLAMP_ENABLE;
|
A3XX_RB_MRT_BLEND_CONTROL_CLAMP_ENABLE;
|
||||||
|
|
||||||
|
@@ -195,8 +195,10 @@ emit_textures(struct fd_ringbuffer *ring,
|
|||||||
OUT_RING(ring, CP_LOAD_STATE_1_STATE_TYPE(ST_CONSTANTS) |
|
OUT_RING(ring, CP_LOAD_STATE_1_STATE_TYPE(ST_CONSTANTS) |
|
||||||
CP_LOAD_STATE_1_EXT_SRC_ADDR(0));
|
CP_LOAD_STATE_1_EXT_SRC_ADDR(0));
|
||||||
for (i = 0; i < tex->num_textures; i++) {
|
for (i = 0; i < tex->num_textures; i++) {
|
||||||
struct fd3_pipe_sampler_view *view =
|
static const struct fd3_pipe_sampler_view dummy_view = {};
|
||||||
fd3_pipe_sampler_view(tex->textures[i]);
|
const struct fd3_pipe_sampler_view *view = tex->textures[i] ?
|
||||||
|
fd3_pipe_sampler_view(tex->textures[i]) :
|
||||||
|
&dummy_view;
|
||||||
OUT_RING(ring, view->texconst0);
|
OUT_RING(ring, view->texconst0);
|
||||||
OUT_RING(ring, view->texconst1);
|
OUT_RING(ring, view->texconst1);
|
||||||
OUT_RING(ring, view->texconst2 |
|
OUT_RING(ring, view->texconst2 |
|
||||||
@@ -213,8 +215,10 @@ emit_textures(struct fd_ringbuffer *ring,
|
|||||||
OUT_RING(ring, CP_LOAD_STATE_1_STATE_TYPE(ST_CONSTANTS) |
|
OUT_RING(ring, CP_LOAD_STATE_1_STATE_TYPE(ST_CONSTANTS) |
|
||||||
CP_LOAD_STATE_1_EXT_SRC_ADDR(0));
|
CP_LOAD_STATE_1_EXT_SRC_ADDR(0));
|
||||||
for (i = 0; i < tex->num_textures; i++) {
|
for (i = 0; i < tex->num_textures; i++) {
|
||||||
struct fd3_pipe_sampler_view *view =
|
static const struct fd3_pipe_sampler_view dummy_view = {};
|
||||||
fd3_pipe_sampler_view(tex->textures[i]);
|
const struct fd3_pipe_sampler_view *view = tex->textures[i] ?
|
||||||
|
fd3_pipe_sampler_view(tex->textures[i]) :
|
||||||
|
&dummy_view;
|
||||||
struct fd_resource *rsc = view->tex_resource;
|
struct fd_resource *rsc = view->tex_resource;
|
||||||
|
|
||||||
for (j = 0; j < view->mipaddrs; j++) {
|
for (j = 0; j < view->mipaddrs; j++) {
|
||||||
@@ -323,9 +327,12 @@ fd3_emit_vertex_bufs(struct fd_ringbuffer *ring,
|
|||||||
if (vp->inputs[i].compmask) {
|
if (vp->inputs[i].compmask) {
|
||||||
struct pipe_resource *prsc = vbufs[i].prsc;
|
struct pipe_resource *prsc = vbufs[i].prsc;
|
||||||
struct fd_resource *rsc = fd_resource(prsc);
|
struct fd_resource *rsc = fd_resource(prsc);
|
||||||
enum a3xx_vtx_fmt fmt = fd3_pipe2vtx(vbufs[i].format);
|
enum pipe_format pfmt = vbufs[i].format;
|
||||||
|
enum a3xx_vtx_fmt fmt = fd3_pipe2vtx(pfmt);
|
||||||
bool switchnext = (i != last);
|
bool switchnext = (i != last);
|
||||||
uint32_t fs = util_format_get_blocksize(vbufs[i].format);
|
uint32_t fs = util_format_get_blocksize(pfmt);
|
||||||
|
|
||||||
|
debug_assert(fmt != ~0);
|
||||||
|
|
||||||
OUT_PKT0(ring, REG_A3XX_VFD_FETCH(j), 2);
|
OUT_PKT0(ring, REG_A3XX_VFD_FETCH(j), 2);
|
||||||
OUT_RING(ring, A3XX_VFD_FETCH_INSTR_0_FETCHSIZE(fs - 1) |
|
OUT_RING(ring, A3XX_VFD_FETCH_INSTR_0_FETCHSIZE(fs - 1) |
|
||||||
@@ -339,6 +346,7 @@ fd3_emit_vertex_bufs(struct fd_ringbuffer *ring,
|
|||||||
OUT_RING(ring, A3XX_VFD_DECODE_INSTR_CONSTFILL |
|
OUT_RING(ring, A3XX_VFD_DECODE_INSTR_CONSTFILL |
|
||||||
A3XX_VFD_DECODE_INSTR_WRITEMASK(vp->inputs[i].compmask) |
|
A3XX_VFD_DECODE_INSTR_WRITEMASK(vp->inputs[i].compmask) |
|
||||||
A3XX_VFD_DECODE_INSTR_FORMAT(fmt) |
|
A3XX_VFD_DECODE_INSTR_FORMAT(fmt) |
|
||||||
|
A3XX_VFD_DECODE_INSTR_SWAP(fd3_pipe2swap(pfmt)) |
|
||||||
A3XX_VFD_DECODE_INSTR_REGID(vp->inputs[i].regid) |
|
A3XX_VFD_DECODE_INSTR_REGID(vp->inputs[i].regid) |
|
||||||
A3XX_VFD_DECODE_INSTR_SHIFTCNT(fs) |
|
A3XX_VFD_DECODE_INSTR_SHIFTCNT(fs) |
|
||||||
A3XX_VFD_DECODE_INSTR_LASTCOMPVALID |
|
A3XX_VFD_DECODE_INSTR_LASTCOMPVALID |
|
||||||
|
@@ -82,7 +82,7 @@ emit_mrt(struct fd_ringbuffer *ring, unsigned nr_bufs,
|
|||||||
stride = bin_w * rsc->cpp;
|
stride = bin_w * rsc->cpp;
|
||||||
|
|
||||||
if (bases) {
|
if (bases) {
|
||||||
base = bases[i] * rsc->cpp;
|
base = bases[i];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
stride = slice->pitch * rsc->cpp;
|
stride = slice->pitch * rsc->cpp;
|
||||||
@@ -106,9 +106,17 @@ emit_mrt(struct fd_ringbuffer *ring, unsigned nr_bufs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t
|
static uint32_t
|
||||||
depth_base(struct fd_gmem_stateobj *gmem)
|
depth_base(struct fd_context *ctx)
|
||||||
{
|
{
|
||||||
return align(gmem->bin_w * gmem->bin_h, 0x4000);
|
struct fd_gmem_stateobj *gmem = &ctx->gmem;
|
||||||
|
struct pipe_framebuffer_state *pfb = &ctx->framebuffer;
|
||||||
|
uint32_t cpp = 4;
|
||||||
|
if (pfb->cbufs[0]) {
|
||||||
|
struct fd_resource *rsc =
|
||||||
|
fd_resource(pfb->cbufs[0]->texture);
|
||||||
|
cpp = rsc->cpp;
|
||||||
|
}
|
||||||
|
return align(gmem->bin_w * gmem->bin_h * cpp, 0x4000);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@@ -156,7 +164,7 @@ emit_binning_workaround(struct fd_context *ctx)
|
|||||||
OUT_RING(ring, A3XX_RB_COPY_CONTROL_MSAA_RESOLVE(MSAA_ONE) |
|
OUT_RING(ring, A3XX_RB_COPY_CONTROL_MSAA_RESOLVE(MSAA_ONE) |
|
||||||
A3XX_RB_COPY_CONTROL_MODE(0) |
|
A3XX_RB_COPY_CONTROL_MODE(0) |
|
||||||
A3XX_RB_COPY_CONTROL_GMEM_BASE(0));
|
A3XX_RB_COPY_CONTROL_GMEM_BASE(0));
|
||||||
OUT_RELOC(ring, fd_resource(fd3_ctx->solid_vbuf)->bo, 0x20, 0, -1); /* RB_COPY_DEST_BASE */
|
OUT_RELOCW(ring, fd_resource(fd3_ctx->solid_vbuf)->bo, 0x20, 0, -1); /* RB_COPY_DEST_BASE */
|
||||||
OUT_RING(ring, A3XX_RB_COPY_DEST_PITCH_PITCH(128));
|
OUT_RING(ring, A3XX_RB_COPY_DEST_PITCH_PITCH(128));
|
||||||
OUT_RING(ring, A3XX_RB_COPY_DEST_INFO_TILE(LINEAR) |
|
OUT_RING(ring, A3XX_RB_COPY_DEST_INFO_TILE(LINEAR) |
|
||||||
A3XX_RB_COPY_DEST_INFO_FORMAT(RB_R8G8B8A8_UNORM) |
|
A3XX_RB_COPY_DEST_INFO_FORMAT(RB_R8G8B8A8_UNORM) |
|
||||||
@@ -399,12 +407,7 @@ fd3_emit_tile_gmem2mem(struct fd_context *ctx, struct fd_tile *tile)
|
|||||||
}}, 1);
|
}}, 1);
|
||||||
|
|
||||||
if (ctx->resolve & (FD_BUFFER_DEPTH | FD_BUFFER_STENCIL)) {
|
if (ctx->resolve & (FD_BUFFER_DEPTH | FD_BUFFER_STENCIL)) {
|
||||||
uint32_t base = 0;
|
uint32_t base = depth_base(ctx);
|
||||||
if (pfb->cbufs[0]) {
|
|
||||||
struct fd_resource *rsc =
|
|
||||||
fd_resource(pfb->cbufs[0]->texture);
|
|
||||||
base = depth_base(&ctx->gmem) * rsc->cpp;
|
|
||||||
}
|
|
||||||
emit_gmem2mem_surf(ctx, RB_COPY_DEPTH_STENCIL, base, pfb->zsbuf);
|
emit_gmem2mem_surf(ctx, RB_COPY_DEPTH_STENCIL, base, pfb->zsbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -458,7 +461,7 @@ fd3_emit_tile_mem2gmem(struct fd_context *ctx, struct fd_tile *tile)
|
|||||||
y1 = ((float)tile->yoff + bin_h) / ((float)pfb->height);
|
y1 = ((float)tile->yoff + bin_h) / ((float)pfb->height);
|
||||||
|
|
||||||
OUT_PKT3(ring, CP_MEM_WRITE, 5);
|
OUT_PKT3(ring, CP_MEM_WRITE, 5);
|
||||||
OUT_RELOC(ring, fd_resource(fd3_ctx->blit_texcoord_vbuf)->bo, 0, 0, 0);
|
OUT_RELOCW(ring, fd_resource(fd3_ctx->blit_texcoord_vbuf)->bo, 0, 0, 0);
|
||||||
OUT_RING(ring, fui(x0));
|
OUT_RING(ring, fui(x0));
|
||||||
OUT_RING(ring, fui(y0));
|
OUT_RING(ring, fui(y0));
|
||||||
OUT_RING(ring, fui(x1));
|
OUT_RING(ring, fui(x1));
|
||||||
@@ -558,7 +561,7 @@ fd3_emit_tile_mem2gmem(struct fd_context *ctx, struct fd_tile *tile)
|
|||||||
bin_h = gmem->bin_h;
|
bin_h = gmem->bin_h;
|
||||||
|
|
||||||
if (ctx->restore & (FD_BUFFER_DEPTH | FD_BUFFER_STENCIL))
|
if (ctx->restore & (FD_BUFFER_DEPTH | FD_BUFFER_STENCIL))
|
||||||
emit_mem2gmem_surf(ctx, depth_base(gmem), pfb->zsbuf, bin_w);
|
emit_mem2gmem_surf(ctx, depth_base(ctx), pfb->zsbuf, bin_w);
|
||||||
|
|
||||||
if (ctx->restore & FD_BUFFER_COLOR)
|
if (ctx->restore & FD_BUFFER_COLOR)
|
||||||
emit_mem2gmem_surf(ctx, 0, pfb->cbufs[0], bin_w);
|
emit_mem2gmem_surf(ctx, 0, pfb->cbufs[0], bin_w);
|
||||||
@@ -639,7 +642,7 @@ update_vsc_pipe(struct fd_context *ctx)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
OUT_PKT0(ring, REG_A3XX_VSC_SIZE_ADDRESS, 1);
|
OUT_PKT0(ring, REG_A3XX_VSC_SIZE_ADDRESS, 1);
|
||||||
OUT_RELOC(ring, fd3_ctx->vsc_size_mem, 0, 0, 0); /* VSC_SIZE_ADDRESS */
|
OUT_RELOCW(ring, fd3_ctx->vsc_size_mem, 0, 0, 0); /* VSC_SIZE_ADDRESS */
|
||||||
|
|
||||||
for (i = 0; i < 8; i++) {
|
for (i = 0; i < 8; i++) {
|
||||||
struct fd_vsc_pipe *pipe = &ctx->pipe[i];
|
struct fd_vsc_pipe *pipe = &ctx->pipe[i];
|
||||||
@@ -654,7 +657,7 @@ update_vsc_pipe(struct fd_context *ctx)
|
|||||||
A3XX_VSC_PIPE_CONFIG_Y(pipe->y) |
|
A3XX_VSC_PIPE_CONFIG_Y(pipe->y) |
|
||||||
A3XX_VSC_PIPE_CONFIG_W(pipe->w) |
|
A3XX_VSC_PIPE_CONFIG_W(pipe->w) |
|
||||||
A3XX_VSC_PIPE_CONFIG_H(pipe->h));
|
A3XX_VSC_PIPE_CONFIG_H(pipe->h));
|
||||||
OUT_RELOC(ring, pipe->bo, 0, 0, 0); /* VSC_PIPE[i].DATA_ADDRESS */
|
OUT_RELOCW(ring, pipe->bo, 0, 0, 0); /* VSC_PIPE[i].DATA_ADDRESS */
|
||||||
OUT_RING(ring, fd_bo_size(pipe->bo) - 32); /* VSC_PIPE[i].DATA_LENGTH */
|
OUT_RING(ring, fd_bo_size(pipe->bo) - 32); /* VSC_PIPE[i].DATA_LENGTH */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -789,6 +792,7 @@ fd3_emit_tile_init(struct fd_context *ctx)
|
|||||||
{
|
{
|
||||||
struct fd_ringbuffer *ring = ctx->ring;
|
struct fd_ringbuffer *ring = ctx->ring;
|
||||||
struct fd_gmem_stateobj *gmem = &ctx->gmem;
|
struct fd_gmem_stateobj *gmem = &ctx->gmem;
|
||||||
|
uint32_t rb_render_control;
|
||||||
|
|
||||||
fd3_emit_restore(ctx);
|
fd3_emit_restore(ctx);
|
||||||
|
|
||||||
@@ -813,8 +817,10 @@ fd3_emit_tile_init(struct fd_context *ctx)
|
|||||||
patch_draws(ctx, IGNORE_VISIBILITY);
|
patch_draws(ctx, IGNORE_VISIBILITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
patch_rbrc(ctx, A3XX_RB_RENDER_CONTROL_ENABLE_GMEM |
|
rb_render_control = A3XX_RB_RENDER_CONTROL_ENABLE_GMEM |
|
||||||
A3XX_RB_RENDER_CONTROL_BIN_WIDTH(gmem->bin_w));
|
A3XX_RB_RENDER_CONTROL_BIN_WIDTH(gmem->bin_w);
|
||||||
|
|
||||||
|
patch_rbrc(ctx, rb_render_control);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* before mem2gmem */
|
/* before mem2gmem */
|
||||||
@@ -827,7 +833,7 @@ fd3_emit_tile_prep(struct fd_context *ctx, struct fd_tile *tile)
|
|||||||
uint32_t reg;
|
uint32_t reg;
|
||||||
|
|
||||||
OUT_PKT0(ring, REG_A3XX_RB_DEPTH_INFO, 2);
|
OUT_PKT0(ring, REG_A3XX_RB_DEPTH_INFO, 2);
|
||||||
reg = A3XX_RB_DEPTH_INFO_DEPTH_BASE(depth_base(gmem));
|
reg = A3XX_RB_DEPTH_INFO_DEPTH_BASE(depth_base(ctx));
|
||||||
if (pfb->zsbuf) {
|
if (pfb->zsbuf) {
|
||||||
reg |= A3XX_RB_DEPTH_INFO_DEPTH_FORMAT(fd_pipe2depth(pfb->zsbuf->format));
|
reg |= A3XX_RB_DEPTH_INFO_DEPTH_FORMAT(fd_pipe2depth(pfb->zsbuf->format));
|
||||||
}
|
}
|
||||||
|
@@ -48,12 +48,14 @@ tex_clamp(unsigned wrap)
|
|||||||
case PIPE_TEX_WRAP_REPEAT:
|
case PIPE_TEX_WRAP_REPEAT:
|
||||||
return A3XX_TEX_REPEAT;
|
return A3XX_TEX_REPEAT;
|
||||||
case PIPE_TEX_WRAP_CLAMP:
|
case PIPE_TEX_WRAP_CLAMP:
|
||||||
case PIPE_TEX_WRAP_CLAMP_TO_BORDER:
|
|
||||||
case PIPE_TEX_WRAP_CLAMP_TO_EDGE:
|
case PIPE_TEX_WRAP_CLAMP_TO_EDGE:
|
||||||
return A3XX_TEX_CLAMP_TO_EDGE;
|
return A3XX_TEX_CLAMP_TO_EDGE;
|
||||||
|
case PIPE_TEX_WRAP_CLAMP_TO_BORDER:
|
||||||
|
return A3XX_TEX_CLAMP_TO_BORDER;
|
||||||
case PIPE_TEX_WRAP_MIRROR_CLAMP:
|
case PIPE_TEX_WRAP_MIRROR_CLAMP:
|
||||||
case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER:
|
case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER:
|
||||||
case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE:
|
case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE:
|
||||||
|
return A3XX_TEX_MIRROR_CLAMP;
|
||||||
case PIPE_TEX_WRAP_MIRROR_REPEAT:
|
case PIPE_TEX_WRAP_MIRROR_REPEAT:
|
||||||
return A3XX_TEX_MIRROR_REPEAT;
|
return A3XX_TEX_MIRROR_REPEAT;
|
||||||
default:
|
default:
|
||||||
|
@@ -37,70 +37,44 @@ fd3_pipe2vtx(enum pipe_format format)
|
|||||||
{
|
{
|
||||||
switch (format) {
|
switch (format) {
|
||||||
/* 8-bit buffers. */
|
/* 8-bit buffers. */
|
||||||
case PIPE_FORMAT_A8_UNORM:
|
|
||||||
case PIPE_FORMAT_I8_UNORM:
|
|
||||||
case PIPE_FORMAT_L8_UNORM:
|
|
||||||
case PIPE_FORMAT_R8_UNORM:
|
case PIPE_FORMAT_R8_UNORM:
|
||||||
case PIPE_FORMAT_L8_SRGB:
|
|
||||||
return VFMT_NORM_UBYTE_8;
|
return VFMT_NORM_UBYTE_8;
|
||||||
|
|
||||||
case PIPE_FORMAT_A8_SNORM:
|
|
||||||
case PIPE_FORMAT_I8_SNORM:
|
|
||||||
case PIPE_FORMAT_L8_SNORM:
|
|
||||||
case PIPE_FORMAT_R8_SNORM:
|
case PIPE_FORMAT_R8_SNORM:
|
||||||
return VFMT_NORM_BYTE_8;
|
return VFMT_NORM_BYTE_8;
|
||||||
|
|
||||||
case PIPE_FORMAT_A8_UINT:
|
|
||||||
case PIPE_FORMAT_I8_UINT:
|
|
||||||
case PIPE_FORMAT_L8_UINT:
|
|
||||||
case PIPE_FORMAT_R8_UINT:
|
case PIPE_FORMAT_R8_UINT:
|
||||||
return VFMT_UBYTE_8;
|
return VFMT_UBYTE_8;
|
||||||
|
|
||||||
case PIPE_FORMAT_A8_SINT:
|
|
||||||
case PIPE_FORMAT_I8_SINT:
|
|
||||||
case PIPE_FORMAT_L8_SINT:
|
|
||||||
case PIPE_FORMAT_R8_SINT:
|
case PIPE_FORMAT_R8_SINT:
|
||||||
return VFMT_BYTE_8;
|
return VFMT_BYTE_8;
|
||||||
|
|
||||||
/* 16-bit buffers. */
|
/* 16-bit buffers. */
|
||||||
case PIPE_FORMAT_R16_UNORM:
|
case PIPE_FORMAT_R16_UNORM:
|
||||||
case PIPE_FORMAT_A16_UNORM:
|
|
||||||
case PIPE_FORMAT_L16_UNORM:
|
|
||||||
case PIPE_FORMAT_I16_UNORM:
|
|
||||||
case PIPE_FORMAT_Z16_UNORM:
|
case PIPE_FORMAT_Z16_UNORM:
|
||||||
return VFMT_NORM_USHORT_16;
|
return VFMT_NORM_USHORT_16;
|
||||||
|
|
||||||
case PIPE_FORMAT_R16_SNORM:
|
case PIPE_FORMAT_R16_SNORM:
|
||||||
case PIPE_FORMAT_A16_SNORM:
|
|
||||||
case PIPE_FORMAT_L16_SNORM:
|
|
||||||
case PIPE_FORMAT_I16_SNORM:
|
|
||||||
return VFMT_NORM_SHORT_16;
|
return VFMT_NORM_SHORT_16;
|
||||||
|
|
||||||
case PIPE_FORMAT_R16_UINT:
|
case PIPE_FORMAT_R16_UINT:
|
||||||
case PIPE_FORMAT_A16_UINT:
|
|
||||||
case PIPE_FORMAT_L16_UINT:
|
|
||||||
case PIPE_FORMAT_I16_UINT:
|
|
||||||
return VFMT_USHORT_16;
|
return VFMT_USHORT_16;
|
||||||
|
|
||||||
case PIPE_FORMAT_R16_SINT:
|
case PIPE_FORMAT_R16_SINT:
|
||||||
case PIPE_FORMAT_A16_SINT:
|
|
||||||
case PIPE_FORMAT_L16_SINT:
|
|
||||||
case PIPE_FORMAT_I16_SINT:
|
|
||||||
return VFMT_SHORT_16;
|
return VFMT_SHORT_16;
|
||||||
|
|
||||||
case PIPE_FORMAT_L8A8_UNORM:
|
case PIPE_FORMAT_R16_FLOAT:
|
||||||
|
return VFMT_FLOAT_16;
|
||||||
|
|
||||||
case PIPE_FORMAT_R8G8_UNORM:
|
case PIPE_FORMAT_R8G8_UNORM:
|
||||||
return VFMT_NORM_UBYTE_8_8;
|
return VFMT_NORM_UBYTE_8_8;
|
||||||
|
|
||||||
case PIPE_FORMAT_L8A8_SNORM:
|
|
||||||
case PIPE_FORMAT_R8G8_SNORM:
|
case PIPE_FORMAT_R8G8_SNORM:
|
||||||
return VFMT_NORM_BYTE_8_8;
|
return VFMT_NORM_BYTE_8_8;
|
||||||
|
|
||||||
case PIPE_FORMAT_L8A8_UINT:
|
|
||||||
case PIPE_FORMAT_R8G8_UINT:
|
case PIPE_FORMAT_R8G8_UINT:
|
||||||
return VFMT_UBYTE_8_8;
|
return VFMT_UBYTE_8_8;
|
||||||
|
|
||||||
case PIPE_FORMAT_L8A8_SINT:
|
|
||||||
case PIPE_FORMAT_R8G8_SINT:
|
case PIPE_FORMAT_R8G8_SINT:
|
||||||
return VFMT_BYTE_8_8;
|
return VFMT_BYTE_8_8;
|
||||||
|
|
||||||
@@ -121,42 +95,62 @@ fd3_pipe2vtx(enum pipe_format format)
|
|||||||
case PIPE_FORMAT_A8B8G8R8_UNORM:
|
case PIPE_FORMAT_A8B8G8R8_UNORM:
|
||||||
case PIPE_FORMAT_A8R8G8B8_UNORM:
|
case PIPE_FORMAT_A8R8G8B8_UNORM:
|
||||||
case PIPE_FORMAT_B8G8R8A8_UNORM:
|
case PIPE_FORMAT_B8G8R8A8_UNORM:
|
||||||
case PIPE_FORMAT_B8G8R8X8_UNORM:
|
|
||||||
case PIPE_FORMAT_R8G8B8A8_UNORM:
|
case PIPE_FORMAT_R8G8B8A8_UNORM:
|
||||||
case PIPE_FORMAT_R8G8B8X8_UNORM:
|
|
||||||
case PIPE_FORMAT_X8B8G8R8_UNORM:
|
|
||||||
case PIPE_FORMAT_X8R8G8B8_UNORM:
|
|
||||||
case PIPE_FORMAT_A8B8G8R8_SRGB:
|
|
||||||
case PIPE_FORMAT_B8G8R8A8_SRGB:
|
|
||||||
return VFMT_NORM_UBYTE_8_8_8_8;
|
return VFMT_NORM_UBYTE_8_8_8_8;
|
||||||
|
|
||||||
case PIPE_FORMAT_R8G8B8A8_SNORM:
|
case PIPE_FORMAT_R8G8B8A8_SNORM:
|
||||||
case PIPE_FORMAT_R8G8B8X8_SNORM:
|
|
||||||
return VFMT_NORM_BYTE_8_8_8_8;
|
return VFMT_NORM_BYTE_8_8_8_8;
|
||||||
|
|
||||||
case PIPE_FORMAT_R8G8B8A8_UINT:
|
case PIPE_FORMAT_R8G8B8A8_UINT:
|
||||||
case PIPE_FORMAT_R8G8B8X8_UINT:
|
|
||||||
return VFMT_UBYTE_8_8_8_8;
|
return VFMT_UBYTE_8_8_8_8;
|
||||||
|
|
||||||
case PIPE_FORMAT_R8G8B8A8_SINT:
|
case PIPE_FORMAT_R8G8B8A8_SINT:
|
||||||
case PIPE_FORMAT_R8G8B8X8_SINT:
|
|
||||||
return VFMT_BYTE_8_8_8_8;
|
return VFMT_BYTE_8_8_8_8;
|
||||||
|
|
||||||
/* TODO probably need gles3 blob drivers to find the 32bit int formats:
|
case PIPE_FORMAT_R16G16_SSCALED:
|
||||||
case PIPE_FORMAT_R32_UINT:
|
return VFMT_SHORT_16_16;
|
||||||
case PIPE_FORMAT_R32_SINT:
|
|
||||||
case PIPE_FORMAT_A32_UINT:
|
case PIPE_FORMAT_R16G16_FLOAT:
|
||||||
case PIPE_FORMAT_A32_SINT:
|
return VFMT_FLOAT_16_16;
|
||||||
case PIPE_FORMAT_L32_UINT:
|
|
||||||
case PIPE_FORMAT_L32_SINT:
|
case PIPE_FORMAT_R16G16_UINT:
|
||||||
case PIPE_FORMAT_I32_UINT:
|
return VFMT_USHORT_16_16;
|
||||||
case PIPE_FORMAT_I32_SINT:
|
|
||||||
*/
|
case PIPE_FORMAT_R16G16_UNORM:
|
||||||
|
return VFMT_NORM_USHORT_16_16;
|
||||||
|
|
||||||
|
case PIPE_FORMAT_R16G16_SNORM:
|
||||||
|
return VFMT_NORM_SHORT_16_16;
|
||||||
|
|
||||||
|
case PIPE_FORMAT_R10G10B10A2_UNORM:
|
||||||
|
return VFMT_NORM_UINT_10_10_10_2;
|
||||||
|
|
||||||
|
case PIPE_FORMAT_R10G10B10A2_SNORM:
|
||||||
|
return VFMT_NORM_INT_10_10_10_2;
|
||||||
|
|
||||||
|
case PIPE_FORMAT_R10G10B10A2_USCALED:
|
||||||
|
return VFMT_UINT_10_10_10_2;
|
||||||
|
|
||||||
|
case PIPE_FORMAT_R10G10B10A2_SSCALED:
|
||||||
|
return VFMT_INT_10_10_10_2;
|
||||||
|
|
||||||
|
/* 48-bit buffers. */
|
||||||
|
case PIPE_FORMAT_R16G16B16_FLOAT:
|
||||||
|
return VFMT_FLOAT_16_16_16;
|
||||||
|
|
||||||
|
case PIPE_FORMAT_R16G16B16_SSCALED:
|
||||||
|
return VFMT_SHORT_16_16_16;
|
||||||
|
|
||||||
|
case PIPE_FORMAT_R16G16B16_UINT:
|
||||||
|
return VFMT_USHORT_16_16_16;
|
||||||
|
|
||||||
|
case PIPE_FORMAT_R16G16B16_SNORM:
|
||||||
|
return VFMT_NORM_SHORT_16_16_16;
|
||||||
|
|
||||||
|
case PIPE_FORMAT_R16G16B16_UNORM:
|
||||||
|
return VFMT_NORM_USHORT_16_16_16;
|
||||||
|
|
||||||
case PIPE_FORMAT_R32_FLOAT:
|
case PIPE_FORMAT_R32_FLOAT:
|
||||||
case PIPE_FORMAT_A32_FLOAT:
|
|
||||||
case PIPE_FORMAT_L32_FLOAT:
|
|
||||||
case PIPE_FORMAT_I32_FLOAT:
|
|
||||||
case PIPE_FORMAT_Z32_FLOAT:
|
case PIPE_FORMAT_Z32_FLOAT:
|
||||||
return VFMT_FLOAT_32;
|
return VFMT_FLOAT_32;
|
||||||
|
|
||||||
@@ -177,23 +171,14 @@ fd3_pipe2vtx(enum pipe_format format)
|
|||||||
return VFMT_SHORT_16_16_16_16;
|
return VFMT_SHORT_16_16_16_16;
|
||||||
|
|
||||||
case PIPE_FORMAT_R32G32_FLOAT:
|
case PIPE_FORMAT_R32G32_FLOAT:
|
||||||
case PIPE_FORMAT_L32A32_FLOAT:
|
|
||||||
return VFMT_FLOAT_32_32;
|
return VFMT_FLOAT_32_32;
|
||||||
|
|
||||||
case PIPE_FORMAT_R32G32_FIXED:
|
case PIPE_FORMAT_R32G32_FIXED:
|
||||||
return VFMT_FIXED_32_32;
|
return VFMT_FIXED_32_32;
|
||||||
|
|
||||||
case PIPE_FORMAT_R16G16B16A16_FLOAT:
|
case PIPE_FORMAT_R16G16B16A16_FLOAT:
|
||||||
case PIPE_FORMAT_R16G16B16X16_FLOAT:
|
|
||||||
return VFMT_FLOAT_16_16_16_16;
|
return VFMT_FLOAT_16_16_16_16;
|
||||||
|
|
||||||
/* TODO probably need gles3 blob drivers to find the 32bit int formats:
|
|
||||||
case PIPE_FORMAT_R32G32_SINT:
|
|
||||||
case PIPE_FORMAT_R32G32_UINT:
|
|
||||||
case PIPE_FORMAT_L32A32_UINT:
|
|
||||||
case PIPE_FORMAT_L32A32_SINT:
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* 96-bit buffers. */
|
/* 96-bit buffers. */
|
||||||
case PIPE_FORMAT_R32G32B32_FLOAT:
|
case PIPE_FORMAT_R32G32B32_FLOAT:
|
||||||
return VFMT_FLOAT_32_32_32;
|
return VFMT_FLOAT_32_32_32;
|
||||||
@@ -203,7 +188,6 @@ fd3_pipe2vtx(enum pipe_format format)
|
|||||||
|
|
||||||
/* 128-bit buffers. */
|
/* 128-bit buffers. */
|
||||||
case PIPE_FORMAT_R32G32B32A32_FLOAT:
|
case PIPE_FORMAT_R32G32B32A32_FLOAT:
|
||||||
case PIPE_FORMAT_R32G32B32X32_FLOAT:
|
|
||||||
return VFMT_FLOAT_32_32_32_32;
|
return VFMT_FLOAT_32_32_32_32;
|
||||||
|
|
||||||
case PIPE_FORMAT_R32G32B32A32_FIXED:
|
case PIPE_FORMAT_R32G32B32A32_FIXED:
|
||||||
@@ -214,6 +198,20 @@ fd3_pipe2vtx(enum pipe_format format)
|
|||||||
case PIPE_FORMAT_R32G32B32A32_UNORM:
|
case PIPE_FORMAT_R32G32B32A32_UNORM:
|
||||||
case PIPE_FORMAT_R32G32B32A32_SINT:
|
case PIPE_FORMAT_R32G32B32A32_SINT:
|
||||||
case PIPE_FORMAT_R32G32B32A32_UINT:
|
case PIPE_FORMAT_R32G32B32A32_UINT:
|
||||||
|
|
||||||
|
case PIPE_FORMAT_R32_UINT:
|
||||||
|
case PIPE_FORMAT_R32_SINT:
|
||||||
|
case PIPE_FORMAT_A32_UINT:
|
||||||
|
case PIPE_FORMAT_A32_SINT:
|
||||||
|
case PIPE_FORMAT_L32_UINT:
|
||||||
|
case PIPE_FORMAT_L32_SINT:
|
||||||
|
case PIPE_FORMAT_I32_UINT:
|
||||||
|
case PIPE_FORMAT_I32_SINT:
|
||||||
|
|
||||||
|
case PIPE_FORMAT_R32G32_SINT:
|
||||||
|
case PIPE_FORMAT_R32G32_UINT:
|
||||||
|
case PIPE_FORMAT_L32A32_UINT:
|
||||||
|
case PIPE_FORMAT_L32A32_SINT:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -358,8 +356,22 @@ fd3_pipe2swap(enum pipe_format format)
|
|||||||
switch (format) {
|
switch (format) {
|
||||||
case PIPE_FORMAT_B8G8R8A8_UNORM:
|
case PIPE_FORMAT_B8G8R8A8_UNORM:
|
||||||
case PIPE_FORMAT_B8G8R8X8_UNORM:
|
case PIPE_FORMAT_B8G8R8X8_UNORM:
|
||||||
|
case PIPE_FORMAT_B8G8R8A8_SRGB:
|
||||||
|
case PIPE_FORMAT_B8G8R8X8_SRGB:
|
||||||
return WXYZ;
|
return WXYZ;
|
||||||
|
|
||||||
|
case PIPE_FORMAT_A8R8G8B8_UNORM:
|
||||||
|
case PIPE_FORMAT_X8R8G8B8_UNORM:
|
||||||
|
case PIPE_FORMAT_A8R8G8B8_SRGB:
|
||||||
|
case PIPE_FORMAT_X8R8G8B8_SRGB:
|
||||||
|
return ZYXW;
|
||||||
|
|
||||||
|
case PIPE_FORMAT_A8B8G8R8_UNORM:
|
||||||
|
case PIPE_FORMAT_X8B8G8R8_UNORM:
|
||||||
|
case PIPE_FORMAT_A8B8G8R8_SRGB:
|
||||||
|
case PIPE_FORMAT_X8B8G8R8_SRGB:
|
||||||
|
return XYZW;
|
||||||
|
|
||||||
case PIPE_FORMAT_R8G8B8A8_UNORM:
|
case PIPE_FORMAT_R8G8B8A8_UNORM:
|
||||||
case PIPE_FORMAT_R8G8B8X8_UNORM:
|
case PIPE_FORMAT_R8G8B8X8_UNORM:
|
||||||
case PIPE_FORMAT_Z24X8_UNORM:
|
case PIPE_FORMAT_Z24X8_UNORM:
|
||||||
|
@@ -10,11 +10,11 @@ git clone https://github.com/freedreno/envytools.git
|
|||||||
The rules-ng-ng source files this header was generated from are:
|
The rules-ng-ng source files this header was generated from are:
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27)
|
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32580 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10186 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-06-02 15:21:30)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 57831 bytes, from 2014-05-19 21:02:34)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 58020 bytes, from 2014-06-13 17:29:47)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26293 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-06-13 17:28:10)
|
||||||
|
|
||||||
Copyright (C) 2013-2014 by the following authors:
|
Copyright (C) 2013-2014 by the following authors:
|
||||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||||
@@ -87,15 +87,6 @@ enum adreno_rb_blend_factor {
|
|||||||
FACTOR_SRC_ALPHA_SATURATE = 16,
|
FACTOR_SRC_ALPHA_SATURATE = 16,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum adreno_rb_blend_opcode {
|
|
||||||
BLEND_DST_PLUS_SRC = 0,
|
|
||||||
BLEND_SRC_MINUS_DST = 1,
|
|
||||||
BLEND_MIN_DST_SRC = 2,
|
|
||||||
BLEND_MAX_DST_SRC = 3,
|
|
||||||
BLEND_DST_MINUS_SRC = 4,
|
|
||||||
BLEND_DST_PLUS_SRC_BIAS = 5,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum adreno_rb_surface_endian {
|
enum adreno_rb_surface_endian {
|
||||||
ENDIAN_NONE = 0,
|
ENDIAN_NONE = 0,
|
||||||
ENDIAN_8IN16 = 1,
|
ENDIAN_8IN16 = 1,
|
||||||
|
@@ -10,11 +10,11 @@ git clone https://github.com/freedreno/envytools.git
|
|||||||
The rules-ng-ng source files this header was generated from are:
|
The rules-ng-ng source files this header was generated from are:
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27)
|
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32580 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10186 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-06-02 15:21:30)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 57831 bytes, from 2014-05-19 21:02:34)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 58020 bytes, from 2014-06-13 17:29:47)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26293 bytes, from 2014-05-16 11:51:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-06-13 17:28:10)
|
||||||
|
|
||||||
Copyright (C) 2013-2014 by the following authors:
|
Copyright (C) 2013-2014 by the following authors:
|
||||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||||
|
@@ -48,6 +48,10 @@ realloc_bo(struct fd_resource *rsc, uint32_t size)
|
|||||||
uint32_t flags = DRM_FREEDRENO_GEM_CACHE_WCOMBINE |
|
uint32_t flags = DRM_FREEDRENO_GEM_CACHE_WCOMBINE |
|
||||||
DRM_FREEDRENO_GEM_TYPE_KMEM; /* TODO */
|
DRM_FREEDRENO_GEM_TYPE_KMEM; /* TODO */
|
||||||
|
|
||||||
|
/* if we start using things other than write-combine,
|
||||||
|
* be sure to check for PIPE_RESOURCE_FLAG_MAP_COHERENT
|
||||||
|
*/
|
||||||
|
|
||||||
if (rsc->bo)
|
if (rsc->bo)
|
||||||
fd_bo_del(rsc->bo);
|
fd_bo_del(rsc->bo);
|
||||||
|
|
||||||
|
@@ -50,8 +50,8 @@
|
|||||||
#include "freedreno_query.h"
|
#include "freedreno_query.h"
|
||||||
#include "freedreno_util.h"
|
#include "freedreno_util.h"
|
||||||
|
|
||||||
#include "fd2_screen.h"
|
#include "a2xx/fd2_screen.h"
|
||||||
#include "fd3_screen.h"
|
#include "a3xx/fd3_screen.h"
|
||||||
|
|
||||||
/* XXX this should go away */
|
/* XXX this should go away */
|
||||||
#include "state_tracker/drm_driver.h"
|
#include "state_tracker/drm_driver.h"
|
||||||
@@ -161,9 +161,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
|
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
|
||||||
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
|
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
|
||||||
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
|
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
|
||||||
case PIPE_CAP_SM3:
|
|
||||||
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
||||||
case PIPE_CAP_TEXTURE_BARRIER:
|
|
||||||
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_TGSI_INSTANCEID:
|
case PIPE_CAP_TGSI_INSTANCEID:
|
||||||
@@ -173,8 +171,8 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_COMPUTE:
|
case PIPE_CAP_COMPUTE:
|
||||||
case PIPE_CAP_START_INSTANCE:
|
case PIPE_CAP_START_INSTANCE:
|
||||||
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
|
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
|
||||||
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
|
||||||
case PIPE_CAP_USER_CONSTANT_BUFFERS:
|
case PIPE_CAP_USER_CONSTANT_BUFFERS:
|
||||||
|
case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
||||||
@@ -182,6 +180,9 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
|
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
|
||||||
case PIPE_CAP_CONDITIONAL_RENDER:
|
case PIPE_CAP_CONDITIONAL_RENDER:
|
||||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||||
|
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
||||||
|
case PIPE_CAP_TEXTURE_BARRIER:
|
||||||
|
case PIPE_CAP_SM3:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
|
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
|
||||||
@@ -207,7 +208,6 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_TGSI_VS_LAYER:
|
case PIPE_CAP_TGSI_VS_LAYER:
|
||||||
case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS:
|
case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS:
|
||||||
case PIPE_CAP_TEXTURE_GATHER_SM5:
|
case PIPE_CAP_TEXTURE_GATHER_SM5:
|
||||||
case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
|
|
||||||
case PIPE_CAP_FAKE_SW_MSAA:
|
case PIPE_CAP_FAKE_SW_MSAA:
|
||||||
case PIPE_CAP_TEXTURE_QUERY_LOD:
|
case PIPE_CAP_TEXTURE_QUERY_LOD:
|
||||||
case PIPE_CAP_SAMPLE_SHADING:
|
case PIPE_CAP_SAMPLE_SHADING:
|
||||||
|
@@ -57,7 +57,7 @@ static void bind_sampler_states(struct fd_texture_stateobj *prog,
|
|||||||
|
|
||||||
for (i = 0; i < nr; i++) {
|
for (i = 0; i < nr; i++) {
|
||||||
if (hwcso[i])
|
if (hwcso[i])
|
||||||
new_nr++;
|
new_nr = i + 1;
|
||||||
prog->samplers[i] = hwcso[i];
|
prog->samplers[i] = hwcso[i];
|
||||||
prog->dirty_samplers |= (1 << i);
|
prog->dirty_samplers |= (1 << i);
|
||||||
}
|
}
|
||||||
@@ -78,7 +78,7 @@ static void set_sampler_views(struct fd_texture_stateobj *prog,
|
|||||||
|
|
||||||
for (i = 0; i < nr; i++) {
|
for (i = 0; i < nr; i++) {
|
||||||
if (views[i])
|
if (views[i])
|
||||||
new_nr++;
|
new_nr = i + 1;
|
||||||
pipe_sampler_view_reference(&prog->textures[i], views[i]);
|
pipe_sampler_view_reference(&prog->textures[i], views[i]);
|
||||||
prog->dirty_samplers |= (1 << i);
|
prog->dirty_samplers |= (1 << i);
|
||||||
}
|
}
|
||||||
|
@@ -111,26 +111,6 @@ fd_blend_factor(unsigned factor)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum adreno_rb_blend_opcode
|
|
||||||
fd_blend_func(unsigned func)
|
|
||||||
{
|
|
||||||
switch (func) {
|
|
||||||
case PIPE_BLEND_ADD:
|
|
||||||
return BLEND_DST_PLUS_SRC;
|
|
||||||
case PIPE_BLEND_MIN:
|
|
||||||
return BLEND_MIN_DST_SRC;
|
|
||||||
case PIPE_BLEND_MAX:
|
|
||||||
return BLEND_MAX_DST_SRC;
|
|
||||||
case PIPE_BLEND_SUBTRACT:
|
|
||||||
return BLEND_SRC_MINUS_DST;
|
|
||||||
case PIPE_BLEND_REVERSE_SUBTRACT:
|
|
||||||
return BLEND_DST_MINUS_SRC;
|
|
||||||
default:
|
|
||||||
DBG("invalid blend func: %x", func);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum adreno_pa_su_sc_draw
|
enum adreno_pa_su_sc_draw
|
||||||
fd_polygon_mode(unsigned mode)
|
fd_polygon_mode(unsigned mode)
|
||||||
{
|
{
|
||||||
|
@@ -45,7 +45,6 @@
|
|||||||
enum adreno_rb_depth_format fd_pipe2depth(enum pipe_format format);
|
enum adreno_rb_depth_format fd_pipe2depth(enum pipe_format format);
|
||||||
enum pc_di_index_size fd_pipe2index(enum pipe_format format);
|
enum pc_di_index_size fd_pipe2index(enum pipe_format format);
|
||||||
enum adreno_rb_blend_factor fd_blend_factor(unsigned factor);
|
enum adreno_rb_blend_factor fd_blend_factor(unsigned factor);
|
||||||
enum adreno_rb_blend_opcode fd_blend_func(unsigned func);
|
|
||||||
enum adreno_pa_su_sc_draw fd_polygon_mode(unsigned mode);
|
enum adreno_pa_su_sc_draw fd_polygon_mode(unsigned mode);
|
||||||
enum adreno_stencil_op fd_stencil_op(unsigned op);
|
enum adreno_stencil_op fd_stencil_op(unsigned op);
|
||||||
|
|
||||||
|
@@ -115,7 +115,7 @@ llvmpipe_texture_layout(struct llvmpipe_screen *screen,
|
|||||||
lpr->row_stride[level] = align(nblocksx * block_size, util_cpu_caps.cacheline);
|
lpr->row_stride[level] = align(nblocksx * block_size, util_cpu_caps.cacheline);
|
||||||
|
|
||||||
/* if row_stride * height > LP_MAX_TEXTURE_SIZE */
|
/* if row_stride * height > LP_MAX_TEXTURE_SIZE */
|
||||||
if (lpr->row_stride[level] > LP_MAX_TEXTURE_SIZE / nblocksy) {
|
if ((uint64_t)lpr->row_stride[level] * nblocksy > LP_MAX_TEXTURE_SIZE) {
|
||||||
/* image too large */
|
/* image too large */
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
@@ -28,18 +28,19 @@ include $(LOCAL_PATH)/Makefile.sources
|
|||||||
|
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
LOCAL_SRC_FILES := $(C_SOURCES) \
|
LOCAL_SRC_FILES := \
|
||||||
|
$(C_SOURCES) \
|
||||||
$(NV30_C_SOURCES) \
|
$(NV30_C_SOURCES) \
|
||||||
$(NV50_CODEGEN_SOURCES) \
|
$(NV50_CODEGEN_SOURCES) \
|
||||||
$(NV50_C_SOURES) \
|
$(NV50_C_SOURES) \
|
||||||
$(NVC0_CODEGEN_SOURCES) \
|
$(NVC0_CODEGEN_SOURCES) \
|
||||||
$(NVC0_C_SOURCES)
|
$(NVC0_C_SOURCES)
|
||||||
|
|
||||||
LOCAL_C_INCLUDES := $(DRM_TOP) \
|
LOCAL_C_INCLUDES := \
|
||||||
$(DRM_TOP)/include/drm \
|
$(TARGET_OUT_HEADERS)/libdrm
|
||||||
$(DRM_TOP)/nouveau
|
|
||||||
|
|
||||||
LOCAL_MODULE := libmesa_pipe_nouveau
|
LOCAL_MODULE := libmesa_pipe_nouveau
|
||||||
|
|
||||||
|
include external/stlport/libstlport.mk
|
||||||
include $(GALLIUM_COMMON_MK)
|
include $(GALLIUM_COMMON_MK)
|
||||||
include $(BUILD_STATIC_LIBRARY)
|
include $(BUILD_STATIC_LIBRARY)
|
||||||
|
@@ -177,6 +177,7 @@ struct nv50_ir_prog_info
|
|||||||
uint8_t vertexId; /* system value index of VertexID */
|
uint8_t vertexId; /* system value index of VertexID */
|
||||||
uint8_t edgeFlagIn;
|
uint8_t edgeFlagIn;
|
||||||
uint8_t edgeFlagOut;
|
uint8_t edgeFlagOut;
|
||||||
|
int8_t viewportId; /* output index of ViewportIndex */
|
||||||
uint8_t fragDepth; /* output index of FragDepth */
|
uint8_t fragDepth; /* output index of FragDepth */
|
||||||
uint8_t sampleMask; /* output index of SampleMask */
|
uint8_t sampleMask; /* output index of SampleMask */
|
||||||
boolean sampleInterp; /* perform sample interp on all fp inputs */
|
boolean sampleInterp; /* perform sample interp on all fp inputs */
|
||||||
|
@@ -790,6 +790,8 @@ bool Source::scanSource()
|
|||||||
info->prop.gp.instanceCount = 1; // default value
|
info->prop.gp.instanceCount = 1; // default value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
info->io.viewportId = -1;
|
||||||
|
|
||||||
info->immd.data = (uint32_t *)MALLOC(scan.immediate_count * 16);
|
info->immd.data = (uint32_t *)MALLOC(scan.immediate_count * 16);
|
||||||
info->immd.type = (ubyte *)MALLOC(scan.immediate_count * sizeof(ubyte));
|
info->immd.type = (ubyte *)MALLOC(scan.immediate_count * sizeof(ubyte));
|
||||||
|
|
||||||
@@ -982,6 +984,9 @@ bool Source::scanDeclaration(const struct tgsi_full_declaration *decl)
|
|||||||
case TGSI_SEMANTIC_SAMPLEMASK:
|
case TGSI_SEMANTIC_SAMPLEMASK:
|
||||||
info->io.sampleMask = i;
|
info->io.sampleMask = i;
|
||||||
break;
|
break;
|
||||||
|
case TGSI_SEMANTIC_VIEWPORT_INDEX:
|
||||||
|
info->io.viewportId = i;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1258,6 +1263,8 @@ private:
|
|||||||
Stack joinBBs; // fork BB, for inserting join ops on ENDIF
|
Stack joinBBs; // fork BB, for inserting join ops on ENDIF
|
||||||
Stack loopBBs; // loop headers
|
Stack loopBBs; // loop headers
|
||||||
Stack breakBBs; // end of / after loop
|
Stack breakBBs; // end of / after loop
|
||||||
|
|
||||||
|
Value *viewport;
|
||||||
};
|
};
|
||||||
|
|
||||||
Symbol *
|
Symbol *
|
||||||
@@ -1555,8 +1562,16 @@ Converter::storeDst(const tgsi::Instruction::DstRegister dst, int c,
|
|||||||
mkOp2(OP_WRSV, TYPE_U32, NULL, dstToSym(dst, c), val);
|
mkOp2(OP_WRSV, TYPE_U32, NULL, dstToSym(dst, c), val);
|
||||||
} else
|
} else
|
||||||
if (f == TGSI_FILE_OUTPUT && prog->getType() != Program::TYPE_FRAGMENT) {
|
if (f == TGSI_FILE_OUTPUT && prog->getType() != Program::TYPE_FRAGMENT) {
|
||||||
if (ptr || (info->out[idx].mask & (1 << c)))
|
|
||||||
mkStore(OP_EXPORT, TYPE_U32, dstToSym(dst, c), ptr, val);
|
if (ptr || (info->out[idx].mask & (1 << c))) {
|
||||||
|
/* Save the viewport index into a scratch register so that it can be
|
||||||
|
exported at EMIT time */
|
||||||
|
if (info->out[idx].sn == TGSI_SEMANTIC_VIEWPORT_INDEX &&
|
||||||
|
viewport != NULL)
|
||||||
|
mkOp1(OP_MOV, TYPE_U32, viewport, val);
|
||||||
|
else
|
||||||
|
mkStore(OP_EXPORT, TYPE_U32, dstToSym(dst, c), ptr, val);
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
if (f == TGSI_FILE_TEMPORARY ||
|
if (f == TGSI_FILE_TEMPORARY ||
|
||||||
f == TGSI_FILE_PREDICATE ||
|
f == TGSI_FILE_PREDICATE ||
|
||||||
@@ -2489,7 +2504,7 @@ Converter::handleInstruction(const struct tgsi_full_instruction *insn)
|
|||||||
break;
|
break;
|
||||||
case TGSI_OPCODE_TXB2:
|
case TGSI_OPCODE_TXB2:
|
||||||
case TGSI_OPCODE_TXL2:
|
case TGSI_OPCODE_TXL2:
|
||||||
handleTEX(dst0, 2, 2, 0x10, 0x11, 0x00, 0x00);
|
handleTEX(dst0, 2, 2, 0x10, 0x0f, 0x00, 0x00);
|
||||||
break;
|
break;
|
||||||
case TGSI_OPCODE_SAMPLE:
|
case TGSI_OPCODE_SAMPLE:
|
||||||
case TGSI_OPCODE_SAMPLE_B:
|
case TGSI_OPCODE_SAMPLE_B:
|
||||||
@@ -2523,6 +2538,13 @@ Converter::handleInstruction(const struct tgsi_full_instruction *insn)
|
|||||||
mkCvt(OP_CVT, dstTy, dst0[c], srcTy, fetchSrc(0, c));
|
mkCvt(OP_CVT, dstTy, dst0[c], srcTy, fetchSrc(0, c));
|
||||||
break;
|
break;
|
||||||
case TGSI_OPCODE_EMIT:
|
case TGSI_OPCODE_EMIT:
|
||||||
|
/* export the saved viewport index */
|
||||||
|
if (viewport != NULL) {
|
||||||
|
Symbol *vpSym = mkSymbol(FILE_SHADER_OUTPUT, 0, TYPE_U32,
|
||||||
|
info->out[info->io.viewportId].slot[0] * 4);
|
||||||
|
mkStore(OP_EXPORT, TYPE_U32, vpSym, NULL, viewport);
|
||||||
|
}
|
||||||
|
/* fallthrough */
|
||||||
case TGSI_OPCODE_ENDPRIM:
|
case TGSI_OPCODE_ENDPRIM:
|
||||||
// get vertex stream if specified (must be immediate)
|
// get vertex stream if specified (must be immediate)
|
||||||
src0 = tgsi.srcCount() ?
|
src0 = tgsi.srcCount() ?
|
||||||
@@ -2952,6 +2974,11 @@ Converter::run()
|
|||||||
mkOp1(OP_RCP, TYPE_F32, fragCoord[3], fragCoord[3]);
|
mkOp1(OP_RCP, TYPE_F32, fragCoord[3], fragCoord[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (info->io.viewportId >= 0)
|
||||||
|
viewport = getScratch();
|
||||||
|
else
|
||||||
|
viewport = NULL;
|
||||||
|
|
||||||
for (ip = 0; ip < code->scan.num_instructions; ++ip) {
|
for (ip = 0; ip < code->scan.num_instructions; ++ip) {
|
||||||
if (!handleInstruction(&code->insns[ip]))
|
if (!handleInstruction(&code->insns[ip]))
|
||||||
return false;
|
return false;
|
||||||
|
@@ -797,6 +797,16 @@ NV50LoweringPreSSA::handleTXB(TexInstruction *i)
|
|||||||
const CondCode cc[4] = { CC_EQU, CC_S, CC_C, CC_O };
|
const CondCode cc[4] = { CC_EQU, CC_S, CC_C, CC_O };
|
||||||
int l, d;
|
int l, d;
|
||||||
|
|
||||||
|
// We can't actually apply bias *and* do a compare for a cube
|
||||||
|
// texture. Since the compare has to be done before the filtering, just
|
||||||
|
// drop the bias on the floor.
|
||||||
|
if (i->tex.target == TEX_TARGET_CUBE_SHADOW) {
|
||||||
|
i->op = OP_TEX;
|
||||||
|
i->setSrc(3, i->getSrc(4));
|
||||||
|
i->setSrc(4, NULL);
|
||||||
|
return handleTEX(i);
|
||||||
|
}
|
||||||
|
|
||||||
handleTEX(i);
|
handleTEX(i);
|
||||||
Value *bias = i->getSrc(i->tex.target.getArgCount());
|
Value *bias = i->getSrc(i->tex.target.getArgCount());
|
||||||
if (bias->isUniform())
|
if (bias->isUniform())
|
||||||
|
@@ -26,6 +26,7 @@
|
|||||||
#include "codegen/nv50_ir_target_nvc0.h"
|
#include "codegen/nv50_ir_target_nvc0.h"
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
#include <tr1/unordered_set>
|
||||||
|
|
||||||
namespace nv50_ir {
|
namespace nv50_ir {
|
||||||
|
|
||||||
@@ -148,7 +149,8 @@ private:
|
|||||||
bool insertTextureBarriers(Function *);
|
bool insertTextureBarriers(Function *);
|
||||||
inline bool insnDominatedBy(const Instruction *, const Instruction *) const;
|
inline bool insnDominatedBy(const Instruction *, const Instruction *) const;
|
||||||
void findFirstUses(const Instruction *tex, const Instruction *def,
|
void findFirstUses(const Instruction *tex, const Instruction *def,
|
||||||
std::list<TexUse>&);
|
std::list<TexUse>&,
|
||||||
|
std::tr1::unordered_set<const Instruction *>&);
|
||||||
void findOverwritingDefs(const Instruction *tex, Instruction *insn,
|
void findOverwritingDefs(const Instruction *tex, Instruction *insn,
|
||||||
const BasicBlock *term,
|
const BasicBlock *term,
|
||||||
std::list<TexUse>&);
|
std::list<TexUse>&);
|
||||||
@@ -230,15 +232,29 @@ NVC0LegalizePostRA::findOverwritingDefs(const Instruction *texi,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
NVC0LegalizePostRA::findFirstUses(const Instruction *texi,
|
NVC0LegalizePostRA::findFirstUses(
|
||||||
const Instruction *insn,
|
const Instruction *texi,
|
||||||
std::list<TexUse> &uses)
|
const Instruction *insn,
|
||||||
|
std::list<TexUse> &uses,
|
||||||
|
std::tr1::unordered_set<const Instruction *>& visited)
|
||||||
{
|
{
|
||||||
for (int d = 0; insn->defExists(d); ++d) {
|
for (int d = 0; insn->defExists(d); ++d) {
|
||||||
Value *v = insn->getDef(d);
|
Value *v = insn->getDef(d);
|
||||||
for (Value::UseIterator u = v->uses.begin(); u != v->uses.end(); ++u) {
|
for (Value::UseIterator u = v->uses.begin(); u != v->uses.end(); ++u) {
|
||||||
Instruction *usei = (*u)->getInsn();
|
Instruction *usei = (*u)->getInsn();
|
||||||
|
|
||||||
|
// NOTE: In case of a loop that overwrites a value but never uses
|
||||||
|
// it, it can happen that we have a cycle of uses that consists only
|
||||||
|
// of phis and no-op moves and will thus cause an infinite loop here
|
||||||
|
// since these are not considered actual uses.
|
||||||
|
// The most obvious (and perhaps the only) way to prevent this is to
|
||||||
|
// remember which instructions we've already visited.
|
||||||
|
|
||||||
|
if (visited.find(usei) != visited.end())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
visited.insert(usei);
|
||||||
|
|
||||||
if (usei->op == OP_PHI || usei->op == OP_UNION) {
|
if (usei->op == OP_PHI || usei->op == OP_UNION) {
|
||||||
// need a barrier before WAW cases
|
// need a barrier before WAW cases
|
||||||
for (int s = 0; usei->srcExists(s); ++s) {
|
for (int s = 0; usei->srcExists(s); ++s) {
|
||||||
@@ -253,11 +269,11 @@ NVC0LegalizePostRA::findFirstUses(const Instruction *texi,
|
|||||||
usei->op == OP_PHI ||
|
usei->op == OP_PHI ||
|
||||||
usei->op == OP_UNION) {
|
usei->op == OP_UNION) {
|
||||||
// these uses don't manifest in the machine code
|
// these uses don't manifest in the machine code
|
||||||
findFirstUses(texi, usei, uses);
|
findFirstUses(texi, usei, uses, visited);
|
||||||
} else
|
} else
|
||||||
if (usei->op == OP_MOV && usei->getDef(0)->equals(usei->getSrc(0)) &&
|
if (usei->op == OP_MOV && usei->getDef(0)->equals(usei->getSrc(0)) &&
|
||||||
usei->subOp != NV50_IR_SUBOP_MOV_FINAL) {
|
usei->subOp != NV50_IR_SUBOP_MOV_FINAL) {
|
||||||
findFirstUses(texi, usei, uses);
|
findFirstUses(texi, usei, uses, visited);
|
||||||
} else {
|
} else {
|
||||||
addTexUse(uses, usei, insn);
|
addTexUse(uses, usei, insn);
|
||||||
}
|
}
|
||||||
@@ -313,8 +329,10 @@ NVC0LegalizePostRA::insertTextureBarriers(Function *fn)
|
|||||||
uses = new std::list<TexUse>[texes.size()];
|
uses = new std::list<TexUse>[texes.size()];
|
||||||
if (!uses)
|
if (!uses)
|
||||||
return false;
|
return false;
|
||||||
for (size_t i = 0; i < texes.size(); ++i)
|
for (size_t i = 0; i < texes.size(); ++i) {
|
||||||
findFirstUses(texes[i], texes[i], uses[i]);
|
std::tr1::unordered_set<const Instruction *> visited;
|
||||||
|
findFirstUses(texes[i], texes[i], uses[i], visited);
|
||||||
|
}
|
||||||
|
|
||||||
// determine the barrier level at each use
|
// determine the barrier level at each use
|
||||||
for (size_t i = 0; i < texes.size(); ++i) {
|
for (size_t i = 0; i < texes.size(); ++i) {
|
||||||
@@ -814,6 +832,7 @@ NVC0LoweringPass::handleManualTXD(TexInstruction *i)
|
|||||||
Value *zero = bld.loadImm(bld.getSSA(), 0);
|
Value *zero = bld.loadImm(bld.getSSA(), 0);
|
||||||
int l, c;
|
int l, c;
|
||||||
const int dim = i->tex.target.getDim();
|
const int dim = i->tex.target.getDim();
|
||||||
|
const int array = i->tex.target.isArray();
|
||||||
|
|
||||||
i->op = OP_TEX; // no need to clone dPdx/dPdy later
|
i->op = OP_TEX; // no need to clone dPdx/dPdy later
|
||||||
|
|
||||||
@@ -824,7 +843,7 @@ NVC0LoweringPass::handleManualTXD(TexInstruction *i)
|
|||||||
for (l = 0; l < 4; ++l) {
|
for (l = 0; l < 4; ++l) {
|
||||||
// mov coordinates from lane l to all lanes
|
// mov coordinates from lane l to all lanes
|
||||||
for (c = 0; c < dim; ++c)
|
for (c = 0; c < dim; ++c)
|
||||||
bld.mkQuadop(0x00, crd[c], l, i->getSrc(c), zero);
|
bld.mkQuadop(0x00, crd[c], l, i->getSrc(c + array), zero);
|
||||||
// add dPdx from lane l to lanes dx
|
// add dPdx from lane l to lanes dx
|
||||||
for (c = 0; c < dim; ++c)
|
for (c = 0; c < dim; ++c)
|
||||||
bld.mkQuadop(qOps[l][0], crd[c], l, i->dPdx[c].get(), crd[c]);
|
bld.mkQuadop(qOps[l][0], crd[c], l, i->dPdx[c].get(), crd[c]);
|
||||||
@@ -834,7 +853,7 @@ NVC0LoweringPass::handleManualTXD(TexInstruction *i)
|
|||||||
// texture
|
// texture
|
||||||
bld.insert(tex = cloneForward(func, i));
|
bld.insert(tex = cloneForward(func, i));
|
||||||
for (c = 0; c < dim; ++c)
|
for (c = 0; c < dim; ++c)
|
||||||
tex->setSrc(c, crd[c]);
|
tex->setSrc(c + array, crd[c]);
|
||||||
// save results
|
// save results
|
||||||
for (c = 0; i->defExists(c); ++c) {
|
for (c = 0; i->defExists(c); ++c) {
|
||||||
Instruction *mov;
|
Instruction *mov;
|
||||||
@@ -870,7 +889,8 @@ NVC0LoweringPass::handleTXD(TexInstruction *txd)
|
|||||||
if (dim > 2 ||
|
if (dim > 2 ||
|
||||||
txd->tex.target.isCube() ||
|
txd->tex.target.isCube() ||
|
||||||
arg > 4 ||
|
arg > 4 ||
|
||||||
txd->tex.target.isShadow())
|
txd->tex.target.isShadow() ||
|
||||||
|
txd->tex.useOffsets)
|
||||||
return handleManualTXD(txd);
|
return handleManualTXD(txd);
|
||||||
|
|
||||||
for (int c = 0; c < dim; ++c) {
|
for (int c = 0; c < dim; ++c) {
|
||||||
|
@@ -560,6 +560,10 @@ ConstantFolding::expr(Instruction *i,
|
|||||||
ImmediateValue src0;
|
ImmediateValue src0;
|
||||||
if (i->src(0).getImmediate(src0))
|
if (i->src(0).getImmediate(src0))
|
||||||
expr(i, src0, *i->getSrc(1)->asImm());
|
expr(i, src0, *i->getSrc(1)->asImm());
|
||||||
|
if (i->saturate && !prog->getTarget()->isSatSupported(i)) {
|
||||||
|
bld.setPosition(i, false);
|
||||||
|
i->setSrc(1, bld.loadImm(NULL, res.data.u32));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
i->op = i->saturate ? OP_SAT : OP_MOV; /* SAT handled by unary() */
|
i->op = i->saturate ? OP_SAT : OP_MOV; /* SAT handled by unary() */
|
||||||
}
|
}
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
#include <tr1/unordered_set>
|
||||||
|
|
||||||
namespace nv50_ir {
|
namespace nv50_ir {
|
||||||
|
|
||||||
@@ -1544,6 +1545,11 @@ SpillCodeInserter::run(const std::list<ValuePair>& lst)
|
|||||||
LValue *lval = it->first->asLValue();
|
LValue *lval = it->first->asLValue();
|
||||||
Symbol *mem = it->second ? it->second->asSym() : NULL;
|
Symbol *mem = it->second ? it->second->asSym() : NULL;
|
||||||
|
|
||||||
|
// Keep track of which instructions to delete later. Deleting them
|
||||||
|
// inside the loop is unsafe since a single instruction may have
|
||||||
|
// multiple destinations that all need to be spilled (like OP_SPLIT).
|
||||||
|
std::tr1::unordered_set<Instruction *> to_del;
|
||||||
|
|
||||||
for (Value::DefIterator d = lval->defs.begin(); d != lval->defs.end();
|
for (Value::DefIterator d = lval->defs.begin(); d != lval->defs.end();
|
||||||
++d) {
|
++d) {
|
||||||
Value *slot = mem ?
|
Value *slot = mem ?
|
||||||
@@ -1576,7 +1582,7 @@ SpillCodeInserter::run(const std::list<ValuePair>& lst)
|
|||||||
d = lval->defs.erase(d);
|
d = lval->defs.erase(d);
|
||||||
--d;
|
--d;
|
||||||
if (slot->reg.file == FILE_MEMORY_LOCAL)
|
if (slot->reg.file == FILE_MEMORY_LOCAL)
|
||||||
delete_Instruction(func->getProgram(), defi);
|
to_del.insert(defi);
|
||||||
else
|
else
|
||||||
defi->setDef(0, slot);
|
defi->setDef(0, slot);
|
||||||
} else {
|
} else {
|
||||||
@@ -1584,6 +1590,9 @@ SpillCodeInserter::run(const std::list<ValuePair>& lst)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (std::tr1::unordered_set<Instruction *>::const_iterator it = to_del.begin();
|
||||||
|
it != to_del.end(); ++it)
|
||||||
|
delete_Instruction(func->getProgram(), *it);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: We're not trying to reuse old slots in a potential next iteration.
|
// TODO: We're not trying to reuse old slots in a potential next iteration.
|
||||||
@@ -1654,6 +1663,10 @@ RegAlloc::execFunc()
|
|||||||
ret && i <= func->loopNestingBound;
|
ret && i <= func->loopNestingBound;
|
||||||
sequence = func->cfg.nextSequence(), ++i)
|
sequence = func->cfg.nextSequence(), ++i)
|
||||||
ret = buildLiveSets(BasicBlock::get(func->cfg.getRoot()));
|
ret = buildLiveSets(BasicBlock::get(func->cfg.getRoot()));
|
||||||
|
// reset marker
|
||||||
|
for (ArrayList::Iterator bi = func->allBBlocks.iterator();
|
||||||
|
!bi.end(); bi.next())
|
||||||
|
BasicBlock::get(bi)->liveSet.marker = false;
|
||||||
if (!ret)
|
if (!ret)
|
||||||
break;
|
break;
|
||||||
func->orderInstructions(this->insns);
|
func->orderInstructions(this->insns);
|
||||||
|
@@ -448,7 +448,7 @@ TargetNV50::isModSupported(const Instruction *insn, int s, Modifier mod) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (s > 3)
|
if (s >= 3)
|
||||||
return false;
|
return false;
|
||||||
return (mod & Modifier(opInfo[insn->op].srcMods[s])) == mod;
|
return (mod & Modifier(opInfo[insn->op].srcMods[s])) == mod;
|
||||||
}
|
}
|
||||||
|
@@ -417,7 +417,7 @@ TargetNVC0::isModSupported(const Instruction *insn, int s, Modifier mod) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (s > 3)
|
if (s >= 3)
|
||||||
return false;
|
return false;
|
||||||
return (mod & Modifier(opInfo[insn->op].srcMods[s])) == mod;
|
return (mod & Modifier(opInfo[insn->op].srcMods[s])) == mod;
|
||||||
}
|
}
|
||||||
|
@@ -254,7 +254,9 @@ bool BitSet::resize(unsigned int nBits)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (n > p)
|
if (n > p)
|
||||||
memset(&data[4 * p + 4], 0, (n - p) * 4);
|
memset(&data[p], 0, (n - p) * 4);
|
||||||
|
if (nBits < size && (nBits % 32))
|
||||||
|
data[(nBits + 31) / 32 - 1] &= (1 << (nBits % 32)) - 1;
|
||||||
|
|
||||||
size = nBits;
|
size = nBits;
|
||||||
return true;
|
return true;
|
||||||
@@ -274,8 +276,8 @@ bool BitSet::allocate(unsigned int nBits, bool zero)
|
|||||||
if (zero)
|
if (zero)
|
||||||
memset(data, 0, (size + 7) / 8);
|
memset(data, 0, (size + 7) / 8);
|
||||||
else
|
else
|
||||||
if (nBits)
|
if (size % 32) // clear unused bits (e.g. for popCount)
|
||||||
data[(size + 31) / 32 - 1] = 0; // clear unused bits (e.g. for popCount)
|
data[(size + 31) / 32 - 1] &= (1 << (size % 32)) - 1;
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@@ -484,6 +484,7 @@ public:
|
|||||||
FREE(data);
|
FREE(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// allocate will keep old data iff size is unchanged
|
||||||
bool allocate(unsigned int nBits, bool zero);
|
bool allocate(unsigned int nBits, bool zero);
|
||||||
bool resize(unsigned int nBits); // keep old data, zero additional bits
|
bool resize(unsigned int nBits); // keep old data, zero additional bits
|
||||||
|
|
||||||
|
@@ -39,6 +39,8 @@ struct nouveau_vp3_video_buffer {
|
|||||||
#define VP_OFFSET 0x200
|
#define VP_OFFSET 0x200
|
||||||
#define COMM_OFFSET 0x500
|
#define COMM_OFFSET 0x500
|
||||||
|
|
||||||
|
#define NOUVEAU_VP3_BSP_RESERVED_SIZE 0x700
|
||||||
|
|
||||||
#define NOUVEAU_VP3_DEBUG_FENCE 0
|
#define NOUVEAU_VP3_DEBUG_FENCE 0
|
||||||
|
|
||||||
#if NOUVEAU_VP3_DEBUG_FENCE
|
#if NOUVEAU_VP3_DEBUG_FENCE
|
||||||
|
@@ -78,10 +78,10 @@ struct mpeg4_picparm_vp {
|
|||||||
uint8_t top_field_first; // bool, written to vuc
|
uint8_t top_field_first; // bool, written to vuc
|
||||||
|
|
||||||
uint8_t pad4[3]; // 59, 5a, 5b, contains garbage on blob
|
uint8_t pad4[3]; // 59, 5a, 5b, contains garbage on blob
|
||||||
uint32_t pad5[0x10]; // 5c...9c non-inclusive, but WHY?
|
|
||||||
|
|
||||||
uint32_t intra[0x10]; // 9c
|
uint32_t intra[0x10]; // 5c
|
||||||
uint32_t non_intra[0x10]; // bc
|
uint32_t non_intra[0x10]; // 9c
|
||||||
|
uint32_t pad5[0x10]; // bc what does this do?
|
||||||
// udc..uff pad?
|
// udc..uff pad?
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -196,11 +196,15 @@ nouveau_vp3_handle_references(struct nouveau_vp3_decoder *dec, struct nouveau_vp
|
|||||||
/* Try to find a real empty spot first, there should be one..
|
/* Try to find a real empty spot first, there should be one..
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < dec->base.max_references + 1; ++i) {
|
for (i = 0; i < dec->base.max_references + 1; ++i) {
|
||||||
if (dec->refs[i].last_used != seq) {
|
if (dec->refs[i].vidbuf == target) {
|
||||||
empty_spot = i;
|
empty_spot = i;
|
||||||
break;
|
break;
|
||||||
}
|
} else if (!dec->refs[i].last_used) {
|
||||||
|
empty_spot = i;
|
||||||
|
} else if (empty_spot == ~0U && dec->refs[i].last_used != seq)
|
||||||
|
empty_spot = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(empty_spot < dec->base.max_references+1);
|
assert(empty_spot < dec->base.max_references+1);
|
||||||
dec->refs[empty_spot].last_used = seq;
|
dec->refs[empty_spot].last_used = seq;
|
||||||
// debug_printf("Kicked %p to add %p to slot %i\n", dec->refs[empty_spot].vidbuf, target, empty_spot);
|
// debug_printf("Kicked %p to add %p to slot %i\n", dec->refs[empty_spot].vidbuf, target, empty_spot);
|
||||||
@@ -267,7 +271,6 @@ nouveau_vp3_fill_picparm_mpeg4_vp(struct nouveau_vp3_decoder *dec,
|
|||||||
{
|
{
|
||||||
struct mpeg4_picparm_vp pic_vp_stub = {}, *pic_vp = &pic_vp_stub;
|
struct mpeg4_picparm_vp pic_vp_stub = {}, *pic_vp = &pic_vp_stub;
|
||||||
uint32_t ring, ret = 0x01014; // !async_shutdown << 16 | watchdog << 12 | irq_record << 4 | unk;
|
uint32_t ring, ret = 0x01014; // !async_shutdown << 16 | watchdog << 12 | irq_record << 4 | unk;
|
||||||
assert(!(dec->base.width & 0xf));
|
|
||||||
*is_ref = desc->vop_coding_type <= 1;
|
*is_ref = desc->vop_coding_type <= 1;
|
||||||
|
|
||||||
pic_vp->width = dec->base.width;
|
pic_vp->width = dec->base.width;
|
||||||
@@ -463,14 +466,45 @@ void nouveau_vp3_vp_caps(struct nouveau_vp3_decoder *dec, union pipe_desc desc,
|
|||||||
case PIPE_VIDEO_FORMAT_MPEG12:
|
case PIPE_VIDEO_FORMAT_MPEG12:
|
||||||
*caps = nouveau_vp3_fill_picparm_mpeg12_vp(dec, desc.mpeg12, refs, is_ref, vp);
|
*caps = nouveau_vp3_fill_picparm_mpeg12_vp(dec, desc.mpeg12, refs, is_ref, vp);
|
||||||
nouveau_vp3_handle_references(dec, refs, dec->fence_seq, target);
|
nouveau_vp3_handle_references(dec, refs, dec->fence_seq, target);
|
||||||
|
switch (desc.mpeg12->picture_structure) {
|
||||||
|
case PIPE_MPEG12_PICTURE_STRUCTURE_FIELD_TOP:
|
||||||
|
dec->refs[target->valid_ref].decoded_top = 1;
|
||||||
|
break;
|
||||||
|
case PIPE_MPEG12_PICTURE_STRUCTURE_FIELD_BOTTOM:
|
||||||
|
dec->refs[target->valid_ref].decoded_bottom = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dec->refs[target->valid_ref].decoded_top = 1;
|
||||||
|
dec->refs[target->valid_ref].decoded_bottom = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
case PIPE_VIDEO_FORMAT_MPEG4:
|
case PIPE_VIDEO_FORMAT_MPEG4:
|
||||||
*caps = nouveau_vp3_fill_picparm_mpeg4_vp(dec, desc.mpeg4, refs, is_ref, vp);
|
*caps = nouveau_vp3_fill_picparm_mpeg4_vp(dec, desc.mpeg4, refs, is_ref, vp);
|
||||||
nouveau_vp3_handle_references(dec, refs, dec->fence_seq, target);
|
nouveau_vp3_handle_references(dec, refs, dec->fence_seq, target);
|
||||||
|
// XXX: Correct?
|
||||||
|
if (!desc.mpeg4->interlaced) {
|
||||||
|
dec->refs[target->valid_ref].decoded_top = 1;
|
||||||
|
dec->refs[target->valid_ref].decoded_bottom = 1;
|
||||||
|
} else if (desc.mpeg4->top_field_first) {
|
||||||
|
if (!dec->refs[target->valid_ref].decoded_top)
|
||||||
|
dec->refs[target->valid_ref].decoded_top = 1;
|
||||||
|
else
|
||||||
|
dec->refs[target->valid_ref].decoded_bottom = 1;
|
||||||
|
} else {
|
||||||
|
if (!dec->refs[target->valid_ref].decoded_bottom)
|
||||||
|
dec->refs[target->valid_ref].decoded_bottom = 1;
|
||||||
|
else
|
||||||
|
dec->refs[target->valid_ref].decoded_top = 1;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
case PIPE_VIDEO_FORMAT_VC1: {
|
case PIPE_VIDEO_FORMAT_VC1: {
|
||||||
*caps = nouveau_vp3_fill_picparm_vc1_vp(dec, desc.vc1, refs, is_ref, vp);
|
*caps = nouveau_vp3_fill_picparm_vc1_vp(dec, desc.vc1, refs, is_ref, vp);
|
||||||
nouveau_vp3_handle_references(dec, refs, dec->fence_seq, target);
|
nouveau_vp3_handle_references(dec, refs, dec->fence_seq, target);
|
||||||
|
if (desc.vc1->frame_coding_mode == 3)
|
||||||
|
debug_printf("Field-Interlaced possibly incorrectly handled\n");
|
||||||
|
dec->refs[target->valid_ref].decoded_top = 1;
|
||||||
|
dec->refs[target->valid_ref].decoded_bottom = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case PIPE_VIDEO_FORMAT_MPEG4_AVC: {
|
case PIPE_VIDEO_FORMAT_MPEG4_AVC: {
|
||||||
|
@@ -61,7 +61,7 @@ static void
|
|||||||
nv50_memory_barrier(struct pipe_context *pipe, unsigned flags)
|
nv50_memory_barrier(struct pipe_context *pipe, unsigned flags)
|
||||||
{
|
{
|
||||||
struct nv50_context *nv50 = nv50_context(pipe);
|
struct nv50_context *nv50 = nv50_context(pipe);
|
||||||
int i;
|
int i, s;
|
||||||
|
|
||||||
if (flags & PIPE_BARRIER_MAPPED_BUFFER) {
|
if (flags & PIPE_BARRIER_MAPPED_BUFFER) {
|
||||||
for (i = 0; i < nv50->num_vtxbufs; ++i) {
|
for (i = 0; i < nv50->num_vtxbufs; ++i) {
|
||||||
@@ -74,6 +74,26 @@ nv50_memory_barrier(struct pipe_context *pipe, unsigned flags)
|
|||||||
if (nv50->idxbuf.buffer &&
|
if (nv50->idxbuf.buffer &&
|
||||||
nv50->idxbuf.buffer->flags & PIPE_RESOURCE_FLAG_MAP_PERSISTENT)
|
nv50->idxbuf.buffer->flags & PIPE_RESOURCE_FLAG_MAP_PERSISTENT)
|
||||||
nv50->base.vbo_dirty = TRUE;
|
nv50->base.vbo_dirty = TRUE;
|
||||||
|
|
||||||
|
for (s = 0; s < 3 && !nv50->cb_dirty; ++s) {
|
||||||
|
uint32_t valid = nv50->constbuf_valid[s];
|
||||||
|
|
||||||
|
while (valid && !nv50->cb_dirty) {
|
||||||
|
const unsigned i = ffs(valid) - 1;
|
||||||
|
struct pipe_resource *res;
|
||||||
|
|
||||||
|
valid &= ~(1 << i);
|
||||||
|
if (nv50->constbuf[s][i].user)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
res = nv50->constbuf[s][i].u.buf;
|
||||||
|
if (!res)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (res->flags & PIPE_RESOURCE_FLAG_MAP_PERSISTENT)
|
||||||
|
nv50->cb_dirty = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,7 +273,14 @@ nv50_create(struct pipe_screen *pscreen, void *priv)
|
|||||||
nv50->base.screen = &screen->base;
|
nv50->base.screen = &screen->base;
|
||||||
nv50->base.copy_data = nv50_m2mf_copy_linear;
|
nv50->base.copy_data = nv50_m2mf_copy_linear;
|
||||||
nv50->base.push_data = nv50_sifc_linear_u8;
|
nv50->base.push_data = nv50_sifc_linear_u8;
|
||||||
|
/* FIXME: Make it possible to use this again. The problem is that there is
|
||||||
|
* some clever logic in the card that allows for multiple renders to happen
|
||||||
|
* when there are only constbuf changes. However that relies on the
|
||||||
|
* constbuf updates happening to the right constbuf slots. Currently
|
||||||
|
* implementation just makes it go through a separate slot which doesn't
|
||||||
|
* properly update the right constbuf data.
|
||||||
nv50->base.push_cb = nv50_cb_push;
|
nv50->base.push_cb = nv50_cb_push;
|
||||||
|
*/
|
||||||
|
|
||||||
nv50->screen = screen;
|
nv50->screen = screen;
|
||||||
pipe->screen = pscreen;
|
pipe->screen = pscreen;
|
||||||
|
@@ -106,6 +106,7 @@ struct nv50_context {
|
|||||||
struct nouveau_bufctx *bufctx;
|
struct nouveau_bufctx *bufctx;
|
||||||
|
|
||||||
uint32_t dirty;
|
uint32_t dirty;
|
||||||
|
boolean cb_dirty;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
uint32_t instance_elts; /* bitmask of per-instance elements */
|
uint32_t instance_elts; /* bitmask of per-instance elements */
|
||||||
|
@@ -585,9 +585,12 @@ nv50_stage_sampler_states_bind(struct nv50_context *nv50, int s,
|
|||||||
nv50_screen_tsc_unlock(nv50->screen, old);
|
nv50_screen_tsc_unlock(nv50->screen, old);
|
||||||
}
|
}
|
||||||
assert(nv50->num_samplers[s] <= PIPE_MAX_SAMPLERS);
|
assert(nv50->num_samplers[s] <= PIPE_MAX_SAMPLERS);
|
||||||
for (; i < nv50->num_samplers[s]; ++i)
|
for (; i < nv50->num_samplers[s]; ++i) {
|
||||||
if (nv50->samplers[s][i])
|
if (nv50->samplers[s][i]) {
|
||||||
nv50_screen_tsc_unlock(nv50->screen, nv50->samplers[s][i]);
|
nv50_screen_tsc_unlock(nv50->screen, nv50->samplers[s][i]);
|
||||||
|
nv50->samplers[s][i] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nv50->num_samplers[s] = nr;
|
nv50->num_samplers[s] = nr;
|
||||||
|
|
||||||
|
@@ -54,8 +54,8 @@ nv50_validate_fb(struct nv50_context *nv50)
|
|||||||
assert(mt->layout_3d || !array_mode || array_size == 1);
|
assert(mt->layout_3d || !array_mode || array_size == 1);
|
||||||
|
|
||||||
BEGIN_NV04(push, NV50_3D(RT_ADDRESS_HIGH(i)), 5);
|
BEGIN_NV04(push, NV50_3D(RT_ADDRESS_HIGH(i)), 5);
|
||||||
PUSH_DATAh(push, bo->offset + sf->offset);
|
PUSH_DATAh(push, mt->base.address + sf->offset);
|
||||||
PUSH_DATA (push, bo->offset + sf->offset);
|
PUSH_DATA (push, mt->base.address + sf->offset);
|
||||||
PUSH_DATA (push, nv50_format_table[sf->base.format].rt);
|
PUSH_DATA (push, nv50_format_table[sf->base.format].rt);
|
||||||
if (likely(nouveau_bo_memtype(bo))) {
|
if (likely(nouveau_bo_memtype(bo))) {
|
||||||
PUSH_DATA (push, mt->level[sf->base.u.tex.level].tile_mode);
|
PUSH_DATA (push, mt->level[sf->base.u.tex.level].tile_mode);
|
||||||
@@ -97,8 +97,8 @@ nv50_validate_fb(struct nv50_context *nv50)
|
|||||||
int unk = mt->base.base.target == PIPE_TEXTURE_3D || sf->depth == 1;
|
int unk = mt->base.base.target == PIPE_TEXTURE_3D || sf->depth == 1;
|
||||||
|
|
||||||
BEGIN_NV04(push, NV50_3D(ZETA_ADDRESS_HIGH), 5);
|
BEGIN_NV04(push, NV50_3D(ZETA_ADDRESS_HIGH), 5);
|
||||||
PUSH_DATAh(push, bo->offset + sf->offset);
|
PUSH_DATAh(push, mt->base.address + sf->offset);
|
||||||
PUSH_DATA (push, bo->offset + sf->offset);
|
PUSH_DATA (push, mt->base.address + sf->offset);
|
||||||
PUSH_DATA (push, nv50_format_table[fb->zsbuf->format].rt);
|
PUSH_DATA (push, nv50_format_table[fb->zsbuf->format].rt);
|
||||||
PUSH_DATA (push, mt->level[sf->base.u.tex.level].tile_mode);
|
PUSH_DATA (push, mt->level[sf->base.u.tex.level].tile_mode);
|
||||||
PUSH_DATA (push, mt->layer_stride >> 2);
|
PUSH_DATA (push, mt->layer_stride >> 2);
|
||||||
|
@@ -114,8 +114,8 @@ nv50_2d_texture_set(struct nouveau_pushbuf *push, int dst,
|
|||||||
PUSH_DATA (push, mt->level[level].pitch);
|
PUSH_DATA (push, mt->level[level].pitch);
|
||||||
PUSH_DATA (push, width);
|
PUSH_DATA (push, width);
|
||||||
PUSH_DATA (push, height);
|
PUSH_DATA (push, height);
|
||||||
PUSH_DATAh(push, bo->offset + offset);
|
PUSH_DATAh(push, mt->base.address + offset);
|
||||||
PUSH_DATA (push, bo->offset + offset);
|
PUSH_DATA (push, mt->base.address + offset);
|
||||||
} else {
|
} else {
|
||||||
BEGIN_NV04(push, SUBC_2D(mthd), 5);
|
BEGIN_NV04(push, SUBC_2D(mthd), 5);
|
||||||
PUSH_DATA (push, format);
|
PUSH_DATA (push, format);
|
||||||
@@ -126,8 +126,8 @@ nv50_2d_texture_set(struct nouveau_pushbuf *push, int dst,
|
|||||||
BEGIN_NV04(push, SUBC_2D(mthd + 0x18), 4);
|
BEGIN_NV04(push, SUBC_2D(mthd + 0x18), 4);
|
||||||
PUSH_DATA (push, width);
|
PUSH_DATA (push, width);
|
||||||
PUSH_DATA (push, height);
|
PUSH_DATA (push, height);
|
||||||
PUSH_DATAh(push, bo->offset + offset);
|
PUSH_DATAh(push, mt->base.address + offset);
|
||||||
PUSH_DATA (push, bo->offset + offset);
|
PUSH_DATA (push, mt->base.address + offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@@ -299,8 +299,8 @@ nv50_clear_render_target(struct pipe_context *pipe,
|
|||||||
BEGIN_NV04(push, NV50_3D(RT_CONTROL), 1);
|
BEGIN_NV04(push, NV50_3D(RT_CONTROL), 1);
|
||||||
PUSH_DATA (push, 1);
|
PUSH_DATA (push, 1);
|
||||||
BEGIN_NV04(push, NV50_3D(RT_ADDRESS_HIGH(0)), 5);
|
BEGIN_NV04(push, NV50_3D(RT_ADDRESS_HIGH(0)), 5);
|
||||||
PUSH_DATAh(push, bo->offset + sf->offset);
|
PUSH_DATAh(push, mt->base.address + sf->offset);
|
||||||
PUSH_DATA (push, bo->offset + sf->offset);
|
PUSH_DATA (push, mt->base.address + sf->offset);
|
||||||
PUSH_DATA (push, nv50_format_table[dst->format].rt);
|
PUSH_DATA (push, nv50_format_table[dst->format].rt);
|
||||||
PUSH_DATA (push, mt->level[sf->base.u.tex.level].tile_mode);
|
PUSH_DATA (push, mt->level[sf->base.u.tex.level].tile_mode);
|
||||||
PUSH_DATA (push, mt->layer_stride >> 2);
|
PUSH_DATA (push, mt->layer_stride >> 2);
|
||||||
@@ -381,8 +381,8 @@ nv50_clear_depth_stencil(struct pipe_context *pipe,
|
|||||||
nv50->scissors_dirty |= 1;
|
nv50->scissors_dirty |= 1;
|
||||||
|
|
||||||
BEGIN_NV04(push, NV50_3D(ZETA_ADDRESS_HIGH), 5);
|
BEGIN_NV04(push, NV50_3D(ZETA_ADDRESS_HIGH), 5);
|
||||||
PUSH_DATAh(push, bo->offset + sf->offset);
|
PUSH_DATAh(push, mt->base.address + sf->offset);
|
||||||
PUSH_DATA (push, bo->offset + sf->offset);
|
PUSH_DATA (push, mt->base.address + sf->offset);
|
||||||
PUSH_DATA (push, nv50_format_table[dst->format].rt);
|
PUSH_DATA (push, nv50_format_table[dst->format].rt);
|
||||||
PUSH_DATA (push, mt->level[sf->base.u.tex.level].tile_mode);
|
PUSH_DATA (push, mt->level[sf->base.u.tex.level].tile_mode);
|
||||||
PUSH_DATA (push, mt->layer_stride >> 2);
|
PUSH_DATA (push, mt->layer_stride >> 2);
|
||||||
|
@@ -24,6 +24,8 @@ nv50_m2mf_rect_setup(struct nv50_m2mf_rect *rect,
|
|||||||
rect->bo = mt->base.bo;
|
rect->bo = mt->base.bo;
|
||||||
rect->domain = mt->base.domain;
|
rect->domain = mt->base.domain;
|
||||||
rect->base = mt->level[l].offset;
|
rect->base = mt->level[l].offset;
|
||||||
|
if (mt->base.bo->offset != mt->base.address)
|
||||||
|
rect->base += mt->base.address - mt->base.bo->offset;
|
||||||
rect->pitch = mt->level[l].pitch;
|
rect->pitch = mt->level[l].pitch;
|
||||||
if (util_format_is_plain(res->format)) {
|
if (util_format_is_plain(res->format)) {
|
||||||
rect->width = w << mt->ms_x;
|
rect->width = w << mt->ms_x;
|
||||||
|
@@ -747,7 +747,7 @@ nv50_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
|
|||||||
{
|
{
|
||||||
struct nv50_context *nv50 = nv50_context(pipe);
|
struct nv50_context *nv50 = nv50_context(pipe);
|
||||||
struct nouveau_pushbuf *push = nv50->base.pushbuf;
|
struct nouveau_pushbuf *push = nv50->base.pushbuf;
|
||||||
int i;
|
int i, s;
|
||||||
|
|
||||||
/* NOTE: caller must ensure that (min_index + index_bias) is >= 0 */
|
/* NOTE: caller must ensure that (min_index + index_bias) is >= 0 */
|
||||||
nv50->vb_elt_first = info->min_index + info->index_bias;
|
nv50->vb_elt_first = info->min_index + info->index_bias;
|
||||||
@@ -776,6 +776,33 @@ nv50_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
|
|||||||
|
|
||||||
push->kick_notify = nv50_draw_vbo_kick_notify;
|
push->kick_notify = nv50_draw_vbo_kick_notify;
|
||||||
|
|
||||||
|
for (s = 0; s < 3 && !nv50->cb_dirty; ++s) {
|
||||||
|
uint32_t valid = nv50->constbuf_valid[s];
|
||||||
|
|
||||||
|
while (valid && !nv50->cb_dirty) {
|
||||||
|
const unsigned i = ffs(valid) - 1;
|
||||||
|
struct pipe_resource *res;
|
||||||
|
|
||||||
|
valid &= ~(1 << i);
|
||||||
|
if (nv50->constbuf[s][i].user)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
res = nv50->constbuf[s][i].u.buf;
|
||||||
|
if (!res)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (res->flags & PIPE_RESOURCE_FLAG_MAP_COHERENT)
|
||||||
|
nv50->cb_dirty = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If there are any coherent constbufs, flush the cache */
|
||||||
|
if (nv50->cb_dirty) {
|
||||||
|
BEGIN_NV04(push, NV50_3D(CODE_CB_FLUSH), 1);
|
||||||
|
PUSH_DATA (push, 0);
|
||||||
|
nv50->cb_dirty = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (nv50->vbo_fifo) {
|
if (nv50->vbo_fifo) {
|
||||||
nv50_push_vbo(nv50, info);
|
nv50_push_vbo(nv50, info);
|
||||||
push->kick_notify = nv50_default_kick_notify;
|
push->kick_notify = nv50_default_kick_notify;
|
||||||
|
@@ -482,12 +482,14 @@ nv84_create_decoder(struct pipe_context *context,
|
|||||||
mip.level[0].pitch = surf.width * 4;
|
mip.level[0].pitch = surf.width * 4;
|
||||||
mip.base.domain = NOUVEAU_BO_VRAM;
|
mip.base.domain = NOUVEAU_BO_VRAM;
|
||||||
mip.base.bo = dec->mbring;
|
mip.base.bo = dec->mbring;
|
||||||
|
mip.base.address = dec->mbring->offset;
|
||||||
context->clear_render_target(context, &surf.base, &color, 0, 0, 64, 4760);
|
context->clear_render_target(context, &surf.base, &color, 0, 0, 64, 4760);
|
||||||
surf.offset = dec->vpring->size / 2 - 0x1000;
|
surf.offset = dec->vpring->size / 2 - 0x1000;
|
||||||
surf.width = 1024;
|
surf.width = 1024;
|
||||||
surf.height = 1;
|
surf.height = 1;
|
||||||
mip.level[0].pitch = surf.width * 4;
|
mip.level[0].pitch = surf.width * 4;
|
||||||
mip.base.bo = dec->vpring;
|
mip.base.bo = dec->vpring;
|
||||||
|
mip.base.address = dec->vpring->offset;
|
||||||
context->clear_render_target(context, &surf.base, &color, 0, 0, 1024, 1);
|
context->clear_render_target(context, &surf.base, &color, 0, 0, 1024, 1);
|
||||||
surf.offset = dec->vpring->size - 0x1000;
|
surf.offset = dec->vpring->size - 0x1000;
|
||||||
context->clear_render_target(context, &surf.base, &color, 0, 0, 1024, 1);
|
context->clear_render_target(context, &surf.base, &color, 0, 0, 1024, 1);
|
||||||
@@ -683,17 +685,14 @@ nv84_video_buffer_create(struct pipe_context *pipe,
|
|||||||
bo_size, &cfg, &buffer->full))
|
bo_size, &cfg, &buffer->full))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
mt0->base.bo = buffer->interlaced;
|
nouveau_bo_ref(buffer->interlaced, &mt0->base.bo);
|
||||||
mt0->base.domain = NOUVEAU_BO_VRAM;
|
mt0->base.domain = NOUVEAU_BO_VRAM;
|
||||||
mt0->base.offset = 0;
|
mt0->base.address = buffer->interlaced->offset;
|
||||||
mt0->base.address = buffer->interlaced->offset + mt0->base.offset;
|
|
||||||
nouveau_bo_ref(buffer->interlaced, &empty);
|
|
||||||
|
|
||||||
mt1->base.bo = buffer->interlaced;
|
nouveau_bo_ref(buffer->interlaced, &mt1->base.bo);
|
||||||
mt1->base.domain = NOUVEAU_BO_VRAM;
|
mt1->base.domain = NOUVEAU_BO_VRAM;
|
||||||
mt1->base.offset = mt0->layer_stride * 2;
|
mt1->base.offset = mt0->total_size;
|
||||||
mt1->base.address = buffer->interlaced->offset + mt1->base.offset;
|
mt1->base.address = buffer->interlaced->offset + mt0->total_size;
|
||||||
nouveau_bo_ref(buffer->interlaced, &empty);
|
|
||||||
|
|
||||||
memset(&sv_templ, 0, sizeof(sv_templ));
|
memset(&sv_templ, 0, sizeof(sv_templ));
|
||||||
for (component = 0, i = 0; i < 2; ++i ) {
|
for (component = 0, i = 0; i < 2; ++i ) {
|
||||||
|
@@ -67,10 +67,15 @@ struct iparm {
|
|||||||
uint32_t field_is_ref; // 04 // bit0: top, bit1: bottom
|
uint32_t field_is_ref; // 04 // bit0: top, bit1: bottom
|
||||||
uint8_t is_long_term; // 08
|
uint8_t is_long_term; // 08
|
||||||
uint8_t non_existing; // 09
|
uint8_t non_existing; // 09
|
||||||
|
uint8_t u0a; // 0a
|
||||||
|
uint8_t u0b; // 0b
|
||||||
uint32_t frame_idx; // 0c
|
uint32_t frame_idx; // 0c
|
||||||
uint32_t field_order_cnt[2]; // 10
|
uint32_t field_order_cnt[2]; // 10
|
||||||
uint32_t mvidx; // 18
|
uint32_t mvidx; // 18
|
||||||
uint8_t field_pic_flag; // 1c
|
uint8_t field_pic_flag; // 1c
|
||||||
|
uint8_t u1d; // 1d
|
||||||
|
uint8_t u1e; // 1e
|
||||||
|
uint8_t u1f; // 1f
|
||||||
// 20
|
// 20
|
||||||
} refs[0x10]; // 1e0
|
} refs[0x10]; // 1e0
|
||||||
} ipicparm; // 150
|
} ipicparm; // 150
|
||||||
|
@@ -42,8 +42,8 @@ nv98_decoder_bsp(struct nouveau_vp3_decoder *dec, union pipe_desc desc,
|
|||||||
struct nouveau_pushbuf *push = dec->pushbuf[0];
|
struct nouveau_pushbuf *push = dec->pushbuf[0];
|
||||||
enum pipe_video_format codec = u_reduce_video_profile(dec->base.profile);
|
enum pipe_video_format codec = u_reduce_video_profile(dec->base.profile);
|
||||||
uint32_t bsp_addr, comm_addr, inter_addr;
|
uint32_t bsp_addr, comm_addr, inter_addr;
|
||||||
uint32_t slice_size, bucket_size, ring_size;
|
uint32_t slice_size, bucket_size, ring_size, bsp_size;
|
||||||
uint32_t caps;
|
uint32_t caps, i;
|
||||||
int ret;
|
int ret;
|
||||||
struct nouveau_bo *bsp_bo = dec->bsp_bo[comm_seq % NOUVEAU_VP3_VIDEO_QDEPTH];
|
struct nouveau_bo *bsp_bo = dec->bsp_bo[comm_seq % NOUVEAU_VP3_VIDEO_QDEPTH];
|
||||||
struct nouveau_bo *inter_bo = dec->inter_bo[comm_seq & 1];
|
struct nouveau_bo *inter_bo = dec->inter_bo[comm_seq & 1];
|
||||||
@@ -65,6 +65,41 @@ nv98_decoder_bsp(struct nouveau_vp3_decoder *dec, union pipe_desc desc,
|
|||||||
fence_extra = 4;
|
fence_extra = 4;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bsp_size = NOUVEAU_VP3_BSP_RESERVED_SIZE;
|
||||||
|
for (i = 0; i < num_buffers; i++)
|
||||||
|
bsp_size += num_bytes[i];
|
||||||
|
bsp_size += 256; /* the 4 end markers */
|
||||||
|
|
||||||
|
if (!bsp_bo || bsp_size > bsp_bo->size) {
|
||||||
|
struct nouveau_bo *tmp_bo = NULL;
|
||||||
|
|
||||||
|
/* round up to the nearest mb */
|
||||||
|
bsp_size += (1 << 20) - 1;
|
||||||
|
bsp_size &= ~((1 << 20) - 1);
|
||||||
|
|
||||||
|
ret = nouveau_bo_new(dec->bitplane_bo->device, NOUVEAU_BO_VRAM, 0, bsp_size, NULL, &tmp_bo);
|
||||||
|
if (ret) {
|
||||||
|
debug_printf("reallocating bsp %u -> %u failed with %i\n",
|
||||||
|
bsp_bo ? (unsigned)bsp_bo->size : 0, bsp_size, ret);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
nouveau_bo_ref(NULL, &bsp_bo);
|
||||||
|
bo_refs[0].bo = dec->bsp_bo[comm_seq % NOUVEAU_VP3_VIDEO_QDEPTH] = bsp_bo = tmp_bo;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!inter_bo || bsp_bo->size * 4 > inter_bo->size) {
|
||||||
|
struct nouveau_bo *tmp_bo = NULL;
|
||||||
|
|
||||||
|
ret = nouveau_bo_new(dec->bitplane_bo->device, NOUVEAU_BO_VRAM, 0, bsp_bo->size * 4, NULL, &tmp_bo);
|
||||||
|
if (ret) {
|
||||||
|
debug_printf("reallocating inter %u -> %u failed with %i\n",
|
||||||
|
inter_bo ? (unsigned)inter_bo->size : 0, (unsigned)bsp_bo->size * 4, ret);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
nouveau_bo_ref(NULL, &inter_bo);
|
||||||
|
bo_refs[1].bo = dec->inter_bo[comm_seq & 1] = inter_bo = tmp_bo;
|
||||||
|
}
|
||||||
|
|
||||||
ret = nouveau_bo_map(bsp_bo, NOUVEAU_BO_WR, dec->client);
|
ret = nouveau_bo_map(bsp_bo, NOUVEAU_BO_WR, dec->client);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
debug_printf("map failed: %i %s\n", ret, strerror(-ret));
|
debug_printf("map failed: %i %s\n", ret, strerror(-ret));
|
||||||
|
@@ -59,7 +59,6 @@ static void dump_comm_vp(struct nouveau_vp3_decoder *dec, struct comm *comm, u32
|
|||||||
static void
|
static void
|
||||||
nv98_decoder_kick_ref(struct nouveau_vp3_decoder *dec, struct nouveau_vp3_video_buffer *target)
|
nv98_decoder_kick_ref(struct nouveau_vp3_decoder *dec, struct nouveau_vp3_video_buffer *target)
|
||||||
{
|
{
|
||||||
dec->refs[target->valid_ref].vidbuf = NULL;
|
|
||||||
dec->refs[target->valid_ref].last_used = 0;
|
dec->refs[target->valid_ref].last_used = 0;
|
||||||
// debug_printf("Unreffed %p\n", target);
|
// debug_printf("Unreffed %p\n", target);
|
||||||
}
|
}
|
||||||
|
@@ -60,7 +60,7 @@ static void
|
|||||||
nvc0_memory_barrier(struct pipe_context *pipe, unsigned flags)
|
nvc0_memory_barrier(struct pipe_context *pipe, unsigned flags)
|
||||||
{
|
{
|
||||||
struct nvc0_context *nvc0 = nvc0_context(pipe);
|
struct nvc0_context *nvc0 = nvc0_context(pipe);
|
||||||
int i;
|
int i, s;
|
||||||
|
|
||||||
if (flags & PIPE_BARRIER_MAPPED_BUFFER) {
|
if (flags & PIPE_BARRIER_MAPPED_BUFFER) {
|
||||||
for (i = 0; i < nvc0->num_vtxbufs; ++i) {
|
for (i = 0; i < nvc0->num_vtxbufs; ++i) {
|
||||||
@@ -73,6 +73,26 @@ nvc0_memory_barrier(struct pipe_context *pipe, unsigned flags)
|
|||||||
if (nvc0->idxbuf.buffer &&
|
if (nvc0->idxbuf.buffer &&
|
||||||
nvc0->idxbuf.buffer->flags & PIPE_RESOURCE_FLAG_MAP_PERSISTENT)
|
nvc0->idxbuf.buffer->flags & PIPE_RESOURCE_FLAG_MAP_PERSISTENT)
|
||||||
nvc0->base.vbo_dirty = TRUE;
|
nvc0->base.vbo_dirty = TRUE;
|
||||||
|
|
||||||
|
for (s = 0; s < 5 && !nvc0->cb_dirty; ++s) {
|
||||||
|
uint32_t valid = nvc0->constbuf_valid[s];
|
||||||
|
|
||||||
|
while (valid && !nvc0->cb_dirty) {
|
||||||
|
const unsigned i = ffs(valid) - 1;
|
||||||
|
struct pipe_resource *res;
|
||||||
|
|
||||||
|
valid &= ~(1 << i);
|
||||||
|
if (nvc0->constbuf[s][i].user)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
res = nvc0->constbuf[s][i].u.buf;
|
||||||
|
if (!res)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (res->flags & PIPE_RESOURCE_FLAG_MAP_PERSISTENT)
|
||||||
|
nvc0->cb_dirty = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -154,6 +154,8 @@ struct nvc0_context {
|
|||||||
|
|
||||||
struct nvc0_constbuf constbuf[6][NVC0_MAX_PIPE_CONSTBUFS];
|
struct nvc0_constbuf constbuf[6][NVC0_MAX_PIPE_CONSTBUFS];
|
||||||
uint16_t constbuf_dirty[6];
|
uint16_t constbuf_dirty[6];
|
||||||
|
uint16_t constbuf_valid[6];
|
||||||
|
boolean cb_dirty;
|
||||||
|
|
||||||
struct pipe_vertex_buffer vtxbuf[PIPE_MAX_ATTRIBS];
|
struct pipe_vertex_buffer vtxbuf[PIPE_MAX_ATTRIBS];
|
||||||
unsigned num_vtxbufs;
|
unsigned num_vtxbufs;
|
||||||
|
@@ -261,7 +261,6 @@ nvc0_miptree_create(struct pipe_screen *pscreen,
|
|||||||
|
|
||||||
if (pt->usage == PIPE_USAGE_STAGING) {
|
if (pt->usage == PIPE_USAGE_STAGING) {
|
||||||
switch (pt->target) {
|
switch (pt->target) {
|
||||||
case PIPE_TEXTURE_1D:
|
|
||||||
case PIPE_TEXTURE_2D:
|
case PIPE_TEXTURE_2D:
|
||||||
case PIPE_TEXTURE_RECT:
|
case PIPE_TEXTURE_RECT:
|
||||||
if (pt->last_level == 0 &&
|
if (pt->last_level == 0 &&
|
||||||
|
@@ -626,7 +626,7 @@ nvc0_program_translate(struct nvc0_program *prog, uint16_t chipset)
|
|||||||
if (info->bin.tlsSpace) {
|
if (info->bin.tlsSpace) {
|
||||||
assert(info->bin.tlsSpace < (1 << 24));
|
assert(info->bin.tlsSpace < (1 << 24));
|
||||||
prog->hdr[0] |= 1 << 26;
|
prog->hdr[0] |= 1 << 26;
|
||||||
prog->hdr[1] |= info->bin.tlsSpace; /* l[] size */
|
prog->hdr[1] |= align(info->bin.tlsSpace, 0x10); /* l[] size */
|
||||||
prog->need_tls = TRUE;
|
prog->need_tls = TRUE;
|
||||||
}
|
}
|
||||||
/* TODO: factor 2 only needed where joinat/precont is used,
|
/* TODO: factor 2 only needed where joinat/precont is used,
|
||||||
|
@@ -808,10 +808,15 @@ nvc0_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
|||||||
if (nvc0->constbuf[s][i].user) {
|
if (nvc0->constbuf[s][i].user) {
|
||||||
nvc0->constbuf[s][i].u.data = cb->user_buffer;
|
nvc0->constbuf[s][i].u.data = cb->user_buffer;
|
||||||
nvc0->constbuf[s][i].size = cb->buffer_size;
|
nvc0->constbuf[s][i].size = cb->buffer_size;
|
||||||
|
nvc0->constbuf_valid[s] |= 1 << i;
|
||||||
} else
|
} else
|
||||||
if (cb) {
|
if (cb) {
|
||||||
nvc0->constbuf[s][i].offset = cb->buffer_offset;
|
nvc0->constbuf[s][i].offset = cb->buffer_offset;
|
||||||
nvc0->constbuf[s][i].size = align(cb->buffer_size, 0x100);
|
nvc0->constbuf[s][i].size = align(cb->buffer_size, 0x100);
|
||||||
|
nvc0->constbuf_valid[s] |= 1 << i;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
nvc0->constbuf_valid[s] &= ~(1 << i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -797,7 +797,7 @@ nvc0_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
|
|||||||
{
|
{
|
||||||
struct nvc0_context *nvc0 = nvc0_context(pipe);
|
struct nvc0_context *nvc0 = nvc0_context(pipe);
|
||||||
struct nouveau_pushbuf *push = nvc0->base.pushbuf;
|
struct nouveau_pushbuf *push = nvc0->base.pushbuf;
|
||||||
int i;
|
int i, s;
|
||||||
|
|
||||||
/* NOTE: caller must ensure that (min_index + index_bias) is >= 0 */
|
/* NOTE: caller must ensure that (min_index + index_bias) is >= 0 */
|
||||||
nvc0->vb_elt_first = info->min_index + info->index_bias;
|
nvc0->vb_elt_first = info->min_index + info->index_bias;
|
||||||
@@ -830,6 +830,31 @@ nvc0_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
|
|||||||
|
|
||||||
push->kick_notify = nvc0_draw_vbo_kick_notify;
|
push->kick_notify = nvc0_draw_vbo_kick_notify;
|
||||||
|
|
||||||
|
for (s = 0; s < 5 && !nvc0->cb_dirty; ++s) {
|
||||||
|
uint32_t valid = nvc0->constbuf_valid[s];
|
||||||
|
|
||||||
|
while (valid && !nvc0->cb_dirty) {
|
||||||
|
const unsigned i = ffs(valid) - 1;
|
||||||
|
struct pipe_resource *res;
|
||||||
|
|
||||||
|
valid &= ~(1 << i);
|
||||||
|
if (nvc0->constbuf[s][i].user)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
res = nvc0->constbuf[s][i].u.buf;
|
||||||
|
if (!res)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (res->flags & PIPE_RESOURCE_FLAG_MAP_COHERENT)
|
||||||
|
nvc0->cb_dirty = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nvc0->cb_dirty) {
|
||||||
|
IMMED_NVC0(push, NVC0_3D(MEM_BARRIER), 0x1011);
|
||||||
|
nvc0->cb_dirty = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (nvc0->state.vbo_mode) {
|
if (nvc0->state.vbo_mode) {
|
||||||
nvc0_push_vbo(nvc0, info);
|
nvc0_push_vbo(nvc0, info);
|
||||||
push->kick_notify = nvc0_default_kick_notify;
|
push->kick_notify = nvc0_default_kick_notify;
|
||||||
|
@@ -173,16 +173,12 @@ nvc0_create_decoder(struct pipe_context *context,
|
|||||||
ret = nouveau_bo_new(screen->device, NOUVEAU_BO_VRAM,
|
ret = nouveau_bo_new(screen->device, NOUVEAU_BO_VRAM,
|
||||||
0x100, 4 << 20, &cfg, &dec->inter_bo[0]);
|
0x100, 4 << 20, &cfg, &dec->inter_bo[0]);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
if (!kepler)
|
ret = nouveau_bo_new(screen->device, NOUVEAU_BO_VRAM,
|
||||||
nouveau_bo_ref(dec->inter_bo[0], &dec->inter_bo[1]);
|
0x100, dec->inter_bo[0]->size, &cfg,
|
||||||
else
|
&dec->inter_bo[1]);
|
||||||
ret = nouveau_bo_new(screen->device, NOUVEAU_BO_VRAM,
|
|
||||||
0x100, dec->inter_bo[0]->size, &cfg,
|
|
||||||
&dec->inter_bo[1]);
|
|
||||||
}
|
}
|
||||||
if (ret)
|
if (ret)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
switch (u_reduce_video_profile(templ->profile)) {
|
switch (u_reduce_video_profile(templ->profile)) {
|
||||||
case PIPE_VIDEO_FORMAT_MPEG12: {
|
case PIPE_VIDEO_FORMAT_MPEG12: {
|
||||||
codec = 1;
|
codec = 1;
|
||||||
|
@@ -42,8 +42,8 @@ nvc0_decoder_bsp(struct nouveau_vp3_decoder *dec, union pipe_desc desc,
|
|||||||
struct nouveau_pushbuf *push = dec->pushbuf[0];
|
struct nouveau_pushbuf *push = dec->pushbuf[0];
|
||||||
enum pipe_video_format codec = u_reduce_video_profile(dec->base.profile);
|
enum pipe_video_format codec = u_reduce_video_profile(dec->base.profile);
|
||||||
uint32_t bsp_addr, comm_addr, inter_addr;
|
uint32_t bsp_addr, comm_addr, inter_addr;
|
||||||
uint32_t slice_size, bucket_size, ring_size;
|
uint32_t slice_size, bucket_size, ring_size, bsp_size;
|
||||||
uint32_t caps;
|
uint32_t caps, i;
|
||||||
int ret;
|
int ret;
|
||||||
struct nouveau_bo *bsp_bo = dec->bsp_bo[comm_seq % NOUVEAU_VP3_VIDEO_QDEPTH];
|
struct nouveau_bo *bsp_bo = dec->bsp_bo[comm_seq % NOUVEAU_VP3_VIDEO_QDEPTH];
|
||||||
struct nouveau_bo *inter_bo = dec->inter_bo[comm_seq & 1];
|
struct nouveau_bo *inter_bo = dec->inter_bo[comm_seq & 1];
|
||||||
@@ -65,6 +65,49 @@ nvc0_decoder_bsp(struct nouveau_vp3_decoder *dec, union pipe_desc desc,
|
|||||||
fence_extra = 4;
|
fence_extra = 4;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bsp_size = NOUVEAU_VP3_BSP_RESERVED_SIZE;
|
||||||
|
for (i = 0; i < num_buffers; i++)
|
||||||
|
bsp_size += num_bytes[i];
|
||||||
|
bsp_size += 256; /* the 4 end markers */
|
||||||
|
|
||||||
|
if (!bsp_bo || bsp_size > bsp_bo->size) {
|
||||||
|
union nouveau_bo_config cfg;
|
||||||
|
struct nouveau_bo *tmp_bo = NULL;
|
||||||
|
|
||||||
|
cfg.nvc0.tile_mode = 0x10;
|
||||||
|
cfg.nvc0.memtype = 0xfe;
|
||||||
|
|
||||||
|
/* round up to the nearest mb */
|
||||||
|
bsp_size += (1 << 20) - 1;
|
||||||
|
bsp_size &= ~((1 << 20) - 1);
|
||||||
|
|
||||||
|
ret = nouveau_bo_new(dec->bitplane_bo->device, NOUVEAU_BO_VRAM, 0, bsp_size, &cfg, &tmp_bo);
|
||||||
|
if (ret) {
|
||||||
|
debug_printf("reallocating bsp %u -> %u failed with %i\n",
|
||||||
|
bsp_bo ? (unsigned)bsp_bo->size : 0, bsp_size, ret);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
nouveau_bo_ref(NULL, &bsp_bo);
|
||||||
|
bo_refs[0].bo = dec->bsp_bo[comm_seq % NOUVEAU_VP3_VIDEO_QDEPTH] = bsp_bo = tmp_bo;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!inter_bo || bsp_bo->size * 4 > inter_bo->size) {
|
||||||
|
union nouveau_bo_config cfg;
|
||||||
|
struct nouveau_bo *tmp_bo = NULL;
|
||||||
|
|
||||||
|
cfg.nvc0.tile_mode = 0x10;
|
||||||
|
cfg.nvc0.memtype = 0xfe;
|
||||||
|
|
||||||
|
ret = nouveau_bo_new(dec->bitplane_bo->device, NOUVEAU_BO_VRAM, 0, bsp_bo->size * 4, &cfg, &tmp_bo);
|
||||||
|
if (ret) {
|
||||||
|
debug_printf("reallocating inter %u -> %u failed with %i\n",
|
||||||
|
inter_bo ? (unsigned)inter_bo->size : 0, (unsigned)bsp_bo->size * 4, ret);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
nouveau_bo_ref(NULL, &inter_bo);
|
||||||
|
bo_refs[1].bo = dec->inter_bo[comm_seq & 1] = inter_bo = tmp_bo;
|
||||||
|
}
|
||||||
|
|
||||||
ret = nouveau_bo_map(bsp_bo, NOUVEAU_BO_WR, dec->client);
|
ret = nouveau_bo_map(bsp_bo, NOUVEAU_BO_WR, dec->client);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
debug_printf("map failed: %i %s\n", ret, strerror(-ret));
|
debug_printf("map failed: %i %s\n", ret, strerror(-ret));
|
||||||
|
@@ -59,7 +59,6 @@ static void dump_comm_vp(struct nouveau_vp3_decoder *dec, struct comm *comm, u32
|
|||||||
static void
|
static void
|
||||||
nvc0_decoder_kick_ref(struct nouveau_vp3_decoder *dec, struct nouveau_vp3_video_buffer *target)
|
nvc0_decoder_kick_ref(struct nouveau_vp3_decoder *dec, struct nouveau_vp3_video_buffer *target)
|
||||||
{
|
{
|
||||||
dec->refs[target->valid_ref].vidbuf = NULL;
|
|
||||||
dec->refs[target->valid_ref].last_used = 0;
|
dec->refs[target->valid_ref].last_used = 0;
|
||||||
// debug_printf("Unreffed %p\n", target);
|
// debug_printf("Unreffed %p\n", target);
|
||||||
}
|
}
|
||||||
|
@@ -80,8 +80,9 @@ NVC0_FIFO_PKHDR_NI(int subc, int mthd, unsigned size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static INLINE uint32_t
|
static INLINE uint32_t
|
||||||
NVC0_FIFO_PKHDR_IL(int subc, int mthd, uint8_t data)
|
NVC0_FIFO_PKHDR_IL(int subc, int mthd, uint16_t data)
|
||||||
{
|
{
|
||||||
|
assert(data < 0x2000);
|
||||||
return 0x80000000 | (data << 16) | (subc << 13) | (mthd >> 2);
|
return 0x80000000 | (data << 16) | (subc << 13) | (mthd >> 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,7 +134,7 @@ BEGIN_1IC0(struct nouveau_pushbuf *push, int subc, int mthd, unsigned size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static INLINE void
|
static INLINE void
|
||||||
IMMED_NVC0(struct nouveau_pushbuf *push, int subc, int mthd, uint8_t data)
|
IMMED_NVC0(struct nouveau_pushbuf *push, int subc, int mthd, uint16_t data)
|
||||||
{
|
{
|
||||||
#ifndef NVC0_PUSH_EXPLICIT_SPACE_CHECKING
|
#ifndef NVC0_PUSH_EXPLICIT_SPACE_CHECKING
|
||||||
PUSH_SPACE(push, 1);
|
PUSH_SPACE(push, 1);
|
||||||
|
@@ -34,8 +34,7 @@ LOCAL_C_INCLUDES := \
|
|||||||
$(MESA_TOP)/src/mapi \
|
$(MESA_TOP)/src/mapi \
|
||||||
$(MESA_TOP)/src/glsl \
|
$(MESA_TOP)/src/glsl \
|
||||||
$(MESA_TOP)/src/mesa \
|
$(MESA_TOP)/src/mesa \
|
||||||
$(DRM_TOP) \
|
$(TARGET_OUT_HEADERS)/libdrm
|
||||||
$(DRM_TOP)/include/drm
|
|
||||||
|
|
||||||
LOCAL_MODULE := libmesa_pipe_r300
|
LOCAL_MODULE := libmesa_pipe_r300
|
||||||
|
|
||||||
|
@@ -37,6 +37,8 @@
|
|||||||
#include "r300_screen_buffer.h"
|
#include "r300_screen_buffer.h"
|
||||||
#include "compiler/radeon_regalloc.h"
|
#include "compiler/radeon_regalloc.h"
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
static void r300_release_referenced_objects(struct r300_context *r300)
|
static void r300_release_referenced_objects(struct r300_context *r300)
|
||||||
{
|
{
|
||||||
struct pipe_framebuffer_state *fb =
|
struct pipe_framebuffer_state *fb =
|
||||||
@@ -482,7 +484,7 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
|
|||||||
#endif
|
#endif
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"r300: DRM version: %d.%d.%d, Name: %s, ID: 0x%04x, GB: %d, Z: %d\n"
|
"r300: DRM version: %d.%d.%d, Name: %s, ID: 0x%04x, GB: %d, Z: %d\n"
|
||||||
"r300: GART size: %d MB, VRAM size: %d MB\n"
|
"r300: GART size: %"PRIu64" MB, VRAM size: %"PRIu64" MB\n"
|
||||||
"r300: AA compression RAM: %s, Z compression RAM: %s, HiZ RAM: %s\n",
|
"r300: AA compression RAM: %s, Z compression RAM: %s, HiZ RAM: %s\n",
|
||||||
r300->screen->info.drm_major,
|
r300->screen->info.drm_major,
|
||||||
r300->screen->info.drm_minor,
|
r300->screen->info.drm_minor,
|
||||||
|
@@ -30,7 +30,7 @@ include $(CLEAR_VARS)
|
|||||||
|
|
||||||
LOCAL_SRC_FILES := $(C_SOURCES) $(CXX_SOURCES)
|
LOCAL_SRC_FILES := $(C_SOURCES) $(CXX_SOURCES)
|
||||||
|
|
||||||
LOCAL_C_INCLUDES := $(DRM_TOP)
|
LOCAL_C_INCLUDES := $(TARGET_OUT_HEADERS)/libdrm
|
||||||
|
|
||||||
LOCAL_MODULE := libmesa_pipe_r600
|
LOCAL_MODULE := libmesa_pipe_r600
|
||||||
|
|
||||||
|
@@ -881,9 +881,6 @@ void evergreen_init_compute_state_functions(struct r600_context *ctx)
|
|||||||
ctx->b.b.set_global_binding = evergreen_set_global_binding;
|
ctx->b.b.set_global_binding = evergreen_set_global_binding;
|
||||||
ctx->b.b.launch_grid = evergreen_launch_grid;
|
ctx->b.b.launch_grid = evergreen_launch_grid;
|
||||||
|
|
||||||
/* We always use at least one vertex buffer for parameters (id = 1)*/
|
|
||||||
ctx->cs_vertex_buffer_state.enabled_mask =
|
|
||||||
ctx->cs_vertex_buffer_state.dirty_mask = 0x2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct pipe_resource *r600_compute_global_buffer_create(
|
struct pipe_resource *r600_compute_global_buffer_create(
|
||||||
|
@@ -626,7 +626,6 @@ texture_buffer_sampler_view(struct r600_pipe_sampler_view *view,
|
|||||||
S_030008_DATA_FORMAT(format) |
|
S_030008_DATA_FORMAT(format) |
|
||||||
S_030008_NUM_FORMAT_ALL(num_format) |
|
S_030008_NUM_FORMAT_ALL(num_format) |
|
||||||
S_030008_FORMAT_COMP_ALL(format_comp) |
|
S_030008_FORMAT_COMP_ALL(format_comp) |
|
||||||
S_030008_SRF_MODE_ALL(1) |
|
|
||||||
S_030008_ENDIAN_SWAP(endian);
|
S_030008_ENDIAN_SWAP(endian);
|
||||||
view->tex_resource_words[3] = swizzle_res;
|
view->tex_resource_words[3] = swizzle_res;
|
||||||
/*
|
/*
|
||||||
@@ -805,7 +804,6 @@ evergreen_create_sampler_view_custom(struct pipe_context *ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
view->tex_resource_words[4] = (word4 |
|
view->tex_resource_words[4] = (word4 |
|
||||||
S_030010_SRF_MODE_ALL(V_030010_SRF_MODE_ZERO_CLAMP_MINUS_ONE) |
|
|
||||||
S_030010_ENDIAN_SWAP(endian));
|
S_030010_ENDIAN_SWAP(endian));
|
||||||
view->tex_resource_words[5] = S_030014_BASE_ARRAY(state->u.tex.first_layer) |
|
view->tex_resource_words[5] = S_030014_BASE_ARRAY(state->u.tex.first_layer) |
|
||||||
S_030014_LAST_ARRAY(state->u.tex.last_layer);
|
S_030014_LAST_ARRAY(state->u.tex.last_layer);
|
||||||
|
@@ -2374,7 +2374,6 @@ void *r600_create_vertex_fetch_shader(struct pipe_context *ctx,
|
|||||||
vtx.data_format = format;
|
vtx.data_format = format;
|
||||||
vtx.num_format_all = num_format;
|
vtx.num_format_all = num_format;
|
||||||
vtx.format_comp_all = format_comp;
|
vtx.format_comp_all = format_comp;
|
||||||
vtx.srf_mode_all = 1;
|
|
||||||
vtx.offset = elements[i].src_offset;
|
vtx.offset = elements[i].src_offset;
|
||||||
vtx.endian = endian;
|
vtx.endian = endian;
|
||||||
|
|
||||||
|
@@ -430,7 +430,8 @@ static void r600_clear(struct pipe_context *ctx, unsigned buffers,
|
|||||||
* disable fast clear for texture array.
|
* disable fast clear for texture array.
|
||||||
*/
|
*/
|
||||||
/* Only use htile for first level */
|
/* Only use htile for first level */
|
||||||
if (rtex->htile_buffer && !level && rtex->surface.array_size == 1) {
|
if (rtex->htile_buffer && !level &&
|
||||||
|
util_max_layer(&rtex->resource.b.b, level) == 0) {
|
||||||
if (rtex->depth_clear_value != depth) {
|
if (rtex->depth_clear_value != depth) {
|
||||||
rtex->depth_clear_value = depth;
|
rtex->depth_clear_value = depth;
|
||||||
rctx->db_state.atom.dirty = true;
|
rctx->db_state.atom.dirty = true;
|
||||||
@@ -837,7 +838,7 @@ static void r600_flush_resource(struct pipe_context *ctx,
|
|||||||
|
|
||||||
if (!rtex->is_depth && rtex->cmask.size) {
|
if (!rtex->is_depth && rtex->cmask.size) {
|
||||||
r600_blit_decompress_color(ctx, rtex, 0, res->last_level,
|
r600_blit_decompress_color(ctx, rtex, 0, res->last_level,
|
||||||
0, res->array_size - 1);
|
0, util_max_layer(res, 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -851,7 +851,6 @@ static int tgsi_fetch_rel_const(struct r600_shader_ctx *ctx, unsigned int cb_idx
|
|||||||
vtx.data_format = FMT_32_32_32_32_FLOAT;
|
vtx.data_format = FMT_32_32_32_32_FLOAT;
|
||||||
vtx.num_format_all = 2; /* NUM_FORMAT_SCALED */
|
vtx.num_format_all = 2; /* NUM_FORMAT_SCALED */
|
||||||
vtx.format_comp_all = 1; /* FORMAT_COMP_SIGNED */
|
vtx.format_comp_all = 1; /* FORMAT_COMP_SIGNED */
|
||||||
vtx.srf_mode_all = 1; /* SRF_MODE_NO_ZERO */
|
|
||||||
vtx.endian = r600_endian_swap(32);
|
vtx.endian = r600_endian_swap(32);
|
||||||
|
|
||||||
if ((r = r600_bytecode_add_vtx(ctx->bc, &vtx)))
|
if ((r = r600_bytecode_add_vtx(ctx->bc, &vtx)))
|
||||||
@@ -998,6 +997,7 @@ static int tgsi_split_constant(struct r600_shader_ctx *ctx)
|
|||||||
alu.src[0].sel = ctx->src[i].sel;
|
alu.src[0].sel = ctx->src[i].sel;
|
||||||
alu.src[0].chan = k;
|
alu.src[0].chan = k;
|
||||||
alu.src[0].rel = ctx->src[i].rel;
|
alu.src[0].rel = ctx->src[i].rel;
|
||||||
|
alu.src[0].kc_bank = ctx->src[i].kc_bank;
|
||||||
alu.dst.sel = treg;
|
alu.dst.sel = treg;
|
||||||
alu.dst.chan = k;
|
alu.dst.chan = k;
|
||||||
alu.dst.write = 1;
|
alu.dst.write = 1;
|
||||||
@@ -4309,7 +4309,6 @@ static int do_vtx_fetch_inst(struct r600_shader_ctx *ctx, boolean src_requires_l
|
|||||||
vtx.dst_sel_z = (inst->Dst[0].Register.WriteMask & 4) ? 2 : 7; /* SEL_Z */
|
vtx.dst_sel_z = (inst->Dst[0].Register.WriteMask & 4) ? 2 : 7; /* SEL_Z */
|
||||||
vtx.dst_sel_w = (inst->Dst[0].Register.WriteMask & 8) ? 3 : 7; /* SEL_W */
|
vtx.dst_sel_w = (inst->Dst[0].Register.WriteMask & 8) ? 3 : 7; /* SEL_W */
|
||||||
vtx.use_const_fields = 1;
|
vtx.use_const_fields = 1;
|
||||||
vtx.srf_mode_all = 1; /* SRF_MODE_NO_ZERO */
|
|
||||||
|
|
||||||
if ((r = r600_bytecode_add_vtx(ctx->bc, &vtx)))
|
if ((r = r600_bytecode_add_vtx(ctx->bc, &vtx)))
|
||||||
return r;
|
return r;
|
||||||
|
@@ -609,7 +609,6 @@ texture_buffer_sampler_view(struct r600_pipe_sampler_view *view,
|
|||||||
S_038008_DATA_FORMAT(format) |
|
S_038008_DATA_FORMAT(format) |
|
||||||
S_038008_NUM_FORMAT_ALL(num_format) |
|
S_038008_NUM_FORMAT_ALL(num_format) |
|
||||||
S_038008_FORMAT_COMP_ALL(format_comp) |
|
S_038008_FORMAT_COMP_ALL(format_comp) |
|
||||||
S_038008_SRF_MODE_ALL(1) |
|
|
||||||
S_038008_ENDIAN_SWAP(endian);
|
S_038008_ENDIAN_SWAP(endian);
|
||||||
view->tex_resource_words[3] = 0;
|
view->tex_resource_words[3] = 0;
|
||||||
/*
|
/*
|
||||||
@@ -720,7 +719,6 @@ r600_create_sampler_view_custom(struct pipe_context *ctx,
|
|||||||
view->tex_resource_words[3] = tmp->surface.level[offset_level + 1].offset >> 8;
|
view->tex_resource_words[3] = tmp->surface.level[offset_level + 1].offset >> 8;
|
||||||
}
|
}
|
||||||
view->tex_resource_words[4] = (word4 |
|
view->tex_resource_words[4] = (word4 |
|
||||||
S_038010_SRF_MODE_ALL(V_038010_SRF_MODE_ZERO_CLAMP_MINUS_ONE) |
|
|
||||||
S_038010_REQUEST_SIZE(1) |
|
S_038010_REQUEST_SIZE(1) |
|
||||||
S_038010_ENDIAN_SWAP(endian) |
|
S_038010_ENDIAN_SWAP(endian) |
|
||||||
S_038010_BASE_LEVEL(0));
|
S_038010_BASE_LEVEL(0));
|
||||||
|
38
src/gallium/drivers/radeon/Android.mk
Normal file
38
src/gallium/drivers/radeon/Android.mk
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# Mesa 3-D graphics library
|
||||||
|
#
|
||||||
|
# Copyright (C) 2011 Chia-I Wu <olvaffe@gmail.com>
|
||||||
|
# Copyright (C) 2011 LunarG Inc.
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
# copy of this software and associated documentation files (the "Software"),
|
||||||
|
# to deal in the Software without restriction, including without limitation
|
||||||
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
# and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
# Software is furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included
|
||||||
|
# in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
# DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
LOCAL_PATH := $(call my-dir)
|
||||||
|
|
||||||
|
# get C_SOURCES
|
||||||
|
include $(LOCAL_PATH)/Makefile.sources
|
||||||
|
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
|
LOCAL_SRC_FILES := $(C_SOURCES)
|
||||||
|
|
||||||
|
LOCAL_C_INCLUDES := $(TARGET_OUT_HEADERS)/libdrm
|
||||||
|
|
||||||
|
LOCAL_MODULE := libmesa_pipe_radeon
|
||||||
|
|
||||||
|
include $(GALLIUM_COMMON_MK)
|
||||||
|
include $(BUILD_STATIC_LIBRARY)
|
@@ -142,7 +142,13 @@ bool r600_common_context_init(struct r600_common_context *rctx,
|
|||||||
rctx->ws = rscreen->ws;
|
rctx->ws = rscreen->ws;
|
||||||
rctx->family = rscreen->family;
|
rctx->family = rscreen->family;
|
||||||
rctx->chip_class = rscreen->chip_class;
|
rctx->chip_class = rscreen->chip_class;
|
||||||
rctx->max_db = rscreen->chip_class >= EVERGREEN ? 8 : 4;
|
|
||||||
|
if (rscreen->family == CHIP_HAWAII)
|
||||||
|
rctx->max_db = 16;
|
||||||
|
else if (rscreen->chip_class >= EVERGREEN)
|
||||||
|
rctx->max_db = 8;
|
||||||
|
else
|
||||||
|
rctx->max_db = 4;
|
||||||
|
|
||||||
rctx->b.transfer_map = u_transfer_map_vtbl;
|
rctx->b.transfer_map = u_transfer_map_vtbl;
|
||||||
rctx->b.transfer_flush_region = u_default_transfer_flush_region;
|
rctx->b.transfer_flush_region = u_default_transfer_flush_region;
|
||||||
@@ -431,7 +437,20 @@ static int r600_get_compute_param(struct pipe_screen *screen,
|
|||||||
//TODO: select these params by asic
|
//TODO: select these params by asic
|
||||||
switch (param) {
|
switch (param) {
|
||||||
case PIPE_COMPUTE_CAP_IR_TARGET: {
|
case PIPE_COMPUTE_CAP_IR_TARGET: {
|
||||||
const char *gpu = r600_get_llvm_processor_name(rscreen->family);
|
const char *gpu;
|
||||||
|
switch(rscreen->family) {
|
||||||
|
/* Clang < 3.6 is missing Hainan in its list of
|
||||||
|
* GPUs, so we need to use the name of a similar GPU.
|
||||||
|
*/
|
||||||
|
#if HAVE_LLVM < 0x0306
|
||||||
|
case CHIP_HAINAN:
|
||||||
|
gpu = "oland";
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
gpu = r600_get_llvm_processor_name(rscreen->family);
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (ret) {
|
if (ret) {
|
||||||
sprintf(ret, "%s-r600--", gpu);
|
sprintf(ret, "%s-r600--", gpu);
|
||||||
}
|
}
|
||||||
@@ -472,13 +491,21 @@ static int r600_get_compute_param(struct pipe_screen *screen,
|
|||||||
case PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE:
|
case PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE:
|
||||||
if (ret) {
|
if (ret) {
|
||||||
uint64_t *max_global_size = ret;
|
uint64_t *max_global_size = ret;
|
||||||
/* XXX: This is what the proprietary driver reports, we
|
uint64_t max_mem_alloc_size;
|
||||||
* may want to use a different value. */
|
|
||||||
/* XXX: Not sure what to put here for SI. */
|
r600_get_compute_param(screen,
|
||||||
if (rscreen->chip_class >= SI)
|
PIPE_COMPUTE_CAP_MAX_MEM_ALLOC_SIZE,
|
||||||
*max_global_size = 2000000000;
|
&max_mem_alloc_size);
|
||||||
else
|
|
||||||
*max_global_size = 201326592;
|
/* In OpenCL, the MAX_MEM_ALLOC_SIZE must be at least
|
||||||
|
* 1/4 of the MAX_GLOBAL_SIZE. Since the
|
||||||
|
* MAX_MEM_ALLOC_SIZE is fixed for older kernels,
|
||||||
|
* make sure we never report more than
|
||||||
|
* 4 * MAX_MEM_ALLOC_SIZE.
|
||||||
|
*/
|
||||||
|
*max_global_size = MIN2(4 * max_mem_alloc_size,
|
||||||
|
rscreen->info.gart_size +
|
||||||
|
rscreen->info.vram_size);
|
||||||
}
|
}
|
||||||
return sizeof(uint64_t);
|
return sizeof(uint64_t);
|
||||||
|
|
||||||
@@ -502,13 +529,11 @@ static int r600_get_compute_param(struct pipe_screen *screen,
|
|||||||
if (ret) {
|
if (ret) {
|
||||||
uint64_t max_global_size;
|
uint64_t max_global_size;
|
||||||
uint64_t *max_mem_alloc_size = ret;
|
uint64_t *max_mem_alloc_size = ret;
|
||||||
r600_get_compute_param(screen, PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE, &max_global_size);
|
|
||||||
/* OpenCL requres this value be at least
|
/* XXX: The limit in older kernels is 256 MB. We
|
||||||
* max(MAX_GLOBAL_SIZE / 4, 128 * 1024 *1024)
|
* should add a query here for newer kernels.
|
||||||
* I'm really not sure what value to report here, but
|
|
||||||
* MAX_GLOBAL_SIZE / 4 seems resonable.
|
|
||||||
*/
|
*/
|
||||||
*max_mem_alloc_size = max_global_size / 4;
|
*max_mem_alloc_size = 256 * 1024 * 1024;
|
||||||
}
|
}
|
||||||
return sizeof(uint64_t);
|
return sizeof(uint64_t);
|
||||||
|
|
||||||
|
@@ -72,6 +72,7 @@
|
|||||||
#define R600_CONTEXT_WAIT_3D_IDLE (1 << 17)
|
#define R600_CONTEXT_WAIT_3D_IDLE (1 << 17)
|
||||||
#define R600_CONTEXT_WAIT_CP_DMA_IDLE (1 << 18)
|
#define R600_CONTEXT_WAIT_CP_DMA_IDLE (1 << 18)
|
||||||
#define R600_CONTEXT_VGT_FLUSH (1 << 19)
|
#define R600_CONTEXT_VGT_FLUSH (1 << 19)
|
||||||
|
#define R600_CONTEXT_VGT_STREAMOUT_SYNC (1 << 20)
|
||||||
|
|
||||||
/* Debug flags. */
|
/* Debug flags. */
|
||||||
/* logging */
|
/* logging */
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user