Compare commits
178 Commits
mesa-7.6-1
...
mesa_7_6_1
Author | SHA1 | Date | |
---|---|---|---|
|
fe5c46546e | ||
|
c5add6a468 | ||
|
13b5a624b1 | ||
|
027abddf4f | ||
|
d449c07b8b | ||
|
2b3ea2be90 | ||
|
514544f373 | ||
|
5f305b1db9 | ||
|
ab12e764ba | ||
|
1220aba99b | ||
|
e5ffb9f5ea | ||
|
23a4a6727e | ||
|
74ef3207d8 | ||
|
2cda507fa1 | ||
|
6d2ceda780 | ||
|
289db82b2d | ||
|
7452877cf6 | ||
|
26d2ce0a09 | ||
|
9348ac03ce | ||
|
d8e256f923 | ||
|
301a9b7e28 | ||
|
1c7337d46e | ||
|
63191bd244 | ||
|
7c623905bc | ||
|
1c3f7ab74c | ||
|
bc4ad7c2ae | ||
|
76aa0c0fd3 | ||
|
60c328db2d | ||
|
f1b91ccc08 | ||
|
51f7763c00 | ||
|
6eb71519f7 | ||
|
c5106339d3 | ||
|
804d367a47 | ||
|
077eb0d81c | ||
|
e713a95c96 | ||
|
a0cd2b7029 | ||
|
e60ebebb39 | ||
|
0197348641 | ||
|
e055665752 | ||
|
35506dec67 | ||
|
02b9fb9c80 | ||
|
635ea87374 | ||
|
96128fdf2f | ||
|
c0a61c8442 | ||
|
0219cd0961 | ||
|
5e3b2baae7 | ||
|
a7d0665c00 | ||
|
93dae6761b | ||
|
8df9587d68 | ||
|
0f255d1956 | ||
|
2643a7ba29 | ||
|
b7eea8c616 | ||
|
498fcfd315 | ||
|
22575abdec | ||
|
517ae7a3b6 | ||
|
70b17db918 | ||
|
43dc91f8bb | ||
|
f9e334cb32 | ||
|
42732611d3 | ||
|
0a47631849 | ||
|
48dad9c93f | ||
|
dc8b139aa2 | ||
|
0acb057ad1 | ||
|
2d17dbfb53 | ||
|
b01937a3c9 | ||
|
96d7d66dff | ||
|
5c0dc902e7 | ||
|
559da98c2b | ||
|
9df9696f6d | ||
|
ff3f09a7fe | ||
|
cd62b4f00a | ||
|
9528dc6ed8 | ||
|
5e4f5e41a4 | ||
|
dd24501665 | ||
|
55058652b8 | ||
|
5e6a6a2719 | ||
|
4837e01bcd | ||
|
61a96a2ac7 | ||
|
8810b8f671 | ||
|
c24466c34e | ||
|
ea659f8917 | ||
|
f9bbbe5803 | ||
|
2f7abf5c04 | ||
|
869e20bcb7 | ||
|
a88c9296cb | ||
|
b86302283b | ||
|
5283a3fb25 | ||
|
4b2cf92ad9 | ||
|
ca940a73a7 | ||
|
16e21191e2 | ||
|
8123180ea6 | ||
|
3594b53c01 | ||
|
946bc9aa42 | ||
|
89b31c9619 | ||
|
3f30b0709b | ||
|
16c6a3b71e | ||
|
a176b1c5d8 | ||
|
e5d6450c2c | ||
|
22a0029a68 | ||
|
a3fec14101 | ||
|
606becc7f3 | ||
|
74c31e5d05 | ||
|
95851d8cb2 | ||
|
bf68e54a4d | ||
|
5101215a64 | ||
|
f7285bdffc | ||
|
6f8b4d9e36 | ||
|
269f16cd96 | ||
|
31f7e8efb2 | ||
|
115edf24a9 | ||
|
9282edfaa0 | ||
|
f3be27c0cf | ||
|
a82da7fa26 | ||
|
768481ed40 | ||
|
194ede4bf9 | ||
|
2738681e84 | ||
|
6164f1fe79 | ||
|
ce64e063a8 | ||
|
f7fb30f03b | ||
|
ee3fbe7067 | ||
|
9f002e4aaa | ||
|
7dd2c0afd6 | ||
|
9fde81bb20 | ||
|
ae351599f1 | ||
|
cdcd9da480 | ||
|
c3eef6021a | ||
|
0526100a5c | ||
|
f36425b569 | ||
|
846a6b0695 | ||
|
edbaa717b4 | ||
|
14f21c7850 | ||
|
4b3cbecb3a | ||
|
e3fff3daf0 | ||
|
f9904edf53 | ||
|
79892e7976 | ||
|
3b7ec94c0d | ||
|
3b29dcbb5e | ||
|
a8768bbc9d | ||
|
a15d9ca9cc | ||
|
43750f1575 | ||
|
3856c3cc46 | ||
|
bbe384c86a | ||
|
c01a77d304 | ||
|
e1bddd159f | ||
|
85ee0ef9a7 | ||
|
584b0879ac | ||
|
abc12d0636 | ||
|
389021220d | ||
|
337480e1f8 | ||
|
167ffa9e03 | ||
|
0574954238 | ||
|
0f291f2efe | ||
|
63064cf7c3 | ||
|
7b568614a2 | ||
|
9b27a0d063 | ||
|
b3e41e0d5e | ||
|
b154497bef | ||
|
495628bc5c | ||
|
18883cdf23 | ||
|
521e4b9b7e | ||
|
49fbdd18ed | ||
|
b77469871a | ||
|
322bc403bc | ||
|
65765c9f2c | ||
|
3c794e45b0 | ||
|
5f1faf4a21 | ||
|
a6b84aef4a | ||
|
86ee448047 | ||
|
ef9cd84521 | ||
|
69a3043f41 | ||
|
2d400d43bf | ||
|
9b5541617f | ||
|
564df9dc5f | ||
|
fbddc75aa2 | ||
|
6829ef7460 | ||
|
d39fd9f641 | ||
|
18f3afbe88 | ||
|
b807d49f18 |
2
Makefile
2
Makefile
@@ -182,7 +182,7 @@ ultrix-gcc:
|
||||
|
||||
# Rules for making release tarballs
|
||||
|
||||
VERSION=7.6
|
||||
VERSION=7.6.1
|
||||
DIRECTORY = Mesa-$(VERSION)
|
||||
LIB_NAME = MesaLib-$(VERSION)
|
||||
DEMO_NAME = MesaDemos-$(VERSION)
|
||||
|
@@ -124,7 +124,7 @@ INSTALL_INC_DIR = $(includedir)
|
||||
DRI_DRIVER_INSTALL_DIR = @DRI_DRIVER_INSTALL_DIR@
|
||||
|
||||
# Where libGL will look for DRI hardware drivers
|
||||
DRI_DRIVER_SEARCH_DIR = $(DRI_DRIVER_INSTALL_DIR)
|
||||
DRI_DRIVER_SEARCH_DIR = @DRI_DRIVER_SEARCH_DIR@
|
||||
|
||||
# Xorg driver install directory (for xorg state-tracker)
|
||||
XORG_DRIVER_INSTALL_DIR = @XORG_DRIVER_INSTALL_DIR@
|
||||
|
@@ -10,7 +10,7 @@ CONFIG_NAME = default
|
||||
# Version info
|
||||
MESA_MAJOR=7
|
||||
MESA_MINOR=6
|
||||
MESA_TINY=0
|
||||
MESA_TINY=1
|
||||
MESA_VERSION = $(MESA_MAJOR).$(MESA_MINOR).$(MESA_TINY)
|
||||
|
||||
# external projects. This should be useless now that we use libdrm.
|
||||
|
14
configure.ac
14
configure.ac
@@ -230,6 +230,8 @@ else
|
||||
LIB_EXTENSION='dylib' ;;
|
||||
cygwin* )
|
||||
LIB_EXTENSION='dll' ;;
|
||||
aix* )
|
||||
LIB_EXTENSION='a' ;;
|
||||
* )
|
||||
LIB_EXTENSION='so' ;;
|
||||
esac
|
||||
@@ -647,6 +649,13 @@ AC_ARG_WITH([dri-driverdir],
|
||||
[DRI_DRIVER_INSTALL_DIR="$withval"],
|
||||
[DRI_DRIVER_INSTALL_DIR='${libdir}/dri'])
|
||||
AC_SUBST([DRI_DRIVER_INSTALL_DIR])
|
||||
dnl Extra search path for DRI drivers
|
||||
AC_ARG_WITH([dri-searchpath],
|
||||
[AS_HELP_STRING([--with-dri-searchpath=DIRS...],
|
||||
[semicolon delimited DRI driver search directories @<:@${libdir}/dri@:>@])],
|
||||
[DRI_DRIVER_SEARCH_DIR="$withval"],
|
||||
[DRI_DRIVER_SEARCH_DIR='${DRI_DRIVER_INSTALL_DIR}'])
|
||||
AC_SUBST([DRI_DRIVER_SEARCH_DIR])
|
||||
dnl Direct rendering or just indirect rendering
|
||||
AC_ARG_ENABLE([driglx-direct],
|
||||
[AS_HELP_STRING([--disable-driglx-direct],
|
||||
@@ -1148,6 +1157,11 @@ yes)
|
||||
if test "$tracker" = egl && test "x$enable_egl" != xyes; then
|
||||
AC_MSG_ERROR([cannot build egl state tracker without EGL library])
|
||||
fi
|
||||
if test "$tracker" = xorg; then
|
||||
PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
|
||||
HAVE_XEXTPROTO_71="yes"; DEFINES="$DEFINES -DHAVE_XEXTPROTO_71"
|
||||
HAVE_XEXTPROTO_71="no")
|
||||
fi
|
||||
done
|
||||
GALLIUM_STATE_TRACKERS_DIRS="$state_trackers"
|
||||
;;
|
||||
|
@@ -10,6 +10,17 @@
|
||||
|
||||
<H1>News</H1>
|
||||
|
||||
<h2>September 28, 2009</h2>
|
||||
<p>
|
||||
<a href="relnotes-7.6.html">Mesa 7.6</a> is released. This is a new feature
|
||||
release. Those especially concerned about stability may want to wait for the
|
||||
follow-on 7.6.1 bug-fix release.
|
||||
</p>
|
||||
<p>
|
||||
<a href="relnotes-7.5.2.html">Mesa 7.5.2</a> is also released.
|
||||
This is a stable release fixing bugs since the 7.5.1 release.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>September 3, 2009</h2>
|
||||
<p>
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
<body bgcolor="#eeeeee">
|
||||
|
||||
<H1>Mesa 7.5.2 Release Notes, (date tbd)</H1>
|
||||
<H1>Mesa 7.5.2 Release Notes, 28 September 2009</H1>
|
||||
|
||||
<p>
|
||||
Mesa 7.5.2 is a bug-fix release fixing issues found since the 7.5.1 release.
|
||||
@@ -31,7 +31,15 @@ for DRI hardware acceleration.
|
||||
|
||||
<h2>MD5 checksums</h2>
|
||||
<pre>
|
||||
tbd
|
||||
43a90191dd9f76cd65dcc1ac91f3be70 MesaLib-7.5.2.tar.gz
|
||||
94e47a499f1226803869c2e37a6a8e3a MesaLib-7.5.2.tar.bz2
|
||||
1ecb822b567ad67a0617361d45206b67 MesaLib-7.5.2.zip
|
||||
2718fdce7e075911d6147beb8f27104b MesaDemos-7.5.2.tar.gz
|
||||
4e0f5ccd58afe21eddcd94327d926e86 MesaDemos-7.5.2.tar.bz2
|
||||
f621f8c223b278d7c8e49a012d56ca25 MesaDemos-7.5.2.zip
|
||||
83c16c1d6bcfcc3f97aab5d2fe430b4c MesaGLUT-7.5.2.tar.gz
|
||||
e5d03bedae369ea3705783573bb33813 MesaGLUT-7.5.2.tar.bz2
|
||||
e82ba28e00d653e6f437d32be8ca8481 MesaGLUT-7.5.2.zip
|
||||
</pre>
|
||||
|
||||
|
||||
@@ -55,6 +63,5 @@ tbd
|
||||
when using Gallium.
|
||||
</ul>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
60
docs/relnotes-7.6.1.html
Normal file
60
docs/relnotes-7.6.1.html
Normal file
@@ -0,0 +1,60 @@
|
||||
<HTML>
|
||||
|
||||
<TITLE>Mesa Release Notes</TITLE>
|
||||
|
||||
<head><link rel="stylesheet" type="text/css" href="mesa.css"></head>
|
||||
|
||||
<BODY>
|
||||
|
||||
<body bgcolor="#eeeeee">
|
||||
|
||||
<H1>Mesa 7.6.1 Release Notes, (date tbd)</H1>
|
||||
|
||||
<p>
|
||||
Mesa 7.6.1 is a bug-fix release fixing issues since version 7.6.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 7.6.1 implements the OpenGL 2.1 API, but the version reported by
|
||||
glGetString(GL_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 2.1.
|
||||
</p>
|
||||
<p>
|
||||
See the <a href="install.html">Compiling/Installing page</a> for prerequisites
|
||||
for DRI hardware acceleration.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>MD5 checksums</h2>
|
||||
<pre>
|
||||
tbd
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<ul>
|
||||
<li>Upgraded GL/glext.h to version 56, GL/glxext.h to version 25,
|
||||
GL/wglext.h to version 17
|
||||
<li>New 3D driver, r600, for Radeon R6xx, R7xx hardware
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
<ul>
|
||||
<li>Fixed crash caused by glXCopyContext() and glXDestroyContext(), bug 24217
|
||||
<li>glXQueryContext(GLX_RENDER_TYPE) returned wrong values (bug 24211)
|
||||
<li>GLSL sqrt(0) returned unpredictable results
|
||||
<li>Fixed default texture binding bug when a bound texture was deleted.
|
||||
<li>r300: Work around an issue with very large fragment programs on R500.
|
||||
<li>Fake glXQueryDrawable() didn't return good values (bug 24320)
|
||||
<li>Fixed AUX buffer breakage (bug 24426).
|
||||
<li>Fixed locale-dependent float parsing bug in GLSL compiler (bug 24531)
|
||||
<li>Fixed Gallium Cell driver compilation failure.
|
||||
<li>Fixed glGetTexLevelParameter(GL_TEXTURE_INTERNAL_FORMAT) query so that
|
||||
it returns the actual compressed format chosen.
|
||||
<li>Fixed glBitmap bugs in Intel drivers.
|
||||
<li>Fixed a number of Microsoft Visual Studio compilation problems.
|
||||
<li>Fixed clipping / provoking vertex bugs in i965 driver.
|
||||
</ul>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -13,6 +13,7 @@ The release notes summarize what's new or changed in each Mesa release.
|
||||
</p>
|
||||
|
||||
<UL>
|
||||
<LI><A HREF="relnotes-7.6.1.html">7.6.1 release notes</A>
|
||||
<LI><A HREF="relnotes-7.6.html">7.6 release notes</A>
|
||||
<LI><A HREF="relnotes-7.5.2.html">7.5.2 release notes</A>
|
||||
<LI><A HREF="relnotes-7.5.1.html">7.5.1 release notes</A>
|
||||
|
@@ -108,12 +108,20 @@
|
||||
#define glBlendColorEXT MANGLE(BlendColorEXT)
|
||||
#define glBlendColor MANGLE(BlendColor)
|
||||
#define glBlendEquationEXT MANGLE(BlendEquationEXT)
|
||||
#define glBlendEquationi MANGLE(BlendEquationi)
|
||||
#define glBlendEquationIndexedAMD MANGLE(BlendEquationIndexedAMD)
|
||||
#define glBlendEquation MANGLE(BlendEquation)
|
||||
#define glBlendEquationSeparateATI MANGLE(BlendEquationSeparateATI)
|
||||
#define glBlendEquationSeparateEXT MANGLE(BlendEquationSeparateEXT)
|
||||
#define glBlendEquationSeparatei MANGLE(BlendEquationSeparatei)
|
||||
#define glBlendEquationSeparateIndexedAMD MANGLE(BlendEquationSeparateIndexedAMD)
|
||||
#define glBlendEquationSeparate MANGLE(BlendEquationSeparate)
|
||||
#define glBlendFunci MANGLE(BlendFunci)
|
||||
#define glBlendFuncIndexedAMD MANGLE(BlendFuncIndexedAMD)
|
||||
#define glBlendFunc MANGLE(BlendFunc)
|
||||
#define glBlendFuncSeparateEXT MANGLE(BlendFuncSeparateEXT)
|
||||
#define glBlendFuncSeparatei MANGLE(BlendFuncSeparatei)
|
||||
#define glBlendFuncSeparateIndexedAMD MANGLE(BlendFuncSeparateIndexedAMD)
|
||||
#define glBlendFuncSeparateINGR MANGLE(BlendFuncSeparateINGR)
|
||||
#define glBlendFuncSeparate MANGLE(BlendFuncSeparate)
|
||||
#define glBlitFramebufferEXT MANGLE(BlitFramebufferEXT)
|
||||
@@ -148,6 +156,7 @@
|
||||
#define glClientActiveTexture MANGLE(ClientActiveTexture)
|
||||
#define glClientActiveVertexStreamATI MANGLE(ClientActiveVertexStreamATI)
|
||||
#define glClientAttribDefaultEXT MANGLE(ClientAttribDefaultEXT)
|
||||
#define glClientWaitSync MANGLE(ClientWaitSync)
|
||||
#define glClipPlane MANGLE(ClipPlane)
|
||||
#define glColor3b MANGLE(Color3b)
|
||||
#define glColor3bv MANGLE(Color3bv)
|
||||
@@ -320,6 +329,7 @@
|
||||
#define glDeleteRenderbuffersEXT MANGLE(DeleteRenderbuffersEXT)
|
||||
#define glDeleteRenderbuffers MANGLE(DeleteRenderbuffers)
|
||||
#define glDeleteShader MANGLE(DeleteShader)
|
||||
#define glDeleteSync MANGLE(DeleteSync)
|
||||
#define glDeleteTexturesEXT MANGLE(DeleteTexturesEXT)
|
||||
#define glDeleteTextures MANGLE(DeleteTextures)
|
||||
#define glDeleteTransformFeedbacksNV MANGLE(DeleteTransformFeedbacksNV)
|
||||
@@ -341,6 +351,7 @@
|
||||
#define glDisableIndexedEXT MANGLE(DisableIndexedEXT)
|
||||
#define glDisable MANGLE(Disable)
|
||||
#define glDisableVariantClientStateEXT MANGLE(DisableVariantClientStateEXT)
|
||||
#define glDisableVertexAttribAPPLE MANGLE(DisableVertexAttribAPPLE)
|
||||
#define glDisableVertexAttribArrayARB MANGLE(DisableVertexAttribArrayARB)
|
||||
#define glDisableVertexAttribArray MANGLE(DisableVertexAttribArray)
|
||||
#define glDrawArraysEXT MANGLE(DrawArraysEXT)
|
||||
@@ -354,7 +365,9 @@
|
||||
#define glDrawBuffers MANGLE(DrawBuffers)
|
||||
#define glDrawElementArrayAPPLE MANGLE(DrawElementArrayAPPLE)
|
||||
#define glDrawElementArrayATI MANGLE(DrawElementArrayATI)
|
||||
#define glDrawElementsBaseVertex MANGLE(DrawElementsBaseVertex)
|
||||
#define glDrawElementsInstancedARB MANGLE(DrawElementsInstancedARB)
|
||||
#define glDrawElementsInstancedBaseVertex MANGLE(DrawElementsInstancedBaseVertex)
|
||||
#define glDrawElementsInstancedEXT MANGLE(DrawElementsInstancedEXT)
|
||||
#define glDrawElementsInstanced MANGLE(DrawElementsInstanced)
|
||||
#define glDrawElements MANGLE(DrawElements)
|
||||
@@ -362,6 +375,7 @@
|
||||
#define glDrawPixels MANGLE(DrawPixels)
|
||||
#define glDrawRangeElementArrayAPPLE MANGLE(DrawRangeElementArrayAPPLE)
|
||||
#define glDrawRangeElementArrayATI MANGLE(DrawRangeElementArrayATI)
|
||||
#define glDrawRangeElementsBaseVertex MANGLE(DrawRangeElementsBaseVertex)
|
||||
#define glDrawRangeElementsEXT MANGLE(DrawRangeElementsEXT)
|
||||
#define glDrawRangeElements MANGLE(DrawRangeElements)
|
||||
#define glDrawTransformFeedbackNV MANGLE(DrawTransformFeedbackNV)
|
||||
@@ -378,6 +392,7 @@
|
||||
#define glEnableIndexedEXT MANGLE(EnableIndexedEXT)
|
||||
#define glEnable MANGLE(Enable)
|
||||
#define glEnableVariantClientStateEXT MANGLE(EnableVariantClientStateEXT)
|
||||
#define glEnableVertexAttribAPPLE MANGLE(EnableVertexAttribAPPLE)
|
||||
#define glEnableVertexAttribArrayARB MANGLE(EnableVertexAttribArrayARB)
|
||||
#define glEnableVertexAttribArray MANGLE(EnableVertexAttribArray)
|
||||
#define glEndConditionalRender MANGLE(EndConditionalRender)
|
||||
@@ -409,6 +424,7 @@
|
||||
#define glExecuteProgramNV MANGLE(ExecuteProgramNV)
|
||||
#define glExtractComponentEXT MANGLE(ExtractComponentEXT)
|
||||
#define glFeedbackBuffer MANGLE(FeedbackBuffer)
|
||||
#define glFenceSync MANGLE(FenceSync)
|
||||
#define glFinalCombinerInputNV MANGLE(FinalCombinerInputNV)
|
||||
#define glFinishAsyncSGIX MANGLE(FinishAsyncSGIX)
|
||||
#define glFinishFenceAPPLE MANGLE(FinishFenceAPPLE)
|
||||
@@ -469,9 +485,11 @@
|
||||
#define glFramebufferTextureEXT MANGLE(FramebufferTextureEXT)
|
||||
#define glFramebufferTextureFaceARB MANGLE(FramebufferTextureFaceARB)
|
||||
#define glFramebufferTextureFaceEXT MANGLE(FramebufferTextureFaceEXT)
|
||||
#define glFramebufferTextureFace MANGLE(FramebufferTextureFace)
|
||||
#define glFramebufferTextureLayerARB MANGLE(FramebufferTextureLayerARB)
|
||||
#define glFramebufferTextureLayerEXT MANGLE(FramebufferTextureLayerEXT)
|
||||
#define glFramebufferTextureLayer MANGLE(FramebufferTextureLayer)
|
||||
#define glFramebufferTexture MANGLE(FramebufferTexture)
|
||||
#define glFrameTerminatorGREMEDY MANGLE(FrameTerminatorGREMEDY)
|
||||
#define glFrameZoomSGIX MANGLE(FrameZoomSGIX)
|
||||
#define glFreeObjectBufferATI MANGLE(FreeObjectBufferATI)
|
||||
@@ -523,6 +541,7 @@
|
||||
#define glGetBooleanIndexedvEXT MANGLE(GetBooleanIndexedvEXT)
|
||||
#define glGetBooleani_v MANGLE(GetBooleani_v)
|
||||
#define glGetBooleanv MANGLE(GetBooleanv)
|
||||
#define glGetBufferParameteri64v MANGLE(GetBufferParameteri64v)
|
||||
#define glGetBufferParameterivARB MANGLE(GetBufferParameterivARB)
|
||||
#define glGetBufferParameteriv MANGLE(GetBufferParameteriv)
|
||||
#define glGetBufferPointervARB MANGLE(GetBufferPointervARB)
|
||||
@@ -586,6 +605,8 @@
|
||||
#define glGetImageTransformParameterivHP MANGLE(GetImageTransformParameterivHP)
|
||||
#define glGetInfoLogARB MANGLE(GetInfoLogARB)
|
||||
#define glGetInstrumentsSGIX MANGLE(GetInstrumentsSGIX)
|
||||
#define glGetInteger64i_v MANGLE(GetInteger64i_v)
|
||||
#define glGetInteger64v MANGLE(GetInteger64v)
|
||||
#define glGetIntegerIndexedvEXT MANGLE(GetIntegerIndexedvEXT)
|
||||
#define glGetIntegeri_v MANGLE(GetIntegeri_v)
|
||||
#define glGetIntegerv MANGLE(GetIntegerv)
|
||||
@@ -615,6 +636,7 @@
|
||||
#define glGetMinmaxParameterfv MANGLE(GetMinmaxParameterfv)
|
||||
#define glGetMinmaxParameterivEXT MANGLE(GetMinmaxParameterivEXT)
|
||||
#define glGetMinmaxParameteriv MANGLE(GetMinmaxParameteriv)
|
||||
#define glGetMultisamplefv MANGLE(GetMultisamplefv)
|
||||
#define glGetMultisamplefvNV MANGLE(GetMultisamplefvNV)
|
||||
#define glGetMultiTexEnvfvEXT MANGLE(GetMultiTexEnvfvEXT)
|
||||
#define glGetMultiTexEnvivEXT MANGLE(GetMultiTexEnvivEXT)
|
||||
@@ -642,6 +664,7 @@
|
||||
#define glGetObjectBufferfvATI MANGLE(GetObjectBufferfvATI)
|
||||
#define glGetObjectBufferivATI MANGLE(GetObjectBufferivATI)
|
||||
#define glGetObjectParameterfvARB MANGLE(GetObjectParameterfvARB)
|
||||
#define glGetObjectParameterivAPPLE MANGLE(GetObjectParameterivAPPLE)
|
||||
#define glGetObjectParameterivARB MANGLE(GetObjectParameterivARB)
|
||||
#define glGetOcclusionQueryivNV MANGLE(GetOcclusionQueryivNV)
|
||||
#define glGetOcclusionQueryuivNV MANGLE(GetOcclusionQueryuivNV)
|
||||
@@ -698,6 +721,7 @@
|
||||
#define glGetSharpenTexFuncSGIS MANGLE(GetSharpenTexFuncSGIS)
|
||||
#define glGetStringi MANGLE(GetStringi)
|
||||
#define glGetString MANGLE(GetString)
|
||||
#define glGetSynciv MANGLE(GetSynciv)
|
||||
#define glGetTexBumpParameterfvATI MANGLE(GetTexBumpParameterfvATI)
|
||||
#define glGetTexBumpParameterivATI MANGLE(GetTexBumpParameterivATI)
|
||||
#define glGetTexEnvfv MANGLE(GetTexEnvfv)
|
||||
@@ -715,6 +739,7 @@
|
||||
#define glGetTexParameterIuivEXT MANGLE(GetTexParameterIuivEXT)
|
||||
#define glGetTexParameterIuiv MANGLE(GetTexParameterIuiv)
|
||||
#define glGetTexParameteriv MANGLE(GetTexParameteriv)
|
||||
#define glGetTexParameterPointervAPPLE MANGLE(GetTexParameterPointervAPPLE)
|
||||
#define glGetTextureImageEXT MANGLE(GetTextureImageEXT)
|
||||
#define glGetTextureLevelParameterfvEXT MANGLE(GetTextureLevelParameterfvEXT)
|
||||
#define glGetTextureLevelParameterivEXT MANGLE(GetTextureLevelParameterivEXT)
|
||||
@@ -825,12 +850,14 @@
|
||||
#define glIsRenderbufferEXT MANGLE(IsRenderbufferEXT)
|
||||
#define glIsRenderbuffer MANGLE(IsRenderbuffer)
|
||||
#define glIsShader MANGLE(IsShader)
|
||||
#define glIsSync MANGLE(IsSync)
|
||||
#define glIsTextureEXT MANGLE(IsTextureEXT)
|
||||
#define glIsTexture MANGLE(IsTexture)
|
||||
#define glIsTransformFeedbackNV MANGLE(IsTransformFeedbackNV)
|
||||
#define glIsVariantEnabledEXT MANGLE(IsVariantEnabledEXT)
|
||||
#define glIsVertexArrayAPPLE MANGLE(IsVertexArrayAPPLE)
|
||||
#define glIsVertexArray MANGLE(IsVertexArray)
|
||||
#define glIsVertexAttribEnabledAPPLE MANGLE(IsVertexAttribEnabledAPPLE)
|
||||
#define glLightEnviSGIX MANGLE(LightEnviSGIX)
|
||||
#define glLightf MANGLE(Lightf)
|
||||
#define glLightfv MANGLE(Lightfv)
|
||||
@@ -877,6 +904,10 @@
|
||||
#define glMapObjectBufferATI MANGLE(MapObjectBufferATI)
|
||||
#define glMapParameterfvNV MANGLE(MapParameterfvNV)
|
||||
#define glMapParameterivNV MANGLE(MapParameterivNV)
|
||||
#define glMapVertexAttrib1dAPPLE MANGLE(MapVertexAttrib1dAPPLE)
|
||||
#define glMapVertexAttrib1fAPPLE MANGLE(MapVertexAttrib1fAPPLE)
|
||||
#define glMapVertexAttrib2dAPPLE MANGLE(MapVertexAttrib2dAPPLE)
|
||||
#define glMapVertexAttrib2fAPPLE MANGLE(MapVertexAttrib2fAPPLE)
|
||||
#define glMaterialf MANGLE(Materialf)
|
||||
#define glMaterialfv MANGLE(Materialfv)
|
||||
#define glMateriali MANGLE(Materiali)
|
||||
@@ -907,9 +938,11 @@
|
||||
#define glMatrixTranslatefEXT MANGLE(MatrixTranslatefEXT)
|
||||
#define glMinmaxEXT MANGLE(MinmaxEXT)
|
||||
#define glMinmax MANGLE(Minmax)
|
||||
#define glMinSampleShading MANGLE(MinSampleShading)
|
||||
#define glMultiDrawArraysEXT MANGLE(MultiDrawArraysEXT)
|
||||
#define glMultiDrawArrays MANGLE(MultiDrawArrays)
|
||||
#define glMultiDrawElementArrayAPPLE MANGLE(MultiDrawElementArrayAPPLE)
|
||||
#define glMultiDrawElementsBaseVertex MANGLE(MultiDrawElementsBaseVertex)
|
||||
#define glMultiDrawElementsEXT MANGLE(MultiDrawElementsEXT)
|
||||
#define glMultiDrawElements MANGLE(MultiDrawElements)
|
||||
#define glMultiDrawRangeElementArrayAPPLE MANGLE(MultiDrawRangeElementArrayAPPLE)
|
||||
@@ -1072,6 +1105,8 @@
|
||||
#define glNormalStream3ivATI MANGLE(NormalStream3ivATI)
|
||||
#define glNormalStream3sATI MANGLE(NormalStream3sATI)
|
||||
#define glNormalStream3svATI MANGLE(NormalStream3svATI)
|
||||
#define glObjectPurgeableAPPLE MANGLE(ObjectPurgeableAPPLE)
|
||||
#define glObjectUnpurgeableAPPLE MANGLE(ObjectUnpurgeableAPPLE)
|
||||
#define glOrtho MANGLE(Ortho)
|
||||
#define glPassTexCoordATI MANGLE(PassTexCoordATI)
|
||||
#define glPassThrough MANGLE(PassThrough)
|
||||
@@ -1162,6 +1197,7 @@
|
||||
#define glProgramParameter4fvNV MANGLE(ProgramParameter4fvNV)
|
||||
#define glProgramParameteriARB MANGLE(ProgramParameteriARB)
|
||||
#define glProgramParameteriEXT MANGLE(ProgramParameteriEXT)
|
||||
#define glProgramParameteri MANGLE(ProgramParameteri)
|
||||
#define glProgramParameters4dvNV MANGLE(ProgramParameters4dvNV)
|
||||
#define glProgramParameters4fvNV MANGLE(ProgramParameters4fvNV)
|
||||
#define glProgramStringARB MANGLE(ProgramStringARB)
|
||||
@@ -1200,6 +1236,7 @@
|
||||
#define glProgramUniformMatrix4x3fvEXT MANGLE(ProgramUniformMatrix4x3fvEXT)
|
||||
#define glProgramVertexLimitNV MANGLE(ProgramVertexLimitNV)
|
||||
#define glProvokingVertexEXT MANGLE(ProvokingVertexEXT)
|
||||
#define glProvokingVertex MANGLE(ProvokingVertex)
|
||||
#define glPushAttrib MANGLE(PushAttrib)
|
||||
#define glPushClientAttribDefaultEXT MANGLE(PushClientAttribDefaultEXT)
|
||||
#define glPushClientAttrib MANGLE(PushClientAttrib)
|
||||
@@ -1283,6 +1320,7 @@
|
||||
#define glSampleCoverage MANGLE(SampleCoverage)
|
||||
#define glSampleMapATI MANGLE(SampleMapATI)
|
||||
#define glSampleMaskEXT MANGLE(SampleMaskEXT)
|
||||
#define glSampleMaski MANGLE(SampleMaski)
|
||||
#define glSampleMaskIndexedNV MANGLE(SampleMaskIndexedNV)
|
||||
#define glSampleMaskSGIS MANGLE(SampleMaskSGIS)
|
||||
#define glSamplePatternEXT MANGLE(SamplePatternEXT)
|
||||
@@ -1454,8 +1492,10 @@
|
||||
#define glTexGeniv MANGLE(TexGeniv)
|
||||
#define glTexImage1D MANGLE(TexImage1D)
|
||||
#define glTexImage2D MANGLE(TexImage2D)
|
||||
#define glTexImage2DMultisample MANGLE(TexImage2DMultisample)
|
||||
#define glTexImage3DEXT MANGLE(TexImage3DEXT)
|
||||
#define glTexImage3D MANGLE(TexImage3D)
|
||||
#define glTexImage3DMultisample MANGLE(TexImage3DMultisample)
|
||||
#define glTexImage4DSGIS MANGLE(TexImage4DSGIS)
|
||||
#define glTexParameterf MANGLE(TexParameterf)
|
||||
#define glTexParameterfv MANGLE(TexParameterfv)
|
||||
@@ -1487,6 +1527,7 @@
|
||||
#define glTextureParameterIivEXT MANGLE(TextureParameterIivEXT)
|
||||
#define glTextureParameterIuivEXT MANGLE(TextureParameterIuivEXT)
|
||||
#define glTextureParameterivEXT MANGLE(TextureParameterivEXT)
|
||||
#define glTextureRangeAPPLE MANGLE(TextureRangeAPPLE)
|
||||
#define glTextureRenderbufferEXT MANGLE(TextureRenderbufferEXT)
|
||||
#define glTextureSubImage1DEXT MANGLE(TextureSubImage1DEXT)
|
||||
#define glTextureSubImage2DEXT MANGLE(TextureSubImage2DEXT)
|
||||
@@ -1828,6 +1869,7 @@
|
||||
#define glVertexWeighthvNV MANGLE(VertexWeighthvNV)
|
||||
#define glVertexWeightPointerEXT MANGLE(VertexWeightPointerEXT)
|
||||
#define glViewport MANGLE(Viewport)
|
||||
#define glWaitSync MANGLE(WaitSync)
|
||||
#define glWeightbvARB MANGLE(WeightbvARB)
|
||||
#define glWeightdvARB MANGLE(WeightdvARB)
|
||||
#define glWeightfvARB MANGLE(WeightfvARB)
|
||||
|
@@ -29,9 +29,9 @@ extern "C" {
|
||||
*/
|
||||
|
||||
/* Header file version number, required by OpenGL ABI for Linux */
|
||||
/* glext.h last updated $Date: 2009-08-03 02:13:51 -0700 (Mon, 03 Aug 2009) $ */
|
||||
/* glext.h last updated $Date: 2009-09-24 13:55:03 -0700 (Thu, 24 Sep 2009) $ */
|
||||
/* Current version at http://www.opengl.org/registry/ */
|
||||
#define GL_GLEXT_VERSION 54
|
||||
#define GL_GLEXT_VERSION 56
|
||||
|
||||
/* Function declaration macros - to move into glplatform.h */
|
||||
|
||||
@@ -4236,7 +4236,7 @@ extern "C" {
|
||||
#define GL_LUMINANCE16_SNORM 0x9019
|
||||
#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A
|
||||
#define GL_INTENSITY16_SNORM 0x901B
|
||||
/* reuse GL_R_SNORM */
|
||||
/* reuse GL_RED_SNORM */
|
||||
/* reuse GL_RG_SNORM */
|
||||
/* reuse GL_RGB_SNORM */
|
||||
/* reuse GL_RGBA_SNORM */
|
||||
@@ -4311,6 +4311,88 @@ extern "C" {
|
||||
#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16
|
||||
#endif
|
||||
|
||||
#ifndef GL_APPLE_rgb_422
|
||||
#define GL_RGB_422_APPLE 0x8A1F
|
||||
/* reuse GL_UNSIGNED_SHORT_8_8_APPLE */
|
||||
/* reuse GL_UNSIGNED_SHORT_8_8_REV_APPLE */
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_video_capture
|
||||
#define GL_VIDEO_BUFFER_NV 0x9020
|
||||
#define GL_VIDEO_BUFFER_BINDING_NV 0x9021
|
||||
#define GL_FIELD_UPPER_NV 0x9022
|
||||
#define GL_FIELD_LOWER_NV 0x9023
|
||||
#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024
|
||||
#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025
|
||||
#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026
|
||||
#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027
|
||||
#define GL_VIDEO_BUFFER_PITCH_NV 0x9028
|
||||
#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029
|
||||
#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A
|
||||
#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B
|
||||
#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C
|
||||
#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D
|
||||
#define GL_PARTIAL_SUCCESS_NV 0x902E
|
||||
#define GL_SUCCESS_NV 0x902F
|
||||
#define GL_FAILURE_NV 0x9030
|
||||
#define GL_YCBYCR8_422_NV 0x9031
|
||||
#define GL_YCBAYCR8A_4224_NV 0x9032
|
||||
#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033
|
||||
#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034
|
||||
#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035
|
||||
#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036
|
||||
#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037
|
||||
#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038
|
||||
#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039
|
||||
#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A
|
||||
#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B
|
||||
#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_copy_image
|
||||
#endif
|
||||
|
||||
#ifndef GL_EXT_separate_shader_objects
|
||||
#define GL_ACTIVE_PROGRAM_EXT 0x8B8D
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_parameter_buffer_object2
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_shader_buffer_load
|
||||
#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D
|
||||
#define GL_GPU_ADDRESS_NV 0x8F34
|
||||
#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_vertex_buffer_unified_memory
|
||||
#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E
|
||||
#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F
|
||||
#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20
|
||||
#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21
|
||||
#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22
|
||||
#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23
|
||||
#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24
|
||||
#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25
|
||||
#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26
|
||||
#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27
|
||||
#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28
|
||||
#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29
|
||||
#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A
|
||||
#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B
|
||||
#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C
|
||||
#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D
|
||||
#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E
|
||||
#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F
|
||||
#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30
|
||||
#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31
|
||||
#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32
|
||||
#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_texture_barrier
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************/
|
||||
|
||||
@@ -9245,6 +9327,136 @@ typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType,
|
||||
#define GL_APPLE_row_bytes 1
|
||||
#endif
|
||||
|
||||
#ifndef GL_APPLE_rgb_422
|
||||
#define GL_APPLE_rgb_422 1
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_video_capture
|
||||
#define GL_NV_video_capture 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint);
|
||||
GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint, GLuint, GLenum, GLintptrARB);
|
||||
GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint, GLuint, GLenum, GLenum, GLuint);
|
||||
GLAPI void APIENTRY glEndVideoCaptureNV (GLuint);
|
||||
GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint, GLenum, GLint *);
|
||||
GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint, GLuint, GLenum, GLint *);
|
||||
GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint, GLuint, GLenum, GLfloat *);
|
||||
GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint, GLuint, GLenum, GLdouble *);
|
||||
GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint, GLuint *, GLuint64EXT *);
|
||||
GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint, GLuint, GLenum, const GLint *);
|
||||
GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint, GLuint, GLenum, const GLfloat *);
|
||||
GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint, GLuint, GLenum, const GLdouble *);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot);
|
||||
typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset);
|
||||
typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture);
|
||||
typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot);
|
||||
typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params);
|
||||
typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params);
|
||||
typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params);
|
||||
typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params);
|
||||
typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time);
|
||||
typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params);
|
||||
typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params);
|
||||
typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params);
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_copy_image
|
||||
#define GL_NV_copy_image 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glCopyImageSubDataNV (GLuint, GLenum, GLint, GLint, GLint, GLint, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
|
||||
#endif
|
||||
|
||||
#ifndef GL_EXT_separate_shader_objects
|
||||
#define GL_EXT_separate_shader_objects 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glUseShaderProgramEXT (GLenum, GLuint);
|
||||
GLAPI void APIENTRY glActiveProgramEXT (GLuint);
|
||||
GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum, const GLchar *);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program);
|
||||
typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program);
|
||||
typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string);
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_parameter_buffer_object2
|
||||
#define GL_NV_parameter_buffer_object2 1
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_shader_buffer_load
|
||||
#define GL_NV_shader_buffer_load 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glMakeBufferResidentNV (GLenum, GLenum);
|
||||
GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum);
|
||||
GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum);
|
||||
GLAPI void APIENTRY glNamedMakeBufferResidentNV (GLuint, GLenum);
|
||||
GLAPI void APIENTRY glNamedMakeBufferNonResidentNV (GLuint);
|
||||
GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint);
|
||||
GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum, GLenum, GLuint64EXT *);
|
||||
GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint, GLenum, GLuint64EXT *);
|
||||
GLAPI void APIENTRY glGetIntegerui64vNV (GLenum, GLuint64EXT *);
|
||||
GLAPI void APIENTRY glUniformui64NV (GLint, GLuint64EXT);
|
||||
GLAPI void APIENTRY glUniformui64vNV (GLint, GLsizei, const GLuint64EXT *);
|
||||
GLAPI void APIENTRY glGetUniformui64vNV (GLuint, GLint, GLuint64EXT *);
|
||||
GLAPI void APIENTRY glProgramUniformui64NV (GLuint, GLint, GLuint64EXT);
|
||||
GLAPI void APIENTRY glProgramUniformui64vNV (GLuint, GLint, GLsizei, const GLuint64EXT *);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access);
|
||||
typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target);
|
||||
typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target);
|
||||
typedef void (APIENTRYP PFNGLNAMEDMAKEBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access);
|
||||
typedef void (APIENTRYP PFNGLNAMEDMAKEBUFFERNONRESIDENTNVPROC) (GLuint buffer);
|
||||
typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer);
|
||||
typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params);
|
||||
typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params);
|
||||
typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result);
|
||||
typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value);
|
||||
typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
|
||||
typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params);
|
||||
typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value);
|
||||
typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_vertex_buffer_unified_memory
|
||||
#define GL_NV_vertex_buffer_unified_memory 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glBufferAddressRangeNV (GLenum, GLuint, GLuint64EXT, GLsizeiptr);
|
||||
GLAPI void APIENTRY glVertexFormatNV (GLint, GLenum, GLsizei);
|
||||
GLAPI void APIENTRY glNormalFormatNV (GLenum, GLsizei);
|
||||
GLAPI void APIENTRY glColorFormatNV (GLint, GLenum, GLsizei);
|
||||
GLAPI void APIENTRY glIndexFormatNV (GLenum, GLsizei);
|
||||
GLAPI void APIENTRY glTexCoordFormatNV (GLint, GLenum, GLsizei);
|
||||
GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei);
|
||||
GLAPI void APIENTRY glSecondaryColorFormatNV (GLint, GLenum, GLsizei);
|
||||
GLAPI void APIENTRY glFogCoordFormatNV (GLenum, GLsizei);
|
||||
GLAPI void APIENTRY glVertexAttribFormatNV (GLuint, GLint, GLenum, GLboolean, GLsizei);
|
||||
GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint, GLint, GLenum, GLsizei);
|
||||
GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum, GLuint, GLuint64EXT *);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);
|
||||
typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result);
|
||||
#endif
|
||||
|
||||
#ifndef GL_NV_texture_barrier
|
||||
#define GL_NV_texture_barrier 1
|
||||
#ifdef GL_GLEXT_PROTOTYPES
|
||||
GLAPI void APIENTRY glTextureBarrierNV (void);
|
||||
#endif /* GL_GLEXT_PROTOTYPES */
|
||||
typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@@ -48,9 +48,9 @@ extern "C" {
|
||||
/*************************************************************/
|
||||
|
||||
/* Header file version number, required by OpenGL ABI for Linux */
|
||||
/* glxext.h last updated 2009/08/03 */
|
||||
/* glxext.h last updated 2009/10/08 */
|
||||
/* Current version at http://www.opengl.org/registry/ */
|
||||
#define GLX_GLXEXT_VERSION 23
|
||||
#define GLX_GLXEXT_VERSION 25
|
||||
|
||||
#ifndef GLX_VERSION_1_3
|
||||
#define GLX_WINDOW_BIT 0x00000001
|
||||
@@ -382,6 +382,20 @@ extern "C" {
|
||||
#ifndef GLX_NV_swap_group
|
||||
#endif
|
||||
|
||||
#ifndef GLX_NV_video_capture
|
||||
#define GLX_DEVICE_ID_NV 0x20CD
|
||||
#define GLX_UNIQUE_ID_NV 0x20CE
|
||||
#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF
|
||||
#endif
|
||||
|
||||
#ifndef GLX_EXT_swap_control
|
||||
#define GLX_SWAP_INTERVAL_EXT 0x20F1
|
||||
#define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2
|
||||
#endif
|
||||
|
||||
#ifndef GLX_NV_copy_image
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************/
|
||||
|
||||
@@ -415,6 +429,14 @@ typedef struct {
|
||||
} GLXBufferClobberEventSGIX;
|
||||
#endif
|
||||
|
||||
#ifndef GLX_NV_video_output
|
||||
typedef unsigned int GLXVideoDeviceNV;
|
||||
#endif
|
||||
|
||||
#ifndef GLX_NV_video_capture
|
||||
typedef XID GLXVideoCaptureDeviceNV;
|
||||
#endif
|
||||
|
||||
#ifndef GLEXT_64_TYPES_DEFINED
|
||||
/* This code block is duplicated in glext.h, so must be protected */
|
||||
#define GLEXT_64_TYPES_DEFINED
|
||||
@@ -827,14 +849,80 @@ typedef void ( * PFNGLXRELEASETEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawab
|
||||
|
||||
#ifndef GLX_NV_present_video
|
||||
#define GLX_NV_present_video 1
|
||||
#ifdef GLX_GLXEXT_PROTOTYPES
|
||||
extern unsigned int * glXEnumerateVideoDevicesNV (Display *, int, int *);
|
||||
extern int glXBindVideoDeviceNV (Display *, unsigned int, unsigned int, const int *);
|
||||
#endif /* GLX_GLXEXT_PROTOTYPES */
|
||||
typedef unsigned int * ( * PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int screen, int *nelements);
|
||||
typedef int ( * PFNGLXBINDVIDEODEVICENVPROC) (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);
|
||||
#endif
|
||||
|
||||
#ifndef GLX_NV_video_out
|
||||
#define GLX_NV_video_out 1
|
||||
#ifndef GLX_NV_video_output
|
||||
#define GLX_NV_video_output 1
|
||||
#ifdef GLX_GLXEXT_PROTOTYPES
|
||||
extern int glXGetVideoDeviceNV (Display *, int, int, GLXVideoDeviceNV *);
|
||||
extern int glXReleaseVideoDeviceNV (Display *, int, GLXVideoDeviceNV);
|
||||
extern int glXBindVideoImageNV (Display *, GLXVideoDeviceNV, GLXPbuffer, int);
|
||||
extern int glXReleaseVideoImageNV (Display *, GLXPbuffer);
|
||||
extern int glXSendPbufferToVideoNV (Display *, GLXPbuffer, int, unsigned long *, GLboolean);
|
||||
extern int glXGetVideoInfoNV (Display *, int, GLXVideoDeviceNV, unsigned long *, unsigned long *);
|
||||
#endif /* GLX_GLXEXT_PROTOTYPES */
|
||||
typedef int ( * PFNGLXGETVIDEODEVICENVPROC) (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice);
|
||||
typedef int ( * PFNGLXRELEASEVIDEODEVICENVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice);
|
||||
typedef int ( * PFNGLXBINDVIDEOIMAGENVPROC) (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer);
|
||||
typedef int ( * PFNGLXRELEASEVIDEOIMAGENVPROC) (Display *dpy, GLXPbuffer pbuf);
|
||||
typedef int ( * PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock);
|
||||
typedef int ( * PFNGLXGETVIDEOINFONVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
|
||||
#endif
|
||||
|
||||
#ifndef GLX_NV_swap_group
|
||||
#define GLX_NV_swap_group 1
|
||||
#ifdef GLX_GLXEXT_PROTOTYPES
|
||||
extern Bool glXJoinSwapGroupNV (Display *, GLXDrawable, GLuint);
|
||||
extern Bool glXBindSwapBarrierNV (Display *, GLuint, GLuint);
|
||||
extern Bool glXQuerySwapGroupNV (Display *, GLXDrawable, GLuint *, GLuint *);
|
||||
extern Bool glXQueryMaxSwapGroupsNV (Display *, int, GLuint *, GLuint *);
|
||||
extern Bool glXQueryFrameCountNV (Display *, int, GLuint *);
|
||||
extern Bool glXResetFrameCountNV (Display *, int);
|
||||
#endif /* GLX_GLXEXT_PROTOTYPES */
|
||||
typedef Bool ( * PFNGLXJOINSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint group);
|
||||
typedef Bool ( * PFNGLXBINDSWAPBARRIERNVPROC) (Display *dpy, GLuint group, GLuint barrier);
|
||||
typedef Bool ( * PFNGLXQUERYSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);
|
||||
typedef Bool ( * PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);
|
||||
typedef Bool ( * PFNGLXQUERYFRAMECOUNTNVPROC) (Display *dpy, int screen, GLuint *count);
|
||||
typedef Bool ( * PFNGLXRESETFRAMECOUNTNVPROC) (Display *dpy, int screen);
|
||||
#endif
|
||||
|
||||
#ifndef GLX_NV_video_capture
|
||||
#define GLX_NV_video_capture 1
|
||||
#ifdef GLX_GLXEXT_PROTOTYPES
|
||||
extern int glXBindVideoCaptureDeviceNV (Display *, unsigned int, GLXVideoCaptureDeviceNV);
|
||||
extern GLXVideoCaptureDeviceNV * glXEnumerateVideoCaptureDevicesNV (Display *, int, int *);
|
||||
extern void glXLockVideoCaptureDeviceNV (Display *, GLXVideoCaptureDeviceNV);
|
||||
extern int glXQueryVideoCaptureDeviceNV (Display *, GLXVideoCaptureDeviceNV, int, int *);
|
||||
extern void glXReleaseVideoCaptureDeviceNV (Display *, GLXVideoCaptureDeviceNV);
|
||||
#endif /* GLX_GLXEXT_PROTOTYPES */
|
||||
typedef int ( * PFNGLXBINDVIDEOCAPTUREDEVICENVPROC) (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);
|
||||
typedef GLXVideoCaptureDeviceNV * ( * PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) (Display *dpy, int screen, int *nelements);
|
||||
typedef void ( * PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);
|
||||
typedef int ( * PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);
|
||||
typedef void ( * PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);
|
||||
#endif
|
||||
|
||||
#ifndef GLX_EXT_swap_control
|
||||
#define GLX_EXT_swap_control 1
|
||||
#ifdef GLX_GLXEXT_PROTOTYPES
|
||||
extern int glXSwapIntervalEXT (Display *, GLXDrawable, int);
|
||||
#endif /* GLX_GLXEXT_PROTOTYPES */
|
||||
typedef int ( * PFNGLXSWAPINTERVALEXTPROC) (Display *dpy, GLXDrawable drawable, int interval);
|
||||
#endif
|
||||
|
||||
#ifndef GLX_NV_copy_image
|
||||
#define GLX_NV_copy_image 1
|
||||
#ifdef GLX_GLXEXT_PROTOTYPES
|
||||
extern void glXCopyImageSubDataNV (Display *, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei);
|
||||
#endif /* GLX_GLXEXT_PROTOTYPES */
|
||||
typedef void ( * PFNGLXCOPYIMAGESUBDATANVPROC) (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
|
||||
#endif
|
||||
|
||||
|
||||
|
@@ -48,9 +48,9 @@ extern "C" {
|
||||
/*************************************************************/
|
||||
|
||||
/* Header file version number */
|
||||
/* wglext.h last updated 2009/08/03 */
|
||||
/* wglext.h last updated 2009/09/16 */
|
||||
/* Current version at http://www.opengl.org/registry/ */
|
||||
#define WGL_WGLEXT_VERSION 15
|
||||
#define WGL_WGLEXT_VERSION 17
|
||||
|
||||
#ifndef WGL_ARB_buffer_region
|
||||
#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001
|
||||
@@ -388,6 +388,14 @@ extern "C" {
|
||||
#define WGL_GPU_NUM_SPI_AMD 0x21A8
|
||||
#endif
|
||||
|
||||
#ifndef NV_video_capture
|
||||
#define WGL_UNIQUE_ID_NV 0x20CE
|
||||
#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF
|
||||
#endif
|
||||
|
||||
#ifndef NV_copy_image
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************/
|
||||
|
||||
@@ -400,7 +408,7 @@ DECLARE_HANDLE(HPBUFFEREXT);
|
||||
#ifndef WGL_NV_present_video
|
||||
DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);
|
||||
#endif
|
||||
#ifndef WGL_NV_video_out
|
||||
#ifndef WGL_NV_video_output
|
||||
DECLARE_HANDLE(HPVIDEODEV);
|
||||
#endif
|
||||
#ifndef WGL_NV_gpu_affinity
|
||||
@@ -415,6 +423,9 @@ typedef struct _GPU_DEVICE {
|
||||
RECT rcVirtualScreen;
|
||||
} GPU_DEVICE, *PGPU_DEVICE;
|
||||
#endif
|
||||
#ifndef WGL_NV_video_capture
|
||||
DECLARE_HANDLE(HVIDEOINPUTDEVICENV);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_buffer_region
|
||||
#define WGL_ARB_buffer_region 1
|
||||
@@ -750,8 +761,8 @@ typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVide
|
||||
typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_video_out
|
||||
#define WGL_NV_video_out 1
|
||||
#ifndef WGL_NV_video_output
|
||||
#define WGL_NV_video_output 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglGetVideoDeviceNV (HDC, int, HPVIDEODEV *);
|
||||
extern BOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV);
|
||||
@@ -826,6 +837,30 @@ typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void);
|
||||
typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_video_capture
|
||||
#define WGL_NV_video_capture 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglBindVideoCaptureDeviceNV (UINT, HVIDEOINPUTDEVICENV);
|
||||
extern UINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC, HVIDEOINPUTDEVICENV *);
|
||||
extern BOOL WINAPI wglLockVideoCaptureDeviceNV (HDC, HVIDEOINPUTDEVICENV);
|
||||
extern BOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC, HVIDEOINPUTDEVICENV, int, int *);
|
||||
extern BOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC, HVIDEOINPUTDEVICENV);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
|
||||
typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
|
||||
typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
|
||||
typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
|
||||
typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
|
||||
#endif
|
||||
|
||||
#ifndef WGL_NV_copy_image
|
||||
#define WGL_NV_copy_image 1
|
||||
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||
extern BOOL WINAPI wglCopyImageSubDataNV (HGLRC, GLuint, GLenum, GLint, GLint, GLint, GLint, HGLRC, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei);
|
||||
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||
typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@@ -15,18 +15,22 @@ message:
|
||||
|
||||
|
||||
subdirs:
|
||||
@for dir in $(SUBDIRS) ; do \
|
||||
if [ -d $$dir ] ; then \
|
||||
(cd $$dir && $(MAKE)) || exit 1 ; \
|
||||
fi \
|
||||
done
|
||||
@if test -n "$(SUBDIRS)" ; then \
|
||||
for dir in $(SUBDIRS) ; do \
|
||||
if [ -d $$dir ] ; then \
|
||||
(cd $$dir && $(MAKE)) || exit 1 ; \
|
||||
fi \
|
||||
done \
|
||||
fi
|
||||
|
||||
# Dummy install target
|
||||
install:
|
||||
|
||||
clean:
|
||||
-@for dir in $(SUBDIRS) tests ; do \
|
||||
if [ -d $$dir ] ; then \
|
||||
(cd $$dir && $(MAKE) clean) ; \
|
||||
fi \
|
||||
done
|
||||
-@if test -n "$(SUBDIRS)" ; then \
|
||||
for dir in $(SUBDIRS) tests ; do \
|
||||
if [ -d $$dir ] ; then \
|
||||
(cd $$dir && $(MAKE) clean) ; \
|
||||
fi \
|
||||
done \
|
||||
fi
|
||||
|
@@ -16,6 +16,9 @@
|
||||
#include <GL/glut.h>
|
||||
#include "shaderutil.h"
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.1415926535
|
||||
#endif
|
||||
|
||||
static char *FragProgFile = "skinning.frag";
|
||||
static char *VertProgFile = "skinning.vert";
|
||||
|
@@ -14,6 +14,9 @@
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.1415926535
|
||||
#endif
|
||||
|
||||
static GLint WinWidth = 300, WinHeight = 300;
|
||||
static GLint win = 0;
|
||||
|
@@ -16,6 +16,9 @@
|
||||
#include <GL/glut.h>
|
||||
#include "shaderutil.h"
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.1415926535
|
||||
#endif
|
||||
|
||||
static GLint WinWidth = 300, WinHeight = 300;
|
||||
static char *FragProgFile = NULL;
|
||||
|
@@ -28,6 +28,7 @@ SOURCES = \
|
||||
blendminmax.c \
|
||||
blendsquare.c \
|
||||
blendxor.c \
|
||||
blitfb.c \
|
||||
bufferobj.c \
|
||||
bumpmap.c \
|
||||
bug_3050.c \
|
||||
|
@@ -52,6 +52,7 @@ progs = [
|
||||
'blendminmax',
|
||||
'blendsquare',
|
||||
'blendxor',
|
||||
'blitfb',
|
||||
'bufferobj',
|
||||
'bug_3050',
|
||||
'bug_3101',
|
||||
|
259
progs/tests/blitfb.c
Normal file
259
progs/tests/blitfb.c
Normal file
@@ -0,0 +1,259 @@
|
||||
/**
|
||||
* Test glFramebufferBlit()
|
||||
* Brian Paul
|
||||
* 27 Oct 2009
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
|
||||
static int Win;
|
||||
static int WinWidth = 1100, WinHeight = 600;
|
||||
|
||||
static int SrcWidth = 512, SrcHeight = 512;
|
||||
static int DstWidth = 512, DstHeight = 512;
|
||||
|
||||
static GLuint SrcFB, DstFB;
|
||||
static GLuint SrcTex, DstTex;
|
||||
|
||||
#if 0
|
||||
static GLenum SrcTexTarget = GL_TEXTURE_2D, SrcTexFace = GL_TEXTURE_2D;
|
||||
#else
|
||||
static GLenum SrcTexTarget = GL_TEXTURE_CUBE_MAP, SrcTexFace = GL_TEXTURE_CUBE_MAP_POSITIVE_X;
|
||||
#endif
|
||||
|
||||
static GLenum DstTexTarget = GL_TEXTURE_2D, DstTexFace = GL_TEXTURE_2D;
|
||||
|
||||
static GLuint SrcTexLevel = 01, DstTexLevel = 0;
|
||||
|
||||
|
||||
static void
|
||||
Draw(void)
|
||||
{
|
||||
GLboolean rp = GL_FALSE;
|
||||
GLubyte *buf;
|
||||
GLint srcWidth = SrcWidth >> SrcTexLevel;
|
||||
GLint srcHeight = SrcHeight >> SrcTexLevel;
|
||||
GLint dstWidth = DstWidth >> DstTexLevel;
|
||||
GLint dstHeight = DstHeight >> DstTexLevel;
|
||||
GLenum status;
|
||||
|
||||
/* clear window */
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
|
||||
glClearColor(0.5, 0.5, 0.5, 1.0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
|
||||
/* clear src buf */
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER, SrcFB);
|
||||
status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
|
||||
assert(status == GL_FRAMEBUFFER_COMPLETE_EXT);
|
||||
glClearColor(0, 1, 0, 0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
/* clear dst buf */
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER, DstFB);
|
||||
status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
|
||||
assert(status == GL_FRAMEBUFFER_COMPLETE_EXT);
|
||||
glClearColor(1, 0, 0, 0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
/* blit src -> dst */
|
||||
glBindFramebufferEXT(GL_READ_FRAMEBUFFER, SrcFB);
|
||||
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, DstFB);
|
||||
glBlitFramebufferEXT(0, 0, srcWidth, srcHeight,
|
||||
0, 0, dstWidth, dstHeight,
|
||||
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
|
||||
#if 01
|
||||
/* read src results */
|
||||
buf = malloc(4 * srcWidth * srcHeight);
|
||||
memset(buf, 0x88, 4 * srcWidth * srcHeight);
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER, SrcFB);
|
||||
if (rp)
|
||||
glReadPixels(0, 0, srcWidth, srcHeight, GL_RGBA, GL_UNSIGNED_BYTE, buf);
|
||||
else {
|
||||
glBindTexture(SrcTexTarget, SrcTex);
|
||||
glGetTexImage(SrcTexFace, SrcTexLevel, GL_RGBA, GL_UNSIGNED_BYTE, buf);
|
||||
}
|
||||
|
||||
/* draw dst in window */
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
|
||||
glWindowPos2i(0, 0);
|
||||
glDrawPixels(srcWidth, srcHeight, GL_RGBA, GL_UNSIGNED_BYTE, buf);
|
||||
|
||||
printf("Src Pix[0] = %d %d %d %d\n", buf[0], buf[1], buf[2], buf[3]);
|
||||
free(buf);
|
||||
#endif
|
||||
|
||||
glFinish();
|
||||
|
||||
/* read dst results */
|
||||
buf = malloc(4 * dstWidth * dstHeight);
|
||||
memset(buf, 0x88, 4 * dstWidth * dstHeight);
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER, DstFB);
|
||||
if (rp)
|
||||
glReadPixels(0, 0, dstWidth, dstHeight, GL_RGBA, GL_UNSIGNED_BYTE, buf);
|
||||
else {
|
||||
glBindTexture(DstTexTarget, DstTex);
|
||||
glGetTexImage(DstTexFace, DstTexLevel, GL_RGBA, GL_UNSIGNED_BYTE, buf);
|
||||
}
|
||||
|
||||
/* draw dst in window */
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
|
||||
glWindowPos2i(srcWidth + 2, 0);
|
||||
glDrawPixels(dstWidth, dstHeight, GL_RGBA, GL_UNSIGNED_BYTE, buf);
|
||||
|
||||
printf("Dst Pix[0] = %d %d %d %d\n", buf[0], buf[1], buf[2], buf[3]);
|
||||
free(buf);
|
||||
|
||||
glFinish();
|
||||
|
||||
glutSwapBuffers();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
Reshape(int width, int height)
|
||||
{
|
||||
WinWidth = width;
|
||||
WinHeight = height;
|
||||
glViewport(0, 0, width, height);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 25.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
glTranslatef(0.0, 0.0, -15.0);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
Key(unsigned char key, int x, int y)
|
||||
{
|
||||
(void) x;
|
||||
(void) y;
|
||||
switch (key) {
|
||||
case 27:
|
||||
glutDestroyWindow(Win);
|
||||
exit(0);
|
||||
break;
|
||||
}
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
SpecialKey(int key, int x, int y)
|
||||
{
|
||||
(void) x;
|
||||
(void) y;
|
||||
switch (key) {
|
||||
}
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
InitFBOs(void)
|
||||
{
|
||||
GLuint w, h, lvl;
|
||||
|
||||
/* Src */
|
||||
glGenTextures(1, &SrcTex);
|
||||
glBindTexture(SrcTexTarget, SrcTex);
|
||||
w = SrcWidth;
|
||||
h = SrcHeight;
|
||||
lvl = 0;
|
||||
for (lvl = 0; ; lvl++) {
|
||||
if (SrcTexTarget == GL_TEXTURE_CUBE_MAP) {
|
||||
GLuint f;
|
||||
for (f = 0; f < 6; f++) {
|
||||
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + f, lvl, GL_RGBA8,
|
||||
w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* single face */
|
||||
glTexImage2D(SrcTexFace, lvl, GL_RGBA8, w, h, 0,
|
||||
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
||||
}
|
||||
if (w == 1 && h == 1)
|
||||
break;
|
||||
if (w > 1)
|
||||
w /= 2;
|
||||
if (h > 1)
|
||||
h /= 2;
|
||||
}
|
||||
|
||||
glGenFramebuffersEXT(1, &SrcFB);
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER, SrcFB);
|
||||
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
|
||||
SrcTexFace, SrcTex, SrcTexLevel);
|
||||
|
||||
/* Dst */
|
||||
glGenTextures(1, &DstTex);
|
||||
glBindTexture(DstTexTarget, DstTex);
|
||||
w = DstWidth;
|
||||
h = DstHeight;
|
||||
lvl = 0;
|
||||
for (lvl = 0; ; lvl++) {
|
||||
glTexImage2D(DstTexFace, lvl, GL_RGBA8, w, h, 0,
|
||||
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
||||
if (w == 1 && h == 1)
|
||||
break;
|
||||
if (w > 1)
|
||||
w /= 2;
|
||||
if (h > 1)
|
||||
h /= 2;
|
||||
}
|
||||
|
||||
glGenFramebuffersEXT(1, &DstFB);
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER, DstFB);
|
||||
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
|
||||
DstTexFace, DstTex, DstTexLevel);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
Init(void)
|
||||
{
|
||||
if (!glutExtensionSupported("GL_EXT_framebuffer_object")) {
|
||||
fprintf(stderr, "This test requires GL_EXT_framebuffer_object\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!glutExtensionSupported("GL_EXT_framebuffer_blit")) {
|
||||
fprintf(stderr, "This test requires GL_EXT_framebuffer_blit,\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
InitFBOs();
|
||||
|
||||
printf("Left rect = src FBO, Right rect = dst FBO.\n");
|
||||
printf("Both should be green.\n");
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
glutInit(&argc, argv);
|
||||
glutInitWindowSize(WinWidth, WinHeight);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
Win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
glutDisplayFunc(Draw);
|
||||
Init();
|
||||
glutMainLoop();
|
||||
return 0;
|
||||
}
|
@@ -43,6 +43,8 @@ Display(void)
|
||||
|
||||
glUseProgram_func(Program);
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
/* draw to user framebuffer */
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBobject);
|
||||
|
||||
@@ -68,18 +70,23 @@ Display(void)
|
||||
glPopMatrix();
|
||||
|
||||
/* read from user framebuffer */
|
||||
/* bottom half = colorbuffer 0 */
|
||||
/* left half = colorbuffer 0 */
|
||||
glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
|
||||
glReadPixels(0, 0, Width, Height / 2, GL_RGBA, GL_UNSIGNED_BYTE,
|
||||
glPixelStorei(GL_PACK_ROW_LENGTH, Width);
|
||||
glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
|
||||
glReadPixels(0, 0, Width / 2, Height, GL_RGBA, GL_UNSIGNED_BYTE,
|
||||
buffer);
|
||||
/* top half = colorbuffer 1 */
|
||||
|
||||
/* right half = colorbuffer 1 */
|
||||
glReadBuffer(GL_COLOR_ATTACHMENT1_EXT);
|
||||
glReadPixels(0, Height/2, Width, Height - Height / 2,
|
||||
glPixelStorei(GL_PACK_SKIP_PIXELS, Width / 2);
|
||||
glReadPixels(Width / 2, 0, Width - Width / 2, Height,
|
||||
GL_RGBA, GL_UNSIGNED_BYTE,
|
||||
buffer + Width * (Height / 2) * 4);
|
||||
buffer);
|
||||
|
||||
/* draw to window */
|
||||
glUseProgram_func(0);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
|
||||
glWindowPos2iARB(0, 0);
|
||||
glDrawPixels(Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
|
||||
|
@@ -285,6 +285,12 @@ main(int argc, char** argv)
|
||||
glutInitWindowSize (600, 600);
|
||||
glutCreateWindow (argv[0]);
|
||||
glewInit();
|
||||
|
||||
if (!glutExtensionSupported("GL_EXT_texture_compression_s3tc")) {
|
||||
fprintf(stderr, "This test requires GL_EXT_texture_compression_s3tc.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
myInit();
|
||||
glutReshapeFunc (myReshape);
|
||||
glutDisplayFunc(display);
|
||||
|
@@ -257,11 +257,11 @@ RandomPrimitive(void)
|
||||
Vcount++;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
int k = RandomInt(9);
|
||||
Vbuffer[Vcount].v[0] = RandomFloat(-3, 3);
|
||||
Vbuffer[Vcount].v[1] = RandomFloat(-3, 3);
|
||||
Vbuffer[Vcount].v[2] = RandomFloat(-3, 3);
|
||||
Vbuffer[Vcount].v[3] = RandomFloat(-3, 3);
|
||||
int k = RandomInt(9);
|
||||
switch (k) {
|
||||
case 0:
|
||||
glVertex2fv(Vbuffer[Vcount].v);
|
||||
|
@@ -8,6 +8,10 @@
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
#ifndef APIENTRY
|
||||
#define APIENTRY
|
||||
#endif
|
||||
|
||||
static void assert_test(const char *file, int line, int cond, const char *msg)
|
||||
{
|
||||
if (!cond)
|
||||
@@ -42,7 +46,7 @@ static void assert_error_test(const char *file, int line, GLenum expect)
|
||||
|
||||
#define assert_error(err) assert_error_test(__FILE__, __LINE__, (err))
|
||||
|
||||
static void check_status(GLuint id, GLenum pname, void (*query)(GLuint, GLenum, GLint *))
|
||||
static void check_status(GLuint id, GLenum pname, void (APIENTRY *query)(GLuint, GLenum, GLint *))
|
||||
{
|
||||
GLint status;
|
||||
|
||||
|
@@ -149,7 +149,7 @@ static void Reshape( int width, int height )
|
||||
|
||||
static void ReInit( GLenum TC, TEXTURE *Tx )
|
||||
{
|
||||
GLint rv;
|
||||
GLint rv, v;
|
||||
|
||||
if ((Tx->TC == TC) && (Tx->cData != NULL)) {
|
||||
glCompressedTexImage2DARB(GL_TEXTURE_2D, /* target */
|
||||
@@ -170,6 +170,12 @@ static void ReInit( GLenum TC, TEXTURE *Tx )
|
||||
GL_UNSIGNED_BYTE, /* texture type */
|
||||
Tx->data); /* the texture */
|
||||
|
||||
|
||||
v = 0;
|
||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0,
|
||||
GL_TEXTURE_INTERNAL_FORMAT, &v);
|
||||
printf("Requested internal format = 0x%x, actual = 0x%x\n", TC, v);
|
||||
|
||||
/* okay, now cache the compressed texture */
|
||||
Tx->TC = TC;
|
||||
if (Tx->cData != NULL) {
|
||||
|
@@ -39,6 +39,11 @@ GLenum doubleBuffer;
|
||||
|
||||
static void Init(void)
|
||||
{
|
||||
if (!glutExtensionSupported("GL_ARB_occlusion_query")) {
|
||||
fprintf(stderr, "Sorry, this program requires GL_ARB_occlusion_query\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
|
||||
fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
|
||||
fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
|
||||
|
@@ -95,7 +95,7 @@ enum sync_type {
|
||||
static void usage(char *name)
|
||||
{
|
||||
printf("usage: %s [-w <width>] [-h <height>] [-s<sync method>] "
|
||||
"[-vc]\n", name);
|
||||
"[-v]\n", name);
|
||||
printf("\t-s<sync method>:\n");
|
||||
printf("\t\tn: none\n");
|
||||
printf("\t\ts: SGI video sync extension\n");
|
||||
|
@@ -143,7 +143,7 @@ MakePbuffer( Display *dpy, int screen, int width, int height )
|
||||
|
||||
/* Create the pbuffer using first fbConfig in the list that works. */
|
||||
for (i=0;i<nConfigs;i++) {
|
||||
pBuffer = CreatePbuffer(dpy, screen, fbConfigs[i], width, height, preserve, largest);
|
||||
pBuffer = CreatePbuffer(dpy, screen, fbConfigs[i], width, height, largest, preserve);
|
||||
if (pBuffer) {
|
||||
gFBconfig = fbConfigs[i];
|
||||
gWidth = width;
|
||||
@@ -210,6 +210,21 @@ Setup(int width, int height)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Test drawable queries */
|
||||
{
|
||||
unsigned int v;
|
||||
glXQueryDrawable( gDpy, gPBuffer, GLX_WIDTH, &v);
|
||||
printf("GLX_WIDTH = %u\n", v);
|
||||
glXQueryDrawable( gDpy, gPBuffer, GLX_HEIGHT, &v);
|
||||
printf("GLX_HEIGHT = %u\n", v);
|
||||
glXQueryDrawable( gDpy, gPBuffer, GLX_PRESERVED_CONTENTS, &v);
|
||||
printf("GLX_PRESERVED_CONTENTS = %u\n", v);
|
||||
glXQueryDrawable( gDpy, gPBuffer, GLX_LARGEST_PBUFFER, &v);
|
||||
printf("GLX_LARGEST_PBUFFER = %u\n", v);
|
||||
glXQueryDrawable( gDpy, gPBuffer, GLX_FBCONFIG_ID, &v);
|
||||
printf("GLX_FBCONFIG_ID = %u\n", v);
|
||||
}
|
||||
|
||||
/* Get corresponding XVisualInfo */
|
||||
visInfo = GetVisualFromFBConfig(gDpy, gScreen, gFBconfig);
|
||||
if (!visInfo) {
|
||||
|
@@ -268,7 +268,7 @@ void cso_release_all( struct cso_context *ctx )
|
||||
void cso_destroy_context( struct cso_context *ctx )
|
||||
{
|
||||
if (ctx) {
|
||||
//cso_release_all( ctx );
|
||||
/*cso_release_all( ctx );*/
|
||||
FREE( ctx );
|
||||
}
|
||||
}
|
||||
|
@@ -212,17 +212,10 @@ static void fse_prepare( struct draw_pt_middle_end *middle,
|
||||
struct draw_vertex_shader *vs = draw->vs.vertex_shader;
|
||||
vs->prepare(vs, draw);
|
||||
}
|
||||
|
||||
|
||||
//return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static void fse_run_linear( struct draw_pt_middle_end *middle,
|
||||
unsigned start,
|
||||
unsigned count )
|
||||
|
@@ -210,7 +210,7 @@ void draw_pt_post_vs_prepare( struct pt_post_vs *pvs,
|
||||
pvs->run = post_vs_viewport;
|
||||
}
|
||||
else {
|
||||
//if (opengl)
|
||||
/* if (opengl) */
|
||||
pvs->run = post_vs_cliptest_viewport_gl;
|
||||
}
|
||||
}
|
||||
|
@@ -394,6 +394,7 @@ vcache_check_run( struct draw_pt_front_end *frontend,
|
||||
|
||||
default:
|
||||
assert(0);
|
||||
FREE(storage);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -422,6 +423,7 @@ vcache_check_run( struct draw_pt_front_end *frontend,
|
||||
|
||||
default:
|
||||
assert(0);
|
||||
FREE(storage);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@@ -891,7 +891,7 @@ static void x87_emit_ex2( struct aos_compilation *cp )
|
||||
struct x86_reg st1 = x86_make_reg(file_x87, 1);
|
||||
int stack = cp->func->x87_stack;
|
||||
|
||||
// set_fpu_round_neg_inf( cp );
|
||||
/* set_fpu_round_neg_inf( cp ); */
|
||||
|
||||
x87_fld(cp->func, st0); /* a a */
|
||||
x87_fprndint( cp->func ); /* int(a) a*/
|
||||
@@ -1759,14 +1759,14 @@ emit_instruction( struct aos_compilation *cp,
|
||||
return emit_SUB(cp, inst);
|
||||
|
||||
case TGSI_OPCODE_LRP:
|
||||
// return emit_LERP(cp, inst);
|
||||
/*return emit_LERP(cp, inst);*/
|
||||
return FALSE;
|
||||
|
||||
case TGSI_OPCODE_FRC:
|
||||
return emit_FRC(cp, inst);
|
||||
|
||||
case TGSI_OPCODE_CLAMP:
|
||||
// return emit_CLAMP(cp, inst);
|
||||
/*return emit_CLAMP(cp, inst);*/
|
||||
return FALSE;
|
||||
|
||||
case TGSI_OPCODE_FLR:
|
||||
|
@@ -584,7 +584,7 @@ fenced_buffer_list_destroy(struct fenced_buffer_list *fenced_list)
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
//assert(!fenced_list->numUnfenced);
|
||||
/*assert(!fenced_list->numUnfenced);*/
|
||||
#endif
|
||||
|
||||
pipe_mutex_unlock(fenced_list->mutex);
|
||||
|
@@ -217,7 +217,7 @@ ATTRIB( R8G8_SNORM, 2, char, FROM_8_SNORM, TO_8_SNORM )
|
||||
ATTRIB( R8_SNORM, 1, char, FROM_8_SNORM, TO_8_SNORM )
|
||||
|
||||
ATTRIB( A8R8G8B8_UNORM, 4, ubyte, FROM_8_UNORM, TO_8_UNORM )
|
||||
//ATTRIB( R8G8B8A8_UNORM, 4, ubyte, FROM_8_UNORM, TO_8_UNORM )
|
||||
/*ATTRIB( R8G8B8A8_UNORM, 4, ubyte, FROM_8_UNORM, TO_8_UNORM )*/
|
||||
|
||||
ATTRIB( R32G32B32A32_FIXED, 4, int, FROM_32_FIXED, TO_32_FIXED )
|
||||
ATTRIB( R32G32B32_FIXED, 3, int, FROM_32_FIXED, TO_32_FIXED )
|
||||
|
@@ -268,7 +268,7 @@ static void check_os_katmai_support(void)
|
||||
* and therefore to be safe I'm going to leave this test in here.
|
||||
*/
|
||||
if (__cpu_detect_caps.hasSSE) {
|
||||
// test_os_katmai_exception_support();
|
||||
/* test_os_katmai_exception_support(); */
|
||||
}
|
||||
|
||||
/* Restore the original signal handlers.
|
||||
|
@@ -254,7 +254,7 @@ debug_profile_start(void)
|
||||
{
|
||||
WCHAR *p;
|
||||
|
||||
// increment starting from the less significant digit
|
||||
/* increment starting from the less significant digit */
|
||||
p = &wFileName[14];
|
||||
while(1) {
|
||||
if(*p == '9') {
|
||||
|
@@ -214,7 +214,7 @@ debug_symbol_print_imagehlp(const void *addr)
|
||||
HANDLE hProcess;
|
||||
BYTE symbolBuffer[1024];
|
||||
PIMAGEHLP_SYMBOL pSymbol = (PIMAGEHLP_SYMBOL) symbolBuffer;
|
||||
DWORD dwDisplacement = 0; // Displacement of the input address, relative to the start of the symbol
|
||||
DWORD dwDisplacement = 0; /* Displacement of the input address, relative to the start of the symbol */
|
||||
|
||||
hProcess = GetCurrentProcess();
|
||||
|
||||
|
@@ -1427,6 +1427,7 @@ set_vertex_data(struct gen_mipmap_state *ctx,
|
||||
rz = -1.0f;
|
||||
break;
|
||||
default:
|
||||
rx = ry = rz = 0.0f;
|
||||
assert(0);
|
||||
}
|
||||
|
||||
|
@@ -674,7 +674,7 @@ emit_MAD(struct codegen *gen, const struct tgsi_full_instruction *inst)
|
||||
* Emit linear interpolate. See emit_ADD for comments.
|
||||
*/
|
||||
static boolean
|
||||
emit_LERP(struct codegen *gen, const struct tgsi_full_instruction *inst)
|
||||
emit_LRP(struct codegen *gen, const struct tgsi_full_instruction *inst)
|
||||
{
|
||||
int ch, s1_reg[4], s2_reg[4], s3_reg[4], d_reg[4], tmp_reg[4];
|
||||
|
||||
@@ -1766,7 +1766,7 @@ emit_instruction(struct codegen *gen,
|
||||
return emit_binop(gen, inst);
|
||||
case TGSI_OPCODE_MAD:
|
||||
return emit_MAD(gen, inst);
|
||||
case TGSI_OPCODE_LERP:
|
||||
case TGSI_OPCODE_LRP:
|
||||
return emit_LRP(gen, inst);
|
||||
case TGSI_OPCODE_DP3:
|
||||
return emit_DP3(gen, inst);
|
||||
|
@@ -105,12 +105,17 @@ static void softpipe_destroy( struct pipe_context *pipe )
|
||||
softpipe->quad[i].output->destroy( softpipe->quad[i].output );
|
||||
}
|
||||
|
||||
for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++)
|
||||
for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) {
|
||||
sp_destroy_tile_cache(softpipe->cbuf_cache[i]);
|
||||
pipe_surface_reference(&softpipe->framebuffer.cbufs[i], NULL);
|
||||
}
|
||||
sp_destroy_tile_cache(softpipe->zsbuf_cache);
|
||||
pipe_surface_reference(&softpipe->framebuffer.zsbuf, NULL);
|
||||
|
||||
for (i = 0; i < PIPE_MAX_SAMPLERS; i++)
|
||||
for (i = 0; i < PIPE_MAX_SAMPLERS; i++) {
|
||||
sp_destroy_tile_cache(softpipe->tex_cache[i]);
|
||||
pipe_texture_reference(&softpipe->texture[i], NULL);
|
||||
}
|
||||
|
||||
for (i = 0; i < Elements(softpipe->constants); i++) {
|
||||
if (softpipe->constants[i].buffer) {
|
||||
|
@@ -101,7 +101,7 @@ fs_sse_run( const struct sp_fragment_shader *base,
|
||||
machine->Consts,
|
||||
(const float (*)[4])shader->immediates,
|
||||
machine->InterpCoefs
|
||||
// , &machine->QuadPos
|
||||
/*, &machine->QuadPos*/
|
||||
);
|
||||
|
||||
return ~(machine->Temps[TGSI_EXEC_TEMP_KILMASK_I].xyzw[TGSI_EXEC_TEMP_KILMASK_C].u[0]);
|
||||
|
@@ -56,7 +56,7 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
|
||||
sp_flush_tile_cache(sp, sp->cbuf_cache[i]);
|
||||
|
||||
/* assign new */
|
||||
sp->framebuffer.cbufs[i] = fb->cbufs[i];
|
||||
pipe_surface_reference(&sp->framebuffer.cbufs[i], fb->cbufs[i]);
|
||||
|
||||
/* update cache */
|
||||
sp_tile_cache_set_surface(sp->cbuf_cache[i], fb->cbufs[i]);
|
||||
@@ -71,7 +71,7 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
|
||||
sp_flush_tile_cache(sp, sp->zsbuf_cache);
|
||||
|
||||
/* assign new */
|
||||
sp->framebuffer.zsbuf = fb->zsbuf;
|
||||
pipe_surface_reference(&sp->framebuffer.zsbuf, fb->zsbuf);
|
||||
|
||||
/* update cache */
|
||||
sp_tile_cache_set_surface(sp->zsbuf_cache, fb->zsbuf);
|
||||
|
@@ -130,6 +130,16 @@ sp_create_tile_cache( struct pipe_screen *screen )
|
||||
tc->entries[pos].x =
|
||||
tc->entries[pos].y = -1;
|
||||
}
|
||||
|
||||
/* XXX this code prevents valgrind warnings about use of uninitialized
|
||||
* memory in programs that don't clear the surface before rendering.
|
||||
* However, it breaks clearing in other situations (such as in
|
||||
* progs/tests/drawbuffers, see bug 24402).
|
||||
*/
|
||||
#if 0 && TILE_CLEAR_OPTIMIZATION
|
||||
/* set flags to indicate all the tiles are cleared */
|
||||
memset(tc->clear_flags, 255, sizeof(tc->clear_flags));
|
||||
#endif
|
||||
}
|
||||
return tc;
|
||||
}
|
||||
|
@@ -850,10 +850,10 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
|
||||
if (!fbConfig)
|
||||
return NULL;
|
||||
parselist++;
|
||||
if (*parselist == GLX_RGBA_BIT) {
|
||||
if (*parselist & GLX_RGBA_BIT) {
|
||||
rgb_flag = GL_TRUE;
|
||||
}
|
||||
else if (*parselist == GLX_COLOR_INDEX_BIT) {
|
||||
else if (*parselist & GLX_COLOR_INDEX_BIT) {
|
||||
rgb_flag = GL_FALSE;
|
||||
}
|
||||
else if (*parselist == 0) {
|
||||
@@ -1309,13 +1309,17 @@ glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
|
||||
|
||||
|
||||
Bool
|
||||
glXQueryExtension( Display *dpy, int *errorb, int *event )
|
||||
glXQueryExtension( Display *dpy, int *errorBase, int *eventBase )
|
||||
{
|
||||
int op, ev, err;
|
||||
/* Mesa's GLX isn't really an X extension but we try to act like one. */
|
||||
(void) dpy;
|
||||
(void) errorb;
|
||||
(void) event;
|
||||
return True;
|
||||
if (!XQueryExtension(dpy, GLX_EXTENSION_NAME, &op, &ev, &err))
|
||||
ev = err = 0;
|
||||
if (errorBase)
|
||||
*errorBase = err;
|
||||
if (eventBase)
|
||||
*eventBase = ev;
|
||||
return True; /* we're faking GLX so always return success */
|
||||
}
|
||||
|
||||
|
||||
@@ -1990,32 +1994,42 @@ glXCreatePbuffer( Display *dpy, GLXFBConfig config,
|
||||
break;
|
||||
case GLX_PRESERVED_CONTENTS:
|
||||
attrib++;
|
||||
preserveContents = *attrib; /* ignored */
|
||||
preserveContents = *attrib;
|
||||
break;
|
||||
case GLX_LARGEST_PBUFFER:
|
||||
attrib++;
|
||||
useLargest = *attrib; /* ignored */
|
||||
useLargest = *attrib;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* not used at this time */
|
||||
(void) useLargest;
|
||||
(void) preserveContents;
|
||||
|
||||
if (width == 0 || height == 0)
|
||||
return 0;
|
||||
|
||||
if (width > MAX_WIDTH || height > MAX_HEIGHT) {
|
||||
/* If allocation would have failed and GLX_LARGEST_PBUFFER is set,
|
||||
* allocate the largest possible buffer.
|
||||
*/
|
||||
if (useLargest) {
|
||||
width = MAX_WIDTH;
|
||||
height = MAX_HEIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
xmbuf = XMesaCreatePBuffer( xmvis, 0, width, height);
|
||||
/* A GLXPbuffer handle must be an X Drawable because that's what
|
||||
* glXMakeCurrent takes.
|
||||
*/
|
||||
if (xmbuf)
|
||||
if (xmbuf) {
|
||||
xmbuf->largestPbuffer = useLargest;
|
||||
xmbuf->preservedContents = preserveContents;
|
||||
return (GLXPbuffer) xmbuf->drawable;
|
||||
else
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2033,22 +2047,26 @@ void
|
||||
glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,
|
||||
unsigned int *value )
|
||||
{
|
||||
GLuint width, height;
|
||||
XMesaBuffer xmbuf = XMesaFindBuffer(dpy, draw);
|
||||
if (!xmbuf)
|
||||
return;
|
||||
|
||||
/* make sure buffer's dimensions are up to date */
|
||||
xmesa_get_window_size(dpy, xmbuf, &width, &height);
|
||||
|
||||
switch (attribute) {
|
||||
case GLX_WIDTH:
|
||||
*value = xmesa_buffer_width(xmbuf);
|
||||
*value = width;
|
||||
break;
|
||||
case GLX_HEIGHT:
|
||||
*value = xmesa_buffer_width(xmbuf);
|
||||
*value = height;
|
||||
break;
|
||||
case GLX_PRESERVED_CONTENTS:
|
||||
*value = True;
|
||||
*value = xmbuf->preservedContents;
|
||||
break;
|
||||
case GLX_LARGEST_PBUFFER:
|
||||
*value = xmesa_buffer_width(xmbuf) * xmesa_buffer_height(xmbuf);
|
||||
*value = xmbuf->largestPbuffer;
|
||||
break;
|
||||
case GLX_FBCONFIG_ID:
|
||||
*value = xmbuf->xm_visual->visinfo->visualid;
|
||||
@@ -2120,9 +2138,9 @@ glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value )
|
||||
break;
|
||||
case GLX_RENDER_TYPE:
|
||||
if (xmctx->xm_visual->mesa_visual.rgbMode)
|
||||
*value = GLX_RGBA_BIT;
|
||||
*value = GLX_RGBA_TYPE;
|
||||
else
|
||||
*value = GLX_COLOR_INDEX_BIT;
|
||||
*value = GLX_COLOR_INDEX_TYPE;
|
||||
break;
|
||||
case GLX_SCREEN:
|
||||
*value = 0;
|
||||
|
@@ -228,7 +228,7 @@ get_drawable_size( Display *dpy, Drawable d, uint *width, uint *height )
|
||||
* \param width returns width in pixels
|
||||
* \param height returns height in pixels
|
||||
*/
|
||||
static void
|
||||
void
|
||||
xmesa_get_window_size(Display *dpy, XMesaBuffer b,
|
||||
GLuint *width, GLuint *height)
|
||||
{
|
||||
|
@@ -323,6 +323,9 @@ struct xmesa_buffer {
|
||||
Colormap cmap; /* the X colormap */
|
||||
BufferType type; /* window, pixmap, pbuffer or glxwindow */
|
||||
|
||||
GLboolean largestPbuffer; /**< for pbuffers */
|
||||
GLboolean preservedContents; /**< for pbuffers */
|
||||
|
||||
XImage *tempImage;
|
||||
unsigned long selectedEvents;/* for pbuffers only */
|
||||
|
||||
@@ -369,6 +372,10 @@ xmesa_delete_framebuffer(struct gl_framebuffer *fb);
|
||||
extern XMesaBuffer
|
||||
xmesa_find_buffer(Display *dpy, Colormap cmap, XMesaBuffer notThis);
|
||||
|
||||
extern void
|
||||
xmesa_get_window_size(Display *dpy, XMesaBuffer b,
|
||||
GLuint *width, GLuint *height);
|
||||
|
||||
extern void
|
||||
xmesa_check_and_update_buffer_size(XMesaContext xmctx, XMesaBuffer drawBuffer);
|
||||
|
||||
|
@@ -42,8 +42,12 @@
|
||||
#include "xorg_tracker.h"
|
||||
#include "xf86Modes.h"
|
||||
|
||||
#ifdef HAVE_XEXTPROTO_71
|
||||
#include <X11/extensions/dpmsconst.h>
|
||||
#else
|
||||
#define DPMS_SERVER
|
||||
#include <X11/extensions/dpms.h>
|
||||
#endif
|
||||
|
||||
#include "pipe/p_inlines.h"
|
||||
#include "util/u_rect.h"
|
||||
|
@@ -42,8 +42,12 @@
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef HAVE_XEXTPROTO_71
|
||||
#include <X11/extensions/dpmsconst.h>
|
||||
#else
|
||||
#define DPMS_SERVER
|
||||
#include <X11/extensions/dpms.h>
|
||||
#endif
|
||||
|
||||
#include "X11/Xatom.h"
|
||||
|
||||
|
@@ -596,8 +596,10 @@ driCreateDrawable(__GLXscreenConfigs * psc,
|
||||
pdraw->drawable = drawable;
|
||||
pdraw->psc = psc;
|
||||
|
||||
if (!XF86DRICreateDrawable(psc->dpy, psc->scr, drawable, &hwDrawable))
|
||||
if (!XF86DRICreateDrawable(psc->dpy, psc->scr, drawable, &hwDrawable)) {
|
||||
Xfree(pdraw);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Create a new drawable */
|
||||
pdraw->driDrawable =
|
||||
|
@@ -50,7 +50,7 @@
|
||||
#include <xcb/glx.h>
|
||||
#endif
|
||||
|
||||
static const char __glXGLXClientVendorName[] = "SGI";
|
||||
static const char __glXGLXClientVendorName[] = "Mesa Project and SGI";
|
||||
static const char __glXGLXClientVersion[] = "1.4";
|
||||
|
||||
|
||||
@@ -398,6 +398,10 @@ CreateContext(Display * dpy, XVisualInfo * vis,
|
||||
_XError(dpy, &error);
|
||||
return None;
|
||||
}
|
||||
if (renderType == 0) {
|
||||
/* Initialize renderType now */
|
||||
renderType = mode->rgbMode ? GLX_RGBA_TYPE : GLX_COLOR_INDEX_TYPE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
mode = fbconfig;
|
||||
@@ -484,6 +488,8 @@ CreateContext(Display * dpy, XVisualInfo * vis,
|
||||
gc->imported = GL_TRUE;
|
||||
}
|
||||
|
||||
gc->renderType = renderType;
|
||||
|
||||
return gc;
|
||||
}
|
||||
|
||||
@@ -534,6 +540,16 @@ DestroyContext(Display * dpy, GLXContext gc)
|
||||
imported = gc->imported;
|
||||
gc->xid = None;
|
||||
|
||||
if (gc->currentDpy) {
|
||||
/* This context is bound to some thread. According to the man page,
|
||||
* we should not actually delete the context until it's unbound.
|
||||
* Note that we set gc->xid = None above. In MakeContextCurrent()
|
||||
* we check for that and delete the context there.
|
||||
*/
|
||||
__glXUnlock();
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef GLX_DIRECT_RENDERING
|
||||
/* Destroy the direct rendering context */
|
||||
if (gc->driContext) {
|
||||
@@ -1575,7 +1591,7 @@ GLX_ALIAS(Display *, glXGetCurrentDisplayEXT, (void), (),
|
||||
* This function dynamically determines whether to use the EXT_import_context
|
||||
* version of the protocol or the GLX 1.3 version of the protocol.
|
||||
*/
|
||||
static int __glXQueryContextInfo(Display * dpy, GLXContext ctx)
|
||||
static int __glXQueryContextInfo(Display * dpy, GLXContext ctx)
|
||||
{
|
||||
__GLXdisplayPrivate *priv = __glXInitialize(dpy);
|
||||
xGLXQueryContextReply reply;
|
||||
@@ -1713,7 +1729,7 @@ GLX_ALIAS(int, glXQueryContextInfoEXT,
|
||||
(Display * dpy, GLXContext ctx, int attribute, int *value),
|
||||
(dpy, ctx, attribute, value), glXQueryContext)
|
||||
|
||||
PUBLIC GLXContextID glXGetContextIDEXT(const GLXContext ctx)
|
||||
PUBLIC GLXContextID glXGetContextIDEXT(const GLXContext ctx)
|
||||
{
|
||||
return ctx->xid;
|
||||
}
|
||||
@@ -2159,18 +2175,19 @@ GLX_ALIAS(int, glXGetFBConfigAttribSGIX,
|
||||
(Display * dpy, GLXFBConfigSGIX config, int attribute, int *value),
|
||||
(dpy, config, attribute, value), glXGetFBConfigAttrib)
|
||||
|
||||
PUBLIC GLX_ALIAS(GLXFBConfigSGIX *, glXChooseFBConfigSGIX,
|
||||
(Display * dpy, int screen, int *attrib_list,
|
||||
int *nelements), (dpy, screen, attrib_list, nelements),
|
||||
glXChooseFBConfig)
|
||||
PUBLIC GLX_ALIAS(GLXFBConfigSGIX *, glXChooseFBConfigSGIX,
|
||||
(Display * dpy, int screen, int *attrib_list,
|
||||
int *nelements), (dpy, screen, attrib_list, nelements),
|
||||
glXChooseFBConfig)
|
||||
|
||||
PUBLIC GLX_ALIAS(XVisualInfo *, glXGetVisualFromFBConfigSGIX,
|
||||
(Display * dpy, GLXFBConfigSGIX config),
|
||||
(dpy, config), glXGetVisualFromFBConfig)
|
||||
PUBLIC GLX_ALIAS(XVisualInfo *, glXGetVisualFromFBConfigSGIX,
|
||||
(Display * dpy, GLXFBConfigSGIX config),
|
||||
(dpy, config), glXGetVisualFromFBConfig)
|
||||
|
||||
PUBLIC GLXPixmap glXCreateGLXPixmapWithConfigSGIX(Display * dpy,
|
||||
GLXFBConfigSGIX config,
|
||||
Pixmap pixmap)
|
||||
PUBLIC GLXPixmap
|
||||
glXCreateGLXPixmapWithConfigSGIX(Display * dpy,
|
||||
GLXFBConfigSGIX config,
|
||||
Pixmap pixmap)
|
||||
{
|
||||
xGLXVendorPrivateWithReplyReq *vpreq;
|
||||
xGLXCreateGLXPixmapWithConfigSGIXReq *req;
|
||||
|
@@ -238,34 +238,10 @@ _mesa_meta_init(GLcontext *ctx)
|
||||
void
|
||||
_mesa_meta_free(GLcontext *ctx)
|
||||
{
|
||||
struct gl_meta_state *meta = ctx->Meta;
|
||||
|
||||
if (_mesa_get_current_context()) {
|
||||
/* if there's no current context, these textures, buffers, etc should
|
||||
* still get freed by _mesa_free_context_data().
|
||||
*/
|
||||
|
||||
_mesa_DeleteTextures(1, &meta->TempTex.TexObj);
|
||||
|
||||
/* glBlitFramebuffer */
|
||||
_mesa_DeleteBuffersARB(1, & meta->Blit.VBO);
|
||||
_mesa_DeleteVertexArraysAPPLE(1, &meta->Blit.ArrayObj);
|
||||
_mesa_DeletePrograms(1, &meta->Blit.DepthFP);
|
||||
|
||||
/* glClear */
|
||||
_mesa_DeleteBuffersARB(1, & meta->Clear.VBO);
|
||||
_mesa_DeleteVertexArraysAPPLE(1, &meta->Clear.ArrayObj);
|
||||
|
||||
/* glCopyPixels */
|
||||
_mesa_DeleteBuffersARB(1, & meta->CopyPix.VBO);
|
||||
_mesa_DeleteVertexArraysAPPLE(1, &meta->CopyPix.ArrayObj);
|
||||
|
||||
/* glDrawPixels */
|
||||
_mesa_DeleteVertexArraysAPPLE(1, &meta->DrawPix.ArrayObj);
|
||||
_mesa_DeletePrograms(1, &meta->DrawPix.DepthFP);
|
||||
_mesa_DeletePrograms(1, &meta->DrawPix.StencilFP);
|
||||
}
|
||||
|
||||
/* Note: Any textures, VBOs, etc, that we allocate should get
|
||||
* freed by the normal context destruction code. But this would be
|
||||
* the place to free other meta data someday.
|
||||
*/
|
||||
_mesa_free(ctx->Meta);
|
||||
ctx->Meta = NULL;
|
||||
}
|
||||
|
@@ -25,7 +25,7 @@ pcedit = sed \
|
||||
-e 's,@INSTALL_LIB_DIR@,$(INSTALL_LIB_DIR),' \
|
||||
-e 's,@INSTALL_INC_DIR@,$(INSTALL_INC_DIR),' \
|
||||
-e 's,@VERSION@,$(MESA_MAJOR).$(MESA_MINOR).$(MESA_TINY),' \
|
||||
-e 's,@DRI_DRIVER_DIR@,$(DRI_DRIVER_SEARCH_DIR),' \
|
||||
-e 's,@DRI_DRIVER_DIR@,$(DRI_DRIVER_INSTALL_DIR),' \
|
||||
-e 's,@DRI_PC_REQ_PRIV@,$(DRI_PC_REQ_PRIV),'
|
||||
|
||||
dri.pc: dri.pc.in
|
||||
|
@@ -160,11 +160,18 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
|
||||
|
||||
pitch = intelObj->pitchOverride;
|
||||
} else {
|
||||
GLuint dst_x, dst_y;
|
||||
|
||||
intel_miptree_get_image_offset(intelObj->mt, intelObj->firstLevel, 0, 0,
|
||||
&dst_x, &dst_y);
|
||||
|
||||
dri_bo_reference(intelObj->mt->region->buffer);
|
||||
i830->state.tex_buffer[unit] = intelObj->mt->region->buffer;
|
||||
i830->state.tex_offset[unit] = intel_miptree_image_offset(intelObj->mt,
|
||||
0, intelObj->
|
||||
firstLevel);
|
||||
/* XXX: This calculation is probably broken for tiled images with
|
||||
* a non-page-aligned offset.
|
||||
*/
|
||||
i830->state.tex_offset[unit] = (dst_x + dst_y * intelObj->mt->pitch) *
|
||||
intelObj->mt->cpp;
|
||||
|
||||
format = translate_texture_format(firstImage->TexFormat->MesaFormat,
|
||||
firstImage->InternalFormat);
|
||||
|
@@ -171,11 +171,18 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
|
||||
|
||||
pitch = intelObj->pitchOverride;
|
||||
} else {
|
||||
GLuint dst_x, dst_y;
|
||||
|
||||
intel_miptree_get_image_offset(intelObj->mt, intelObj->firstLevel, 0, 0,
|
||||
&dst_x, &dst_y);
|
||||
|
||||
dri_bo_reference(intelObj->mt->region->buffer);
|
||||
i915->state.tex_buffer[unit] = intelObj->mt->region->buffer;
|
||||
i915->state.tex_offset[unit] = intel_miptree_image_offset(intelObj->mt,
|
||||
0, intelObj->
|
||||
firstLevel);
|
||||
/* XXX: This calculation is probably broken for tiled images with
|
||||
* a non-page-aligned offset.
|
||||
*/
|
||||
i915->state.tex_offset[unit] = (dst_x + dst_y * intelObj->mt->pitch) *
|
||||
intelObj->mt->cpp;
|
||||
|
||||
format = translate_texture_format(firstImage->TexFormat->MesaFormat,
|
||||
firstImage->InternalFormat,
|
||||
|
@@ -1194,12 +1194,16 @@ getFallbackString(GLuint bit)
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Enable/disable a fallback flag.
|
||||
* \param bit one of INTEL_FALLBACK_x flags.
|
||||
*/
|
||||
void
|
||||
intelFallback(struct intel_context *intel, GLuint bit, GLboolean mode)
|
||||
intelFallback(struct intel_context *intel, GLbitfield bit, GLboolean mode)
|
||||
{
|
||||
GLcontext *ctx = &intel->ctx;
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
GLuint oldfallback = intel->Fallback;
|
||||
const GLbitfield oldfallback = intel->Fallback;
|
||||
|
||||
if (mode) {
|
||||
intel->Fallback |= bit;
|
||||
|
@@ -156,6 +156,7 @@ static void upload_clip_prog(struct brw_context *brw)
|
||||
key.attrs = brw->vs.prog_data->outputs_written;
|
||||
/* _NEW_LIGHT */
|
||||
key.do_flat_shading = (ctx->Light.ShadeModel == GL_FLAT);
|
||||
key.pv_first = (ctx->Light.ProvokingVertex == GL_FIRST_VERTEX_CONVENTION);
|
||||
/* _NEW_TRANSFORM */
|
||||
key.nr_userclip = brw_count_bits(ctx->Transform.ClipPlanesEnabled);
|
||||
|
||||
|
@@ -46,18 +46,17 @@ struct brw_clip_prog_key {
|
||||
GLuint primitive:4;
|
||||
GLuint nr_userclip:3;
|
||||
GLuint do_flat_shading:1;
|
||||
GLuint pv_first:1;
|
||||
GLuint do_unfilled:1;
|
||||
GLuint fill_cw:2; /* includes cull information */
|
||||
GLuint fill_ccw:2; /* includes cull information */
|
||||
GLuint offset_cw:1;
|
||||
GLuint offset_ccw:1;
|
||||
GLuint pad0:17;
|
||||
|
||||
GLuint copy_bfc_cw:1;
|
||||
GLuint copy_bfc_ccw:1;
|
||||
GLuint clip_mode:3;
|
||||
GLuint pad1:27;
|
||||
|
||||
GLuint pad0:11;
|
||||
|
||||
GLfloat offset_factor;
|
||||
GLfloat offset_units;
|
||||
};
|
||||
|
@@ -269,8 +269,12 @@ void brw_emit_line_clip( struct brw_clip_compile *c )
|
||||
brw_clip_line_alloc_regs(c);
|
||||
brw_clip_init_ff_sync(c);
|
||||
|
||||
if (c->key.do_flat_shading)
|
||||
brw_clip_copy_colors(c, 0, 1);
|
||||
if (c->key.do_flat_shading) {
|
||||
if (c->key.pv_first)
|
||||
brw_clip_copy_colors(c, 1, 0);
|
||||
else
|
||||
brw_clip_copy_colors(c, 0, 1);
|
||||
}
|
||||
|
||||
clip_and_emit_line(c);
|
||||
}
|
||||
|
@@ -188,14 +188,20 @@ void brw_clip_tri_flat_shade( struct brw_clip_compile *c )
|
||||
brw_imm_ud(_3DPRIM_POLYGON));
|
||||
|
||||
is_poly = brw_IF(p, BRW_EXECUTE_1);
|
||||
{
|
||||
{
|
||||
brw_clip_copy_colors(c, 1, 0);
|
||||
brw_clip_copy_colors(c, 2, 0);
|
||||
}
|
||||
is_poly = brw_ELSE(p, is_poly);
|
||||
{
|
||||
brw_clip_copy_colors(c, 0, 2);
|
||||
brw_clip_copy_colors(c, 1, 2);
|
||||
if (c->key.pv_first) {
|
||||
brw_clip_copy_colors(c, 1, 0);
|
||||
brw_clip_copy_colors(c, 2, 0);
|
||||
}
|
||||
else {
|
||||
brw_clip_copy_colors(c, 0, 2);
|
||||
brw_clip_copy_colors(c, 1, 2);
|
||||
}
|
||||
}
|
||||
brw_ENDIF(p, is_poly);
|
||||
}
|
||||
|
@@ -115,7 +115,7 @@
|
||||
* Handles blending and (presumably) depth and stencil testing.
|
||||
*/
|
||||
|
||||
#define BRW_FALLBACK_TEXTURE 0x1
|
||||
|
||||
#define BRW_MAX_CURBE (32*16)
|
||||
|
||||
struct brw_context;
|
||||
@@ -454,7 +454,6 @@ struct brw_context
|
||||
GLuint primitive;
|
||||
|
||||
GLboolean emit_state_always;
|
||||
GLboolean tmp_fallback;
|
||||
GLboolean no_batch_wrap;
|
||||
|
||||
struct {
|
||||
|
@@ -375,7 +375,7 @@ static void brw_prepare_vertices(struct brw_context *brw)
|
||||
* isn't an issue at this point.
|
||||
*/
|
||||
if (brw->vb.nr_enabled >= BRW_VEP_MAX) {
|
||||
intel->Fallback = 1;
|
||||
intel->Fallback = GL_TRUE; /* boolean, not bitfield */
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -427,7 +427,7 @@ static void brw_prepare_vertices(struct brw_context *brw)
|
||||
/* Position array not properly enabled:
|
||||
*/
|
||||
if (input->glarray->StrideB == 0) {
|
||||
intel->Fallback = 1;
|
||||
intel->Fallback = GL_TRUE; /* boolean, not bitfield */
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -536,16 +536,9 @@ static void brw_emit_vertices(struct brw_context *brw)
|
||||
I915_GEM_DOMAIN_VERTEX, 0,
|
||||
input->offset);
|
||||
if (BRW_IS_IGDNG(brw)) {
|
||||
if (input->stride) {
|
||||
OUT_RELOC(input->bo,
|
||||
I915_GEM_DOMAIN_VERTEX, 0,
|
||||
input->offset + input->stride * input->count);
|
||||
} else {
|
||||
assert(input->count == 1);
|
||||
OUT_RELOC(input->bo,
|
||||
I915_GEM_DOMAIN_VERTEX, 0,
|
||||
input->offset + input->element_size);
|
||||
}
|
||||
OUT_RELOC(input->bo,
|
||||
I915_GEM_DOMAIN_VERTEX, 0,
|
||||
input->bo->size - 1);
|
||||
} else
|
||||
OUT_BATCH(input->stride ? input->count : 0);
|
||||
OUT_BATCH(0); /* Instance data step rate */
|
||||
@@ -726,7 +719,7 @@ static void brw_emit_index_buffer(struct brw_context *brw)
|
||||
brw->ib.offset);
|
||||
OUT_RELOC(brw->ib.bo,
|
||||
I915_GEM_DOMAIN_VERTEX, 0,
|
||||
brw->ib.offset + brw->ib.size);
|
||||
brw->ib.offset + brw->ib.size - 1);
|
||||
OUT_BATCH( 0 );
|
||||
ADVANCE_BATCH();
|
||||
}
|
||||
|
@@ -133,7 +133,11 @@ const struct brw_tracked_state brw_check_fallback = {
|
||||
|
||||
|
||||
|
||||
/* Not used:
|
||||
/**
|
||||
* Called by the INTEL_FALLBACK() macro.
|
||||
* NOTE: this is a no-op for the i965 driver. The brw->intel.Fallback
|
||||
* field is treated as a boolean, not a bitmask. It's only set in a
|
||||
* couple of places.
|
||||
*/
|
||||
void intelFallback( struct intel_context *intel, GLuint bit, GLboolean mode )
|
||||
{
|
||||
|
@@ -85,10 +85,10 @@ static void compile_gs_prog( struct brw_context *brw,
|
||||
*/
|
||||
switch (key->primitive) {
|
||||
case GL_QUADS:
|
||||
brw_gs_quads( &c );
|
||||
brw_gs_quads( &c, key );
|
||||
break;
|
||||
case GL_QUAD_STRIP:
|
||||
brw_gs_quad_strip( &c );
|
||||
brw_gs_quad_strip( &c, key );
|
||||
break;
|
||||
case GL_LINE_LOOP:
|
||||
brw_gs_lines( &c );
|
||||
@@ -149,6 +149,7 @@ static const GLenum gs_prim[GL_POLYGON+1] = {
|
||||
static void populate_key( struct brw_context *brw,
|
||||
struct brw_gs_prog_key *key )
|
||||
{
|
||||
GLcontext *ctx = &brw->intel.ctx;
|
||||
memset(key, 0, sizeof(*key));
|
||||
|
||||
/* CACHE_NEW_VS_PROG */
|
||||
@@ -158,6 +159,9 @@ static void populate_key( struct brw_context *brw,
|
||||
key->primitive = gs_prim[brw->primitive];
|
||||
|
||||
key->hint_gs_always = 0; /* debug code? */
|
||||
|
||||
/* _NEW_LIGHT */
|
||||
key->pv_first = (ctx->Light.ProvokingVertex == GL_FIRST_VERTEX_CONVENTION);
|
||||
|
||||
key->need_gs_prog = (key->hint_gs_always ||
|
||||
brw->primitive == GL_QUADS ||
|
||||
@@ -193,7 +197,7 @@ static void prepare_gs_prog(struct brw_context *brw)
|
||||
|
||||
const struct brw_tracked_state brw_gs_prog = {
|
||||
.dirty = {
|
||||
.mesa = 0,
|
||||
.mesa = _NEW_LIGHT,
|
||||
.brw = BRW_NEW_PRIMITIVE,
|
||||
.cache = CACHE_NEW_VS_PROG
|
||||
},
|
||||
|
@@ -43,8 +43,9 @@ struct brw_gs_prog_key {
|
||||
GLuint attrs:32;
|
||||
GLuint primitive:4;
|
||||
GLuint hint_gs_always:1;
|
||||
GLuint pv_first:1;
|
||||
GLuint need_gs_prog:1;
|
||||
GLuint pad:26;
|
||||
GLuint pad:25;
|
||||
};
|
||||
|
||||
struct brw_gs_compile {
|
||||
@@ -67,8 +68,8 @@ struct brw_gs_compile {
|
||||
|
||||
#define ATTR_SIZE (4*4)
|
||||
|
||||
void brw_gs_quads( struct brw_gs_compile *c );
|
||||
void brw_gs_quad_strip( struct brw_gs_compile *c );
|
||||
void brw_gs_quads( struct brw_gs_compile *c, struct brw_gs_prog_key *key );
|
||||
void brw_gs_quad_strip( struct brw_gs_compile *c, struct brw_gs_prog_key *key );
|
||||
void brw_gs_tris( struct brw_gs_compile *c );
|
||||
void brw_gs_lines( struct brw_gs_compile *c );
|
||||
void brw_gs_points( struct brw_gs_compile *c );
|
||||
|
@@ -120,7 +120,7 @@ static void brw_gs_ff_sync(struct brw_gs_compile *c, int num_prim)
|
||||
}
|
||||
|
||||
|
||||
void brw_gs_quads( struct brw_gs_compile *c )
|
||||
void brw_gs_quads( struct brw_gs_compile *c, struct brw_gs_prog_key *key )
|
||||
{
|
||||
brw_gs_alloc_regs(c, 4);
|
||||
|
||||
@@ -128,23 +128,39 @@ void brw_gs_quads( struct brw_gs_compile *c )
|
||||
* is the PV for quads, but vertex 0 for polygons:
|
||||
*/
|
||||
if (c->need_ff_sync)
|
||||
brw_gs_ff_sync(c, 1);
|
||||
brw_gs_emit_vue(c, c->reg.vertex[3], 0, ((_3DPRIM_POLYGON << 2) | R02_PRIM_START));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[0], 0, (_3DPRIM_POLYGON << 2));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[1], 0, (_3DPRIM_POLYGON << 2));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[2], 1, ((_3DPRIM_POLYGON << 2) | R02_PRIM_END));
|
||||
brw_gs_ff_sync(c, 1);
|
||||
if (key->pv_first) {
|
||||
brw_gs_emit_vue(c, c->reg.vertex[0], 0, ((_3DPRIM_POLYGON << 2) | R02_PRIM_START));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[1], 0, (_3DPRIM_POLYGON << 2));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[2], 0, (_3DPRIM_POLYGON << 2));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[3], 1, ((_3DPRIM_POLYGON << 2) | R02_PRIM_END));
|
||||
}
|
||||
else {
|
||||
brw_gs_emit_vue(c, c->reg.vertex[3], 0, ((_3DPRIM_POLYGON << 2) | R02_PRIM_START));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[0], 0, (_3DPRIM_POLYGON << 2));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[1], 0, (_3DPRIM_POLYGON << 2));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[2], 1, ((_3DPRIM_POLYGON << 2) | R02_PRIM_END));
|
||||
}
|
||||
}
|
||||
|
||||
void brw_gs_quad_strip( struct brw_gs_compile *c )
|
||||
void brw_gs_quad_strip( struct brw_gs_compile *c, struct brw_gs_prog_key *key )
|
||||
{
|
||||
brw_gs_alloc_regs(c, 4);
|
||||
|
||||
if (c->need_ff_sync)
|
||||
brw_gs_ff_sync(c, 1);
|
||||
brw_gs_emit_vue(c, c->reg.vertex[2], 0, ((_3DPRIM_POLYGON << 2) | R02_PRIM_START));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[3], 0, (_3DPRIM_POLYGON << 2));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[0], 0, (_3DPRIM_POLYGON << 2));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[1], 1, ((_3DPRIM_POLYGON << 2) | R02_PRIM_END));
|
||||
if (key->pv_first) {
|
||||
brw_gs_emit_vue(c, c->reg.vertex[0], 0, ((_3DPRIM_POLYGON << 2) | R02_PRIM_START));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[1], 0, (_3DPRIM_POLYGON << 2));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[2], 0, (_3DPRIM_POLYGON << 2));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[3], 1, ((_3DPRIM_POLYGON << 2) | R02_PRIM_END));
|
||||
}
|
||||
else {
|
||||
brw_gs_emit_vue(c, c->reg.vertex[2], 0, ((_3DPRIM_POLYGON << 2) | R02_PRIM_START));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[3], 0, (_3DPRIM_POLYGON << 2));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[0], 0, (_3DPRIM_POLYGON << 2));
|
||||
brw_gs_emit_vue(c, c->reg.vertex[1], 1, ((_3DPRIM_POLYGON << 2) | R02_PRIM_END));
|
||||
}
|
||||
}
|
||||
|
||||
void brw_gs_tris( struct brw_gs_compile *c )
|
||||
|
@@ -113,7 +113,8 @@ struct brw_sf_unit_key {
|
||||
|
||||
unsigned int nr_urb_entries, urb_size, sfsize;
|
||||
|
||||
GLenum front_face, cull_face, provoking_vertex;
|
||||
GLenum front_face, cull_face;
|
||||
unsigned pv_first:1;
|
||||
unsigned scissor:1;
|
||||
unsigned line_smooth:1;
|
||||
unsigned point_sprite:1;
|
||||
@@ -154,7 +155,7 @@ sf_unit_populate_key(struct brw_context *brw, struct brw_sf_unit_key *key)
|
||||
key->point_attenuated = ctx->Point._Attenuated;
|
||||
|
||||
/* _NEW_LIGHT */
|
||||
key->provoking_vertex = ctx->Light.ProvokingVertex;
|
||||
key->pv_first = (ctx->Light.ProvokingVertex == GL_FIRST_VERTEX_CONVENTION);
|
||||
|
||||
key->render_to_fbo = brw->intel.ctx.DrawBuffer->Name != 0;
|
||||
}
|
||||
@@ -287,7 +288,7 @@ sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,
|
||||
|
||||
/* might be BRW_NEW_PRIMITIVE if we have to adjust pv for polygons:
|
||||
*/
|
||||
if (key->provoking_vertex == GL_LAST_VERTEX_CONVENTION) {
|
||||
if (!key->pv_first) {
|
||||
sf.sf7.trifan_pv = 2;
|
||||
sf.sf7.linestrip_pv = 1;
|
||||
sf.sf7.tristrip_pv = 2;
|
||||
|
@@ -151,6 +151,7 @@ void brw_state_cache_check_size( struct brw_context *brw );
|
||||
|
||||
void brw_init_caches( struct brw_context *brw );
|
||||
void brw_destroy_caches( struct brw_context *brw );
|
||||
void brw_state_cache_bo_delete(struct brw_cache *cache, dri_bo *bo);
|
||||
|
||||
/***********************************************************************
|
||||
* brw_state_batch.c
|
||||
|
@@ -517,6 +517,55 @@ brw_clear_cache(struct brw_context *brw, struct brw_cache *cache)
|
||||
brw->state.dirty.cache |= ~0;
|
||||
}
|
||||
|
||||
/* Clear all entries from the cache that point to the given bo.
|
||||
*
|
||||
* This lets us release memory for reuse earlier for known-dead buffers,
|
||||
* at the cost of walking the entire hash table.
|
||||
*/
|
||||
void
|
||||
brw_state_cache_bo_delete(struct brw_cache *cache, dri_bo *bo)
|
||||
{
|
||||
struct brw_cache_item **prev;
|
||||
GLuint i;
|
||||
|
||||
if (INTEL_DEBUG & DEBUG_STATE)
|
||||
_mesa_printf("%s\n", __FUNCTION__);
|
||||
|
||||
for (i = 0; i < cache->size; i++) {
|
||||
for (prev = &cache->items[i]; *prev;) {
|
||||
struct brw_cache_item *c = *prev;
|
||||
int j;
|
||||
|
||||
for (j = 0; j < c->nr_reloc_bufs; j++) {
|
||||
if (c->reloc_bufs[j] == bo)
|
||||
break;
|
||||
}
|
||||
|
||||
if (j != c->nr_reloc_bufs) {
|
||||
|
||||
*prev = c->next;
|
||||
|
||||
for (j = 0; j < c->nr_reloc_bufs; j++)
|
||||
dri_bo_unreference(c->reloc_bufs[j]);
|
||||
dri_bo_unreference(c->bo);
|
||||
free((void *)c->key);
|
||||
free(c);
|
||||
cache->n_items--;
|
||||
|
||||
/* Delete up the tree. Notably we're trying to get from
|
||||
* a request to delete the surface, to deleting the surface state
|
||||
* object, to deleting the binding table. We're slack and restart
|
||||
* the deletion process when we do this because the other delete
|
||||
* may kill our *prev.
|
||||
*/
|
||||
brw_state_cache_bo_delete(cache, c->bo);
|
||||
prev = &cache->items[i];
|
||||
} else {
|
||||
prev = &(*prev)->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
brw_state_cache_check_size(struct brw_context *brw)
|
||||
|
@@ -308,7 +308,7 @@ void brw_validate_state( struct brw_context *brw )
|
||||
if (brw->state.dirty.brw & BRW_NEW_CONTEXT)
|
||||
brw_clear_batch_cache(brw);
|
||||
|
||||
brw->intel.Fallback = 0;
|
||||
brw->intel.Fallback = GL_FALSE; /* boolean, not bitfield */
|
||||
|
||||
/* do prepare stage for all atoms */
|
||||
for (i = 0; i < Elements(atoms); i++) {
|
||||
|
@@ -86,10 +86,10 @@ GLboolean brw_miptree_layout(struct intel_context *intel,
|
||||
mt->pitch = intel_miptree_pitch_align(intel, mt, tiling, mt->pitch);
|
||||
|
||||
if (mt->compressed) {
|
||||
qpitch = (y_pitch + ALIGN(minify(y_pitch), align_h) + 11 * align_h) / 4 * mt->pitch * mt->cpp;
|
||||
qpitch = (y_pitch + ALIGN(minify(y_pitch), align_h) + 11 * align_h) / 4;
|
||||
mt->total_height = (y_pitch + ALIGN(minify(y_pitch), align_h) + 11 * align_h) / 4 * 6;
|
||||
} else {
|
||||
qpitch = (y_pitch + ALIGN(minify(y_pitch), align_h) + 11 * align_h) * mt->pitch * mt->cpp;
|
||||
qpitch = (y_pitch + ALIGN(minify(y_pitch), align_h) + 11 * align_h);
|
||||
mt->total_height = (y_pitch + ALIGN(minify(y_pitch), align_h) + 11 * align_h) * 6;
|
||||
}
|
||||
|
||||
@@ -102,7 +102,8 @@ GLboolean brw_miptree_layout(struct intel_context *intel,
|
||||
height, 1);
|
||||
|
||||
for (q = 0; q < nr_images; q++)
|
||||
intel_miptree_set_image_offset_ex(mt, level, q, x, y, q * qpitch);
|
||||
intel_miptree_set_image_offset(mt, level, q,
|
||||
x, y + q * qpitch);
|
||||
|
||||
if (mt->compressed)
|
||||
img_height = MAX2(1, height/4);
|
||||
|
@@ -331,63 +331,65 @@ static void unalias3( struct brw_vs_compile *c,
|
||||
}
|
||||
}
|
||||
|
||||
static void emit_sop( struct brw_compile *p,
|
||||
static void emit_sop( struct brw_vs_compile *c,
|
||||
struct brw_reg dst,
|
||||
struct brw_reg arg0,
|
||||
struct brw_reg arg1,
|
||||
GLuint cond)
|
||||
{
|
||||
struct brw_compile *p = &c->func;
|
||||
|
||||
brw_MOV(p, dst, brw_imm_f(0.0f));
|
||||
brw_CMP(p, brw_null_reg(), cond, arg0, arg1);
|
||||
brw_MOV(p, dst, brw_imm_f(1.0f));
|
||||
brw_set_predicate_control_flag_value(p, 0xff);
|
||||
}
|
||||
|
||||
static void emit_seq( struct brw_compile *p,
|
||||
static void emit_seq( struct brw_vs_compile *c,
|
||||
struct brw_reg dst,
|
||||
struct brw_reg arg0,
|
||||
struct brw_reg arg1 )
|
||||
{
|
||||
emit_sop(p, dst, arg0, arg1, BRW_CONDITIONAL_EQ);
|
||||
emit_sop(c, dst, arg0, arg1, BRW_CONDITIONAL_EQ);
|
||||
}
|
||||
|
||||
static void emit_sne( struct brw_compile *p,
|
||||
static void emit_sne( struct brw_vs_compile *c,
|
||||
struct brw_reg dst,
|
||||
struct brw_reg arg0,
|
||||
struct brw_reg arg1 )
|
||||
{
|
||||
emit_sop(p, dst, arg0, arg1, BRW_CONDITIONAL_NEQ);
|
||||
emit_sop(c, dst, arg0, arg1, BRW_CONDITIONAL_NEQ);
|
||||
}
|
||||
static void emit_slt( struct brw_compile *p,
|
||||
static void emit_slt( struct brw_vs_compile *c,
|
||||
struct brw_reg dst,
|
||||
struct brw_reg arg0,
|
||||
struct brw_reg arg1 )
|
||||
{
|
||||
emit_sop(p, dst, arg0, arg1, BRW_CONDITIONAL_L);
|
||||
emit_sop(c, dst, arg0, arg1, BRW_CONDITIONAL_L);
|
||||
}
|
||||
|
||||
static void emit_sle( struct brw_compile *p,
|
||||
static void emit_sle( struct brw_vs_compile *c,
|
||||
struct brw_reg dst,
|
||||
struct brw_reg arg0,
|
||||
struct brw_reg arg1 )
|
||||
{
|
||||
emit_sop(p, dst, arg0, arg1, BRW_CONDITIONAL_LE);
|
||||
emit_sop(c, dst, arg0, arg1, BRW_CONDITIONAL_LE);
|
||||
}
|
||||
|
||||
static void emit_sgt( struct brw_compile *p,
|
||||
static void emit_sgt( struct brw_vs_compile *c,
|
||||
struct brw_reg dst,
|
||||
struct brw_reg arg0,
|
||||
struct brw_reg arg1 )
|
||||
{
|
||||
emit_sop(p, dst, arg0, arg1, BRW_CONDITIONAL_G);
|
||||
emit_sop(c, dst, arg0, arg1, BRW_CONDITIONAL_G);
|
||||
}
|
||||
|
||||
static void emit_sge( struct brw_compile *p,
|
||||
static void emit_sge( struct brw_vs_compile *c,
|
||||
struct brw_reg dst,
|
||||
struct brw_reg arg0,
|
||||
struct brw_reg arg1 )
|
||||
{
|
||||
emit_sop(p, dst, arg0, arg1, BRW_CONDITIONAL_GE);
|
||||
emit_sop(c, dst, arg0, arg1, BRW_CONDITIONAL_GE);
|
||||
}
|
||||
|
||||
static void emit_max( struct brw_compile *p,
|
||||
@@ -912,6 +914,7 @@ get_src_reg( struct brw_vs_compile *c,
|
||||
case PROGRAM_CONSTANT:
|
||||
case PROGRAM_UNIFORM:
|
||||
case PROGRAM_ENV_PARAM:
|
||||
case PROGRAM_LOCAL_PARAM:
|
||||
if (c->vp->use_const_buffer) {
|
||||
return get_constant(c, inst, argIndex);
|
||||
}
|
||||
@@ -930,7 +933,6 @@ get_src_reg( struct brw_vs_compile *c,
|
||||
/* this is a normal case since we loop over all three src args */
|
||||
return brw_null_reg();
|
||||
|
||||
case PROGRAM_LOCAL_PARAM:
|
||||
case PROGRAM_WRITE_ONLY:
|
||||
default:
|
||||
assert(0);
|
||||
@@ -1453,25 +1455,25 @@ void brw_vs_emit(struct brw_vs_compile *c )
|
||||
break;
|
||||
|
||||
case OPCODE_SEQ:
|
||||
emit_seq(p, dst, args[0], args[1]);
|
||||
unalias2(c, dst, args[0], args[1], emit_seq);
|
||||
break;
|
||||
case OPCODE_SIN:
|
||||
emit_math1(c, BRW_MATH_FUNCTION_SIN, dst, args[0], BRW_MATH_PRECISION_FULL);
|
||||
break;
|
||||
case OPCODE_SNE:
|
||||
emit_sne(p, dst, args[0], args[1]);
|
||||
unalias2(c, dst, args[0], args[1], emit_sne);
|
||||
break;
|
||||
case OPCODE_SGE:
|
||||
emit_sge(p, dst, args[0], args[1]);
|
||||
unalias2(c, dst, args[0], args[1], emit_sge);
|
||||
break;
|
||||
case OPCODE_SGT:
|
||||
emit_sgt(p, dst, args[0], args[1]);
|
||||
unalias2(c, dst, args[0], args[1], emit_sgt);
|
||||
break;
|
||||
case OPCODE_SLT:
|
||||
emit_slt(p, dst, args[0], args[1]);
|
||||
unalias2(c, dst, args[0], args[1], emit_slt);
|
||||
break;
|
||||
case OPCODE_SLE:
|
||||
emit_sle(p, dst, args[0], args[1]);
|
||||
unalias2(c, dst, args[0], args[1], emit_sle);
|
||||
break;
|
||||
case OPCODE_SUB:
|
||||
brw_ADD(p, dst, args[0], negate(args[1]));
|
||||
|
@@ -53,6 +53,7 @@ brw_vs_update_constant_buffer(struct brw_context *brw)
|
||||
const struct gl_program_parameter_list *params = vp->program.Base.Parameters;
|
||||
const int size = params->NumParameters * 4 * sizeof(GLfloat);
|
||||
drm_intel_bo *const_buffer;
|
||||
int i;
|
||||
|
||||
/* BRW_NEW_VERTEX_PROGRAM */
|
||||
if (!vp->use_const_buffer)
|
||||
@@ -62,7 +63,16 @@ brw_vs_update_constant_buffer(struct brw_context *brw)
|
||||
size, 64);
|
||||
|
||||
/* _NEW_PROGRAM_CONSTANTS */
|
||||
dri_bo_subdata(const_buffer, 0, size, params->ParameterValues);
|
||||
|
||||
/* Updates the ParamaterValues[i] pointers for all parameters of the
|
||||
* basic type of PROGRAM_STATE_VAR.
|
||||
*/
|
||||
_mesa_load_state_parameters(&brw->intel.ctx, vp->program.Base.Parameters);
|
||||
|
||||
for (i = 0; i < params->NumParameters; i++) {
|
||||
dri_bo_subdata(const_buffer, i * 4 * sizeof(float), 4 * sizeof(float),
|
||||
params->ParameterValues[i]);
|
||||
}
|
||||
|
||||
return const_buffer;
|
||||
}
|
||||
|
@@ -745,22 +745,32 @@ static void emit_tex( struct brw_wm_compile *c,
|
||||
abort();
|
||||
}
|
||||
|
||||
if (inst->tex_shadow) {
|
||||
nr = 4;
|
||||
emit |= WRITEMASK_W;
|
||||
}
|
||||
/* For shadow comparisons, we have to supply u,v,r. */
|
||||
if (inst->tex_shadow)
|
||||
nr = 3;
|
||||
|
||||
msgLength = 1;
|
||||
|
||||
for (i = 0; i < nr; i++) {
|
||||
static const GLuint swz[4] = {0,1,2,2};
|
||||
if (emit & (1<<i))
|
||||
brw_MOV(p, brw_message_reg(msgLength+1), arg[swz[i]]);
|
||||
if (emit & (1<<i))
|
||||
brw_MOV(p, brw_message_reg(msgLength+1), arg[i]);
|
||||
else
|
||||
brw_MOV(p, brw_message_reg(msgLength+1), brw_imm_f(0));
|
||||
msgLength += 2;
|
||||
}
|
||||
|
||||
/* Fill in the cube map array index value. */
|
||||
if (BRW_IS_IGDNG(p->brw) && inst->tex_shadow) {
|
||||
brw_MOV(p, brw_message_reg(msgLength+1), brw_imm_f(0));
|
||||
msgLength += 2;
|
||||
}
|
||||
|
||||
/* Fill in the shadow comparison reference value. */
|
||||
if (inst->tex_shadow) {
|
||||
brw_MOV(p, brw_message_reg(msgLength+1), arg[2]);
|
||||
msgLength += 2;
|
||||
}
|
||||
|
||||
responseLength = 8; /* always */
|
||||
|
||||
if (BRW_IS_IGDNG(p->brw)) {
|
||||
|
@@ -441,6 +441,10 @@ intelClearWithBlit(GLcontext *ctx, GLbitfield mask)
|
||||
intel_region_buffer(intel, irb->region,
|
||||
all ? INTEL_WRITE_FULL :
|
||||
INTEL_WRITE_PART);
|
||||
int x1 = b.x1 + irb->region->draw_x;
|
||||
int y1 = b.y1 + irb->region->draw_y;
|
||||
int x2 = b.x2 + irb->region->draw_x;
|
||||
int y2 = b.y2 + irb->region->draw_y;
|
||||
|
||||
GLuint clearVal;
|
||||
GLint pitch, cpp;
|
||||
@@ -449,11 +453,10 @@ intelClearWithBlit(GLcontext *ctx, GLbitfield mask)
|
||||
pitch = irb->region->pitch;
|
||||
cpp = irb->region->cpp;
|
||||
|
||||
DBG("%s dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n",
|
||||
DBG("%s dst:buf(%p)/%d %d,%d sz:%dx%d\n",
|
||||
__FUNCTION__,
|
||||
irb->region->buffer, (pitch * cpp),
|
||||
irb->region->draw_offset,
|
||||
b.x1, b.y1, b.x2 - b.x1, b.y2 - b.y1);
|
||||
x1, y1, x2 - x1, y2 - y1);
|
||||
|
||||
BR13 = 0xf0 << 16;
|
||||
CMD = XY_COLOR_BLT_CMD;
|
||||
@@ -526,17 +529,17 @@ intelClearWithBlit(GLcontext *ctx, GLbitfield mask)
|
||||
buf, irb->Base.Name);
|
||||
*/
|
||||
|
||||
assert(b.x1 < b.x2);
|
||||
assert(b.y1 < b.y2);
|
||||
assert(x1 < x2);
|
||||
assert(y1 < y2);
|
||||
|
||||
BEGIN_BATCH(6, REFERENCES_CLIPRECTS);
|
||||
OUT_BATCH(CMD);
|
||||
OUT_BATCH(BR13);
|
||||
OUT_BATCH((b.y1 << 16) | b.x1);
|
||||
OUT_BATCH((b.y2 << 16) | b.x2);
|
||||
OUT_BATCH((y1 << 16) | x1);
|
||||
OUT_BATCH((y2 << 16) | x2);
|
||||
OUT_RELOC(write_buffer,
|
||||
I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
|
||||
irb->region->draw_offset);
|
||||
0);
|
||||
OUT_BATCH(clearVal);
|
||||
ADVANCE_BATCH();
|
||||
clearMask &= ~bufBit; /* turn off bit, for faster loop exit */
|
||||
|
@@ -839,7 +839,7 @@ intelDestroyContext(__DRIcontextPrivate * driContextPriv)
|
||||
_vbo_DestroyContext(&intel->ctx);
|
||||
|
||||
_swrast_DestroyContext(&intel->ctx);
|
||||
intel->Fallback = 0; /* don't call _swrast_Flush later */
|
||||
intel->Fallback = 0x0; /* don't call _swrast_Flush later */
|
||||
|
||||
intel_batchbuffer_free(intel->batch);
|
||||
intel->batch = NULL;
|
||||
@@ -944,10 +944,23 @@ intelMakeCurrent(__DRIcontextPrivate * driContextPriv,
|
||||
__DRIdrawablePrivate * driReadPriv)
|
||||
{
|
||||
__DRIscreenPrivate *psp = driDrawPriv->driScreenPriv;
|
||||
struct intel_context *intel;
|
||||
GET_CURRENT_CONTEXT(curCtx);
|
||||
|
||||
if (driContextPriv)
|
||||
intel = (struct intel_context *) driContextPriv->driverPrivate;
|
||||
else
|
||||
intel = NULL;
|
||||
|
||||
/* According to the glXMakeCurrent() man page: "Pending commands to
|
||||
* the previous context, if any, are flushed before it is released."
|
||||
* But only flush if we're actually changing contexts.
|
||||
*/
|
||||
if (intel_context(curCtx) && intel_context(curCtx) != intel) {
|
||||
_mesa_flush(curCtx);
|
||||
}
|
||||
|
||||
if (driContextPriv) {
|
||||
struct intel_context *intel =
|
||||
(struct intel_context *) driContextPriv->driverPrivate;
|
||||
struct intel_framebuffer *intel_fb =
|
||||
(struct intel_framebuffer *) driDrawPriv->driverPrivate;
|
||||
GLframebuffer *readFb = (GLframebuffer *) driReadPriv->driverPrivate;
|
||||
@@ -993,41 +1006,35 @@ intelMakeCurrent(__DRIcontextPrivate * driContextPriv,
|
||||
|
||||
_mesa_make_current(&intel->ctx, &intel_fb->Base, readFb);
|
||||
|
||||
/* The drawbuffer won't always be updated by _mesa_make_current:
|
||||
*/
|
||||
if (intel->ctx.DrawBuffer == &intel_fb->Base) {
|
||||
intel->driReadDrawable = driReadPriv;
|
||||
|
||||
if (intel->driReadDrawable != driReadPriv)
|
||||
intel->driReadDrawable = driReadPriv;
|
||||
if (intel->driDrawable != driDrawPriv) {
|
||||
if (driDrawPriv->swap_interval == (unsigned)-1) {
|
||||
int i;
|
||||
|
||||
if (intel->driDrawable != driDrawPriv) {
|
||||
if (driDrawPriv->swap_interval == (unsigned)-1) {
|
||||
int i;
|
||||
driDrawPriv->vblFlags = (intel->intelScreen->irq_active != 0)
|
||||
? driGetDefaultVBlankFlags(&intel->optionCache)
|
||||
: VBLANK_FLAG_NO_IRQ;
|
||||
|
||||
driDrawPriv->vblFlags = (intel->intelScreen->irq_active != 0)
|
||||
? driGetDefaultVBlankFlags(&intel->optionCache)
|
||||
: VBLANK_FLAG_NO_IRQ;
|
||||
/* Prevent error printf if one crtc is disabled, this will
|
||||
* be properly calculated in intelWindowMoved() next.
|
||||
*/
|
||||
driDrawPriv->vblFlags = intelFixupVblank(intel, driDrawPriv);
|
||||
|
||||
/* Prevent error printf if one crtc is disabled, this will
|
||||
* be properly calculated in intelWindowMoved() next.
|
||||
*/
|
||||
driDrawPriv->vblFlags = intelFixupVblank(intel, driDrawPriv);
|
||||
(*psp->systemTime->getUST) (&intel_fb->swap_ust);
|
||||
driDrawableInitVBlank(driDrawPriv);
|
||||
intel_fb->vbl_waited = driDrawPriv->vblSeq;
|
||||
|
||||
(*psp->systemTime->getUST) (&intel_fb->swap_ust);
|
||||
driDrawableInitVBlank(driDrawPriv);
|
||||
intel_fb->vbl_waited = driDrawPriv->vblSeq;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (intel_fb->color_rb[i])
|
||||
intel_fb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq;
|
||||
}
|
||||
}
|
||||
intel->driDrawable = driDrawPriv;
|
||||
intelWindowMoved(intel);
|
||||
}
|
||||
|
||||
intel_draw_buffer(&intel->ctx, &intel_fb->Base);
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (intel_fb->color_rb[i])
|
||||
intel_fb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq;
|
||||
}
|
||||
}
|
||||
intel->driDrawable = driDrawPriv;
|
||||
intelWindowMoved(intel);
|
||||
}
|
||||
|
||||
intel_draw_buffer(&intel->ctx, &intel_fb->Base);
|
||||
}
|
||||
else {
|
||||
_mesa_make_current(NULL, NULL, NULL);
|
||||
|
@@ -61,6 +61,10 @@ typedef void (*intel_line_func) (struct intel_context *, intelVertex *,
|
||||
intelVertex *);
|
||||
typedef void (*intel_point_func) (struct intel_context *, intelVertex *);
|
||||
|
||||
/**
|
||||
* Bits for intel->Fallback field
|
||||
*/
|
||||
/*@{*/
|
||||
#define INTEL_FALLBACK_DRAW_BUFFER 0x1
|
||||
#define INTEL_FALLBACK_READ_BUFFER 0x2
|
||||
#define INTEL_FALLBACK_DEPTH_BUFFER 0x4
|
||||
@@ -68,8 +72,10 @@ typedef void (*intel_point_func) (struct intel_context *, intelVertex *);
|
||||
#define INTEL_FALLBACK_USER 0x10
|
||||
#define INTEL_FALLBACK_RENDERMODE 0x20
|
||||
#define INTEL_FALLBACK_TEXTURE 0x40
|
||||
#define INTEL_FALLBACK_DRIVER 0x1000 /**< first for drivers */
|
||||
/*@}*/
|
||||
|
||||
extern void intelFallback(struct intel_context *intel, GLuint bit,
|
||||
extern void intelFallback(struct intel_context *intel, GLbitfield bit,
|
||||
GLboolean mode);
|
||||
#define FALLBACK( intel, bit, mode ) intelFallback( intel, bit, mode )
|
||||
|
||||
@@ -171,7 +177,7 @@ struct intel_context
|
||||
struct dri_metaops meta;
|
||||
|
||||
GLint refcount;
|
||||
GLuint Fallback;
|
||||
GLbitfield Fallback; /**< mask of INTEL_FALLBACK_x bits */
|
||||
GLuint NewGLState;
|
||||
|
||||
dri_bufmgr *bufmgr;
|
||||
|
@@ -385,6 +385,7 @@ intel_create_renderbuffer(GLenum intFormat)
|
||||
default:
|
||||
_mesa_problem(NULL,
|
||||
"Unexpected intFormat in intel_create_renderbuffer");
|
||||
_mesa_free(irb);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -571,7 +572,7 @@ intel_render_texture(GLcontext * ctx,
|
||||
= att->Texture->Image[att->CubeMapFace][att->TextureLevel];
|
||||
struct intel_renderbuffer *irb = intel_renderbuffer(att->Renderbuffer);
|
||||
struct intel_texture_image *intel_image;
|
||||
GLuint imageOffset;
|
||||
GLuint dst_x, dst_y;
|
||||
|
||||
(void) fb;
|
||||
|
||||
@@ -618,18 +619,16 @@ intel_render_texture(GLcontext * ctx,
|
||||
}
|
||||
|
||||
/* compute offset of the particular 2D image within the texture region */
|
||||
imageOffset = intel_miptree_image_offset(intel_image->mt,
|
||||
att->CubeMapFace,
|
||||
att->TextureLevel);
|
||||
intel_miptree_get_image_offset(intel_image->mt,
|
||||
att->TextureLevel,
|
||||
att->CubeMapFace,
|
||||
att->Zoffset,
|
||||
&dst_x, &dst_y);
|
||||
|
||||
if (att->Texture->Target == GL_TEXTURE_3D) {
|
||||
const GLuint *offsets = intel_miptree_depth_offsets(intel_image->mt,
|
||||
att->TextureLevel);
|
||||
imageOffset += offsets[att->Zoffset];
|
||||
}
|
||||
|
||||
/* store that offset in the region */
|
||||
intel_image->mt->region->draw_offset = imageOffset;
|
||||
intel_image->mt->region->draw_offset = (dst_y * intel_image->mt->pitch +
|
||||
dst_x) * intel_image->mt->cpp;
|
||||
intel_image->mt->region->draw_x = dst_x;
|
||||
intel_image->mt->region->draw_y = dst_y;
|
||||
|
||||
/* update drawing region, etc */
|
||||
intel_draw_buffer(ctx, fb);
|
||||
|
@@ -29,6 +29,9 @@
|
||||
#include "intel_mipmap_tree.h"
|
||||
#include "intel_regions.h"
|
||||
#include "intel_chipset.h"
|
||||
#ifndef I915
|
||||
#include "brw_state.h"
|
||||
#endif
|
||||
#include "main/enums.h"
|
||||
|
||||
#define FILE_DEBUG_FLAG DEBUG_MIPTREE
|
||||
@@ -131,8 +134,10 @@ intel_miptree_create(struct intel_context *intel,
|
||||
/*
|
||||
* pitch == 0 || height == 0 indicates the null texture
|
||||
*/
|
||||
if (!mt || !mt->pitch || !mt->total_height)
|
||||
if (!mt || !mt->pitch || !mt->total_height) {
|
||||
free(mt);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mt->region = intel_region_alloc(intel,
|
||||
tiling,
|
||||
@@ -269,11 +274,25 @@ intel_miptree_release(struct intel_context *intel,
|
||||
|
||||
DBG("%s deleting %p\n", __FUNCTION__, *mt);
|
||||
|
||||
#ifndef I915
|
||||
/* Free up cached binding tables holding a reference on our buffer, to
|
||||
* avoid excessive memory consumption.
|
||||
*
|
||||
* This isn't as aggressive as we could be, as we'd like to do
|
||||
* it from any time we free the last ref on a region. But intel_region.c
|
||||
* is context-agnostic. Perhaps our constant state cache should be, as
|
||||
* well.
|
||||
*/
|
||||
brw_state_cache_bo_delete(&brw_context(&intel->ctx)->surface_cache,
|
||||
(*mt)->region->buffer);
|
||||
#endif
|
||||
|
||||
intel_region_release(&((*mt)->region));
|
||||
|
||||
for (i = 0; i < MAX_TEXTURE_LEVELS; i++)
|
||||
if ((*mt)->level[i].image_offset)
|
||||
free((*mt)->level[i].image_offset);
|
||||
for (i = 0; i < MAX_TEXTURE_LEVELS; i++) {
|
||||
free((*mt)->level[i].x_offset);
|
||||
free((*mt)->level[i].y_offset);
|
||||
}
|
||||
|
||||
free(*mt);
|
||||
}
|
||||
@@ -334,82 +353,58 @@ intel_miptree_set_level_info(struct intel_mipmap_tree *mt,
|
||||
mt->level[level].height = h;
|
||||
mt->level[level].depth = d;
|
||||
mt->level[level].level_offset = (x + y * mt->pitch) * mt->cpp;
|
||||
mt->level[level].level_x = x;
|
||||
mt->level[level].level_y = y;
|
||||
mt->level[level].nr_images = nr_images;
|
||||
|
||||
DBG("%s level %d size: %d,%d,%d offset %d,%d (0x%x)\n", __FUNCTION__,
|
||||
level, w, h, d, x, y, mt->level[level].level_offset);
|
||||
|
||||
/* Not sure when this would happen, but anyway:
|
||||
*/
|
||||
if (mt->level[level].image_offset) {
|
||||
free(mt->level[level].image_offset);
|
||||
mt->level[level].image_offset = NULL;
|
||||
}
|
||||
|
||||
assert(nr_images);
|
||||
assert(!mt->level[level].x_offset);
|
||||
|
||||
mt->level[level].image_offset = malloc(nr_images * sizeof(GLuint));
|
||||
mt->level[level].image_offset[0] = 0;
|
||||
mt->level[level].x_offset = malloc(nr_images * sizeof(GLuint));
|
||||
mt->level[level].x_offset[0] = mt->level[level].level_x;
|
||||
mt->level[level].y_offset = malloc(nr_images * sizeof(GLuint));
|
||||
mt->level[level].y_offset[0] = mt->level[level].level_y;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
intel_miptree_set_image_offset_ex(struct intel_mipmap_tree *mt,
|
||||
GLuint level, GLuint img,
|
||||
GLuint x, GLuint y,
|
||||
GLuint offset)
|
||||
{
|
||||
if (img == 0 && level == 0)
|
||||
assert(x == 0 && y == 0);
|
||||
|
||||
assert(img < mt->level[level].nr_images);
|
||||
|
||||
mt->level[level].image_offset[img] = (x + y * mt->pitch) * mt->cpp + offset;
|
||||
|
||||
DBG("%s level %d img %d pos %d,%d image_offset %x\n",
|
||||
__FUNCTION__, level, img, x, y, mt->level[level].image_offset[img]);
|
||||
}
|
||||
|
||||
void
|
||||
intel_miptree_set_image_offset(struct intel_mipmap_tree *mt,
|
||||
GLuint level, GLuint img,
|
||||
GLuint x, GLuint y)
|
||||
{
|
||||
intel_miptree_set_image_offset_ex(mt, level, img, x, y, 0);
|
||||
if (img == 0 && level == 0)
|
||||
assert(x == 0 && y == 0);
|
||||
|
||||
assert(img < mt->level[level].nr_images);
|
||||
|
||||
mt->level[level].x_offset[img] = mt->level[level].level_x + x;
|
||||
mt->level[level].y_offset[img] = mt->level[level].level_y + y;
|
||||
|
||||
DBG("%s level %d img %d pos %d,%d\n",
|
||||
__FUNCTION__, level, img,
|
||||
mt->level[level].x_offset[img], mt->level[level].y_offset[img]);
|
||||
}
|
||||
|
||||
|
||||
/* Although we use the image_offset[] array to store relative offsets
|
||||
* to cube faces, Mesa doesn't know anything about this and expects
|
||||
* each cube face to be treated as a separate image.
|
||||
*
|
||||
* These functions present that view to mesa:
|
||||
*/
|
||||
const GLuint *
|
||||
intel_miptree_depth_offsets(struct intel_mipmap_tree *mt, GLuint level)
|
||||
void
|
||||
intel_miptree_get_image_offset(struct intel_mipmap_tree *mt,
|
||||
GLuint level, GLuint face, GLuint depth,
|
||||
GLuint *x, GLuint *y)
|
||||
{
|
||||
static const GLuint zero = 0;
|
||||
|
||||
if (mt->target != GL_TEXTURE_3D || mt->level[level].nr_images == 1)
|
||||
return &zero;
|
||||
else
|
||||
return mt->level[level].image_offset;
|
||||
if (mt->target == GL_TEXTURE_CUBE_MAP_ARB) {
|
||||
*x = mt->level[level].x_offset[face];
|
||||
*y = mt->level[level].y_offset[face];
|
||||
} else if (mt->target == GL_TEXTURE_3D) {
|
||||
*x = mt->level[level].x_offset[depth];
|
||||
*y = mt->level[level].y_offset[depth];
|
||||
} else {
|
||||
*x = mt->level[level].x_offset[0];
|
||||
*y = mt->level[level].y_offset[0];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
GLuint
|
||||
intel_miptree_image_offset(struct intel_mipmap_tree *mt,
|
||||
GLuint face, GLuint level)
|
||||
{
|
||||
if (mt->target == GL_TEXTURE_CUBE_MAP_ARB)
|
||||
return (mt->level[level].level_offset +
|
||||
mt->level[level].image_offset[face]);
|
||||
else
|
||||
return mt->level[level].level_offset;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Map a teximage in a mipmap tree.
|
||||
* \param row_stride returns row stride in bytes
|
||||
@@ -425,6 +420,7 @@ intel_miptree_image_map(struct intel_context * intel,
|
||||
GLuint level,
|
||||
GLuint * row_stride, GLuint * image_offsets)
|
||||
{
|
||||
GLuint x, y;
|
||||
DBG("%s \n", __FUNCTION__);
|
||||
|
||||
if (row_stride)
|
||||
@@ -433,17 +429,23 @@ intel_miptree_image_map(struct intel_context * intel,
|
||||
if (mt->target == GL_TEXTURE_3D) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < mt->level[level].depth; i++)
|
||||
image_offsets[i] = mt->level[level].image_offset[i] / mt->cpp;
|
||||
for (i = 0; i < mt->level[level].depth; i++) {
|
||||
|
||||
intel_miptree_get_image_offset(mt, level, face, i,
|
||||
&x, &y);
|
||||
image_offsets[i] = x + y * mt->pitch;
|
||||
}
|
||||
|
||||
return intel_region_map(intel, mt->region);
|
||||
} else {
|
||||
assert(mt->level[level].depth == 1);
|
||||
assert(mt->target == GL_TEXTURE_CUBE_MAP ||
|
||||
mt->level[level].image_offset[0] == 0);
|
||||
intel_miptree_get_image_offset(mt, level, face, 0,
|
||||
&x, &y);
|
||||
image_offsets[0] = 0;
|
||||
}
|
||||
|
||||
return (intel_region_map(intel, mt->region) +
|
||||
intel_miptree_image_offset(mt, face, level));
|
||||
return intel_region_map(intel, mt->region) +
|
||||
(x + y * mt->pitch) * mt->cpp;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -468,20 +470,19 @@ intel_miptree_image_data(struct intel_context *intel,
|
||||
GLuint src_image_pitch)
|
||||
{
|
||||
GLuint depth = dst->level[level].depth;
|
||||
GLuint dst_offset = intel_miptree_image_offset(dst, face, level);
|
||||
const GLuint *dst_depth_offset = intel_miptree_depth_offsets(dst, level);
|
||||
GLuint i;
|
||||
GLuint height = 0;
|
||||
|
||||
DBG("%s: %d/%d\n", __FUNCTION__, face, level);
|
||||
for (i = 0; i < depth; i++) {
|
||||
GLuint dst_x, dst_y, height;
|
||||
|
||||
intel_miptree_get_image_offset(dst, level, face, i, &dst_x, &dst_y);
|
||||
|
||||
height = dst->level[level].height;
|
||||
if(dst->compressed)
|
||||
height = (height + 3) / 4;
|
||||
intel_region_data(intel,
|
||||
dst->region,
|
||||
dst_offset + dst_depth_offset[i], /* dst_offset */
|
||||
0, 0, /* dstx, dsty */
|
||||
dst->region, 0, dst_x, dst_y,
|
||||
src,
|
||||
src_row_pitch,
|
||||
0, 0, /* source x, y */
|
||||
@@ -503,10 +504,7 @@ intel_miptree_image_copy(struct intel_context *intel,
|
||||
GLuint width = src->level[level].width;
|
||||
GLuint height = src->level[level].height;
|
||||
GLuint depth = src->level[level].depth;
|
||||
GLuint dst_offset = intel_miptree_image_offset(dst, face, level);
|
||||
GLuint src_offset = intel_miptree_image_offset(src, face, level);
|
||||
const GLuint *dst_depth_offset = intel_miptree_depth_offsets(dst, level);
|
||||
const GLuint *src_depth_offset = intel_miptree_depth_offsets(src, level);
|
||||
GLuint src_x, src_y, dst_x, dst_y;
|
||||
GLuint i;
|
||||
GLboolean success;
|
||||
|
||||
@@ -519,22 +517,23 @@ intel_miptree_image_copy(struct intel_context *intel,
|
||||
}
|
||||
|
||||
for (i = 0; i < depth; i++) {
|
||||
intel_miptree_get_image_offset(src, level, face, i, &src_x, &src_y);
|
||||
intel_miptree_get_image_offset(dst, level, face, i, &dst_x, &dst_y);
|
||||
success = intel_region_copy(intel,
|
||||
dst->region, dst_offset + dst_depth_offset[i],
|
||||
0, 0,
|
||||
src->region, src_offset + src_depth_offset[i],
|
||||
0, 0, width, height, GL_COPY);
|
||||
dst->region, 0, dst_x, dst_y,
|
||||
src->region, 0, src_x, src_y, width, height,
|
||||
GL_COPY);
|
||||
if (!success) {
|
||||
GLubyte *src_ptr, *dst_ptr;
|
||||
|
||||
src_ptr = intel_region_map(intel, src->region);
|
||||
dst_ptr = intel_region_map(intel, dst->region);
|
||||
|
||||
_mesa_copy_rect(dst_ptr + dst_offset + dst_depth_offset[i],
|
||||
_mesa_copy_rect(dst_ptr + dst->cpp * (dst_x + dst_y * dst->pitch),
|
||||
dst->cpp,
|
||||
dst->pitch,
|
||||
0, 0, width, height,
|
||||
src_ptr + src_offset + src_depth_offset[i],
|
||||
src_ptr + src->cpp * (src_x + src_y * src->pitch),
|
||||
src->pitch,
|
||||
0, 0);
|
||||
intel_region_unmap(intel, src->region);
|
||||
|
@@ -70,6 +70,10 @@ struct intel_mipmap_level
|
||||
* always zero in that case.
|
||||
*/
|
||||
GLuint level_offset;
|
||||
/** Offset to this miptree level, used in computing x_offset. */
|
||||
GLuint level_x;
|
||||
/** Offset to this miptree level, used in computing y_offset. */
|
||||
GLuint level_y;
|
||||
GLuint width;
|
||||
GLuint height;
|
||||
/** Depth of the mipmap at this level: 1 for 1D/2D/CUBE, n for 3D. */
|
||||
@@ -86,7 +90,7 @@ struct intel_mipmap_level
|
||||
* compute the offsets of depth/cube images within a mipmap level,
|
||||
* so have to store them as a lookup table.
|
||||
*/
|
||||
GLuint *image_offset;
|
||||
GLuint *x_offset, *y_offset;
|
||||
};
|
||||
|
||||
struct intel_mipmap_tree
|
||||
@@ -176,19 +180,10 @@ GLubyte *intel_miptree_image_map(struct intel_context *intel,
|
||||
void intel_miptree_image_unmap(struct intel_context *intel,
|
||||
struct intel_mipmap_tree *mt);
|
||||
|
||||
|
||||
/* Return the linear offset of an image relative to the start of the
|
||||
* tree:
|
||||
*/
|
||||
GLuint intel_miptree_image_offset(struct intel_mipmap_tree *mt,
|
||||
GLuint face, GLuint level);
|
||||
|
||||
/* Return pointers to each 2d slice within an image. Indexed by depth
|
||||
* value.
|
||||
*/
|
||||
const GLuint *intel_miptree_depth_offsets(struct intel_mipmap_tree *mt,
|
||||
GLuint level);
|
||||
|
||||
void
|
||||
intel_miptree_get_image_offset(struct intel_mipmap_tree *mt,
|
||||
GLuint level, GLuint face, GLuint depth,
|
||||
GLuint *x, GLuint *y);
|
||||
|
||||
void intel_miptree_set_level_info(struct intel_mipmap_tree *mt,
|
||||
GLuint level,
|
||||
@@ -196,16 +191,10 @@ void intel_miptree_set_level_info(struct intel_mipmap_tree *mt,
|
||||
GLuint x, GLuint y,
|
||||
GLuint w, GLuint h, GLuint d);
|
||||
|
||||
void intel_miptree_set_image_offset_ex(struct intel_mipmap_tree *mt,
|
||||
GLuint level,
|
||||
GLuint img, GLuint x, GLuint y,
|
||||
GLuint offset);
|
||||
|
||||
void intel_miptree_set_image_offset(struct intel_mipmap_tree *mt,
|
||||
GLuint level,
|
||||
GLuint img, GLuint x, GLuint y);
|
||||
|
||||
|
||||
/* Upload an image into a tree
|
||||
*/
|
||||
void intel_miptree_image_data(struct intel_context *intel,
|
||||
|
@@ -435,13 +435,14 @@ intel_texture_bitmap(GLcontext * ctx,
|
||||
}
|
||||
|
||||
/* Save GL state before we start setting up our drawing */
|
||||
_mesa_PushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT |
|
||||
GL_VIEWPORT_BIT);
|
||||
_mesa_PushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT | GL_POLYGON_BIT |
|
||||
GL_TEXTURE_BIT | GL_VIEWPORT_BIT);
|
||||
_mesa_PushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT |
|
||||
GL_CLIENT_PIXEL_STORE_BIT);
|
||||
old_active_texture = ctx->Texture.CurrentUnit;
|
||||
|
||||
_mesa_Disable(GL_POLYGON_STIPPLE);
|
||||
_mesa_PolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||
|
||||
/* Upload our bitmap data to an alpha texture */
|
||||
_mesa_ActiveTextureARB(GL_TEXTURE0_ARB);
|
||||
@@ -501,8 +502,6 @@ intel_texture_bitmap(GLcontext * ctx,
|
||||
meta_restore_vertex_program(&intel->meta);
|
||||
|
||||
_mesa_PopClientAttrib();
|
||||
_mesa_Disable(GL_TEXTURE_2D); /* asserted that it was disabled at entry */
|
||||
_mesa_ActiveTextureARB(GL_TEXTURE0_ARB + old_active_texture);
|
||||
_mesa_PopAttrib();
|
||||
|
||||
_mesa_DeleteTextures(1, &texname);
|
||||
|
@@ -236,14 +236,14 @@ do_blit_readpixels(GLcontext * ctx,
|
||||
intelFlush(&intel->ctx);
|
||||
LOCK_HARDWARE(intel);
|
||||
|
||||
if (intel->driDrawable->numClipRects) {
|
||||
if (intel->driReadDrawable->numClipRects) {
|
||||
GLboolean all = (width * height * src->cpp == dst->Base.Size &&
|
||||
x == 0 && dst_offset == 0);
|
||||
|
||||
dri_bo *dst_buffer = intel_bufferobj_buffer(intel, dst,
|
||||
all ? INTEL_WRITE_FULL :
|
||||
INTEL_WRITE_PART);
|
||||
__DRIdrawablePrivate *dPriv = intel->driDrawable;
|
||||
__DRIdrawablePrivate *dPriv = intel->driReadDrawable;
|
||||
int nbox = dPriv->numClipRects;
|
||||
drm_clip_rect_t *box = dPriv->pClipRects;
|
||||
drm_clip_rect_t rect;
|
||||
|
@@ -62,6 +62,8 @@ struct intel_region
|
||||
GLuint map_refcount; /**< Reference count for mapping */
|
||||
|
||||
GLuint draw_offset; /**< Offset of drawing address within the region */
|
||||
GLuint draw_x, draw_y; /**< Offset of drawing within the region */
|
||||
|
||||
uint32_t tiling; /**< Which tiling mode the region is in */
|
||||
uint32_t bit_6_swizzle; /**< GEM flag for address swizzling requirement */
|
||||
drmAddress classic_map; /**< drmMap of the region when not in GEM mode */
|
||||
|
@@ -163,6 +163,9 @@ static uint32_t x_tile_swizzle(struct intel_renderbuffer *irb,
|
||||
int x_tile_number, y_tile_number;
|
||||
int tile_off, tile_base;
|
||||
|
||||
x += irb->region->draw_x;
|
||||
y += irb->region->draw_y;
|
||||
|
||||
tile_stride = (irb->region->pitch * irb->region->cpp) << 3;
|
||||
|
||||
xbyte = x * irb->region->cpp;
|
||||
@@ -218,6 +221,9 @@ static uint32_t y_tile_swizzle(struct intel_renderbuffer *irb,
|
||||
int x_tile_number, y_tile_number;
|
||||
int tile_off, tile_base;
|
||||
|
||||
x += irb->region->draw_x;
|
||||
y += irb->region->draw_y;
|
||||
|
||||
tile_stride = (irb->region->pitch * irb->region->cpp) << 5;
|
||||
|
||||
xbyte = x * irb->region->cpp;
|
||||
|
@@ -48,8 +48,8 @@
|
||||
|
||||
#define SPANTMP_PIXEL_FMT INTEL_PIXEL_FMT
|
||||
#define SPANTMP_PIXEL_TYPE INTEL_PIXEL_TYPE
|
||||
#define PUT_VALUE(_x, _y, v) INTEL_WRITE_VALUE(X_TILE(_x, _y), v)
|
||||
#define GET_VALUE(_x, _y) INTEL_READ_VALUE(X_TILE(_x, _y))
|
||||
#define PUT_VALUE(_x, _y, v) INTEL_WRITE_VALUE(Y_TILE(_x, _y), v)
|
||||
#define GET_VALUE(_x, _y) INTEL_READ_VALUE(Y_TILE(_x, _y))
|
||||
#define TAG(x) INTEL_TAG(intel_YTile_##x)
|
||||
#define TAG2(x, y) INTEL_TAG(intel_YTile_##x)##y
|
||||
#include "spantmp2.h"
|
||||
|
@@ -114,7 +114,7 @@ static void intel_check_sync(GLcontext *ctx, struct gl_sync_object *s)
|
||||
{
|
||||
struct intel_sync_object *sync = (struct intel_sync_object *)s;
|
||||
|
||||
if (sync->bo && drm_intel_bo_busy(sync->bo)) {
|
||||
if (sync->bo && !drm_intel_bo_busy(sync->bo)) {
|
||||
drm_intel_bo_unreference(sync->bo);
|
||||
sync->bo = NULL;
|
||||
s->StatusFlag = 1;
|
||||
|
@@ -115,27 +115,29 @@ do_copy_texsubimage(struct intel_context *intel,
|
||||
drm_intel_bo *dst_bo = intel_region_buffer(intel,
|
||||
intelImage->mt->region,
|
||||
INTEL_WRITE_PART);
|
||||
GLuint image_offset = intel_miptree_image_offset(intelImage->mt,
|
||||
intelImage->face,
|
||||
intelImage->level);
|
||||
const GLint orig_x = x;
|
||||
const GLint orig_y = y;
|
||||
GLuint image_x, image_y;
|
||||
GLshort src_pitch;
|
||||
|
||||
intel_miptree_get_image_offset(intelImage->mt,
|
||||
intelImage->level,
|
||||
intelImage->face,
|
||||
0,
|
||||
&image_x, &image_y);
|
||||
/* Update dst for clipped src. Need to also clip the source rect. */
|
||||
dstx += x - orig_x;
|
||||
dsty += y - orig_y;
|
||||
|
||||
/* Can't blit to tiled buffers with non-tile-aligned offset. */
|
||||
if (intelImage->mt->region->tiling != I915_TILING_NONE &&
|
||||
(image_offset & 4095) != 0) {
|
||||
if (intelImage->mt->region->tiling == I915_TILING_Y) {
|
||||
UNLOCK_HARDWARE(intel);
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if (ctx->ReadBuffer->Name == 0) {
|
||||
/* reading from a window, adjust x, y */
|
||||
__DRIdrawablePrivate *dPriv = intel->driDrawable;
|
||||
const __DRIdrawablePrivate *dPriv = intel->driReadDrawable;
|
||||
y = dPriv->y + (dPriv->h - (y + height));
|
||||
x += dPriv->x;
|
||||
|
||||
@@ -156,13 +158,14 @@ do_copy_texsubimage(struct intel_context *intel,
|
||||
intelImage->mt->cpp,
|
||||
src_pitch,
|
||||
src->buffer,
|
||||
0,
|
||||
src->draw_offset,
|
||||
src->tiling,
|
||||
intelImage->mt->pitch,
|
||||
dst_bo,
|
||||
image_offset,
|
||||
0,
|
||||
intelImage->mt->region->tiling,
|
||||
x, y, dstx, dsty, width, height,
|
||||
x, y, image_x + dstx, image_y + dsty,
|
||||
width, height,
|
||||
GL_COPY)) {
|
||||
UNLOCK_HARDWARE(intel);
|
||||
return GL_FALSE;
|
||||
|
@@ -204,7 +204,7 @@ try_pbo_upload(struct intel_context *intel,
|
||||
{
|
||||
struct intel_buffer_object *pbo = intel_buffer_object(unpack->BufferObj);
|
||||
GLuint src_offset, src_stride;
|
||||
GLuint dst_offset, dst_stride;
|
||||
GLuint dst_x, dst_y, dst_stride;
|
||||
|
||||
if (unpack->BufferObj->Name == 0 ||
|
||||
intel->ctx._ImageTransferState ||
|
||||
@@ -221,9 +221,9 @@ try_pbo_upload(struct intel_context *intel,
|
||||
else
|
||||
src_stride = width;
|
||||
|
||||
dst_offset = intel_miptree_image_offset(intelImage->mt,
|
||||
intelImage->face,
|
||||
intelImage->level);
|
||||
intel_miptree_get_image_offset(intelImage->mt, intelImage->level,
|
||||
intelImage->face, 0,
|
||||
&dst_x, &dst_y);
|
||||
|
||||
dst_stride = intelImage->mt->pitch;
|
||||
|
||||
@@ -239,8 +239,8 @@ try_pbo_upload(struct intel_context *intel,
|
||||
if (!intelEmitCopyBlit(intel,
|
||||
intelImage->mt->cpp,
|
||||
src_stride, src_buffer, src_offset, GL_FALSE,
|
||||
dst_stride, dst_buffer, dst_offset, GL_FALSE,
|
||||
0, 0, 0, 0, width, height,
|
||||
dst_stride, dst_buffer, 0, GL_FALSE,
|
||||
0, 0, dst_x, dst_y, width, height,
|
||||
GL_COPY)) {
|
||||
UNLOCK_HARDWARE(intel);
|
||||
return GL_FALSE;
|
||||
@@ -262,7 +262,7 @@ try_pbo_zcopy(struct intel_context *intel,
|
||||
{
|
||||
struct intel_buffer_object *pbo = intel_buffer_object(unpack->BufferObj);
|
||||
GLuint src_offset, src_stride;
|
||||
GLuint dst_offset, dst_stride;
|
||||
GLuint dst_x, dst_y, dst_stride;
|
||||
|
||||
if (unpack->BufferObj->Name == 0 ||
|
||||
intel->ctx._ImageTransferState ||
|
||||
@@ -279,13 +279,14 @@ try_pbo_zcopy(struct intel_context *intel,
|
||||
else
|
||||
src_stride = width;
|
||||
|
||||
dst_offset = intel_miptree_image_offset(intelImage->mt,
|
||||
intelImage->face,
|
||||
intelImage->level);
|
||||
intel_miptree_get_image_offset(intelImage->mt, intelImage->level,
|
||||
intelImage->face, 0,
|
||||
&dst_x, &dst_y);
|
||||
|
||||
dst_stride = intelImage->mt->pitch;
|
||||
|
||||
if (src_stride != dst_stride || dst_offset != 0 || src_offset != 0) {
|
||||
if (src_stride != dst_stride || dst_x != 0 || dst_y != 0 ||
|
||||
src_offset != 0) {
|
||||
DBG("%s: failure 2\n", __FUNCTION__);
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
@@ -1578,13 +1578,6 @@ static void r200ClearStencil( GLcontext *ctx, GLint s )
|
||||
* Window position and viewport transformation
|
||||
*/
|
||||
|
||||
/*
|
||||
* To correctly position primitives:
|
||||
*/
|
||||
#define SUBPIXEL_X 0.125
|
||||
#define SUBPIXEL_Y 0.125
|
||||
|
||||
|
||||
/**
|
||||
* Called when window size or position changes or viewport or depth range
|
||||
* state is changed. We update the hardware viewport state here.
|
||||
@@ -1609,9 +1602,9 @@ void r200UpdateWindow( GLcontext *ctx )
|
||||
}
|
||||
|
||||
float_ui32_type sx = { v[MAT_SX] };
|
||||
float_ui32_type tx = { v[MAT_TX] + xoffset + SUBPIXEL_X };
|
||||
float_ui32_type tx = { v[MAT_TX] + xoffset };
|
||||
float_ui32_type sy = { v[MAT_SY] * y_scale };
|
||||
float_ui32_type ty = { (v[MAT_TY] * y_scale) + y_bias + SUBPIXEL_Y };
|
||||
float_ui32_type ty = { (v[MAT_TY] * y_scale) + y_bias };
|
||||
float_ui32_type sz = { v[MAT_SZ] * depthScale };
|
||||
float_ui32_type tz = { v[MAT_TZ] * depthScale };
|
||||
|
||||
@@ -1680,8 +1673,8 @@ void r200UpdateViewportOffset( GLcontext *ctx )
|
||||
float_ui32_type tx;
|
||||
float_ui32_type ty;
|
||||
|
||||
tx.f = v[MAT_TX] + xoffset + SUBPIXEL_X;
|
||||
ty.f = (- v[MAT_TY]) + yoffset + SUBPIXEL_Y;
|
||||
tx.f = v[MAT_TX] + xoffset;
|
||||
ty.f = (- v[MAT_TY]) + yoffset;
|
||||
|
||||
if ( rmesa->hw.vpt.cmd[VPT_SE_VPORT_XOFFSET] != tx.ui32 ||
|
||||
rmesa->hw.vpt.cmd[VPT_SE_VPORT_YOFFSET] != ty.ui32 )
|
||||
|
@@ -374,11 +374,21 @@ static void r300InitConstValues(GLcontext *ctx, radeonScreenPtr screen)
|
||||
if (screen->chip_family >= CHIP_FAMILY_RV515) {
|
||||
ctx->Const.FragmentProgram.MaxNativeTemps = R500_PFS_NUM_TEMP_REGS;
|
||||
ctx->Const.FragmentProgram.MaxNativeAttribs = 11; /* copy i915... */
|
||||
ctx->Const.FragmentProgram.MaxNativeParameters = R500_PFS_NUM_CONST_REGS;
|
||||
ctx->Const.FragmentProgram.MaxNativeAluInstructions = R500_PFS_MAX_INST;
|
||||
ctx->Const.FragmentProgram.MaxNativeTexInstructions = R500_PFS_MAX_INST;
|
||||
ctx->Const.FragmentProgram.MaxNativeInstructions = R500_PFS_MAX_INST;
|
||||
ctx->Const.FragmentProgram.MaxNativeTexIndirections = R500_PFS_MAX_INST;
|
||||
|
||||
/* The hardware limits are higher than this,
|
||||
* but the non-KMS DRM interface artificially limits us
|
||||
* to this many instructions.
|
||||
*
|
||||
* We could of course work around it in the KMS path,
|
||||
* but it would be a mess, so it seems wiser
|
||||
* to leave it as is. Going forward, the Gallium driver
|
||||
* will not be subject to these limitations.
|
||||
*/
|
||||
ctx->Const.FragmentProgram.MaxNativeParameters = 255;
|
||||
ctx->Const.FragmentProgram.MaxNativeAluInstructions = 255;
|
||||
ctx->Const.FragmentProgram.MaxNativeTexInstructions = 255;
|
||||
ctx->Const.FragmentProgram.MaxNativeInstructions = 255;
|
||||
ctx->Const.FragmentProgram.MaxNativeTexIndirections = 255;
|
||||
ctx->Const.FragmentProgram.MaxNativeAddressRegs = 0;
|
||||
} else {
|
||||
ctx->Const.FragmentProgram.MaxNativeTemps = R300_PFS_NUM_TEMP_REGS;
|
||||
|
@@ -239,6 +239,19 @@ static void translate_fragment_program(GLcontext *ctx, struct r300_fragment_prog
|
||||
rewriteFog(&compiler, fp);
|
||||
|
||||
r3xx_compile_fragment_program(&compiler);
|
||||
|
||||
if (compiler.is_r500) {
|
||||
/* We need to support the non-KMS DRM interface, which
|
||||
* artificially limits the number of instructions and
|
||||
* constants which are available to us.
|
||||
*
|
||||
* See also the comment in r300_context.c where we
|
||||
* set the MAX_NATIVE_xxx values.
|
||||
*/
|
||||
if (fp->code.code.r500.inst_end >= 255 || fp->code.constants.Count > 255)
|
||||
rc_error(&compiler.Base, "Program is too big (upgrade to r300g to avoid this limitation).\n");
|
||||
}
|
||||
|
||||
fp->error = compiler.Base.Error;
|
||||
|
||||
fp->InputsRead = compiler.Base.Program.InputsRead;
|
||||
|
@@ -225,10 +225,10 @@ static void setup_hardware_state(r300ContextPtr rmesa, radeonTexObj *t)
|
||||
if (t->image_override && t->bo)
|
||||
return;
|
||||
|
||||
t->pp_txsize = (((firstImage->Width - 1) << R300_TX_WIDTHMASK_SHIFT)
|
||||
| ((firstImage->Height - 1) << R300_TX_HEIGHTMASK_SHIFT)
|
||||
| ((firstImage->DepthLog2) << R300_TX_DEPTHMASK_SHIFT)
|
||||
| ((t->mt->lastLevel - t->mt->firstLevel) << R300_TX_MAX_MIP_LEVEL_SHIFT));
|
||||
t->pp_txsize = (((R300_TX_WIDTHMASK_MASK & ((firstImage->Width - 1) << R300_TX_WIDTHMASK_SHIFT)))
|
||||
| ((R300_TX_HEIGHTMASK_MASK & ((firstImage->Height - 1) << R300_TX_HEIGHTMASK_SHIFT)))
|
||||
| ((R300_TX_DEPTHMASK_MASK & ((firstImage->DepthLog2) << R300_TX_DEPTHMASK_SHIFT)))
|
||||
| ((R300_TX_MAX_MIP_LEVEL_MASK & ((t->mt->lastLevel - t->mt->firstLevel) << R300_TX_MAX_MIP_LEVEL_SHIFT))));
|
||||
|
||||
t->tile_bits = 0;
|
||||
|
||||
@@ -248,8 +248,12 @@ static void setup_hardware_state(r300ContextPtr rmesa, radeonTexObj *t)
|
||||
if (rmesa->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515) {
|
||||
if (firstImage->Width > 2048)
|
||||
t->pp_txpitch |= R500_TXWIDTH_BIT11;
|
||||
else
|
||||
t->pp_txpitch &= ~R500_TXWIDTH_BIT11;
|
||||
if (firstImage->Height > 2048)
|
||||
t->pp_txpitch |= R500_TXHEIGHT_BIT11;
|
||||
else
|
||||
t->pp_txpitch &= ~R500_TXHEIGHT_BIT11;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,16 +483,20 @@ void r300SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
|
||||
break;
|
||||
}
|
||||
pitch_val--;
|
||||
t->pp_txsize = ((rb->base.Width - 1) << R300_TX_WIDTHMASK_SHIFT) |
|
||||
((rb->base.Height - 1) << R300_TX_HEIGHTMASK_SHIFT);
|
||||
t->pp_txsize = (((R300_TX_WIDTHMASK_MASK & ((rb->base.Width - 1) << R300_TX_WIDTHMASK_SHIFT)))
|
||||
| ((R300_TX_HEIGHTMASK_MASK & ((rb->base.Height - 1) << R300_TX_HEIGHTMASK_SHIFT))));
|
||||
t->pp_txsize |= R300_TX_SIZE_TXPITCH_EN;
|
||||
t->pp_txpitch |= pitch_val;
|
||||
|
||||
if (rmesa->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515) {
|
||||
if (rb->base.Width > 2048)
|
||||
t->pp_txpitch |= R500_TXWIDTH_BIT11;
|
||||
else
|
||||
t->pp_txpitch &= ~R500_TXWIDTH_BIT11;
|
||||
if (rb->base.Height > 2048)
|
||||
t->pp_txpitch |= R500_TXHEIGHT_BIT11;
|
||||
else
|
||||
t->pp_txpitch &= ~R500_TXHEIGHT_BIT11;
|
||||
}
|
||||
t->validated = GL_TRUE;
|
||||
_mesa_unlock_texture(radeon->glCtx, texObj);
|
||||
|
@@ -62,12 +62,6 @@ static int r300VertexProgUpdateParams(GLcontext * ctx, struct r300_vertex_progra
|
||||
}
|
||||
}
|
||||
|
||||
if (vp->code.constants.Count * 4 > VSF_MAX_FRAGMENT_LENGTH) {
|
||||
/* Should have checked this earlier... */
|
||||
fprintf(stderr, "%s:Params exhausted\n", __FUNCTION__);
|
||||
_mesa_exit(-1);
|
||||
}
|
||||
|
||||
for(i = 0; i < vp->code.constants.Count; ++i) {
|
||||
const float * src = 0;
|
||||
const struct rc_constant * constant = &vp->code.constants.Constants[i];
|
||||
@@ -281,6 +275,11 @@ static struct r300_vertex_program *build_program(GLcontext *ctx,
|
||||
}
|
||||
|
||||
r3xx_compile_vertex_program(&compiler);
|
||||
|
||||
if (vp->code.constants.Count > ctx->Const.VertexProgram.MaxParameters) {
|
||||
rc_error(&compiler.Base, "Program exceeds constant buffer size limit\n");
|
||||
}
|
||||
|
||||
vp->error = compiler.Base.Error;
|
||||
|
||||
vp->Base->Base.InputsRead = vp->code.InputsRead;
|
||||
@@ -334,7 +333,6 @@ struct r300_vertex_program * r300SelectAndTranslateVertexShader(GLcontext *ctx)
|
||||
#define bump_vpu_count(ptr, new_count) do { \
|
||||
drm_r300_cmd_header_t* _p=((drm_r300_cmd_header_t*)(ptr)); \
|
||||
int _nc=(new_count)/4; \
|
||||
assert(_nc < 256); \
|
||||
if(_nc>_p->vpu.count)_p->vpu.count=_nc; \
|
||||
} while(0)
|
||||
|
||||
|
@@ -254,7 +254,7 @@ static int r600_cs_process_relocs(struct radeon_cs *cs,
|
||||
relocs = (struct r600_cs_reloc_legacy *)cs->relocs;
|
||||
restart:
|
||||
for (i = 0; i < cs->crelocs; i++) {
|
||||
uint32_t soffset, eoffset, asicoffset;
|
||||
uint32_t soffset, eoffset;
|
||||
|
||||
r = radeon_bo_legacy_validate(relocs[i].base.bo,
|
||||
&soffset, &eoffset);
|
||||
@@ -262,24 +262,12 @@ restart:
|
||||
goto restart;
|
||||
}
|
||||
if (r) {
|
||||
fprintf(stderr, "validated %p [0x%08X, 0x%08X]\n",
|
||||
fprintf(stderr, "invalid bo(%p) [0x%08X, 0x%08X]\n",
|
||||
relocs[i].base.bo, soffset, eoffset);
|
||||
return r;
|
||||
}
|
||||
asicoffset = soffset;
|
||||
|
||||
for (j = 0; j < relocs[i].cindices; j++) {
|
||||
if (asicoffset >= eoffset) {
|
||||
/* radeon_bo_debug(relocs[i].base.bo, 12); */
|
||||
fprintf(stderr, "validated %p [0x%08X, 0x%08X]\n",
|
||||
relocs[i].base.bo, soffset, eoffset);
|
||||
fprintf(stderr, "above end: %p 0x%08X 0x%08X\n",
|
||||
relocs[i].base.bo,
|
||||
cs->packets[relocs[i].indices[j]],
|
||||
eoffset);
|
||||
exit(0);
|
||||
return -EINVAL;
|
||||
}
|
||||
/* pkt3 nop header in ib chunk */
|
||||
cs->packets[relocs[i].reloc_indices[j]] = 0xC0001000;
|
||||
/* reloc index in ib chunk */
|
||||
@@ -287,7 +275,7 @@ restart:
|
||||
}
|
||||
|
||||
/* asic offset in reloc chunk */ /* see alex drm r600_nomm_relocate */
|
||||
reloc_chunk[offset_dw] = asicoffset;
|
||||
reloc_chunk[offset_dw] = soffset;
|
||||
reloc_chunk[offset_dw + 3] = 0;
|
||||
|
||||
offset_dw += 4;
|
||||
|
@@ -362,6 +362,7 @@ GLboolean r600CreateContext(const __GLcontextModes * glVisual,
|
||||
(&r600->radeon.optionCache, "disable_stencil_two_side"))
|
||||
_mesa_disable_extension(ctx, "GL_EXT_stencil_two_side");
|
||||
|
||||
#if 0
|
||||
if (r600->radeon.glCtx->Mesa_DXTn
|
||||
&& !driQueryOptionb(&r600->radeon.optionCache, "disable_s3tc")) {
|
||||
_mesa_enable_extension(ctx, "GL_EXT_texture_compression_s3tc");
|
||||
@@ -371,6 +372,9 @@ GLboolean r600CreateContext(const __GLcontextModes * glVisual,
|
||||
{
|
||||
_mesa_enable_extension(ctx, "GL_EXT_texture_compression_s3tc");
|
||||
}
|
||||
#else
|
||||
_mesa_disable_extension(ctx, "GL_ARB_texture_compression");
|
||||
#endif
|
||||
|
||||
radeon_fbo_init(&r600->radeon);
|
||||
radeonInitSpanFuncs( ctx );
|
||||
|
@@ -721,7 +721,9 @@ void r600SetTexOffset(__DRIcontext * pDRICtx, GLint texname,
|
||||
struct gl_texture_object *tObj =
|
||||
_mesa_lookup_texture(rmesa->radeon.glCtx, texname);
|
||||
radeonTexObjPtr t = radeon_tex_obj(tObj);
|
||||
uint32_t pitch_val, size;
|
||||
int firstlevel = t->mt ? t->mt->firstLevel : 0;
|
||||
const struct gl_texture_image *firstImage;
|
||||
uint32_t pitch_val, size, row_align, bpp;
|
||||
|
||||
if (!tObj)
|
||||
return;
|
||||
@@ -731,7 +733,13 @@ void r600SetTexOffset(__DRIcontext * pDRICtx, GLint texname,
|
||||
if (!offset)
|
||||
return;
|
||||
|
||||
size = pitch;//h * w * (depth / 8);
|
||||
bpp = depth / 8;
|
||||
if (bpp == 3)
|
||||
bpp = 4;
|
||||
|
||||
firstImage = t->base.Image[0][firstlevel];
|
||||
row_align = rmesa->radeon.texture_row_align - 1;
|
||||
size = ((firstImage->Width * bpp + row_align) & ~row_align) * firstImage->Height;
|
||||
if (t->bo) {
|
||||
radeon_bo_unref(t->bo);
|
||||
t->bo = NULL;
|
||||
|
@@ -336,7 +336,8 @@ unsigned int r700GetNumOperands(r700_AssemblerBase* pAsm)
|
||||
|
||||
switch (pAsm->D.dst.opcode)
|
||||
{
|
||||
case SQ_OP2_INST_ADD:
|
||||
case SQ_OP2_INST_ADD:
|
||||
case SQ_OP2_INST_KILLGT:
|
||||
case SQ_OP2_INST_MUL:
|
||||
case SQ_OP2_INST_MAX:
|
||||
case SQ_OP2_INST_MIN:
|
||||
@@ -354,9 +355,9 @@ unsigned int r700GetNumOperands(r700_AssemblerBase* pAsm)
|
||||
return 2;
|
||||
|
||||
case SQ_OP2_INST_MOV:
|
||||
case SQ_OP2_INST_MOVA_FLOOR:
|
||||
case SQ_OP2_INST_FRACT:
|
||||
case SQ_OP2_INST_FLOOR:
|
||||
case SQ_OP2_INST_KILLGT:
|
||||
case SQ_OP2_INST_EXP_IEEE:
|
||||
case SQ_OP2_INST_LOG_CLAMPED:
|
||||
case SQ_OP2_INST_LOG_IEEE:
|
||||
@@ -1180,8 +1181,10 @@ GLboolean tex_src(r700_AssemblerBase *pAsm)
|
||||
case PROGRAM_INPUT:
|
||||
switch (pILInst->SrcReg[0].Index)
|
||||
{
|
||||
case FRAG_ATTRIB_WPOS:
|
||||
case FRAG_ATTRIB_COL0:
|
||||
case FRAG_ATTRIB_COL1:
|
||||
case FRAG_ATTRIB_FOGC:
|
||||
case FRAG_ATTRIB_TEX0:
|
||||
case FRAG_ATTRIB_TEX1:
|
||||
case FRAG_ATTRIB_TEX2:
|
||||
@@ -1194,7 +1197,16 @@ GLboolean tex_src(r700_AssemblerBase *pAsm)
|
||||
pAsm->S[0].src.reg =
|
||||
pAsm->uiFP_AttributeMap[pILInst->SrcReg[0].Index];
|
||||
pAsm->S[0].src.rtype = SRC_REG_INPUT;
|
||||
break;
|
||||
break;
|
||||
case FRAG_ATTRIB_FACE:
|
||||
fprintf(stderr, "FRAG_ATTRIB_FACE unsupported\n");
|
||||
break;
|
||||
case FRAG_ATTRIB_PNTC:
|
||||
fprintf(stderr, "FRAG_ATTRIB_PNTC unsupported\n");
|
||||
break;
|
||||
case FRAG_ATTRIB_VAR0:
|
||||
fprintf(stderr, "FRAG_ATTRIB_VAR0 unsupported\n");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -2053,7 +2065,7 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm)
|
||||
}
|
||||
|
||||
//other bits
|
||||
alu_instruction_ptr->m_Word0.f.index_mode = SQ_INDEX_LOOP;
|
||||
alu_instruction_ptr->m_Word0.f.index_mode = SQ_INDEX_AR_X;
|
||||
|
||||
if( (is_single_scalar_operation == GL_TRUE)
|
||||
|| (GL_TRUE == bSplitInst) )
|
||||
@@ -2387,6 +2399,35 @@ GLboolean assemble_ADD(r700_AssemblerBase *pAsm)
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
GLboolean assemble_ARL(r700_AssemblerBase *pAsm)
|
||||
{ /* TODO: ar values dont' persist between clauses */
|
||||
if( GL_FALSE == checkop1(pAsm) )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
pAsm->D.dst.opcode = SQ_OP2_INST_MOVA_FLOOR;
|
||||
setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE);
|
||||
pAsm->D.dst.rtype = DST_REG_TEMPORARY;
|
||||
pAsm->D.dst.reg = 0;
|
||||
pAsm->D.dst.writex = 0;
|
||||
pAsm->D.dst.writey = 0;
|
||||
pAsm->D.dst.writez = 0;
|
||||
pAsm->D.dst.writew = 0;
|
||||
|
||||
if( GL_FALSE == assemble_src(pAsm, 0, -1) )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if( GL_FALSE == next_ins(pAsm) )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
GLboolean assemble_BAD(char *opcode_str)
|
||||
{
|
||||
radeon_error("Not yet implemented instruction (%s)\n", opcode_str);
|
||||
@@ -2508,7 +2549,7 @@ GLboolean assemble_DOT(r700_AssemblerBase *pAsm)
|
||||
}
|
||||
else if(pAsm->pILInst[pAsm->uiCurInst].Opcode == OPCODE_DPH)
|
||||
{
|
||||
onecomp_PVSSRC(&(pAsm->S[1].src), 3);
|
||||
onecomp_PVSSRC(&(pAsm->S[0].src), 3);
|
||||
}
|
||||
|
||||
if ( GL_FALSE == next_ins(pAsm) )
|
||||
@@ -2617,15 +2658,15 @@ GLboolean assemble_FRC(r700_AssemblerBase *pAsm)
|
||||
|
||||
GLboolean assemble_KIL(r700_AssemblerBase *pAsm)
|
||||
{
|
||||
/* TODO: doc says KILL has to be last(end) ALU clause */
|
||||
|
||||
checkop1(pAsm);
|
||||
|
||||
pAsm->D.dst.opcode = SQ_OP2_INST_KILLGT;
|
||||
|
||||
if ( GL_FALSE == assemble_dst(pAsm) )
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE);
|
||||
pAsm->D.dst.rtype = DST_REG_TEMPORARY;
|
||||
pAsm->D.dst.reg = 0;
|
||||
pAsm->D.dst.writex = 0;
|
||||
pAsm->D.dst.writey = 0;
|
||||
pAsm->D.dst.writez = 0;
|
||||
@@ -2638,19 +2679,10 @@ GLboolean assemble_KIL(r700_AssemblerBase *pAsm)
|
||||
setswizzle_PVSSRC(&(pAsm->S[0].src), SQ_SEL_0);
|
||||
noneg_PVSSRC(&(pAsm->S[0].src));
|
||||
|
||||
pAsm->S[1].src.rtype = SRC_REG_TEMPORARY;
|
||||
|
||||
if(PROGRAM_TEMPORARY == pAsm->pILInst[pAsm->uiCurInst].DstReg.File)
|
||||
if ( GL_FALSE == assemble_src(pAsm, 0, 1) )
|
||||
{
|
||||
pAsm->S[1].src.reg = pAsm->pILInst[pAsm->uiCurInst].DstReg.Index + pAsm->starting_temp_register_number;
|
||||
return GL_FALSE;
|
||||
}
|
||||
else
|
||||
{ //PROGRAM_OUTPUT
|
||||
pAsm->S[1].src.reg = pAsm->uiFP_OutputMap[pAsm->pILInst[pAsm->uiCurInst].DstReg.Index];
|
||||
}
|
||||
|
||||
setaddrmode_PVSSRC(&(pAsm->S[1].src), ADDR_ABSOLUTE);
|
||||
noswizzle_PVSSRC(&(pAsm->S[1].src));
|
||||
|
||||
if ( GL_FALSE == next_ins(pAsm) )
|
||||
{
|
||||
@@ -2908,6 +2940,7 @@ GLboolean assemble_LIT(r700_AssemblerBase *pAsm)
|
||||
pAsm->S[0].src.rtype = srcType;
|
||||
pAsm->S[0].src.reg = srcReg;
|
||||
setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE);
|
||||
swizzleagain_PVSSRC(&(pAsm->S[0].src), SQ_SEL_X, SQ_SEL_X, SQ_SEL_X, SQ_SEL_X);
|
||||
pAsm->S[1].src.rtype = SRC_REG_TEMPORARY;
|
||||
pAsm->S[1].src.reg = tmp;
|
||||
setaddrmode_PVSSRC(&(pAsm->S[1].src), ADDR_ABSOLUTE);
|
||||
@@ -3809,8 +3842,7 @@ GLboolean AssembleInstr(GLuint uiNumberInsts,
|
||||
break;
|
||||
|
||||
case OPCODE_ARL:
|
||||
radeon_error("Not yet implemented instruction OPCODE_ARL \n");
|
||||
//if ( GL_FALSE == assemble_BAD("ARL") )
|
||||
if ( GL_FALSE == assemble_ARL(pR700AsmCode) )
|
||||
return GL_FALSE;
|
||||
break;
|
||||
case OPCODE_ARR:
|
||||
@@ -4155,6 +4187,7 @@ GLboolean Process_Fragment_Exports(r700_AssemblerBase *pR700AsmCode,
|
||||
GLbitfield OutputsWritten)
|
||||
{
|
||||
unsigned int unBit;
|
||||
GLuint export_count = 0;
|
||||
|
||||
if(pR700AsmCode->depth_export_register_number >= 0)
|
||||
{
|
||||
@@ -4176,6 +4209,7 @@ GLboolean Process_Fragment_Exports(r700_AssemblerBase *pR700AsmCode,
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
export_count++;
|
||||
}
|
||||
unBit = 1 << FRAG_RESULT_DEPTH;
|
||||
if(OutputsWritten & unBit)
|
||||
@@ -4189,8 +4223,15 @@ GLboolean Process_Fragment_Exports(r700_AssemblerBase *pR700AsmCode,
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
export_count++;
|
||||
}
|
||||
|
||||
/* Need to export something, otherwise we'll hang
|
||||
* results are undefined anyway */
|
||||
if(export_count == 0)
|
||||
{
|
||||
Process_Export(pR700AsmCode, SQ_EXPORT_PIXEL, 0, 1, 0, GL_FALSE);
|
||||
}
|
||||
|
||||
if(pR700AsmCode->cf_last_export_ptr != NULL)
|
||||
{
|
||||
pR700AsmCode->cf_last_export_ptr->m_Word1.f.cf_inst = SQ_CF_INST_EXPORT_DONE;
|
||||
|
@@ -461,6 +461,7 @@ GLboolean next_ins(r700_AssemblerBase *pAsm);
|
||||
GLboolean assemble_math_function(r700_AssemblerBase* pAsm, BITS opcode);
|
||||
GLboolean assemble_ABS(r700_AssemblerBase *pAsm);
|
||||
GLboolean assemble_ADD(r700_AssemblerBase *pAsm);
|
||||
GLboolean assemble_ARL(r700_AssemblerBase *pAsm);
|
||||
GLboolean assemble_BAD(char *opcode_str);
|
||||
GLboolean assemble_CMP(r700_AssemblerBase *pAsm);
|
||||
GLboolean assemble_COS(r700_AssemblerBase *pAsm);
|
||||
|
@@ -794,8 +794,7 @@ static void r700SendDBState(GLcontext *ctx, struct radeon_state_atom *atom)
|
||||
BATCH_LOCALS(&context->radeon);
|
||||
radeon_print(RADEON_STATE, RADEON_VERBOSE, "%s\n", __func__);
|
||||
|
||||
BEGIN_BATCH_NO_AUTOSTATE(23);
|
||||
R600_OUT_BATCH_REGVAL(DB_HTILE_DATA_BASE, r700->DB_HTILE_DATA_BASE.u32All);
|
||||
BEGIN_BATCH_NO_AUTOSTATE(17);
|
||||
|
||||
R600_OUT_BATCH_REGSEQ(DB_STENCIL_CLEAR, 2);
|
||||
R600_OUT_BATCH(r700->DB_STENCIL_CLEAR.u32All);
|
||||
@@ -808,7 +807,6 @@ static void r700SendDBState(GLcontext *ctx, struct radeon_state_atom *atom)
|
||||
R600_OUT_BATCH(r700->DB_RENDER_CONTROL.u32All);
|
||||
R600_OUT_BATCH(r700->DB_RENDER_OVERRIDE.u32All);
|
||||
|
||||
R600_OUT_BATCH_REGVAL(DB_HTILE_SURFACE, r700->DB_HTILE_SURFACE.u32All);
|
||||
R600_OUT_BATCH_REGVAL(DB_ALPHA_TO_MASK, r700->DB_ALPHA_TO_MASK.u32All);
|
||||
|
||||
END_BATCH();
|
||||
@@ -1239,7 +1237,7 @@ void r600InitAtoms(context_t *context)
|
||||
context->radeon.hw.atomlist.name = "atom-list";
|
||||
|
||||
ALLOC_STATE(sq, always, 34, r700SendSQConfig);
|
||||
ALLOC_STATE(db, always, 23, r700SendDBState);
|
||||
ALLOC_STATE(db, always, 17, r700SendDBState);
|
||||
ALLOC_STATE(stencil, always, 4, r700SendStencilState);
|
||||
ALLOC_STATE(db_target, always, 12, r700SendDepthTargetState);
|
||||
ALLOC_STATE(sc, always, 15, r700SendSCState);
|
||||
|
@@ -135,15 +135,19 @@ GLboolean Find_Instruction_Dependencies_fp(struct r700_fragment_program *fp,
|
||||
{
|
||||
GLuint i, j;
|
||||
GLint * puiTEMPwrites;
|
||||
GLint * puiTEMPreads;
|
||||
struct prog_instruction * pILInst;
|
||||
InstDeps *pInstDeps;
|
||||
struct prog_instruction * texcoord_DepInst;
|
||||
GLint nDepInstID;
|
||||
|
||||
puiTEMPwrites = (GLint*) MALLOC(sizeof(GLuint)*mesa_fp->Base.NumTemporaries);
|
||||
puiTEMPreads = (GLint*) MALLOC(sizeof(GLuint)*mesa_fp->Base.NumTemporaries);
|
||||
|
||||
for(i=0; i<mesa_fp->Base.NumTemporaries; i++)
|
||||
{
|
||||
puiTEMPwrites[i] = -1;
|
||||
puiTEMPreads[i] = -1;
|
||||
}
|
||||
|
||||
pInstDeps = (InstDeps*)MALLOC(sizeof(InstDeps)*mesa_fp->Base.NumInstructions);
|
||||
@@ -167,6 +171,11 @@ GLboolean Find_Instruction_Dependencies_fp(struct r700_fragment_program *fp,
|
||||
{
|
||||
//Set dep.
|
||||
pInstDeps[i].nSrcDeps[j] = puiTEMPwrites[pILInst->SrcReg[j].Index];
|
||||
//Set first read
|
||||
if(puiTEMPreads[pILInst->SrcReg[j].Index] < 0 )
|
||||
{
|
||||
puiTEMPreads[pILInst->SrcReg[j].Index] = i;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -177,8 +186,6 @@ GLboolean Find_Instruction_Dependencies_fp(struct r700_fragment_program *fp,
|
||||
|
||||
fp->r700AsmCode.pInstDeps = pInstDeps;
|
||||
|
||||
FREE(puiTEMPwrites);
|
||||
|
||||
//Find dep for tex inst
|
||||
for(i=0; i<mesa_fp->Base.NumInstructions; i++)
|
||||
{
|
||||
@@ -203,9 +210,25 @@ GLboolean Find_Instruction_Dependencies_fp(struct r700_fragment_program *fp,
|
||||
{ //... other deps?
|
||||
}
|
||||
}
|
||||
// make sure that we dont overwrite src used earlier
|
||||
nDepInstID = puiTEMPreads[pILInst->DstReg.Index];
|
||||
if(nDepInstID < i)
|
||||
{
|
||||
pInstDeps[i].nDstDep = puiTEMPreads[pILInst->DstReg.Index];
|
||||
texcoord_DepInst = &(mesa_fp->Base.Instructions[nDepInstID]);
|
||||
if(GL_TRUE == IsAlu(texcoord_DepInst->Opcode) )
|
||||
{
|
||||
pInstDeps[nDepInstID].nDstDep = i;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
FREE(puiTEMPwrites);
|
||||
FREE(puiTEMPreads);
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
@@ -251,7 +274,15 @@ GLboolean r700TranslateFragmentShader(struct r700_fragment_program *fp,
|
||||
number_of_colors_exported--;
|
||||
}
|
||||
|
||||
fp->r700Shader.exportMode = number_of_colors_exported << 1 | z_enabled;
|
||||
/* illegal to set this to 0 */
|
||||
if(number_of_colors_exported || z_enabled)
|
||||
{
|
||||
fp->r700Shader.exportMode = number_of_colors_exported << 1 | z_enabled;
|
||||
}
|
||||
else
|
||||
{
|
||||
fp->r700Shader.exportMode = (1 << 1);
|
||||
}
|
||||
|
||||
fp->translated = GL_TRUE;
|
||||
|
||||
@@ -341,6 +372,11 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx)
|
||||
SETbit(r700->SPI_PS_IN_CONTROL_0.u32All, POSITION_ENA_bit);
|
||||
SETbit(r700->SPI_INPUT_Z.u32All, PROVIDE_Z_TO_SPI_bit);
|
||||
}
|
||||
else
|
||||
{
|
||||
CLEARbit(r700->SPI_PS_IN_CONTROL_0.u32All, POSITION_ENA_bit);
|
||||
CLEARbit(r700->SPI_INPUT_Z.u32All, PROVIDE_Z_TO_SPI_bit);
|
||||
}
|
||||
|
||||
ui = (unNumOfReg < ui) ? ui : unNumOfReg;
|
||||
|
||||
|
@@ -40,6 +40,24 @@
|
||||
#include "r700_vertprog.h"
|
||||
|
||||
|
||||
static void freeVertProgCache(GLcontext *ctx, struct r700_vertex_program_cont *cache)
|
||||
{
|
||||
struct r700_vertex_program *tmp, *vp = cache->progs;
|
||||
|
||||
while (vp) {
|
||||
tmp = vp->next;
|
||||
/* Release DMA region */
|
||||
r600DeleteShader(ctx, vp->shaderbo);
|
||||
/* Clean up */
|
||||
Clean_Up_Assembler(&(vp->r700AsmCode));
|
||||
Clean_Up_Shader(&(vp->r700Shader));
|
||||
|
||||
_mesa_reference_vertprog(ctx, &vp->mesa_program, NULL);
|
||||
_mesa_free(vp);
|
||||
vp = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
static struct gl_program *r700NewProgram(GLcontext * ctx,
|
||||
GLenum target,
|
||||
GLuint id)
|
||||
@@ -84,8 +102,7 @@ static struct gl_program *r700NewProgram(GLcontext * ctx,
|
||||
|
||||
static void r700DeleteProgram(GLcontext * ctx, struct gl_program *prog)
|
||||
{
|
||||
struct r700_vertex_program_cont * vpc;
|
||||
struct r700_vertex_program *vp, *tmp;
|
||||
struct r700_vertex_program_cont *vpc = (struct r700_vertex_program_cont *)prog;
|
||||
struct r700_fragment_program * fp;
|
||||
|
||||
radeon_print(RADEON_SHADER, RADEON_VERBOSE,
|
||||
@@ -95,20 +112,7 @@ static void r700DeleteProgram(GLcontext * ctx, struct gl_program *prog)
|
||||
{
|
||||
case GL_VERTEX_STATE_PROGRAM_NV:
|
||||
case GL_VERTEX_PROGRAM_ARB:
|
||||
vpc = (struct r700_vertex_program_cont*)prog;
|
||||
vp = vpc->progs;
|
||||
while (vp) {
|
||||
tmp = vp->next;
|
||||
/* Release DMA region */
|
||||
|
||||
r600DeleteShader(ctx, vp->shaderbo);
|
||||
|
||||
/* Clean up */
|
||||
Clean_Up_Assembler(&(vp->r700AsmCode));
|
||||
Clean_Up_Shader(&(vp->r700Shader));
|
||||
_mesa_free(vp);
|
||||
vp = tmp;
|
||||
}
|
||||
freeVertProgCache(ctx, vpc);
|
||||
break;
|
||||
case GL_FRAGMENT_PROGRAM_NV:
|
||||
case GL_FRAGMENT_PROGRAM_ARB:
|
||||
@@ -131,7 +135,24 @@ static void r700DeleteProgram(GLcontext * ctx, struct gl_program *prog)
|
||||
static void
|
||||
r700ProgramStringNotify(GLcontext * ctx, GLenum target, struct gl_program *prog)
|
||||
{
|
||||
struct r700_vertex_program_cont *vpc = (struct r700_vertex_program_cont *)prog;
|
||||
struct r700_fragment_program * fp = (struct r700_fragment_program*)prog;
|
||||
|
||||
switch (target) {
|
||||
case GL_VERTEX_PROGRAM_ARB:
|
||||
freeVertProgCache(ctx, vpc);
|
||||
vpc->progs = NULL;
|
||||
break;
|
||||
case GL_FRAGMENT_PROGRAM_ARB:
|
||||
r600DeleteShader(ctx, fp->shaderbo);
|
||||
Clean_Up_Assembler(&(fp->r700AsmCode));
|
||||
Clean_Up_Shader(&(fp->r700Shader));
|
||||
fp->translated = GL_FALSE;
|
||||
fp->loaded = GL_FALSE;
|
||||
fp->shaderbo = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static GLboolean r700IsProgramNative(GLcontext * ctx, GLenum target, struct gl_program *prog)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user