Compare commits
248 Commits
mesa-17.1.
...
10.4
Author | SHA1 | Date | |
---|---|---|---|
|
cb154bb221 | ||
|
d26f3c1f86 | ||
|
b7b218f3f6 | ||
|
832c94a55c | ||
|
70832be2f1 | ||
|
ad259df2e0 | ||
|
df2db2a55f | ||
|
0506f69f08 | ||
|
a563045009 | ||
|
b2e243f70c | ||
|
8c25b0f2d1 | ||
|
a91ee1e187 | ||
|
977626f10a | ||
|
b451a2ffbf | ||
|
a561eee82c | ||
|
80ef80d087 | ||
|
fa8bfb3ed1 | ||
|
025cf8cb3f | ||
|
4db4f70546 | ||
|
d4a95ffcda | ||
|
97b0219ed5 | ||
|
93273f16af | ||
|
8e8d215cae | ||
|
1a929baa0b | ||
|
3a625d0b3f | ||
|
944ef59b2f | ||
|
fc9dd495b2 | ||
|
542a754524 | ||
|
e559d126f9 | ||
|
fc5881ad73 | ||
|
9508ca24f1 | ||
|
644bbf88ec | ||
|
a369361f9e | ||
|
f1663a5236 | ||
|
e1b5bc9330 | ||
|
93edf3e7dc | ||
|
66a3f104a5 | ||
|
afa7a851da | ||
|
d880aa573c | ||
|
741aeba26f | ||
|
a598a9bdfe | ||
|
0c46d850d9 | ||
|
da46b1b160 | ||
|
7e723c98ce | ||
|
0a51529a28 | ||
|
2a9e9b5aeb | ||
|
120792fa04 | ||
|
39ae85732d | ||
|
61c1aabb9f | ||
|
6da4e66d4e | ||
|
7e57411b9a | ||
|
1e6735ead1 | ||
|
deea686c71 | ||
|
41bdeda102 | ||
|
a5c608e951 | ||
|
e0276bc297 | ||
|
dc16fb1969 | ||
|
aaa823569b | ||
|
f57b41758d | ||
|
67ac6a3951 | ||
|
5d04b9eeed | ||
|
53041aecef | ||
|
f76bcbb4cd | ||
|
89289934fc | ||
|
dbf82d753b | ||
|
b786e6332b | ||
|
c0ce908a90 | ||
|
c83c5f4b69 | ||
|
f2663112f6 | ||
|
2ad93851ff | ||
|
e35e6773c2 | ||
|
51bdd19c97 | ||
|
5c623ff071 | ||
|
654f197f19 | ||
|
162cee83ba | ||
|
54da987bae | ||
|
62eb27ac8b | ||
|
a824179af5 | ||
|
fecedb6c43 | ||
|
9d1d1f46c7 | ||
|
b51d369690 | ||
|
eab8dc28ed | ||
|
cc580045a8 | ||
|
0d721fa1d6 | ||
|
c96ed76b3d | ||
|
49a5bce780 | ||
|
e92bfa3f95 | ||
|
f70e4d4afd | ||
|
42806f12a9 | ||
|
4c9b64fc44 | ||
|
69c7cf70e7 | ||
|
4d04fd0871 | ||
|
0727ab961c | ||
|
7280ddea9d | ||
|
425bc89720 | ||
|
0b3f8c72f7 | ||
|
63e668eb18 | ||
|
2b4c577730 | ||
|
e3a393b4c3 | ||
|
7ecd0f9528 | ||
|
336887bca1 | ||
|
8e08ba6f96 | ||
|
77e1136f44 | ||
|
22c75f9f5a | ||
|
4b65be8860 | ||
|
9ea8e7f0df | ||
|
d0d09a4eee | ||
|
75f39e45f0 | ||
|
553089093f | ||
|
add30f01ef | ||
|
0dfb9c9e86 | ||
|
7e26cf83ba | ||
|
00d22ce0fa | ||
|
7f700cc35b | ||
|
e6167e749c | ||
|
bce0058333 | ||
|
9a0647ba7f | ||
|
669c5d6d44 | ||
|
87ac37074f | ||
|
e1bcca4f13 | ||
|
50ea1c1f5f | ||
|
3ca8b93476 | ||
|
d06b403377 | ||
|
481af42f28 | ||
|
393fffd07d | ||
|
c159b4095c | ||
|
b80b5b35a3 | ||
|
41ca03a7b4 | ||
|
18ac34825b | ||
|
15ef84ccfb | ||
|
44ee59d300 | ||
|
1e0ab5b826 | ||
|
a3381286d8 | ||
|
882f702441 | ||
|
a25e26f67f | ||
|
021d71b848 | ||
|
14f1659b43 | ||
|
02f2e97c3e | ||
|
5906dd6c99 | ||
|
2d05942b74 | ||
|
099ed78a04 | ||
|
91c5770ba1 | ||
|
3306ed6fd7 | ||
|
81f8006f7d | ||
|
1b498cf5b7 | ||
|
8c77be7ef9 | ||
|
ef43d21bbc | ||
|
ac3ca98a1b | ||
|
af1a690075 | ||
|
fffe533f08 | ||
|
4d5e0f78b7 | ||
|
b9e56ea151 | ||
|
e05c595acd | ||
|
c48d0d8dd2 | ||
|
aafd13027a | ||
|
1f42230fa7 | ||
|
2b85ed72db | ||
|
4cd38a592e | ||
|
60e2e04fe8 | ||
|
1a3df8cc77 | ||
|
45416a255f | ||
|
fb3f7c0bc5 | ||
|
4f570f2fb3 | ||
|
a4c8348597 | ||
|
893583776e | ||
|
2d669f6583 | ||
|
bccfe7ae0f | ||
|
ee241a6889 | ||
|
4b37a18da5 | ||
|
93f6f55983 | ||
|
af0c82099b | ||
|
5fe79b0b12 | ||
|
45f3aa0bc7 | ||
|
90239276ff | ||
|
57868b1ee4 | ||
|
fe2eac2237 | ||
|
db784a09f1 | ||
|
d9f4aaa095 | ||
|
e340a28dba | ||
|
6b908efd58 | ||
|
65f03e6733 | ||
|
ffaf58e7d0 | ||
|
bb9dea8a29 | ||
|
be59440b53 | ||
|
ac8d596498 | ||
|
112d2fdb17 | ||
|
c6353cee0c | ||
|
09e4f1a50f | ||
|
c7b9a2e38a | ||
|
6fcbf9aee3 | ||
|
fd2852fe5b | ||
|
57057c439e | ||
|
b5cc04b6ad | ||
|
d2e9fd5b6d | ||
|
b61192f2ae | ||
|
75c4824d2f | ||
|
f30fbbdbdd | ||
|
b247956c77 | ||
|
72a802a9c2 | ||
|
cfbc474d80 | ||
|
360872a45e | ||
|
42839ea5ba | ||
|
8dc03bd575 | ||
|
41906e9764 | ||
|
56572002fc | ||
|
c0e0de45dc | ||
|
b75a285633 | ||
|
1cf4dbdc81 | ||
|
c29ddc923f | ||
|
085de45812 | ||
|
31c7e6c51d | ||
|
2a0290d5f5 | ||
|
f77a97f057 | ||
|
d45c35c3d7 | ||
|
16eaf01a6a | ||
|
6316d415c4 | ||
|
dca88397ca | ||
|
6c383aaadd | ||
|
7e47ae3185 | ||
|
9e94c05936 | ||
|
4952c49f21 | ||
|
013eba0ec1 | ||
|
db9a6b96ab | ||
|
4d9c0445dd | ||
|
1a8f90dc70 | ||
|
7fe9292069 | ||
|
c260cb700b | ||
|
aab3758916 | ||
|
be24d54195 | ||
|
8751abf752 | ||
|
da7475f35f | ||
|
7b62f0eb50 | ||
|
fa62619da5 | ||
|
2e3d2035cf | ||
|
edb2186671 | ||
|
5a2ff2002b | ||
|
0a3c146723 | ||
|
6452e24ebc | ||
|
4186c1c7b1 | ||
|
d133096d26 | ||
|
01c9bf999e | ||
|
df63e76c2c | ||
|
b46e80ae60 | ||
|
ff97fbd9e9 | ||
|
504d73f342 | ||
|
7bbf0836c8 | ||
|
8d6963f005 | ||
|
50e6b471c5 |
18
bin/.cherry-ignore
Normal file
18
bin/.cherry-ignore
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# No whitespace commits in stable.
|
||||||
|
a10bf5c10caf27232d4df8da74d5c35c23eb883d
|
||||||
|
|
||||||
|
# The following patches address code which is missing in 10.4
|
||||||
|
# http://lists.freedesktop.org/archives/mesa-dev/2015-March/078515.html
|
||||||
|
06084652fefe49c3d6bf1b476ff74ff602fdc22a common: Correct texture init for meta pbo uploads and downloads.
|
||||||
|
|
||||||
|
# http://lists.freedesktop.org/archives/mesa-dev/2015-March/078547.html
|
||||||
|
ccc5ce6f72c1ec86be4dfcef96c0b51fba0faa6d common: Correct PBO 2D_ARRAY handling.
|
||||||
|
|
||||||
|
# http://lists.freedesktop.org/archives/mesa-dev/2015-March/078549.html
|
||||||
|
546aba143d13ba3f993ead4cc30b2404abfc0202 common: Fix PBOs for 1D_ARRAY.
|
||||||
|
|
||||||
|
# http://lists.freedesktop.org/archives/mesa-dev/2015-March/078501.html
|
||||||
|
2b2fa1865248c6e3b7baec81c4f92774759b201f mesa: Indent break statements and add a missing one.
|
||||||
|
|
||||||
|
# http://lists.freedesktop.org/archives/mesa-dev/2015-March/078502.html
|
||||||
|
87109acbed9c9b52f33d58ca06d9048d0ac7a215 mesa: Free memory allocated for luminance in readpixels.
|
@@ -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\.4.*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.
|
||||||
|
61
configure.ac
61
configure.ac
@@ -252,11 +252,29 @@ AC_SUBST([VISIBILITY_CXXFLAGS])
|
|||||||
dnl
|
dnl
|
||||||
dnl Optional flags, check for compiler support
|
dnl Optional flags, check for compiler support
|
||||||
dnl
|
dnl
|
||||||
AX_CHECK_COMPILE_FLAG([-msse4.1], [SSE41_SUPPORTED=1], [SSE41_SUPPORTED=0])
|
SSE41_CFLAGS="-msse4.1"
|
||||||
|
dnl Code compiled by GCC with -msse* assumes a 16 byte aligned
|
||||||
|
dnl stack, but on x86-32 such alignment is not guaranteed.
|
||||||
|
case "$target_cpu" in
|
||||||
|
i?86)
|
||||||
|
SSE41_CFLAGS="$SSE41_CFLAGS -mstackrealign"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$SSE41_CFLAGS $CFLAGS"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||||
|
#include <smmintrin.h>
|
||||||
|
int main () {
|
||||||
|
__m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
|
||||||
|
c = _mm_max_epu32(a, b);
|
||||||
|
return 0;
|
||||||
|
}]])], SSE41_SUPPORTED=1)
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
if test "x$SSE41_SUPPORTED" = x1; then
|
if test "x$SSE41_SUPPORTED" = x1; then
|
||||||
DEFINES="$DEFINES -DUSE_SSE41"
|
DEFINES="$DEFINES -DUSE_SSE41"
|
||||||
fi
|
fi
|
||||||
AM_CONDITIONAL([SSE41_SUPPORTED], [test x$SSE41_SUPPORTED = x1])
|
AM_CONDITIONAL([SSE41_SUPPORTED], [test x$SSE41_SUPPORTED = x1])
|
||||||
|
AC_SUBST([SSE41_CFLAGS], $SSE41_CFLAGS)
|
||||||
|
|
||||||
dnl Can't have static and shared libraries, default to static if user
|
dnl Can't have static and shared libraries, default to static if user
|
||||||
dnl explicitly requested. If both disabled, set to static since shared
|
dnl explicitly requested. If both disabled, set to static since shared
|
||||||
@@ -660,6 +678,11 @@ AC_ARG_ENABLE([gbm],
|
|||||||
[enable gbm library @<:@default=auto@:>@])],
|
[enable gbm library @<:@default=auto@:>@])],
|
||||||
[enable_gbm="$enableval"],
|
[enable_gbm="$enableval"],
|
||||||
[enable_gbm=auto])
|
[enable_gbm=auto])
|
||||||
|
AC_ARG_ENABLE([nine],
|
||||||
|
[AS_HELP_STRING([--enable-nine],
|
||||||
|
[enable build of the nine Direct3D9 API @<:@default=no@:>@])],
|
||||||
|
[enable_nine="$enableval"],
|
||||||
|
[enable_nine=no])
|
||||||
|
|
||||||
AC_ARG_ENABLE([xvmc],
|
AC_ARG_ENABLE([xvmc],
|
||||||
[AS_HELP_STRING([--enable-xvmc],
|
[AS_HELP_STRING([--enable-xvmc],
|
||||||
@@ -733,6 +756,7 @@ esac
|
|||||||
if test "x$enable_opengl" = xno -a \
|
if test "x$enable_opengl" = xno -a \
|
||||||
"x$enable_gles1" = xno -a \
|
"x$enable_gles1" = xno -a \
|
||||||
"x$enable_gles2" = xno -a \
|
"x$enable_gles2" = xno -a \
|
||||||
|
"x$enable_nine" = xno -a \
|
||||||
"x$enable_openvg" = xno -a \
|
"x$enable_openvg" = xno -a \
|
||||||
"x$enable_xa" = xno -a \
|
"x$enable_xa" = xno -a \
|
||||||
"x$enable_xvmc" = xno -a \
|
"x$enable_xvmc" = xno -a \
|
||||||
@@ -1385,6 +1409,24 @@ if test "x$enable_va" = xyes; then
|
|||||||
fi
|
fi
|
||||||
AM_CONDITIONAL(HAVE_ST_VA, test "x$enable_va" = xyes)
|
AM_CONDITIONAL(HAVE_ST_VA, test "x$enable_va" = xyes)
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Nine Direct3D9 configuration
|
||||||
|
dnl
|
||||||
|
if test "x$enable_nine" = xyes; then
|
||||||
|
if ! echo "$with_gallium_drivers" | grep -q 'swrast'; then
|
||||||
|
AC_MSG_ERROR([nine requires the gallium swrast driver])
|
||||||
|
fi
|
||||||
|
if test "x$with_gallium_drivers" == xswrast; then
|
||||||
|
AC_MSG_ERROR([nine requires at least one non-swrast gallium driver])
|
||||||
|
fi
|
||||||
|
if test "x$enable_dri3" = xno; then
|
||||||
|
AC_MSG_WARN([using nine together with wine requires DRI3 enabled system])
|
||||||
|
fi
|
||||||
|
|
||||||
|
enable_gallium_loader=$enable_shared_pipe_drivers
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL(HAVE_ST_NINE, test "x$enable_nine" = xyes)
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl OpenCL configuration
|
dnl OpenCL configuration
|
||||||
dnl
|
dnl
|
||||||
@@ -1674,7 +1716,7 @@ if test "x$enable_gallium_llvm" = xyes; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$enable_opencl" = xyes; then
|
if test "x$enable_opencl" = xyes; then
|
||||||
LLVM_COMPONENTS="${LLVM_COMPONENTS} ipo linker instrumentation"
|
LLVM_COMPONENTS="${LLVM_COMPONENTS} all-targets ipo linker instrumentation"
|
||||||
# LLVM 3.3 >= 177971 requires IRReader
|
# LLVM 3.3 >= 177971 requires IRReader
|
||||||
if $LLVM_CONFIG --components | grep -qw 'irreader'; then
|
if $LLVM_CONFIG --components | grep -qw 'irreader'; then
|
||||||
LLVM_COMPONENTS="${LLVM_COMPONENTS} irreader"
|
LLVM_COMPONENTS="${LLVM_COMPONENTS} irreader"
|
||||||
@@ -1759,6 +1801,13 @@ AC_ARG_WITH([va-libdir],
|
|||||||
[VA_LIB_INSTALL_DIR="${libdir}/dri"])
|
[VA_LIB_INSTALL_DIR="${libdir}/dri"])
|
||||||
AC_SUBST([VA_LIB_INSTALL_DIR])
|
AC_SUBST([VA_LIB_INSTALL_DIR])
|
||||||
|
|
||||||
|
AC_ARG_WITH([d3d-libdir],
|
||||||
|
[AS_HELP_STRING([--with-d3d-libdir=DIR],
|
||||||
|
[directory for the D3D modules @<:@${libdir}/d3d@:>@])],
|
||||||
|
[D3D_DRIVER_INSTALL_DIR="$withval"],
|
||||||
|
[D3D_DRIVER_INSTALL_DIR="${libdir}/d3d"])
|
||||||
|
AC_SUBST([D3D_DRIVER_INSTALL_DIR])
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Gallium helper functions
|
dnl Gallium helper functions
|
||||||
dnl
|
dnl
|
||||||
@@ -2043,6 +2092,11 @@ AM_CONDITIONAL(HAVE_X86_ASM, test "x$asm_arch" = xx86 -o "x$asm_arch" = xx86_64)
|
|||||||
AM_CONDITIONAL(HAVE_X86_64_ASM, test "x$asm_arch" = xx86_64)
|
AM_CONDITIONAL(HAVE_X86_64_ASM, test "x$asm_arch" = xx86_64)
|
||||||
AM_CONDITIONAL(HAVE_SPARC_ASM, test "x$asm_arch" = xsparc)
|
AM_CONDITIONAL(HAVE_SPARC_ASM, test "x$asm_arch" = xsparc)
|
||||||
|
|
||||||
|
AC_SUBST([NINE_MAJOR], 1)
|
||||||
|
AC_SUBST([NINE_MINOR], 0)
|
||||||
|
AC_SUBST([NINE_TINY], 0)
|
||||||
|
AC_SUBST([NINE_VERSION], "$NINE_MAJOR.$NINE_MINOR.$NINE_TINY")
|
||||||
|
|
||||||
AC_SUBST([VDPAU_MAJOR], 1)
|
AC_SUBST([VDPAU_MAJOR], 1)
|
||||||
AC_SUBST([VDPAU_MINOR], 0)
|
AC_SUBST([VDPAU_MINOR], 0)
|
||||||
|
|
||||||
@@ -2112,6 +2166,7 @@ AC_CONFIG_FILES([Makefile
|
|||||||
src/gallium/state_trackers/clover/Makefile
|
src/gallium/state_trackers/clover/Makefile
|
||||||
src/gallium/state_trackers/dri/Makefile
|
src/gallium/state_trackers/dri/Makefile
|
||||||
src/gallium/state_trackers/glx/xlib/Makefile
|
src/gallium/state_trackers/glx/xlib/Makefile
|
||||||
|
src/gallium/state_trackers/nine/Makefile
|
||||||
src/gallium/state_trackers/omx/Makefile
|
src/gallium/state_trackers/omx/Makefile
|
||||||
src/gallium/state_trackers/osmesa/Makefile
|
src/gallium/state_trackers/osmesa/Makefile
|
||||||
src/gallium/state_trackers/va/Makefile
|
src/gallium/state_trackers/va/Makefile
|
||||||
@@ -2119,6 +2174,8 @@ AC_CONFIG_FILES([Makefile
|
|||||||
src/gallium/state_trackers/vega/Makefile
|
src/gallium/state_trackers/vega/Makefile
|
||||||
src/gallium/state_trackers/xa/Makefile
|
src/gallium/state_trackers/xa/Makefile
|
||||||
src/gallium/state_trackers/xvmc/Makefile
|
src/gallium/state_trackers/xvmc/Makefile
|
||||||
|
src/gallium/targets/d3dadapter9/Makefile
|
||||||
|
src/gallium/targets/d3dadapter9/d3d.pc
|
||||||
src/gallium/targets/dri/Makefile
|
src/gallium/targets/dri/Makefile
|
||||||
src/gallium/targets/egl-static/Makefile
|
src/gallium/targets/egl-static/Makefile
|
||||||
src/gallium/targets/gbm/Makefile
|
src/gallium/targets/gbm/Makefile
|
||||||
|
@@ -187,7 +187,7 @@ GL 4.4, GLSL 4.40:
|
|||||||
GL 4.5, GLSL 4.50:
|
GL 4.5, GLSL 4.50:
|
||||||
|
|
||||||
GL_ARB_ES3_1_compatibility not started
|
GL_ARB_ES3_1_compatibility not started
|
||||||
GL_ARB_clip_control DONE (llvmpipe, softpipe, r300, r600, radeonsi)
|
GL_ARB_clip_control DONE (nv50, nvc0, r300, r600, radeonsi, llvmpipe, softpipe)
|
||||||
GL_ARB_conditional_render_inverted DONE (i965, nv50, nvc0, llvmpipe, softpipe)
|
GL_ARB_conditional_render_inverted DONE (i965, nv50, nvc0, llvmpipe, softpipe)
|
||||||
GL_ARB_cull_distance not started
|
GL_ARB_cull_distance not started
|
||||||
GL_ARB_derivative_control DONE (i965, nv50, nvc0, r600)
|
GL_ARB_derivative_control DONE (i965, nv50, nvc0, r600)
|
||||||
|
@@ -16,6 +16,13 @@
|
|||||||
|
|
||||||
<h1>News</h1>
|
<h1>News</h1>
|
||||||
|
|
||||||
|
<h2>December 14, 2014</h2>
|
||||||
|
<p>
|
||||||
|
<a href="relnotes/10.4.html">Mesa 10.4</a> is released. This is a new
|
||||||
|
development release. See the release notes for more information about
|
||||||
|
the release.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h2>November 8, 2014</h2>
|
<h2>November 8, 2014</h2>
|
||||||
<p>
|
<p>
|
||||||
<a href="relnotes/10.3.3.html">Mesa 10.3.3</a> is released.
|
<a href="relnotes/10.3.3.html">Mesa 10.3.3</a> is released.
|
||||||
|
@@ -21,6 +21,7 @@ The release notes summarize what's new or changed in each Mesa release.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
<li><a href="relnotes/10.4.html">10.4 release notes</a>
|
||||||
<li><a href="relnotes/10.3.3.html">10.3.3 release notes</a>
|
<li><a href="relnotes/10.3.3.html">10.3.3 release notes</a>
|
||||||
<li><a href="relnotes/10.3.2.html">10.3.2 release notes</a>
|
<li><a href="relnotes/10.3.2.html">10.3.2 release notes</a>
|
||||||
<li><a href="relnotes/10.3.1.html">10.3.1 release notes</a>
|
<li><a href="relnotes/10.3.1.html">10.3.1 release notes</a>
|
||||||
|
@@ -88,6 +88,8 @@ following options during configure, if you would like support for svga driver
|
|||||||
Note: The files are installed in $(libdir)/gallium-pipe/ and the interface
|
Note: The files are installed in $(libdir)/gallium-pipe/ and the interface
|
||||||
between them and libxatracker.so is <strong>not</strong> stable.
|
between them and libxatracker.so is <strong>not</strong> stable.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<li>The environment variable GALLIUM_MSAA that forced a multisample GLX visual was removed.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@@ -327,6 +327,7 @@ DRM drivers that don't have a full-fledged GEM (such as qxl or simpledrm)</li>
|
|||||||
<li>Removed support for the GL_ATI_envmap_bumpmap extension</li>
|
<li>Removed support for the GL_ATI_envmap_bumpmap extension</li>
|
||||||
<li>The hacky --enable-32/64-bit is no longer available in configure. To build
|
<li>The hacky --enable-32/64-bit is no longer available in configure. To build
|
||||||
32/64 bit mesa refer to the default method recommended by your distribution</li>
|
32/64 bit mesa refer to the default method recommended by your distribution</li>
|
||||||
|
</li>The environment variable GALLIUM_MSAA that forced a multisample GLX visual was removed.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
97
docs/relnotes/10.4.1.html
Normal file
97
docs/relnotes/10.4.1.html
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
<!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.4.1 Release Notes / December 29, 2014</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.1 is a bug fix release which fixes bugs found since the 10.4.0 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.1 implements the OpenGL 3.3 API, but the version reported by
|
||||||
|
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||||
|
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||||
|
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||||
|
3.3 is <strong>only</strong> available if requested at context creation
|
||||||
|
because compatibility contexts are not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>SHA256 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
5311285e791a6bfaa468ad002bd1e1164acb3eaa040b5a1bf958bdb7c27e0a9d MesaLib-10.4.1.tar.gz
|
||||||
|
91e8b71c8aff4cb92022a09a872b1c5d1ae5bfec8c6c84dbc4221333da5bf1ca MesaLib-10.4.1.tar.bz2
|
||||||
|
e09c8135f5a86ecb21182c6f8959aafd39ae2f98858fdf7c0e25df65b5abcdb8 MesaLib-10.4.1.zip
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<h2>New features</h2>
|
||||||
|
<p>None</p>
|
||||||
|
|
||||||
|
<h2>Bug fixes</h2>
|
||||||
|
|
||||||
|
<p>This list is likely incomplete.</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82585">Bug 82585</a> - geometry shader with optional out variable segfaults</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82991">Bug 82991</a> - Inverted bumpmap in webgl applications</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83908">Bug 83908</a> - [i965] Incorrect icon colors in Steam Big Picture</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>Andres Gomez (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965/brw_reg: struct constructor now needs explicit negate and abs values.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Cody Northrop (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Require pixel alignment for GPU copy blit</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Emil Velikov (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add 10.4 sha256 sums, news item and link release notes</li>
|
||||||
|
<li>Revert "glx/dri3: Request non-vsynced Present for swapinterval zero. (v3)"</li>
|
||||||
|
<li>Update version to 10.4.1</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ian Romanick (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>linker: Wrap access of producer_var with a NULL check</li>
|
||||||
|
<li>linker: Assign varying locations geometry shader inputs for SSO</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Mario Kleiner (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glx/dri3: Fix glXWaitForSbcOML() to handle targetSBC==0 correctly. (v2)</li>
|
||||||
|
<li>glx/dri3: Track separate (ust, msc) for PresentPixmap vs. PresentNotifyMsc (v2)</li>
|
||||||
|
<li>glx/dri3: Request non-vsynced Present for swapinterval zero. (v3)</li>
|
||||||
|
<li>glx/dri3: Don't fail on glXSwapBuffersMscOML(dpy, window, 0, 0, 0) (v2)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Maxence Le Doré (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glsl: Add gl_MaxViewports to available builtin constants</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
127
docs/relnotes/10.4.2.html
Normal file
127
docs/relnotes/10.4.2.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.4.2 Release Notes / January 12, 2015</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.2 is a bug fix release which fixes bugs found since the 10.4.1 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.2 implements the OpenGL 3.3 API, but the version reported by
|
||||||
|
glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
|
||||||
|
glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
|
||||||
|
Some drivers don't support all the features required in OpenGL 3.3. OpenGL
|
||||||
|
3.3 is <strong>only</strong> available if requested at context creation
|
||||||
|
because compatibility contexts are not supported.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>SHA256 checksums</h2>
|
||||||
|
<pre>
|
||||||
|
e303e77dd774df0d051b2870b165f98c97084a55980f884731df89c1b56a6146 MesaLib-10.4.2.tar.gz
|
||||||
|
08a119937d9f2aa2f66dd5de97baffc2a6e675f549e40e699a31f5485d15327f MesaLib-10.4.2.tar.bz2
|
||||||
|
c2c2921a80a3395824f02bee4572a6a17d6a12a928a3e497618eeea04fb06490 MesaLib-10.4.2.zip
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<h2>New features</h2>
|
||||||
|
<p>None</p>
|
||||||
|
|
||||||
|
<h2>Bug fixes</h2>
|
||||||
|
|
||||||
|
<p>This list is likely incomplete.</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85529">Bug 85529</a> - Surfaces not drawn in Unvanquished</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87619">Bug 87619</a> - Changes to state such as render targets change fragment shader without marking it dirty.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87658">Bug 87658</a> - [llvmpipe] SEGV in sse2_has_daz on ancient Pentium4-M</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87913">Bug 87913</a> - CPU cacheline size of 0 can be returned by CPUID leaf 0x80000006 in some virtual machines</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>Chad Versace (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Use safer pointer arithmetic in intel_texsubimage_tiled_memcpy()</li>
|
||||||
|
<li>i965: Use safer pointer arithmetic in gather_oa_results()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Dave Airlie (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>Revert "r600g/sb: fix issues cause by GLSL switching to loops for switch"</li>
|
||||||
|
<li>r600g: fix regression since UCMP change</li>
|
||||||
|
<li>r600g/sb: implement r600 gpr index workaround. (v3.1)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Emil Velikov (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 sums for the 10.4.1 release</li>
|
||||||
|
<li>Update version to 10.4.2</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ilia Mirkin (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nv50,nvc0: set vertex id base to index_bias</li>
|
||||||
|
<li>nv50/ir: fix texture offsets in release builds</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Kenneth Graunke (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Add missing BRW_NEW_*_PROG_DATA to texture/renderbuffer atoms.</li>
|
||||||
|
<li>i965: Fix start/base_vertex_location for >1 prims but !BRW_NEW_VERTICES.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Leonid Shatz (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallium/util: make sure cache line size is not zero</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glsl_to_tgsi: fix a bug in copy propagation</li>
|
||||||
|
<li>vbo: ignore primitive restart if FixedIndex is enabled in DrawArrays</li>
|
||||||
|
<li>st/mesa: fix GL_PRIMITIVE_RESTART_FIXED_INDEX</li>
|
||||||
|
<li>radeonsi: fix VertexID for OpenGL</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Michel Dänzer (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>radeonsi: Don't modify PA_SC_RASTER_CONFIG register value if rb_mask == 0</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Roland Scheidegger (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallium/util: fix crash with daz detection on x86</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Tiziano Bacocco (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nv50,nvc0: implement half_pixel_center</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Vadim Girlin (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>r600g/sb: fix issues with loops created for switch</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
145
docs/relnotes/10.4.3.html
Normal file
145
docs/relnotes/10.4.3.html
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
<!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.4.3 Release Notes / January 24, 2015</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.3 is a bug fix release which fixes bugs found since the 10.4.2 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.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>
|
||||||
|
c53eaafc83d9c6315f63e0904d9954d929b841b0b2be7a328eeb6e14f1376129 MesaLib-10.4.3.tar.gz
|
||||||
|
ef6ecc9c2f36c9f78d1662382a69ae961f38f03af3a0c3268e53f351aa1978ad MesaLib-10.4.3.tar.bz2
|
||||||
|
179325fc8ec66529d3b0d0c43ef61a33a44d91daa126c3bbdd1efdfd25a7db1d MesaLib-10.4.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=80568">Bug 80568</a> - [gen4] GPU Crash During Google Chrome Operation</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85367">Bug 85367</a> - [gen4] GPU hang in glmark-es2</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85696">Bug 85696</a> - r600g+nine: Bioshock shader failure after 7b1c0cbc90d456384b0950ad21faa3c61a6b43ff</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88219">Bug 88219</a> - include/c11/threads_posix.h:197: undefined reference to `pthread_mutex_lock'</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>Axel Davy (39):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/nine: Add new texture format strings</li>
|
||||||
|
<li>st/nine: Correctly advertise D3DPMISCCAPS_CLIPTLVERTS</li>
|
||||||
|
<li>st/nine: NineBaseTexture9: fix setting of last_layer</li>
|
||||||
|
<li>st/nine: CubeTexture: fix GetLevelDesc</li>
|
||||||
|
<li>st/nine: Fix crash when deleting non-implicit swapchain</li>
|
||||||
|
<li>st/nine: Return D3DERR_INVALIDCALL when trying to create a texture of bad format</li>
|
||||||
|
<li>st/nine: NineBaseTexture9: update sampler view creation</li>
|
||||||
|
<li>st/nine: Check if srgb format is supported before trying to use it.</li>
|
||||||
|
<li>st/nine: Add ATI1 and ATI2 support</li>
|
||||||
|
<li>st/nine: Rework of boolean constants</li>
|
||||||
|
<li>st/nine: Convert integer constants to floats before storing them when cards don't support integers</li>
|
||||||
|
<li>st/nine: Remove some shader unused code</li>
|
||||||
|
<li>st/nine: Saturate oFog and oPts vs outputs</li>
|
||||||
|
<li>st/nine: Correctly declare NineTranslateInstruction_Mkxn inputs</li>
|
||||||
|
<li>st/nine: Fix typo for M4x4</li>
|
||||||
|
<li>st/nine: Fix POW implementation</li>
|
||||||
|
<li>st/nine: Handle RSQ special cases</li>
|
||||||
|
<li>st/nine: Handle NRM with input of null norm</li>
|
||||||
|
<li>st/nine: Correct LOG on negative values</li>
|
||||||
|
<li>st/nine: Rewrite LOOP implementation, and a0 aL handling</li>
|
||||||
|
<li>st/nine: Fix CND implementation</li>
|
||||||
|
<li>st/nine: Clamp ps 1.X constants</li>
|
||||||
|
<li>st/nine: Fix some fixed function pipeline operation</li>
|
||||||
|
<li>st/nine: Implement TEXCOORD special behaviours</li>
|
||||||
|
<li>st/nine: Fill missing dst and src number for some instructions.</li>
|
||||||
|
<li>st/nine: Fix TEXM3x3 and implement TEXM3x3VSPEC</li>
|
||||||
|
<li>st/nine: implement TEXM3x2DEPTH</li>
|
||||||
|
<li>st/nine: Implement TEXM3x2TEX</li>
|
||||||
|
<li>st/nine: Implement TEXM3x3SPEC</li>
|
||||||
|
<li>st/nine: Implement TEXDEPTH</li>
|
||||||
|
<li>st/nine: Implement TEXDP3</li>
|
||||||
|
<li>st/nine: Implement TEXDP3TEX</li>
|
||||||
|
<li>st/nine: Implement TEXREG2AR, TEXREG2GB and TEXREG2RGB</li>
|
||||||
|
<li>st/nine: Correct rules for relative adressing and constants.</li>
|
||||||
|
<li>st/nine: Remove unused code for ps</li>
|
||||||
|
<li>st/nine: Fix sm3 relative addressing for non-debug build</li>
|
||||||
|
<li>st/nine: Add variables containing the size of the constant buffers</li>
|
||||||
|
<li>st/nine: Allocate the correct size for the user constant buffer</li>
|
||||||
|
<li>st/nine: Allocate vs constbuf buffer for indirect addressing once.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Emil Velikov (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 sums for the 10.4.2 release</li>
|
||||||
|
<li>Update version to 10.4.3</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jason Ekstrand (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: Fix clamping to -1.0 in snorm_to_float</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jonathan Gray (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glsl: Link glsl_test with pthreads library.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jose Fonseca (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nine: Drop use of TGSI_OPCODE_CND.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Kenneth Graunke (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Respect the no_8 flag on Gen6, not just Gen7+.</li>
|
||||||
|
<li>i965: Work around mysterious Gen4 GPU hangs with minimal state changes.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Stanislaw Halik (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/nine: Hack to generate resource if it doesn't exist when getting view</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Xavier Bouchoux (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/nine: Additional defines to d3dtypes.h</li>
|
||||||
|
<li>st/nine: Add missing c++ declaration for IDirect3DVolumeTexture9</li>
|
||||||
|
<li>st/nine: Fix D3DRS_POINTSPRITE support</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
100
docs/relnotes/10.4.4.html
Normal file
100
docs/relnotes/10.4.4.html
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
|
<title>Mesa Release Notes</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../mesa.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<h1>The Mesa 3D Graphics Library</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<iframe src="../contents.html"></iframe>
|
||||||
|
<div class="content">
|
||||||
|
|
||||||
|
<h1>Mesa 10.4.4 Release Notes / February 06, 2015</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.4 is a bug fix release which fixes bugs found since the 10.4.3 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.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>
|
||||||
|
5cb427eaf980cb8555953e9928f5797979ed783e277745d5f8cbae8bc5364086 MesaLib-10.4.4.tar.gz
|
||||||
|
f18a967e9c4d80e054b2fdff8c130ce6e6d1f8eecfc42c9f354f8628d8b4df1c MesaLib-10.4.4.tar.bz2
|
||||||
|
86baad73b77920c80fe58402a905e7dd17e3ea10ead6ea7d3afdc0a56c860bd7 MesaLib-10.4.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=88662">Bug 88662</a> - unaligned access to gl_dlist_node</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88930">Bug 88930</a> - [osmesa] osbuffer->textures should be indexed by attachment type</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>Brian Paul (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: fix display list 8-byte alignment issue</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Emil Velikov (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 sums for the 10.4.3 release</li>
|
||||||
|
<li>Update version to 10.4.4</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>José Fonseca (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>egl: Pass the correct X visual depth to xcb_put_image().</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Mario Kleiner (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glx/dri3: Request non-vsynced Present for swapinterval zero. (v3)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Matt Turner (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallium/util: Don't use __builtin_clrsb in util_last_bit().</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Niels Ole Salscheider (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>configure: Link against all LLVM targets when building clover</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Park, Jeongmin (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/osmesa: Fix osbuffer->textures indexing</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ville Syrjälä (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Fix max_wm_threads for CHV</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
114
docs/relnotes/10.4.5.html
Normal file
114
docs/relnotes/10.4.5.html
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
<!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.4.5 Release Notes / February 21, 2015</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.5 is a bug fix release which fixes bugs found since the 10.4.4 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.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>
|
||||||
|
e12bbdaee9a758617e8ebd0bb0e987f72addd11db2e4da25ba695e386cd63843 MesaLib-10.4.5.tar.gz
|
||||||
|
bf60000700a9d58e3aca2bfeee7e781053b0d839e61a95b1883e05a2dee247a0 MesaLib-10.4.5.tar.bz2
|
||||||
|
3b926de8eee500bb67cf85332c51292f826cc539b8636382aadbb8e70c76527a MesaLib-10.4.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=82477">Bug 82477</a> - [softpipe] piglit fp-long-alu regression</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88658">Bug 88658</a> - (bisected) Slow video playback on Kabini</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89069">Bug 89069</a> - Lack of grass in The Talos Principle on radeonsi (native\wine\nine)</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>Carl Worth (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>Revert use of Mesa IR optimizer for ARB_fragment_programs</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Emil Velikov (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 sums for the 10.4.4 release</li>
|
||||||
|
<li>get-pick-list.sh: Require explicit "10.4" for nominating stable patches</li>
|
||||||
|
<li>Update version to 10.4.5</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ilia Mirkin (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>nvc0: bail out of 2d blits with non-A8_UNORM alpha formats</li>
|
||||||
|
<li>st/mesa: treat resource-less xfb buffers as if they weren't there</li>
|
||||||
|
<li>nvc0: allow holes in xfb target lists</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jeremy Huddleston Sequoia (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>darwin: build fix</li>
|
||||||
|
<li>darwin: build fix</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Kenneth Graunke (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Override swizzles for integer luminance formats.</li>
|
||||||
|
<li>i965: Use a gl_color_union for sampler border color.</li>
|
||||||
|
<li>i965: Fix integer border color on Haswell.</li>
|
||||||
|
<li>glsl: Reduce memory consumption of copy propagation passes.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Laura Ekstrand (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>main: Fixed _mesa_GetCompressedTexImage_sw to copy slices correctly.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (5):</p>
|
||||||
|
<ul>
|
||||||
|
<li>r600g,radeonsi: don't append to streamout buffers that haven't been used yet</li>
|
||||||
|
<li>radeonsi: fix instanced arrays with non-zero start instance</li>
|
||||||
|
<li>radeonsi: small fix in SPI state</li>
|
||||||
|
<li>mesa: fix AtomicBuffer typo in _mesa_DeleteBuffers</li>
|
||||||
|
<li>radeonsi: fix a crash if a stencil ref state is set before a DSA state</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Michel Dänzer (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/mesa: Don't use PIPE_USAGE_STREAM for GL_PIXEL_UNPACK_BUFFER_ARB</li>
|
||||||
|
<li>Revert "radeon/llvm: enable unsafe math for graphics shaders"</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
143
docs/relnotes/10.4.6.html
Normal file
143
docs/relnotes/10.4.6.html
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
<!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.4.6 Release Notes / March 06, 2015</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.6 is a bug fix release which fixes bugs found since the 10.4.5 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.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>
|
||||||
|
46c9082142e811c01e49a2c332a9ac0a1eb98f2908985fb9df216539d7eaeaf4 MesaLib-10.4.6.tar.gz
|
||||||
|
d8baedd20e79ccd98a5a7b05e23d59a30892e68de1fcc057ca6873dafca02735 MesaLib-10.4.6.tar.bz2
|
||||||
|
6aded6eac7f0d4d55117b8b581d8424710bbb4c768fc90f7b881f29311a751aa MesaLib-10.4.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=45348">Bug 45348</a> - [swrast] piglit fbo-drawbuffers-arbfp regression</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84613">Bug 84613</a> - [G965, bisected] piglit regressions : glslparsertest.glsl2</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87516">Bug 87516</a> - glProgramBinary violates spec</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88885">Bug 88885</a> - Transform feedback uses incorrect interleaving if a previous draw did not write gl_Position</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89180">Bug 89180</a> - [IVB regression] Rendering issues in Mass Effect through VMware Workstation</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>Abdiel Janulgue (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glsl: Don't optimize min/max into saturate when EmitNoSat is set</li>
|
||||||
|
<li>st/mesa: For vertex shaders, don't emit saturate when SM 3.0 is unsupported</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Andreas Boll (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glx: Fix returned values of GLX_RENDERER_PREFERRED_PROFILE_MESA</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Brian Paul (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>swrast: fix multiple color buffer writing</li>
|
||||||
|
<li>st/mesa: fix sampler view reference counting bug in glDraw/CopyPixels</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Chris Forbes (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965/gs: Check newly-generated GS-out VUE map against correct stage</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Eduardo Lima Mitev (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: Fix error validating args for TexSubImage3D</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Emil Velikov (6):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 sums for the 10.4.5 release</li>
|
||||||
|
<li>install-lib-links: remove the .install-lib-links file</li>
|
||||||
|
<li>Revert "mesa: Correct backwards NULL check."</li>
|
||||||
|
<li>mesa: cherry-pick the second half of commit 2aa71e9485a</li>
|
||||||
|
<li>Revert "gallivm: Update for RTDyldMemoryManager becoming an unique_ptr."</li>
|
||||||
|
<li>Update version to 10.4.6</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ian Romanick (3):</p>
|
||||||
|
<ul>
|
||||||
|
<li>mesa: Add missing error checks in _mesa_ProgramBinary</li>
|
||||||
|
<li>mesa: Ensure that length is set to zero in _mesa_GetProgramBinary</li>
|
||||||
|
<li>mesa: Always generate GL_INVALID_OPERATION in _mesa_GetProgramBinary</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Jonathan Gray (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>auxilary/os: correct sysctl use in os_get_total_physical_memory()</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>José Fonseca (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallivm: Update for RTDyldMemoryManager becoming an unique_ptr.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Leo Liu (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>st/omx/dec/h264: fix picture out-of-order with poc type 0 v2</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Lucas Stach (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>install-lib-links: don't depend on .libs directory</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>vbo: fix an unitialized-variable warning</li>
|
||||||
|
<li>radeonsi: fix point sprites</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Matt Turner (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glsl: Rewrite and fix min/max to saturate optimization.</li>
|
||||||
|
<li>mesa: Correct backwards NULL check.</li>
|
||||||
|
<li>i965/fs: Don't use backend_visitor::instructions after creating the CFG.</li>
|
||||||
|
<li>mesa: Correct backwards NULL check.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
134
docs/relnotes/10.4.7.html
Normal file
134
docs/relnotes/10.4.7.html
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
<!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.4.7 Release Notes / March 20, 2015</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.7 is a bug fix release which fixes bugs found since the 10.4.6 release.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Mesa 10.4.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>
|
||||||
|
9e7b59267199658808f8b33e0410b86fbafbdcd52378658b9df65fac9d24947f MesaLib-10.4.7.tar.gz
|
||||||
|
2c351c98671f9a7ab3fd9c601bb7a255801b1580f5dd0992639f99152801b0d2 MesaLib-10.4.7.tar.bz2
|
||||||
|
d14ac578b5ce16560757b53fbd1cb4d6b34652f8e110e4b10a019adc82e67ffd MesaLib-10.4.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=79202">Bug 79202</a> - valgrind errors in glsl-fs-uniform-array-loop-unroll.shader_test; random code generation</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89156">Bug 89156</a> - r300g: GL_COMPRESSED_RED_RGTC1 / ATI1N support broken</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89224">Bug 89224</a> - Incorrect rendering of Unigine Valley running in VM on VMware Workstation</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89530">Bug 89530</a> - FTBFS in loader: missing fstat</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Changes</h2>
|
||||||
|
|
||||||
|
<p>Andrey Sudnik (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965/vec4: Don't lose the saturate modifier in copy propagation.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Daniel Stone (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>egl: Take alpha bits into account when selecting GBM formats</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Emil Velikov (6):</p>
|
||||||
|
<ul>
|
||||||
|
<li>docs: Add sha256 sums for the 10.4.6 release</li>
|
||||||
|
<li>cherry-ignore: add not applicable/rejected commits</li>
|
||||||
|
<li>mesa: rename format_info.c to format_info.h</li>
|
||||||
|
<li>loader: include <sys/stat.h> for non-sysfs builds</li>
|
||||||
|
<li>auxiliary/os: fix the android build - s/drm_munmap/os_munmap/</li>
|
||||||
|
<li>Update version to 10.4.7</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Iago Toral Quiroga (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>i965: Fix out-of-bounds accesses into pull_constant_loc array</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Ilia Mirkin (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>freedreno: move fb state copy after checking for size change</li>
|
||||||
|
<li>freedreno/ir3: fix array count returned by TXQ</li>
|
||||||
|
<li>freedreno/ir3: get the # of miplevels from getinfo</li>
|
||||||
|
<li>freedreno: fix slice pitch calculations</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marc-Andre Lureau (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>gallium/auxiliary/indices: fix start param</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Marek Olšák (4):</p>
|
||||||
|
<ul>
|
||||||
|
<li>r300g: fix RGTC1 and LATC1 SNORM formats</li>
|
||||||
|
<li>r300g: fix a crash when resolving into an sRGB texture</li>
|
||||||
|
<li>r300g: fix sRGB->sRGB blits</li>
|
||||||
|
<li>radeonsi: increase coords array size for radeon_llvm_emit_prepare_cube_coords</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Mario Kleiner (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glx: Handle out-of-sequence swap completion events correctly. (v2)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Matt Turner (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>r300g: Use PATH_MAX instead of limiting ourselves to 100 chars.</li>
|
||||||
|
<li>r300g: Check return value of snprintf().</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Rob Clark (2):</p>
|
||||||
|
<ul>
|
||||||
|
<li>freedreno/ir3: fix silly typo for binning pass shaders</li>
|
||||||
|
<li>freedreno: update generated headers</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Samuel Iglesias Gonsalvez (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>glsl: optimize (0 cmp x + y) into (-x cmp y).</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Stefan Dösinger (1):</p>
|
||||||
|
<ul>
|
||||||
|
<li>r300g: Fix the ATI1N swizzle (RGTC1 and LATC1)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -14,7 +14,7 @@
|
|||||||
<iframe src="../contents.html"></iframe>
|
<iframe src="../contents.html"></iframe>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
|
||||||
<h1>Mesa 10.4 Release Notes / TBD</h1>
|
<h1>Mesa 10.4 Release Notes / December 14, 2014</h1>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Mesa 10.4 is a new development release.
|
Mesa 10.4 is a new development release.
|
||||||
@@ -31,9 +31,11 @@ because compatibility contexts are not supported.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<h2>MD5 checksums</h2>
|
<h2>SHA256 checksums</h2>
|
||||||
<pre>
|
<pre>
|
||||||
TBD.
|
abfbfd2d91ce81491c5bb6923ae649212ad5f82d0bee277de8704cc948dc221e MesaLib-10.4.0.tar.gz
|
||||||
|
98a7dff3a1a6708c79789de8b9a05d8042e867067f70e8f30387c15026233219 MesaLib-10.4.0.tar.bz2
|
||||||
|
443a6d46d0691b5ac811d8d30091b1716c365689b16d49c57cf273c2b76086fe MesaLib-10.4.0.zip
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
@@ -47,18 +49,209 @@ Note: some of the new features are only available with certain drivers.
|
|||||||
<li>GL_ARB_conditional_render_inverted on nv50</li>
|
<li>GL_ARB_conditional_render_inverted on nv50</li>
|
||||||
<li>GL_ARB_sample_shading on r600</li>
|
<li>GL_ARB_sample_shading on r600</li>
|
||||||
<li>GL_ARB_texture_view on nv50, nvc0</li>
|
<li>GL_ARB_texture_view on nv50, nvc0</li>
|
||||||
<li>GL_ARB_clip_control on llvmpipe, softpipe, r300, r600, radeonsi</li>
|
<li>GL_ARB_clip_control on nv50, nvc0, r300, r600, radeonsi, llvmpipe, softpipe</li>
|
||||||
<li>GL_KHR_context_flush_control on all drivers</li>
|
<li>GL_KHR_context_flush_control on all drivers</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<h2>Bug fixes</h2>
|
<h2>Bug fixes</h2>
|
||||||
|
|
||||||
TBD.
|
<p>This list is likely incomplete.</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=79963">Bug 79963</a> - [ILK Bisected]some piglit and ogles2conform cases fail </li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=29661">Bug 29661</a> - MSVC built u_format_test fails on Windows</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=38873">Bug 38873</a> - [855gm] gnome-shell misrendered</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=54372">Bug 54372</a> - GLX_INTEL_swap_event crashes driver when swapping window buffers</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60879">Bug 60879</a> - [radeonsi] X11 can't start with acceleration enabled</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=61415">Bug 61415</a> - Clover ignores --with-opencl-libdir path</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=64471">Bug 64471</a> - Radeon HD6570 lockup in Brütal Legend with HyperZ</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=67672">Bug 67672</a> - [llvmpipe] lp_test_arit fails on old CPUs</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=69200">Bug 69200</a> - [Bisected]Piglit glx/glx-multithread-shader-compile aborted</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=70410">Bug 70410</a> - egl-static/Makefile: linking fails with llvm >= 3.4</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=72685">Bug 72685</a> - [radeonsi hyperz] Artifacts in Unigine Sanctuary</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=72819">Bug 72819</a> - [855GM] Incorrect drop shadow color on windows and strange white rectangle when showing/hiding GLX-dock...</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=74563">Bug 74563</a> - Surfaceless contexts are not properly released by DRI drivers</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=74863">Bug 74863</a> - [r600g] HyperZ broken on RV770 and CYPRESS (Left 4 Dead 2 trees corruption) bisected!</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=75011">Bug 75011</a> - [hyperz] Performance drop since git-01e6371 (disable hyperz by default) with radeonsi</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=75112">Bug 75112</a> - Meta Bug for HyperZ issues on r600g and radeonsi</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=76252">Bug 76252</a> - Dynamic loading/unloading of opengl32.dll results in a deadlock</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=76861">Bug 76861</a> - mid3 generates slow code for constant arguments</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=77957">Bug 77957</a> - Variably-indexed constant arrays result in terrible shader code</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=78468">Bug 78468</a> - Compiling of shader gets stuck in infinite loop</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=78770">Bug 78770</a> - [SNB bisected]Webglc conformance/textures/texture-size-limit.html fails</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=79155">Bug 79155</a> - [Tesseract Game] Global Illumination: Medium Causes Color Distortion</li>
|
||||||
|
|
||||||
|
<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=80011">Bug 80011</a> - [softpipe] tgsi/tgsi_exec.c:2023:exec_txf: Assertion `0' failed.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=80012">Bug 80012</a> - [softpipe] draw/draw_gs.c:113:tgsi_fetch_gs_outputs: Assertion `!util_is_inf_or_nan(output[slot][0])' failed.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=80050">Bug 80050</a> - [855GM] Incorrect drop shadow color under windows in Cinnamon persists with MESA 10.1.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=80247">Bug 80247</a> - Khronos conformance test ES3-CTS.gtf.GL3Tests.transform_feedback.transform_feedback_vertex_id fails</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=80561">Bug 80561</a> - Incorrect implementation of some VDPAU APIs.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=80615">Bug 80615</a> - Files in bellagio directory [omx tracker] don't respect installation folder</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=80848">Bug 80848</a> - [dri3] Building mesa fails with dri3 enabled</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=81680">Bug 81680</a> - [r600g] Firefox crashes with hardware acceleration turned on</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=82472">Bug 82472</a> - piglit 16385-consecutive-chars regression</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82537">Bug 82537</a> - Stunt Rally GLSL compiler assertion failure</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82538">Bug 82538</a> - Super Maryo Chronicles fails with st/mesa assertion failure</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=82796">Bug 82796</a> - [IVB/BYT-M/HSW/BDW Bisected]Synmark2_v6.0_OglTerrainFlyInst/OglTerrainPanInst cannot run as image validation failed</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82804">Bug 82804</a> - unreal engine 4 rendering errors</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82828">Bug 82828</a> - Regression: Crash in 3Dmark2001</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82846">Bug 82846</a> - [BDW Bisected] Gpu hang when running Lightsmark v2008/Warsow v1.0/Xonotic v0.7/unigine-demos</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82881">Bug 82881</a> - test_vec4_register_coalesce regression</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=82921">Bug 82921</a> - layout(location=0) emits error >= MAX_UNIFORM_LOCATIONS due to integer underflow</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82929">Bug 82929</a> - [BDW Bisected]glxgears causes X hang</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82932">Bug 82932</a> - [SNB+ Bisected]Ogles3conform ES3-CTS.shaders.indexing.vector_subscript.vec3_static_loop_subscript_write_direct_read_vertex fails</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=83080">Bug 83080</a> - [SNB+ Bisected]ES3-CTS.shaders.loops.do_while_constant_iterations.mixed_break_continue_fragment fails</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83081">Bug 83081</a> - [BDW Bisected]Piglit spec_ARB_sample_shading_builtin-gl-sample-mask_2 is core dumped</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83127">Bug 83127</a> - [ILK Bisected]Piglit glean_texCombine fails</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83148">Bug 83148</a> - Unity invisible under Ubuntu 14.04 and 14.10</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>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83380">Bug 83380</a> - Linking fails when not writing gl_Position.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83418">Bug 83418</a> - EU IV is incorrectly rendered after git1409011930.d571f2</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=83463">Bug 83463</a> - [swrast] piglit glsl-vs-clamp-1 regression</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83468">Bug 83468</a> - [UBO] Using bool from UBO as if-statement condition asserts</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83500">Bug 83500</a> - si_dma_copy_tile causes GPU hangs</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83506">Bug 83506</a> - [UBO] row_major layout ignored inside structures</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83533">Bug 83533</a> - [UBO] nested structures don't get appropriate padding</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83573">Bug 83573</a> - [swrast] piglit fs-op-not-bool-using-if regression</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83574">Bug 83574</a> - [llvmpipe] [softpipe] piglit arb_explicit_uniform_location-use-of-unused-loc regression</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83741">Bug 83741</a> - [UBO] row_major layout partially ignored for arrays of structures</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83777">Bug 83777</a> - [regression] ilo fails to build</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83934">Bug 83934</a> - Structures must have same name to be considered same type.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84140">Bug 84140</a> - mplayer crashes playing some files using vdpau output</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84145">Bug 84145</a> - UE4: Realistic Rendering Demo render blue</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84178">Bug 84178</a> - Big glamor regression in Xorg server 1.6.99.1 GIT: x11perf 1.5 Test: PutImage XY 500x500 Square</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84355">Bug 84355</a> - texture2DProjLod and textureCubeLod are not supported when using GLES.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84529">Bug 84529</a> - [IVB bisected] glean fragProg1 CMP test failed</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84538">Bug 84538</a> - lp_test_format.c:226:4: error: too few arguments to function ‘gallivm_create’</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84539">Bug 84539</a> - brw_fs_register_coalesce.cpp:183: bool fs_visitor::register_coalesce(): Assertion `src_size <= 11' failed.</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84557">Bug 84557</a> - [HSW] "Emit ELSE/ENDIF JIP with type D on Gen 7" causes Atomic Afterlife and GPU hangs</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84651">Bug 84651</a> - Distorted graphics or black window when running Battle.net app on Intel hardware via wine</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84662">Bug 84662</a> - Long pauses with Unreal demo Elemental on R9270X since : Always flush the HDP cache before submitting a CS to the GPU</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84777">Bug 84777</a> - [BSW]Piglit spec_glsl-1.50_execution_geometry-basic fails</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84807">Bug 84807</a> - Build issue starting between bf4aecfb2acc8d0dc815105d2f36eccbc97c284b and a3e9582f09249ad27716ba82c7dfcee685b65d51</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85189">Bug 85189</a> - llvm/invocation.cpp: In function 'void {anonymous}::optimize(llvm::Module*, unsigned int, const std::vector<llvm::Function*>&)': llvm/invocation.cpp:324:18: error: expected type-specifier</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85267">Bug 85267</a> - vlc crashes with vdpau (Radeon 3850HD) [r600]</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85377">Bug 85377</a> - lp_test_format failure with llvm-3.6</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85425">Bug 85425</a> - [bisected] Compiler error in clip control operations in meta</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85429">Bug 85429</a> - indirect.c:296: multiple definition of `__indirect_glNewList'</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85454">Bug 85454</a> - Unigine Sanctuary with Wine crashes on Mesa Git</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85647">Bug 85647</a> - Random radeonsi crashes with mesa 10.3.x</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85683">Bug 85683</a> - [i965 Bisected]Piglit shaders_glsl-vs-raytrace-bug26691 segfault</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85691">Bug 85691</a> - 'glsl: Drop constant 0.0 components from dot products.' broke piglit shaders/glsl-gnome-shell-dim-window and a few others with Gallium</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86025">Bug 86025</a> - src\glsl\list.h(535) : error C2143: syntax error : missing ';' before 'type'</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86089">Bug 86089</a> - [r600g][mesa 10.4.0-dev] shader failure - r600_sb::bc_finalizer::cf_peephole() when starting Second Life</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86145">Bug 86145</a> - Pipeline statistic counter values for VF always 0</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86618">Bug 86618</a> - [NV96] neg modifiers not working in MIN and MAX operations</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86760">Bug 86760</a> - mesa doesn't build: recipe for target 'r600_llvm.lo' failed</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86764">Bug 86764</a> - [SNB+ Bisected]Piglit glean/pointSprite fails</li>
|
||||||
|
|
||||||
|
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86788">Bug 86788</a> - (bisected) 32bit UrbanTerror 4.1 timedemo sse4.1 segfault...</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
<h2>Changes</h2>
|
<h2>Changes</h2>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>The environment variable GALLIUM_MSAA that forced a multisample GLX visual was removed.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
1868
include/D3D9/d3d9.h
Normal file
1868
include/D3D9/d3d9.h
Normal file
File diff suppressed because it is too large
Load Diff
387
include/D3D9/d3d9caps.h
Normal file
387
include/D3D9/d3d9caps.h
Normal file
@@ -0,0 +1,387 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2011 Joakim Sindholt <opensource@zhasha.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
|
||||||
|
* on the rights to use, copy, modify, merge, publish, distribute, sub
|
||||||
|
* license, and/or sell copies of the Software, and to permit persons to whom
|
||||||
|
* the Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the next
|
||||||
|
* paragraph) shall be included in all copies or substantial portions of the
|
||||||
|
* Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
* USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
|
|
||||||
|
#ifndef _D3D9CAPS_H_
|
||||||
|
#define _D3D9CAPS_H_
|
||||||
|
|
||||||
|
#include "d3d9types.h"
|
||||||
|
|
||||||
|
/* Caps flags */
|
||||||
|
#define D3DCAPS2_FULLSCREENGAMMA 0x00020000
|
||||||
|
#define D3DCAPS2_CANCALIBRATEGAMMA 0x00100000
|
||||||
|
#define D3DCAPS2_RESERVED 0x02000000
|
||||||
|
#define D3DCAPS2_CANMANAGERESOURCE 0x10000000
|
||||||
|
#define D3DCAPS2_DYNAMICTEXTURES 0x20000000
|
||||||
|
#define D3DCAPS2_CANAUTOGENMIPMAP 0x40000000
|
||||||
|
#define D3DCAPS2_CANSHARERESOURCE 0x80000000
|
||||||
|
|
||||||
|
#define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD 0x00000020
|
||||||
|
#define D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION 0x00000080
|
||||||
|
#define D3DCAPS3_COPY_TO_VIDMEM 0x00000100
|
||||||
|
#define D3DCAPS3_COPY_TO_SYSTEMMEM 0x00000200
|
||||||
|
#define D3DCAPS3_DXVAHD 0x00000400
|
||||||
|
#define D3DCAPS3_RESERVED 0x8000001F
|
||||||
|
|
||||||
|
#define D3DPRESENT_INTERVAL_DEFAULT 0x00000000
|
||||||
|
#define D3DPRESENT_INTERVAL_ONE 0x00000001
|
||||||
|
#define D3DPRESENT_INTERVAL_TWO 0x00000002
|
||||||
|
#define D3DPRESENT_INTERVAL_THREE 0x00000004
|
||||||
|
#define D3DPRESENT_INTERVAL_FOUR 0x00000008
|
||||||
|
#define D3DPRESENT_INTERVAL_IMMEDIATE 0x80000000
|
||||||
|
|
||||||
|
#define D3DCURSORCAPS_COLOR 0x00000001
|
||||||
|
#define D3DCURSORCAPS_LOWRES 0x00000002
|
||||||
|
|
||||||
|
#define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010
|
||||||
|
#define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x00000020
|
||||||
|
#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040
|
||||||
|
#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x00000080
|
||||||
|
#define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x00000100
|
||||||
|
#define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x00000200
|
||||||
|
#define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x00000400
|
||||||
|
#define D3DDEVCAPS_CANRENDERAFTERFLIP 0x00000800
|
||||||
|
#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000
|
||||||
|
#define D3DDEVCAPS_DRAWPRIMITIVES2 0x00002000
|
||||||
|
#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000
|
||||||
|
#define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x00008000
|
||||||
|
#define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x00010000
|
||||||
|
#define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x00020000
|
||||||
|
#define D3DDEVCAPS_HWRASTERIZATION 0x00080000
|
||||||
|
#define D3DDEVCAPS_PUREDEVICE 0x00100000
|
||||||
|
#define D3DDEVCAPS_QUINTICRTPATCHES 0x00200000
|
||||||
|
#define D3DDEVCAPS_RTPATCHES 0x00400000
|
||||||
|
#define D3DDEVCAPS_RTPATCHHANDLEZERO 0x00800000
|
||||||
|
#define D3DDEVCAPS_NPATCHES 0x01000000
|
||||||
|
|
||||||
|
#define D3DPMISCCAPS_MASKZ 0x00000002
|
||||||
|
#define D3DPMISCCAPS_CULLNONE 0x00000010
|
||||||
|
#define D3DPMISCCAPS_CULLCW 0x00000020
|
||||||
|
#define D3DPMISCCAPS_CULLCCW 0x00000040
|
||||||
|
#define D3DPMISCCAPS_COLORWRITEENABLE 0x00000080
|
||||||
|
#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS 0x00000100
|
||||||
|
#define D3DPMISCCAPS_CLIPTLVERTS 0x00000200
|
||||||
|
#define D3DPMISCCAPS_TSSARGTEMP 0x00000400
|
||||||
|
#define D3DPMISCCAPS_BLENDOP 0x00000800
|
||||||
|
#define D3DPMISCCAPS_NULLREFERENCE 0x00001000
|
||||||
|
#define D3DPMISCCAPS_INDEPENDENTWRITEMASKS 0x00004000
|
||||||
|
#define D3DPMISCCAPS_PERSTAGECONSTANT 0x00008000
|
||||||
|
#define D3DPMISCCAPS_FOGANDSPECULARALPHA 0x00010000
|
||||||
|
#define D3DPMISCCAPS_SEPARATEALPHABLEND 0x00020000
|
||||||
|
#define D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS 0x00040000
|
||||||
|
#define D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING 0x00080000
|
||||||
|
#define D3DPMISCCAPS_FOGVERTEXCLAMPED 0x00100000
|
||||||
|
#define D3DPMISCCAPS_POSTBLENDSRGBCONVERT 0x00200000
|
||||||
|
|
||||||
|
#define D3DPRASTERCAPS_DITHER 0x00000001
|
||||||
|
#define D3DPRASTERCAPS_ZTEST 0x00000010
|
||||||
|
#define D3DPRASTERCAPS_FOGVERTEX 0x00000080
|
||||||
|
#define D3DPRASTERCAPS_FOGTABLE 0x00000100
|
||||||
|
#define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000
|
||||||
|
#define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x00008000
|
||||||
|
#define D3DPRASTERCAPS_FOGRANGE 0x00010000
|
||||||
|
#define D3DPRASTERCAPS_ANISOTROPY 0x00020000
|
||||||
|
#define D3DPRASTERCAPS_WBUFFER 0x00040000
|
||||||
|
#define D3DPRASTERCAPS_WFOG 0x00100000
|
||||||
|
#define D3DPRASTERCAPS_ZFOG 0x00200000
|
||||||
|
#define D3DPRASTERCAPS_COLORPERSPECTIVE 0x00400000
|
||||||
|
#define D3DPRASTERCAPS_SCISSORTEST 0x01000000
|
||||||
|
#define D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS 0x02000000
|
||||||
|
#define D3DPRASTERCAPS_DEPTHBIAS 0x04000000
|
||||||
|
#define D3DPRASTERCAPS_MULTISAMPLE_TOGGLE 0x08000000
|
||||||
|
|
||||||
|
#define D3DPCMPCAPS_NEVER 0x00000001
|
||||||
|
#define D3DPCMPCAPS_LESS 0x00000002
|
||||||
|
#define D3DPCMPCAPS_EQUAL 0x00000004
|
||||||
|
#define D3DPCMPCAPS_LESSEQUAL 0x00000008
|
||||||
|
#define D3DPCMPCAPS_GREATER 0x00000010
|
||||||
|
#define D3DPCMPCAPS_NOTEQUAL 0x00000020
|
||||||
|
#define D3DPCMPCAPS_GREATEREQUAL 0x00000040
|
||||||
|
#define D3DPCMPCAPS_ALWAYS 0x00000080
|
||||||
|
|
||||||
|
#define D3DPBLENDCAPS_ZERO 0x00000001
|
||||||
|
#define D3DPBLENDCAPS_ONE 0x00000002
|
||||||
|
#define D3DPBLENDCAPS_SRCCOLOR 0x00000004
|
||||||
|
#define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008
|
||||||
|
#define D3DPBLENDCAPS_SRCALPHA 0x00000010
|
||||||
|
#define D3DPBLENDCAPS_INVSRCALPHA 0x00000020
|
||||||
|
#define D3DPBLENDCAPS_DESTALPHA 0x00000040
|
||||||
|
#define D3DPBLENDCAPS_INVDESTALPHA 0x00000080
|
||||||
|
#define D3DPBLENDCAPS_DESTCOLOR 0x00000100
|
||||||
|
#define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200
|
||||||
|
#define D3DPBLENDCAPS_SRCALPHASAT 0x00000400
|
||||||
|
#define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800
|
||||||
|
#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000
|
||||||
|
#define D3DPBLENDCAPS_BLENDFACTOR 0x00002000
|
||||||
|
#ifndef D3D_DISABLE_9EX
|
||||||
|
# define D3DPBLENDCAPS_SRCCOLOR2 0x00004000
|
||||||
|
# define D3DPBLENDCAPS_INVSRCCOLOR2 0x00008000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define D3DPSHADECAPS_COLORGOURAUDRGB 0x00000008
|
||||||
|
#define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00000200
|
||||||
|
#define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x00004000
|
||||||
|
#define D3DPSHADECAPS_FOGGOURAUD 0x00080000
|
||||||
|
|
||||||
|
#define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001
|
||||||
|
#define D3DPTEXTURECAPS_POW2 0x00000002
|
||||||
|
#define D3DPTEXTURECAPS_ALPHA 0x00000004
|
||||||
|
#define D3DPTEXTURECAPS_SQUAREONLY 0x00000020
|
||||||
|
#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040
|
||||||
|
#define D3DPTEXTURECAPS_ALPHAPALETTE 0x00000080
|
||||||
|
#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x00000100
|
||||||
|
#define D3DPTEXTURECAPS_PROJECTED 0x00000400
|
||||||
|
#define D3DPTEXTURECAPS_CUBEMAP 0x00000800
|
||||||
|
#define D3DPTEXTURECAPS_VOLUMEMAP 0x00002000
|
||||||
|
#define D3DPTEXTURECAPS_MIPMAP 0x00004000
|
||||||
|
#define D3DPTEXTURECAPS_MIPVOLUMEMAP 0x00008000
|
||||||
|
#define D3DPTEXTURECAPS_MIPCUBEMAP 0x00010000
|
||||||
|
#define D3DPTEXTURECAPS_CUBEMAP_POW2 0x00020000
|
||||||
|
#define D3DPTEXTURECAPS_VOLUMEMAP_POW2 0x00040000
|
||||||
|
#define D3DPTEXTURECAPS_NOPROJECTEDBUMPENV 0x00200000
|
||||||
|
|
||||||
|
#define D3DPTFILTERCAPS_MINFPOINT 0x00000100
|
||||||
|
#define D3DPTFILTERCAPS_MINFLINEAR 0x00000200
|
||||||
|
#define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400
|
||||||
|
#define D3DPTFILTERCAPS_MINFPYRAMIDALQUAD 0x00000800
|
||||||
|
#define D3DPTFILTERCAPS_MINFGAUSSIANQUAD 0x00001000
|
||||||
|
#define D3DPTFILTERCAPS_MIPFPOINT 0x00010000
|
||||||
|
#define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000
|
||||||
|
#define D3DPTFILTERCAPS_MAGFPOINT 0x01000000
|
||||||
|
#define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000
|
||||||
|
#define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000
|
||||||
|
#define D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD 0x08000000
|
||||||
|
#define D3DPTFILTERCAPS_MAGFGAUSSIANQUAD 0x10000000
|
||||||
|
|
||||||
|
#define D3DPTADDRESSCAPS_WRAP 0x00000001
|
||||||
|
#define D3DPTADDRESSCAPS_MIRROR 0x00000002
|
||||||
|
#define D3DPTADDRESSCAPS_CLAMP 0x00000004
|
||||||
|
#define D3DPTADDRESSCAPS_BORDER 0x00000008
|
||||||
|
#define D3DPTADDRESSCAPS_INDEPENDENTUV 0x00000010
|
||||||
|
#define D3DPTADDRESSCAPS_MIRRORONCE 0x00000020
|
||||||
|
|
||||||
|
#define D3DLINECAPS_TEXTURE 0x00000001
|
||||||
|
#define D3DLINECAPS_ZTEST 0x00000002
|
||||||
|
#define D3DLINECAPS_BLEND 0x00000004
|
||||||
|
#define D3DLINECAPS_ALPHACMP 0x00000008
|
||||||
|
#define D3DLINECAPS_FOG 0x00000010
|
||||||
|
#define D3DLINECAPS_ANTIALIAS 0x00000020
|
||||||
|
|
||||||
|
#define D3DSTENCILCAPS_KEEP 0x00000001
|
||||||
|
#define D3DSTENCILCAPS_ZERO 0x00000002
|
||||||
|
#define D3DSTENCILCAPS_REPLACE 0x00000004
|
||||||
|
#define D3DSTENCILCAPS_INCRSAT 0x00000008
|
||||||
|
#define D3DSTENCILCAPS_DECRSAT 0x00000010
|
||||||
|
#define D3DSTENCILCAPS_INVERT 0x00000020
|
||||||
|
#define D3DSTENCILCAPS_INCR 0x00000040
|
||||||
|
#define D3DSTENCILCAPS_DECR 0x00000080
|
||||||
|
#define D3DSTENCILCAPS_TWOSIDED 0x00000100
|
||||||
|
|
||||||
|
#define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x0000FFFF
|
||||||
|
#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x00080000
|
||||||
|
#define D3DFVFCAPS_PSIZE 0x00100000
|
||||||
|
|
||||||
|
#define D3DTEXOPCAPS_DISABLE 0x00000001
|
||||||
|
#define D3DTEXOPCAPS_SELECTARG1 0x00000002
|
||||||
|
#define D3DTEXOPCAPS_SELECTARG2 0x00000004
|
||||||
|
#define D3DTEXOPCAPS_MODULATE 0x00000008
|
||||||
|
#define D3DTEXOPCAPS_MODULATE2X 0x00000010
|
||||||
|
#define D3DTEXOPCAPS_MODULATE4X 0x00000020
|
||||||
|
#define D3DTEXOPCAPS_ADD 0x00000040
|
||||||
|
#define D3DTEXOPCAPS_ADDSIGNED 0x00000080
|
||||||
|
#define D3DTEXOPCAPS_ADDSIGNED2X 0x00000100
|
||||||
|
#define D3DTEXOPCAPS_SUBTRACT 0x00000200
|
||||||
|
#define D3DTEXOPCAPS_ADDSMOOTH 0x00000400
|
||||||
|
#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x00000800
|
||||||
|
#define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x00001000
|
||||||
|
#define D3DTEXOPCAPS_BLENDFACTORALPHA 0x00002000
|
||||||
|
#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x00004000
|
||||||
|
#define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x00008000
|
||||||
|
#define D3DTEXOPCAPS_PREMODULATE 0x00010000
|
||||||
|
#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x00020000
|
||||||
|
#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x00040000
|
||||||
|
#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x00080000
|
||||||
|
#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x00100000
|
||||||
|
#define D3DTEXOPCAPS_BUMPENVMAP 0x00200000
|
||||||
|
#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x00400000
|
||||||
|
#define D3DTEXOPCAPS_DOTPRODUCT3 0x00800000
|
||||||
|
#define D3DTEXOPCAPS_MULTIPLYADD 0x01000000
|
||||||
|
#define D3DTEXOPCAPS_LERP 0x02000000
|
||||||
|
|
||||||
|
#define D3DVTXPCAPS_TEXGEN 0x00000001
|
||||||
|
#define D3DVTXPCAPS_MATERIALSOURCE7 0x00000002
|
||||||
|
#define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x00000008
|
||||||
|
#define D3DVTXPCAPS_POSITIONALLIGHTS 0x00000010
|
||||||
|
#define D3DVTXPCAPS_LOCALVIEWER 0x00000020
|
||||||
|
#define D3DVTXPCAPS_TWEENING 0x00000040
|
||||||
|
#define D3DVTXPCAPS_TEXGEN_SPHEREMAP 0x00000100
|
||||||
|
#define D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER 0x00000200
|
||||||
|
|
||||||
|
#define D3DDEVCAPS2_STREAMOFFSET 0x00000001
|
||||||
|
#define D3DDEVCAPS2_DMAPNPATCH 0x00000002
|
||||||
|
#define D3DDEVCAPS2_ADAPTIVETESSRTPATCH 0x00000004
|
||||||
|
#define D3DDEVCAPS2_ADAPTIVETESSNPATCH 0x00000008
|
||||||
|
#define D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES 0x00000010
|
||||||
|
#define D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH 0x00000020
|
||||||
|
#define D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET 0x00000040
|
||||||
|
|
||||||
|
#define D3DDTCAPS_UBYTE4 0x00000001
|
||||||
|
#define D3DDTCAPS_UBYTE4N 0x00000002
|
||||||
|
#define D3DDTCAPS_SHORT2N 0x00000004
|
||||||
|
#define D3DDTCAPS_SHORT4N 0x00000008
|
||||||
|
#define D3DDTCAPS_USHORT2N 0x00000010
|
||||||
|
#define D3DDTCAPS_USHORT4N 0x00000020
|
||||||
|
#define D3DDTCAPS_UDEC3 0x00000040
|
||||||
|
#define D3DDTCAPS_DEC3N 0x00000080
|
||||||
|
#define D3DDTCAPS_FLOAT16_2 0x00000100
|
||||||
|
#define D3DDTCAPS_FLOAT16_4 0x00000200
|
||||||
|
|
||||||
|
|
||||||
|
#define D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH 24
|
||||||
|
#define D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH 0
|
||||||
|
#define D3DVS20_MAX_NUMTEMPS 32
|
||||||
|
#define D3DVS20_MIN_NUMTEMPS 12
|
||||||
|
#define D3DVS20_MAX_STATICFLOWCONTROLDEPTH 4
|
||||||
|
#define D3DVS20_MIN_STATICFLOWCONTROLDEPTH 1
|
||||||
|
|
||||||
|
#define D3DVS20CAPS_PREDICATION (1 << 0)
|
||||||
|
|
||||||
|
#define D3DPS20CAPS_ARBITRARYSWIZZLE (1 << 0)
|
||||||
|
#define D3DPS20CAPS_GRADIENTINSTRUCTIONS (1 << 1)
|
||||||
|
#define D3DPS20CAPS_PREDICATION (1 << 2)
|
||||||
|
#define D3DPS20CAPS_NODEPENDENTREADLIMIT (1 << 3)
|
||||||
|
#define D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT (1 << 4)
|
||||||
|
|
||||||
|
#define D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH 24
|
||||||
|
#define D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH 0
|
||||||
|
#define D3DPS20_MAX_NUMTEMPS 32
|
||||||
|
#define D3DPS20_MIN_NUMTEMPS 12
|
||||||
|
#define D3DPS20_MAX_STATICFLOWCONTROLDEPTH 4
|
||||||
|
#define D3DPS20_MIN_STATICFLOWCONTROLDEPTH 0
|
||||||
|
#define D3DPS20_MAX_NUMINSTRUCTIONSLOTS 512
|
||||||
|
#define D3DPS20_MIN_NUMINSTRUCTIONSLOTS 96
|
||||||
|
|
||||||
|
#define D3DMIN30SHADERINSTRUCTIONS 512
|
||||||
|
#define D3DMAX30SHADERINSTRUCTIONS 32768
|
||||||
|
|
||||||
|
/* Structs */
|
||||||
|
typedef struct _D3DVSHADERCAPS2_0 {
|
||||||
|
DWORD Caps;
|
||||||
|
INT DynamicFlowControlDepth;
|
||||||
|
INT NumTemps;
|
||||||
|
INT StaticFlowControlDepth;
|
||||||
|
} D3DVSHADERCAPS2_0, *PD3DVSHADERCAPS2_0, *LPD3DVSHADERCAPS2_0;
|
||||||
|
|
||||||
|
typedef struct _D3DPSHADERCAPS2_0 {
|
||||||
|
DWORD Caps;
|
||||||
|
INT DynamicFlowControlDepth;
|
||||||
|
INT NumTemps;
|
||||||
|
INT StaticFlowControlDepth;
|
||||||
|
INT NumInstructionSlots;
|
||||||
|
} D3DPSHADERCAPS2_0, *PD3DPSHADERCAPS2_0, *LPD3DPSHADERCAPS2_0;
|
||||||
|
|
||||||
|
typedef struct _D3DCAPS9 {
|
||||||
|
D3DDEVTYPE DeviceType;
|
||||||
|
UINT AdapterOrdinal;
|
||||||
|
DWORD Caps;
|
||||||
|
DWORD Caps2;
|
||||||
|
DWORD Caps3;
|
||||||
|
DWORD PresentationIntervals;
|
||||||
|
DWORD CursorCaps;
|
||||||
|
DWORD DevCaps;
|
||||||
|
DWORD PrimitiveMiscCaps;
|
||||||
|
DWORD RasterCaps;
|
||||||
|
DWORD ZCmpCaps;
|
||||||
|
DWORD SrcBlendCaps;
|
||||||
|
DWORD DestBlendCaps;
|
||||||
|
DWORD AlphaCmpCaps;
|
||||||
|
DWORD ShadeCaps;
|
||||||
|
DWORD TextureCaps;
|
||||||
|
DWORD TextureFilterCaps;
|
||||||
|
DWORD CubeTextureFilterCaps;
|
||||||
|
DWORD VolumeTextureFilterCaps;
|
||||||
|
DWORD TextureAddressCaps;
|
||||||
|
DWORD VolumeTextureAddressCaps;
|
||||||
|
DWORD LineCaps;
|
||||||
|
DWORD MaxTextureWidth;
|
||||||
|
DWORD MaxTextureHeight;
|
||||||
|
DWORD MaxVolumeExtent;
|
||||||
|
DWORD MaxTextureRepeat;
|
||||||
|
DWORD MaxTextureAspectRatio;
|
||||||
|
DWORD MaxAnisotropy;
|
||||||
|
float MaxVertexW;
|
||||||
|
float GuardBandLeft;
|
||||||
|
float GuardBandTop;
|
||||||
|
float GuardBandRight;
|
||||||
|
float GuardBandBottom;
|
||||||
|
float ExtentsAdjust;
|
||||||
|
DWORD StencilCaps;
|
||||||
|
DWORD FVFCaps;
|
||||||
|
DWORD TextureOpCaps;
|
||||||
|
DWORD MaxTextureBlendStages;
|
||||||
|
DWORD MaxSimultaneousTextures;
|
||||||
|
DWORD VertexProcessingCaps;
|
||||||
|
DWORD MaxActiveLights;
|
||||||
|
DWORD MaxUserClipPlanes;
|
||||||
|
DWORD MaxVertexBlendMatrices;
|
||||||
|
DWORD MaxVertexBlendMatrixIndex;
|
||||||
|
float MaxPointSize;
|
||||||
|
DWORD MaxPrimitiveCount;
|
||||||
|
DWORD MaxVertexIndex;
|
||||||
|
DWORD MaxStreams;
|
||||||
|
DWORD MaxStreamStride;
|
||||||
|
DWORD VertexShaderVersion;
|
||||||
|
DWORD MaxVertexShaderConst;
|
||||||
|
DWORD PixelShaderVersion;
|
||||||
|
float PixelShader1xMaxValue;
|
||||||
|
DWORD DevCaps2;
|
||||||
|
float MaxNpatchTessellationLevel;
|
||||||
|
DWORD Reserved5;
|
||||||
|
UINT MasterAdapterOrdinal;
|
||||||
|
UINT AdapterOrdinalInGroup;
|
||||||
|
UINT NumberOfAdaptersInGroup;
|
||||||
|
DWORD DeclTypes;
|
||||||
|
DWORD NumSimultaneousRTs;
|
||||||
|
DWORD StretchRectFilterCaps;
|
||||||
|
D3DVSHADERCAPS2_0 VS20Caps;
|
||||||
|
D3DPSHADERCAPS2_0 PS20Caps;
|
||||||
|
DWORD VertexTextureFilterCaps;
|
||||||
|
DWORD MaxVShaderInstructionsExecuted;
|
||||||
|
DWORD MaxPShaderInstructionsExecuted;
|
||||||
|
DWORD MaxVertexShader30InstructionSlots;
|
||||||
|
DWORD MaxPixelShader30InstructionSlots;
|
||||||
|
} D3DCAPS9, *PD3DCAPS9, *LPD3DCAPS9;
|
||||||
|
|
||||||
|
typedef struct _D3DCONTENTPROTECTIONCAPS {
|
||||||
|
DWORD Caps;
|
||||||
|
GUID KeyExchangeType;
|
||||||
|
UINT BufferAlignmentStart;
|
||||||
|
UINT BlockAlignmentSize;
|
||||||
|
ULONGLONG ProtectedMemorySize;
|
||||||
|
} D3DCONTENTPROTECTIONCAPS, *PD3DCONTENTPROTECTIONCAPS, *LPD3DCONTENTPROTECTIONCAPS;
|
||||||
|
|
||||||
|
typedef struct _D3DOVERLAYCAPS {
|
||||||
|
UINT Caps;
|
||||||
|
UINT MaxOverlayDisplayWidth;
|
||||||
|
UINT MaxOverlayDisplayHeight;
|
||||||
|
} D3DOVERLAYCAPS, *PD3DOVERLAYCAPS, *LPD3DOVERLAYCAPS;
|
||||||
|
|
||||||
|
#endif /* _D3D9CAPS_H_ */
|
1810
include/D3D9/d3d9types.h
Normal file
1810
include/D3D9/d3d9types.h
Normal file
File diff suppressed because it is too large
Load Diff
101
include/d3dadapter/d3dadapter9.h
Normal file
101
include/d3dadapter/d3dadapter9.h
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2011 Joakim Sindholt <opensource@zhasha.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
|
||||||
|
* on the rights to use, copy, modify, merge, publish, distribute, sub
|
||||||
|
* license, and/or sell copies of the Software, and to permit persons to whom
|
||||||
|
* the Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the next
|
||||||
|
* paragraph) shall be included in all copies or substantial portions of the
|
||||||
|
* Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
* USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
|
|
||||||
|
#ifndef _D3DADAPTER9_H_
|
||||||
|
#define _D3DADAPTER9_H_
|
||||||
|
|
||||||
|
#include "present.h"
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
|
||||||
|
/* Representation of an adapter group, although since this is implemented by
|
||||||
|
* the driver, it knows nothing about the windowing system it's on */
|
||||||
|
typedef struct ID3DAdapter9Vtbl
|
||||||
|
{
|
||||||
|
/* IUnknown */
|
||||||
|
HRESULT (WINAPI *QueryInterface)(ID3DAdapter9 *This, REFIID riid, void **ppvObject);
|
||||||
|
ULONG (WINAPI *AddRef)(ID3DAdapter9 *This);
|
||||||
|
ULONG (WINAPI *Release)(ID3DAdapter9 *This);
|
||||||
|
|
||||||
|
/* ID3DAdapter9 */
|
||||||
|
HRESULT (WINAPI *GetAdapterIdentifier)(ID3DAdapter9 *This, DWORD Flags, D3DADAPTER_IDENTIFIER9 *pIdentifier);
|
||||||
|
HRESULT (WINAPI *CheckDeviceType)(ID3DAdapter9 *This, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed);
|
||||||
|
HRESULT (WINAPI *CheckDeviceFormat)(ID3DAdapter9 *This, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat);
|
||||||
|
HRESULT (WINAPI *CheckDeviceMultiSampleType)(ID3DAdapter9 *This, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD *pQualityLevels);
|
||||||
|
HRESULT (WINAPI *CheckDepthStencilMatch)(ID3DAdapter9 *This, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat);
|
||||||
|
HRESULT (WINAPI *CheckDeviceFormatConversion)(ID3DAdapter9 *This, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat);
|
||||||
|
HRESULT (WINAPI *GetDeviceCaps)(ID3DAdapter9 *This, D3DDEVTYPE DeviceType, D3DCAPS9 *pCaps);
|
||||||
|
HRESULT (WINAPI *CreateDevice)(ID3DAdapter9 *This, UINT RealAdapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3D9 *pD3D9, ID3DPresentGroup *pPresentationFactory, IDirect3DDevice9 **ppReturnedDeviceInterface);
|
||||||
|
HRESULT (WINAPI *CreateDeviceEx)(ID3DAdapter9 *This, UINT RealAdapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, D3DDISPLAYMODEEX *pFullscreenDisplayMode, IDirect3D9Ex *pD3D9Ex, ID3DPresentGroup *pPresentationFactory, IDirect3DDevice9Ex **ppReturnedDeviceInterface);
|
||||||
|
} ID3DAdapter9Vtbl;
|
||||||
|
|
||||||
|
struct ID3DAdapter9
|
||||||
|
{
|
||||||
|
ID3DAdapter9Vtbl *lpVtbl;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* IUnknown macros */
|
||||||
|
#define ID3DAdapter9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
|
||||||
|
#define ID3DAdapter9_AddRef(p) (p)->lpVtbl->AddRef(p)
|
||||||
|
#define ID3DAdapter9_Release(p) (p)->lpVtbl->Release(p)
|
||||||
|
/* ID3DAdapter9 macros */
|
||||||
|
#define ID3DAdapter9_GetAdapterIdentifier(p,a,b) (p)->lpVtbl->GetAdapterIdentifier(p,a,b)
|
||||||
|
#define ID3DAdapter9_CheckDeviceType(p,a,b,c,d) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d)
|
||||||
|
#define ID3DAdapter9_CheckDeviceFormat(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e)
|
||||||
|
#define ID3DAdapter9_CheckDeviceMultiSampleType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e)
|
||||||
|
#define ID3DAdapter9_CheckDepthStencilMatch(p,a,b,c,d) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d)
|
||||||
|
#define ID3DAdapter9_CheckDeviceFormatConversion(p,a,b,c) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c)
|
||||||
|
#define ID3DAdapter9_GetDeviceCaps(p,a,b) (p)->lpVtbl->GetDeviceCaps(p,a,b)
|
||||||
|
#define ID3DAdapter9_CreateDevice(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f,g,h)
|
||||||
|
#define ID3DAdapter9_CreateDeviceEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g,h,i)
|
||||||
|
|
||||||
|
#else /* __cplusplus */
|
||||||
|
|
||||||
|
struct ID3DAdapter9 : public IUnknown
|
||||||
|
{
|
||||||
|
HRESULT WINAPI GetAdapterIdentifier(DWORD Flags, D3DADAPTER_IDENTIFIER9 *pIdentifier);
|
||||||
|
HRESULT WINAPI CheckDeviceType(D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed);
|
||||||
|
HRESULT WINAPI CheckDeviceFormat(D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat);
|
||||||
|
HRESULT WINAPI CheckDeviceMultiSampleType(D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD *pQualityLevels);
|
||||||
|
HRESULT WINAPI CheckDepthStencilMatch(D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat);
|
||||||
|
HRESULT WINAPI CheckDeviceFormatConversion(D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat);
|
||||||
|
HRESULT WINAPI GetDeviceCaps(D3DDEVTYPE DeviceType, D3DCAPS9 *pCaps);
|
||||||
|
HRESULT WINAPI CreateDevice(UINT RealAdapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3D9 *pD3D9, ID3DPresentGroup *pPresentationFactory, IDirect3DDevice9 **ppReturnedDeviceInterface);
|
||||||
|
HRESULT WINAPI CreateDeviceEx(UINT RealAdapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, D3DDISPLAYMODEEX *pFullscreenDisplayMode, IDirect3D9Ex *pD3D9Ex, ID3DPresentGroup *pPresentationFactory, IDirect3DDevice9Ex **ppReturnedDeviceInterface);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/* acquire a const struct D3DAdapter9* structure describing the interface
|
||||||
|
* queried. See */
|
||||||
|
const void * WINAPI
|
||||||
|
D3DAdapter9GetProc( const char *name );
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* _D3DADAPTER9_H_ */
|
44
include/d3dadapter/drm.h
Normal file
44
include/d3dadapter/drm.h
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2011 Joakim Sindholt <opensource@zhasha.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
|
||||||
|
* on the rights to use, copy, modify, merge, publish, distribute, sub
|
||||||
|
* license, and/or sell copies of the Software, and to permit persons to whom
|
||||||
|
* the Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the next
|
||||||
|
* paragraph) shall be included in all copies or substantial portions of the
|
||||||
|
* Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
* USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
|
|
||||||
|
#ifndef _D3DADAPTER9_DRM_H_
|
||||||
|
#define _D3DADAPTER9_DRM_H_
|
||||||
|
|
||||||
|
#include "d3dadapter9.h"
|
||||||
|
|
||||||
|
/* query driver support name */
|
||||||
|
#define D3DADAPTER9DRM_NAME "drm"
|
||||||
|
/* current version */
|
||||||
|
#define D3DADAPTER9DRM_MAJOR 0
|
||||||
|
#define D3DADAPTER9DRM_MINOR 0
|
||||||
|
|
||||||
|
struct D3DAdapter9DRM
|
||||||
|
{
|
||||||
|
unsigned major_version; /* ABI break */
|
||||||
|
unsigned minor_version; /* backwards compatible feature additions */
|
||||||
|
|
||||||
|
/* NOTE: upon passing an fd to this function, it's now owned by this
|
||||||
|
function. If this function fails, the fd will be closed here as well */
|
||||||
|
HRESULT (WINAPI *create_adapter)(int fd, ID3DAdapter9 **ppAdapter);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _D3DADAPTER9_DRM_H_ */
|
136
include/d3dadapter/present.h
Normal file
136
include/d3dadapter/present.h
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2011 Joakim Sindholt <opensource@zhasha.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
|
||||||
|
* on the rights to use, copy, modify, merge, publish, distribute, sub
|
||||||
|
* license, and/or sell copies of the Software, and to permit persons to whom
|
||||||
|
* the Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the next
|
||||||
|
* paragraph) shall be included in all copies or substantial portions of the
|
||||||
|
* Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
* USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
|
|
||||||
|
#ifndef _D3DADAPTER_PRESENT_H_
|
||||||
|
#define _D3DADAPTER_PRESENT_H_
|
||||||
|
|
||||||
|
#include <d3d9.h>
|
||||||
|
|
||||||
|
#ifndef D3DOK_WINDOW_OCCLUDED
|
||||||
|
#define D3DOK_WINDOW_OCCLUDED MAKE_D3DSTATUS(2531)
|
||||||
|
#endif /* D3DOK_WINDOW_OCCLUDED */
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
typedef struct ID3DPresent ID3DPresent;
|
||||||
|
typedef struct ID3DPresentGroup ID3DPresentGroup;
|
||||||
|
typedef struct ID3DAdapter9 ID3DAdapter9;
|
||||||
|
typedef struct D3DWindowBuffer D3DWindowBuffer;
|
||||||
|
|
||||||
|
/* Presentation backend for drivers to display their brilliant work */
|
||||||
|
typedef struct ID3DPresentVtbl
|
||||||
|
{
|
||||||
|
/* IUnknown */
|
||||||
|
HRESULT (WINAPI *QueryInterface)(ID3DPresent *This, REFIID riid, void **ppvObject);
|
||||||
|
ULONG (WINAPI *AddRef)(ID3DPresent *This);
|
||||||
|
ULONG (WINAPI *Release)(ID3DPresent *This);
|
||||||
|
|
||||||
|
/* ID3DPresent */
|
||||||
|
/* This function initializes the screen and window provided at creation.
|
||||||
|
* Hence why this should always be called as the one of first things a new
|
||||||
|
* swap chain does */
|
||||||
|
HRESULT (WINAPI *SetPresentParameters)(ID3DPresent *This, D3DPRESENT_PARAMETERS *pPresentationParameters, D3DDISPLAYMODEEX *pFullscreenDisplayMode);
|
||||||
|
/* Make a buffer visible to the window system via dma-buf fd.
|
||||||
|
* For better compatibility, it must be 32bpp and format ARGB/XRGB */
|
||||||
|
HRESULT (WINAPI *NewD3DWindowBufferFromDmaBuf)(ID3DPresent *This, int dmaBufFd, int width, int height, int stride, int depth, int bpp, D3DWindowBuffer **out);
|
||||||
|
HRESULT (WINAPI *DestroyD3DWindowBuffer)(ID3DPresent *This, D3DWindowBuffer *buffer);
|
||||||
|
/* After presenting a buffer to the window system, the buffer
|
||||||
|
* may be used as is (no copy of the content) by the window system.
|
||||||
|
* You must not use a non-released buffer, else the user may see undefined content. */
|
||||||
|
HRESULT (WINAPI *WaitBufferReleased)(ID3DPresent *This, D3DWindowBuffer *buffer);
|
||||||
|
HRESULT (WINAPI *FrontBufferCopy)(ID3DPresent *This, D3DWindowBuffer *buffer);
|
||||||
|
/* It is possible to do partial copy, but impossible to do resizing, which must
|
||||||
|
* be done by the client after checking the front buffer size */
|
||||||
|
HRESULT (WINAPI *PresentBuffer)(ID3DPresent *This, D3DWindowBuffer *buffer, HWND hWndOverride, const RECT *pSourceRect, const RECT *pDestRect, const RGNDATA *pDirtyRegion, DWORD Flags);
|
||||||
|
HRESULT (WINAPI *GetRasterStatus)(ID3DPresent *This, D3DRASTER_STATUS *pRasterStatus);
|
||||||
|
HRESULT (WINAPI *GetDisplayMode)(ID3DPresent *This, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation);
|
||||||
|
HRESULT (WINAPI *GetPresentStats)(ID3DPresent *This, D3DPRESENTSTATS *pStats);
|
||||||
|
HRESULT (WINAPI *GetCursorPos)(ID3DPresent *This, POINT *pPoint);
|
||||||
|
HRESULT (WINAPI *SetCursorPos)(ID3DPresent *This, POINT *pPoint);
|
||||||
|
/* Cursor size is always 32x32. pBitmap and pHotspot can be NULL. */
|
||||||
|
HRESULT (WINAPI *SetCursor)(ID3DPresent *This, void *pBitmap, POINT *pHotspot, BOOL bShow);
|
||||||
|
HRESULT (WINAPI *SetGammaRamp)(ID3DPresent *This, const D3DGAMMARAMP *pRamp, HWND hWndOverride);
|
||||||
|
HRESULT (WINAPI *GetWindowInfo)(ID3DPresent *This, HWND hWnd, int *width, int *height, int *depth);
|
||||||
|
} ID3DPresentVtbl;
|
||||||
|
|
||||||
|
struct ID3DPresent
|
||||||
|
{
|
||||||
|
ID3DPresentVtbl *lpVtbl;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* IUnknown macros */
|
||||||
|
#define ID3DPresent_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
|
||||||
|
#define ID3DPresent_AddRef(p) (p)->lpVtbl->AddRef(p)
|
||||||
|
#define ID3DPresent_Release(p) (p)->lpVtbl->Release(p)
|
||||||
|
/* ID3DPresent macros */
|
||||||
|
#define ID3DPresent_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a)
|
||||||
|
#define ID3DPresent_SetPresentParameters(p,a,b) (p)->lpVtbl->SetPresentParameters(p,a,b)
|
||||||
|
#define ID3DPresent_NewD3DWindowBufferFromDmaBuf(p,a,b,c,d,e,f,g) (p)->lpVtbl->NewD3DWindowBufferFromDmaBuf(p,a,b,c,d,e,f,g)
|
||||||
|
#define ID3DPresent_DestroyD3DWindowBuffer(p,a) (p)->lpVtbl->DestroyD3DWindowBuffer(p,a)
|
||||||
|
#define ID3DPresent_WaitBufferReleased(p,a) (p)->lpVtbl->WaitBufferReleased(p,a)
|
||||||
|
#define ID3DPresent_FrontBufferCopy(p,a) (p)->lpVtbl->FrontBufferCopy(p,a)
|
||||||
|
#define ID3DPresent_PresentBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->PresentBuffer(p,a,b,c,d,e,f)
|
||||||
|
#define ID3DPresent_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a)
|
||||||
|
#define ID3DPresent_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b)
|
||||||
|
#define ID3DPresent_GetPresentStats(p,a) (p)->lpVtbl->GetPresentStats(p,a)
|
||||||
|
#define ID3DPresent_GetCursorPos(p,a) (p)->lpVtbl->GetCursorPos(p,a)
|
||||||
|
#define ID3DPresent_SetCursorPos(p,a) (p)->lpVtbl->SetCursorPos(p,a)
|
||||||
|
#define ID3DPresent_SetCursor(p,a,b,c) (p)->lpVtbl->SetCursor(p,a,b,c)
|
||||||
|
#define ID3DPresent_SetGammaRamp(p,a,b) (p)->lpVtbl->SetGammaRamp(p,a,b)
|
||||||
|
#define ID3DPresent_GetWindowInfo(p,a,b,c,d) (p)->lpVtbl->GetWindowSize(p,a,b,c,d)
|
||||||
|
|
||||||
|
typedef struct ID3DPresentGroupVtbl
|
||||||
|
{
|
||||||
|
/* IUnknown */
|
||||||
|
HRESULT (WINAPI *QueryInterface)(ID3DPresentGroup *This, REFIID riid, void **ppvObject);
|
||||||
|
ULONG (WINAPI *AddRef)(ID3DPresentGroup *This);
|
||||||
|
ULONG (WINAPI *Release)(ID3DPresentGroup *This);
|
||||||
|
|
||||||
|
/* ID3DPresentGroup */
|
||||||
|
/* When creating a device, it's relevant for the driver to know how many
|
||||||
|
* implicit swap chains to create. It has to create one per monitor in a
|
||||||
|
* multi-monitor setup */
|
||||||
|
UINT (WINAPI *GetMultiheadCount)(ID3DPresentGroup *This);
|
||||||
|
/* returns only the implicit present interfaces */
|
||||||
|
HRESULT (WINAPI *GetPresent)(ID3DPresentGroup *This, UINT Index, ID3DPresent **ppPresent);
|
||||||
|
/* used to create additional presentation interfaces along the way */
|
||||||
|
HRESULT (WINAPI *CreateAdditionalPresent)(ID3DPresentGroup *This, D3DPRESENT_PARAMETERS *pPresentationParameters, ID3DPresent **ppPresent);
|
||||||
|
void (WINAPI *GetVersion) (ID3DPresentGroup *This, int *major, int *minor);
|
||||||
|
} ID3DPresentGroupVtbl;
|
||||||
|
|
||||||
|
struct ID3DPresentGroup
|
||||||
|
{
|
||||||
|
ID3DPresentGroupVtbl *lpVtbl;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* IUnknown macros */
|
||||||
|
#define ID3DPresentGroup_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
|
||||||
|
#define ID3DPresentGroup_AddRef(p) (p)->lpVtbl->AddRef(p)
|
||||||
|
#define ID3DPresentGroup_Release(p) (p)->lpVtbl->Release(p)
|
||||||
|
/* ID3DPresentGroup */
|
||||||
|
#define ID3DPresentGroup_GetMultiheadCount(p) (p)->lpVtbl->GetMultiheadCount(p)
|
||||||
|
#define ID3DPresentGroup_GetPresent(p,a,b) (p)->lpVtbl->GetPresent(p,a,b)
|
||||||
|
#define ID3DPresentGroup_CreateAdditionalPresent(p,a,b) (p)->lpVtbl->CreateAdditionalPresent(p,a,b)
|
||||||
|
#define ID3DPresentGroup_GetVersion(p,a,b) (p)->lpVtbl->GetVersion(p,a,b)
|
||||||
|
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* _D3DADAPTER_PRESENT_H_ */
|
@@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
if BUILD_SHARED
|
if BUILD_SHARED
|
||||||
if HAVE_COMPAT_SYMLINKS
|
if HAVE_COMPAT_SYMLINKS
|
||||||
all-local : .libs/install-mesa-links
|
all-local : .install-mesa-links
|
||||||
|
|
||||||
.libs/install-mesa-links : $(lib_LTLIBRARIES)
|
.install-mesa-links : $(lib_LTLIBRARIES)
|
||||||
$(AM_V_GEN)$(MKDIR_P) $(top_builddir)/$(LIB_DIR); \
|
$(AM_V_GEN)$(MKDIR_P) $(top_builddir)/$(LIB_DIR); \
|
||||||
for f in $(join $(addsuffix .libs/,$(dir $(lib_LTLIBRARIES))),$(notdir $(lib_LTLIBRARIES:%.la=%.$(LIB_EXT)*))); do \
|
for f in $(join $(addsuffix .libs/,$(dir $(lib_LTLIBRARIES))),$(notdir $(lib_LTLIBRARIES:%.la=%.$(LIB_EXT)*))); do \
|
||||||
if test -h .libs/$$f; then \
|
if test -h .libs/$$f; then \
|
||||||
@@ -14,5 +14,9 @@ all-local : .libs/install-mesa-links
|
|||||||
ln -f $$f $(top_builddir)/$(LIB_DIR); \
|
ln -f $$f $(top_builddir)/$(LIB_DIR); \
|
||||||
fi; \
|
fi; \
|
||||||
done && touch $@
|
done && touch $@
|
||||||
|
|
||||||
|
clean-local:
|
||||||
|
$(RM) .install-mesa-links
|
||||||
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@@ -621,7 +621,7 @@ def generate(env):
|
|||||||
env.Tool('custom')
|
env.Tool('custom')
|
||||||
createInstallMethods(env)
|
createInstallMethods(env)
|
||||||
|
|
||||||
env.PkgCheckModules('X11', ['x11', 'xext', 'xdamage', 'xfixes'])
|
env.PkgCheckModules('X11', ['x11', 'xext', 'xdamage', 'xfixes', 'glproto >= 1.4.13'])
|
||||||
env.PkgCheckModules('XCB', ['x11-xcb', 'xcb-glx >= 1.8.1', 'xcb-dri2 >= 1.8'])
|
env.PkgCheckModules('XCB', ['x11-xcb', 'xcb-glx >= 1.8.1', 'xcb-dri2 >= 1.8'])
|
||||||
env.PkgCheckModules('XF86VIDMODE', ['xxf86vm'])
|
env.PkgCheckModules('XF86VIDMODE', ['xxf86vm'])
|
||||||
env.PkgCheckModules('DRM', ['libdrm >= 2.4.38'])
|
env.PkgCheckModules('DRM', ['libdrm >= 2.4.38'])
|
||||||
|
@@ -668,15 +668,21 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
|||||||
|
|
||||||
for (i = 0; dri2_dpy->driver_configs[i]; i++) {
|
for (i = 0; dri2_dpy->driver_configs[i]; i++) {
|
||||||
EGLint format, attr_list[3];
|
EGLint format, attr_list[3];
|
||||||
unsigned int mask;
|
unsigned int red, alpha;
|
||||||
|
|
||||||
dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i],
|
dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i],
|
||||||
__DRI_ATTRIB_RED_MASK, &mask);
|
__DRI_ATTRIB_RED_MASK, &red);
|
||||||
if (mask == 0x3ff00000)
|
dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i],
|
||||||
|
__DRI_ATTRIB_ALPHA_MASK, &alpha);
|
||||||
|
if (red == 0x3ff00000 && alpha == 0x00000000)
|
||||||
format = GBM_FORMAT_XRGB2101010;
|
format = GBM_FORMAT_XRGB2101010;
|
||||||
else if (mask == 0x00ff0000)
|
else if (red == 0x3ff00000 && alpha == 0xc0000000)
|
||||||
|
format = GBM_FORMAT_ARGB2101010;
|
||||||
|
else if (red == 0x00ff0000 && alpha == 0x00000000)
|
||||||
format = GBM_FORMAT_XRGB8888;
|
format = GBM_FORMAT_XRGB8888;
|
||||||
else if (mask == 0xf800)
|
else if (red == 0x00ff0000 && alpha == 0xff000000)
|
||||||
|
format = GBM_FORMAT_ARGB8888;
|
||||||
|
else if (red == 0xf800)
|
||||||
format = GBM_FORMAT_RGB565;
|
format = GBM_FORMAT_RGB565;
|
||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
|
@@ -49,8 +49,7 @@ dri2_x11_swap_interval(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
swrastCreateDrawable(struct dri2_egl_display * dri2_dpy,
|
swrastCreateDrawable(struct dri2_egl_display * dri2_dpy,
|
||||||
struct dri2_egl_surface * dri2_surf,
|
struct dri2_egl_surface * dri2_surf)
|
||||||
int depth)
|
|
||||||
{
|
{
|
||||||
uint32_t mask;
|
uint32_t mask;
|
||||||
const uint32_t function = GXcopy;
|
const uint32_t function = GXcopy;
|
||||||
@@ -66,8 +65,7 @@ swrastCreateDrawable(struct dri2_egl_display * dri2_dpy,
|
|||||||
valgc[0] = function;
|
valgc[0] = function;
|
||||||
valgc[1] = False;
|
valgc[1] = False;
|
||||||
xcb_create_gc(dri2_dpy->conn, dri2_surf->swapgc, dri2_surf->drawable, mask, valgc);
|
xcb_create_gc(dri2_dpy->conn, dri2_surf->swapgc, dri2_surf->drawable, mask, valgc);
|
||||||
dri2_surf->depth = depth;
|
switch (dri2_surf->depth) {
|
||||||
switch (depth) {
|
|
||||||
case 32:
|
case 32:
|
||||||
case 24:
|
case 24:
|
||||||
dri2_surf->bytes_per_pixel = 4;
|
dri2_surf->bytes_per_pixel = 4;
|
||||||
@@ -82,7 +80,7 @@ swrastCreateDrawable(struct dri2_egl_display * dri2_dpy,
|
|||||||
dri2_surf->bytes_per_pixel = 0;
|
dri2_surf->bytes_per_pixel = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
_eglLog(_EGL_WARNING, "unsupported depth %d", depth);
|
_eglLog(_EGL_WARNING, "unsupported depth %d", dri2_surf->depth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,12 +255,6 @@ dri2_x11_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
|
|||||||
_eglError(EGL_BAD_ALLOC, "dri2->createNewDrawable");
|
_eglError(EGL_BAD_ALLOC, "dri2->createNewDrawable");
|
||||||
goto cleanup_pixmap;
|
goto cleanup_pixmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dri2_dpy->dri2) {
|
|
||||||
xcb_dri2_create_drawable (dri2_dpy->conn, dri2_surf->drawable);
|
|
||||||
} else {
|
|
||||||
swrastCreateDrawable(dri2_dpy, dri2_surf, _eglGetConfigKey(conf, EGL_BUFFER_SIZE));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type != EGL_PBUFFER_BIT) {
|
if (type != EGL_PBUFFER_BIT) {
|
||||||
cookie = xcb_get_geometry (dri2_dpy->conn, dri2_surf->drawable);
|
cookie = xcb_get_geometry (dri2_dpy->conn, dri2_surf->drawable);
|
||||||
@@ -275,9 +267,19 @@ dri2_x11_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
|
|||||||
|
|
||||||
dri2_surf->base.Width = reply->width;
|
dri2_surf->base.Width = reply->width;
|
||||||
dri2_surf->base.Height = reply->height;
|
dri2_surf->base.Height = reply->height;
|
||||||
|
dri2_surf->depth = reply->depth;
|
||||||
free(reply);
|
free(reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dri2_dpy->dri2) {
|
||||||
|
xcb_dri2_create_drawable (dri2_dpy->conn, dri2_surf->drawable);
|
||||||
|
} else {
|
||||||
|
if (type == EGL_PBUFFER_BIT) {
|
||||||
|
dri2_surf->depth = _eglGetConfigKey(conf, EGL_BUFFER_SIZE);
|
||||||
|
}
|
||||||
|
swrastCreateDrawable(dri2_dpy, dri2_surf);
|
||||||
|
}
|
||||||
|
|
||||||
/* we always copy the back buffer to front */
|
/* we always copy the back buffer to front */
|
||||||
dri2_surf->base.PostSubBufferSupportedNV = EGL_TRUE;
|
dri2_surf->base.PostSubBufferSupportedNV = EGL_TRUE;
|
||||||
|
|
||||||
|
@@ -58,7 +58,8 @@ GALLIUM_WINSYS_CFLAGS = \
|
|||||||
|
|
||||||
|
|
||||||
GALLIUM_PIPE_LOADER_WINSYS_LIBS = \
|
GALLIUM_PIPE_LOADER_WINSYS_LIBS = \
|
||||||
$(top_builddir)/src/gallium/winsys/sw/null/libws_null.la
|
$(top_builddir)/src/gallium/winsys/sw/null/libws_null.la \
|
||||||
|
$(top_builddir)/src/gallium/winsys/sw/wrapper/libwsw.la
|
||||||
|
|
||||||
if HAVE_DRISW
|
if HAVE_DRISW
|
||||||
GALLIUM_PIPE_LOADER_WINSYS_LIBS += \
|
GALLIUM_PIPE_LOADER_WINSYS_LIBS += \
|
||||||
|
@@ -166,6 +166,10 @@ if HAVE_ST_XVMC
|
|||||||
SUBDIRS += state_trackers/xvmc targets/xvmc
|
SUBDIRS += state_trackers/xvmc targets/xvmc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if HAVE_ST_NINE
|
||||||
|
SUBDIRS += state_trackers/nine targets/d3dadapter9
|
||||||
|
endif
|
||||||
|
|
||||||
##
|
##
|
||||||
## Don't forget to bundle the remaining (non autotools) state-trackers/targets
|
## Don't forget to bundle the remaining (non autotools) state-trackers/targets
|
||||||
##
|
##
|
||||||
|
@@ -193,7 +193,7 @@ def lineloop(intype, outtype, inpv, outpv):
|
|||||||
print ' for (i = start, j = 0; j < nr - 2; j+=2, i++) { '
|
print ' for (i = start, j = 0; j < nr - 2; j+=2, i++) { '
|
||||||
do_line( intype, outtype, 'out+j', 'i', 'i+1', inpv, outpv );
|
do_line( intype, outtype, 'out+j', 'i', 'i+1', inpv, outpv );
|
||||||
print ' }'
|
print ' }'
|
||||||
do_line( intype, outtype, 'out+j', 'i', '0', inpv, outpv );
|
do_line( intype, outtype, 'out+j', 'i', 'start', inpv, outpv );
|
||||||
postamble()
|
postamble()
|
||||||
|
|
||||||
def tris(intype, outtype, inpv, outpv):
|
def tris(intype, outtype, inpv, outpv):
|
||||||
@@ -218,7 +218,7 @@ def tristrip(intype, outtype, inpv, outpv):
|
|||||||
def trifan(intype, outtype, inpv, outpv):
|
def trifan(intype, outtype, inpv, outpv):
|
||||||
preamble(intype, outtype, inpv, outpv, prim='trifan')
|
preamble(intype, outtype, inpv, outpv, prim='trifan')
|
||||||
print ' for (i = start, j = 0; j < nr; j+=3, i++) { '
|
print ' for (i = start, j = 0; j < nr; j+=3, i++) { '
|
||||||
do_tri( intype, outtype, 'out+j', '0', 'i+1', 'i+2', inpv, outpv );
|
do_tri( intype, outtype, 'out+j', 'start', 'i+1', 'i+2', inpv, outpv );
|
||||||
print ' }'
|
print ' }'
|
||||||
postamble()
|
postamble()
|
||||||
|
|
||||||
@@ -228,9 +228,9 @@ def polygon(intype, outtype, inpv, outpv):
|
|||||||
preamble(intype, outtype, inpv, outpv, prim='polygon')
|
preamble(intype, outtype, inpv, outpv, prim='polygon')
|
||||||
print ' for (i = start, j = 0; j < nr; j+=3, i++) { '
|
print ' for (i = start, j = 0; j < nr; j+=3, i++) { '
|
||||||
if inpv == FIRST:
|
if inpv == FIRST:
|
||||||
do_tri( intype, outtype, 'out+j', '0', 'i+1', 'i+2', inpv, outpv );
|
do_tri( intype, outtype, 'out+j', 'start', 'i+1', 'i+2', inpv, outpv );
|
||||||
else:
|
else:
|
||||||
do_tri( intype, outtype, 'out+j', 'i+1', 'i+2', '0', inpv, outpv );
|
do_tri( intype, outtype, 'out+j', 'i+1', 'i+2', 'start', inpv, outpv );
|
||||||
print ' }'
|
print ' }'
|
||||||
postamble()
|
postamble()
|
||||||
|
|
||||||
|
@@ -124,6 +124,9 @@ util_primconvert_draw_vbo(struct primconvert_context *pc,
|
|||||||
new_info.indexed = true;
|
new_info.indexed = true;
|
||||||
new_info.min_index = info->min_index;
|
new_info.min_index = info->min_index;
|
||||||
new_info.max_index = info->max_index;
|
new_info.max_index = info->max_index;
|
||||||
|
new_info.index_bias = info->index_bias;
|
||||||
|
new_info.start_instance = info->start_instance;
|
||||||
|
new_info.instance_count = info->instance_count;
|
||||||
|
|
||||||
if (info->indexed) {
|
if (info->indexed) {
|
||||||
u_index_translator(pc->primtypes_mask,
|
u_index_translator(pc->primtypes_mask,
|
||||||
@@ -136,6 +139,7 @@ util_primconvert_draw_vbo(struct primconvert_context *pc,
|
|||||||
src = pipe_buffer_map(pc->pipe, ib->buffer,
|
src = pipe_buffer_map(pc->pipe, ib->buffer,
|
||||||
PIPE_TRANSFER_READ, &src_transfer);
|
PIPE_TRANSFER_READ, &src_transfer);
|
||||||
}
|
}
|
||||||
|
src = (const uint8_t *)src + ib->offset;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
u_index_generator(pc->primtypes_mask,
|
u_index_generator(pc->primtypes_mask,
|
||||||
|
@@ -118,7 +118,7 @@ os_get_total_physical_memory(uint64_t *size)
|
|||||||
*size = phys_pages * page_size;
|
*size = phys_pages * page_size;
|
||||||
return (phys_pages > 0 && page_size > 0);
|
return (phys_pages > 0 && page_size > 0);
|
||||||
#elif defined(PIPE_OS_APPLE) || defined(PIPE_OS_BSD)
|
#elif defined(PIPE_OS_APPLE) || defined(PIPE_OS_BSD)
|
||||||
size_t len = sizeof(size);
|
size_t len = sizeof(*size);
|
||||||
int mib[2];
|
int mib[2];
|
||||||
|
|
||||||
mib[0] = CTL_HW;
|
mib[0] = CTL_HW;
|
||||||
@@ -134,7 +134,7 @@ os_get_total_physical_memory(uint64_t *size)
|
|||||||
#error Unsupported *BSD
|
#error Unsupported *BSD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return (sysctl(mib, 2, &size, &len, NULL, 0) == 0);
|
return (sysctl(mib, 2, size, &len, NULL, 0) == 0);
|
||||||
#elif defined(PIPE_OS_HAIKU)
|
#elif defined(PIPE_OS_HAIKU)
|
||||||
system_info info;
|
system_info info;
|
||||||
status_t ret;
|
status_t ret;
|
||||||
|
@@ -70,8 +70,8 @@ static INLINE void *os_mmap(void *addr, size_t length, int prot, int flags,
|
|||||||
return __mmap2(addr, length, prot, flags, fd, (size_t) (offset >> 12));
|
return __mmap2(addr, length, prot, flags, fd, (size_t) (offset >> 12));
|
||||||
}
|
}
|
||||||
|
|
||||||
# define drm_munmap(addr, length) \
|
# define os_munmap(addr, length) \
|
||||||
munmap(addr, length)
|
munmap(addr, length)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
/* assume large file support exists */
|
/* assume large file support exists */
|
||||||
|
@@ -166,6 +166,17 @@ pipe_loader_sw_probe_null(struct pipe_loader_device **devs);
|
|||||||
int
|
int
|
||||||
pipe_loader_sw_probe(struct pipe_loader_device **devs, int ndev);
|
pipe_loader_sw_probe(struct pipe_loader_device **devs, int ndev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a software device wrapped atop another device.
|
||||||
|
*
|
||||||
|
* This function is platform-specific.
|
||||||
|
*
|
||||||
|
* \sa pipe_loader_probe
|
||||||
|
*/
|
||||||
|
boolean
|
||||||
|
pipe_loader_sw_probe_wrapped(struct pipe_loader_device **dev,
|
||||||
|
struct pipe_screen *screen);
|
||||||
|
|
||||||
#ifdef HAVE_PIPE_LOADER_DRM
|
#ifdef HAVE_PIPE_LOADER_DRM
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include "util/u_dl.h"
|
#include "util/u_dl.h"
|
||||||
#include "sw/dri/dri_sw_winsys.h"
|
#include "sw/dri/dri_sw_winsys.h"
|
||||||
#include "sw/null/null_sw_winsys.h"
|
#include "sw/null/null_sw_winsys.h"
|
||||||
|
#include "sw/wrapper/wrapper_sw_winsys.h"
|
||||||
#ifdef HAVE_PIPE_LOADER_XLIB
|
#ifdef HAVE_PIPE_LOADER_XLIB
|
||||||
/* Explicitly wrap the header to ease build without X11 headers */
|
/* Explicitly wrap the header to ease build without X11 headers */
|
||||||
#include "sw/xlib/xlib_sw_winsys.h"
|
#include "sw/xlib/xlib_sw_winsys.h"
|
||||||
@@ -140,6 +141,28 @@ pipe_loader_sw_probe(struct pipe_loader_device **devs, int ndev)
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean
|
||||||
|
pipe_loader_sw_probe_wrapped(struct pipe_loader_device **dev,
|
||||||
|
struct pipe_screen *screen)
|
||||||
|
{
|
||||||
|
struct pipe_loader_sw_device *sdev = CALLOC_STRUCT(pipe_loader_sw_device);
|
||||||
|
|
||||||
|
if (!sdev)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
sdev->base.type = PIPE_LOADER_DEVICE_SOFTWARE;
|
||||||
|
sdev->base.driver_name = "swrast";
|
||||||
|
sdev->base.ops = &pipe_loader_sw_ops;
|
||||||
|
sdev->ws = wrapper_sw_winsys_wrap_pipe_screen(screen);
|
||||||
|
|
||||||
|
if (!sdev->ws) {
|
||||||
|
FREE(sdev);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*dev = &sdev->base;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pipe_loader_sw_release(struct pipe_loader_device **dev)
|
pipe_loader_sw_release(struct pipe_loader_device **dev)
|
||||||
{
|
{
|
||||||
|
@@ -91,6 +91,34 @@ drisw_create_screen(struct drisw_loader_funcs *lf)
|
|||||||
return screen;
|
return screen;
|
||||||
}
|
}
|
||||||
#endif // DRI_TARGET
|
#endif // DRI_TARGET
|
||||||
|
|
||||||
|
#if defined(NINE_TARGET)
|
||||||
|
#include "sw/wrapper/wrapper_sw_winsys.h"
|
||||||
|
#include "target-helpers/inline_debug_helper.h"
|
||||||
|
|
||||||
|
extern struct pipe_screen *ninesw_create_screen(struct pipe_screen *screen);
|
||||||
|
|
||||||
|
INLINE struct pipe_screen *
|
||||||
|
ninesw_create_screen(struct pipe_screen *pscreen)
|
||||||
|
{
|
||||||
|
struct sw_winsys *winsys = NULL;
|
||||||
|
struct pipe_screen *screen = NULL;
|
||||||
|
|
||||||
|
winsys = wrapper_sw_winsys_wrap_pipe_screen(pscreen);
|
||||||
|
if (winsys == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
screen = sw_screen_create(winsys);
|
||||||
|
if (screen == NULL) {
|
||||||
|
winsys->destroy(winsys);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
screen = debug_screen_wrap(screen);
|
||||||
|
return screen;
|
||||||
|
}
|
||||||
|
#endif // NINE_TARGET
|
||||||
|
|
||||||
#endif // GALLIUM_SOFTPIPE
|
#endif // GALLIUM_SOFTPIPE
|
||||||
|
|
||||||
|
|
||||||
|
@@ -201,6 +201,7 @@ OP13_SAMPLE(GATHER4)
|
|||||||
OP12(SVIEWINFO)
|
OP12(SVIEWINFO)
|
||||||
OP13(SAMPLE_POS)
|
OP13(SAMPLE_POS)
|
||||||
OP12(SAMPLE_INFO)
|
OP12(SAMPLE_INFO)
|
||||||
|
OP11(UARL)
|
||||||
|
|
||||||
OP13(UCMP)
|
OP13(UCMP)
|
||||||
|
|
||||||
|
@@ -68,6 +68,18 @@ p_atomic_dec(int32_t *v)
|
|||||||
__asm__ __volatile__("lock; decl %0":"+m"(*v));
|
__asm__ __volatile__("lock; decl %0":"+m"(*v));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static INLINE int32_t
|
||||||
|
p_atomic_inc_return(int32_t *v)
|
||||||
|
{
|
||||||
|
return __sync_add_and_fetch(v, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static INLINE int32_t
|
||||||
|
p_atomic_dec_return(int32_t *v)
|
||||||
|
{
|
||||||
|
return __sync_sub_and_fetch(v, 1);
|
||||||
|
}
|
||||||
|
|
||||||
static INLINE int32_t
|
static INLINE int32_t
|
||||||
p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
|
p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
|
||||||
{
|
{
|
||||||
@@ -115,6 +127,18 @@ p_atomic_dec(int32_t *v)
|
|||||||
__asm__ __volatile__("lock; decl %0":"+m"(*v));
|
__asm__ __volatile__("lock; decl %0":"+m"(*v));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static INLINE int32_t
|
||||||
|
p_atomic_inc_return(int32_t *v)
|
||||||
|
{
|
||||||
|
return __sync_add_and_fetch(v, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static INLINE int32_t
|
||||||
|
p_atomic_dec_return(int32_t *v)
|
||||||
|
{
|
||||||
|
return __sync_sub_and_fetch(v, 1);
|
||||||
|
}
|
||||||
|
|
||||||
static INLINE int32_t
|
static INLINE int32_t
|
||||||
p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
|
p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
|
||||||
{
|
{
|
||||||
@@ -160,6 +184,18 @@ p_atomic_dec(int32_t *v)
|
|||||||
(void) __sync_sub_and_fetch(v, 1);
|
(void) __sync_sub_and_fetch(v, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static INLINE int32_t
|
||||||
|
p_atomic_inc_return(int32_t *v)
|
||||||
|
{
|
||||||
|
return __sync_add_and_fetch(v, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static INLINE int32_t
|
||||||
|
p_atomic_dec_return(int32_t *v)
|
||||||
|
{
|
||||||
|
return __sync_sub_and_fetch(v, 1);
|
||||||
|
}
|
||||||
|
|
||||||
static INLINE int32_t
|
static INLINE int32_t
|
||||||
p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
|
p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
|
||||||
{
|
{
|
||||||
@@ -186,6 +222,8 @@ p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
|
|||||||
#define p_atomic_dec_zero(_v) ((boolean) --(*(_v)))
|
#define p_atomic_dec_zero(_v) ((boolean) --(*(_v)))
|
||||||
#define p_atomic_inc(_v) ((void) (*(_v))++)
|
#define p_atomic_inc(_v) ((void) (*(_v))++)
|
||||||
#define p_atomic_dec(_v) ((void) (*(_v))--)
|
#define p_atomic_dec(_v) ((void) (*(_v))--)
|
||||||
|
#define p_atomic_inc_return(_v) ((*(_v))++)
|
||||||
|
#define p_atomic_dec_return(_v) ((*(_v))--)
|
||||||
#define p_atomic_cmpxchg(_v, old, _new) (*(_v) == old ? *(_v) = (_new) : *(_v))
|
#define p_atomic_cmpxchg(_v, old, _new) (*(_v) == old ? *(_v) = (_new) : *(_v))
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -288,12 +326,24 @@ p_atomic_inc(int32_t *v)
|
|||||||
_InterlockedIncrement((long *)v);
|
_InterlockedIncrement((long *)v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static INLINE int32_t
|
||||||
|
p_atomic_inc_return(int32_t *v)
|
||||||
|
{
|
||||||
|
return _InterlockedIncrement((long *)v);
|
||||||
|
}
|
||||||
|
|
||||||
static INLINE void
|
static INLINE void
|
||||||
p_atomic_dec(int32_t *v)
|
p_atomic_dec(int32_t *v)
|
||||||
{
|
{
|
||||||
_InterlockedDecrement((long *)v);
|
_InterlockedDecrement((long *)v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static INLINE int32_t
|
||||||
|
p_atomic_dec_return(int32_t *v)
|
||||||
|
{
|
||||||
|
return _InterlockedDecrement((long *)v);
|
||||||
|
}
|
||||||
|
|
||||||
static INLINE int32_t
|
static INLINE int32_t
|
||||||
p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
|
p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
|
||||||
{
|
{
|
||||||
@@ -329,6 +379,8 @@ p_atomic_dec_zero(int32_t *v)
|
|||||||
|
|
||||||
#define p_atomic_inc(_v) atomic_inc_32((uint32_t *) _v)
|
#define p_atomic_inc(_v) atomic_inc_32((uint32_t *) _v)
|
||||||
#define p_atomic_dec(_v) atomic_dec_32((uint32_t *) _v)
|
#define p_atomic_dec(_v) atomic_dec_32((uint32_t *) _v)
|
||||||
|
#define p_atomic_inc_return(_v) atomic_inc_32_nv((uint32_t *) _v)
|
||||||
|
#define p_atomic_dec_return(_v) atomic_dec_32_nv((uint32_t *) _v)
|
||||||
|
|
||||||
#define p_atomic_cmpxchg(_v, _old, _new) \
|
#define p_atomic_cmpxchg(_v, _old, _new) \
|
||||||
atomic_cas_32( (uint32_t *) _v, (uint32_t) _old, (uint32_t) _new)
|
atomic_cas_32( (uint32_t *) _v, (uint32_t) _old, (uint32_t) _new)
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
#define UTIL_BOX_INLINES_H
|
#define UTIL_BOX_INLINES_H
|
||||||
|
|
||||||
#include "pipe/p_state.h"
|
#include "pipe/p_state.h"
|
||||||
|
#include "util/u_math.h"
|
||||||
|
|
||||||
static INLINE
|
static INLINE
|
||||||
void u_box_1d( unsigned x,
|
void u_box_1d( unsigned x,
|
||||||
@@ -77,4 +78,121 @@ void u_box_3d( unsigned x,
|
|||||||
box->depth = d;
|
box->depth = d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Clips @dst to width @w and height @h.
|
||||||
|
* Returns -1 if the resulting box would be empty (then @dst is left unchanged).
|
||||||
|
* 0 if nothing has been reduced.
|
||||||
|
* 1 if width has been reduced.
|
||||||
|
* 2 if height has been reduced.
|
||||||
|
* 3 if both width and height have been reduced.
|
||||||
|
* Aliasing permitted.
|
||||||
|
*/
|
||||||
|
static INLINE int
|
||||||
|
u_box_clip_2d(struct pipe_box *dst,
|
||||||
|
const struct pipe_box *box, int w, int h)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
int a[2], b[2], dim[2];
|
||||||
|
int *start, *end;
|
||||||
|
int res = 0;
|
||||||
|
|
||||||
|
if (!box->width || !box->height)
|
||||||
|
return -1;
|
||||||
|
dim[0] = w;
|
||||||
|
dim[1] = h;
|
||||||
|
a[0] = box->x;
|
||||||
|
a[1] = box->y;
|
||||||
|
b[0] = box->x + box->width;
|
||||||
|
b[1] = box->y + box->height;
|
||||||
|
|
||||||
|
for (i = 0; i < 2; ++i) {
|
||||||
|
start = (a[i] <= b[i]) ? &a[i] : &b[i];
|
||||||
|
end = (a[i] <= b[i]) ? &b[i] : &a[i];
|
||||||
|
|
||||||
|
if (*end < 0 || *start >= dim[i])
|
||||||
|
return -1;
|
||||||
|
if (*start < 0) {
|
||||||
|
*start = 0;
|
||||||
|
res |= (1 << i);
|
||||||
|
}
|
||||||
|
if (*end > dim[i]) {
|
||||||
|
*end = dim[i];
|
||||||
|
res |= (1 << i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res) {
|
||||||
|
dst->x = a[0];
|
||||||
|
dst->y = a[1];
|
||||||
|
dst->width = b[0] - a[0];
|
||||||
|
dst->height = b[1] - a[1];
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static INLINE int64_t
|
||||||
|
u_box_volume_3d(const struct pipe_box *box)
|
||||||
|
{
|
||||||
|
return (int64_t)box->width * box->height * box->depth;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Aliasing of @dst permitted. */
|
||||||
|
static INLINE void
|
||||||
|
u_box_union_2d(struct pipe_box *dst,
|
||||||
|
const struct pipe_box *a, const struct pipe_box *b)
|
||||||
|
{
|
||||||
|
dst->x = MIN2(a->x, b->x);
|
||||||
|
dst->y = MIN2(a->y, b->y);
|
||||||
|
|
||||||
|
dst->width = MAX2(a->x + a->width, b->x + b->width) - dst->x;
|
||||||
|
dst->height = MAX2(a->y + a->height, b->y + b->height) - dst->y;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Aliasing of @dst permitted. */
|
||||||
|
static INLINE void
|
||||||
|
u_box_union_3d(struct pipe_box *dst,
|
||||||
|
const struct pipe_box *a, const struct pipe_box *b)
|
||||||
|
{
|
||||||
|
dst->x = MIN2(a->x, b->x);
|
||||||
|
dst->y = MIN2(a->y, b->y);
|
||||||
|
dst->z = MIN2(a->z, b->z);
|
||||||
|
|
||||||
|
dst->width = MAX2(a->x + a->width, b->x + b->width) - dst->x;
|
||||||
|
dst->height = MAX2(a->y + a->height, b->y + b->height) - dst->y;
|
||||||
|
dst->depth = MAX2(a->z + a->depth, b->z + b->depth) - dst->z;
|
||||||
|
}
|
||||||
|
|
||||||
|
static INLINE boolean
|
||||||
|
u_box_test_intersection_2d(const struct pipe_box *a,
|
||||||
|
const struct pipe_box *b)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
int a_l[2], a_r[2], b_l[2], b_r[2];
|
||||||
|
|
||||||
|
a_l[0] = MIN2(a->x, a->x + a->width);
|
||||||
|
a_r[0] = MAX2(a->x, a->x + a->width);
|
||||||
|
a_l[1] = MIN2(a->y, a->y + a->height);
|
||||||
|
a_r[1] = MAX2(a->y, a->y + a->height);
|
||||||
|
|
||||||
|
b_l[0] = MIN2(b->x, b->x + b->width);
|
||||||
|
b_r[0] = MAX2(b->x, b->x + b->width);
|
||||||
|
b_l[1] = MIN2(b->y, b->y + b->height);
|
||||||
|
b_r[1] = MAX2(b->y, b->y + b->height);
|
||||||
|
|
||||||
|
for (i = 0; i < 2; ++i) {
|
||||||
|
if (a_l[i] > b_r[i] || a_r[i] < b_l[i])
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static INLINE void
|
||||||
|
u_box_minify_2d(struct pipe_box *dst,
|
||||||
|
const struct pipe_box *src, unsigned l)
|
||||||
|
{
|
||||||
|
dst->x = src->x >> l;
|
||||||
|
dst->y = src->y >> l;
|
||||||
|
dst->width = MAX2(src->width >> l, 1);
|
||||||
|
dst->height = MAX2(src->height >> l, 1);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -272,7 +272,7 @@ static INLINE uint64_t xgetbv(void)
|
|||||||
|
|
||||||
|
|
||||||
#if defined(PIPE_ARCH_X86)
|
#if defined(PIPE_ARCH_X86)
|
||||||
static INLINE boolean sse2_has_daz(void)
|
PIPE_ALIGN_STACK static INLINE boolean sse2_has_daz(void)
|
||||||
{
|
{
|
||||||
struct {
|
struct {
|
||||||
uint32_t pad1[7];
|
uint32_t pad1[7];
|
||||||
@@ -409,8 +409,12 @@ util_cpu_detect(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (regs[0] >= 0x80000006) {
|
if (regs[0] >= 0x80000006) {
|
||||||
|
/* should we really do this if the clflush size above worked? */
|
||||||
|
unsigned int cacheline;
|
||||||
cpuid(0x80000006, regs2);
|
cpuid(0x80000006, regs2);
|
||||||
util_cpu_caps.cacheline = regs2[2] & 0xFF;
|
cacheline = regs2[2] & 0xFF;
|
||||||
|
if (cacheline > 0)
|
||||||
|
util_cpu_caps.cacheline = cacheline;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!util_cpu_caps.has_sse) {
|
if (!util_cpu_caps.has_sse) {
|
||||||
|
@@ -561,14 +561,10 @@ util_last_bit(unsigned u)
|
|||||||
static INLINE unsigned
|
static INLINE unsigned
|
||||||
util_last_bit_signed(int i)
|
util_last_bit_signed(int i)
|
||||||
{
|
{
|
||||||
#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 407) && !defined(__INTEL_COMPILER)
|
|
||||||
return 31 - __builtin_clrsb(i);
|
|
||||||
#else
|
|
||||||
if (i >= 0)
|
if (i >= 0)
|
||||||
return util_last_bit(i);
|
return util_last_bit(i);
|
||||||
else
|
else
|
||||||
return util_last_bit(~(unsigned)i);
|
return util_last_bit(~(unsigned)i);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Destructively loop over all of the bits in a mask as in:
|
/* Destructively loop over all of the bits in a mask as in:
|
||||||
|
@@ -30,6 +30,7 @@
|
|||||||
#define U_RECT_H
|
#define U_RECT_H
|
||||||
|
|
||||||
#include "pipe/p_compiler.h"
|
#include "pipe/p_compiler.h"
|
||||||
|
#include "util/u_math.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -67,6 +68,12 @@ u_rect_find_intersection(const struct u_rect *a,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static INLINE int
|
||||||
|
u_rect_area(const struct u_rect *r)
|
||||||
|
{
|
||||||
|
return (r->x1 - r->x0) * (r->y1 - r->y0);
|
||||||
|
}
|
||||||
|
|
||||||
static INLINE void
|
static INLINE void
|
||||||
u_rect_possible_intersection(const struct u_rect *a,
|
u_rect_possible_intersection(const struct u_rect *a,
|
||||||
struct u_rect *b)
|
struct u_rect *b)
|
||||||
@@ -79,6 +86,17 @@ u_rect_possible_intersection(const struct u_rect *a,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set @d to a rectangle that covers both @a and @b.
|
||||||
|
*/
|
||||||
|
static INLINE void
|
||||||
|
u_rect_union(struct u_rect *d, const struct u_rect *a, const struct u_rect *b)
|
||||||
|
{
|
||||||
|
d->x0 = MIN2(a->x0, b->x0);
|
||||||
|
d->y0 = MIN2(a->y0, b->y0);
|
||||||
|
d->x1 = MAX2(a->x1, b->x1);
|
||||||
|
d->y1 = MAX2(a->y1, b->y1);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -124,6 +124,76 @@ void *util_make_layered_clear_vertex_shader(struct pipe_context *pipe)
|
|||||||
return pipe->create_vs_state(pipe, &state);
|
return pipe->create_vs_state(pipe, &state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes position and color, and outputs position, color, and instance id.
|
||||||
|
*/
|
||||||
|
void *util_make_layered_clear_helper_vertex_shader(struct pipe_context *pipe)
|
||||||
|
{
|
||||||
|
static const char text[] =
|
||||||
|
"VERT\n"
|
||||||
|
"DCL IN[0]\n"
|
||||||
|
"DCL IN[1]\n"
|
||||||
|
"DCL SV[0], INSTANCEID\n"
|
||||||
|
"DCL OUT[0], POSITION\n"
|
||||||
|
"DCL OUT[1], GENERIC[0]\n"
|
||||||
|
"DCL OUT[2], GENERIC[1]\n"
|
||||||
|
|
||||||
|
"MOV OUT[0], IN[0]\n"
|
||||||
|
"MOV OUT[1], IN[1]\n"
|
||||||
|
"MOV OUT[2].x, SV[0].xxxx\n"
|
||||||
|
"END\n";
|
||||||
|
struct tgsi_token tokens[1000];
|
||||||
|
struct pipe_shader_state state = {tokens};
|
||||||
|
|
||||||
|
if (!tgsi_text_translate(text, tokens, Elements(tokens))) {
|
||||||
|
assert(0);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return pipe->create_vs_state(pipe, &state);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes position, color, and target layer, and emits vertices on that target
|
||||||
|
* layer, with the specified color.
|
||||||
|
*/
|
||||||
|
void *util_make_layered_clear_geometry_shader(struct pipe_context *pipe)
|
||||||
|
{
|
||||||
|
static const char text[] =
|
||||||
|
"GEOM\n"
|
||||||
|
"PROPERTY GS_INPUT_PRIMITIVE TRIANGLES\n"
|
||||||
|
"PROPERTY GS_OUTPUT_PRIMITIVE TRIANGLE_STRIP\n"
|
||||||
|
"PROPERTY GS_MAX_OUTPUT_VERTICES 3\n"
|
||||||
|
"PROPERTY GS_INVOCATIONS 1\n"
|
||||||
|
"DCL IN[][0], POSITION\n" /* position */
|
||||||
|
"DCL IN[][1], GENERIC[0]\n" /* color */
|
||||||
|
"DCL IN[][2], GENERIC[1]\n" /* vs invocation */
|
||||||
|
"DCL OUT[0], POSITION\n"
|
||||||
|
"DCL OUT[1], GENERIC[0]\n"
|
||||||
|
"DCL OUT[2], LAYER\n"
|
||||||
|
"IMM[0] INT32 {0, 0, 0, 0}\n"
|
||||||
|
|
||||||
|
"MOV OUT[0], IN[0][0]\n"
|
||||||
|
"MOV OUT[1], IN[0][1]\n"
|
||||||
|
"MOV OUT[2].x, IN[0][2].xxxx\n"
|
||||||
|
"EMIT IMM[0].xxxx\n"
|
||||||
|
"MOV OUT[0], IN[1][0]\n"
|
||||||
|
"MOV OUT[1], IN[1][1]\n"
|
||||||
|
"MOV OUT[2].x, IN[1][2].xxxx\n"
|
||||||
|
"EMIT IMM[0].xxxx\n"
|
||||||
|
"MOV OUT[0], IN[2][0]\n"
|
||||||
|
"MOV OUT[1], IN[2][1]\n"
|
||||||
|
"MOV OUT[2].x, IN[2][2].xxxx\n"
|
||||||
|
"EMIT IMM[0].xxxx\n"
|
||||||
|
"END\n";
|
||||||
|
struct tgsi_token tokens[1000];
|
||||||
|
struct pipe_shader_state state = {tokens};
|
||||||
|
|
||||||
|
if (!tgsi_text_translate(text, tokens, Elements(tokens))) {
|
||||||
|
assert(0);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return pipe->create_gs_state(pipe, &state);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make simple fragment texture shader:
|
* Make simple fragment texture shader:
|
||||||
|
@@ -59,6 +59,12 @@ util_make_vertex_passthrough_shader_with_so(struct pipe_context *pipe,
|
|||||||
extern void *
|
extern void *
|
||||||
util_make_layered_clear_vertex_shader(struct pipe_context *pipe);
|
util_make_layered_clear_vertex_shader(struct pipe_context *pipe);
|
||||||
|
|
||||||
|
extern void *
|
||||||
|
util_make_layered_clear_helper_vertex_shader(struct pipe_context *pipe);
|
||||||
|
|
||||||
|
extern void *
|
||||||
|
util_make_layered_clear_geometry_shader(struct pipe_context *pipe);
|
||||||
|
|
||||||
extern void *
|
extern void *
|
||||||
util_make_fragment_tex_shader_writemask(struct pipe_context *pipe,
|
util_make_fragment_tex_shader_writemask(struct pipe_context *pipe,
|
||||||
unsigned tex_target,
|
unsigned tex_target,
|
||||||
|
@@ -176,7 +176,7 @@
|
|||||||
#define HAVE_ASPRINTF 1 /* not needed */
|
#define HAVE_ASPRINTF 1 /* not needed */
|
||||||
#define HAVE_STDARG_H 1
|
#define HAVE_STDARG_H 1
|
||||||
#define HAVE_STDDEF_H 1
|
#define HAVE_STDDEF_H 1
|
||||||
#define HAVE_STDINT_H 0
|
#define HAVE_STDINT_H 1
|
||||||
#define HAVE_STDLIB_H 1
|
#define HAVE_STDLIB_H 1
|
||||||
#define HAVE_INTTYPES_H 0
|
#define HAVE_INTTYPES_H 0
|
||||||
#define HAVE_LOCALE_H 0
|
#define HAVE_LOCALE_H 0
|
||||||
|
@@ -13,7 +13,7 @@ The rules-ng-ng source files this header was generated from are:
|
|||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10347 bytes, from 2014-10-01 18:55:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10347 bytes, from 2014-10-01 18:55:57)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14960 bytes, from 2014-07-27 17:22:13)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14960 bytes, from 2014-07-27 17:22:13)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 60533 bytes, from 2014-10-15 18:32:43)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64771 bytes, from 2015-03-15 21:55:57)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 41068 bytes, from 2014-08-01 12:22:48)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 41068 bytes, from 2014-08-01 12:22:48)
|
||||||
|
|
||||||
Copyright (C) 2013-2014 by the following authors:
|
Copyright (C) 2013-2014 by the following authors:
|
||||||
|
@@ -13,7 +13,7 @@ The rules-ng-ng source files this header was generated from are:
|
|||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10347 bytes, from 2014-10-01 18:55:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10347 bytes, from 2014-10-01 18:55:57)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14960 bytes, from 2014-07-27 17:22:13)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14960 bytes, from 2014-07-27 17:22:13)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 60533 bytes, from 2014-10-15 18:32:43)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64771 bytes, from 2015-03-15 21:55:57)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 41068 bytes, from 2014-08-01 12:22:48)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 41068 bytes, from 2014-08-01 12:22:48)
|
||||||
|
|
||||||
Copyright (C) 2013-2014 by the following authors:
|
Copyright (C) 2013-2014 by the following authors:
|
||||||
@@ -2572,7 +2572,7 @@ static inline uint32_t A3XX_TEX_CONST_2_SWAP(enum a3xx_color_swap val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define REG_A3XX_TEX_CONST_3 0x00000003
|
#define REG_A3XX_TEX_CONST_3 0x00000003
|
||||||
#define A3XX_TEX_CONST_3_LAYERSZ1__MASK 0x0000000f
|
#define A3XX_TEX_CONST_3_LAYERSZ1__MASK 0x00001fff
|
||||||
#define A3XX_TEX_CONST_3_LAYERSZ1__SHIFT 0
|
#define A3XX_TEX_CONST_3_LAYERSZ1__SHIFT 0
|
||||||
static inline uint32_t A3XX_TEX_CONST_3_LAYERSZ1(uint32_t val)
|
static inline uint32_t A3XX_TEX_CONST_3_LAYERSZ1(uint32_t val)
|
||||||
{
|
{
|
||||||
|
@@ -105,8 +105,7 @@ fd3_blend_state_create(struct pipe_context *pctx,
|
|||||||
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(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;
|
|
||||||
|
|
||||||
so->rb_mrt[i].control =
|
so->rb_mrt[i].control =
|
||||||
A3XX_RB_MRT_CONTROL_ROP_CODE(rop) |
|
A3XX_RB_MRT_CONTROL_ROP_CODE(rop) |
|
||||||
|
@@ -566,16 +566,20 @@ fd3_emit_state(struct fd_context *ctx, struct fd_ringbuffer *ring,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((dirty & FD_DIRTY_BLEND) && ctx->blend) {
|
if ((dirty & (FD_DIRTY_BLEND | FD_DIRTY_FRAMEBUFFER)) && ctx->blend) {
|
||||||
struct fd3_blend_stateobj *blend = fd3_blend_stateobj(ctx->blend);
|
struct fd3_blend_stateobj *blend = fd3_blend_stateobj(ctx->blend);
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(blend->rb_mrt); i++) {
|
for (i = 0; i < ARRAY_SIZE(blend->rb_mrt); i++) {
|
||||||
|
bool is_float = util_format_is_float(
|
||||||
|
pipe_surface_format(ctx->framebuffer.cbufs[i]));
|
||||||
|
|
||||||
OUT_PKT0(ring, REG_A3XX_RB_MRT_CONTROL(i), 1);
|
OUT_PKT0(ring, REG_A3XX_RB_MRT_CONTROL(i), 1);
|
||||||
OUT_RING(ring, blend->rb_mrt[i].control);
|
OUT_RING(ring, blend->rb_mrt[i].control);
|
||||||
|
|
||||||
OUT_PKT0(ring, REG_A3XX_RB_MRT_BLEND_CONTROL(i), 1);
|
OUT_PKT0(ring, REG_A3XX_RB_MRT_BLEND_CONTROL(i), 1);
|
||||||
OUT_RING(ring, blend->rb_mrt[i].blend_control);
|
OUT_RING(ring, blend->rb_mrt[i].blend_control |
|
||||||
|
COND(!is_float, A3XX_RB_MRT_BLEND_CONTROL_CLAMP_ENABLE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -13,7 +13,7 @@ The rules-ng-ng source files this header was generated from are:
|
|||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10347 bytes, from 2014-10-01 18:55:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10347 bytes, from 2014-10-01 18:55:57)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14960 bytes, from 2014-07-27 17:22:13)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14960 bytes, from 2014-07-27 17:22:13)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 60533 bytes, from 2014-10-15 18:32:43)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64771 bytes, from 2015-03-15 21:55:57)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 41068 bytes, from 2014-08-01 12:22:48)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 41068 bytes, from 2014-08-01 12:22:48)
|
||||||
|
|
||||||
Copyright (C) 2013-2014 by the following authors:
|
Copyright (C) 2013-2014 by the following authors:
|
||||||
|
@@ -13,7 +13,7 @@ The rules-ng-ng source files this header was generated from are:
|
|||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10347 bytes, from 2014-10-01 18:55:57)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 10347 bytes, from 2014-10-01 18:55:57)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14960 bytes, from 2014-07-27 17:22:13)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14960 bytes, from 2014-07-27 17:22:13)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 60533 bytes, from 2014-10-15 18:32:43)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 64771 bytes, from 2015-03-15 21:55:57)
|
||||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 41068 bytes, from 2014-08-01 12:22:48)
|
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 41068 bytes, from 2014-08-01 12:22:48)
|
||||||
|
|
||||||
Copyright (C) 2013-2014 by the following authors:
|
Copyright (C) 2013-2014 by the following authors:
|
||||||
|
@@ -199,7 +199,7 @@ setup_slices(struct fd_resource *rsc)
|
|||||||
for (level = 0; level <= prsc->last_level; level++) {
|
for (level = 0; level <= prsc->last_level; level++) {
|
||||||
struct fd_resource_slice *slice = fd_resource_slice(rsc, level);
|
struct fd_resource_slice *slice = fd_resource_slice(rsc, level);
|
||||||
|
|
||||||
slice->pitch = align(width, 32);
|
slice->pitch = width = align(width, 32);
|
||||||
slice->offset = size;
|
slice->offset = size;
|
||||||
slice->size0 = slice->pitch * height * rsc->cpp;
|
slice->size0 = slice->pitch * height * rsc->cpp;
|
||||||
|
|
||||||
|
@@ -123,12 +123,12 @@ fd_set_framebuffer_state(struct pipe_context *pctx,
|
|||||||
|
|
||||||
fd_context_render(pctx);
|
fd_context_render(pctx);
|
||||||
|
|
||||||
util_copy_framebuffer_state(cso, framebuffer);
|
|
||||||
|
|
||||||
if ((cso->width != framebuffer->width) ||
|
if ((cso->width != framebuffer->width) ||
|
||||||
(cso->height != framebuffer->height))
|
(cso->height != framebuffer->height))
|
||||||
ctx->needs_rb_fbd = true;
|
ctx->needs_rb_fbd = true;
|
||||||
|
|
||||||
|
util_copy_framebuffer_state(cso, framebuffer);
|
||||||
|
|
||||||
ctx->dirty |= FD_DIRTY_FRAMEBUFFER;
|
ctx->dirty |= FD_DIRTY_FRAMEBUFFER;
|
||||||
|
|
||||||
ctx->disabled_scissor.minx = 0;
|
ctx->disabled_scissor.minx = 0;
|
||||||
|
@@ -1421,6 +1421,7 @@ trans_txq(const struct instr_translater *t,
|
|||||||
struct tgsi_dst_register *dst = &inst->Dst[0].Register;
|
struct tgsi_dst_register *dst = &inst->Dst[0].Register;
|
||||||
struct tgsi_src_register *level = &inst->Src[0].Register;
|
struct tgsi_src_register *level = &inst->Src[0].Register;
|
||||||
struct tgsi_src_register *samp = &inst->Src[1].Register;
|
struct tgsi_src_register *samp = &inst->Src[1].Register;
|
||||||
|
const struct target_info *tgt = &tex_targets[inst->Texture.Texture];
|
||||||
struct tex_info tinf;
|
struct tex_info tinf;
|
||||||
|
|
||||||
memset(&tinf, 0, sizeof(tinf));
|
memset(&tinf, 0, sizeof(tinf));
|
||||||
@@ -1434,8 +1435,67 @@ trans_txq(const struct instr_translater *t,
|
|||||||
instr->cat5.tex = samp->Index;
|
instr->cat5.tex = samp->Index;
|
||||||
instr->flags |= tinf.flags;
|
instr->flags |= tinf.flags;
|
||||||
|
|
||||||
add_dst_reg_wrmask(ctx, instr, dst, 0, dst->WriteMask);
|
if (tgt->array && (dst->WriteMask & (1 << tgt->dims))) {
|
||||||
add_src_reg_wrmask(ctx, instr, level, level->SwizzleX, 0x1);
|
/* Array size actually ends up in .w rather than .z. This doesn't
|
||||||
|
* matter for miplevel 0, but for higher mips the value in z is
|
||||||
|
* minified whereas w stays. Also, the value in TEX_CONST_3_DEPTH is
|
||||||
|
* returned, which means that we have to add 1 to it for arrays.
|
||||||
|
*/
|
||||||
|
struct tgsi_dst_register tmp_dst;
|
||||||
|
struct tgsi_src_register *tmp_src;
|
||||||
|
type_t type_mov = get_utype(ctx);
|
||||||
|
|
||||||
|
tmp_src = get_internal_temp(ctx, &tmp_dst);
|
||||||
|
add_dst_reg_wrmask(ctx, instr, &tmp_dst, 0,
|
||||||
|
dst->WriteMask | TGSI_WRITEMASK_W);
|
||||||
|
add_src_reg_wrmask(ctx, instr, level, level->SwizzleX, 0x1);
|
||||||
|
|
||||||
|
if (dst->WriteMask & TGSI_WRITEMASK_X) {
|
||||||
|
instr = instr_create(ctx, 1, 0);
|
||||||
|
instr->cat1.src_type = type_mov;
|
||||||
|
instr->cat1.dst_type = type_mov;
|
||||||
|
add_dst_reg(ctx, instr, dst, 0);
|
||||||
|
add_src_reg(ctx, instr, tmp_src, src_swiz(tmp_src, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tgt->dims == 2) {
|
||||||
|
if (dst->WriteMask & TGSI_WRITEMASK_Y) {
|
||||||
|
instr = instr_create(ctx, 1, 0);
|
||||||
|
instr->cat1.src_type = type_mov;
|
||||||
|
instr->cat1.dst_type = type_mov;
|
||||||
|
add_dst_reg(ctx, instr, dst, 1);
|
||||||
|
add_src_reg(ctx, instr, tmp_src, src_swiz(tmp_src, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
instr = instr_create(ctx, 2, OPC_ADD_U);
|
||||||
|
add_dst_reg(ctx, instr, dst, tgt->dims);
|
||||||
|
add_src_reg(ctx, instr, tmp_src, src_swiz(tmp_src, 3));
|
||||||
|
ir3_reg_create(instr, 0, IR3_REG_IMMED)->iim_val = 1;
|
||||||
|
} else {
|
||||||
|
add_dst_reg_wrmask(ctx, instr, dst, 0, dst->WriteMask);
|
||||||
|
add_src_reg_wrmask(ctx, instr, level, level->SwizzleX, 0x1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dst->WriteMask & TGSI_WRITEMASK_W) {
|
||||||
|
/* The # of levels comes from getinfo.z. We need to add 1 to it, since
|
||||||
|
* the value in TEX_CONST_0 is zero-based.
|
||||||
|
*/
|
||||||
|
struct tgsi_dst_register tmp_dst;
|
||||||
|
struct tgsi_src_register *tmp_src;
|
||||||
|
|
||||||
|
tmp_src = get_internal_temp(ctx, &tmp_dst);
|
||||||
|
instr = instr_create(ctx, 5, OPC_GETINFO);
|
||||||
|
instr->cat5.type = get_utype(ctx);
|
||||||
|
instr->cat5.samp = samp->Index;
|
||||||
|
instr->cat5.tex = samp->Index;
|
||||||
|
add_dst_reg_wrmask(ctx, instr, &tmp_dst, 0, TGSI_WRITEMASK_Z);
|
||||||
|
|
||||||
|
instr = instr_create(ctx, 2, OPC_ADD_U);
|
||||||
|
add_dst_reg(ctx, instr, dst, 3);
|
||||||
|
add_src_reg(ctx, instr, tmp_src, src_swiz(tmp_src, 2));
|
||||||
|
ir3_reg_create(instr, 0, IR3_REG_IMMED)->iim_val = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DDX/DDY */
|
/* DDX/DDY */
|
||||||
@@ -2112,7 +2172,7 @@ trans_cov(const struct instr_translater *t,
|
|||||||
* madsh.m16 tmp1, a, b, tmp0 (mul-add shift high mix, i.e. ah * bl << 16)
|
* madsh.m16 tmp1, a, b, tmp0 (mul-add shift high mix, i.e. ah * bl << 16)
|
||||||
* madsh.m16 dst, b, a, tmp1 (i.e. al * bh << 16)
|
* madsh.m16 dst, b, a, tmp1 (i.e. al * bh << 16)
|
||||||
*
|
*
|
||||||
* For UMAD, replace first mull.u with mad.u16.
|
* For UMAD, add in the extra argument after mull.u.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
trans_umul(const struct instr_translater *t,
|
trans_umul(const struct instr_translater *t,
|
||||||
@@ -2135,16 +2195,16 @@ trans_umul(const struct instr_translater *t,
|
|||||||
if (is_rel_or_const(b))
|
if (is_rel_or_const(b))
|
||||||
b = get_unconst(ctx, b);
|
b = get_unconst(ctx, b);
|
||||||
|
|
||||||
if (t->tgsi_opc == TGSI_OPCODE_UMUL) {
|
/* mull.u tmp0, a, b */
|
||||||
/* mull.u tmp0, a, b */
|
instr = instr_create(ctx, 2, OPC_MULL_U);
|
||||||
instr = instr_create(ctx, 2, OPC_MULL_U);
|
vectorize(ctx, instr, &tmp0_dst, 2, a, 0, b, 0);
|
||||||
vectorize(ctx, instr, &tmp0_dst, 2, a, 0, b, 0);
|
|
||||||
} else {
|
if (t->tgsi_opc == TGSI_OPCODE_UMAD) {
|
||||||
struct tgsi_src_register *c = &inst->Src[2].Register;
|
struct tgsi_src_register *c = &inst->Src[2].Register;
|
||||||
|
|
||||||
/* mad.u16 tmp0, a, b, c */
|
/* add.u tmp0, tmp0, c */
|
||||||
instr = instr_create(ctx, 3, OPC_MAD_U16);
|
instr = instr_create(ctx, 2, OPC_ADD_U);
|
||||||
vectorize(ctx, instr, &tmp0_dst, 3, a, 0, b, 0, c, 0);
|
vectorize(ctx, instr, &tmp0_dst, 2, tmp0_src, 0, c, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* madsh.m16 tmp1, a, b, tmp0 */
|
/* madsh.m16 tmp1, a, b, tmp0 */
|
||||||
@@ -2350,6 +2410,9 @@ trans_idiv(const struct instr_translater *t,
|
|||||||
if (t->tgsi_opc == TGSI_OPCODE_MOD || t->tgsi_opc == TGSI_OPCODE_UMOD) {
|
if (t->tgsi_opc == TGSI_OPCODE_MOD || t->tgsi_opc == TGSI_OPCODE_UMOD) {
|
||||||
/* The division result will have ended up in q. */
|
/* The division result will have ended up in q. */
|
||||||
|
|
||||||
|
if (is_rel_or_const(b))
|
||||||
|
b = get_unconst(ctx, b);
|
||||||
|
|
||||||
/* mull.u r, q, b */
|
/* mull.u r, q, b */
|
||||||
instr = instr_create(ctx, 2, OPC_MULL_U);
|
instr = instr_create(ctx, 2, OPC_MULL_U);
|
||||||
vectorize(ctx, instr, &r_dst, 2, q_src, 0, b, 0);
|
vectorize(ctx, instr, &r_dst, 2, q_src, 0, b, 0);
|
||||||
@@ -3091,7 +3154,7 @@ ir3_compile_shader(struct ir3_shader_variant *so,
|
|||||||
if (key.binning_pass) {
|
if (key.binning_pass) {
|
||||||
for (i = 0, j = 0; i < so->outputs_count; i++) {
|
for (i = 0, j = 0; i < so->outputs_count; i++) {
|
||||||
unsigned name = sem2name(so->outputs[i].semantic);
|
unsigned name = sem2name(so->outputs[i].semantic);
|
||||||
unsigned idx = sem2name(so->outputs[i].semantic);
|
unsigned idx = sem2idx(so->outputs[i].semantic);
|
||||||
|
|
||||||
/* throw away everything but first position/psize */
|
/* throw away everything but first position/psize */
|
||||||
if ((idx == 0) && ((name == TGSI_SEMANTIC_POSITION) ||
|
if ((idx == 0) && ((name == TGSI_SEMANTIC_POSITION) ||
|
||||||
|
@@ -33,6 +33,7 @@
|
|||||||
#include "util/u_pointer.h"
|
#include "util/u_pointer.h"
|
||||||
#include "util/u_memory.h"
|
#include "util/u_memory.h"
|
||||||
#include "util/u_math.h"
|
#include "util/u_math.h"
|
||||||
|
#include "util/u_cpu_detect.h"
|
||||||
|
|
||||||
#include "gallivm/lp_bld.h"
|
#include "gallivm/lp_bld.h"
|
||||||
#include "gallivm/lp_bld_debug.h"
|
#include "gallivm/lp_bld_debug.h"
|
||||||
@@ -332,6 +333,38 @@ build_unary_test_func(struct gallivm_state *gallivm,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Flush denorms to zero.
|
||||||
|
*/
|
||||||
|
static float
|
||||||
|
flush_denorm_to_zero(float val)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* If we have a denorm manually set it to (+-)0.
|
||||||
|
* This is because the reference may or may not do the right thing
|
||||||
|
* otherwise because we want the result according to treating all
|
||||||
|
* denormals as zero (FTZ/DAZ). Not using fpclassify because
|
||||||
|
* a) some compilers are stuck at c89 (msvc)
|
||||||
|
* b) not sure it reliably works with non-standard ftz/daz mode
|
||||||
|
* And, right now we only disable denorms with jited code on x86/sse
|
||||||
|
* (albeit this should be classified as a bug) so to get results which
|
||||||
|
* match we must only flush them to zero here in that case too.
|
||||||
|
*/
|
||||||
|
union fi fi_val;
|
||||||
|
|
||||||
|
fi_val.f = val;
|
||||||
|
|
||||||
|
#if defined(PIPE_ARCH_SSE)
|
||||||
|
if (util_cpu_caps.has_sse) {
|
||||||
|
if ((fi_val.ui & 0x7f800000) == 0) {
|
||||||
|
fi_val.ui &= 0xff800000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return fi_val.f;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Test one LLVM unary arithmetic builder function.
|
* Test one LLVM unary arithmetic builder function.
|
||||||
*/
|
*/
|
||||||
@@ -374,10 +407,13 @@ test_unary(unsigned verbose, FILE *fp, const struct unary_test_t *test)
|
|||||||
|
|
||||||
test_func_jit(out, in);
|
test_func_jit(out, in);
|
||||||
for (i = 0; i < num_vals; ++i) {
|
for (i = 0; i < num_vals; ++i) {
|
||||||
float ref = test->ref(in[i]);
|
float testval, ref;
|
||||||
double error, precision;
|
double error, precision;
|
||||||
bool pass;
|
bool pass;
|
||||||
|
|
||||||
|
testval = flush_denorm_to_zero(in[i]);
|
||||||
|
ref = flush_denorm_to_zero(test->ref(testval));
|
||||||
|
|
||||||
if (util_inf_sign(ref) && util_inf_sign(out[i]) == util_inf_sign(ref)) {
|
if (util_inf_sign(ref) && util_inf_sign(out[i]) == util_inf_sign(ref)) {
|
||||||
error = 0;
|
error = 0;
|
||||||
} else {
|
} else {
|
||||||
|
@@ -924,7 +924,9 @@ CodeEmitterNV50::emitMINMAX(const Instruction *i)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
code[1] |= i->src(0).mod.abs() << 20;
|
code[1] |= i->src(0).mod.abs() << 20;
|
||||||
|
code[1] |= i->src(0).mod.neg() << 26;
|
||||||
code[1] |= i->src(1).mod.abs() << 19;
|
code[1] |= i->src(1).mod.abs() << 19;
|
||||||
|
code[1] |= i->src(1).mod.neg() << 27;
|
||||||
}
|
}
|
||||||
emitForm_MAD(i);
|
emitForm_MAD(i);
|
||||||
}
|
}
|
||||||
|
@@ -2343,9 +2343,12 @@ Converter::handleInstruction(const struct tgsi_full_instruction *insn)
|
|||||||
mkMov(dst0[c], val0);
|
mkMov(dst0[c], val0);
|
||||||
break;
|
break;
|
||||||
case TGSI_OPCODE_ARL:
|
case TGSI_OPCODE_ARL:
|
||||||
|
case TGSI_OPCODE_ARR:
|
||||||
FOR_EACH_DST_ENABLED_CHANNEL(0, c, tgsi) {
|
FOR_EACH_DST_ENABLED_CHANNEL(0, c, tgsi) {
|
||||||
|
const RoundMode rnd =
|
||||||
|
tgsi.getOpcode() == TGSI_OPCODE_ARR ? ROUND_N : ROUND_M;
|
||||||
src0 = fetchSrc(0, c);
|
src0 = fetchSrc(0, c);
|
||||||
mkCvt(OP_CVT, TYPE_S32, dst0[c], TYPE_F32, src0)->rnd = ROUND_M;
|
mkCvt(OP_CVT, TYPE_S32, dst0[c], TYPE_F32, src0)->rnd = rnd;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TGSI_OPCODE_UARL:
|
case TGSI_OPCODE_UARL:
|
||||||
|
@@ -772,7 +772,8 @@ NV50LoweringPreSSA::handleTEX(TexInstruction *i)
|
|||||||
if (i->tex.useOffsets) {
|
if (i->tex.useOffsets) {
|
||||||
for (int c = 0; c < 3; ++c) {
|
for (int c = 0; c < 3; ++c) {
|
||||||
ImmediateValue val;
|
ImmediateValue val;
|
||||||
assert(i->offset[0][c].getImmediate(val));
|
if (!i->offset[0][c].getImmediate(val))
|
||||||
|
assert(!"non-immediate offset");
|
||||||
i->tex.offset[c] = val.reg.data.u32;
|
i->tex.offset[c] = val.reg.data.u32;
|
||||||
i->offset[0][c].set(NULL);
|
i->offset[0][c].set(NULL);
|
||||||
}
|
}
|
||||||
|
@@ -754,7 +754,8 @@ NVC0LoweringPass::handleTEX(TexInstruction *i)
|
|||||||
assert(i->tex.useOffsets == 1);
|
assert(i->tex.useOffsets == 1);
|
||||||
for (c = 0; c < 3; ++c) {
|
for (c = 0; c < 3; ++c) {
|
||||||
ImmediateValue val;
|
ImmediateValue val;
|
||||||
assert(i->offset[0][c].getImmediate(val));
|
if (!i->offset[0][c].getImmediate(val))
|
||||||
|
assert(!"non-immediate offset passed to non-TXG");
|
||||||
imm |= (val.reg.data.u32 & 0xf) << (c * 4);
|
imm |= (val.reg.data.u32 & 0xf) << (c * 4);
|
||||||
}
|
}
|
||||||
if (i->op == OP_TXD && chipset >= NVISA_GK104_CHIPSET) {
|
if (i->op == OP_TXD && chipset >= NVISA_GK104_CHIPSET) {
|
||||||
|
@@ -415,7 +415,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
|
|
||||||
#define NV50_3D_VERTEX_BUFFER_COUNT 0x00000d78
|
#define NV50_3D_VERTEX_BUFFER_COUNT 0x00000d78
|
||||||
|
|
||||||
#define NV50_3D_UNK0D7C 0x00000d7c
|
#define NV50_3D_DEPTH_CLIP_NEGATIVE_Z 0x00000d7c
|
||||||
|
|
||||||
#define NV50_3D_CLEAR_COLOR(i0) (0x00000d80 + 0x4*(i0))
|
#define NV50_3D_CLEAR_COLOR(i0) (0x00000d80 + 0x4*(i0))
|
||||||
#define NV50_3D_CLEAR_COLOR__ESIZE 0x00000004
|
#define NV50_3D_CLEAR_COLOR__ESIZE 0x00000004
|
||||||
@@ -1708,7 +1708,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
#define NV50_3D_CULL_FACE_BACK 0x00000405
|
#define NV50_3D_CULL_FACE_BACK 0x00000405
|
||||||
#define NV50_3D_CULL_FACE_FRONT_AND_BACK 0x00000408
|
#define NV50_3D_CULL_FACE_FRONT_AND_BACK 0x00000408
|
||||||
|
|
||||||
#define NV50_3D_LINE_LAST_PIXEL 0x00001924
|
#define NV50_3D_PIXEL_CENTER_INTEGER 0x00001924
|
||||||
|
|
||||||
#define NVA3_3D_FP_MULTISAMPLE 0x00001928
|
#define NVA3_3D_FP_MULTISAMPLE 0x00001928
|
||||||
#define NVA3_3D_FP_MULTISAMPLE_EXPORT_SAMPLE_MASK 0x00000001
|
#define NVA3_3D_FP_MULTISAMPLE_EXPORT_SAMPLE_MASK 0x00000001
|
||||||
|
@@ -180,7 +180,12 @@ nv50_invalidate_resource_storage(struct nouveau_context *ctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res->bind & PIPE_BIND_VERTEX_BUFFER) {
|
if (res->bind & (PIPE_BIND_VERTEX_BUFFER |
|
||||||
|
PIPE_BIND_INDEX_BUFFER |
|
||||||
|
PIPE_BIND_CONSTANT_BUFFER |
|
||||||
|
PIPE_BIND_STREAM_OUTPUT |
|
||||||
|
PIPE_BIND_SAMPLER_VIEW)) {
|
||||||
|
|
||||||
assert(nv50->num_vtxbufs <= PIPE_MAX_ATTRIBS);
|
assert(nv50->num_vtxbufs <= PIPE_MAX_ATTRIBS);
|
||||||
for (i = 0; i < nv50->num_vtxbufs; ++i) {
|
for (i = 0; i < nv50->num_vtxbufs; ++i) {
|
||||||
if (nv50->vtxbuf[i].buffer == res) {
|
if (nv50->vtxbuf[i].buffer == res) {
|
||||||
@@ -190,14 +195,11 @@ nv50_invalidate_resource_storage(struct nouveau_context *ctx,
|
|||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (res->bind & PIPE_BIND_INDEX_BUFFER) {
|
|
||||||
if (nv50->idxbuf.buffer == res)
|
if (nv50->idxbuf.buffer == res)
|
||||||
if (!--ref)
|
if (!--ref)
|
||||||
return ref;
|
return ref;
|
||||||
}
|
|
||||||
|
|
||||||
if (res->bind & PIPE_BIND_SAMPLER_VIEW) {
|
|
||||||
for (s = 0; s < 3; ++s) {
|
for (s = 0; s < 3; ++s) {
|
||||||
assert(nv50->num_textures[s] <= PIPE_MAX_SAMPLERS);
|
assert(nv50->num_textures[s] <= PIPE_MAX_SAMPLERS);
|
||||||
for (i = 0; i < nv50->num_textures[s]; ++i) {
|
for (i = 0; i < nv50->num_textures[s]; ++i) {
|
||||||
@@ -210,12 +212,11 @@ nv50_invalidate_resource_storage(struct nouveau_context *ctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (res->bind & PIPE_BIND_CONSTANT_BUFFER) {
|
|
||||||
for (s = 0; s < 3; ++s) {
|
for (s = 0; s < 3; ++s) {
|
||||||
assert(nv50->num_vtxbufs <= NV50_MAX_PIPE_CONSTBUFS);
|
for (i = 0; i < NV50_MAX_PIPE_CONSTBUFS; ++i) {
|
||||||
for (i = 0; i < nv50->num_vtxbufs; ++i) {
|
if (!(nv50->constbuf_valid[s] & (1 << i)))
|
||||||
|
continue;
|
||||||
if (!nv50->constbuf[s][i].user &&
|
if (!nv50->constbuf[s][i].user &&
|
||||||
nv50->constbuf[s][i].u.buf == res) {
|
nv50->constbuf[s][i].u.buf == res) {
|
||||||
nv50->dirty |= NV50_NEW_CONSTBUF;
|
nv50->dirty |= NV50_NEW_CONSTBUF;
|
||||||
|
@@ -173,6 +173,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE:
|
case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE:
|
||||||
case PIPE_CAP_SAMPLER_VIEW_TARGET:
|
case PIPE_CAP_SAMPLER_VIEW_TARGET:
|
||||||
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
|
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
|
||||||
|
case PIPE_CAP_CLIP_HALFZ:
|
||||||
return 1;
|
return 1;
|
||||||
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
||||||
return 1; /* class_3d >= NVA0_3D_CLASS; */
|
return 1; /* class_3d >= NVA0_3D_CLASS; */
|
||||||
@@ -204,7 +205,6 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION:
|
case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION:
|
||||||
case PIPE_CAP_COMPUTE:
|
case PIPE_CAP_COMPUTE:
|
||||||
case PIPE_CAP_DRAW_INDIRECT:
|
case PIPE_CAP_DRAW_INDIRECT:
|
||||||
case PIPE_CAP_CLIP_HALFZ:
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case PIPE_CAP_VENDOR_ID:
|
case PIPE_CAP_VENDOR_ID:
|
||||||
@@ -461,8 +461,6 @@ nv50_screen_init_hwctx(struct nv50_screen *screen)
|
|||||||
PUSH_DATA (push, 0);
|
PUSH_DATA (push, 0);
|
||||||
BEGIN_NV04(push, NV50_3D(PRIM_RESTART_WITH_DRAW_ARRAYS), 1);
|
BEGIN_NV04(push, NV50_3D(PRIM_RESTART_WITH_DRAW_ARRAYS), 1);
|
||||||
PUSH_DATA (push, 1);
|
PUSH_DATA (push, 1);
|
||||||
BEGIN_NV04(push, NV50_3D(LINE_LAST_PIXEL), 1);
|
|
||||||
PUSH_DATA (push, 0);
|
|
||||||
BEGIN_NV04(push, NV50_3D(BLEND_SEPARATE_ALPHA), 1);
|
BEGIN_NV04(push, NV50_3D(BLEND_SEPARATE_ALPHA), 1);
|
||||||
PUSH_DATA (push, 1);
|
PUSH_DATA (push, 1);
|
||||||
|
|
||||||
@@ -609,6 +607,13 @@ nv50_screen_init_hwctx(struct nv50_screen *screen)
|
|||||||
BEGIN_NV04(push, NV50_3D(EDGEFLAG), 1);
|
BEGIN_NV04(push, NV50_3D(EDGEFLAG), 1);
|
||||||
PUSH_DATA (push, 1);
|
PUSH_DATA (push, 1);
|
||||||
|
|
||||||
|
BEGIN_NV04(push, NV50_3D(VB_ELEMENT_BASE), 1);
|
||||||
|
PUSH_DATA (push, 0);
|
||||||
|
if (screen->base.class_3d >= NV84_3D_CLASS) {
|
||||||
|
BEGIN_NV04(push, SUBC_3D(NV84_3D_VERTEX_ID_BASE), 1);
|
||||||
|
PUSH_DATA (push, 0);
|
||||||
|
}
|
||||||
|
|
||||||
PUSH_KICK (push);
|
PUSH_KICK (push);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -57,10 +57,6 @@
|
|||||||
* ! pipe_rasterizer_state.flatshade_first also applies to QUADS
|
* ! pipe_rasterizer_state.flatshade_first also applies to QUADS
|
||||||
* (There's a GL query for that, forcing an exception is just ridiculous.)
|
* (There's a GL query for that, forcing an exception is just ridiculous.)
|
||||||
*
|
*
|
||||||
* ! pipe_rasterizer_state.half_pixel_center is ignored - pixel centers
|
|
||||||
* are always at half integer coordinates and the top-left rule applies
|
|
||||||
* (There does not seem to be a hardware switch for this.)
|
|
||||||
*
|
|
||||||
* ! pipe_rasterizer_state.sprite_coord_enable is masked with 0xff on NVC0
|
* ! pipe_rasterizer_state.sprite_coord_enable is masked with 0xff on NVC0
|
||||||
* (The hardware only has 8 slots meant for TexCoord and we have to assign
|
* (The hardware only has 8 slots meant for TexCoord and we have to assign
|
||||||
* in advance to maintain elegant separate shader objects.)
|
* in advance to maintain elegant separate shader objects.)
|
||||||
@@ -221,7 +217,7 @@ nv50_blend_state_delete(struct pipe_context *pipe, void *hwcso)
|
|||||||
FREE(hwcso);
|
FREE(hwcso);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NOTE: ignoring line_last_pixel, using FALSE (set on screen init) */
|
/* NOTE: ignoring line_last_pixel */
|
||||||
static void *
|
static void *
|
||||||
nv50_rasterizer_state_create(struct pipe_context *pipe,
|
nv50_rasterizer_state_create(struct pipe_context *pipe,
|
||||||
const struct pipe_rasterizer_state *cso)
|
const struct pipe_rasterizer_state *cso)
|
||||||
@@ -333,6 +329,12 @@ nv50_rasterizer_state_create(struct pipe_context *pipe,
|
|||||||
SB_BEGIN_3D(so, VIEW_VOLUME_CLIP_CTRL, 1);
|
SB_BEGIN_3D(so, VIEW_VOLUME_CLIP_CTRL, 1);
|
||||||
SB_DATA (so, reg);
|
SB_DATA (so, reg);
|
||||||
|
|
||||||
|
SB_BEGIN_3D(so, DEPTH_CLIP_NEGATIVE_Z, 1);
|
||||||
|
SB_DATA (so, cso->clip_halfz);
|
||||||
|
|
||||||
|
SB_BEGIN_3D(so, PIXEL_CENTER_INTEGER, 1);
|
||||||
|
SB_DATA (so, !cso->half_pixel_center);
|
||||||
|
|
||||||
assert(so->size <= (sizeof(so->state) / sizeof(so->state[0])));
|
assert(so->size <= (sizeof(so->state) / sizeof(so->state[0])));
|
||||||
return (void *)so;
|
return (void *)so;
|
||||||
}
|
}
|
||||||
|
@@ -25,7 +25,7 @@ struct nv50_blend_stateobj {
|
|||||||
struct nv50_rasterizer_stateobj {
|
struct nv50_rasterizer_stateobj {
|
||||||
struct pipe_rasterizer_state pipe;
|
struct pipe_rasterizer_state pipe;
|
||||||
int size;
|
int size;
|
||||||
uint32_t state[48];
|
uint32_t state[49];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct nv50_zsa_stateobj {
|
struct nv50_zsa_stateobj {
|
||||||
|
@@ -472,6 +472,10 @@ nv50_draw_arrays(struct nv50_context *nv50,
|
|||||||
if (nv50->state.index_bias) {
|
if (nv50->state.index_bias) {
|
||||||
BEGIN_NV04(push, NV50_3D(VB_ELEMENT_BASE), 1);
|
BEGIN_NV04(push, NV50_3D(VB_ELEMENT_BASE), 1);
|
||||||
PUSH_DATA (push, 0);
|
PUSH_DATA (push, 0);
|
||||||
|
if (nv50->screen->base.class_3d >= NV84_3D_CLASS) {
|
||||||
|
BEGIN_NV04(push, SUBC_3D(NV84_3D_VERTEX_ID_BASE), 1);
|
||||||
|
PUSH_DATA (push, 0);
|
||||||
|
}
|
||||||
nv50->state.index_bias = 0;
|
nv50->state.index_bias = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -594,6 +598,10 @@ nv50_draw_elements(struct nv50_context *nv50, boolean shorten,
|
|||||||
if (index_bias != nv50->state.index_bias) {
|
if (index_bias != nv50->state.index_bias) {
|
||||||
BEGIN_NV04(push, NV50_3D(VB_ELEMENT_BASE), 1);
|
BEGIN_NV04(push, NV50_3D(VB_ELEMENT_BASE), 1);
|
||||||
PUSH_DATA (push, index_bias);
|
PUSH_DATA (push, index_bias);
|
||||||
|
if (nv50->screen->base.class_3d >= NV84_3D_CLASS) {
|
||||||
|
BEGIN_NV04(push, SUBC_3D(NV84_3D_VERTEX_ID_BASE), 1);
|
||||||
|
PUSH_DATA (push, index_bias);
|
||||||
|
}
|
||||||
nv50->state.index_bias = index_bias;
|
nv50->state.index_bias = index_bias;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -227,6 +227,7 @@ locn_0f_ts:
|
|||||||
/* NVC0_3D_MACRO_DRAW_ELEMENTS_INDIRECT
|
/* NVC0_3D_MACRO_DRAW_ELEMENTS_INDIRECT
|
||||||
*
|
*
|
||||||
* NOTE: Saves and restores VB_ELEMENT,INSTANCE_BASE.
|
* NOTE: Saves and restores VB_ELEMENT,INSTANCE_BASE.
|
||||||
|
* Forcefully sets VERTEX_ID_BASE to the value of VB_ELEMENT_BASE.
|
||||||
*
|
*
|
||||||
* arg = mode
|
* arg = mode
|
||||||
* parm[0] = count
|
* parm[0] = count
|
||||||
@@ -247,6 +248,8 @@ locn_0f_ts:
|
|||||||
maddr 0x150d /* VB_ELEMENT,INSTANCE_BASE */
|
maddr 0x150d /* VB_ELEMENT,INSTANCE_BASE */
|
||||||
send $r4
|
send $r4
|
||||||
send $r5
|
send $r5
|
||||||
|
maddr 0x446
|
||||||
|
send $r4
|
||||||
mov $r4 0x1
|
mov $r4 0x1
|
||||||
dei_again:
|
dei_again:
|
||||||
maddr 0x586 /* VERTEX_BEGIN_GL */
|
maddr 0x586 /* VERTEX_BEGIN_GL */
|
||||||
@@ -258,8 +261,10 @@ dei_again:
|
|||||||
branz $r2 #dei_again
|
branz $r2 #dei_again
|
||||||
mov $r1 (extrinsrt $r1 $r4 0 1 26) /* set INSTANCE_NEXT */
|
mov $r1 (extrinsrt $r1 $r4 0 1 26) /* set INSTANCE_NEXT */
|
||||||
maddr 0x150d /* VB_ELEMENT,INSTANCE_BASE */
|
maddr 0x150d /* VB_ELEMENT,INSTANCE_BASE */
|
||||||
exit send $r6
|
send $r6
|
||||||
send $r7
|
send $r7
|
||||||
|
exit maddr 0x446
|
||||||
|
send $r6
|
||||||
dei_end:
|
dei_end:
|
||||||
exit
|
exit
|
||||||
nop
|
nop
|
||||||
|
@@ -128,16 +128,18 @@ uint32_t mme9097_draw_elts_indirect[] = {
|
|||||||
0x00000301,
|
0x00000301,
|
||||||
0x00000201,
|
0x00000201,
|
||||||
0x017dc451,
|
0x017dc451,
|
||||||
/* 0x000c: dei_again */
|
/* 0x000e: dei_again */
|
||||||
0x00002431,
|
0x00002431,
|
||||||
0x0004d007,
|
0x0005d007,
|
||||||
/* 0x0017: dei_end */
|
|
||||||
0x00000501,
|
0x00000501,
|
||||||
|
/* 0x001b: dei_end */
|
||||||
0x01434615,
|
0x01434615,
|
||||||
0x01438715,
|
0x01438715,
|
||||||
0x05434021,
|
0x05434021,
|
||||||
0x00002041,
|
0x00002041,
|
||||||
0x00002841,
|
0x00002841,
|
||||||
|
0x01118021,
|
||||||
|
0x00002041,
|
||||||
0x00004411,
|
0x00004411,
|
||||||
0x01618021,
|
0x01618021,
|
||||||
0x00000841,
|
0x00000841,
|
||||||
@@ -148,8 +150,10 @@ uint32_t mme9097_draw_elts_indirect[] = {
|
|||||||
0xfffe9017,
|
0xfffe9017,
|
||||||
0xd0410912,
|
0xd0410912,
|
||||||
0x05434021,
|
0x05434021,
|
||||||
0x000030c1,
|
0x00003041,
|
||||||
0x00003841,
|
0x00003841,
|
||||||
|
0x011180a1,
|
||||||
|
0x00003041,
|
||||||
0x00000091,
|
0x00000091,
|
||||||
0x00000011,
|
0x00000011,
|
||||||
};
|
};
|
||||||
|
@@ -318,6 +318,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
|
|
||||||
#define NVC0_3D_VERTEX_BUFFER_COUNT 0x00000d78
|
#define NVC0_3D_VERTEX_BUFFER_COUNT 0x00000d78
|
||||||
|
|
||||||
|
#define NVC0_3D_DEPTH_CLIP_NEGATIVE_Z 0x00000d7c
|
||||||
|
|
||||||
#define NVC0_3D_CLEAR_COLOR(i0) (0x00000d80 + 0x4*(i0))
|
#define NVC0_3D_CLEAR_COLOR(i0) (0x00000d80 + 0x4*(i0))
|
||||||
#define NVC0_3D_CLEAR_COLOR__ESIZE 0x00000004
|
#define NVC0_3D_CLEAR_COLOR__ESIZE 0x00000004
|
||||||
#define NVC0_3D_CLEAR_COLOR__LEN 0x00000004
|
#define NVC0_3D_CLEAR_COLOR__LEN 0x00000004
|
||||||
@@ -1039,7 +1041,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
#define NVC0_3D_CULL_FACE_BACK 0x00000405
|
#define NVC0_3D_CULL_FACE_BACK 0x00000405
|
||||||
#define NVC0_3D_CULL_FACE_FRONT_AND_BACK 0x00000408
|
#define NVC0_3D_CULL_FACE_FRONT_AND_BACK 0x00000408
|
||||||
|
|
||||||
#define NVC0_3D_LINE_LAST_PIXEL 0x00001924
|
#define NVC0_3D_PIXEL_CENTER_INTEGER 0x00001924
|
||||||
|
|
||||||
#define NVC0_3D_VIEWPORT_TRANSFORM_EN 0x0000192c
|
#define NVC0_3D_VIEWPORT_TRANSFORM_EN 0x0000192c
|
||||||
|
|
||||||
|
@@ -196,7 +196,12 @@ nvc0_invalidate_resource_storage(struct nouveau_context *ctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res->bind & PIPE_BIND_VERTEX_BUFFER) {
|
if (res->bind & (PIPE_BIND_VERTEX_BUFFER |
|
||||||
|
PIPE_BIND_INDEX_BUFFER |
|
||||||
|
PIPE_BIND_CONSTANT_BUFFER |
|
||||||
|
PIPE_BIND_STREAM_OUTPUT |
|
||||||
|
PIPE_BIND_COMMAND_ARGS_BUFFER |
|
||||||
|
PIPE_BIND_SAMPLER_VIEW)) {
|
||||||
for (i = 0; i < nvc0->num_vtxbufs; ++i) {
|
for (i = 0; i < nvc0->num_vtxbufs; ++i) {
|
||||||
if (nvc0->vtxbuf[i].buffer == res) {
|
if (nvc0->vtxbuf[i].buffer == res) {
|
||||||
nvc0->dirty |= NVC0_NEW_ARRAYS;
|
nvc0->dirty |= NVC0_NEW_ARRAYS;
|
||||||
@@ -205,17 +210,14 @@ nvc0_invalidate_resource_storage(struct nouveau_context *ctx,
|
|||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (res->bind & PIPE_BIND_INDEX_BUFFER) {
|
|
||||||
if (nvc0->idxbuf.buffer == res) {
|
if (nvc0->idxbuf.buffer == res) {
|
||||||
nvc0->dirty |= NVC0_NEW_IDXBUF;
|
nvc0->dirty |= NVC0_NEW_IDXBUF;
|
||||||
nouveau_bufctx_reset(nvc0->bufctx_3d, NVC0_BIND_IDX);
|
nouveau_bufctx_reset(nvc0->bufctx_3d, NVC0_BIND_IDX);
|
||||||
if (!--ref)
|
if (!--ref)
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (res->bind & PIPE_BIND_SAMPLER_VIEW) {
|
|
||||||
for (s = 0; s < 5; ++s) {
|
for (s = 0; s < 5; ++s) {
|
||||||
for (i = 0; i < nvc0->num_textures[s]; ++i) {
|
for (i = 0; i < nvc0->num_textures[s]; ++i) {
|
||||||
if (nvc0->textures[s][i] &&
|
if (nvc0->textures[s][i] &&
|
||||||
@@ -228,11 +230,11 @@ nvc0_invalidate_resource_storage(struct nouveau_context *ctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (res->bind & PIPE_BIND_CONSTANT_BUFFER) {
|
|
||||||
for (s = 0; s < 5; ++s) {
|
for (s = 0; s < 5; ++s) {
|
||||||
for (i = 0; i < nvc0->num_vtxbufs; ++i) {
|
for (i = 0; i < NVC0_MAX_PIPE_CONSTBUFS; ++i) {
|
||||||
|
if (!(nvc0->constbuf_valid[s] & (1 << i)))
|
||||||
|
continue;
|
||||||
if (!nvc0->constbuf[s][i].user &&
|
if (!nvc0->constbuf[s][i].user &&
|
||||||
nvc0->constbuf[s][i].u.buf == res) {
|
nvc0->constbuf[s][i].u.buf == res) {
|
||||||
nvc0->dirty |= NVC0_NEW_CONSTBUF;
|
nvc0->dirty |= NVC0_NEW_CONSTBUF;
|
||||||
|
@@ -171,6 +171,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE:
|
case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE:
|
||||||
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
|
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
|
||||||
case PIPE_CAP_SAMPLER_VIEW_TARGET:
|
case PIPE_CAP_SAMPLER_VIEW_TARGET:
|
||||||
|
case PIPE_CAP_CLIP_HALFZ:
|
||||||
return 1;
|
return 1;
|
||||||
case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
|
case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
|
||||||
return (class_3d >= NVE4_3D_CLASS) ? 1 : 0;
|
return (class_3d >= NVE4_3D_CLASS) ? 1 : 0;
|
||||||
@@ -188,7 +189,6 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_TGSI_VS_LAYER_VIEWPORT:
|
case PIPE_CAP_TGSI_VS_LAYER_VIEWPORT:
|
||||||
case PIPE_CAP_FAKE_SW_MSAA:
|
case PIPE_CAP_FAKE_SW_MSAA:
|
||||||
case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION:
|
case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION:
|
||||||
case PIPE_CAP_CLIP_HALFZ:
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case PIPE_CAP_VENDOR_ID:
|
case PIPE_CAP_VENDOR_ID:
|
||||||
@@ -786,8 +786,6 @@ nvc0_screen_create(struct nouveau_device *dev)
|
|||||||
PUSH_DATA (push, 0);
|
PUSH_DATA (push, 0);
|
||||||
BEGIN_NVC0(push, NVC0_3D(LINE_WIDTH_SEPARATE), 1);
|
BEGIN_NVC0(push, NVC0_3D(LINE_WIDTH_SEPARATE), 1);
|
||||||
PUSH_DATA (push, 1);
|
PUSH_DATA (push, 1);
|
||||||
BEGIN_NVC0(push, NVC0_3D(LINE_LAST_PIXEL), 1);
|
|
||||||
PUSH_DATA (push, 0);
|
|
||||||
BEGIN_NVC0(push, NVC0_3D(PRIM_RESTART_WITH_DRAW_ARRAYS), 1);
|
BEGIN_NVC0(push, NVC0_3D(PRIM_RESTART_WITH_DRAW_ARRAYS), 1);
|
||||||
PUSH_DATA (push, 1);
|
PUSH_DATA (push, 1);
|
||||||
BEGIN_NVC0(push, NVC0_3D(BLEND_SEPARATE_ALPHA), 1);
|
BEGIN_NVC0(push, NVC0_3D(BLEND_SEPARATE_ALPHA), 1);
|
||||||
|
@@ -252,7 +252,12 @@ nvc0_tfb_validate(struct nvc0_context *nvc0)
|
|||||||
|
|
||||||
for (b = 0; b < nvc0->num_tfbbufs; ++b) {
|
for (b = 0; b < nvc0->num_tfbbufs; ++b) {
|
||||||
struct nvc0_so_target *targ = nvc0_so_target(nvc0->tfbbuf[b]);
|
struct nvc0_so_target *targ = nvc0_so_target(nvc0->tfbbuf[b]);
|
||||||
struct nv04_resource *buf = nv04_resource(targ->pipe.buffer);
|
struct nv04_resource *buf;
|
||||||
|
|
||||||
|
if (!targ) {
|
||||||
|
IMMED_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (tfb)
|
if (tfb)
|
||||||
targ->stride = tfb->stride[b];
|
targ->stride = tfb->stride[b];
|
||||||
@@ -260,6 +265,8 @@ nvc0_tfb_validate(struct nvc0_context *nvc0)
|
|||||||
if (!(nvc0->tfbbuf_dirty & (1 << b)))
|
if (!(nvc0->tfbbuf_dirty & (1 << b)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
buf = nv04_resource(targ->pipe.buffer);
|
||||||
|
|
||||||
if (!targ->clean)
|
if (!targ->clean)
|
||||||
nvc0_query_fifo_wait(push, targ->pq);
|
nvc0_query_fifo_wait(push, targ->pq);
|
||||||
BEGIN_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 5);
|
BEGIN_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 5);
|
||||||
|
@@ -204,7 +204,7 @@ nvc0_blend_state_delete(struct pipe_context *pipe, void *hwcso)
|
|||||||
FREE(hwcso);
|
FREE(hwcso);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NOTE: ignoring line_last_pixel, using FALSE (set on screen init) */
|
/* NOTE: ignoring line_last_pixel */
|
||||||
static void *
|
static void *
|
||||||
nvc0_rasterizer_state_create(struct pipe_context *pipe,
|
nvc0_rasterizer_state_create(struct pipe_context *pipe,
|
||||||
const struct pipe_rasterizer_state *cso)
|
const struct pipe_rasterizer_state *cso)
|
||||||
@@ -313,6 +313,10 @@ nvc0_rasterizer_state_create(struct pipe_context *pipe,
|
|||||||
SB_BEGIN_3D(so, VIEW_VOLUME_CLIP_CTRL, 1);
|
SB_BEGIN_3D(so, VIEW_VOLUME_CLIP_CTRL, 1);
|
||||||
SB_DATA (so, reg);
|
SB_DATA (so, reg);
|
||||||
|
|
||||||
|
SB_IMMED_3D(so, DEPTH_CLIP_NEGATIVE_Z, cso->clip_halfz);
|
||||||
|
|
||||||
|
SB_IMMED_3D(so, PIXEL_CENTER_INTEGER, !cso->half_pixel_center);
|
||||||
|
|
||||||
assert(so->size <= (sizeof(so->state) / sizeof(so->state[0])));
|
assert(so->size <= (sizeof(so->state) / sizeof(so->state[0])));
|
||||||
return (void *)so;
|
return (void *)so;
|
||||||
}
|
}
|
||||||
@@ -1085,9 +1089,11 @@ nvc0_set_transform_feedback_targets(struct pipe_context *pipe,
|
|||||||
pipe_so_target_reference(&nvc0->tfbbuf[i], targets[i]);
|
pipe_so_target_reference(&nvc0->tfbbuf[i], targets[i]);
|
||||||
}
|
}
|
||||||
for (; i < nvc0->num_tfbbufs; ++i) {
|
for (; i < nvc0->num_tfbbufs; ++i) {
|
||||||
nvc0->tfbbuf_dirty |= 1 << i;
|
if (nvc0->tfbbuf[i]) {
|
||||||
nvc0_so_target_save_offset(pipe, nvc0->tfbbuf[i], i, &serialize);
|
nvc0->tfbbuf_dirty |= 1 << i;
|
||||||
pipe_so_target_reference(&nvc0->tfbbuf[i], NULL);
|
nvc0_so_target_save_offset(pipe, nvc0->tfbbuf[i], i, &serialize);
|
||||||
|
pipe_so_target_reference(&nvc0->tfbbuf[i], NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
nvc0->num_tfbbufs = num_targets;
|
nvc0->num_tfbbufs = num_targets;
|
||||||
|
|
||||||
|
@@ -23,7 +23,7 @@ struct nvc0_blend_stateobj {
|
|||||||
struct nvc0_rasterizer_stateobj {
|
struct nvc0_rasterizer_stateobj {
|
||||||
struct pipe_rasterizer_state pipe;
|
struct pipe_rasterizer_state pipe;
|
||||||
int size;
|
int size;
|
||||||
uint32_t state[43];
|
uint32_t state[44];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct nvc0_zsa_stateobj {
|
struct nvc0_zsa_stateobj {
|
||||||
|
@@ -1401,11 +1401,14 @@ nvc0_blit(struct pipe_context *pipe, const struct pipe_blit_info *info)
|
|||||||
} else
|
} else
|
||||||
if (!nv50_2d_src_format_faithful(info->src.format)) {
|
if (!nv50_2d_src_format_faithful(info->src.format)) {
|
||||||
if (!util_format_is_luminance(info->src.format)) {
|
if (!util_format_is_luminance(info->src.format)) {
|
||||||
|
if (!nv50_2d_dst_format_ops_supported(info->dst.format))
|
||||||
|
eng3d = TRUE;
|
||||||
|
else
|
||||||
if (util_format_is_intensity(info->src.format))
|
if (util_format_is_intensity(info->src.format))
|
||||||
eng3d = info->src.format != PIPE_FORMAT_I8_UNORM;
|
eng3d = info->src.format != PIPE_FORMAT_I8_UNORM;
|
||||||
else
|
else
|
||||||
if (!nv50_2d_dst_format_ops_supported(info->dst.format))
|
if (util_format_is_alpha(info->src.format))
|
||||||
eng3d = TRUE;
|
eng3d = info->src.format != PIPE_FORMAT_A8_UNORM;
|
||||||
else
|
else
|
||||||
eng3d = !nv50_2d_format_supported(info->src.format);
|
eng3d = !nv50_2d_format_supported(info->src.format);
|
||||||
}
|
}
|
||||||
|
@@ -575,8 +575,9 @@ nvc0_draw_arrays(struct nvc0_context *nvc0,
|
|||||||
if (nvc0->state.index_bias) {
|
if (nvc0->state.index_bias) {
|
||||||
/* index_bias is implied 0 if !info->indexed (really ?) */
|
/* index_bias is implied 0 if !info->indexed (really ?) */
|
||||||
/* TODO: can we deactivate it for the VERTEX_BUFFER_FIRST command ? */
|
/* TODO: can we deactivate it for the VERTEX_BUFFER_FIRST command ? */
|
||||||
PUSH_SPACE(push, 1);
|
PUSH_SPACE(push, 2);
|
||||||
IMMED_NVC0(push, NVC0_3D(VB_ELEMENT_BASE), 0);
|
IMMED_NVC0(push, NVC0_3D(VB_ELEMENT_BASE), 0);
|
||||||
|
IMMED_NVC0(push, NVC0_3D(VERTEX_ID), 0);
|
||||||
nvc0->state.index_bias = 0;
|
nvc0->state.index_bias = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -705,9 +706,11 @@ nvc0_draw_elements(struct nvc0_context *nvc0, boolean shorten,
|
|||||||
prim = nvc0_prim_gl(mode);
|
prim = nvc0_prim_gl(mode);
|
||||||
|
|
||||||
if (index_bias != nvc0->state.index_bias) {
|
if (index_bias != nvc0->state.index_bias) {
|
||||||
PUSH_SPACE(push, 2);
|
PUSH_SPACE(push, 4);
|
||||||
BEGIN_NVC0(push, NVC0_3D(VB_ELEMENT_BASE), 1);
|
BEGIN_NVC0(push, NVC0_3D(VB_ELEMENT_BASE), 1);
|
||||||
PUSH_DATA (push, index_bias);
|
PUSH_DATA (push, index_bias);
|
||||||
|
BEGIN_NVC0(push, NVC0_3D(VERTEX_ID), 1);
|
||||||
|
PUSH_DATA (push, index_bias);
|
||||||
nvc0->state.index_bias = index_bias;
|
nvc0->state.index_bias = index_bias;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -818,6 +821,7 @@ nvc0_draw_indirect(struct nvc0_context *nvc0, const struct pipe_draw_info *info)
|
|||||||
if (nvc0->state.index_bias) {
|
if (nvc0->state.index_bias) {
|
||||||
/* index_bias is implied 0 if !info->indexed (really ?) */
|
/* index_bias is implied 0 if !info->indexed (really ?) */
|
||||||
IMMED_NVC0(push, NVC0_3D(VB_ELEMENT_BASE), 0);
|
IMMED_NVC0(push, NVC0_3D(VB_ELEMENT_BASE), 0);
|
||||||
|
IMMED_NVC0(push, NVC0_3D(VERTEX_ID), 0);
|
||||||
nvc0->state.index_bias = 0;
|
nvc0->state.index_bias = 0;
|
||||||
}
|
}
|
||||||
size = 4 * 4;
|
size = 4 * 4;
|
||||||
|
@@ -28,6 +28,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <regex.h>
|
#include <regex.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -528,7 +529,6 @@ void init_compiler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define MAX_LINE_LENGTH 100
|
#define MAX_LINE_LENGTH 100
|
||||||
#define MAX_PATH_LENGTH 100
|
|
||||||
|
|
||||||
unsigned load_program(
|
unsigned load_program(
|
||||||
struct radeon_compiler *c,
|
struct radeon_compiler *c,
|
||||||
@@ -536,14 +536,19 @@ unsigned load_program(
|
|||||||
const char *filename)
|
const char *filename)
|
||||||
{
|
{
|
||||||
char line[MAX_LINE_LENGTH];
|
char line[MAX_LINE_LENGTH];
|
||||||
char path[MAX_PATH_LENGTH];
|
char path[PATH_MAX];
|
||||||
FILE *file;
|
FILE *file;
|
||||||
unsigned *count;
|
unsigned *count;
|
||||||
char **string_store;
|
char **string_store;
|
||||||
unsigned i = 0;
|
unsigned i = 0;
|
||||||
|
int n;
|
||||||
|
|
||||||
memset(line, 0, sizeof(line));
|
memset(line, 0, sizeof(line));
|
||||||
snprintf(path, MAX_PATH_LENGTH, TEST_PATH "/%s", filename);
|
n = snprintf(path, PATH_MAX, TEST_PATH "/%s", filename);
|
||||||
|
if (n < 0 || n >= PATH_MAX) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
file = fopen(path, "r");
|
file = fopen(path, "r");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -803,6 +803,15 @@ static void r300_blit(struct pipe_context *pipe,
|
|||||||
(struct pipe_framebuffer_state*)r300->fb_state.state;
|
(struct pipe_framebuffer_state*)r300->fb_state.state;
|
||||||
struct pipe_blit_info info = *blit;
|
struct pipe_blit_info info = *blit;
|
||||||
|
|
||||||
|
/* The driver supports sRGB textures but not framebuffers. Blitting
|
||||||
|
* from sRGB to sRGB should be the same as blitting from linear
|
||||||
|
* to linear, so use that, This avoids incorrect linearization.
|
||||||
|
*/
|
||||||
|
if (util_format_is_srgb(info.src.format)) {
|
||||||
|
info.src.format = util_format_linear(info.src.format);
|
||||||
|
info.dst.format = util_format_linear(info.dst.format);
|
||||||
|
}
|
||||||
|
|
||||||
/* MSAA resolve. */
|
/* MSAA resolve. */
|
||||||
if (info.src.resource->nr_samples > 1 &&
|
if (info.src.resource->nr_samples > 1 &&
|
||||||
!util_format_is_depth_or_stencil(info.src.resource->format)) {
|
!util_format_is_depth_or_stencil(info.src.resource->format)) {
|
||||||
|
@@ -170,24 +170,10 @@ static void get_external_state(
|
|||||||
}
|
}
|
||||||
|
|
||||||
state->unit[i].non_normalized_coords = !s->state.normalized_coords;
|
state->unit[i].non_normalized_coords = !s->state.normalized_coords;
|
||||||
state->unit[i].convert_unorm_to_snorm =
|
state->unit[i].convert_unorm_to_snorm = 0;
|
||||||
v->base.format == PIPE_FORMAT_RGTC1_SNORM ||
|
|
||||||
v->base.format == PIPE_FORMAT_LATC1_SNORM;
|
|
||||||
|
|
||||||
/* Pass texture swizzling to the compiler, some lowering passes need it. */
|
/* Pass texture swizzling to the compiler, some lowering passes need it. */
|
||||||
if (v->base.format == PIPE_FORMAT_RGTC1_SNORM ||
|
if (state->unit[i].compare_mode_enabled) {
|
||||||
v->base.format == PIPE_FORMAT_LATC1_SNORM) {
|
|
||||||
unsigned char swizzle[4];
|
|
||||||
|
|
||||||
util_format_compose_swizzles(
|
|
||||||
util_format_description(v->base.format)->swizzle,
|
|
||||||
v->swizzle,
|
|
||||||
swizzle);
|
|
||||||
|
|
||||||
state->unit[i].texture_swizzle =
|
|
||||||
RC_MAKE_SWIZZLE(swizzle[0], swizzle[1],
|
|
||||||
swizzle[2], swizzle[3]);
|
|
||||||
} else if (state->unit[i].compare_mode_enabled) {
|
|
||||||
state->unit[i].texture_swizzle =
|
state->unit[i].texture_swizzle =
|
||||||
RC_MAKE_SWIZZLE(v->swizzle[0], v->swizzle[1],
|
RC_MAKE_SWIZZLE(v->swizzle[0], v->swizzle[1],
|
||||||
v->swizzle[2], v->swizzle[3]);
|
v->swizzle[2], v->swizzle[3]);
|
||||||
|
@@ -169,20 +169,21 @@ uint32_t r300_translate_texformat(enum pipe_format format,
|
|||||||
|
|
||||||
/* Add swizzling. */
|
/* Add swizzling. */
|
||||||
/* The RGTC1_SNORM and LATC1_SNORM swizzle is done in the shader. */
|
/* The RGTC1_SNORM and LATC1_SNORM swizzle is done in the shader. */
|
||||||
if (format != PIPE_FORMAT_RGTC1_SNORM &&
|
if (util_format_is_compressed(format) &&
|
||||||
|
dxtc_swizzle &&
|
||||||
|
format != PIPE_FORMAT_RGTC2_UNORM &&
|
||||||
|
format != PIPE_FORMAT_RGTC2_SNORM &&
|
||||||
|
format != PIPE_FORMAT_LATC2_UNORM &&
|
||||||
|
format != PIPE_FORMAT_LATC2_SNORM &&
|
||||||
|
format != PIPE_FORMAT_RGTC1_UNORM &&
|
||||||
|
format != PIPE_FORMAT_RGTC1_SNORM &&
|
||||||
|
format != PIPE_FORMAT_LATC1_UNORM &&
|
||||||
format != PIPE_FORMAT_LATC1_SNORM) {
|
format != PIPE_FORMAT_LATC1_SNORM) {
|
||||||
if (util_format_is_compressed(format) &&
|
result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view,
|
||||||
dxtc_swizzle &&
|
TRUE);
|
||||||
format != PIPE_FORMAT_RGTC2_UNORM &&
|
} else {
|
||||||
format != PIPE_FORMAT_RGTC2_SNORM &&
|
result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view,
|
||||||
format != PIPE_FORMAT_LATC2_UNORM &&
|
FALSE);
|
||||||
format != PIPE_FORMAT_LATC2_SNORM) {
|
|
||||||
result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view,
|
|
||||||
TRUE);
|
|
||||||
} else {
|
|
||||||
result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view,
|
|
||||||
FALSE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* S3TC formats. */
|
/* S3TC formats. */
|
||||||
@@ -213,6 +214,7 @@ uint32_t r300_translate_texformat(enum pipe_format format,
|
|||||||
switch (format) {
|
switch (format) {
|
||||||
case PIPE_FORMAT_RGTC1_SNORM:
|
case PIPE_FORMAT_RGTC1_SNORM:
|
||||||
case PIPE_FORMAT_LATC1_SNORM:
|
case PIPE_FORMAT_LATC1_SNORM:
|
||||||
|
result |= sign_bit[0];
|
||||||
case PIPE_FORMAT_LATC1_UNORM:
|
case PIPE_FORMAT_LATC1_UNORM:
|
||||||
case PIPE_FORMAT_RGTC1_UNORM:
|
case PIPE_FORMAT_RGTC1_UNORM:
|
||||||
return R500_TX_FORMAT_ATI1N | result;
|
return R500_TX_FORMAT_ATI1N | result;
|
||||||
@@ -936,14 +938,16 @@ static void r300_texture_setup_fb_state(struct r300_surface *surf)
|
|||||||
surf->pitch_zmask = tex->tex.zmask_stride_in_pixels[level];
|
surf->pitch_zmask = tex->tex.zmask_stride_in_pixels[level];
|
||||||
surf->pitch_hiz = tex->tex.hiz_stride_in_pixels[level];
|
surf->pitch_hiz = tex->tex.hiz_stride_in_pixels[level];
|
||||||
} else {
|
} else {
|
||||||
|
enum pipe_format format = util_format_linear(surf->base.format);
|
||||||
|
|
||||||
surf->pitch =
|
surf->pitch =
|
||||||
stride |
|
stride |
|
||||||
r300_translate_colorformat(surf->base.format) |
|
r300_translate_colorformat(format) |
|
||||||
R300_COLOR_TILE(tex->tex.macrotile[level]) |
|
R300_COLOR_TILE(tex->tex.macrotile[level]) |
|
||||||
R300_COLOR_MICROTILE(tex->tex.microtile);
|
R300_COLOR_MICROTILE(tex->tex.microtile);
|
||||||
surf->format = r300_translate_out_fmt(surf->base.format);
|
surf->format = r300_translate_out_fmt(format);
|
||||||
surf->colormask_swizzle =
|
surf->colormask_swizzle =
|
||||||
r300_translate_colormask_swizzle(surf->base.format);
|
r300_translate_colormask_swizzle(format);
|
||||||
surf->pitch_cmask = tex->tex.cmask_stride_in_pixels;
|
surf->pitch_cmask = tex->tex.cmask_stride_in_pixels;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,7 +23,6 @@
|
|||||||
|
|
||||||
#define CONSTANT_BUFFER_0_ADDR_SPACE 8
|
#define CONSTANT_BUFFER_0_ADDR_SPACE 8
|
||||||
#define CONSTANT_BUFFER_1_ADDR_SPACE (CONSTANT_BUFFER_0_ADDR_SPACE + R600_UCP_CONST_BUFFER)
|
#define CONSTANT_BUFFER_1_ADDR_SPACE (CONSTANT_BUFFER_0_ADDR_SPACE + R600_UCP_CONST_BUFFER)
|
||||||
#define CONSTANT_TXQ_BUFFER (CONSTANT_BUFFER_0_ADDR_SPACE + R600_TXQ_CONST_BUFFER)
|
|
||||||
#define LLVM_R600_BUFFER_INFO_CONST_BUFFER \
|
#define LLVM_R600_BUFFER_INFO_CONST_BUFFER \
|
||||||
(CONSTANT_BUFFER_0_ADDR_SPACE + R600_BUFFER_INFO_CONST_BUFFER)
|
(CONSTANT_BUFFER_0_ADDR_SPACE + R600_BUFFER_INFO_CONST_BUFFER)
|
||||||
|
|
||||||
@@ -690,7 +689,7 @@ static void llvm_emit_tex(
|
|||||||
if (emit_data->inst->Dst[0].Register.WriteMask & 4) {
|
if (emit_data->inst->Dst[0].Register.WriteMask & 4) {
|
||||||
LLVMValueRef offset = lp_build_const_int32(bld_base->base.gallivm, 0);
|
LLVMValueRef offset = lp_build_const_int32(bld_base->base.gallivm, 0);
|
||||||
LLVMValueRef ZLayer = LLVMBuildExtractElement(gallivm->builder,
|
LLVMValueRef ZLayer = LLVMBuildExtractElement(gallivm->builder,
|
||||||
llvm_load_const_buffer(bld_base, offset, CONSTANT_TXQ_BUFFER),
|
llvm_load_const_buffer(bld_base, offset, LLVM_R600_BUFFER_INFO_CONST_BUFFER),
|
||||||
lp_build_const_int32(gallivm, 0), "");
|
lp_build_const_int32(gallivm, 0), "");
|
||||||
|
|
||||||
emit_data->output[0] = LLVMBuildInsertElement(gallivm->builder, emit_data->output[0], ZLayer, lp_build_const_int32(gallivm, 2), "");
|
emit_data->output[0] = LLVMBuildInsertElement(gallivm->builder, emit_data->output[0], ZLayer, lp_build_const_int32(gallivm, 2), "");
|
||||||
|
@@ -44,20 +44,19 @@
|
|||||||
#define R600_TRACE_CS_DWORDS 7
|
#define R600_TRACE_CS_DWORDS 7
|
||||||
|
|
||||||
#define R600_MAX_USER_CONST_BUFFERS 13
|
#define R600_MAX_USER_CONST_BUFFERS 13
|
||||||
#define R600_MAX_DRIVER_CONST_BUFFERS 4
|
#define R600_MAX_DRIVER_CONST_BUFFERS 3
|
||||||
#define R600_MAX_CONST_BUFFERS (R600_MAX_USER_CONST_BUFFERS + R600_MAX_DRIVER_CONST_BUFFERS)
|
#define R600_MAX_CONST_BUFFERS (R600_MAX_USER_CONST_BUFFERS + R600_MAX_DRIVER_CONST_BUFFERS)
|
||||||
|
|
||||||
/* start driver buffers after user buffers */
|
/* start driver buffers after user buffers */
|
||||||
#define R600_UCP_CONST_BUFFER (R600_MAX_USER_CONST_BUFFERS)
|
#define R600_UCP_CONST_BUFFER (R600_MAX_USER_CONST_BUFFERS)
|
||||||
#define R600_TXQ_CONST_BUFFER (R600_MAX_USER_CONST_BUFFERS + 1)
|
#define R600_BUFFER_INFO_CONST_BUFFER (R600_MAX_USER_CONST_BUFFERS + 1)
|
||||||
#define R600_BUFFER_INFO_CONST_BUFFER (R600_MAX_USER_CONST_BUFFERS + 2)
|
#define R600_GS_RING_CONST_BUFFER (R600_MAX_USER_CONST_BUFFERS + 2)
|
||||||
#define R600_GS_RING_CONST_BUFFER (R600_MAX_USER_CONST_BUFFERS + 3)
|
/* Currently R600_MAX_CONST_BUFFERS just fits on the hw, which has a limit
|
||||||
/* Currently R600_MAX_CONST_BUFFERS is too large, the hardware only has 16 buffers, but the driver is
|
* of 16 const buffers.
|
||||||
* trying to use 17. Avoid accidentally aliasing with user UBOs for SAMPLE_POSITIONS by using an id<16.
|
|
||||||
* UCP/SAMPLE_POSITIONS are never accessed by same shader stage so they can use the same id.
|
* UCP/SAMPLE_POSITIONS are never accessed by same shader stage so they can use the same id.
|
||||||
*
|
*
|
||||||
* Fixing this properly would require the driver to combine its buffers into a single hardware buffer,
|
* In order to support d3d 11 mandated minimum of 15 user const buffers
|
||||||
* which would also allow supporting the d3d 11 mandated minimum of 15 user const buffers.
|
* we'd have to squash all use cases into one driver buffer.
|
||||||
*/
|
*/
|
||||||
#define R600_SAMPLE_POSITIONS_CONST_BUFFER (R600_MAX_USER_CONST_BUFFERS)
|
#define R600_SAMPLE_POSITIONS_CONST_BUFFER (R600_MAX_USER_CONST_BUFFERS)
|
||||||
|
|
||||||
@@ -316,7 +315,6 @@ struct r600_samplerview_state {
|
|||||||
uint32_t dirty_mask;
|
uint32_t dirty_mask;
|
||||||
uint32_t compressed_depthtex_mask; /* which textures are depth */
|
uint32_t compressed_depthtex_mask; /* which textures are depth */
|
||||||
uint32_t compressed_colortex_mask;
|
uint32_t compressed_colortex_mask;
|
||||||
boolean dirty_txq_constants;
|
|
||||||
boolean dirty_buffer_constants;
|
boolean dirty_buffer_constants;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -2728,8 +2728,10 @@ static int cayman_mul_int_instr(struct r600_shader_ctx *ctx)
|
|||||||
struct tgsi_full_instruction *inst = &ctx->parse.FullToken.FullInstruction;
|
struct tgsi_full_instruction *inst = &ctx->parse.FullToken.FullInstruction;
|
||||||
int i, j, k, r;
|
int i, j, k, r;
|
||||||
struct r600_bytecode_alu alu;
|
struct r600_bytecode_alu alu;
|
||||||
int last_slot = (inst->Dst[0].Register.WriteMask & 0x8) ? 4 : 3;
|
int lasti = tgsi_last_instruction(inst->Dst[0].Register.WriteMask);
|
||||||
for (k = 0; k < last_slot; k++) {
|
int t1 = ctx->temp_reg;
|
||||||
|
|
||||||
|
for (k = 0; k <= lasti; k++) {
|
||||||
if (!(inst->Dst[0].Register.WriteMask & (1 << k)))
|
if (!(inst->Dst[0].Register.WriteMask & (1 << k)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -2739,7 +2741,8 @@ static int cayman_mul_int_instr(struct r600_shader_ctx *ctx)
|
|||||||
for (j = 0; j < inst->Instruction.NumSrcRegs; j++) {
|
for (j = 0; j < inst->Instruction.NumSrcRegs; j++) {
|
||||||
r600_bytecode_src(&alu.src[j], &ctx->src[j], k);
|
r600_bytecode_src(&alu.src[j], &ctx->src[j], k);
|
||||||
}
|
}
|
||||||
tgsi_dst(ctx, &inst->Dst[0], i, &alu.dst);
|
alu.dst.sel = t1;
|
||||||
|
alu.dst.chan = i;
|
||||||
alu.dst.write = (i == k);
|
alu.dst.write = (i == k);
|
||||||
if (i == 3)
|
if (i == 3)
|
||||||
alu.last = 1;
|
alu.last = 1;
|
||||||
@@ -2748,6 +2751,23 @@ static int cayman_mul_int_instr(struct r600_shader_ctx *ctx)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = 0 ; i <= lasti; i++) {
|
||||||
|
if (!(inst->Dst[0].Register.WriteMask & (1 << i)))
|
||||||
|
continue;
|
||||||
|
memset(&alu, 0, sizeof(struct r600_bytecode_alu));
|
||||||
|
alu.op = ALU_OP1_MOV;
|
||||||
|
alu.src[0].sel = t1;
|
||||||
|
alu.src[0].chan = i;
|
||||||
|
tgsi_dst(ctx, &inst->Dst[0], i, &alu.dst);
|
||||||
|
alu.dst.write = 1;
|
||||||
|
if (i == lasti)
|
||||||
|
alu.last = 1;
|
||||||
|
r = r600_bytecode_add_alu(ctx->bc, &alu);
|
||||||
|
if (r)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4899,7 +4919,8 @@ static inline boolean tgsi_tex_src_requires_loading(struct r600_shader_ctx *ctx,
|
|||||||
return (inst->Src[index].Register.File != TGSI_FILE_TEMPORARY &&
|
return (inst->Src[index].Register.File != TGSI_FILE_TEMPORARY &&
|
||||||
inst->Src[index].Register.File != TGSI_FILE_INPUT &&
|
inst->Src[index].Register.File != TGSI_FILE_INPUT &&
|
||||||
inst->Src[index].Register.File != TGSI_FILE_OUTPUT) ||
|
inst->Src[index].Register.File != TGSI_FILE_OUTPUT) ||
|
||||||
ctx->src[index].neg || ctx->src[index].abs;
|
ctx->src[index].neg || ctx->src[index].abs ||
|
||||||
|
(inst->Src[index].Register.File == TGSI_FILE_INPUT && ctx->type == TGSI_PROCESSOR_GEOMETRY);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned tgsi_tex_get_src_gpr(struct r600_shader_ctx *ctx,
|
static inline unsigned tgsi_tex_get_src_gpr(struct r600_shader_ctx *ctx,
|
||||||
@@ -5014,8 +5035,9 @@ static int r600_do_buffer_txq(struct r600_shader_ctx *ctx)
|
|||||||
alu.op = ALU_OP1_MOV;
|
alu.op = ALU_OP1_MOV;
|
||||||
|
|
||||||
if (ctx->bc->chip_class >= EVERGREEN) {
|
if (ctx->bc->chip_class >= EVERGREEN) {
|
||||||
alu.src[0].sel = 512 + (id / 4);
|
/* channel 0 or 2 of each word */
|
||||||
alu.src[0].chan = id % 4;
|
alu.src[0].sel = 512 + (id / 2);
|
||||||
|
alu.src[0].chan = (id % 2) * 2;
|
||||||
} else {
|
} else {
|
||||||
/* r600 we have them at channel 2 of the second dword */
|
/* r600 we have them at channel 2 of the second dword */
|
||||||
alu.src[0].sel = 512 + (id * 2) + 1;
|
alu.src[0].sel = 512 + (id * 2) + 1;
|
||||||
@@ -5074,6 +5096,14 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
|
|||||||
inst->Instruction.Opcode == TGSI_OPCODE_TG4)
|
inst->Instruction.Opcode == TGSI_OPCODE_TG4)
|
||||||
sampler_src_reg = 2;
|
sampler_src_reg = 2;
|
||||||
|
|
||||||
|
/* TGSI moves the sampler to src reg 3 for TXD */
|
||||||
|
if (inst->Instruction.Opcode == TGSI_OPCODE_TXD)
|
||||||
|
sampler_src_reg = 3;
|
||||||
|
|
||||||
|
sampler_index_mode = inst->Src[sampler_src_reg].Indirect.Index == 2 ? 2 : 0; // CF_INDEX_1 : CF_INDEX_NONE
|
||||||
|
if (sampler_index_mode)
|
||||||
|
ctx->shader->uses_index_registers = true;
|
||||||
|
|
||||||
src_gpr = tgsi_tex_get_src_gpr(ctx, 0);
|
src_gpr = tgsi_tex_get_src_gpr(ctx, 0);
|
||||||
|
|
||||||
if (inst->Texture.Texture == TGSI_TEXTURE_BUFFER) {
|
if (inst->Texture.Texture == TGSI_TEXTURE_BUFFER) {
|
||||||
@@ -5088,64 +5118,7 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inst->Instruction.Opcode == TGSI_OPCODE_TXD) {
|
if (inst->Instruction.Opcode == TGSI_OPCODE_TXP) {
|
||||||
/* TGSI moves the sampler to src reg 3 for TXD */
|
|
||||||
sampler_src_reg = 3;
|
|
||||||
|
|
||||||
sampler_index_mode = inst->Src[sampler_src_reg].Indirect.Index == 2 ? 2 : 0; // CF_INDEX_1 : CF_INDEX_NONE
|
|
||||||
|
|
||||||
for (i = 1; i < 3; i++) {
|
|
||||||
/* set gradients h/v */
|
|
||||||
memset(&tex, 0, sizeof(struct r600_bytecode_tex));
|
|
||||||
tex.op = (i == 1) ? FETCH_OP_SET_GRADIENTS_H :
|
|
||||||
FETCH_OP_SET_GRADIENTS_V;
|
|
||||||
tex.sampler_id = tgsi_tex_get_src_gpr(ctx, sampler_src_reg);
|
|
||||||
tex.sampler_index_mode = sampler_index_mode;
|
|
||||||
tex.resource_id = tex.sampler_id + R600_MAX_CONST_BUFFERS;
|
|
||||||
tex.resource_index_mode = sampler_index_mode;
|
|
||||||
|
|
||||||
if (tgsi_tex_src_requires_loading(ctx, i)) {
|
|
||||||
tex.src_gpr = r600_get_temp(ctx);
|
|
||||||
tex.src_sel_x = 0;
|
|
||||||
tex.src_sel_y = 1;
|
|
||||||
tex.src_sel_z = 2;
|
|
||||||
tex.src_sel_w = 3;
|
|
||||||
|
|
||||||
for (j = 0; j < 4; j++) {
|
|
||||||
memset(&alu, 0, sizeof(struct r600_bytecode_alu));
|
|
||||||
alu.op = ALU_OP1_MOV;
|
|
||||||
r600_bytecode_src(&alu.src[0], &ctx->src[i], j);
|
|
||||||
alu.dst.sel = tex.src_gpr;
|
|
||||||
alu.dst.chan = j;
|
|
||||||
if (j == 3)
|
|
||||||
alu.last = 1;
|
|
||||||
alu.dst.write = 1;
|
|
||||||
r = r600_bytecode_add_alu(ctx->bc, &alu);
|
|
||||||
if (r)
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
tex.src_gpr = tgsi_tex_get_src_gpr(ctx, i);
|
|
||||||
tex.src_sel_x = ctx->src[i].swizzle[0];
|
|
||||||
tex.src_sel_y = ctx->src[i].swizzle[1];
|
|
||||||
tex.src_sel_z = ctx->src[i].swizzle[2];
|
|
||||||
tex.src_sel_w = ctx->src[i].swizzle[3];
|
|
||||||
tex.src_rel = ctx->src[i].rel;
|
|
||||||
}
|
|
||||||
tex.dst_gpr = ctx->temp_reg; /* just to avoid confusing the asm scheduler */
|
|
||||||
tex.dst_sel_x = tex.dst_sel_y = tex.dst_sel_z = tex.dst_sel_w = 7;
|
|
||||||
if (inst->Texture.Texture != TGSI_TEXTURE_RECT) {
|
|
||||||
tex.coord_type_x = 1;
|
|
||||||
tex.coord_type_y = 1;
|
|
||||||
tex.coord_type_z = 1;
|
|
||||||
tex.coord_type_w = 1;
|
|
||||||
}
|
|
||||||
r = r600_bytecode_add_tex(ctx->bc, &tex);
|
|
||||||
if (r)
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
} else if (inst->Instruction.Opcode == TGSI_OPCODE_TXP) {
|
|
||||||
int out_chan;
|
int out_chan;
|
||||||
/* Add perspective divide */
|
/* Add perspective divide */
|
||||||
if (ctx->bc->chip_class == CAYMAN) {
|
if (ctx->bc->chip_class == CAYMAN) {
|
||||||
@@ -5209,9 +5182,6 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
|
|||||||
src_gpr = ctx->temp_reg;
|
src_gpr = ctx->temp_reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
sampler_index_mode = inst->Src[sampler_src_reg].Indirect.Index == 2 ? 2 : 0; // CF_INDEX_1 : CF_INDEX_NONE
|
|
||||||
if (sampler_index_mode)
|
|
||||||
ctx->shader->uses_index_registers = true;
|
|
||||||
|
|
||||||
if ((inst->Texture.Texture == TGSI_TEXTURE_CUBE ||
|
if ((inst->Texture.Texture == TGSI_TEXTURE_CUBE ||
|
||||||
inst->Texture.Texture == TGSI_TEXTURE_CUBE_ARRAY ||
|
inst->Texture.Texture == TGSI_TEXTURE_CUBE_ARRAY ||
|
||||||
@@ -5430,6 +5400,69 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
|
|||||||
src_gpr = ctx->temp_reg;
|
src_gpr = ctx->temp_reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (inst->Instruction.Opcode == TGSI_OPCODE_TXD) {
|
||||||
|
int temp_h = 0, temp_v = 0;
|
||||||
|
int start_val = 0;
|
||||||
|
|
||||||
|
/* if we've already loaded the src (i.e. CUBE don't reload it). */
|
||||||
|
if (src_loaded == TRUE)
|
||||||
|
start_val = 1;
|
||||||
|
else
|
||||||
|
src_loaded = TRUE;
|
||||||
|
for (i = start_val; i < 3; i++) {
|
||||||
|
int treg = r600_get_temp(ctx);
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
src_gpr = treg;
|
||||||
|
else if (i == 1)
|
||||||
|
temp_h = treg;
|
||||||
|
else
|
||||||
|
temp_v = treg;
|
||||||
|
|
||||||
|
for (j = 0; j < 4; j++) {
|
||||||
|
memset(&alu, 0, sizeof(struct r600_bytecode_alu));
|
||||||
|
alu.op = ALU_OP1_MOV;
|
||||||
|
r600_bytecode_src(&alu.src[0], &ctx->src[i], j);
|
||||||
|
alu.dst.sel = treg;
|
||||||
|
alu.dst.chan = j;
|
||||||
|
if (j == 3)
|
||||||
|
alu.last = 1;
|
||||||
|
alu.dst.write = 1;
|
||||||
|
r = r600_bytecode_add_alu(ctx->bc, &alu);
|
||||||
|
if (r)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = 1; i < 3; i++) {
|
||||||
|
/* set gradients h/v */
|
||||||
|
memset(&tex, 0, sizeof(struct r600_bytecode_tex));
|
||||||
|
tex.op = (i == 1) ? FETCH_OP_SET_GRADIENTS_H :
|
||||||
|
FETCH_OP_SET_GRADIENTS_V;
|
||||||
|
tex.sampler_id = tgsi_tex_get_src_gpr(ctx, sampler_src_reg);
|
||||||
|
tex.sampler_index_mode = sampler_index_mode;
|
||||||
|
tex.resource_id = tex.sampler_id + R600_MAX_CONST_BUFFERS;
|
||||||
|
tex.resource_index_mode = sampler_index_mode;
|
||||||
|
|
||||||
|
tex.src_gpr = (i == 1) ? temp_h : temp_v;
|
||||||
|
tex.src_sel_x = 0;
|
||||||
|
tex.src_sel_y = 1;
|
||||||
|
tex.src_sel_z = 2;
|
||||||
|
tex.src_sel_w = 3;
|
||||||
|
|
||||||
|
tex.dst_gpr = r600_get_temp(ctx); /* just to avoid confusing the asm scheduler */
|
||||||
|
tex.dst_sel_x = tex.dst_sel_y = tex.dst_sel_z = tex.dst_sel_w = 7;
|
||||||
|
if (inst->Texture.Texture != TGSI_TEXTURE_RECT) {
|
||||||
|
tex.coord_type_x = 1;
|
||||||
|
tex.coord_type_y = 1;
|
||||||
|
tex.coord_type_z = 1;
|
||||||
|
tex.coord_type_w = 1;
|
||||||
|
}
|
||||||
|
r = r600_bytecode_add_tex(ctx->bc, &tex);
|
||||||
|
if (r)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (src_requires_loading && !src_loaded) {
|
if (src_requires_loading && !src_loaded) {
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
memset(&alu, 0, sizeof(struct r600_bytecode_alu));
|
memset(&alu, 0, sizeof(struct r600_bytecode_alu));
|
||||||
@@ -5514,9 +5547,24 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
|
|||||||
/* texture offsets do not apply to other texture targets */
|
/* texture offsets do not apply to other texture targets */
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
offset_x = ctx->literals[4 * inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleX] << 1;
|
switch (inst->Texture.Texture) {
|
||||||
offset_y = ctx->literals[4 * inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleY] << 1;
|
case TGSI_TEXTURE_3D:
|
||||||
offset_z = ctx->literals[4 * inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleZ] << 1;
|
offset_z = ctx->literals[4 * inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleZ] << 1;
|
||||||
|
/* fallthrough */
|
||||||
|
case TGSI_TEXTURE_2D:
|
||||||
|
case TGSI_TEXTURE_SHADOW2D:
|
||||||
|
case TGSI_TEXTURE_RECT:
|
||||||
|
case TGSI_TEXTURE_SHADOWRECT:
|
||||||
|
case TGSI_TEXTURE_2D_ARRAY:
|
||||||
|
case TGSI_TEXTURE_SHADOW2D_ARRAY:
|
||||||
|
offset_y = ctx->literals[4 * inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleY] << 1;
|
||||||
|
/* fallthrough */
|
||||||
|
case TGSI_TEXTURE_1D:
|
||||||
|
case TGSI_TEXTURE_SHADOW1D:
|
||||||
|
case TGSI_TEXTURE_1D_ARRAY:
|
||||||
|
case TGSI_TEXTURE_SHADOW1D_ARRAY:
|
||||||
|
offset_x = ctx->literals[4 * inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleX] << 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5650,9 +5698,16 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
|
|||||||
memset(&alu, 0, sizeof(struct r600_bytecode_alu));
|
memset(&alu, 0, sizeof(struct r600_bytecode_alu));
|
||||||
alu.op = ALU_OP1_MOV;
|
alu.op = ALU_OP1_MOV;
|
||||||
|
|
||||||
alu.src[0].sel = 512 + (id / 4);
|
if (ctx->bc->chip_class >= EVERGREEN) {
|
||||||
alu.src[0].kc_bank = R600_TXQ_CONST_BUFFER;
|
/* channel 1 or 3 of each word */
|
||||||
alu.src[0].chan = id % 4;
|
alu.src[0].sel = 512 + (id / 2);
|
||||||
|
alu.src[0].chan = ((id % 2) * 2) + 1;
|
||||||
|
} else {
|
||||||
|
/* r600 we have them at channel 2 of the second dword */
|
||||||
|
alu.src[0].sel = 512 + (id * 2) + 1;
|
||||||
|
alu.src[0].chan = 2;
|
||||||
|
}
|
||||||
|
alu.src[0].kc_bank = R600_BUFFER_INFO_CONST_BUFFER;
|
||||||
tgsi_dst(ctx, &inst->Dst[0], 2, &alu.dst);
|
tgsi_dst(ctx, &inst->Dst[0], 2, &alu.dst);
|
||||||
alu.last = 1;
|
alu.last = 1;
|
||||||
r = r600_bytecode_add_alu(ctx->bc, &alu);
|
r = r600_bytecode_add_alu(ctx->bc, &alu);
|
||||||
@@ -5743,11 +5798,18 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
|
|||||||
int8_t texture_component_select = ctx->literals[4 * inst->Src[1].Register.Index + inst->Src[1].Register.SwizzleX];
|
int8_t texture_component_select = ctx->literals[4 * inst->Src[1].Register.Index + inst->Src[1].Register.SwizzleX];
|
||||||
tex.inst_mod = texture_component_select;
|
tex.inst_mod = texture_component_select;
|
||||||
|
|
||||||
|
if (ctx->bc->chip_class == CAYMAN) {
|
||||||
/* GATHER4 result order is different from TGSI TG4 */
|
/* GATHER4 result order is different from TGSI TG4 */
|
||||||
tex.dst_sel_x = (inst->Dst[0].Register.WriteMask & 2) ? 1 : 7;
|
tex.dst_sel_x = (inst->Dst[0].Register.WriteMask & 2) ? 0 : 7;
|
||||||
tex.dst_sel_y = (inst->Dst[0].Register.WriteMask & 4) ? 2 : 7;
|
tex.dst_sel_y = (inst->Dst[0].Register.WriteMask & 4) ? 1 : 7;
|
||||||
tex.dst_sel_z = (inst->Dst[0].Register.WriteMask & 1) ? 0 : 7;
|
tex.dst_sel_z = (inst->Dst[0].Register.WriteMask & 1) ? 2 : 7;
|
||||||
tex.dst_sel_w = (inst->Dst[0].Register.WriteMask & 8) ? 3 : 7;
|
tex.dst_sel_w = (inst->Dst[0].Register.WriteMask & 8) ? 3 : 7;
|
||||||
|
} else {
|
||||||
|
tex.dst_sel_x = (inst->Dst[0].Register.WriteMask & 2) ? 1 : 7;
|
||||||
|
tex.dst_sel_y = (inst->Dst[0].Register.WriteMask & 4) ? 2 : 7;
|
||||||
|
tex.dst_sel_z = (inst->Dst[0].Register.WriteMask & 1) ? 0 : 7;
|
||||||
|
tex.dst_sel_w = (inst->Dst[0].Register.WriteMask & 8) ? 3 : 7;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (inst->Instruction.Opcode == TGSI_OPCODE_LODQ) {
|
else if (inst->Instruction.Opcode == TGSI_OPCODE_LODQ) {
|
||||||
tex.dst_sel_x = (inst->Dst[0].Register.WriteMask & 2) ? 1 : 7;
|
tex.dst_sel_x = (inst->Dst[0].Register.WriteMask & 2) ? 1 : 7;
|
||||||
@@ -6009,7 +6071,7 @@ static int tgsi_ucmp(struct r600_shader_ctx *ctx)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
memset(&alu, 0, sizeof(struct r600_bytecode_alu));
|
memset(&alu, 0, sizeof(struct r600_bytecode_alu));
|
||||||
alu.op = ALU_OP3_CNDGE_INT;
|
alu.op = ALU_OP3_CNDE_INT;
|
||||||
r600_bytecode_src(&alu.src[0], &ctx->src[0], i);
|
r600_bytecode_src(&alu.src[0], &ctx->src[0], i);
|
||||||
r600_bytecode_src(&alu.src[1], &ctx->src[2], i);
|
r600_bytecode_src(&alu.src[1], &ctx->src[2], i);
|
||||||
r600_bytecode_src(&alu.src[2], &ctx->src[1], i);
|
r600_bytecode_src(&alu.src[2], &ctx->src[1], i);
|
||||||
|
@@ -2659,11 +2659,8 @@ void r600_update_gs_state(struct pipe_context *ctx, struct r600_pipe_shader *sha
|
|||||||
r600_store_context_reg(cb, R_028A6C_VGT_GS_OUT_PRIM_TYPE,
|
r600_store_context_reg(cb, R_028A6C_VGT_GS_OUT_PRIM_TYPE,
|
||||||
r600_conv_prim_to_gs_out(rshader->gs_output_prim));
|
r600_conv_prim_to_gs_out(rshader->gs_output_prim));
|
||||||
|
|
||||||
r600_store_context_reg_seq(cb, R_0288C8_SQ_GS_VERT_ITEMSIZE, 4);
|
r600_store_context_reg(cb, R_0288C8_SQ_GS_VERT_ITEMSIZE,
|
||||||
r600_store_value(cb, cp_shader->ring_item_size >> 2);
|
cp_shader->ring_item_size >> 2);
|
||||||
r600_store_value(cb, 0);
|
|
||||||
r600_store_value(cb, 0);
|
|
||||||
r600_store_value(cb, 0);
|
|
||||||
|
|
||||||
r600_store_context_reg(cb, R_0288A8_SQ_ESGS_RING_ITEMSIZE,
|
r600_store_context_reg(cb, R_0288A8_SQ_ESGS_RING_ITEMSIZE,
|
||||||
(rshader->ring_item_size) >> 2);
|
(rshader->ring_item_size) >> 2);
|
||||||
|
@@ -649,7 +649,6 @@ static void r600_set_sampler_views(struct pipe_context *pipe, unsigned shader,
|
|||||||
dst->views.dirty_mask |= new_mask;
|
dst->views.dirty_mask |= new_mask;
|
||||||
dst->views.compressed_depthtex_mask &= dst->views.enabled_mask;
|
dst->views.compressed_depthtex_mask &= dst->views.enabled_mask;
|
||||||
dst->views.compressed_colortex_mask &= dst->views.enabled_mask;
|
dst->views.compressed_colortex_mask &= dst->views.enabled_mask;
|
||||||
dst->views.dirty_txq_constants = TRUE;
|
|
||||||
dst->views.dirty_buffer_constants = TRUE;
|
dst->views.dirty_buffer_constants = TRUE;
|
||||||
r600_sampler_views_dirty(rctx, &dst->views);
|
r600_sampler_views_dirty(rctx, &dst->views);
|
||||||
|
|
||||||
@@ -984,6 +983,7 @@ static void r600_set_sample_mask(struct pipe_context *pipe, unsigned sample_mask
|
|||||||
* then in the shader, we AND the 4 components with 0xffffffff or 0,
|
* then in the shader, we AND the 4 components with 0xffffffff or 0,
|
||||||
* then OR the alpha with the value given here.
|
* then OR the alpha with the value given here.
|
||||||
* We use a 6th constant to store the txq buffer size in
|
* We use a 6th constant to store the txq buffer size in
|
||||||
|
* we use 7th slot for number of cube layers in a cube map array.
|
||||||
*/
|
*/
|
||||||
static void r600_setup_buffer_constants(struct r600_context *rctx, int shader_type)
|
static void r600_setup_buffer_constants(struct r600_context *rctx, int shader_type)
|
||||||
{
|
{
|
||||||
@@ -1022,6 +1022,7 @@ static void r600_setup_buffer_constants(struct r600_context *rctx, int shader_ty
|
|||||||
samplers->buffer_constants[offset + 4] = 0;
|
samplers->buffer_constants[offset + 4] = 0;
|
||||||
|
|
||||||
samplers->buffer_constants[offset + 5] = samplers->views.views[i]->base.texture->width0 / util_format_get_blocksize(samplers->views.views[i]->base.format);
|
samplers->buffer_constants[offset + 5] = samplers->views.views[i]->base.texture->width0 / util_format_get_blocksize(samplers->views.views[i]->base.format);
|
||||||
|
samplers->buffer_constants[offset + 6] = samplers->views.views[i]->base.texture->array_size / 6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1033,7 +1034,10 @@ static void r600_setup_buffer_constants(struct r600_context *rctx, int shader_ty
|
|||||||
pipe_resource_reference(&cb.buffer, NULL);
|
pipe_resource_reference(&cb.buffer, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* On evergreen we only need to store the buffer size for TXQ */
|
/* On evergreen we store two values
|
||||||
|
* 1. buffer size for TXQ
|
||||||
|
* 2. number of cube layers in a cube map array.
|
||||||
|
*/
|
||||||
static void eg_setup_buffer_constants(struct r600_context *rctx, int shader_type)
|
static void eg_setup_buffer_constants(struct r600_context *rctx, int shader_type)
|
||||||
{
|
{
|
||||||
struct r600_textures_info *samplers = &rctx->samplers[shader_type];
|
struct r600_textures_info *samplers = &rctx->samplers[shader_type];
|
||||||
@@ -1048,12 +1052,16 @@ static void eg_setup_buffer_constants(struct r600_context *rctx, int shader_type
|
|||||||
samplers->views.dirty_buffer_constants = FALSE;
|
samplers->views.dirty_buffer_constants = FALSE;
|
||||||
|
|
||||||
bits = util_last_bit(samplers->views.enabled_mask);
|
bits = util_last_bit(samplers->views.enabled_mask);
|
||||||
array_size = bits * sizeof(uint32_t) * 4;
|
array_size = bits * 2 * sizeof(uint32_t) * 4;
|
||||||
samplers->buffer_constants = realloc(samplers->buffer_constants, array_size);
|
samplers->buffer_constants = realloc(samplers->buffer_constants, array_size);
|
||||||
memset(samplers->buffer_constants, 0, array_size);
|
memset(samplers->buffer_constants, 0, array_size);
|
||||||
for (i = 0; i < bits; i++)
|
for (i = 0; i < bits; i++) {
|
||||||
if (samplers->views.enabled_mask & (1 << i))
|
if (samplers->views.enabled_mask & (1 << i)) {
|
||||||
samplers->buffer_constants[i] = samplers->views.views[i]->base.texture->width0 / util_format_get_blocksize(samplers->views.views[i]->base.format);
|
uint32_t offset = i * 2;
|
||||||
|
samplers->buffer_constants[offset] = samplers->views.views[i]->base.texture->width0 / util_format_get_blocksize(samplers->views.views[i]->base.format);
|
||||||
|
samplers->buffer_constants[offset + 1] = samplers->views.views[i]->base.texture->array_size / 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cb.buffer = NULL;
|
cb.buffer = NULL;
|
||||||
cb.user_buffer = samplers->buffer_constants;
|
cb.user_buffer = samplers->buffer_constants;
|
||||||
@@ -1063,35 +1071,6 @@ static void eg_setup_buffer_constants(struct r600_context *rctx, int shader_type
|
|||||||
pipe_resource_reference(&cb.buffer, NULL);
|
pipe_resource_reference(&cb.buffer, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void r600_setup_txq_cube_array_constants(struct r600_context *rctx, int shader_type)
|
|
||||||
{
|
|
||||||
struct r600_textures_info *samplers = &rctx->samplers[shader_type];
|
|
||||||
int bits;
|
|
||||||
uint32_t array_size;
|
|
||||||
struct pipe_constant_buffer cb;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!samplers->views.dirty_txq_constants)
|
|
||||||
return;
|
|
||||||
|
|
||||||
samplers->views.dirty_txq_constants = FALSE;
|
|
||||||
|
|
||||||
bits = util_last_bit(samplers->views.enabled_mask);
|
|
||||||
array_size = bits * sizeof(uint32_t) * 4;
|
|
||||||
samplers->txq_constants = realloc(samplers->txq_constants, array_size);
|
|
||||||
memset(samplers->txq_constants, 0, array_size);
|
|
||||||
for (i = 0; i < bits; i++)
|
|
||||||
if (samplers->views.enabled_mask & (1 << i))
|
|
||||||
samplers->txq_constants[i] = samplers->views.views[i]->base.texture->array_size / 6;
|
|
||||||
|
|
||||||
cb.buffer = NULL;
|
|
||||||
cb.user_buffer = samplers->txq_constants;
|
|
||||||
cb.buffer_offset = 0;
|
|
||||||
cb.buffer_size = array_size;
|
|
||||||
rctx->b.b.set_constant_buffer(&rctx->b.b, shader_type, R600_TXQ_CONST_BUFFER, &cb);
|
|
||||||
pipe_resource_reference(&cb.buffer, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set sample xy locations as array of fragment shader constants */
|
/* set sample xy locations as array of fragment shader constants */
|
||||||
void r600_set_sample_locations_constant_buffer(struct r600_context *rctx)
|
void r600_set_sample_locations_constant_buffer(struct r600_context *rctx)
|
||||||
{
|
{
|
||||||
@@ -1175,7 +1154,7 @@ static bool r600_update_derived_state(struct r600_context *rctx)
|
|||||||
struct pipe_context * ctx = (struct pipe_context*)rctx;
|
struct pipe_context * ctx = (struct pipe_context*)rctx;
|
||||||
bool ps_dirty = false, vs_dirty = false, gs_dirty = false;
|
bool ps_dirty = false, vs_dirty = false, gs_dirty = false;
|
||||||
bool blend_disable;
|
bool blend_disable;
|
||||||
|
bool need_buf_const;
|
||||||
if (!rctx->blitter->running) {
|
if (!rctx->blitter->running) {
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
@@ -1296,29 +1275,35 @@ static bool r600_update_derived_state(struct r600_context *rctx)
|
|||||||
|
|
||||||
/* on R600 we stuff masks + txq info into one constant buffer */
|
/* on R600 we stuff masks + txq info into one constant buffer */
|
||||||
/* on evergreen we only need a txq info one */
|
/* on evergreen we only need a txq info one */
|
||||||
if (rctx->b.chip_class < EVERGREEN) {
|
if (rctx->ps_shader) {
|
||||||
if (rctx->ps_shader && rctx->ps_shader->current->shader.uses_tex_buffers)
|
need_buf_const = rctx->ps_shader->current->shader.uses_tex_buffers || rctx->ps_shader->current->shader.has_txq_cube_array_z_comp;
|
||||||
r600_setup_buffer_constants(rctx, PIPE_SHADER_FRAGMENT);
|
if (need_buf_const) {
|
||||||
if (rctx->vs_shader && rctx->vs_shader->current->shader.uses_tex_buffers)
|
if (rctx->b.chip_class < EVERGREEN)
|
||||||
r600_setup_buffer_constants(rctx, PIPE_SHADER_VERTEX);
|
r600_setup_buffer_constants(rctx, PIPE_SHADER_FRAGMENT);
|
||||||
if (rctx->gs_shader && rctx->gs_shader->current->shader.uses_tex_buffers)
|
else
|
||||||
r600_setup_buffer_constants(rctx, PIPE_SHADER_GEOMETRY);
|
eg_setup_buffer_constants(rctx, PIPE_SHADER_FRAGMENT);
|
||||||
} else {
|
}
|
||||||
if (rctx->ps_shader && rctx->ps_shader->current->shader.uses_tex_buffers)
|
|
||||||
eg_setup_buffer_constants(rctx, PIPE_SHADER_FRAGMENT);
|
|
||||||
if (rctx->vs_shader && rctx->vs_shader->current->shader.uses_tex_buffers)
|
|
||||||
eg_setup_buffer_constants(rctx, PIPE_SHADER_VERTEX);
|
|
||||||
if (rctx->gs_shader && rctx->gs_shader->current->shader.uses_tex_buffers)
|
|
||||||
eg_setup_buffer_constants(rctx, PIPE_SHADER_GEOMETRY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rctx->vs_shader) {
|
||||||
|
need_buf_const = rctx->vs_shader->current->shader.uses_tex_buffers || rctx->vs_shader->current->shader.has_txq_cube_array_z_comp;
|
||||||
|
if (need_buf_const) {
|
||||||
|
if (rctx->b.chip_class < EVERGREEN)
|
||||||
|
r600_setup_buffer_constants(rctx, PIPE_SHADER_VERTEX);
|
||||||
|
else
|
||||||
|
eg_setup_buffer_constants(rctx, PIPE_SHADER_VERTEX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (rctx->ps_shader && rctx->ps_shader->current->shader.has_txq_cube_array_z_comp)
|
if (rctx->gs_shader) {
|
||||||
r600_setup_txq_cube_array_constants(rctx, PIPE_SHADER_FRAGMENT);
|
need_buf_const = rctx->gs_shader->current->shader.uses_tex_buffers || rctx->gs_shader->current->shader.has_txq_cube_array_z_comp;
|
||||||
if (rctx->vs_shader && rctx->vs_shader->current->shader.has_txq_cube_array_z_comp)
|
if (need_buf_const) {
|
||||||
r600_setup_txq_cube_array_constants(rctx, PIPE_SHADER_VERTEX);
|
if (rctx->b.chip_class < EVERGREEN)
|
||||||
if (rctx->gs_shader && rctx->gs_shader->current->shader.has_txq_cube_array_z_comp)
|
r600_setup_buffer_constants(rctx, PIPE_SHADER_GEOMETRY);
|
||||||
r600_setup_txq_cube_array_constants(rctx, PIPE_SHADER_GEOMETRY);
|
else
|
||||||
|
eg_setup_buffer_constants(rctx, PIPE_SHADER_GEOMETRY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (rctx->b.chip_class < EVERGREEN && rctx->ps_shader && rctx->vs_shader) {
|
if (rctx->b.chip_class < EVERGREEN && rctx->ps_shader && rctx->vs_shader) {
|
||||||
if (!r600_adjust_gprs(rctx)) {
|
if (!r600_adjust_gprs(rctx)) {
|
||||||
|
@@ -616,6 +616,8 @@ public:
|
|||||||
unsigned num_slots;
|
unsigned num_slots;
|
||||||
bool uses_mova_gpr;
|
bool uses_mova_gpr;
|
||||||
|
|
||||||
|
bool r6xx_gpr_index_workaround;
|
||||||
|
|
||||||
bool stack_workaround_8xx;
|
bool stack_workaround_8xx;
|
||||||
bool stack_workaround_9xx;
|
bool stack_workaround_9xx;
|
||||||
|
|
||||||
|
@@ -38,6 +38,18 @@
|
|||||||
|
|
||||||
namespace r600_sb {
|
namespace r600_sb {
|
||||||
|
|
||||||
|
void bc_finalizer::insert_rv6xx_load_ar_workaround(alu_group_node *b4) {
|
||||||
|
|
||||||
|
alu_group_node *g = sh.create_alu_group();
|
||||||
|
alu_node *a = sh.create_alu();
|
||||||
|
|
||||||
|
a->bc.set_op(ALU_OP0_NOP);
|
||||||
|
a->bc.last = 1;
|
||||||
|
|
||||||
|
g->push_back(a);
|
||||||
|
b4->insert_before(g);
|
||||||
|
}
|
||||||
|
|
||||||
int bc_finalizer::run() {
|
int bc_finalizer::run() {
|
||||||
|
|
||||||
run_on(sh.root);
|
run_on(sh.root);
|
||||||
@@ -83,14 +95,18 @@ int bc_finalizer::run() {
|
|||||||
last_cf = c;
|
last_cf = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (last_cf->bc.op_ptr->flags & CF_ALU) {
|
if (!ctx.is_cayman() && last_cf->bc.op_ptr->flags & CF_ALU) {
|
||||||
last_cf = sh.create_cf(CF_OP_NOP);
|
last_cf = sh.create_cf(CF_OP_NOP);
|
||||||
sh.root->push_back(last_cf);
|
sh.root->push_back(last_cf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx.is_cayman())
|
if (ctx.is_cayman()) {
|
||||||
last_cf->insert_after(sh.create_cf(CF_OP_CF_END));
|
if (!last_cf) {
|
||||||
else
|
cf_node *c = sh.create_cf(CF_OP_CF_END);
|
||||||
|
sh.root->push_back(c);
|
||||||
|
} else
|
||||||
|
last_cf->insert_after(sh.create_cf(CF_OP_CF_END));
|
||||||
|
} else
|
||||||
last_cf->bc.end_of_program = 1;
|
last_cf->bc.end_of_program = 1;
|
||||||
|
|
||||||
for (unsigned t = EXP_PIXEL; t < EXP_TYPE_COUNT; ++t) {
|
for (unsigned t = EXP_PIXEL; t < EXP_TYPE_COUNT; ++t) {
|
||||||
@@ -106,6 +122,8 @@ int bc_finalizer::run() {
|
|||||||
|
|
||||||
void bc_finalizer::finalize_loop(region_node* r) {
|
void bc_finalizer::finalize_loop(region_node* r) {
|
||||||
|
|
||||||
|
update_nstack(r);
|
||||||
|
|
||||||
cf_node *loop_start = sh.create_cf(CF_OP_LOOP_START_DX10);
|
cf_node *loop_start = sh.create_cf(CF_OP_LOOP_START_DX10);
|
||||||
cf_node *loop_end = sh.create_cf(CF_OP_LOOP_END);
|
cf_node *loop_end = sh.create_cf(CF_OP_LOOP_END);
|
||||||
|
|
||||||
@@ -205,12 +223,12 @@ void bc_finalizer::finalize_if(region_node* r) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void bc_finalizer::run_on(container_node* c) {
|
void bc_finalizer::run_on(container_node* c) {
|
||||||
|
node *prev_node = NULL;
|
||||||
for (node_iterator I = c->begin(), E = c->end(); I != E; ++I) {
|
for (node_iterator I = c->begin(), E = c->end(); I != E; ++I) {
|
||||||
node *n = *I;
|
node *n = *I;
|
||||||
|
|
||||||
if (n->is_alu_group()) {
|
if (n->is_alu_group()) {
|
||||||
finalize_alu_group(static_cast<alu_group_node*>(n));
|
finalize_alu_group(static_cast<alu_group_node*>(n), prev_node);
|
||||||
} else {
|
} else {
|
||||||
if (n->is_alu_clause()) {
|
if (n->is_alu_clause()) {
|
||||||
cf_node *c = static_cast<cf_node*>(n);
|
cf_node *c = static_cast<cf_node*>(n);
|
||||||
@@ -245,17 +263,22 @@ void bc_finalizer::run_on(container_node* c) {
|
|||||||
if (n->is_container())
|
if (n->is_container())
|
||||||
run_on(static_cast<container_node*>(n));
|
run_on(static_cast<container_node*>(n));
|
||||||
}
|
}
|
||||||
|
prev_node = n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void bc_finalizer::finalize_alu_group(alu_group_node* g) {
|
void bc_finalizer::finalize_alu_group(alu_group_node* g, node *prev_node) {
|
||||||
|
|
||||||
alu_node *last = NULL;
|
alu_node *last = NULL;
|
||||||
|
alu_group_node *prev_g = NULL;
|
||||||
|
bool add_nop = false;
|
||||||
|
if (prev_node && prev_node->is_alu_group()) {
|
||||||
|
prev_g = static_cast<alu_group_node*>(prev_node);
|
||||||
|
}
|
||||||
|
|
||||||
for (node_iterator I = g->begin(), E = g->end(); I != E; ++I) {
|
for (node_iterator I = g->begin(), E = g->end(); I != E; ++I) {
|
||||||
alu_node *n = static_cast<alu_node*>(*I);
|
alu_node *n = static_cast<alu_node*>(*I);
|
||||||
unsigned slot = n->bc.slot;
|
unsigned slot = n->bc.slot;
|
||||||
|
|
||||||
value *d = n->dst.empty() ? NULL : n->dst[0];
|
value *d = n->dst.empty() ? NULL : n->dst[0];
|
||||||
|
|
||||||
if (d && d->is_special_reg()) {
|
if (d && d->is_special_reg()) {
|
||||||
@@ -293,17 +316,22 @@ void bc_finalizer::finalize_alu_group(alu_group_node* g) {
|
|||||||
|
|
||||||
update_ngpr(n->bc.dst_gpr);
|
update_ngpr(n->bc.dst_gpr);
|
||||||
|
|
||||||
finalize_alu_src(g, n);
|
add_nop |= finalize_alu_src(g, n, prev_g);
|
||||||
|
|
||||||
last = n;
|
last = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (add_nop) {
|
||||||
|
if (sh.get_ctx().r6xx_gpr_index_workaround) {
|
||||||
|
insert_rv6xx_load_ar_workaround(g);
|
||||||
|
}
|
||||||
|
}
|
||||||
last->bc.last = 1;
|
last->bc.last = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bc_finalizer::finalize_alu_src(alu_group_node* g, alu_node* a) {
|
bool bc_finalizer::finalize_alu_src(alu_group_node* g, alu_node* a, alu_group_node *prev) {
|
||||||
vvec &sv = a->src;
|
vvec &sv = a->src;
|
||||||
|
bool add_nop = false;
|
||||||
FBC_DUMP(
|
FBC_DUMP(
|
||||||
sblog << "finalize_alu_src: ";
|
sblog << "finalize_alu_src: ";
|
||||||
dump::dump_op(a);
|
dump::dump_op(a);
|
||||||
@@ -330,6 +358,15 @@ void bc_finalizer::finalize_alu_src(alu_group_node* g, alu_node* a) {
|
|||||||
if (!v->rel->is_const()) {
|
if (!v->rel->is_const()) {
|
||||||
src.rel = 1;
|
src.rel = 1;
|
||||||
update_ngpr(v->array->gpr.sel() + v->array->array_size -1);
|
update_ngpr(v->array->gpr.sel() + v->array->array_size -1);
|
||||||
|
if (prev && !add_nop) {
|
||||||
|
for (node_iterator pI = prev->begin(), pE = prev->end(); pI != pE; ++pI) {
|
||||||
|
alu_node *pn = static_cast<alu_node*>(*pI);
|
||||||
|
if (pn->bc.dst_gpr == src.sel) {
|
||||||
|
add_nop = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
src.rel = 0;
|
src.rel = 0;
|
||||||
|
|
||||||
@@ -387,11 +424,23 @@ void bc_finalizer::finalize_alu_src(alu_group_node* g, alu_node* a) {
|
|||||||
assert(!"unknown value kind");
|
assert(!"unknown value kind");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (prev && !add_nop) {
|
||||||
|
for (node_iterator pI = prev->begin(), pE = prev->end(); pI != pE; ++pI) {
|
||||||
|
alu_node *pn = static_cast<alu_node*>(*pI);
|
||||||
|
if (pn->bc.dst_rel) {
|
||||||
|
if (pn->bc.dst_gpr == src.sel) {
|
||||||
|
add_nop = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (si < 3) {
|
while (si < 3) {
|
||||||
a->bc.src[si++].sel = 0;
|
a->bc.src[si++].sel = 0;
|
||||||
}
|
}
|
||||||
|
return add_nop;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bc_finalizer::copy_fetch_src(fetch_node &dst, fetch_node &src, unsigned arg_start)
|
void bc_finalizer::copy_fetch_src(fetch_node &dst, fetch_node &src, unsigned arg_start)
|
||||||
|
@@ -758,6 +758,8 @@ int bc_parser::prepare_loop(cf_node* c) {
|
|||||||
c->insert_before(reg);
|
c->insert_before(reg);
|
||||||
rep->move(c, end->next);
|
rep->move(c, end->next);
|
||||||
|
|
||||||
|
reg->src_loop = true;
|
||||||
|
|
||||||
loop_stack.push(reg);
|
loop_stack.push(reg);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -61,6 +61,8 @@ int sb_context::init(r600_isa *isa, sb_hw_chip chip, sb_hw_class cclass) {
|
|||||||
|
|
||||||
uses_mova_gpr = is_r600() && chip != HW_CHIP_RV670;
|
uses_mova_gpr = is_r600() && chip != HW_CHIP_RV670;
|
||||||
|
|
||||||
|
r6xx_gpr_index_workaround = is_r600() && chip != HW_CHIP_RV670 && chip != HW_CHIP_RS780 && chip != HW_CHIP_RS880;
|
||||||
|
|
||||||
switch (chip) {
|
switch (chip) {
|
||||||
case HW_CHIP_RV610:
|
case HW_CHIP_RV610:
|
||||||
case HW_CHIP_RS780:
|
case HW_CHIP_RS780:
|
||||||
|
@@ -115,13 +115,13 @@ void if_conversion::convert_kill_instructions(region_node *r,
|
|||||||
bool if_conversion::check_and_convert(region_node *r) {
|
bool if_conversion::check_and_convert(region_node *r) {
|
||||||
|
|
||||||
depart_node *nd1 = static_cast<depart_node*>(r->first);
|
depart_node *nd1 = static_cast<depart_node*>(r->first);
|
||||||
if (!nd1->is_depart())
|
if (!nd1->is_depart() || nd1->target != r)
|
||||||
return false;
|
return false;
|
||||||
if_node *nif = static_cast<if_node*>(nd1->first);
|
if_node *nif = static_cast<if_node*>(nd1->first);
|
||||||
if (!nif->is_if())
|
if (!nif->is_if())
|
||||||
return false;
|
return false;
|
||||||
depart_node *nd2 = static_cast<depart_node*>(nif->first);
|
depart_node *nd2 = static_cast<depart_node*>(nif->first);
|
||||||
if (!nd2->is_depart())
|
if (!nd2->is_depart() || nd2->target != r)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
value* &em = nif->cond;
|
value* &em = nif->cond;
|
||||||
|
@@ -1089,7 +1089,8 @@ typedef std::vector<repeat_node*> repeat_vec;
|
|||||||
class region_node : public container_node {
|
class region_node : public container_node {
|
||||||
protected:
|
protected:
|
||||||
region_node(unsigned id) : container_node(NT_REGION, NST_LIST), region_id(id),
|
region_node(unsigned id) : container_node(NT_REGION, NST_LIST), region_id(id),
|
||||||
loop_phi(), phi(), vars_defined(), departs(), repeats() {}
|
loop_phi(), phi(), vars_defined(), departs(), repeats(), src_loop()
|
||||||
|
{}
|
||||||
public:
|
public:
|
||||||
unsigned region_id;
|
unsigned region_id;
|
||||||
|
|
||||||
@@ -1101,12 +1102,16 @@ public:
|
|||||||
depart_vec departs;
|
depart_vec departs;
|
||||||
repeat_vec repeats;
|
repeat_vec repeats;
|
||||||
|
|
||||||
|
// true if region was created for loop in the parser, sometimes repeat_node
|
||||||
|
// may be optimized away so we need to remember this information
|
||||||
|
bool src_loop;
|
||||||
|
|
||||||
virtual bool accept(vpass &p, bool enter);
|
virtual bool accept(vpass &p, bool enter);
|
||||||
|
|
||||||
unsigned dep_count() { return departs.size(); }
|
unsigned dep_count() { return departs.size(); }
|
||||||
unsigned rep_count() { return repeats.size() + 1; }
|
unsigned rep_count() { return repeats.size() + 1; }
|
||||||
|
|
||||||
bool is_loop() { return !repeats.empty(); }
|
bool is_loop() { return src_loop || !repeats.empty(); }
|
||||||
|
|
||||||
container_node* get_entry_code_location() {
|
container_node* get_entry_code_location() {
|
||||||
node *p = first;
|
node *p = first;
|
||||||
|
@@ -695,8 +695,9 @@ public:
|
|||||||
|
|
||||||
void run_on(container_node *c);
|
void run_on(container_node *c);
|
||||||
|
|
||||||
void finalize_alu_group(alu_group_node *g);
|
void insert_rv6xx_load_ar_workaround(alu_group_node *b4);
|
||||||
void finalize_alu_src(alu_group_node *g, alu_node *a);
|
void finalize_alu_group(alu_group_node *g, node *prev_node);
|
||||||
|
bool finalize_alu_src(alu_group_node *g, alu_node *a, alu_group_node *prev_node);
|
||||||
|
|
||||||
void emit_set_grad(fetch_node* f);
|
void emit_set_grad(fetch_node* f);
|
||||||
void finalize_fetch(fetch_node *f);
|
void finalize_fetch(fetch_node *f);
|
||||||
|
@@ -1527,6 +1527,9 @@ bool post_scheduler::check_copy(node *n) {
|
|||||||
|
|
||||||
if (!s->is_prealloc()) {
|
if (!s->is_prealloc()) {
|
||||||
recolor_local(s);
|
recolor_local(s);
|
||||||
|
|
||||||
|
if (!s->chunk || s->chunk != d->chunk)
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s->gpr == d->gpr) {
|
if (s->gpr == d->gpr) {
|
||||||
|
@@ -294,6 +294,7 @@ struct r600_so_target {
|
|||||||
/* The buffer where BUFFER_FILLED_SIZE is stored. */
|
/* The buffer where BUFFER_FILLED_SIZE is stored. */
|
||||||
struct r600_resource *buf_filled_size;
|
struct r600_resource *buf_filled_size;
|
||||||
unsigned buf_filled_size_offset;
|
unsigned buf_filled_size_offset;
|
||||||
|
bool buf_filled_size_valid;
|
||||||
|
|
||||||
unsigned stride_in_dw;
|
unsigned stride_in_dw;
|
||||||
};
|
};
|
||||||
|
@@ -237,7 +237,7 @@ static void r600_emit_streamout_begin(struct r600_common_context *rctx, struct r
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rctx->streamout.append_bitmask & (1 << i)) {
|
if (rctx->streamout.append_bitmask & (1 << i) && t[i]->buf_filled_size_valid) {
|
||||||
uint64_t va = t[i]->buf_filled_size->gpu_address +
|
uint64_t va = t[i]->buf_filled_size->gpu_address +
|
||||||
t[i]->buf_filled_size_offset;
|
t[i]->buf_filled_size_offset;
|
||||||
|
|
||||||
@@ -302,6 +302,8 @@ void r600_emit_streamout_end(struct r600_common_context *rctx)
|
|||||||
* buffer bound. This ensures that the primitives-emitted query
|
* buffer bound. This ensures that the primitives-emitted query
|
||||||
* won't increment. */
|
* won't increment. */
|
||||||
r600_write_context_reg(cs, R_028AD0_VGT_STRMOUT_BUFFER_SIZE_0 + 16*i, 0);
|
r600_write_context_reg(cs, R_028AD0_VGT_STRMOUT_BUFFER_SIZE_0 + 16*i, 0);
|
||||||
|
|
||||||
|
t[i]->buf_filled_size_valid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
rctx->streamout.begin_emitted = false;
|
rctx->streamout.begin_emitted = false;
|
||||||
|
@@ -80,10 +80,6 @@ void radeon_llvm_shader_type(LLVMValueRef F, unsigned type)
|
|||||||
sprintf(Str, "%1d", llvm_type);
|
sprintf(Str, "%1d", llvm_type);
|
||||||
|
|
||||||
LLVMAddTargetDependentFunctionAttr(F, "ShaderType", Str);
|
LLVMAddTargetDependentFunctionAttr(F, "ShaderType", Str);
|
||||||
|
|
||||||
if (type != TGSI_PROCESSOR_COMPUTE) {
|
|
||||||
LLVMAddTargetDependentFunctionAttr(F, "unsafe-fp-math", "true");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_r600_target()
|
static void init_r600_target()
|
||||||
|
@@ -748,7 +748,7 @@ static void txp_fetch_args(
|
|||||||
const struct tgsi_full_instruction * inst = emit_data->inst;
|
const struct tgsi_full_instruction * inst = emit_data->inst;
|
||||||
LLVMValueRef src_w;
|
LLVMValueRef src_w;
|
||||||
unsigned chan;
|
unsigned chan;
|
||||||
LLVMValueRef coords[4];
|
LLVMValueRef coords[5];
|
||||||
|
|
||||||
emit_data->dst_type = LLVMVectorType(bld_base->base.elem_type, 4);
|
emit_data->dst_type = LLVMVectorType(bld_base->base.elem_type, 4);
|
||||||
src_w = lp_build_emit_fetch(bld_base, emit_data->inst, 0, TGSI_CHAN_W);
|
src_w = lp_build_emit_fetch(bld_base, emit_data->inst, 0, TGSI_CHAN_W);
|
||||||
|
@@ -250,6 +250,21 @@ void si_dma_copy(struct pipe_context *ctx,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* XXX: Using the asynchronous DMA engine for multi-dimensional
|
||||||
|
* operations seems to cause random GPU lockups for various people.
|
||||||
|
* While the root cause for this might need to be fixed in the kernel,
|
||||||
|
* let's disable it for now.
|
||||||
|
*
|
||||||
|
* Before re-enabling this, please make sure you can hit all newly
|
||||||
|
* enabled paths in your testing, preferably with both piglit and real
|
||||||
|
* world apps, and get in touch with people on the bug reports below
|
||||||
|
* for stability testing.
|
||||||
|
*
|
||||||
|
* https://bugs.freedesktop.org/show_bug.cgi?id=85647
|
||||||
|
* https://bugs.freedesktop.org/show_bug.cgi?id=83500
|
||||||
|
*/
|
||||||
|
goto fallback;
|
||||||
|
|
||||||
if (src->format != dst->format || src_box->depth > 1 ||
|
if (src->format != dst->format || src_box->depth > 1 ||
|
||||||
rdst->dirty_level_mask != 0 ||
|
rdst->dirty_level_mask != 0 ||
|
||||||
rdst->cmask.size || rdst->fmask.size ||
|
rdst->cmask.size || rdst->fmask.size ||
|
||||||
|
@@ -228,14 +228,14 @@ static LLVMValueRef get_instance_index_for_fetch(
|
|||||||
|
|
||||||
LLVMValueRef result = LLVMGetParam(radeon_bld->main_fn,
|
LLVMValueRef result = LLVMGetParam(radeon_bld->main_fn,
|
||||||
si_shader_ctx->param_instance_id);
|
si_shader_ctx->param_instance_id);
|
||||||
result = LLVMBuildAdd(gallivm->builder, result, LLVMGetParam(
|
|
||||||
radeon_bld->main_fn, SI_PARAM_START_INSTANCE), "");
|
|
||||||
|
|
||||||
|
/* The division must be done before START_INSTANCE is added. */
|
||||||
if (divisor > 1)
|
if (divisor > 1)
|
||||||
result = LLVMBuildUDiv(gallivm->builder, result,
|
result = LLVMBuildUDiv(gallivm->builder, result,
|
||||||
lp_build_const_int32(gallivm, divisor), "");
|
lp_build_const_int32(gallivm, divisor), "");
|
||||||
|
|
||||||
return result;
|
return LLVMBuildAdd(gallivm->builder, result, LLVMGetParam(
|
||||||
|
radeon_bld->main_fn, SI_PARAM_START_INSTANCE), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void declare_input_vs(
|
static void declare_input_vs(
|
||||||
@@ -590,8 +590,11 @@ static void declare_system_value(
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TGSI_SEMANTIC_VERTEXID:
|
case TGSI_SEMANTIC_VERTEXID:
|
||||||
value = LLVMGetParam(radeon_bld->main_fn,
|
value = LLVMBuildAdd(gallivm->builder,
|
||||||
si_shader_ctx->param_vertex_id);
|
LLVMGetParam(radeon_bld->main_fn,
|
||||||
|
si_shader_ctx->param_vertex_id),
|
||||||
|
LLVMGetParam(radeon_bld->main_fn,
|
||||||
|
SI_PARAM_BASE_VERTEX), "");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGSI_SEMANTIC_SAMPLEID:
|
case TGSI_SEMANTIC_SAMPLEID:
|
||||||
@@ -1502,7 +1505,7 @@ static void tex_fetch_args(
|
|||||||
const struct tgsi_full_instruction * inst = emit_data->inst;
|
const struct tgsi_full_instruction * inst = emit_data->inst;
|
||||||
unsigned opcode = inst->Instruction.Opcode;
|
unsigned opcode = inst->Instruction.Opcode;
|
||||||
unsigned target = inst->Texture.Texture;
|
unsigned target = inst->Texture.Texture;
|
||||||
LLVMValueRef coords[4];
|
LLVMValueRef coords[5];
|
||||||
LLVMValueRef address[16];
|
LLVMValueRef address[16];
|
||||||
int ref_pos;
|
int ref_pos;
|
||||||
unsigned num_coords = tgsi_util_get_texture_coord_dim(target, &ref_pos);
|
unsigned num_coords = tgsi_util_get_texture_coord_dim(target, &ref_pos);
|
||||||
|
@@ -697,12 +697,16 @@ static void si_delete_rs_state(struct pipe_context *ctx, void *state)
|
|||||||
*/
|
*/
|
||||||
static void si_update_dsa_stencil_ref(struct si_context *sctx)
|
static void si_update_dsa_stencil_ref(struct si_context *sctx)
|
||||||
{
|
{
|
||||||
struct si_pm4_state *pm4 = CALLOC_STRUCT(si_pm4_state);
|
struct si_pm4_state *pm4;
|
||||||
struct pipe_stencil_ref *ref = &sctx->stencil_ref;
|
struct pipe_stencil_ref *ref = &sctx->stencil_ref;
|
||||||
struct si_state_dsa *dsa = sctx->queued.named.dsa;
|
struct si_state_dsa *dsa = sctx->queued.named.dsa;
|
||||||
|
|
||||||
if (pm4 == NULL)
|
if (!dsa)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
pm4 = CALLOC_STRUCT(si_pm4_state);
|
||||||
|
if (pm4 == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
si_pm4_set_reg(pm4, R_028430_DB_STENCILREFMASK,
|
si_pm4_set_reg(pm4, R_028430_DB_STENCILREFMASK,
|
||||||
S_028430_STENCILTESTVAL(ref->ref_value[0]) |
|
S_028430_STENCILTESTVAL(ref->ref_value[0]) |
|
||||||
@@ -3081,6 +3085,110 @@ void si_init_state_functions(struct si_context *sctx)
|
|||||||
sctx->b.b.draw_vbo = si_draw_vbo;
|
sctx->b.b.draw_vbo = si_draw_vbo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
si_write_harvested_raster_configs(struct si_context *sctx,
|
||||||
|
struct si_pm4_state *pm4,
|
||||||
|
unsigned raster_config)
|
||||||
|
{
|
||||||
|
unsigned sh_per_se = MAX2(sctx->screen->b.info.max_sh_per_se, 1);
|
||||||
|
unsigned num_se = MAX2(sctx->screen->b.info.max_se, 1);
|
||||||
|
unsigned rb_mask = sctx->screen->b.info.si_backend_enabled_mask;
|
||||||
|
unsigned num_rb = sctx->screen->b.info.r600_num_backends;
|
||||||
|
unsigned rb_per_pkr = num_rb / num_se / sh_per_se;
|
||||||
|
unsigned rb_per_se = num_rb / num_se;
|
||||||
|
unsigned se0_mask = (1 << rb_per_se) - 1;
|
||||||
|
unsigned se1_mask = se0_mask << rb_per_se;
|
||||||
|
unsigned se;
|
||||||
|
|
||||||
|
assert(num_se == 1 || num_se == 2);
|
||||||
|
assert(sh_per_se == 1 || sh_per_se == 2);
|
||||||
|
assert(rb_per_pkr == 1 || rb_per_pkr == 2);
|
||||||
|
|
||||||
|
/* XXX: I can't figure out what the *_XSEL and *_YSEL
|
||||||
|
* fields are for, so I'm leaving them as their default
|
||||||
|
* values. */
|
||||||
|
|
||||||
|
se0_mask &= rb_mask;
|
||||||
|
se1_mask &= rb_mask;
|
||||||
|
if (num_se == 2 && (!se0_mask || !se1_mask)) {
|
||||||
|
raster_config &= C_028350_SE_MAP;
|
||||||
|
|
||||||
|
if (!se0_mask) {
|
||||||
|
raster_config |=
|
||||||
|
S_028350_SE_MAP(V_028350_RASTER_CONFIG_SE_MAP_3);
|
||||||
|
} else {
|
||||||
|
raster_config |=
|
||||||
|
S_028350_SE_MAP(V_028350_RASTER_CONFIG_SE_MAP_0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (se = 0; se < num_se; se++) {
|
||||||
|
unsigned raster_config_se = raster_config;
|
||||||
|
unsigned pkr0_mask = ((1 << rb_per_pkr) - 1) << (se * rb_per_se);
|
||||||
|
unsigned pkr1_mask = pkr0_mask << rb_per_pkr;
|
||||||
|
|
||||||
|
pkr0_mask &= rb_mask;
|
||||||
|
pkr1_mask &= rb_mask;
|
||||||
|
if (sh_per_se == 2 && (!pkr0_mask || !pkr1_mask)) {
|
||||||
|
raster_config_se &= C_028350_PKR_MAP;
|
||||||
|
|
||||||
|
if (!pkr0_mask) {
|
||||||
|
raster_config_se |=
|
||||||
|
S_028350_PKR_MAP(V_028350_RASTER_CONFIG_PKR_MAP_3);
|
||||||
|
} else {
|
||||||
|
raster_config_se |=
|
||||||
|
S_028350_PKR_MAP(V_028350_RASTER_CONFIG_PKR_MAP_0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rb_per_pkr == 2) {
|
||||||
|
unsigned rb0_mask = 1 << (se * rb_per_se);
|
||||||
|
unsigned rb1_mask = rb0_mask << 1;
|
||||||
|
|
||||||
|
rb0_mask &= rb_mask;
|
||||||
|
rb1_mask &= rb_mask;
|
||||||
|
if (!rb0_mask || !rb1_mask) {
|
||||||
|
raster_config_se &= C_028350_RB_MAP_PKR0;
|
||||||
|
|
||||||
|
if (!rb0_mask) {
|
||||||
|
raster_config_se |=
|
||||||
|
S_028350_RB_MAP_PKR0(V_028350_RASTER_CONFIG_RB_MAP_3);
|
||||||
|
} else {
|
||||||
|
raster_config_se |=
|
||||||
|
S_028350_RB_MAP_PKR0(V_028350_RASTER_CONFIG_RB_MAP_0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sh_per_se == 2) {
|
||||||
|
rb0_mask = 1 << (se * rb_per_se + rb_per_pkr);
|
||||||
|
rb1_mask = rb0_mask << 1;
|
||||||
|
rb0_mask &= rb_mask;
|
||||||
|
rb1_mask &= rb_mask;
|
||||||
|
if (!rb0_mask || !rb1_mask) {
|
||||||
|
raster_config_se &= C_028350_RB_MAP_PKR1;
|
||||||
|
|
||||||
|
if (!rb0_mask) {
|
||||||
|
raster_config_se |=
|
||||||
|
S_028350_RB_MAP_PKR1(V_028350_RASTER_CONFIG_RB_MAP_3);
|
||||||
|
} else {
|
||||||
|
raster_config_se |=
|
||||||
|
S_028350_RB_MAP_PKR1(V_028350_RASTER_CONFIG_RB_MAP_0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
si_pm4_set_reg(pm4, GRBM_GFX_INDEX,
|
||||||
|
SE_INDEX(se) | SH_BROADCAST_WRITES |
|
||||||
|
INSTANCE_BROADCAST_WRITES);
|
||||||
|
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, raster_config_se);
|
||||||
|
}
|
||||||
|
|
||||||
|
si_pm4_set_reg(pm4, GRBM_GFX_INDEX,
|
||||||
|
SE_BROADCAST_WRITES | SH_BROADCAST_WRITES |
|
||||||
|
INSTANCE_BROADCAST_WRITES);
|
||||||
|
}
|
||||||
|
|
||||||
void si_init_config(struct si_context *sctx)
|
void si_init_config(struct si_context *sctx)
|
||||||
{
|
{
|
||||||
struct si_pm4_state *pm4 = CALLOC_STRUCT(si_pm4_state);
|
struct si_pm4_state *pm4 = CALLOC_STRUCT(si_pm4_state);
|
||||||
@@ -3152,24 +3260,40 @@ void si_init_config(struct si_context *sctx)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
unsigned rb_mask = sctx->screen->b.info.si_backend_enabled_mask;
|
||||||
|
unsigned num_rb = sctx->screen->b.info.r600_num_backends;
|
||||||
|
unsigned raster_config;
|
||||||
|
|
||||||
switch (sctx->screen->b.family) {
|
switch (sctx->screen->b.family) {
|
||||||
case CHIP_TAHITI:
|
case CHIP_TAHITI:
|
||||||
case CHIP_PITCAIRN:
|
case CHIP_PITCAIRN:
|
||||||
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, 0x2a00126a);
|
raster_config = 0x2a00126a;
|
||||||
break;
|
break;
|
||||||
case CHIP_VERDE:
|
case CHIP_VERDE:
|
||||||
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, 0x0000124a);
|
raster_config = 0x0000124a;
|
||||||
break;
|
break;
|
||||||
case CHIP_OLAND:
|
case CHIP_OLAND:
|
||||||
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, 0x00000082);
|
raster_config = 0x00000082;
|
||||||
break;
|
break;
|
||||||
case CHIP_HAINAN:
|
case CHIP_HAINAN:
|
||||||
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, 0x00000000);
|
raster_config = 0x00000000;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, 0x00000000);
|
fprintf(stderr,
|
||||||
|
"radeonsi: Unknown GPU, using 0 for raster_config\n");
|
||||||
|
raster_config = 0x00000000;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Always use the default config when all backends are enabled
|
||||||
|
* (or when we failed to determine the enabled backends).
|
||||||
|
*/
|
||||||
|
if (!rb_mask || util_bitcount(rb_mask) >= num_rb) {
|
||||||
|
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG,
|
||||||
|
raster_config);
|
||||||
|
} else {
|
||||||
|
si_write_harvested_raster_configs(sctx, pm4, raster_config);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
si_pm4_set_reg(pm4, R_028204_PA_SC_WINDOW_SCISSOR_TL, S_028204_WINDOW_OFFSET_DISABLE(1));
|
si_pm4_set_reg(pm4, R_028204_PA_SC_WINDOW_SCISSOR_TL, S_028204_WINDOW_OFFSET_DISABLE(1));
|
||||||
|
@@ -237,20 +237,21 @@ static void si_shader_ps(struct si_shader *shader)
|
|||||||
for (i = 0; i < info->num_inputs; i++) {
|
for (i = 0; i < info->num_inputs; i++) {
|
||||||
switch (info->input_semantic_name[i]) {
|
switch (info->input_semantic_name[i]) {
|
||||||
case TGSI_SEMANTIC_POSITION:
|
case TGSI_SEMANTIC_POSITION:
|
||||||
if (info->input_interpolate_loc[i] ==
|
/* SPI_BARYC_CNTL.POS_FLOAT_LOCATION
|
||||||
TGSI_INTERPOLATE_LOC_CENTROID) {
|
* Possible vaules:
|
||||||
/* SPI_BARYC_CNTL.POS_FLOAT_LOCATION
|
* 0 -> Position = pixel center (default)
|
||||||
* Possible vaules:
|
* 1 -> Position = pixel centroid
|
||||||
* 0 -> Position = pixel center (default)
|
* 2 -> Position = at sample position
|
||||||
* 1 -> Position = pixel centroid
|
*/
|
||||||
* 2 -> Position = iterated sample number XXX:
|
switch (info->input_interpolate_loc[i]) {
|
||||||
* What does this mean?
|
case TGSI_INTERPOLATE_LOC_CENTROID:
|
||||||
*/
|
|
||||||
spi_baryc_cntl |= S_0286E0_POS_FLOAT_LOCATION(1);
|
spi_baryc_cntl |= S_0286E0_POS_FLOAT_LOCATION(1);
|
||||||
|
break;
|
||||||
|
case TGSI_INTERPOLATE_LOC_SAMPLE:
|
||||||
|
spi_baryc_cntl |= S_0286E0_POS_FLOAT_LOCATION(2);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
/* Fall through */
|
break;
|
||||||
case TGSI_SEMANTIC_FACE:
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -543,9 +544,11 @@ bcolor:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (j == vsinfo->num_outputs) {
|
if (j == vsinfo->num_outputs && !G_028644_PT_SPRITE_TEX(tmp)) {
|
||||||
/* No corresponding output found, load defaults into input */
|
/* No corresponding output found, load defaults into input.
|
||||||
tmp |= S_028644_OFFSET(0x20);
|
* Don't set any other bits.
|
||||||
|
* (FLAT_SHADE=1 completely changes behavior) */
|
||||||
|
tmp = S_028644_OFFSET(0x20);
|
||||||
}
|
}
|
||||||
|
|
||||||
si_pm4_set_reg(pm4,
|
si_pm4_set_reg(pm4,
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user