Merge branch 'master' into my-XACE-SELINUX

This commit is contained in:
Eamon Walsh 2007-02-15 09:27:05 -05:00 committed by Eamon Walsh
commit 04632835b7
109 changed files with 6190 additions and 1369 deletions

56
GL/glx/glxbyteorder.h Normal file
View File

@ -0,0 +1,56 @@
/*
* (C) Copyright IBM Corporation 2006, 2007
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sub license,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
* THE COPYRIGHT HOLDERS, THE AUTHORS, AND/OR THEIR SUPPLIERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/**
* \file glxbyteorder.h
* Platform glue for handling byte-ordering issues in GLX protocol.
*
* \author Ian Romanick <idr@us.ibm.com>
*/
#if !defined(__GLXBYTEORDER_H__)
#define __GLXBYTEORDER_H__
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#if HAVE_BYTESWAP_H
#include <byteswap.h>
#elif defined(USE_SYS_ENDIAN_H)
#include <sys/endian.h>
#else
#define bswap_16(value) \
((((value) & 0xff) << 8) | ((value) >> 8))
#define bswap_32(value) \
(((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \
(uint32_t)bswap_16((uint16_t)((value) >> 16)))
#define bswap_64(value) \
(((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \
<< 32) | \
(uint64_t)bswap_32((uint32_t)((value) >> 32)))
#endif
#endif /* !defined(__GLXBYTEORDER_H__) */

View File

@ -864,6 +864,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
int api_ver = COPY_SUB_BUFFER_INTERNAL_VERSION;
drm_magic_t magic;
drmVersionPtr version;
int newlyopened;
char *driverName;
drm_handle_t hFB;
int junk;
@ -914,10 +915,10 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
goto handle_error;
}
fd = drmOpen(NULL, BusID);
fd = drmOpenOnce(NULL, BusID, &newlyopened);
if (fd < 0) {
LogMessage(X_ERROR, "AIGLX error: drmOpen failed (%s)\n",
LogMessage(X_ERROR, "AIGLX error: drmOpenOnce failed (%s)\n",
strerror(-fd));
goto handle_error;
}
@ -940,7 +941,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
drm_version.patch = -1;
}
if (!DRIAuthConnection(pScreen, magic)) {
if (newlyopened && !DRIAuthConnection(pScreen, magic)) {
LogMessage(X_ERROR, "AIGLX error: DRIAuthConnection failed\n");
goto handle_error;
}
@ -1082,7 +1083,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
xfree(dev_priv);
if (fd >= 0)
drmClose(fd);
drmCloseOnce(fd);
DRICloseConnection(pScreen);

View File

@ -33,6 +33,7 @@
#include "indirect_size_get.h"
#include "indirect_dispatch.h"
#include "glxserver.h"
#include "glxbyteorder.h"
#include "indirect_util.h"
#include "singlesize.h"
#include "glapitable.h"

View File

@ -28,24 +28,12 @@
#include <X11/Xmd.h>
#include <GL/gl.h>
#include <GL/glxproto.h>
#if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
#include <byteswap.h>
#elif defined(__OpenBSD__)
#include <sys/endian.h>
#define bswap_16 __swap16
#define bswap_32 __swap32
#define bswap_64 __swap64
#else
#include <sys/endian.h>
#define bswap_16 bswap16
#define bswap_32 bswap32
#define bswap_64 bswap64
#endif
#include <inttypes.h>
#include "indirect_size.h"
#include "indirect_size_get.h"
#include "indirect_dispatch.h"
#include "glxserver.h"
#include "glxbyteorder.h"
#include "indirect_util.h"
#include "singlesize.h"
#include "glapitable.h"

View File

@ -35,6 +35,7 @@
#endif
#include "glxserver.h"
#include "glxbyteorder.h"
#include "glxext.h"
#include "singlesize.h"
#include "unpack.h"
@ -46,20 +47,6 @@
#include "dispatch.h"
#include "glapioffsets.h"
#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
#include <byteswap.h>
#elif defined(__OpenBSD__)
#include <sys/endian.h>
#define bswap_16 __swap16
#define bswap_32 __swap32
#define bswap_64 __swap64
#else
#include <sys/endian.h>
#define bswap_16 bswap16
#define bswap_32 bswap32
#define bswap_64 bswap64
#endif
static int DoGetProgramString(struct __GLXclientStateRec *cl, GLbyte *pc,
unsigned get_programiv_offset, unsigned get_program_string_offset,
Bool do_swap);

File diff suppressed because it is too large Load Diff

View File

@ -83,14 +83,15 @@ extern PURE HIDDEN int __glXConvolutionParameterivReqSize(const GLbyte *pc, Bool
extern PURE HIDDEN int __glXSeparableFilter2DReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXTexImage3DReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXTexSubImage3DReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXCompressedTexImage1DARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXCompressedTexImage2DARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXCompressedTexImage3DARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXCompressedTexSubImage1DARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXCompressedTexSubImage2DARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXCompressedTexSubImage3DARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXProgramStringARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXDrawBuffersARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXPointParameterfvEXTReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXCompressedTexImage3DARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXCompressedTexImage2DARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXCompressedTexImage1DARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXCompressedTexSubImage3DARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXCompressedTexSubImage2DARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXCompressedTexSubImage1DARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXLoadProgramNVReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXProgramParameters4dvNVReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXProgramParameters4fvNVReqSize(const GLbyte *pc, Bool swap);
@ -109,11 +110,10 @@ extern PURE HIDDEN int __glXVertexAttribs4fvNVReqSize(const GLbyte *pc, Bool swa
extern PURE HIDDEN int __glXVertexAttribs4svNVReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXVertexAttribs4ubvNVReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXPointParameterivNVReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXProgramStringARBReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXProgramNamedParameter4fvNVReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXProgramNamedParameter4dvNVReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXDeleteRenderbuffersEXTReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXProgramNamedParameter4fvNVReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXDeleteFramebuffersEXTReqSize(const GLbyte *pc, Bool swap);
extern PURE HIDDEN int __glXDeleteRenderbuffersEXTReqSize(const GLbyte *pc, Bool swap);
# undef HIDDEN
# undef PURE

View File

@ -29,6 +29,7 @@
#endif
#include "glxserver.h"
#include "glxbyteorder.h"
#include "glxext.h"
#include "singlesize.h"
#include "unpack.h"
@ -39,20 +40,6 @@
#include "glthread.h"
#include "dispatch.h"
#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
#include <byteswap.h>
#elif defined(__OpenBSD__)
#include <sys/endian.h>
#define bswap_16 __swap16
#define bswap_32 __swap32
#define bswap_64 __swap64
#else
#include <sys/endian.h>
#define bswap_16 bswap16
#define bswap_32 bswap32
#define bswap_64 bswap64
#endif
int __glXDisp_GetCompressedTexImageARB(struct __GLXclientStateRec *cl, GLbyte *pc)
{
xGLXSingleReq * const req = (xGLXSingleReq *) pc;

View File

@ -23,29 +23,21 @@
* SOFTWARE.
*/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#include <string.h>
#include <X11/Xmd.h>
#include <GL/gl.h>
#include <GL/glxproto.h>
#if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
#include <byteswap.h>
#elif defined(__OpenBSD__)
#include <sys/endian.h>
#define bswap_16 __swap16
#define bswap_32 __swap32
#define bswap_64 __swap64
#else
#include <sys/endian.h>
#define bswap_16 bswap16
#define bswap_32 bswap32
#define bswap_64 bswap64
#endif
#include <inttypes.h>
#include "indirect_size.h"
#include "indirect_size_get.h"
#include "indirect_dispatch.h"
#include "glxserver.h"
#include "glxbyteorder.h"
#include "singlesize.h"
#include "glapitable.h"
#include "glapi.h"

View File

@ -39,20 +39,7 @@
#include "glthread.h"
#include "dispatch.h"
#include "glapioffsets.h"
#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
#include <byteswap.h>
#elif defined(__OpenBSD__)
#include <sys/endian.h>
#define bswap_16 __swap16
#define bswap_32 __swap32
#define bswap_64 __swap64
#else
#include <sys/endian.h>
#define bswap_16 bswap16
#define bswap_32 bswap32
#define bswap_64 bswap64
#endif
#include "glxbyteorder.h"
static int DoSwapInterval(__GLXclientState *cl, GLbyte *pc, int do_swap);

4
GL/mesa/.gitignore vendored
View File

@ -2,8 +2,6 @@ X/drivers
X/glxheader.h
X/xmesaP.h
X/xm*.c
array_cache/*.c
array_cache/*.h
mesa/drivers
mesa/glxheader.h
mesa/xm*.c
@ -30,3 +28,5 @@ tnl/*.c
tnl/*.h
x86
x86-64
vbo/*.c
vbo/*.h

View File

@ -1,15 +1,15 @@
SUBDIRS = main math array_cache swrast swrast_setup tnl shader X glapi
SUBDIRS = main math swrast swrast_setup tnl shader X glapi vbo
noinst_LTLIBRARIES = libGLcore.la
libGLcore_la_SOURCES = dummy.c
libGLcore_la_LIBADD = main/libmain.la \
math/libmath.la \
array_cache/libac.la \
swrast/libswrast.la \
swrast_setup/libss.la \
tnl/libtnl.la \
shader/libshader.la \
shader/grammar/libgrammar.la \
shader/slang/libslang.la \
vbo/libvbo.la \
X/libX.la

View File

@ -2,7 +2,6 @@ noinst_LTLIBRARIES = libX.la
INCLUDES = -I@MESA_SOURCE@/include \
-I../X \
-I../array_cache \
-I../glapi \
-I../main \
-I../math \

View File

@ -78,6 +78,7 @@ typedef struct __GLXMESAdrawable __GLXMESAdrawable;
struct __GLXMESAscreen {
__GLXscreen base;
int index;
int num_vis;
XMesaVisual *xm_vis;
};
@ -280,7 +281,7 @@ __glXMesaScreenDestroy(__GLXscreen *screen)
__GLXMESAscreen *mesaScreen = (__GLXMESAscreen *) screen;
int i;
for (i = 0; i < screen->numVisuals; i++) {
for (i = 0; i < mesaScreen->num_vis; i++) {
if (mesaScreen->xm_vis[i])
XMesaDestroyVisual(mesaScreen->xm_vis[i]);
}
@ -389,6 +390,7 @@ static void init_screen_visuals(__GLXMESAscreen *screen)
xfree(used);
screen->num_vis = pScreen->numVisuals;
screen->xm_vis = pXMesaVisual;
}

View File

@ -1,21 +0,0 @@
noinst_LTLIBRARIES = libac.la
AM_CFLAGS = \
$(DIX_CFLAGS) \
-DXFree86Server \
@GLX_DEFINES@
INCLUDES = -I@MESA_SOURCE@/include \
-I../X \
-I../array_cache \
-I../glapi \
-I../main \
-I../math \
-I../shader \
-I../swrast \
-I../swrast_setup \
-I../tnl \
-I.. \
-I$(top_srcdir)/hw/xfree86/os-support
nodist_libac_la_SOURCES = ac_context.c ac_import.c

View File

@ -7,7 +7,6 @@ AM_CFLAGS = \
INCLUDES = -I@MESA_SOURCE@/include \
-I../X \
-I../array_cache \
-I../glapi \
-I../main \
-I../math \

View File

@ -7,7 +7,6 @@ AM_CFLAGS = \
INCLUDES = -I@MESA_SOURCE@/include \
-I../X \
-I../array_cache \
-I../glapi \
-I../main \
-I../math \

View File

@ -7,7 +7,6 @@ AM_CFLAGS = \
INCLUDES = -I@MESA_SOURCE@/include \
-I../X \
-I../array_cache \
-I../glapi \
-I../main \
-I../math \

View File

@ -9,7 +9,6 @@ AM_CFLAGS = \
INCLUDES = -I@MESA_SOURCE@/include \
-I../X \
-I../array_cache \
-I../glapi \
-I../main \
-I../math \

View File

@ -7,7 +7,6 @@ AM_CFLAGS = \
INCLUDES = -I@MESA_SOURCE@/include \
-I../../X \
-I../../array_cache \
-I../../glapi \
-I../../main \
-I../../math \

View File

@ -8,7 +8,6 @@ AM_CFLAGS = \
INCLUDES = -I@MESA_SOURCE@/include \
-I../grammar \
-I../../X \
-I../../array_cache \
-I../../glapi \
-I../../main \
-I../../math \

View File

@ -7,7 +7,6 @@ AM_CFLAGS = \
INCLUDES = -I@MESA_SOURCE@/include \
-I../X \
-I../array_cache \
-I../glapi \
-I../main \
-I../math \

View File

@ -7,7 +7,6 @@ AM_CFLAGS = \
INCLUDES = -I@MESA_SOURCE@/include \
-I../X \
-I../array_cache \
-I../glapi \
-I../main \
-I../math \

View File

@ -7,7 +7,6 @@ AM_CFLAGS = \
INCLUDES = -I@MESA_SOURCE@/include \
-I../X \
-I../array_cache \
-I../glapi \
-I../main \
-I../math \
@ -19,13 +18,9 @@ INCLUDES = -I@MESA_SOURCE@/include \
-I.. \
-I$(top_srcdir)/hw/xfree86/os-support
nodist_libtnl_la_SOURCES = t_array_api.c \
t_array_import.c \
t_context.c \
nodist_libtnl_la_SOURCES = t_context.c \
t_draw.c \
t_pipeline.c \
t_save_api.c \
t_save_loopback.c \
t_save_playback.c \
t_vb_arbprogram.c \
t_vb_arbprogram_sse.c \
t_vb_arbshader.c \
@ -42,9 +37,4 @@ nodist_libtnl_la_SOURCES = t_array_api.c \
t_vertex.c \
t_vertex_generic.c \
t_vertex_sse.c \
t_vp_build.c \
t_vtx_api.c \
t_vtx_eval.c \
t_vtx_exec.c \
t_vtx_generic.c \
t_vtx_x86.c
t_vp_build.c

35
GL/mesa/vbo/Makefile.am Normal file
View File

@ -0,0 +1,35 @@
noinst_LTLIBRARIES = libvbo.la
AM_CFLAGS = \
$(DIX_CFLAGS) \
-DXFree86Server \
@GLX_DEFINES@
INCLUDES = -I@MESA_SOURCE@/include \
-I../X \
-I../glapi \
-I../main \
-I../math \
-I../shader \
-I../shader/slang \
-I../shader/slang \
-I../swrast \
-I../swrast_setup \
-I../tnl \
-I.. \
-I$(top_srcdir)/hw/xfree86/os-support
nodist_libvbo_la_SOURCES = vbo_context.c \
vbo_exec_api.c \
vbo_exec_array.c \
vbo_exec.c \
vbo_exec_draw.c \
vbo_exec_eval.c \
vbo_rebase.c \
vbo_save_api.c \
vbo_save.c \
vbo_save_draw.c \
vbo_save_loopback.c \
vbo_split.c \
vbo_split_copy.c \
vbo_split_inplace.c

View File

@ -85,15 +85,6 @@ symlink_mesa_math() {
done
}
symlink_mesa_ac() {
src_dir src/mesa/array_cache
dst_dir mesa/array_cache
for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
action `basename $src`
done
}
symlink_mesa_swrast() {
src_dir src/mesa/swrast
dst_dir mesa/swrast
@ -157,6 +148,15 @@ symlink_mesa_shader_slang_library() {
done
}
symlink_mesa_vbo() {
src_dir src/mesa/vbo
dst_dir mesa/vbo
for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
action `basename $src`
done
}
symlink_mesa_x() {
src_dir src/mesa/drivers/x11
dst_dir mesa/X
@ -203,7 +203,6 @@ symlink_mesa_x8664() {
symlink_mesa() {
symlink_mesa_main
symlink_mesa_math
symlink_mesa_ac
symlink_mesa_swrast
symlink_mesa_ss
symlink_mesa_tnl
@ -215,6 +214,7 @@ symlink_mesa() {
symlink_mesa_glapi
symlink_mesa_ppc
symlink_mesa_sparc
symlink_mesa_vbo
symlink_mesa_x86
symlink_mesa_x8664
}

View File

@ -946,10 +946,10 @@ SecurityAuditResourceIDAccess(
* rtype is its type or class.
* access_mode represents the intended use of the resource; see
* resource.h.
* rval is a pointer to the resource structure for this resource.
* res is a pointer to the resource structure for this resource.
*
* Returns:
* If access is granted, the value of rval that was passed in, else NULL.
* If access is granted, the value of rval that was passed in, else FALSE.
*
* Side Effects:
* Disallowed resource accesses are audited.

View File

@ -32,10 +32,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <X11/X.h>
#include <X11/Xmd.h>
#include "servermd.h"
#if defined(XFREE86) || ( defined(__OpenBSD__) && defined(__alpha__) ) \
|| (defined(__bsdi__))
#include "compiler.h"
#endif
/*
* ==========================================================================

View File

@ -99,6 +99,64 @@ fi
AC_TYPE_PID_T
# Checks for headers/macros for byte swapping
# Known variants:
# <byteswap.h> bswap_16, bswap_32, bswap_64 (glibc)
# <sys/endian.h> __swap16, __swap32, __swap64 (OpenBSD)
# <sys/endian.h> bswap16, bswap32, bswap64 (other BSD's)
# and a fallback to local macros if none of the above are found
# if <byteswap.h> is found, assume it's the correct version
AC_CHECK_HEADERS([byteswap.h])
# if <sys/endian.h> is found, have to check which version
AC_CHECK_HEADER([sys/endian.h], [HAVE_SYS_ENDIAN_H="yes"], [HAVE_SYS_ENDIAN_H="no"])
if test "x$HAVE_SYS_ENDIAN_H" = "xyes" ; then
AC_MSG_CHECKING([for __swap16 variant of <sys/endian.h> byteswapping macros])
AC_LINK_IFELSE([AC_LANG_PROGRAM([
#include <sys/endian.h>
], [
int a = 1, b;
b = __swap16(a);
])
], [SYS_ENDIAN__SWAP='yes'], [SYS_ENDIAN__SWAP='no'])
AC_MSG_RESULT([$SYS_ENDIAN__SWAP])
AC_MSG_CHECKING([for bswap_16 variant of <sys/endian.h> byteswapping macros])
AC_LINK_IFELSE([AC_LANG_PROGRAM([
#include <sys/endian.h>
], [
int a = 1, b;
b = bswap_16(a);
])
], [SYS_ENDIAN_BSWAP='yes'], [SYS_ENDIAN_BSWAP='no'])
AC_MSG_RESULT([$SYS_ENDIAN_BSWAP])
if test "$SYS_ENDIAN_BSWAP" = "yes" ; then
USE_SYS_ENDIAN_H=yes
BSWAP=bswap_
else
if test "$SYS_ENDIAN__SWAP" = "yes" ; then
USE_SYS_ENDIAN_H=yes
BSWAP=__swap
else
USE_SYS_ENDIAN_H=no
fi
fi
if test "$USE_SYS_ENDIAN_H" = "yes" ; then
AC_DEFINE([USE_SYS_ENDIAN_H], 1,
[Define to use byteswap macros from <sys/endian.h>])
AC_DEFINE_UNQUOTED([bswap_16], ${BSWAP}16,
[Define to 16-bit byteswap macro])
AC_DEFINE_UNQUOTED([bswap_32], ${BSWAP}32,
[Define to 32-bit byteswap macro])
AC_DEFINE_UNQUOTED([bswap_64], ${BSWAP}64,
[Define to 64-bit byteswap macro])
fi
fi
dnl Checks for library functions.
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr \
@ -295,6 +353,9 @@ case $host_os in
DRI=yes
KDRIVE_HW=yes
;;
*solaris*)
PKG_CHECK_EXISTS(libdrm, DRI=yes, DRI=no)
;;
esac
AM_CONDITIONAL(KDRIVE_HW, test "x$KDRIVE_HW" = xyes)
@ -305,6 +366,8 @@ if test "x$use_x86_asm" = xyes && test "x$GCC" = xyes ; then
#error Not supported
#endif
], mmx_capable=yes, mmx_capable=no)
else
mmx_capable=no
fi
AC_MSG_RESULT([$mmx_capable])
AM_CONDITIONAL(MMX_CAPABLE, [test "x$mmx_capable" = xyes])
@ -335,11 +398,11 @@ AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],
AC_ARG_WITH(int10, AS_HELP_STRING([--with-int10=BACKEND], [int10 backend: vm86, x86emu or stub]),
[INT10="$withval"],
[INT10="$DEFAULT_INT10"])
AC_ARG_WITH(vendor-name, AS_HELP_STRING([--with-vendor-string=VENDOR],
AC_ARG_WITH(vendor-name, AS_HELP_STRING([--with-vendor-name=VENDOR],
[Vendor string reported by the server]),
[ VENDOR_STRING="$withval" ],
[ VENDOR_STRING="$DEFAULT_VENDOR_NAME" ])
AC_ARG_WITH(vendor-name-short, AS_HELP_STRING([--with-vendor-string-short=VENDOR],
AC_ARG_WITH(vendor-name-short, AS_HELP_STRING([--with-vendor-name-short=VENDOR],
[Short version of vendor string reported by the server]),
[ VENDOR_STRING_SHORT="$withval" ],
[ VENDOR_STRING_SHORT="$DEFAULT_VENDOR_NAME_SHORT" ])
@ -385,6 +448,9 @@ AC_ARG_WITH(os-name, AS_HELP_STRING([--with-os-name=OSNAME], [Name of OS
AC_ARG_WITH(os-vendor, AS_HELP_STRING([--with-os-vendor=OSVENDOR], [Name of OS vendor]),
[ OSVENDOR="$withval" ],
[ OSVENDOR="" ])
AC_ARG_WITH(builderstring, AS_HELP_STRING([--with-builderstring=BUILDERSTRING], [Additional builder string]),
[ BUILDERSTRING="$withval" ]
[ ])
AC_ARG_WITH(mesa-source, AS_HELP_STRING([--with-mesa-source=MESA_SOURCE], [Path to Mesa source tree]),
[ MESA_SOURCE="$withval" ],
[ MESA_SOURCE="" ])
@ -546,7 +612,7 @@ XEXT_LIB='$(top_builddir)/Xext/libXext.la'
XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
dnl Core modules for most extensions, et al.
REQUIRED_MODULES="[randrproto >= 1.2] renderproto [fixesproto >= 4.0] damageproto xcmiscproto xextproto xproto xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.4] [kbproto >= 1.0.3]"
REQUIRED_MODULES="[randrproto >= 1.2] renderproto [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto xextproto xproto xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.4] [kbproto >= 1.0.3]"
REQUIRED_LIBS="xfont xau fontenc"
if test "x$DBUS" = xauto; then
@ -617,7 +683,7 @@ fi
if test "x$GLX" = xyes && ! test "x$MESA_SOURCE" = x; then
PKG_CHECK_MODULES([XLIB], [x11])
PKG_CHECK_MODULES([GL], [glproto >= 1.4.7])
PKG_CHECK_MODULES([GL], [glproto >= 1.4.8])
AC_SUBST(XLIB_CFLAGS)
AC_DEFINE(GLXEXT, 1, [Build GLX extension])
GLX_LIBS='$(top_builddir)/GL/glx/libglx.la $(top_builddir)/GL/mesa/libGLcore.la'
@ -885,6 +951,8 @@ AC_DEFINE_UNQUOTED(XORG_MAN_VERSION, ["$VENDOR_MAN_VERSION"], [Vendor man versio
AC_DEFINE_UNQUOTED(BUILDERADDR, ["$BUILDERADDR"], [Builder address])
AC_DEFINE_UNQUOTED(OSNAME, ["$OSNAME"], [Operating System Name])
AC_DEFINE_UNQUOTED(OSVENDOR, ["$OSVENDOR"], [Operating System Vendor])
AC_DEFINE_UNQUOTED(BUILDERSTRING, ["$BUILDERSTRING"], [Builder string])
AC_SUBST([VENDOR_STRING])
AC_SUBST([VENDOR_STRING_SHORT])
AC_SUBST([VENDOR_RELEASE])
@ -1708,20 +1776,13 @@ AC_SUBST(XKB_COMPILED_DIR)
dnl and the rest of these are generic, so they're in config.h
AC_DEFINE(XResExtension, 1, [Build XRes extension])
dnl CYGWIN does not define fd_set if _POSIX_SOURCE is defined
dnl _*_SOURCE on Solaris restricts to the standards, and removes non-standard
dnl functions which X uses
case $host_os in
cygwin*) ;;
solaris*) ;;
darwin*) ;;
freebsd*|netbsd*|openbsd*) ;;
*)
AC_DEFINE(_POSIX_SOURCE, 1, [POSIX-compliant source])
AC_DEFINE(_XOPEN_SOURCE, 500, [X/Open-compliant source])
AC_DEFINE(_BSD_SOURCE, 1, [BSD-compliant source])
;;
esac
AC_TRY_COMPILE([
#include <features.h>
#ifndef __GLIBC__
#error not glibc
#endif
], [], [AC_DEFINE(_GNU_SOURCE, 1,
[ Enable GNU and other extensions to the C environment for glibc])])
AC_DEFINE_DIR(PROJECTROOT, prefix, [Overall prefix])
@ -1796,7 +1857,6 @@ Makefile
GL/Makefile
GL/glx/Makefile
GL/mesa/Makefile
GL/mesa/array_cache/Makefile
GL/mesa/glapi/Makefile
GL/mesa/main/Makefile
GL/mesa/math/Makefile
@ -1806,6 +1866,7 @@ GL/mesa/shader/slang/Makefile
GL/mesa/swrast/Makefile
GL/mesa/swrast_setup/Makefile
GL/mesa/tnl/Makefile
GL/mesa/vbo/Makefile
GL/mesa/X/Makefile
include/Makefile
afb/Makefile

View File

@ -35,6 +35,13 @@ int DamageClientPrivateIndex;
RESTYPE DamageExtType;
RESTYPE DamageExtWinType;
/* Version of the damage extension supported by the server, as opposed to the
* DAMAGE_* defines from damageproto for what version the proto header
* supports.
*/
#define SERVER_DAMAGE_MAJOR 1
#define SERVER_DAMAGE_MINOR 1
#define prScreen screenInfo.screens[0]
static void
@ -143,16 +150,16 @@ ProcDamageQueryVersion(ClientPtr client)
rep.type = X_Reply;
rep.length = 0;
rep.sequenceNumber = client->sequence;
if (stuff->majorVersion < DAMAGE_MAJOR) {
if (stuff->majorVersion < SERVER_DAMAGE_MAJOR) {
rep.majorVersion = stuff->majorVersion;
rep.minorVersion = stuff->minorVersion;
} else {
rep.majorVersion = DAMAGE_MAJOR;
if (stuff->majorVersion == DAMAGE_MAJOR &&
stuff->minorVersion < DAMAGE_MINOR)
rep.majorVersion = SERVER_DAMAGE_MAJOR;
if (stuff->majorVersion == SERVER_DAMAGE_MAJOR &&
stuff->minorVersion < SERVER_DAMAGE_MINOR)
rep.minorVersion = stuff->minorVersion;
else
rep.minorVersion = DAMAGE_MINOR;
rep.minorVersion = SERVER_DAMAGE_MINOR;
}
pDamageClient->major_version = rep.majorVersion;
pDamageClient->minor_version = rep.minorVersion;
@ -279,10 +286,35 @@ ProcDamageSubtract (ClientPtr client)
return (client->noClientException);
}
static int
ProcDamageAdd (ClientPtr client)
{
REQUEST(xDamageAddReq);
DrawablePtr pDrawable;
RegionPtr pRegion;
int rc;
REQUEST_SIZE_MATCH(xDamageAddReq);
VERIFY_REGION(pRegion, stuff->region, client, DixWriteAccess);
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
DixReadAccess);
if (rc != Success)
return rc;
/* The region is relative to the drawable origin, so translate it out to
* screen coordinates like damage expects.
*/
REGION_TRANSLATE(pScreen, pRegion, pDrawable->x, pDrawable->y);
DamageDamageRegion(pDrawable, pRegion);
REGION_TRANSLATE(pScreen, pRegion, -pDrawable->x, -pDrawable->y);
return (client->noClientException);
}
/* Major version controls available requests */
static const int version_requests[] = {
X_DamageQueryVersion, /* before client sends QueryVersion */
X_DamageSubtract, /* Version 1 */
X_DamageAdd, /* Version 1 */
};
#define NUM_VERSION_REQUESTS (sizeof (version_requests) / sizeof (version_requests[0]))
@ -293,6 +325,8 @@ int (*ProcDamageVector[XDamageNumberRequests])(ClientPtr) = {
ProcDamageCreate,
ProcDamageDestroy,
ProcDamageSubtract,
/*************** Version 1.1 ****************/
ProcDamageAdd,
};
@ -361,12 +395,27 @@ SProcDamageSubtract (ClientPtr client)
return (*ProcDamageVector[stuff->damageReqType]) (client);
}
static int
SProcDamageAdd (ClientPtr client)
{
register int n;
REQUEST(xDamageAddReq);
swaps (&stuff->length, n);
REQUEST_SIZE_MATCH(xDamageSubtractReq);
swapl (&stuff->drawable, n);
swapl (&stuff->region, n);
return (*ProcDamageVector[stuff->damageReqType]) (client);
}
int (*SProcDamageVector[XDamageNumberRequests])(ClientPtr) = {
/*************** Version 1 ******************/
SProcDamageQueryVersion,
SProcDamageCreate,
SProcDamageDestroy,
SProcDamageSubtract,
/*************** Version 1.1 ****************/
SProcDamageAdd,
};
static int

View File

@ -39,6 +39,11 @@
#endif
#include <string.h>
#if HAVE_STDINT_H
#include <stdint.h>
#elif !defined(UINT32_MAX)
#define UINT32_MAX 0xffffffffU
#endif
#include <X11/X.h>
#include <X11/Xproto.h>
@ -711,11 +716,14 @@ ProcDbeSwapBuffers(ClientPtr client)
return(Success);
}
if (nStuff > UINT32_MAX / sizeof(DbeSwapInfoRec))
return BadAlloc;
/* Get to the swap info appended to the end of the request. */
dbeSwapInfo = (xDbeSwapInfo *)&stuff[1];
/* Allocate array to record swap information. */
swapInfo = (DbeSwapInfoPtr)ALLOCATE_LOCAL(nStuff * sizeof(DbeSwapInfoRec));
swapInfo = (DbeSwapInfoPtr)Xalloc(nStuff * sizeof(DbeSwapInfoRec));
if (swapInfo == NULL)
{
return(BadAlloc);
@ -730,14 +738,14 @@ ProcDbeSwapBuffers(ClientPtr client)
error = dixLookupWindow(&pWin, dbeSwapInfo[i].window, client,
DixWriteAccess);
if (error != Success) {
DEALLOCATE_LOCAL(swapInfo);
Xfree(swapInfo);
return error;
}
/* Each window must be double-buffered - BadMatch. */
if (DBE_WINDOW_PRIV(pWin) == NULL)
{
DEALLOCATE_LOCAL(swapInfo);
Xfree(swapInfo);
return(BadMatch);
}
@ -746,7 +754,7 @@ ProcDbeSwapBuffers(ClientPtr client)
{
if (dbeSwapInfo[i].window == dbeSwapInfo[j].window)
{
DEALLOCATE_LOCAL(swapInfo);
Xfree(swapInfo);
return(BadMatch);
}
}
@ -757,7 +765,7 @@ ProcDbeSwapBuffers(ClientPtr client)
(dbeSwapInfo[i].swapAction != XdbeUntouched ) &&
(dbeSwapInfo[i].swapAction != XdbeCopied ))
{
DEALLOCATE_LOCAL(swapInfo);
Xfree(swapInfo);
return(BadValue);
}
@ -787,12 +795,12 @@ ProcDbeSwapBuffers(ClientPtr client)
error = (*pDbeScreenPriv->SwapBuffers)(client, &nStuff, swapInfo);
if (error != Success)
{
DEALLOCATE_LOCAL(swapInfo);
Xfree(swapInfo);
return(error);
}
}
DEALLOCATE_LOCAL(swapInfo);
Xfree(swapInfo);
return(Success);
} /* ProcDbeSwapBuffers() */
@ -874,10 +882,12 @@ ProcDbeGetVisualInfo(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xDbeGetVisualInfoReq);
if (stuff->n > UINT32_MAX / sizeof(DrawablePtr))
return BadAlloc;
/* Make sure any specified drawables are valid. */
if (stuff->n != 0)
{
if (!(pDrawables = (DrawablePtr *)ALLOCATE_LOCAL(stuff->n *
if (!(pDrawables = (DrawablePtr *)Xalloc(stuff->n *
sizeof(DrawablePtr))))
{
return(BadAlloc);
@ -890,7 +900,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
rc = dixLookupDrawable(pDrawables+i, drawables[i], client, 0,
DixReadAccess);
if (rc != Success) {
DEALLOCATE_LOCAL(pDrawables);
Xfree(pDrawables);
return rc;
}
}
@ -902,7 +912,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
{
if (pDrawables)
{
DEALLOCATE_LOCAL(pDrawables);
Xfree(pDrawables);
}
return(BadAlloc);
@ -929,7 +939,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
/* Free pDrawables if we needed to allocate it above. */
if (pDrawables)
{
DEALLOCATE_LOCAL(pDrawables);
Xfree(pDrawables);
}
return(BadAlloc);
@ -1010,7 +1020,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
if (pDrawables)
{
DEALLOCATE_LOCAL(pDrawables);
Xfree(pDrawables);
}
return(client->noClientException);

View File

@ -219,7 +219,7 @@ dixLookupDrawable(DrawablePtr *pDraw, XID id, ClientPtr client,
pTmp = client->lastDrawable;
/* an access check is required for cached drawables */
rtype = (pTmp->type | M_WINDOW) ? RT_WINDOW : RT_PIXMAP;
rtype = (type & M_WINDOW) ? RT_WINDOW : RT_PIXMAP;
if (!XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, access, pTmp))
return BadDrawable;
} else
@ -227,10 +227,10 @@ dixLookupDrawable(DrawablePtr *pDraw, XID id, ClientPtr client,
access);
if (!pTmp)
return BadDrawable;
if (!((1 << pTmp->type) | (type ? type : M_DRAWABLE)))
if (!((1 << pTmp->type) & (type ? type : M_DRAWABLE)))
return BadMatch;
if (pTmp->type | M_DRAWABLE) {
if (type & M_DRAWABLE) {
client->lastDrawable = pTmp;
client->lastDrawableID = id;
client->lastGCID = INVALID;

View File

@ -489,6 +489,7 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
Bool sendValuators = (type == MotionNotify || flags & POINTER_ABSOLUTE);
DeviceIntPtr cp = inputInfo.pointer;
int x = 0, y = 0;
Bool coreOnly = (pDev == inputInfo.pointer);
/* Sanity checks. */
if (type != MotionNotify && type != ButtonPress && type != ButtonRelease)
@ -497,7 +498,7 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
if ((type == ButtonPress || type == ButtonRelease) && !pDev->button)
return 0;
if (pDev->coreEvents)
if (!coreOnly && pDev->coreEvents)
num_events = 2;
else
num_events = 1;
@ -507,7 +508,7 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
}
/* Do we need to send a DeviceValuator event? */
if (sendValuators) {
if (!coreOnly && sendValuators) {
if ((((num_valuators - 1) / 6) + 1) > MAX_VALUATOR_EVENTS)
num_valuators = MAX_VALUATOR_EVENTS * 6;
num_events += ((num_valuators - 1) / 6) + 1;
@ -521,10 +522,6 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
ms = GetTimeInMillis();
kbp = (deviceKeyButtonPointer *) events;
kbp->time = ms;
kbp->deviceid = pDev->id;
/* Set x and y based on whether this is absolute or relative, and
* accelerate if we need to. */
if (flags & POINTER_ABSOLUTE) {
@ -602,29 +599,37 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
pDev->valuator->lastx = x;
pDev->valuator->lasty = y;
if (type == MotionNotify) {
kbp->type = DeviceMotionNotify;
}
else {
if (type == ButtonPress)
kbp->type = DeviceButtonPress;
else if (type == ButtonRelease)
kbp->type = DeviceButtonRelease;
kbp->detail = pDev->button->map[buttons];
if (!coreOnly)
{
kbp = (deviceKeyButtonPointer *) events;
kbp->time = ms;
kbp->deviceid = pDev->id;
if (type == MotionNotify) {
kbp->type = DeviceMotionNotify;
}
else {
if (type == ButtonPress)
kbp->type = DeviceButtonPress;
else if (type == ButtonRelease)
kbp->type = DeviceButtonRelease;
kbp->detail = pDev->button->map[buttons];
}
kbp->root_x = x;
kbp->root_y = y;
events++;
if (sendValuators) {
kbp->deviceid |= MORE_EVENTS;
clipValuators(pDev, first_valuator, num_valuators, valuators);
events = getValuatorEvents(events, pDev, first_valuator,
num_valuators, valuators);
}
}
kbp->root_x = x;
kbp->root_y = y;
events++;
if (sendValuators) {
kbp->deviceid |= MORE_EVENTS;
clipValuators(pDev, first_valuator, num_valuators, valuators);
events = getValuatorEvents(events, pDev, first_valuator,
num_valuators, valuators);
}
if (pDev->coreEvents) {
/* for some reason inputInfo.pointer does not have coreEvents set */
if (coreOnly || pDev->coreEvents) {
events->u.u.type = type;
events->u.keyButtonPointer.time = ms;
events->u.keyButtonPointer.rootX = x;
@ -761,7 +766,7 @@ SwitchCorePointer(DeviceIntPtr pDev)
* to shift the pointer to get it inside the new bounds.
*/
void
PostSyntheticMotion(int x, int y, ScreenPtr pScreen, unsigned long time)
PostSyntheticMotion(int x, int y, int screen, unsigned long time)
{
xEvent xE;
@ -770,8 +775,8 @@ PostSyntheticMotion(int x, int y, ScreenPtr pScreen, unsigned long time)
will translate from sprite screen to screen 0 upon reentry
to the DIX layer. */
if (!noPanoramiXExtension) {
x += panoramiXdataPtr[0].x - panoramiXdataPtr[pScreen->myNum].x;
y += panoramiXdataPtr[0].y - panoramiXdataPtr[pScreen->myNum].y;
x += panoramiXdataPtr[0].x - panoramiXdataPtr[screen].x;
y += panoramiXdataPtr[0].y - panoramiXdataPtr[screen].y;
}
#endif

View File

@ -100,11 +100,6 @@ specifies a file which contains a collection of authorization records used
to authenticate access. See also the \fIxdm\fP(1) and
\fIXsecurity\fP(__miscmansuffix__) manual pages.
.TP 8
.B bc
disables certain kinds of error checking, for bug compatibility with
previous releases (e.g., to work around bugs in R2 and R3 xterms and toolkits).
Deprecated.
.TP 8
.B \-bs
disables backing store support on all screens.
.TP 8
@ -266,6 +261,10 @@ required by the X protocol, which allows the server to exceed the
client's backing store expectations but does not provide a way to tell
the client that it is doing so.
.TP 8
.B \-wr
sets the default root window to solid white instead of the standard root weave
pattern.
.TP 8
.B \-x \fIextension\fP
loads the specified extension at init.
This is a no-op for most implementations.
@ -398,20 +397,14 @@ base directory for keyboard layout files. This option is not available
for setuid X servers (i.e., when the X server's real and effective uids
are different).
.TP 8
.B \-ar1 \fImilliseconds\fP
.B \-ardelay \fImilliseconds\fP
sets the autorepeat delay (length of time in milliseconds that a key must
be depressed before autorepeat starts).
.TP 8
.B \-ar2 \fImilliseconds\fP
.B \-arinterval \fImilliseconds\fP
sets the autorepeat interval (length of time in milliseconds that should
elapse between autorepeat-generated keystrokes).
.TP 8
.B \-noloadxkb
disables loading of an XKB keymap description on server startup.
.TP 8
.B \-xkbdb \fIfilename\fP
uses \fIfilename\fP for default keyboard keymaps.
.TP 8
.B \-xkbmap \fIfilename\fP
loads keyboard description in \fIfilename\fP on server startup.
.SH SECURITY EXTENSION OPTIONS

130
exa/exa.c
View File

@ -121,18 +121,78 @@ exaGetDrawablePixmap(DrawablePtr pDrawable)
return (PixmapPtr) pDrawable;
}
/**
* Sets the offsets to add to coordinates to make them address the same bits in
* the backing drawable. These coordinates are nonzero only for redirected
* windows.
*/
static void
exaGetDrawableDeltas (DrawablePtr pDrawable, PixmapPtr pPixmap,
int *xp, int *yp)
{
#ifdef COMPOSITE
if (pDrawable->type == DRAWABLE_WINDOW) {
*xp = -pPixmap->screen_x;
*yp = -pPixmap->screen_y;
return;
}
#endif
*xp = 0;
*yp = 0;
}
/**
* exaPixmapDirty() marks a pixmap as dirty, allowing for
* optimizations in pixmap migration when no changes have occurred.
*/
void
exaPixmapDirty (PixmapPtr pPix, int x1, int y1, int x2, int y2)
{
ExaPixmapPriv(pPix);
BoxRec box;
RegionPtr pDamageReg;
RegionRec region;
if (!pExaPixmap)
return;
box.x1 = max(x1, 0);
box.y1 = max(y1, 0);
box.x2 = min(x2, pPix->drawable.width);
box.y2 = min(y2, pPix->drawable.height);
if (box.x1 >= box.x2 || box.y1 >= box.y2)
return;
pDamageReg = DamageRegion(pExaPixmap->pDamage);
REGION_INIT(pScreen, &region, &box, 1);
REGION_UNION(pScreen, pDamageReg, pDamageReg, &region);
REGION_UNINIT(pScreen, &region);
}
/**
* exaDrawableDirty() marks a pixmap backing a drawable as dirty, allowing for
* optimizations in pixmap migration when no changes have occurred.
*/
void
exaDrawableDirty (DrawablePtr pDrawable)
exaDrawableDirty (DrawablePtr pDrawable, int x1, int y1, int x2, int y2)
{
ExaPixmapPrivPtr pExaPixmap;
PixmapPtr pPix = exaGetDrawablePixmap(pDrawable);
int xoff, yoff;
pExaPixmap = ExaGetPixmapPriv(exaGetDrawablePixmap (pDrawable));
if (pExaPixmap != NULL)
pExaPixmap->dirty = TRUE;
x1 = max(x1, pDrawable->x);
y1 = max(y1, pDrawable->y);
x2 = min(x2, pDrawable->x + pDrawable->width);
y2 = min(y2, pDrawable->y + pDrawable->height);
if (x1 >= x2 || y1 >= y2)
return;
exaGetDrawableDeltas(pDrawable, pPix, &xoff, &yoff);
exaPixmapDirty(pPix, x1 + xoff, y1 + yoff, x2 + xoff, y2 + yoff);
}
static Bool
@ -153,6 +213,7 @@ exaDestroyPixmap (PixmapPtr pPixmap)
pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
pPixmap->devKind = pExaPixmap->sys_pitch;
}
REGION_UNINIT(pPixmap->drawable.pScreen, &pExaPixmap->validReg);
}
return fbDestroyPixmap (pPixmap);
}
@ -220,7 +281,20 @@ exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth)
return NULL;
}
pExaPixmap->dirty = FALSE;
/* Set up damage tracking */
pExaPixmap->pDamage = DamageCreate (NULL, NULL, DamageReportNone, TRUE,
pScreen, pPixmap);
if (pExaPixmap->pDamage == NULL) {
fbDestroyPixmap (pPixmap);
return NULL;
}
DamageRegister (&pPixmap->drawable, pExaPixmap->pDamage);
DamageSetReportAfterOp (pExaPixmap->pDamage, TRUE);
/* None of the pixmap bits are valid initially */
REGION_NULL(pScreen, &pExaPixmap->validReg);
return pPixmap;
}
@ -265,32 +339,14 @@ exaDrawableIsOffscreen (DrawablePtr pDrawable)
/**
* Returns the pixmap which backs a drawable, and the offsets to add to
* coordinates to make them address the same bits in the backing drawable.
* These coordinates are nonzero only for redirected windows.
*/
PixmapPtr
exaGetOffscreenPixmap (DrawablePtr pDrawable, int *xp, int *yp)
{
PixmapPtr pPixmap;
int x, y;
PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable);
exaGetDrawableDeltas (pDrawable, pPixmap, xp, yp);
if (pDrawable->type == DRAWABLE_WINDOW) {
pPixmap = (*pDrawable->pScreen->GetWindowPixmap) ((WindowPtr) pDrawable);
#ifdef COMPOSITE
x = -pPixmap->screen_x;
y = -pPixmap->screen_y;
#else
x = 0;
y = 0;
#endif
}
else
{
pPixmap = (PixmapPtr) pDrawable;
x = 0;
y = 0;
}
*xp = x;
*yp = y;
if (exaPixmapIsOffscreen (pPixmap))
return pPixmap;
else
@ -338,8 +394,7 @@ exaPrepareAccess(DrawablePtr pDrawable, int index)
/**
* exaFinishAccess() is EXA's wrapper for the driver's FinishAccess() handler.
*
* It deals with marking drawables as dirty, and calling the driver's
* FinishAccess() only if necessary.
* It deals with calling the driver's FinishAccess() only if necessary.
*/
void
exaFinishAccess(DrawablePtr pDrawable, int index)
@ -349,9 +404,6 @@ exaFinishAccess(DrawablePtr pDrawable, int index)
PixmapPtr pPixmap;
ExaPixmapPrivPtr pExaPixmap;
if (index == EXA_PREPARE_DEST)
exaDrawableDirty (pDrawable);
pPixmap = exaGetDrawablePixmap (pDrawable);
pExaPixmap = ExaGetPixmapPriv(pPixmap);
@ -377,7 +429,7 @@ exaFinishAccess(DrawablePtr pDrawable, int index)
* accelerated or may sync the card and fall back to fb.
*/
static void
exaValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
exaValidateGC (GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)
{
/* fbValidateGC will do direct access to pixmaps if the tiling has changed.
* Preempt fbValidateGC by doing its work and masking the change out, so
@ -408,6 +460,7 @@ exaValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
exaPrepareAccess(&pOldTile->drawable, EXA_PREPARE_SRC);
pNewTile = fb24_32ReformatTile (pOldTile,
pDrawable->bitsPerPixel);
exaPixmapDirty(pNewTile, 0, 0, pNewTile->drawable.width, pNewTile->drawable.height);
exaFinishAccess(&pOldTile->drawable, EXA_PREPARE_SRC);
}
if (pNewTile)
@ -423,9 +476,14 @@ exaValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
if (!pGC->tileIsPixel && FbEvenTile (pGC->tile.pixmap->drawable.width *
pDrawable->bitsPerPixel))
{
exaPrepareAccess(&pGC->tile.pixmap->drawable, EXA_PREPARE_SRC);
/* XXX This fixes corruption with tiled pixmaps, but may just be a
* workaround for broken drivers
*/
exaMoveOutPixmap(pGC->tile.pixmap);
fbPadPixmap (pGC->tile.pixmap);
exaFinishAccess(&pGC->tile.pixmap->drawable, EXA_PREPARE_SRC);
exaPixmapDirty(pGC->tile.pixmap, 0, 0,
pGC->tile.pixmap->drawable.width,
pGC->tile.pixmap->drawable.height);
}
/* Mask out the GCTile change notification, now that we've done FB's
* job for it.
@ -564,7 +622,7 @@ exaDriverInit (ScreenPtr pScreen,
pScreen->devPrivates[exaScreenPrivateIndex].ptr = (pointer) pExaScr;
pExaScr->migration = ExaMigrationSmart;
pExaScr->migration = ExaMigrationAlways;
exaDDXDriverInit(pScreen);

View File

@ -39,7 +39,7 @@
#include "fb.h"
#define EXA_VERSION_MAJOR 2
#define EXA_VERSION_MINOR 0
#define EXA_VERSION_MINOR 1
#define EXA_VERSION_RELEASE 0
typedef struct _ExaOffscreenArea ExaOffscreenArea;
@ -73,8 +73,8 @@ struct _ExaOffscreenArea {
typedef struct _ExaDriver {
/**
* exa_major and exa_minor should be set by the driver to the version of
* EXA which the driver was compiled for (or configures itself at runtime to
* support). This allows EXA to extend the structure for new features
* EXA which the driver was compiled for (or configures itself at runtime
* to support). This allows EXA to extend the structure for new features
* without breaking ABI for drivers compiled against older versions.
*/
int exa_major, exa_minor;
@ -716,6 +716,12 @@ exaGetPixmapSize(PixmapPtr pPix);
void
exaEnableDisableFBAccess (int index, Bool enable);
void
exaMoveInPixmap (PixmapPtr pPixmap);
void
exaMoveOutPixmap (PixmapPtr pPixmap);
/**
* Returns TRUE if the given planemask covers all the significant bits in the
* pixel values for pDrawable.

View File

@ -20,6 +20,11 @@
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*
* Authors:
* Eric Anholt <eric@anholt.net>
* Michel Dänzer <michel@tungstengraphics.com>
*
*/
#ifdef HAVE_DIX_CONFIG_H
@ -104,6 +109,8 @@ exaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
(*pExaScr->info->Solid) (pPixmap,
fullX1 + off_x, fullY1 + off_y,
fullX2 + off_x, fullY1 + 1 + off_y);
exaPixmapDirty (pPixmap, fullX1 + off_x, fullY1 + off_y,
fullX2 + off_x, fullY1 + 1 + off_y);
}
else
{
@ -118,17 +125,19 @@ exaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
partX2 = pbox->x2;
if (partX2 > fullX2)
partX2 = fullX2;
if (partX2 > partX1)
if (partX2 > partX1) {
(*pExaScr->info->Solid) (pPixmap,
partX1 + off_x, fullY1 + off_y,
partX2 + off_x, fullY1 + 1 + off_y);
exaPixmapDirty (pPixmap, partX1 + off_x, fullY1 + off_y,
partX2 + off_x, fullY1 + 1 + off_y);
}
}
pbox++;
}
}
}
(*pExaScr->info->DoneSolid) (pPixmap);
exaDrawableDirty (pDrawable);
exaMarkSync(pScreen);
}
@ -222,8 +231,8 @@ exaPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
exaFinishAccess(pDrawable, EXA_PREPARE_DEST);
}
exaPixmapDirty(pPix, x1 + xoff, y1 + yoff, x2 + xoff, y2 + yoff);
}
exaDrawableDirty(pDrawable);
return;
@ -351,11 +360,12 @@ exaCopyNtoNTwoDir (DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
dst_off_y + pbox->y1 + i,
pbox->x2 - pbox->x1, 1);
}
exaPixmapDirty(pDstPixmap, dst_off_x + pbox->x1, dst_off_y + pbox->y1,
dst_off_x + pbox->x2, dst_off_y + pbox->y2);
}
if (dirsetup != 0)
pExaScr->info->DoneCopy(pDstPixmap);
exaMarkSync(pDstDrawable->pScreen);
exaDrawableDirty(pDstDrawable);
return TRUE;
}
@ -424,11 +434,13 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
pbox->x2 - pbox->x1,
pbox->y2 - pbox->y1);
exaPixmapDirty (pDstPixmap,
pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
pbox++;
}
(*pExaScr->info->DoneCopy) (pDstPixmap);
exaMarkSync(pDstDrawable->pScreen);
exaDrawableDirty (pDstDrawable);
return;
}
@ -443,6 +455,11 @@ fallback:
bitplane, closure);
exaFinishAccess (pSrcDrawable, EXA_PREPARE_SRC);
exaFinishAccess (pDstDrawable, EXA_PREPARE_DEST);
while (nbox--)
{
exaDrawableDirty (pDstDrawable, pbox->x1, pbox->y1, pbox->x2, pbox->y2);
pbox++;
}
}
RegionPtr
@ -631,6 +648,14 @@ exaPolyFillRect(DrawablePtr pDrawable,
{
exaDoMigration (pixmaps, 1, FALSE);
ExaCheckPolyFillRect (pDrawable, pGC, nrect, prect);
while (nrect-- >= 0) {
exaDrawableDirty(pDrawable,
pDrawable->x + prect->x,
pDrawable->y + prect->y,
pDrawable->x + prect->x + prect->width,
pDrawable->y + prect->y + prect->height);
prect++;
}
return;
} else {
exaDoMigration (pixmaps, 1, TRUE);
@ -682,6 +707,8 @@ exaPolyFillRect(DrawablePtr pDrawable,
(*pExaScr->info->Solid) (pPixmap,
fullX1 + xoff, fullY1 + yoff,
fullX2 + xoff, fullY2 + yoff);
exaPixmapDirty (pPixmap, fullX1 + xoff, fullY1 + yoff,
fullX2 + xoff, fullY2 + yoff);
}
else
{
@ -707,15 +734,17 @@ exaPolyFillRect(DrawablePtr pDrawable,
pbox++;
if (partX1 < partX2 && partY1 < partY2)
if (partX1 < partX2 && partY1 < partY2) {
(*pExaScr->info->Solid) (pPixmap,
partX1 + xoff, partY1 + yoff,
partX2 + xoff, partY2 + yoff);
exaPixmapDirty (pPixmap, partX1 + xoff, partY1 + yoff,
partX2 + xoff, partY2 + yoff);
}
}
}
}
(*pExaScr->info->DoneSolid) (pPixmap);
exaDrawableDirty (pDrawable);
exaMarkSync(pDrawable->pScreen);
}
@ -736,11 +765,12 @@ exaSolidBoxClipped (DrawablePtr pDrawable,
int xoff, yoff;
int partX1, partX2, partY1, partY2;
ExaMigrationRec pixmaps[1];
Bool fallback = FALSE;
pixmaps[0].as_dst = TRUE;
pixmaps[0].as_src = FALSE;
pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
if (pExaScr->swappedOut ||
pPixmap->drawable.width > pExaScr->info->maxX ||
pPixmap->drawable.height > pExaScr->info->maxY)
@ -751,19 +781,21 @@ exaSolidBoxClipped (DrawablePtr pDrawable,
exaDoMigration (pixmaps, 1, TRUE);
}
if (!(pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff)) ||
pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
if (!pPixmap ||
!(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg))
{
fallback:
EXA_FALLBACK(("to %p (%c)\n", pDrawable,
exaDrawableLocation(pDrawable)));
fallback = TRUE;
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
fg = fbReplicatePixel (fg, pDrawable->bitsPerPixel);
fbSolidBoxClipped (pDrawable, pClip, x1, y1, x2, y2,
fbAnd (GXcopy, fg, pm),
fbXor (GXcopy, fg, pm));
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
return;
}
for (nbox = REGION_NUM_RECTS(pClip), pbox = REGION_RECTS(pClip);
nbox--;
@ -791,12 +823,20 @@ fallback:
if (partY2 <= partY1)
continue;
(*pExaScr->info->Solid) (pPixmap,
partX1 + xoff, partY1 + yoff,
partX2 + xoff, partY2 + yoff);
if (!fallback) {
(*pExaScr->info->Solid) (pPixmap,
partX1 + xoff, partY1 + yoff,
partX2 + xoff, partY2 + yoff);
exaPixmapDirty (pPixmap, partX1 + xoff, partY1 + yoff,
partX2 + xoff, partY2 + yoff);
} else
exaDrawableDirty (pDrawable, partX1, partY1, partX2, partY2);
}
if (fallback)
return;
(*pExaScr->info->DoneSolid) (pPixmap);
exaDrawableDirty (pDrawable);
exaMarkSync(pDrawable->pScreen);
}
@ -909,12 +949,17 @@ exaImageGlyphBlt (DrawablePtr pDrawable,
pPriv->fg,
gx + dstXoff,
gHeight);
exaDrawableDirty (pDrawable, gx, gy, gx + gWidth, gy + gHeight);
}
else
{
RegionPtr pClip = fbGetCompositeClip(pGC);
int nbox;
BoxPtr pbox;
gStride = GLYPHWIDTHBYTESPADDED(pci) / sizeof (FbStip);
fbPutXYImage (pDrawable,
fbGetCompositeClip(pGC),
pClip,
pPriv->fg,
pPriv->bg,
pPriv->pm,
@ -928,6 +973,18 @@ exaImageGlyphBlt (DrawablePtr pDrawable,
(FbStip *) pglyph,
gStride,
0);
for (nbox = REGION_NUM_RECTS(pClip), pbox = REGION_RECTS(pClip);
nbox--; pbox++) {
int x1 = max(gx, pbox->x1), x2 = min(gx + gWidth, pbox->x2);
int y1 = max(gy, pbox->y1), y2 = min(gy + gHeight, pbox->y2);
if (x1 >= x2 || y1 >= y2)
continue;
exaDrawableDirty (pDrawable, gx, gy, gx + gWidth,
gy + gHeight);
}
}
}
x += pci->metrics.characterWidth;
@ -995,6 +1052,8 @@ exaFillRegionSolid (DrawablePtr pDrawable,
PixmapPtr pPixmap;
int xoff, yoff;
ExaMigrationRec pixmaps[1];
int nbox = REGION_NUM_RECTS (pRegion);
BoxPtr pBox = REGION_RECTS (pRegion);
pixmaps[0].as_dst = TRUE;
pixmaps[0].as_src = FALSE;
@ -1012,19 +1071,17 @@ exaFillRegionSolid (DrawablePtr pDrawable,
if ((pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff)) &&
(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, FB_ALLONES, pixel))
{
int nbox = REGION_NUM_RECTS (pRegion);
BoxPtr pBox = REGION_RECTS (pRegion);
while (nbox--)
{
(*pExaScr->info->Solid) (pPixmap,
pBox->x1 + xoff, pBox->y1 + yoff,
pBox->x2 + xoff, pBox->y2 + yoff);
exaPixmapDirty (pPixmap, pBox->x1 + xoff, pBox->y1 + yoff,
pBox->x2 + xoff, pBox->y2 + yoff);
pBox++;
}
(*pExaScr->info->DoneSolid) (pPixmap);
exaMarkSync(pDrawable->pScreen);
exaDrawableDirty (pDrawable);
}
else
{
@ -1035,6 +1092,11 @@ fallback:
fbFillRegionSolid (pDrawable, pRegion, 0,
fbReplicatePixel (pixel, pDrawable->bitsPerPixel));
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
while (nbox--)
{
exaDrawableDirty (pDrawable, pBox->x1, pBox->y1, pBox->x2, pBox->y2);
pBox++;
}
}
}
@ -1048,9 +1110,11 @@ exaFillRegionTiled (DrawablePtr pDrawable,
{
ExaScreenPriv(pDrawable->pScreen);
PixmapPtr pPixmap;
int xoff, yoff;
int xoff, yoff, tileXoff, tileYoff;
int tileWidth, tileHeight;
ExaMigrationRec pixmaps[2];
int nbox = REGION_NUM_RECTS (pRegion);
BoxPtr pBox = REGION_RECTS (pRegion);
tileWidth = pTile->drawable.width;
tileHeight = pTile->drawable.height;
@ -1082,18 +1146,16 @@ exaFillRegionTiled (DrawablePtr pDrawable,
}
pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
if (!pPixmap)
goto fallback;
if (!exaPixmapIsOffscreen(pTile))
goto fallback;
if ((*pExaScr->info->PrepareCopy) (pTile, pPixmap, 0, 0, GXcopy,
if ((*pExaScr->info->PrepareCopy) (exaGetOffscreenPixmap((DrawablePtr)pTile, &tileXoff, &tileYoff), pPixmap, 0, 0, GXcopy,
FB_ALLONES))
{
int nbox = REGION_NUM_RECTS (pRegion);
BoxPtr pBox = REGION_RECTS (pRegion);
while (nbox--)
{
int height = pBox->y2 - pBox->y1;
@ -1119,7 +1181,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
width -= w;
(*pExaScr->info->Copy) (pPixmap,
tileX, tileY,
tileX + tileXoff, tileY + tileYoff,
dstX + xoff, dstY + yoff,
w, h);
dstX += w;
@ -1128,11 +1190,12 @@ exaFillRegionTiled (DrawablePtr pDrawable,
dstY += h;
tileY = 0;
}
exaPixmapDirty (pPixmap, pBox->x1 + xoff, pBox->y1 + yoff,
pBox->x2 + xoff, pBox->y2 + yoff);
pBox++;
}
(*pExaScr->info->DoneCopy) (pPixmap);
exaMarkSync(pDrawable->pScreen);
exaDrawableDirty (pDrawable);
return;
}
@ -1145,6 +1208,11 @@ fallback:
fbFillRegionTiled (pDrawable, pRegion, pTile);
exaFinishAccess ((DrawablePtr)pTile, EXA_PREPARE_SRC);
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
while (nbox--)
{
exaDrawableDirty (pDrawable, pBox->x1, pBox->y1, pBox->x2, pBox->y2);
pBox++;
}
}
void

View File

@ -22,6 +22,7 @@
*
* Authors:
* Eric Anholt <eric@anholt.net>
* Michel Dänzer <michel@tungstengraphics.com>
*
*/
@ -57,6 +58,27 @@ exaPixmapIsPinned (PixmapPtr pPix)
return pExaPixmap == NULL || pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED;
}
/**
* The fallback path for UTS/DFS failing is to just memcpy. exaCopyDirtyToSys
* and exaCopyDirtyToFb both needed to do this loop.
*/
static void
exaMemcpyBox (PixmapPtr pPixmap, BoxPtr pbox, CARD8 *src, int src_pitch,
CARD8 *dst, int dst_pitch)
{
int i, cpp = pPixmap->drawable.bitsPerPixel / 8;
int bytes = (pbox->x2 - pbox->x1) * cpp;
src += pbox->y1 * src_pitch + pbox->x1 * cpp;
dst += pbox->y1 * dst_pitch + pbox->x1 * cpp;
for (i = pbox->y2 - pbox->y1; i; i--) {
memcpy (dst, src, bytes);
src += src_pitch;
dst += dst_pitch;
}
}
/**
* Returns TRUE if the pixmap is dirty (has been modified in its current
* location compared to the other), or lacks a private for tracking
@ -67,7 +89,8 @@ exaPixmapIsDirty (PixmapPtr pPix)
{
ExaPixmapPriv (pPix);
return pExaPixmap == NULL || pExaPixmap->dirty == TRUE;
return pExaPixmap == NULL ||
REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap->pDamage));
}
/**
@ -98,54 +121,62 @@ exaCopyDirtyToSys (PixmapPtr pPixmap)
{
ExaScreenPriv (pPixmap->drawable.pScreen);
ExaPixmapPriv (pPixmap);
RegionPtr pRegion = DamageRegion (pExaPixmap->pDamage);
CARD8 *save_ptr;
int save_pitch;
if (!pExaPixmap->dirty)
return;
BoxPtr pBox = REGION_RECTS(pRegion);
int nbox = REGION_NUM_RECTS(pRegion);
Bool do_sync = FALSE;
save_ptr = pPixmap->devPrivate.ptr;
save_pitch = pPixmap->devKind;
pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
pPixmap->devKind = pExaPixmap->fb_pitch;
if (pExaScr->info->DownloadFromScreen == NULL ||
!pExaScr->info->DownloadFromScreen (pPixmap,
0,
0,
pPixmap->drawable.width,
pPixmap->drawable.height,
pExaPixmap->sys_ptr,
pExaPixmap->sys_pitch))
{
char *src, *dst;
int src_pitch, dst_pitch, i, bytes;
while (nbox--) {
pBox->x1 = max(pBox->x1, 0);
pBox->y1 = max(pBox->y1, 0);
pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
continue;
dst = pExaPixmap->sys_ptr;
dst_pitch = pExaPixmap->sys_pitch;
src = pExaPixmap->fb_ptr;
src_pitch = pExaPixmap->fb_pitch;
bytes = src_pitch < dst_pitch ? src_pitch : dst_pitch;
for (i = 0; i < pPixmap->drawable.height; i++) {
memcpy (dst, src, bytes);
dst += dst_pitch;
src += src_pitch;
if (pExaScr->info->DownloadFromScreen == NULL ||
!pExaScr->info->DownloadFromScreen (pPixmap,
pBox->x1, pBox->y1,
pBox->x2 - pBox->x1,
pBox->y2 - pBox->y1,
pExaPixmap->sys_ptr
+ pBox->y1 * pExaPixmap->sys_pitch
+ pBox->x1 * pPixmap->drawable.bitsPerPixel / 8,
pExaPixmap->sys_pitch))
{
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
exaMemcpyBox (pPixmap, pBox,
pExaPixmap->fb_ptr, pExaPixmap->fb_pitch,
pExaPixmap->sys_ptr, pExaPixmap->sys_pitch);
exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
}
exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
else
do_sync = TRUE;
pBox++;
}
/* Make sure the bits have actually landed, since we don't necessarily sync
* when accessing pixmaps in system memory.
*/
exaWaitSync (pPixmap->drawable.pScreen);
if (do_sync)
exaWaitSync (pPixmap->drawable.pScreen);
pPixmap->devPrivate.ptr = save_ptr;
pPixmap->devKind = save_pitch;
pExaPixmap->dirty = FALSE;
/* The previously damaged bits are now no longer damaged but valid */
REGION_UNION(pPixmap->drawable.pScreen,
&pExaPixmap->validReg, &pExaPixmap->validReg, pRegion);
DamageEmpty (pExaPixmap->pDamage);
}
/**
@ -158,49 +189,59 @@ exaCopyDirtyToFb (PixmapPtr pPixmap)
{
ExaScreenPriv (pPixmap->drawable.pScreen);
ExaPixmapPriv (pPixmap);
RegionPtr pRegion = DamageRegion (pExaPixmap->pDamage);
CARD8 *save_ptr;
int save_pitch;
if (!pExaPixmap->dirty)
return;
BoxPtr pBox = REGION_RECTS(pRegion);
int nbox = REGION_NUM_RECTS(pRegion);
Bool do_sync = FALSE;
save_ptr = pPixmap->devPrivate.ptr;
save_pitch = pPixmap->devKind;
pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
pPixmap->devKind = pExaPixmap->fb_pitch;
if (pExaScr->info->UploadToScreen == NULL ||
!pExaScr->info->UploadToScreen (pPixmap,
0,
0,
pPixmap->drawable.width,
pPixmap->drawable.height,
pExaPixmap->sys_ptr,
pExaPixmap->sys_pitch))
{
char *src, *dst;
int src_pitch, dst_pitch, i, bytes;
while (nbox--) {
pBox->x1 = max(pBox->x1, 0);
pBox->y1 = max(pBox->y1, 0);
pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
continue;
dst = pExaPixmap->fb_ptr;
dst_pitch = pExaPixmap->fb_pitch;
src = pExaPixmap->sys_ptr;
src_pitch = pExaPixmap->sys_pitch;
bytes = src_pitch < dst_pitch ? src_pitch : dst_pitch;
for (i = 0; i < pPixmap->drawable.height; i++) {
memcpy (dst, src, bytes);
dst += dst_pitch;
src += src_pitch;
if (pExaScr->info->UploadToScreen == NULL ||
!pExaScr->info->UploadToScreen (pPixmap,
pBox->x1, pBox->y1,
pBox->x2 - pBox->x1,
pBox->y2 - pBox->y1,
pExaPixmap->sys_ptr
+ pBox->y1 * pExaPixmap->sys_pitch
+ pBox->x1 * pPixmap->drawable.bitsPerPixel / 8,
pExaPixmap->sys_pitch))
{
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
exaMemcpyBox (pPixmap, pBox,
pExaPixmap->sys_ptr, pExaPixmap->sys_pitch,
pExaPixmap->fb_ptr, pExaPixmap->fb_pitch);
exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
}
exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
else
do_sync = TRUE;
pBox++;
}
if (do_sync)
exaMarkSync (pPixmap->drawable.pScreen);
pPixmap->devPrivate.ptr = save_ptr;
pPixmap->devKind = save_pitch;
pExaPixmap->dirty = FALSE;
/* The previously damaged bits are now no longer damaged but valid */
REGION_UNION(pPixmap->drawable.pScreen,
&pExaPixmap->validReg, &pExaPixmap->validReg, pRegion);
DamageEmpty (pExaPixmap->pDamage);
}
/**
@ -208,11 +249,12 @@ exaCopyDirtyToFb (PixmapPtr pPixmap)
* Called when the memory manager decides it's time to kick the pixmap out of
* framebuffer entirely.
*/
static void
void
exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area)
{
PixmapPtr pPixmap = area->privData;
ExaPixmapPriv(pPixmap);
RegionPtr pDamageReg = DamageRegion(pExaPixmap->pDamage);
DBG_MIGRATE (("Save %p (%p) (%dx%d) (%c)\n", pPixmap,
(void*)(ExaGetPixmapPriv(pPixmap)->area ?
@ -231,10 +273,9 @@ exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area)
pExaPixmap->fb_ptr = NULL;
pExaPixmap->area = NULL;
/* Mark it dirty now, to say that there is important data in the
* system-memory copy.
*/
pExaPixmap->dirty = TRUE;
/* Mark all valid bits as damaged, so they'll get copied to FB next time */
REGION_UNION(pPixmap->drawable.pScreen, pDamageReg, pDamageReg,
&pExaPixmap->validReg);
}
/**
@ -413,32 +454,57 @@ exaMigrateTowardSys (PixmapPtr pPixmap)
* If the pixmap has both a framebuffer and system memory copy, this function
* asserts that both of them are the same.
*/
static void
static Bool
exaAssertNotDirty (PixmapPtr pPixmap)
{
ExaPixmapPriv (pPixmap);
CARD8 *dst, *src;
int dst_pitch, src_pitch, data_row_bytes, y;
RegionPtr pValidReg = &pExaPixmap->validReg;
int dst_pitch, src_pitch, cpp, y, nbox = REGION_NUM_RECTS(pValidReg);
BoxPtr pBox = REGION_RECTS(pValidReg);
Bool ret = TRUE;
if (pExaPixmap == NULL || pExaPixmap->fb_ptr == NULL)
return;
return ret;
dst = pExaPixmap->sys_ptr;
dst_pitch = pExaPixmap->sys_pitch;
src = pExaPixmap->fb_ptr;
src_pitch = pExaPixmap->fb_pitch;
data_row_bytes = pPixmap->drawable.width *
pPixmap->drawable.bitsPerPixel / 8;
cpp = pPixmap->drawable.bitsPerPixel / 8;
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
for (y = 0; y < pPixmap->drawable.height; y++) {
if (memcmp(dst, src, data_row_bytes) != 0) {
abort();
}
dst += dst_pitch;
src += src_pitch;
while (nbox--) {
int rowbytes;
pBox->x1 = max(pBox->x1, 0);
pBox->y1 = max(pBox->y1, 0);
pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
continue;
rowbytes = (pBox->x2 - pBox->x1) * cpp;
src += pBox->y1 * src_pitch + pBox->x1 * cpp;
dst += pBox->y1 * dst_pitch + pBox->x1 * cpp;
for (y = pBox->y2 - pBox->y1; y; y--) {
if (memcmp(dst + pBox->y1 * dst_pitch + pBox->x1 * cpp,
src + pBox->y1 * src_pitch + pBox->x1 * cpp,
(pBox->x2 - pBox->x1) * cpp) != 0) {
ret = FALSE;
break;
}
src += src_pitch;
dst += dst_pitch;
}
src -= pBox->y1 * src_pitch + pBox->x1 * cpp;
dst -= pBox->y1 * dst_pitch + pBox->x1 * cpp;
}
exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
return ret;
}
/**
@ -462,8 +528,9 @@ exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
*/
if (pExaScr->checkDirtyCorrectness) {
for (i = 0; i < npixmaps; i++) {
if (!exaPixmapIsDirty (pixmaps[i].pPix))
exaAssertNotDirty (pixmaps[i].pPix);
if (!exaPixmapIsDirty (pixmaps[i].pPix) &&
!exaAssertNotDirty (pixmaps[i].pPix))
ErrorF("%s: Pixmap %d dirty but not marked as such!\n", __func__, i);
}
}
/* If anything is pinned in system memory, we won't be able to

View File

@ -81,15 +81,14 @@ ExaOffscreenKickOut (ScreenPtr pScreen, ExaOffscreenArea *area)
* @param save callback for when the area is evicted from memory
* @param privdata private data for the save callback.
*
* Allocates offscreen memory from the device associated with pScreen. size and
* align deteremine where and how large the allocated area is, and locked will
* mark whether it should be held in card memory. privdata may be any pointer
* for the save callback when the area is removed.
* Allocates offscreen memory from the device associated with pScreen. size
* and align deteremine where and how large the allocated area is, and locked
* will mark whether it should be held in card memory. privdata may be any
* pointer for the save callback when the area is removed.
*
* Note that locked areas do get evicted on VT switch, because during that time
* all offscreen memory becomes inaccessible. This may change in the future,
* but drivers should be aware of this and provide a callback to mark that their
* locked allocation was evicted, and then restore it if necessary on EnterVT.
* Note that locked areas do get evicted on VT switch unless the driver
* requested version 2.1 or newer behavior. In that case, the save callback is
* still called.
*/
ExaOffscreenArea *
exaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
@ -256,6 +255,9 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
return area;
}
/**
* Ejects all offscreen areas, and uninitializes the offscreen memory manager.
*/
void
ExaOffscreenSwapOut (ScreenPtr pScreen)
{
@ -283,12 +285,56 @@ ExaOffscreenSwapOut (ScreenPtr pScreen)
ExaOffscreenFini (pScreen);
}
/** Ejects all pixmaps managed by EXA. */
static void
ExaOffscreenEjectPixmaps (ScreenPtr pScreen)
{
ExaScreenPriv (pScreen);
ExaOffscreenValidate (pScreen);
/* loop until a single free area spans the space */
for (;;)
{
ExaOffscreenArea *area;
for (area = pExaScr->info->offScreenAreas; area != NULL;
area = area->next)
{
if (area->state == ExaOffscreenRemovable &&
area->save == exaPixmapSave)
{
(void) ExaOffscreenKickOut (pScreen, area);
ExaOffscreenValidate (pScreen);
break;
}
}
if (area == NULL)
break;
}
ExaOffscreenValidate (pScreen);
}
void
ExaOffscreenSwapIn (ScreenPtr pScreen)
{
exaOffscreenInit (pScreen);
}
/**
* Prepares EXA for disabling of FB access, or restoring it.
*
* In version 2.1, the disabling results in pixmaps being ejected, while other
* allocations remain. With this plus the prevention of migration while
* swappedOut is set, EXA by itself should not cause any access of the
* framebuffer to occur while swapped out. Any remaining issues are the
* responsibility of the driver.
*
* Prior to version 2.1, all allocations, including locked ones, are ejected
* when access is disabled, and the allocator is torn down while swappedOut
* is set. This is more drastic, and caused implementation difficulties for
* many drivers that could otherwise handle the lack of FB access while
* swapped out.
*/
void
exaEnableDisableFBAccess (int index, Bool enable)
{
@ -296,10 +342,14 @@ exaEnableDisableFBAccess (int index, Bool enable)
ExaScreenPriv (pScreen);
if (!enable) {
ExaOffscreenSwapOut (pScreen);
if (pExaScr->info->exa_minor < 1)
ExaOffscreenSwapOut (pScreen);
else
ExaOffscreenEjectPixmaps (pScreen);
pExaScr->swappedOut = TRUE;
} else {
ExaOffscreenSwapIn (pScreen);
if (pExaScr->info->exa_minor < 1)
ExaOffscreenSwapIn (pScreen);
pExaScr->swappedOut = FALSE;
}
}
@ -390,6 +440,7 @@ ExaOffscreenMarkUsed (PixmapPtr pPixmap)
if (area->state == ExaOffscreenRemovable)
area->score = (area->score * 7) / 8;
}
iter = 0;
}
}

