Compare commits
221 Commits
mesa-12.0.
...
mesa-10.4.
Author | SHA1 | Date | |
---|---|---|---|
|
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 |
2
bin/.cherry-ignore
Normal file
2
bin/.cherry-ignore
Normal file
@@ -0,0 +1,2 @@
|
||||
# No whitespace commits in stable.
|
||||
a10bf5c10caf27232d4df8da74d5c35c23eb883d
|
@@ -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
|
||||
|
||||
# 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
|
||||
do
|
||||
# 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 Optional flags, check for compiler support
|
||||
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
|
||||
DEFINES="$DEFINES -DUSE_SSE41"
|
||||
fi
|
||||
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 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="$enableval"],
|
||||
[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],
|
||||
[AS_HELP_STRING([--enable-xvmc],
|
||||
@@ -733,6 +756,7 @@ esac
|
||||
if test "x$enable_opengl" = xno -a \
|
||||
"x$enable_gles1" = xno -a \
|
||||
"x$enable_gles2" = xno -a \
|
||||
"x$enable_nine" = xno -a \
|
||||
"x$enable_openvg" = xno -a \
|
||||
"x$enable_xa" = xno -a \
|
||||
"x$enable_xvmc" = xno -a \
|
||||
@@ -1385,6 +1409,24 @@ if test "x$enable_va" = xyes; then
|
||||
fi
|
||||
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 OpenCL configuration
|
||||
dnl
|
||||
@@ -1674,7 +1716,7 @@ if test "x$enable_gallium_llvm" = xyes; then
|
||||
fi
|
||||
|
||||
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
|
||||
if $LLVM_CONFIG --components | grep -qw 'irreader'; then
|
||||
LLVM_COMPONENTS="${LLVM_COMPONENTS} irreader"
|
||||
@@ -1759,6 +1801,13 @@ AC_ARG_WITH([va-libdir],
|
||||
[VA_LIB_INSTALL_DIR="${libdir}/dri"])
|
||||
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 Gallium helper functions
|
||||
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_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_MINOR], 0)
|
||||
|
||||
@@ -2112,6 +2166,7 @@ AC_CONFIG_FILES([Makefile
|
||||
src/gallium/state_trackers/clover/Makefile
|
||||
src/gallium/state_trackers/dri/Makefile
|
||||
src/gallium/state_trackers/glx/xlib/Makefile
|
||||
src/gallium/state_trackers/nine/Makefile
|
||||
src/gallium/state_trackers/omx/Makefile
|
||||
src/gallium/state_trackers/osmesa/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/xa/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/egl-static/Makefile
|
||||
src/gallium/targets/gbm/Makefile
|
||||
|
@@ -187,7 +187,7 @@ GL 4.4, GLSL 4.40:
|
||||
GL 4.5, GLSL 4.50:
|
||||
|
||||
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_cull_distance not started
|
||||
GL_ARB_derivative_control DONE (i965, nv50, nvc0, r600)
|
||||
|
@@ -16,6 +16,13 @@
|
||||
|
||||
<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>
|
||||
<p>
|
||||
<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>
|
||||
|
||||
<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.2.html">10.3.2 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
|
||||
between them and libxatracker.so is <strong>not</strong> stable.
|
||||
</p>
|
||||
|
||||
<li>The environment variable GALLIUM_MSAA that forced a multisample GLX visual was removed.</li>
|
||||
</ul>
|
||||
|
||||
</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>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>
|
||||
</li>The environment variable GALLIUM_MSAA that forced a multisample GLX visual was removed.</li>
|
||||
</ul>
|
||||
|
||||
</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>
|
141
docs/relnotes/10.4.6.html
Normal file
141
docs/relnotes/10.4.6.html
Normal file
@@ -0,0 +1,141 @@
|
||||
<!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>
|
||||
TBD
|
||||
</pre>
|
||||
|
||||
<h2>New features</h2>
|
||||
<p>None</p>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
||||
<p>This list is likely incomplete.</p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=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>
|
@@ -14,7 +14,7 @@
|
||||
<iframe src="../contents.html"></iframe>
|
||||
<div class="content">
|
||||
|
||||
<h1>Mesa 10.4 Release Notes / TBD</h1>
|
||||
<h1>Mesa 10.4 Release Notes / December 14, 2014</h1>
|
||||
|
||||
<p>
|
||||
Mesa 10.4 is a new development release.
|
||||
@@ -31,9 +31,11 @@ because compatibility contexts are not supported.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>MD5 checksums</h2>
|
||||
<h2>SHA256 checksums</h2>
|
||||
<pre>
|
||||
TBD.
|
||||
abfbfd2d91ce81491c5bb6923ae649212ad5f82d0bee277de8704cc948dc221e MesaLib-10.4.0.tar.gz
|
||||
98a7dff3a1a6708c79789de8b9a05d8042e867067f70e8f30387c15026233219 MesaLib-10.4.0.tar.bz2
|
||||
443a6d46d0691b5ac811d8d30091b1716c365689b16d49c57cf273c2b76086fe MesaLib-10.4.0.zip
|
||||
</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_sample_shading on r600</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>
|
||||
</ul>
|
||||
|
||||
|
||||
<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>
|
||||
|
||||
<ul>
|
||||
<li>The environment variable GALLIUM_MSAA that forced a multisample GLX visual was removed.</li>
|
||||
</ul>
|
||||
|
||||
</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 HAVE_COMPAT_SYMLINKS
|
||||
all-local : .libs/install-mesa-links
|
||||
all-local : .install-mesa-links
|
||||
|
||||
.libs/install-mesa-links : $(lib_LTLIBRARIES)
|
||||
.install-mesa-links : $(lib_LTLIBRARIES)
|
||||
$(AM_V_GEN)$(MKDIR_P) $(top_builddir)/$(LIB_DIR); \
|
||||
for f in $(join $(addsuffix .libs/,$(dir $(lib_LTLIBRARIES))),$(notdir $(lib_LTLIBRARIES:%.la=%.$(LIB_EXT)*))); do \
|
||||
if test -h .libs/$$f; then \
|
||||
@@ -14,5 +14,9 @@ all-local : .libs/install-mesa-links
|
||||
ln -f $$f $(top_builddir)/$(LIB_DIR); \
|
||||
fi; \
|
||||
done && touch $@
|
||||
|
||||
clean-local:
|
||||
$(RM) .install-mesa-links
|
||||
|
||||
endif
|
||||
endif
|
||||
|
@@ -621,7 +621,7 @@ def generate(env):
|
||||
env.Tool('custom')
|
||||
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('XF86VIDMODE', ['xxf86vm'])
|
||||
env.PkgCheckModules('DRM', ['libdrm >= 2.4.38'])
|
||||
|
@@ -49,8 +49,7 @@ dri2_x11_swap_interval(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf,
|
||||
|
||||
static void
|
||||
swrastCreateDrawable(struct dri2_egl_display * dri2_dpy,
|
||||
struct dri2_egl_surface * dri2_surf,
|
||||
int depth)
|
||||
struct dri2_egl_surface * dri2_surf)
|
||||
{
|
||||
uint32_t mask;
|
||||
const uint32_t function = GXcopy;
|
||||
@@ -66,8 +65,7 @@ swrastCreateDrawable(struct dri2_egl_display * dri2_dpy,
|
||||
valgc[0] = function;
|
||||
valgc[1] = False;
|
||||
xcb_create_gc(dri2_dpy->conn, dri2_surf->swapgc, dri2_surf->drawable, mask, valgc);
|
||||
dri2_surf->depth = depth;
|
||||
switch (depth) {
|
||||
switch (dri2_surf->depth) {
|
||||
case 32:
|
||||
case 24:
|
||||
dri2_surf->bytes_per_pixel = 4;
|
||||
@@ -82,7 +80,7 @@ swrastCreateDrawable(struct dri2_egl_display * dri2_dpy,
|
||||
dri2_surf->bytes_per_pixel = 0;
|
||||
break;
|
||||
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");
|
||||
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) {
|
||||
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.Height = reply->height;
|
||||
dri2_surf->depth = reply->depth;
|
||||
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 */
|
||||
dri2_surf->base.PostSubBufferSupportedNV = EGL_TRUE;
|
||||
|
||||
|
@@ -58,7 +58,8 @@ GALLIUM_WINSYS_CFLAGS = \
|
||||
|
||||
|
||||
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
|
||||
GALLIUM_PIPE_LOADER_WINSYS_LIBS += \
|
||||
|
@@ -166,6 +166,10 @@ if HAVE_ST_XVMC
|
||||
SUBDIRS += state_trackers/xvmc targets/xvmc
|
||||
endif
|
||||
|
||||
if HAVE_ST_NINE
|
||||
SUBDIRS += state_trackers/nine targets/d3dadapter9
|
||||
endif
|
||||
|
||||
##
|
||||
## Don't forget to bundle the remaining (non autotools) state-trackers/targets
|
||||
##
|
||||
|
@@ -124,6 +124,9 @@ util_primconvert_draw_vbo(struct primconvert_context *pc,
|
||||
new_info.indexed = true;
|
||||
new_info.min_index = info->min_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) {
|
||||
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,
|
||||
PIPE_TRANSFER_READ, &src_transfer);
|
||||
}
|
||||
src = (const uint8_t *)src + ib->offset;
|
||||
}
|
||||
else {
|
||||
u_index_generator(pc->primtypes_mask,
|
||||
|
@@ -118,7 +118,7 @@ os_get_total_physical_memory(uint64_t *size)
|
||||
*size = phys_pages * page_size;
|
||||
return (phys_pages > 0 && page_size > 0);
|
||||
#elif defined(PIPE_OS_APPLE) || defined(PIPE_OS_BSD)
|
||||
size_t len = sizeof(size);
|
||||
size_t len = sizeof(*size);
|
||||
int mib[2];
|
||||
|
||||
mib[0] = CTL_HW;
|
||||
@@ -134,7 +134,7 @@ os_get_total_physical_memory(uint64_t *size)
|
||||
#error Unsupported *BSD
|
||||
#endif
|
||||
|
||||
return (sysctl(mib, 2, &size, &len, NULL, 0) == 0);
|
||||
return (sysctl(mib, 2, size, &len, NULL, 0) == 0);
|
||||
#elif defined(PIPE_OS_HAIKU)
|
||||
system_info info;
|
||||
status_t ret;
|
||||
|
@@ -166,6 +166,17 @@ pipe_loader_sw_probe_null(struct pipe_loader_device **devs);
|
||||
int
|
||||
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
|
||||
|
||||
/**
|
||||
|
@@ -31,6 +31,7 @@
|
||||
#include "util/u_dl.h"
|
||||
#include "sw/dri/dri_sw_winsys.h"
|
||||
#include "sw/null/null_sw_winsys.h"
|
||||
#include "sw/wrapper/wrapper_sw_winsys.h"
|
||||
#ifdef HAVE_PIPE_LOADER_XLIB
|
||||
/* Explicitly wrap the header to ease build without X11 headers */
|
||||
#include "sw/xlib/xlib_sw_winsys.h"
|
||||
@@ -140,6 +141,28 @@ pipe_loader_sw_probe(struct pipe_loader_device **devs, int ndev)
|
||||
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
|
||||
pipe_loader_sw_release(struct pipe_loader_device **dev)
|
||||
{
|
||||
|
@@ -91,6 +91,34 @@ drisw_create_screen(struct drisw_loader_funcs *lf)
|
||||
return screen;
|
||||
}
|
||||
#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
|
||||
|
||||
|
||||
|
@@ -201,6 +201,7 @@ OP13_SAMPLE(GATHER4)
|
||||
OP12(SVIEWINFO)
|
||||
OP13(SAMPLE_POS)
|
||||
OP12(SAMPLE_INFO)
|
||||
OP11(UARL)
|
||||
|
||||
OP13(UCMP)
|
||||
|
||||
|
@@ -68,6 +68,18 @@ p_atomic_dec(int32_t *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
|
||||
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));
|
||||
}
|
||||
|
||||
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
|
||||
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);
|
||||
}
|
||||
|
||||
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
|
||||
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_inc(_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))
|
||||
|
||||
#endif
|
||||
@@ -288,12 +326,24 @@ p_atomic_inc(int32_t *v)
|
||||
_InterlockedIncrement((long *)v);
|
||||
}
|
||||
|
||||
static INLINE int32_t
|
||||
p_atomic_inc_return(int32_t *v)
|
||||
{
|
||||
return _InterlockedIncrement((long *)v);
|
||||
}
|
||||
|
||||
static INLINE void
|
||||
p_atomic_dec(int32_t *v)
|
||||
{
|
||||
_InterlockedDecrement((long *)v);
|
||||
}
|
||||
|
||||
static INLINE int32_t
|
||||
p_atomic_dec_return(int32_t *v)
|
||||
{
|
||||
return _InterlockedDecrement((long *)v);
|
||||
}
|
||||
|
||||
static INLINE int32_t
|
||||
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_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) \
|
||||
atomic_cas_32( (uint32_t *) _v, (uint32_t) _old, (uint32_t) _new)
|
||||
|
@@ -2,6 +2,7 @@
|
||||
#define UTIL_BOX_INLINES_H
|
||||
|
||||
#include "pipe/p_state.h"
|
||||
#include "util/u_math.h"
|
||||
|
||||
static INLINE
|
||||
void u_box_1d( unsigned x,
|
||||
@@ -77,4 +78,121 @@ void u_box_3d( unsigned x,
|
||||
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
|
||||
|
@@ -272,7 +272,7 @@ static INLINE uint64_t xgetbv(void)
|
||||
|
||||
|
||||
#if defined(PIPE_ARCH_X86)
|
||||
static INLINE boolean sse2_has_daz(void)
|
||||
PIPE_ALIGN_STACK static INLINE boolean sse2_has_daz(void)
|
||||
{
|
||||
struct {
|
||||
uint32_t pad1[7];
|
||||
@@ -409,8 +409,12 @@ util_cpu_detect(void)
|
||||
}
|
||||
|
||||
if (regs[0] >= 0x80000006) {
|
||||
/* should we really do this if the clflush size above worked? */
|
||||
unsigned int cacheline;
|
||||
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) {
|
||||
|
@@ -561,14 +561,10 @@ util_last_bit(unsigned u)
|
||||
static INLINE unsigned
|
||||
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)
|
||||
return util_last_bit(i);
|
||||
else
|
||||
return util_last_bit(~(unsigned)i);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Destructively loop over all of the bits in a mask as in:
|
||||
|
@@ -30,6 +30,7 @@
|
||||
#define U_RECT_H
|
||||
|
||||
#include "pipe/p_compiler.h"
|
||||
#include "util/u_math.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
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
|
||||
u_rect_possible_intersection(const struct u_rect *a,
|
||||
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
|
||||
}
|
||||
#endif
|
||||
|
@@ -124,6 +124,76 @@ void *util_make_layered_clear_vertex_shader(struct pipe_context *pipe)
|
||||
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:
|
||||
|
@@ -59,6 +59,12 @@ util_make_vertex_passthrough_shader_with_so(struct pipe_context *pipe,
|
||||
extern void *
|
||||
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 *
|
||||
util_make_fragment_tex_shader_writemask(struct pipe_context *pipe,
|
||||
unsigned tex_target,
|
||||
|
@@ -176,7 +176,7 @@
|
||||
#define HAVE_ASPRINTF 1 /* not needed */
|
||||
#define HAVE_STDARG_H 1
|
||||
#define HAVE_STDDEF_H 1
|
||||
#define HAVE_STDINT_H 0
|
||||
#define HAVE_STDINT_H 1
|
||||
#define HAVE_STDLIB_H 1
|
||||
#define HAVE_INTTYPES_H 0
|
||||
#define HAVE_LOCALE_H 0
|
||||
|
@@ -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_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_DEST_FACTOR(fd_blend_factor(rt->alpha_dst_factor)) |
|
||||
A3XX_RB_MRT_BLEND_CONTROL_CLAMP_ENABLE;
|
||||
A3XX_RB_MRT_BLEND_CONTROL_ALPHA_DEST_FACTOR(fd_blend_factor(rt->alpha_dst_factor));
|
||||
|
||||
so->rb_mrt[i].control =
|
||||
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);
|
||||
uint32_t 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_RING(ring, blend->rb_mrt[i].control);
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -2112,7 +2112,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 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
|
||||
trans_umul(const struct instr_translater *t,
|
||||
@@ -2135,16 +2135,16 @@ trans_umul(const struct instr_translater *t,
|
||||
if (is_rel_or_const(b))
|
||||
b = get_unconst(ctx, b);
|
||||
|
||||
if (t->tgsi_opc == TGSI_OPCODE_UMUL) {
|
||||
/* mull.u tmp0, a, b */
|
||||
instr = instr_create(ctx, 2, OPC_MULL_U);
|
||||
vectorize(ctx, instr, &tmp0_dst, 2, a, 0, b, 0);
|
||||
} else {
|
||||
/* mull.u tmp0, a, b */
|
||||
instr = instr_create(ctx, 2, OPC_MULL_U);
|
||||
vectorize(ctx, instr, &tmp0_dst, 2, a, 0, b, 0);
|
||||
|
||||
if (t->tgsi_opc == TGSI_OPCODE_UMAD) {
|
||||
struct tgsi_src_register *c = &inst->Src[2].Register;
|
||||
|
||||
/* mad.u16 tmp0, a, b, c */
|
||||
instr = instr_create(ctx, 3, OPC_MAD_U16);
|
||||
vectorize(ctx, instr, &tmp0_dst, 3, a, 0, b, 0, c, 0);
|
||||
/* add.u tmp0, tmp0, c */
|
||||
instr = instr_create(ctx, 2, OPC_ADD_U);
|
||||
vectorize(ctx, instr, &tmp0_dst, 2, tmp0_src, 0, c, 0);
|
||||
}
|
||||
|
||||
/* madsh.m16 tmp1, a, b, tmp0 */
|
||||
@@ -2350,6 +2350,9 @@ trans_idiv(const struct instr_translater *t,
|
||||
if (t->tgsi_opc == TGSI_OPCODE_MOD || t->tgsi_opc == TGSI_OPCODE_UMOD) {
|
||||
/* 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 */
|
||||
instr = instr_create(ctx, 2, OPC_MULL_U);
|
||||
vectorize(ctx, instr, &r_dst, 2, q_src, 0, b, 0);
|
||||
|
@@ -33,6 +33,7 @@
|
||||
#include "util/u_pointer.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_math.h"
|
||||
#include "util/u_cpu_detect.h"
|
||||
|
||||
#include "gallivm/lp_bld.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.
|
||||
*/
|
||||
@@ -374,10 +407,13 @@ test_unary(unsigned verbose, FILE *fp, const struct unary_test_t *test)
|
||||
|
||||
test_func_jit(out, in);
|
||||
for (i = 0; i < num_vals; ++i) {
|
||||
float ref = test->ref(in[i]);
|
||||
float testval, ref;
|
||||
double error, precision;
|
||||
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)) {
|
||||
error = 0;
|
||||
} else {
|
||||
|
@@ -924,7 +924,9 @@ CodeEmitterNV50::emitMINMAX(const Instruction *i)
|
||||
break;
|
||||
}
|
||||
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.neg() << 27;
|
||||
}
|
||||
emitForm_MAD(i);
|
||||
}
|
||||
|
@@ -2343,9 +2343,12 @@ Converter::handleInstruction(const struct tgsi_full_instruction *insn)
|
||||
mkMov(dst0[c], val0);
|
||||
break;
|
||||
case TGSI_OPCODE_ARL:
|
||||
case TGSI_OPCODE_ARR:
|
||||
FOR_EACH_DST_ENABLED_CHANNEL(0, c, tgsi) {
|
||||
const RoundMode rnd =
|
||||
tgsi.getOpcode() == TGSI_OPCODE_ARR ? ROUND_N : ROUND_M;
|
||||
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;
|
||||
case TGSI_OPCODE_UARL:
|
||||
|
@@ -772,7 +772,8 @@ NV50LoweringPreSSA::handleTEX(TexInstruction *i)
|
||||
if (i->tex.useOffsets) {
|
||||
for (int c = 0; c < 3; ++c) {
|
||||
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->offset[0][c].set(NULL);
|
||||
}
|
||||
|
@@ -754,7 +754,8 @@ NVC0LoweringPass::handleTEX(TexInstruction *i)
|
||||
assert(i->tex.useOffsets == 1);
|
||||
for (c = 0; c < 3; ++c) {
|
||||
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);
|
||||
}
|
||||
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_UNK0D7C 0x00000d7c
|
||||
#define NV50_3D_DEPTH_CLIP_NEGATIVE_Z 0x00000d7c
|
||||
|
||||
#define NV50_3D_CLEAR_COLOR(i0) (0x00000d80 + 0x4*(i0))
|
||||
#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_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_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);
|
||||
for (i = 0; i < nv50->num_vtxbufs; ++i) {
|
||||
if (nv50->vtxbuf[i].buffer == res) {
|
||||
@@ -190,14 +195,11 @@ nv50_invalidate_resource_storage(struct nouveau_context *ctx,
|
||||
return ref;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (res->bind & PIPE_BIND_INDEX_BUFFER) {
|
||||
|
||||
if (nv50->idxbuf.buffer == res)
|
||||
if (!--ref)
|
||||
return ref;
|
||||
}
|
||||
|
||||
if (res->bind & PIPE_BIND_SAMPLER_VIEW) {
|
||||
for (s = 0; s < 3; ++s) {
|
||||
assert(nv50->num_textures[s] <= PIPE_MAX_SAMPLERS);
|
||||
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) {
|
||||
assert(nv50->num_vtxbufs <= NV50_MAX_PIPE_CONSTBUFS);
|
||||
for (i = 0; i < nv50->num_vtxbufs; ++i) {
|
||||
for (i = 0; i < NV50_MAX_PIPE_CONSTBUFS; ++i) {
|
||||
if (!(nv50->constbuf_valid[s] & (1 << i)))
|
||||
continue;
|
||||
if (!nv50->constbuf[s][i].user &&
|
||||
nv50->constbuf[s][i].u.buf == res) {
|
||||
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_SAMPLER_VIEW_TARGET:
|
||||
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
|
||||
case PIPE_CAP_CLIP_HALFZ:
|
||||
return 1;
|
||||
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
||||
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_COMPUTE:
|
||||
case PIPE_CAP_DRAW_INDIRECT:
|
||||
case PIPE_CAP_CLIP_HALFZ:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_VENDOR_ID:
|
||||
@@ -461,8 +461,6 @@ nv50_screen_init_hwctx(struct nv50_screen *screen)
|
||||
PUSH_DATA (push, 0);
|
||||
BEGIN_NV04(push, NV50_3D(PRIM_RESTART_WITH_DRAW_ARRAYS), 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);
|
||||
PUSH_DATA (push, 1);
|
||||
|
||||
@@ -609,6 +607,13 @@ nv50_screen_init_hwctx(struct nv50_screen *screen)
|
||||
BEGIN_NV04(push, NV50_3D(EDGEFLAG), 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);
|
||||
}
|
||||
|
||||
|
@@ -57,10 +57,6 @@
|
||||
* ! pipe_rasterizer_state.flatshade_first also applies to QUADS
|
||||
* (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
|
||||
* (The hardware only has 8 slots meant for TexCoord and we have to assign
|
||||
* in advance to maintain elegant separate shader objects.)
|
||||
@@ -221,7 +217,7 @@ nv50_blend_state_delete(struct pipe_context *pipe, void *hwcso)
|
||||
FREE(hwcso);
|
||||
}
|
||||
|
||||
/* NOTE: ignoring line_last_pixel, using FALSE (set on screen init) */
|
||||
/* NOTE: ignoring line_last_pixel */
|
||||
static void *
|
||||
nv50_rasterizer_state_create(struct pipe_context *pipe,
|
||||
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_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])));
|
||||
return (void *)so;
|
||||
}
|
||||
|
@@ -25,7 +25,7 @@ struct nv50_blend_stateobj {
|
||||
struct nv50_rasterizer_stateobj {
|
||||
struct pipe_rasterizer_state pipe;
|
||||
int size;
|
||||
uint32_t state[48];
|
||||
uint32_t state[49];
|
||||
};
|
||||
|
||||
struct nv50_zsa_stateobj {
|
||||
|
@@ -472,6 +472,10 @@ nv50_draw_arrays(struct nv50_context *nv50,
|
||||
if (nv50->state.index_bias) {
|
||||
BEGIN_NV04(push, NV50_3D(VB_ELEMENT_BASE), 1);
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -594,6 +598,10 @@ nv50_draw_elements(struct nv50_context *nv50, boolean shorten,
|
||||
if (index_bias != nv50->state.index_bias) {
|
||||
BEGIN_NV04(push, NV50_3D(VB_ELEMENT_BASE), 1);
|
||||
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;
|
||||
}
|
||||
|
||||
|
@@ -227,6 +227,7 @@ locn_0f_ts:
|
||||
/* NVC0_3D_MACRO_DRAW_ELEMENTS_INDIRECT
|
||||
*
|
||||
* NOTE: Saves and restores VB_ELEMENT,INSTANCE_BASE.
|
||||
* Forcefully sets VERTEX_ID_BASE to the value of VB_ELEMENT_BASE.
|
||||
*
|
||||
* arg = mode
|
||||
* parm[0] = count
|
||||
@@ -247,6 +248,8 @@ locn_0f_ts:
|
||||
maddr 0x150d /* VB_ELEMENT,INSTANCE_BASE */
|
||||
send $r4
|
||||
send $r5
|
||||
maddr 0x446
|
||||
send $r4
|
||||
mov $r4 0x1
|
||||
dei_again:
|
||||
maddr 0x586 /* VERTEX_BEGIN_GL */
|
||||
@@ -258,8 +261,10 @@ dei_again:
|
||||
branz $r2 #dei_again
|
||||
mov $r1 (extrinsrt $r1 $r4 0 1 26) /* set INSTANCE_NEXT */
|
||||
maddr 0x150d /* VB_ELEMENT,INSTANCE_BASE */
|
||||
exit send $r6
|
||||
send $r6
|
||||
send $r7
|
||||
exit maddr 0x446
|
||||
send $r6
|
||||
dei_end:
|
||||
exit
|
||||
nop
|
||||
|
@@ -128,16 +128,18 @@ uint32_t mme9097_draw_elts_indirect[] = {
|
||||
0x00000301,
|
||||
0x00000201,
|
||||
0x017dc451,
|
||||
/* 0x000c: dei_again */
|
||||
/* 0x000e: dei_again */
|
||||
0x00002431,
|
||||
0x0004d007,
|
||||
/* 0x0017: dei_end */
|
||||
0x0005d007,
|
||||
0x00000501,
|
||||
/* 0x001b: dei_end */
|
||||
0x01434615,
|
||||
0x01438715,
|
||||
0x05434021,
|
||||
0x00002041,
|
||||
0x00002841,
|
||||
0x01118021,
|
||||
0x00002041,
|
||||
0x00004411,
|
||||
0x01618021,
|
||||
0x00000841,
|
||||
@@ -148,8 +150,10 @@ uint32_t mme9097_draw_elts_indirect[] = {
|
||||
0xfffe9017,
|
||||
0xd0410912,
|
||||
0x05434021,
|
||||
0x000030c1,
|
||||
0x00003041,
|
||||
0x00003841,
|
||||
0x011180a1,
|
||||
0x00003041,
|
||||
0x00000091,
|
||||
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_DEPTH_CLIP_NEGATIVE_Z 0x00000d7c
|
||||
|
||||
#define NVC0_3D_CLEAR_COLOR(i0) (0x00000d80 + 0x4*(i0))
|
||||
#define NVC0_3D_CLEAR_COLOR__ESIZE 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_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
|
||||
|
||||
|
@@ -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) {
|
||||
if (nvc0->vtxbuf[i].buffer == res) {
|
||||
nvc0->dirty |= NVC0_NEW_ARRAYS;
|
||||
@@ -205,17 +210,14 @@ nvc0_invalidate_resource_storage(struct nouveau_context *ctx,
|
||||
return ref;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (res->bind & PIPE_BIND_INDEX_BUFFER) {
|
||||
|
||||
if (nvc0->idxbuf.buffer == res) {
|
||||
nvc0->dirty |= NVC0_NEW_IDXBUF;
|
||||
nouveau_bufctx_reset(nvc0->bufctx_3d, NVC0_BIND_IDX);
|
||||
if (!--ref)
|
||||
return ref;
|
||||
}
|
||||
}
|
||||
|
||||
if (res->bind & PIPE_BIND_SAMPLER_VIEW) {
|
||||
for (s = 0; s < 5; ++s) {
|
||||
for (i = 0; i < nvc0->num_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 (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 &&
|
||||
nvc0->constbuf[s][i].u.buf == res) {
|
||||
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_CONDITIONAL_RENDER_INVERTED:
|
||||
case PIPE_CAP_SAMPLER_VIEW_TARGET:
|
||||
case PIPE_CAP_CLIP_HALFZ:
|
||||
return 1;
|
||||
case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
|
||||
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_FAKE_SW_MSAA:
|
||||
case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION:
|
||||
case PIPE_CAP_CLIP_HALFZ:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_VENDOR_ID:
|
||||
@@ -786,8 +786,6 @@ nvc0_screen_create(struct nouveau_device *dev)
|
||||
PUSH_DATA (push, 0);
|
||||
BEGIN_NVC0(push, NVC0_3D(LINE_WIDTH_SEPARATE), 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);
|
||||
PUSH_DATA (push, 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) {
|
||||
struct nvc0_so_target *targ = nvc0_so_target(nvc0->tfbbuf[b]);
|
||||
struct nv04_resource *buf = nv04_resource(targ->pipe.buffer);
|
||||
struct nv04_resource *buf;
|
||||
|
||||
if (!targ) {
|
||||
IMMED_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tfb)
|
||||
targ->stride = tfb->stride[b];
|
||||
@@ -260,6 +265,8 @@ nvc0_tfb_validate(struct nvc0_context *nvc0)
|
||||
if (!(nvc0->tfbbuf_dirty & (1 << b)))
|
||||
continue;
|
||||
|
||||
buf = nv04_resource(targ->pipe.buffer);
|
||||
|
||||
if (!targ->clean)
|
||||
nvc0_query_fifo_wait(push, targ->pq);
|
||||
BEGIN_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 5);
|
||||
|
@@ -204,7 +204,7 @@ nvc0_blend_state_delete(struct pipe_context *pipe, void *hwcso)
|
||||
FREE(hwcso);
|
||||
}
|
||||
|
||||
/* NOTE: ignoring line_last_pixel, using FALSE (set on screen init) */
|
||||
/* NOTE: ignoring line_last_pixel */
|
||||
static void *
|
||||
nvc0_rasterizer_state_create(struct pipe_context *pipe,
|
||||
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_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])));
|
||||
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]);
|
||||
}
|
||||
for (; i < nvc0->num_tfbbufs; ++i) {
|
||||
nvc0->tfbbuf_dirty |= 1 << i;
|
||||
nvc0_so_target_save_offset(pipe, nvc0->tfbbuf[i], i, &serialize);
|
||||
pipe_so_target_reference(&nvc0->tfbbuf[i], NULL);
|
||||
if (nvc0->tfbbuf[i]) {
|
||||
nvc0->tfbbuf_dirty |= 1 << i;
|
||||
nvc0_so_target_save_offset(pipe, nvc0->tfbbuf[i], i, &serialize);
|
||||
pipe_so_target_reference(&nvc0->tfbbuf[i], NULL);
|
||||
}
|
||||
}
|
||||
nvc0->num_tfbbufs = num_targets;
|
||||
|
||||
|
@@ -23,7 +23,7 @@ struct nvc0_blend_stateobj {
|
||||
struct nvc0_rasterizer_stateobj {
|
||||
struct pipe_rasterizer_state pipe;
|
||||
int size;
|
||||
uint32_t state[43];
|
||||
uint32_t state[44];
|
||||
};
|
||||
|
||||
struct nvc0_zsa_stateobj {
|
||||
|
@@ -1401,11 +1401,14 @@ nvc0_blit(struct pipe_context *pipe, const struct pipe_blit_info *info)
|
||||
} else
|
||||
if (!nv50_2d_src_format_faithful(info->src.format)) {
|
||||
if (!util_format_is_luminance(info->src.format)) {
|
||||
if (!nv50_2d_dst_format_ops_supported(info->dst.format))
|
||||
eng3d = TRUE;
|
||||
else
|
||||
if (util_format_is_intensity(info->src.format))
|
||||
eng3d = info->src.format != PIPE_FORMAT_I8_UNORM;
|
||||
else
|
||||
if (!nv50_2d_dst_format_ops_supported(info->dst.format))
|
||||
eng3d = TRUE;
|
||||
if (util_format_is_alpha(info->src.format))
|
||||
eng3d = info->src.format != PIPE_FORMAT_A8_UNORM;
|
||||
else
|
||||
eng3d = !nv50_2d_format_supported(info->src.format);
|
||||
}
|
||||
|
@@ -575,8 +575,9 @@ nvc0_draw_arrays(struct nvc0_context *nvc0,
|
||||
if (nvc0->state.index_bias) {
|
||||
/* index_bias is implied 0 if !info->indexed (really ?) */
|
||||
/* 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(VERTEX_ID), 0);
|
||||
nvc0->state.index_bias = 0;
|
||||
}
|
||||
|
||||
@@ -705,9 +706,11 @@ nvc0_draw_elements(struct nvc0_context *nvc0, boolean shorten,
|
||||
prim = nvc0_prim_gl(mode);
|
||||
|
||||
if (index_bias != nvc0->state.index_bias) {
|
||||
PUSH_SPACE(push, 2);
|
||||
PUSH_SPACE(push, 4);
|
||||
BEGIN_NVC0(push, NVC0_3D(VB_ELEMENT_BASE), 1);
|
||||
PUSH_DATA (push, index_bias);
|
||||
BEGIN_NVC0(push, NVC0_3D(VERTEX_ID), 1);
|
||||
PUSH_DATA (push, 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) {
|
||||
/* index_bias is implied 0 if !info->indexed (really ?) */
|
||||
IMMED_NVC0(push, NVC0_3D(VB_ELEMENT_BASE), 0);
|
||||
IMMED_NVC0(push, NVC0_3D(VERTEX_ID), 0);
|
||||
nvc0->state.index_bias = 0;
|
||||
}
|
||||
size = 4 * 4;
|
||||
|
@@ -23,7 +23,6 @@
|
||||
|
||||
#define CONSTANT_BUFFER_0_ADDR_SPACE 8
|
||||
#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 \
|
||||
(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) {
|
||||
LLVMValueRef offset = lp_build_const_int32(bld_base->base.gallivm, 0);
|
||||
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), "");
|
||||
|
||||
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_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)
|
||||
|
||||
/* start driver buffers after user 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 + 2)
|
||||
#define R600_GS_RING_CONST_BUFFER (R600_MAX_USER_CONST_BUFFERS + 3)
|
||||
/* Currently R600_MAX_CONST_BUFFERS is too large, the hardware only has 16 buffers, but the driver is
|
||||
* trying to use 17. Avoid accidentally aliasing with user UBOs for SAMPLE_POSITIONS by using an id<16.
|
||||
#define R600_BUFFER_INFO_CONST_BUFFER (R600_MAX_USER_CONST_BUFFERS + 1)
|
||||
#define R600_GS_RING_CONST_BUFFER (R600_MAX_USER_CONST_BUFFERS + 2)
|
||||
/* Currently R600_MAX_CONST_BUFFERS just fits on the hw, which has a limit
|
||||
* of 16 const buffers.
|
||||
* 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,
|
||||
* which would also allow supporting the d3d 11 mandated minimum of 15 user const buffers.
|
||||
* In order to support 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)
|
||||
|
||||
@@ -316,7 +315,6 @@ struct r600_samplerview_state {
|
||||
uint32_t dirty_mask;
|
||||
uint32_t compressed_depthtex_mask; /* which textures are depth */
|
||||
uint32_t compressed_colortex_mask;
|
||||
boolean dirty_txq_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;
|
||||
int i, j, k, r;
|
||||
struct r600_bytecode_alu alu;
|
||||
int last_slot = (inst->Dst[0].Register.WriteMask & 0x8) ? 4 : 3;
|
||||
for (k = 0; k < last_slot; k++) {
|
||||
int lasti = tgsi_last_instruction(inst->Dst[0].Register.WriteMask);
|
||||
int t1 = ctx->temp_reg;
|
||||
|
||||
for (k = 0; k <= lasti; k++) {
|
||||
if (!(inst->Dst[0].Register.WriteMask & (1 << k)))
|
||||
continue;
|
||||
|
||||
@@ -2739,7 +2741,8 @@ static int cayman_mul_int_instr(struct r600_shader_ctx *ctx)
|
||||
for (j = 0; j < inst->Instruction.NumSrcRegs; j++) {
|
||||
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);
|
||||
if (i == 3)
|
||||
alu.last = 1;
|
||||
@@ -2748,6 +2751,23 @@ static int cayman_mul_int_instr(struct r600_shader_ctx *ctx)
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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 &&
|
||||
inst->Src[index].Register.File != TGSI_FILE_INPUT &&
|
||||
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,
|
||||
@@ -5014,8 +5035,9 @@ static int r600_do_buffer_txq(struct r600_shader_ctx *ctx)
|
||||
alu.op = ALU_OP1_MOV;
|
||||
|
||||
if (ctx->bc->chip_class >= EVERGREEN) {
|
||||
alu.src[0].sel = 512 + (id / 4);
|
||||
alu.src[0].chan = id % 4;
|
||||
/* channel 0 or 2 of each word */
|
||||
alu.src[0].sel = 512 + (id / 2);
|
||||
alu.src[0].chan = (id % 2) * 2;
|
||||
} else {
|
||||
/* r600 we have them at channel 2 of the second dword */
|
||||
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)
|
||||
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);
|
||||
|
||||
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) {
|
||||
/* 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) {
|
||||
if (inst->Instruction.Opcode == TGSI_OPCODE_TXP) {
|
||||
int out_chan;
|
||||
/* Add perspective divide */
|
||||
if (ctx->bc->chip_class == CAYMAN) {
|
||||
@@ -5209,9 +5182,6 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
|
||||
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 ||
|
||||
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;
|
||||
}
|
||||
|
||||
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) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
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 */
|
||||
}
|
||||
} else {
|
||||
offset_x = ctx->literals[4 * inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleX] << 1;
|
||||
offset_y = ctx->literals[4 * inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleY] << 1;
|
||||
offset_z = ctx->literals[4 * inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleZ] << 1;
|
||||
switch (inst->Texture.Texture) {
|
||||
case TGSI_TEXTURE_3D:
|
||||
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));
|
||||
alu.op = ALU_OP1_MOV;
|
||||
|
||||
alu.src[0].sel = 512 + (id / 4);
|
||||
alu.src[0].kc_bank = R600_TXQ_CONST_BUFFER;
|
||||
alu.src[0].chan = id % 4;
|
||||
if (ctx->bc->chip_class >= EVERGREEN) {
|
||||
/* channel 1 or 3 of each word */
|
||||
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);
|
||||
alu.last = 1;
|
||||
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];
|
||||
tex.inst_mod = texture_component_select;
|
||||
|
||||
if (ctx->bc->chip_class == CAYMAN) {
|
||||
/* GATHER4 result order is different from TGSI TG4 */
|
||||
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;
|
||||
tex.dst_sel_x = (inst->Dst[0].Register.WriteMask & 2) ? 0 : 7;
|
||||
tex.dst_sel_y = (inst->Dst[0].Register.WriteMask & 4) ? 1 : 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;
|
||||
} 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) {
|
||||
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;
|
||||
|
||||
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[1], &ctx->src[2], 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_conv_prim_to_gs_out(rshader->gs_output_prim));
|
||||
|
||||
r600_store_context_reg_seq(cb, R_0288C8_SQ_GS_VERT_ITEMSIZE, 4);
|
||||
r600_store_value(cb, 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_0288C8_SQ_GS_VERT_ITEMSIZE,
|
||||
cp_shader->ring_item_size >> 2);
|
||||
|
||||
r600_store_context_reg(cb, R_0288A8_SQ_ESGS_RING_ITEMSIZE,
|
||||
(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.compressed_depthtex_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;
|
||||
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 OR the alpha with the value given here.
|
||||
* 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)
|
||||
{
|
||||
@@ -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 + 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);
|
||||
}
|
||||
|
||||
/* 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)
|
||||
{
|
||||
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;
|
||||
|
||||
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);
|
||||
memset(samplers->buffer_constants, 0, array_size);
|
||||
for (i = 0; i < bits; 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);
|
||||
for (i = 0; i < bits; i++) {
|
||||
if (samplers->views.enabled_mask & (1 << i)) {
|
||||
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.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);
|
||||
}
|
||||
|
||||
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 */
|
||||
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;
|
||||
bool ps_dirty = false, vs_dirty = false, gs_dirty = false;
|
||||
bool blend_disable;
|
||||
|
||||
bool need_buf_const;
|
||||
if (!rctx->blitter->running) {
|
||||
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 evergreen we only need a txq info one */
|
||||
if (rctx->b.chip_class < EVERGREEN) {
|
||||
if (rctx->ps_shader && rctx->ps_shader->current->shader.uses_tex_buffers)
|
||||
r600_setup_buffer_constants(rctx, PIPE_SHADER_FRAGMENT);
|
||||
if (rctx->vs_shader && rctx->vs_shader->current->shader.uses_tex_buffers)
|
||||
r600_setup_buffer_constants(rctx, PIPE_SHADER_VERTEX);
|
||||
if (rctx->gs_shader && rctx->gs_shader->current->shader.uses_tex_buffers)
|
||||
r600_setup_buffer_constants(rctx, PIPE_SHADER_GEOMETRY);
|
||||
} 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->ps_shader) {
|
||||
need_buf_const = rctx->ps_shader->current->shader.uses_tex_buffers || rctx->ps_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_FRAGMENT);
|
||||
else
|
||||
eg_setup_buffer_constants(rctx, PIPE_SHADER_FRAGMENT);
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
r600_setup_txq_cube_array_constants(rctx, PIPE_SHADER_FRAGMENT);
|
||||
if (rctx->vs_shader && rctx->vs_shader->current->shader.has_txq_cube_array_z_comp)
|
||||
r600_setup_txq_cube_array_constants(rctx, PIPE_SHADER_VERTEX);
|
||||
if (rctx->gs_shader && rctx->gs_shader->current->shader.has_txq_cube_array_z_comp)
|
||||
r600_setup_txq_cube_array_constants(rctx, PIPE_SHADER_GEOMETRY);
|
||||
if (rctx->gs_shader) {
|
||||
need_buf_const = rctx->gs_shader->current->shader.uses_tex_buffers || rctx->gs_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_GEOMETRY);
|
||||
else
|
||||
eg_setup_buffer_constants(rctx, PIPE_SHADER_GEOMETRY);
|
||||
}
|
||||
}
|
||||
|
||||
if (rctx->b.chip_class < EVERGREEN && rctx->ps_shader && rctx->vs_shader) {
|
||||
if (!r600_adjust_gprs(rctx)) {
|
||||
|
@@ -616,6 +616,8 @@ public:
|
||||
unsigned num_slots;
|
||||
bool uses_mova_gpr;
|
||||
|
||||
bool r6xx_gpr_index_workaround;
|
||||
|
||||
bool stack_workaround_8xx;
|
||||
bool stack_workaround_9xx;
|
||||
|
||||
|
@@ -38,6 +38,18 @@
|
||||
|
||||
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() {
|
||||
|
||||
run_on(sh.root);
|
||||
@@ -83,14 +95,18 @@ int bc_finalizer::run() {
|
||||
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);
|
||||
sh.root->push_back(last_cf);
|
||||
}
|
||||
|
||||
if (ctx.is_cayman())
|
||||
last_cf->insert_after(sh.create_cf(CF_OP_CF_END));
|
||||
else
|
||||
if (ctx.is_cayman()) {
|
||||
if (!last_cf) {
|
||||
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;
|
||||
|
||||
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) {
|
||||
|
||||
update_nstack(r);
|
||||
|
||||
cf_node *loop_start = sh.create_cf(CF_OP_LOOP_START_DX10);
|
||||
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) {
|
||||
|
||||
node *prev_node = NULL;
|
||||
for (node_iterator I = c->begin(), E = c->end(); I != E; ++I) {
|
||||
node *n = *I;
|
||||
|
||||
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 {
|
||||
if (n->is_alu_clause()) {
|
||||
cf_node *c = static_cast<cf_node*>(n);
|
||||
@@ -245,17 +263,22 @@ void bc_finalizer::run_on(container_node* c) {
|
||||
if (n->is_container())
|
||||
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_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) {
|
||||
alu_node *n = static_cast<alu_node*>(*I);
|
||||
unsigned slot = n->bc.slot;
|
||||
|
||||
value *d = n->dst.empty() ? NULL : n->dst[0];
|
||||
|
||||
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);
|
||||
|
||||
finalize_alu_src(g, n);
|
||||
add_nop |= finalize_alu_src(g, n, prev_g);
|
||||
|
||||
last = n;
|
||||
}
|
||||
|
||||
if (add_nop) {
|
||||
if (sh.get_ctx().r6xx_gpr_index_workaround) {
|
||||
insert_rv6xx_load_ar_workaround(g);
|
||||
}
|
||||
}
|
||||
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;
|
||||
|
||||
bool add_nop = false;
|
||||
FBC_DUMP(
|
||||
sblog << "finalize_alu_src: ";
|
||||
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()) {
|
||||
src.rel = 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
|
||||
src.rel = 0;
|
||||
|
||||
@@ -387,11 +424,23 @@ void bc_finalizer::finalize_alu_src(alu_group_node* g, alu_node* a) {
|
||||
assert(!"unknown value kind");
|
||||
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) {
|
||||
a->bc.src[si++].sel = 0;
|
||||
}
|
||||
return add_nop;
|
||||
}
|
||||
|
||||
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);
|
||||
rep->move(c, end->next);
|
||||
|
||||
reg->src_loop = true;
|
||||
|
||||
loop_stack.push(reg);
|
||||
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;
|
||||
|
||||
r6xx_gpr_index_workaround = is_r600() && chip != HW_CHIP_RV670 && chip != HW_CHIP_RS780 && chip != HW_CHIP_RS880;
|
||||
|
||||
switch (chip) {
|
||||
case HW_CHIP_RV610:
|
||||
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) {
|
||||
|
||||
depart_node *nd1 = static_cast<depart_node*>(r->first);
|
||||
if (!nd1->is_depart())
|
||||
if (!nd1->is_depart() || nd1->target != r)
|
||||
return false;
|
||||
if_node *nif = static_cast<if_node*>(nd1->first);
|
||||
if (!nif->is_if())
|
||||
return false;
|
||||
depart_node *nd2 = static_cast<depart_node*>(nif->first);
|
||||
if (!nd2->is_depart())
|
||||
if (!nd2->is_depart() || nd2->target != r)
|
||||
return false;
|
||||
|
||||
value* &em = nif->cond;
|
||||
|
@@ -1089,7 +1089,8 @@ typedef std::vector<repeat_node*> repeat_vec;
|
||||
class region_node : public container_node {
|
||||
protected:
|
||||
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:
|
||||
unsigned region_id;
|
||||
|
||||
@@ -1101,12 +1102,16 @@ public:
|
||||
depart_vec departs;
|
||||
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);
|
||||
|
||||
unsigned dep_count() { return departs.size(); }
|
||||
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() {
|
||||
node *p = first;
|
||||
|
@@ -695,8 +695,9 @@ public:
|
||||
|
||||
void run_on(container_node *c);
|
||||
|
||||
void finalize_alu_group(alu_group_node *g);
|
||||
void finalize_alu_src(alu_group_node *g, alu_node *a);
|
||||
void insert_rv6xx_load_ar_workaround(alu_group_node *b4);
|
||||
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 finalize_fetch(fetch_node *f);
|
||||
|
@@ -1527,6 +1527,9 @@ bool post_scheduler::check_copy(node *n) {
|
||||
|
||||
if (!s->is_prealloc()) {
|
||||
recolor_local(s);
|
||||
|
||||
if (!s->chunk || s->chunk != d->chunk)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (s->gpr == d->gpr) {
|
||||
|
@@ -294,6 +294,7 @@ struct r600_so_target {
|
||||
/* The buffer where BUFFER_FILLED_SIZE is stored. */
|
||||
struct r600_resource *buf_filled_size;
|
||||
unsigned buf_filled_size_offset;
|
||||
bool buf_filled_size_valid;
|
||||
|
||||
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 +
|
||||
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
|
||||
* won't increment. */
|
||||
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;
|
||||
|
@@ -80,10 +80,6 @@ void radeon_llvm_shader_type(LLVMValueRef F, unsigned type)
|
||||
sprintf(Str, "%1d", llvm_type);
|
||||
|
||||
LLVMAddTargetDependentFunctionAttr(F, "ShaderType", Str);
|
||||
|
||||
if (type != TGSI_PROCESSOR_COMPUTE) {
|
||||
LLVMAddTargetDependentFunctionAttr(F, "unsafe-fp-math", "true");
|
||||
}
|
||||
}
|
||||
|
||||
static void init_r600_target()
|
||||
|
@@ -250,6 +250,21 @@ void si_dma_copy(struct pipe_context *ctx,
|
||||
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 ||
|
||||
rdst->dirty_level_mask != 0 ||
|
||||
rdst->cmask.size || rdst->fmask.size ||
|
||||
|
@@ -228,14 +228,14 @@ static LLVMValueRef get_instance_index_for_fetch(
|
||||
|
||||
LLVMValueRef result = LLVMGetParam(radeon_bld->main_fn,
|
||||
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)
|
||||
result = LLVMBuildUDiv(gallivm->builder, result,
|
||||
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(
|
||||
@@ -590,8 +590,11 @@ static void declare_system_value(
|
||||
break;
|
||||
|
||||
case TGSI_SEMANTIC_VERTEXID:
|
||||
value = LLVMGetParam(radeon_bld->main_fn,
|
||||
si_shader_ctx->param_vertex_id);
|
||||
value = LLVMBuildAdd(gallivm->builder,
|
||||
LLVMGetParam(radeon_bld->main_fn,
|
||||
si_shader_ctx->param_vertex_id),
|
||||
LLVMGetParam(radeon_bld->main_fn,
|
||||
SI_PARAM_BASE_VERTEX), "");
|
||||
break;
|
||||
|
||||
case TGSI_SEMANTIC_SAMPLEID:
|
||||
|
@@ -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)
|
||||
{
|
||||
struct si_pm4_state *pm4 = CALLOC_STRUCT(si_pm4_state);
|
||||
struct si_pm4_state *pm4;
|
||||
struct pipe_stencil_ref *ref = &sctx->stencil_ref;
|
||||
struct si_state_dsa *dsa = sctx->queued.named.dsa;
|
||||
struct si_state_dsa *dsa = sctx->queued.named.dsa;
|
||||
|
||||
if (pm4 == NULL)
|
||||
return;
|
||||
if (!dsa)
|
||||
return;
|
||||
|
||||
pm4 = CALLOC_STRUCT(si_pm4_state);
|
||||
if (pm4 == NULL)
|
||||
return;
|
||||
|
||||
si_pm4_set_reg(pm4, R_028430_DB_STENCILREFMASK,
|
||||
S_028430_STENCILTESTVAL(ref->ref_value[0]) |
|
||||
@@ -3081,6 +3085,110 @@ void si_init_state_functions(struct si_context *sctx)
|
||||
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)
|
||||
{
|
||||
struct si_pm4_state *pm4 = CALLOC_STRUCT(si_pm4_state);
|
||||
@@ -3152,24 +3260,40 @@ void si_init_config(struct si_context *sctx)
|
||||
break;
|
||||
}
|
||||
} 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) {
|
||||
case CHIP_TAHITI:
|
||||
case CHIP_PITCAIRN:
|
||||
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, 0x2a00126a);
|
||||
raster_config = 0x2a00126a;
|
||||
break;
|
||||
case CHIP_VERDE:
|
||||
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, 0x0000124a);
|
||||
raster_config = 0x0000124a;
|
||||
break;
|
||||
case CHIP_OLAND:
|
||||
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, 0x00000082);
|
||||
raster_config = 0x00000082;
|
||||
break;
|
||||
case CHIP_HAINAN:
|
||||
si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, 0x00000000);
|
||||
raster_config = 0x00000000;
|
||||
break;
|
||||
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;
|
||||
}
|
||||
|
||||
/* 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));
|
||||
|
@@ -237,20 +237,21 @@ static void si_shader_ps(struct si_shader *shader)
|
||||
for (i = 0; i < info->num_inputs; i++) {
|
||||
switch (info->input_semantic_name[i]) {
|
||||
case TGSI_SEMANTIC_POSITION:
|
||||
if (info->input_interpolate_loc[i] ==
|
||||
TGSI_INTERPOLATE_LOC_CENTROID) {
|
||||
/* SPI_BARYC_CNTL.POS_FLOAT_LOCATION
|
||||
* Possible vaules:
|
||||
* 0 -> Position = pixel center (default)
|
||||
* 1 -> Position = pixel centroid
|
||||
* 2 -> Position = iterated sample number XXX:
|
||||
* What does this mean?
|
||||
*/
|
||||
/* SPI_BARYC_CNTL.POS_FLOAT_LOCATION
|
||||
* Possible vaules:
|
||||
* 0 -> Position = pixel center (default)
|
||||
* 1 -> Position = pixel centroid
|
||||
* 2 -> Position = at sample position
|
||||
*/
|
||||
switch (info->input_interpolate_loc[i]) {
|
||||
case TGSI_INTERPOLATE_LOC_CENTROID:
|
||||
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 */
|
||||
case TGSI_SEMANTIC_FACE:
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -543,9 +544,11 @@ bcolor:
|
||||
}
|
||||
}
|
||||
|
||||
if (j == vsinfo->num_outputs) {
|
||||
/* No corresponding output found, load defaults into input */
|
||||
tmp |= S_028644_OFFSET(0x20);
|
||||
if (j == vsinfo->num_outputs && !G_028644_PT_SPRITE_TEX(tmp)) {
|
||||
/* No corresponding output found, load defaults into input.
|
||||
* Don't set any other bits.
|
||||
* (FLAT_SHADE=1 completely changes behavior) */
|
||||
tmp = S_028644_OFFSET(0x20);
|
||||
}
|
||||
|
||||
si_pm4_set_reg(pm4,
|
||||
|
@@ -204,7 +204,13 @@
|
||||
* 6. COMMAND [29:22] | BYTE_COUNT [20:0]
|
||||
*/
|
||||
|
||||
|
||||
#define GRBM_GFX_INDEX 0x802C
|
||||
#define INSTANCE_INDEX(x) ((x) << 0)
|
||||
#define SH_INDEX(x) ((x) << 8)
|
||||
#define SE_INDEX(x) ((x) << 16)
|
||||
#define SH_BROADCAST_WRITES (1 << 29)
|
||||
#define INSTANCE_BROADCAST_WRITES (1 << 30)
|
||||
#define SE_BROADCAST_WRITES (1 << 31)
|
||||
#define R_0084FC_CP_STRMOUT_CNTL 0x0084FC
|
||||
#define S_0084FC_OFFSET_UPDATE_DONE(x) (((x) & 0x1) << 0)
|
||||
#define R_0085F0_CP_COHER_CNTL 0x0085F0
|
||||
|
13
src/gallium/state_trackers/nine/Makefile.am
Normal file
13
src/gallium/state_trackers/nine/Makefile.am
Normal file
@@ -0,0 +1,13 @@
|
||||
include Makefile.sources
|
||||
include $(top_srcdir)/src/gallium/Automake.inc
|
||||
|
||||
AM_CFLAGS = \
|
||||
-I$(top_srcdir)/include/D3D9 \
|
||||
$(GALLIUM_CFLAGS) \
|
||||
$(VISIBILITY_CFLAGS)
|
||||
|
||||
noinst_LTLIBRARIES = libninetracker.la
|
||||
|
||||
libninetracker_la_SOURCES = $(C_SOURCES)
|
||||
|
||||
EXTRA_DIST = README
|
73
src/gallium/state_trackers/nine/Makefile.sources
Normal file
73
src/gallium/state_trackers/nine/Makefile.sources
Normal file
@@ -0,0 +1,73 @@
|
||||
C_SOURCES := \
|
||||
adapter9.c \
|
||||
adapter9.h \
|
||||
authenticatedchannel9.c \
|
||||
authenticatedchannel9.h \
|
||||
basetexture9.c \
|
||||
basetexture9.h \
|
||||
cryptosession9.c \
|
||||
cryptosession9.h \
|
||||
cubetexture9.c \
|
||||
cubetexture9.h \
|
||||
device9.c \
|
||||
device9.h \
|
||||
device9ex.c \
|
||||
device9ex.h \
|
||||
device9video.c \
|
||||
device9video.h \
|
||||
guid.c \
|
||||
guid.h \
|
||||
indexbuffer9.c \
|
||||
indexbuffer9.h \
|
||||
iunknown.c \
|
||||
iunknown.h \
|
||||
nine_debug.c \
|
||||
nine_debug.h \
|
||||
nine_defines.h \
|
||||
nine_dump.c \
|
||||
nine_dump.h \
|
||||
nineexoverlayextension.c \
|
||||
nineexoverlayextension.h \
|
||||
nine_ff.c \
|
||||
nine_ff.h \
|
||||
nine_helpers.c \
|
||||
nine_helpers.h \
|
||||
nine_lock.c \
|
||||
nine_lock.h \
|
||||
nine_pdata.h \
|
||||
nine_pipe.c \
|
||||
nine_pipe.h \
|
||||
nine_quirk.c \
|
||||
nine_quirk.h \
|
||||
nine_shader.c \
|
||||
nine_shader.h \
|
||||
nine_state.c \
|
||||
nine_state.h \
|
||||
pixelshader9.c \
|
||||
pixelshader9.h \
|
||||
query9.c \
|
||||
query9.h \
|
||||
resource9.c \
|
||||
resource9.h \
|
||||
stateblock9.c \
|
||||
stateblock9.h \
|
||||
surface9.c \
|
||||
surface9.h \
|
||||
swapchain9.c \
|
||||
swapchain9ex.c \
|
||||
swapchain9ex.h \
|
||||
swapchain9.h \
|
||||
texture9.c \
|
||||
texture9.h \
|
||||
threadpool.c \
|
||||
threadpool.h \
|
||||
vertexbuffer9.c \
|
||||
vertexbuffer9.h \
|
||||
vertexdeclaration9.c \
|
||||
vertexdeclaration9.h \
|
||||
vertexshader9.c \
|
||||
vertexshader9.h \
|
||||
volume9.c \
|
||||
volume9.h \
|
||||
volumetexture9.c \
|
||||
volumetexture9.h
|
78
src/gallium/state_trackers/nine/README
Normal file
78
src/gallium/state_trackers/nine/README
Normal file
@@ -0,0 +1,78 @@
|
||||
Quickstart Guide
|
||||
|
||||
*** Configure and build mesa
|
||||
CFLAGS="-m32" CXXFLAGS="-m32" ./autogen.sh --prefix=/usr \
|
||||
--with-gallium-drivers=nouveau,r600,swrast --enable-nine \
|
||||
--with-gallium-driver-dir="`pwd`/src/gallium/targets/pipe-loader/.libs" \
|
||||
--enable-debug --enable-texture-float --with-dri-drivers= --disable-dri \
|
||||
--disable-opengl --disable-egl --disable-vdpau --disable-xvmc --disable-gbm \
|
||||
--disable-gallium-llvm
|
||||
make
|
||||
|
||||
*** Then we create some symlinks to mesa:
|
||||
ln -s "`pwd`/lib/gallium/libd3dadapter9.so.0.0.0" /usr/lib/
|
||||
ln -s "`pwd`/lib/gallium/libd3dadapter9.so.0" /usr/lib/
|
||||
ln -s "`pwd`/lib/gallium/libd3dadapter9.so" /usr/lib/
|
||||
ln -s "`pwd`/include/d3dadapter" /usr/include/
|
||||
|
||||
*** Clone and build a patched wine
|
||||
git clone git@github.com:iXit/wine.git
|
||||
./configure
|
||||
make
|
||||
|
||||
*** And finally we create some symlinks to our patched wine files:
|
||||
for f in d3d9.dll gdi32.dll user32.dll wineps.drv winex11.drv;
|
||||
do
|
||||
mv /usr/lib/wine/$f.so /usr/lib/wine/$f.so.old
|
||||
ln -s "`pwd`/dlls/`basename -s .dll $f`/$f.so" /usr/lib/wine/
|
||||
done
|
||||
|
||||
*** Activating it within wine
|
||||
regedit
|
||||
Navigate to HKCU\Software\Wine\Direct3D
|
||||
If it's not there, create it
|
||||
Create a new DWORD value called UseNative
|
||||
Set its value to 1
|
||||
|
||||
Every Direct3D9 program will now try using nine before wined3d
|
||||
|
||||
If you want to selectively enable it per-exe instead, use the key:
|
||||
HKCU\Software\Wine\AppDefaults\app.exe\Direct3D\UseNative
|
||||
where app.exe is the name of your .exe file
|
||||
|
||||
|
||||
*** HOW IT WORKS ***
|
||||
|
||||
Nine implements the full IDirect3DDevice9 COM interface and a custom COM
|
||||
interface called ID3DAdapter9 which is used to implement a final IDirect3D9Ex
|
||||
COM interface.
|
||||
ID3DAdapter9 is completely devoid of window system code, meaning this can be
|
||||
provided by wine, Xlib, Wayland, etc. It's inadvisible to write a non-Windows
|
||||
backend though, as we don't want to encourage linux developers to use this API.
|
||||
|
||||
The state tracker is compiled, along with pipe-loader, into a library called
|
||||
libd3dadapter9.so. This library loads pipe_[driver].so drivers on demand and
|
||||
exports a single symbol for getting a subsystem driver. Currently only DRM is
|
||||
supported.
|
||||
This library is then linked to the library implementing the IDirect3D9[Ex]
|
||||
interface and the actual Direct3D9 entry points (Direct3DCreate9[Ex])
|
||||
|
||||
The implementation of IDirect3D9[Ex] lies within wine and coexists with
|
||||
wined3d. It's loaded on demand and so if it's not there, it doesn't have any
|
||||
drivers or something else is wrong, d3d9.dll will automatically revert to using
|
||||
wined3d.
|
||||
Whether or not it's even tried is determined by 2 DWORD registry keys.
|
||||
> HKCU\Software\Wine\Direct3D\UseNative
|
||||
> HKCU\Software\Wine\AppDefaults\app.exe\Direct3D\UseNative
|
||||
The former is the global on-switch. The latter is per-exe.
|
||||
|
||||
The driver search path can be set at configure time with
|
||||
--with-gallium-driver-dir and overridden at runtime with D3D9_DRIVERS_PATH.
|
||||
Debugging information can be gotten with the WINEDEBUG channels d3d9 and
|
||||
d3dadapter, and state_tracker debug information can be gotten with NINE_DEBUG.
|
||||
Help on NINE_DEBUG is shown through NINE_DEBUG=help
|
||||
|
||||
Finally, the ID3DPresent[Group] and ID3DAdapter9 interfaces are not set in
|
||||
stone, so feel free to hack on those as well as st/nine.
|
||||
|
||||
Happy Hacking!
|
1096
src/gallium/state_trackers/nine/adapter9.c
Normal file
1096
src/gallium/state_trackers/nine/adapter9.c
Normal file
File diff suppressed because it is too large
Load Diff
139
src/gallium/state_trackers/nine/adapter9.h
Normal file
139
src/gallium/state_trackers/nine/adapter9.h
Normal file
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
* 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 _NINE_ADAPTER9_H_
|
||||
#define _NINE_ADAPTER9_H_
|
||||
|
||||
#include "iunknown.h"
|
||||
|
||||
#include "d3dadapter/d3dadapter9.h"
|
||||
|
||||
struct pipe_screen;
|
||||
struct pipe_resource;
|
||||
|
||||
struct d3dadapter9_context
|
||||
{
|
||||
struct pipe_screen *hal, *ref;
|
||||
D3DADAPTER_IDENTIFIER9 identifier;
|
||||
BOOL linear_framebuffer;
|
||||
BOOL throttling;
|
||||
int throttling_value;
|
||||
int vblank_mode;
|
||||
BOOL thread_submit;
|
||||
|
||||
void (*destroy)( struct d3dadapter9_context *ctx );
|
||||
};
|
||||
|
||||
struct NineAdapter9
|
||||
{
|
||||
struct NineUnknown base;
|
||||
|
||||
struct d3dadapter9_context *ctx;
|
||||
};
|
||||
static INLINE struct NineAdapter9 *
|
||||
NineAdapter9( void *data )
|
||||
{
|
||||
return (struct NineAdapter9 *)data;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
NineAdapter9_new( struct d3dadapter9_context *pCTX,
|
||||
struct NineAdapter9 **ppOut );
|
||||
|
||||
HRESULT
|
||||
NineAdapter9_ctor( struct NineAdapter9 *This,
|
||||
struct NineUnknownParams *pParams,
|
||||
struct d3dadapter9_context *pCTX );
|
||||
|
||||
void
|
||||
NineAdapter9_dtor( struct NineAdapter9 *This );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAdapter9_GetAdapterIdentifier( struct NineAdapter9 *This,
|
||||
DWORD Flags,
|
||||
D3DADAPTER_IDENTIFIER9 *pIdentifier );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAdapter9_CheckDeviceType( struct NineAdapter9 *This,
|
||||
D3DDEVTYPE DevType,
|
||||
D3DFORMAT AdapterFormat,
|
||||
D3DFORMAT BackBufferFormat,
|
||||
BOOL bWindowed );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAdapter9_CheckDeviceFormat( struct NineAdapter9 *This,
|
||||
D3DDEVTYPE DeviceType,
|
||||
D3DFORMAT AdapterFormat,
|
||||
DWORD Usage,
|
||||
D3DRESOURCETYPE RType,
|
||||
D3DFORMAT CheckFormat );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAdapter9_CheckDeviceMultiSampleType( struct NineAdapter9 *This,
|
||||
D3DDEVTYPE DeviceType,
|
||||
D3DFORMAT SurfaceFormat,
|
||||
BOOL Windowed,
|
||||
D3DMULTISAMPLE_TYPE MultiSampleType,
|
||||
DWORD *pQualityLevels );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAdapter9_CheckDepthStencilMatch( struct NineAdapter9 *This,
|
||||
D3DDEVTYPE DeviceType,
|
||||
D3DFORMAT AdapterFormat,
|
||||
D3DFORMAT RenderTargetFormat,
|
||||
D3DFORMAT DepthStencilFormat );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAdapter9_CheckDeviceFormatConversion( struct NineAdapter9 *This,
|
||||
D3DDEVTYPE DeviceType,
|
||||
D3DFORMAT SourceFormat,
|
||||
D3DFORMAT TargetFormat );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAdapter9_GetDeviceCaps( struct NineAdapter9 *This,
|
||||
D3DDEVTYPE DeviceType,
|
||||
D3DCAPS9 *pCaps );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAdapter9_CreateDevice( struct NineAdapter9 *This,
|
||||
UINT RealAdapter,
|
||||
D3DDEVTYPE DeviceType,
|
||||
HWND hFocusWindow,
|
||||
DWORD BehaviorFlags,
|
||||
D3DPRESENT_PARAMETERS *pPresentationParameters,
|
||||
IDirect3D9 *pD3D9,
|
||||
ID3DPresentGroup *pPresentationGroup,
|
||||
IDirect3DDevice9 **ppReturnedDeviceInterface );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAdapter9_CreateDeviceEx( struct NineAdapter9 *This,
|
||||
UINT RealAdapter,
|
||||
D3DDEVTYPE DeviceType,
|
||||
HWND hFocusWindow,
|
||||
DWORD BehaviorFlags,
|
||||
D3DPRESENT_PARAMETERS *pPresentationParameters,
|
||||
D3DDISPLAYMODEEX *pFullscreenDisplayMode,
|
||||
IDirect3D9Ex *pD3D9Ex,
|
||||
ID3DPresentGroup *pPresentationGroup,
|
||||
IDirect3DDevice9Ex **ppReturnedDeviceInterface );
|
||||
|
||||
#endif /* _NINE_ADAPTER9_H_ */
|
78
src/gallium/state_trackers/nine/authenticatedchannel9.c
Normal file
78
src/gallium/state_trackers/nine/authenticatedchannel9.c
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* 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. */
|
||||
|
||||
#include "authenticatedchannel9.h"
|
||||
|
||||
#define DBG_CHANNEL DBG_AUTHENTICATEDCHANNEL
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAuthenticatedChannel9_GetCertificateSize( struct NineAuthenticatedChannel9 *This,
|
||||
UINT *pCertificateSize )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAuthenticatedChannel9_GetCertificate( struct NineAuthenticatedChannel9 *This,
|
||||
UINT CertifacteSize,
|
||||
BYTE *ppCertificate )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAuthenticatedChannel9_NegotiateKeyExchange( struct NineAuthenticatedChannel9 *This,
|
||||
UINT DataSize,
|
||||
void *pData )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAuthenticatedChannel9_Query( struct NineAuthenticatedChannel9 *This,
|
||||
UINT InputSize,
|
||||
const void *pInput,
|
||||
UINT OutputSize,
|
||||
void *pOutput )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAuthenticatedChannel9_Configure( struct NineAuthenticatedChannel9 *This,
|
||||
UINT InputSize,
|
||||
const void *pInput,
|
||||
D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT *pOutput )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
IDirect3DAuthenticatedChannel9Vtbl NineAuthenticatedChannel9_vtable = {
|
||||
(void *)NineUnknown_QueryInterface,
|
||||
(void *)NineUnknown_AddRef,
|
||||
(void *)NineUnknown_Release,
|
||||
(void *)NineAuthenticatedChannel9_GetCertificateSize,
|
||||
(void *)NineAuthenticatedChannel9_GetCertificate,
|
||||
(void *)NineAuthenticatedChannel9_NegotiateKeyExchange,
|
||||
(void *)NineAuthenticatedChannel9_Query,
|
||||
(void *)NineAuthenticatedChannel9_Configure
|
||||
};
|
65
src/gallium/state_trackers/nine/authenticatedchannel9.h
Normal file
65
src/gallium/state_trackers/nine/authenticatedchannel9.h
Normal file
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* 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 _NINE_AUTHENTICATEDCHANNEL9_H_
|
||||
#define _NINE_AUTHENTICATEDCHANNEL9_H_
|
||||
|
||||
#include "iunknown.h"
|
||||
|
||||
struct NineAuthenticatedChannel9
|
||||
{
|
||||
struct NineUnknown base;
|
||||
};
|
||||
static INLINE struct NineAuthenticatedChannel9 *
|
||||
NineAuthenticatedChannel9( void *data )
|
||||
{
|
||||
return (struct NineAuthenticatedChannel9 *)data;
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAuthenticatedChannel9_GetCertificateSize( struct NineAuthenticatedChannel9 *This,
|
||||
UINT *pCertificateSize );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAuthenticatedChannel9_GetCertificate( struct NineAuthenticatedChannel9 *This,
|
||||
UINT CertifacteSize,
|
||||
BYTE *ppCertificate );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAuthenticatedChannel9_NegotiateKeyExchange( struct NineAuthenticatedChannel9 *This,
|
||||
UINT DataSize,
|
||||
void *pData );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAuthenticatedChannel9_Query( struct NineAuthenticatedChannel9 *This,
|
||||
UINT InputSize,
|
||||
const void *pInput,
|
||||
UINT OutputSize,
|
||||
void *pOutput );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineAuthenticatedChannel9_Configure( struct NineAuthenticatedChannel9 *This,
|
||||
UINT InputSize,
|
||||
const void *pInput,
|
||||
D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT *pOutput );
|
||||
|
||||
#endif /* _NINE_AUTHENTICATEDCHANNEL9_H_ */
|
558
src/gallium/state_trackers/nine/basetexture9.c
Normal file
558
src/gallium/state_trackers/nine/basetexture9.c
Normal file
@@ -0,0 +1,558 @@
|
||||
/*
|
||||
* 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. */
|
||||
|
||||
#include "basetexture9.h"
|
||||
#include "device9.h"
|
||||
|
||||
/* For UploadSelf: */
|
||||
#include "texture9.h"
|
||||
#include "cubetexture9.h"
|
||||
#include "volumetexture9.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
#include "nine_pipe.h"
|
||||
#include "nine_dump.h"
|
||||
#endif
|
||||
|
||||
#include "util/u_format.h"
|
||||
#include "util/u_gen_mipmap.h"
|
||||
|
||||
#define DBG_CHANNEL DBG_BASETEXTURE
|
||||
|
||||
HRESULT
|
||||
NineBaseTexture9_ctor( struct NineBaseTexture9 *This,
|
||||
struct NineUnknownParams *pParams,
|
||||
struct pipe_resource *initResource,
|
||||
D3DRESOURCETYPE Type,
|
||||
D3DFORMAT format,
|
||||
D3DPOOL Pool,
|
||||
DWORD Usage)
|
||||
{
|
||||
BOOL alloc = (Pool == D3DPOOL_DEFAULT) && !initResource &&
|
||||
(format != D3DFMT_NULL);
|
||||
HRESULT hr;
|
||||
|
||||
DBG("This=%p, pParams=%p initResource=%p Type=%d format=%d Pool=%d Usage=%d\n",
|
||||
This, pParams, initResource, Type, format, Pool, Usage);
|
||||
|
||||
user_assert(!(Usage & (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)) ||
|
||||
Pool == D3DPOOL_DEFAULT, D3DERR_INVALIDCALL);
|
||||
user_assert(!(Usage & D3DUSAGE_DYNAMIC) ||
|
||||
Pool != D3DPOOL_MANAGED, D3DERR_INVALIDCALL);
|
||||
|
||||
hr = NineResource9_ctor(&This->base, pParams, initResource, alloc, Type, Pool, Usage);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
This->format = format;
|
||||
This->pipe = pParams->device->pipe;
|
||||
This->mipfilter = (Usage & D3DUSAGE_AUTOGENMIPMAP) ?
|
||||
D3DTEXF_LINEAR : D3DTEXF_NONE;
|
||||
This->lod = 0;
|
||||
This->lod_resident = -1;
|
||||
This->shadow = This->format != D3DFMT_INTZ && util_format_has_depth(
|
||||
util_format_description(This->base.info.format));
|
||||
|
||||
list_inithead(&This->list);
|
||||
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
void
|
||||
NineBaseTexture9_dtor( struct NineBaseTexture9 *This )
|
||||
{
|
||||
DBG("This=%p\n", This);
|
||||
|
||||
pipe_sampler_view_reference(&This->view[0], NULL);
|
||||
pipe_sampler_view_reference(&This->view[1], NULL);
|
||||
|
||||
list_del(&This->list),
|
||||
|
||||
NineResource9_dtor(&This->base);
|
||||
}
|
||||
|
||||
DWORD WINAPI
|
||||
NineBaseTexture9_SetLOD( struct NineBaseTexture9 *This,
|
||||
DWORD LODNew )
|
||||
{
|
||||
DWORD old = This->lod;
|
||||
|
||||
DBG("This=%p LODNew=%d\n", This, LODNew);
|
||||
|
||||
user_assert(This->base.pool == D3DPOOL_MANAGED, 0);
|
||||
|
||||
This->lod = MIN2(LODNew, This->base.info.last_level);
|
||||
|
||||
if (This->lod != old && This->bind_count && LIST_IS_EMPTY(&This->list))
|
||||
list_add(&This->list, &This->base.base.device->update_textures);
|
||||
|
||||
return old;
|
||||
}
|
||||
|
||||
DWORD WINAPI
|
||||
NineBaseTexture9_GetLOD( struct NineBaseTexture9 *This )
|
||||
{
|
||||
DBG("This=%p\n", This);
|
||||
|
||||
return This->lod;
|
||||
}
|
||||
|
||||
DWORD WINAPI
|
||||
NineBaseTexture9_GetLevelCount( struct NineBaseTexture9 *This )
|
||||
{
|
||||
DBG("This=%p\n", This);
|
||||
|
||||
if (This->base.usage & D3DUSAGE_AUTOGENMIPMAP)
|
||||
return 1;
|
||||
return This->base.info.last_level + 1;
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineBaseTexture9_SetAutoGenFilterType( struct NineBaseTexture9 *This,
|
||||
D3DTEXTUREFILTERTYPE FilterType )
|
||||
{
|
||||
DBG("This=%p FilterType=%d\n", This, FilterType);
|
||||
|
||||
if (!(This->base.usage & D3DUSAGE_AUTOGENMIPMAP))
|
||||
return D3D_OK;
|
||||
user_assert(FilterType != D3DTEXF_NONE, D3DERR_INVALIDCALL);
|
||||
|
||||
This->mipfilter = FilterType;
|
||||
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
D3DTEXTUREFILTERTYPE WINAPI
|
||||
NineBaseTexture9_GetAutoGenFilterType( struct NineBaseTexture9 *This )
|
||||
{
|
||||
DBG("This=%p\n", This);
|
||||
|
||||
return This->mipfilter;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
NineBaseTexture9_UploadSelf( struct NineBaseTexture9 *This )
|
||||
{
|
||||
HRESULT hr;
|
||||
unsigned last_level = This->base.info.last_level;
|
||||
unsigned l;
|
||||
|
||||
DBG("This=%p dirty=%i type=%s\n", This, This->dirty,
|
||||
nine_D3DRTYPE_to_str(This->base.type));
|
||||
|
||||
assert(This->base.pool == D3DPOOL_MANAGED);
|
||||
|
||||
if (This->base.usage & D3DUSAGE_AUTOGENMIPMAP)
|
||||
last_level = 0; /* TODO: What if level 0 is not resident ? */
|
||||
|
||||
if (This->lod_resident != This->lod) {
|
||||
struct pipe_resource *res;
|
||||
|
||||
DBG("updating LOD from %u to %u ...\n", This->lod_resident, This->lod);
|
||||
|
||||
pipe_sampler_view_reference(&This->view[0], NULL);
|
||||
pipe_sampler_view_reference(&This->view[1], NULL);
|
||||
|
||||
if (This->bind_count) {
|
||||
/* mark state dirty */
|
||||
struct nine_state *state = &This->base.base.device->state;
|
||||
unsigned s;
|
||||
for (s = 0; s < NINE_MAX_SAMPLERS; ++s)
|
||||
if (state->texture[s] == This)
|
||||
state->changed.texture |= 1 << s;
|
||||
if (state->changed.texture)
|
||||
state->changed.group |= NINE_STATE_TEXTURE;
|
||||
}
|
||||
|
||||
hr = NineBaseTexture9_CreatePipeResource(This, This->lod_resident != -1);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
res = This->base.resource;
|
||||
|
||||
if (This->lod_resident == -1) /* no levels were resident */
|
||||
This->lod_resident = This->base.info.last_level + 1;
|
||||
|
||||
if (This->base.type == D3DRTYPE_TEXTURE) {
|
||||
struct NineTexture9 *tex = NineTexture9(This);
|
||||
struct pipe_box box;
|
||||
|
||||
/* Mark uninitialized levels as dirty. */
|
||||
box.x = box.y = box.z = 0;
|
||||
box.depth = 1;
|
||||
for (l = This->lod; l < This->lod_resident; ++l) {
|
||||
box.width = u_minify(This->base.info.width0, l);
|
||||
box.height = u_minify(This->base.info.height0, l);
|
||||
NineSurface9_AddDirtyRect(tex->surfaces[l], &box);
|
||||
}
|
||||
for (l = 0; l < This->lod; ++l)
|
||||
NineSurface9_SetResource(tex->surfaces[l], NULL, -1);
|
||||
for (; l <= This->base.info.last_level; ++l)
|
||||
NineSurface9_SetResource(tex->surfaces[l], res, l - This->lod);
|
||||
} else
|
||||
if (This->base.type == D3DRTYPE_CUBETEXTURE) {
|
||||
struct NineCubeTexture9 *tex = NineCubeTexture9(This);
|
||||
struct pipe_box box;
|
||||
unsigned z;
|
||||
|
||||
/* Mark uninitialized levels as dirty. */
|
||||
box.x = box.y = box.z = 0;
|
||||
box.depth = 1;
|
||||
for (l = This->lod; l < This->lod_resident; ++l) {
|
||||
box.width = u_minify(This->base.info.width0, l);
|
||||
box.height = u_minify(This->base.info.height0, l);
|
||||
for (z = 0; z < 6; ++z)
|
||||
NineSurface9_AddDirtyRect(tex->surfaces[l * 6 + z], &box);
|
||||
}
|
||||
for (l = 0; l < This->lod; ++l) {
|
||||
for (z = 0; z < 6; ++z)
|
||||
NineSurface9_SetResource(tex->surfaces[l * 6 + z],
|
||||
NULL, -1);
|
||||
}
|
||||
for (; l <= This->base.info.last_level; ++l) {
|
||||
for (z = 0; z < 6; ++z)
|
||||
NineSurface9_SetResource(tex->surfaces[l * 6 + z],
|
||||
res, l - This->lod);
|
||||
}
|
||||
} else
|
||||
if (This->base.type == D3DRTYPE_VOLUMETEXTURE) {
|
||||
struct NineVolumeTexture9 *tex = NineVolumeTexture9(This);
|
||||
struct pipe_box box;
|
||||
|
||||
/* Mark uninitialized levels as dirty. */
|
||||
box.x = box.y = box.z = 0;
|
||||
for (l = This->lod; l < This->lod_resident; ++l) {
|
||||
box.width = u_minify(This->base.info.width0, l);
|
||||
box.height = u_minify(This->base.info.height0, l);
|
||||
box.depth = u_minify(This->base.info.depth0, l);
|
||||
NineVolume9_AddDirtyRegion(tex->volumes[l], &box);
|
||||
}
|
||||
for (l = 0; l < This->lod; ++l)
|
||||
NineVolume9_SetResource(tex->volumes[l], NULL, -1);
|
||||
for (; l <= This->base.info.last_level; ++l)
|
||||
NineVolume9_SetResource(tex->volumes[l], res, l - This->lod);
|
||||
} else {
|
||||
assert(!"invalid texture type");
|
||||
}
|
||||
|
||||
if (This->lod < This->lod_resident)
|
||||
This->dirty = TRUE;
|
||||
This->lod_resident = This->lod;
|
||||
}
|
||||
if (!This->dirty)
|
||||
return D3D_OK;
|
||||
|
||||
if (This->base.type == D3DRTYPE_TEXTURE) {
|
||||
struct NineTexture9 *tex = NineTexture9(This);
|
||||
struct pipe_box box;
|
||||
box.z = 0;
|
||||
box.depth = 1;
|
||||
|
||||
DBG("TEXTURE: dirty rect=(%u,%u) (%ux%u)\n",
|
||||
tex->dirty_rect.x, tex->dirty_rect.y,
|
||||
tex->dirty_rect.width, tex->dirty_rect.height);
|
||||
|
||||
if (tex->dirty_rect.width) {
|
||||
for (l = 0; l <= last_level; ++l) {
|
||||
u_box_minify_2d(&box, &tex->dirty_rect, l);
|
||||
NineSurface9_AddDirtyRect(tex->surfaces[l], &box);
|
||||
}
|
||||
memset(&tex->dirty_rect, 0, sizeof(tex->dirty_rect));
|
||||
tex->dirty_rect.depth = 1;
|
||||
}
|
||||
for (l = This->lod; l <= last_level; ++l)
|
||||
NineSurface9_UploadSelf(tex->surfaces[l]);
|
||||
} else
|
||||
if (This->base.type == D3DRTYPE_CUBETEXTURE) {
|
||||
struct NineCubeTexture9 *tex = NineCubeTexture9(This);
|
||||
unsigned z;
|
||||
struct pipe_box box;
|
||||
box.z = 0;
|
||||
box.depth = 1;
|
||||
|
||||
for (z = 0; z < 6; ++z) {
|
||||
DBG("FACE[%u]: dirty rect=(%u,%u) (%ux%u)\n", z,
|
||||
tex->dirty_rect[z].x, tex->dirty_rect[z].y,
|
||||
tex->dirty_rect[z].width, tex->dirty_rect[z].height);
|
||||
|
||||
if (tex->dirty_rect[z].width) {
|
||||
for (l = 0; l <= last_level; ++l) {
|
||||
u_box_minify_2d(&box, &tex->dirty_rect[z], l);
|
||||
NineSurface9_AddDirtyRect(tex->surfaces[l * 6 + z], &box);
|
||||
}
|
||||
memset(&tex->dirty_rect[z], 0, sizeof(tex->dirty_rect[z]));
|
||||
tex->dirty_rect[z].depth = 1;
|
||||
}
|
||||
for (l = This->lod; l <= last_level; ++l)
|
||||
NineSurface9_UploadSelf(tex->surfaces[l * 6 + z]);
|
||||
}
|
||||
} else
|
||||
if (This->base.type == D3DRTYPE_VOLUMETEXTURE) {
|
||||
struct NineVolumeTexture9 *tex = NineVolumeTexture9(This);
|
||||
struct pipe_box box;
|
||||
|
||||
DBG("VOLUME: dirty_box=(%u,%u,%u) (%ux%ux%u)\n",
|
||||
tex->dirty_box.x, tex->dirty_box.y, tex->dirty_box.y,
|
||||
tex->dirty_box.width, tex->dirty_box.height, tex->dirty_box.depth);
|
||||
|
||||
if (tex->dirty_box.width) {
|
||||
for (l = 0; l <= last_level; ++l) {
|
||||
u_box_minify_2d(&box, &tex->dirty_box, l);
|
||||
NineVolume9_AddDirtyRegion(tex->volumes[l], &tex->dirty_box);
|
||||
}
|
||||
memset(&tex->dirty_box, 0, sizeof(tex->dirty_box));
|
||||
}
|
||||
for (l = This->lod; l <= last_level; ++l)
|
||||
NineVolume9_UploadSelf(tex->volumes[l]);
|
||||
} else {
|
||||
assert(!"invalid texture type");
|
||||
}
|
||||
This->dirty = FALSE;
|
||||
|
||||
if (This->base.usage & D3DUSAGE_AUTOGENMIPMAP)
|
||||
This->dirty_mip = TRUE;
|
||||
/* TODO: if dirty only because of lod change, only generate added levels */
|
||||
|
||||
DBG("DONE, generate mip maps = %i\n", This->dirty_mip);
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
void WINAPI
|
||||
NineBaseTexture9_GenerateMipSubLevels( struct NineBaseTexture9 *This )
|
||||
{
|
||||
struct pipe_resource *resource = This->base.resource;
|
||||
|
||||
unsigned base_level = 0;
|
||||
unsigned last_level = This->base.info.last_level - This->lod;
|
||||
unsigned first_layer = 0;
|
||||
unsigned last_layer;
|
||||
unsigned filter = This->mipfilter == D3DTEXF_POINT ? PIPE_TEX_FILTER_NEAREST
|
||||
: PIPE_TEX_FILTER_LINEAR;
|
||||
DBG("This=%p\n", This);
|
||||
|
||||
if (This->base.pool == D3DPOOL_MANAGED)
|
||||
NineBaseTexture9_UploadSelf(This);
|
||||
if (!This->dirty_mip)
|
||||
return;
|
||||
if (This->lod) {
|
||||
ERR("AUTOGENMIPMAP if level 0 is not resident not supported yet !\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!This->view[0])
|
||||
NineBaseTexture9_UpdateSamplerView(This, 0);
|
||||
|
||||
last_layer = util_max_layer(This->view[0]->texture, base_level);
|
||||
|
||||
util_gen_mipmap(This->pipe, resource,
|
||||
resource->format, base_level, last_level,
|
||||
first_layer, last_layer, filter);
|
||||
|
||||
This->dirty_mip = FALSE;
|
||||
|
||||
NineDevice9_RestoreNonCSOState(This->base.base.device, ~0x3);
|
||||
}
|
||||
|
||||
HRESULT
|
||||
NineBaseTexture9_CreatePipeResource( struct NineBaseTexture9 *This,
|
||||
BOOL CopyData )
|
||||
{
|
||||
struct pipe_context *pipe = This->pipe;
|
||||
struct pipe_screen *screen = This->base.info.screen;
|
||||
struct pipe_resource templ;
|
||||
unsigned l, m;
|
||||
struct pipe_resource *res;
|
||||
struct pipe_resource *old = This->base.resource;
|
||||
|
||||
DBG("This=%p lod=%u last_level=%u\n", This,
|
||||
This->lod, This->base.info.last_level);
|
||||
|
||||
assert(This->base.pool == D3DPOOL_MANAGED);
|
||||
|
||||
templ = This->base.info;
|
||||
|
||||
if (This->lod) {
|
||||
templ.width0 = u_minify(templ.width0, This->lod);
|
||||
templ.height0 = u_minify(templ.height0, This->lod);
|
||||
templ.depth0 = u_minify(templ.depth0, This->lod);
|
||||
}
|
||||
templ.last_level = This->base.info.last_level - This->lod;
|
||||
|
||||
if (old) {
|
||||
/* LOD might have changed. */
|
||||
if (old->width0 == templ.width0 &&
|
||||
old->height0 == templ.height0 &&
|
||||
old->depth0 == templ.depth0)
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
res = screen->resource_create(screen, &templ);
|
||||
if (!res)
|
||||
return D3DERR_OUTOFVIDEOMEMORY;
|
||||
This->base.resource = res;
|
||||
|
||||
if (old && CopyData) { /* Don't return without releasing old ! */
|
||||
struct pipe_box box;
|
||||
box.x = 0;
|
||||
box.y = 0;
|
||||
box.z = 0;
|
||||
|
||||
l = (This->lod < This->lod_resident) ? This->lod_resident - This->lod : 0;
|
||||
m = (This->lod < This->lod_resident) ? 0 : This->lod - This->lod_resident;
|
||||
|
||||
box.width = u_minify(templ.width0, l);
|
||||
box.height = u_minify(templ.height0, l);
|
||||
box.depth = u_minify(templ.depth0, l);
|
||||
|
||||
for (; l <= templ.last_level; ++l, ++m) {
|
||||
pipe->resource_copy_region(pipe,
|
||||
res, l, 0, 0, 0,
|
||||
old, m, &box);
|
||||
box.width = u_minify(box.width, 1);
|
||||
box.height = u_minify(box.height, 1);
|
||||
box.depth = u_minify(box.depth, 1);
|
||||
}
|
||||
}
|
||||
pipe_resource_reference(&old, NULL);
|
||||
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
#define SWIZZLE_TO_REPLACE(s) (s == UTIL_FORMAT_SWIZZLE_0 || \
|
||||
s == UTIL_FORMAT_SWIZZLE_1 || \
|
||||
s == UTIL_FORMAT_SWIZZLE_NONE)
|
||||
|
||||
HRESULT
|
||||
NineBaseTexture9_UpdateSamplerView( struct NineBaseTexture9 *This,
|
||||
const int sRGB )
|
||||
{
|
||||
const struct util_format_description *desc;
|
||||
struct pipe_context *pipe = This->pipe;
|
||||
struct pipe_screen *screen = pipe->screen;
|
||||
struct pipe_resource *resource = This->base.resource;
|
||||
struct pipe_sampler_view templ;
|
||||
enum pipe_format srgb_format;
|
||||
unsigned i;
|
||||
uint8_t swizzle[4];
|
||||
|
||||
DBG("This=%p sRGB=%d\n", This, sRGB);
|
||||
|
||||
if (unlikely(!resource)) {
|
||||
if (unlikely(This->format == D3DFMT_NULL))
|
||||
return D3D_OK;
|
||||
NineBaseTexture9_Dump(This);
|
||||
/* hack due to incorrect POOL_MANAGED handling */
|
||||
NineBaseTexture9_GenerateMipSubLevels(This);
|
||||
resource = This->base.resource;
|
||||
}
|
||||
assert(resource);
|
||||
|
||||
pipe_sampler_view_reference(&This->view[sRGB], NULL);
|
||||
|
||||
swizzle[0] = PIPE_SWIZZLE_RED;
|
||||
swizzle[1] = PIPE_SWIZZLE_GREEN;
|
||||
swizzle[2] = PIPE_SWIZZLE_BLUE;
|
||||
swizzle[3] = PIPE_SWIZZLE_ALPHA;
|
||||
desc = util_format_description(resource->format);
|
||||
if (desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS) {
|
||||
/* msdn doc is incomplete here and wrong.
|
||||
* The only formats that can be read directly here
|
||||
* are DF16, DF24 and INTZ.
|
||||
* Tested on win the swizzle is
|
||||
* R = depth, G = B = 0, A = 1 for DF16 and DF24
|
||||
* R = G = B = A = depth for INTZ
|
||||
* For the other ZS formats that can't be read directly
|
||||
* but can be used as shadow map, the result is duplicated on
|
||||
* all channel */
|
||||
if (This->format == D3DFMT_DF16 ||
|
||||
This->format == D3DFMT_DF24) {
|
||||
swizzle[1] = PIPE_SWIZZLE_ZERO;
|
||||
swizzle[2] = PIPE_SWIZZLE_ZERO;
|
||||
swizzle[3] = PIPE_SWIZZLE_ONE;
|
||||
} else {
|
||||
swizzle[1] = PIPE_SWIZZLE_RED;
|
||||
swizzle[2] = PIPE_SWIZZLE_RED;
|
||||
swizzle[3] = PIPE_SWIZZLE_RED;
|
||||
}
|
||||
} else if (resource->format != PIPE_FORMAT_A8_UNORM &&
|
||||
resource->format != PIPE_FORMAT_RGTC1_UNORM) {
|
||||
/* exceptions:
|
||||
* A8 should have 0.0 as default values for RGB.
|
||||
* ATI1/RGTC1 should be r 0 0 1 (tested on windows).
|
||||
* It is already what gallium does. All the other ones
|
||||
* should have 1.0 for non-defined values */
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (SWIZZLE_TO_REPLACE(desc->swizzle[i]))
|
||||
swizzle[i] = PIPE_SWIZZLE_ONE;
|
||||
}
|
||||
}
|
||||
|
||||
/* if requested and supported, convert to the sRGB format */
|
||||
srgb_format = util_format_srgb(resource->format);
|
||||
if (sRGB && srgb_format != PIPE_FORMAT_NONE &&
|
||||
screen->is_format_supported(screen, srgb_format,
|
||||
resource->target, 0, resource->bind))
|
||||
templ.format = srgb_format;
|
||||
else
|
||||
templ.format = resource->format;
|
||||
templ.u.tex.first_layer = 0;
|
||||
templ.u.tex.last_layer = resource->target == PIPE_TEXTURE_3D ?
|
||||
resource->depth0 - 1 : resource->array_size - 1;
|
||||
templ.u.tex.first_level = 0;
|
||||
templ.u.tex.last_level = resource->last_level;
|
||||
templ.swizzle_r = swizzle[0];
|
||||
templ.swizzle_g = swizzle[1];
|
||||
templ.swizzle_b = swizzle[2];
|
||||
templ.swizzle_a = swizzle[3];
|
||||
templ.target = resource->target;
|
||||
|
||||
This->view[sRGB] = pipe->create_sampler_view(pipe, resource, &templ);
|
||||
|
||||
DBG("sampler view = %p(resource = %p)\n", This->view[sRGB], resource);
|
||||
|
||||
return This->view ? D3D_OK : D3DERR_DRIVERINTERNALERROR;
|
||||
}
|
||||
|
||||
void WINAPI
|
||||
NineBaseTexture9_PreLoad( struct NineBaseTexture9 *This )
|
||||
{
|
||||
DBG("This=%p\n", This);
|
||||
|
||||
if (This->dirty && This->base.pool == D3DPOOL_MANAGED)
|
||||
NineBaseTexture9_UploadSelf(This);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
void
|
||||
NineBaseTexture9_Dump( struct NineBaseTexture9 *This )
|
||||
{
|
||||
DBG("\nNineBaseTexture9(%p->NULL/%p): Pool=%s Type=%s Usage=%s\n"
|
||||
"Format=%s Dims=%ux%ux%u/%u LastLevel=%u Lod=%u(%u)\n", This,
|
||||
This->base.resource,
|
||||
nine_D3DPOOL_to_str(This->base.pool),
|
||||
nine_D3DRTYPE_to_str(This->base.type),
|
||||
nine_D3DUSAGE_to_str(This->base.usage),
|
||||
d3dformat_to_string(This->format),
|
||||
This->base.info.width0, This->base.info.height0, This->base.info.depth0,
|
||||
This->base.info.array_size, This->base.info.last_level,
|
||||
This->lod, This->lod_resident);
|
||||
}
|
||||
#endif /* DEBUG */
|
141
src/gallium/state_trackers/nine/basetexture9.h
Normal file
141
src/gallium/state_trackers/nine/basetexture9.h
Normal file
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
* 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 _NINE_BASETEXTURE9_H_
|
||||
#define _NINE_BASETEXTURE9_H_
|
||||
|
||||
#include "resource9.h"
|
||||
#include "util/u_inlines.h"
|
||||
#include "util/u_double_list.h"
|
||||
|
||||
struct NineBaseTexture9
|
||||
{
|
||||
struct NineResource9 base;
|
||||
struct list_head list;
|
||||
|
||||
/* g3d */
|
||||
struct pipe_context *pipe;
|
||||
struct pipe_sampler_view *view[2]; /* linear and sRGB */
|
||||
|
||||
D3DFORMAT format;
|
||||
|
||||
D3DTEXTUREFILTERTYPE mipfilter;
|
||||
DWORD lod;
|
||||
DWORD lod_resident;
|
||||
|
||||
int16_t bind_count; /* to Device9->state.texture */
|
||||
|
||||
boolean shadow;
|
||||
uint8_t pstype; /* 0: 2D, 1: 1D, 2: CUBE, 3: 3D */
|
||||
|
||||
boolean dirty;
|
||||
boolean dirty_mip;
|
||||
};
|
||||
static INLINE struct NineBaseTexture9 *
|
||||
NineBaseTexture9( void *data )
|
||||
{
|
||||
return (struct NineBaseTexture9 *)data;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
NineBaseTexture9_ctor( struct NineBaseTexture9 *This,
|
||||
struct NineUnknownParams *pParams,
|
||||
struct pipe_resource *initResource,
|
||||
D3DRESOURCETYPE Type,
|
||||
D3DFORMAT format,
|
||||
D3DPOOL Pool,
|
||||
DWORD Usage);
|
||||
|
||||
void
|
||||
NineBaseTexture9_dtor( struct NineBaseTexture9 *This );
|
||||
|
||||
DWORD WINAPI
|
||||
NineBaseTexture9_SetLOD( struct NineBaseTexture9 *This,
|
||||
DWORD LODNew );
|
||||
|
||||
DWORD WINAPI
|
||||
NineBaseTexture9_GetLOD( struct NineBaseTexture9 *This );
|
||||
|
||||
DWORD WINAPI
|
||||
NineBaseTexture9_GetLevelCount( struct NineBaseTexture9 *This );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineBaseTexture9_SetAutoGenFilterType( struct NineBaseTexture9 *This,
|
||||
D3DTEXTUREFILTERTYPE FilterType );
|
||||
|
||||
D3DTEXTUREFILTERTYPE WINAPI
|
||||
NineBaseTexture9_GetAutoGenFilterType( struct NineBaseTexture9 *This );
|
||||
|
||||
void WINAPI
|
||||
NineBaseTexture9_GenerateMipSubLevels( struct NineBaseTexture9 *This );
|
||||
|
||||
void WINAPI
|
||||
NineBaseTexture9_PreLoad( struct NineBaseTexture9 *This );
|
||||
|
||||
/* For D3DPOOL_MANAGED only (after SetLOD change): */
|
||||
HRESULT
|
||||
NineBaseTexture9_CreatePipeResource( struct NineBaseTexture9 *This,
|
||||
BOOL CopyData );
|
||||
|
||||
/* For D3DPOOL_MANAGED only: */
|
||||
HRESULT
|
||||
NineBaseTexture9_UploadSelf( struct NineBaseTexture9 *This );
|
||||
|
||||
HRESULT
|
||||
NineBaseTexture9_UpdateSamplerView( struct NineBaseTexture9 *This,
|
||||
const int sRGB );
|
||||
|
||||
static INLINE void
|
||||
NineBaseTexture9_Validate( struct NineBaseTexture9 *This )
|
||||
{
|
||||
DBG_FLAG(DBG_BASETEXTURE, "This=%p dirty=%i dirty_mip=%i lod=%u/%u\n",
|
||||
This, This->dirty, This->dirty_mip, This->lod, This->lod_resident);
|
||||
if ((This->base.pool == D3DPOOL_MANAGED) &&
|
||||
(This->dirty || This->lod != This->lod_resident))
|
||||
NineBaseTexture9_UploadSelf(This);
|
||||
if (This->dirty_mip)
|
||||
NineBaseTexture9_GenerateMipSubLevels(This);
|
||||
}
|
||||
|
||||
static INLINE struct pipe_sampler_view *
|
||||
NineBaseTexture9_GetSamplerView( struct NineBaseTexture9 *This, const int sRGB )
|
||||
{
|
||||
if (!This->view[sRGB])
|
||||
NineBaseTexture9_UpdateSamplerView(This, sRGB);
|
||||
return This->view[sRGB];
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
void
|
||||
NineBaseTexture9_Dump( struct NineBaseTexture9 *This );
|
||||
#else
|
||||
static INLINE void
|
||||
NineBaseTexture9_Dump( struct NineBaseTexture9 *This ) { }
|
||||
#endif
|
||||
|
||||
#define BASETEX_REGISTER_UPDATE(t) do { \
|
||||
if (((t)->dirty | ((t)->dirty_mip)) && (t)->base.base.bind) \
|
||||
if (LIST_IS_EMPTY(&(t)->list)) \
|
||||
list_add(&(t)->list, &(t)->base.base.device->update_textures); \
|
||||
} while(0)
|
||||
|
||||
#endif /* _NINE_BASETEXTURE9_H_ */
|
115
src/gallium/state_trackers/nine/cryptosession9.c
Normal file
115
src/gallium/state_trackers/nine/cryptosession9.c
Normal file
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* 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. */
|
||||
|
||||
#include "cryptosession9.h"
|
||||
|
||||
#define DBG_CHANNEL DBG_CRYPTOSESSION
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_GetCertificateSize( struct NineCryptoSession9 *This,
|
||||
UINT *pCertificateSize )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_GetCertificate( struct NineCryptoSession9 *This,
|
||||
UINT CertifacteSize,
|
||||
BYTE *ppCertificate )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_NegotiateKeyExchange( struct NineCryptoSession9 *This,
|
||||
UINT DataSize,
|
||||
void *pData )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_EncryptionBlt( struct NineCryptoSession9 *This,
|
||||
IDirect3DSurface9 *pSrcSurface,
|
||||
IDirect3DSurface9 *pDstSurface,
|
||||
UINT DstSurfaceSize,
|
||||
void *pIV )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_DecryptionBlt( struct NineCryptoSession9 *This,
|
||||
IDirect3DSurface9 *pSrcSurface,
|
||||
IDirect3DSurface9 *pDstSurface,
|
||||
UINT SrcSurfaceSize,
|
||||
D3DENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
|
||||
void *pContentKey,
|
||||
void *pIV )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_GetSurfacePitch( struct NineCryptoSession9 *This,
|
||||
IDirect3DSurface9 *pSrcSurface,
|
||||
UINT *pSurfacePitch )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_StartSessionKeyRefresh( struct NineCryptoSession9 *This,
|
||||
void *pRandomNumber,
|
||||
UINT RandomNumberSize )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_FinishSessionKeyRefresh( struct NineCryptoSession9 *This )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_GetEncryptionBltKey( struct NineCryptoSession9 *This,
|
||||
void *pReadbackKey,
|
||||
UINT KeySize )
|
||||
{
|
||||
STUB(D3DERR_INVALIDCALL);
|
||||
}
|
||||
|
||||
IDirect3DCryptoSession9Vtbl NineCryptoSession9_vtable = {
|
||||
(void *)NineUnknown_QueryInterface,
|
||||
(void *)NineUnknown_AddRef,
|
||||
(void *)NineUnknown_Release,
|
||||
(void *)NineCryptoSession9_GetCertificateSize,
|
||||
(void *)NineCryptoSession9_GetCertificate,
|
||||
(void *)NineCryptoSession9_NegotiateKeyExchange,
|
||||
(void *)NineCryptoSession9_EncryptionBlt,
|
||||
(void *)NineCryptoSession9_DecryptionBlt,
|
||||
(void *)NineCryptoSession9_GetSurfacePitch,
|
||||
(void *)NineCryptoSession9_StartSessionKeyRefresh,
|
||||
(void *)NineCryptoSession9_FinishSessionKeyRefresh,
|
||||
(void *)NineCryptoSession9_GetEncryptionBltKey
|
||||
};
|
86
src/gallium/state_trackers/nine/cryptosession9.h
Normal file
86
src/gallium/state_trackers/nine/cryptosession9.h
Normal file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* 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 _NINE_CRYPTOSESSION9_H_
|
||||
#define _NINE_CRYPTOSESSION9_H_
|
||||
|
||||
#include "iunknown.h"
|
||||
|
||||
struct NineCryptoSession9
|
||||
{
|
||||
struct NineUnknown base;
|
||||
};
|
||||
static INLINE struct NineCryptoSession9 *
|
||||
NineCryptoSession9( void *data )
|
||||
{
|
||||
return (struct NineCryptoSession9 *)data;
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_GetCertificateSize( struct NineCryptoSession9 *This,
|
||||
UINT *pCertificateSize );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_GetCertificate( struct NineCryptoSession9 *This,
|
||||
UINT CertifacteSize,
|
||||
BYTE *ppCertificate );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_NegotiateKeyExchange( struct NineCryptoSession9 *This,
|
||||
UINT DataSize,
|
||||
void *pData );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_EncryptionBlt( struct NineCryptoSession9 *This,
|
||||
IDirect3DSurface9 *pSrcSurface,
|
||||
IDirect3DSurface9 *pDstSurface,
|
||||
UINT DstSurfaceSize,
|
||||
void *pIV );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_DecryptionBlt( struct NineCryptoSession9 *This,
|
||||
IDirect3DSurface9 *pSrcSurface,
|
||||
IDirect3DSurface9 *pDstSurface,
|
||||
UINT SrcSurfaceSize,
|
||||
D3DENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
|
||||
void *pContentKey,
|
||||
void *pIV );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_GetSurfacePitch( struct NineCryptoSession9 *This,
|
||||
IDirect3DSurface9 *pSrcSurface,
|
||||
UINT *pSurfacePitch );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_StartSessionKeyRefresh( struct NineCryptoSession9 *This,
|
||||
void *pRandomNumber,
|
||||
UINT RandomNumberSize );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_FinishSessionKeyRefresh( struct NineCryptoSession9 *This );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCryptoSession9_GetEncryptionBltKey( struct NineCryptoSession9 *This,
|
||||
void *pReadbackKey,
|
||||
UINT KeySize );
|
||||
|
||||
#endif /* _NINE_CRYPTOSESSION9_H_ */
|
300
src/gallium/state_trackers/nine/cubetexture9.c
Normal file
300
src/gallium/state_trackers/nine/cubetexture9.c
Normal file
@@ -0,0 +1,300 @@
|
||||
/*
|
||||
* 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. */
|
||||
|
||||
#include "device9.h"
|
||||
#include "cubetexture9.h"
|
||||
#include "nine_helpers.h"
|
||||
#include "nine_pipe.h"
|
||||
|
||||
#define DBG_CHANNEL DBG_CUBETEXTURE
|
||||
|
||||
|
||||
static HRESULT
|
||||
NineCubeTexture9_ctor( struct NineCubeTexture9 *This,
|
||||
struct NineUnknownParams *pParams,
|
||||
UINT EdgeLength, UINT Levels,
|
||||
DWORD Usage,
|
||||
D3DFORMAT Format,
|
||||
D3DPOOL Pool,
|
||||
HANDLE *pSharedHandle )
|
||||
{
|
||||
struct pipe_resource *info = &This->base.base.info;
|
||||
struct pipe_screen *screen = pParams->device->screen;
|
||||
enum pipe_format pf;
|
||||
unsigned i;
|
||||
D3DSURFACE_DESC sfdesc;
|
||||
HRESULT hr;
|
||||
|
||||
DBG("This=%p pParams=%p EdgeLength=%u Levels=%u Usage=%d "
|
||||
"Format=%d Pool=%d pSharedHandle=%p\n",
|
||||
This, pParams, EdgeLength, Levels, Usage,
|
||||
Format, Pool, pSharedHandle);
|
||||
|
||||
user_assert(!(Usage & D3DUSAGE_AUTOGENMIPMAP) ||
|
||||
(Pool != D3DPOOL_SYSTEMMEM && Levels <= 1), D3DERR_INVALIDCALL);
|
||||
|
||||
user_assert(!pSharedHandle, D3DERR_INVALIDCALL); /* TODO */
|
||||
|
||||
if (Usage & D3DUSAGE_AUTOGENMIPMAP)
|
||||
Levels = 0;
|
||||
|
||||
pf = d3d9_to_pipe_format(Format);
|
||||
if (pf == PIPE_FORMAT_NONE ||
|
||||
!screen->is_format_supported(screen, pf, PIPE_TEXTURE_CUBE, 0, PIPE_BIND_SAMPLER_VIEW)) {
|
||||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
|
||||
/* We support ATI1 and ATI2 hacks only for 2D textures */
|
||||
if (Format == D3DFMT_ATI1 || Format == D3DFMT_ATI2)
|
||||
return D3DERR_INVALIDCALL;
|
||||
|
||||
info->screen = pParams->device->screen;
|
||||
info->target = PIPE_TEXTURE_CUBE;
|
||||
info->format = pf;
|
||||
info->width0 = EdgeLength;
|
||||
info->height0 = EdgeLength;
|
||||
info->depth0 = 1;
|
||||
if (Levels)
|
||||
info->last_level = Levels - 1;
|
||||
else
|
||||
info->last_level = util_logbase2(EdgeLength);
|
||||
info->array_size = 6;
|
||||
info->nr_samples = 0;
|
||||
info->bind = PIPE_BIND_SAMPLER_VIEW;
|
||||
info->usage = PIPE_USAGE_DEFAULT;
|
||||
info->flags = 0;
|
||||
|
||||
if (Usage & D3DUSAGE_RENDERTARGET)
|
||||
info->bind |= PIPE_BIND_RENDER_TARGET;
|
||||
if (Usage & D3DUSAGE_DEPTHSTENCIL)
|
||||
info->bind |= PIPE_BIND_DEPTH_STENCIL;
|
||||
|
||||
if (Usage & D3DUSAGE_DYNAMIC) {
|
||||
info->usage = PIPE_USAGE_DYNAMIC;
|
||||
info->bind |=
|
||||
PIPE_BIND_TRANSFER_READ |
|
||||
PIPE_BIND_TRANSFER_WRITE;
|
||||
}
|
||||
|
||||
This->surfaces = CALLOC(6 * (info->last_level + 1), sizeof(*This->surfaces));
|
||||
if (!This->surfaces)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
hr = NineBaseTexture9_ctor(&This->base, pParams, NULL, D3DRTYPE_CUBETEXTURE,
|
||||
Format, Pool, Usage);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
This->base.pstype = 2;
|
||||
|
||||
/* Create all the surfaces right away.
|
||||
* They manage backing storage, and transfers (LockRect) are deferred
|
||||
* to them.
|
||||
*/
|
||||
sfdesc.Format = Format;
|
||||
sfdesc.Type = D3DRTYPE_SURFACE;
|
||||
sfdesc.Usage = Usage;
|
||||
sfdesc.Pool = Pool;
|
||||
sfdesc.MultiSampleType = D3DMULTISAMPLE_NONE;
|
||||
sfdesc.MultiSampleQuality = 0;
|
||||
for (i = 0; i < (info->last_level + 1) * 6; ++i) {
|
||||
sfdesc.Width = sfdesc.Height = u_minify(EdgeLength, i / 6);
|
||||
|
||||
hr = NineSurface9_new(This->base.base.base.device, NineUnknown(This),
|
||||
This->base.base.resource, NULL, D3DRTYPE_CUBETEXTURE,
|
||||
i / 6, i % 6,
|
||||
&sfdesc, &This->surfaces[i]);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
}
|
||||
for (i = 0; i < 6; ++i) /* width = 0 means empty, depth stays 1 */
|
||||
This->dirty_rect[i].depth = 1;
|
||||
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
static void
|
||||
NineCubeTexture9_dtor( struct NineCubeTexture9 *This )
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
DBG("This=%p\n", This);
|
||||
|
||||
if (This->surfaces) {
|
||||
for (i = 0; i < This->base.base.info.last_level * 6; ++i)
|
||||
NineUnknown_Destroy(&This->surfaces[i]->base.base);
|
||||
FREE(This->surfaces);
|
||||
}
|
||||
|
||||
NineBaseTexture9_dtor(&This->base);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCubeTexture9_GetLevelDesc( struct NineCubeTexture9 *This,
|
||||
UINT Level,
|
||||
D3DSURFACE_DESC *pDesc )
|
||||
{
|
||||
DBG("This=%p Level=%u pDesc=%p\n", This, Level, pDesc);
|
||||
|
||||
user_assert(Level <= This->base.base.info.last_level, D3DERR_INVALIDCALL);
|
||||
user_assert(Level == 0 || !(This->base.base.usage & D3DUSAGE_AUTOGENMIPMAP),
|
||||
D3DERR_INVALIDCALL);
|
||||
|
||||
*pDesc = This->surfaces[Level * 6]->desc;
|
||||
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCubeTexture9_GetCubeMapSurface( struct NineCubeTexture9 *This,
|
||||
D3DCUBEMAP_FACES FaceType,
|
||||
UINT Level,
|
||||
IDirect3DSurface9 **ppCubeMapSurface )
|
||||
{
|
||||
const unsigned s = Level * 6 + FaceType;
|
||||
|
||||
DBG("This=%p FaceType=%d Level=%u ppCubeMapSurface=%p\n",
|
||||
This, FaceType, Level, ppCubeMapSurface);
|
||||
|
||||
user_assert(Level <= This->base.base.info.last_level, D3DERR_INVALIDCALL);
|
||||
user_assert(Level == 0 || !(This->base.base.usage & D3DUSAGE_AUTOGENMIPMAP),
|
||||
D3DERR_INVALIDCALL);
|
||||
user_assert(FaceType < 6, D3DERR_INVALIDCALL);
|
||||
|
||||
NineUnknown_AddRef(NineUnknown(This->surfaces[s]));
|
||||
*ppCubeMapSurface = (IDirect3DSurface9 *)This->surfaces[s];
|
||||
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCubeTexture9_LockRect( struct NineCubeTexture9 *This,
|
||||
D3DCUBEMAP_FACES FaceType,
|
||||
UINT Level,
|
||||
D3DLOCKED_RECT *pLockedRect,
|
||||
const RECT *pRect,
|
||||
DWORD Flags )
|
||||
{
|
||||
const unsigned s = Level * 6 + FaceType;
|
||||
|
||||
DBG("This=%p FaceType=%d Level=%u pLockedRect=%p pRect=%p Flags=%d\n",
|
||||
This, FaceType, Level, pLockedRect, pRect, Flags);
|
||||
|
||||
user_assert(Level <= This->base.base.info.last_level, D3DERR_INVALIDCALL);
|
||||
user_assert(Level == 0 || !(This->base.base.usage & D3DUSAGE_AUTOGENMIPMAP),
|
||||
D3DERR_INVALIDCALL);
|
||||
user_assert(FaceType < 6, D3DERR_INVALIDCALL);
|
||||
|
||||
return NineSurface9_LockRect(This->surfaces[s], pLockedRect, pRect, Flags);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCubeTexture9_UnlockRect( struct NineCubeTexture9 *This,
|
||||
D3DCUBEMAP_FACES FaceType,
|
||||
UINT Level )
|
||||
{
|
||||
const unsigned s = Level * 6 + FaceType;
|
||||
|
||||
DBG("This=%p FaceType=%d Level=%u\n", This, FaceType, Level);
|
||||
|
||||
user_assert(Level <= This->base.base.info.last_level, D3DERR_INVALIDCALL);
|
||||
user_assert(FaceType < 6, D3DERR_INVALIDCALL);
|
||||
|
||||
return NineSurface9_UnlockRect(This->surfaces[s]);
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCubeTexture9_AddDirtyRect( struct NineCubeTexture9 *This,
|
||||
D3DCUBEMAP_FACES FaceType,
|
||||
const RECT *pDirtyRect )
|
||||
{
|
||||
DBG("This=%p FaceType=%d pDirtyRect=%p\n", This, FaceType, pDirtyRect);
|
||||
|
||||
user_assert(FaceType < 6, D3DERR_INVALIDCALL);
|
||||
|
||||
if (This->base.base.pool != D3DPOOL_MANAGED) {
|
||||
if (This->base.base.usage & D3DUSAGE_AUTOGENMIPMAP)
|
||||
This->base.dirty_mip = TRUE;
|
||||
return D3D_OK;
|
||||
}
|
||||
This->base.dirty = TRUE;
|
||||
|
||||
BASETEX_REGISTER_UPDATE(&This->base);
|
||||
|
||||
if (!pDirtyRect) {
|
||||
u_box_origin_2d(This->base.base.info.width0,
|
||||
This->base.base.info.height0,
|
||||
&This->dirty_rect[FaceType]);
|
||||
} else {
|
||||
struct pipe_box box;
|
||||
rect_to_pipe_box_clamp(&box, pDirtyRect);
|
||||
u_box_union_2d(&This->dirty_rect[FaceType], &This->dirty_rect[FaceType],
|
||||
&box);
|
||||
}
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
IDirect3DCubeTexture9Vtbl NineCubeTexture9_vtable = {
|
||||
(void *)NineUnknown_QueryInterface,
|
||||
(void *)NineUnknown_AddRef,
|
||||
(void *)NineUnknown_Release,
|
||||
(void *)NineUnknown_GetDevice, /* actually part of Resource9 iface */
|
||||
(void *)NineResource9_SetPrivateData,
|
||||
(void *)NineResource9_GetPrivateData,
|
||||
(void *)NineResource9_FreePrivateData,
|
||||
(void *)NineResource9_SetPriority,
|
||||
(void *)NineResource9_GetPriority,
|
||||
(void *)NineBaseTexture9_PreLoad,
|
||||
(void *)NineResource9_GetType,
|
||||
(void *)NineBaseTexture9_SetLOD,
|
||||
(void *)NineBaseTexture9_GetLOD,
|
||||
(void *)NineBaseTexture9_GetLevelCount,
|
||||
(void *)NineBaseTexture9_SetAutoGenFilterType,
|
||||
(void *)NineBaseTexture9_GetAutoGenFilterType,
|
||||
(void *)NineBaseTexture9_GenerateMipSubLevels,
|
||||
(void *)NineCubeTexture9_GetLevelDesc,
|
||||
(void *)NineCubeTexture9_GetCubeMapSurface,
|
||||
(void *)NineCubeTexture9_LockRect,
|
||||
(void *)NineCubeTexture9_UnlockRect,
|
||||
(void *)NineCubeTexture9_AddDirtyRect
|
||||
};
|
||||
|
||||
static const GUID *NineCubeTexture9_IIDs[] = {
|
||||
&IID_IDirect3DCubeTexture9,
|
||||
&IID_IDirect3DBaseTexture9,
|
||||
&IID_IDirect3DResource9,
|
||||
&IID_IUnknown,
|
||||
NULL
|
||||
};
|
||||
|
||||
HRESULT
|
||||
NineCubeTexture9_new( struct NineDevice9 *pDevice,
|
||||
UINT EdgeLength, UINT Levels,
|
||||
DWORD Usage,
|
||||
D3DFORMAT Format,
|
||||
D3DPOOL Pool,
|
||||
struct NineCubeTexture9 **ppOut,
|
||||
HANDLE *pSharedHandle )
|
||||
{
|
||||
NINE_DEVICE_CHILD_NEW(CubeTexture9, ppOut, pDevice,
|
||||
EdgeLength, Levels,
|
||||
Usage, Format, Pool, pSharedHandle);
|
||||
}
|
79
src/gallium/state_trackers/nine/cubetexture9.h
Normal file
79
src/gallium/state_trackers/nine/cubetexture9.h
Normal file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* 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 _NINE_CUBETEXTURE9_H_
|
||||
#define _NINE_CUBETEXTURE9_H_
|
||||
|
||||
#include "basetexture9.h"
|
||||
#include "surface9.h"
|
||||
|
||||
struct NineCubeTexture9
|
||||
{
|
||||
struct NineBaseTexture9 base;
|
||||
struct NineSurface9 **surfaces;
|
||||
struct pipe_box dirty_rect[6]; /* covers all mip levels */
|
||||
};
|
||||
static INLINE struct NineCubeTexture9 *
|
||||
NineCubeTexture9( void *data )
|
||||
{
|
||||
return (struct NineCubeTexture9 *)data;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
NineCubeTexture9_new( struct NineDevice9 *pDevice,
|
||||
UINT EdgeLength, UINT Levels,
|
||||
DWORD Usage,
|
||||
D3DFORMAT Format,
|
||||
D3DPOOL Pool,
|
||||
struct NineCubeTexture9 **ppOut,
|
||||
HANDLE *pSharedHandle );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCubeTexture9_GetLevelDesc( struct NineCubeTexture9 *This,
|
||||
UINT Level,
|
||||
D3DSURFACE_DESC *pDesc );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCubeTexture9_GetCubeMapSurface( struct NineCubeTexture9 *This,
|
||||
D3DCUBEMAP_FACES FaceType,
|
||||
UINT Level,
|
||||
IDirect3DSurface9 **ppCubeMapSurface );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCubeTexture9_LockRect( struct NineCubeTexture9 *This,
|
||||
D3DCUBEMAP_FACES FaceType,
|
||||
UINT Level,
|
||||
D3DLOCKED_RECT *pLockedRect,
|
||||
const RECT *pRect,
|
||||
DWORD Flags );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCubeTexture9_UnlockRect( struct NineCubeTexture9 *This,
|
||||
D3DCUBEMAP_FACES FaceType,
|
||||
UINT Level );
|
||||
|
||||
HRESULT WINAPI
|
||||
NineCubeTexture9_AddDirtyRect( struct NineCubeTexture9 *This,
|
||||
D3DCUBEMAP_FACES FaceType,
|
||||
const RECT *pDirtyRect );
|
||||
|
||||
#endif /* _NINE_CUBETEXTURE9_H_ */
|
3560
src/gallium/state_trackers/nine/device9.c
Normal file
3560
src/gallium/state_trackers/nine/device9.c
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user