Merge branch 'master'
This commit is contained in:
commit
15a81b6325
|
@ -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__) */
|
|
@ -864,6 +864,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
|
||||||
int api_ver = COPY_SUB_BUFFER_INTERNAL_VERSION;
|
int api_ver = COPY_SUB_BUFFER_INTERNAL_VERSION;
|
||||||
drm_magic_t magic;
|
drm_magic_t magic;
|
||||||
drmVersionPtr version;
|
drmVersionPtr version;
|
||||||
|
int newlyopened;
|
||||||
char *driverName;
|
char *driverName;
|
||||||
drm_handle_t hFB;
|
drm_handle_t hFB;
|
||||||
int junk;
|
int junk;
|
||||||
|
@ -914,10 +915,10 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
|
||||||
goto handle_error;
|
goto handle_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
fd = drmOpen(NULL, BusID);
|
fd = drmOpenOnce(NULL, BusID, &newlyopened);
|
||||||
|
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
LogMessage(X_ERROR, "AIGLX error: drmOpen failed (%s)\n",
|
LogMessage(X_ERROR, "AIGLX error: drmOpenOnce failed (%s)\n",
|
||||||
strerror(-fd));
|
strerror(-fd));
|
||||||
goto handle_error;
|
goto handle_error;
|
||||||
}
|
}
|
||||||
|
@ -940,7 +941,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
|
||||||
drm_version.patch = -1;
|
drm_version.patch = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!DRIAuthConnection(pScreen, magic)) {
|
if (newlyopened && !DRIAuthConnection(pScreen, magic)) {
|
||||||
LogMessage(X_ERROR, "AIGLX error: DRIAuthConnection failed\n");
|
LogMessage(X_ERROR, "AIGLX error: DRIAuthConnection failed\n");
|
||||||
goto handle_error;
|
goto handle_error;
|
||||||
}
|
}
|
||||||
|
@ -1082,7 +1083,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
|
||||||
xfree(dev_priv);
|
xfree(dev_priv);
|
||||||
|
|
||||||
if (fd >= 0)
|
if (fd >= 0)
|
||||||
drmClose(fd);
|
drmCloseOnce(fd);
|
||||||
|
|
||||||
DRICloseConnection(pScreen);
|
DRICloseConnection(pScreen);
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "indirect_size_get.h"
|
#include "indirect_size_get.h"
|
||||||
#include "indirect_dispatch.h"
|
#include "indirect_dispatch.h"
|
||||||
#include "glxserver.h"
|
#include "glxserver.h"
|
||||||
|
#include "glxbyteorder.h"
|
||||||
#include "indirect_util.h"
|
#include "indirect_util.h"
|
||||||
#include "singlesize.h"
|
#include "singlesize.h"
|
||||||
#include "glapitable.h"
|
#include "glapitable.h"
|
||||||
|
|
|
@ -28,24 +28,12 @@
|
||||||
#include <X11/Xmd.h>
|
#include <X11/Xmd.h>
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glxproto.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 <inttypes.h>
|
||||||
#include "indirect_size.h"
|
#include "indirect_size.h"
|
||||||
#include "indirect_size_get.h"
|
#include "indirect_size_get.h"
|
||||||
#include "indirect_dispatch.h"
|
#include "indirect_dispatch.h"
|
||||||
#include "glxserver.h"
|
#include "glxserver.h"
|
||||||
|
#include "glxbyteorder.h"
|
||||||
#include "indirect_util.h"
|
#include "indirect_util.h"
|
||||||
#include "singlesize.h"
|
#include "singlesize.h"
|
||||||
#include "glapitable.h"
|
#include "glapitable.h"
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "glxserver.h"
|
#include "glxserver.h"
|
||||||
|
#include "glxbyteorder.h"
|
||||||
#include "glxext.h"
|
#include "glxext.h"
|
||||||
#include "singlesize.h"
|
#include "singlesize.h"
|
||||||
#include "unpack.h"
|
#include "unpack.h"
|
||||||
|
@ -46,20 +47,6 @@
|
||||||
#include "dispatch.h"
|
#include "dispatch.h"
|
||||||
#include "glapioffsets.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,
|
static int DoGetProgramString(struct __GLXclientStateRec *cl, GLbyte *pc,
|
||||||
unsigned get_programiv_offset, unsigned get_program_string_offset,
|
unsigned get_programiv_offset, unsigned get_program_string_offset,
|
||||||
Bool do_swap);
|
Bool do_swap);
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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 __glXSeparableFilter2DReqSize(const GLbyte *pc, Bool swap);
|
||||||
extern PURE HIDDEN int __glXTexImage3DReqSize(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 __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 __glXDrawBuffersARBReqSize(const GLbyte *pc, Bool swap);
|
||||||
extern PURE HIDDEN int __glXPointParameterfvEXTReqSize(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 __glXLoadProgramNVReqSize(const GLbyte *pc, Bool swap);
|
||||||
extern PURE HIDDEN int __glXProgramParameters4dvNVReqSize(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);
|
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 __glXVertexAttribs4svNVReqSize(const GLbyte *pc, Bool swap);
|
||||||
extern PURE HIDDEN int __glXVertexAttribs4ubvNVReqSize(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 __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 __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 __glXDeleteFramebuffersEXTReqSize(const GLbyte *pc, Bool swap);
|
||||||
|
extern PURE HIDDEN int __glXDeleteRenderbuffersEXTReqSize(const GLbyte *pc, Bool swap);
|
||||||
|
|
||||||
# undef HIDDEN
|
# undef HIDDEN
|
||||||
# undef PURE
|
# undef PURE
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "glxserver.h"
|
#include "glxserver.h"
|
||||||
|
#include "glxbyteorder.h"
|
||||||
#include "glxext.h"
|
#include "glxext.h"
|
||||||
#include "singlesize.h"
|
#include "singlesize.h"
|
||||||
#include "unpack.h"
|
#include "unpack.h"
|
||||||
|
@ -39,20 +40,6 @@
|
||||||
#include "glthread.h"
|
#include "glthread.h"
|
||||||
#include "dispatch.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)
|
int __glXDisp_GetCompressedTexImageARB(struct __GLXclientStateRec *cl, GLbyte *pc)
|
||||||
{
|
{
|
||||||
xGLXSingleReq * const req = (xGLXSingleReq *) pc;
|
xGLXSingleReq * const req = (xGLXSingleReq *) pc;
|
||||||
|
|
|
@ -23,29 +23,21 @@
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_DIX_CONFIG_H
|
||||||
|
#include <dix-config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <X11/Xmd.h>
|
#include <X11/Xmd.h>
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glxproto.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 <inttypes.h>
|
||||||
#include "indirect_size.h"
|
#include "indirect_size.h"
|
||||||
#include "indirect_size_get.h"
|
#include "indirect_size_get.h"
|
||||||
#include "indirect_dispatch.h"
|
#include "indirect_dispatch.h"
|
||||||
#include "glxserver.h"
|
#include "glxserver.h"
|
||||||
|
#include "glxbyteorder.h"
|
||||||
#include "singlesize.h"
|
#include "singlesize.h"
|
||||||
#include "glapitable.h"
|
#include "glapitable.h"
|
||||||
#include "glapi.h"
|
#include "glapi.h"
|
||||||
|
|
|
@ -39,20 +39,7 @@
|
||||||
#include "glthread.h"
|
#include "glthread.h"
|
||||||
#include "dispatch.h"
|
#include "dispatch.h"
|
||||||
#include "glapioffsets.h"
|
#include "glapioffsets.h"
|
||||||
|
#include "glxbyteorder.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 DoSwapInterval(__GLXclientState *cl, GLbyte *pc, int do_swap);
|
static int DoSwapInterval(__GLXclientState *cl, GLbyte *pc, int do_swap);
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,7 @@ typedef struct __GLXMESAdrawable __GLXMESAdrawable;
|
||||||
struct __GLXMESAscreen {
|
struct __GLXMESAscreen {
|
||||||
__GLXscreen base;
|
__GLXscreen base;
|
||||||
int index;
|
int index;
|
||||||
|
int num_vis;
|
||||||
XMesaVisual *xm_vis;
|
XMesaVisual *xm_vis;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -280,7 +281,7 @@ __glXMesaScreenDestroy(__GLXscreen *screen)
|
||||||
__GLXMESAscreen *mesaScreen = (__GLXMESAscreen *) screen;
|
__GLXMESAscreen *mesaScreen = (__GLXMESAscreen *) screen;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < screen->numVisuals; i++) {
|
for (i = 0; i < mesaScreen->num_vis; i++) {
|
||||||
if (mesaScreen->xm_vis[i])
|
if (mesaScreen->xm_vis[i])
|
||||||
XMesaDestroyVisual(mesaScreen->xm_vis[i]);
|
XMesaDestroyVisual(mesaScreen->xm_vis[i]);
|
||||||
}
|
}
|
||||||
|
@ -389,6 +390,7 @@ static void init_screen_visuals(__GLXMESAscreen *screen)
|
||||||
|
|
||||||
xfree(used);
|
xfree(used);
|
||||||
|
|
||||||
|
screen->num_vis = pScreen->numVisuals;
|
||||||
screen->xm_vis = pXMesaVisual;
|
screen->xm_vis = pXMesaVisual;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -946,10 +946,10 @@ SecurityAuditResourceIDAccess(
|
||||||
* rtype is its type or class.
|
* rtype is its type or class.
|
||||||
* access_mode represents the intended use of the resource; see
|
* access_mode represents the intended use of the resource; see
|
||||||
* resource.h.
|
* 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:
|
* 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:
|
* Side Effects:
|
||||||
* Disallowed resource accesses are audited.
|
* Disallowed resource accesses are audited.
|
||||||
|
|
|
@ -32,10 +32,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include <X11/X.h>
|
#include <X11/X.h>
|
||||||
#include <X11/Xmd.h>
|
#include <X11/Xmd.h>
|
||||||
#include "servermd.h"
|
#include "servermd.h"
|
||||||
#if defined(XFREE86) || ( defined(__OpenBSD__) && defined(__alpha__) ) \
|
|
||||||
|| (defined(__bsdi__))
|
|
||||||
#include "compiler.h"
|
#include "compiler.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ==========================================================================
|
* ==========================================================================
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#define DBUS_API_SUBJECT_TO_CHANGE
|
#define DBUS_API_SUBJECT_TO_CHANGE
|
||||||
#include <dbus/dbus.h>
|
#include <dbus/dbus.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sys/select.h>
|
||||||
|
|
||||||
#include <X11/X.h>
|
#include <X11/X.h>
|
||||||
|
|
||||||
|
|
92
configure.ac
92
configure.ac
|
@ -99,6 +99,64 @@ fi
|
||||||
|
|
||||||
AC_TYPE_PID_T
|
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.
|
dnl Checks for library functions.
|
||||||
AC_FUNC_VPRINTF
|
AC_FUNC_VPRINTF
|
||||||
AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr \
|
AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr \
|
||||||
|
@ -295,6 +353,9 @@ case $host_os in
|
||||||
DRI=yes
|
DRI=yes
|
||||||
KDRIVE_HW=yes
|
KDRIVE_HW=yes
|
||||||
;;
|
;;
|
||||||
|
*solaris*)
|
||||||
|
PKG_CHECK_EXISTS(libdrm, DRI=yes, DRI=no)
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
AM_CONDITIONAL(KDRIVE_HW, test "x$KDRIVE_HW" = xyes)
|
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
|
#error Not supported
|
||||||
#endif
|
#endif
|
||||||
], mmx_capable=yes, mmx_capable=no)
|
], mmx_capable=yes, mmx_capable=no)
|
||||||
|
else
|
||||||
|
mmx_capable=no
|
||||||
fi
|
fi
|
||||||
AC_MSG_RESULT([$mmx_capable])
|
AC_MSG_RESULT([$mmx_capable])
|
||||||
AM_CONDITIONAL(MMX_CAPABLE, [test "x$mmx_capable" = xyes])
|
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]),
|
AC_ARG_WITH(int10, AS_HELP_STRING([--with-int10=BACKEND], [int10 backend: vm86, x86emu or stub]),
|
||||||
[INT10="$withval"],
|
[INT10="$withval"],
|
||||||
[INT10="$DEFAULT_INT10"])
|
[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 reported by the server]),
|
||||||
[ VENDOR_STRING="$withval" ],
|
[ VENDOR_STRING="$withval" ],
|
||||||
[ VENDOR_STRING="$DEFAULT_VENDOR_NAME" ])
|
[ 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]),
|
[Short version of vendor string reported by the server]),
|
||||||
[ VENDOR_STRING_SHORT="$withval" ],
|
[ VENDOR_STRING_SHORT="$withval" ],
|
||||||
[ VENDOR_STRING_SHORT="$DEFAULT_VENDOR_NAME_SHORT" ])
|
[ VENDOR_STRING_SHORT="$DEFAULT_VENDOR_NAME_SHORT" ])
|
||||||
|
@ -544,7 +607,7 @@ XEXT_LIB='$(top_builddir)/Xext/libXext.la'
|
||||||
XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
|
XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
|
||||||
|
|
||||||
dnl Core modules for most extensions, et al.
|
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"
|
REQUIRED_LIBS="xfont xau fontenc"
|
||||||
|
|
||||||
if test "x$DBUS" = xauto; then
|
if test "x$DBUS" = xauto; then
|
||||||
|
@ -615,7 +678,7 @@ fi
|
||||||
|
|
||||||
if test "x$GLX" = xyes && ! test "x$MESA_SOURCE" = x; then
|
if test "x$GLX" = xyes && ! test "x$MESA_SOURCE" = x; then
|
||||||
PKG_CHECK_MODULES([XLIB], [x11])
|
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_SUBST(XLIB_CFLAGS)
|
||||||
AC_DEFINE(GLXEXT, 1, [Build GLX extension])
|
AC_DEFINE(GLXEXT, 1, [Build GLX extension])
|
||||||
GLX_LIBS='$(top_builddir)/GL/glx/libglx.la $(top_builddir)/GL/mesa/libGLcore.la'
|
GLX_LIBS='$(top_builddir)/GL/glx/libglx.la $(top_builddir)/GL/mesa/libGLcore.la'
|
||||||
|
@ -1693,20 +1756,13 @@ AC_SUBST(XKB_COMPILED_DIR)
|
||||||
dnl and the rest of these are generic, so they're in config.h
|
dnl and the rest of these are generic, so they're in config.h
|
||||||
AC_DEFINE(XResExtension, 1, [Build XRes extension])
|
AC_DEFINE(XResExtension, 1, [Build XRes extension])
|
||||||
|
|
||||||
dnl CYGWIN does not define fd_set if _POSIX_SOURCE is defined
|
AC_TRY_COMPILE([
|
||||||
dnl _*_SOURCE on Solaris restricts to the standards, and removes non-standard
|
#include <features.h>
|
||||||
dnl functions which X uses
|
#ifndef __GLIBC__
|
||||||
case $host_os in
|
#error not glibc
|
||||||
cygwin*) ;;
|
#endif
|
||||||
solaris*) ;;
|
], [], [AC_DEFINE(_GNU_SOURCE, 1,
|
||||||
darwin*) ;;
|
[ Enable GNU and other extensions to the C environment for glibc])])
|
||||||
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_DEFINE_DIR(PROJECTROOT, prefix, [Overall prefix])
|
AC_DEFINE_DIR(PROJECTROOT, prefix, [Overall prefix])
|
||||||
|
|
||||||
|
|
|
@ -279,10 +279,35 @@ ProcDamageSubtract (ClientPtr client)
|
||||||
return (client->noClientException);
|
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 */
|
/* Major version controls available requests */
|
||||||
static const int version_requests[] = {
|
static const int version_requests[] = {
|
||||||
X_DamageQueryVersion, /* before client sends QueryVersion */
|
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]))
|
#define NUM_VERSION_REQUESTS (sizeof (version_requests) / sizeof (version_requests[0]))
|
||||||
|
@ -293,6 +318,8 @@ int (*ProcDamageVector[XDamageNumberRequests])(ClientPtr) = {
|
||||||
ProcDamageCreate,
|
ProcDamageCreate,
|
||||||
ProcDamageDestroy,
|
ProcDamageDestroy,
|
||||||
ProcDamageSubtract,
|
ProcDamageSubtract,
|
||||||
|
/*************** Version 1.1 ****************/
|
||||||
|
ProcDamageAdd,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -361,12 +388,27 @@ SProcDamageSubtract (ClientPtr client)
|
||||||
return (*ProcDamageVector[stuff->damageReqType]) (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) = {
|
int (*SProcDamageVector[XDamageNumberRequests])(ClientPtr) = {
|
||||||
/*************** Version 1 ******************/
|
/*************** Version 1 ******************/
|
||||||
SProcDamageQueryVersion,
|
SProcDamageQueryVersion,
|
||||||
SProcDamageCreate,
|
SProcDamageCreate,
|
||||||
SProcDamageDestroy,
|
SProcDamageDestroy,
|
||||||
SProcDamageSubtract,
|
SProcDamageSubtract,
|
||||||
|
/*************** Version 1.1 ****************/
|
||||||
|
SProcDamageAdd,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
34
dbe/dbe.c
34
dbe/dbe.c
|
@ -39,6 +39,11 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#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/X.h>
|
||||||
#include <X11/Xproto.h>
|
#include <X11/Xproto.h>
|
||||||
|
@ -711,11 +716,14 @@ ProcDbeSwapBuffers(ClientPtr client)
|
||||||
return(Success);
|
return(Success);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nStuff > UINT32_MAX / sizeof(DbeSwapInfoRec))
|
||||||
|
return BadAlloc;
|
||||||
|
|
||||||
/* Get to the swap info appended to the end of the request. */
|
/* Get to the swap info appended to the end of the request. */
|
||||||
dbeSwapInfo = (xDbeSwapInfo *)&stuff[1];
|
dbeSwapInfo = (xDbeSwapInfo *)&stuff[1];
|
||||||
|
|
||||||
/* Allocate array to record swap information. */
|
/* Allocate array to record swap information. */
|
||||||
swapInfo = (DbeSwapInfoPtr)ALLOCATE_LOCAL(nStuff * sizeof(DbeSwapInfoRec));
|
swapInfo = (DbeSwapInfoPtr)Xalloc(nStuff * sizeof(DbeSwapInfoRec));
|
||||||
if (swapInfo == NULL)
|
if (swapInfo == NULL)
|
||||||
{
|
{
|
||||||
return(BadAlloc);
|
return(BadAlloc);
|
||||||
|
@ -730,14 +738,14 @@ ProcDbeSwapBuffers(ClientPtr client)
|
||||||
error = dixLookupWindow(&pWin, dbeSwapInfo[i].window, client,
|
error = dixLookupWindow(&pWin, dbeSwapInfo[i].window, client,
|
||||||
DixWriteAccess);
|
DixWriteAccess);
|
||||||
if (error != Success) {
|
if (error != Success) {
|
||||||
DEALLOCATE_LOCAL(swapInfo);
|
Xfree(swapInfo);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Each window must be double-buffered - BadMatch. */
|
/* Each window must be double-buffered - BadMatch. */
|
||||||
if (DBE_WINDOW_PRIV(pWin) == NULL)
|
if (DBE_WINDOW_PRIV(pWin) == NULL)
|
||||||
{
|
{
|
||||||
DEALLOCATE_LOCAL(swapInfo);
|
Xfree(swapInfo);
|
||||||
return(BadMatch);
|
return(BadMatch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -746,7 +754,7 @@ ProcDbeSwapBuffers(ClientPtr client)
|
||||||
{
|
{
|
||||||
if (dbeSwapInfo[i].window == dbeSwapInfo[j].window)
|
if (dbeSwapInfo[i].window == dbeSwapInfo[j].window)
|
||||||
{
|
{
|
||||||
DEALLOCATE_LOCAL(swapInfo);
|
Xfree(swapInfo);
|
||||||
return(BadMatch);
|
return(BadMatch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -757,7 +765,7 @@ ProcDbeSwapBuffers(ClientPtr client)
|
||||||
(dbeSwapInfo[i].swapAction != XdbeUntouched ) &&
|
(dbeSwapInfo[i].swapAction != XdbeUntouched ) &&
|
||||||
(dbeSwapInfo[i].swapAction != XdbeCopied ))
|
(dbeSwapInfo[i].swapAction != XdbeCopied ))
|
||||||
{
|
{
|
||||||
DEALLOCATE_LOCAL(swapInfo);
|
Xfree(swapInfo);
|
||||||
return(BadValue);
|
return(BadValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -787,12 +795,12 @@ ProcDbeSwapBuffers(ClientPtr client)
|
||||||
error = (*pDbeScreenPriv->SwapBuffers)(client, &nStuff, swapInfo);
|
error = (*pDbeScreenPriv->SwapBuffers)(client, &nStuff, swapInfo);
|
||||||
if (error != Success)
|
if (error != Success)
|
||||||
{
|
{
|
||||||
DEALLOCATE_LOCAL(swapInfo);
|
Xfree(swapInfo);
|
||||||
return(error);
|
return(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DEALLOCATE_LOCAL(swapInfo);
|
Xfree(swapInfo);
|
||||||
return(Success);
|
return(Success);
|
||||||
|
|
||||||
} /* ProcDbeSwapBuffers() */
|
} /* ProcDbeSwapBuffers() */
|
||||||
|
@ -874,10 +882,12 @@ ProcDbeGetVisualInfo(ClientPtr client)
|
||||||
|
|
||||||
REQUEST_AT_LEAST_SIZE(xDbeGetVisualInfoReq);
|
REQUEST_AT_LEAST_SIZE(xDbeGetVisualInfoReq);
|
||||||
|
|
||||||
|
if (stuff->n > UINT32_MAX / sizeof(DrawablePtr))
|
||||||
|
return BadAlloc;
|
||||||
/* Make sure any specified drawables are valid. */
|
/* Make sure any specified drawables are valid. */
|
||||||
if (stuff->n != 0)
|
if (stuff->n != 0)
|
||||||
{
|
{
|
||||||
if (!(pDrawables = (DrawablePtr *)ALLOCATE_LOCAL(stuff->n *
|
if (!(pDrawables = (DrawablePtr *)Xalloc(stuff->n *
|
||||||
sizeof(DrawablePtr))))
|
sizeof(DrawablePtr))))
|
||||||
{
|
{
|
||||||
return(BadAlloc);
|
return(BadAlloc);
|
||||||
|
@ -890,7 +900,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
|
||||||
rc = dixLookupDrawable(pDrawables+i, drawables[i], client, 0,
|
rc = dixLookupDrawable(pDrawables+i, drawables[i], client, 0,
|
||||||
DixReadAccess);
|
DixReadAccess);
|
||||||
if (rc != Success) {
|
if (rc != Success) {
|
||||||
DEALLOCATE_LOCAL(pDrawables);
|
Xfree(pDrawables);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -902,7 +912,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
|
||||||
{
|
{
|
||||||
if (pDrawables)
|
if (pDrawables)
|
||||||
{
|
{
|
||||||
DEALLOCATE_LOCAL(pDrawables);
|
Xfree(pDrawables);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(BadAlloc);
|
return(BadAlloc);
|
||||||
|
@ -929,7 +939,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
|
||||||
/* Free pDrawables if we needed to allocate it above. */
|
/* Free pDrawables if we needed to allocate it above. */
|
||||||
if (pDrawables)
|
if (pDrawables)
|
||||||
{
|
{
|
||||||
DEALLOCATE_LOCAL(pDrawables);
|
Xfree(pDrawables);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(BadAlloc);
|
return(BadAlloc);
|
||||||
|
@ -1010,7 +1020,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
|
||||||
|
|
||||||
if (pDrawables)
|
if (pDrawables)
|
||||||
{
|
{
|
||||||
DEALLOCATE_LOCAL(pDrawables);
|
Xfree(pDrawables);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(client->noClientException);
|
return(client->noClientException);
|
||||||
|
|
|
@ -3752,6 +3752,8 @@ InitClientPrivates(ClientPtr client)
|
||||||
client->devPrivates = ppriv;
|
client->devPrivates = ppriv;
|
||||||
sizes = clientPrivateSizes;
|
sizes = clientPrivateSizes;
|
||||||
ptr = (char *)(ppriv + clientPrivateLen);
|
ptr = (char *)(ppriv + clientPrivateLen);
|
||||||
|
if (ppriv)
|
||||||
|
bzero(ppriv, totalClientSize - sizeof(ClientRec));
|
||||||
for (i = clientPrivateLen; --i >= 0; ppriv++, sizes++)
|
for (i = clientPrivateLen; --i >= 0; ppriv++, sizes++)
|
||||||
{
|
{
|
||||||
if ( (size = *sizes) )
|
if ( (size = *sizes) )
|
||||||
|
|
|
@ -219,7 +219,7 @@ dixLookupDrawable(DrawablePtr *pDraw, XID id, ClientPtr client,
|
||||||
pTmp = client->lastDrawable;
|
pTmp = client->lastDrawable;
|
||||||
|
|
||||||
/* an access check is required for cached drawables */
|
/* 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))
|
if (!XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, access, pTmp))
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
} else
|
} else
|
||||||
|
@ -227,10 +227,10 @@ dixLookupDrawable(DrawablePtr *pDraw, XID id, ClientPtr client,
|
||||||
access);
|
access);
|
||||||
if (!pTmp)
|
if (!pTmp)
|
||||||
return BadDrawable;
|
return BadDrawable;
|
||||||
if (!((1 << pTmp->type) | (type ? type : M_DRAWABLE)))
|
if (!((1 << pTmp->type) & (type ? type : M_DRAWABLE)))
|
||||||
return BadMatch;
|
return BadMatch;
|
||||||
|
|
||||||
if (pTmp->type | M_DRAWABLE) {
|
if (type & M_DRAWABLE) {
|
||||||
client->lastDrawable = pTmp;
|
client->lastDrawable = pTmp;
|
||||||
client->lastDrawableID = id;
|
client->lastDrawableID = id;
|
||||||
client->lastGCID = INVALID;
|
client->lastGCID = INVALID;
|
||||||
|
|
|
@ -549,11 +549,7 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
|
||||||
y = valuators[1 - first_valuator];
|
y = valuators[1 - first_valuator];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
<<<<<<< HEAD/dix/getevents.c
|
|
||||||
y = pointer->valuator->lasty;
|
y = pointer->valuator->lasty;
|
||||||
=======
|
|
||||||
y = pointer->valuator->lasty;
|
|
||||||
>>>>>>> ca5ebe3971d8ebcfed00c5ebcd026cdd0ce0c6ba/dix/getevents.c
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -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
|
to authenticate access. See also the \fIxdm\fP(1) and
|
||||||
\fIXsecurity\fP(__miscmansuffix__) manual pages.
|
\fIXsecurity\fP(__miscmansuffix__) manual pages.
|
||||||
.TP 8
|
.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
|
.B \-bs
|
||||||
disables backing store support on all screens.
|
disables backing store support on all screens.
|
||||||
.TP 8
|
.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
|
client's backing store expectations but does not provide a way to tell
|
||||||
the client that it is doing so.
|
the client that it is doing so.
|
||||||
.TP 8
|
.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
|
.B \-x \fIextension\fP
|
||||||
loads the specified extension at init.
|
loads the specified extension at init.
|
||||||
This is a no-op for most implementations.
|
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
|
for setuid X servers (i.e., when the X server's real and effective uids
|
||||||
are different).
|
are different).
|
||||||
.TP 8
|
.TP 8
|
||||||
.B \-ar1 \fImilliseconds\fP
|
.B \-ardelay \fImilliseconds\fP
|
||||||
sets the autorepeat delay (length of time in milliseconds that a key must
|
sets the autorepeat delay (length of time in milliseconds that a key must
|
||||||
be depressed before autorepeat starts).
|
be depressed before autorepeat starts).
|
||||||
.TP 8
|
.TP 8
|
||||||
.B \-ar2 \fImilliseconds\fP
|
.B \-arinterval \fImilliseconds\fP
|
||||||
sets the autorepeat interval (length of time in milliseconds that should
|
sets the autorepeat interval (length of time in milliseconds that should
|
||||||
elapse between autorepeat-generated keystrokes).
|
elapse between autorepeat-generated keystrokes).
|
||||||
.TP 8
|
.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
|
.B \-xkbmap \fIfilename\fP
|
||||||
loads keyboard description in \fIfilename\fP on server startup.
|
loads keyboard description in \fIfilename\fP on server startup.
|
||||||
.SH SECURITY EXTENSION OPTIONS
|
.SH SECURITY EXTENSION OPTIONS
|
||||||
|
|
141
exa/exa.c
141
exa/exa.c
|
@ -32,6 +32,10 @@
|
||||||
#include <dix-config.h>
|
#include <dix-config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MITSHM
|
||||||
|
#include "shmint.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "exa_priv.h"
|
#include "exa_priv.h"
|
||||||
|
@ -117,18 +121,78 @@ exaGetDrawablePixmap(DrawablePtr pDrawable)
|
||||||
return (PixmapPtr) 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, ®ion, &box, 1);
|
||||||
|
REGION_UNION(pScreen, pDamageReg, pDamageReg, ®ion);
|
||||||
|
REGION_UNINIT(pScreen, ®ion);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* exaDrawableDirty() marks a pixmap backing a drawable as dirty, allowing for
|
* exaDrawableDirty() marks a pixmap backing a drawable as dirty, allowing for
|
||||||
* optimizations in pixmap migration when no changes have occurred.
|
* optimizations in pixmap migration when no changes have occurred.
|
||||||
*/
|
*/
|
||||||
void
|
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));
|
x1 = max(x1, pDrawable->x);
|
||||||
if (pExaPixmap != NULL)
|
y1 = max(y1, pDrawable->y);
|
||||||
pExaPixmap->dirty = TRUE;
|
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
|
static Bool
|
||||||
|
@ -149,6 +213,7 @@ exaDestroyPixmap (PixmapPtr pPixmap)
|
||||||
pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
|
pPixmap->devPrivate.ptr = pExaPixmap->sys_ptr;
|
||||||
pPixmap->devKind = pExaPixmap->sys_pitch;
|
pPixmap->devKind = pExaPixmap->sys_pitch;
|
||||||
}
|
}
|
||||||
|
REGION_UNINIT(pPixmap->drawable.pScreen, &pExaPixmap->validReg);
|
||||||
}
|
}
|
||||||
return fbDestroyPixmap (pPixmap);
|
return fbDestroyPixmap (pPixmap);
|
||||||
}
|
}
|
||||||
|
@ -216,7 +281,20 @@ exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth)
|
||||||
return NULL;
|
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;
|
return pPixmap;
|
||||||
}
|
}
|
||||||
|
@ -261,32 +339,14 @@ exaDrawableIsOffscreen (DrawablePtr pDrawable)
|
||||||
/**
|
/**
|
||||||
* Returns the pixmap which backs a drawable, and the offsets to add to
|
* 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.
|
* coordinates to make them address the same bits in the backing drawable.
|
||||||
* These coordinates are nonzero only for redirected windows.
|
|
||||||
*/
|
*/
|
||||||
PixmapPtr
|
PixmapPtr
|
||||||
exaGetOffscreenPixmap (DrawablePtr pDrawable, int *xp, int *yp)
|
exaGetOffscreenPixmap (DrawablePtr pDrawable, int *xp, int *yp)
|
||||||
{
|
{
|
||||||
PixmapPtr pPixmap;
|
PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable);
|
||||||
int x, y;
|
|
||||||
|
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))
|
if (exaPixmapIsOffscreen (pPixmap))
|
||||||
return pPixmap;
|
return pPixmap;
|
||||||
else
|
else
|
||||||
|
@ -334,8 +394,7 @@ exaPrepareAccess(DrawablePtr pDrawable, int index)
|
||||||
/**
|
/**
|
||||||
* exaFinishAccess() is EXA's wrapper for the driver's FinishAccess() handler.
|
* exaFinishAccess() is EXA's wrapper for the driver's FinishAccess() handler.
|
||||||
*
|
*
|
||||||
* It deals with marking drawables as dirty, and calling the driver's
|
* It deals with calling the driver's FinishAccess() only if necessary.
|
||||||
* FinishAccess() only if necessary.
|
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
exaFinishAccess(DrawablePtr pDrawable, int index)
|
exaFinishAccess(DrawablePtr pDrawable, int index)
|
||||||
|
@ -345,9 +404,6 @@ exaFinishAccess(DrawablePtr pDrawable, int index)
|
||||||
PixmapPtr pPixmap;
|
PixmapPtr pPixmap;
|
||||||
ExaPixmapPrivPtr pExaPixmap;
|
ExaPixmapPrivPtr pExaPixmap;
|
||||||
|
|
||||||
if (index == EXA_PREPARE_DEST)
|
|
||||||
exaDrawableDirty (pDrawable);
|
|
||||||
|
|
||||||
pPixmap = exaGetDrawablePixmap (pDrawable);
|
pPixmap = exaGetDrawablePixmap (pDrawable);
|
||||||
|
|
||||||
pExaPixmap = ExaGetPixmapPriv(pPixmap);
|
pExaPixmap = ExaGetPixmapPriv(pPixmap);
|
||||||
|
@ -373,7 +429,7 @@ exaFinishAccess(DrawablePtr pDrawable, int index)
|
||||||
* accelerated or may sync the card and fall back to fb.
|
* accelerated or may sync the card and fall back to fb.
|
||||||
*/
|
*/
|
||||||
static void
|
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.
|
/* fbValidateGC will do direct access to pixmaps if the tiling has changed.
|
||||||
* Preempt fbValidateGC by doing its work and masking the change out, so
|
* Preempt fbValidateGC by doing its work and masking the change out, so
|
||||||
|
@ -404,6 +460,7 @@ exaValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
|
||||||
exaPrepareAccess(&pOldTile->drawable, EXA_PREPARE_SRC);
|
exaPrepareAccess(&pOldTile->drawable, EXA_PREPARE_SRC);
|
||||||
pNewTile = fb24_32ReformatTile (pOldTile,
|
pNewTile = fb24_32ReformatTile (pOldTile,
|
||||||
pDrawable->bitsPerPixel);
|
pDrawable->bitsPerPixel);
|
||||||
|
exaPixmapDirty(pNewTile, 0, 0, pNewTile->drawable.width, pNewTile->drawable.height);
|
||||||
exaFinishAccess(&pOldTile->drawable, EXA_PREPARE_SRC);
|
exaFinishAccess(&pOldTile->drawable, EXA_PREPARE_SRC);
|
||||||
}
|
}
|
||||||
if (pNewTile)
|
if (pNewTile)
|
||||||
|
@ -419,9 +476,14 @@ exaValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
|
||||||
if (!pGC->tileIsPixel && FbEvenTile (pGC->tile.pixmap->drawable.width *
|
if (!pGC->tileIsPixel && FbEvenTile (pGC->tile.pixmap->drawable.width *
|
||||||
pDrawable->bitsPerPixel))
|
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);
|
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
|
/* Mask out the GCTile change notification, now that we've done FB's
|
||||||
* job for it.
|
* job for it.
|
||||||
|
@ -560,7 +622,7 @@ exaDriverInit (ScreenPtr pScreen,
|
||||||
|
|
||||||
pScreen->devPrivates[exaScreenPrivateIndex].ptr = (pointer) pExaScr;
|
pScreen->devPrivates[exaScreenPrivateIndex].ptr = (pointer) pExaScr;
|
||||||
|
|
||||||
pExaScr->migration = ExaMigrationSmart;
|
pExaScr->migration = ExaMigrationAlways;
|
||||||
|
|
||||||
exaDDXDriverInit(pScreen);
|
exaDDXDriverInit(pScreen);
|
||||||
|
|
||||||
|
@ -610,6 +672,13 @@ exaDriverInit (ScreenPtr pScreen,
|
||||||
miDisableCompositeWrapper(pScreen);
|
miDisableCompositeWrapper(pScreen);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MITSHM
|
||||||
|
/* Re-register with the MI funcs, which don't allow shared pixmaps.
|
||||||
|
* Shared pixmaps are almost always a performance loss for us, but this
|
||||||
|
* still allows for SHM PutImage.
|
||||||
|
*/
|
||||||
|
ShmRegisterFuncs(pScreen, NULL);
|
||||||
|
#endif
|
||||||
/*
|
/*
|
||||||
* Hookup offscreen pixmaps
|
* Hookup offscreen pixmaps
|
||||||
*/
|
*/
|
||||||
|
|
12
exa/exa.h
12
exa/exa.h
|
@ -39,7 +39,7 @@
|
||||||
#include "fb.h"
|
#include "fb.h"
|
||||||
|
|
||||||
#define EXA_VERSION_MAJOR 2
|
#define EXA_VERSION_MAJOR 2
|
||||||
#define EXA_VERSION_MINOR 0
|
#define EXA_VERSION_MINOR 1
|
||||||
#define EXA_VERSION_RELEASE 0
|
#define EXA_VERSION_RELEASE 0
|
||||||
|
|
||||||
typedef struct _ExaOffscreenArea ExaOffscreenArea;
|
typedef struct _ExaOffscreenArea ExaOffscreenArea;
|
||||||
|
@ -73,8 +73,8 @@ struct _ExaOffscreenArea {
|
||||||
typedef struct _ExaDriver {
|
typedef struct _ExaDriver {
|
||||||
/**
|
/**
|
||||||
* exa_major and exa_minor should be set by the driver to the version of
|
* 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
|
* EXA which the driver was compiled for (or configures itself at runtime
|
||||||
* support). This allows EXA to extend the structure for new features
|
* to support). This allows EXA to extend the structure for new features
|
||||||
* without breaking ABI for drivers compiled against older versions.
|
* without breaking ABI for drivers compiled against older versions.
|
||||||
*/
|
*/
|
||||||
int exa_major, exa_minor;
|
int exa_major, exa_minor;
|
||||||
|
@ -716,6 +716,12 @@ exaGetPixmapSize(PixmapPtr pPix);
|
||||||
void
|
void
|
||||||
exaEnableDisableFBAccess (int index, Bool enable);
|
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
|
* Returns TRUE if the given planemask covers all the significant bits in the
|
||||||
* pixel values for pDrawable.
|
* pixel values for pDrawable.
|
||||||
|
|
159
exa/exa_accel.c
159
exa/exa_accel.c
|
@ -20,6 +20,11 @@
|
||||||
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Eric Anholt <eric@anholt.net>
|
||||||
|
* Michel Dänzer <michel@tungstengraphics.com>
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_DIX_CONFIG_H
|
#ifdef HAVE_DIX_CONFIG_H
|
||||||
|
@ -49,12 +54,12 @@ exaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
|
||||||
|
|
||||||
pixmaps[0].as_dst = TRUE;
|
pixmaps[0].as_dst = TRUE;
|
||||||
pixmaps[0].as_src = FALSE;
|
pixmaps[0].as_src = FALSE;
|
||||||
pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
|
pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
|
||||||
|
|
||||||
if (pExaScr->swappedOut ||
|
if (pExaScr->swappedOut ||
|
||||||
pGC->fillStyle != FillSolid ||
|
pGC->fillStyle != FillSolid ||
|
||||||
pDrawable->width > pExaScr->info->maxX ||
|
pPixmap->drawable.width > pExaScr->info->maxX ||
|
||||||
pDrawable->height > pExaScr->info->maxY)
|
pPixmap->drawable.height > pExaScr->info->maxY)
|
||||||
{
|
{
|
||||||
exaDoMigration (pixmaps, 1, FALSE);
|
exaDoMigration (pixmaps, 1, FALSE);
|
||||||
ExaCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted);
|
ExaCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted);
|
||||||
|
@ -104,6 +109,8 @@ exaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
|
||||||
(*pExaScr->info->Solid) (pPixmap,
|
(*pExaScr->info->Solid) (pPixmap,
|
||||||
fullX1 + off_x, fullY1 + off_y,
|
fullX1 + off_x, fullY1 + off_y,
|
||||||
fullX2 + off_x, fullY1 + 1 + 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
|
else
|
||||||
{
|
{
|
||||||
|
@ -118,17 +125,19 @@ exaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
|
||||||
partX2 = pbox->x2;
|
partX2 = pbox->x2;
|
||||||
if (partX2 > fullX2)
|
if (partX2 > fullX2)
|
||||||
partX2 = fullX2;
|
partX2 = fullX2;
|
||||||
if (partX2 > partX1)
|
if (partX2 > partX1) {
|
||||||
(*pExaScr->info->Solid) (pPixmap,
|
(*pExaScr->info->Solid) (pPixmap,
|
||||||
partX1 + off_x, fullY1 + off_y,
|
partX1 + off_x, fullY1 + off_y,
|
||||||
partX2 + off_x, fullY1 + 1 + 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++;
|
pbox++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(*pExaScr->info->DoneSolid) (pPixmap);
|
(*pExaScr->info->DoneSolid) (pPixmap);
|
||||||
exaDrawableDirty (pDrawable);
|
|
||||||
exaMarkSync(pScreen);
|
exaMarkSync(pScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,8 +231,8 @@ exaPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
|
||||||
|
|
||||||
exaFinishAccess(pDrawable, EXA_PREPARE_DEST);
|
exaFinishAccess(pDrawable, EXA_PREPARE_DEST);
|
||||||
}
|
}
|
||||||
|
exaPixmapDirty(pPix, x1 + xoff, y1 + yoff, x2 + xoff, y2 + yoff);
|
||||||
}
|
}
|
||||||
exaDrawableDirty(pDrawable);
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -351,11 +360,12 @@ exaCopyNtoNTwoDir (DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
|
||||||
dst_off_y + pbox->y1 + i,
|
dst_off_y + pbox->y1 + i,
|
||||||
pbox->x2 - pbox->x1, 1);
|
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)
|
if (dirsetup != 0)
|
||||||
pExaScr->info->DoneCopy(pDstPixmap);
|
pExaScr->info->DoneCopy(pDstPixmap);
|
||||||
exaMarkSync(pDstDrawable->pScreen);
|
exaMarkSync(pDstDrawable->pScreen);
|
||||||
exaDrawableDirty(pDstDrawable);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,19 +390,19 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
|
||||||
|
|
||||||
pixmaps[0].as_dst = TRUE;
|
pixmaps[0].as_dst = TRUE;
|
||||||
pixmaps[0].as_src = FALSE;
|
pixmaps[0].as_src = FALSE;
|
||||||
pixmaps[0].pPix = exaGetDrawablePixmap (pDstDrawable);
|
pixmaps[0].pPix = pDstPixmap = exaGetDrawablePixmap (pDstDrawable);
|
||||||
pixmaps[1].as_dst = FALSE;
|
pixmaps[1].as_dst = FALSE;
|
||||||
pixmaps[1].as_src = TRUE;
|
pixmaps[1].as_src = TRUE;
|
||||||
pixmaps[1].pPix = exaGetDrawablePixmap (pSrcDrawable);
|
pixmaps[1].pPix = pSrcPixmap = exaGetDrawablePixmap (pSrcDrawable);
|
||||||
|
|
||||||
/* Respect maxX/maxY in a trivial way: don't set up drawing when we might
|
/* Respect maxX/maxY in a trivial way: don't set up drawing when we might
|
||||||
* violate the limits. The proper solution would be a temporary pixmap
|
* violate the limits. The proper solution would be a temporary pixmap
|
||||||
* adjusted so that the drawing happened within limits.
|
* adjusted so that the drawing happened within limits.
|
||||||
*/
|
*/
|
||||||
if (pSrcDrawable->width > pExaScr->info->maxX ||
|
if (pSrcPixmap->drawable.width > pExaScr->info->maxX ||
|
||||||
pSrcDrawable->height > pExaScr->info->maxY ||
|
pSrcPixmap->drawable.height > pExaScr->info->maxY ||
|
||||||
pDstDrawable->width > pExaScr->info->maxX ||
|
pDstPixmap->drawable.width > pExaScr->info->maxX ||
|
||||||
pDstDrawable->height > pExaScr->info->maxY)
|
pDstPixmap->drawable.height > pExaScr->info->maxY)
|
||||||
{
|
{
|
||||||
exaDoMigration (pixmaps, 2, FALSE);
|
exaDoMigration (pixmaps, 2, FALSE);
|
||||||
goto fallback;
|
goto fallback;
|
||||||
|
@ -401,7 +411,8 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mixed directions must be handled specially if the card is lame */
|
/* Mixed directions must be handled specially if the card is lame */
|
||||||
if (pExaScr->info->flags & EXA_TWO_BITBLT_DIRECTIONS && (dx*dy) < 0) {
|
if (pExaScr->info->flags & EXA_TWO_BITBLT_DIRECTIONS &&
|
||||||
|
reverse != upsidedown) {
|
||||||
if (!exaCopyNtoNTwoDir(pSrcDrawable, pDstDrawable, pGC, pbox, nbox,
|
if (!exaCopyNtoNTwoDir(pSrcDrawable, pDstDrawable, pGC, pbox, nbox,
|
||||||
dx, dy))
|
dx, dy))
|
||||||
goto fallback;
|
goto fallback;
|
||||||
|
@ -411,7 +422,7 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
|
||||||
if ((pSrcPixmap = exaGetOffscreenPixmap (pSrcDrawable, &src_off_x, &src_off_y)) &&
|
if ((pSrcPixmap = exaGetOffscreenPixmap (pSrcDrawable, &src_off_x, &src_off_y)) &&
|
||||||
(pDstPixmap = exaGetOffscreenPixmap (pDstDrawable, &dst_off_x, &dst_off_y)) &&
|
(pDstPixmap = exaGetOffscreenPixmap (pDstDrawable, &dst_off_x, &dst_off_y)) &&
|
||||||
(*pExaScr->info->PrepareCopy) (pSrcPixmap, pDstPixmap,
|
(*pExaScr->info->PrepareCopy) (pSrcPixmap, pDstPixmap,
|
||||||
dx, dy,
|
reverse ? -1 : 1, upsidedown ? -1 : 1,
|
||||||
pGC ? pGC->alu : GXcopy,
|
pGC ? pGC->alu : GXcopy,
|
||||||
pGC ? pGC->planemask : FB_ALLONES))
|
pGC ? pGC->planemask : FB_ALLONES))
|
||||||
{
|
{
|
||||||
|
@ -423,11 +434,13 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
|
||||||
pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
|
pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
|
||||||
pbox->x2 - pbox->x1,
|
pbox->x2 - pbox->x1,
|
||||||
pbox->y2 - pbox->y1);
|
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++;
|
pbox++;
|
||||||
}
|
}
|
||||||
(*pExaScr->info->DoneCopy) (pDstPixmap);
|
(*pExaScr->info->DoneCopy) (pDstPixmap);
|
||||||
exaMarkSync(pDstDrawable->pScreen);
|
exaMarkSync(pDstDrawable->pScreen);
|
||||||
exaDrawableDirty (pDstDrawable);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -442,6 +455,11 @@ fallback:
|
||||||
bitplane, closure);
|
bitplane, closure);
|
||||||
exaFinishAccess (pSrcDrawable, EXA_PREPARE_SRC);
|
exaFinishAccess (pSrcDrawable, EXA_PREPARE_SRC);
|
||||||
exaFinishAccess (pDstDrawable, EXA_PREPARE_DEST);
|
exaFinishAccess (pDstDrawable, EXA_PREPARE_DEST);
|
||||||
|
while (nbox--)
|
||||||
|
{
|
||||||
|
exaDrawableDirty (pDstDrawable, pbox->x1, pbox->y1, pbox->x2, pbox->y2);
|
||||||
|
pbox++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RegionPtr
|
RegionPtr
|
||||||
|
@ -621,12 +639,12 @@ exaPolyFillRect(DrawablePtr pDrawable,
|
||||||
|
|
||||||
pixmaps[0].as_dst = TRUE;
|
pixmaps[0].as_dst = TRUE;
|
||||||
pixmaps[0].as_src = FALSE;
|
pixmaps[0].as_src = FALSE;
|
||||||
pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
|
pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
|
||||||
|
|
||||||
if (pExaScr->swappedOut ||
|
if (pExaScr->swappedOut ||
|
||||||
pGC->fillStyle != FillSolid ||
|
pGC->fillStyle != FillSolid ||
|
||||||
pDrawable->width > pExaScr->info->maxX ||
|
pPixmap->drawable.width > pExaScr->info->maxX ||
|
||||||
pDrawable->height > pExaScr->info->maxY)
|
pPixmap->drawable.height > pExaScr->info->maxY)
|
||||||
{
|
{
|
||||||
exaDoMigration (pixmaps, 1, FALSE);
|
exaDoMigration (pixmaps, 1, FALSE);
|
||||||
ExaCheckPolyFillRect (pDrawable, pGC, nrect, prect);
|
ExaCheckPolyFillRect (pDrawable, pGC, nrect, prect);
|
||||||
|
@ -681,6 +699,8 @@ exaPolyFillRect(DrawablePtr pDrawable,
|
||||||
(*pExaScr->info->Solid) (pPixmap,
|
(*pExaScr->info->Solid) (pPixmap,
|
||||||
fullX1 + xoff, fullY1 + yoff,
|
fullX1 + xoff, fullY1 + yoff,
|
||||||
fullX2 + xoff, fullY2 + yoff);
|
fullX2 + xoff, fullY2 + yoff);
|
||||||
|
exaPixmapDirty (pPixmap, fullX1 + xoff, fullY1 + yoff,
|
||||||
|
fullX2 + xoff, fullY2 + yoff);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -706,15 +726,17 @@ exaPolyFillRect(DrawablePtr pDrawable,
|
||||||
|
|
||||||
pbox++;
|
pbox++;
|
||||||
|
|
||||||
if (partX1 < partX2 && partY1 < partY2)
|
if (partX1 < partX2 && partY1 < partY2) {
|
||||||
(*pExaScr->info->Solid) (pPixmap,
|
(*pExaScr->info->Solid) (pPixmap,
|
||||||
partX1 + xoff, partY1 + yoff,
|
partX1 + xoff, partY1 + yoff,
|
||||||
partX2 + xoff, partY2 + yoff);
|
partX2 + xoff, partY2 + yoff);
|
||||||
|
exaPixmapDirty (pPixmap, partX1 + xoff, partY1 + yoff,
|
||||||
|
partX2 + xoff, partY2 + yoff);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(*pExaScr->info->DoneSolid) (pPixmap);
|
(*pExaScr->info->DoneSolid) (pPixmap);
|
||||||
exaDrawableDirty (pDrawable);
|
|
||||||
exaMarkSync(pDrawable->pScreen);
|
exaMarkSync(pDrawable->pScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -735,14 +757,15 @@ exaSolidBoxClipped (DrawablePtr pDrawable,
|
||||||
int xoff, yoff;
|
int xoff, yoff;
|
||||||
int partX1, partX2, partY1, partY2;
|
int partX1, partX2, partY1, partY2;
|
||||||
ExaMigrationRec pixmaps[1];
|
ExaMigrationRec pixmaps[1];
|
||||||
|
Bool fallback = FALSE;
|
||||||
|
|
||||||
pixmaps[0].as_dst = TRUE;
|
pixmaps[0].as_dst = TRUE;
|
||||||
pixmaps[0].as_src = FALSE;
|
pixmaps[0].as_src = FALSE;
|
||||||
pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
|
pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
|
||||||
|
|
||||||
if (pExaScr->swappedOut ||
|
if (pExaScr->swappedOut ||
|
||||||
pDrawable->width > pExaScr->info->maxX ||
|
pPixmap->drawable.width > pExaScr->info->maxX ||
|
||||||
pDrawable->height > pExaScr->info->maxY)
|
pPixmap->drawable.height > pExaScr->info->maxY)
|
||||||
{
|
{
|
||||||
exaDoMigration (pixmaps, 1, FALSE);
|
exaDoMigration (pixmaps, 1, FALSE);
|
||||||
goto fallback;
|
goto fallback;
|
||||||
|
@ -750,19 +773,21 @@ exaSolidBoxClipped (DrawablePtr pDrawable,
|
||||||
exaDoMigration (pixmaps, 1, TRUE);
|
exaDoMigration (pixmaps, 1, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff)) ||
|
pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
|
||||||
|
|
||||||
|
if (!pPixmap ||
|
||||||
!(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg))
|
!(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg))
|
||||||
{
|
{
|
||||||
fallback:
|
fallback:
|
||||||
EXA_FALLBACK(("to %p (%c)\n", pDrawable,
|
EXA_FALLBACK(("to %p (%c)\n", pDrawable,
|
||||||
exaDrawableLocation(pDrawable)));
|
exaDrawableLocation(pDrawable)));
|
||||||
|
fallback = TRUE;
|
||||||
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
|
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
|
||||||
fg = fbReplicatePixel (fg, pDrawable->bitsPerPixel);
|
fg = fbReplicatePixel (fg, pDrawable->bitsPerPixel);
|
||||||
fbSolidBoxClipped (pDrawable, pClip, x1, y1, x2, y2,
|
fbSolidBoxClipped (pDrawable, pClip, x1, y1, x2, y2,
|
||||||
fbAnd (GXcopy, fg, pm),
|
fbAnd (GXcopy, fg, pm),
|
||||||
fbXor (GXcopy, fg, pm));
|
fbXor (GXcopy, fg, pm));
|
||||||
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
|
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
for (nbox = REGION_NUM_RECTS(pClip), pbox = REGION_RECTS(pClip);
|
for (nbox = REGION_NUM_RECTS(pClip), pbox = REGION_RECTS(pClip);
|
||||||
nbox--;
|
nbox--;
|
||||||
|
@ -790,12 +815,20 @@ fallback:
|
||||||
if (partY2 <= partY1)
|
if (partY2 <= partY1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
(*pExaScr->info->Solid) (pPixmap,
|
if (!fallback) {
|
||||||
partX1 + xoff, partY1 + yoff,
|
(*pExaScr->info->Solid) (pPixmap,
|
||||||
partX2 + xoff, partY2 + yoff);
|
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);
|
(*pExaScr->info->DoneSolid) (pPixmap);
|
||||||
exaDrawableDirty (pDrawable);
|
|
||||||
exaMarkSync(pDrawable->pScreen);
|
exaMarkSync(pDrawable->pScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -908,12 +941,17 @@ exaImageGlyphBlt (DrawablePtr pDrawable,
|
||||||
pPriv->fg,
|
pPriv->fg,
|
||||||
gx + dstXoff,
|
gx + dstXoff,
|
||||||
gHeight);
|
gHeight);
|
||||||
|
exaDrawableDirty (pDrawable, gx, gy, gx + gWidth, gy + gHeight);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
RegionPtr pClip = fbGetCompositeClip(pGC);
|
||||||
|
int nbox;
|
||||||
|
BoxPtr pbox;
|
||||||
|
|
||||||
gStride = GLYPHWIDTHBYTESPADDED(pci) / sizeof (FbStip);
|
gStride = GLYPHWIDTHBYTESPADDED(pci) / sizeof (FbStip);
|
||||||
fbPutXYImage (pDrawable,
|
fbPutXYImage (pDrawable,
|
||||||
fbGetCompositeClip(pGC),
|
pClip,
|
||||||
pPriv->fg,
|
pPriv->fg,
|
||||||
pPriv->bg,
|
pPriv->bg,
|
||||||
pPriv->pm,
|
pPriv->pm,
|
||||||
|
@ -927,6 +965,18 @@ exaImageGlyphBlt (DrawablePtr pDrawable,
|
||||||
(FbStip *) pglyph,
|
(FbStip *) pglyph,
|
||||||
gStride,
|
gStride,
|
||||||
0);
|
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;
|
x += pci->metrics.characterWidth;
|
||||||
|
@ -994,13 +1044,15 @@ exaFillRegionSolid (DrawablePtr pDrawable,
|
||||||
PixmapPtr pPixmap;
|
PixmapPtr pPixmap;
|
||||||
int xoff, yoff;
|
int xoff, yoff;
|
||||||
ExaMigrationRec pixmaps[1];
|
ExaMigrationRec pixmaps[1];
|
||||||
|
int nbox = REGION_NUM_RECTS (pRegion);
|
||||||
|
BoxPtr pBox = REGION_RECTS (pRegion);
|
||||||
|
|
||||||
pixmaps[0].as_dst = TRUE;
|
pixmaps[0].as_dst = TRUE;
|
||||||
pixmaps[0].as_src = FALSE;
|
pixmaps[0].as_src = FALSE;
|
||||||
pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
|
pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
|
||||||
|
|
||||||
if (pDrawable->width > pExaScr->info->maxX ||
|
if (pPixmap->drawable.width > pExaScr->info->maxX ||
|
||||||
pDrawable->height > pExaScr->info->maxY)
|
pPixmap->drawable.height > pExaScr->info->maxY)
|
||||||
{
|
{
|
||||||
exaDoMigration (pixmaps, 1, FALSE);
|
exaDoMigration (pixmaps, 1, FALSE);
|
||||||
goto fallback;
|
goto fallback;
|
||||||
|
@ -1011,19 +1063,17 @@ exaFillRegionSolid (DrawablePtr pDrawable,
|
||||||
if ((pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff)) &&
|
if ((pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff)) &&
|
||||||
(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, FB_ALLONES, pixel))
|
(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, FB_ALLONES, pixel))
|
||||||
{
|
{
|
||||||
int nbox = REGION_NUM_RECTS (pRegion);
|
|
||||||
BoxPtr pBox = REGION_RECTS (pRegion);
|
|
||||||
|
|
||||||
while (nbox--)
|
while (nbox--)
|
||||||
{
|
{
|
||||||
(*pExaScr->info->Solid) (pPixmap,
|
(*pExaScr->info->Solid) (pPixmap,
|
||||||
pBox->x1 + xoff, pBox->y1 + yoff,
|
pBox->x1 + xoff, pBox->y1 + yoff,
|
||||||
pBox->x2 + xoff, pBox->y2 + yoff);
|
pBox->x2 + xoff, pBox->y2 + yoff);
|
||||||
|
exaPixmapDirty (pPixmap, pBox->x1 + xoff, pBox->y1 + yoff,
|
||||||
|
pBox->x2 + xoff, pBox->y2 + yoff);
|
||||||
pBox++;
|
pBox++;
|
||||||
}
|
}
|
||||||
(*pExaScr->info->DoneSolid) (pPixmap);
|
(*pExaScr->info->DoneSolid) (pPixmap);
|
||||||
exaMarkSync(pDrawable->pScreen);
|
exaMarkSync(pDrawable->pScreen);
|
||||||
exaDrawableDirty (pDrawable);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1034,6 +1084,11 @@ fallback:
|
||||||
fbFillRegionSolid (pDrawable, pRegion, 0,
|
fbFillRegionSolid (pDrawable, pRegion, 0,
|
||||||
fbReplicatePixel (pixel, pDrawable->bitsPerPixel));
|
fbReplicatePixel (pixel, pDrawable->bitsPerPixel));
|
||||||
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
|
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
|
||||||
|
while (nbox--)
|
||||||
|
{
|
||||||
|
exaDrawableDirty (pDrawable, pBox->x1, pBox->y1, pBox->x2, pBox->y2);
|
||||||
|
pBox++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1047,9 +1102,11 @@ exaFillRegionTiled (DrawablePtr pDrawable,
|
||||||
{
|
{
|
||||||
ExaScreenPriv(pDrawable->pScreen);
|
ExaScreenPriv(pDrawable->pScreen);
|
||||||
PixmapPtr pPixmap;
|
PixmapPtr pPixmap;
|
||||||
int xoff, yoff;
|
int xoff, yoff, tileXoff, tileYoff;
|
||||||
int tileWidth, tileHeight;
|
int tileWidth, tileHeight;
|
||||||
ExaMigrationRec pixmaps[2];
|
ExaMigrationRec pixmaps[2];
|
||||||
|
int nbox = REGION_NUM_RECTS (pRegion);
|
||||||
|
BoxPtr pBox = REGION_RECTS (pRegion);
|
||||||
|
|
||||||
tileWidth = pTile->drawable.width;
|
tileWidth = pTile->drawable.width;
|
||||||
tileHeight = pTile->drawable.height;
|
tileHeight = pTile->drawable.height;
|
||||||
|
@ -1064,13 +1121,13 @@ exaFillRegionTiled (DrawablePtr pDrawable,
|
||||||
|
|
||||||
pixmaps[0].as_dst = TRUE;
|
pixmaps[0].as_dst = TRUE;
|
||||||
pixmaps[0].as_src = FALSE;
|
pixmaps[0].as_src = FALSE;
|
||||||
pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
|
pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
|
||||||
pixmaps[1].as_dst = FALSE;
|
pixmaps[1].as_dst = FALSE;
|
||||||
pixmaps[1].as_src = TRUE;
|
pixmaps[1].as_src = TRUE;
|
||||||
pixmaps[1].pPix = pTile;
|
pixmaps[1].pPix = pTile;
|
||||||
|
|
||||||
if (pDrawable->width > pExaScr->info->maxX ||
|
if (pPixmap->drawable.width > pExaScr->info->maxX ||
|
||||||
pDrawable->height > pExaScr->info->maxY ||
|
pPixmap->drawable.height > pExaScr->info->maxY ||
|
||||||
tileWidth > pExaScr->info->maxX ||
|
tileWidth > pExaScr->info->maxX ||
|
||||||
tileHeight > pExaScr->info->maxY)
|
tileHeight > pExaScr->info->maxY)
|
||||||
{
|
{
|
||||||
|
@ -1081,18 +1138,16 @@ exaFillRegionTiled (DrawablePtr pDrawable,
|
||||||
}
|
}
|
||||||
|
|
||||||
pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
|
pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
|
||||||
|
|
||||||
if (!pPixmap)
|
if (!pPixmap)
|
||||||
goto fallback;
|
goto fallback;
|
||||||
|
|
||||||
if (!exaPixmapIsOffscreen(pTile))
|
if (!exaPixmapIsOffscreen(pTile))
|
||||||
goto fallback;
|
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))
|
FB_ALLONES))
|
||||||
{
|
{
|
||||||
int nbox = REGION_NUM_RECTS (pRegion);
|
|
||||||
BoxPtr pBox = REGION_RECTS (pRegion);
|
|
||||||
|
|
||||||
while (nbox--)
|
while (nbox--)
|
||||||
{
|
{
|
||||||
int height = pBox->y2 - pBox->y1;
|
int height = pBox->y2 - pBox->y1;
|
||||||
|
@ -1118,7 +1173,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
|
||||||
width -= w;
|
width -= w;
|
||||||
|
|
||||||
(*pExaScr->info->Copy) (pPixmap,
|
(*pExaScr->info->Copy) (pPixmap,
|
||||||
tileX, tileY,
|
tileX + tileXoff, tileY + tileYoff,
|
||||||
dstX + xoff, dstY + yoff,
|
dstX + xoff, dstY + yoff,
|
||||||
w, h);
|
w, h);
|
||||||
dstX += w;
|
dstX += w;
|
||||||
|
@ -1127,11 +1182,12 @@ exaFillRegionTiled (DrawablePtr pDrawable,
|
||||||
dstY += h;
|
dstY += h;
|
||||||
tileY = 0;
|
tileY = 0;
|
||||||
}
|
}
|
||||||
|
exaPixmapDirty (pPixmap, pBox->x1 + xoff, pBox->y1 + yoff,
|
||||||
|
pBox->x2 + xoff, pBox->y2 + yoff);
|
||||||
pBox++;
|
pBox++;
|
||||||
}
|
}
|
||||||
(*pExaScr->info->DoneCopy) (pPixmap);
|
(*pExaScr->info->DoneCopy) (pPixmap);
|
||||||
exaMarkSync(pDrawable->pScreen);
|
exaMarkSync(pDrawable->pScreen);
|
||||||
exaDrawableDirty (pDrawable);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1144,6 +1200,11 @@ fallback:
|
||||||
fbFillRegionTiled (pDrawable, pRegion, pTile);
|
fbFillRegionTiled (pDrawable, pRegion, pTile);
|
||||||
exaFinishAccess ((DrawablePtr)pTile, EXA_PREPARE_SRC);
|
exaFinishAccess ((DrawablePtr)pTile, EXA_PREPARE_SRC);
|
||||||
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
|
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
|
||||||
|
while (nbox--)
|
||||||
|
{
|
||||||
|
exaDrawableDirty (pDrawable, pBox->x1, pBox->y1, pBox->x2, pBox->y2);
|
||||||
|
pBox++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* Eric Anholt <eric@anholt.net>
|
* 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;
|
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
|
* Returns TRUE if the pixmap is dirty (has been modified in its current
|
||||||
* location compared to the other), or lacks a private for tracking
|
* location compared to the other), or lacks a private for tracking
|
||||||
|
@ -67,7 +89,8 @@ exaPixmapIsDirty (PixmapPtr pPix)
|
||||||
{
|
{
|
||||||
ExaPixmapPriv (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);
|
ExaScreenPriv (pPixmap->drawable.pScreen);
|
||||||
ExaPixmapPriv (pPixmap);
|
ExaPixmapPriv (pPixmap);
|
||||||
|
RegionPtr pRegion = DamageRegion (pExaPixmap->pDamage);
|
||||||
CARD8 *save_ptr;
|
CARD8 *save_ptr;
|
||||||
int save_pitch;
|
int save_pitch;
|
||||||
|
BoxPtr pBox = REGION_RECTS(pRegion);
|
||||||
if (!pExaPixmap->dirty)
|
int nbox = REGION_NUM_RECTS(pRegion);
|
||||||
return;
|
Bool do_sync = FALSE;
|
||||||
|
|
||||||
save_ptr = pPixmap->devPrivate.ptr;
|
save_ptr = pPixmap->devPrivate.ptr;
|
||||||
save_pitch = pPixmap->devKind;
|
save_pitch = pPixmap->devKind;
|
||||||
pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
|
pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
|
||||||
pPixmap->devKind = pExaPixmap->fb_pitch;
|
pPixmap->devKind = pExaPixmap->fb_pitch;
|
||||||
|
|
||||||
if (pExaScr->info->DownloadFromScreen == NULL ||
|
while (nbox--) {
|
||||||
!pExaScr->info->DownloadFromScreen (pPixmap,
|
pBox->x1 = max(pBox->x1, 0);
|
||||||
0,
|
pBox->y1 = max(pBox->y1, 0);
|
||||||
0,
|
pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
|
||||||
pPixmap->drawable.width,
|
pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
|
||||||
pPixmap->drawable.height,
|
|
||||||
pExaPixmap->sys_ptr,
|
|
||||||
pExaPixmap->sys_pitch))
|
|
||||||
{
|
|
||||||
char *src, *dst;
|
|
||||||
int src_pitch, dst_pitch, i, bytes;
|
|
||||||
|
|
||||||
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
|
if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
|
||||||
|
continue;
|
||||||
|
|
||||||
dst = pExaPixmap->sys_ptr;
|
if (pExaScr->info->DownloadFromScreen == NULL ||
|
||||||
dst_pitch = pExaPixmap->sys_pitch;
|
!pExaScr->info->DownloadFromScreen (pPixmap,
|
||||||
src = pExaPixmap->fb_ptr;
|
pBox->x1, pBox->y1,
|
||||||
src_pitch = pExaPixmap->fb_pitch;
|
pBox->x2 - pBox->x1,
|
||||||
bytes = src_pitch < dst_pitch ? src_pitch : dst_pitch;
|
pBox->y2 - pBox->y1,
|
||||||
|
pExaPixmap->sys_ptr
|
||||||
for (i = 0; i < pPixmap->drawable.height; i++) {
|
+ pBox->y1 * pExaPixmap->sys_pitch
|
||||||
memcpy (dst, src, bytes);
|
+ pBox->x1 * pPixmap->drawable.bitsPerPixel / 8,
|
||||||
dst += dst_pitch;
|
pExaPixmap->sys_pitch))
|
||||||
src += src_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
|
/* Make sure the bits have actually landed, since we don't necessarily sync
|
||||||
* when accessing pixmaps in system memory.
|
* when accessing pixmaps in system memory.
|
||||||
*/
|
*/
|
||||||
exaWaitSync (pPixmap->drawable.pScreen);
|
if (do_sync)
|
||||||
|
exaWaitSync (pPixmap->drawable.pScreen);
|
||||||
|
|
||||||
pPixmap->devPrivate.ptr = save_ptr;
|
pPixmap->devPrivate.ptr = save_ptr;
|
||||||
pPixmap->devKind = save_pitch;
|
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);
|
ExaScreenPriv (pPixmap->drawable.pScreen);
|
||||||
ExaPixmapPriv (pPixmap);
|
ExaPixmapPriv (pPixmap);
|
||||||
|
RegionPtr pRegion = DamageRegion (pExaPixmap->pDamage);
|
||||||
CARD8 *save_ptr;
|
CARD8 *save_ptr;
|
||||||
int save_pitch;
|
int save_pitch;
|
||||||
|
BoxPtr pBox = REGION_RECTS(pRegion);
|
||||||
if (!pExaPixmap->dirty)
|
int nbox = REGION_NUM_RECTS(pRegion);
|
||||||
return;
|
Bool do_sync = FALSE;
|
||||||
|
|
||||||
save_ptr = pPixmap->devPrivate.ptr;
|
save_ptr = pPixmap->devPrivate.ptr;
|
||||||
save_pitch = pPixmap->devKind;
|
save_pitch = pPixmap->devKind;
|
||||||
pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
|
pPixmap->devPrivate.ptr = pExaPixmap->fb_ptr;
|
||||||
pPixmap->devKind = pExaPixmap->fb_pitch;
|
pPixmap->devKind = pExaPixmap->fb_pitch;
|
||||||
|
|
||||||
if (pExaScr->info->UploadToScreen == NULL ||
|
while (nbox--) {
|
||||||
!pExaScr->info->UploadToScreen (pPixmap,
|
pBox->x1 = max(pBox->x1, 0);
|
||||||
0,
|
pBox->y1 = max(pBox->y1, 0);
|
||||||
0,
|
pBox->x2 = min(pBox->x2, pPixmap->drawable.width);
|
||||||
pPixmap->drawable.width,
|
pBox->y2 = min(pBox->y2, pPixmap->drawable.height);
|
||||||
pPixmap->drawable.height,
|
|
||||||
pExaPixmap->sys_ptr,
|
|
||||||
pExaPixmap->sys_pitch))
|
|
||||||
{
|
|
||||||
char *src, *dst;
|
|
||||||
int src_pitch, dst_pitch, i, bytes;
|
|
||||||
|
|
||||||
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_DEST);
|
if (pBox->x1 >= pBox->x2 || pBox->y1 >= pBox->y2)
|
||||||
|
continue;
|
||||||
|
|
||||||
dst = pExaPixmap->fb_ptr;
|
if (pExaScr->info->UploadToScreen == NULL ||
|
||||||
dst_pitch = pExaPixmap->fb_pitch;
|
!pExaScr->info->UploadToScreen (pPixmap,
|
||||||
src = pExaPixmap->sys_ptr;
|
pBox->x1, pBox->y1,
|
||||||
src_pitch = pExaPixmap->sys_pitch;
|
pBox->x2 - pBox->x1,
|
||||||
bytes = src_pitch < dst_pitch ? src_pitch : dst_pitch;
|
pBox->y2 - pBox->y1,
|
||||||
|
pExaPixmap->sys_ptr
|
||||||
for (i = 0; i < pPixmap->drawable.height; i++) {
|
+ pBox->y1 * pExaPixmap->sys_pitch
|
||||||
memcpy (dst, src, bytes);
|
+ pBox->x1 * pPixmap->drawable.bitsPerPixel / 8,
|
||||||
dst += dst_pitch;
|
pExaPixmap->sys_pitch))
|
||||||
src += src_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->devPrivate.ptr = save_ptr;
|
||||||
pPixmap->devKind = save_pitch;
|
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
|
* Called when the memory manager decides it's time to kick the pixmap out of
|
||||||
* framebuffer entirely.
|
* framebuffer entirely.
|
||||||
*/
|
*/
|
||||||
static void
|
void
|
||||||
exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area)
|
exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area)
|
||||||
{
|
{
|
||||||
PixmapPtr pPixmap = area->privData;
|
PixmapPtr pPixmap = area->privData;
|
||||||
ExaPixmapPriv(pPixmap);
|
ExaPixmapPriv(pPixmap);
|
||||||
|
RegionPtr pDamageReg = DamageRegion(pExaPixmap->pDamage);
|
||||||
|
|
||||||
DBG_MIGRATE (("Save %p (%p) (%dx%d) (%c)\n", pPixmap,
|
DBG_MIGRATE (("Save %p (%p) (%dx%d) (%c)\n", pPixmap,
|
||||||
(void*)(ExaGetPixmapPriv(pPixmap)->area ?
|
(void*)(ExaGetPixmapPriv(pPixmap)->area ?
|
||||||
|
@ -231,10 +273,9 @@ exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area)
|
||||||
pExaPixmap->fb_ptr = NULL;
|
pExaPixmap->fb_ptr = NULL;
|
||||||
pExaPixmap->area = NULL;
|
pExaPixmap->area = NULL;
|
||||||
|
|
||||||
/* Mark it dirty now, to say that there is important data in the
|
/* Mark all valid bits as damaged, so they'll get copied to FB next time */
|
||||||
* system-memory copy.
|
REGION_UNION(pPixmap->drawable.pScreen, pDamageReg, pDamageReg,
|
||||||
*/
|
&pExaPixmap->validReg);
|
||||||
pExaPixmap->dirty = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -413,32 +454,57 @@ exaMigrateTowardSys (PixmapPtr pPixmap)
|
||||||
* If the pixmap has both a framebuffer and system memory copy, this function
|
* If the pixmap has both a framebuffer and system memory copy, this function
|
||||||
* asserts that both of them are the same.
|
* asserts that both of them are the same.
|
||||||
*/
|
*/
|
||||||
static void
|
static Bool
|
||||||
exaAssertNotDirty (PixmapPtr pPixmap)
|
exaAssertNotDirty (PixmapPtr pPixmap)
|
||||||
{
|
{
|
||||||
ExaPixmapPriv (pPixmap);
|
ExaPixmapPriv (pPixmap);
|
||||||
CARD8 *dst, *src;
|
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)
|
if (pExaPixmap == NULL || pExaPixmap->fb_ptr == NULL)
|
||||||
return;
|
return ret;
|
||||||
|
|
||||||
dst = pExaPixmap->sys_ptr;
|
dst = pExaPixmap->sys_ptr;
|
||||||
dst_pitch = pExaPixmap->sys_pitch;
|
dst_pitch = pExaPixmap->sys_pitch;
|
||||||
src = pExaPixmap->fb_ptr;
|
src = pExaPixmap->fb_ptr;
|
||||||
src_pitch = pExaPixmap->fb_pitch;
|
src_pitch = pExaPixmap->fb_pitch;
|
||||||
data_row_bytes = pPixmap->drawable.width *
|
cpp = pPixmap->drawable.bitsPerPixel / 8;
|
||||||
pPixmap->drawable.bitsPerPixel / 8;
|
|
||||||
|
|
||||||
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
|
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
|
||||||
for (y = 0; y < pPixmap->drawable.height; y++) {
|
while (nbox--) {
|
||||||
if (memcmp(dst, src, data_row_bytes) != 0) {
|
int rowbytes;
|
||||||
abort();
|
|
||||||
}
|
pBox->x1 = max(pBox->x1, 0);
|
||||||
dst += dst_pitch;
|
pBox->y1 = max(pBox->y1, 0);
|
||||||
src += src_pitch;
|
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);
|
exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -462,8 +528,9 @@ exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel)
|
||||||
*/
|
*/
|
||||||
if (pExaScr->checkDirtyCorrectness) {
|
if (pExaScr->checkDirtyCorrectness) {
|
||||||
for (i = 0; i < npixmaps; i++) {
|
for (i = 0; i < npixmaps; i++) {
|
||||||
if (!exaPixmapIsDirty (pixmaps[i].pPix))
|
if (!exaPixmapIsDirty (pixmaps[i].pPix) &&
|
||||||
exaAssertNotDirty (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
|
/* If anything is pinned in system memory, we won't be able to
|
||||||
|
|
|
@ -81,15 +81,14 @@ ExaOffscreenKickOut (ScreenPtr pScreen, ExaOffscreenArea *area)
|
||||||
* @param save callback for when the area is evicted from memory
|
* @param save callback for when the area is evicted from memory
|
||||||
* @param privdata private data for the save callback.
|
* @param privdata private data for the save callback.
|
||||||
*
|
*
|
||||||
* Allocates offscreen memory from the device associated with pScreen. size and
|
* Allocates offscreen memory from the device associated with pScreen. size
|
||||||
* align deteremine where and how large the allocated area is, and locked will
|
* and align deteremine where and how large the allocated area is, and locked
|
||||||
* mark whether it should be held in card memory. privdata may be any pointer
|
* will mark whether it should be held in card memory. privdata may be any
|
||||||
* for the save callback when the area is removed.
|
* pointer for the save callback when the area is removed.
|
||||||
*
|
*
|
||||||
* Note that locked areas do get evicted on VT switch, because during that time
|
* Note that locked areas do get evicted on VT switch unless the driver
|
||||||
* all offscreen memory becomes inaccessible. This may change in the future,
|
* requested version 2.1 or newer behavior. In that case, the save callback is
|
||||||
* but drivers should be aware of this and provide a callback to mark that their
|
* still called.
|
||||||
* locked allocation was evicted, and then restore it if necessary on EnterVT.
|
|
||||||
*/
|
*/
|
||||||
ExaOffscreenArea *
|
ExaOffscreenArea *
|
||||||
exaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
|
exaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
|
||||||
|
@ -256,6 +255,9 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
|
||||||
return area;
|
return area;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ejects all offscreen areas, and uninitializes the offscreen memory manager.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
ExaOffscreenSwapOut (ScreenPtr pScreen)
|
ExaOffscreenSwapOut (ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
|
@ -283,12 +285,56 @@ ExaOffscreenSwapOut (ScreenPtr pScreen)
|
||||||
ExaOffscreenFini (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
|
void
|
||||||
ExaOffscreenSwapIn (ScreenPtr pScreen)
|
ExaOffscreenSwapIn (ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
exaOffscreenInit (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
|
void
|
||||||
exaEnableDisableFBAccess (int index, Bool enable)
|
exaEnableDisableFBAccess (int index, Bool enable)
|
||||||
{
|
{
|
||||||
|
@ -296,10 +342,14 @@ exaEnableDisableFBAccess (int index, Bool enable)
|
||||||
ExaScreenPriv (pScreen);
|
ExaScreenPriv (pScreen);
|
||||||
|
|
||||||
if (!enable) {
|
if (!enable) {
|
||||||
ExaOffscreenSwapOut (pScreen);
|
if (pExaScr->info->exa_minor < 1)
|
||||||
|
ExaOffscreenSwapOut (pScreen);
|
||||||
|
else
|
||||||
|
ExaOffscreenEjectPixmaps (pScreen);
|
||||||
pExaScr->swappedOut = TRUE;
|
pExaScr->swappedOut = TRUE;
|
||||||
} else {
|
} else {
|
||||||
ExaOffscreenSwapIn (pScreen);
|
if (pExaScr->info->exa_minor < 1)
|
||||||
|
ExaOffscreenSwapIn (pScreen);
|
||||||
pExaScr->swappedOut = FALSE;
|
pExaScr->swappedOut = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -390,6 +440,7 @@ ExaOffscreenMarkUsed (PixmapPtr pPixmap)
|
||||||
if (area->state == ExaOffscreenRemovable)
|
if (area->state == ExaOffscreenRemovable)
|
||||||
area->score = (area->score * 7) / 8;
|
area->score = (area->score * 7) / 8;
|
||||||
}
|
}
|
||||||
|
iter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@
|
||||||
#ifdef RENDER
|
#ifdef RENDER
|
||||||
#include "fbpict.h"
|
#include "fbpict.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "damage.h"
|
||||||
|
|
||||||
#define DEBUG_TRACE_FALL 0
|
#define DEBUG_TRACE_FALL 0
|
||||||
#define DEBUG_MIGRATE 0
|
#define DEBUG_MIGRATE 0
|
||||||
|
@ -160,16 +161,16 @@ typedef struct {
|
||||||
unsigned int fb_size; /**< size of pixmap in framebuffer memory */
|
unsigned int fb_size; /**< size of pixmap in framebuffer memory */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If area is NULL, then dirty == TRUE means that the pixmap has been
|
* The damage record contains the areas of the pixmap's current location
|
||||||
* modified, so the contents are defined. Used to avoid uploads of
|
* (framebuffer or system) that have been damaged compared to the other
|
||||||
* undefined data.
|
* location.
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*/
|
*/
|
||||||
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;
|
} ExaPixmapPrivRec, *ExaPixmapPrivPtr;
|
||||||
|
|
||||||
typedef struct _ExaMigrationRec {
|
typedef struct _ExaMigrationRec {
|
||||||
|
@ -315,7 +316,7 @@ ExaCheckComposite (CARD8 op,
|
||||||
CARD16 height);
|
CARD16 height);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* exaoffscreen.c */
|
/* exa_offscreen.c */
|
||||||
void
|
void
|
||||||
ExaOffscreenMarkUsed (PixmapPtr pPixmap);
|
ExaOffscreenMarkUsed (PixmapPtr pPixmap);
|
||||||
|
|
||||||
|
@ -339,7 +340,10 @@ void
|
||||||
exaFinishAccess(DrawablePtr pDrawable, int index);
|
exaFinishAccess(DrawablePtr pDrawable, int index);
|
||||||
|
|
||||||
void
|
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
|
Bool
|
||||||
exaDrawableIsOffscreen (DrawablePtr pDrawable);
|
exaDrawableIsOffscreen (DrawablePtr pDrawable);
|
||||||
|
@ -409,9 +413,6 @@ void
|
||||||
exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
|
exaDoMigration (ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel);
|
||||||
|
|
||||||
void
|
void
|
||||||
exaMoveInPixmap (PixmapPtr pPixmap);
|
exaPixmapSave (ScreenPtr pScreen, ExaOffscreenArea *area);
|
||||||
|
|
||||||
void
|
|
||||||
exaMoveOutPixmap (PixmapPtr pPixmap);
|
|
||||||
|
|
||||||
#endif /* EXAPRIV_H */
|
#endif /* EXAPRIV_H */
|
||||||
|
|
|
@ -302,12 +302,12 @@ exaTryDriverSolidFill(PicturePtr pSrc,
|
||||||
(*pExaScr->info->Solid) (pDstPix,
|
(*pExaScr->info->Solid) (pDstPix,
|
||||||
pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
|
pbox->x1 + dst_off_x, pbox->y1 + dst_off_y,
|
||||||
pbox->x2 + dst_off_x, pbox->y2 + 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++;
|
pbox++;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*pExaScr->info->DoneSolid) (pDstPix);
|
(*pExaScr->info->DoneSolid) (pDstPix);
|
||||||
exaMarkSync(pDst->pDrawable->pScreen);
|
exaMarkSync(pDst->pDrawable->pScreen);
|
||||||
exaDrawableDirty (pDst->pDrawable);
|
|
||||||
|
|
||||||
REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
|
REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -336,16 +336,21 @@ exaTryDriverComposite(CARD8 op,
|
||||||
struct _Pixmap scratch;
|
struct _Pixmap scratch;
|
||||||
ExaMigrationRec pixmaps[3];
|
ExaMigrationRec pixmaps[3];
|
||||||
|
|
||||||
|
pSrcPix = exaGetDrawablePixmap(pSrc->pDrawable);
|
||||||
|
pDstPix = exaGetDrawablePixmap(pDst->pDrawable);
|
||||||
|
if (pMask)
|
||||||
|
pMaskPix = exaGetDrawablePixmap(pMask->pDrawable);
|
||||||
|
|
||||||
/* Bail if we might exceed coord limits by rendering from/to these. We
|
/* Bail if we might exceed coord limits by rendering from/to these. We
|
||||||
* should really be making some scratch pixmaps with offsets and coords
|
* should really be making some scratch pixmaps with offsets and coords
|
||||||
* adjusted to deal with this, but it hasn't been done yet.
|
* adjusted to deal with this, but it hasn't been done yet.
|
||||||
*/
|
*/
|
||||||
if (pSrc->pDrawable->width > pExaScr->info->maxX ||
|
if (pSrcPix->drawable.width > pExaScr->info->maxX ||
|
||||||
pSrc->pDrawable->height > pExaScr->info->maxY ||
|
pSrcPix->drawable.height > pExaScr->info->maxY ||
|
||||||
pDst->pDrawable->width > pExaScr->info->maxX ||
|
pDstPix->drawable.width > pExaScr->info->maxX ||
|
||||||
pDst->pDrawable->height > pExaScr->info->maxY ||
|
pDstPix->drawable.height > pExaScr->info->maxY ||
|
||||||
(pMask && (pMask->pDrawable->width > pExaScr->info->maxX ||
|
(pMask && (pMaskPix->drawable.width > pExaScr->info->maxX ||
|
||||||
pMask->pDrawable->height > pExaScr->info->maxY)))
|
pMaskPix->drawable.height > pExaScr->info->maxY)))
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -441,12 +446,12 @@ exaTryDriverComposite(CARD8 op,
|
||||||
pbox->y1 + dst_off_y,
|
pbox->y1 + dst_off_y,
|
||||||
pbox->x2 - pbox->x1,
|
pbox->x2 - pbox->x1,
|
||||||
pbox->y2 - pbox->y1);
|
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++;
|
pbox++;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*pExaScr->info->DoneComposite) (pDstPix);
|
(*pExaScr->info->DoneComposite) (pDstPix);
|
||||||
exaMarkSync(pDst->pDrawable->pScreen);
|
exaMarkSync(pDst->pDrawable->pScreen);
|
||||||
exaDrawableDirty (pDst->pDrawable);
|
|
||||||
|
|
||||||
REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
|
REGION_UNINIT(pDst->pDrawable->pScreen, ®ion);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -705,16 +710,19 @@ void
|
||||||
exaRasterizeTrapezoid (PicturePtr pPicture, xTrapezoid *trap,
|
exaRasterizeTrapezoid (PicturePtr pPicture, xTrapezoid *trap,
|
||||||
int x_off, int y_off)
|
int x_off, int y_off)
|
||||||
{
|
{
|
||||||
|
DrawablePtr pDraw = pPicture->pDrawable;
|
||||||
ExaMigrationRec pixmaps[1];
|
ExaMigrationRec pixmaps[1];
|
||||||
|
|
||||||
pixmaps[0].as_dst = TRUE;
|
pixmaps[0].as_dst = TRUE;
|
||||||
pixmaps[0].as_src = TRUE;
|
pixmaps[0].as_src = TRUE;
|
||||||
pixmaps[0].pPix = exaGetDrawablePixmap (pPicture->pDrawable);
|
pixmaps[0].pPix = exaGetDrawablePixmap (pDraw);
|
||||||
exaDoMigration(pixmaps, 1, FALSE);
|
exaDoMigration(pixmaps, 1, FALSE);
|
||||||
|
|
||||||
exaPrepareAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
|
exaPrepareAccess(pDraw, EXA_PREPARE_DEST);
|
||||||
fbRasterizeTrapezoid(pPicture, trap, x_off, y_off);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -725,16 +733,19 @@ void
|
||||||
exaAddTriangles (PicturePtr pPicture, INT16 x_off, INT16 y_off, int ntri,
|
exaAddTriangles (PicturePtr pPicture, INT16 x_off, INT16 y_off, int ntri,
|
||||||
xTriangle *tris)
|
xTriangle *tris)
|
||||||
{
|
{
|
||||||
|
DrawablePtr pDraw = pPicture->pDrawable;
|
||||||
ExaMigrationRec pixmaps[1];
|
ExaMigrationRec pixmaps[1];
|
||||||
|
|
||||||
pixmaps[0].as_dst = TRUE;
|
pixmaps[0].as_dst = TRUE;
|
||||||
pixmaps[0].as_src = TRUE;
|
pixmaps[0].as_src = TRUE;
|
||||||
pixmaps[0].pPix = exaGetDrawablePixmap (pPicture->pDrawable);
|
pixmaps[0].pPix = exaGetDrawablePixmap (pDraw);
|
||||||
exaDoMigration(pixmaps, 1, FALSE);
|
exaDoMigration(pixmaps, 1, FALSE);
|
||||||
|
|
||||||
exaPrepareAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
|
exaPrepareAccess(pDraw, EXA_PREPARE_DEST);
|
||||||
fbAddTriangles(pPicture, x_off, y_off, ntri, tris);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1023,10 +1034,11 @@ exaGlyphs (CARD8 op,
|
||||||
|
|
||||||
exaCopyArea (&pScratchPixmap->drawable, &pPixmap->drawable, pGC,
|
exaCopyArea (&pScratchPixmap->drawable, &pPixmap->drawable, pGC,
|
||||||
0, 0, glyph->info.width, glyph->info.height, 0, 0);
|
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)
|
if (maskFormat)
|
||||||
{
|
{
|
||||||
exaComposite (PictOpAdd, pPicture, NULL, pMask, 0, 0, 0, 0,
|
exaComposite (PictOpAdd, pPicture, NULL, pMask, 0, 0, 0, 0,
|
||||||
|
|
|
@ -200,11 +200,33 @@ ExaCheckPolyFillRect (DrawablePtr pDrawable, GCPtr pGC,
|
||||||
int nrect, xRectangle *prect)
|
int nrect, xRectangle *prect)
|
||||||
{
|
{
|
||||||
EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
|
EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
|
||||||
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
|
|
||||||
exaPrepareAccessGC (pGC);
|
if (nrect) {
|
||||||
fbPolyFillRect (pDrawable, pGC, nrect, prect);
|
int x1 = max(prect->x, 0), y1 = max(prect->y, 0);
|
||||||
exaFinishAccessGC (pGC);
|
int x2 = min(prect->x + prect->width, pDrawable->width);
|
||||||
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
|
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
|
void
|
||||||
|
|
|
@ -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) { \
|
#define fbComposeGetSolid(pict, bits, fmt) { \
|
||||||
FbBits *__bits__; \
|
FbBits *__bits__; \
|
||||||
FbStride __stride__; \
|
FbStride __stride__; \
|
||||||
|
|
|
@ -84,7 +84,7 @@ typedef enum {
|
||||||
* mask is 0xFFFF0000.
|
* mask is 0xFFFF0000.
|
||||||
*/
|
*/
|
||||||
#define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 3)
|
#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_XINPUT_VERSION SET_ABI_VERSION(1, 0)
|
||||||
#define ABI_EXTENSION_VERSION SET_ABI_VERSION(0, 3)
|
#define ABI_EXTENSION_VERSION SET_ABI_VERSION(0, 3)
|
||||||
#define ABI_FONT_VERSION SET_ABI_VERSION(0, 5)
|
#define ABI_FONT_VERSION SET_ABI_VERSION(0, 5)
|
||||||
|
|
|
@ -368,10 +368,8 @@ AllocateArea(
|
||||||
/* look through the free boxes */
|
/* look through the free boxes */
|
||||||
for(i = 0; i < num; i++, boxp++) {
|
for(i = 0; i < num; i++, boxp++) {
|
||||||
x = boxp->x1;
|
x = boxp->x1;
|
||||||
if(granularity) {
|
if (granularity > 1)
|
||||||
int tmp = x % granularity;
|
x = ((x + granularity - 1) / granularity) * granularity;
|
||||||
if(tmp) x += (granularity - tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(((boxp->y2 - boxp->y1) < h) || ((boxp->x2 - x) < w))
|
if(((boxp->y2 - boxp->y1) < h) || ((boxp->x2 - x) < w))
|
||||||
continue;
|
continue;
|
||||||
|
@ -398,10 +396,8 @@ AllocateArea(
|
||||||
|
|
||||||
boxp = &(link->area.box);
|
boxp = &(link->area.box);
|
||||||
x = boxp->x1;
|
x = boxp->x1;
|
||||||
if(granularity) {
|
if (granularity > 1)
|
||||||
int tmp = x % granularity;
|
x = ((x + granularity - 1) / granularity) * granularity;
|
||||||
if(tmp) x += (granularity - tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(((boxp->y2 - boxp->y1) < h) || ((boxp->x2 - x) < w)) {
|
if(((boxp->y2 - boxp->y1) < h) || ((boxp->x2 - x) < w)) {
|
||||||
link = link->next;
|
link = link->next;
|
||||||
|
@ -685,10 +681,8 @@ localQueryLargestOffscreenArea(
|
||||||
|
|
||||||
while(nbox--) {
|
while(nbox--) {
|
||||||
x = pbox->x1;
|
x = pbox->x1;
|
||||||
if(granularity) {
|
if (granularity > 1)
|
||||||
int tmp = x % granularity;
|
x = ((x + granularity - 1) / granularity) * granularity;
|
||||||
if(tmp) x += (granularity - tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
w = pbox->x2 - x;
|
w = pbox->x2 - x;
|
||||||
h = pbox->y2 - pbox->y1;
|
h = pbox->y2 - pbox->y1;
|
||||||
|
@ -845,7 +839,9 @@ AllocateLinear(
|
||||||
while (linear) {
|
while (linear) {
|
||||||
/* Make sure we get a free area that's not an XY fallback case */
|
/* Make sure we get a free area that's not an XY fallback case */
|
||||||
if (!linear->area && linear->free) {
|
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;
|
end = offset+size;
|
||||||
if (end <= (linear->linear.offset + linear->linear.size))
|
if (end <= (linear->linear.offset + linear->linear.size))
|
||||||
break;
|
break;
|
||||||
|
@ -935,17 +931,20 @@ localAllocateOffscreenLinear(
|
||||||
extents = REGION_EXTENTS(pScreen, offman->InitialBoxes);
|
extents = REGION_EXTENTS(pScreen, offman->InitialBoxes);
|
||||||
pitch = extents->x2 - extents->x1;
|
pitch = extents->x2 - extents->x1;
|
||||||
|
|
||||||
if (gran && gran > pitch) {
|
if (gran > 1) {
|
||||||
/* we can't match the specified alignment with XY allocations */
|
if (gran > pitch) {
|
||||||
xfree(link);
|
/* we can't match the specified alignment with XY allocations */
|
||||||
return NULL;
|
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
|
if (pitch % gran) {
|
||||||
*/
|
/* pitch and granularity aren't a perfect match, let's allocate
|
||||||
length += gran - 1;
|
* a bit more so we can align later on
|
||||||
}
|
*/
|
||||||
|
length += gran - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(length < pitch) { /* special case */
|
if(length < pitch) { /* special case */
|
||||||
w = length;
|
w = length;
|
||||||
|
@ -968,8 +967,8 @@ localAllocateOffscreenLinear(
|
||||||
linear->pScreen = pScreen;
|
linear->pScreen = pScreen;
|
||||||
linear->size = h * w;
|
linear->size = h * w;
|
||||||
linear->offset = (pitch * area->box.y1) + area->box.x1;
|
linear->offset = (pitch * area->box.y1) + area->box.x1;
|
||||||
if (gran && linear->offset % gran)
|
if (gran > 1)
|
||||||
linear->offset += gran - (linear->offset % gran);
|
linear->offset += ((linear->offset + gran - 1) / gran) * gran;
|
||||||
linear->granularity = gran;
|
linear->granularity = gran;
|
||||||
linear->MoveLinearCallback = moveCB;
|
linear->MoveLinearCallback = moveCB;
|
||||||
linear->RemoveLinearCallback = removeCB;
|
linear->RemoveLinearCallback = removeCB;
|
||||||
|
@ -1435,9 +1434,12 @@ xf86AllocateLinearOffscreenArea (
|
||||||
extents = REGION_EXTENTS(pScreen, offman->InitialBoxes);
|
extents = REGION_EXTENTS(pScreen, offman->InitialBoxes);
|
||||||
w = extents->x2 - extents->x1;
|
w = extents->x2 - extents->x1;
|
||||||
|
|
||||||
if(gran && ((gran > w) || (w % gran))) {
|
if (gran > 1) {
|
||||||
/* we can't match the specified alignment with XY allocations */
|
if (gran > w)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if (w % gran)
|
||||||
|
length += gran - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(length <= w) { /* special case */
|
if(length <= w) { /* special case */
|
||||||
|
|
|
@ -649,7 +649,7 @@ being
|
||||||
that are passed to the module when it is loaded.
|
that are passed to the module when it is loaded.
|
||||||
.PP
|
.PP
|
||||||
Example: the extmod module (which contains a miscellaneous group of
|
Example: the extmod module (which contains a miscellaneous group of
|
||||||
server extensions) can be loaded, with the __xservername__-DGA extension
|
server extensions) can be loaded, with the XFree86-DGA extension
|
||||||
disabled by using the following entry:
|
disabled by using the following entry:
|
||||||
.PP
|
.PP
|
||||||
.RS 4
|
.RS 4
|
||||||
|
|
|
@ -35,6 +35,6 @@ Default: No.
|
||||||
Chooses an alternate pixmap migration heuristic, for debugging purposes. The
|
Chooses an alternate pixmap migration heuristic, for debugging purposes. The
|
||||||
default is intended to be the best performing one for general use, though others
|
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,
|
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
|
.SH AUTHORS
|
||||||
Authors include: Keith Packard, Eric Anholt, Zack Rusin, and Michel Dänzer
|
Authors include: Keith Packard, Eric Anholt, Zack Rusin, and Michel Dänzer
|
||||||
|
|
|
@ -183,12 +183,20 @@ print_xfree_mode(char *txt, DisplayModePtr mode)
|
||||||
static void
|
static void
|
||||||
xfree2fbdev_fblayout(ScrnInfoPtr pScrn, struct fb_var_screeninfo *var)
|
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->yres_virtual = pScrn->virtualY;
|
||||||
var->bits_per_pixel = pScrn->bitsPerPixel;
|
var->bits_per_pixel = pScrn->bitsPerPixel;
|
||||||
var->red.length = pScrn->weight.red;
|
if (pScrn->defaultVisual == TrueColor ||
|
||||||
var->green.length = pScrn->weight.green;
|
pScrn->defaultVisual == DirectColor) {
|
||||||
var->blue.length = pScrn->weight.blue;
|
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
|
static void
|
||||||
|
@ -227,6 +235,26 @@ xfree2fbdev_timing(DisplayModePtr mode, struct fb_var_screeninfo *var)
|
||||||
var->vmode = FB_VMODE_NONINTERLACED;
|
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
|
static void
|
||||||
fbdev2xfree_timing(struct fb_var_screeninfo *var, DisplayModePtr mode)
|
fbdev2xfree_timing(struct fb_var_screeninfo *var, DisplayModePtr mode)
|
||||||
{
|
{
|
||||||
|
@ -470,13 +498,53 @@ fbdevHWGetVidmem(ScrnInfoPtr pScrn)
|
||||||
return fPtr->fix.smem_len;
|
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
|
void
|
||||||
fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
|
fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
|
||||||
{
|
{
|
||||||
fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
|
|
||||||
int virtX = pScrn->display->virtualX;
|
|
||||||
int virtY = pScrn->display->virtualY;
|
|
||||||
struct fb_var_screeninfo var;
|
|
||||||
char **modename;
|
char **modename;
|
||||||
DisplayModePtr mode,this,last = pScrn->modes;
|
DisplayModePtr mode,this,last = pScrn->modes;
|
||||||
|
|
||||||
|
@ -484,6 +552,9 @@ fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
|
||||||
if (NULL == pScrn->display->modes)
|
if (NULL == pScrn->display->modes)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
pScrn->virtualX = pScrn->display->virtualX;
|
||||||
|
pScrn->virtualY = pScrn->display->virtualY;
|
||||||
|
|
||||||
for (modename = pScrn->display->modes; *modename != NULL; modename++) {
|
for (modename = pScrn->display->modes; *modename != NULL; modename++) {
|
||||||
for (mode = pScrn->monitor->Modes; mode != NULL; mode = mode->next)
|
for (mode = pScrn->monitor->Modes; mode != NULL; mode = mode->next)
|
||||||
if (0 == strcmp(mode->name,*modename))
|
if (0 == strcmp(mode->name,*modename))
|
||||||
|
@ -493,27 +564,20 @@ fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
|
||||||
"\tmode \"%s\" not found\n", *modename);
|
"\tmode \"%s\" not found\n", *modename);
|
||||||
continue;
|
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 (!fbdevHWSetMode(pScrn, mode, TRUE)) {
|
||||||
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))) {
|
|
||||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||||
"\tmode \"%s\" test failed\n", *modename);
|
"\tmode \"%s\" test failed\n", *modename);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||||
"\tmode \"%s\" ok\n", *modename);
|
"\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) {
|
if (NULL == pScrn->modes) {
|
||||||
pScrn->modes = xnfalloc(sizeof(DisplayModeRec));
|
pScrn->modes = xnfalloc(sizeof(DisplayModeRec));
|
||||||
this = pScrn->modes;
|
this = pScrn->modes;
|
||||||
|
@ -530,8 +594,6 @@ fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
|
||||||
}
|
}
|
||||||
last = this;
|
last = this;
|
||||||
}
|
}
|
||||||
pScrn->virtualX = virtX;
|
|
||||||
pScrn->virtualY = virtY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DisplayModePtr
|
DisplayModePtr
|
||||||
|
@ -673,21 +735,12 @@ fbdevHWModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
|
||||||
{
|
{
|
||||||
fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
|
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;
|
pScrn->vtSema = TRUE;
|
||||||
|
|
||||||
/* set */
|
/* set */
|
||||||
if (0 != ioctl(fPtr->fd,FBIOPUT_VSCREENINFO,(void*)(&fPtr->var))) {
|
if (!fbdevHWSetMode(pScrn, mode, FALSE))
|
||||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
|
||||||
"FBIOPUT_VSCREENINFO: %s\n", strerror(errno));
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
|
||||||
/* read back */
|
/* read back */
|
||||||
if (0 != ioctl(fPtr->fd,FBIOGET_FSCREENINFO,(void*)(&fPtr->fix))) {
|
if (0 != ioctl(fPtr->fd,FBIOGET_FSCREENINFO,(void*)(&fPtr->fix))) {
|
||||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
||||||
|
@ -699,6 +752,20 @@ fbdevHWModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
|
||||||
"FBIOGET_VSCREENINFO: %s\n", strerror(errno));
|
"FBIOGET_VSCREENINFO: %s\n", strerror(errno));
|
||||||
return FALSE;
|
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;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -767,18 +834,12 @@ ModeStatus
|
||||||
fbdevHWValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
|
fbdevHWValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
|
||||||
{
|
{
|
||||||
ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
|
ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
|
||||||
fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
|
|
||||||
struct fb_var_screeninfo var;
|
|
||||||
|
|
||||||
TRACE_ENTER("ValidMode");
|
TRACE_ENTER("ValidMode");
|
||||||
memcpy(&var,&fPtr->var,sizeof(var));
|
|
||||||
xfree2fbdev_timing(mode, &var);
|
if (!fbdevHWSetMode(pScrn, mode, TRUE))
|
||||||
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));
|
|
||||||
return MODE_BAD;
|
return MODE_BAD;
|
||||||
}
|
|
||||||
return MODE_OK;
|
return MODE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -786,15 +847,12 @@ Bool
|
||||||
fbdevHWSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
|
fbdevHWSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
|
||||||
{
|
{
|
||||||
ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
|
ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
|
||||||
fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
|
|
||||||
|
|
||||||
TRACE_ENTER("SwitchMode");
|
TRACE_ENTER("SwitchMode");
|
||||||
xfree2fbdev_timing(mode, &fPtr->var);
|
|
||||||
if (0 != ioctl(fPtr->fd,FBIOPUT_VSCREENINFO,(void*)(&fPtr->var))) {
|
if (!fbdevHWSetMode(pScrn, mode, FALSE))
|
||||||
xf86DrvMsg(scrnIndex, X_ERROR,
|
|
||||||
"FBIOPUT_VSCREENINFO: %s\n", strerror(errno));
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,10 @@ DLFindSymbol(const char *name)
|
||||||
DLModuleList *l;
|
DLModuleList *l;
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
|
p = dlsym(RTLD_DEFAULT, name);
|
||||||
|
if (p != NULL)
|
||||||
|
return p;
|
||||||
|
|
||||||
for (l = dlModuleList; l != NULL; l = l->next) {
|
for (l = dlModuleList; l != NULL; l = l->next) {
|
||||||
p = DLFindSymbolLocal(l->module, name);
|
p = DLFindSymbolLocal(l->module, name);
|
||||||
if (p)
|
if (p)
|
||||||
|
|
|
@ -903,7 +903,7 @@ doLoadModule(const char *module, const char *path, const char **subdirlist,
|
||||||
* check the elements in the path
|
* check the elements in the path
|
||||||
*/
|
*/
|
||||||
if (PathIsAbsolute(module))
|
if (PathIsAbsolute(module))
|
||||||
xstrdup(module);
|
found = xstrdup(module);
|
||||||
path_elem = pathlist;
|
path_elem = pathlist;
|
||||||
while (!found && *path_elem != NULL) {
|
while (!found && *path_elem != NULL) {
|
||||||
found = FindModule(m, *path_elem, subdirlist, patterns);
|
found = FindModule(m, *path_elem, subdirlist, patterns);
|
||||||
|
|
|
@ -570,7 +570,8 @@ linuxMapPci(int ScreenNum, int Flags, PCITAG Tag,
|
||||||
|
|
||||||
xf86InitVidMem();
|
xf86InitVidMem();
|
||||||
|
|
||||||
if (((fd = linuxPciOpenFile(Tag ,FALSE)) < 0) ||
|
prot = ((Flags & VIDMEM_READONLY) == 0);
|
||||||
|
if (((fd = linuxPciOpenFile(Tag, prot)) < 0) ||
|
||||||
(ioctl(fd, mmap_ioctl, 0) < 0))
|
(ioctl(fd, mmap_ioctl, 0) < 0))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,14 @@ PLATFORM_DEFINES = -DOS_PROBE_PCI_CHIPSET=lnxProbePciChipset
|
||||||
PLATFORM_INCLUDES = -I$(srcdir)/../shared
|
PLATFORM_INCLUDES = -I$(srcdir)/../shared
|
||||||
endif
|
endif
|
||||||
if LINUX_ALPHA
|
if LINUX_ALPHA
|
||||||
PLATFORM_PCI_SUPPORT = lnx_ev56.c \
|
noinst_LTLIBRARIES += liblinuxev56.la
|
||||||
|
PLATFORM_PCI_SUPPORT = \
|
||||||
$(srcdir)/lnx_axp.c \
|
$(srcdir)/lnx_axp.c \
|
||||||
$(srcdir)/../shared/xf86Axp.c
|
$(srcdir)/../shared/xf86Axp.c
|
||||||
|
|
||||||
|
liblinuxev56_la_CFLAGS = -mcpu=ev56
|
||||||
|
|
||||||
|
liblinuxev56_la_SOURCES = lnx_ev56.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if LNXACPI
|
if LNXACPI
|
||||||
|
@ -48,3 +53,7 @@ EXTRA_DIST = \
|
||||||
$(LNX_EXTRA_SRCS) \
|
$(LNX_EXTRA_SRCS) \
|
||||||
lnx.h \
|
lnx.h \
|
||||||
$(srcdir)/../shared/xf86Axp.h
|
$(srcdir)/../shared/xf86Axp.h
|
||||||
|
|
||||||
|
if LINUX_ALPHA
|
||||||
|
liblinux_la_LIBADD = liblinuxev56.la
|
||||||
|
endif
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
|
/* This file has to be built with -mcpu=ev56 */
|
||||||
#ifdef HAVE_XORG_CONFIG_H
|
#ifdef HAVE_XORG_CONFIG_H
|
||||||
#include <xorg-config.h>
|
#include <xorg-config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
# This file can be distributed under either the GNU General Public License
|
# This file can be distributed under either the GNU General Public License
|
||||||
# (version 2 or higher) or the 3-clause BSD 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.
|
# Vendors, devices and subsystems. Please keep sorted.
|
||||||
|
@ -23,11 +23,28 @@
|
||||||
|
|
||||||
0000 Gammagraphx, Inc.
|
0000 Gammagraphx, Inc.
|
||||||
001a Ascend Communications, Inc.
|
001a Ascend Communications, Inc.
|
||||||
|
001c PEAK-System Technik GmbH
|
||||||
|
0001 PCAN-PCI CAN-Bus controller
|
||||||
0033 Paradyne corp.
|
0033 Paradyne corp.
|
||||||
003d Lockheed Martin-Marietta Corp
|
003d Lockheed Martin-Marietta Corp
|
||||||
# Real TJN ID is e159, but they got it wrong several times --mj
|
# Real TJN ID is e159, but they got it wrong several times --mj
|
||||||
0059 Tiger Jet Network Inc. (Wrong ID)
|
0059 Tiger Jet Network Inc. (Wrong ID)
|
||||||
0070 Hauppauge computer works Inc.
|
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.
|
0071 Nebula Electronics Ltd.
|
||||||
0095 Silicon Image, Inc. (Wrong ID)
|
0095 Silicon Image, Inc. (Wrong ID)
|
||||||
0680 Ultra ATA/133 IDE RAID CONTROLLER CARD
|
0680 Ultra ATA/133 IDE RAID CONTROLLER CARD
|
||||||
|
@ -51,6 +68,7 @@
|
||||||
0315 SK-Electronics Co., Ltd.
|
0315 SK-Electronics Co., Ltd.
|
||||||
0357 TTTech AG
|
0357 TTTech AG
|
||||||
000a TTP-Monitoring Card V2.0
|
000a TTP-Monitoring Card V2.0
|
||||||
|
0403 Future Technology Devices International Ltd
|
||||||
0432 SCM Microsystems, Inc.
|
0432 SCM Microsystems, Inc.
|
||||||
0001 Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet]
|
0001 Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet]
|
||||||
045e Microsoft
|
045e Microsoft
|
||||||
|
@ -63,6 +81,7 @@
|
||||||
001a FSD7000 802.11g PCI Wireless card
|
001a FSD7000 802.11g PCI Wireless card
|
||||||
0109 F5U409-CU USB/Serial Portable Adapter
|
0109 F5U409-CU USB/Serial Portable Adapter
|
||||||
7050 F5D7050 802.11g Wireless USB Adapter
|
7050 F5D7050 802.11g Wireless USB Adapter
|
||||||
|
705c F5D7050 v4
|
||||||
05a9 OmniVision
|
05a9 OmniVision
|
||||||
8519 OV519 series
|
8519 OV519 series
|
||||||
05e3 CyberDoor
|
05e3 CyberDoor
|
||||||
|
@ -78,23 +97,42 @@
|
||||||
067b Prolific Technology, Inc.
|
067b Prolific Technology, Inc.
|
||||||
2303 PL-2303 USB-to-Serial Converter
|
2303 PL-2303 USB-to-Serial Converter
|
||||||
3507 PL-3507 Hi-Speed USB & IEEE 1394 Combo to IDE Bridge Controller
|
3507 PL-3507 Hi-Speed USB & IEEE 1394 Combo to IDE Bridge Controller
|
||||||
|
069d Hughes Network Systems (HNS)
|
||||||
0721 Sapphire, Inc.
|
0721 Sapphire, Inc.
|
||||||
|
07ca AVerMedia Technologies Inc.
|
||||||
|
b808 AVerTV DVB-T Volar (USB 2.0)
|
||||||
07e2 ELMEG Communication Systems GmbH
|
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.
|
# Wrong ID used in subsystem ID of VIA USB controllers.
|
||||||
0925 VIA Technologies, Inc. (Wrong ID)
|
0925 VIA Technologies, Inc. (Wrong ID)
|
||||||
093a PixArt Imaging Inc.
|
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
|
09c1 Arris
|
||||||
0704 CM 200E Cable Modem
|
0704 CM 200E Cable Modem
|
||||||
0a89 BREA Technologies Inc
|
0a89 BREA Technologies Inc
|
||||||
|
0ace ZyDAS
|
||||||
|
1211 ZD1211 IEEE 802.11b+g USB Adapter
|
||||||
0b0b Rhino Equiment Corp.
|
0b0b Rhino Equiment Corp.
|
||||||
0105 Rhino R1T1
|
0105 Rhino R1T1
|
||||||
0205 Rhino R4FXO
|
0205 Rhino R4FXO
|
||||||
|
0206 RCB4FXO 4-channel FXO analog telphony card
|
||||||
0305 Rhino R4T1
|
0305 Rhino R4T1
|
||||||
0405 Rhino R8FXX
|
0405 Rhino R8FXX
|
||||||
|
0406 RCB8FXX 8-channel modular analog telphony card
|
||||||
0505 Rhino R24FXX
|
0505 Rhino R24FXX
|
||||||
0506 Rhino R2T1
|
0506 RCB24FXS 24-Channel FXS analog telphony card
|
||||||
0605 Rhino R2T1
|
0605 Rhino R2T1
|
||||||
0705 Rhino R24FXS
|
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
|
0b49 ASCII Corporation
|
||||||
064f Trance Vibrator
|
064f Trance Vibrator
|
||||||
0ccd TerraTec Electronic GmbH
|
0ccd TerraTec Electronic GmbH
|
||||||
|
@ -288,16 +326,33 @@
|
||||||
0041 53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI
|
0041 53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI
|
||||||
0050 SAS1064 PCI-X Fusion-MPT SAS
|
0050 SAS1064 PCI-X Fusion-MPT SAS
|
||||||
0054 SAS1068 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
|
0056 SAS1064E PCI-Express Fusion-MPT SAS
|
||||||
0058 SAS1068E PCI-Express Fusion-MPT SAS
|
0058 SAS1068E PCI-Express Fusion-MPT SAS
|
||||||
005a SAS1066E PCI-Express Fusion-MPT SAS
|
005a SAS1066E PCI-Express Fusion-MPT SAS
|
||||||
005c SAS1064A PCI-X Fusion-MPT SAS
|
005c SAS1064A PCI-X Fusion-MPT SAS
|
||||||
005e SAS1066 PCI-X Fusion-MPT SAS
|
005e SAS1066 PCI-X Fusion-MPT SAS
|
||||||
0060 MegaRAID SAS 1078
|
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 1f0a PERC 6/E Adapter RAID Controller
|
||||||
1028 1f0b PERC 6/i Adapter RAID Controller
|
1028 1f0b PERC 6/i Adapter RAID Controller
|
||||||
1028 1f0c PERC 6/i Integrated 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
|
0062 SAS1078 PCI-Express Fusion-MPT SAS
|
||||||
1000 0062 SAS1078 PCI-Express Fusion-MPT SAS
|
1000 0062 SAS1078 PCI-Express Fusion-MPT SAS
|
||||||
008f 53c875J
|
008f 53c875J
|
||||||
|
@ -317,6 +372,9 @@
|
||||||
1025 004d MegaRAID ACER ROMB-2E RAID Controller
|
1025 004d MegaRAID ACER ROMB-2E RAID Controller
|
||||||
1028 0001 PowerEdge RAID Controller PERC4e/SC
|
1028 0001 PowerEdge RAID Controller PERC4e/SC
|
||||||
1028 0002 PowerEdge RAID Controller PERC4e/DC
|
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
|
1734 1065 FSC MegaRAID PCI Express ROMB
|
||||||
8086 0002 MegaRAID Intel RAID Controller SRCU42E
|
8086 0002 MegaRAID Intel RAID Controller SRCU42E
|
||||||
0409 MegaRAID
|
0409 MegaRAID
|
||||||
|
@ -330,6 +388,7 @@
|
||||||
1000 1002 MegaRAID SAS 8480E
|
1000 1002 MegaRAID SAS 8480E
|
||||||
1000 1003 MegaRAID SAS 8344ELP
|
1000 1003 MegaRAID SAS 8344ELP
|
||||||
1000 1004 MegaRAID SAS 8308ELP
|
1000 1004 MegaRAID SAS 8308ELP
|
||||||
|
1000 1008 MegaRAID SAS 84016E
|
||||||
1000 100c MegaRAID SATA 300-12E
|
1000 100c MegaRAID SATA 300-12E
|
||||||
1000 100d MegaRAID SATA 300-16E
|
1000 100d MegaRAID SATA 300-16E
|
||||||
1000 2004 MegaRAID SATA 300-8ELP
|
1000 2004 MegaRAID SATA 300-8ELP
|
||||||
|
@ -338,8 +397,8 @@
|
||||||
1054 3016 MegaRAID SAS RoMB Server
|
1054 3016 MegaRAID SAS RoMB Server
|
||||||
1734 1081 MegaRAID SAS PCI Express ROMB
|
1734 1081 MegaRAID SAS PCI Express ROMB
|
||||||
1734 10a3 MegaRAID SAS PCI Express ROMB
|
1734 10a3 MegaRAID SAS PCI Express ROMB
|
||||||
8086 1001 SRCSAS18E RAID Controller
|
8086 1001 RAID Controller SRCSAS18E
|
||||||
8086 1003 SRCSAS144E RAID Controller
|
8086 1003 RAID Controller SRCSAS144E
|
||||||
8086 3500 SROMBSAS18E RAID Controller
|
8086 3500 SROMBSAS18E RAID Controller
|
||||||
8086 3501 SROMBSAS18E RAID Controller
|
8086 3501 SROMBSAS18E RAID Controller
|
||||||
8086 3504 SROMBSAS18E RAID Controller
|
8086 3504 SROMBSAS18E RAID Controller
|
||||||
|
@ -509,7 +568,11 @@
|
||||||
103c 308b MX6125
|
103c 308b MX6125
|
||||||
4379 ATI 4379 Serial ATA Controller
|
4379 ATI 4379 Serial ATA Controller
|
||||||
437a ATI 437A 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
|
437b SB450 HDA Audio
|
||||||
|
1734 10b8 Realtek High Definition Audio
|
||||||
4380 SB600 Non-Raid-5 SATA
|
4380 SB600 Non-Raid-5 SATA
|
||||||
4381 SB600 Raid-5 SATA
|
4381 SB600 Raid-5 SATA
|
||||||
4382 SB600 AC97 Audio
|
4382 SB600 AC97 Audio
|
||||||
|
@ -584,6 +647,7 @@
|
||||||
1734 007a Primergy RX300
|
1734 007a Primergy RX300
|
||||||
8086 3411 SDS2 Mainboard
|
8086 3411 SDS2 Mainboard
|
||||||
8086 3427 S875WP1-E mainboard
|
8086 3427 S875WP1-E mainboard
|
||||||
|
8086 5744 S845WD1-E mainboard
|
||||||
4753 Rage XC
|
4753 Rage XC
|
||||||
1002 4753 Rage XC
|
1002 4753 Rage XC
|
||||||
4754 3D Rage I/II 215GT [Mach64 GT]
|
4754 3D Rage I/II 215GT [Mach64 GT]
|
||||||
|
@ -711,10 +775,12 @@
|
||||||
1025 005a TravelMate 290
|
1025 005a TravelMate 290
|
||||||
103c 088c NC8000 laptop
|
103c 088c NC8000 laptop
|
||||||
103c 0890 NC6000 laptop
|
103c 0890 NC6000 laptop
|
||||||
|
144d c00c P35 notebook
|
||||||
1462 0311 MSI M510A
|
1462 0311 MSI M510A
|
||||||
1734 1055 Amilo M1420W
|
1734 1055 Amilo M1420W
|
||||||
4e51 M10 NQ [Radeon Mobility 9600]
|
4e51 M10 NQ [Radeon Mobility 9600]
|
||||||
4e52 RV350 [Mobility Radeon 9600 M10]
|
4e52 RV350 [Mobility Radeon 9600 M10]
|
||||||
|
144d c00c P35 notebook
|
||||||
4e53 M10 NS [Radeon Mobility 9600]
|
4e53 M10 NS [Radeon Mobility 9600]
|
||||||
4e54 M10 NT [FireGL Mobility T2]
|
4e54 M10 NT [FireGL Mobility T2]
|
||||||
4e56 M11 NV [FireGL Mobility T2e]
|
4e56 M11 NV [FireGL Mobility T2e]
|
||||||
|
@ -900,7 +966,7 @@
|
||||||
554d R430 [Radeon X800 XL] (PCIe)
|
554d R430 [Radeon X800 XL] (PCIe)
|
||||||
554f R430 [Radeon X800 (PCIE)]
|
554f R430 [Radeon X800 (PCIE)]
|
||||||
5550 R423 [Fire GL V7100]
|
5550 R423 [Fire GL V7100]
|
||||||
5551 R423 UQ [FireGL V7200 (PCIE)]
|
5551 R423 [FireGL V5100 (PCIE)]
|
||||||
5552 R423 UR [FireGL V5100 (PCIE)]
|
5552 R423 UR [FireGL V5100 (PCIE)]
|
||||||
5554 R423 UT [FireGL V7100 (PCIE)]
|
5554 R423 UT [FireGL V7100 (PCIE)]
|
||||||
5569 R423 UI [Radeon X800PRO (PCIE)] Secondary
|
5569 R423 UI [Radeon X800PRO (PCIE)] Secondary
|
||||||
|
@ -936,6 +1002,7 @@
|
||||||
1025 0080 Aspire 5024WLMMi
|
1025 0080 Aspire 5024WLMMi
|
||||||
103c 308b MX6125
|
103c 308b MX6125
|
||||||
5951 ATI Radeon Xpress 200 (RS480/RS482/RX480/RX482) Chipset - Host bridge
|
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]
|
5954 RS480 [Radeon Xpress 200G Series]
|
||||||
1002 5954 RV370 [Radeon Xpress 200G Series]
|
1002 5954 RV370 [Radeon Xpress 200G Series]
|
||||||
5955 ATI Radeon XPRESS 200M 5955 (PCIE)
|
5955 ATI Radeon XPRESS 200M 5955 (PCIE)
|
||||||
|
@ -954,6 +1021,7 @@
|
||||||
18bc 0053 Radeon 9200 Game Buster VIVO
|
18bc 0053 Radeon 9200 Game Buster VIVO
|
||||||
5962 RV280 [Radeon 9200]
|
5962 RV280 [Radeon 9200]
|
||||||
5964 RV280 [Radeon 9200 SE]
|
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
|
1043 c006 ASUS Radeon 9200 SE / TD / 128M
|
||||||
1458 4018 Radeon 9200 SE
|
1458 4018 Radeon 9200 SE
|
||||||
1458 4032 Radeon 9200 SE 128MB
|
1458 4032 Radeon 9200 SE 128MB
|
||||||
|
@ -966,11 +1034,12 @@
|
||||||
18bc 0173 GC-R9200L(SE)-C3H [Radeon 9200 Game Buster]
|
18bc 0173 GC-R9200L(SE)-C3H [Radeon 9200 Game Buster]
|
||||||
5969 ES1000
|
5969 ES1000
|
||||||
5974 RS482 [Radeon Xpress 200]
|
5974 RS482 [Radeon Xpress 200]
|
||||||
5975 RS482 [Radeon Xpress 200M]
|
5975 RS485 [Radeon Xpress 1100 IGP]
|
||||||
5a33 Radeon Xpress 200 Host Bridge
|
5a33 Radeon Xpress 200 Host Bridge
|
||||||
5a34 RS480 PCI-X Root Port
|
5a34 RS480 PCI-X Root Port
|
||||||
# Comes in pair with 5a3f
|
# Comes in pair with 5a3f
|
||||||
5a36 RS480 PCI Bridge
|
5a36 RS480 PCI Bridge
|
||||||
|
5a37 RS480 PCI Bridge
|
||||||
5a38 RS480 PCI Bridge
|
5a38 RS480 PCI Bridge
|
||||||
# Comes in pair with 5a38
|
# Comes in pair with 5a38
|
||||||
5a39 RS480 PCI Bridge
|
5a39 RS480 PCI Bridge
|
||||||
|
@ -998,6 +1067,7 @@
|
||||||
5c61 M9+ 5C61 [Radeon Mobility 9200 (AGP)]
|
5c61 M9+ 5C61 [Radeon Mobility 9200 (AGP)]
|
||||||
5c63 M9+ 5C63 [Radeon Mobility 9200 (AGP)]
|
5c63 M9+ 5C63 [Radeon Mobility 9200 (AGP)]
|
||||||
1002 5c63 Apple iBook G4 2004
|
1002 5c63 Apple iBook G4 2004
|
||||||
|
144d c00c P30 notebook
|
||||||
5d44 RV280 [Radeon 9200 SE] (Secondary)
|
5d44 RV280 [Radeon 9200 SE] (Secondary)
|
||||||
1458 4019 Radeon 9200 SE (Secondary)
|
1458 4019 Radeon 9200 SE (Secondary)
|
||||||
1458 4032 Radeon 9200 SE 128MB
|
1458 4032 Radeon 9200 SE 128MB
|
||||||
|
@ -1052,11 +1122,13 @@
|
||||||
1002 0323 All-in-Wonder X1800XL (Secondary)
|
1002 0323 All-in-Wonder X1800XL (Secondary)
|
||||||
1002 0d03 Radeon X1800 CrossFire Edition (Secondary)
|
1002 0d03 Radeon X1800 CrossFire Edition (Secondary)
|
||||||
7140 RV515 [Radeon X1600]
|
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
|
1002 0322 All-in-Wonder 2006 PCI-E Edition
|
||||||
|
7143 RV505 [Radeon X1550 Series]
|
||||||
7145 Radeon Mobility X1400
|
7145 Radeon Mobility X1400
|
||||||
7146 RV515 [Radeon X1300]
|
7146 RV515 [Radeon X1300]
|
||||||
1002 0322 All-in-Wonder 2006 PCI-E Edition
|
1002 0322 All-in-Wonder 2006 PCI-E Edition
|
||||||
|
7147 RV505 [Radeon X1550 64-bit]
|
||||||
7149 M52 [ATI Mobility Radeon X1300]
|
7149 M52 [ATI Mobility Radeon X1300]
|
||||||
714a M52 [ATI Mobility Radeon X1300]
|
714a M52 [ATI Mobility Radeon X1300]
|
||||||
714b M52 [ATI Mobility Radeon X1300]
|
714b M52 [ATI Mobility Radeon X1300]
|
||||||
|
@ -1064,28 +1136,47 @@
|
||||||
714d RV515 [Radeon X1300]
|
714d RV515 [Radeon X1300]
|
||||||
714e RV515 [Radeon X1300]
|
714e RV515 [Radeon X1300]
|
||||||
7152 RV515 GL ATI FireGL V3300 Primary
|
7152 RV515 GL ATI FireGL V3300 Primary
|
||||||
|
7153 RV515GL [FireGL V3350]
|
||||||
715e RV515 [Radeon X1300]
|
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)
|
1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary)
|
||||||
7166 RV515 [Radeon X1300] (Secondary)
|
7166 RV515 [Radeon X1300] (Secondary)
|
||||||
1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary)
|
1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary)
|
||||||
7172 RV515 GL ATI FireGL V3300 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
|
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
|
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]
|
71c0 RV530 [Radeon X1600]
|
||||||
71c2 RV530 [Radeon X1600]
|
71c2 RV530 [Radeon X1600]
|
||||||
71c4 M56GL [ATI Mobility FireGL V5200]
|
71c4 M56GL [ATI Mobility FireGL V5200]
|
||||||
17aa 2007 ThinkPad T60p
|
17aa 2007 ThinkPad T60p
|
||||||
71c5 M56P [Radeon Mobility X1600]
|
71c5 M56P [Radeon Mobility X1600]
|
||||||
71c6 RV530LE [Radeon X1600]
|
71c6 RV530LE [Radeon X1600]
|
||||||
|
71c7 RV535 [Radeon X1650 Series]
|
||||||
71ce RV530LE [Radeon X1600]
|
71ce RV530LE [Radeon X1600]
|
||||||
71d5 M66-P ATI Mobility Radeon X1700
|
71d5 M66-P ATI Mobility Radeon X1700
|
||||||
71d6 M66-XT ATI Mobility Radeon X1700
|
71d6 M66-XT ATI Mobility Radeon X1700
|
||||||
71de RV530LE [Radeon X1600]
|
71de RV530LE [Radeon X1600]
|
||||||
71e0 RV530 [Radeon X1600] (Secondary)
|
71e0 RV530 [Radeon X1600] (Secondary)
|
||||||
71e2 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]
|
7240 R580 [Radeon X1900]
|
||||||
7241 R580 [Radeon X1900]
|
7241 R580 [Radeon X1900]
|
||||||
7242 R580 [Radeon X1900]
|
7242 R580 [Radeon X1900]
|
||||||
|
@ -1098,15 +1189,29 @@
|
||||||
7249 R580 [Radeon X1900 XT] Primary
|
7249 R580 [Radeon X1900 XT] Primary
|
||||||
724a R580 [Radeon X1900]
|
724a R580 [Radeon X1900]
|
||||||
724b 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]
|
724c R580 [Radeon X1900]
|
||||||
724d 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
|
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
|
7833 Radeon 9100 IGP Host Bridge
|
||||||
7834 Radeon 9100 PRO IGP
|
7834 Radeon 9100 PRO IGP
|
||||||
7835 Radeon Mobility 9200 IGP
|
7835 Radeon Mobility 9200 IGP
|
||||||
7838 Radeon 9100 IGP PCI/AGP Bridge
|
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]
|
7c37 RV350 AQ [Radeon 9600 SE]
|
||||||
cab0 AGP Bridge [IGP 320M]
|
cab0 AGP Bridge [IGP 320M]
|
||||||
cab2 RS200/RS200M AGP Bridge [IGP 340M]
|
cab2 RS200/RS200M AGP Bridge [IGP 340M]
|
||||||
|
@ -1556,6 +1661,8 @@
|
||||||
2003 Am 1771 MBW [Alchemy]
|
2003 Am 1771 MBW [Alchemy]
|
||||||
2020 53c974 [PCscsi]
|
2020 53c974 [PCscsi]
|
||||||
2040 79c974
|
2040 79c974
|
||||||
|
# CS5536 [Geode companion] Host Bridge
|
||||||
|
2080 Conrad Kostecki
|
||||||
2081 Geode LX Video
|
2081 Geode LX Video
|
||||||
2082 Geode LX AES Security Block
|
2082 Geode LX AES Security Block
|
||||||
208f CS5536 GeodeLink PCI South Bridge
|
208f CS5536 GeodeLink PCI South Bridge
|
||||||
|
@ -1742,13 +1849,21 @@
|
||||||
1028 0001 PowerEdge 2400
|
1028 0001 PowerEdge 2400
|
||||||
0002 PowerEdge Expandable RAID Controller 3/Di
|
0002 PowerEdge Expandable RAID Controller 3/Di
|
||||||
1028 0002 PowerEdge 4400
|
1028 0002 PowerEdge 4400
|
||||||
|
1028 00d1 PERC 3/DiV [Viper]
|
||||||
|
1028 00d9 PERC 3/DiL [Lexus]
|
||||||
0003 PowerEdge Expandable RAID Controller 3/Si
|
0003 PowerEdge Expandable RAID Controller 3/Si
|
||||||
1028 0003 PowerEdge 2450
|
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
|
0006 PowerEdge Expandable RAID Controller 3/Di
|
||||||
0007 Remote Access Card III
|
0007 Remote Access Card III
|
||||||
0008 Remote Access Card III
|
0008 Remote Access Card III
|
||||||
0009 Remote Access Card III: BMC/SMIC device not present
|
0009 Remote Access Card III: BMC/SMIC device not present
|
||||||
000a PowerEdge Expandable RAID Controller 3/Di
|
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
|
000c Embedded Remote Access or ERA/O
|
||||||
000d Embedded Remote Access: BMC/SMIC device
|
000d Embedded Remote Access: BMC/SMIC device
|
||||||
000e PowerEdge Expandable RAID controller 4/Di
|
000e PowerEdge Expandable RAID controller 4/Di
|
||||||
|
@ -1764,6 +1879,9 @@
|
||||||
1028 0170 PowerEdge Expandable RAID Controller 4e/Di
|
1028 0170 PowerEdge Expandable RAID Controller 4e/Di
|
||||||
0014 Remote Access Card 4 Daughter Card SMIC interface
|
0014 Remote Access Card 4 Daughter Card SMIC interface
|
||||||
0015 PowerEdge Expandable RAID controller 5i
|
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
|
1029 Siemens Nixdorf IS
|
||||||
102a LSI Logic
|
102a LSI Logic
|
||||||
0000 HYDRA
|
0000 HYDRA
|
||||||
|
@ -1964,6 +2082,7 @@
|
||||||
102f 00f8 ATM Meteor 155
|
102f 00f8 ATM Meteor 155
|
||||||
0030 TC35815CF PCI 10/100 Mbit Ethernet Controller
|
0030 TC35815CF PCI 10/100 Mbit Ethernet Controller
|
||||||
0031 TC35815CF PCI 10/100 Mbit Ethernet Controller with WOL
|
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
|
0105 TC86C001 [goku-s] IDE
|
||||||
0106 TC86C001 [goku-s] USB 1.1 Host
|
0106 TC86C001 [goku-s] USB 1.1 Host
|
||||||
0107 TC86C001 [goku-s] USB Device Controller
|
0107 TC86C001 [goku-s] USB Device Controller
|
||||||
|
@ -2107,6 +2226,7 @@
|
||||||
1019 0a14 K7S5A motherboard
|
1019 0a14 K7S5A motherboard
|
||||||
1039 0900 SiS900 10/100 Ethernet Adapter
|
1039 0900 SiS900 10/100 Ethernet Adapter
|
||||||
1043 8035 CUSI-FX motherboard
|
1043 8035 CUSI-FX motherboard
|
||||||
|
1462 0900 MS-6701 motherboard
|
||||||
0961 SiS961 [MuTIOL Media IO]
|
0961 SiS961 [MuTIOL Media IO]
|
||||||
0962 SiS962 [MuTIOL Media IO]
|
0962 SiS962 [MuTIOL Media IO]
|
||||||
0963 SiS963 [MuTIOL Media IO]
|
0963 SiS963 [MuTIOL Media IO]
|
||||||
|
@ -2129,6 +2249,7 @@
|
||||||
1019 0970 P6STP-FL motherboard
|
1019 0970 P6STP-FL motherboard
|
||||||
1039 5513 SiS5513 EIDE Controller (A,B step)
|
1039 5513 SiS5513 EIDE Controller (A,B step)
|
||||||
1043 8035 CUSI-FX motherboard
|
1043 8035 CUSI-FX motherboard
|
||||||
|
1462 7010 MS-6701 motherboard
|
||||||
5517 5517
|
5517 5517
|
||||||
5571 5571
|
5571 5571
|
||||||
5581 5581 Pentium Chipset
|
5581 5581 Pentium Chipset
|
||||||
|
@ -2161,10 +2282,14 @@
|
||||||
1019 0a14 K7S5A motherboard
|
1019 0a14 K7S5A motherboard
|
||||||
1039 7000 Onboard USB Controller
|
1039 7000 Onboard USB Controller
|
||||||
1462 5470 K7SOM+ 5.2C Motherboard
|
1462 5470 K7SOM+ 5.2C Motherboard
|
||||||
|
1462 7010 MS-6701 motherboard
|
||||||
7002 USB 2.0 Controller
|
7002 USB 2.0 Controller
|
||||||
|
1462 7010 MS-6701 motherboard
|
||||||
1509 7002 Onboard USB Controller
|
1509 7002 Onboard USB Controller
|
||||||
7007 FireWire Controller
|
7007 FireWire Controller
|
||||||
|
1462 701d MS-6701
|
||||||
7012 AC'97 Sound Controller
|
7012 AC'97 Sound Controller
|
||||||
|
1462 7010 MS-6701 motherboard
|
||||||
15bd 1001 DFI 661FX motherboard
|
15bd 1001 DFI 661FX motherboard
|
||||||
# There are may be different modem codecs here (Intel537 compatible and incompatible)
|
# There are may be different modem codecs here (Intel537 compatible and incompatible)
|
||||||
7013 AC'97 Modem Controller
|
7013 AC'97 Modem Controller
|
||||||
|
@ -2252,10 +2377,13 @@
|
||||||
12ee PCI-X 2.0 Local Bus Adapter
|
12ee PCI-X 2.0 Local Bus Adapter
|
||||||
12f8 Broadcom BCM4306 802.11b/g Wireless LAN
|
12f8 Broadcom BCM4306 802.11b/g Wireless LAN
|
||||||
12fa BCM4306 802.11b/g Wireless LAN Controller
|
12fa BCM4306 802.11b/g Wireless LAN Controller
|
||||||
|
1302 RMP-3 Shared Memory Driver
|
||||||
|
1303 RMP-3 (Remote Management Processor)
|
||||||
2910 E2910A PCIBus Exerciser
|
2910 E2910A PCIBus Exerciser
|
||||||
2925 E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer
|
2925 E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer
|
||||||
3080 Pavilion ze2028ea
|
3080 Pavilion ze2028ea
|
||||||
3085 Realtek RTL8139/8139C/8139C+
|
3085 Realtek RTL8139/8139C/8139C+
|
||||||
|
30b5 Compaq Presario V3000Z
|
||||||
3220 Smart Array P600
|
3220 Smart Array P600
|
||||||
103c 3225 3 Gb/s SAS RAID
|
103c 3225 3 Gb/s SAS RAID
|
||||||
3230 Smart Array Controller
|
3230 Smart Array Controller
|
||||||
|
@ -2292,8 +2420,10 @@
|
||||||
80c5 nForce3 chipset motherboard [SK8N]
|
80c5 nForce3 chipset motherboard [SK8N]
|
||||||
80df v9520 Magic/T
|
80df v9520 Magic/T
|
||||||
815a A8N-SLI Motherboard nForce4 SATA
|
815a A8N-SLI Motherboard nForce4 SATA
|
||||||
|
8168 Realtek PCI-E Gigabit Ethernet Controller (RTL8111B)
|
||||||
8187 802.11a/b/g Wireless LAN Card
|
8187 802.11a/b/g Wireless LAN Card
|
||||||
8188 Tiger Hybrid TV Capture Device
|
8188 Tiger Hybrid TV Capture Device
|
||||||
|
81f4 EN7300TC512/TD/128M/A(C262G) [Graphics Card EN7300TC512]
|
||||||
1044 Adaptec (formerly DPT)
|
1044 Adaptec (formerly DPT)
|
||||||
1012 Domino RAID Engine
|
1012 Domino RAID Engine
|
||||||
a400 SmartCache/Raid I-IV Controller
|
a400 SmartCache/Raid I-IV Controller
|
||||||
|
@ -2444,6 +2574,7 @@
|
||||||
8023 TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
|
8023 TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
|
||||||
103c 088c NC8000 laptop
|
103c 088c NC8000 laptop
|
||||||
1043 808b K8N4-E Mainboard
|
1043 808b K8N4-E Mainboard
|
||||||
|
1043 815b P5W DH Deluxe Motherboard
|
||||||
8024 TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)
|
8024 TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)
|
||||||
8025 TSB82AA2 IEEE-1394b Link Layer Controller
|
8025 TSB82AA2 IEEE-1394b Link Layer Controller
|
||||||
1458 1000 GA-K8N Ultra-9 Mainboard
|
1458 1000 GA-K8N Ultra-9 Mainboard
|
||||||
|
@ -2483,14 +2614,17 @@
|
||||||
8038 PCI6515 SmartCard Controller
|
8038 PCI6515 SmartCard Controller
|
||||||
8039 PCIxx12 Cardbus Controller
|
8039 PCIxx12 Cardbus Controller
|
||||||
103c 309f nx9420
|
103c 309f nx9420
|
||||||
|
103c 30a1 NC2400
|
||||||
803a PCIxx12 OHCI Compliant IEEE 1394 Host Controller
|
803a PCIxx12 OHCI Compliant IEEE 1394 Host Controller
|
||||||
103c 309f nx9420
|
103c 309f nx9420
|
||||||
|
103c 30a1 NC2400
|
||||||
803b 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)
|
803b 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)
|
||||||
103c 309f nx9420
|
103c 309f nx9420
|
||||||
803c PCIxx12 SDA Standard Compliant SD Host Controller
|
803c PCIxx12 SDA Standard Compliant SD Host Controller
|
||||||
103c 309f nx9420
|
103c 309f nx9420
|
||||||
803d PCIxx12 GemCore based SmartCard controller
|
803d PCIxx12 GemCore based SmartCard controller
|
||||||
103c 309f nx9420
|
103c 309f nx9420
|
||||||
|
103c 30a1 NC2400
|
||||||
8201 PCI1620 Firmware Loading Function
|
8201 PCI1620 Firmware Loading Function
|
||||||
8204 PCI7410,7510,7610 PCI Firmware Loading Function
|
8204 PCI7410,7510,7610 PCI Firmware Loading Function
|
||||||
1028 0139 Latitude D400
|
1028 0139 Latitude D400
|
||||||
|
@ -2548,6 +2682,7 @@
|
||||||
ac42 PCI4451 PC card Cardbus Controller
|
ac42 PCI4451 PC card Cardbus Controller
|
||||||
1028 00e6 PCI4451 PC card CardBus Controller (Inspiron 8100)
|
1028 00e6 PCI4451 PC card CardBus Controller (Inspiron 8100)
|
||||||
ac44 PCI4510 PC card Cardbus Controller
|
ac44 PCI4510 PC card Cardbus Controller
|
||||||
|
1028 0149 Inspiron 5100
|
||||||
1028 0163 Latitude D505
|
1028 0163 Latitude D505
|
||||||
1028 0196 Inspiron 5160
|
1028 0196 Inspiron 5160
|
||||||
1071 8160 MIM2000
|
1071 8160 MIM2000
|
||||||
|
@ -2560,7 +2695,7 @@
|
||||||
1028 0139 Latitude D400
|
1028 0139 Latitude D400
|
||||||
1028 014e Latitude D800
|
1028 014e Latitude D800
|
||||||
ac50 PCI1410 PC card Cardbus Controller
|
ac50 PCI1410 PC card Cardbus Controller
|
||||||
ac51 PCI1420
|
ac51 PCI1420 PC card Cardbus Controller
|
||||||
0e11 004e Evo N600c
|
0e11 004e Evo N600c
|
||||||
1014 0148 ThinkPad A20m
|
1014 0148 ThinkPad A20m
|
||||||
1014 023b ThinkPad T23 (2647-4MG)
|
1014 023b ThinkPad T23 (2647-4MG)
|
||||||
|
@ -2588,6 +2723,7 @@
|
||||||
ac8d PCI 7620
|
ac8d PCI 7620
|
||||||
ac8e PCI7420 CardBus Controller
|
ac8e PCI7420 CardBus Controller
|
||||||
ac8f PCI7420/7620 Combo CardBus, 1394a-2000 OHCI and SD/MS-Pro Controller
|
ac8f PCI7420/7620 Combo CardBus, 1394a-2000 OHCI and SD/MS-Pro Controller
|
||||||
|
1028 018d Inspiron 700m
|
||||||
fe00 FireWire Host Controller
|
fe00 FireWire Host Controller
|
||||||
fe03 12C01A FireWire Host Controller
|
fe03 12C01A FireWire Host Controller
|
||||||
104d Sony Corporation
|
104d Sony Corporation
|
||||||
|
@ -2673,6 +2809,7 @@
|
||||||
ecc0 0072 Mona rev.2
|
ecc0 0072 Mona rev.2
|
||||||
18c0 MPC8265A/8266/8272
|
18c0 MPC8265A/8266/8272
|
||||||
18c1 MPC8271/MPC8272
|
18c1 MPC8271/MPC8272
|
||||||
|
3052 SM56 Data Fax Modem
|
||||||
3055 SM56 Data Fax Modem
|
3055 SM56 Data Fax Modem
|
||||||
3410 DSP56361 Digital Signal Processor
|
3410 DSP56361 Digital Signal Processor
|
||||||
ecc0 0050 Gina24 rev.0
|
ecc0 0050 Gina24 rev.0
|
||||||
|
@ -2721,6 +2858,7 @@
|
||||||
1059 Teknor Industrial Computers Inc
|
1059 Teknor Industrial Computers Inc
|
||||||
105a Promise Technology, Inc.
|
105a Promise Technology, Inc.
|
||||||
0d30 PDC20265 (FastTrak100 Lite/Ultra100)
|
0d30 PDC20265 (FastTrak100 Lite/Ultra100)
|
||||||
|
1043 8042 ASUS AV7266-E South Bridge Promise RAID
|
||||||
105a 4d33 Ultra100
|
105a 4d33 Ultra100
|
||||||
0d38 20263
|
0d38 20263
|
||||||
105a 4d39 Fasttrak66
|
105a 4d39 Fasttrak66
|
||||||
|
@ -2749,6 +2887,7 @@
|
||||||
4d30 PDC20267 (FastTrak100/Ultra100)
|
4d30 PDC20267 (FastTrak100/Ultra100)
|
||||||
105a 4d33 Ultra100
|
105a 4d33 Ultra100
|
||||||
105a 4d39 FastTrak100
|
105a 4d39 FastTrak100
|
||||||
|
8086 5744 S845WD1-E mainboard
|
||||||
4d33 20246
|
4d33 20246
|
||||||
105a 4d33 20246 IDE Controller
|
105a 4d33 20246 IDE Controller
|
||||||
4d38 PDC20262 (FastTrak66/Ultra66)
|
4d38 PDC20262 (FastTrak66/Ultra66)
|
||||||
|
@ -2777,7 +2916,12 @@
|
||||||
7275 PDC20277 (SBFastTrak133 Lite)
|
7275 PDC20277 (SBFastTrak133 Lite)
|
||||||
8002 SATAII150 SX8
|
8002 SATAII150 SX8
|
||||||
8350 80333 [SuperTrak EX8350/EX16350], 80331 [SuperTrak EX8300/EX16300]
|
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]
|
c350 80333 [SuperTrak EX12350]
|
||||||
|
e350 80333 [SuperTrak EX24350]
|
||||||
105b Foxconn International, Inc.
|
105b Foxconn International, Inc.
|
||||||
105c Wipro Infotech Limited
|
105c Wipro Infotech Limited
|
||||||
105d Number 9 Computer Company
|
105d Number 9 Computer Company
|
||||||
|
@ -2990,6 +3134,7 @@
|
||||||
0012 YMF-754 [DS-1E Audio Controller]
|
0012 YMF-754 [DS-1E Audio Controller]
|
||||||
1073 0012 DS-XG PCI Audio Codec
|
1073 0012 DS-XG PCI Audio Codec
|
||||||
0020 DS-1 Audio
|
0020 DS-1 Audio
|
||||||
|
1000 SW1000XG [XG Factory]
|
||||||
2000 DS2416 Digital Mixing Card
|
2000 DS2416 Digital Mixing Card
|
||||||
1073 2000 DS2416 Digital Mixing Card
|
1073 2000 DS2416 Digital Mixing Card
|
||||||
1074 NexGen Microsystems
|
1074 NexGen Microsystems
|
||||||
|
@ -3021,7 +3166,7 @@
|
||||||
103c 12dd 4Gb Fibre Channel [AB429A]
|
103c 12dd 4Gb Fibre Channel [AB429A]
|
||||||
2432 ISP2432-based 4Gb Fibre Channel to PCI Express HBA
|
2432 ISP2432-based 4Gb Fibre Channel to PCI Express HBA
|
||||||
3022 ISP4022-based Ethernet NIC
|
3022 ISP4022-based Ethernet NIC
|
||||||
3032 ISP4032-based Ethernet NIC
|
3032 ISP4032-based Ethernet IPv6 NIC
|
||||||
4010 ISP4010-based iSCSI TOE HBA
|
4010 ISP4010-based iSCSI TOE HBA
|
||||||
4022 ISP4022-based iSCSI TOE HBA
|
4022 ISP4022-based iSCSI TOE HBA
|
||||||
4032 ISP4032-based iSCSI TOE IPv6 HBA
|
4032 ISP4032-based iSCSI TOE IPv6 HBA
|
||||||
|
@ -3329,6 +3474,7 @@
|
||||||
13e9 0070 Win/TV (Audio Section)
|
13e9 0070 Win/TV (Audio Section)
|
||||||
144f 3000 MagicTView CPH060 - Audio
|
144f 3000 MagicTView CPH060 - Audio
|
||||||
1461 0002 Avermedia PCTV98 Audio Capture
|
1461 0002 Avermedia PCTV98 Audio Capture
|
||||||
|
1461 0003 UltraTV PCI 350
|
||||||
1461 0004 AVerTV WDM Audio Capture
|
1461 0004 AVerTV WDM Audio Capture
|
||||||
1461 0761 AVerTV DVB-T
|
1461 0761 AVerTV DVB-T
|
||||||
1461 0771 AverMedia AVerTV DVB-T 771
|
1461 0771 AverMedia AVerTV DVB-T 771
|
||||||
|
@ -3417,6 +3563,8 @@
|
||||||
4002 TIO-CE PCI Express Port
|
4002 TIO-CE PCI Express Port
|
||||||
8001 O2 1394
|
8001 O2 1394
|
||||||
8002 G-net NT
|
8002 G-net NT
|
||||||
|
8010 Broadcom e-net [SGI IO9/IO10 BaseIO]
|
||||||
|
8018 Broadcom e-net [SGI A330 Server BaseIO]
|
||||||
10aa ACC Microelectronics
|
10aa ACC Microelectronics
|
||||||
0000 ACCM 2188
|
0000 ACCM 2188
|
||||||
10ab Digicom
|
10ab Digicom
|
||||||
|
@ -3468,6 +3616,7 @@
|
||||||
10b5 2978 SH ARC-PCIu SOHARD ARCNET card
|
10b5 2978 SH ARC-PCIu SOHARD ARCNET card
|
||||||
10b5 3025 Alpermann+Velte PCL PCI L (3V/5V): Timecode Reader Board
|
10b5 3025 Alpermann+Velte PCL PCI L (3V/5V): Timecode Reader Board
|
||||||
10b5 3068 Alpermann+Velte PCL PCI HD (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 3136 4xS0-ISDN PCI Adapter
|
||||||
1397 3137 S2M-E1-ISDN PCI Adapter
|
1397 3137 S2M-E1-ISDN PCI Adapter
|
||||||
1518 0200 Kontron ThinkIO-C
|
1518 0200 Kontron ThinkIO-C
|
||||||
|
@ -3522,6 +3671,7 @@
|
||||||
10b5 2844 Innes Corp TVS Encoder card
|
10b5 2844 Innes Corp TVS Encoder card
|
||||||
12c7 4001 Intel Dialogic DM/V960-4T1 PCI
|
12c7 4001 Intel Dialogic DM/V960-4T1 PCI
|
||||||
12d9 0002 PCI Prosody Card rev 1.5
|
12d9 0002 PCI Prosody Card rev 1.5
|
||||||
|
14b4 d100 Dektec DTA-100
|
||||||
16df 0011 PIKA PrimeNet MM PCI
|
16df 0011 PIKA PrimeNet MM PCI
|
||||||
16df 0012 PIKA PrimeNet MM cPCI 8
|
16df 0012 PIKA PrimeNet MM cPCI 8
|
||||||
16df 0013 PIKA PrimeNet MM cPCI 8 (without CAS Signaling)
|
16df 0013 PIKA PrimeNet MM cPCI 8 (without CAS Signaling)
|
||||||
|
@ -6060,6 +6210,7 @@
|
||||||
0140 HT2100 PCI-Express Bridge
|
0140 HT2100 PCI-Express Bridge
|
||||||
0141 HT2100 PCI-Express Bridge
|
0141 HT2100 PCI-Express Bridge
|
||||||
0142 HT2100 PCI-Express Bridge
|
0142 HT2100 PCI-Express Bridge
|
||||||
|
0144 HT2100 PCI-Express Bridge
|
||||||
0200 OSB4 South Bridge
|
0200 OSB4 South Bridge
|
||||||
0201 CSB5 South Bridge
|
0201 CSB5 South Bridge
|
||||||
4c53 1080 CT8 mainboard
|
4c53 1080 CT8 mainboard
|
||||||
|
@ -10413,9 +10564,9 @@
|
||||||
0962 80960RM [i960RM Bridge]
|
0962 80960RM [i960RM Bridge]
|
||||||
0964 80960RP [i960 RP Microprocessor/Bridge]
|
0964 80960RP [i960 RP Microprocessor/Bridge]
|
||||||
1000 82542 Gigabit Ethernet Controller
|
1000 82542 Gigabit Ethernet Controller
|
||||||
0e11 b0df NC1632 Gigabit Ethernet Adapter (1000-SX)
|
0e11 b0df NC6132 Gigabit Ethernet Adapter (1000-SX)
|
||||||
0e11 b0e0 NC1633 Gigabit Ethernet Adapter (1000-LX)
|
0e11 b0e0 NC6133 Gigabit Ethernet Adapter (1000-LX)
|
||||||
0e11 b123 NC1634 Gigabit Ethernet Adapter (1000-SX)
|
0e11 b123 NC6134 Gigabit Ethernet Adapter (1000-LX)
|
||||||
1014 0119 Netfinity Gigabit Ethernet SX Adapter
|
1014 0119 Netfinity Gigabit Ethernet SX Adapter
|
||||||
8086 1000 PRO/1000 Gigabit Server Adapter
|
8086 1000 PRO/1000 Gigabit Server Adapter
|
||||||
1001 82543GC Gigabit Ethernet Controller (Fiber)
|
1001 82543GC Gigabit Ethernet Controller (Fiber)
|
||||||
|
@ -10834,6 +10985,8 @@
|
||||||
8086 0006 82557 10/100 with Wake on LAN
|
8086 0006 82557 10/100 with Wake on LAN
|
||||||
8086 0007 82558 10/100 Adapter
|
8086 0007 82558 10/100 Adapter
|
||||||
8086 0008 82558 10/100 with Wake on LAN
|
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 000a EtherExpress PRO/100+ Management Adapter
|
||||||
8086 000b EtherExpress PRO/100+
|
8086 000b EtherExpress PRO/100+
|
||||||
8086 000c EtherExpress PRO/100+ Management Adapter
|
8086 000c EtherExpress PRO/100+ Management Adapter
|
||||||
|
@ -10909,6 +11062,7 @@
|
||||||
8086 3010 EtherExpress PRO/100 S Network Connection
|
8086 3010 EtherExpress PRO/100 S Network Connection
|
||||||
8086 3011 EtherExpress PRO/100 S Network Connection
|
8086 3011 EtherExpress PRO/100 S Network Connection
|
||||||
8086 3012 EtherExpress PRO/100 Network Connection
|
8086 3012 EtherExpress PRO/100 Network Connection
|
||||||
|
8086 301a S845WD1-E mainboard
|
||||||
8086 3411 SDS2 Mainboard
|
8086 3411 SDS2 Mainboard
|
||||||
122d 430FX - 82437FX TSC [Triton I]
|
122d 430FX - 82437FX TSC [Triton I]
|
||||||
122e 82371FB PIIX ISA [Triton I]
|
122e 82371FB PIIX ISA [Triton I]
|
||||||
|
@ -10996,6 +11150,7 @@
|
||||||
2426 82801AB AC'97 Modem
|
2426 82801AB AC'97 Modem
|
||||||
2428 82801AB PCI Bridge
|
2428 82801AB PCI Bridge
|
||||||
2440 82801BA ISA Bridge (LPC)
|
2440 82801BA ISA Bridge (LPC)
|
||||||
|
8086 5744 S845WD1-E
|
||||||
2442 82801BA/BAM USB (Hub #1)
|
2442 82801BA/BAM USB (Hub #1)
|
||||||
1014 01c6 Netvista A40/A40p
|
1014 01c6 Netvista A40/A40p
|
||||||
1025 1016 Travelmate 612 TX
|
1025 1016 Travelmate 612 TX
|
||||||
|
@ -11006,6 +11161,7 @@
|
||||||
147b 0507 TH7II-RAID
|
147b 0507 TH7II-RAID
|
||||||
8086 4532 D815EEA2 mainboard
|
8086 4532 D815EEA2 mainboard
|
||||||
8086 4557 D815EGEW Mainboard
|
8086 4557 D815EGEW Mainboard
|
||||||
|
8086 5744 S845WD1-E mainboard
|
||||||
2443 82801BA/BAM SMBus
|
2443 82801BA/BAM SMBus
|
||||||
1014 01c6 Netvista A40/A40p
|
1014 01c6 Netvista A40/A40p
|
||||||
1025 1016 Travelmate 612 TX
|
1025 1016 Travelmate 612 TX
|
||||||
|
@ -11016,6 +11172,7 @@
|
||||||
147b 0507 TH7II-RAID
|
147b 0507 TH7II-RAID
|
||||||
8086 4532 D815EEA2 mainboard
|
8086 4532 D815EEA2 mainboard
|
||||||
8086 4557 D815EGEW Mainboard
|
8086 4557 D815EGEW Mainboard
|
||||||
|
8086 5744 S845WD1-E mainboard
|
||||||
2444 82801BA/BAM USB (Hub #2)
|
2444 82801BA/BAM USB (Hub #2)
|
||||||
1025 1016 Travelmate 612 TX
|
1025 1016 Travelmate 612 TX
|
||||||
1028 00c7 Dimension 8100
|
1028 00c7 Dimension 8100
|
||||||
|
@ -11024,6 +11181,7 @@
|
||||||
104d 80df Vaio PCG-FX403
|
104d 80df Vaio PCG-FX403
|
||||||
147b 0507 TH7II-RAID
|
147b 0507 TH7II-RAID
|
||||||
8086 4532 D815EEA2 mainboard
|
8086 4532 D815EEA2 mainboard
|
||||||
|
8086 5744 S845WD1-E mainboard
|
||||||
2445 82801BA/BAM AC'97 Audio
|
2445 82801BA/BAM AC'97 Audio
|
||||||
0e11 000b Compaq Deskpro EN Audio
|
0e11 000b Compaq Deskpro EN Audio
|
||||||
0e11 0088 Evo D500
|
0e11 0088 Evo D500
|
||||||
|
@ -11082,6 +11240,7 @@
|
||||||
147b 0507 TH7II-RAID
|
147b 0507 TH7II-RAID
|
||||||
8086 4532 D815EEA2 mainboard
|
8086 4532 D815EEA2 mainboard
|
||||||
8086 4557 D815EGEW Mainboard
|
8086 4557 D815EGEW Mainboard
|
||||||
|
8086 5744 S845WD1-E mainboard
|
||||||
244c 82801BAM ISA Bridge (LPC)
|
244c 82801BAM ISA Bridge (LPC)
|
||||||
244e 82801 PCI Bridge
|
244e 82801 PCI Bridge
|
||||||
1014 0267 NetVista A30p
|
1014 0267 NetVista A30p
|
||||||
|
@ -11174,6 +11333,7 @@
|
||||||
103c 0890 NC6000 laptop
|
103c 0890 NC6000 laptop
|
||||||
103c 08b0 tc1100 tablet
|
103c 08b0 tc1100 tablet
|
||||||
1071 8160 MIM2000
|
1071 8160 MIM2000
|
||||||
|
144d c00c P30/P35 notebook
|
||||||
1458 24c2 GA-8PE667 Ultra
|
1458 24c2 GA-8PE667 Ultra
|
||||||
1462 5800 845PE Max (MS-6580)
|
1462 5800 845PE Max (MS-6580)
|
||||||
1734 1004 D1451 Mainboard (SCENIC N300, i845GV)
|
1734 1004 D1451 Mainboard (SCENIC N300, i845GV)
|
||||||
|
@ -11742,17 +11902,21 @@
|
||||||
103c 099c NX6110/NC6120
|
103c 099c NX6110/NC6120
|
||||||
1043 1881 GMA 900 915GM Integrated Graphics
|
1043 1881 GMA 900 915GM Integrated Graphics
|
||||||
27a0 Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub
|
27a0 Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub
|
||||||
|
103c 30a1 NC2400
|
||||||
17aa 2017 Thinkpad R60e model 0657
|
17aa 2017 Thinkpad R60e model 0657
|
||||||
27a1 Mobile 945GM/PM/GMS/940GML and 945GT Express PCI Express Root Port
|
27a1 Mobile 945GM/PM/GMS/940GML and 945GT Express PCI Express Root Port
|
||||||
27a2 Mobile 945GM/GMS/940GML Express Integrated Graphics Controller
|
27a2 Mobile 945GM/GMS/940GML Express Integrated Graphics Controller
|
||||||
|
103c 30a1 NC2400
|
||||||
17aa 201a Thinkpad R60e model 0657
|
17aa 201a Thinkpad R60e model 0657
|
||||||
27a6 Mobile 945GM/GMS/940GML Express Integrated Graphics Controller
|
27a6 Mobile 945GM/GMS/940GML Express Integrated Graphics Controller
|
||||||
|
103c 30a1 NC2400
|
||||||
17aa 201a Thinkpad R60e model 0657
|
17aa 201a Thinkpad R60e model 0657
|
||||||
27b0 82801GH (ICH7DH) LPC Interface Bridge
|
27b0 82801GH (ICH7DH) LPC Interface Bridge
|
||||||
27b8 82801GB/GR (ICH7 Family) LPC Interface Bridge
|
27b8 82801GB/GR (ICH7 Family) LPC Interface Bridge
|
||||||
107b 5048 E4500
|
107b 5048 E4500
|
||||||
8086 544e DeskTop Board D945GTP
|
8086 544e DeskTop Board D945GTP
|
||||||
27b9 82801GBM (ICH7-M) LPC Interface Bridge
|
27b9 82801GBM (ICH7-M) LPC Interface Bridge
|
||||||
|
103c 30a1 NC2400
|
||||||
10f7 8338 Panasonic CF-Y5 laptop
|
10f7 8338 Panasonic CF-Y5 laptop
|
||||||
17aa 2009 ThinkPad T60/R60 series
|
17aa 2009 ThinkPad T60/R60 series
|
||||||
27bd 82801GHM (ICH7-M DH) LPC Interface Bridge
|
27bd 82801GHM (ICH7-M DH) LPC Interface Bridge
|
||||||
|
@ -11766,22 +11930,27 @@
|
||||||
17aa 200d Thinkpad R60e model 0657
|
17aa 200d Thinkpad R60e model 0657
|
||||||
27c6 82801GHM (ICH7-M DH) Serial ATA Storage Controller RAID
|
27c6 82801GHM (ICH7-M DH) Serial ATA Storage Controller RAID
|
||||||
27c8 82801G (ICH7 Family) USB UHCI #1
|
27c8 82801G (ICH7 Family) USB UHCI #1
|
||||||
|
103c 30a1 NC2400
|
||||||
107b 5048 E4500
|
107b 5048 E4500
|
||||||
17aa 200a ThinkPad T60/R60 series
|
17aa 200a ThinkPad T60/R60 series
|
||||||
8086 544e DeskTop Board D945GTP
|
8086 544e DeskTop Board D945GTP
|
||||||
27c9 82801G (ICH7 Family) USB UHCI #2
|
27c9 82801G (ICH7 Family) USB UHCI #2
|
||||||
|
103c 30a1 NC2400
|
||||||
107b 5048 E4500
|
107b 5048 E4500
|
||||||
17aa 200a ThinkPad T60/R60 series
|
17aa 200a ThinkPad T60/R60 series
|
||||||
8086 544e DeskTop Board D945GTP
|
8086 544e DeskTop Board D945GTP
|
||||||
27ca 82801G (ICH7 Family) USB UHCI #3
|
27ca 82801G (ICH7 Family) USB UHCI #3
|
||||||
|
103c 30a1 NC2400
|
||||||
107b 5048 E4500
|
107b 5048 E4500
|
||||||
17aa 200a ThinkPad T60/R60 series
|
17aa 200a ThinkPad T60/R60 series
|
||||||
8086 544e DeskTop Board D945GTP
|
8086 544e DeskTop Board D945GTP
|
||||||
27cb 82801G (ICH7 Family) USB UHCI #4
|
27cb 82801G (ICH7 Family) USB UHCI #4
|
||||||
|
103c 30a1 NC2400
|
||||||
107b 5048 E4500
|
107b 5048 E4500
|
||||||
17aa 200a ThinkPad T60/R60 series
|
17aa 200a ThinkPad T60/R60 series
|
||||||
8086 544e DeskTop Board D945GTP
|
8086 544e DeskTop Board D945GTP
|
||||||
27cc 82801G (ICH7 Family) USB2 EHCI Controller
|
27cc 82801G (ICH7 Family) USB2 EHCI Controller
|
||||||
|
103c 30a1 NC2400
|
||||||
17aa 200b ThinkPad T60/R60 series
|
17aa 200b ThinkPad T60/R60 series
|
||||||
8086 544e DeskTop Board D945GTP
|
8086 544e DeskTop Board D945GTP
|
||||||
27d0 82801G (ICH7 Family) PCI Express Port 1
|
27d0 82801G (ICH7 Family) PCI Express Port 1
|
||||||
|
@ -11789,10 +11958,12 @@
|
||||||
27d4 82801G (ICH7 Family) PCI Express Port 3
|
27d4 82801G (ICH7 Family) PCI Express Port 3
|
||||||
27d6 82801G (ICH7 Family) PCI Express Port 4
|
27d6 82801G (ICH7 Family) PCI Express Port 4
|
||||||
27d8 82801G (ICH7 Family) High Definition Audio Controller
|
27d8 82801G (ICH7 Family) High Definition Audio Controller
|
||||||
|
103c 30a1 NC2400
|
||||||
107b 5048 E4500
|
107b 5048 E4500
|
||||||
10f7 8338 Panasonic CF-Y5 laptop
|
10f7 8338 Panasonic CF-Y5 laptop
|
||||||
1179 ff31 Toshiba America Information Systems:AC97 Data Fax SoftModem with SmartCP
|
1179 ff31 Toshiba America Information Systems:AC97 Data Fax SoftModem with SmartCP
|
||||||
152d 0753 Softmodem
|
152d 0753 Softmodem
|
||||||
|
1734 10ad Conexant softmodem SmartCP
|
||||||
17aa 2010 ThinkPad T60/R60 series
|
17aa 2010 ThinkPad T60/R60 series
|
||||||
27da 82801G (ICH7 Family) SMBus Controller
|
27da 82801G (ICH7 Family) SMBus Controller
|
||||||
10f7 8338 Panasonic CF-Y5 laptop
|
10f7 8338 Panasonic CF-Y5 laptop
|
||||||
|
@ -11803,6 +11974,7 @@
|
||||||
27dd 82801G (ICH7 Family) AC'97 Modem Controller
|
27dd 82801G (ICH7 Family) AC'97 Modem Controller
|
||||||
27de 82801G (ICH7 Family) AC'97 Audio Controller
|
27de 82801G (ICH7 Family) AC'97 Audio Controller
|
||||||
27df 82801G (ICH7 Family) IDE Controller
|
27df 82801G (ICH7 Family) IDE Controller
|
||||||
|
103c 30a1 NC2400
|
||||||
107b 5048 E4500
|
107b 5048 E4500
|
||||||
10f7 8338 Panasonic CF-Y5 laptop
|
10f7 8338 Panasonic CF-Y5 laptop
|
||||||
17aa 200c Thinkpad R60e model 0657
|
17aa 200c Thinkpad R60e model 0657
|
||||||
|
@ -11846,6 +12018,34 @@
|
||||||
284b 82801H (ICH8 Family) HD Audio Controller
|
284b 82801H (ICH8 Family) HD Audio Controller
|
||||||
284f 82801H (ICH8 Family) Thermal Reporting Device
|
284f 82801H (ICH8 Family) Thermal Reporting Device
|
||||||
2850 Mobile IDE Controller
|
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
|
2970 82946GZ/PL/GL Memory Controller Hub
|
||||||
2971 82946GZ/PL/GL PCI Express Root Port
|
2971 82946GZ/PL/GL PCI Express Root Port
|
||||||
2972 82946GZ/GL Integrated Graphics Controller
|
2972 82946GZ/GL Integrated Graphics Controller
|
||||||
|
@ -11873,6 +12073,37 @@
|
||||||
29a5 82P965/G965 HECI Controller
|
29a5 82P965/G965 HECI Controller
|
||||||
29a6 82P965/G965 PT IDER Controller
|
29a6 82P965/G965 PT IDER Controller
|
||||||
29a7 82P965/G965 KT 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
|
2a00 Mobile Memory Controller Hub
|
||||||
2a01 Mobile PCI Express Root Port
|
2a01 Mobile PCI Express Root Port
|
||||||
2a02 Mobile Integrated Graphics Controller
|
2a02 Mobile Integrated Graphics Controller
|
||||||
|
@ -11978,7 +12209,42 @@
|
||||||
35b6 3100 Chipset PCI Express Port A
|
35b6 3100 Chipset PCI Express Port A
|
||||||
35b7 3100 Chipset PCI Express Port A1
|
35b7 3100 Chipset PCI Express Port A1
|
||||||
35c8 3100 Extended Configuration Test Overflow Registers
|
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
|
4220 PRO/Wireless 2200BG Network Connection
|
||||||
|
2731 8086 WLAN-Adapter
|
||||||
|
8086 2731 Samsung P35 integrated WLAN
|
||||||
4222 PRO/Wireless 3945ABG Network Connection
|
4222 PRO/Wireless 3945ABG Network Connection
|
||||||
8086 1005 PRO/Wireless 3945BG Network Connection
|
8086 1005 PRO/Wireless 3945BG Network Connection
|
||||||
8086 1034 PRO/Wireless 3945BG Network Connection
|
8086 1034 PRO/Wireless 3945BG Network Connection
|
||||||
|
@ -11994,6 +12260,23 @@
|
||||||
5201 EtherExpress PRO/100 Intelligent Server
|
5201 EtherExpress PRO/100 Intelligent Server
|
||||||
8086 0001 EtherExpress PRO/100 Server Ethernet Adapter
|
8086 0001 EtherExpress PRO/100 Server Ethernet Adapter
|
||||||
530d 80310 IOP [IO Processor]
|
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]
|
7000 82371SB PIIX3 ISA [Natoma/Triton II]
|
||||||
7010 82371SB PIIX3 IDE [Natoma/Triton II]
|
7010 82371SB PIIX3 IDE [Natoma/Triton II]
|
||||||
7020 82371SB PIIX3 USB [Natoma/Triton II]
|
7020 82371SB PIIX3 USB [Natoma/Triton II]
|
||||||
|
@ -12092,6 +12375,7 @@
|
||||||
9622 Integrated RAID
|
9622 Integrated RAID
|
||||||
9641 Integrated RAID
|
9641 Integrated RAID
|
||||||
96a1 Integrated RAID
|
96a1 Integrated RAID
|
||||||
|
a620 6400/6402 Advanced Memory Buffer (AMB)
|
||||||
b152 21152 PCI-to-PCI Bridge
|
b152 21152 PCI-to-PCI Bridge
|
||||||
# observed, and documented in Intel revision note; new mask of 1011:0026
|
# observed, and documented in Intel revision note; new mask of 1011:0026
|
||||||
b154 21154 PCI-to-PCI Bridge
|
b154 21154 PCI-to-PCI Bridge
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2129,7 +2129,7 @@ static void x86emuOp2_bsf(u8 X86EMU_UNUSED(op2))
|
||||||
uint srcoffset;
|
uint srcoffset;
|
||||||
|
|
||||||
START_OF_INSTR();
|
START_OF_INSTR();
|
||||||
DECODE_PRINTF("BSF\n");
|
DECODE_PRINTF("BSF\t");
|
||||||
FETCH_DECODE_MODRM(mod, rh, rl);
|
FETCH_DECODE_MODRM(mod, rh, rl);
|
||||||
switch(mod) {
|
switch(mod) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -2209,25 +2209,25 @@ static void x86emuOp2_bsf(u8 X86EMU_UNUSED(op2))
|
||||||
break;
|
break;
|
||||||
case 3: /* register to register */
|
case 3: /* register to register */
|
||||||
if (M.x86.mode & SYSMODE_PREFIX_DATA) {
|
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(",");
|
DECODE_PRINTF(",");
|
||||||
dstreg = DECODE_RM_LONG_REGISTER(rh);
|
dstreg = DECODE_RM_LONG_REGISTER(rh);
|
||||||
TRACE_AND_STEP();
|
TRACE_AND_STEP();
|
||||||
CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
|
CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
|
||||||
for(*dstreg = 0; *dstreg < 32; (*dstreg)++)
|
for(*dstreg = 0; *dstreg < 32; (*dstreg)++)
|
||||||
if ((*srcreg >> *dstreg) & 1) break;
|
if ((srcval >> *dstreg) & 1) break;
|
||||||
} else {
|
} else {
|
||||||
u16 *srcreg, *dstreg;
|
u16 srcval, *dstreg;
|
||||||
|
|
||||||
srcreg = DECODE_RM_WORD_REGISTER(rl);
|
srcval = *DECODE_RM_WORD_REGISTER(rl);
|
||||||
DECODE_PRINTF(",");
|
DECODE_PRINTF(",");
|
||||||
dstreg = DECODE_RM_WORD_REGISTER(rh);
|
dstreg = DECODE_RM_WORD_REGISTER(rh);
|
||||||
TRACE_AND_STEP();
|
TRACE_AND_STEP();
|
||||||
CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
|
CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
|
||||||
for(*dstreg = 0; *dstreg < 16; (*dstreg)++)
|
for(*dstreg = 0; *dstreg < 16; (*dstreg)++)
|
||||||
if ((*srcreg >> *dstreg) & 1) break;
|
if ((srcval >> *dstreg) & 1) break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2245,7 +2245,7 @@ static void x86emuOp2_bsr(u8 X86EMU_UNUSED(op2))
|
||||||
uint srcoffset;
|
uint srcoffset;
|
||||||
|
|
||||||
START_OF_INSTR();
|
START_OF_INSTR();
|
||||||
DECODE_PRINTF("BSF\n");
|
DECODE_PRINTF("BSR\t");
|
||||||
FETCH_DECODE_MODRM(mod, rh, rl);
|
FETCH_DECODE_MODRM(mod, rh, rl);
|
||||||
switch(mod) {
|
switch(mod) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -2325,25 +2325,25 @@ static void x86emuOp2_bsr(u8 X86EMU_UNUSED(op2))
|
||||||
break;
|
break;
|
||||||
case 3: /* register to register */
|
case 3: /* register to register */
|
||||||
if (M.x86.mode & SYSMODE_PREFIX_DATA) {
|
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(",");
|
DECODE_PRINTF(",");
|
||||||
dstreg = DECODE_RM_LONG_REGISTER(rh);
|
dstreg = DECODE_RM_LONG_REGISTER(rh);
|
||||||
TRACE_AND_STEP();
|
TRACE_AND_STEP();
|
||||||
CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
|
CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
|
||||||
for(*dstreg = 31; *dstreg > 0; (*dstreg)--)
|
for(*dstreg = 31; *dstreg > 0; (*dstreg)--)
|
||||||
if ((*srcreg >> *dstreg) & 1) break;
|
if ((srcval >> *dstreg) & 1) break;
|
||||||
} else {
|
} else {
|
||||||
u16 *srcreg, *dstreg;
|
u16 srcval, *dstreg;
|
||||||
|
|
||||||
srcreg = DECODE_RM_WORD_REGISTER(rl);
|
srcval = *DECODE_RM_WORD_REGISTER(rl);
|
||||||
DECODE_PRINTF(",");
|
DECODE_PRINTF(",");
|
||||||
dstreg = DECODE_RM_WORD_REGISTER(rh);
|
dstreg = DECODE_RM_WORD_REGISTER(rh);
|
||||||
TRACE_AND_STEP();
|
TRACE_AND_STEP();
|
||||||
CONDITIONAL_SET_FLAG(*srcreg == 0, F_ZF);
|
CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);
|
||||||
for(*dstreg = 15; *dstreg > 0; (*dstreg)--)
|
for(*dstreg = 15; *dstreg > 0; (*dstreg)--)
|
||||||
if ((*srcreg >> *dstreg) & 1) break;
|
if ((srcval >> *dstreg) & 1) break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,128 +27,156 @@ libxf1bppgen_a_SOURCES = \
|
||||||
mfbtileC.c \
|
mfbtileC.c \
|
||||||
mfbtileG.c
|
mfbtileG.c
|
||||||
|
|
||||||
DISTCLEANFILES = $(libxf1bppgen_a_SOURCES)
|
|
||||||
|
|
||||||
libxf1bppmfb_a_SOURCES = \
|
libxf1bppmfb_a_SOURCES = \
|
||||||
$(top_srcdir)/mfb/maskbits.c \
|
maskbits.c \
|
||||||
$(top_srcdir)/mfb/mfbbitblt.c \
|
mfbbitblt.c \
|
||||||
$(top_srcdir)/mfb/mfbbres.c \
|
mfbbres.c \
|
||||||
$(top_srcdir)/mfb/mfbbresd.c \
|
mfbbresd.c \
|
||||||
$(top_srcdir)/mfb/mfbbstore.c \
|
mfbbstore.c \
|
||||||
$(top_srcdir)/mfb/mfbclip.c \
|
mfbclip.c \
|
||||||
$(top_srcdir)/mfb/mfbcmap.c \
|
mfbcmap.c \
|
||||||
$(top_srcdir)/mfb/mfbfillarc.c \
|
mfbfillarc.c \
|
||||||
$(top_srcdir)/mfb/mfbfillrct.c \
|
mfbfillrct.c \
|
||||||
$(top_srcdir)/mfb/mfbfillsp.c \
|
mfbfillsp.c \
|
||||||
$(top_srcdir)/mfb/mfbfont.c \
|
mfbfont.c \
|
||||||
$(top_srcdir)/mfb/mfbgc.c \
|
mfbgc.c \
|
||||||
$(top_srcdir)/mfb/mfbgetsp.c \
|
mfbgetsp.c \
|
||||||
$(top_srcdir)/mfb/mfbhrzvert.c \
|
mfbhrzvert.c \
|
||||||
$(top_srcdir)/mfb/mfbimage.c \
|
mfbimage.c \
|
||||||
$(top_srcdir)/mfb/mfbline.c \
|
mfbline.c \
|
||||||
$(top_srcdir)/mfb/mfbmisc.c \
|
mfbmisc.c \
|
||||||
$(top_srcdir)/mfb/mfbpixmap.c \
|
mfbpixmap.c \
|
||||||
$(top_srcdir)/mfb/mfbpntwin.c \
|
mfbpntwin.c \
|
||||||
$(top_srcdir)/mfb/mfbpolypnt.c \
|
mfbpolypnt.c \
|
||||||
$(top_srcdir)/mfb/mfbpushpxl.c \
|
mfbpushpxl.c \
|
||||||
$(top_srcdir)/mfb/mfbscrclse.c \
|
mfbscrclse.c \
|
||||||
$(top_srcdir)/mfb/mfbscrinit.c \
|
mfbscrinit.c \
|
||||||
$(top_srcdir)/mfb/mfbsetsp.c \
|
mfbsetsp.c \
|
||||||
$(top_srcdir)/mfb/mfbwindow.c \
|
mfbwindow.c \
|
||||||
$(top_srcdir)/mfb/mfbzerarc.c \
|
mfbzerarc.c
|
||||||
|
|
||||||
|
BUILT_SOURCES = $(libxf1bppgen_a_SOURCES) $(libxf1bppgen_a_SOURCES)
|
||||||
|
|
||||||
|
libxf1bpp_la_SOURCES = $(libxf1bppmfb_a_SOURCES) $(libxf1bppgen_a_SOURCES) \
|
||||||
mfbmodule.c
|
mfbmodule.c
|
||||||
|
|
||||||
libxf1bpp_la_SOURCES = $(libxf1bppmfb_a_SOURCES) $(libxf1bppgen_a_SOURCES)
|
AM_CFLAGS = -DXF86MONO $(DIX_CFLAGS) $(XORG_CFLAGS)
|
||||||
|
|
||||||
AM_CFLAGS = -DXF86MONO -include mfbmap.h $(DIX_CFLAGS) $(XORG_CFLAGS)
|
|
||||||
INCLUDES = $(XORG_INCS) -I$(top_srcdir)/mfb
|
INCLUDES = $(XORG_INCS) -I$(top_srcdir)/mfb
|
||||||
|
|
||||||
mfbseg.c:
|
mfbseg.c:
|
||||||
echo "#define POLYSEGMENT" > $@
|
echo "#define POLYSEGMENT" > $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbline.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbline.c\"" >> $@
|
||||||
mfbpgbwht.c:
|
mfbpgbwht.c:
|
||||||
echo "#define MFBPOLYGLYPHBLT xf1bppPolyGlyphBltWhite" > $@
|
echo "#define MFBPOLYGLYPHBLT xf1bppPolyGlyphBltWhite" > $@
|
||||||
echo "#define OPEQ |=" >> $@
|
echo "#define OPEQ |=" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbplygblt.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbplygblt.c\"" >> $@
|
||||||
mfbpgbblak.c:
|
mfbpgbblak.c:
|
||||||
echo "#define MFBPOLYGLYPHBLT xf1bppPolyGlyphBltBlack" > $@
|
echo "#define MFBPOLYGLYPHBLT xf1bppPolyGlyphBltBlack" > $@
|
||||||
echo "#define OPEQ &=~" >> $@
|
echo "#define OPEQ &=~" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbplygblt.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbplygblt.c\"" >> $@
|
||||||
mfbpgbinv.c:
|
mfbpgbinv.c:
|
||||||
echo "#define MFBPOLYGLYPHBLT xf1bppPolyGlyphBltInvert" > $@
|
echo "#define MFBPOLYGLYPHBLT xf1bppPolyGlyphBltInvert" > $@
|
||||||
echo "#define OPEQ ^=" >> $@
|
echo "#define OPEQ ^=" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbplygblt.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbplygblt.c\"" >> $@
|
||||||
mfbigbwht.c:
|
mfbigbwht.c:
|
||||||
echo "#define MFBIMAGEGLYPHBLT xf1bppImageGlyphBltWhite" > $@
|
echo "#define MFBIMAGEGLYPHBLT xf1bppImageGlyphBltWhite" > $@
|
||||||
echo "#define OPEQ |=" >> $@
|
echo "#define OPEQ |=" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbimggblt.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbimggblt.c\"" >> $@
|
||||||
mfbigbblak.c:
|
mfbigbblak.c:
|
||||||
echo "#define MFBIMAGEGLYPHBLT xf1bppImageGlyphBltBlack" > $@
|
echo "#define MFBIMAGEGLYPHBLT xf1bppImageGlyphBltBlack" > $@
|
||||||
echo "#define OPEQ &=~" >> $@
|
echo "#define OPEQ &=~" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbimggblt.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbimggblt.c\"" >> $@
|
||||||
mfbpawhite.c:
|
mfbpawhite.c:
|
||||||
echo "#define MFBSOLIDFILLAREA xf1bppSolidWhiteArea" > $@
|
echo "#define MFBSOLIDFILLAREA xf1bppSolidWhiteArea" > $@
|
||||||
echo "#define MFBSTIPPLEFILLAREA xf1bppStippleWhiteArea" >> $@
|
echo "#define MFBSTIPPLEFILLAREA xf1bppStippleWhiteArea" >> $@
|
||||||
echo "#define OPEQ |=" >> $@
|
echo "#define OPEQ |=" >> $@
|
||||||
echo "#define EQWHOLEWORD =~0" >> $@
|
echo "#define EQWHOLEWORD =~0" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbpntarea.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbpntarea.c\"" >> $@
|
||||||
mfbpablack.c:
|
mfbpablack.c:
|
||||||
echo "#define MFBSOLIDFILLAREA xf1bppSolidBlackArea" > $@
|
echo "#define MFBSOLIDFILLAREA xf1bppSolidBlackArea" > $@
|
||||||
echo "#define MFBSTIPPLEFILLAREA xf1bppStippleBlackArea" >> $@
|
echo "#define MFBSTIPPLEFILLAREA xf1bppStippleBlackArea" >> $@
|
||||||
echo "#define OPEQ &=~" >> $@
|
echo "#define OPEQ &=~" >> $@
|
||||||
echo "#define EQWHOLEWORD =0" >> $@
|
echo "#define EQWHOLEWORD =0" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbpntarea.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbpntarea.c\"" >> $@
|
||||||
mfbpainv.c:
|
mfbpainv.c:
|
||||||
echo "#define MFBSOLIDFILLAREA xf1bppSolidInvertArea" > $@
|
echo "#define MFBSOLIDFILLAREA xf1bppSolidInvertArea" > $@
|
||||||
echo "#define MFBSTIPPLEFILLAREA xf1bppStippleInvertArea" >> $@
|
echo "#define MFBSTIPPLEFILLAREA xf1bppStippleInvertArea" >> $@
|
||||||
echo "#define OPEQ ^=" >> $@
|
echo "#define OPEQ ^=" >> $@
|
||||||
echo "#define EQWHOLEWORD ^=~0" >> $@
|
echo "#define EQWHOLEWORD ^=~0" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbpntarea.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbpntarea.c\"" >> $@
|
||||||
mfbtewhite.c:
|
mfbtewhite.c:
|
||||||
echo "#define OP" > $@
|
echo "#define OP" > $@
|
||||||
echo "#define CLIPTETEXT xf1bppImageGlyphBltWhite" >> $@
|
echo "#define CLIPTETEXT xf1bppImageGlyphBltWhite" >> $@
|
||||||
echo "#define MFBTEGLYPHBLT xf1bppTEGlyphBltWhite" >> $@
|
echo "#define MFBTEGLYPHBLT xf1bppTEGlyphBltWhite" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbtegblt.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbtegblt.c\"" >> $@
|
||||||
mfbteblack.c:
|
mfbteblack.c:
|
||||||
echo "#define OP ~" > $@
|
echo "#define OP ~" > $@
|
||||||
echo "#define CLIPTETEXT xf1bppImageGlyphBltBlack" >> $@
|
echo "#define CLIPTETEXT xf1bppImageGlyphBltBlack" >> $@
|
||||||
echo "#define MFBTEGLYPHBLT xf1bppTEGlyphBltBlack" >> $@
|
echo "#define MFBTEGLYPHBLT xf1bppTEGlyphBltBlack" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbtegblt.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbtegblt.c\"" >> $@
|
||||||
mfbplywhite.c:
|
mfbplywhite.c:
|
||||||
echo "#define MFBFILLPOLY1RECT xf1bppFillPolyWhite" > $@
|
echo "#define MFBFILLPOLY1RECT xf1bppFillPolyWhite" > $@
|
||||||
echo "#define OPEQ |=" >> $@
|
echo "#define OPEQ |=" >> $@
|
||||||
echo "#define EQWHOLEWORD =~0" >> $@
|
echo "#define EQWHOLEWORD =~0" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbply1rct.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbply1rct.c\"" >> $@
|
||||||
mfbplyblack.c:
|
mfbplyblack.c:
|
||||||
echo "#define MFBFILLPOLY1RECT xf1bppFillPolyBlack" > $@
|
echo "#define MFBFILLPOLY1RECT xf1bppFillPolyBlack" > $@
|
||||||
echo "#define OPEQ &=~" >> $@
|
echo "#define OPEQ &=~" >> $@
|
||||||
echo "#define EQWHOLEWORD =0" >> $@
|
echo "#define EQWHOLEWORD =0" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbply1rct.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbply1rct.c\"" >> $@
|
||||||
mfbplyinv.c:
|
mfbplyinv.c:
|
||||||
echo "#define MFBFILLPOLY1RECT xf1bppFillPolyInvert" > $@
|
echo "#define MFBFILLPOLY1RECT xf1bppFillPolyInvert" > $@
|
||||||
echo "#define OPEQ ^=" >> $@
|
echo "#define OPEQ ^=" >> $@
|
||||||
echo "#define EQWHOLEWORD ^=~0" >> $@
|
echo "#define EQWHOLEWORD ^=~0" >> $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbply1rct.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbply1rct.c\"" >> $@
|
||||||
mfbbltC.c:
|
mfbbltC.c:
|
||||||
echo "#define MROP Mcopy" > $@
|
echo "#define MROP Mcopy" > $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
|
||||||
mfbbltX.c:
|
mfbbltX.c:
|
||||||
echo "#define MROP Mxor" > $@
|
echo "#define MROP Mxor" > $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
|
||||||
mfbbltCI.c:
|
mfbbltCI.c:
|
||||||
echo "#define MROP McopyInverted" > $@
|
echo "#define MROP McopyInverted" > $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
|
||||||
mfbbltO.c:
|
mfbbltO.c:
|
||||||
echo "#define MROP Mor" > $@
|
echo "#define MROP Mor" > $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
|
||||||
mfbbltG.c:
|
mfbbltG.c:
|
||||||
echo "#define MROP M0" > $@
|
echo "#define MROP M0" > $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbblt.c\"" >> $@
|
||||||
mfbtileC.c:
|
mfbtileC.c:
|
||||||
echo "#define MROP Mcopy" > $@
|
echo "#define MROP Mcopy" > $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbtile.c\"" >> $@
|
echo "#include \"$(top_srcdir)/mfb/mfbtile.c\"" >> $@
|
||||||
mfbtileG.c:
|
mfbtileG.c:
|
||||||
echo "#define MRop M0" > $@
|
echo "#define MRop M0" > $@
|
||||||
|
echo "#include \"mfbmap.h\"" >> $@
|
||||||
echo "#include \"$(top_srcdir)/mfb/mfbtile.c\"" >> $@
|
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
|
EXTRA_DIST = mfbmap.sh mfbunmap.sh
|
||||||
|
|
|
@ -93,6 +93,9 @@
|
||||||
/* Define to 1 if you have the <asm/mtrr.h> header file. */
|
/* Define to 1 if you have the <asm/mtrr.h> header file. */
|
||||||
#undef HAVE_ASM_MTRR_H
|
#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. */
|
/* Define to 1 if you have the <dbm.h> header file. */
|
||||||
#undef HAVE_DBM_H
|
#undef HAVE_DBM_H
|
||||||
|
|
||||||
|
@ -311,6 +314,9 @@
|
||||||
/* Use rgb.txt directly */
|
/* Use rgb.txt directly */
|
||||||
#undef USE_RGB_TXT
|
#undef USE_RGB_TXT
|
||||||
|
|
||||||
|
/* Define to use byteswap macros from <sys/endian.h> */
|
||||||
|
#undef USE_SYS_ENDIAN_H
|
||||||
|
|
||||||
/* unaligned word accesses behave as expected */
|
/* unaligned word accesses behave as expected */
|
||||||
#undef WORKING_UNALIGNED_INT
|
#undef WORKING_UNALIGNED_INT
|
||||||
|
|
||||||
|
@ -413,16 +419,8 @@
|
||||||
/* Endian order */
|
/* Endian order */
|
||||||
#undef X_BYTE_ORDER
|
#undef X_BYTE_ORDER
|
||||||
|
|
||||||
/* BSD-compliant source */
|
/* Enable GNU and other extensions to the C environment for GLIBC */
|
||||||
#undef _BSD_SOURCE
|
#undef _GNU_SOURCE
|
||||||
|
|
||||||
/* POSIX-compliant source */
|
|
||||||
#undef _POSIX_SOURCE
|
|
||||||
|
|
||||||
#ifndef _XOPEN_SOURCE
|
|
||||||
/* X/Open-compliant source */
|
|
||||||
#undef _XOPEN_SOURCE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define to empty if `const' does not conform to ANSI C. */
|
/* Define to empty if `const' does not conform to ANSI C. */
|
||||||
#undef const
|
#undef const
|
||||||
|
@ -469,4 +467,13 @@
|
||||||
/* Path to XErrorDB file */
|
/* Path to XErrorDB file */
|
||||||
#undef XERRORDB_PATH
|
#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_ */
|
#endif /* _DIX_CONFIG_H_ */
|
||||||
|
|
13
mi/mieq.c
13
mi/mieq.c
|
@ -59,6 +59,12 @@ in this Software without prior written authorization from The Open Group.
|
||||||
# include "extinit.h"
|
# include "extinit.h"
|
||||||
# include "exglobals.h"
|
# include "exglobals.h"
|
||||||
|
|
||||||
|
#ifdef DPMSExtension
|
||||||
|
# include "dpmsproc.h"
|
||||||
|
# define DPMS_SERVER
|
||||||
|
# include <X11/extensions/dpms.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define QUEUE_SIZE 256
|
#define QUEUE_SIZE 256
|
||||||
|
|
||||||
typedef struct _Event {
|
typedef struct _Event {
|
||||||
|
@ -193,6 +199,13 @@ mieqProcessInputEvents()
|
||||||
while (miEventQueue.head != miEventQueue.tail) {
|
while (miEventQueue.head != miEventQueue.tail) {
|
||||||
if (screenIsSaved == SCREEN_SAVER_ON)
|
if (screenIsSaved == SCREEN_SAVER_ON)
|
||||||
SaveScreens (SCREEN_SAVER_OFF, ScreenSaverReset);
|
SaveScreens (SCREEN_SAVER_OFF, ScreenSaverReset);
|
||||||
|
#ifdef DPMSExtension
|
||||||
|
else if (DPMSPowerLevel != DPMSModeOn)
|
||||||
|
SetScreenSaverTimer();
|
||||||
|
|
||||||
|
if (DPMSPowerLevel != DPMSModeOn)
|
||||||
|
DPMSSet(DPMSModeOn);
|
||||||
|
#endif
|
||||||
|
|
||||||
e = &miEventQueue.events[miEventQueue.head];
|
e = &miEventQueue.events[miEventQueue.head];
|
||||||
/* Assumption - screen switching can only occur on motion events. */
|
/* Assumption - screen switching can only occur on motion events. */
|
||||||
|
|
|
@ -113,6 +113,52 @@ getDrawableDamageRef (DrawablePtr pDrawable)
|
||||||
DamagePtr *pPrev = (DamagePtr *) \
|
DamagePtr *pPrev = (DamagePtr *) \
|
||||||
&(pWindow->devPrivates[damageWinPrivateIndex].ptr)
|
&(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
|
#if DAMAGE_DEBUG_ENABLE
|
||||||
static void
|
static void
|
||||||
_damageDamageRegion (DrawablePtr pDrawable, RegionPtr pRegion, Bool clip, int subWindowMode, const char *where)
|
_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;
|
RegionRec clippedRec;
|
||||||
RegionPtr pDamageRegion;
|
RegionPtr pDamageRegion;
|
||||||
RegionRec pixClip;
|
RegionRec pixClip;
|
||||||
Bool was_empty;
|
|
||||||
RegionRec tmpRegion;
|
|
||||||
BoxRec tmpBox;
|
|
||||||
int draw_x, draw_y;
|
int draw_x, draw_y;
|
||||||
#ifdef COMPOSITE
|
#ifdef COMPOSITE
|
||||||
int screen_x = 0, screen_y = 0;
|
int screen_x = 0, screen_y = 0;
|
||||||
|
@ -256,41 +299,18 @@ damageDamageRegion (DrawablePtr pDrawable, RegionPtr pRegion, Bool clip,
|
||||||
*/
|
*/
|
||||||
if (draw_x || draw_y)
|
if (draw_x || draw_y)
|
||||||
REGION_TRANSLATE (pScreen, pDamageRegion, -draw_x, -draw_y);
|
REGION_TRANSLATE (pScreen, pDamageRegion, -draw_x, -draw_y);
|
||||||
|
|
||||||
switch (pDamage->damageLevel) {
|
/* If the damage rec has been flagged to report damage after the op has
|
||||||
case DamageReportRawRegion:
|
* completed, then union it into the delayed damage region, which will
|
||||||
(*pDamage->damageReport) (pDamage, pDamageRegion, pDamage->closure);
|
* be used for reporting after calling down, and skip the reporting
|
||||||
break;
|
*/
|
||||||
case DamageReportDeltaRegion:
|
if (!pDamage->reportAfter) {
|
||||||
REGION_NULL (pScreen, &tmpRegion);
|
DamageReportDamage (pDamage, pDamageRegion);
|
||||||
REGION_SUBTRACT (pScreen, &tmpRegion, pDamageRegion, &pDamage->damage);
|
} else {
|
||||||
if (REGION_NOTEMPTY (pScreen, &tmpRegion))
|
REGION_UNION(pScreen, &pDamage->pendingDamage,
|
||||||
{
|
&pDamage->pendingDamage, pDamageRegion);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* translate original region back
|
* translate original region back
|
||||||
*/
|
*/
|
||||||
|
@ -305,6 +325,21 @@ damageDamageRegion (DrawablePtr pDrawable, RegionPtr pRegion, Bool clip,
|
||||||
REGION_UNINIT (pScreen, &clippedRec);
|
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
|
#if DAMAGE_DEBUG_ENABLE
|
||||||
#define damageDamageBox(d,b,m) _damageDamageBox(d,b,m,__FUNCTION__)
|
#define damageDamageBox(d,b,m) _damageDamageBox(d,b,m,__FUNCTION__)
|
||||||
static void
|
static void
|
||||||
|
@ -550,6 +585,7 @@ damageComposite (CARD8 op,
|
||||||
yDst,
|
yDst,
|
||||||
width,
|
width,
|
||||||
height);
|
height);
|
||||||
|
damageReportPostOp (pDst->pDrawable);
|
||||||
wrap (pScrPriv, ps, Composite, damageComposite);
|
wrap (pScrPriv, ps, Composite, damageComposite);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -616,6 +652,7 @@ damageGlyphs (CARD8 op,
|
||||||
}
|
}
|
||||||
unwrap (pScrPriv, ps, Glyphs);
|
unwrap (pScrPriv, ps, Glyphs);
|
||||||
(*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
|
(*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
|
||||||
|
damageReportPostOp (pDst->pDrawable);
|
||||||
wrap (pScrPriv, ps, Glyphs, damageGlyphs);
|
wrap (pScrPriv, ps, Glyphs, damageGlyphs);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -668,6 +705,7 @@ damageFillSpans(DrawablePtr pDrawable,
|
||||||
|
|
||||||
(*pGC->ops->FillSpans)(pDrawable, pGC, npt, ppt, pwidth, fSorted);
|
(*pGC->ops->FillSpans)(pDrawable, pGC, npt, ppt, pwidth, fSorted);
|
||||||
|
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -715,6 +753,7 @@ damageSetSpans(DrawablePtr pDrawable,
|
||||||
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
||||||
}
|
}
|
||||||
(*pGC->ops->SetSpans)(pDrawable, pGC, pcharsrc, ppt, pwidth, npt, fSorted);
|
(*pGC->ops->SetSpans)(pDrawable, pGC, pcharsrc, ppt, pwidth, npt, fSorted);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -746,6 +785,7 @@ damagePutImage(DrawablePtr pDrawable,
|
||||||
}
|
}
|
||||||
(*pGC->ops->PutImage)(pDrawable, pGC, depth, x, y, w, h,
|
(*pGC->ops->PutImage)(pDrawable, pGC, depth, x, y, w, h,
|
||||||
leftPad, format, pImage);
|
leftPad, format, pImage);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -789,6 +829,7 @@ damageCopyArea(DrawablePtr pSrc,
|
||||||
|
|
||||||
ret = (*pGC->ops->CopyArea)(pSrc, pDst,
|
ret = (*pGC->ops->CopyArea)(pSrc, pDst,
|
||||||
pGC, srcx, srcy, width, height, dstx, dsty);
|
pGC, srcx, srcy, width, height, dstx, dsty);
|
||||||
|
damageReportPostOp (pDst);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDst);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDst);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -834,6 +875,7 @@ damageCopyPlane(DrawablePtr pSrc,
|
||||||
|
|
||||||
ret = (*pGC->ops->CopyPlane)(pSrc, pDst,
|
ret = (*pGC->ops->CopyPlane)(pSrc, pDst,
|
||||||
pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
|
pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
|
||||||
|
damageReportPostOp (pDst);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDst);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDst);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -875,6 +917,7 @@ damagePolyPoint(DrawablePtr pDrawable,
|
||||||
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
||||||
}
|
}
|
||||||
(*pGC->ops->PolyPoint)(pDrawable, pGC, mode, npt, ppt);
|
(*pGC->ops->PolyPoint)(pDrawable, pGC, mode, npt, ppt);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -948,6 +991,7 @@ damagePolylines(DrawablePtr pDrawable,
|
||||||
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
||||||
}
|
}
|
||||||
(*pGC->ops->Polylines)(pDrawable, pGC, mode, npt, ppt);
|
(*pGC->ops->Polylines)(pDrawable, pGC, mode, npt, ppt);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1026,6 +1070,7 @@ damagePolySegment(DrawablePtr pDrawable,
|
||||||
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
||||||
}
|
}
|
||||||
(*pGC->ops->PolySegment)(pDrawable, pGC, nSeg, pSeg);
|
(*pGC->ops->PolySegment)(pDrawable, pGC, nSeg, pSeg);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1087,6 +1132,7 @@ damagePolyRectangle(DrawablePtr pDrawable,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(*pGC->ops->PolyRectangle)(pDrawable, pGC, nRects, pRects);
|
(*pGC->ops->PolyRectangle)(pDrawable, pGC, nRects, pRects);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1139,6 +1185,7 @@ damagePolyArc(DrawablePtr pDrawable,
|
||||||
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
||||||
}
|
}
|
||||||
(*pGC->ops->PolyArc)(pDrawable, pGC, nArcs, pArcs);
|
(*pGC->ops->PolyArc)(pDrawable, pGC, nArcs, pArcs);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1197,6 +1244,7 @@ damageFillPolygon(DrawablePtr pDrawable,
|
||||||
}
|
}
|
||||||
|
|
||||||
(*pGC->ops->FillPolygon)(pDrawable, pGC, shape, mode, npt, ppt);
|
(*pGC->ops->FillPolygon)(pDrawable, pGC, shape, mode, npt, ppt);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1235,6 +1283,7 @@ damagePolyFillRect(DrawablePtr pDrawable,
|
||||||
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
||||||
}
|
}
|
||||||
(*pGC->ops->PolyFillRect)(pDrawable, pGC, nRects, pRects);
|
(*pGC->ops->PolyFillRect)(pDrawable, pGC, nRects, pRects);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1276,6 +1325,7 @@ damagePolyFillArc(DrawablePtr pDrawable,
|
||||||
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
||||||
}
|
}
|
||||||
(*pGC->ops->PolyFillArc)(pDrawable, pGC, nArcs, pArcs);
|
(*pGC->ops->PolyFillArc)(pDrawable, pGC, nArcs, pArcs);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1386,6 +1436,7 @@ damagePolyText8(DrawablePtr pDrawable,
|
||||||
Linear8Bit, TT_POLY8);
|
Linear8Bit, TT_POLY8);
|
||||||
else
|
else
|
||||||
x = (*pGC->ops->PolyText8)(pDrawable, pGC, x, y, count, chars);
|
x = (*pGC->ops->PolyText8)(pDrawable, pGC, x, y, count, chars);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
@ -1406,6 +1457,7 @@ damagePolyText16(DrawablePtr pDrawable,
|
||||||
TT_POLY16);
|
TT_POLY16);
|
||||||
else
|
else
|
||||||
x = (*pGC->ops->PolyText16)(pDrawable, pGC, x, y, count, chars);
|
x = (*pGC->ops->PolyText16)(pDrawable, pGC, x, y, count, chars);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
@ -1425,6 +1477,7 @@ damageImageText8(DrawablePtr pDrawable,
|
||||||
Linear8Bit, TT_IMAGE8);
|
Linear8Bit, TT_IMAGE8);
|
||||||
else
|
else
|
||||||
(*pGC->ops->ImageText8)(pDrawable, pGC, x, y, count, chars);
|
(*pGC->ops->ImageText8)(pDrawable, pGC, x, y, count, chars);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1444,6 +1497,7 @@ damageImageText16(DrawablePtr pDrawable,
|
||||||
TT_IMAGE16);
|
TT_IMAGE16);
|
||||||
else
|
else
|
||||||
(*pGC->ops->ImageText16)(pDrawable, pGC, x, y, count, chars);
|
(*pGC->ops->ImageText16)(pDrawable, pGC, x, y, count, chars);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1462,6 +1516,7 @@ damageImageGlyphBlt(DrawablePtr pDrawable,
|
||||||
nglyph, ppci, TRUE, pGC->subWindowMode);
|
nglyph, ppci, TRUE, pGC->subWindowMode);
|
||||||
(*pGC->ops->ImageGlyphBlt)(pDrawable, pGC, x, y, nglyph,
|
(*pGC->ops->ImageGlyphBlt)(pDrawable, pGC, x, y, nglyph,
|
||||||
ppci, pglyphBase);
|
ppci, pglyphBase);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1479,6 +1534,7 @@ damagePolyGlyphBlt(DrawablePtr pDrawable,
|
||||||
nglyph, ppci, FALSE, pGC->subWindowMode);
|
nglyph, ppci, FALSE, pGC->subWindowMode);
|
||||||
(*pGC->ops->PolyGlyphBlt)(pDrawable, pGC, x, y, nglyph,
|
(*pGC->ops->PolyGlyphBlt)(pDrawable, pGC, x, y, nglyph,
|
||||||
ppci, pglyphBase);
|
ppci, pglyphBase);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1512,6 +1568,7 @@ damagePushPixels(GCPtr pGC,
|
||||||
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
damageDamageBox (pDrawable, &box, pGC->subWindowMode);
|
||||||
}
|
}
|
||||||
(*pGC->ops->PushPixels)(pGC, pBitMap, pDrawable, dx, dy, xOrg, yOrg);
|
(*pGC->ops->PushPixels)(pGC, pBitMap, pDrawable, dx, dy, xOrg, yOrg);
|
||||||
|
damageReportPostOp (pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1591,10 +1648,12 @@ damagePaintWindow(WindowPtr pWindow,
|
||||||
if(what == PW_BACKGROUND) {
|
if(what == PW_BACKGROUND) {
|
||||||
unwrap (pScrPriv, pScreen, PaintWindowBackground);
|
unwrap (pScrPriv, pScreen, PaintWindowBackground);
|
||||||
(*pScreen->PaintWindowBackground) (pWindow, prgn, what);
|
(*pScreen->PaintWindowBackground) (pWindow, prgn, what);
|
||||||
|
damageReportPostOp (&pWindow->drawable);
|
||||||
wrap (pScrPriv, pScreen, PaintWindowBackground, damagePaintWindow);
|
wrap (pScrPriv, pScreen, PaintWindowBackground, damagePaintWindow);
|
||||||
} else {
|
} else {
|
||||||
unwrap (pScrPriv, pScreen, PaintWindowBorder);
|
unwrap (pScrPriv, pScreen, PaintWindowBorder);
|
||||||
(*pScreen->PaintWindowBorder) (pWindow, prgn, what);
|
(*pScreen->PaintWindowBorder) (pWindow, prgn, what);
|
||||||
|
damageReportPostOp (&pWindow->drawable);
|
||||||
wrap (pScrPriv, pScreen, PaintWindowBorder, damagePaintWindow);
|
wrap (pScrPriv, pScreen, PaintWindowBorder, damagePaintWindow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1623,6 +1682,7 @@ damageCopyWindow(WindowPtr pWindow,
|
||||||
}
|
}
|
||||||
unwrap (pScrPriv, pScreen, CopyWindow);
|
unwrap (pScrPriv, pScreen, CopyWindow);
|
||||||
(*pScreen->CopyWindow) (pWindow, ptOldOrg, prgnSrc);
|
(*pScreen->CopyWindow) (pWindow, ptOldOrg, prgnSrc);
|
||||||
|
damageReportPostOp (&pWindow->drawable);
|
||||||
wrap (pScrPriv, pScreen, CopyWindow, damageCopyWindow);
|
wrap (pScrPriv, pScreen, CopyWindow, damageCopyWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1654,6 +1714,7 @@ damageRestoreAreas (PixmapPtr pPixmap,
|
||||||
unwrap (pScrPriv, pScreen, BackingStoreFuncs.RestoreAreas);
|
unwrap (pScrPriv, pScreen, BackingStoreFuncs.RestoreAreas);
|
||||||
(*pScreen->BackingStoreFuncs.RestoreAreas) (pPixmap, prgn,
|
(*pScreen->BackingStoreFuncs.RestoreAreas) (pPixmap, prgn,
|
||||||
xorg, yorg, pWindow);
|
xorg, yorg, pWindow);
|
||||||
|
damageReportPostOp (&pWindow->drawable);
|
||||||
wrap (pScrPriv, pScreen, BackingStoreFuncs.RestoreAreas,
|
wrap (pScrPriv, pScreen, BackingStoreFuncs.RestoreAreas,
|
||||||
damageRestoreAreas);
|
damageRestoreAreas);
|
||||||
}
|
}
|
||||||
|
@ -1820,12 +1881,14 @@ DamageCreate (DamageReportFunc damageReport,
|
||||||
pDamage->pNext = 0;
|
pDamage->pNext = 0;
|
||||||
pDamage->pNextWin = 0;
|
pDamage->pNextWin = 0;
|
||||||
REGION_NULL(pScreen, &pDamage->damage);
|
REGION_NULL(pScreen, &pDamage->damage);
|
||||||
|
REGION_NULL(pScreen, &pDamage->pendingDamage);
|
||||||
|
|
||||||
pDamage->damageLevel = damageLevel;
|
pDamage->damageLevel = damageLevel;
|
||||||
pDamage->isInternal = isInternal;
|
pDamage->isInternal = isInternal;
|
||||||
pDamage->closure = closure;
|
pDamage->closure = closure;
|
||||||
pDamage->isWindow = FALSE;
|
pDamage->isWindow = FALSE;
|
||||||
pDamage->pDrawable = 0;
|
pDamage->pDrawable = 0;
|
||||||
|
pDamage->reportAfter = FALSE;
|
||||||
|
|
||||||
pDamage->damageReport = damageReport;
|
pDamage->damageReport = damageReport;
|
||||||
pDamage->damageDestroy = damageDestroy;
|
pDamage->damageDestroy = damageDestroy;
|
||||||
|
@ -1909,6 +1972,7 @@ DamageDestroy (DamagePtr pDamage)
|
||||||
if (pDamage->damageDestroy)
|
if (pDamage->damageDestroy)
|
||||||
(*pDamage->damageDestroy) (pDamage, pDamage->closure);
|
(*pDamage->damageDestroy) (pDamage, pDamage->closure);
|
||||||
REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->damage);
|
REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->damage);
|
||||||
|
REGION_UNINIT (pDamage->pDrawable->pScreen, &pDamage->pendingDamage);
|
||||||
xfree (pDamage);
|
xfree (pDamage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1962,4 +2026,16 @@ DamageDamageRegion (DrawablePtr pDrawable,
|
||||||
RegionPtr pRegion)
|
RegionPtr pRegion)
|
||||||
{
|
{
|
||||||
damageDamageRegion (pDrawable, pRegion, FALSE, -1);
|
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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,4 +81,7 @@ void
|
||||||
DamageDamageRegion (DrawablePtr pDrawable,
|
DamageDamageRegion (DrawablePtr pDrawable,
|
||||||
const RegionPtr pRegion);
|
const RegionPtr pRegion);
|
||||||
|
|
||||||
|
void
|
||||||
|
DamageSetReportAfterOp (DamagePtr pDamage, Bool reportAfter);
|
||||||
|
|
||||||
#endif /* _DAMAGE_H_ */
|
#endif /* _DAMAGE_H_ */
|
||||||
|
|
|
@ -48,6 +48,9 @@ typedef struct _damage {
|
||||||
|
|
||||||
DamageReportFunc damageReport;
|
DamageReportFunc damageReport;
|
||||||
DamageDestroyFunc damageDestroy;
|
DamageDestroyFunc damageDestroy;
|
||||||
|
|
||||||
|
Bool reportAfter;
|
||||||
|
RegionRec pendingDamage;
|
||||||
} DamageRec;
|
} DamageRec;
|
||||||
|
|
||||||
typedef struct _damageScrPriv {
|
typedef struct _damageScrPriv {
|
||||||
|
|
|
@ -337,10 +337,7 @@ WaitForSomething(int *pClientsReady)
|
||||||
if (XFD_ANYSET(&tmp_set))
|
if (XFD_ANYSET(&tmp_set))
|
||||||
QueueWorkProc(EstablishNewConnections, NULL,
|
QueueWorkProc(EstablishNewConnections, NULL,
|
||||||
(pointer)&LastSelectMask);
|
(pointer)&LastSelectMask);
|
||||||
#ifdef DPMSExtension
|
|
||||||
if (XFD_ANYSET (&devicesReadable) && (DPMSPowerLevel != DPMSModeOn))
|
|
||||||
DPMSSet(DPMSModeOn);
|
|
||||||
#endif
|
|
||||||
if (XFD_ANYSET (&devicesReadable) || XFD_ANYSET (&clientsReadable))
|
if (XFD_ANYSET (&devicesReadable) || XFD_ANYSET (&clientsReadable))
|
||||||
break;
|
break;
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
18
os/utils.c
18
os/utils.c
|
@ -53,23 +53,6 @@ OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include <dix-config.h>
|
#include <dix-config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The world's most shocking hack, to ensure we get clock_gettime() and
|
|
||||||
* CLOCK_MONOTONIC. */
|
|
||||||
#ifdef sun /* Needed to tell Solaris headers not to restrict to */
|
|
||||||
#define __EXTENSIONS__ /* only the functions defined in POSIX 199309. */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#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
|
|
||||||
|
|
||||||
#ifdef __CYGWIN__
|
#ifdef __CYGWIN__
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
@ -80,6 +63,7 @@ OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#endif
|
#endif
|
||||||
#include <X11/Xos.h>
|
#include <X11/Xos.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include <X11/X.h>
|
#include <X11/X.h>
|
||||||
#define XSERV_t
|
#define XSERV_t
|
||||||
|
|
|
@ -243,6 +243,10 @@ Bool RRScreenInit(ScreenPtr pScreen)
|
||||||
pScrPriv->maxWidth = pScrPriv->minWidth = pScreen->width;
|
pScrPriv->maxWidth = pScrPriv->minWidth = pScreen->width;
|
||||||
pScrPriv->maxHeight = pScrPriv->minHeight = pScreen->height;
|
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
|
#if RANDR_12_INTERFACE
|
||||||
pScrPriv->rrScreenSetSize = NULL;
|
pScrPriv->rrScreenSetSize = NULL;
|
||||||
pScrPriv->rrCrtcSet = NULL;
|
pScrPriv->rrCrtcSet = NULL;
|
||||||
|
|
|
@ -224,6 +224,7 @@ typedef struct _rrScrPriv {
|
||||||
CARD16 minWidth, minHeight;
|
CARD16 minWidth, minHeight;
|
||||||
CARD16 maxWidth, maxHeight;
|
CARD16 maxWidth, maxHeight;
|
||||||
CARD16 width, height; /* last known screen size */
|
CARD16 width, height; /* last known screen size */
|
||||||
|
CARD16 mmWidth, mmHeight; /* last known screen size */
|
||||||
|
|
||||||
int numOutputs;
|
int numOutputs;
|
||||||
RROutputPtr *outputs;
|
RROutputPtr *outputs;
|
||||||
|
@ -541,6 +542,16 @@ Bool
|
||||||
RRCrtcGammaSetSize (RRCrtcPtr crtc,
|
RRCrtcGammaSetSize (RRCrtcPtr crtc,
|
||||||
int size);
|
int size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the allowable rotations of the CRTC.
|
||||||
|
*/
|
||||||
|
Bool
|
||||||
|
RRCrtcSetRotations (RRCrtcPtr crtc,
|
||||||
|
Rotation rotations);
|
||||||
|
|
||||||
|
void
|
||||||
|
RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Destroy a Crtc at shutdown
|
* Destroy a Crtc at shutdown
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -397,6 +397,32 @@ RRCrtcGammaNotify (RRCrtcPtr crtc)
|
||||||
return TRUE; /* not much going on here */
|
return TRUE; /* not much going on here */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the width/height that the crtc scans out from the framebuffer
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height)
|
||||||
|
{
|
||||||
|
if (crtc->mode == NULL) {
|
||||||
|
*width = 0;
|
||||||
|
*height = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (crtc->rotation & 0xf) {
|
||||||
|
case RR_Rotate_0:
|
||||||
|
case RR_Rotate_180:
|
||||||
|
*width = crtc->mode->mode.width;
|
||||||
|
*height = crtc->mode->mode.height;
|
||||||
|
break;
|
||||||
|
case RR_Rotate_90:
|
||||||
|
case RR_Rotate_270:
|
||||||
|
*width = crtc->mode->mode.height;
|
||||||
|
*height = crtc->mode->mode.width;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the size of the gamma table at server startup time
|
* Set the size of the gamma table at server startup time
|
||||||
*/
|
*/
|
||||||
|
@ -426,6 +452,17 @@ RRCrtcGammaSetSize (RRCrtcPtr crtc,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the allowable rotations of the CRTC.
|
||||||
|
*/
|
||||||
|
Bool
|
||||||
|
RRCrtcSetRotations (RRCrtcPtr crtc,
|
||||||
|
Rotation rotations)
|
||||||
|
{
|
||||||
|
crtc->rotations = rotations;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize crtc type
|
* Initialize crtc type
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -169,18 +169,7 @@ RRScanOldConfig (ScreenPtr pScreen, Rotation rotations)
|
||||||
if (height > maxHeight) maxHeight = height;
|
if (height > maxHeight) maxHeight = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (minWidth != pScrPriv->minWidth) {
|
RRScreenSetSizeRange (pScreen, minWidth, minHeight, maxWidth, maxHeight);
|
||||||
pScrPriv->minWidth = minWidth; pScrPriv->changed = TRUE;
|
|
||||||
}
|
|
||||||
if (maxWidth != pScrPriv->maxWidth) {
|
|
||||||
pScrPriv->maxWidth = maxWidth; pScrPriv->changed = TRUE;
|
|
||||||
}
|
|
||||||
if (minHeight != pScrPriv->minHeight) {
|
|
||||||
pScrPriv->minHeight = minHeight; pScrPriv->changed = TRUE;
|
|
||||||
}
|
|
||||||
if (maxHeight != pScrPriv->maxHeight) {
|
|
||||||
pScrPriv->maxHeight = maxHeight; pScrPriv->changed = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* notice current mode */
|
/* notice current mode */
|
||||||
if (newMode)
|
if (newMode)
|
||||||
|
@ -219,7 +208,6 @@ RRGetInfo (ScreenPtr pScreen)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if RANDR_12_INTERFACE
|
|
||||||
/*
|
/*
|
||||||
* Register the range of sizes for the screen
|
* Register the range of sizes for the screen
|
||||||
*/
|
*/
|
||||||
|
@ -234,12 +222,19 @@ RRScreenSetSizeRange (ScreenPtr pScreen,
|
||||||
|
|
||||||
if (!pScrPriv)
|
if (!pScrPriv)
|
||||||
return;
|
return;
|
||||||
|
if (pScrPriv->minWidth == minWidth && pScrPriv->minHeight == minHeight &&
|
||||||
|
pScrPriv->maxWidth == maxWidth && pScrPriv->maxHeight == maxHeight)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pScrPriv->minWidth = minWidth;
|
pScrPriv->minWidth = minWidth;
|
||||||
pScrPriv->minHeight = minHeight;
|
pScrPriv->minHeight = minHeight;
|
||||||
pScrPriv->maxWidth = maxWidth;
|
pScrPriv->maxWidth = maxWidth;
|
||||||
pScrPriv->maxHeight = maxHeight;
|
pScrPriv->maxHeight = maxHeight;
|
||||||
|
pScrPriv->changed = TRUE;
|
||||||
|
pScrPriv->configChanged = TRUE;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef RANDR_10_INTERFACE
|
#ifdef RANDR_10_INTERFACE
|
||||||
static Bool
|
static Bool
|
||||||
|
|
|
@ -35,11 +35,15 @@ static Bool
|
||||||
RRCrtcContainsPosition (RRCrtcPtr crtc, int x, int y)
|
RRCrtcContainsPosition (RRCrtcPtr crtc, int x, int y)
|
||||||
{
|
{
|
||||||
RRModePtr mode = crtc->mode;
|
RRModePtr mode = crtc->mode;
|
||||||
|
int scan_width, scan_height;
|
||||||
|
|
||||||
if (!mode)
|
if (!mode)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (crtc->x <= x && x < crtc->x + mode->mode.width &&
|
|
||||||
crtc->y <= y && y < crtc->y + mode->mode.height)
|
RRCrtcGetScanoutSize (crtc, &scan_width, &scan_height);
|
||||||
|
|
||||||
|
if (crtc->x <= x && x < crtc->x + scan_width &&
|
||||||
|
crtc->y <= y && y < crtc->y + scan_height)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -55,28 +59,32 @@ RRPointerToNearestCrtc (ScreenPtr pScreen, int x, int y, RRCrtcPtr skip)
|
||||||
RRCrtcPtr nearest = NULL;
|
RRCrtcPtr nearest = NULL;
|
||||||
int best = 0;
|
int best = 0;
|
||||||
int best_dx = 0, best_dy = 0;
|
int best_dx = 0, best_dy = 0;
|
||||||
|
|
||||||
for (c = 0; c < pScrPriv->numCrtcs; c++)
|
for (c = 0; c < pScrPriv->numCrtcs; c++)
|
||||||
{
|
{
|
||||||
RRCrtcPtr crtc = pScrPriv->crtcs[c];
|
RRCrtcPtr crtc = pScrPriv->crtcs[c];
|
||||||
RRModePtr mode = crtc->mode;
|
RRModePtr mode = crtc->mode;
|
||||||
int dx, dy;
|
int dx, dy;
|
||||||
int dist;
|
int dist;
|
||||||
|
int scan_width, scan_height;
|
||||||
|
|
||||||
if (!mode)
|
if (!mode)
|
||||||
continue;
|
continue;
|
||||||
if (crtc == skip)
|
if (crtc == skip)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
RRCrtcGetScanoutSize (crtc, &scan_width, &scan_height);
|
||||||
|
|
||||||
if (x < crtc->x)
|
if (x < crtc->x)
|
||||||
dx = crtc->x - x;
|
dx = crtc->x - x;
|
||||||
else if (x > crtc->x + mode->mode.width)
|
else if (x > crtc->x + scan_width)
|
||||||
dx = x - (crtc->x + mode->mode.width);
|
dx = x - (crtc->x + scan_width);
|
||||||
else
|
else
|
||||||
dx = 0;
|
dx = 0;
|
||||||
if (y < crtc->y)
|
if (y < crtc->y)
|
||||||
dy = crtc->y - x;
|
dy = crtc->y - x;
|
||||||
else if (y > crtc->y + mode->mode.height)
|
else if (y > crtc->y + scan_height)
|
||||||
dy = y - (crtc->y + mode->mode.height);
|
dy = y - (crtc->y + scan_height);
|
||||||
else
|
else
|
||||||
dy = 0;
|
dy = 0;
|
||||||
dist = dx + dy;
|
dist = dx + dy;
|
||||||
|
|
|
@ -125,6 +125,7 @@ RRChangeOutputProperty (RROutputPtr output, Atom property, Atom type,
|
||||||
{
|
{
|
||||||
RRPropertyPtr prop;
|
RRPropertyPtr prop;
|
||||||
xRROutputPropertyNotifyEvent event;
|
xRROutputPropertyNotifyEvent event;
|
||||||
|
rrScrPrivPtr pScrPriv = rrGetScrPriv(output->pScreen);
|
||||||
int sizeInBytes;
|
int sizeInBytes;
|
||||||
int totalSize;
|
int totalSize;
|
||||||
pointer data;
|
pointer data;
|
||||||
|
@ -213,6 +214,13 @@ RRChangeOutputProperty (RROutputPtr output, Atom property, Atom type,
|
||||||
prop->next = output->properties;
|
prop->next = output->properties;
|
||||||
output->properties = prop;
|
output->properties = prop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!prop->is_pending) {
|
||||||
|
/* What should we do in case of failure? */
|
||||||
|
pScrPriv->rrOutputSetProperty(output->pScreen, output,
|
||||||
|
prop->propertyName, prop_value);
|
||||||
|
}
|
||||||
|
|
||||||
if (sendevent)
|
if (sendevent)
|
||||||
{
|
{
|
||||||
event.type = RREventBase + RRNotify;
|
event.type = RREventBase + RRNotify;
|
||||||
|
@ -298,6 +306,12 @@ RRConfigureOutputProperty (RROutputPtr output, Atom property,
|
||||||
if (prop->valid_values)
|
if (prop->valid_values)
|
||||||
xfree (prop->valid_values);
|
xfree (prop->valid_values);
|
||||||
prop->valid_values = new_values;
|
prop->valid_values = new_values;
|
||||||
|
|
||||||
|
if (add) {
|
||||||
|
prop->next = output->properties;
|
||||||
|
output->properties = prop;
|
||||||
|
}
|
||||||
|
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -158,11 +158,15 @@ RRScreenSizeNotify (ScreenPtr pScreen)
|
||||||
* pixel size
|
* pixel size
|
||||||
*/
|
*/
|
||||||
if (pScrPriv->width == pScreen->width &&
|
if (pScrPriv->width == pScreen->width &&
|
||||||
pScrPriv->height == pScreen->height)
|
pScrPriv->height == pScreen->height &&
|
||||||
|
pScrPriv->mmWidth == pScreen->mmWidth &&
|
||||||
|
pScrPriv->mmHeight == pScreen->mmHeight)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pScrPriv->width = pScreen->width;
|
pScrPriv->width = pScreen->width;
|
||||||
pScrPriv->height = pScreen->height;
|
pScrPriv->height = pScreen->height;
|
||||||
|
pScrPriv->mmWidth = pScreen->mmWidth;
|
||||||
|
pScrPriv->mmHeight = pScreen->mmHeight;
|
||||||
pScrPriv->changed = TRUE;
|
pScrPriv->changed = TRUE;
|
||||||
/* pScrPriv->sizeChanged = TRUE; */
|
/* pScrPriv->sizeChanged = TRUE; */
|
||||||
|
|
||||||
|
@ -234,7 +238,8 @@ ProcRRGetScreenSizeRange (ClientPtr client)
|
||||||
|
|
||||||
if (pScrPriv)
|
if (pScrPriv)
|
||||||
{
|
{
|
||||||
RRGetInfo (pScreen);
|
if (!RRGetInfo (pScreen))
|
||||||
|
return BadAlloc;
|
||||||
rep.minWidth = pScrPriv->minWidth;
|
rep.minWidth = pScrPriv->minWidth;
|
||||||
rep.minHeight = pScrPriv->minHeight;
|
rep.minHeight = pScrPriv->minHeight;
|
||||||
rep.maxWidth = pScrPriv->maxWidth;
|
rep.maxWidth = pScrPriv->maxWidth;
|
||||||
|
@ -349,7 +354,8 @@ ProcRRGetScreenResources (ClientPtr client)
|
||||||
rep.pad = 0;
|
rep.pad = 0;
|
||||||
|
|
||||||
if (pScrPriv)
|
if (pScrPriv)
|
||||||
RRGetInfo (pScreen);
|
if (!RRGetInfo (pScreen))
|
||||||
|
return BadAlloc;
|
||||||
|
|
||||||
if (!pScrPriv)
|
if (!pScrPriv)
|
||||||
{
|
{
|
||||||
|
@ -591,7 +597,8 @@ ProcRRGetScreenInfo (ClientPtr client)
|
||||||
rep.pad = 0;
|
rep.pad = 0;
|
||||||
|
|
||||||
if (pScrPriv)
|
if (pScrPriv)
|
||||||
RRGetInfo (pScreen);
|
if (!RRGetInfo (pScreen))
|
||||||
|
return BadAlloc;
|
||||||
|
|
||||||
output = RRFirstOutput (pScreen);
|
output = RRFirstOutput (pScreen);
|
||||||
|
|
||||||
|
|
|
@ -290,10 +290,12 @@ ProcRRXineramaQueryScreens(ClientPtr client)
|
||||||
RRCrtcPtr crtc = pScrPriv->crtcs[i];
|
RRCrtcPtr crtc = pScrPriv->crtcs[i];
|
||||||
if (RRXineramaCrtcActive (crtc))
|
if (RRXineramaCrtcActive (crtc))
|
||||||
{
|
{
|
||||||
|
int width, height;
|
||||||
|
RRCrtcGetScanoutSize (crtc, &width, &height);
|
||||||
scratch.x_org = crtc->x;
|
scratch.x_org = crtc->x;
|
||||||
scratch.y_org = crtc->y;
|
scratch.y_org = crtc->y;
|
||||||
scratch.width = crtc->mode->mode.width;
|
scratch.width = width;
|
||||||
scratch.height = crtc->mode->mode.height;
|
scratch.height = height;
|
||||||
if(client->swapped) {
|
if(client->swapped) {
|
||||||
register int n;
|
register int n;
|
||||||
swaps(&scratch.x_org, n);
|
swaps(&scratch.x_org, n);
|
||||||
|
|
|
@ -47,6 +47,12 @@
|
||||||
#include <X11/Xfuncproto.h>
|
#include <X11/Xfuncproto.h>
|
||||||
#include "cursorstr.h"
|
#include "cursorstr.h"
|
||||||
|
|
||||||
|
#if HAVE_STDINT_H
|
||||||
|
#include <stdint.h>
|
||||||
|
#elif !defined(UINT32_MAX)
|
||||||
|
#define UINT32_MAX 0xffffffffU
|
||||||
|
#endif
|
||||||
|
|
||||||
static int ProcRenderQueryVersion (ClientPtr pClient);
|
static int ProcRenderQueryVersion (ClientPtr pClient);
|
||||||
static int ProcRenderQueryPictFormats (ClientPtr pClient);
|
static int ProcRenderQueryPictFormats (ClientPtr pClient);
|
||||||
static int ProcRenderQueryPictIndexValues (ClientPtr pClient);
|
static int ProcRenderQueryPictIndexValues (ClientPtr pClient);
|
||||||
|
@ -1105,11 +1111,14 @@ ProcRenderAddGlyphs (ClientPtr client)
|
||||||
}
|
}
|
||||||
|
|
||||||
nglyphs = stuff->nglyphs;
|
nglyphs = stuff->nglyphs;
|
||||||
|
if (nglyphs > UINT32_MAX / sizeof(GlyphNewRec))
|
||||||
|
return BadAlloc;
|
||||||
|
|
||||||
if (nglyphs <= NLOCALGLYPH)
|
if (nglyphs <= NLOCALGLYPH)
|
||||||
glyphsBase = glyphsLocal;
|
glyphsBase = glyphsLocal;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
glyphsBase = (GlyphNewPtr) ALLOCATE_LOCAL (nglyphs * sizeof (GlyphNewRec));
|
glyphsBase = (GlyphNewPtr) Xalloc (nglyphs * sizeof (GlyphNewRec));
|
||||||
if (!glyphsBase)
|
if (!glyphsBase)
|
||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
}
|
}
|
||||||
|
@ -1166,7 +1175,7 @@ ProcRenderAddGlyphs (ClientPtr client)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (glyphsBase != glyphsLocal)
|
if (glyphsBase != glyphsLocal)
|
||||||
DEALLOCATE_LOCAL (glyphsBase);
|
Xfree (glyphsBase);
|
||||||
return client->noClientException;
|
return client->noClientException;
|
||||||
bail:
|
bail:
|
||||||
while (glyphs != glyphsBase)
|
while (glyphs != glyphsBase)
|
||||||
|
@ -1175,7 +1184,7 @@ bail:
|
||||||
xfree (glyphs->glyph);
|
xfree (glyphs->glyph);
|
||||||
}
|
}
|
||||||
if (glyphsBase != glyphsLocal)
|
if (glyphsBase != glyphsLocal)
|
||||||
DEALLOCATE_LOCAL (glyphsBase);
|
Xfree (glyphsBase);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1497,30 +1497,33 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src->compat->sym_interpret) {
|
if (src->compat->sym_interpret && src->compat->num_si) {
|
||||||
if (src->compat->size_si != dst->compat->size_si) {
|
if (src->compat->num_si != dst->compat->size_si) {
|
||||||
if (dst->compat->sym_interpret)
|
if (dst->compat->sym_interpret)
|
||||||
tmp = xrealloc(dst->compat->sym_interpret,
|
tmp = xrealloc(dst->compat->sym_interpret,
|
||||||
src->compat->size_si *
|
src->compat->num_si *
|
||||||
sizeof(XkbSymInterpretRec));
|
sizeof(XkbSymInterpretRec));
|
||||||
else
|
else
|
||||||
tmp = xalloc(src->compat->size_si *
|
tmp = xalloc(src->compat->num_si *
|
||||||
sizeof(XkbSymInterpretRec));
|
sizeof(XkbSymInterpretRec));
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
dst->compat->sym_interpret = tmp;
|
dst->compat->sym_interpret = tmp;
|
||||||
}
|
}
|
||||||
memcpy(dst->compat->sym_interpret, src->compat->sym_interpret,
|
memcpy(dst->compat->sym_interpret, src->compat->sym_interpret,
|
||||||
src->compat->size_si * sizeof(XkbSymInterpretRec));
|
src->compat->num_si * sizeof(XkbSymInterpretRec));
|
||||||
|
|
||||||
|
dst->compat->num_si = src->compat->num_si;
|
||||||
|
dst->compat->size_si = src->compat->num_si;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (dst->compat->sym_interpret) {
|
if (dst->compat->sym_interpret && dst->compat->size_si)
|
||||||
xfree(dst->compat->sym_interpret);
|
xfree(dst->compat->sym_interpret);
|
||||||
dst->compat->sym_interpret = NULL;
|
|
||||||
}
|
dst->compat->sym_interpret = NULL;
|
||||||
|
dst->compat->num_si = 0;
|
||||||
|
dst->compat->size_si = 0;
|
||||||
}
|
}
|
||||||
dst->compat->num_si = src->compat->num_si;
|
|
||||||
dst->compat->size_si = src->compat->size_si;
|
|
||||||
|
|
||||||
memcpy(dst->compat->groups, src->compat->groups,
|
memcpy(dst->compat->groups, src->compat->groups,
|
||||||
XkbNumKbdGroups * sizeof(XkbModsRec));
|
XkbNumKbdGroups * sizeof(XkbModsRec));
|
||||||
|
|
Loading…
Reference in New Issue