View File

@ -51,6 +51,7 @@
#ifdef RENDER
#include "fbpict.h"
#endif
#include "damage.h"
#define DEBUG_TRACE_FALL 0
#define DEBUG_MIGRATE 0
@ -160,16 +161,16 @@ typedef struct {
unsigned int fb_size; /**< size of pixmap in framebuffer memory */
/**
* If area is NULL, then dirty == TRUE means that the pixmap has been
* modified, so the contents are defined. Used to avoid uploads of
* undefined data.
*
* If area is non-NULL, then dirty == TRUE means that the pixmap data at
* pPixmap->devPrivate.ptr (either fb_ptr or sys_ptr) has been changed
* compared to the copy in the other location. This is used to avoid
* uploads/downloads of unmodified data.
* The damage record contains the areas of the pixmap's current location
* (framebuffer or system) that have been damaged compared to the other
* location.
*/
Bool dirty;
DamagePtr pDamage;
/**
* The valid region marks the valid bits of a drawable (at least, as it's
* derived from damage, which may be overreported).
*/
RegionRec validReg;
} ExaPixmapPrivRec, *ExaPixmapPrivPtr;
typedef struct _ExaMigrationRec {
@ -315,7 +316,7 @@ ExaCheckComposite (CARD8 op,
CARD16 height);
#endif
/* exaoffscreen.c */
/* exa_offscreen.c */
void
ExaOffscreenMarkUsed (PixmapPtr pPixmap);
@ -339,7 +340,10 @@ void
exaFinishAccess(DrawablePtr pDrawable, int index);
void
exaDrawableDirty(DrawablePtr pDrawable);
exaPixmapDirty(PixmapPtr pPix, int x1, int y1, int x2, int y2);
void
exaDrawableDirty(DrawablePtr pDrawable, int x1, int y1, int x2, int y2);
Bool
exaDrawableIsOffscreen (DrawablePtr pDrawable);
@ -409,9 +413,6 @@ void
exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
void
exaMoveInPixmap (PixmapPtr pPixmap);
void
exaMoveOutPixmap (PixmapPtr pPixmap);
exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area);
#endif /* EXAPRIV_H */

View File

@ -302,12 +302,12 @@ exaTryDriverSolidFill(PicturePtr pSrc,
(*pExaScr->info->Solid) (pDstPix,
pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
exaPixmapDirty (pDstPix, pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
pbox++;
}
(*pExaScr->info->DoneSolid) (pDstPix);
exaMarkSync(pDst->pDrawable->pScreen);
exaDrawableDirty (pDst->pDrawable);
REGION_UNINIT(pDst->pDrawable->pScreen, &region);
return 1;
@ -446,12 +446,12 @@ exaTryDriverComposite(CARD8 op,
pbox->y1 + dst_off_y,
pbox->x2 - pbox->x1,
pbox->y2 - pbox->y1);
exaPixmapDirty (pDstPix, pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
pbox->x2 + dst_off_x, pbox->y2 + dst_off_y);
pbox++;
}
(*pExaScr->info->DoneComposite) (pDstPix);
exaMarkSync(pDst->pDrawable->pScreen);
exaDrawableDirty (pDst->pDrawable);
REGION_UNINIT(pDst->pDrawable->pScreen, &region);
return 1;
@ -572,9 +572,7 @@ exaComposite(CARD8 op,
if (pExaScr->swappedOut ||
pSrc->pDrawable == NULL || (pMask != NULL && pMask->pDrawable == NULL))
{
ExaCheckComposite (op, pSrc, pMask, pDst, xSrc, ySrc,
xMask, yMask, xDst, yDst, width, height);
return;
goto fallback;
}
/* Remove repeat in source if useless */
@ -683,12 +681,18 @@ exaComposite(CARD8 op,
}
}
fallback:
#if DEBUG_TRACE_FALL
exaPrintCompositeFallback (op, pSrc, pMask, pDst);
#endif
ExaCheckComposite (op, pSrc, pMask, pDst, xSrc, ySrc,
xMask, yMask, xDst, yDst, width, height);
exaDrawableDirty(pDst->pDrawable,
pDst->pDrawable->x + xDst,
pDst->pDrawable->y + yDst,
pDst->pDrawable->x + xDst + width,
pDst->pDrawable->y + yDst + height);
done:
pSrc->repeat = saveSrcRepeat;
@ -710,16 +714,19 @@ void
exaRasterizeTrapezoid (PicturePtr pPicture, xTrapezoid *trap,
int x_off, int y_off)
{
DrawablePtr pDraw = pPicture->pDrawable;
ExaMigrationRec pixmaps[1];
pixmaps[0].as_dst = TRUE;
pixmaps[0].as_src = TRUE;
pixmaps[0].pPix = exaGetDrawablePixmap (pPicture->pDrawable);
pixmaps[0].pPix = exaGetDrawablePixmap (pDraw);
exaDoMigration(pixmaps, 1, FALSE);
exaPrepareAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
exaPrepareAccess(pDraw, EXA_PREPARE_DEST);
fbRasterizeTrapezoid(pPicture, trap, x_off, y_off);
exaFinishAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
exaDrawableDirty(pDraw, pDraw->x, pDraw->y,
pDraw->x + pDraw->width, pDraw->y + pDraw->height);
exaFinishAccess(pDraw, EXA_PREPARE_DEST);
}
/**
@ -730,16 +737,19 @@ void
exaAddTriangles (PicturePtr pPicture, INT16 x_off, INT16 y_off, int ntri,
xTriangle *tris)
{
DrawablePtr pDraw = pPicture->pDrawable;
ExaMigrationRec pixmaps[1];
pixmaps[0].as_dst = TRUE;
pixmaps[0].as_src = TRUE;
pixmaps[0].pPix = exaGetDrawablePixmap (pPicture->pDrawable);
pixmaps[0].pPix = exaGetDrawablePixmap (pDraw);
exaDoMigration(pixmaps, 1, FALSE);
exaPrepareAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
exaPrepareAccess(pDraw, EXA_PREPARE_DEST);
fbAddTriangles(pPicture, x_off, y_off, ntri, tris);
exaFinishAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
exaDrawableDirty(pDraw, pDraw->x, pDraw->y,
pDraw->x + pDraw->width, pDraw->y + pDraw->height);
exaFinishAccess(pDraw, EXA_PREPARE_DEST);
}
/**
@ -989,15 +999,17 @@ exaGlyphs (CARD8 op,
* First we try to use UploadToScreen, if we can, then we fall back
* to a plain exaCopyArea in case of failure.
*/
if (!pExaScr->info->UploadToScreen ||
!exaPixmapIsOffscreen(pPixmap) ||
!(*pExaScr->info->UploadToScreen) (pPixmap, 0, 0,
if (pExaScr->info->UploadToScreen &&
exaPixmapIsOffscreen(pPixmap) &&
(*pExaScr->info->UploadToScreen) (pPixmap, 0, 0,
glyph->info.width,
glyph->info.height,
glyphdata,
PixmapBytePad(glyph->info.width,
list->format->depth)))
{
exaMarkSync (pScreen);
} else {
/* Set up the scratch pixmap/GC for doing a CopyArea. */
if (pScratchPixmap == NULL) {
/* Get a scratch pixmap to wrap the original glyph data */
@ -1028,10 +1040,11 @@ exaGlyphs (CARD8 op,
exaCopyArea (&pScratchPixmap->drawable, &pPixmap->drawable, pGC,
0, 0, glyph->info.width, glyph->info.height, 0, 0);
} else {
exaDrawableDirty (&pPixmap->drawable);
}
exaPixmapDirty (pPixmap, 0, 0,
glyph->info.width, glyph->info.height);
if (maskFormat)
{
exaComposite (PictOpAdd, pPicture, NULL, pMask, 0, 0, 0, 0,

View File

@ -200,11 +200,33 @@ ExaCheckPolyFillRect (DrawablePtr pDrawable, GCPtr pGC,
int nrect, xRectangle *prect)
{
EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
exaPrepareAccessGC (pGC);
fbPolyFillRect (pDrawable, pGC, nrect, prect);
exaFinishAccessGC (pGC);
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
if (nrect) {
int x1 = max(prect->x, 0), y1 = max(prect->y, 0);
int x2 = min(prect->x + prect->width, pDrawable->width);
int y2 = min(prect->y + prect->height, pDrawable->height);
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
exaPrepareAccessGC (pGC);
fbPolyFillRect (pDrawable, pGC, nrect, prect);
exaFinishAccessGC (pGC);
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
/* Only track bounding box of damage, as this path can degenerate to
* zillions of damage boxes
*/
while (--nrect)
{
prect++;
x1 = min(x1, prect->x);
x2 = max(x2, prect->x + prect->width);
y1 = min(y1, prect->y);
y2 = max(y2, prect->y + prect->height);
}
exaDrawableDirty (pDrawable, pDrawable->x + x1, pDrawable->y + y1,
pDrawable->x + x2, pDrawable->y + y2);
}
}
void

View File

@ -1338,6 +1338,104 @@ fbCompositeSrc_8888x8888mmx (CARD8 op,
_mm_empty();
}
void
fbCompositeSrc_8888x0565mmx (CARD8 op,
PicturePtr pSrc,
PicturePtr pMask,
PicturePtr pDst,
INT16 xSrc,
INT16 ySrc,
INT16 xMask,
INT16 yMask,
INT16 xDst,
INT16 yDst,
CARD16 width,
CARD16 height)
{
CARD16 *dstLine, *dst;
CARD32 *srcLine, *src;
FbStride dstStride, srcStride;
CARD16 w;
CHECKPOINT();
fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1);
fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1);
assert (pSrc->pDrawable == pMask->pDrawable);
while (height--)
{
dst = dstLine;
dstLine += dstStride;
src = srcLine;
srcLine += srcStride;
w = width;
CHECKPOINT();
while (w && (unsigned long)dst & 7)
{
__m64 vsrc = load8888 (*src);
ullong d = *dst;
__m64 vdest = expand565 ((__m64)d, 0);
vdest = pack565(over(vsrc, expand_alpha(vsrc), vdest), vdest, 0);
*dst = (ullong)vdest;
w--;
dst++;
src++;
}
CHECKPOINT();
while (w >= 4)
{
__m64 vsrc0, vsrc1, vsrc2, vsrc3;
__m64 vdest;
vsrc0 = load8888(*(src + 0));
vsrc1 = load8888(*(src + 1));
vsrc2 = load8888(*(src + 2));
vsrc3 = load8888(*(src + 3));
vdest = *(__m64 *)dst;
vdest = pack565(over(vsrc0, expand_alpha(vsrc0), expand565(vdest, 0)), vdest, 0);
vdest = pack565(over(vsrc1, expand_alpha(vsrc1), expand565(vdest, 1)), vdest, 1);
vdest = pack565(over(vsrc2, expand_alpha(vsrc2), expand565(vdest, 2)), vdest, 2);
vdest = pack565(over(vsrc3, expand_alpha(vsrc3), expand565(vdest, 3)), vdest, 3);
*(__m64 *)dst = vdest;
w -= 4;
dst += 4;
src += 4;
}
CHECKPOINT();
while (w)
{
__m64 vsrc = load8888 (*src);
ullong d = *dst;
__m64 vdest = expand565 ((__m64)d, 0);
vdest = pack565(over(vsrc, expand_alpha(vsrc), vdest), vdest, 0);
*dst = (ullong)vdest;
w--;
dst++;
src++;
}
}
_mm_empty();
}
void
fbCompositeSolidMask_nx8x8888mmx (CARD8 op,
PicturePtr pSrc,

View File

@ -130,6 +130,18 @@ void fbCompositeSrc_8888RevNPx8888mmx (CARD8 op,
INT16 yDst,
CARD16 width,
CARD16 height);
void fbCompositeSrc_8888x0565mmx (CARD8 op,
PicturePtr pSrc,
PicturePtr pMask,
PicturePtr pDst,
INT16 xSrc,
INT16 ySrc,
INT16 xMask,
INT16 yMask,
INT16 xDst,
INT16 yDst,
CARD16 width,
CARD16 height);
void fbCompositeSrc_8888RevNPx0565mmx (CARD8 op,
PicturePtr pSrc,
PicturePtr pMask,

View File

@ -1175,7 +1175,12 @@ fbComposite (CARD8 op,
func = fbCompositeSrc_8888x0888;
break;
case PICT_r5g6b5:
func = fbCompositeSrc_8888x0565;
#ifdef USE_MMX
if (fbHaveMMX())
func = fbCompositeSrc_8888x0565mmx;
else
#endif
func = fbCompositeSrc_8888x0565;
break;
default:
break;
@ -1221,7 +1226,12 @@ fbComposite (CARD8 op,
func = fbCompositeSrc_8888x0888;
break;
case PICT_b5g6r5:
func = fbCompositeSrc_8888x0565;
#ifdef USE_MMX
if (fbHaveMMX())
func = fbCompositeSrc_8888x0565mmx;
else
#endif
func = fbCompositeSrc_8888x0565;
break;
default:
break;
@ -1516,7 +1526,9 @@ static unsigned int detectCPUFeatures(void) {
features |= SSE;
if (result & (1 << 26))
features |= SSE2;
if ((result & MMX) && !(result & SSE) && (strcmp(vendor, "AuthenticAMD") == 0)) {
if ((features & MMX) && !(features & SSE) &&
(strcmp(vendor, "AuthenticAMD") == 0 ||
strcmp(vendor, "Geode by NSC") == 0)) {
/* check for AMD MMX extensions */
unsigned int result;

View File

@ -105,9 +105,6 @@ fbCanGetSolid(PicturePtr pict)
}
}
#define fbCanGetSolid(pict) \
(pict->pDrawable != NULL && pict->pDrawable->width == 1 && pict->pDrawable->height == 1)
#define fbComposeGetSolid(pict, bits, fmt) { \
FbBits *__bits__; \
FbStride __stride__; \

View File

@ -1,52 +1,249 @@
noinst_LIBRARIES = libdarwinShared.a
libdarwin_XINPUT_SRCS = darwinXinput.c
AM_CFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@
AM_CPPFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@
INCLUDES = @XORG_INCS@
DEFS = @DEFS@ -DUSE_NEW_CLUT
if XQUARTZ
XQUARTZ_SUBDIRS = bundle quartz
endif
SUBDIRS = \
iokit \
$(XQUARTZ_SUBDIRS) \
utils \
.
darwinappdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app
libdarwinShared_a_SOURCES = darwin.c \
darwinEvents.c \
darwinKeyboard.c \
$(darwin_XINPUT_SRCS)
bin_PROGRAMS = XDarwin
XDarwin_SOURCES = \
$(top_srcdir)/fb/fbcmap.c \
$(top_srcdir)/mi/miinitext.c \
$(top_srcdir)/Xi/stubs.c
XDarwin_LDADD = \
$(top_builddir)/dix/dixfonts.lo \
$(top_builddir)/dix/libdix.la \
$(top_builddir)/config/libconfig.a \
$(top_builddir)/os/libos.la \
./libdarwinShared.a \
./iokit/libiokit.a \
$(top_builddir)/dix/libxpstubs.la \
$(top_builddir)/miext/shadow/libshadow.la \
$(top_builddir)/fb/libfb.la \
$(top_builddir)/composite/libcomposite.la \
$(top_builddir)/damageext/libdamageext.la \
$(top_builddir)/miext/damage/libdamage.la \
$(top_builddir)/xfixes/libxfixes.la \
$(top_builddir)/miext/cw/libcw.la \
$(top_builddir)/Xext/libXext.la \
$(top_builddir)/xkb/libxkb.la \
$(top_builddir)/xkb/libxkbstubs.la \
$(top_builddir)/Xi/libXi.la \
$(top_builddir)/dbe/libdbe.la \
$(top_builddir)/record/librecord.la \
$(top_builddir)/XTrap/libxtrap.la \
$(XGLX_LIBS) \
$(top_builddir)/miext/rootless/librootless.la \
$(top_builddir)/miext/rootless/safeAlpha/libsafeAlpha.la \
$(top_builddir)/miext/rootless/accel/librlAccel.la \
@XORG_LIBS@ \
-lXau -lXdmcp -lXfont -lfreetype
XDarwin_LDFLAGS = \
-XCClinker -Objc \
-Wl,-u,_miDCInitialize \
-Wl,-framework,IOKit
XDarwin_CFLAGS = -DINXDARWIN
if XQUARTZ
macosdir = $(darwinappdir)/Contents/MacOS
DEFS += -DDARWIN_WITH_QUARTZ -DXFree86Server
macos_PROGRAMS = XDarwinApp
XDarwinApp_SOURCES = \
$(top_srcdir)/fb/fbcmap.c \
$(top_srcdir)/mi/miinitext.c \
$(top_srcdir)/Xi/stubs.c
XDarwinApp_LDADD = \
$(top_builddir)/dix/dixfonts.lo \
$(top_builddir)/dix/libdix.la \
$(top_builddir)/config/libconfig.a \
$(top_builddir)/os/libos.la \
./quartz/XApplication.o \
./libdarwinShared.a \
./quartz/libXQuartz.a \
$(top_builddir)/dix/libxpstubs.la \
$(top_builddir)/miext/shadow/libshadow.la \
$(top_builddir)/fb/libfb.la \
$(top_builddir)/composite/libcomposite.la \
$(top_builddir)/damageext/libdamageext.la \
$(top_builddir)/miext/damage/libdamage.la \
$(top_builddir)/xfixes/libxfixes.la \
$(top_builddir)/miext/cw/libcw.la \
$(top_builddir)/Xext/libXext.la \
$(top_builddir)/xkb/libxkb.la \
$(top_builddir)/xkb/libxkbstubs.la \
$(top_builddir)/Xi/libXi.la \
$(top_builddir)/dbe/libdbe.la \
$(top_builddir)/record/librecord.la \
$(top_builddir)/XTrap/libxtrap.la \
$(XGLX_LIBS) \
$(top_builddir)/miext/rootless/librootless.la \
$(top_builddir)/miext/rootless/safeAlpha/libsafeAlpha.la \
$(top_builddir)/miext/rootless/accel/librlAccel.la \
@XORG_LIBS@ \
-lXau -lXdmcp -lXfont -lfreetype \
$(top_builddir)/fb/libfb.la
XDarwinApp_LDFLAGS = \
-XCClinker -Objc \
-Wl,-u,_miDCInitialize \
-Wl,-framework,Carbon \
-Wl,-framework,ApplicationServices \
-Wl,-framework,Cocoa \
-Wl,-framework,CoreAudio \
-Wl,-framework,IOKit
HOOK_TARGETS = xquartz-install-hook
crplugindir = $(darwinappdir)/Contents/Resources/cr.bundle/Contents/MacOS
crplugin_LTLIBRARIES = cr.la
cr_la_SOURCES =
cr_la_LIBADD = \
quartz/cr/crAppleWM.o \
quartz/cr/crFrame.o \
quartz/cr/crScreen.o \
quartz/fullscreen/quartzCursor.o \
quartz/cr/XView.o \
$(top_builddir)/miext/rootless/librootless.la \
$(top_builddir)/miext/rootless/safeAlpha/libsafeAlpha.la \
$(top_builddir)/miext/rootless/accel/librlAccel.la
cr_la_LDFLAGS = -shrext '' -Wl,-framework,ApplicationServices \
-Wl,-framework,Cocoa \
-Wl,-framework,Carbon \
-XCClinker -ObjC \
-XCClinker -bundle_loader -XCClinker XDarwinApp \
-module -avoid-version -no-undefined
cr_la_DEPENDENCIES = XDarwinApp
fullscreenplugindir = $(darwinappdir)/Contents/Resources/fullscreen.bundle/Contents/MacOS
fullscreenplugin_LTLIBRARIES = fullscreen.la
fullscreen_la_SOURCES =
fullscreen_la_LIBADD = \
quartz/fullscreen/fullscreen.o \
quartz/fullscreen/quartzCursor.o \
$(top_builddir)/miext/shadow/libshadow.la
fullscreen_la_LDFLAGS = -shrext '' -Wl,-framework,ApplicationServices \
-XCClinker -bundle_loader -XCClinker XDarwinApp \
-module -avoid-version -no-undefined
fullscreen_la_DEPENDENCIES = XDarwinApp
if GLX
glxMesaplugindir = $(darwinappdir)/Contents/Resources/glxMesa.bundle/Contents/MacOS
glxMesaplugin_LTLIBRARIES = glxMesa.la
glxMesa_la_SOURCES =
glxMesa_la_LIBADD = \
$(top_builddir)/GL/glx/libglx.la \
$(top_builddir)/GL/mesa/libGLcore.la
glxMesa_la_LDFLAGS = -shrext '' \
-Wl,-framework,AGL \
-Wl,-framework,OpenGL \
-XCClinker -ObjC \
-XCClinker -bundle_loader -XCClinker XDarwinApp \
-module -avoid-version -no-undefined
glxMesa_la_DEPENDENCIES = XDarwinApp
endif
endif
if HAVE_X_PLUGIN
xprplugindir = $(darwinappdir)/Contents/Resources/xpr.bundle/Contents/MacOS
xprplugin_LTLIBRARIES = xpr.la
xpr_la_SOURCES =
xpr_la_LIBADD = \
quartz/xpr/appledri.o \
quartz/xpr/dri.o \
quartz/xpr/xprAppleWM.o \
quartz/xpr/xprCursor.o \
quartz/xpr/xprFrame.o \
quartz/xpr/xprScreen.o \
quartz/xpr/x-hash.o \
quartz/xpr/x-hook.o \
quartz/xpr/x-list.o \
$(top_builddir)/miext/rootless/librootless.la \
$(top_builddir)/miext/rootless/safeAlpha/libsafeAlpha.la \
$(top_builddir)/miext/rootless/accel/librlAccel.la
xpr_la_LDFLAGS = -shrext '' -Wl,-framework,ApplicationServices \
-lXplugin \
-XCClinker -bundle_loader -XCClinker XDarwinApp \
-module -avoid-version -no-undefined
xpr_la_DEPENDENCIES = XDarwinApp
endif
if HAVE_AGL_FRAMEWORK
glxCGLplugindir = $(darwinappdir)/Contents/Resources/glxCGL.bundle/Contents/MacOS
glxCGLplugin_LTLIBRARIES = glxCGL.la
glxCGL_la_SOURCES =
glxCGL_la_LIBADD = \
$(top_builddir)/GL/glx/glxext.o \
$(top_builddir)/GL/glx/libglx.a \
$(top_builddir)/GL/apple/libAGLcore.a
glxCGL_la_LDFLAGS = -shrext '' -Wl,-framework,ApplicationServices \
-Wl,-framework,AGL \
-Wl,-framework,OpenGL \
-XCClinker -ObjC \
-XCClinker -bundle_loader -XCClinker XDarwinApp \
-module -avoid-version -no-undefined
glxCGL_la_DEPENDENCIES = XDarwinApp
glxAGLplugindir = $(darwinappdir)/Contents/Resources/glxAGL.bundle/Contents/MacOS
glxAGLplugin_LTLIBRARIES = glxAGL.la
glxAGL_la_SOURCES =
glxAGL_la_LIBADD = \
$(top_builddir)/GL/glx/glxext.o \
$(top_builddir)/GL/glx/libglx.a \
$(top_builddir)/GL/apple/libAGLcore.a
glxAGL_la_LDFLAGS = -shrext '' \
-Wl,-framework,AGL \
-Wl,-framework,OpenGL \
-XCClinker -ObjC \
-XCClinker -bundle_loader -XCClinker XDarwinApp \
-module -avoid-version -no-undefined
glxAGL_la_DEPENDENCIES = XDarwinApp
endif
man1_MANS = XDarwin.man
uninstall-hook:
rm -rf $(DESTDIR)$(macosdir)/XDarwin
install-data-hook: $(HOOK_TARGETS)
xquartz-install-hook:
mv $(DESTDIR)$(macosdir)/XDarwinApp $(DESTDIR)$(macosdir)/XDarwin
EXTRA_DIST = \
bundle/Dutch.lproj/Credits.rtf \
bundle/Dutch.lproj/Localizable.strings \
bundle/Dutch.lproj/MainMenu.nib/classes.nib \
bundle/Dutch.lproj/MainMenu.nib/objects.nib \
bundle/Dutch.lproj/XDarwinHelp.html.cpp \
bundle/English.lproj/Credits.rtf \
bundle/English.lproj/InfoPlist.strings.cpp \
bundle/English.lproj/Localizable.strings \
bundle/English.lproj/MainMenu.nib/classes.nib \
bundle/English.lproj/MainMenu.nib/objects.nib \
bundle/English.lproj/XDarwinHelp.html.cpp \
bundle/French.lproj/Credits.rtf \
bundle/French.lproj/Localizable.strings \
bundle/French.lproj/MainMenu.nib/classes.nib \
bundle/French.lproj/MainMenu.nib/objects.nib \
bundle/French.lproj/XDarwinHelp.html.cpp \
bundle/German.lproj/Credits.rtf \
bundle/German.lproj/Localizable.strings \
bundle/German.lproj/MainMenu.nib/classes.nib \
bundle/German.lproj/MainMenu.nib/objects.nib \
bundle/German.lproj/XDarwinHelp.html.cpp \
bundle/Japanese.lproj/Credits.rtf \
bundle/Japanese.lproj/Localizable.strings \
bundle/Japanese.lproj/MainMenu.nib/classes.nib \
bundle/Japanese.lproj/MainMenu.nib/objects.nib \
bundle/Japanese.lproj/XDarwinHelp.html.cpp \
bundle/ko.lproj/Credits.rtf \
bundle/ko.lproj/Localizable.strings \
bundle/ko.lproj/MainMenu.nib/classes.nib \
bundle/ko.lproj/MainMenu.nib/objects.nib \
bundle/ko.lproj/XDarwinHelp.html.cpp \
bundle/Portuguese.lproj/Credits.rtf \
bundle/Portuguese.lproj/Localizable.strings \
bundle/Portuguese.lproj/MainMenu.nib/classes.nib \
bundle/Portuguese.lproj/MainMenu.nib/objects.nib \
bundle/Portuguese.lproj/XDarwinHelp.html.cpp \
bundle/Spanish.lproj/Credits.rtf \
bundle/Spanish.lproj/Localizable.strings \
bundle/Spanish.lproj/MainMenu.nib/classes.nib \
bundle/Spanish.lproj/MainMenu.nib/objects.nib \
bundle/Spanish.lproj/XDarwinHelp.html.cpp \
bundle/startXClients.cpp \
bundle/Swedish.lproj/Credits.rtf \
bundle/Swedish.lproj/Localizable.strings \
bundle/Swedish.lproj/MainMenu.nib/classes.nib \
bundle/Swedish.lproj/MainMenu.nib/objects.nib \
bundle/Swedish.lproj/XDarwinHelp.html.cpp \
bundle/XDarwin.icns \
darwin.c \
darwinClut8.h \
darwinEvents.c \
@ -54,64 +251,4 @@ EXTRA_DIST = \
darwinKeyboard.c \
darwinKeyboard.h \
darwinXinput.c \
iokit/xfIOKit.c \
iokit/xfIOKitCursor.c \
iokit/xfIOKit.h \
iokit/xfIOKitStartup.c \
Makefile.am \
quartz/applewm.c \
quartz/applewmExt.h \
quartz/cr/crAppleWM.m \
quartz/cr/crFrame.m \
quartz/cr/cr.h \
quartz/cr/crScreen.m \
quartz/cr/XView.h \
quartz/cr/XView.m \
quartz/fullscreen/fullscreen.c \
quartz/fullscreen/quartzCursor.c \
quartz/fullscreen/quartzCursor.h \
quartz/keysym2ucs.c \
quartz/keysym2ucs.h \
quartz/Preferences.h \
quartz/Preferences.m \
quartz/pseudoramiX.c \
quartz/pseudoramiX.h \
quartz/quartzAudio.c \
quartz/quartzAudio.h \
quartz/quartz.c \
quartz/quartzCocoa.m \
quartz/quartzCommon.h \
quartz/quartzCursor.c \
quartz/quartzCursor.h \
quartz/quartz.h \
quartz/quartzKeyboard.c \
quartz/quartzPasteboard.c \
quartz/quartzPasteboard.h \
quartz/quartzStartup.c \
quartz/XApplication.h \
quartz/XApplication.m \
quartz/XDarwin.pbproj/project.pbxproj \
quartz/XDarwinStartup.c \
quartz/XDarwinStartup.man \
quartz/xpr/appledri.c \
quartz/xpr/dri.c \
quartz/xpr/dri.h \
quartz/xpr/dristruct.h \
quartz/xpr/x-hash.c \
quartz/xpr/x-hash.h \
quartz/xpr/x-hook.c \
quartz/xpr/x-hook.h \
quartz/xpr/x-list.c \
quartz/xpr/x-list.h \
quartz/xpr/Xplugin.h \
quartz/xpr/xprAppleWM.c \
quartz/xpr/xprCursor.c \
quartz/xpr/xprFrame.c \
quartz/xpr/xpr.h \
quartz/xpr/xprScreen.c \
quartz/XServer.h \
quartz/XServer.m \
utils/dumpkeymap.c \
utils/dumpkeymap.man \
utils/README.txt \
XDarwin.man

View File

@ -0,0 +1,35 @@
BINDIR = ${bindir}
include $(top_srcdir)/cpprules.in
XINITDIR = $(libdir)/X11/xinit
XDEFS = \
-DX_VERSION="$(PLIST_VERSION_STRING)" \
-DX_PRE_RELEASE="$(PRE)" \
-DX_REL_DATE="$(XORG_DATE)" \
-DX_VENDOR_NAME="$(VENDOR_STRING)" \
-DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
Dutchlprojdir = $(resourcesdir)/Dutch.lproj
Dutchlproj_DATA = \
XDarwinHelp.html \
InfoPlist.strings \
Credits.rtf Localizable.strings
Dutchlprojnibdir = $(Dutchlprojdir)/MainMenu.nib
Dutchlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
XDarwinHelp.html: XDarwinHelp.html.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
CLEANFILES = XDarwinHelp.html InfoPlist.strings
EXTRA_DIST = \
Credits.rtf Localizable.strings \
MainMenu.nib/classes.nib \
MainMenu.nib/objects.nib \
XDarwinHelp.html.cpp

View File

@ -0,0 +1,35 @@
BINDIR = ${bindir}
include $(top_srcdir)/cpprules.in
XINITDIR = $(libdir)/X11/xinit
XDEFS = \
-DX_VERSION="$(PLIST_VERSION_STRING)" \
-DX_PRE_RELEASE="$(PRE)" \
-DX_REL_DATE="$(XORG_DATE)" \
-DX_VENDOR_NAME="$(VENDOR_STRING)" \
-DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
Englishlprojdir = $(resourcesdir)/English.lproj
Englishlproj_DATA = \
XDarwinHelp.html \
InfoPlist.strings \
Credits.rtf Localizable.strings
Englishlprojnibdir = $(Englishlprojdir)/MainMenu.nib
Englishlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
InfoPlist.strings: InfoPlist.strings.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
XDarwinHelp.html: XDarwinHelp.html.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
CLEANFILES = XDarwinHelp.html InfoPlist.strings
EXTRA_DIST = \
Credits.rtf Localizable.strings \
MainMenu.nib/classes.nib \
MainMenu.nib/objects.nib \
XDarwinHelp.html.cpp \
InfoPlist.strings.cpp

View File

@ -0,0 +1,38 @@
BINDIR = ${bindir}
include $(top_srcdir)/cpprules.in
XINITDIR = $(libdir)/X11/xinit
XDEFS = \
-DX_VERSION="$(PLIST_VERSION_STRING)" \
-DX_PRE_RELEASE="$(PRE)" \
-DX_REL_DATE="$(XORG_DATE)" \
-DX_VENDOR_NAME="$(VENDOR_STRING)" \
-DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
Frenchlprojdir = $(resourcesdir)/French.lproj
Frenchlproj_DATA = \
XDarwinHelp.html \
InfoPlist.strings \
Credits.rtf Localizable.strings
Frenchlprojnibdir = $(Frenchlprojdir)/MainMenu.nib
Frenchlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
XDarwinHelp.html: XDarwinHelp.html.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
CLEANFILES = XDarwinHelp.html InfoPlist.strings
EXTRA_DIST = \
Credits.rtf Localizable.strings \
Localizable.strings \
MainMenu.nib/classes.nib \
MainMenu.nib/objects.nib \
XDarwinHelp.html.cpp

View File

@ -0,0 +1,36 @@
BINDIR = ${bindir}
include $(top_srcdir)/cpprules.in
XINITDIR = $(libdir)/X11/xinit
XDEFS = \
-DX_VERSION="$(PLIST_VERSION_STRING)" \
-DX_PRE_RELEASE="$(PRE)" \
-DX_REL_DATE="$(XORG_DATE)" \
-DX_VENDOR_NAME="$(VENDOR_STRING)" \
-DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
Germanlprojdir = $(resourcesdir)/German.lproj
Germanlproj_DATA = \
XDarwinHelp.html \
InfoPlist.strings \
Credits.rtf Localizable.strings
Germanlprojnibdir = $(Germanlprojdir)/MainMenu.nib
Germanlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
XDarwinHelp.html: XDarwinHelp.html.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
CLEANFILES = XDarwinHelp.html InfoPlist.strings
EXTRA_DIST = \
Credits.rtf Localizable.strings \
Localizable.strings \
MainMenu.nib/classes.nib \
MainMenu.nib/objects.nib \
XDarwinHelp.html.cpp

View File

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>x11app</string>
</array>
<key>CFBundleTypeName</key>
<string>X11 Application</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>****</string>
</array>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>tool</string>
<string>*</string>
</array>
<key>CFBundleTypeName</key>
<string>UNIX Application</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>****</string>
</array>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
</array>
<key>CFBundleExecutable</key>
<string>XDarwin</string>
<key>CFBundleGetInfoString</key>
<string>XDarwin 1.4.0, X.Org Foundation</string>
<key>CFBundleIconFile</key>
<string>XDarwin.icns</string>
<key>CFBundleIdentifier</key>
<string>org.x.XDarwin</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>XDarwin</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>XDarwin 1.4.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string></string>
<key>NSHelpFile</key>
<string>XDarwinHelp.html</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>XApplication</string>
</dict>
</plist>

View File

@ -0,0 +1,37 @@
BINDIR = ${bindir}
include $(top_srcdir)/cpprules.in
XINITDIR = $(libdir)/X11/xinit
XDEFS = \
-DX_VERSION="$(PLIST_VERSION_STRING)" \
-DX_PRE_RELEASE="$(PRE)" \
-DX_REL_DATE="$(XORG_DATE)" \
-DX_VENDOR_NAME="$(VENDOR_STRING)" \
-DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
Japaneselprojdir = $(resourcesdir)/Japanese.lproj
Japaneselproj_DATA = \
XDarwinHelp.html \
InfoPlist.strings \
Credits.rtf Localizable.strings
Japaneselprojnibdir = $(Japaneselprojdir)/MainMenu.nib
Japaneselprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
XDarwinHelp.html: XDarwinHelp.html.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
CLEANFILES = XDarwinHelp.html InfoPlist.strings
EXTRA_DIST = \
Credits.rtf Localizable.strings \
Localizable.strings \
MainMenu.nib/classes.nib \
MainMenu.nib/objects.nib \
XDarwinHelp.html.cpp

View File

@ -0,0 +1,38 @@
BINDIR = ${bindir}
include $(top_srcdir)/cpprules.in
XINITDIR = $(libdir)/X11/xinit
XDEFS = \
-DX_VERSION="$(PLIST_VERSION_STRING)" \
-DX_PRE_RELEASE="$(PRE)" \
-DX_REL_DATE="$(XORG_DATE)" \
-DX_VENDOR_NAME="$(VENDOR_STRING)" \
-DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
SUBDIRS = English.lproj Dutch.lproj French.lproj German.lproj Japanese.lproj \
ko.lproj Portuguese.lproj Spanish.lproj Swedish.lproj
bin_SCRIPTS = startXClients
startXClients: $(srcdir)/startXClients.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) -DXINITDIR=$(XINITDIR) -DXBINDIR=$(BINDIR) $< | $(CPP_SED_MAGIC) > $@
-chmod 755 startXClients
contentsdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents
resourcesdir = $(contentsdir)/Resources
contents_DATA = Info.plist
resources_DATA = XDarwin.icns startXClients
install-data-hook:
chmod 755 $(DESTDIR)$(resourcesdir)/startXClients
echo "APPL????" > $(DESTDIR)$(contentsdir)/PkgInfo
touch $(DESTDIR)@APPLE_APPLICATIONS_DIR@/XDarwin.app
uninstall-hook:
rm -rf $(DESTDIR)$(contentsdir)/PkgInfo
CLEANFILES = startXClients
EXTRA_DIST = \
XDarwin.icns \
Info.plist

View File

@ -0,0 +1,36 @@
BINDIR = ${bindir}
include $(top_srcdir)/cpprules.in
XINITDIR = $(libdir)/X11/xinit
XDEFS = \
-DX_VERSION="$(PLIST_VERSION_STRING)" \
-DX_PRE_RELEASE="$(PRE)" \
-DX_REL_DATE="$(XORG_DATE)" \
-DX_VENDOR_NAME="$(VENDOR_STRING)" \
-DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
Portugueselprojdir = $(resourcesdir)/Portuguese.lproj
Portugueselproj_DATA = \
XDarwinHelp.html \
InfoPlist.strings \
Credits.rtf Localizable.strings
Portugueselprojnibdir = $(Portugueselprojdir)/MainMenu.nib
Portugueselprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
XDarwinHelp.html: XDarwinHelp.html.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
CLEANFILES = XDarwinHelp.html InfoPlist.strings
EXTRA_DIST = \
Credits.rtf Localizable.strings \
Localizable.strings \
MainMenu.nib/classes.nib \
MainMenu.nib/objects.nib \
XDarwinHelp.html.cpp

View File

@ -0,0 +1,36 @@
BINDIR = ${bindir}
include $(top_srcdir)/cpprules.in
XINITDIR = $(libdir)/X11/xinit
XDEFS = \
-DX_VERSION="$(PLIST_VERSION_STRING)" \
-DX_PRE_RELEASE="$(PRE)" \
-DX_REL_DATE="$(XORG_DATE)" \
-DX_VENDOR_NAME="$(VENDOR_STRING)" \
-DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
Spanishlprojdir = $(resourcesdir)/Spanish.lproj
Spanishlproj_DATA = \
XDarwinHelp.html \
InfoPlist.strings \
Credits.rtf Localizable.strings
Spanishlprojnibdir = $(Spanishlprojdir)/MainMenu.nib
Spanishlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
XDarwinHelp.html: XDarwinHelp.html.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
CLEANFILES = XDarwinHelp.html InfoPlist.strings
EXTRA_DIST = \
Credits.rtf Localizable.strings \
Localizable.strings \
MainMenu.nib/classes.nib \
MainMenu.nib/objects.nib \
XDarwinHelp.html.cpp

View File

@ -0,0 +1,36 @@
BINDIR = ${bindir}
include $(top_srcdir)/cpprules.in
XINITDIR = $(libdir)/X11/xinit
XDEFS = \
-DX_VERSION="$(PLIST_VERSION_STRING)" \
-DX_PRE_RELEASE="$(PRE)" \
-DX_REL_DATE="$(XORG_DATE)" \
-DX_VENDOR_NAME="$(VENDOR_STRING)" \
-DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
Swedishlprojdir = $(resourcesdir)/Swedish.lproj
Swedishlproj_DATA = \
XDarwinHelp.html \
InfoPlist.strings \
Credits.rtf Localizable.strings
Swedishlprojnibdir = $(Swedishlprojdir)/MainMenu.nib
Swedishlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
XDarwinHelp.html: XDarwinHelp.html.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
CLEANFILES = XDarwinHelp.html InfoPlist.strings
EXTRA_DIST = \
Credits.rtf Localizable.strings \
Localizable.strings \
MainMenu.nib/classes.nib \
MainMenu.nib/objects.nib \
XDarwinHelp.html.cpp

View File

@ -0,0 +1,37 @@
BINDIR = ${bindir}
include $(top_srcdir)/cpprules.in
XINITDIR = $(libdir)/X11/xinit
XDEFS = \
-DX_VERSION="$(PLIST_VERSION_STRING)" \
-DX_PRE_RELEASE="$(PRE)" \
-DX_REL_DATE="$(XORG_DATE)" \
-DX_VENDOR_NAME="$(VENDOR_STRING)" \
-DX_VENDOR_LINK="$(PLIST_VENDOR_WEB)"
resourcesdir = @APPLE_APPLICATIONS_DIR@/XDarwin.app/Contents/Resources
kolprojdir = $(resourcesdir)/ko.lproj
kolproj_DATA = \
XDarwinHelp.html \
InfoPlist.strings \
Credits.rtf Localizable.strings
kolprojnibdir = $(kolprojdir)/MainMenu.nib
kolprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib
InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@
XDarwinHelp.html: XDarwinHelp.html.cpp
$(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@
CLEANFILES = XDarwinHelp.html InfoPlist.strings
EXTRA_DIST = \
Credits.rtf Localizable.strings \
Localizable.strings \
MainMenu.nib/classes.nib \
MainMenu.nib/objects.nib \
XDarwinHelp.html.cpp

View File

@ -30,6 +30,10 @@
* use or other dealings in this Software without prior written authorization.
*/
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include <X11/X.h>
#include <X11/Xproto.h>
#include "os.h"
@ -409,9 +413,9 @@ static int DarwinMouseProc(
InitPointerDeviceStruct( (DevicePtr)pPointer,
map,
5, // numbuttons (4 & 5 are scroll wheel)
miPointerGetMotionEvents,
GetMotionHistory,
DarwinChangePointerControl,
0 );
GetMotionHistorySize(), 2 );
#ifdef XINPUT
InitValuatorAxisStruct( pPointer,
0, // X axis

View File

@ -31,6 +31,7 @@
#include "inputstr.h"
#include "scrnintstr.h"
#include <X11/extensions/XKB.h>
#include <assert.h>
typedef struct {
void *framebuffer;

View File

@ -72,7 +72,7 @@
#include <architecture/byte_order.h> // For the NXSwap*
#include "darwin.h"
#include "darwinKeyboard.h"
#include <assert.h>
#define AltMask Mod1Mask
#define MetaMask Mod2Mask
#define FunctionMask Mod3Mask

View File

@ -29,7 +29,7 @@
#define XK_TECHNICAL // needed to get XK_Escape
#define XK_PUBLISHING
#include "keysym.h"
#include "X11/keysym.h"
#include "inputstr.h"
// Each key can generate 4 glyphs. They are, in order:

View File

@ -0,0 +1,17 @@
noinst_LIBRARIES = libiokit.a
AM_CFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@
INCLUDES = -I. -I.. -I$(srcdir) -I$(srcdir)/.. @XORG_INCS@
AM_DEFS =
if XQUARTZ
AM_DEFS += -DDARWIN_WITH_QUARTZ -DXFree86Server
XQUARTZ_SUBDIRS = bundle quartz
endif
DEFS = @DEFS@ $(AM_DEFS)
libiokit_a_SOURCES = xfIOKit.c \
xfIOKitCursor.c \
xfIOKitStartup.c
EXTRA_DIST = \
xfIOKit.h

View File

@ -34,6 +34,10 @@
* use or other dealings in this Software without prior written authorization.
*/
#if HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include <X11/X.h>
#include <X11/Xproto.h>
#include "os.h"
@ -51,6 +55,7 @@
#include <unistd.h>
#include <fcntl.h>
#include <pthread.h>
#include <assert.h>
#include <mach/mach_interface.h>

View File

@ -58,6 +58,9 @@
* use or other dealings in this Software without prior written authorization.
*/
#if HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include "scrnintstr.h"
#include "cursorstr.h"
#include "mipointrst.h"
@ -67,7 +70,7 @@
#include <IOKit/hidsystem/IOHIDLib.h>
#include "darwin.h"
#include "xfIOKit.h"
#include <assert.h>
#define DUMP_DARWIN_CURSOR FALSE
#define CURSOR_PRIV(pScreen) \

View File

@ -29,6 +29,11 @@
* use or other dealings in this Software without prior written authorization.
*/
#if HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include "darwin.h"
#include "darwinKeyboard.h"
#include "micmap.h"
@ -57,7 +62,9 @@ void DarwinHandleGUI(
*/
void DarwinGlxExtensionInit(void)
{
GlxExtensionInit();
#ifdef GLXEXT
GlxExtensionInit();
#endif
}
@ -67,7 +74,9 @@ void DarwinGlxExtensionInit(void)
void DarwinGlxWrapInitVisuals(
miInitVisualsProcPtr *procPtr)
{
#ifdef GLXEXT
GlxWrapInitVisuals(procPtr);
#endif
}

View File

@ -2,6 +2,7 @@ DIST_SUBDIRS = input config glxProxy examples doc
SUBDIRS = input config examples
bin_PROGRAMS = Xdmx
noinst_LIBRARIES = libfbcmap.a
if XINERAMA
PANORAMIX_SRCS = $(top_srcdir)/Xext/panoramiX.c
@ -16,13 +17,20 @@ GLX_INCS = -I$(top_srcdir)/hw/xfree86/dixmods/extmod \
GLX_DEFS = @GL_CFLAGS@
endif
# It's essential that fbcmap.c be compiled with this flag for DMX to work!!
DMX_CFLAGS = -DXFree86Server=1
if BUILDDOCS
SUBDIRS += doc
endif
AM_CFLAGS = \
-DHAVE_DMX_CONFIG_H \
$(DIX_CFLAGS) \
$(GLX_INCS) \
$(GLX_DEFS) \
@DMXMODULES_CFLAGS@
libfbcmap_a_SOURCES = libfbcmap.a
libfbcmap_a_CFLAGS = $(AM_CFLAGS) -DXFree86Server
Xdmx_SOURCES = dmx.c \
dmxcb.c \
dmxcb.h \
@ -67,7 +75,6 @@ Xdmx_SOURCES = dmx.c \
dmxvisual.h \
dmxwindow.c \
dmxwindow.h \
$(top_srcdir)/fb/fbcmap.c \
$(top_srcdir)/mi/miinitext.c \
$(GLX_SRCS)
@ -82,16 +89,9 @@ Xdmx_LDADD = $(XORG_CORE_LIBS) \
$(GLX_LIBS) \
input/libdmxinput.a \
config/libdmxconfig.a \
libfbcmap.a \
@DMXMODULES_LIBS@
Xdmx_CFLAGS = \
-DHAVE_DMX_CONFIG_H \
$(DIX_CFLAGS) \
$(GLX_INCS) \
$(GLX_DEFS) \
$(DMX_CFLAGS) \
@DMXMODULES_CFLAGS@
# Man page
appmandir = $(APP_MAN_DIR)

View File

@ -49,58 +49,6 @@ typedef struct {
} __GLXpixmap;
struct __GLXdrawablePrivateRec {
/*
** list of drawable private structs
*/
struct __GLXdrawablePrivateRec *last;
struct __GLXdrawablePrivateRec *next;
DrawablePtr pDraw;
XID drawId;
__GLXpixmap *pGlxPixmap;
/*
** Either DRAWABLE_PIXMAP or DRAWABLE_WINDOW, copied from pDraw above.
** Needed by the resource freer because pDraw might already have been
** freed.
*/
int type;
/*
** Configuration of the visual to which this drawable was created.
*/
__GLXvisualConfig *pGlxVisual;
/*
** cached drawable size and origin
*/
GLint xorigin, yorigin;
GLint width, height;
/*
** list of contexts bound to this drawable
*/
struct __GLXcontextRec *glxc;
/*
** "methods" that the drawble should be able to respond to.
*/
void (*freeBuffers)(struct __GLXdrawablePrivateRec *);
void (*updatePalette)(struct __GLXdrawablePrivateRec *);
GLboolean (*swapBuffers)(struct __GLXdrawablePrivateRec *);
/*
** The GL drawable (information shared between GLX and the GL core)
*/
__GLdrawablePrivate glPriv;
/*
** reference count
*/
int refCount;
};
typedef struct {
DrawablePtr pDraw;
int type;

View File

@ -58,9 +58,6 @@
#include <GL/glxproto.h>
#include <GL/glxint.h>
/* For glxscreens.h */
typedef struct __GLXdrawablePrivateRec __GLXdrawablePrivate;
#include "glxscreens.h"
#include "glxdrawable.h"
#include "glxcontext.h"

View File

@ -81,7 +81,8 @@ Bool
ephyrScreenInitialize (KdScreenInfo *screen, EphyrScrPriv *scrpriv)
{
int width = 640, height = 480;
unsigned long redMask, greenMask, blueMask;
if (hostx_want_screen_size(&width, &height)
|| !screen->width || !screen->height)
{
@ -133,30 +134,24 @@ ephyrScreenInitialize (KdScreenInfo *screen, EphyrScrPriv *scrpriv)
{
screen->fb[0].depth = 15;
screen->fb[0].bitsPerPixel = 16;
hostx_get_visual_masks (&screen->fb[0].redMask,
&screen->fb[0].greenMask,
&screen->fb[0].blueMask);
}
else if (screen->fb[0].depth <= 16)
{
screen->fb[0].depth = 16;
screen->fb[0].bitsPerPixel = 16;
hostx_get_visual_masks (&screen->fb[0].redMask,
&screen->fb[0].greenMask,
&screen->fb[0].blueMask);
}
else
{
screen->fb[0].depth = 24;
screen->fb[0].bitsPerPixel = 32;
hostx_get_visual_masks (&screen->fb[0].redMask,
&screen->fb[0].greenMask,
&screen->fb[0].blueMask);
}
hostx_get_visual_masks (&redMask, &greenMask, &blueMask);
screen->fb[0].redMask = (Pixel) redMask;
screen->fb[0].greenMask = (Pixel) greenMask;
screen->fb[0].blueMask = (Pixel) blueMask;
}
scrpriv->randr = screen->randr;

View File

@ -1,12 +1,21 @@
bin_PROGRAMS = Xvfb
noinst_LIBRARIES = libfbcmap.a
AM_CFLAGS = -DHAVE_DIX_CONFIG_H \
-DNO_HW_ONLY_EXTS \
-DNO_MODULE_EXTS \
$(XVFBMODULES_CFLAGS) \
$(DIX_CFLAGS)
SRCS = InitInput.c \
InitOutput.c \
lk201kbd.h \
$(top_srcdir)/Xext/dpmsstubs.c \
$(top_srcdir)/Xi/stubs.c \
$(top_srcdir)/mi/miinitext.c \
$(top_srcdir)/fb/fbcmap.c
$(top_srcdir)/mi/miinitext.c
libfbcmap_a_CFLAGS = $(AM_CFLAGS) -DXFree86Server
libfbcmap_a_SOURCES = $(top_srcdir)/fb/fbcmap.c
Xvfb_SOURCES = $(SRCS)
@ -14,16 +23,8 @@ Xvfb_LDADD = $(XORG_CORE_LIBS) \
$(XVFB_LIBS) \
$(XSERVER_LIBS) \
$(EXTENSION_LIBS) \
$(XVFBMODULES_LIBS)
Xvfb_LDFLAGS =
AM_CFLAGS = -DHAVE_DIX_CONFIG_H \
-DNO_HW_ONLY_EXTS \
-DNO_MODULE_EXTS \
-DXFree86Server \
$(XVFBMODULES_CFLAGS) \
$(DIX_CFLAGS)
$(XVFBMODULES_LIBS) \
libfbcmap.a
# Man page
include $(top_srcdir)/cpprules.in

View File

@ -47,13 +47,6 @@ configurations, doing batch processing with \fIXvfb\fP as a background
rendering engine, load testing, as an aid to porting the X server to a
new platform, and providing an unobtrusive way to run applications
that don't really need an X server but insist on having one anyway.
.SH BUILDING
To build \fIXvfb\fP, put the following in your host.def and remake.
.PP
\&#define BuildServer YES /\(** if you aren't already building other servers */
.br
\&#define XVirtualFramebufferServer YES
.SH OPTIONS
.PP
In addition to the normal server options described in the \fIXserver(1)\fP
@ -116,14 +109,14 @@ The server will listen for connections as server number 1, will have the
default screen configuration (one screen, 1280x1024x12), and screen 1
will be depth 16 1600x1200.
.TP 8
Xvfb -pixdepths 3 27 -fbdir /usr/tmp
Xvfb -pixdepths 3 27 -fbdir /var/tmp
The server will listen for connections as server number 0, will have the
default screen configuration (one screen, 1280x1024x12),
will also support pixmap
depths of 3 and 27,
and will use memory mapped files in /usr/tmp for the framebuffer.
and will use memory mapped files in /var/tmp for the framebuffer.
.TP 8
xwud -in /usr/tmp/Xvfb_screen0
xwud -in /var/tmp/Xvfb_screen0
Displays screen 0 of the server started by the preceding example.
.SH "SEE ALSO"
.PP

View File

@ -725,47 +725,13 @@ xf86SetModeCrtc(DisplayModePtr p, int adjustFlags)
p->CrtcVSyncEnd *= p->VScan;
p->CrtcVTotal *= p->VScan;
}
p->CrtcHAdjusted = FALSE;
p->CrtcVAdjusted = FALSE;
/*
* XXX
*
* The following is taken from VGA, but applies to other cores as well.
*/
p->CrtcVBlankStart = min(p->CrtcVSyncStart, p->CrtcVDisplay);
p->CrtcVBlankEnd = max(p->CrtcVSyncEnd, p->CrtcVTotal);
if ((p->CrtcVBlankEnd - p->CrtcVBlankStart) >= 127) {
/*
* V Blanking size must be < 127.
* Moving blank start forward is safer than moving blank end
* back, since monitors clamp just AFTER the sync pulse (or in
* the sync pulse), but never before.
*/
p->CrtcVBlankStart = p->CrtcVBlankEnd - 127;
/*
* If VBlankStart is now > VSyncStart move VBlankStart
* to VSyncStart using the maximum width that fits into
* VTotal.
*/
if (p->CrtcVBlankStart > p->CrtcVSyncStart) {
p->CrtcVBlankStart = p->CrtcVSyncStart;
p->CrtcVBlankEnd = min(p->CrtcHBlankStart + 127, p->CrtcVTotal);
}
}
p->CrtcHBlankStart = min(p->CrtcHSyncStart, p->CrtcHDisplay);
p->CrtcHBlankEnd = max(p->CrtcHSyncEnd, p->CrtcHTotal);
if ((p->CrtcHBlankEnd - p->CrtcHBlankStart) >= 63 * 8) {
/*
* H Blanking size must be < 63*8. Same remark as above.
*/
p->CrtcHBlankStart = p->CrtcHBlankEnd - 63 * 8;
if (p->CrtcHBlankStart > p->CrtcHSyncStart) {
p->CrtcHBlankStart = p->CrtcHSyncStart;
p->CrtcHBlankEnd = min(p->CrtcHBlankStart + 63 * 8, p->CrtcHTotal);
}
}
p->CrtcHAdjusted = FALSE;
p->CrtcVAdjusted = FALSE;
}
/**

View File

@ -84,7 +84,7 @@ typedef enum {
* mask is 0xFFFF0000.
*/
#define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 3)
#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(1, 1)
#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(1, 2)
#define ABI_XINPUT_VERSION SET_ABI_VERSION(1, 0)
#define ABI_EXTENSION_VERSION SET_ABI_VERSION(0, 3)
#define ABI_FONT_VERSION SET_ABI_VERSION(0, 5)

View File

@ -368,10 +368,8 @@ AllocateArea(
/* look through the free boxes */
for(i = 0; i < num; i++, boxp++) {
x = boxp->x1;
if(granularity) {
int tmp = x % granularity;
if(tmp) x += (granularity - tmp);
}
if (granularity > 1)
x = ((x + granularity - 1) / granularity) * granularity;
if(((boxp->y2 - boxp->y1) < h) || ((boxp->x2 - x) < w))
continue;
@ -398,10 +396,8 @@ AllocateArea(
boxp = &(link->area.box);
x = boxp->x1;
if(granularity) {
int tmp = x % granularity;
if(tmp) x += (granularity - tmp);
}
if (granularity > 1)
x = ((x + granularity - 1) / granularity) * granularity;
if(((boxp->y2 - boxp->y1) < h) || ((boxp->x2 - x) < w)) {
link = link->next;
@ -685,10 +681,8 @@ localQueryLargestOffscreenArea(
while(nbox--) {
x = pbox->x1;
if(granularity) {
int tmp = x % granularity;
if(tmp) x += (granularity - tmp);
}
if (granularity > 1)
x = ((x + granularity - 1) / granularity) * granularity;
w = pbox->x2 - x;
h = pbox->y2 - pbox->y1;
@ -845,7 +839,9 @@ AllocateLinear(
while (linear) {
/* Make sure we get a free area that's not an XY fallback case */
if (!linear->area && linear->free) {
offset = (linear->linear.offset + granularity) & ~granularity;
offset = linear->linear.offset;
if (granularity > 1)
offset = ((offset + granularity - 1) / granularity) * granularity;
end = offset+size;
if (end <= (linear->linear.offset + linear->linear.size))
break;
@ -935,17 +931,20 @@ localAllocateOffscreenLinear(
extents = REGION_EXTENTS(pScreen, offman->InitialBoxes);
pitch = extents->x2 - extents->x1;
if (gran && gran > pitch) {
/* we can't match the specified alignment with XY allocations */
xfree(link);
return NULL;
}
if (gran && (pitch % gran)) {
/* pitch and granularity aren't a perfect match, let's allocate
* a bit more so we can align later on
*/
length += gran - 1;
}
if (gran > 1) {
if (gran > pitch) {
/* we can't match the specified alignment with XY allocations */
xfree(link);
return NULL;
}
if (pitch % gran) {
/* pitch and granularity aren't a perfect match, let's allocate
* a bit more so we can align later on
*/
length += gran - 1;
}
}
if(length < pitch) { /* special case */
w = length;
@ -968,8 +967,8 @@ localAllocateOffscreenLinear(
linear->pScreen = pScreen;
linear->size = h * w;
linear->offset = (pitch * area->box.y1) + area->box.x1;
if (gran && linear->offset % gran)
linear->offset += gran - (linear->offset % gran);
if (gran > 1)
linear->offset += ((linear->offset + gran - 1) / gran) * gran;
linear->granularity = gran;
linear->MoveLinearCallback = moveCB;
linear->RemoveLinearCallback = removeCB;
@ -1435,9 +1434,12 @@ xf86AllocateLinearOffscreenArea (
extents = REGION_EXTENTS(pScreen, offman->InitialBoxes);
w = extents->x2 - extents->x1;
if(gran && ((gran > w) || (w % gran))) {
/* we can't match the specified alignment with XY allocations */
return NULL;
if (gran > 1) {
if (gran > w)
return NULL;
if (w % gran)
length += gran - 1;
}
if(length <= w) { /* special case */

View File

@ -35,6 +35,6 @@ Default: No.
Chooses an alternate pixmap migration heuristic, for debugging purposes. The
default is intended to be the best performing one for general use, though others
may help with specific use cases. Available options include \*qalways\*q,
\*qgreedy\*q, and \*qsmart\*q. Default: smart.
\*qgreedy\*q, and \*qsmart\*q. Default: always.
.SH AUTHORS
Authors include: Keith Packard, Eric Anholt, Zack Rusin, and Michel Dänzer

View File

@ -183,12 +183,20 @@ print_xfree_mode(char *txt, DisplayModePtr mode)
static void
xfree2fbdev_fblayout(ScrnInfoPtr pScrn, struct fb_var_screeninfo *var)
{
var->xres_virtual = pScrn->virtualX;
var->xres_virtual = pScrn->displayWidth ? pScrn->displayWidth :
pScrn->virtualX;
var->yres_virtual = pScrn->virtualY;
var->bits_per_pixel = pScrn->bitsPerPixel;
var->red.length = pScrn->weight.red;
var->green.length = pScrn->weight.green;
var->blue.length = pScrn->weight.blue;
if (pScrn->defaultVisual == TrueColor ||
pScrn->defaultVisual == DirectColor) {
var->red.length = pScrn->weight.red;
var->green.length = pScrn->weight.green;
var->blue.length = pScrn->weight.blue;
} else {
var->red.length = 8;
var->green.length = 8;
var->blue.length = 8;
}
}
static void
@ -227,6 +235,26 @@ xfree2fbdev_timing(DisplayModePtr mode, struct fb_var_screeninfo *var)
var->vmode = FB_VMODE_NONINTERLACED;
}
static Bool
fbdev_modes_equal(struct fb_var_screeninfo *set, struct fb_var_screeninfo *req)
{
return (set->xres_virtual >= req->xres_virtual &&
set->yres_virtual == req->yres_virtual &&
set->bits_per_pixel == req->bits_per_pixel &&
set->red.length == req->red.length &&
set->green.length == req->green.length &&
set->blue.length == req->blue.length &&
set->xres == req->xres && set->yres == req->yres &&
set->pixclock == req->pixclock &&
set->right_margin == req->right_margin &&
set->hsync_len == req->hsync_len &&
set->left_margin == req->left_margin &&
set->lower_margin == req->lower_margin &&
set->vsync_len == req->vsync_len &&
set->upper_margin == req->upper_margin &&
set->sync == req->sync && set->vmode == req->vmode);
}
static void
fbdev2xfree_timing(struct fb_var_screeninfo *var, DisplayModePtr mode)
{
@ -470,13 +498,53 @@ fbdevHWGetVidmem(ScrnInfoPtr pScrn)
return fPtr->fix.smem_len;
}
static Bool
fbdevHWSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode, Bool check)
{
fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
struct fb_var_screeninfo req_var = fPtr->var, set_var;
TRACE_ENTER("SetMode");
xfree2fbdev_fblayout(pScrn, &req_var);
xfree2fbdev_timing(mode, &req_var);
#if DEBUG
print_xfree_mode("init", mode);
print_fbdev_mode("init", &req_var);
#endif
set_var = req_var;
if (check)
set_var.activate = FB_ACTIVATE_TEST;
if (0 != ioctl(fPtr->fd, FBIOPUT_VSCREENINFO, (void*)(&set_var))) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"FBIOPUT_VSCREENINFO: %s\n", strerror(errno));
return FALSE;
}
if (!fbdev_modes_equal(&set_var, &req_var)) {
if (!check)
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"FBIOPUT_VSCREENINFO succeeded but modified "
"mode\n");
#if DEBUG
print_fbdev_mode("returned", &set_var);
#endif
return FALSE;
}
if (!check)
fPtr->var = set_var;
return TRUE;
}
void
fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
{
fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
int virtX = pScrn->display->virtualX;
int virtY = pScrn->display->virtualY;
struct fb_var_screeninfo var;
char **modename;
DisplayModePtr mode,this,last = pScrn->modes;
@ -484,6 +552,9 @@ fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
if (NULL == pScrn->display->modes)
return;
pScrn->virtualX = pScrn->display->virtualX;
pScrn->virtualY = pScrn->display->virtualY;
for (modename = pScrn->display->modes; *modename != NULL; modename++) {
for (mode = pScrn->monitor->Modes; mode != NULL; mode = mode->next)
if (0 == strcmp(mode->name,*modename))
@ -493,27 +564,20 @@ fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
"\tmode \"%s\" not found\n", *modename);
continue;
}
memset(&var,0,sizeof(var));
xfree2fbdev_timing(mode,&var);
var.xres_virtual = virtX;
var.yres_virtual = virtY;
var.bits_per_pixel = pScrn->bitsPerPixel;
var.red.length = pScrn->weight.red;
var.green.length = pScrn->weight.green;
var.blue.length = pScrn->weight.blue;
var.activate = FB_ACTIVATE_TEST;
if (var.xres_virtual < var.xres) var.xres_virtual = var.xres;
if (var.yres_virtual < var.yres) var.yres_virtual = var.yres;
if (-1 == ioctl(fPtr->fd,FBIOPUT_VSCREENINFO,(void*)(&var))) {
if (!fbdevHWSetMode(pScrn, mode, TRUE)) {
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"\tmode \"%s\" test failed\n", *modename);
continue;
}
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"\tmode \"%s\" ok\n", *modename);
if (virtX < var.xres) virtX = var.xres;
if (virtY < var.yres) virtY = var.yres;
if (pScrn->virtualX < mode->HDisplay)
pScrn->virtualX = mode->HDisplay;
if (pScrn->virtualY < mode->VDisplay)
pScrn->virtualY = mode->VDisplay;
if (NULL == pScrn->modes) {
pScrn->modes = xnfalloc(sizeof(DisplayModeRec));
this = pScrn->modes;
@ -530,8 +594,6 @@ fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
}
last = this;
}
pScrn->virtualX = virtX;
pScrn->virtualY = virtY;
}
DisplayModePtr
@ -673,21 +735,12 @@ fbdevHWModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
{
fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
TRACE_ENTER("ModeInit");
xfree2fbdev_fblayout(pScrn, &fPtr->var);
xfree2fbdev_timing(mode, &fPtr->var);
#if DEBUG
print_xfree_mode("init",mode);
print_fbdev_mode("init",&fPtr->var);
#endif
pScrn->vtSema = TRUE;
/* set */
if (0 != ioctl(fPtr->fd,FBIOPUT_VSCREENINFO,(void*)(&fPtr->var))) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"FBIOPUT_VSCREENINFO: %s\n", strerror(errno));
if (!fbdevHWSetMode(pScrn, mode, FALSE))
return FALSE;
}
/* read back */
if (0 != ioctl(fPtr->fd,FBIOGET_FSCREENINFO,(void*)(&fPtr->fix))) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
@ -699,6 +752,20 @@ fbdevHWModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
"FBIOGET_VSCREENINFO: %s\n", strerror(errno));
return FALSE;
}
if (pScrn->defaultVisual == TrueColor ||
pScrn->defaultVisual == DirectColor) {
/* XXX: This is a hack, but it should be a NOP for all the setups that
* worked before and actually seems to fix some others...
*/
pScrn->offset.red = fPtr->var.red.offset;
pScrn->offset.green = fPtr->var.green.offset;
pScrn->offset.blue = fPtr->var.blue.offset;
pScrn->mask.red = ((1 << fPtr->var.red.length) - 1) << fPtr->var.red.offset;
pScrn->mask.green = ((1 << fPtr->var.green.length) - 1) << fPtr->var.green.offset;
pScrn->mask.blue = ((1 << fPtr->var.blue.length) - 1) << fPtr->var.blue.offset;
}
return TRUE;
}
@ -767,18 +834,12 @@ ModeStatus
fbdevHWValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
{
ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
struct fb_var_screeninfo var;
TRACE_ENTER("ValidMode");
memcpy(&var,&fPtr->var,sizeof(var));
xfree2fbdev_timing(mode, &var);
var.activate = FB_ACTIVATE_TEST;
if (0 != ioctl(fPtr->fd,FBIOPUT_VSCREENINFO,(void*)(&fPtr->var))) {
xf86DrvMsg(scrnIndex, X_ERROR,
"FBIOPUT_VSCREENINFO: %s\n", strerror(errno));
if (!fbdevHWSetMode(pScrn, mode, TRUE))
return MODE_BAD;
}
return MODE_OK;
}
@ -786,15 +847,12 @@ Bool
fbdevHWSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
{
ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
TRACE_ENTER("SwitchMode");
xfree2fbdev_timing(mode, &fPtr->var);
if (0 != ioctl(fPtr->fd,FBIOPUT_VSCREENINFO,(void*)(&fPtr->var))) {
xf86DrvMsg(scrnIndex, X_ERROR,
"FBIOPUT_VSCREENINFO: %s\n", strerror(errno));
if (!fbdevHWSetMode(pScrn, mode, FALSE))
return FALSE;
}
return TRUE;
}

View File

@ -113,6 +113,10 @@ DLFindSymbol(const char *name)
DLModuleList *l;
void *p;
p = dlsym(RTLD_DEFAULT, name);
if (p != NULL)
return p;
for (l = dlModuleList; l != NULL; l = l->next) {
p = DLFindSymbolLocal(l->module, name);
if (p)

View File

@ -903,7 +903,7 @@ doLoadModule(const char *module, const char *path, const char **subdirlist,
* check the elements in the path
*/
if (PathIsAbsolute(module))
xstrdup(module);
found = xstrdup(module);
path_elem = pathlist;
while (!found && *path_elem != NULL) {
found = FindModule(m, *path_elem, subdirlist, patterns);

View File

@ -570,7 +570,8 @@ linuxMapPci(int ScreenNum, int Flags, PCITAG Tag,
xf86InitVidMem();
if (((fd = linuxPciOpenFile(Tag ,FALSE)) < 0) ||
prot = ((Flags & VIDMEM_READONLY) == 0);
if (((fd = linuxPciOpenFile(Tag, prot)) < 0) ||
(ioctl(fd, mmap_ioctl, 0) < 0))
break;

View File

@ -6,9 +6,14 @@ PLATFORM_DEFINES = -DOS_PROBE_PCI_CHIPSET=lnxProbePciChipset
PLATFORM_INCLUDES = -I$(srcdir)/../shared
endif
if LINUX_ALPHA
PLATFORM_PCI_SUPPORT = lnx_ev56.c \
noinst_LTLIBRARIES += liblinuxev56.la
PLATFORM_PCI_SUPPORT = \
$(srcdir)/lnx_axp.c \
$(srcdir)/../shared/xf86Axp.c
liblinuxev56_la_CFLAGS = -mcpu=ev56
liblinuxev56_la_SOURCES = lnx_ev56.c
endif
if LNXACPI
@ -48,3 +53,7 @@ EXTRA_DIST = \
$(LNX_EXTRA_SRCS) \
lnx.h \
$(srcdir)/../shared/xf86Axp.h
if LINUX_ALPHA
liblinux_la_LIBADD = liblinuxev56.la
endif

View File

@ -1,4 +1,4 @@
/* This file has to be built with -mcpu=ev56 */
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif

View File

@ -428,7 +428,7 @@ typedef int xf86jmp_buf[1024];
#define toupper(i) xf86toupper(i)
#undef ungetc
#define ungetc(i,FP) xf86ungetc(i,FP)
#undef vfprinf
#undef vfprintf
#define vfprintf(p,f,a) xf86vfprintf(p,f,a)
#undef vsnprintf
#define vsnprintf(s,n,f,a) xf86vsnprintf(s,n,f,a)

View File

@ -11,7 +11,7 @@
# This file can be distributed under either the GNU General Public License
# (version 2 or higher) or the 3-clause BSD License.
#
# Daily snapshot on Wed 2006-12-06 02:05:02
# Daily snapshot on Thu 2007-01-18 02:05:01
#
# Vendors, devices and subsystems. Please keep sorted.
@ -23,11 +23,28 @@
0000 Gammagraphx, Inc.
001a Ascend Communications, Inc.
001c PEAK-System Technik GmbH
0001 PCAN-PCI CAN-Bus controller
0033 Paradyne corp.
003d Lockheed Martin-Marietta Corp
# Real TJN ID is e159, but they got it wrong several times --mj
0059 Tiger Jet Network Inc. (Wrong ID)
0070 Hauppauge computer works Inc.
0003 WinTV PVR-250
0009 WinTV PVR-150
0801 WinTV PVR-150
0807 WinTV PVR-150
4000 WinTV PVR-350
4001 WinTV PVR-250 (v1)
4009 WinTV PVR-250
4800 WinTV PVR-350
4801 WinTV PVR-250 MCE
4803 WinTV PVR-250
8003 WinTV PVR-150
8801 WinTV PVR-150
c801 WinTV PVR-150
e807 WinTV PVR-500 MCE (1st tuner)
e817 WinTV PVR-500 MCE (2nd tuner)
0071 Nebula Electronics Ltd.
0095 Silicon Image, Inc. (Wrong ID)
0680 Ultra ATA/133 IDE RAID CONTROLLER CARD
@ -51,6 +68,7 @@
0315 SK-Electronics Co., Ltd.
0357 TTTech AG
000a TTP-Monitoring Card V2.0
0403 Future Technology Devices International Ltd
0432 SCM Microsystems, Inc.
0001 Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet]
045e Microsoft
@ -63,6 +81,7 @@
001a FSD7000 802.11g PCI Wireless card
0109 F5U409-CU USB/Serial Portable Adapter
7050 F5D7050 802.11g Wireless USB Adapter
705c F5D7050 v4
05a9 OmniVision
8519 OV519 series
05e3 CyberDoor
@ -78,23 +97,42 @@
067b Prolific Technology, Inc.
2303 PL-2303 USB-to-Serial Converter
3507 PL-3507 Hi-Speed USB & IEEE 1394 Combo to IDE Bridge Controller
069d Hughes Network Systems (HNS)
0721 Sapphire, Inc.
07ca AVerMedia Technologies Inc.
b808 AVerTV DVB-T Volar (USB 2.0)
07e2 ELMEG Communication Systems GmbH
0842 NPG, Personal Grand Technology
08ff AuthenTec
afe4 [Anchor] AF-S2 FingerLoc Sensor Module
# Wrong ID used in subsystem ID of VIA USB controllers.
0925 VIA Technologies, Inc. (Wrong ID)
093a PixArt Imaging Inc.
010e Innovage Mini Digital Camera
010f SDC-300 Webcam
2468 CIF Single Chip
2603 Philips Webcam SPC500NC
2608 Maxell MaxCam RotaWeb
09c1 Arris
0704 CM 200E Cable Modem
0a89 BREA Technologies Inc
0ace ZyDAS
1211 ZD1211 IEEE 802.11b+g USB Adapter
0b0b Rhino Equiment Corp.
0105 Rhino R1T1
0205 Rhino R4FXO
0206 RCB4FXO 4-channel FXO analog telphony card
0305 Rhino R4T1
0405 Rhino R8FXX
0406 RCB8FXX 8-channel modular analog telphony card
0505 Rhino R24FXX
0506 Rhino R2T1
0506 RCB24FXS 24-Channel FXS analog telphony card
0605 Rhino R2T1
0705 Rhino R24FXS
0706 RCB24FXO 24-Channel FXO analog telphony card
0905 R1T3 Single T3 Digital Telephony Card
0906 RCB24FXX 24-channel modular analog telphony card
0a06 RCB672FXX 672-channel modular analog telphony card
0b49 ASCII Corporation
064f Trance Vibrator
0ccd TerraTec Electronic GmbH
@ -288,16 +326,33 @@
0041 53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI
0050 SAS1064 PCI-X Fusion-MPT SAS
0054 SAS1068 PCI-X Fusion-MPT SAS
0055 SAS1068 PCI-X Fusion-MPT SAS
1033 8336 SAS1068
0056 SAS1064E PCI-Express Fusion-MPT SAS
0058 SAS1068E PCI-Express Fusion-MPT SAS
005a SAS1066E PCI-Express Fusion-MPT SAS
005c SAS1064A PCI-X Fusion-MPT SAS
005e SAS1066 PCI-X Fusion-MPT SAS
0060 MegaRAID SAS 1078
1000 1006 MegaRAID SAS 8888ELP
1000 100a MegaRAID SAS 8708ELP
1000 100e MegaRAID SAS 8884E
1000 100f MegaRAID SAS 8708E
1000 1010 MegaRAID SATA 350-8ELP
1000 1011 MegaRAID SATA 350-4ELP
1000 1012 MegaRAID SAS 8704ELP
1014 0363 MegaRAID SAS PCI Express ROMB
1014 0364 SystemX MegaRAID SAS 8808E
1014 0365 SystemX MegaRAID SAS 8884E
1028 1f0a PERC 6/E Adapter RAID Controller
1028 1f0b PERC 6/i Adapter RAID Controller
1028 1f0c PERC 6/i Integrated RAID Controller
1028 1f0d PERC 6/i Enhanced RAID Controller
1028 1f0d CERC 6/i Adapter RAID Controller
1028 1f11 CERC 6/i Adapter RAID Controller
1043 824d MegaRAID SAS PCI Express ROMB
1170 002f MegaRAID SAS PCI Express ROMB
8086 34cc Integrated RAID Controller SROMBSAS28E
8086 34cd Integrated RAID Controller SROMBSAS28E
0062 SAS1078 PCI-Express Fusion-MPT SAS
1000 0062 SAS1078 PCI-Express Fusion-MPT SAS
008f 53c875J
@ -317,6 +372,9 @@
1025 004d MegaRAID ACER ROMB-2E RAID Controller
1028 0001 PowerEdge RAID Controller PERC4e/SC
1028 0002 PowerEdge RAID Controller PERC4e/DC
1028 0012 PowerEdge RAID Controller RAC4
1028 0015 PowerEdge RAID Controller PERC5
1028 1f03 PowerEdge RAID Controller PERC5
1734 1065 FSC MegaRAID PCI Express ROMB
8086 0002 MegaRAID Intel RAID Controller SRCU42E
0409 MegaRAID
@ -330,6 +388,7 @@
1000 1002 MegaRAID SAS 8480E
1000 1003 MegaRAID SAS 8344ELP
1000 1004 MegaRAID SAS 8308ELP
1000 1008 MegaRAID SAS 84016E
1000 100c MegaRAID SATA 300-12E
1000 100d MegaRAID SATA 300-16E
1000 2004 MegaRAID SATA 300-8ELP
@ -338,8 +397,8 @@
1054 3016 MegaRAID SAS RoMB Server
1734 1081 MegaRAID SAS PCI Express ROMB
1734 10a3 MegaRAID SAS PCI Express ROMB
8086 1001 SRCSAS18E RAID Controller
8086 1003 SRCSAS144E RAID Controller
8086 1001 RAID Controller SRCSAS18E
8086 1003 RAID Controller SRCSAS144E
8086 3500 SROMBSAS18E RAID Controller
8086 3501 SROMBSAS18E RAID Controller
8086 3504 SROMBSAS18E RAID Controller
@ -509,7 +568,11 @@
103c 308b MX6125
4379 ATI 4379 Serial ATA Controller
437a ATI 437A Serial ATA Controller
1002 4379 ATI 4379 Serial ATA Controller
1002 437a ATI 437A Serial ATA Controller
14f1 8800 Leadtek WinFast TV2000XP Expert
437b SB450 HDA Audio
1734 10b8 Realtek High Definition Audio
4380 SB600 Non-Raid-5 SATA
4381 SB600 Raid-5 SATA
4382 SB600 AC97 Audio
@ -584,6 +647,7 @@
1734 007a Primergy RX300
8086 3411 SDS2 Mainboard
8086 3427 S875WP1-E mainboard
8086 5744 S845WD1-E mainboard
4753 Rage XC
1002 4753 Rage XC
4754 3D Rage I/II 215GT [Mach64 GT]
@ -711,10 +775,12 @@
1025 005a TravelMate 290
103c 088c NC8000 laptop
103c 0890 NC6000 laptop
144d c00c P35 notebook
1462 0311 MSI M510A
1734 1055 Amilo M1420W
4e51 M10 NQ [Radeon Mobility 9600]
4e52 RV350 [Mobility Radeon 9600 M10]
144d c00c P35 notebook
4e53 M10 NS [Radeon Mobility 9600]
4e54 M10 NT [FireGL Mobility T2]
4e56 M11 NV [FireGL Mobility T2e]
@ -900,7 +966,7 @@
554d R430 [Radeon X800 XL] (PCIe)
554f R430 [Radeon X800 (PCIE)]
5550 R423 [Fire GL V7100]
5551 R423 UQ [FireGL V7200 (PCIE)]
5551 R423 [FireGL V5100 (PCIE)]
5552 R423 UR [FireGL V5100 (PCIE)]
5554 R423 UT [FireGL V7100 (PCIE)]
5569 R423 UI [Radeon X800PRO (PCIE)] Secondary
@ -936,6 +1002,7 @@
1025 0080 Aspire 5024WLMMi
103c 308b MX6125
5951 ATI Radeon Xpress 200 (RS480/RS482/RX480/RX482) Chipset - Host bridge
5952 RD580 [CrossFire Xpress 3200] Chipset Host Bridge
5954 RS480 [Radeon Xpress 200G Series]
1002 5954 RV370 [Radeon Xpress 200G Series]
5955 ATI Radeon XPRESS 200M 5955 (PCIE)
@ -954,6 +1021,7 @@
18bc 0053 Radeon 9200 Game Buster VIVO
5962 RV280 [Radeon 9200]
5964 RV280 [Radeon 9200 SE]
1002 5964 ATI Radeon 9200 SE, 64-bit 128MB DDR, 200/166MHz
1043 c006 ASUS Radeon 9200 SE / TD / 128M
1458 4018 Radeon 9200 SE
1458 4032 Radeon 9200 SE 128MB
@ -966,11 +1034,12 @@
18bc 0173 GC-R9200L(SE)-C3H [Radeon 9200 Game Buster]
5969 ES1000
5974 RS482 [Radeon Xpress 200]
5975 RS482 [Radeon Xpress 200M]
5975 RS485 [Radeon Xpress 1100 IGP]
5a33 Radeon Xpress 200 Host Bridge
5a34 RS480 PCI-X Root Port
# Comes in pair with 5a3f
5a36 RS480 PCI Bridge
5a37 RS480 PCI Bridge
5a38 RS480 PCI Bridge
# Comes in pair with 5a38
5a39 RS480 PCI Bridge
@ -998,6 +1067,7 @@
5c61 M9+ 5C61 [Radeon Mobility 9200 (AGP)]
5c63 M9+ 5C63 [Radeon Mobility 9200 (AGP)]
1002 5c63 Apple iBook G4 2004
144d c00c P30 notebook
5d44 RV280 [Radeon 9200 SE] (Secondary)
1458 4019 Radeon 9200 SE (Secondary)
1458 4032 Radeon 9200 SE 128MB
@ -1052,11 +1122,13 @@
1002 0323 All-in-Wonder X1800XL (Secondary)
1002 0d03 Radeon X1800 CrossFire Edition (Secondary)
7140 RV515 [Radeon X1600]
7142 RV515 [Radeon X1300]
7142 RV515 PRO [ATI Radeon X1300/X1550 Series]
1002 0322 All-in-Wonder 2006 PCI-E Edition
7143 RV505 [Radeon X1550 Series]
7145 Radeon Mobility X1400
7146 RV515 [Radeon X1300]
1002 0322 All-in-Wonder 2006 PCI-E Edition
7147 RV505 [Radeon X1550 64-bit]
7149 M52 [ATI Mobility Radeon X1300]
714a M52 [ATI Mobility Radeon X1300]
714b M52 [ATI Mobility Radeon X1300]
@ -1064,28 +1136,47 @@
714d RV515 [Radeon X1300]
714e RV515 [Radeon X1300]
7152 RV515 GL ATI FireGL V3300 Primary
7153 RV515GL [FireGL V3350]
715e RV515 [Radeon X1300]
7162 RV515 [Radeon X1300] (Secondary)
715f RV505 CE [Radeon X1550 64-bit]
7162 RV515 PRO [ATI Radeon X1300/X1550 Series Secondary]
1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary)
7166 RV515 [Radeon X1300] (Secondary)
1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary)
7172 RV515 GL ATI FireGL V3300 Secondary
7180 RV516 Radeon X1300 Series Primary
7173 RV515GL [FireGL V3350 Secondary]
7180 RV516 [ATI Radeon X1300/X1550 Series]
7181 RV516 XT Radeon X1600 Series Primary
71a0 RV516 Radeon X1300 Series Secondary
7183 RV516 [ATI Radeon X1300/X1550 Series]
7187 RV516 [ATI Radeon X1300/X1550 Series]
7188 M64-S [ATI Mobility Radeon X2300]
718a ATI Mobility Radeon X2300
718c M62CSP64 [ATI Mobility Radeon X1350]
718d M64CSP128 [ATI Mobility Radeon X1450]
7193 RV516 [Radeon X1550 Series]
719b FireMV 2250
719f RV516LE [Radeon X1550 64-bit]
71a0 RV516 [ATI Radeon X1300/X1550 Series Secondary]
71a1 RV516 XT Radeon X1600 Series Secondary
71a3 RV516 [ATI Radeon X1300 Pro Secondary]
71a7 RV516 [ATI Radeon X1300/X1550 Series Secondary]
71bb FireMV 2250 Secondary
71c0 RV530 [Radeon X1600]
71c2 RV530 [Radeon X1600]
71c4 M56GL [ATI Mobility FireGL V5200]
17aa 2007 ThinkPad T60p
71c5 M56P [Radeon Mobility X1600]
71c6 RV530LE [Radeon X1600]
71c7 RV535 [Radeon X1650 Series]
71ce RV530LE [Radeon X1600]
71d5 M66-P ATI Mobility Radeon X1700
71d6 M66-XT ATI Mobility Radeon X1700
71de RV530LE [Radeon X1600]
71e0 RV530 [Radeon X1600] (Secondary)
71e2 RV530 [Radeon X1600] (Secondary)
71e7 RV535 [Radeon X1650 Series]
7210 M71 [ATI Mobility Radeon X2100]
7211 M71 [ATI Mobility Radeon X2100 Secondary]
7240 R580 [Radeon X1900]
7241 R580 [Radeon X1900]
7242 R580 [Radeon X1900]
@ -1098,15 +1189,29 @@
7249 R580 [Radeon X1900 XT] Primary
724a R580 [Radeon X1900]
724b R580 [Radeon X1900]
1002 0b12 Radeon X1900 Primary Display Device
1002 0b13 Radeon X1900 Secondary Display Device
724c R580 [Radeon X1900]
724d R580 [Radeon X1900]
724e R580 [FireGL V7300/V7350] Primary (PCIE)
724e R580 [AMD Stream Processor]
7269 R580 [Radeon X1900 XT] Secondary
726e R580 [FireGL V7300/V7350] Secondary (PCIE)
726b R580 [Radeon X1900]
726e R580 [AMD Stream Processor Secondary]
7280 ATI Radeon X1950 Pro Primary (PCIE)
7288 ATI Radeon X1950 GT
7291 ATI Radeon X1650 XT Primary (PCIE)
7293 Radeon X1650 Series
72a0 ATI Radeon X1950 Pro Secondary (PCIE)
72a8 ATI Radeon X1950 GT Secondary
72b1 ATI Radeon X1650 XT Secondary (PCIE)
72b3 ATI Radeon X1650 Series Secondary
7833 Radeon 9100 IGP Host Bridge
7834 Radeon 9100 PRO IGP
7835 Radeon Mobility 9200 IGP
7838 Radeon 9100 IGP PCI/AGP Bridge
791e ATI Radeon Xpress 1200 Series
791f ATI Radeon Xpress 1200 Series
793f ATI Radeon Xpress 1200 Series Secondary
7c37 RV350 AQ [Radeon 9600 SE]
cab0 AGP Bridge [IGP 320M]
cab2 RS200/RS200M AGP Bridge [IGP 340M]
@ -1556,6 +1661,8 @@
2003 Am 1771 MBW [Alchemy]
2020 53c974 [PCscsi]
2040 79c974
# CS5536 [Geode companion] Host Bridge
2080 Conrad Kostecki
2081 Geode LX Video
2082 Geode LX AES Security Block
208f CS5536 GeodeLink PCI South Bridge
@ -1742,13 +1849,21 @@
1028 0001 PowerEdge 2400
0002 PowerEdge Expandable RAID Controller 3/Di
1028 0002 PowerEdge 4400
1028 00d1 PERC 3/DiV [Viper]
1028 00d9 PERC 3/DiL [Lexus]
0003 PowerEdge Expandable RAID Controller 3/Si
1028 0003 PowerEdge 2450
# PowerEdge Codename Iguana
0004 PowerEdge Expandable RAID Controller 3/Di [Iguana]
1028 0004 PERC 3/DiF [Iguana]
0006 PowerEdge Expandable RAID Controller 3/Di
0007 Remote Access Card III
0008 Remote Access Card III
0009 Remote Access Card III: BMC/SMIC device not present
000a PowerEdge Expandable RAID Controller 3/Di
1028 0106 PERC 3/DiJ [Jaguar]
1028 011b PERC 3/DiD [Dagger]
1028 0121 PERC 3/DiB [Boxster]
000c Embedded Remote Access or ERA/O
000d Embedded Remote Access: BMC/SMIC device
000e PowerEdge Expandable RAID controller 4/Di
@ -1764,6 +1879,9 @@
1028 0170 PowerEdge Expandable RAID Controller 4e/Di
0014 Remote Access Card 4 Daughter Card SMIC interface
0015 PowerEdge Expandable RAID controller 5i
1028 1f01 PERC 5/E Adapter RAID Controller
1028 1f02 PERC 5/i Adapter RAID Controller
1f03 PERC 5/i
1029 Siemens Nixdorf IS
102a LSI Logic
0000 HYDRA
@ -1964,6 +2082,7 @@
102f 00f8 ATM Meteor 155
0030 TC35815CF PCI 10/100 Mbit Ethernet Controller
0031 TC35815CF PCI 10/100 Mbit Ethernet Controller with WOL
0032 TC35815CF PCI 10/100 Mbit Ethernet Controller on TX4939
0105 TC86C001 [goku-s] IDE
0106 TC86C001 [goku-s] USB 1.1 Host
0107 TC86C001 [goku-s] USB Device Controller
@ -2107,6 +2226,7 @@
1019 0a14 K7S5A motherboard
1039 0900 SiS900 10/100 Ethernet Adapter
1043 8035 CUSI-FX motherboard
1462 0900 MS-6701 motherboard
0961 SiS961 [MuTIOL Media IO]
0962 SiS962 [MuTIOL Media IO]
0963 SiS963 [MuTIOL Media IO]
@ -2129,6 +2249,7 @@
1019 0970 P6STP-FL motherboard
1039 5513 SiS5513 EIDE Controller (A,B step)
1043 8035 CUSI-FX motherboard
1462 7010 MS-6701 motherboard
5517 5517
5571 5571
5581 5581 Pentium Chipset
@ -2161,10 +2282,14 @@
1019 0a14 K7S5A motherboard
1039 7000 Onboard USB Controller
1462 5470 K7SOM+ 5.2C Motherboard
1462 7010 MS-6701 motherboard
7002 USB 2.0 Controller
1462 7010 MS-6701 motherboard
1509 7002 Onboard USB Controller
7007 FireWire Controller
1462 701d MS-6701
7012 AC'97 Sound Controller
1462 7010 MS-6701 motherboard
15bd 1001 DFI 661FX motherboard
# There are may be different modem codecs here (Intel537 compatible and incompatible)
7013 AC'97 Modem Controller
@ -2252,10 +2377,13 @@
12ee PCI-X 2.0 Local Bus Adapter
12f8 Broadcom BCM4306 802.11b/g Wireless LAN
12fa BCM4306 802.11b/g Wireless LAN Controller
1302 RMP-3 Shared Memory Driver
1303 RMP-3 (Remote Management Processor)
2910 E2910A PCIBus Exerciser
2925 E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer
3080 Pavilion ze2028ea
3085 Realtek RTL8139/8139C/8139C+
30b5 Compaq Presario V3000Z
3220 Smart Array P600
103c 3225 3 Gb/s SAS RAID
3230 Smart Array Controller
@ -2292,8 +2420,10 @@
80c5 nForce3 chipset motherboard [SK8N]
80df v9520 Magic/T
815a A8N-SLI Motherboard nForce4 SATA
8168 Realtek PCI-E Gigabit Ethernet Controller (RTL8111B)
8187 802.11a/b/g Wireless LAN Card
8188 Tiger Hybrid TV Capture Device
81f4 EN7300TC512/TD/128M/A(C262G) [Graphics Card EN7300TC512]
1044 Adaptec (formerly DPT)
1012 Domino RAID Engine
a400 SmartCache/Raid I-IV Controller
@ -2444,6 +2574,7 @@
8023 TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
103c 088c NC8000 laptop
1043 808b K8N4-E Mainboard
1043 815b P5W DH Deluxe Motherboard
8024 TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)
8025 TSB82AA2 IEEE-1394b Link Layer Controller
1458 1000 GA-K8N Ultra-9 Mainboard
@ -2483,14 +2614,17 @@
8038 PCI6515 SmartCard Controller
8039 PCIxx12 Cardbus Controller
103c 309f nx9420
103c 30a1 NC2400
803a PCIxx12 OHCI Compliant IEEE 1394 Host Controller
103c 309f nx9420
103c 30a1 NC2400
803b 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)
103c 309f nx9420
803c PCIxx12 SDA Standard Compliant SD Host Controller
103c 309f nx9420
803d PCIxx12 GemCore based SmartCard controller
103c 309f nx9420
103c 30a1 NC2400
8201 PCI1620 Firmware Loading Function
8204 PCI7410,7510,7610 PCI Firmware Loading Function
1028 0139 Latitude D400
@ -2548,6 +2682,7 @@
ac42 PCI4451 PC card Cardbus Controller
1028 00e6 PCI4451 PC card CardBus Controller (Inspiron 8100)
ac44 PCI4510 PC card Cardbus Controller
1028 0149 Inspiron 5100
1028 0163 Latitude D505
1028 0196 Inspiron 5160
1071 8160 MIM2000
@ -2560,7 +2695,7 @@
1028 0139 Latitude D400
1028 014e Latitude D800
ac50 PCI1410 PC card Cardbus Controller
ac51 PCI1420
ac51 PCI1420 PC card Cardbus Controller
0e11 004e Evo N600c
1014 0148 ThinkPad A20m
1014 023b ThinkPad T23 (2647-4MG)
@ -2588,6 +2723,7 @@
ac8d PCI 7620
ac8e PCI7420 CardBus Controller
ac8f PCI7420/7620 Combo CardBus, 1394a-2000 OHCI and SD/MS-Pro Controller
1028 018d Inspiron 700m
fe00 FireWire Host Controller
fe03 12C01A FireWire Host Controller
104d Sony Corporation
@ -2673,6 +2809,7 @@
ecc0 0072 Mona rev.2
18c0 MPC8265A/8266/8272
18c1 MPC8271/MPC8272
3052 SM56 Data Fax Modem
3055 SM56 Data Fax Modem
3410 DSP56361 Digital Signal Processor
ecc0 0050 Gina24 rev.0
@ -2721,6 +2858,7 @@
1059 Teknor Industrial Computers Inc
105a Promise Technology, Inc.
0d30 PDC20265 (FastTrak100 Lite/Ultra100)
1043 8042 ASUS AV7266-E South Bridge Promise RAID
105a 4d33 Ultra100
0d38 20263
105a 4d39 Fasttrak66
@ -2749,6 +2887,7 @@
4d30 PDC20267 (FastTrak100/Ultra100)
105a 4d33 Ultra100
105a 4d39 FastTrak100
8086 5744 S845WD1-E mainboard
4d33 20246
105a 4d33 20246 IDE Controller
4d38 PDC20262 (FastTrak66/Ultra66)
@ -2777,7 +2916,12 @@
7275 PDC20277 (SBFastTrak133 Lite)
8002 SATAII150 SX8
8350 80333 [SuperTrak EX8350/EX16350], 80331 [SuperTrak EX8300/EX16300]
8650 IOP1348 [SuperTrak EX4650/EX8650/EX8654]
105a 4600 SuperTrak EX4650
105a 8601 SuperTrak EX8650
105a 8602 SuperTrak EX8654
c350 80333 [SuperTrak EX12350]
e350 80333 [SuperTrak EX24350]
105b Foxconn International, Inc.
105c Wipro Infotech Limited
105d Number 9 Computer Company
@ -2990,6 +3134,7 @@
0012 YMF-754 [DS-1E Audio Controller]
1073 0012 DS-XG PCI Audio Codec
0020 DS-1 Audio
1000 SW1000XG [XG Factory]
2000 DS2416 Digital Mixing Card
1073 2000 DS2416 Digital Mixing Card
1074 NexGen Microsystems
@ -3021,7 +3166,7 @@
103c 12dd 4Gb Fibre Channel [AB429A]
2432 ISP2432-based 4Gb Fibre Channel to PCI Express HBA
3022 ISP4022-based Ethernet NIC
3032 ISP4032-based Ethernet NIC
3032 ISP4032-based Ethernet IPv6 NIC
4010 ISP4010-based iSCSI TOE HBA
4022 ISP4022-based iSCSI TOE HBA
4032 ISP4032-based iSCSI TOE IPv6 HBA
@ -3329,6 +3474,7 @@
13e9 0070 Win/TV (Audio Section)
144f 3000 MagicTView CPH060 - Audio
1461 0002 Avermedia PCTV98 Audio Capture
1461 0003 UltraTV PCI 350
1461 0004 AVerTV WDM Audio Capture
1461 0761 AVerTV DVB-T
1461 0771 AverMedia AVerTV DVB-T 771
@ -3417,6 +3563,8 @@
4002 TIO-CE PCI Express Port
8001 O2 1394
8002 G-net NT
8010 Broadcom e-net [SGI IO9/IO10 BaseIO]
8018 Broadcom e-net [SGI A330 Server BaseIO]
10aa ACC Microelectronics
0000 ACCM 2188
10ab Digicom
@ -3468,6 +3616,7 @@
10b5 2978 SH ARC-PCIu SOHARD ARCNET card
10b5 3025 Alpermann+Velte PCL PCI L (3V/5V): Timecode Reader Board
10b5 3068 Alpermann+Velte PCL PCI HD (3V/5V): Timecode Reader Board
12fe 0111 CPCI-ASIO4 (ESD 4-port Serial Interface Board)
1397 3136 4xS0-ISDN PCI Adapter
1397 3137 S2M-E1-ISDN PCI Adapter
1518 0200 Kontron ThinkIO-C
@ -3522,6 +3671,7 @@
10b5 2844 Innes Corp TVS Encoder card
12c7 4001 Intel Dialogic DM/V960-4T1 PCI
12d9 0002 PCI Prosody Card rev 1.5
14b4 d100 Dektec DTA-100
16df 0011 PIKA PrimeNet MM PCI
16df 0012 PIKA PrimeNet MM cPCI 8
16df 0013 PIKA PrimeNet MM cPCI 8 (without CAS Signaling)
@ -6060,6 +6210,7 @@
0140 HT2100 PCI-Express Bridge
0141 HT2100 PCI-Express Bridge
0142 HT2100 PCI-Express Bridge
0144 HT2100 PCI-Express Bridge
0200 OSB4 South Bridge
0201 CSB5 South Bridge
4c53 1080 CT8 mainboard
@ -10413,9 +10564,9 @@
0962 80960RM [i960RM Bridge]
0964 80960RP [i960 RP Microprocessor/Bridge]
1000 82542 Gigabit Ethernet Controller
0e11 b0df NC1632 Gigabit Ethernet Adapter (1000-SX)
0e11 b0e0 NC1633 Gigabit Ethernet Adapter (1000-LX)
0e11 b123 NC1634 Gigabit Ethernet Adapter (1000-SX)
0e11 b0df NC6132 Gigabit Ethernet Adapter (1000-SX)
0e11 b0e0 NC6133 Gigabit Ethernet Adapter (1000-LX)
0e11 b123 NC6134 Gigabit Ethernet Adapter (1000-LX)
1014 0119 Netfinity Gigabit Ethernet SX Adapter
8086 1000 PRO/1000 Gigabit Server Adapter
1001 82543GC Gigabit Ethernet Controller (Fiber)
@ -10834,6 +10985,8 @@
8086 0006 82557 10/100 with Wake on LAN
8086 0007 82558 10/100 Adapter
8086 0008 82558 10/100 with Wake on LAN
# 8086:0009 revision 5, 82558B based
8086 0009 PRO/100+ PCI (TP)
8086 000a EtherExpress PRO/100+ Management Adapter
8086 000b EtherExpress PRO/100+
8086 000c EtherExpress PRO/100+ Management Adapter
@ -10909,6 +11062,7 @@
8086 3010 EtherExpress PRO/100 S Network Connection
8086 3011 EtherExpress PRO/100 S Network Connection
8086 3012 EtherExpress PRO/100 Network Connection
8086 301a S845WD1-E mainboard
8086 3411 SDS2 Mainboard
122d 430FX - 82437FX TSC [Triton I]
122e 82371FB PIIX ISA [Triton I]
@ -10996,6 +11150,7 @@
2426 82801AB AC'97 Modem
2428 82801AB PCI Bridge
2440 82801BA ISA Bridge (LPC)
8086 5744 S845WD1-E
2442 82801BA/BAM USB (Hub #1)
1014 01c6 Netvista A40/A40p
1025 1016 Travelmate 612 TX
@ -11006,6 +11161,7 @@
147b 0507 TH7II-RAID
8086 4532 D815EEA2 mainboard
8086 4557 D815EGEW Mainboard
8086 5744 S845WD1-E mainboard
2443 82801BA/BAM SMBus
1014 01c6 Netvista A40/A40p
1025 1016 Travelmate 612 TX
@ -11016,6 +11172,7 @@
147b 0507 TH7II-RAID
8086 4532 D815EEA2 mainboard
8086 4557 D815EGEW Mainboard
8086 5744 S845WD1-E mainboard
2444 82801BA/BAM USB (Hub #2)
1025 1016 Travelmate 612 TX
1028 00c7 Dimension 8100
@ -11024,6 +11181,7 @@
104d 80df Vaio PCG-FX403
147b 0507 TH7II-RAID
8086 4532 D815EEA2 mainboard
8086 5744 S845WD1-E mainboard
2445 82801BA/BAM AC'97 Audio
0e11 000b Compaq Deskpro EN Audio
0e11 0088 Evo D500
@ -11082,6 +11240,7 @@
147b 0507 TH7II-RAID
8086 4532 D815EEA2 mainboard
8086 4557 D815EGEW Mainboard
8086 5744 S845WD1-E mainboard
244c 82801BAM ISA Bridge (LPC)
244e 82801 PCI Bridge
1014 0267 NetVista A30p
@ -11174,6 +11333,7 @@
103c 0890 NC6000 laptop
103c 08b0 tc1100 tablet
1071 8160 MIM2000
144d c00c P30/P35 notebook
1458 24c2 GA-8PE667 Ultra
1462 5800 845PE Max (MS-6580)
1734 1004 D1451 Mainboard (SCENIC N300, i845GV)
@ -11742,17 +11902,21 @@
103c 099c NX6110/NC6120
1043 1881 GMA 900 915GM Integrated Graphics
27a0 Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub
103c 30a1 NC2400
17aa 2017 Thinkpad R60e model 0657
27a1 Mobile 945GM/PM/GMS/940GML and 945GT Express PCI Express Root Port
27a2 Mobile 945GM/GMS/940GML Express Integrated Graphics Controller
103c 30a1 NC2400
17aa 201a Thinkpad R60e model 0657
27a6 Mobile 945GM/GMS/940GML Express Integrated Graphics Controller
103c 30a1 NC2400
17aa 201a Thinkpad R60e model 0657
27b0 82801GH (ICH7DH) LPC Interface Bridge
27b8 82801GB/GR (ICH7 Family) LPC Interface Bridge
107b 5048 E4500
8086 544e DeskTop Board D945GTP
27b9 82801GBM (ICH7-M) LPC Interface Bridge
103c 30a1 NC2400
10f7 8338 Panasonic CF-Y5 laptop
17aa 2009 ThinkPad T60/R60 series
27bd 82801GHM (ICH7-M DH) LPC Interface Bridge
@ -11766,22 +11930,27 @@
17aa 200d Thinkpad R60e model 0657
27c6 82801GHM (ICH7-M DH) Serial ATA Storage Controller RAID
27c8 82801G (ICH7 Family) USB UHCI #1
103c 30a1 NC2400
107b 5048 E4500
17aa 200a ThinkPad T60/R60 series
8086 544e DeskTop Board D945GTP
27c9 82801G (ICH7 Family) USB UHCI #2
103c 30a1 NC2400
107b 5048 E4500
17aa 200a ThinkPad T60/R60 series
8086 544e DeskTop Board D945GTP
27ca 82801G (ICH7 Family) USB UHCI #3
103c 30a1 NC2400
107b 5048 E4500
17aa 200a ThinkPad T60/R60 series
8086 544e DeskTop Board D945GTP
27cb 82801G (ICH7 Family) USB UHCI #4
103c 30a1 NC2400
107b 5048 E4500
17aa 200a ThinkPad T60/R60 series
8086 544e DeskTop Board D945GTP
27cc 82801G (ICH7 Family) USB2 EHCI Controller
103c 30a1 NC2400
17aa 200b ThinkPad T60/R60 series
8086 544e DeskTop Board D945GTP
27d0 82801G (ICH7 Family) PCI Express Port 1
@ -11789,10 +11958,12 @@
27d4 82801G (ICH7 Family) PCI Express Port 3
27d6 82801G (ICH7 Family) PCI Express Port 4
27d8 82801G (ICH7 Family) High Definition Audio Controller
103c 30a1 NC2400
107b 5048 E4500
10f7 8338 Panasonic CF-Y5 laptop
1179 ff31 Toshiba America Information Systems:AC97 Data Fax SoftModem with SmartCP
152d 0753 Softmodem
1734 10ad Conexant softmodem SmartCP
17aa 2010 ThinkPad T60/R60 series
27da 82801G (ICH7 Family) SMBus Controller
10f7 8338 Panasonic CF-Y5 laptop
@ -11803,6 +11974,7 @@
27dd 82801G (ICH7 Family) AC'97 Modem Controller
27de 82801G (ICH7 Family) AC'97 Audio Controller
27df 82801G (ICH7 Family) IDE Controller
103c 30a1 NC2400
107b 5048 E4500
10f7 8338 Panasonic CF-Y5 laptop
17aa 200c Thinkpad R60e model 0657
@ -11846,6 +12018,34 @@
284b 82801H (ICH8 Family) HD Audio Controller
284f 82801H (ICH8 Family) Thermal Reporting Device
2850 Mobile IDE Controller
2910 LPC Interface Controller
2920 4 port SATA IDE Controller
2921 2 port SATA IDE Controller
2922 6 port SATA AHCI Controller
2923 4 port SATA AHCI Controller
2925 SATA RAID Controller
2926 2 port SATA IDE Controller
2928 Mobile 2 port SATA IDE Controller
292d Mobile 2 port SATA IDE Controller
292e Mobile 1 port SATA IDE Controller
2930 SMBus Controller
2932 Thermal Subsystem
2934 USB UHCI Controller #1
2935 USB UHCI Controller #2
2936 USB UHCI Controller #3
2937 USB UHCI Controller #4
2938 USB UHCI Controller #5
2939 USB UHCI Controller #6
293a USB2 EHCI Controller #1
293c USB2 EHCI Controller #2
293e HD Audio Controller
2940 PCI Express Port 1
2942 PCI Express Port 2
2944 PCI Express Port 3
2946 PCI Express Port 4
2948 PCI Express Port 5
294a PCI Express Port 6
294c Gigabit Ethernet Controller
2970 82946GZ/PL/GL Memory Controller Hub
2971 82946GZ/PL/GL PCI Express Root Port
2972 82946GZ/GL Integrated Graphics Controller
@ -11873,6 +12073,37 @@
29a5 82P965/G965 HECI Controller
29a6 82P965/G965 PT IDER Controller
29a7 82P965/G965 KT Controller
29b0 DRAM Controller
29b1 PCI Express Root Port
29b2 Integrated Graphics Controller
29b3 Integrated Graphics Controller
29b4 HECI Controller
29b5 HECI Controller
29b6 PT IDER Controller
29b7 Serial KT Controller
29c0 DRAM Controller
29c1 PCI Express Root Port
29c2 Integrated Graphics Controller
29c3 Integrated Graphics Controller
29c4 HECI Controller
29c5 HECI Controller
29c6 PT IDER Controller
29c7 Serial KT Controller
29cf Virtual HECI Controller
29e0 DRAM Controller
29e1 Host-Primary PCI Express Bridge
29e4 HECI Controller
29e5 HECI Controller
29e6 PT IDER Controller
29e7 Serial KT Controller
29e9 Host-Secondary PCI Express Bridge
29f0 Server DRAM Controller
29f1 Server Host-Primary PCI Express Bridge
29f4 Server HECI Controller
29f5 Server HECI Controller
29f6 Server PT IDER Controller
29f7 Server Serial KT Controller
29f9 Server Host-Secondary PCI Express Bridge
2a00 Mobile Memory Controller Hub
2a01 Mobile PCI Express Root Port
2a02 Mobile Integrated Graphics Controller
@ -11978,7 +12209,42 @@
35b6 3100 Chipset PCI Express Port A
35b7 3100 Chipset PCI Express Port A1
35c8 3100 Extended Configuration Test Overflow Registers
3600 Server Memory Controller Hub
3604 Server PCI Express Port 1
3605 Server PCI Express Port 2
3606 Server PCI Express Port 3
3607 Server PCI Express Port 4
3608 Server PCI Express Port 5
3609 Server PCI Express Port 6
360a Server PCI Express Port 7
360b Server IOAT DMA Controller
360c Server FSB Registers
360d Server Snoop Filter Registers
360e Server Reserved Registers
360f Server FBD Branch 0 Registers
3610 Server FBD Branch 1 Registers
4000 Memory Controller Hub
4008 Memory Controller Hub
4010 Memory Controller Hub
4021 PCI Express Port 1
4022 PCI Express Port 2
4023 PCI Express Port 3
4024 PCI Express Port 4
4025 PCI Express Port 5
4026 PCI Express Port 6
4027 PCI Express Port 7
4028 PCI Express Port 8
4029 PCI Express Port 9
402d IBIST Registers
402e IBIST Registers
402f DMA/DCA Engine
4030 FSB Registers
4032 I/OxAPIC
4035 FBD Registers
4036 FBD Registers
4220 PRO/Wireless 2200BG Network Connection
2731 8086 WLAN-Adapter
8086 2731 Samsung P35 integrated WLAN
4222 PRO/Wireless 3945ABG Network Connection
8086 1005 PRO/Wireless 3945BG Network Connection
8086 1034 PRO/Wireless 3945BG Network Connection
@ -11994,6 +12260,23 @@
5201 EtherExpress PRO/100 Intelligent Server
8086 0001 EtherExpress PRO/100 Server Ethernet Adapter
530d 80310 IOP [IO Processor]
65c0 Memory Controller Hub
65e2 PCI Express x4 Port 2
65e3 PCI Express x4 Port 3
65e4 PCI Express x4 Port 4
65e5 PCI Express x4 Port 5
65e6 PCI Express x4 Port 6
65e7 PCI Express x4 Port 7
65f0 FSB Registers
65f1 Reserved Registers
65f3 Reserved Registers
65f5 DDR Channel 0 Registers
65f6 DDR Channel 1 Registers
65f7 PCI Express x8 Port 2-3
65f8 PCI Express x8 Port 4-5
65f9 PCI Express x8 Port 6-7
65fa PCI Express x16 Port 4-7
65ff DMA Engine
7000 82371SB PIIX3 ISA [Natoma/Triton II]
7010 82371SB PIIX3 IDE [Natoma/Triton II]
7020 82371SB PIIX3 USB [Natoma/Triton II]
@ -12092,6 +12375,7 @@
9622 Integrated RAID
9641 Integrated RAID
96a1 Integrated RAID
a620 6400/6402 Advanced Memory Buffer (AMB)
b152 21152 PCI-to-PCI Bridge
# observed, and documented in Intel revision note; new mask of 1011:0026
b154 21154 PCI-to-PCI Bridge

File diff suppressed because it is too large Load Diff

View File

@ -63,6 +63,40 @@ static void x86emuOp2_illegal_op(
#define xorl(a,b) ((a) && !(b)) || (!(a) && (b))
/****************************************************************************
REMARKS:
Handles opcode 0x0f,0x31
****************************************************************************/
static void x86emuOp2_rdtsc(u8 X86EMU_UNUSED(op2))
{
#ifdef __HAS_LONG_LONG__
static u64 counter = 0;
#else
static u32 counter = 0;
#endif
counter += 0x10000;
/* read timestamp counter */
/*
* Note that instead of actually trying to accurately measure this, we just
* increase the counter by a fixed amount every time we hit one of these
* instructions. Feel free to come up with a better method.
*/
START_OF_INSTR();
DECODE_PRINTF("RDTSC\n");
TRACE_AND_STEP();
#ifdef __HAS_LONG_LONG__
M.x86.R_EAX = counter & 0xffffffff;
M.x86.R_EDX = counter >> 32;
#else
M.x86.R_EAX = counter;
M.x86.R_EDX = 0;
#endif
DECODE_CLEAR_SEGOVR();
END_OF_INSTR();
}
/****************************************************************************
REMARKS:
Handles opcode 0x0f,0x80-0x8F
@ -2129,7 +2163,7 @@ static void x86emuOp2_bsf(u8 X86EMU_UNUSED(op2))
uint srcoffset;
START_OF_INSTR();
DECODE_PRINTF("BSF\n");
DECODE_PRINTF("BSF\t");
FETCH_DECODE_MODRM(mod, rh, rl);
switch(mod) {
case 0:
@ -2209,25 +2243,25 @@ static void x86emuOp2_bsf(u8 X86EMU_UNUSED(op2))
break;
case 3: /* register to register */
if (M.x86.mode & SYSMODE_PREFIX_DATA) {
u32 *srcreg, *dstreg;
u32 srcval, *dstreg;
srcreg = DECODE_RM_LONG_REGISTER(rl);
srcval = *DECODE_RM_LONG_REGISTER(rl);
DECODE_PRINTF(",");
dstreg = DECODE_RM_LONG_REGISTER(rh);
TRACE_AND_STEP();
CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
for(*dstreg = 0; *dstreg < 32; (*dstreg)++)
if ((*srcreg >> *dstreg) & 1) break;
if ((srcval >> *dstreg) & 1) break;
} else {
u16 *srcreg, *dstreg;
u16 srcval, *dstreg;
srcreg = DECODE_RM_WORD_REGISTER(rl);
srcval = *DECODE_RM_WORD_REGISTER(rl);
DECODE_PRINTF(",");
dstreg = DECODE_RM_WORD_REGISTER(rh);
TRACE_AND_STEP();
CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
for(*dstreg = 0; *dstreg < 16; (*dstreg)++)
if ((*srcreg >> *dstreg) & 1) break;
if ((srcval >> *dstreg) & 1) break;
}
break;
}
@ -2245,7 +2279,7 @@ static void x86emuOp2_bsr(u8 X86EMU_UNUSED(op2))
uint srcoffset;
START_OF_INSTR();
DECODE_PRINTF("BSF\n");
DECODE_PRINTF("BSR\t");
FETCH_DECODE_MODRM(mod, rh, rl);
switch(mod) {
case 0:
@ -2325,25 +2359,25 @@ static void x86emuOp2_bsr(u8 X86EMU_UNUSED(op2))
break;
case 3: /* register to register */
if (M.x86.mode & SYSMODE_PREFIX_DATA) {
u32 *srcreg, *dstreg;
u32 srcval, *dstreg;
srcreg = DECODE_RM_LONG_REGISTER(rl);
srcval = *DECODE_RM_LONG_REGISTER(rl);
DECODE_PRINTF(",");
dstreg = DECODE_RM_LONG_REGISTER(rh);
TRACE_AND_STEP();
CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
for(*dstreg = 31; *dstreg > 0; (*dstreg)--)
if ((*srcreg >> *dstreg) & 1) break;
if ((srcval >> *dstreg) & 1) break;
} else {
u16 *srcreg, *dstreg;
u16 srcval, *dstreg;
srcreg = DECODE_RM_WORD_REGISTER(rl);
srcval = *DECODE_RM_WORD_REGISTER(rl);
DECODE_PRINTF(",");
dstreg = DECODE_RM_WORD_REGISTER(rh);
TRACE_AND_STEP();
CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
for(*dstreg = 15; *dstreg > 0; (*dstreg)--)
if ((*srcreg >> *dstreg) & 1) break;
if ((srcval >> *dstreg) & 1) break;
}
break;
}
@ -2580,7 +2614,7 @@ void (*x86emu_optab2[256])(u8) =
/* 0x2f */ x86emuOp2_illegal_op,
/* 0x30 */ x86emuOp2_illegal_op,
/* 0x31 */ x86emuOp2_illegal_op,
/* 0x31 */ x86emuOp2_rdtsc,
/* 0x32 */ x86emuOp2_illegal_op,
/* 0x33 */ x86emuOp2_illegal_op,
/* 0x34 */ x86emuOp2_illegal_op,

View File

@ -27,128 +27,156 @@ libxf1bppgen_a_SOURCES = \
mfbtileC.c \
mfbtileG.c
DISTCLEANFILES = $(libxf1bppgen_a_SOURCES)
libxf1bppmfb_a_SOURCES = \
$(top_srcdir)/mfb/maskbits.c \
$(top_srcdir)/mfb/mfbbitblt.c \
$(top_srcdir)/mfb/mfbbres.c \
$(top_srcdir)/mfb/mfbbresd.c \
$(top_srcdir)/mfb/mfbbstore.c \
$(top_srcdir)/mfb/mfbclip.c \
$(top_srcdir)/mfb/mfbcmap.c \
$(top_srcdir)/mfb/mfbfillarc.c \
$(top_srcdir)/mfb/mfbfillrct.c \
$(top_srcdir)/mfb/mfbfillsp.c \
$(top_srcdir)/mfb/mfbfont.c \
$(top_srcdir)/mfb/mfbgc.c \
$(top_srcdir)/mfb/mfbgetsp.c \
$(top_srcdir)/mfb/mfbhrzvert.c \
$(top_srcdir)/mfb/mfbimage.c \
$(top_srcdir)/mfb/mfbline.c \
$(top_srcdir)/mfb/mfbmisc.c \
$(top_srcdir)/mfb/mfbpixmap.c \
$(top_srcdir)/mfb/mfbpntwin.c \
$(top_srcdir)/mfb/mfbpolypnt.c \
$(top_srcdir)/mfb/mfbpushpxl.c \
$(top_srcdir)/mfb/mfbscrclse.c \
$(top_srcdir)/mfb/mfbscrinit.c \
$(top_srcdir)/mfb/mfbsetsp.c \
$(top_srcdir)/mfb/mfbwindow.c \
$(top_srcdir)/mfb/mfbzerarc.c \
maskbits.c \
mfbbitblt.c \
mfbbres.c \
mfbbresd.c \
mfbbstore.c \
mfbclip.c \
mfbcmap.c \
mfbfillarc.c \
mfbfillrct.c \
mfbfillsp.c \
mfbfont.c \
mfbgc.c \
mfbgetsp.c \
mfbhrzvert.c \
mfbimage.c \
mfbline.c \
mfbmisc.c \
mfbpixmap.c \
mfbpntwin.c \
mfbpolypnt.c \
mfbpushpxl.c \
mfbscrclse.c \
mfbscrinit.c \
mfbsetsp.c \
mfbwindow.c \
mfbzerarc.c
BUILT_SOURCES = $(libxf1bppgen_a_SOURCES) $(libxf1bppgen_a_SOURCES)
libxf1bpp_la_SOURCES = $(libxf1bppmfb_a_SOURCES) $(libxf1bppgen_a_SOURCES) \
mfbmodule.c
libxf1bpp_la_SOURCES = $(libxf1bppmfb_a_SOURCES) $(libxf1bppgen_a_SOURCES)
AM_CFLAGS = -DXF86MONO -include mfbmap.h $(DIX_CFLAGS) $(XORG_CFLAGS)
AM_CFLAGS = -DXF86MONO $(DIX_CFLAGS) $(XORG_CFLAGS)
INCLUDES = $(XORG_INCS) -I$(top_srcdir)/mfb
mfbseg.c:
echo "#define POLYSEGMENT" > $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbline.c\"" >> $@
mfbpgbwht.c:
echo "#define MFBPOLYGLYPHBLT xf1bppPolyGlyphBltWhite" > $@
echo "#define OPEQ |=" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbplygblt.c\"" >> $@
mfbpgbblak.c:
echo "#define MFBPOLYGLYPHBLT xf1bppPolyGlyphBltBlack" > $@
echo "#define OPEQ &=~" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbplygblt.c\"" >> $@
mfbpgbinv.c:
echo "#define MFBPOLYGLYPHBLT xf1bppPolyGlyphBltInvert" > $@
echo "#define OPEQ ^=" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbplygblt.c\"" >> $@
mfbigbwht.c:
echo "#define MFBIMAGEGLYPHBLT xf1bppImageGlyphBltWhite" > $@
echo "#define OPEQ |=" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbimggblt.c\"" >> $@
mfbigbblak.c:
echo "#define MFBIMAGEGLYPHBLT xf1bppImageGlyphBltBlack" > $@
echo "#define OPEQ &=~" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbimggblt.c\"" >> $@
mfbpawhite.c:
echo "#define MFBSOLIDFILLAREA xf1bppSolidWhiteArea" > $@
echo "#define MFBSTIPPLEFILLAREA xf1bppStippleWhiteArea" >> $@
echo "#define OPEQ |=" >> $@
echo "#define EQWHOLEWORD =~0" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbpntarea.c\"" >> $@
mfbpablack.c:
echo "#define MFBSOLIDFILLAREA xf1bppSolidBlackArea" > $@
echo "#define MFBSTIPPLEFILLAREA xf1bppStippleBlackArea" >> $@
echo "#define OPEQ &=~" >> $@
echo "#define EQWHOLEWORD =0" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbpntarea.c\"" >> $@
mfbpainv.c:
echo "#define MFBSOLIDFILLAREA xf1bppSolidInvertArea" > $@
echo "#define MFBSTIPPLEFILLAREA xf1bppStippleInvertArea" >> $@
echo "#define OPEQ ^=" >> $@
echo "#define EQWHOLEWORD ^=~0" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbpntarea.c\"" >> $@
mfbtewhite.c:
echo "#define OP" > $@
echo "#define CLIPTETEXT xf1bppImageGlyphBltWhite" >> $@
echo "#define MFBTEGLYPHBLT xf1bppTEGlyphBltWhite" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbtegblt.c\"" >> $@
mfbteblack.c:
echo "#define OP ~" > $@
echo "#define CLIPTETEXT xf1bppImageGlyphBltBlack" >> $@
echo "#define MFBTEGLYPHBLT xf1bppTEGlyphBltBlack" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbtegblt.c\"" >> $@
mfbplywhite.c:
echo "#define MFBFILLPOLY1RECT xf1bppFillPolyWhite" > $@
echo "#define OPEQ |=" >> $@
echo "#define EQWHOLEWORD =~0" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbply1rct.c\"" >> $@
mfbplyblack.c:
echo "#define MFBFILLPOLY1RECT xf1bppFillPolyBlack" > $@
echo "#define OPEQ &=~" >> $@
echo "#define EQWHOLEWORD =0" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbply1rct.c\"" >> $@
mfbplyinv.c:
echo "#define MFBFILLPOLY1RECT xf1bppFillPolyInvert" > $@
echo "#define OPEQ ^=" >> $@
echo "#define EQWHOLEWORD ^=~0" >> $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbply1rct.c\"" >> $@
mfbbltC.c:
echo "#define MROP Mcopy" > $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
mfbbltX.c:
echo "#define MROP Mxor" > $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
mfbbltCI.c:
echo "#define MROP McopyInverted" > $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
mfbbltO.c:
echo "#define MROP Mor" > $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
mfbbltG.c:
echo "#define MROP M0" > $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
mfbtileC.c:
echo "#define MROP Mcopy" > $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbtile.c\"" >> $@
mfbtileG.c:
echo "#define MRop M0" > $@
echo "#include \"mfbmap.h\"" >> $@
echo "#include \"$(top_srcdir)/mfb/mfbtile.c\"" >> $@
$(libxf1bppmfb_a_SOURCES):
for i in $(libxf1bppmfb_a_SOURCES) ; do \
echo "#include \"mfbmap.h\"" > $$i ; \
echo "#include \"$(top_srcdir)/mfb/$$i\"" >> $$i ; \
done
EXTRA_DIST = mfbmap.sh mfbunmap.sh

View File

@ -46,8 +46,6 @@ libxf4bpp_la_SOURCES = \
mfbzerarc.c \
vgamodule.c
libxf4bpp_la_LIBADD = ../xf1bpp/libxf1bpp.la
EXTRA_DIST = OScompiler.h ibmTrace.h ppcGCstr.h ppcSpMcro.h vgaReg.h \
vgaVideo.h wm3.h NOTES

View File

@ -1,4 +1,10 @@
bin_PROGRAMS = Xnest
noinst_LIBRARIES = libfbcmap.a
AM_CFLAGS = -DHAVE_XNEST_CONFIG_H \
-DNO_HW_ONLY_EXTS \
$(DIX_CFLAGS) \
$(XNESTMODULES_CFLAGS)
SRCS = Args.c \
Args.h \
@ -37,23 +43,17 @@ SRCS = Args.c \
xnest-config.h \
$(top_srcdir)/Xext/dpmsstubs.c \
$(top_srcdir)/Xi/stubs.c \
$(top_srcdir)/mi/miinitext.c \
$(top_srcdir)/fb/fbcmap.c
$(top_srcdir)/mi/miinitext.c
libfbcmap_a_SOURCES = $(top_srcdir)/fb/fbcmap.c
libfbcmap_a_CFLAGS = $(AM_CFLAGS) -DXFree86Server
Xnest_SOURCES = $(SRCS)
Xnest_LDADD = $(XORG_CORE_LIBS) \
$(XNEST_LIBS) \
$(XNESTMODULES_LIBS)
Xnest_LDFLAGS =
AM_CFLAGS = -DHAVE_XNEST_CONFIG_H \
-DNO_HW_ONLY_EXTS \
-DXFree86Server \
$(DIX_CFLAGS) \
$(XNESTMODULES_CFLAGS)
$(XNESTMODULES_LIBS) \
libfbcmap.a
EXTRA_DIST = os2Stub.c \
icon \

View File

@ -15,6 +15,9 @@
/* Operating System Vendor */
#undef OSVENDOR
/* Builder string */
#undef BUILDERSTRING
/* Default font path */
#undef COMPILEDDEFAULTFONTPATH
@ -93,6 +96,9 @@
/* Define to 1 if you have the <asm/mtrr.h> header file. */
#undef HAVE_ASM_MTRR_H
/* Define to 1 if you have the <byteswap.h> header file. */
#undef HAVE_BYTESWAP_H
/* Define to 1 if you have the <dbm.h> header file. */
#undef HAVE_DBM_H
@ -311,6 +317,9 @@
/* Use rgb.txt directly */
#undef USE_RGB_TXT
/* Define to use byteswap macros from <sys/endian.h> */
#undef USE_SYS_ENDIAN_H
/* unaligned word accesses behave as expected */
#undef WORKING_UNALIGNED_INT
@ -416,16 +425,8 @@
/* Endian order */
#undef X_BYTE_ORDER
/* BSD-compliant source */
#undef _BSD_SOURCE
/* POSIX-compliant source */
#undef _POSIX_SOURCE
#ifndef _XOPEN_SOURCE
/* X/Open-compliant source */
#undef _XOPEN_SOURCE
#endif
/* Enable GNU and other extensions to the C environment for GLIBC */
#undef _GNU_SOURCE
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
@ -472,4 +473,13 @@
/* Path to XErrorDB file */
#undef XERRORDB_PATH
/* Define to 16-bit byteswap macro */
#undef bswap_16
/* Define to 32-bit byteswap macro */
#undef bswap_32
/* Define to 64-bit byteswap macro */
#undef bswap_64
#endif /* _DIX_CONFIG_H_ */

View File

@ -103,7 +103,7 @@ extern int ProcUngrabButton(ClientPtr /* client */);
extern int ProcRecolorCursor(ClientPtr /* client */);
#ifdef PANORAMIX
extern void PostSyntheticMotion(int x, int y, ScreenPtr pScreen, unsigned long time);
extern void PostSyntheticMotion(int x, int y, int screen, unsigned long time);
#endif
#endif /* DIXEVENTS_H */

View File

@ -421,7 +421,7 @@ extern int GetProximityEvents(
extern void PostSyntheticMotion(
int x,
int y,
ScreenPtr pScreen,
int screen,
unsigned long time);
extern int GetMotionHistorySize(

View File

@ -52,6 +52,12 @@ in this Software without prior written authorization from The Open Group.
# include "extinit.h"
# include "exglobals.h"
#ifdef DPMSExtension
# include "dpmsproc.h"
# define DPMS_SERVER
# include <X11/extensions/dpms.h>
#endif
#define QUEUE_SIZE 256
typedef struct _Event {
@ -183,6 +189,13 @@ mieqProcessInputEvents()
while (miEventQueue.head != miEventQueue.tail) {
if (screenIsSaved == SCREEN_SAVER_ON)
SaveScreens (SCREEN_SAVER_OFF, ScreenSaverReset);
#ifdef DPMSExtension
else if (DPMSPowerLevel != DPMSModeOn)
SetScreenSaverTimer();
if (DPMSPowerLevel != DPMSModeOn)
DPMSSet(DPMSModeOn);
#endif
e = &miEventQueue.events[miEventQueue.head];
/* Assumption - screen switching can only occur on motion events. */

View File

@ -474,6 +474,10 @@ void
miPointerMoved (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y,
unsigned long time)
{
xEvent* events;
int i, nevents;
int valuators[2];
SetupScreen(pScreen);
if (pDev && (pDev->coreEvents || pDev == inputInfo.pointer) &&
@ -488,4 +492,23 @@ miPointerMoved (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y,
miPointer.x = x;
miPointer.y = y;
miPointer.pScreen = pScreen;
/* generate motion notify */
valuators[0] = x;
valuators[1] = y;
events = (xEvent*)xcalloc(sizeof(xEvent), GetMaximumEventsNum());
if (!events)
{
FatalError("Could not allocate event store.\n");
return;
}
nevents = GetPointerEvents(events, pDev, MotionNotify, 0,
POINTER_ABSOLUTE, 0, 2, valuators);
for (i = 0; i < nevents; i++)
mieqEnqueue(pDev, &events[i]);
xfree(events);
}

View File

@ -113,6 +113,52 @@ getDrawableDamageRef (DrawablePtr pDrawable)
DamagePtr *pPrev = (DamagePtr *) \
&(pWindow->devPrivates[damageWinPrivateIndex].ptr)
static void
DamageReportDamage (DamagePtr pDamage, RegionPtr pDamageRegion)
{
BoxRec tmpBox;
RegionRec tmpRegion;
Bool was_empty;
switch (pDamage->damageLevel) {
case DamageReportRawRegion:
(*pDamage->damageReport) (pDamage, pDamageRegion, pDamage->closure);
break;
case DamageReportDeltaRegion:
REGION_NULL (pScreen, &tmpRegion);
REGION_SUBTRACT (pScreen, &tmpRegion, pDamageRegion, &pDamage->damage);
if (REGION_NOTEMPTY (pScreen, &tmpRegion)) {
REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
pDamageRegion);
(*pDamage->damageReport) (pDamage, &tmpRegion, pDamage->closure);
}
REGION_UNINIT(pScreen, &tmpRegion);
break;
case DamageReportBoundingBox:
tmpBox = *REGION_EXTENTS (pScreen, &pDamage->damage);
REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
pDamageRegion);
if (!BOX_SAME (&tmpBox, REGION_EXTENTS (pScreen, &pDamage->damage))) {
(*pDamage->damageReport) (pDamage, &pDamage->damage,
pDamage->closure);
}
break;
case DamageReportNonEmpty:
was_empty = !REGION_NOTEMPTY(pScreen, &pDamage->damage);
REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
pDamageRegion);
if (was_empty && REGION_NOTEMPTY(pScreen, &pDamage->damage)) {
(*pDamage->damageReport) (pDamage, &pDamage->damage,
pDamage->closure);
}
break;
case DamageReportNone:
REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
pDamageRegion);
break;
}
}
#if DAMAGE_DEBUG_ENABLE
static void
_damageDamageRegion (DrawablePtr pDrawable, RegionPtr pRegion, Bool clip, int subWindowMode, const char *where)
@ -130,9 +176,6 @@ damageDamageRegion (DrawablePtr pDrawable, RegionPtr pRegion, Bool clip,
RegionRec clippedRec;
RegionPtr pDamageRegion;
RegionRec pixClip;
Bool was_empty;
RegionRec tmpRegion;
BoxRec tmpBox;
int draw_x, draw_y;
#ifdef COMPOSITE
int screen_x = 0, screen_y = 0;
@ -256,41 +299,18 @@ damageDamageRegion (DrawablePtr pDrawable, RegionPtr pRegion, Bool clip,
*/
if (draw_x || draw_y)
REGION_TRANSLATE (pScreen, pDamageRegion, -draw_x, -draw_y);
switch (pDamage->damageLevel) {
case DamageReportRawRegion:
(*pDamage->damageReport) (pDamage, pDamageRegion, pDamage->closure);
break;
case DamageReportDeltaRegion:
REGION_NULL (pScreen, &tmpRegion);
REGION_SUBTRACT (pScreen, &tmpRegion, pDamageRegion, &pDamage->damage);
if (REGION_NOTEMPTY (pScreen, &tmpRegion))
{
REGION_UNION(pScreen, &pDamage->damage,
&pDamage->damage, pDamageRegion);
(*pDamage->damageReport) (pDamage, &tmpRegion, pDamage->closure);
}
REGION_UNINIT(pScreen, &tmpRegion);
break;
case DamageReportBoundingBox:
tmpBox = *REGION_EXTENTS (pScreen, &pDamage->damage);
REGION_UNION(pScreen, &pDamage->damage,
&pDamage->damage, pDamageRegion);
if (!BOX_SAME (&tmpBox, REGION_EXTENTS (pScreen, &pDamage->damage)))
(*pDamage->damageReport) (pDamage, &pDamage->damage, pDamage->closure);
break;
case DamageReportNonEmpty:
was_empty = !REGION_NOTEMPTY(pScreen, &pDamage->damage);
REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
pDamageRegion);
if (was_empty && REGION_NOTEMPTY(pScreen, &pDamage->damage))
(*pDamage->damageReport) (pDamage, &pDamage->damage, pDamage->closure);
break;
case DamageReportNone:
REGION_UNION(pScreen, &pDamage->damage, &pDamage->damage,
pDamageRegion);
break;
/* If the damage rec has been flagged to report damage after the op has
* completed, then union it into the delayed damage region, which will
* be used for reporting after calling down, and skip the reporting
*/
if (!pDamage->reportAfter) {
DamageReportDamage (pDamage, pDamageRegion);
} else {
REGION_UNION(pScreen, &pDamage->pendingDamage,
&pDamage->pendingDamage, pDamageRegion);
}
/*
* translate original region back
*/
@ -305,6 +325,21 @@ damageDamageRegion (DrawablePtr pDrawable, RegionPtr pRegion, Bool clip,
REGION_UNINIT (pScreen, &clippedRec);
}
static void
damageReportPostOp (DrawablePtr pDrawable)
{
drawableDamage(pDrawable);
for (; pDamage != NULL; pDamage = pDamage->pNext)
{
if (pDamage->reportAfter) {
DamageReportDamage (pDamage, &pDamage->pendingDamage);
REGION_EMPTY (pScreen, &pDamage->pendingDamage);
}
}
}
#if DAMAGE_DEBUG_ENABLE
#define damageDamageBox(d,b,m) _damageDamageBox(d,b,m,__FUNCTION__)
static void
@ -550,6 +585,7 @@ damageComposite (CARD8 op,
yDst,
width,
height);
damageReportPostOp (pDst->pDrawable);
wrap (pScrPriv, ps, Composite, damageComposite);
}
@ -616,6 +652,7 @@ damageGlyphs (CARD8 op,
}
unwrap (pScrPriv, ps, Glyphs);
(*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
damageReportPostOp (pDst->pDrawable);
wrap (pScrPriv, ps, Glyphs, damageGlyphs);
}
#endif
@ -668,6 +705,7 @@ damageFillSpans(DrawablePtr pDrawable,
(*pGC->ops->FillSpans)(pDrawable, pGC, npt, ppt, pwidth, fSorted);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -715,6 +753,7 @@ damageSetSpans(DrawablePtr pDrawable,
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
}
(*pGC->ops->SetSpans)(pDrawable, pGC, pcharsrc, ppt, pwidth, npt, fSorted);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -746,6 +785,7 @@ damagePutImage(DrawablePtr pDrawable,
}
(*pGC->ops->PutImage)(pDrawable, pGC, depth, x, y, w, h,
leftPad, format, pImage);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -789,6 +829,7 @@ damageCopyArea(DrawablePtr pSrc,
ret = (*pGC->ops->CopyArea)(pSrc, pDst,
pGC, srcx, srcy, width, height, dstx, dsty);
damageReportPostOp (pDst);
DAMAGE_GC_OP_EPILOGUE(pGC, pDst);
return ret;
}
@ -834,6 +875,7 @@ damageCopyPlane(DrawablePtr pSrc,
ret = (*pGC->ops->CopyPlane)(pSrc, pDst,
pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
damageReportPostOp (pDst);
DAMAGE_GC_OP_EPILOGUE(pGC, pDst);
return ret;
}
@ -875,6 +917,7 @@ damagePolyPoint(DrawablePtr pDrawable,
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
}
(*pGC->ops->PolyPoint)(pDrawable, pGC, mode, npt, ppt);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -948,6 +991,7 @@ damagePolylines(DrawablePtr pDrawable,
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
}
(*pGC->ops->Polylines)(pDrawable, pGC, mode, npt, ppt);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -1026,6 +1070,7 @@ damagePolySegment(DrawablePtr pDrawable,
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
}
(*pGC->ops->PolySegment)(pDrawable, pGC, nSeg, pSeg);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -1087,6 +1132,7 @@ damagePolyRectangle(DrawablePtr pDrawable,
}
}
(*pGC->ops->PolyRectangle)(pDrawable, pGC, nRects, pRects);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -1139,6 +1185,7 @@ damagePolyArc(DrawablePtr pDrawable,
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
}
(*pGC->ops->PolyArc)(pDrawable, pGC, nArcs, pArcs);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -1197,6 +1244,7 @@ damageFillPolygon(DrawablePtr pDrawable,
}
(*pGC->ops->FillPolygon)(pDrawable, pGC, shape, mode, npt, ppt);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -1235,6 +1283,7 @@ damagePolyFillRect(DrawablePtr pDrawable,
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
}
(*pGC->ops->PolyFillRect)(pDrawable, pGC, nRects, pRects);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -1276,6 +1325,7 @@ damagePolyFillArc(DrawablePtr pDrawable,
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
}
(*pGC->ops->PolyFillArc)(pDrawable, pGC, nArcs, pArcs);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -1386,6 +1436,7 @@ damagePolyText8(DrawablePtr pDrawable,
Linear8Bit, TT_POLY8);
else
x = (*pGC->ops->PolyText8)(pDrawable, pGC, x, y, count, chars);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
return x;
}
@ -1406,6 +1457,7 @@ damagePolyText16(DrawablePtr pDrawable,
TT_POLY16);
else
x = (*pGC->ops->PolyText16)(pDrawable, pGC, x, y, count, chars);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
return x;
}
@ -1425,6 +1477,7 @@ damageImageText8(DrawablePtr pDrawable,
Linear8Bit, TT_IMAGE8);
else
(*pGC->ops->ImageText8)(pDrawable, pGC, x, y, count, chars);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -1444,6 +1497,7 @@ damageImageText16(DrawablePtr pDrawable,
TT_IMAGE16);
else
(*pGC->ops->ImageText16)(pDrawable, pGC, x, y, count, chars);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -1462,6 +1516,7 @@ damageImageGlyphBlt(DrawablePtr pDrawable,
nglyph, ppci, TRUE, pGC->subWindowMode);
(*pGC->ops->ImageGlyphBlt)(pDrawable, pGC, x, y, nglyph,
ppci, pglyphBase);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -1479,6 +1534,7 @@ damagePolyGlyphBlt(DrawablePtr pDrawable,
nglyph, ppci, FALSE, pGC->subWindowMode);
(*pGC->ops->PolyGlyphBlt)(pDrawable, pGC, x, y, nglyph,
ppci, pglyphBase);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -1512,6 +1568,7 @@ damagePushPixels(GCPtr pGC,
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
}
(*pGC->ops->PushPixels)(pGC, pBitMap, pDrawable, dx, dy, xOrg, yOrg);
damageReportPostOp (pDrawable);
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
}
@ -1591,10 +1648,12 @@ damagePaintWindow(WindowPtr pWindow,
if(what == PW_BACKGROUND) {
unwrap (pScrPriv, pScreen, PaintWindowBackground);
(*pScreen->PaintWindowBackground) (pWindow, prgn, what);
damageReportPostOp (&pWindow->drawable);
wrap (pScrPriv, pScreen, PaintWindowBackground, damagePaintWindow);
} else {
unwrap (pScrPriv, pScreen, PaintWindowBorder);
(*pScreen->PaintWindowBorder) (pWindow, prgn, what);
damageReportPostOp (&pWindow->drawable);
wrap (pScrPriv, pScreen, PaintWindowBorder, damagePaintWindow);
}
}
@ -1623,6 +1682,7 @@ damageCopyWindow(WindowPtr pWindow,
}
unwrap (pScrPriv, pScreen, CopyWindow);
(*pScreen->CopyWindow) (pWindow, ptOldOrg, prgnSrc);
damageReportPostOp (&pWindow->drawable);
wrap (pScrPriv, pScreen, CopyWindow, damageCopyWindow);
}
@ -1654,6 +1714,7 @@ damageRestoreAreas (PixmapPtr pPixmap,
unwrap (pScrPriv, pScreen, BackingStoreFuncs.RestoreAreas);
(*pScreen->BackingStoreFuncs.RestoreAreas) (pPixmap, prgn,
xorg, yorg, pWindow);
damageReportPostOp (&pWindow->drawable);
wrap (pScrPriv, pScreen, BackingStoreFuncs.RestoreAreas,
damageRestoreAreas);
}
@ -1820,12 +1881,14 @@ DamageCreate (DamageReportFunc damageReport,
pDamage->pNext = 0;
pDamage->pNextWin = 0;
REGION_NULL(pScreen, &pDamage->damage);
REGION_NULL(pScreen, &pDamage->pendingDamage);
pDamage->damageLevel = damageLevel;
pDamage->isInternal = isInternal;
pDamage->closure = closure;
pDamage->isWindow = FALSE;
pDamage->pDrawable = 0;
pDamage->reportAfter = FALSE;
pDamage->damageReport = damageReport;
pDamage->damageDestroy = damageDestroy;
@ -1909,6 +1972,7 @@ DamageDestroy (DamagePtr pDamage)
if (pDamage->damageDestroy)
(*pDamage->damageDestroy) (pDamage, pDamage->closure);
REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->damage);
REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->pendingDamage);
xfree (pDamage);
}
@ -1962,4 +2026,16 @@ DamageDamageRegion (DrawablePtr pDrawable,
RegionPtr pRegion)
{
damageDamageRegion (pDrawable, pRegion, FALSE, -1);
/* Go back and report this damage for DamagePtrs with reportAfter set, since
* this call isn't part of an in-progress drawing op in the call chain and
* the DDX probably just wants to know about it right away.
*/
damageReportPostOp (pDrawable);
}
void
DamageSetReportAfterOp (DamagePtr pDamage, Bool reportAfter)
{
pDamage->reportAfter = reportAfter;
}

View File

@ -81,4 +81,7 @@ void
DamageDamageRegion (DrawablePtr pDrawable,
const RegionPtr pRegion);
void
DamageSetReportAfterOp (DamagePtr pDamage, Bool reportAfter);
#endif /* _DAMAGE_H_ */

View File

@ -48,6 +48,9 @@ typedef struct _damage {
DamageReportFunc damageReport;
DamageDestroyFunc damageDestroy;
Bool reportAfter;
RegionRec pendingDamage;
} DamageRec;
typedef struct _damageScrPriv {

View File

@ -337,10 +337,7 @@ WaitForSomething(int *pClientsReady)
if (XFD_ANYSET(&tmp_set))
QueueWorkProc(EstablishNewConnections, NULL,
(pointer)&LastSelectMask);
#ifdef DPMSExtension
if (XFD_ANYSET (&devicesReadable) && (DPMSPowerLevel != DPMSModeOn))
DPMSSet(DPMSModeOn);
#endif
if (XFD_ANYSET (&devicesReadable) || XFD_ANYSET (&clientsReadable))
break;
#ifdef WIN32

View File

@ -53,23 +53,6 @@ OR PERFORMANCE OF THIS SOFTWARE.
#include <dix-config.h>
#endif
#ifndef __linux__
#include <time.h>
#else
/* The world's most shocking hack, to ensure we get clock_gettime() and
* CLOCK_MONOTONIC. */
#ifdef _POSIX_C_SOURCE
#define _SAVED_POSIX_C_SOURCE _POSIX_C_SOURCE
#undef _POSIX_C_SOURCE
#endif
#define _POSIX_C_SOURCE 199309L
#include <time.h>
#undef _POSIX_C_SOURCE
#ifdef _SAVED_POSIX_C_SOURCE
#define _POSIX_C_SOURCE _SAVED_POSIX_C_SOURCE
#endif
#endif /* __linux__ */
#ifdef __CYGWIN__
#include <stdlib.h>
#include <signal.h>
@ -80,6 +63,7 @@ OR PERFORMANCE OF THIS SOFTWARE.
#endif
#include <X11/Xos.h>
#include <stdio.h>
#include <time.h>
#include "misc.h"
#include <X11/X.h>
#define XSERV_t

View File

@ -243,6 +243,10 @@ Bool RRScreenInit(ScreenPtr pScreen)
pScrPriv->maxWidth = pScrPriv->minWidth = pScreen->width;
pScrPriv->maxHeight = pScrPriv->minHeight = pScreen->height;
pScrPriv->width = pScreen->width;
pScrPriv->height = pScreen->height;
pScrPriv->mmWidth = pScreen->mmWidth;
pScrPriv->mmHeight = pScreen->mmHeight;
#if RANDR_12_INTERFACE
pScrPriv->rrScreenSetSize = NULL;
pScrPriv->rrCrtcSet = NULL;

Some files were not shown because too many files have changed in this diff Show More