aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2014-08-30 13:41:12 +0200
committermarha <marha@users.sourceforge.net>2014-08-30 13:43:25 +0200
commite21655632e3fd40b7f6a5cc3c7f3c379d54557c4 (patch)
tree46054f4b20f70afd1c7743e54aa48471e2ded483
parent6c0c95d6045d2d2b4e6a3a2f11457850031c57bc (diff)
downloadvcxsrv-e21655632e3fd40b7f6a5cc3c7f3c379d54557c4.tar.gz
vcxsrv-e21655632e3fd40b7f6a5cc3c7f3c379d54557c4.tar.bz2
vcxsrv-e21655632e3fd40b7f6a5cc3c7f3c379d54557c4.zip
xserver libxtrans libxcb xcb-proto libX11 mesa git update 30 Aug 2014
xserver commit 3a51418b2db353519a1779cf3cebbcc9afba2520 libxcb commit b0e6c2de09c7474868dd7185674fa113a5c2e0aa libxcb/xcb-proto commit dc0c544fe044ddeb4917bba0c2fed66c70e6db43 libX11 commit 6101b967b641355dd863fd1ce52c6a7d58bcbe68 libxtrans commit 17491de45c352c833442cccf17a9bd65909889db mesa commit 932b0ef1ceecf873213447a8778e5cbe1b3b6be7
-rw-r--r--X11/xtrans/Xtrans.c34
-rw-r--r--X11/xtrans/Xtrans.h20
-rw-r--r--X11/xtrans/Xtransint.h34
-rw-r--r--X11/xtrans/Xtranslcl.c74
-rw-r--r--X11/xtrans/Xtranssock.c35
-rw-r--r--X11/xtrans/doc/xtrans.xml88
-rw-r--r--libX11/nls/en_US.UTF-8/Compose.pre1
-rw-r--r--libxcb/src/c_client.py55
-rw-r--r--libxcb/src/xcb_conn.c26
-rw-r--r--libxcb/xcb-proto/doc/xml-xcb.txt43
-rw-r--r--libxcb/xcb-proto/src/xcb.xsd5
-rw-r--r--libxcb/xcb-proto/src/xinput.xml284
-rw-r--r--libxcb/xcb-proto/xcbgen/expr.py2
-rw-r--r--libxcb/xcb-proto/xcbgen/xtypes.py35
-rw-r--r--mesalib/configure.ac2
-rw-r--r--mesalib/docs/GL3.txt46
-rw-r--r--mesalib/include/HaikuGL/OpenGLKit.h2
-rw-r--r--mesalib/src/gallium/Automake.inc2
-rw-r--r--mesalib/src/gallium/Makefile.am17
-rw-r--r--mesalib/src/gallium/SConscript1
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_vbuf.c187
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_vbuf.h11
-rw-r--r--mesalib/src/glsl/ast_function.cpp10
-rw-r--r--mesalib/src/glsl/ast_to_hir.cpp14
-rw-r--r--mesalib/src/glsl/builtin_functions.cpp10
-rw-r--r--mesalib/src/glsl/glcpp/glcpp-lex.l10
-rw-r--r--mesalib/src/glsl/glsl_parser.yy5
-rw-r--r--mesalib/src/glsl/ir.cpp22
-rw-r--r--mesalib/src/glsl/ir.h44
-rw-r--r--mesalib/src/glsl/link_atomics.cpp4
-rw-r--r--mesalib/src/glsl/link_uniforms.cpp4
-rw-r--r--mesalib/src/hgl/GLRendererRoster.cpp2
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml1
-rw-r--r--mesalib/src/mesa/main/context.c3
-rw-r--r--mesalib/src/mesa/main/get_hash_params.py3
-rw-r--r--mesalib/src/mesa/main/mtypes.h6
-rw-r--r--mesalib/src/mesa/main/texobj.c16
-rw-r--r--mesalib/src/mesa/main/varray.c22
-rw-r--r--mesalib/src/mesa/program/program.c2
-rw-r--r--mesalib/src/mesa/state_tracker/st_extensions.c3
-rw-r--r--xorg-server/configure.ac2
-rw-r--r--xorg-server/dix/devices.c2
-rw-r--r--xorg-server/dri3/dri3.c10
-rw-r--r--xorg-server/fb/fbwindow.c2
-rw-r--r--xorg-server/glamor/glamor_copy.c55
-rw-r--r--xorg-server/glamor/glamor_font.c7
-rw-r--r--xorg-server/glamor/glamor_xv.c13
-rw-r--r--xorg-server/hw/kdrive/ephyr/ephyr.c8
-rw-r--r--xorg-server/hw/kdrive/ephyr/ephyr.h3
-rw-r--r--xorg-server/hw/kdrive/ephyr/ephyrinit.c31
-rw-r--r--xorg-server/hw/kdrive/ephyr/hostx.c156
-rw-r--r--xorg-server/hw/kdrive/ephyr/hostx.h10
-rw-r--r--xorg-server/hw/kdrive/src/kdrive.c23
-rw-r--r--xorg-server/hw/kdrive/src/kdrive.h2
-rw-r--r--xorg-server/hw/xfree86/common/xf86Bus.c3
-rw-r--r--xorg-server/hw/xfree86/common/xf86Xinput.h5
-rw-r--r--xorg-server/hw/xfree86/common/xf86platformBus.c22
-rw-r--r--xorg-server/hw/xfree86/common/xf86platformBus.h1
-rw-r--r--xorg-server/hw/xfree86/os-support/bsd/ppc_video.c2
-rw-r--r--xorg-server/hw/xquartz/xpr/xprScreen.c23
-rw-r--r--xorg-server/os/connection.c7
-rw-r--r--xorg-server/os/oscolor.c1554
62 files changed, 1901 insertions, 1225 deletions
diff --git a/X11/xtrans/Xtrans.c b/X11/xtrans/Xtrans.c
index ae8ffad8e..28808030c 100644
--- a/X11/xtrans/Xtrans.c
+++ b/X11/xtrans/Xtrans.c
@@ -185,7 +185,8 @@ TRANS(SelectTransport) (const char *protocol)
static
#endif /* TEST_t */
int
-TRANS(ParseAddress) (char *address, char **protocol, char **host, char **port)
+TRANS(ParseAddress) (const char *address,
+ char **protocol, char **host, char **port)
{
/*
@@ -391,7 +392,7 @@ TRANS(ParseAddress) (char *address, char **protocol, char **host, char **port)
*/
static XtransConnInfo
-TRANS(Open) (int type, char *address)
+TRANS(Open) (int type, const char *address)
{
char *protocol = NULL, *host = NULL, *port = NULL;
@@ -489,7 +490,7 @@ TRANS(Open) (int type, char *address)
*/
static XtransConnInfo
-TRANS(Reopen) (int type, int trans_id, int fd, char *port)
+TRANS(Reopen) (int type, int trans_id, int fd, const char *port)
{
XtransConnInfo ciptr = NULL;
@@ -563,7 +564,7 @@ TRANS(Reopen) (int type, int trans_id, int fd, char *port)
#ifdef TRANS_CLIENT
XtransConnInfo
-TRANS(OpenCOTSClient) (char *address)
+TRANS(OpenCOTSClient) (const char *address)
{
prmsg (2,"OpenCOTSClient(%s)\n", address);
@@ -576,7 +577,7 @@ TRANS(OpenCOTSClient) (char *address)
#ifdef TRANS_SERVER
XtransConnInfo
-TRANS(OpenCOTSServer) (char *address)
+TRANS(OpenCOTSServer) (const char *address)
{
prmsg (2,"OpenCOTSServer(%s)\n", address);
@@ -589,7 +590,7 @@ TRANS(OpenCOTSServer) (char *address)
#ifdef TRANS_CLIENT
XtransConnInfo
-TRANS(OpenCLTSClient) (char *address)
+TRANS(OpenCLTSClient) (const char *address)
{
prmsg (2,"OpenCLTSClient(%s)\n", address);
@@ -602,7 +603,7 @@ TRANS(OpenCLTSClient) (char *address)
#ifdef TRANS_SERVER
XtransConnInfo
-TRANS(OpenCLTSServer) (char *address)
+TRANS(OpenCLTSServer) (const char *address)
{
prmsg (2,"OpenCLTSServer(%s)\n", address);
@@ -615,7 +616,7 @@ TRANS(OpenCLTSServer) (char *address)
#ifdef TRANS_REOPEN
XtransConnInfo
-TRANS(ReopenCOTSServer) (int trans_id, int fd, char *port)
+TRANS(ReopenCOTSServer) (int trans_id, int fd, const char *port)
{
prmsg (2,"ReopenCOTSServer(%d, %d, %s)\n", trans_id, fd, port);
@@ -623,7 +624,7 @@ TRANS(ReopenCOTSServer) (int trans_id, int fd, char *port)
}
XtransConnInfo
-TRANS(ReopenCLTSServer) (int trans_id, int fd, char *port)
+TRANS(ReopenCLTSServer) (int trans_id, int fd, const char *port)
{
prmsg (2,"ReopenCLTSServer(%d, %d, %s)\n", trans_id, fd, port);
@@ -742,7 +743,7 @@ TRANS(SetOption) (XtransConnInfo ciptr, int option, int arg)
#ifdef TRANS_SERVER
int
-TRANS(CreateListener) (XtransConnInfo ciptr, char *port, unsigned int flags)
+TRANS(CreateListener) (XtransConnInfo ciptr, const char *port, unsigned int flags)
{
return ciptr->transptr->CreateListener (ciptr, port, flags);
@@ -851,7 +852,7 @@ TRANS(Accept) (XtransConnInfo ciptr, int *status)
#ifdef TRANS_CLIENT
int
-TRANS(Connect) (XtransConnInfo ciptr, char *address)
+TRANS(Connect) (XtransConnInfo ciptr, const char *address)
{
char *protocol;
@@ -1073,7 +1074,8 @@ complete_network_count (void)
static int
-receive_listening_fds(char* port, XtransConnInfo* temp_ciptrs, int* count_ret)
+receive_listening_fds(const char* port, XtransConnInfo* temp_ciptrs,
+ int* count_ret)
{
#ifdef HAVE_SYSTEMD_DAEMON
@@ -1150,8 +1152,8 @@ extern int xquartz_launchd_fd;
#endif
int
-TRANS(MakeAllCOTSServerListeners) (char *port, int *partial, int *count_ret,
- XtransConnInfo **ciptrs_ret)
+TRANS(MakeAllCOTSServerListeners) (const char *port, int *partial,
+ int *count_ret, XtransConnInfo **ciptrs_ret)
{
char buffer[256]; /* ??? What size ?? */
@@ -1281,8 +1283,8 @@ TRANS(MakeAllCOTSServerListeners) (char *port, int *partial, int *count_ret,
}
int
-TRANS(MakeAllCLTSServerListeners) (char *port, int *partial, int *count_ret,
- XtransConnInfo **ciptrs_ret)
+TRANS(MakeAllCLTSServerListeners) (const char *port, int *partial,
+ int *count_ret, XtransConnInfo **ciptrs_ret)
{
char buffer[256]; /* ??? What size ?? */
diff --git a/X11/xtrans/Xtrans.h b/X11/xtrans/Xtrans.h
index 5807b6728..6decc6b3a 100644
--- a/X11/xtrans/Xtrans.h
+++ b/X11/xtrans/Xtrans.h
@@ -236,7 +236,7 @@ void TRANS(FreeConnInfo) (
#ifdef TRANS_CLIENT
XtransConnInfo TRANS(OpenCOTSClient)(
- char * /* address */
+ const char * /* address */
);
#endif /* TRANS_CLIENT */
@@ -244,7 +244,7 @@ XtransConnInfo TRANS(OpenCOTSClient)(
#ifdef TRANS_SERVER
XtransConnInfo TRANS(OpenCOTSServer)(
- char * /* address */
+ const char * /* address */
);
#endif /* TRANS_SERVER */
@@ -252,7 +252,7 @@ XtransConnInfo TRANS(OpenCOTSServer)(
#ifdef TRANS_CLIENT
XtransConnInfo TRANS(OpenCLTSClient)(
- char * /* address */
+ const char * /* address */
);
#endif /* TRANS_CLIENT */
@@ -260,7 +260,7 @@ XtransConnInfo TRANS(OpenCLTSClient)(
#ifdef TRANS_SERVER
XtransConnInfo TRANS(OpenCLTSServer)(
- char * /* address */
+ const char * /* address */
);
#endif /* TRANS_SERVER */
@@ -270,13 +270,13 @@ XtransConnInfo TRANS(OpenCLTSServer)(
XtransConnInfo TRANS(ReopenCOTSServer)(
int, /* trans_id */
int, /* fd */
- char * /* port */
+ const char * /* port */
);
XtransConnInfo TRANS(ReopenCLTSServer)(
int, /* trans_id */
int, /* fd */
- char * /* port */
+ const char * /* port */
);
int TRANS(GetReopenInfo)(
@@ -299,7 +299,7 @@ int TRANS(SetOption)(
int TRANS(CreateListener)(
XtransConnInfo, /* ciptr */
- char *, /* port */
+ const char *, /* port */
unsigned int /* flags */
);
@@ -330,7 +330,7 @@ XtransConnInfo TRANS(Accept)(
int TRANS(Connect)(
XtransConnInfo, /* ciptr */
- char * /* address */
+ const char * /* address */
);
#endif /* TRANS_CLIENT */
@@ -405,14 +405,14 @@ int TRANS(GetConnectionNumber)(
#ifdef TRANS_SERVER
int TRANS(MakeAllCOTSServerListeners)(
- char *, /* port */
+ const char *, /* port */
int *, /* partial */
int *, /* count_ret */
XtransConnInfo ** /* ciptrs_ret */
);
int TRANS(MakeAllCLTSServerListeners)(
- char *, /* port */
+ const char *, /* port */
int *, /* partial */
int *, /* count_ret */
XtransConnInfo ** /* ciptrs_ret */
diff --git a/X11/xtrans/Xtransint.h b/X11/xtrans/Xtransint.h
index 4c670b88a..5ff824de0 100644
--- a/X11/xtrans/Xtransint.h
+++ b/X11/xtrans/Xtransint.h
@@ -163,9 +163,9 @@ typedef struct _Xtransport {
XtransConnInfo (*OpenCOTSClient)(
struct _Xtransport *, /* transport */
- char *, /* protocol */
- char *, /* host */
- char * /* port */
+ const char *, /* protocol */
+ const char *, /* host */
+ const char * /* port */
);
#endif /* TRANS_CLIENT */
@@ -174,9 +174,9 @@ typedef struct _Xtransport {
const char ** nolisten;
XtransConnInfo (*OpenCOTSServer)(
struct _Xtransport *, /* transport */
- char *, /* protocol */
- char *, /* host */
- char * /* port */
+ const char *, /* protocol */
+ const char *, /* host */
+ const char * /* port */
);
#endif /* TRANS_SERVER */
@@ -185,9 +185,9 @@ typedef struct _Xtransport {
XtransConnInfo (*OpenCLTSClient)(
struct _Xtransport *, /* transport */
- char *, /* protocol */
- char *, /* host */
- char * /* port */
+ const char *, /* protocol */
+ const char *, /* host */
+ const char * /* port */
);
#endif /* TRANS_CLIENT */
@@ -196,9 +196,9 @@ typedef struct _Xtransport {
XtransConnInfo (*OpenCLTSServer)(
struct _Xtransport *, /* transport */
- char *, /* protocol */
- char *, /* host */
- char * /* port */
+ const char *, /* protocol */
+ const char *, /* host */
+ const char * /* port */
);
#endif /* TRANS_SERVER */
@@ -209,13 +209,13 @@ typedef struct _Xtransport {
XtransConnInfo (*ReopenCOTSServer)(
struct _Xtransport *, /* transport */
int, /* fd */
- char * /* port */
+ const char * /* port */
);
XtransConnInfo (*ReopenCLTSServer)(
struct _Xtransport *, /* transport */
int, /* fd */
- char * /* port */
+ const char * /* port */
);
#endif /* TRANS_REOPEN */
@@ -233,7 +233,7 @@ typedef struct _Xtransport {
int (*CreateListener)(
XtransConnInfo, /* connection */
- char *, /* port */
+ const char *, /* port */
unsigned int /* flags */
);
@@ -252,8 +252,8 @@ typedef struct _Xtransport {
int (*Connect)(
XtransConnInfo, /* connection */
- char *, /* host */
- char * /* port */
+ const char *, /* host */
+ const char * /* port */
);
#endif /* TRANS_CLIENT */
diff --git a/X11/xtrans/Xtranslcl.c b/X11/xtrans/Xtranslcl.c
index 4deb86c40..3217506c3 100644
--- a/X11/xtrans/Xtranslcl.c
+++ b/X11/xtrans/Xtranslcl.c
@@ -123,7 +123,7 @@ static int TRANS(LocalClose)(XtransConnInfo ciptr);
/* Type Not Supported */
static int
-TRANS(OpenFail)(XtransConnInfo ciptr _X_UNUSED, char *port _X_UNUSED)
+TRANS(OpenFail)(XtransConnInfo ciptr _X_UNUSED, const char *port _X_UNUSED)
{
return -1;
@@ -132,7 +132,8 @@ TRANS(OpenFail)(XtransConnInfo ciptr _X_UNUSED, char *port _X_UNUSED)
#ifdef TRANS_REOPEN
static int
-TRANS(ReopenFail)(XtransConnInfo ciptr _X_UNUSED, int fd _X_UNUSED, char *port _X_UNUSED)
+TRANS(ReopenFail)(XtransConnInfo ciptr _X_UNUSED, int fd _X_UNUSED,
+ const char *port _X_UNUSED)
{
return 0;
@@ -158,7 +159,8 @@ TRANS(LocalSendFdInvalid)(XtransConnInfo ciptr, int fd, int do_close)
static int
-TRANS(FillAddrInfo)(XtransConnInfo ciptr, char *sun_path, char *peer_sun_path)
+TRANS(FillAddrInfo)(XtransConnInfo ciptr,
+ const char *sun_path, const char *peer_sun_path)
{
struct sockaddr_un *sunaddr;
@@ -316,7 +318,7 @@ static void _dummy(int sig _X_UNUSED)
#ifdef TRANS_CLIENT
static int
-TRANS(PTSOpenClient)(XtransConnInfo ciptr, char *port)
+TRANS(PTSOpenClient)(XtransConnInfo ciptr, const char *port)
{
#ifdef PTSNODENAME
@@ -468,7 +470,7 @@ TRANS(PTSOpenClient)(XtransConnInfo ciptr, char *port)
#ifdef TRANS_SERVER
static int
-TRANS(PTSOpenServer)(XtransConnInfo ciptr, char *port)
+TRANS(PTSOpenServer)(XtransConnInfo ciptr, const char *port)
{
#ifdef PTSNODENAME
@@ -669,7 +671,7 @@ TRANS(PTSAccept)(XtransConnInfo ciptr, XtransConnInfo newciptr, int *status)
#ifdef TRANS_CLIENT
static int
-TRANS(NAMEDOpenClient)(XtransConnInfo ciptr, char *port)
+TRANS(NAMEDOpenClient)(XtransConnInfo ciptr, const char *port)
{
#ifdef NAMEDNODENAME
@@ -806,7 +808,7 @@ TRANS(NAMEDOpenPipe)(const char *server_path)
#endif
static int
-TRANS(NAMEDOpenServer)(XtransConnInfo ciptr, char *port)
+TRANS(NAMEDOpenServer)(XtransConnInfo ciptr, const char *port)
{
#ifdef NAMEDNODENAME
int fd;
@@ -1012,7 +1014,7 @@ named_spipe(int fd, char *path)
#ifdef TRANS_CLIENT
static int
-TRANS(SCOOpenClient)(XtransConnInfo ciptr, char *port)
+TRANS(SCOOpenClient)(XtransConnInfo ciptr, const char *port)
{
#ifdef SCORNODENAME
int fd, server, fl, ret;
@@ -1100,7 +1102,7 @@ TRANS(SCOOpenClient)(XtransConnInfo ciptr, char *port)
#ifdef TRANS_SERVER
static int
-TRANS(SCOOpenServer)(XtransConnInfo ciptr, char *port)
+TRANS(SCOOpenServer)(XtransConnInfo ciptr, const char *port)
{
#ifdef SCORNODENAME
char serverR_path[64];
@@ -1276,7 +1278,7 @@ TRANS(SCOAccept)(XtransConnInfo ciptr, XtransConnInfo newciptr, int *status)
#ifdef LOCAL_TRANS_PTS
static int
-TRANS(PTSReopenServer)(XtransConnInfo ciptr, int fd, char *port)
+TRANS(PTSReopenServer)(XtransConnInfo ciptr, int fd, const char *port)
{
#ifdef PTSNODENAME
@@ -1317,7 +1319,7 @@ TRANS(PTSReopenServer)(XtransConnInfo ciptr, int fd, char *port)
#ifdef LOCAL_TRANS_NAMED
static int
-TRANS(NAMEDReopenServer)(XtransConnInfo ciptr, int fd _X_UNUSED, char *port)
+TRANS(NAMEDReopenServer)(XtransConnInfo ciptr, int fd _X_UNUSED, const char *port)
{
#ifdef NAMEDNODENAME
@@ -1358,7 +1360,7 @@ TRANS(NAMEDReopenServer)(XtransConnInfo ciptr, int fd _X_UNUSED, char *port)
#ifdef LOCAL_TRANS_SCO
static int
-TRANS(SCOReopenServer)(XtransConnInfo ciptr, int fd, char *port)
+TRANS(SCOReopenServer)(XtransConnInfo ciptr, int fd, const char *port)
{
#ifdef SCORNODENAME
@@ -1407,7 +1409,7 @@ typedef struct _LOCALtrans2dev {
#ifdef TRANS_CLIENT
int (*devcotsopenclient)(
- XtransConnInfo, char * /*port*/
+ XtransConnInfo, const char * /*port*/
);
#endif /* TRANS_CLIENT */
@@ -1415,7 +1417,7 @@ typedef struct _LOCALtrans2dev {
#ifdef TRANS_SERVER
int (*devcotsopenserver)(
- XtransConnInfo, char * /*port*/
+ XtransConnInfo, const char * /*port*/
);
#endif /* TRANS_SERVER */
@@ -1423,7 +1425,7 @@ typedef struct _LOCALtrans2dev {
#ifdef TRANS_CLIENT
int (*devcltsopenclient)(
- XtransConnInfo, char * /*port*/
+ XtransConnInfo, const char * /*port*/
);
#endif /* TRANS_CLIENT */
@@ -1431,7 +1433,7 @@ typedef struct _LOCALtrans2dev {
#ifdef TRANS_SERVER
int (*devcltsopenserver)(
- XtransConnInfo, char * /*port*/
+ XtransConnInfo, const char * /*port*/
);
#endif /* TRANS_SERVER */
@@ -1441,13 +1443,13 @@ typedef struct _LOCALtrans2dev {
int (*devcotsreopenserver)(
XtransConnInfo,
int, /* fd */
- char * /* port */
+ const char * /* port */
);
int (*devcltsreopenserver)(
XtransConnInfo,
int, /* fd */
- char * /* port */
+ const char * /* port */
);
#endif /* TRANS_REOPEN */
@@ -1757,7 +1759,7 @@ TRANS(LocalGetNextTransport)(void)
*/
static int
-HostReallyLocal (char *host)
+HostReallyLocal (const char *host)
{
/*
@@ -1787,7 +1789,8 @@ HostReallyLocal (char *host)
static XtransConnInfo
-TRANS(LocalOpenClient)(int type, char *protocol, char *host, char *port)
+TRANS(LocalOpenClient)(int type, const char *protocol,
+ const char *host, const char *port)
{
LOCALtrans2dev *transptr;
@@ -1882,7 +1885,8 @@ TRANS(LocalOpenClient)(int type, char *protocol, char *host, char *port)
#ifdef TRANS_SERVER
static XtransConnInfo
-TRANS(LocalOpenServer)(int type, char *protocol, char *host _X_UNUSED, char *port)
+TRANS(LocalOpenServer)(int type, const char *protocol,
+ const char *host _X_UNUSED, const char *port)
{
int i;
@@ -1945,7 +1949,7 @@ TRANS(LocalOpenServer)(int type, char *protocol, char *host _X_UNUSED, char *por
#ifdef TRANS_REOPEN
static XtransConnInfo
-TRANS(LocalReopenServer)(int type, int index, int fd, char *port)
+TRANS(LocalReopenServer)(int type, int index, int fd, const char *port)
{
XtransConnInfo ciptr;
@@ -1997,8 +2001,8 @@ TRANS(LocalReopenServer)(int type, int index, int fd, char *port)
#ifdef TRANS_CLIENT
static XtransConnInfo
-TRANS(LocalOpenCOTSClient)(Xtransport *thistrans _X_UNUSED, char *protocol,
- char *host, char *port)
+TRANS(LocalOpenCOTSClient)(Xtransport *thistrans _X_UNUSED, const char *protocol,
+ const char *host, const char *port)
{
prmsg(2,"LocalOpenCOTSClient(%s,%s,%s)\n",protocol,host,port);
@@ -2012,8 +2016,8 @@ TRANS(LocalOpenCOTSClient)(Xtransport *thistrans _X_UNUSED, char *protocol,
#ifdef TRANS_SERVER
static XtransConnInfo
-TRANS(LocalOpenCOTSServer)(Xtransport *thistrans, char *protocol,
- char *host, char *port)
+TRANS(LocalOpenCOTSServer)(Xtransport *thistrans, const char *protocol,
+ const char *host, const char *port)
{
char *typetocheck = NULL;
@@ -2056,8 +2060,8 @@ TRANS(LocalOpenCOTSServer)(Xtransport *thistrans, char *protocol,
#ifdef TRANS_CLIENT
static XtransConnInfo
-TRANS(LocalOpenCLTSClient)(Xtransport *thistrans _X_UNUSED, char *protocol,
- char *host, char *port)
+TRANS(LocalOpenCLTSClient)(Xtransport *thistrans _X_UNUSED, const char *protocol,
+ const char *host, const char *port)
{
prmsg(2,"LocalOpenCLTSClient(%s,%s,%s)\n",protocol,host,port);
@@ -2071,8 +2075,8 @@ TRANS(LocalOpenCLTSClient)(Xtransport *thistrans _X_UNUSED, char *protocol,
#ifdef TRANS_SERVER
static XtransConnInfo
-TRANS(LocalOpenCLTSServer)(Xtransport *thistrans _X_UNUSED, char *protocol,
- char *host, char *port)
+TRANS(LocalOpenCLTSServer)(Xtransport *thistrans _X_UNUSED, const char *protocol,
+ const char *host, const char *port)
{
prmsg(2,"LocalOpenCLTSServer(%s,%s,%s)\n",protocol,host,port);
@@ -2086,7 +2090,7 @@ TRANS(LocalOpenCLTSServer)(Xtransport *thistrans _X_UNUSED, char *protocol,
#ifdef TRANS_REOPEN
static XtransConnInfo
-TRANS(LocalReopenCOTSServer)(Xtransport *thistrans, int fd, char *port)
+TRANS(LocalReopenCOTSServer)(Xtransport *thistrans, int fd, const char *port)
{
int index;
@@ -2110,7 +2114,7 @@ TRANS(LocalReopenCOTSServer)(Xtransport *thistrans, int fd, char *port)
}
static XtransConnInfo
-TRANS(LocalReopenCLTSServer)(Xtransport *thistrans, int fd, char *port)
+TRANS(LocalReopenCLTSServer)(Xtransport *thistrans, int fd, const char *port)
{
int index;
@@ -2150,7 +2154,8 @@ TRANS(LocalSetOption)(XtransConnInfo ciptr, int option, int arg)
#ifdef TRANS_SERVER
static int
-TRANS(LocalCreateListener)(XtransConnInfo ciptr, char *port, unsigned int flags _X_UNUSED)
+TRANS(LocalCreateListener)(XtransConnInfo ciptr, const char *port,
+ unsigned int flags _X_UNUSED)
{
prmsg(2,"LocalCreateListener(%p->%d,%s)\n",ciptr,ciptr->fd,port);
@@ -2215,7 +2220,8 @@ TRANS(LocalAccept)(XtransConnInfo ciptr, int *status)
#ifdef TRANS_CLIENT
static int
-TRANS(LocalConnect)(XtransConnInfo ciptr, char *host _X_UNUSED, char *port)
+TRANS(LocalConnect)(XtransConnInfo ciptr,
+ const char *host _X_UNUSED, const char *port)
{
prmsg(2,"LocalConnect(%p->%d,%s)\n", ciptr, ciptr->fd, port);
diff --git a/X11/xtrans/Xtranssock.c b/X11/xtrans/Xtranssock.c
index 6cde146cd..d830e7c6c 100644
--- a/X11/xtrans/Xtranssock.c
+++ b/X11/xtrans/Xtranssock.c
@@ -473,7 +473,7 @@ TRANS(SocketOpen) (int i, int type)
#ifdef TRANS_REOPEN
static XtransConnInfo
-TRANS(SocketReopen) (int i _X_UNUSED, int type, int fd, char *port)
+TRANS(SocketReopen) (int i _X_UNUSED, int type, int fd, const char *port)
{
XtransConnInfo ciptr;
@@ -596,8 +596,8 @@ TRANS(SocketOpenCOTSClientBase) (const char *transname, const char *protocol,
}
static XtransConnInfo
-TRANS(SocketOpenCOTSClient) (Xtransport *thistrans, char *protocol,
- char *host, char *port)
+TRANS(SocketOpenCOTSClient) (Xtransport *thistrans, const char *protocol,
+ const char *host, const char *port)
{
return TRANS(SocketOpenCOTSClientBase)(
thistrans->TransName, protocol, host, port, -1);
@@ -610,8 +610,8 @@ TRANS(SocketOpenCOTSClient) (Xtransport *thistrans, char *protocol,
#ifdef TRANS_SERVER
static XtransConnInfo
-TRANS(SocketOpenCOTSServer) (Xtransport *thistrans, char *protocol,
- char *host, char *port)
+TRANS(SocketOpenCOTSServer) (Xtransport *thistrans, const char *protocol,
+ const char *host, const char *port)
{
XtransConnInfo ciptr;
@@ -677,8 +677,8 @@ TRANS(SocketOpenCOTSServer) (Xtransport *thistrans, char *protocol,
#ifdef TRANS_CLIENT
static XtransConnInfo
-TRANS(SocketOpenCLTSClient) (Xtransport *thistrans, char *protocol,
- char *host, char *port)
+TRANS(SocketOpenCLTSClient) (Xtransport *thistrans, const char *protocol,
+ const char *host, const char *port)
{
XtransConnInfo ciptr;
@@ -716,8 +716,8 @@ TRANS(SocketOpenCLTSClient) (Xtransport *thistrans, char *protocol,
#ifdef TRANS_SERVER
static XtransConnInfo
-TRANS(SocketOpenCLTSServer) (Xtransport *thistrans, char *protocol,
- char *host, char *port)
+TRANS(SocketOpenCLTSServer) (Xtransport *thistrans, const char *protocol,
+ const char *host, const char *port)
{
XtransConnInfo ciptr;
@@ -762,7 +762,7 @@ TRANS(SocketOpenCLTSServer) (Xtransport *thistrans, char *protocol,
#ifdef TRANS_REOPEN
static XtransConnInfo
-TRANS(SocketReopenCOTSServer) (Xtransport *thistrans, int fd, char *port)
+TRANS(SocketReopenCOTSServer) (Xtransport *thistrans, int fd, const char *port)
{
XtransConnInfo ciptr;
@@ -796,7 +796,7 @@ TRANS(SocketReopenCOTSServer) (Xtransport *thistrans, int fd, char *port)
}
static XtransConnInfo
-TRANS(SocketReopenCLTSServer) (Xtransport *thistrans, int fd, char *port)
+TRANS(SocketReopenCLTSServer) (Xtransport *thistrans, int fd, const char *port)
{
XtransConnInfo ciptr;
@@ -947,7 +947,8 @@ TRANS(SocketCreateListener) (XtransConnInfo ciptr,
#ifdef TCPCONN
static int
-TRANS(SocketINETCreateListener) (XtransConnInfo ciptr, char *port, unsigned int flags)
+TRANS(SocketINETCreateListener) (XtransConnInfo ciptr, const char *port,
+ unsigned int flags)
{
#if defined(IPv6) && defined(AF_INET6)
@@ -1075,7 +1076,7 @@ TRANS(SocketINETCreateListener) (XtransConnInfo ciptr, char *port, unsigned int
#ifdef UNIXCONN
static int
-TRANS(SocketUNIXCreateListener) (XtransConnInfo ciptr, char *port,
+TRANS(SocketUNIXCreateListener) (XtransConnInfo ciptr, const char *port,
unsigned int flags)
{
@@ -1431,7 +1432,8 @@ static struct addrlist *addrlist = NULL;
static int
-TRANS(SocketINETConnect) (XtransConnInfo ciptr, char *host, char *port)
+TRANS(SocketINETConnect) (XtransConnInfo ciptr,
+ const char *host, const char *port)
{
struct sockaddr * socketaddr = NULL;
@@ -1813,7 +1815,7 @@ TRANS(SocketINETConnect) (XtransConnInfo ciptr, char *host, char *port)
*/
static int
-UnixHostReallyLocal (char *host)
+UnixHostReallyLocal (const char *host)
{
char hostnamebuf[256];
@@ -1944,7 +1946,8 @@ UnixHostReallyLocal (char *host)
}
static int
-TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port)
+TRANS(SocketUNIXConnect) (XtransConnInfo ciptr,
+ const char *host, const char *port)
{
struct sockaddr_un sockname;
diff --git a/X11/xtrans/doc/xtrans.xml b/X11/xtrans/doc/xtrans.xml
index 59daa3fc0..e3bc1c9a0 100644
--- a/X11/xtrans/doc/xtrans.xml
+++ b/X11/xtrans/doc/xtrans.xml
@@ -187,35 +187,35 @@ points for a single transport. This record is defined as:
<synopsis>
typedef struct _Xtransport {
- char *TransName;
+ const char *TransName;
int flags;
XtransConnInfo (*OpenCOTSClient)(
- struct _Xtransport *, /* transport */
- char *, /* protocol */
- char *, /* host */
- char * /* port */
+ struct _Xtransport *, /* transport */
+ const char *, /* protocol */
+ const char *, /* host */
+ const char * /* port */
);
XtransConnInfo (*OpenCOTSServer)(
- struct _Xtransport *, /* transport */
- char *, /* protocol */
- char *, /* host */
- char * /* port */
+ struct _Xtransport *, /* transport */
+ const char *, /* protocol */
+ const char *, /* host */
+ const char * /* port */
);
XtransConnInfo (*OpenCLTSClient)(
- struct _Xtransport *, /* transport */
- char *, /* protocol */
- char *, /* host */
- char * /* port */
+ struct _Xtransport *, /* transport */
+ const char *, /* protocol */
+ const char *, /* host */
+ const char * /* port */
);
XtransConnInfo (*OpenCLTSServer)(
- struct _Xtransport *, /* transport */
- char *, /* protocol */
- char *, /* host */
- char * /* port */
+ struct _Xtransport *, /* transport */
+ const char *, /* protocol */
+ const char *, /* host */
+ const char * /* port */
);
int (*SetOption)(
@@ -226,8 +226,8 @@ typedef struct _Xtransport {
int (*CreateListener)(
XtransConnInfo, /* connection */
- char *, /* port */
- int /* flags */
+ const char *, /* port */
+ int /* flags */
);
int (*ResetListener)(
@@ -240,8 +240,8 @@ typedef struct _Xtransport {
int (*Connect)(
XtransConnInfo, /* connection */
- char *, /* host */
- char * /* port */
+ const char *, /* host */
+ const char * /* port */
);
int (*BytesReadable)(
@@ -393,7 +393,7 @@ errno will be available for debugging purposes.
<funcsynopsis id='TRANSOpenCOTSClient'>
<funcprototype>
<funcdef>XtransConnInfo <function>TRANS(OpenCOTSClient)</function></funcdef>
- <paramdef>char *<parameter>address</parameter></paramdef>
+ <paramdef>const char *<parameter>address</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
@@ -408,7 +408,7 @@ success, or <constant>NULL</constant> on failure.
<funcsynopsis id='TRANSOpenCOTSServer'>
<funcprototype>
<funcdef>XtransConnInfo <function>TRANS(OpenCOTSServer)</function></funcdef>
- <paramdef>char *<parameter>address</parameter></paramdef>
+ <paramdef>const char *<parameter>address</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
@@ -423,7 +423,7 @@ on failure.
<funcsynopsis id='TRANSOpenCLTSClient'>
<funcprototype>
<funcdef>XtransConnInfo <function>TRANS(OpenCLTSClient)</function></funcdef>
- <paramdef>char *<parameter>address</parameter></paramdef>
+ <paramdef>const char *<parameter>address</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
@@ -438,7 +438,7 @@ function returns an opaque transport connection object on success, or
<funcsynopsis id='TRANSOpenCLTSServer'>
<funcprototype>
<funcdef>XtransConnInfo <function>TRANS(OpenCLTSServer)</function></funcdef>
- <paramdef>char *<parameter>address</parameter></paramdef>
+ <paramdef>const char *<parameter>address</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
@@ -480,7 +480,7 @@ Based on current usage, the complimentary function
<funcprototype>
<funcdef>int <function>TRANS(CreateListener)</function></funcdef>
<paramdef>XtransConnInfo <parameter>connection</parameter></paramdef>
- <paramdef>char *<parameter>port</parameter></paramdef>
+ <paramdef>const char *<parameter>port</parameter></paramdef>
<paramdef>int <parameter>flags</parameter></paramdef>
</funcprototype>
</funcsynopsis>
@@ -542,7 +542,7 @@ new opaque transport connection object upon success,
<funcprototype>
<funcdef>int <function>TRANS(Connect)</function></funcdef>
<paramdef>XtransConnInfo <parameter>connection</parameter></paramdef>
- <paramdef>char *<parameter>address</parameter></paramdef>
+ <paramdef>const char *<parameter>address</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
@@ -712,7 +712,7 @@ Returns the file descriptor associated with this transport.
<funcsynopsis id='TRANSMakeAllCOTSServerListeners'>
<funcprototype>
<funcdef>int <function>TRANS(MakeAllCOTSServerListeners)</function></funcdef>
- <paramdef>char *<parameter>port</parameter></paramdef>
+ <paramdef>const char *<parameter>port</parameter></paramdef>
<paramdef>int *<parameter>partial_ret</parameter></paramdef>
<paramdef>int *<parameter>count_ret</parameter></paramdef>
<paramdef>XtransConnInfo **<parameter>connections_ret</parameter></paramdef>
@@ -731,7 +731,7 @@ is the list of transports.
<funcsynopsis id='TRANSMakeAllCLTSServerListeners'>
<funcprototype>
<funcdef>int <function>TRANS(MakeAllCLTSServerListeners)</function></funcdef>
- <paramdef>char *<parameter>port</parameter></paramdef>
+ <paramdef>const char *<parameter>port</parameter></paramdef>
<paramdef>int *<parameter>partial_ret</parameter></paramdef>
<paramdef>int *<parameter>count_ret</parameter></paramdef>
<paramdef>XtransConnInfo **<parameter>connections_ret</parameter></paramdef>
@@ -826,9 +826,9 @@ the <code>#ifdef SUNSYSV</code> should be handled inside these functions.
<funcprototype>
<funcdef>XtransConnInfo *<function>OpenCOTSClient</function></funcdef>
<paramdef>struct _Xtransport *<parameter>thistrans</parameter></paramdef>
- <paramdef>char *<parameter>protocol</parameter></paramdef>
- <paramdef>char *<parameter>host</parameter></paramdef>
- <paramdef>char *<parameter>port</parameter></paramdef>
+ <paramdef>const char *<parameter>protocol</parameter></paramdef>
+ <paramdef>const char *<parameter>host</parameter></paramdef>
+ <paramdef>const char *<parameter>port</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
@@ -850,9 +850,9 @@ this function.
<funcprototype>
<funcdef>XtransConnInfo *<function>OpenCOTSServer</function></funcdef>
<paramdef>struct _Xtransport *<parameter>thistrans</parameter></paramdef>
- <paramdef>char *<parameter>protocol</parameter></paramdef>
- <paramdef>char *<parameter>host</parameter></paramdef>
- <paramdef>char *<parameter>port</parameter></paramdef>
+ <paramdef>const char *<parameter>protocol</parameter></paramdef>
+ <paramdef>const char *<parameter>host</parameter></paramdef>
+ <paramdef>const char *<parameter>port</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
@@ -872,9 +872,9 @@ will open the transport.
<funcprototype>
<funcdef>XtransConnInfo *<function>OpenCLTSClient</function></funcdef>
<paramdef>struct _Xtransport *<parameter>thistrans</parameter></paramdef>
- <paramdef>char *<parameter>protocol</parameter></paramdef>
- <paramdef>char *<parameter>host</parameter></paramdef>
- <paramdef>char *<parameter>port</parameter></paramdef>
+ <paramdef>const char *<parameter>protocol</parameter></paramdef>
+ <paramdef>const char *<parameter>host</parameter></paramdef>
+ <paramdef>const char *<parameter>port</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
@@ -896,9 +896,9 @@ in by this function.
<funcprototype>
<funcdef>XtransConnInfo *<function>OpenCLTSServer</function></funcdef>
<paramdef>struct _Xtransport *<parameter>thistrans</parameter></paramdef>
- <paramdef>char *<parameter>protocol</parameter></paramdef>
- <paramdef>char *<parameter>host</parameter></paramdef>
- <paramdef>char *<parameter>port</parameter></paramdef>
+ <paramdef>const char *<parameter>protocol</parameter></paramdef>
+ <paramdef>const char *<parameter>host</parameter></paramdef>
+ <paramdef>const char *<parameter>port</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
@@ -935,7 +935,7 @@ different transport type is added, or a transport dependent option is defined.
<funcprototype>
<funcdef>int <function>CreateListener</function></funcdef>
<paramdef>struct _Xtransport *<parameter>thistrans</parameter></paramdef>
- <paramdef>char <parameter>*port</parameter></paramdef>
+ <paramdef>const char <parameter>*port</parameter></paramdef>
<paramdef>int <parameter>flags</parameter></paramdef>
</funcprototype>
</funcsynopsis>
@@ -987,8 +987,8 @@ structure describing the new endpoint is returned from this function
<funcprototype>
<funcdef>int <function>Connect</function></funcdef>
<paramdef>struct _Xtransport *<parameter>thistrans</parameter></paramdef>
- <paramdef>char *<parameter>host</parameter></paramdef>
- <paramdef>char *<parameter>port</parameter></paramdef>
+ <paramdef>const char *<parameter>host</parameter></paramdef>
+ <paramdef>const char *<parameter>port</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
diff --git a/libX11/nls/en_US.UTF-8/Compose.pre b/libX11/nls/en_US.UTF-8/Compose.pre
index 23829b4cc..4a965708d 100644
--- a/libX11/nls/en_US.UTF-8/Compose.pre
+++ b/libX11/nls/en_US.UTF-8/Compose.pre
@@ -4535,6 +4535,7 @@ XCOMM Part 3
<Multi_key> <KP_Divide> <U2194> : "↮" U21AE # LEFT RIGHT ARROW WITH STROKE
<Multi_key> <less> <minus> : "←" U2190 # LEFTWARDS ARROW
<Multi_key> <minus> <greater> : "→" U2192 # RIGHTWARDS ARROW
+<Multi_key> <equal> <greater> : "⇒" U21D2 # RIGHTWARDS DOUBLE ARROW
<Multi_key> <U2203> <U0338> : "∄" U2204 # THERE DOES NOT EXIST
<Multi_key> <braceleft> <braceright> : "∅" U2205 # EMPTY SET
<Multi_key> <U2208> <U0338> : "∉" U2209 # NOT AN ELEMENT OF
diff --git a/libxcb/src/c_client.py b/libxcb/src/c_client.py
index 54e56c42d..87f268b61 100644
--- a/libxcb/src/c_client.py
+++ b/libxcb/src/c_client.py
@@ -358,7 +358,7 @@ def _c_type_setup(self, name, postfix):
field.c_pointer = '*'
field.c_field_const_type = 'const ' + field.c_field_type
self.c_need_aux = True
- elif not field.type.fixed_size() and not field.type.is_bitcase:
+ elif not field.type.fixed_size() and not field.type.is_case_or_bitcase:
self.c_need_sizeof = True
field.c_iterator_type = _t(field.field_type + ('iterator',)) # xcb_fieldtype_iterator_t
@@ -407,7 +407,7 @@ def _c_type_setup(self, name, postfix):
# no list with switch as element, so no call to
# _c_iterator(field.type, field_name) necessary
- if not self.is_bitcase:
+ if not self.is_case_or_bitcase:
if self.c_need_serialize:
if self.c_serialize_name not in finished_serializers:
finished_serializers.append(self.c_serialize_name)
@@ -437,7 +437,7 @@ def _c_helper_absolute_name(prefix, field=None):
prefix_str += name
if '' == sep:
sep = '->'
- if ((obj.is_bitcase and obj.has_name) or # named bitcase
+ if ((obj.is_case_or_bitcase and obj.has_name) or # named bitcase
(obj.is_switch and len(obj.parents)>1)):
sep = '.'
prefix_str += sep
@@ -470,7 +470,7 @@ def _c_helper_field_mapping(complex_type, prefix, flat=False):
all_fields[f.field_name] = (fname, f)
if f.type.is_container and flat==False:
- if f.type.is_bitcase and not f.type.has_name:
+ if f.type.is_case_or_bitcase and not f.type.has_name:
new_prefix = prefix
elif f.type.is_switch and len(f.type.parents)>1:
# nested switch gets another separator
@@ -493,10 +493,10 @@ def _c_helper_resolve_field_names (prefix):
name, sep, obj = p
if ''==sep:
# sep can be preset in prefix, if not, make a sensible guess
- sep = '.' if (obj.is_switch or obj.is_bitcase) else '->'
+ sep = '.' if (obj.is_switch or obj.is_case_or_bitcase) else '->'
# exception: 'toplevel' object (switch as well!) always have sep '->'
sep = '->' if idx<1 else sep
- if not obj.is_bitcase or (obj.is_bitcase and obj.has_name):
+ if not obj.is_case_or_bitcase or (obj.is_case_or_bitcase and obj.has_name):
tmp_prefix.append((name, sep, obj))
all_fields.update(_c_helper_field_mapping(obj, tmp_prefix, flat=True))
@@ -689,18 +689,29 @@ def _c_serialize_helper_switch(context, self, complex_name,
for b in self.bitcases:
len_expr = len(b.type.expr)
+
+ compare_operator = '&'
+ if b.type.is_case:
+ compare_operator = '=='
+ else:
+ compare_operator = '&'
+
for n, expr in enumerate(b.type.expr):
bitcase_expr = _c_accessor_get_expr(expr, None)
# only one <enumref> in the <bitcase>
if len_expr == 1:
- code_lines.append(' if(%s & %s) {' % (switch_expr, bitcase_expr))
+ code_lines.append(
+ ' if(%s %s %s) {' % (switch_expr, compare_operator, bitcase_expr))
# multiple <enumref> in the <bitcase>
elif n == 0: # first
- code_lines.append(' if((%s & %s) ||' % (switch_expr, bitcase_expr))
+ code_lines.append(
+ ' if((%s %s %s) ||' % (switch_expr, compare_operator, bitcase_expr))
elif len_expr == (n + 1): # last
- code_lines.append(' (%s & %s)) {' % (switch_expr, bitcase_expr))
+ code_lines.append(
+ ' (%s %s %s)) {' % (switch_expr, compare_operator, bitcase_expr))
else: # between first and last
- code_lines.append(' (%s & %s) ||' % (switch_expr, bitcase_expr))
+ code_lines.append(
+ ' (%s %s %s) ||' % (switch_expr, compare_operator, bitcase_expr))
b_prefix = prefix
if b.type.has_name:
@@ -710,7 +721,7 @@ def _c_serialize_helper_switch(context, self, complex_name,
code_lines, temp_vars,
"%s " % space,
b_prefix,
- is_bitcase = True)
+ is_case_or_bitcase = True)
code_lines.append(' }')
# if 'serialize' == context:
@@ -834,7 +845,7 @@ def _c_serialize_helper_fields_fixed_size(context, self, field,
code_lines, temp_vars,
space, prefix):
# keep the C code a bit more readable by giving the field name
- if not self.is_bitcase:
+ if not self.is_case_or_bitcase:
code_lines.append('%s /* %s.%s */' % (space, self.c_type, field.c_field_name))
else:
scoped_name = [p[2].c_type if idx==0 else p[0] for idx, p in enumerate(prefix)]
@@ -951,7 +962,7 @@ def _c_serialize_helper_fields_variable_size(context, self, field,
def _c_serialize_helper_fields(context, self,
code_lines, temp_vars,
- space, prefix, is_bitcase):
+ space, prefix, is_case_or_bitcase):
count = 0
need_padding = False
prev_field_was_variable = False
@@ -963,7 +974,7 @@ def _c_serialize_helper_fields(context, self,
# switch/bitcase: fixed size fields must be considered explicitly
if field.type.fixed_size():
- if self.is_bitcase or self.c_var_followed_by_fixed_fields:
+ if self.is_case_or_bitcase or self.c_var_followed_by_fixed_fields:
if prev_field_was_variable and need_padding:
# insert padding
# count += _c_serialize_helper_insert_padding(context, code_lines, space,
@@ -989,7 +1000,7 @@ def _c_serialize_helper_fields(context, self,
continue
else:
# switch/bitcase: always calculate padding before and after variable sized fields
- if need_padding or is_bitcase:
+ if need_padding or is_case_or_bitcase:
count += _c_serialize_helper_insert_padding(context, code_lines, space,
self.c_var_followed_by_fixed_fields)
@@ -1003,7 +1014,7 @@ def _c_serialize_helper_fields(context, self,
code_lines.append('%s%s' % (space, value))
if field.type.fixed_size():
- if is_bitcase or self.c_var_followed_by_fixed_fields:
+ if is_case_or_bitcase or self.c_var_followed_by_fixed_fields:
# keep track of (un)serialized object's size
code_lines.append('%s xcb_block_len += %s;' % (space, length))
if context in ('unserialize', 'unpack', 'sizeof'):
@@ -1461,7 +1472,7 @@ def _c_accessors_field(self, field):
# special case: switch
switch_obj = self if self.is_switch else None
- if self.is_bitcase:
+ if self.is_case_or_bitcase:
switch_obj = self.parents[-1]
if switch_obj is not None:
c_type = switch_obj.c_type
@@ -1529,7 +1540,7 @@ def _c_accessors_list(self, field):
# the reason is that switch is either a child of a request/reply or nested in another switch,
# so whenever we need to access a length field, we might need to refer to some anchestor type
switch_obj = self if self.is_switch else None
- if self.is_bitcase:
+ if self.is_case_or_bitcase:
switch_obj = self.parents[-1]
if switch_obj is not None:
c_type = switch_obj.c_type
@@ -1561,7 +1572,7 @@ def _c_accessors_list(self, field):
for p in parents[2:] + [self]:
# the separator between parent and child is always '.' here,
# because of nested switch statements
- if not p.is_bitcase or (p.is_bitcase and p.has_name):
+ if not p.is_case_or_bitcase or (p.is_case_or_bitcase and p.has_name):
prefix.append((p.name[-1], '.', p))
fields.update(_c_helper_field_mapping(p, prefix, flat=True))
@@ -2364,7 +2375,7 @@ def _man_request(self, name, cookie_type, void, aux):
# special case: switch
switch_obj = self if self.is_switch else None
- if self.is_bitcase:
+ if self.is_case_or_bitcase:
switch_obj = self.parents[-1]
if switch_obj is not None:
c_type = switch_obj.c_type
@@ -2392,7 +2403,7 @@ def _man_request(self, name, cookie_type, void, aux):
# the reason is that switch is either a child of a request/reply or nested in another switch,
# so whenever we need to access a length field, we might need to refer to some anchestor type
switch_obj = self if self.is_switch else None
- if self.is_bitcase:
+ if self.is_case_or_bitcase:
switch_obj = self.parents[-1]
if switch_obj is not None:
c_type = switch_obj.c_type
@@ -2424,7 +2435,7 @@ def _man_request(self, name, cookie_type, void, aux):
for p in parents[2:] + [self]:
# the separator between parent and child is always '.' here,
# because of nested switch statements
- if not p.is_bitcase or (p.is_bitcase and p.has_name):
+ if not p.is_case_or_bitcase or (p.is_case_or_bitcase and p.has_name):
prefix.append((p.name[-1], '.', p))
fields.update(_c_helper_field_mapping(p, prefix, flat=True))
diff --git a/libxcb/src/xcb_conn.c b/libxcb/src/xcb_conn.c
index fa5098586..7d0963716 100644
--- a/libxcb/src/xcb_conn.c
+++ b/libxcb/src/xcb_conn.c
@@ -64,6 +64,26 @@ typedef struct {
uint16_t length;
} xcb_setup_generic_t;
+static const xcb_setup_t xcb_error_setup = {
+ 0, /* status: failed (but we wouldn't have a xcb_setup_t in this case) */
+ 0, /* pad0 */
+ 0, 0, /* protocol version, should be 11.0, but isn't */
+ 0, /* length, invalid value */
+ 0, /* release_number */
+ 0, 0, /* resource_id_{base,mask} */
+ 0, /* motion_buffer_size */
+ 0, /* vendor_len */
+ 0, /* maximum_request_length */
+ 0, /* roots_len */
+ 0, /* pixmap_formats_len */
+ 0, /* image_byte_order */
+ 0, /* bitmap_format_bit_order */
+ 0, /* bitmap_format_scanline_unit */
+ 0, /* bitmap_format_scanline_pad */
+ 0, 0, /* {min,max}_keycode */
+ { 0, 0, 0, 0 } /* pad1 */
+};
+
/* Keep this list in sync with is_static_error_conn()! */
static const int xcb_con_error = XCB_CONN_ERROR;
static const int xcb_con_closed_mem_er = XCB_CONN_CLOSED_MEM_INSUFFICIENT;
@@ -288,15 +308,15 @@ static int write_vec(xcb_connection_t *c, struct iovec **vector, int *count)
const xcb_setup_t *xcb_get_setup(xcb_connection_t *c)
{
- if(c->has_error)
- return 0;
+ if(is_static_error_conn(c))
+ return &xcb_error_setup;
/* doesn't need locking because it's never written to. */
return c->setup;
}
int xcb_get_file_descriptor(xcb_connection_t *c)
{
- if(c->has_error)
+ if(is_static_error_conn(c))
return -1;
/* doesn't need locking because it's never written to. */
return c->fd;
diff --git a/libxcb/xcb-proto/doc/xml-xcb.txt b/libxcb/xcb-proto/doc/xml-xcb.txt
index 97ce5bf8e..235958de3 100644
--- a/libxcb/xcb-proto/doc/xml-xcb.txt
+++ b/libxcb/xcb-proto/doc/xml-xcb.txt
@@ -184,11 +184,12 @@ separated by a single colon. For example, to refer to the PIXMAP type defined
in glx rather than the one defined in xproto, use type="glx:PIXMAP" rather
than type="PIXMAP".
-Note: Most of the below may optionally contain an enum, altenum, or mask
+Note: Most of the below may optionally contain an enum, altenum, mask or altmask
attribute, which follows the above rules for "type". "enum" is an exhaustive
enum; the value is restricted to one of the constants named in the enum.
"altenum" may be one of the values contained in the enum, but it need not be.
-"mask" refers to an enum to be used as a bitmask.
+"mask" refers to an exhaustive enum to be used as a bitmask.
+"altmask" may be a mask from the referred enum, but it need not be.
<pad bytes="integer" />
@@ -243,18 +244,40 @@ enum; the value is restricted to one of the constants named in the enum.
<switch> instead for new protocol definitions.
<switch name="identifier"> switch expression
- <bitcase> bitcase expression(s), fields </bitcase> </switch>
+ <bitcase> bitcase expression(s), fields </bitcase>
+ <case> case expression(s), fields </case>
+</switch>
This element represents conditional inclusion of fields. It can be viewed
- as sequence of multiple ifs: if ( switch expression & bitcase expression )
- is non-zero, bitcase fields are included in structure. It can be used only
- as the last field of a structure.
+ as sequence of multiple ifs:
- When a bitcase includes multiple <enumref> clauses, the contents of the
- bitcase are only present once regardless of the number of bitcase expressions
- that match.
+ <bitcase>:
+ if ( switch expression & bitcase expression ) is non-zero,
+ bitcase fields are included in structure.
+
+ <case>:
+ if ( switch expression == case expression ) is true,
+ then case fields are included in structure.
+
+ It can be used only as the last field of a structure.
+
+ When a bitcase or case includes multiple <enumref> clauses, the contents
+ of the bitcase or case are only present once regardless of the number of
+ bitcase or case expressions that match.
+
+ <enumref> inside <bitcase> can only refer to an enum's <bit> members.
+ <enumref> inside <case> can only refer to an enum's <value> members.
+
+ A switch may contain multiple <bitcase> or <case> elements.
+ Usually it will only contain <bitcase> elements
+ or only contain <case> elements.
+ That is, mixing of <case> and <bitcase> usually doesn't make any sense.
+
+ The same value may appear in multiple <case> or <bitcase> elements.
+
+ New protocol definitions should prefer to use this instead of <valueparam>
+ and instead of <union>.
- New protocol definitions should prefer to use this instead of <valueparam>.
Expressions
-----------
diff --git a/libxcb/xcb-proto/src/xcb.xsd b/libxcb/xcb-proto/src/xcb.xsd
index 59bb9a883..85f5bc2af 100644
--- a/libxcb/xcb-proto/src/xcb.xsd
+++ b/libxcb/xcb-proto/src/xcb.xsd
@@ -54,6 +54,7 @@ authorization from the authors.
<xsd:attribute name="enum" type="xsd:string" use="optional" />
<xsd:attribute name="altenum" type="xsd:string" use="optional" />
<xsd:attribute name="mask" type="xsd:string" use="optional" />
+ <xsd:attribute name="altmask" type="xsd:string" use="optional" />
</xsd:complexType>
<!-- case expression -->
@@ -77,7 +78,9 @@ authorization from the authors.
<xsd:group ref="expression" minOccurs="1" maxOccurs="1" />
<xsd:choice>
<!-- bitcase expression - bit test -->
- <xsd:element name="bitcase" type="caseexpr" minOccurs="1" maxOccurs="unbounded" />
+ <xsd:element name="bitcase" type="caseexpr" minOccurs="0" maxOccurs="unbounded" />
+ <!-- case expression - value test -->
+ <xsd:element name="case" type="caseexpr" minOccurs="0" maxOccurs="unbounded" />
</xsd:choice>
<!-- default: -->
<xsd:group ref="fields" minOccurs="0" maxOccurs="1" />
diff --git a/libxcb/xcb-proto/src/xinput.xml b/libxcb/xcb-proto/src/xinput.xml
index cdb414db4..dc87e7829 100644
--- a/libxcb/xcb-proto/src/xinput.xml
+++ b/libxcb/xcb-proto/src/xinput.xml
@@ -32,6 +32,73 @@ authorization from the authors.
http://cgit.freedesktop.org/xorg/proto/inputproto/tree/specs/XI2proto.txt
-->
+<!-- TODO: Things which need to be done for full XInput support
+ but cannot be done now ( August 18, 2014 ) with the current feature-set
+ of the xml and the generator:
+
+*****
+
+replace "uninterpreted_data" or similar constructs
+with a semantic that shows how to interpret this data.
+This requires enhancements to the xml-schema and generator such as union with selector.
+
+This will, e.g., be necessary for automatically generated byte-order conversion code,
+which will, e.g., be necessary for server-side xcb.
+
+This affects the following:
+* GetFeedbackControl reply field "feedbacks" ( structs FeedbackState, ... )
+* ChangeFeedbackControl request field "feedback" ( structs FeedbackCtl, ... )
+* QueryDeviceState reply field "classes" ( structs InputState, ... )
+* GetDeviceControl reply field "control" ( structs DeviceState, ... )
+* ChangeDeviceControl request field "control" ( structs ChangeDeviceControl, ... )
+* XIChangeHierarchy request field "changes" ( structs HierarchyChange, ... )
+* struct XIDeviceInfo field "classes" ( structs DeviceClass, ... )
+* SendExtensionEvent member "events"
+
+*****
+
+xml and generator have to support <popcount> of all members of a list
+
+This is needed for the following XI2-events ( and eventcopies thereof )
+ KeyPress
+ ButtonPress
+ RawKeyPress
+ RawKeyPress
+ RawButtonPress
+ TouchBegin
+ RawTouchBegin
+
+
+*****
+
+<sumof> should support fields of listmembers.
+
+This is needed for request "ListInputDevices"
+
+*****
+
+xml and generator should support
+switch-case similar to switch-bitcase.
+
+(and maybe: variable sized unions with a mechanism to define
+which union-field is selected.)
+
+One of these features is needed for the InputInfo type
+which is used by request "ListInputDevices" for the list "input_infos".
+
+*****
+
+Parametrized structs
+
+This is needed for being able to use the value of the field
+"num_axes" of the GetDeviceMotionEvents-reply
+in struct DeviceTimeCoord.
+
+*****
+
+-->
+
+
<xcb header="xinput" extension-xname="XInputExtension" extension-name="Input"
major-version="2" minor-version="3">
<import>xfixes</import>
@@ -63,7 +130,7 @@ authorization from the authors.
<fieldref>name_len</fieldref>
</list>
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD16" name="server_major" />
<field type="CARD16" name="server_minor" />
<field type="BOOL" name="present" />
@@ -89,6 +156,17 @@ authorization from the authors.
<item name="Proximity"> <value>4</value> </item>
<item name="Focus"> <value>5</value> </item>
<item name="Other"> <value>6</value> </item>
+ <!--
+ value Attach=7 is still contained in XI.h as "#define AttachClass"
+ but it was never transmitted over the protocol.
+ (It was used to tag a fake class created by libXi).
+
+ Even the creation of that fake class has been dropped
+ from libXi in 2009 by the following change:
+ http://cgit.freedesktop.org/xorg/lib/libXi/commit/?id=62858c426e6de1b99df660251737233afd335302
+
+ <item name="Attach"> <value>7</value> </item>
+ -->
</enum>
<enum name="ValuatorMode">
@@ -150,7 +228,7 @@ authorization from the authors.
<request name="ListInputDevices" opcode="2">
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="devices_len" />
<pad bytes="23" />
<list type="DeviceInfo" name="devices">
@@ -173,12 +251,13 @@ authorization from the authors.
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="num_classes" />
<pad bytes="23" />
<list type="InputClassInfo" name="class_info">
<fieldref>num_classes</fieldref>
</list>
+ <pad align="4" />
</reply>
</request>
@@ -196,8 +275,9 @@ authorization from the authors.
<field type="CARD8" name="mode" enum="ValuatorMode" />
<pad bytes="2" />
<reply>
- <pad bytes="1" />
- <field type="CARD8" name="status" altenum="GrabStatus" />
+ <field type="CARD8" name="xi_reply_type" />
+ <!-- values for status: 0: Success, 1: AlreadyGrabbed -->
+ <field type="CARD8" name="status" enum="GrabStatus" />
<pad bytes="23" />
</reply>
</request>
@@ -218,7 +298,7 @@ authorization from the authors.
<request name="GetSelectedExtensionEvents" opcode="7">
<field type="WINDOW" name="window" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD16" name="num_this_classes" />
<field type="CARD16" name="num_all_classes" />
<pad bytes="20" />
@@ -253,7 +333,7 @@ authorization from the authors.
<request name="GetDeviceDontPropagateList" opcode="9">
<field type="WINDOW" name="window" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD16" name="num_classes" />
<pad bytes="22" />
<list type="EventClass" name="classes">
@@ -266,7 +346,7 @@ authorization from the authors.
<struct name="DeviceTimeCoord">
<field type="TIMESTAMP" name="time" />
- <!-- Uninterpreted: list (axisvalues) of CARD32,
+ <!-- Uninterpreted: list (axisvalues) of INT32,
length is num_axes from GetDeviceMotionEvents -->
</struct>
@@ -274,8 +354,9 @@ authorization from the authors.
<field type="TIMESTAMP" name="start" />
<field type="TIMESTAMP" name="stop" altenum="Time" />
<field type="CARD8" name="device_id" />
+ <pad bytes="3"/>
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD32" name="num_events" />
<field type="CARD8" name="num_axes" />
<field type="CARD8" name="device_mode" enum="ValuatorMode" />
@@ -290,8 +371,11 @@ authorization from the authors.
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
- <field type="CARD8" name="status" altenum="GrabStatus" />
+ <field type="CARD8" name="xi_reply_type" />
+ <!-- only the following GrabStatus-values are valid here:
+ "Success", "AlreadyGrabbed", and "Frozen"
+ -->
+ <field type="CARD8" name="status" enum="GrabStatus" />
<pad bytes="23" />
</reply>
</request>
@@ -304,8 +388,11 @@ authorization from the authors.
<field type="CARD8" name="device_id" />
<pad bytes="1" />
<reply>
- <pad bytes="1" />
- <field type="CARD8" name="status" altenum="GrabStatus" />
+ <field type="CARD8" name="xi_reply_type" />
+ <!-- only the following GrabStatus-values are valid here:
+ "Success", "AlreadyGrabbed", and "Frozen"
+ -->
+ <field type="CARD8" name="status" enum="GrabStatus" />
<pad bytes="23" />
</reply>
</request>
@@ -325,7 +412,7 @@ authorization from the authors.
<fieldref>num_classes</fieldref>
</list>
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="status" enum="GrabStatus" />
<pad bytes="23" />
</reply>
@@ -336,15 +423,20 @@ authorization from the authors.
<request name="UngrabDevice" opcode="14">
<field type="TIMESTAMP" name="time" altenum="Time" />
<field type="CARD8" name="device_id" />
+ <pad bytes="3" />
</request>
<!-- GrabDeviceKey -->
+ <enum name="ModifierDevice">
+ <item name="UseXKeyboard"><value>255</value></item> <!-- 0xff -->
+ </enum>
+
<request name="GrabDeviceKey" opcode="15">
<field type="WINDOW" name="grab_window" />
<field type="CARD16" name="num_classes" />
<field type="CARD16" name="modifiers" mask="ModMask" />
- <field type="CARD8" name="modifier_device" />
+ <field type="CARD8" name="modifier_device" altenum="ModifierDevice" />
<field type="CARD8" name="grabbed_device" />
<field type="CARD8" name="key" altenum="Grab" />
<field type="CARD8" name="this_device_mode" enum="GrabMode" />
@@ -361,7 +453,7 @@ authorization from the authors.
<request name="UngrabDeviceKey" opcode="16">
<field type="WINDOW" name="grabWindow" />
<field type="CARD16" name="modifiers" mask="ModMask" />
- <field type="CARD8" name="modifier_device" />
+ <field type="CARD8" name="modifier_device" altenum="ModifierDevice" />
<field type="CARD8" name="key" altenum="Grab" />
<field type="CARD8" name="grabbed_device" />
</request>
@@ -371,13 +463,13 @@ authorization from the authors.
<request name="GrabDeviceButton" opcode="17">
<field type="WINDOW" name="grab_window" />
<field type="CARD8" name="grabbed_device" />
- <field type="CARD8" name="modifier_device" />
+ <field type="CARD8" name="modifier_device" altenum="ModifierDevice" />
<field type="CARD16" name="num_classes" />
<field type="CARD16" name="modifiers" mask="ModMask" />
<field type="CARD8" name="this_device_mode" enum="GrabMode" />
<field type="CARD8" name="other_device_mode" enum="GrabMode" />
<field type="CARD8" name="button" altenum="Grab" />
- <field type="CARD8" name="owner_events" />
+ <field type="BOOL" name="owner_events" />
<pad bytes="2" />
<list type="EventClass" name="classes">
<fieldref>num_classes</fieldref>
@@ -389,9 +481,10 @@ authorization from the authors.
<request name="UngrabDeviceButton" opcode="18">
<field type="WINDOW" name="grab_window" />
<field type="CARD16" name="modifiers" mask="ModMask" />
- <field type="CARD8" name="modifier_device" />
+ <field type="CARD8" name="modifier_device" altenum="ModifierDevice" />
<field type="CARD8" name="button" altenum="Grab" />
<field type="CARD8" name="grabbed_device" />
+ <pad bytes="3" />
</request>
<!-- AllowDeviceEvents -->
@@ -409,6 +502,7 @@ authorization from the authors.
<field type="TIMESTAMP" name="time" altenum="Time" />
<field type="CARD8" name="mode" enum="DeviceInputMode" />
<field type="CARD8" name="device_id" />
+ <pad bytes="2" />
</request>
<!-- GetDeviceFocus -->
@@ -417,7 +511,7 @@ authorization from the authors.
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="WINDOW" name="focus" altenum="InputFocus" />
<field type="TIMESTAMP" name="time" />
<field type="CARD8" name="revert_to" enum="InputFocus" />
@@ -432,6 +526,7 @@ authorization from the authors.
<field type="TIMESTAMP" name="time" altenum="Time" />
<field type="CARD8" name="revert_to" enum="InputFocus" />
<field type="CARD8" name="device_id" />
+ <pad bytes="2" />
</request>
<!-- GetFeedbackControl -->
@@ -526,7 +621,7 @@ authorization from the authors.
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD16" name="num_feedbacks" />
<pad bytes="22" />
<list type="FeedbackState" name="feedbacks">
@@ -609,8 +704,24 @@ authorization from the authors.
</list>
</struct>
+ <enum name="ChangeFeedbackControlMask">
+ <item name="KeyClickPercent"> <bit>0</bit> </item> <!-- 0x01 -->
+ <item name="Percent"> <bit>1</bit> </item> <!-- 0x02 -->
+ <item name="Pitch"> <bit>2</bit> </item> <!-- 0x04 -->
+ <item name="Duration"> <bit>3</bit> </item> <!-- 0x08 -->
+ <item name="Led"> <bit>4</bit> </item> <!-- 0x10 -->
+ <item name="LedMode"> <bit>5</bit> </item> <!-- 0x20 -->
+ <item name="Key"> <bit>6</bit> </item> <!-- 0x40 -->
+ <item name="AutoRepeatMode"> <bit>7</bit> </item> <!-- 0x80 -->
+ <item name="String"> <bit>0</bit> </item> <!-- 0x01 -->
+ <item name="Integer"> <bit>0</bit> </item> <!-- 0x01 -->
+ <item name="AccelNum"> <bit>0</bit> </item> <!-- 0x01 -->
+ <item name="AccelDenom"> <bit>1</bit> </item> <!-- 0x02 -->
+ <item name="Threshold"> <bit>2</bit> </item> <!-- 0x04 -->
+ </enum>
+
<request name="ChangeFeedbackControl" opcode="23">
- <field type="CARD32" name="mask" />
+ <field type="CARD32" name="mask" mask="ChangeFeedbackControlMask" />
<field type="CARD8" name="device_id" />
<field type="CARD8" name="feedback_id" />
<pad bytes="2" />
@@ -623,8 +734,9 @@ authorization from the authors.
<field type="CARD8" name="device_id" />
<field type="KeyCode" name="first_keycode" />
<field type="CARD8" name="count" />
+ <pad bytes="1" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="keysyms_per_keycode" />
<pad bytes="23" />
<list type="KEYSYM" name="keysyms">
@@ -655,7 +767,7 @@ authorization from the authors.
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="keycodes_per_modifier" />
<pad bytes="23" />
<list type="CARD8" name="keymaps">
@@ -680,7 +792,7 @@ authorization from the authors.
</op>
</list>
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="status" enum="MappingStatus" />
<pad bytes="23" />
</reply>
@@ -692,12 +804,13 @@ authorization from the authors.
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="map_size" />
<pad bytes="23" />
<list type="CARD8" name="map">
<fieldref>map_size</fieldref>
</list>
+ <pad align="4" />
</reply>
</request>
@@ -711,7 +824,7 @@ authorization from the authors.
<fieldref>map_size</fieldref>
</list>
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="status" enum="MappingStatus" />
<pad bytes="23" />
</reply>
@@ -739,11 +852,16 @@ authorization from the authors.
</list>
</struct>
+ <enum name="ValuatorStateModeMask">
+ <item name="DeviceModeAbsolute"> <bit>0</bit> </item>
+ <item name="OutOfProximity"> <bit>1</bit> </item>
+ </enum>
+
<struct name="ValuatorState">
<field type="CARD8" name="class_id" enum="InputClass" />
<field type="CARD8" name="len" />
<field type="CARD8" name="num_valuators" />
- <field type="CARD8" name="mode" />
+ <field type="CARD8" name="mode" mask="ValuatorStateModeMask" />
<list type="CARD32" name="valuators">
<fieldref>num_valuators</fieldref>
</list>
@@ -766,7 +884,7 @@ authorization from the authors.
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="num_classes" />
<pad bytes="23" />
<list type="InputState" name="classes">
@@ -815,7 +933,7 @@ authorization from the authors.
<fieldref>num_valuators</fieldref>
</list>
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="status" enum="GrabStatus" />
<pad bytes="23" />
</reply>
@@ -901,7 +1019,7 @@ authorization from the authors.
<field type="CARD8" name="device_id" />
<pad bytes="1" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="status" altenum="GrabStatus" />
<pad bytes="23" />
<field type="DeviceState" name="control" />
@@ -976,7 +1094,7 @@ authorization from the authors.
<pad bytes="1" />
<field type="DeviceCtl" name="control" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="status" altenum="GrabStatus" />
<pad bytes="23" />
</reply>
@@ -990,7 +1108,7 @@ authorization from the authors.
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD16" name="num_atoms" />
<pad bytes="22" />
<list type="ATOM" name="atoms">
@@ -1017,28 +1135,26 @@ authorization from the authors.
<field type="CARD32" name="num_items" />
<switch name="items">
<fieldref>format</fieldref>
- <!-- <bitcase> is not correct, this would need <cases>s.
- It works in that case, because PropertyFormat items can be
- distinguished exactly as their values don't have equal bits.
- -->
- <bitcase>
+ <case>
<enumref ref="PropertyFormat">8Bits</enumref>
<list type="CARD8" name="data8">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
- <bitcase>
+ <pad align="4" />
+ </case>
+ <case>
<enumref ref="PropertyFormat">16Bits</enumref>
<list type="CARD16" name="data16">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
- <bitcase>
+ <pad align="4" />
+ </case>
+ <case>
<enumref ref="PropertyFormat">32Bits</enumref>
<list type="CARD32" name="data32">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
+ </case>
</switch>
</request>
@@ -1061,7 +1177,7 @@ authorization from the authors.
<field type="BOOL" name="delete" />
<pad bytes="2" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="ATOM" name="type" />
<field type="CARD32" name="bytes_after" />
<field type="CARD32" name="num_items" />
@@ -1079,12 +1195,14 @@ authorization from the authors.
<list type="CARD8" name="data8">
<fieldref>num_items</fieldref>
</list>
+ <pad align="4" />
</bitcase>
<bitcase>
<enumref ref="PropertyFormat">16Bits</enumref>
<list type="CARD16" name="data16">
<fieldref>num_items</fieldref>
</list>
+ <pad align="4" />
</bitcase>
<bitcase>
<enumref ref="PropertyFormat">32Bits</enumref>
@@ -1131,7 +1249,7 @@ authorization from the authors.
<field type="FP1616" name="root_y" />
<field type="FP1616" name="win_x" />
<field type="FP1616" name="win_y" />
- <field type="CARD8" name="same_screen" />
+ <field type="BOOL" name="same_screen" />
<pad bytes="1" />
<field type="CARD16" name="buttons_len" />
<field type="ModifierInfo" name="mods" />
@@ -1184,11 +1302,12 @@ authorization from the authors.
<field type="CARD16" name="type" enum="HierarchyChangeType" />
<field type="CARD16" name="len" />
<field type="CARD16" name="name_len" />
- <field type="CARD8" name="send_core" />
- <field type="CARD8" name="enable" />
+ <field type="BOOL" name="send_core" />
+ <field type="BOOL" name="enable" />
<list type="char" name="name">
<fieldref>name_len</fieldref>
</list>
+ <pad align="4" />
</struct>
<struct name="RemoveMaster">
@@ -1392,7 +1511,7 @@ authorization from the authors.
<field type="CARD16" name="number" />
<field type="CARD16" name="scroll_type" enum="ScrollType" />
<pad bytes="2" />
- <field type="CARD32" name="flags" enum="ScrollFlags" />
+ <field type="CARD32" name="flags" mask="ScrollFlags" />
<field type="FP3232" name="increment" />
</struct>
@@ -1436,26 +1555,16 @@ authorization from the authors.
<struct name="XIDeviceInfo">
<field type="DeviceId" name="deviceid" altenum="Device" />
- <field type="CARD16" name="type" altenum="DeviceType" />
+ <field type="CARD16" name="type" enum="DeviceType" />
<field type="DeviceId" name="attachment" altenum="Device" />
<field type="CARD16" name="num_classes" />
<field type="CARD16" name="name_len" />
<field type="BOOL" name="enabled" />
<pad bytes="1" />
<list type="char" name="name">
- <!-- name_len is without padding, so we've to pad on our own,
- auto align pad after the list would be helpfull -->
- <op op="*">
- <op op="/">
- <op op="+">
- <fieldref>name_len</fieldref>
- <value>3</value>
- </op>
- <value>4</value>
- </op>
- <value>4</value>
- </op>
+ <fieldref>name_len</fieldref>
</list>
+ <pad align="4" />
<list type="DeviceClass" name="classes">
<fieldref>num_classes</fieldref>
</list>
@@ -1579,6 +1688,7 @@ authorization from the authors.
</struct>
<request name="XIPassiveGrabDevice" opcode="54">
+ <!-- field "time" is unused and its value is undefined -->
<field type="TIMESTAMP" name="time" altenum="Time" />
<field type="WINDOW" name="grab_window" />
<field type="CURSOR" name="cursor" />
@@ -1708,12 +1818,14 @@ authorization from the authors.
<list type="CARD8" name="data8">
<fieldref>num_items</fieldref>
</list>
+ <pad align="4" />
</bitcase>
<bitcase>
<enumref ref="PropertyFormat">16Bits</enumref>
<list type="CARD16" name="data16">
<fieldref>num_items</fieldref>
</list>
+ <pad align="4" />
</bitcase>
<bitcase>
<enumref ref="PropertyFormat">32Bits</enumref>
@@ -1772,6 +1884,12 @@ authorization from the authors.
</list>
</event>
+ <!-- the highest bit in a CARD8 device_id-field indicates that more
+ events will follow -->
+ <enum name="MoreEventsMask">
+ <item name="MoreEvents"> <bit>7</bit> </item> <!-- 0x80 -->
+ </enum>
+
<event name="DeviceKeyPress" number="1">
<field type="BYTE" name="detail" />
<field type="TIMESTAMP" name="time" />
@@ -1782,9 +1900,9 @@ authorization from the authors.
<field type="INT16" name="root_y" />
<field type="INT16" name="event_x" />
<field type="INT16" name="event_y" />
- <field type="CARD16" name="state" />
+ <field type="CARD16" name="state" mask="KeyButMask" />
<field type="BOOL" name="same_screen" />
- <field type="CARD8" name="device_id" />
+ <field type="CARD8" name="device_id" altmask="MoreEventsMask" />
</event>
<eventcopy name="DeviceKeyRelease" number="2" ref="DeviceKeyPress" />
@@ -1805,13 +1923,25 @@ authorization from the authors.
<eventcopy name="ProximityIn" number="8" ref="DeviceKeyPress" />
<eventcopy name="ProximityOut" number="9" ref="DeviceKeyPress" />
+ <enum name="ClassesReportedMask">
+ <item name="OutOfProximity"> <bit>7</bit> </item> <!-- 0x80 -->
+ <!-- 0 = InProxmity, 1 = OutOfProximity -->
+
+ <item name="DeviceModeAbsolute"> <bit>6</bit> </item> <!-- 0x40 -->
+ <!-- 0 = Relative, 1 = Absolute -->
+
+ <item name="ReportingValuators"> <bit>2</bit> </item> <!-- 0x04 -->
+ <item name="ReportingButtons"> <bit>1</bit> </item> <!-- 0x02 -->
+ <item name="ReportingKeys"> <bit>0</bit> </item> <!-- 0x01 -->
+ </enum>
+
<event name="DeviceStateNotify" number="10">
- <field type="BYTE" name="device_id" />
+ <field type="BYTE" name="device_id" altmask="MoreEventsMask" />
<field type="TIMESTAMP" name="time" />
<field type="CARD8" name="num_keys" />
<field type="CARD8" name="num_buttons" />
<field type="CARD8" name="num_valuators" />
- <field type="CARD8" name="classes_reported" />
+ <field type="CARD8" name="classes_reported" mask="ClassesReportedMask" />
<list type="CARD8" name="buttons">
<value>4</value>
</list>
@@ -1825,7 +1955,7 @@ authorization from the authors.
<event name="DeviceMappingNotify" number="11">
<field type="BYTE" name="device_id" />
- <field type="CARD8" name="request" />
+ <field type="CARD8" name="request" enum="Mapping" />
<field type="KeyCode" name="first_keycode" />
<field type="CARD8" name="count" />
<pad bytes="1" />
@@ -1833,22 +1963,27 @@ authorization from the authors.
<pad bytes="20" />
</event>
+ <enum name="ChangeDevice">
+ <item name="NewPointer"> <value>0</value> </item>
+ <item name="NewKeyboard"> <value>1</value> </item>
+ </enum>
+
<event name="ChangeDeviceNotify" number="12">
<field type="BYTE" name="device_id" />
<field type="TIMESTAMP" name="time" />
- <field type="CARD8" name="request" />
+ <field type="CARD8" name="request" enum="ChangeDevice" />
<pad bytes="23" />
</event>
<event name="DeviceKeyStateNotify" number="13">
- <field type="BYTE" name="device_id" />
+ <field type="BYTE" name="device_id" altmask="MoreEventsMask" />
<list type="CARD8" name="keys">
<value>28</value>
</list>
</event>
<event name="DeviceButtonStateNotify" number="14">
- <field type="BYTE" name="device_id" />
+ <field type="BYTE" name="device_id" altmask="MoreEventsMask" />
<list type="CARD8" name="buttons">
<value>28</value>
</list>
@@ -2016,8 +2151,8 @@ authorization from the authors.
<field type="FP1616" name="root_y" />
<field type="FP1616" name="event_x" />
<field type="FP1616" name="event_y" />
- <field type="CARD8" name="same_screen" />
- <field type="CARD8" name="focus" />
+ <field type="BOOL" name="same_screen" />
+ <field type="BOOL" name="focus" />
<field type="CARD16" name="buttons_len" />
<field type="ModifierInfo" name="mods" />
<field type="GroupInfo" name="group" />
@@ -2208,6 +2343,11 @@ authorization from the authors.
<!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
+ <enum name="BarrierFlags">
+ <item name="PointerReleased"> <bit>0</bit> </item>
+ <item name="DeviceIsGrabbed"> <bit>1</bit> </item>
+ </enum>
+
<event name="BarrierHit" number="25" xge="true">
<field type="DeviceId" name="deviceid" altenum="Device" />
<field type="TIMESTAMP" name="time" altenum="Time" />
@@ -2218,7 +2358,7 @@ authorization from the authors.
<field type="BARRIER" name="barrier" />
<!-- 32 byte boundary -->
<field type="CARD32" name="dtime" />
- <field type="CARD32" name="flags" />
+ <field type="CARD32" name="flags" mask="BarrierFlags" />
<field type="DeviceId" name="sourceid" altenum="Device" />
<pad bytes="2" />
<field type="FP1616" name="root_x" />
diff --git a/libxcb/xcb-proto/xcbgen/expr.py b/libxcb/xcb-proto/xcbgen/expr.py
index f9d5179f0..e4fb06e93 100644
--- a/libxcb/xcb-proto/xcbgen/expr.py
+++ b/libxcb/xcb-proto/xcbgen/expr.py
@@ -120,7 +120,7 @@ class Expression(object):
for p in reversed(parents):
fields = dict([(f.field_name, f) for f in p.fields])
if self.lenfield_name in fields.keys():
- if p.is_bitcase:
+ if p.is_case_or_bitcase:
# switch is the anchestor
self.lenfield_parent = p.parents[-1]
else:
diff --git a/libxcb/xcb-proto/xcbgen/xtypes.py b/libxcb/xcb-proto/xcbgen/xtypes.py
index 3cd90320e..45d7568f5 100644
--- a/libxcb/xcb-proto/xcbgen/xtypes.py
+++ b/libxcb/xcb-proto/xcbgen/xtypes.py
@@ -33,7 +33,9 @@ class Type(object):
self.is_union = False
self.is_pad = False
self.is_switch = False
+ self.is_case_or_bitcase = False
self.is_bitcase = False
+ self.is_case = False
def resolve(self, module):
'''
@@ -405,16 +407,20 @@ class SwitchType(ComplexType):
# Resolve all of our field datatypes.
for index, child in enumerate(list(self.elt)):
- if child.tag == 'bitcase':
+ if child.tag == 'bitcase' or child.tag == 'case':
field_name = child.get('name')
if field_name is None:
- field_type = self.name + ('bitcase%d' % index,)
+ field_type = self.name + ('%s%d' % ( child.tag, index ),)
else:
field_type = self.name + (field_name,)
# use self.parent to indicate anchestor,
# as switch does not contain named fields itself
- type = BitcaseType(index, field_type, child, *parents)
+ if child.tag == 'bitcase':
+ type = BitcaseType(index, field_type, child, *parents)
+ else:
+ type = CaseType(index, field_type, child, *parents)
+
# construct the switch type name from the parent type and the field name
if field_name is None:
type.has_name = False
@@ -497,9 +503,9 @@ class Union(ComplexType):
out = __main__.output['union']
-class BitcaseType(ComplexType):
+class CaseOrBitcaseType(ComplexType):
'''
- Derived class representing a struct data type.
+ Derived class representing a case or bitcase.
'''
def __init__(self, index, name, elt, *parent):
elts = list(elt)
@@ -515,7 +521,7 @@ class BitcaseType(ComplexType):
self.index = 1
self.lenfield_parent = list(parent) + [self]
self.parents = list(parent)
- self.is_bitcase = True
+ self.is_case_or_bitcase = True
def make_member_of(self, module, switch_type, field_type, field_name, visible, wire, auto, enum=None):
'''
@@ -546,6 +552,23 @@ class BitcaseType(ComplexType):
ComplexType.resolve(self, module)
+class BitcaseType(CaseOrBitcaseType):
+ '''
+ Derived class representing a bitcase.
+ '''
+ def __init__(self, index, name, elt, *parent):
+ CaseOrBitcaseType.__init__(self, index, name, elt, *parent)
+ self.is_bitcase = True
+
+class CaseType(CaseOrBitcaseType):
+ '''
+ Derived class representing a case.
+ '''
+ def __init__(self, index, name, elt, *parent):
+ CaseOrBitcaseType.__init__(self, index, name, elt, *parent)
+ self.is_case = True
+
+
class Reply(ComplexType):
'''
Derived class representing a reply. Only found as a field of Request.
diff --git a/mesalib/configure.ac b/mesalib/configure.ac
index be6898f7d..aa7d1f27d 100644
--- a/mesalib/configure.ac
+++ b/mesalib/configure.ac
@@ -629,7 +629,7 @@ AC_ARG_ENABLE([xvmc],
[AS_HELP_STRING([--enable-xvmc],
[enable xvmc library @<:@default=auto@:>@])],
[enable_xvmc="$enableval"],
- [enable_xvmc=no])
+ [enable_xvmc=auto])
AC_ARG_ENABLE([vdpau],
[AS_HELP_STRING([--enable-vdpau],
[enable vdpau library @<:@default=auto@:>@])],
diff --git a/mesalib/docs/GL3.txt b/mesalib/docs/GL3.txt
index 76412c3dc..56c4994e5 100644
--- a/mesalib/docs/GL3.txt
+++ b/mesalib/docs/GL3.txt
@@ -18,7 +18,7 @@ are exposed in the 3.0 context as extensions.
Feature Status
----------------------------------------------------- ------------------------
-GL 3.0, GLSL 1.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi
+GL 3.0, GLSL 1.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe (*), softpipe (*)
glBindFragDataLocation, glGetFragDataLocation DONE
Conditional rendering (GL_NV_conditional_render) DONE (r300, swrast)
@@ -47,8 +47,10 @@ GL 3.0, GLSL 1.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi
GLX_ARB_create_context (GLX 1.4 is required) DONE
Multisample anti-aliasing DONE (r300)
+(*) llvmpipe and softpipe have fake Multisample anti-aliasing support
-GL 3.1, GLSL 1.40 --- all DONE: i965, nv50, nvc0, r600, radeonsi
+
+GL 3.1, GLSL 1.40 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe
Forward compatible context support/deprecations DONE ()
Instanced drawing (GL_ARB_draw_instanced) DONE (swrast)
@@ -61,7 +63,7 @@ GL 3.1, GLSL 1.40 --- all DONE: i965, nv50, nvc0, r600, radeonsi
Signed normalized textures (GL_EXT_texture_snorm) DONE (r300)
-GL 3.2, GLSL 1.50 --- all DONE: i965, nv50, nvc0, r600, radeonsi
+GL 3.2, GLSL 1.50 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe
Core/compatibility profiles DONE
Geometry shaders DONE ()
@@ -76,9 +78,9 @@ GL 3.2, GLSL 1.50 --- all DONE: i965, nv50, nvc0, r600, radeonsi
GLX_ARB_create_context_profile DONE
-GL 3.3, GLSL 3.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi
+GL 3.3, GLSL 3.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe
- GL_ARB_blend_func_extended DONE (softpipe)
+ GL_ARB_blend_func_extended DONE ()
GL_ARB_explicit_attrib_location DONE (all drivers that support GLSL)
GL_ARB_occlusion_query2 DONE (r300, swrast)
GL_ARB_sampler_objects DONE (all drivers)
@@ -92,8 +94,8 @@ GL 3.3, GLSL 3.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi
GL 4.0, GLSL 4.00:
- GL_ARB_draw_buffers_blend DONE (i965, nv50, nvc0, r600, radeonsi, softpipe)
- GL_ARB_draw_indirect DONE (i965, nvc0, radeonsi, softpipe, llvmpipe)
+ GL_ARB_draw_buffers_blend DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
+ GL_ARB_draw_indirect DONE (i965, nvc0, radeonsi, llvmpipe, softpipe)
GL_ARB_gpu_shader5 DONE (i965, nvc0)
- 'precise' qualifier DONE
- Dynamically uniform sampler array indices DONE ()
@@ -110,9 +112,9 @@ GL 4.0, GLSL 4.00:
GL_ARB_gpu_shader_fp64 started (Dave)
GL_ARB_sample_shading DONE (i965, nv50, nvc0, radeonsi)
GL_ARB_shader_subroutine not started
- GL_ARB_tessellation_shader started (Fabian)
- GL_ARB_texture_buffer_object_rgb32 DONE (i965, nvc0, r600, radeonsi, softpipe)
- GL_ARB_texture_cube_map_array DONE (i965, nv50, nvc0, r600, radeonsi, softpipe)
+ GL_ARB_tessellation_shader started (Chris, Ilia)
+ GL_ARB_texture_buffer_object_rgb32 DONE (i965, nvc0, r600, radeonsi, llvmpipe, softpipe)
+ GL_ARB_texture_cube_map_array DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
GL_ARB_texture_gather DONE (i965, nv50, nvc0, r600, radeonsi)
GL_ARB_texture_query_lod DONE (i965, nv50, nvc0, r600, radeonsi)
GL_ARB_transform_feedback2 DONE (i965, nv50, nvc0, r600, radeonsi)
@@ -121,12 +123,12 @@ GL 4.0, GLSL 4.00:
GL 4.1, GLSL 4.10:
- GL_ARB_ES2_compatibility DONE (i965, nv50, nvc0, r300, r600, radeonsi)
+ GL_ARB_ES2_compatibility DONE (i965, nv50, nvc0, r300, r600, radeonsi, llvmpipe, softpipe)
GL_ARB_get_program_binary DONE (0 binary formats)
GL_ARB_separate_shader_objects DONE (all drivers)
GL_ARB_shader_precision started (Micah)
GL_ARB_vertex_attrib_64bit started (Dave)
- GL_ARB_viewport_array DONE (i965, nv50, nvc0, r600)
+ GL_ARB_viewport_array DONE (i965, nv50, nvc0, r600, llvmpipe)
GL 4.2, GLSL 4.20:
@@ -140,7 +142,7 @@ GL 4.2, GLSL 4.20:
GL_ARB_shader_image_load_store in progress (curro)
GL_ARB_conservative_depth DONE (all drivers that support GLSL 1.30)
GL_ARB_shading_language_420pack DONE (all drivers that support GLSL 1.30)
- GL_ARB_internalformat_query DONE (i965, nv50, nvc0, r300, r600, radeonsi)
+ GL_ARB_internalformat_query DONE (i965, nv50, nvc0, r300, r600, radeonsi, llvmpipe, softpipe)
GL_ARB_map_buffer_alignment DONE (all drivers)
@@ -153,17 +155,17 @@ GL 4.3, GLSL 4.30:
GL_ARB_copy_image DONE (i965)
GL_KHR_debug DONE (all drivers)
GL_ARB_explicit_uniform_location DONE (all drivers that support GLSL)
- GL_ARB_fragment_layer_viewport DONE (nv50, nvc0, r600)
+ GL_ARB_fragment_layer_viewport DONE (nv50, nvc0, r600, llvmpipe)
GL_ARB_framebuffer_no_attachments not started
GL_ARB_internalformat_query2 not started
GL_ARB_invalidate_subdata DONE (all drivers)
- GL_ARB_multi_draw_indirect DONE (i965, nvc0, radeonsi, softpipe, llvmpipe)
+ GL_ARB_multi_draw_indirect DONE (i965, nvc0, radeonsi, llvmpipe, softpipe)
GL_ARB_program_interface_query not started
GL_ARB_robust_buffer_access_behavior not started
GL_ARB_shader_image_size not started
GL_ARB_shader_storage_buffer_object not started
- GL_ARB_stencil_texturing DONE (i965/gen8+, nv50, nvc0, r600, radeonsi)
- GL_ARB_texture_buffer_range DONE (nv50, nvc0, i965, r600, radeonsi)
+ GL_ARB_stencil_texturing DONE (i965/gen8+, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
+ GL_ARB_texture_buffer_range DONE (nv50, nvc0, i965, r600, radeonsi, llvmpipe)
GL_ARB_texture_query_levels DONE (all drivers that support GLSL 1.30)
GL_ARB_texture_storage_multisample DONE (all drivers that support GL_ARB_texture_multisample)
GL_ARB_texture_view DONE (i965)
@@ -172,21 +174,21 @@ GL 4.3, GLSL 4.30:
GL 4.4, GLSL 4.40:
- GL_MAX_VERTEX_ATTRIB_STRIDE not started
+ GL_MAX_VERTEX_ATTRIB_STRIDE DONE (all drivers)
GL_ARB_buffer_storage DONE (i965, nv30, nv50, nvc0, r300, r600, radeonsi)
GL_ARB_clear_texture DONE (i965)
GL_ARB_enhanced_layouts not started
GL_ARB_multi_bind DONE (all drivers)
GL_ARB_query_buffer_object not started
- GL_ARB_texture_mirror_clamp_to_edge DONE (i965, nv30, nv50, nvc0, r300, r600, radeonsi, swrast)
+ GL_ARB_texture_mirror_clamp_to_edge DONE (i965, nv30, nv50, nvc0, r300, r600, radeonsi, swrast, llvmpipe, softpipe)
GL_ARB_texture_stencil8 not started
- GL_ARB_vertex_type_10f_11f_11f_rev DONE (i965, nv50, nvc0, r600, radeonsi)
+ GL_ARB_vertex_type_10f_11f_11f_rev DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
GL 4.5, GLSL 4.50:
GL_ARB_ES3_1_compatibility not started
GL_ARB_clip_control not started
- GL_ARB_conditional_render_inverted DONE (i965, nvc0, softpipe, llvmpipe)
+ GL_ARB_conditional_render_inverted DONE (i965, nvc0, llvmpipe, softpipe)
GL_ARB_cull_distance not started
GL_ARB_derivative_control DONE (i965, nv50, nvc0, r600)
GL_ARB_direct_state_access not started
@@ -208,7 +210,7 @@ GLES3.1, GLSL ES 3.1
GL_ARB_shader_image_load_store in progress (curro)
GL_ARB_shader_storage_buffer_object not started
GL_ARB_separate_shader_objects DONE (all drivers)
- GL_ARB_stencil_texturing DONE (i965/gen8+, nv50, nvc0, r600, radeonsi)
+ GL_ARB_stencil_texturing DONE (i965/gen8+, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
GL_ARB_vertex_attrib_binding DONE (all drivers)
GS5 Enhanced textureGather DONE (i965, nvc0, r600, radeonsi)
GS5 Packing/bitfield/conversion functions DONE (i965, nvc0, r600)
diff --git a/mesalib/include/HaikuGL/OpenGLKit.h b/mesalib/include/HaikuGL/OpenGLKit.h
index f4828714c..71d983075 100644
--- a/mesalib/include/HaikuGL/OpenGLKit.h
+++ b/mesalib/include/HaikuGL/OpenGLKit.h
@@ -7,4 +7,4 @@
// Projects needing GL/glu.h and GL/glut.h should now
// include these headers independently as glu and glut
-// are no longe core parts of mesa
+// are no longer core parts of mesa
diff --git a/mesalib/src/gallium/Automake.inc b/mesalib/src/gallium/Automake.inc
index 74053eb2d..c43f735c3 100644
--- a/mesalib/src/gallium/Automake.inc
+++ b/mesalib/src/gallium/Automake.inc
@@ -16,6 +16,7 @@ GALLIUM_DRIVER_CFLAGS = \
-I$(top_srcdir)/src/gallium/include \
-I$(top_srcdir)/src/gallium/auxiliary \
-I$(top_srcdir)/src/gallium/drivers \
+ -I$(top_srcdir)/src/gallium/winsys \
$(DEFINES) \
$(VISIBILITY_CFLAGS)
@@ -26,6 +27,7 @@ GALLIUM_DRIVER_CXXFLAGS = \
-I$(top_srcdir)/src/gallium/include \
-I$(top_srcdir)/src/gallium/auxiliary \
-I$(top_srcdir)/src/gallium/drivers \
+ -I$(top_srcdir)/src/gallium/winsys \
$(DEFINES) \
$(VISIBILITY_CXXFLAGS)
diff --git a/mesalib/src/gallium/Makefile.am b/mesalib/src/gallium/Makefile.am
index 1e1fd43d5..e4ef00346 100644
--- a/mesalib/src/gallium/Makefile.am
+++ b/mesalib/src/gallium/Makefile.am
@@ -109,6 +109,15 @@ if NEED_WINSYS_WRAPPER
SUBDIRS += winsys/sw/wrapper
endif
+##
+## Don't forget to bundle the remaining (non autotools) winsys'
+##
+
+EXTRA_DIST = \
+ winsys/sw/android \
+ winsys/sw/gdi \
+ winsys/sw/hgl
+
##
## Gallium state trackers and their users (targets)
@@ -164,6 +173,14 @@ SUBDIRS += state_trackers/xvmc targets/xvmc
endif
##
+## Don't forget to bundle the remaining (non autotools) state-trackers/targets
+##
+
+EXTRA_DIST += \
+ state_trackers/hgl targets/haiku-softpipe
+
+
+##
## Gallium tests
##
diff --git a/mesalib/src/gallium/SConscript b/mesalib/src/gallium/SConscript
index 98d017e4d..977e3fbf4 100644
--- a/mesalib/src/gallium/SConscript
+++ b/mesalib/src/gallium/SConscript
@@ -85,6 +85,7 @@ if not env['embedded']:
if env['platform'] == 'haiku':
SConscript([
+ 'state_trackers/hgl/SConscript',
'targets/haiku-softpipe/SConscript',
])
diff --git a/mesalib/src/gallium/auxiliary/util/u_vbuf.c b/mesalib/src/gallium/auxiliary/util/u_vbuf.c
index c475ee1b3..650df9f6a 100644
--- a/mesalib/src/gallium/auxiliary/util/u_vbuf.c
+++ b/mesalib/src/gallium/auxiliary/util/u_vbuf.c
@@ -191,47 +191,114 @@ u_vbuf_create_vertex_elements(struct u_vbuf *mgr, unsigned count,
const struct pipe_vertex_element *attribs);
static void u_vbuf_delete_vertex_elements(struct u_vbuf *mgr, void *cso);
+static const struct {
+ enum pipe_format from, to;
+} vbuf_format_fallbacks[] = {
+ { PIPE_FORMAT_R32_FIXED, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R32G32_FIXED, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R32G32B32_FIXED, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R32G32B32A32_FIXED, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R16_FLOAT, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R16G16_FLOAT, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R16G16B16_FLOAT, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R16G16B16A16_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R64_FLOAT, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R64G64_FLOAT, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R64G64B64_FLOAT, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R64G64B64A64_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R32_UNORM, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R32G32_UNORM, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R32G32B32_UNORM, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R32G32B32A32_UNORM, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R32_SNORM, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R32G32_SNORM, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R32G32B32_SNORM, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R32G32B32A32_SNORM, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R32_USCALED, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R32G32_USCALED, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R32G32B32_USCALED, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R32G32B32A32_USCALED, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R32_SSCALED, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R32G32_SSCALED, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R32G32B32_SSCALED, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R32G32B32A32_SSCALED, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R16_UNORM, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R16G16_UNORM, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R16G16B16_UNORM, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R16G16B16A16_UNORM, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R16_SNORM, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R16G16_SNORM, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R16G16B16_SNORM, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R16G16B16A16_SNORM, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R16_USCALED, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R16G16_USCALED, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R16G16B16_USCALED, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R16G16B16A16_USCALED, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R16_SSCALED, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R16G16_SSCALED, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R16G16B16_SSCALED, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R16G16B16A16_SSCALED, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R8_UNORM, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R8G8_UNORM, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R8G8B8_UNORM, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R8G8B8A8_UNORM, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R8_SNORM, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R8G8_SNORM, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R8G8B8_SNORM, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R8G8B8A8_SNORM, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R8_USCALED, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R8G8_USCALED, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R8G8B8_USCALED, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R8G8B8A8_USCALED, PIPE_FORMAT_R32G32B32A32_FLOAT },
+ { PIPE_FORMAT_R8_SSCALED, PIPE_FORMAT_R32_FLOAT },
+ { PIPE_FORMAT_R8G8_SSCALED, PIPE_FORMAT_R32G32_FLOAT },
+ { PIPE_FORMAT_R8G8B8_SSCALED, PIPE_FORMAT_R32G32B32_FLOAT },
+ { PIPE_FORMAT_R8G8B8A8_SSCALED, PIPE_FORMAT_R32G32B32A32_FLOAT },
+};
-void u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps)
+boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps)
{
- caps->format_fixed32 =
- screen->is_format_supported(screen, PIPE_FORMAT_R32_FIXED, PIPE_BUFFER,
- 0, PIPE_BIND_VERTEX_BUFFER);
-
- caps->format_float16 =
- screen->is_format_supported(screen, PIPE_FORMAT_R16_FLOAT, PIPE_BUFFER,
- 0, PIPE_BIND_VERTEX_BUFFER);
-
- caps->format_float64 =
- screen->is_format_supported(screen, PIPE_FORMAT_R64_FLOAT, PIPE_BUFFER,
- 0, PIPE_BIND_VERTEX_BUFFER);
-
- caps->format_norm32 =
- screen->is_format_supported(screen, PIPE_FORMAT_R32_UNORM, PIPE_BUFFER,
- 0, PIPE_BIND_VERTEX_BUFFER) &&
- screen->is_format_supported(screen, PIPE_FORMAT_R32_SNORM, PIPE_BUFFER,
- 0, PIPE_BIND_VERTEX_BUFFER);
-
- caps->format_scaled32 =
- screen->is_format_supported(screen, PIPE_FORMAT_R32_USCALED, PIPE_BUFFER,
- 0, PIPE_BIND_VERTEX_BUFFER) &&
- screen->is_format_supported(screen, PIPE_FORMAT_R32_SSCALED, PIPE_BUFFER,
- 0, PIPE_BIND_VERTEX_BUFFER);
+ unsigned i;
+ boolean fallback = FALSE;
+
+ /* I'd rather have a bitfield of which formats are supported and a static
+ * table of the translations indexed by format, but since we don't have C99
+ * we can't easily make a sparsely-populated table indexed by format. So,
+ * we construct the sparse table here.
+ */
+ for (i = 0; i < PIPE_FORMAT_COUNT; i++)
+ caps->format_translation[i] = i;
+
+ for (i = 0; i < Elements(vbuf_format_fallbacks); i++) {
+ enum pipe_format format = vbuf_format_fallbacks[i].from;
+
+ if (!screen->is_format_supported(screen, format, PIPE_BUFFER, 0,
+ PIPE_BIND_VERTEX_BUFFER)) {
+ caps->format_translation[format] = vbuf_format_fallbacks[i].to;
+ fallback = TRUE;
+ }
+ }
caps->buffer_offset_unaligned =
!screen->get_param(screen,
- PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY);
-
+ PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY);
caps->buffer_stride_unaligned =
- !screen->get_param(screen,
+ !screen->get_param(screen,
PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY);
-
caps->velem_src_offset_unaligned =
!screen->get_param(screen,
- PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY);
-
+ PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY);
caps->user_vertex_buffers =
screen->get_param(screen, PIPE_CAP_USER_VERTEX_BUFFERS);
+
+ if (!caps->buffer_offset_unaligned ||
+ !caps->buffer_stride_unaligned ||
+ !caps->velem_src_offset_unaligned ||
+ !caps->user_vertex_buffers) {
+ fallback = TRUE;
+ }
+
+ return fallback;
}
struct u_vbuf *
@@ -664,9 +731,6 @@ static void u_vbuf_translate_end(struct u_vbuf *mgr)
}
}
-#define FORMAT_REPLACE(what, withwhat) \
- case PIPE_FORMAT_##what: format = PIPE_FORMAT_##withwhat; break
-
static void *
u_vbuf_create_vertex_elements(struct u_vbuf *mgr, unsigned count,
const struct pipe_vertex_element *attribs)
@@ -695,62 +759,7 @@ u_vbuf_create_vertex_elements(struct u_vbuf *mgr, unsigned count,
ve->noninstance_vb_mask_any |= 1 << ve->ve[i].vertex_buffer_index;
}
- /* Choose a native format.
- * For now we don't care about the alignment, that's going to
- * be sorted out later. */
- if (!mgr->caps.format_fixed32) {
- switch (format) {
- FORMAT_REPLACE(R32_FIXED, R32_FLOAT);
- FORMAT_REPLACE(R32G32_FIXED, R32G32_FLOAT);
- FORMAT_REPLACE(R32G32B32_FIXED, R32G32B32_FLOAT);
- FORMAT_REPLACE(R32G32B32A32_FIXED, R32G32B32A32_FLOAT);
- default:;
- }
- }
- if (!mgr->caps.format_float16) {
- switch (format) {
- FORMAT_REPLACE(R16_FLOAT, R32_FLOAT);
- FORMAT_REPLACE(R16G16_FLOAT, R32G32_FLOAT);
- FORMAT_REPLACE(R16G16B16_FLOAT, R32G32B32_FLOAT);
- FORMAT_REPLACE(R16G16B16A16_FLOAT, R32G32B32A32_FLOAT);
- default:;
- }
- }
- if (!mgr->caps.format_float64) {
- switch (format) {
- FORMAT_REPLACE(R64_FLOAT, R32_FLOAT);
- FORMAT_REPLACE(R64G64_FLOAT, R32G32_FLOAT);
- FORMAT_REPLACE(R64G64B64_FLOAT, R32G32B32_FLOAT);
- FORMAT_REPLACE(R64G64B64A64_FLOAT, R32G32B32A32_FLOAT);
- default:;
- }
- }
- if (!mgr->caps.format_norm32) {
- switch (format) {
- FORMAT_REPLACE(R32_UNORM, R32_FLOAT);
- FORMAT_REPLACE(R32G32_UNORM, R32G32_FLOAT);
- FORMAT_REPLACE(R32G32B32_UNORM, R32G32B32_FLOAT);
- FORMAT_REPLACE(R32G32B32A32_UNORM, R32G32B32A32_FLOAT);
- FORMAT_REPLACE(R32_SNORM, R32_FLOAT);
- FORMAT_REPLACE(R32G32_SNORM, R32G32_FLOAT);
- FORMAT_REPLACE(R32G32B32_SNORM, R32G32B32_FLOAT);
- FORMAT_REPLACE(R32G32B32A32_SNORM, R32G32B32A32_FLOAT);
- default:;
- }
- }
- if (!mgr->caps.format_scaled32) {
- switch (format) {
- FORMAT_REPLACE(R32_USCALED, R32_FLOAT);
- FORMAT_REPLACE(R32G32_USCALED, R32G32_FLOAT);
- FORMAT_REPLACE(R32G32B32_USCALED, R32G32B32_FLOAT);
- FORMAT_REPLACE(R32G32B32A32_USCALED,R32G32B32A32_FLOAT);
- FORMAT_REPLACE(R32_SSCALED, R32_FLOAT);
- FORMAT_REPLACE(R32G32_SSCALED, R32G32_FLOAT);
- FORMAT_REPLACE(R32G32B32_SSCALED, R32G32B32_FLOAT);
- FORMAT_REPLACE(R32G32B32A32_SSCALED,R32G32B32A32_FLOAT);
- default:;
- }
- }
+ format = mgr->caps.format_translation[format];
driver_attribs[i].src_format = format;
ve->native_format[i] = format;
diff --git a/mesalib/src/gallium/auxiliary/util/u_vbuf.h b/mesalib/src/gallium/auxiliary/util/u_vbuf.h
index a608184e5..9e8b135fb 100644
--- a/mesalib/src/gallium/auxiliary/util/u_vbuf.h
+++ b/mesalib/src/gallium/auxiliary/util/u_vbuf.h
@@ -35,19 +35,14 @@
#include "pipe/p_context.h"
#include "pipe/p_state.h"
+#include "pipe/p_format.h"
struct cso_context;
struct u_vbuf;
/* Hardware vertex fetcher limitations can be described by this structure. */
struct u_vbuf_caps {
- /* Vertex format CAPs. */
- /* TRUE if hardware supports it. */
- unsigned format_fixed32:1; /* PIPE_FORMAT_*32*_FIXED */
- unsigned format_float16:1; /* PIPE_FORMAT_*16*_FLOAT */
- unsigned format_float64:1; /* PIPE_FORMAT_*64*_FLOAT */
- unsigned format_norm32:1; /* PIPE_FORMAT_*32*NORM */
- unsigned format_scaled32:1; /* PIPE_FORMAT_*32*SCALED */
+ enum pipe_format format_translation[PIPE_FORMAT_COUNT];
/* Whether vertex fetches don't have to be 4-byte-aligned. */
/* TRUE if hardware supports it. */
@@ -60,7 +55,7 @@ struct u_vbuf_caps {
};
-void u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps);
+boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps);
struct u_vbuf *
u_vbuf_create(struct pipe_context *pipe,
diff --git a/mesalib/src/glsl/ast_function.cpp b/mesalib/src/glsl/ast_function.cpp
index 39c7beeb2..7130d6162 100644
--- a/mesalib/src/glsl/ast_function.cpp
+++ b/mesalib/src/glsl/ast_function.cpp
@@ -103,35 +103,35 @@ verify_image_parameter(YYLTYPE *loc, _mesa_glsl_parse_state *state,
* qualifiers. [...] It is legal to have additional qualifiers
* on a formal parameter, but not to have fewer."
*/
- if (actual->data.image.coherent && !formal->data.image.coherent) {
+ if (actual->data.image_coherent && !formal->data.image_coherent) {
_mesa_glsl_error(loc, state,
"function call parameter `%s' drops "
"`coherent' qualifier", formal->name);
return false;
}
- if (actual->data.image._volatile && !formal->data.image._volatile) {
+ if (actual->data.image_volatile && !formal->data.image_volatile) {
_mesa_glsl_error(loc, state,
"function call parameter `%s' drops "
"`volatile' qualifier", formal->name);
return false;
}
- if (actual->data.image.restrict_flag && !formal->data.image.restrict_flag) {
+ if (actual->data.image_restrict && !formal->data.image_restrict) {
_mesa_glsl_error(loc, state,
"function call parameter `%s' drops "
"`restrict' qualifier", formal->name);
return false;
}
- if (actual->data.image.read_only && !formal->data.image.read_only) {
+ if (actual->data.image_read_only && !formal->data.image_read_only) {
_mesa_glsl_error(loc, state,
"function call parameter `%s' drops "
"`readonly' qualifier", formal->name);
return false;
}
- if (actual->data.image.write_only && !formal->data.image.write_only) {
+ if (actual->data.image_write_only && !formal->data.image_write_only) {
_mesa_glsl_error(loc, state,
"function call parameter `%s' drops "
"`writeonly' qualifier", formal->name);
diff --git a/mesalib/src/glsl/ast_to_hir.cpp b/mesalib/src/glsl/ast_to_hir.cpp
index 30b02d016..897505c60 100644
--- a/mesalib/src/glsl/ast_to_hir.cpp
+++ b/mesalib/src/glsl/ast_to_hir.cpp
@@ -2360,11 +2360,11 @@ apply_image_qualifier_to_variable(const struct ast_type_qualifier *qual,
"global variables");
}
- var->data.image.read_only |= qual->flags.q.read_only;
- var->data.image.write_only |= qual->flags.q.write_only;
- var->data.image.coherent |= qual->flags.q.coherent;
- var->data.image._volatile |= qual->flags.q._volatile;
- var->data.image.restrict_flag |= qual->flags.q.restrict_flag;
+ var->data.image_read_only |= qual->flags.q.read_only;
+ var->data.image_write_only |= qual->flags.q.write_only;
+ var->data.image_coherent |= qual->flags.q.coherent;
+ var->data.image_volatile |= qual->flags.q._volatile;
+ var->data.image_restrict |= qual->flags.q.restrict_flag;
var->data.read_only = true;
if (qual->flags.q.explicit_image_format) {
@@ -2378,7 +2378,7 @@ apply_image_qualifier_to_variable(const struct ast_type_qualifier *qual,
"base data type of the image");
}
- var->data.image.format = qual->image_format;
+ var->data.image_format = qual->image_format;
} else {
if (var->data.mode == ir_var_uniform && !qual->flags.q.write_only) {
_mesa_glsl_error(loc, state, "uniforms not qualified with "
@@ -2386,7 +2386,7 @@ apply_image_qualifier_to_variable(const struct ast_type_qualifier *qual,
"qualifier");
}
- var->data.image.format = GL_NONE;
+ var->data.image_format = GL_NONE;
}
}
}
diff --git a/mesalib/src/glsl/builtin_functions.cpp b/mesalib/src/glsl/builtin_functions.cpp
index c882ec8dd..9be7f6d1a 100644
--- a/mesalib/src/glsl/builtin_functions.cpp
+++ b/mesalib/src/glsl/builtin_functions.cpp
@@ -4476,11 +4476,11 @@ builtin_builder::_image_prototype(const glsl_type *image_type,
* accept everything that needs to be accepted, and reject cases
* like loads from write-only or stores to read-only images.
*/
- image->data.image.read_only = flags & IMAGE_FUNCTION_READ_ONLY;
- image->data.image.write_only = flags & IMAGE_FUNCTION_WRITE_ONLY;
- image->data.image.coherent = true;
- image->data.image._volatile = true;
- image->data.image.restrict_flag = true;
+ image->data.image_read_only = (flags & IMAGE_FUNCTION_READ_ONLY) != 0;
+ image->data.image_write_only = (flags & IMAGE_FUNCTION_WRITE_ONLY) != 0;
+ image->data.image_coherent = true;
+ image->data.image_volatile = true;
+ image->data.image_restrict = true;
return sig;
}
diff --git a/mesalib/src/glsl/glcpp/glcpp-lex.l b/mesalib/src/glsl/glcpp/glcpp-lex.l
index 98d500ec0..fa9aa5069 100644
--- a/mesalib/src/glsl/glcpp/glcpp-lex.l
+++ b/mesalib/src/glsl/glcpp/glcpp-lex.l
@@ -289,8 +289,14 @@ HEXADECIMAL_INTEGER 0[xX][0-9a-fA-F]+[uU]?
}
/* Swallow empty #pragma directives, (to avoid confusing the
- * downstream compiler). */
-<HASH>pragma{HSPACE}*/{NEWLINE} {
+ * downstream compiler).
+ *
+ * Note: We use a simple regular expression for the lookahead
+ * here. Specifically, we cannot use the complete {NEWLINE} expression
+ * since it uses alternation and we've found that there's a flex bug
+ * where using alternation in the lookahead portion of a pattern
+ * triggers a buffer overrun. */
+<HASH>pragma{HSPACE}*/[\r\n] {
BEGIN INITIAL;
}
diff --git a/mesalib/src/glsl/glsl_parser.yy b/mesalib/src/glsl/glsl_parser.yy
index 4c871633f..6160e265e 100644
--- a/mesalib/src/glsl/glsl_parser.yy
+++ b/mesalib/src/glsl/glsl_parser.yy
@@ -24,6 +24,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#ifndef _MSC_VER
+#include <strings.h>
+#endif
#include <assert.h>
#include "ast.h"
@@ -179,7 +182,7 @@ static bool match_layout_qualifier(const char *s1, const char *s2,
*/
%token ASM CLASS UNION ENUM TYPEDEF TEMPLATE THIS PACKED_TOK GOTO
%token INLINE_TOK NOINLINE PUBLIC_TOK STATIC EXTERN EXTERNAL
-%token LONG_TOK SHORT_TOK DOUBLE_TOK HALF FIXED_TOK UNSIGNED INPUT_TOK OUPTUT
+%token LONG_TOK SHORT_TOK DOUBLE_TOK HALF FIXED_TOK UNSIGNED INPUT_TOK
%token HVEC2 HVEC3 HVEC4 DVEC2 DVEC3 DVEC4 FVEC2 FVEC3 FVEC4
%token SAMPLER3DRECT
%token SIZEOF CAST NAMESPACE USING
diff --git a/mesalib/src/glsl/ir.cpp b/mesalib/src/glsl/ir.cpp
index 4a4d30477..b289c2975 100644
--- a/mesalib/src/glsl/ir.cpp
+++ b/mesalib/src/glsl/ir.cpp
@@ -1551,6 +1551,7 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name,
this->data.has_initializer = false;
this->data.location = -1;
this->data.location_frac = 0;
+ this->data.binding = 0;
this->warn_extension = NULL;
this->constant_value = NULL;
this->constant_initializer = NULL;
@@ -1566,13 +1567,12 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name,
this->data.mode = mode;
this->data.interpolation = INTERP_QUALIFIER_NONE;
this->data.max_array_access = 0;
- this->data.atomic.buffer_index = 0;
this->data.atomic.offset = 0;
- this->data.image.read_only = false;
- this->data.image.write_only = false;
- this->data.image.coherent = false;
- this->data.image._volatile = false;
- this->data.image.restrict_flag = false;
+ this->data.image_read_only = false;
+ this->data.image_write_only = false;
+ this->data.image_coherent = false;
+ this->data.image_volatile = false;
+ this->data.image_restrict = false;
if (type != NULL) {
if (type->base_type == GLSL_TYPE_SAMPLER)
@@ -1678,11 +1678,11 @@ ir_function_signature::qualifiers_match(exec_list *params)
a->data.interpolation != b->data.interpolation ||
a->data.centroid != b->data.centroid ||
a->data.sample != b->data.sample ||
- a->data.image.read_only != b->data.image.read_only ||
- a->data.image.write_only != b->data.image.write_only ||
- a->data.image.coherent != b->data.image.coherent ||
- a->data.image._volatile != b->data.image._volatile ||
- a->data.image.restrict_flag != b->data.image.restrict_flag) {
+ a->data.image_read_only != b->data.image_read_only ||
+ a->data.image_write_only != b->data.image_write_only ||
+ a->data.image_coherent != b->data.image_coherent ||
+ a->data.image_volatile != b->data.image_volatile ||
+ a->data.image_restrict != b->data.image_restrict) {
/* parameter a's qualifiers don't match */
return a->name;
diff --git a/mesalib/src/glsl/ir.h b/mesalib/src/glsl/ir.h
index 18623b968..e9051732b 100644
--- a/mesalib/src/glsl/ir.h
+++ b/mesalib/src/glsl/ir.h
@@ -689,6 +689,28 @@ public:
unsigned must_be_shader_input:1;
/**
+ * Output index for dual source blending.
+ *
+ * \note
+ * The GLSL spec only allows the values 0 or 1 for the index in \b dual
+ * source blending.
+ */
+ unsigned index:1;
+
+
+ /**
+ * ARB_shader_image_load_store qualifiers.
+ */
+ unsigned image_read_only:1; /**< "readonly" qualifier. */
+ unsigned image_write_only:1; /**< "writeonly" qualifier. */
+ unsigned image_coherent:1;
+ unsigned image_volatile:1;
+ unsigned image_restrict:1;
+
+ /** Image internal format if specified explicitly, otherwise GL_NONE. */
+ uint16_t image_format;
+
+ /**
* \brief Layout qualifier for gl_FragDepth.
*
* This is not equal to \c ir_depth_layout_none if and only if this
@@ -722,12 +744,7 @@ public:
unsigned stream;
/**
- * output index for dual source blending.
- */
- int index;
-
- /**
- * Initial binding point for a sampler or UBO.
+ * Initial binding point for a sampler, atomic, or UBO.
*
* For array types, this represents the binding point for the first element.
*/
@@ -737,25 +754,10 @@ public:
* Location an atomic counter is stored at.
*/
struct {
- unsigned buffer_index;
unsigned offset;
} atomic;
/**
- * ARB_shader_image_load_store qualifiers.
- */
- struct {
- bool read_only; /**< "readonly" qualifier. */
- bool write_only; /**< "writeonly" qualifier. */
- bool coherent;
- bool _volatile;
- bool restrict_flag;
-
- /** Image internal format if specified explicitly, otherwise GL_NONE. */
- GLenum format;
- } image;
-
- /**
* Highest element accessed with a constant expression array index
*
* Not used for non-array variables.
diff --git a/mesalib/src/glsl/link_atomics.cpp b/mesalib/src/glsl/link_atomics.cpp
index 75699fd93..603873a5d 100644
--- a/mesalib/src/glsl/link_atomics.cpp
+++ b/mesalib/src/glsl/link_atomics.cpp
@@ -201,7 +201,9 @@ link_assign_atomic_counter_resources(struct gl_context *ctx,
gl_uniform_storage *const storage = &prog->UniformStorage[id];
mab.Uniforms[j] = id;
- var->data.atomic.buffer_index = i;
+ if (!var->data.explicit_binding)
+ var->data.binding = i;
+
storage->atomic_buffer_index = i;
storage->offset = var->data.atomic.offset;
storage->array_stride = (var->type->is_array() ?
diff --git a/mesalib/src/glsl/link_uniforms.cpp b/mesalib/src/glsl/link_uniforms.cpp
index ddb205658..258d279ea 100644
--- a/mesalib/src/glsl/link_uniforms.cpp
+++ b/mesalib/src/glsl/link_uniforms.cpp
@@ -829,8 +829,8 @@ link_set_image_access_qualifiers(struct gl_shader_program *prog)
(void) found;
const gl_uniform_storage *storage = &prog->UniformStorage[id];
const unsigned index = storage->image[i].index;
- const GLenum access = (var->data.image.read_only ? GL_READ_ONLY :
- var->data.image.write_only ? GL_WRITE_ONLY :
+ const GLenum access = (var->data.image_read_only ? GL_READ_ONLY :
+ var->data.image_write_only ? GL_WRITE_ONLY :
GL_READ_WRITE);
for (unsigned j = 0; j < MAX2(1, storage->array_elements); ++j)
diff --git a/mesalib/src/hgl/GLRendererRoster.cpp b/mesalib/src/hgl/GLRendererRoster.cpp
index 1712a871c..d29f7ecc8 100644
--- a/mesalib/src/hgl/GLRendererRoster.cpp
+++ b/mesalib/src/hgl/GLRendererRoster.cpp
@@ -17,7 +17,7 @@
#include <Directory.h>
#include <FindDirectory.h>
#include <Path.h>
-#include <String.h>
+#include <strings.h>
#include "GLDispatcher.h"
#include "GLRendererRoster.h"
diff --git a/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml b/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml
index 0ee6a3c00..7e6268877 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml
@@ -53,6 +53,7 @@
<enum name="VERTEX_BINDING_STRIDE" value="0x82D8"/>
<enum name="MAX_VERTEX_ATTRIB_RELATIVE_OFFSET" value="0x82D9"/>
<enum name="MAX_VERTEX_ATTRIB_BINDINGS" value="0x82DA"/>
+ <enum name="MAX_VERTEX_ATTRIB_STRIDE" value="0x82E5"/>
</category>
</OpenGLAPI>
diff --git a/mesalib/src/mesa/main/context.c b/mesalib/src/mesa/main/context.c
index 232084267..fbdbd680a 100644
--- a/mesalib/src/mesa/main/context.c
+++ b/mesalib/src/mesa/main/context.c
@@ -670,6 +670,9 @@ _mesa_init_constants(struct gl_constants *consts, gl_api api)
? GL_CONTEXT_CORE_PROFILE_BIT
: GL_CONTEXT_COMPATIBILITY_PROFILE_BIT;
+ /* GL 4.4 */
+ consts->MaxVertexAttribStride = 2048;
+
/** GL_EXT_gpu_shader4 */
consts->MinProgramTexelOffset = -8;
consts->MaxProgramTexelOffset = 7;
diff --git a/mesalib/src/mesa/main/get_hash_params.py b/mesalib/src/mesa/main/get_hash_params.py
index ff858207b..aace8a5b5 100644
--- a/mesalib/src/mesa/main/get_hash_params.py
+++ b/mesalib/src/mesa/main/get_hash_params.py
@@ -712,6 +712,9 @@ descriptor=[
[ "MAX_GEOMETRY_INPUT_COMPONENTS", "CONTEXT_INT(Const.Program[MESA_SHADER_GEOMETRY].MaxInputComponents), extra_version_32" ],
[ "MAX_GEOMETRY_OUTPUT_COMPONENTS", "CONTEXT_INT(Const.Program[MESA_SHADER_GEOMETRY].MaxOutputComponents), extra_version_32" ],
+# GL 4.4
+ [ "MAX_VERTEX_ATTRIB_STRIDE", "CONTEXT_ENUM(Const.MaxVertexAttribStride), NO_EXTRA" ],
+
# GL_ARB_robustness
[ "RESET_NOTIFICATION_STRATEGY_ARB", "CONTEXT_ENUM(Const.ResetStrategy), NO_EXTRA" ],
diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h
index cb2a4df4f..dc25ea467 100644
--- a/mesalib/src/mesa/main/mtypes.h
+++ b/mesalib/src/mesa/main/mtypes.h
@@ -2317,9 +2317,6 @@ struct gl_geometry_program_state
struct gl_geometry_program *_Current;
GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */
-
- /** Cache of fixed-function programs */
- struct gl_program_cache *Cache;
};
/**
@@ -3414,6 +3411,9 @@ struct gl_constants
/** OpenGL version 3.2 */
GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */
+ /** OpenGL version 4.4 */
+ GLuint MaxVertexAttribStride;
+
/** GL_EXT_transform_feedback */
GLuint MaxTransformFeedbackBuffers;
GLuint MaxTransformFeedbackSeparateComponents;
diff --git a/mesalib/src/mesa/main/texobj.c b/mesalib/src/mesa/main/texobj.c
index 2a82c2d4e..923cf60d7 100644
--- a/mesalib/src/mesa/main/texobj.c
+++ b/mesalib/src/mesa/main/texobj.c
@@ -772,18 +772,21 @@ _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex)
{
if (!ctx->Shared->FallbackTex[tex]) {
/* create fallback texture now */
- const GLsizei width = 1, height = 1, depth = 1;
- GLubyte texel[4];
+ const GLsizei width = 1, height = 1;
+ GLsizei depth = 1;
+ GLubyte texel[24];
struct gl_texture_object *texObj;
struct gl_texture_image *texImage;
mesa_format texFormat;
GLuint dims, face, numFaces = 1;
GLenum target;
- texel[0] =
- texel[1] =
- texel[2] = 0x0;
- texel[3] = 0xff;
+ for (face = 0; face < 6; face++) {
+ texel[4*face + 0] =
+ texel[4*face + 1] =
+ texel[4*face + 2] = 0x0;
+ texel[4*face + 3] = 0xff;
+ }
switch (tex) {
case TEXTURE_2D_ARRAY_INDEX:
@@ -822,6 +825,7 @@ _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex)
case TEXTURE_CUBE_ARRAY_INDEX:
dims = 3;
target = GL_TEXTURE_CUBE_MAP_ARRAY;
+ depth = 6;
break;
case TEXTURE_EXTERNAL_INDEX:
dims = 2;
diff --git a/mesalib/src/mesa/main/varray.c b/mesalib/src/mesa/main/varray.c
index 5d3cc2a70..7d169f9d4 100644
--- a/mesalib/src/mesa/main/varray.c
+++ b/mesalib/src/mesa/main/varray.c
@@ -424,6 +424,13 @@ update_array(struct gl_context *ctx,
return;
}
+ if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 &&
+ stride > ctx->Const.MaxVertexAttribStride) {
+ _mesa_error(ctx, GL_INVALID_VALUE, "%s(stride=%d > "
+ "GL_MAX_VERTEX_ATTRIB_STRIDE)", func, stride);
+ return;
+ }
+
/* Page 29 (page 44 of the PDF) of the OpenGL 3.3 spec says:
*
* "An INVALID_OPERATION error is generated under any of the following
@@ -1437,6 +1444,13 @@ _mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset,
return;
}
+ if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 &&
+ stride > ctx->Const.MaxVertexAttribStride) {
+ _mesa_error(ctx, GL_INVALID_VALUE, "glBindVertexBuffer(stride=%d > "
+ "GL_MAX_VERTEX_ATTRIB_STRIDE)", stride);
+ return;
+ }
+
if (buffer == vao->VertexBinding[VERT_ATTRIB_GENERIC(bindingIndex)].BufferObj->Name) {
vbo = vao->VertexBinding[VERT_ATTRIB_GENERIC(bindingIndex)].BufferObj;
} else if (buffer != 0) {
@@ -1565,6 +1579,14 @@ _mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers,
continue;
}
+ if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 &&
+ strides[i] > ctx->Const.MaxVertexAttribStride) {
+ _mesa_error(ctx, GL_INVALID_VALUE,
+ "glBindVertexBuffers(strides[%u]=%d > "
+ "GL_MAX_VERTEX_ATTRIB_STRIDE)", i, strides[i]);
+ continue;
+ }
+
if (buffers[i]) {
struct gl_vertex_buffer_binding *binding =
&vao->VertexBinding[VERT_ATTRIB_GENERIC(first + i)];
diff --git a/mesalib/src/mesa/program/program.c b/mesalib/src/mesa/program/program.c
index ef5bf6b11..6e17fe65f 100644
--- a/mesalib/src/mesa/program/program.c
+++ b/mesalib/src/mesa/program/program.c
@@ -100,7 +100,6 @@ _mesa_init_program(struct gl_context *ctx)
/* right now by default we don't have a geometry program */
_mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current,
NULL);
- ctx->GeometryProgram.Cache = _mesa_new_program_cache();
/* XXX probably move this stuff */
ctx->ATIFragmentShader.Enabled = GL_FALSE;
@@ -121,7 +120,6 @@ _mesa_free_program_data(struct gl_context *ctx)
_mesa_reference_fragprog(ctx, &ctx->FragmentProgram.Current, NULL);
_mesa_delete_shader_cache(ctx, ctx->FragmentProgram.Cache);
_mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current, NULL);
- _mesa_delete_program_cache(ctx, ctx->GeometryProgram.Cache);
/* XXX probably move this stuff */
if (ctx->ATIFragmentShader.Current) {
diff --git a/mesalib/src/mesa/state_tracker/st_extensions.c b/mesalib/src/mesa/state_tracker/st_extensions.c
index 4110eb5dd..9db648c03 100644
--- a/mesalib/src/mesa/state_tracker/st_extensions.c
+++ b/mesalib/src/mesa/state_tracker/st_extensions.c
@@ -289,6 +289,9 @@ void st_init_limits(struct pipe_screen *screen,
/* The vertex stream must fit into pipe_stream_output_info::stream */
assert(c->MaxVertexStreams <= 4);
+ c->MaxVertexAttribStride
+ = screen->get_param(screen, PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE);
+
c->StripTextureBorder = GL_TRUE;
c->GLSLSkipStrictMaxUniformLimitCheck =
diff --git a/xorg-server/configure.ac b/xorg-server/configure.ac
index f3d9654a4..cba7d24ea 100644
--- a/xorg-server/configure.ac
+++ b/xorg-server/configure.ac
@@ -2364,7 +2364,7 @@ if test "$KDRIVE" = yes; then
AC_DEFINE(KDRIVE_MOUSE, 1, [Enable KDrive mouse driver])
fi
- XEPHYR_REQUIRED_LIBS="xau xdmcp xcb xcb-shape xcb-aux xcb-image xcb-icccm xcb-shm xcb-keysyms"
+ XEPHYR_REQUIRED_LIBS="xau xdmcp xcb xcb-shape xcb-aux xcb-image xcb-icccm xcb-shm xcb-keysyms xcb-randr"
if test "x$XV" = xyes; then
XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS xcb-xv"
fi
diff --git a/xorg-server/dix/devices.c b/xorg-server/dix/devices.c
index 5d26fae21..f17a3ac65 100644
--- a/xorg-server/dix/devices.c
+++ b/xorg-server/dix/devices.c
@@ -416,7 +416,7 @@ EnableDevice(DeviceIntPtr dev, BOOL sendevent)
XISendDeviceHierarchyEvent(flags);
}
- if (!IsMaster(dev))
+ if (!IsMaster(dev) && !IsFloating(dev))
XkbPushLockedStateToSlaves(GetMaster(dev, MASTER_KEYBOARD), 0, 0);
RecalculateMasterButtons(dev);
diff --git a/xorg-server/dri3/dri3.c b/xorg-server/dri3/dri3.c
index 76e07b40e..385862a3b 100644
--- a/xorg-server/dri3/dri3.c
+++ b/xorg-server/dri3/dri3.c
@@ -30,6 +30,8 @@ int dri3_request;
DevPrivateKeyRec dri3_screen_private_key;
DevPrivateKeyRec dri3_window_private_key;
+static int dri3_screen_generation;
+
static Bool
dri3_close_screen(ScreenPtr screen)
{
@@ -44,6 +46,8 @@ dri3_close_screen(ScreenPtr screen)
Bool
dri3_screen_init(ScreenPtr screen, dri3_screen_info_ptr info)
{
+ dri3_screen_generation = serverGeneration;
+
if (!dixRegisterPrivateKey(&dri3_screen_private_key, PRIVATE_SCREEN, 0))
return FALSE;
@@ -68,6 +72,12 @@ dri3_extension_init(void)
ExtensionEntry *extension;
int i;
+ /* If no screens support DRI3, there's no point offering the
+ * extension at all
+ */
+ if (dri3_screen_generation != serverGeneration)
+ return;
+
#ifdef PANORAMIX
if (!noPanoramiXExtension)
return;
diff --git a/xorg-server/fb/fbwindow.c b/xorg-server/fb/fbwindow.c
index 368c4b883..c90175faa 100644
--- a/xorg-server/fb/fbwindow.c
+++ b/xorg-server/fb/fbwindow.c
@@ -33,7 +33,7 @@ fbCreateWindow(WindowPtr pWin)
{
dixSetPrivate(&pWin->devPrivates, fbGetWinPrivateKey(pWin),
fbGetScreenPixmap(pWin->drawable.pScreen));
- if (pWin->drawable.bitsPerPixel == 32)
+ if (pWin->drawable.bitsPerPixel == 32 && pWin->drawable.depth <= 24)
pWin->drawable.bitsPerPixel =
fbGetScreenPrivate(pWin->drawable.pScreen)->win32bpp;
return TRUE;
diff --git a/xorg-server/glamor/glamor_copy.c b/xorg-server/glamor/glamor_copy.c
index bfcde43db..6f422d419 100644
--- a/xorg-server/glamor/glamor_copy.c
+++ b/xorg-server/glamor/glamor_copy.c
@@ -233,6 +233,56 @@ bail:
return FALSE;
}
+/**
+ * Implements CopyArea from the GPU to the CPU using glReadPixels from the
+ * source FBO.
+ */
+static Bool
+glamor_copy_fbo_cpu(DrawablePtr src,
+ DrawablePtr dst,
+ GCPtr gc,
+ BoxPtr box,
+ int nbox,
+ int dx,
+ int dy,
+ Bool reverse,
+ Bool upsidedown,
+ Pixel bitplane,
+ void *closure)
+{
+ ScreenPtr screen = dst->pScreen;
+ glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
+ PixmapPtr src_pixmap = glamor_get_drawable_pixmap(src);
+ FbBits *dst_bits;
+ FbStride dst_stride;
+ int dst_bpp;
+ int src_xoff, src_yoff;
+ int dst_xoff, dst_yoff;
+
+ if (gc && gc->alu != GXcopy)
+ goto bail;
+
+ if (gc && !glamor_pm_is_solid(dst, gc->planemask))
+ goto bail;
+
+ glamor_make_current(glamor_priv);
+ glamor_prepare_access(dst, GLAMOR_ACCESS_RW);
+
+ glamor_get_drawable_deltas(src, src_pixmap, &src_xoff, &src_yoff);
+
+ fbGetDrawable(dst, dst_bits, dst_stride, dst_bpp, dst_xoff, dst_yoff);
+
+ glamor_download_boxes(src_pixmap, box, nbox, src_xoff + dx, src_yoff + dy,
+ dst_xoff, dst_yoff,
+ (uint8_t *) dst_bits, dst_stride * sizeof (FbBits));
+ glamor_finish_access(dst);
+
+ return TRUE;
+
+bail:
+ return FALSE;
+}
+
/*
* Copy from GPU to GPU by using the source
* as a texture and painting that into the destination
@@ -584,6 +634,11 @@ glamor_copy_gl(DrawablePtr src,
if (bitplane == 0)
return glamor_copy_cpu_fbo(src, dst, gc, box, nbox, dx, dy,
reverse, upsidedown, bitplane, closure);
+ } else if (GLAMOR_PIXMAP_PRIV_HAS_FBO(src_priv) &&
+ dst_priv->type != GLAMOR_DRM_ONLY &&
+ bitplane == 0) {
+ return glamor_copy_fbo_cpu(src, dst, gc, box, nbox, dx, dy,
+ reverse, upsidedown, bitplane, closure);
}
return FALSE;
}
diff --git a/xorg-server/glamor/glamor_font.c b/xorg-server/glamor/glamor_font.c
index 57c607dc2..0ca91fa2e 100644
--- a/xorg-server/glamor/glamor_font.c
+++ b/xorg-server/glamor/glamor_font.c
@@ -46,6 +46,8 @@ glamor_font_get(ScreenPtr screen, FontPtr font)
CharInfoPtr glyph;
unsigned long count;
+ if (glamor_priv->glsl_version < 130)
+ return NULL;
privates = FontGetPrivate(font, glamor_font_private_index);
if (!privates) {
@@ -167,6 +169,11 @@ glamor_unrealize_font(ScreenPtr screen, FontPtr font)
Bool
glamor_font_init(ScreenPtr screen)
{
+ glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
+
+ if (glamor_priv->glsl_version < 130)
+ return TRUE;
+
if (glamor_font_generation != serverGeneration) {
glamor_font_private_index = AllocateFontPrivateIndex();
if (glamor_font_private_index == -1)
diff --git a/xorg-server/glamor/glamor_xv.c b/xorg-server/glamor/glamor_xv.c
index 3f3e064d5..26bdef66b 100644
--- a/xorg-server/glamor/glamor_xv.c
+++ b/xorg-server/glamor/glamor_xv.c
@@ -136,6 +136,11 @@ glamor_init_xv_shader(ScreenPtr screen)
void
glamor_xv_stop_video(glamor_port_private *port_priv)
{
+}
+
+static void
+glamor_xv_free_port_data(glamor_port_private *port_priv)
+{
int i;
for (i = 0; i < 3; i++) {
@@ -144,6 +149,8 @@ glamor_xv_stop_video(glamor_port_private *port_priv)
port_priv->src_pix[i] = NULL;
}
}
+ RegionUninit(&port_priv->clip);
+ RegionNull(&port_priv->clip);
}
int
@@ -381,6 +388,8 @@ glamor_xv_render(glamor_port_private *port_priv)
glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
DamageDamageRegion(port_priv->pDraw, &port_priv->clip);
+
+ glamor_xv_free_port_data(port_priv);
}
int
@@ -468,9 +477,7 @@ glamor_xv_put_image(glamor_port_private *port_priv,
else
port_priv->pPixmap = (PixmapPtr) pDrawable;
- if (!RegionEqual(&port_priv->clip, clipBoxes)) {
- RegionCopy(&port_priv->clip, clipBoxes);
- }
+ RegionCopy(&port_priv->clip, clipBoxes);
port_priv->src_x = src_x;
port_priv->src_y = src_y;
diff --git a/xorg-server/hw/kdrive/ephyr/ephyr.c b/xorg-server/hw/kdrive/ephyr/ephyr.c
index d57e9f33c..85d419376 100644
--- a/xorg-server/hw/kdrive/ephyr/ephyr.c
+++ b/xorg-server/hw/kdrive/ephyr/ephyr.c
@@ -111,13 +111,16 @@ Bool
ephyrScreenInitialize(KdScreenInfo *screen)
{
EphyrScrPriv *scrpriv = screen->driver;
+ int x = 0, y = 0;
int width = 640, height = 480;
CARD32 redMask, greenMask, blueMask;
- if (hostx_want_screen_size(screen, &width, &height)
+ if (hostx_want_screen_geometry(screen, &width, &height, &x, &y)
|| !screen->width || !screen->height) {
screen->width = width;
screen->height = height;
+ screen->x = x;
+ screen->y = y;
}
if (EphyrWantGrayScale)
@@ -242,7 +245,8 @@ ephyrMapFramebuffer(KdScreenInfo * screen)
buffer_height = ephyrBufferHeight(screen);
priv->base =
- hostx_screen_init(screen, screen->width, screen->height, buffer_height,
+ hostx_screen_init(screen, screen->x, screen->y,
+ screen->width, screen->height, buffer_height,
&priv->bytes_per_line, &screen->fb.bitsPerPixel);
if ((scrpriv->randr & RR_Rotate_0) && !(scrpriv->randr & RR_Reflect_All)) {
diff --git a/xorg-server/hw/kdrive/ephyr/ephyr.h b/xorg-server/hw/kdrive/ephyr/ephyr.h
index dfd93c9bc..4e753f158 100644
--- a/xorg-server/hw/kdrive/ephyr/ephyr.h
+++ b/xorg-server/hw/kdrive/ephyr/ephyr.h
@@ -73,8 +73,11 @@ typedef struct _ephyrScrPriv {
xcb_window_t win_pre_existing; /* Set via -parent option like xnest */
xcb_window_t peer_win; /* Used for GL; should be at most one */
xcb_image_t *ximg;
+ Bool win_explicit_position;
+ int win_x, win_y;
int win_width, win_height;
int server_depth;
+ const char *output; /* Set via -output option */
unsigned char *fb_data; /* only used when host bpp != server bpp */
xcb_shm_segment_info_t shminfo;
diff --git a/xorg-server/hw/kdrive/ephyr/ephyrinit.c b/xorg-server/hw/kdrive/ephyr/ephyrinit.c
index fc0001012..38acc52a6 100644
--- a/xorg-server/hw/kdrive/ephyr/ephyrinit.c
+++ b/xorg-server/hw/kdrive/ephyr/ephyrinit.c
@@ -47,6 +47,8 @@ extern KdPointerDriver LinuxEvdevMouseDriver;
extern KdKeyboardDriver LinuxEvdevKeyboardDriver;
#endif
+void processScreenOrOutputArg(const char *screen_size, const char *output, char *parent_id);
+void processOutputArg(const char *output, char *parent_id);
void processScreenArg(const char *screen_size, char *parent_id);
void
@@ -134,6 +136,7 @@ ddxUseMsg(void)
ErrorF("-parent <XID> Use existing window as Xephyr root win\n");
ErrorF("-sw-cursor Render cursors in software in Xephyr\n");
ErrorF("-fullscreen Attempt to run Xephyr fullscreen\n");
+ ErrorF("-output <NAME> Attempt to run Xephyr fullscreen (restricted to given output geometry)\n");
ErrorF("-grayscale Simulate 8bit grayscale\n");
ErrorF("-resizeable Make Xephyr windows resizeable\n");
#ifdef GLAMOR
@@ -154,7 +157,7 @@ ddxUseMsg(void)
}
void
-processScreenArg(const char *screen_size, char *parent_id)
+processScreenOrOutputArg(const char *screen_size, const char *output, char *parent_id)
{
KdCardInfo *card;
@@ -164,6 +167,7 @@ processScreenArg(const char *screen_size, char *parent_id)
if (card) {
KdScreenInfo *screen;
unsigned long p_id = 0;
+ Bool use_geometry;
screen = KdScreenInfoAdd(card);
KdParseScreen(screen, screen_size);
@@ -174,14 +178,28 @@ processScreenArg(const char *screen_size, char *parent_id)
if (parent_id) {
p_id = strtol(parent_id, NULL, 0);
}
+
+ use_geometry = (strchr(screen_size, '+') != NULL);
EPHYR_DBG("screen number:%d\n", screen->mynum);
- hostx_add_screen(screen, p_id, screen->mynum);
+ hostx_add_screen(screen, p_id, screen->mynum, use_geometry, output);
}
else {
ErrorF("No matching card found!\n");
}
}
+void
+processScreenArg(const char *screen_size, char *parent_id)
+{
+ processScreenOrOutputArg(screen_size, NULL, parent_id);
+}
+
+void
+processOutputArg(const char *output, char *parent_id)
+{
+ processScreenOrOutputArg("100x100+0+0", output, parent_id);
+}
+
int
ddxProcessArgument(int argc, char **argv, int i)
{
@@ -223,6 +241,15 @@ ddxProcessArgument(int argc, char **argv, int i)
UseMsg();
exit(1);
}
+ else if (!strcmp(argv[i], "-output")) {
+ if (i + 1 < argc) {
+ processOutputArg(argv[i + 1], NULL);
+ return 2;
+ }
+
+ UseMsg();
+ exit(1);
+ }
else if (!strcmp(argv[i], "-sw-cursor")) {
hostx_use_sw_cursor();
return 1;
diff --git a/xorg-server/hw/kdrive/ephyr/hostx.c b/xorg-server/hw/kdrive/ephyr/hostx.c
index 1c759743d..2161ad550 100644
--- a/xorg-server/hw/kdrive/ephyr/hostx.c
+++ b/xorg-server/hw/kdrive/ephyr/hostx.c
@@ -51,6 +51,7 @@
#include <xcb/xcb_image.h>
#include <xcb/shape.h>
#include <xcb/xcb_keysyms.h>
+#include <xcb/randr.h>
#ifdef XF86DRI
#include <xcb/xf86dri.h>
#include <xcb/glx.h>
@@ -104,12 +105,15 @@ static void
#define host_depth_matches_server(_vars) (HostX.depth == (_vars)->server_depth)
int
-hostx_want_screen_size(KdScreenInfo *screen, int *width, int *height)
+hostx_want_screen_geometry(KdScreenInfo *screen, int *width, int *height, int *x, int *y)
{
EphyrScrPriv *scrpriv = screen->driver;
if (scrpriv && (scrpriv->win_pre_existing != None ||
+ scrpriv->output != NULL ||
HostX.use_fullscreen == TRUE)) {
+ *x = scrpriv->win_x;
+ *y = scrpriv->win_y;
*width = scrpriv->win_width;
*height = scrpriv->win_height;
return 1;
@@ -119,7 +123,7 @@ hostx_want_screen_size(KdScreenInfo *screen, int *width, int *height)
}
void
-hostx_add_screen(KdScreenInfo *screen, unsigned long win_id, int screen_num)
+hostx_add_screen(KdScreenInfo *screen, unsigned long win_id, int screen_num, Bool use_geometry, const char *output)
{
EphyrScrPriv *scrpriv = screen->driver;
int index = HostX.n_screens;
@@ -131,6 +135,8 @@ hostx_add_screen(KdScreenInfo *screen, unsigned long win_id, int screen_num)
scrpriv->screen = screen;
scrpriv->win_pre_existing = win_id;
+ scrpriv->win_explicit_position = use_geometry;
+ scrpriv->output = output;
}
void
@@ -210,6 +216,119 @@ hostx_want_preexisting_window(KdScreenInfo *screen)
}
void
+hostx_get_output_geometry(const char *output,
+ int *x, int *y,
+ int *width, int *height)
+{
+ int i, name_len = 0, output_found = FALSE;
+ char *name = NULL;
+ xcb_generic_error_t *error;
+ xcb_randr_query_version_cookie_t version_c;
+ xcb_randr_query_version_reply_t *version_r;
+ xcb_randr_get_screen_resources_cookie_t screen_resources_c;
+ xcb_randr_get_screen_resources_reply_t *screen_resources_r;
+ xcb_randr_output_t *randr_outputs;
+ xcb_randr_get_output_info_cookie_t output_info_c;
+ xcb_randr_get_output_info_reply_t *output_info_r;
+ xcb_randr_get_crtc_info_cookie_t crtc_info_c;
+ xcb_randr_get_crtc_info_reply_t *crtc_info_r;
+
+ /* First of all, check for extension */
+ if (!xcb_get_extension_data(HostX.conn, &xcb_randr_id)->present)
+ {
+ fprintf(stderr, "\nHost X server does not support RANDR extension (or it's disabled).\n");
+ exit(1);
+ }
+
+ /* Check RandR version */
+ version_c = xcb_randr_query_version(HostX.conn, 1, 2);
+ version_r = xcb_randr_query_version_reply(HostX.conn,
+ version_c,
+ &error);
+
+ if (error != NULL || version_r == NULL)
+ {
+ fprintf(stderr, "\nFailed to get RandR version supported by host X server.\n");
+ exit(1);
+ }
+ else if (version_r->major_version < 1 || version_r->minor_version < 2)
+ {
+ free(version_r);
+ fprintf(stderr, "\nHost X server doesn't support RandR 1.2, needed for -output usage.\n");
+ exit(1);
+ }
+
+ free(version_r);
+
+ /* Get list of outputs from screen resources */
+ screen_resources_c = xcb_randr_get_screen_resources(HostX.conn,
+ HostX.winroot);
+ screen_resources_r = xcb_randr_get_screen_resources_reply(HostX.conn,
+ screen_resources_c,
+ NULL);
+ randr_outputs = xcb_randr_get_screen_resources_outputs(screen_resources_r);
+
+ for (i = 0; !output_found && i < screen_resources_r->num_outputs; i++)
+ {
+ /* Get info on the output */
+ output_info_c = xcb_randr_get_output_info(HostX.conn,
+ randr_outputs[i],
+ XCB_CURRENT_TIME);
+ output_info_r = xcb_randr_get_output_info_reply(HostX.conn,
+ output_info_c,
+ NULL);
+
+ /* Get output name */
+ name_len = xcb_randr_get_output_info_name_length(output_info_r);
+ name = malloc(name_len + 1);
+ strncpy(name, (char*)xcb_randr_get_output_info_name(output_info_r), name_len);
+ name[name_len] = '\0';
+
+ if (!strcmp(name, output))
+ {
+ output_found = TRUE;
+
+ /* Check if output is connected */
+ if (output_info_r->crtc == XCB_NONE)
+ {
+ free(name);
+ free(output_info_r);
+ free(screen_resources_r);
+ fprintf(stderr, "\nOutput %s is currently disabled (or not connected).\n", output);
+ exit(1);
+ }
+
+ /* Get CRTC from output info */
+ crtc_info_c = xcb_randr_get_crtc_info(HostX.conn,
+ output_info_r->crtc,
+ XCB_CURRENT_TIME);
+ crtc_info_r = xcb_randr_get_crtc_info_reply(HostX.conn,
+ crtc_info_c,
+ NULL);
+
+ /* Get CRTC geometry */
+ *x = crtc_info_r->x;
+ *y = crtc_info_r->y;
+ *width = crtc_info_r->width;
+ *height = crtc_info_r->height;
+
+ free(crtc_info_r);
+ }
+
+ free(name);
+ free(output_info_r);
+ }
+
+ free(screen_resources_r);
+
+ if (!output_found)
+ {
+ fprintf(stderr, "\nOutput %s not available in host X server.\n", output);
+ exit(1);
+ }
+}
+
+void
hostx_use_fullscreen(void)
{
HostX.use_fullscreen = TRUE;
@@ -358,6 +477,8 @@ hostx_init(void)
scrpriv->win = xcb_generate_id(HostX.conn);
scrpriv->server_depth = HostX.depth;
scrpriv->ximg = NULL;
+ scrpriv->win_x = 0;
+ scrpriv->win_y = 0;
if (scrpriv->win_pre_existing != XCB_WINDOW_NONE) {
xcb_get_geometry_reply_t *prewin_geom;
@@ -415,6 +536,17 @@ hostx_init(void)
hostx_set_fullscreen_hint();
}
+ else if (scrpriv->output) {
+ hostx_get_output_geometry(scrpriv->output,
+ &scrpriv->win_x,
+ &scrpriv->win_y,
+ &scrpriv->win_width,
+ &scrpriv->win_height);
+
+ HostX.use_fullscreen = TRUE;
+ hostx_set_fullscreen_hint();
+ }
+
tmpstr = getenv("RESOURCE_NAME");
if (tmpstr && (!ephyrResNameFromCmd))
@@ -637,6 +769,7 @@ hostx_set_cmap_entry(unsigned char idx,
*/
void *
hostx_screen_init(KdScreenInfo *screen,
+ int x, int y,
int width, int height, int buffer_height,
int *bytes_per_line, int *bits_per_pixel)
{
@@ -648,8 +781,8 @@ hostx_screen_init(KdScreenInfo *screen,
exit(1);
}
- EPHYR_DBG("host_screen=%p wxh=%dx%d, buffer_height=%d",
- host_screen, width, height, buffer_height);
+ EPHYR_DBG("host_screen=%p x=%d, y=%d, wxh=%dx%d, buffer_height=%d",
+ host_screen, x, y, width, height, buffer_height);
if (scrpriv->ximg != NULL) {
/* Free up the image data if previously used
@@ -740,10 +873,25 @@ hostx_screen_init(KdScreenInfo *screen,
xcb_map_window(HostX.conn, scrpriv->win);
+ /* Set explicit window position if it was informed in
+ * -screen option (WxH+X or WxH+X+Y). Otherwise, accept the
+ * position set by WM.
+ * The trick here is putting this code after xcb_map_window() call,
+ * so these values won't be overriden by WM. */
+ if (scrpriv->win_explicit_position)
+ {
+ uint32_t mask = XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y;
+ uint32_t values[2] = {x, y};
+ xcb_configure_window(HostX.conn, scrpriv->win, mask, values);
+ }
+
+
xcb_aux_sync(HostX.conn);
scrpriv->win_width = width;
scrpriv->win_height = height;
+ scrpriv->win_x = x;
+ scrpriv->win_y = y;
#ifdef GLAMOR
if (ephyr_glamor) {
diff --git a/xorg-server/hw/kdrive/ephyr/hostx.h b/xorg-server/hw/kdrive/ephyr/hostx.h
index e83323a0c..80894c8c0 100644
--- a/xorg-server/hw/kdrive/ephyr/hostx.h
+++ b/xorg-server/hw/kdrive/ephyr/hostx.h
@@ -74,7 +74,7 @@ typedef struct {
} EphyrRect;
int
-hostx_want_screen_size(KdScreenInfo *screen, int *width, int *height);
+hostx_want_screen_geometry(KdScreenInfo *screen, int *width, int *height, int *x, int *y);
int
hostx_want_host_cursor(void);
@@ -83,6 +83,11 @@ void
hostx_use_sw_cursor(void);
void
+ hostx_get_output_geometry(const char *output,
+ int *x, int *y,
+ int *width, int *height);
+
+void
hostx_use_fullscreen(void);
int
@@ -107,7 +112,7 @@ int
hostx_init(void);
void
-hostx_add_screen(KdScreenInfo *screen, unsigned long win_id, int screen_num);
+hostx_add_screen(KdScreenInfo *screen, unsigned long win_id, int screen_num, Bool use_geometry, const char *output);
void
hostx_set_display_name(char *name);
@@ -136,6 +141,7 @@ hostx_set_cmap_entry(unsigned char idx,
unsigned char r, unsigned char g, unsigned char b);
void *hostx_screen_init(KdScreenInfo *screen,
+ int x, int y,
int width, int height, int buffer_height,
int *bytes_per_line, int *bits_per_pixel);
diff --git a/xorg-server/hw/kdrive/src/kdrive.c b/xorg-server/hw/kdrive/src/kdrive.c
index b5b91c0dd..5dbff3fce 100644
--- a/xorg-server/hw/kdrive/src/kdrive.c
+++ b/xorg-server/hw/kdrive/src/kdrive.c
@@ -300,6 +300,8 @@ KdParseScreen(KdScreenInfo * screen, const char *arg)
screen->softCursor = kdSoftCursor;
screen->origin = kdOrigin;
screen->randr = RR_Rotate_0;
+ screen->x = 0;
+ screen->y = 0;
screen->width = 0;
screen->height = 0;
screen->width_mm = 0;
@@ -313,7 +315,7 @@ KdParseScreen(KdScreenInfo * screen, const char *arg)
return;
for (i = 0; i < 2; i++) {
- arg = KdParseFindNext(arg, "x/@XY", save, &delim);
+ arg = KdParseFindNext(arg, "x/+@XY", save, &delim);
if (!save[0])
return;
@@ -321,7 +323,7 @@ KdParseScreen(KdScreenInfo * screen, const char *arg)
mm = 0;
if (delim == '/') {
- arg = KdParseFindNext(arg, "x@XY", save, &delim);
+ arg = KdParseFindNext(arg, "x+@XY", save, &delim);
if (!save[0])
return;
mm = atoi(save);
@@ -335,7 +337,8 @@ KdParseScreen(KdScreenInfo * screen, const char *arg)
screen->height = pixels;
screen->height_mm = mm;
}
- if (delim != 'x' && delim != '@' && delim != 'X' && delim != 'Y' &&
+ if (delim != 'x' && delim != '+' && delim != '@' &&
+ delim != 'X' && delim != 'Y' &&
(delim != '\0' || i == 0))
return;
}
@@ -346,6 +349,18 @@ KdParseScreen(KdScreenInfo * screen, const char *arg)
kdSoftCursor = FALSE;
kdSubpixelOrder = SubPixelUnknown;
+ if (delim == '+') {
+ arg = KdParseFindNext(arg, "+@xXY", save, &delim);
+ if (save[0])
+ screen->x = atoi(save);
+ }
+
+ if (delim == '+') {
+ arg = KdParseFindNext(arg, "@xXY", save, &delim);
+ if (save[0])
+ screen->y = atoi(save);
+ }
+
if (delim == '@') {
arg = KdParseFindNext(arg, "xXY", save, &delim);
if (save[0]) {
@@ -425,7 +440,7 @@ KdUseMsg(void)
{
ErrorF("\nTinyX Device Dependent Usage:\n");
ErrorF
- ("-screen WIDTH[/WIDTHMM]xHEIGHT[/HEIGHTMM][@ROTATION][X][Y][xDEPTH/BPP[xFREQ]] Specify screen characteristics\n");
+ ("-screen WIDTH[/WIDTHMM]xHEIGHT[/HEIGHTMM][+[-]XOFFSET][+[-]YOFFSET][@ROTATION][X][Y][xDEPTH/BPP[xFREQ]] Specify screen characteristics\n");
ErrorF
("-rgba rgb/bgr/vrgb/vbgr/none Specify subpixel ordering for LCD panels\n");
ErrorF
diff --git a/xorg-server/hw/kdrive/src/kdrive.h b/xorg-server/hw/kdrive/src/kdrive.h
index 08b1681ce..066a13419 100644
--- a/xorg-server/hw/kdrive/src/kdrive.h
+++ b/xorg-server/hw/kdrive/src/kdrive.h
@@ -89,6 +89,8 @@ typedef struct _KdScreenInfo {
ScreenPtr pScreen;
void *driver;
Rotation randr; /* rotation and reflection */
+ int x;
+ int y;
int width;
int height;
int rate;
diff --git a/xorg-server/hw/xfree86/common/xf86Bus.c b/xorg-server/hw/xfree86/common/xf86Bus.c
index b3b3f8cc5..bd3e4e37b 100644
--- a/xorg-server/hw/xfree86/common/xf86Bus.c
+++ b/xorg-server/hw/xfree86/common/xf86Bus.c
@@ -210,6 +210,9 @@ xf86BusProbe(void)
#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
xf86SbusProbe();
#endif
+#ifdef XSERVER_PLATFORM_BUS
+ xf86platformPrimary();
+#endif
}
/*
diff --git a/xorg-server/hw/xfree86/common/xf86Xinput.h b/xorg-server/hw/xfree86/common/xf86Xinput.h
index 9fe8c87b6..66a64fb48 100644
--- a/xorg-server/hw/xfree86/common/xf86Xinput.h
+++ b/xorg-server/hw/xfree86/common/xf86Xinput.h
@@ -51,6 +51,7 @@
#ifndef _xf86Xinput_h
#define _xf86Xinput_h
+#include "xf86.h"
#include "xf86str.h"
#include "inputstr.h"
#include <X11/extensions/XI.h>
@@ -85,7 +86,7 @@ typedef struct _InputDriverRec {
/* This is to input devices what the ScrnInfoRec is to screens. */
-typedef struct _InputInfoRec {
+struct _InputInfoRec {
struct _InputInfoRec *next;
char *name;
char *driver;
@@ -110,7 +111,7 @@ typedef struct _InputInfoRec {
void *module;
XF86OptionPtr options;
InputAttributes *attrs;
-} *InputInfoPtr;
+};
/* xf86Globals.c */
extern InputInfoPtr xf86InputDevs;
diff --git a/xorg-server/hw/xfree86/common/xf86platformBus.c b/xorg-server/hw/xfree86/common/xf86platformBus.c
index 946039940..5ad9b7080 100644
--- a/xorg-server/hw/xfree86/common/xf86platformBus.c
+++ b/xorg-server/hw/xfree86/common/xf86platformBus.c
@@ -435,10 +435,9 @@ xf86platformProbeDev(DriverPtr drvp)
/* for non-seat0 servers assume first device is the master */
if (ServerIsNotSeat0())
break;
- if (xf86_platform_devices[j].pdev) {
- if (xf86IsPrimaryPlatform(&xf86_platform_devices[j]))
- break;
- }
+
+ if (xf86IsPrimaryPlatform(&xf86_platform_devices[j]))
+ break;
}
}
@@ -594,4 +593,19 @@ void xf86platformVTProbe(void)
xf86PlatformReprobeDevice(i, xf86_platform_devices[i].attribs);
}
}
+
+void xf86platformPrimary(void)
+{
+ /* use the first platform device as a fallback */
+ if (primaryBus.type == BUS_NONE) {
+ xf86Msg(X_INFO, "no primary bus or device found\n");
+
+ if (xf86_num_platform_devices > 0) {
+ primaryBus.id.plat = &xf86_platform_devices[0];
+ primaryBus.type = BUS_PLATFORM;
+
+ xf86Msg(X_NONE, "\tfalling back to %s\n", primaryBus.id.plat->attribs->syspath);
+ }
+ }
+}
#endif
diff --git a/xorg-server/hw/xfree86/common/xf86platformBus.h b/xorg-server/hw/xfree86/common/xf86platformBus.h
index 317dd24d5..a7335b9da 100644
--- a/xorg-server/hw/xfree86/common/xf86platformBus.h
+++ b/xorg-server/hw/xfree86/common/xf86platformBus.h
@@ -155,6 +155,7 @@ extern _X_EXPORT int
xf86PlatformMatchDriver(char *matches[], int nmatches);
extern void xf86platformVTProbe(void);
+extern void xf86platformPrimary(void);
#endif
#endif
diff --git a/xorg-server/hw/xfree86/os-support/bsd/ppc_video.c b/xorg-server/hw/xfree86/os-support/bsd/ppc_video.c
index 947a68678..3fd28c3b5 100644
--- a/xorg-server/hw/xfree86/os-support/bsd/ppc_video.c
+++ b/xorg-server/hw/xfree86/os-support/bsd/ppc_video.c
@@ -76,7 +76,7 @@ ppcMapVidMem(int ScreenNum, unsigned long Base, unsigned long Size, int flags)
(flags & VIDMEM_READONLY) ?
PROT_READ : (PROT_READ | PROT_WRITE), MAP_SHARED, fd, Base);
if (base == MAP_FAILED)
- FatalError("%s: could not mmap screen [s=%x,a=%x] (%s)",
+ FatalError("%s: could not mmap screen [s=%lx,a=%lx] (%s)",
"xf86MapVidMem", Size, Base, strerror(errno));
return base;
diff --git a/xorg-server/hw/xquartz/xpr/xprScreen.c b/xorg-server/hw/xquartz/xpr/xprScreen.c
index 7aa1ae1df..d0a525ff4 100644
--- a/xorg-server/hw/xquartz/xpr/xprScreen.c
+++ b/xorg-server/hw/xquartz/xpr/xprScreen.c
@@ -169,14 +169,25 @@ displayScreenBounds(CGDirectDisplayID id)
(int)frame.size.width, (int)frame.size.height,
(int)frame.origin.x, (int)frame.origin.y);
- /* Remove menubar to help standard X11 window managers.
- * On Mavericks and later, the menu bar is on all displays.
- */
- if (XQuartzIsRootless
+ Boolean spacePerDisplay = false;
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090
- && (NSAppKitVersionNumber >= 1265 || (frame.origin.x == 0 && frame.origin.y == 0))
+ if (NSAppKitVersionNumber >= 1265)
#endif
- ) {
+ {
+ Boolean ok;
+ (void)CFPreferencesAppSynchronize(CFSTR("com.apple.spaces"));
+ spacePerDisplay = ! CFPreferencesGetAppBooleanValue(CFSTR("spans-displays"),
+ CFSTR("com.apple.spaces"),
+ &ok);
+ if (!ok)
+ spacePerDisplay = true;
+ }
+
+ /* Remove menubar to help standard X11 window managers.
+ * On Mavericks and later, the menu bar is on all displays when spans-displays is false or unset.
+ */
+ if (XQuartzIsRootless &&
+ (spacePerDisplay || (frame.origin.x == 0 && frame.origin.y == 0))) {
frame.origin.y += aquaMenuBarHeight;
frame.size.height -= aquaMenuBarHeight;
}
diff --git a/xorg-server/os/connection.c b/xorg-server/os/connection.c
index 40d9ff39b..f915e1295 100644
--- a/xorg-server/os/connection.c
+++ b/xorg-server/os/connection.c
@@ -1307,13 +1307,6 @@ ListenOnOpenFD(int fd, int noxauth)
/* Increment the count */
ListenTransCount++;
-
- /* This *might* not be needed... /shrug */
- ResetAuthorization();
- ResetHosts(display);
-#ifdef XDMCP
- XdmcpReset();
-#endif
}
/* based on TRANS(SocketUNIXAccept) (XtransConnInfo ciptr, int *status) */
diff --git a/xorg-server/os/oscolor.c b/xorg-server/os/oscolor.c
index a7573d28b..a44ed3f18 100644
--- a/xorg-server/os/oscolor.c
+++ b/xorg-server/os/oscolor.c
@@ -67,6 +67,7 @@ static const char BuiltinColorNames[] = {
"AntiqueWhite2\0"
"AntiqueWhite3\0"
"AntiqueWhite4\0"
+ "aqua\0"
"aquamarine\0"
"aquamarine1\0"
"aquamarine2\0"
@@ -131,6 +132,7 @@ static const char BuiltinColorNames[] = {
"cornsilk2\0"
"cornsilk3\0"
"cornsilk4\0"
+ "crimson\0"
"cyan\0"
"cyan1\0"
"cyan2\0"
@@ -229,6 +231,7 @@ static const char BuiltinColorNames[] = {
"FloralWhite\0"
"forest green\0"
"ForestGreen\0"
+ "fuchsia\0"
"gainsboro\0"
"ghost white\0"
"GhostWhite\0"
@@ -470,6 +473,7 @@ static const char BuiltinColorNames[] = {
"IndianRed2\0"
"IndianRed3\0"
"IndianRed4\0"
+ "indigo\0"
"ivory\0"
"ivory1\0"
"ivory2\0"
@@ -561,6 +565,7 @@ static const char BuiltinColorNames[] = {
"LightYellow2\0"
"LightYellow3\0"
"LightYellow4\0"
+ "lime\0"
"lime green\0"
"LimeGreen\0"
"linen\0"
@@ -622,6 +627,7 @@ static const char BuiltinColorNames[] = {
"NavyBlue\0"
"old lace\0"
"OldLace\0"
+ "olive\0"
"olive drab\0"
"OliveDrab\0"
"OliveDrab1\0"
@@ -690,6 +696,8 @@ static const char BuiltinColorNames[] = {
"purple2\0"
"purple3\0"
"purple4\0"
+ "rebecca purple\0"
+ "RebeccaPurple\0"
"red\0"
"red1\0"
"red2\0"
@@ -732,6 +740,7 @@ static const char BuiltinColorNames[] = {
"sienna2\0"
"sienna3\0"
"sienna4\0"
+ "silver\0"
"sky blue\0"
"SkyBlue\0"
"SkyBlue1\0"
@@ -774,6 +783,7 @@ static const char BuiltinColorNames[] = {
"tan2\0"
"tan3\0"
"tan4\0"
+ "teal\0"
"thistle\0"
"thistle1\0"
"thistle2\0"
@@ -796,6 +806,16 @@ static const char BuiltinColorNames[] = {
"VioletRed2\0"
"VioletRed3\0"
"VioletRed4\0"
+ "web gray\0"
+ "web green\0"
+ "web grey\0"
+ "web maroon\0"
+ "web purple\0"
+ "WebGray\0"
+ "WebGreen\0"
+ "WebGrey\0"
+ "WebMaroon\0"
+ "WebPurple\0"
"wheat\0"
"wheat1\0"
"wheat2\0"
@@ -804,9 +824,23 @@ static const char BuiltinColorNames[] = {
"white\0"
"white smoke\0"
"WhiteSmoke\0"
+ "x11 gray\0"
+ "x11 green\0"
+ "x11 grey\0"
+ "x11 maroon\0"
+ "x11 purple\0"
+ "X11Gray\0"
+ "X11Green\0"
+ "X11Grey\0"
+ "X11Maroon\0"
+ "X11Purple\0"
"yellow\0"
"yellow green\0"
- "yellow1\0" "yellow2\0" "yellow3\0" "yellow4\0" "YellowGreen\0"
+ "yellow1\0"
+ "yellow2\0"
+ "yellow3\0"
+ "yellow4\0"
+ "YellowGreen\0"
};
static const BuiltinColor BuiltinColors[] = {
@@ -818,750 +852,780 @@ static const BuiltinColor BuiltinColors[] = {
{238, 223, 204, 62}, /* AntiqueWhite2 */
{205, 192, 176, 76}, /* AntiqueWhite3 */
{139, 131, 120, 90}, /* AntiqueWhite4 */
- {127, 255, 212, 104}, /* aquamarine */
- {127, 255, 212, 115}, /* aquamarine1 */
- {118, 238, 198, 127}, /* aquamarine2 */
- {102, 205, 170, 139}, /* aquamarine3 */
- {69, 139, 116, 151}, /* aquamarine4 */
- {240, 255, 255, 163}, /* azure */
- {240, 255, 255, 169}, /* azure1 */
- {224, 238, 238, 176}, /* azure2 */
- {193, 205, 205, 183}, /* azure3 */
- {131, 139, 139, 190}, /* azure4 */
- {245, 245, 220, 197}, /* beige */
- {255, 228, 196, 203}, /* bisque */
- {255, 228, 196, 210}, /* bisque1 */
- {238, 213, 183, 218}, /* bisque2 */
- {205, 183, 158, 226}, /* bisque3 */
- {139, 125, 107, 234}, /* bisque4 */
- {0, 0, 0, 242}, /* black */
- {255, 235, 205, 248}, /* blanched almond */
- {255, 235, 205, 264}, /* BlanchedAlmond */
- {0, 0, 255, 279}, /* blue */
- {138, 43, 226, 284}, /* blue violet */
- {0, 0, 255, 296}, /* blue1 */
- {0, 0, 238, 302}, /* blue2 */
- {0, 0, 205, 308}, /* blue3 */
- {0, 0, 139, 314}, /* blue4 */
- {138, 43, 226, 320}, /* BlueViolet */
- {165, 42, 42, 331}, /* brown */
- {255, 64, 64, 337}, /* brown1 */
- {238, 59, 59, 344}, /* brown2 */
- {205, 51, 51, 351}, /* brown3 */
- {139, 35, 35, 358}, /* brown4 */
- {222, 184, 135, 365}, /* burlywood */
- {255, 211, 155, 375}, /* burlywood1 */
- {238, 197, 145, 386}, /* burlywood2 */
- {205, 170, 125, 397}, /* burlywood3 */
- {139, 115, 85, 408}, /* burlywood4 */
- {95, 158, 160, 419}, /* cadet blue */
- {95, 158, 160, 430}, /* CadetBlue */
- {152, 245, 255, 440}, /* CadetBlue1 */
- {142, 229, 238, 451}, /* CadetBlue2 */
- {122, 197, 205, 462}, /* CadetBlue3 */
- {83, 134, 139, 473}, /* CadetBlue4 */
- {127, 255, 0, 484}, /* chartreuse */
- {127, 255, 0, 495}, /* chartreuse1 */
- {118, 238, 0, 507}, /* chartreuse2 */
- {102, 205, 0, 519}, /* chartreuse3 */
- {69, 139, 0, 531}, /* chartreuse4 */
- {210, 105, 30, 543}, /* chocolate */
- {255, 127, 36, 553}, /* chocolate1 */
- {238, 118, 33, 564}, /* chocolate2 */
- {205, 102, 29, 575}, /* chocolate3 */
- {139, 69, 19, 586}, /* chocolate4 */
- {255, 127, 80, 597}, /* coral */
- {255, 114, 86, 603}, /* coral1 */
- {238, 106, 80, 610}, /* coral2 */
- {205, 91, 69, 617}, /* coral3 */
- {139, 62, 47, 624}, /* coral4 */
- {100, 149, 237, 631}, /* cornflower blue */
- {100, 149, 237, 647}, /* CornflowerBlue */
- {255, 248, 220, 662}, /* cornsilk */
- {255, 248, 220, 671}, /* cornsilk1 */
- {238, 232, 205, 681}, /* cornsilk2 */
- {205, 200, 177, 691}, /* cornsilk3 */
- {139, 136, 120, 701}, /* cornsilk4 */
- {0, 255, 255, 711}, /* cyan */
- {0, 255, 255, 716}, /* cyan1 */
- {0, 238, 238, 722}, /* cyan2 */
- {0, 205, 205, 728}, /* cyan3 */
- {0, 139, 139, 734}, /* cyan4 */
- {0, 0, 139, 740}, /* dark blue */
- {0, 139, 139, 750}, /* dark cyan */
- {184, 134, 11, 760}, /* dark goldenrod */
- {169, 169, 169, 775}, /* dark gray */
- {0, 100, 0, 785}, /* dark green */
- {169, 169, 169, 796}, /* dark grey */
- {189, 183, 107, 806}, /* dark khaki */
- {139, 0, 139, 817}, /* dark magenta */
- {85, 107, 47, 830}, /* dark olive green */
- {255, 140, 0, 847}, /* dark orange */
- {153, 50, 204, 859}, /* dark orchid */
- {139, 0, 0, 871}, /* dark red */
- {233, 150, 122, 880}, /* dark salmon */
- {143, 188, 143, 892}, /* dark sea green */
- {72, 61, 139, 907}, /* dark slate blue */
- {47, 79, 79, 923}, /* dark slate gray */
- {47, 79, 79, 939}, /* dark slate grey */
- {0, 206, 209, 955}, /* dark turquoise */
- {148, 0, 211, 970}, /* dark violet */
- {0, 0, 139, 982}, /* DarkBlue */
- {0, 139, 139, 991}, /* DarkCyan */
- {184, 134, 11, 1000}, /* DarkGoldenrod */
- {255, 185, 15, 1014}, /* DarkGoldenrod1 */
- {238, 173, 14, 1029}, /* DarkGoldenrod2 */
- {205, 149, 12, 1044}, /* DarkGoldenrod3 */
- {139, 101, 8, 1059}, /* DarkGoldenrod4 */
- {169, 169, 169, 1074}, /* DarkGray */
- {0, 100, 0, 1083}, /* DarkGreen */
- {169, 169, 169, 1093}, /* DarkGrey */
- {189, 183, 107, 1102}, /* DarkKhaki */
- {139, 0, 139, 1112}, /* DarkMagenta */
- {85, 107, 47, 1124}, /* DarkOliveGreen */
- {202, 255, 112, 1139}, /* DarkOliveGreen1 */
- {188, 238, 104, 1155}, /* DarkOliveGreen2 */
- {162, 205, 90, 1171}, /* DarkOliveGreen3 */
- {110, 139, 61, 1187}, /* DarkOliveGreen4 */
- {255, 140, 0, 1203}, /* DarkOrange */
- {255, 127, 0, 1214}, /* DarkOrange1 */
- {238, 118, 0, 1226}, /* DarkOrange2 */
- {205, 102, 0, 1238}, /* DarkOrange3 */
- {139, 69, 0, 1250}, /* DarkOrange4 */
- {153, 50, 204, 1262}, /* DarkOrchid */
- {191, 62, 255, 1273}, /* DarkOrchid1 */
- {178, 58, 238, 1285}, /* DarkOrchid2 */
- {154, 50, 205, 1297}, /* DarkOrchid3 */
- {104, 34, 139, 1309}, /* DarkOrchid4 */
- {139, 0, 0, 1321}, /* DarkRed */
- {233, 150, 122, 1329}, /* DarkSalmon */
- {143, 188, 143, 1340}, /* DarkSeaGreen */
- {193, 255, 193, 1353}, /* DarkSeaGreen1 */
- {180, 238, 180, 1367}, /* DarkSeaGreen2 */
- {155, 205, 155, 1381}, /* DarkSeaGreen3 */
- {105, 139, 105, 1395}, /* DarkSeaGreen4 */
- {72, 61, 139, 1409}, /* DarkSlateBlue */
- {47, 79, 79, 1423}, /* DarkSlateGray */
- {151, 255, 255, 1437}, /* DarkSlateGray1 */
- {141, 238, 238, 1452}, /* DarkSlateGray2 */
- {121, 205, 205, 1467}, /* DarkSlateGray3 */
- {82, 139, 139, 1482}, /* DarkSlateGray4 */
- {47, 79, 79, 1497}, /* DarkSlateGrey */
- {0, 206, 209, 1511}, /* DarkTurquoise */
- {148, 0, 211, 1525}, /* DarkViolet */
- {255, 20, 147, 1536}, /* deep pink */
- {0, 191, 255, 1546}, /* deep sky blue */
- {255, 20, 147, 1560}, /* DeepPink */
- {255, 20, 147, 1569}, /* DeepPink1 */
- {238, 18, 137, 1579}, /* DeepPink2 */
- {205, 16, 118, 1589}, /* DeepPink3 */
- {139, 10, 80, 1599}, /* DeepPink4 */
- {0, 191, 255, 1609}, /* DeepSkyBlue */
- {0, 191, 255, 1621}, /* DeepSkyBlue1 */
- {0, 178, 238, 1634}, /* DeepSkyBlue2 */
- {0, 154, 205, 1647}, /* DeepSkyBlue3 */
- {0, 104, 139, 1660}, /* DeepSkyBlue4 */
- {105, 105, 105, 1673}, /* dim gray */
- {105, 105, 105, 1682}, /* dim grey */
- {105, 105, 105, 1691}, /* DimGray */
- {105, 105, 105, 1699}, /* DimGrey */
- {30, 144, 255, 1707}, /* dodger blue */
- {30, 144, 255, 1719}, /* DodgerBlue */
- {30, 144, 255, 1730}, /* DodgerBlue1 */
- {28, 134, 238, 1742}, /* DodgerBlue2 */
- {24, 116, 205, 1754}, /* DodgerBlue3 */
- {16, 78, 139, 1766}, /* DodgerBlue4 */
- {178, 34, 34, 1778}, /* firebrick */
- {255, 48, 48, 1788}, /* firebrick1 */
- {238, 44, 44, 1799}, /* firebrick2 */
- {205, 38, 38, 1810}, /* firebrick3 */
- {139, 26, 26, 1821}, /* firebrick4 */
- {255, 250, 240, 1832}, /* floral white */
- {255, 250, 240, 1845}, /* FloralWhite */
- {34, 139, 34, 1857}, /* forest green */
- {34, 139, 34, 1870}, /* ForestGreen */
- {220, 220, 220, 1882}, /* gainsboro */
- {248, 248, 255, 1892}, /* ghost white */
- {248, 248, 255, 1904}, /* GhostWhite */
- {255, 215, 0, 1915}, /* gold */
- {255, 215, 0, 1920}, /* gold1 */
- {238, 201, 0, 1926}, /* gold2 */
- {205, 173, 0, 1932}, /* gold3 */
- {139, 117, 0, 1938}, /* gold4 */
- {218, 165, 32, 1944}, /* goldenrod */
- {255, 193, 37, 1954}, /* goldenrod1 */
- {238, 180, 34, 1965}, /* goldenrod2 */
- {205, 155, 29, 1976}, /* goldenrod3 */
- {139, 105, 20, 1987}, /* goldenrod4 */
- {190, 190, 190, 1998}, /* gray */
- {0, 0, 0, 2003}, /* gray0 */
- {3, 3, 3, 2009}, /* gray1 */
- {26, 26, 26, 2015}, /* gray10 */
- {255, 255, 255, 2022}, /* gray100 */
- {28, 28, 28, 2030}, /* gray11 */
- {31, 31, 31, 2037}, /* gray12 */
- {33, 33, 33, 2044}, /* gray13 */
- {36, 36, 36, 2051}, /* gray14 */
- {38, 38, 38, 2058}, /* gray15 */
- {41, 41, 41, 2065}, /* gray16 */
- {43, 43, 43, 2072}, /* gray17 */
- {46, 46, 46, 2079}, /* gray18 */
- {48, 48, 48, 2086}, /* gray19 */
- {5, 5, 5, 2093}, /* gray2 */
- {51, 51, 51, 2099}, /* gray20 */
- {54, 54, 54, 2106}, /* gray21 */
- {56, 56, 56, 2113}, /* gray22 */
- {59, 59, 59, 2120}, /* gray23 */
- {61, 61, 61, 2127}, /* gray24 */
- {64, 64, 64, 2134}, /* gray25 */
- {66, 66, 66, 2141}, /* gray26 */
- {69, 69, 69, 2148}, /* gray27 */
- {71, 71, 71, 2155}, /* gray28 */
- {74, 74, 74, 2162}, /* gray29 */
- {8, 8, 8, 2169}, /* gray3 */
- {77, 77, 77, 2175}, /* gray30 */
- {79, 79, 79, 2182}, /* gray31 */
- {82, 82, 82, 2189}, /* gray32 */
- {84, 84, 84, 2196}, /* gray33 */
- {87, 87, 87, 2203}, /* gray34 */
- {89, 89, 89, 2210}, /* gray35 */
- {92, 92, 92, 2217}, /* gray36 */
- {94, 94, 94, 2224}, /* gray37 */
- {97, 97, 97, 2231}, /* gray38 */
- {99, 99, 99, 2238}, /* gray39 */
- {10, 10, 10, 2245}, /* gray4 */
- {102, 102, 102, 2251}, /* gray40 */
- {105, 105, 105, 2258}, /* gray41 */
- {107, 107, 107, 2265}, /* gray42 */
- {110, 110, 110, 2272}, /* gray43 */
- {112, 112, 112, 2279}, /* gray44 */
- {115, 115, 115, 2286}, /* gray45 */
- {117, 117, 117, 2293}, /* gray46 */
- {120, 120, 120, 2300}, /* gray47 */
- {122, 122, 122, 2307}, /* gray48 */
- {125, 125, 125, 2314}, /* gray49 */
- {13, 13, 13, 2321}, /* gray5 */
- {127, 127, 127, 2327}, /* gray50 */
- {130, 130, 130, 2334}, /* gray51 */
- {133, 133, 133, 2341}, /* gray52 */
- {135, 135, 135, 2348}, /* gray53 */
- {138, 138, 138, 2355}, /* gray54 */
- {140, 140, 140, 2362}, /* gray55 */
- {143, 143, 143, 2369}, /* gray56 */
- {145, 145, 145, 2376}, /* gray57 */
- {148, 148, 148, 2383}, /* gray58 */
- {150, 150, 150, 2390}, /* gray59 */
- {15, 15, 15, 2397}, /* gray6 */
- {153, 153, 153, 2403}, /* gray60 */
- {156, 156, 156, 2410}, /* gray61 */
- {158, 158, 158, 2417}, /* gray62 */
- {161, 161, 161, 2424}, /* gray63 */
- {163, 163, 163, 2431}, /* gray64 */
- {166, 166, 166, 2438}, /* gray65 */
- {168, 168, 168, 2445}, /* gray66 */
- {171, 171, 171, 2452}, /* gray67 */
- {173, 173, 173, 2459}, /* gray68 */
- {176, 176, 176, 2466}, /* gray69 */
- {18, 18, 18, 2473}, /* gray7 */
- {179, 179, 179, 2479}, /* gray70 */
- {181, 181, 181, 2486}, /* gray71 */
- {184, 184, 184, 2493}, /* gray72 */
- {186, 186, 186, 2500}, /* gray73 */
- {189, 189, 189, 2507}, /* gray74 */
- {191, 191, 191, 2514}, /* gray75 */
- {194, 194, 194, 2521}, /* gray76 */
- {196, 196, 196, 2528}, /* gray77 */
- {199, 199, 199, 2535}, /* gray78 */
- {201, 201, 201, 2542}, /* gray79 */
- {20, 20, 20, 2549}, /* gray8 */
- {204, 204, 204, 2555}, /* gray80 */
- {207, 207, 207, 2562}, /* gray81 */
- {209, 209, 209, 2569}, /* gray82 */
- {212, 212, 212, 2576}, /* gray83 */
- {214, 214, 214, 2583}, /* gray84 */
- {217, 217, 217, 2590}, /* gray85 */
- {219, 219, 219, 2597}, /* gray86 */
- {222, 222, 222, 2604}, /* gray87 */
- {224, 224, 224, 2611}, /* gray88 */
- {227, 227, 227, 2618}, /* gray89 */
- {23, 23, 23, 2625}, /* gray9 */
- {229, 229, 229, 2631}, /* gray90 */
- {232, 232, 232, 2638}, /* gray91 */
- {235, 235, 235, 2645}, /* gray92 */
- {237, 237, 237, 2652}, /* gray93 */
- {240, 240, 240, 2659}, /* gray94 */
- {242, 242, 242, 2666}, /* gray95 */
- {245, 245, 245, 2673}, /* gray96 */
- {247, 247, 247, 2680}, /* gray97 */
- {250, 250, 250, 2687}, /* gray98 */
- {252, 252, 252, 2694}, /* gray99 */
- {0, 255, 0, 2701}, /* green */
- {173, 255, 47, 2707}, /* green yellow */
- {0, 255, 0, 2720}, /* green1 */
- {0, 238, 0, 2727}, /* green2 */
- {0, 205, 0, 2734}, /* green3 */
- {0, 139, 0, 2741}, /* green4 */
- {173, 255, 47, 2748}, /* GreenYellow */
- {190, 190, 190, 2760}, /* grey */
- {0, 0, 0, 2765}, /* grey0 */
- {3, 3, 3, 2771}, /* grey1 */
- {26, 26, 26, 2777}, /* grey10 */
- {255, 255, 255, 2784}, /* grey100 */
- {28, 28, 28, 2792}, /* grey11 */
- {31, 31, 31, 2799}, /* grey12 */
- {33, 33, 33, 2806}, /* grey13 */
- {36, 36, 36, 2813}, /* grey14 */
- {38, 38, 38, 2820}, /* grey15 */
- {41, 41, 41, 2827}, /* grey16 */
- {43, 43, 43, 2834}, /* grey17 */
- {46, 46, 46, 2841}, /* grey18 */
- {48, 48, 48, 2848}, /* grey19 */
- {5, 5, 5, 2855}, /* grey2 */
- {51, 51, 51, 2861}, /* grey20 */
- {54, 54, 54, 2868}, /* grey21 */
- {56, 56, 56, 2875}, /* grey22 */
- {59, 59, 59, 2882}, /* grey23 */
- {61, 61, 61, 2889}, /* grey24 */
- {64, 64, 64, 2896}, /* grey25 */
- {66, 66, 66, 2903}, /* grey26 */
- {69, 69, 69, 2910}, /* grey27 */
- {71, 71, 71, 2917}, /* grey28 */
- {74, 74, 74, 2924}, /* grey29 */
- {8, 8, 8, 2931}, /* grey3 */
- {77, 77, 77, 2937}, /* grey30 */
- {79, 79, 79, 2944}, /* grey31 */
- {82, 82, 82, 2951}, /* grey32 */
- {84, 84, 84, 2958}, /* grey33 */
- {87, 87, 87, 2965}, /* grey34 */
- {89, 89, 89, 2972}, /* grey35 */
- {92, 92, 92, 2979}, /* grey36 */
- {94, 94, 94, 2986}, /* grey37 */
- {97, 97, 97, 2993}, /* grey38 */
- {99, 99, 99, 3000}, /* grey39 */
- {10, 10, 10, 3007}, /* grey4 */
- {102, 102, 102, 3013}, /* grey40 */
- {105, 105, 105, 3020}, /* grey41 */
- {107, 107, 107, 3027}, /* grey42 */
- {110, 110, 110, 3034}, /* grey43 */
- {112, 112, 112, 3041}, /* grey44 */
- {115, 115, 115, 3048}, /* grey45 */
- {117, 117, 117, 3055}, /* grey46 */
- {120, 120, 120, 3062}, /* grey47 */
- {122, 122, 122, 3069}, /* grey48 */
- {125, 125, 125, 3076}, /* grey49 */
- {13, 13, 13, 3083}, /* grey5 */
- {127, 127, 127, 3089}, /* grey50 */
- {130, 130, 130, 3096}, /* grey51 */
- {133, 133, 133, 3103}, /* grey52 */
- {135, 135, 135, 3110}, /* grey53 */
- {138, 138, 138, 3117}, /* grey54 */
- {140, 140, 140, 3124}, /* grey55 */
- {143, 143, 143, 3131}, /* grey56 */
- {145, 145, 145, 3138}, /* grey57 */
- {148, 148, 148, 3145}, /* grey58 */
- {150, 150, 150, 3152}, /* grey59 */
- {15, 15, 15, 3159}, /* grey6 */
- {153, 153, 153, 3165}, /* grey60 */
- {156, 156, 156, 3172}, /* grey61 */
- {158, 158, 158, 3179}, /* grey62 */
- {161, 161, 161, 3186}, /* grey63 */
- {163, 163, 163, 3193}, /* grey64 */
- {166, 166, 166, 3200}, /* grey65 */
- {168, 168, 168, 3207}, /* grey66 */
- {171, 171, 171, 3214}, /* grey67 */
- {173, 173, 173, 3221}, /* grey68 */
- {176, 176, 176, 3228}, /* grey69 */
- {18, 18, 18, 3235}, /* grey7 */
- {179, 179, 179, 3241}, /* grey70 */
- {181, 181, 181, 3248}, /* grey71 */
- {184, 184, 184, 3255}, /* grey72 */
- {186, 186, 186, 3262}, /* grey73 */
- {189, 189, 189, 3269}, /* grey74 */
- {191, 191, 191, 3276}, /* grey75 */
- {194, 194, 194, 3283}, /* grey76 */
- {196, 196, 196, 3290}, /* grey77 */
- {199, 199, 199, 3297}, /* grey78 */
- {201, 201, 201, 3304}, /* grey79 */
- {20, 20, 20, 3311}, /* grey8 */
- {204, 204, 204, 3317}, /* grey80 */
- {207, 207, 207, 3324}, /* grey81 */
- {209, 209, 209, 3331}, /* grey82 */
- {212, 212, 212, 3338}, /* grey83 */
- {214, 214, 214, 3345}, /* grey84 */
- {217, 217, 217, 3352}, /* grey85 */
- {219, 219, 219, 3359}, /* grey86 */
- {222, 222, 222, 3366}, /* grey87 */
- {224, 224, 224, 3373}, /* grey88 */
- {227, 227, 227, 3380}, /* grey89 */
- {23, 23, 23, 3387}, /* grey9 */
- {229, 229, 229, 3393}, /* grey90 */
- {232, 232, 232, 3400}, /* grey91 */
- {235, 235, 235, 3407}, /* grey92 */
- {237, 237, 237, 3414}, /* grey93 */
- {240, 240, 240, 3421}, /* grey94 */
- {242, 242, 242, 3428}, /* grey95 */
- {245, 245, 245, 3435}, /* grey96 */
- {247, 247, 247, 3442}, /* grey97 */
- {250, 250, 250, 3449}, /* grey98 */
- {252, 252, 252, 3456}, /* grey99 */
- {240, 255, 240, 3463}, /* honeydew */
- {240, 255, 240, 3472}, /* honeydew1 */
- {224, 238, 224, 3482}, /* honeydew2 */
- {193, 205, 193, 3492}, /* honeydew3 */
- {131, 139, 131, 3502}, /* honeydew4 */
- {255, 105, 180, 3512}, /* hot pink */
- {255, 105, 180, 3521}, /* HotPink */
- {255, 110, 180, 3529}, /* HotPink1 */
- {238, 106, 167, 3538}, /* HotPink2 */
- {205, 96, 144, 3547}, /* HotPink3 */
- {139, 58, 98, 3556}, /* HotPink4 */
- {205, 92, 92, 3565}, /* indian red */
- {205, 92, 92, 3576}, /* IndianRed */
- {255, 106, 106, 3586}, /* IndianRed1 */
- {238, 99, 99, 3597}, /* IndianRed2 */
- {205, 85, 85, 3608}, /* IndianRed3 */
- {139, 58, 58, 3619}, /* IndianRed4 */
- {255, 255, 240, 3630}, /* ivory */
- {255, 255, 240, 3636}, /* ivory1 */
- {238, 238, 224, 3643}, /* ivory2 */
- {205, 205, 193, 3650}, /* ivory3 */
- {139, 139, 131, 3657}, /* ivory4 */
- {240, 230, 140, 3664}, /* khaki */
- {255, 246, 143, 3670}, /* khaki1 */
- {238, 230, 133, 3677}, /* khaki2 */
- {205, 198, 115, 3684}, /* khaki3 */
- {139, 134, 78, 3691}, /* khaki4 */
- {230, 230, 250, 3698}, /* lavender */
- {255, 240, 245, 3707}, /* lavender blush */
- {255, 240, 245, 3722}, /* LavenderBlush */
- {255, 240, 245, 3736}, /* LavenderBlush1 */
- {238, 224, 229, 3751}, /* LavenderBlush2 */
- {205, 193, 197, 3766}, /* LavenderBlush3 */
- {139, 131, 134, 3781}, /* LavenderBlush4 */
- {124, 252, 0, 3796}, /* lawn green */
- {124, 252, 0, 3807}, /* LawnGreen */
- {255, 250, 205, 3817}, /* lemon chiffon */
- {255, 250, 205, 3831}, /* LemonChiffon */
- {255, 250, 205, 3844}, /* LemonChiffon1 */
- {238, 233, 191, 3858}, /* LemonChiffon2 */
- {205, 201, 165, 3872}, /* LemonChiffon3 */
- {139, 137, 112, 3886}, /* LemonChiffon4 */
- {173, 216, 230, 3900}, /* light blue */
- {240, 128, 128, 3911}, /* light coral */
- {224, 255, 255, 3923}, /* light cyan */
- {238, 221, 130, 3934}, /* light goldenrod */
- {250, 250, 210, 3950}, /* light goldenrod yellow */
- {211, 211, 211, 3973}, /* light gray */
- {144, 238, 144, 3984}, /* light green */
- {211, 211, 211, 3996}, /* light grey */
- {255, 182, 193, 4007}, /* light pink */
- {255, 160, 122, 4018}, /* light salmon */
- {32, 178, 170, 4031}, /* light sea green */
- {135, 206, 250, 4047}, /* light sky blue */
- {132, 112, 255, 4062}, /* light slate blue */
- {119, 136, 153, 4079}, /* light slate gray */
- {119, 136, 153, 4096}, /* light slate grey */
- {176, 196, 222, 4113}, /* light steel blue */
- {255, 255, 224, 4130}, /* light yellow */
- {173, 216, 230, 4143}, /* LightBlue */
- {191, 239, 255, 4153}, /* LightBlue1 */
- {178, 223, 238, 4164}, /* LightBlue2 */
- {154, 192, 205, 4175}, /* LightBlue3 */
- {104, 131, 139, 4186}, /* LightBlue4 */
- {240, 128, 128, 4197}, /* LightCoral */
- {224, 255, 255, 4208}, /* LightCyan */
- {224, 255, 255, 4218}, /* LightCyan1 */
- {209, 238, 238, 4229}, /* LightCyan2 */
- {180, 205, 205, 4240}, /* LightCyan3 */
- {122, 139, 139, 4251}, /* LightCyan4 */
- {238, 221, 130, 4262}, /* LightGoldenrod */
- {255, 236, 139, 4277}, /* LightGoldenrod1 */
- {238, 220, 130, 4293}, /* LightGoldenrod2 */
- {205, 190, 112, 4309}, /* LightGoldenrod3 */
- {139, 129, 76, 4325}, /* LightGoldenrod4 */
- {250, 250, 210, 4341}, /* LightGoldenrodYellow */
- {211, 211, 211, 4362}, /* LightGray */
- {144, 238, 144, 4372}, /* LightGreen */
- {211, 211, 211, 4383}, /* LightGrey */
- {255, 182, 193, 4393}, /* LightPink */
- {255, 174, 185, 4403}, /* LightPink1 */
- {238, 162, 173, 4414}, /* LightPink2 */
- {205, 140, 149, 4425}, /* LightPink3 */
- {139, 95, 101, 4436}, /* LightPink4 */
- {255, 160, 122, 4447}, /* LightSalmon */
- {255, 160, 122, 4459}, /* LightSalmon1 */
- {238, 149, 114, 4472}, /* LightSalmon2 */
- {205, 129, 98, 4485}, /* LightSalmon3 */
- {139, 87, 66, 4498}, /* LightSalmon4 */
- {32, 178, 170, 4511}, /* LightSeaGreen */
- {135, 206, 250, 4525}, /* LightSkyBlue */
- {176, 226, 255, 4538}, /* LightSkyBlue1 */
- {164, 211, 238, 4552}, /* LightSkyBlue2 */
- {141, 182, 205, 4566}, /* LightSkyBlue3 */
- {96, 123, 139, 4580}, /* LightSkyBlue4 */
- {132, 112, 255, 4594}, /* LightSlateBlue */
- {119, 136, 153, 4609}, /* LightSlateGray */
- {119, 136, 153, 4624}, /* LightSlateGrey */
- {176, 196, 222, 4639}, /* LightSteelBlue */
- {202, 225, 255, 4654}, /* LightSteelBlue1 */
- {188, 210, 238, 4670}, /* LightSteelBlue2 */
- {162, 181, 205, 4686}, /* LightSteelBlue3 */
- {110, 123, 139, 4702}, /* LightSteelBlue4 */
- {255, 255, 224, 4718}, /* LightYellow */
- {255, 255, 224, 4730}, /* LightYellow1 */
- {238, 238, 209, 4743}, /* LightYellow2 */
- {205, 205, 180, 4756}, /* LightYellow3 */
- {139, 139, 122, 4769}, /* LightYellow4 */
- {50, 205, 50, 4782}, /* lime green */
- {50, 205, 50, 4793}, /* LimeGreen */
- {250, 240, 230, 4803}, /* linen */
- {255, 0, 255, 4809}, /* magenta */
- {255, 0, 255, 4817}, /* magenta1 */
- {238, 0, 238, 4826}, /* magenta2 */
- {205, 0, 205, 4835}, /* magenta3 */
- {139, 0, 139, 4844}, /* magenta4 */
- {176, 48, 96, 4853}, /* maroon */
- {255, 52, 179, 4860}, /* maroon1 */
- {238, 48, 167, 4868}, /* maroon2 */
- {205, 41, 144, 4876}, /* maroon3 */
- {139, 28, 98, 4884}, /* maroon4 */
- {102, 205, 170, 4892}, /* medium aquamarine */
- {0, 0, 205, 4910}, /* medium blue */
- {186, 85, 211, 4922}, /* medium orchid */
- {147, 112, 219, 4936}, /* medium purple */
- {60, 179, 113, 4950}, /* medium sea green */
- {123, 104, 238, 4967}, /* medium slate blue */
- {0, 250, 154, 4985}, /* medium spring green */
- {72, 209, 204, 5005}, /* medium turquoise */
- {199, 21, 133, 5022}, /* medium violet red */
- {102, 205, 170, 5040}, /* MediumAquamarine */
- {0, 0, 205, 5057}, /* MediumBlue */
- {186, 85, 211, 5068}, /* MediumOrchid */
- {224, 102, 255, 5081}, /* MediumOrchid1 */
- {209, 95, 238, 5095}, /* MediumOrchid2 */
- {180, 82, 205, 5109}, /* MediumOrchid3 */
- {122, 55, 139, 5123}, /* MediumOrchid4 */
- {147, 112, 219, 5137}, /* MediumPurple */
- {171, 130, 255, 5150}, /* MediumPurple1 */
- {159, 121, 238, 5164}, /* MediumPurple2 */
- {137, 104, 205, 5178}, /* MediumPurple3 */
- {93, 71, 139, 5192}, /* MediumPurple4 */
- {60, 179, 113, 5206}, /* MediumSeaGreen */
- {123, 104, 238, 5221}, /* MediumSlateBlue */
- {0, 250, 154, 5237}, /* MediumSpringGreen */
- {72, 209, 204, 5255}, /* MediumTurquoise */
- {199, 21, 133, 5271}, /* MediumVioletRed */
- {25, 25, 112, 5287}, /* midnight blue */
- {25, 25, 112, 5301}, /* MidnightBlue */
- {245, 255, 250, 5314}, /* mint cream */
- {245, 255, 250, 5325}, /* MintCream */
- {255, 228, 225, 5335}, /* misty rose */
- {255, 228, 225, 5346}, /* MistyRose */
- {255, 228, 225, 5356}, /* MistyRose1 */
- {238, 213, 210, 5367}, /* MistyRose2 */
- {205, 183, 181, 5378}, /* MistyRose3 */
- {139, 125, 123, 5389}, /* MistyRose4 */
- {255, 228, 181, 5400}, /* moccasin */
- {255, 222, 173, 5409}, /* navajo white */
- {255, 222, 173, 5422}, /* NavajoWhite */
- {255, 222, 173, 5434}, /* NavajoWhite1 */
- {238, 207, 161, 5447}, /* NavajoWhite2 */
- {205, 179, 139, 5460}, /* NavajoWhite3 */
- {139, 121, 94, 5473}, /* NavajoWhite4 */
- {0, 0, 128, 5486}, /* navy */
- {0, 0, 128, 5491}, /* navy blue */
- {0, 0, 128, 5501}, /* NavyBlue */
- {253, 245, 230, 5510}, /* old lace */
- {253, 245, 230, 5519}, /* OldLace */
- {107, 142, 35, 5527}, /* olive drab */
- {107, 142, 35, 5538}, /* OliveDrab */
- {192, 255, 62, 5548}, /* OliveDrab1 */
- {179, 238, 58, 5559}, /* OliveDrab2 */
- {154, 205, 50, 5570}, /* OliveDrab3 */
- {105, 139, 34, 5581}, /* OliveDrab4 */
- {255, 165, 0, 5592}, /* orange */
- {255, 69, 0, 5599}, /* orange red */
- {255, 165, 0, 5610}, /* orange1 */
- {238, 154, 0, 5618}, /* orange2 */
- {205, 133, 0, 5626}, /* orange3 */
- {139, 90, 0, 5634}, /* orange4 */
- {255, 69, 0, 5642}, /* OrangeRed */
- {255, 69, 0, 5652}, /* OrangeRed1 */
- {238, 64, 0, 5663}, /* OrangeRed2 */
- {205, 55, 0, 5674}, /* OrangeRed3 */
- {139, 37, 0, 5685}, /* OrangeRed4 */
- {218, 112, 214, 5696}, /* orchid */
- {255, 131, 250, 5703}, /* orchid1 */
- {238, 122, 233, 5711}, /* orchid2 */
- {205, 105, 201, 5719}, /* orchid3 */
- {139, 71, 137, 5727}, /* orchid4 */
- {238, 232, 170, 5735}, /* pale goldenrod */
- {152, 251, 152, 5750}, /* pale green */
- {175, 238, 238, 5761}, /* pale turquoise */
- {219, 112, 147, 5776}, /* pale violet red */
- {238, 232, 170, 5792}, /* PaleGoldenrod */
- {152, 251, 152, 5806}, /* PaleGreen */
- {154, 255, 154, 5816}, /* PaleGreen1 */
- {144, 238, 144, 5827}, /* PaleGreen2 */
- {124, 205, 124, 5838}, /* PaleGreen3 */
- {84, 139, 84, 5849}, /* PaleGreen4 */
- {175, 238, 238, 5860}, /* PaleTurquoise */
- {187, 255, 255, 5874}, /* PaleTurquoise1 */
- {174, 238, 238, 5889}, /* PaleTurquoise2 */
- {150, 205, 205, 5904}, /* PaleTurquoise3 */
- {102, 139, 139, 5919}, /* PaleTurquoise4 */
- {219, 112, 147, 5934}, /* PaleVioletRed */
- {255, 130, 171, 5948}, /* PaleVioletRed1 */
- {238, 121, 159, 5963}, /* PaleVioletRed2 */
- {205, 104, 137, 5978}, /* PaleVioletRed3 */
- {139, 71, 93, 5993}, /* PaleVioletRed4 */
- {255, 239, 213, 6008}, /* papaya whip */
- {255, 239, 213, 6020}, /* PapayaWhip */
- {255, 218, 185, 6031}, /* peach puff */
- {255, 218, 185, 6042}, /* PeachPuff */
- {255, 218, 185, 6052}, /* PeachPuff1 */
- {238, 203, 173, 6063}, /* PeachPuff2 */
- {205, 175, 149, 6074}, /* PeachPuff3 */
- {139, 119, 101, 6085}, /* PeachPuff4 */
- {205, 133, 63, 6096}, /* peru */
- {255, 192, 203, 6101}, /* pink */
- {255, 181, 197, 6106}, /* pink1 */
- {238, 169, 184, 6112}, /* pink2 */
- {205, 145, 158, 6118}, /* pink3 */
- {139, 99, 108, 6124}, /* pink4 */
- {221, 160, 221, 6130}, /* plum */
- {255, 187, 255, 6135}, /* plum1 */
- {238, 174, 238, 6141}, /* plum2 */
- {205, 150, 205, 6147}, /* plum3 */
- {139, 102, 139, 6153}, /* plum4 */
- {176, 224, 230, 6159}, /* powder blue */
- {176, 224, 230, 6171}, /* PowderBlue */
- {160, 32, 240, 6182}, /* purple */
- {155, 48, 255, 6189}, /* purple1 */
- {145, 44, 238, 6197}, /* purple2 */
- {125, 38, 205, 6205}, /* purple3 */
- {85, 26, 139, 6213}, /* purple4 */
- {255, 0, 0, 6221}, /* red */
- {255, 0, 0, 6225}, /* red1 */
- {238, 0, 0, 6230}, /* red2 */
- {205, 0, 0, 6235}, /* red3 */
- {139, 0, 0, 6240}, /* red4 */
- {188, 143, 143, 6245}, /* rosy brown */
- {188, 143, 143, 6256}, /* RosyBrown */
- {255, 193, 193, 6266}, /* RosyBrown1 */
- {238, 180, 180, 6277}, /* RosyBrown2 */
- {205, 155, 155, 6288}, /* RosyBrown3 */
- {139, 105, 105, 6299}, /* RosyBrown4 */
- {65, 105, 225, 6310}, /* royal blue */
- {65, 105, 225, 6321}, /* RoyalBlue */
- {72, 118, 255, 6331}, /* RoyalBlue1 */
- {67, 110, 238, 6342}, /* RoyalBlue2 */
- {58, 95, 205, 6353}, /* RoyalBlue3 */
- {39, 64, 139, 6364}, /* RoyalBlue4 */
- {139, 69, 19, 6375}, /* saddle brown */
- {139, 69, 19, 6388}, /* SaddleBrown */
- {250, 128, 114, 6400}, /* salmon */
- {255, 140, 105, 6407}, /* salmon1 */
- {238, 130, 98, 6415}, /* salmon2 */
- {205, 112, 84, 6423}, /* salmon3 */
- {139, 76, 57, 6431}, /* salmon4 */
- {244, 164, 96, 6439}, /* sandy brown */
- {244, 164, 96, 6451}, /* SandyBrown */
- {46, 139, 87, 6462}, /* sea green */
- {46, 139, 87, 6472}, /* SeaGreen */
- {84, 255, 159, 6481}, /* SeaGreen1 */
- {78, 238, 148, 6491}, /* SeaGreen2 */
- {67, 205, 128, 6501}, /* SeaGreen3 */
- {46, 139, 87, 6511}, /* SeaGreen4 */
- {255, 245, 238, 6521}, /* seashell */
- {255, 245, 238, 6530}, /* seashell1 */
- {238, 229, 222, 6540}, /* seashell2 */
- {205, 197, 191, 6550}, /* seashell3 */
- {139, 134, 130, 6560}, /* seashell4 */
- {160, 82, 45, 6570}, /* sienna */
- {255, 130, 71, 6577}, /* sienna1 */
- {238, 121, 66, 6585}, /* sienna2 */
- {205, 104, 57, 6593}, /* sienna3 */
- {139, 71, 38, 6601}, /* sienna4 */
- {135, 206, 235, 6609}, /* sky blue */
- {135, 206, 235, 6618}, /* SkyBlue */
- {135, 206, 255, 6626}, /* SkyBlue1 */
- {126, 192, 238, 6635}, /* SkyBlue2 */
- {108, 166, 205, 6644}, /* SkyBlue3 */
- {74, 112, 139, 6653}, /* SkyBlue4 */
- {106, 90, 205, 6662}, /* slate blue */
- {112, 128, 144, 6673}, /* slate gray */
- {112, 128, 144, 6684}, /* slate grey */
- {106, 90, 205, 6695}, /* SlateBlue */
- {131, 111, 255, 6705}, /* SlateBlue1 */
- {122, 103, 238, 6716}, /* SlateBlue2 */
- {105, 89, 205, 6727}, /* SlateBlue3 */
- {71, 60, 139, 6738}, /* SlateBlue4 */
- {112, 128, 144, 6749}, /* SlateGray */
- {198, 226, 255, 6759}, /* SlateGray1 */
- {185, 211, 238, 6770}, /* SlateGray2 */
- {159, 182, 205, 6781}, /* SlateGray3 */
- {108, 123, 139, 6792}, /* SlateGray4 */
- {112, 128, 144, 6803}, /* SlateGrey */
- {255, 250, 250, 6813}, /* snow */
- {255, 250, 250, 6818}, /* snow1 */
- {238, 233, 233, 6824}, /* snow2 */
- {205, 201, 201, 6830}, /* snow3 */
- {139, 137, 137, 6836}, /* snow4 */
- {0, 255, 127, 6842}, /* spring green */
- {0, 255, 127, 6855}, /* SpringGreen */
- {0, 255, 127, 6867}, /* SpringGreen1 */
- {0, 238, 118, 6880}, /* SpringGreen2 */
- {0, 205, 102, 6893}, /* SpringGreen3 */
- {0, 139, 69, 6906}, /* SpringGreen4 */
- {70, 130, 180, 6919}, /* steel blue */
- {70, 130, 180, 6930}, /* SteelBlue */
- {99, 184, 255, 6940}, /* SteelBlue1 */
- {92, 172, 238, 6951}, /* SteelBlue2 */
- {79, 148, 205, 6962}, /* SteelBlue3 */
- {54, 100, 139, 6973}, /* SteelBlue4 */
- {210, 180, 140, 6984}, /* tan */
- {255, 165, 79, 6988}, /* tan1 */
- {238, 154, 73, 6993}, /* tan2 */
- {205, 133, 63, 6998}, /* tan3 */
- {139, 90, 43, 7003}, /* tan4 */
- {216, 191, 216, 7008}, /* thistle */
- {255, 225, 255, 7016}, /* thistle1 */
- {238, 210, 238, 7025}, /* thistle2 */
- {205, 181, 205, 7034}, /* thistle3 */
- {139, 123, 139, 7043}, /* thistle4 */
- {255, 99, 71, 7052}, /* tomato */
- {255, 99, 71, 7059}, /* tomato1 */
- {238, 92, 66, 7067}, /* tomato2 */
- {205, 79, 57, 7075}, /* tomato3 */
- {139, 54, 38, 7083}, /* tomato4 */
- {64, 224, 208, 7091}, /* turquoise */
- {0, 245, 255, 7101}, /* turquoise1 */
- {0, 229, 238, 7112}, /* turquoise2 */
- {0, 197, 205, 7123}, /* turquoise3 */
- {0, 134, 139, 7134}, /* turquoise4 */
- {238, 130, 238, 7145}, /* violet */
- {208, 32, 144, 7152}, /* violet red */
- {208, 32, 144, 7163}, /* VioletRed */
- {255, 62, 150, 7173}, /* VioletRed1 */
- {238, 58, 140, 7184}, /* VioletRed2 */
- {205, 50, 120, 7195}, /* VioletRed3 */
- {139, 34, 82, 7206}, /* VioletRed4 */
- {245, 222, 179, 7217}, /* wheat */
- {255, 231, 186, 7223}, /* wheat1 */
- {238, 216, 174, 7230}, /* wheat2 */
- {205, 186, 150, 7237}, /* wheat3 */
- {139, 126, 102, 7244}, /* wheat4 */
- {255, 255, 255, 7251}, /* white */
- {245, 245, 245, 7257}, /* white smoke */
- {245, 245, 245, 7269}, /* WhiteSmoke */
- {255, 255, 0, 7280}, /* yellow */
- {154, 205, 50, 7287}, /* yellow green */
- {255, 255, 0, 7300}, /* yellow1 */
- {238, 238, 0, 7308}, /* yellow2 */
- {205, 205, 0, 7316}, /* yellow3 */
- {139, 139, 0, 7324}, /* yellow4 */
- {154, 205, 50, 7332}, /* YellowGreen */
+ {0, 255, 255, 104}, /* aqua */
+ {127, 255, 212, 109}, /* aquamarine */
+ {127, 255, 212, 120}, /* aquamarine1 */
+ {118, 238, 198, 132}, /* aquamarine2 */
+ {102, 205, 170, 144}, /* aquamarine3 */
+ {69, 139, 116, 156}, /* aquamarine4 */
+ {240, 255, 255, 168}, /* azure */
+ {240, 255, 255, 174}, /* azure1 */
+ {224, 238, 238, 181}, /* azure2 */
+ {193, 205, 205, 188}, /* azure3 */
+ {131, 139, 139, 195}, /* azure4 */
+ {245, 245, 220, 202}, /* beige */
+ {255, 228, 196, 208}, /* bisque */
+ {255, 228, 196, 215}, /* bisque1 */
+ {238, 213, 183, 223}, /* bisque2 */
+ {205, 183, 158, 231}, /* bisque3 */
+ {139, 125, 107, 239}, /* bisque4 */
+ {0, 0, 0, 247}, /* black */
+ {255, 235, 205, 253}, /* blanched almond */
+ {255, 235, 205, 269}, /* BlanchedAlmond */
+ {0, 0, 255, 284}, /* blue */
+ {138, 43, 226, 289}, /* blue violet */
+ {0, 0, 255, 301}, /* blue1 */
+ {0, 0, 238, 307}, /* blue2 */
+ {0, 0, 205, 313}, /* blue3 */
+ {0, 0, 139, 319}, /* blue4 */
+ {138, 43, 226, 325}, /* BlueViolet */
+ {165, 42, 42, 336}, /* brown */
+ {255, 64, 64, 342}, /* brown1 */
+ {238, 59, 59, 349}, /* brown2 */
+ {205, 51, 51, 356}, /* brown3 */
+ {139, 35, 35, 363}, /* brown4 */
+ {222, 184, 135, 370}, /* burlywood */
+ {255, 211, 155, 380}, /* burlywood1 */
+ {238, 197, 145, 391}, /* burlywood2 */
+ {205, 170, 125, 402}, /* burlywood3 */
+ {139, 115, 85, 413}, /* burlywood4 */
+ {95, 158, 160, 424}, /* cadet blue */
+ {95, 158, 160, 435}, /* CadetBlue */
+ {152, 245, 255, 445}, /* CadetBlue1 */
+ {142, 229, 238, 456}, /* CadetBlue2 */
+ {122, 197, 205, 467}, /* CadetBlue3 */
+ {83, 134, 139, 478}, /* CadetBlue4 */
+ {127, 255, 0, 489}, /* chartreuse */
+ {127, 255, 0, 500}, /* chartreuse1 */
+ {118, 238, 0, 512}, /* chartreuse2 */
+ {102, 205, 0, 524}, /* chartreuse3 */
+ {69, 139, 0, 536}, /* chartreuse4 */
+ {210, 105, 30, 548}, /* chocolate */
+ {255, 127, 36, 558}, /* chocolate1 */
+ {238, 118, 33, 569}, /* chocolate2 */
+ {205, 102, 29, 580}, /* chocolate3 */
+ {139, 69, 19, 591}, /* chocolate4 */
+ {255, 127, 80, 602}, /* coral */
+ {255, 114, 86, 608}, /* coral1 */
+ {238, 106, 80, 615}, /* coral2 */
+ {205, 91, 69, 622}, /* coral3 */
+ {139, 62, 47, 629}, /* coral4 */
+ {100, 149, 237, 636}, /* cornflower blue */
+ {100, 149, 237, 652}, /* CornflowerBlue */
+ {255, 248, 220, 667}, /* cornsilk */
+ {255, 248, 220, 676}, /* cornsilk1 */
+ {238, 232, 205, 686}, /* cornsilk2 */
+ {205, 200, 177, 696}, /* cornsilk3 */
+ {139, 136, 120, 706}, /* cornsilk4 */
+ {220, 20, 60, 716}, /* crimson */
+ {0, 255, 255, 724}, /* cyan */
+ {0, 255, 255, 729}, /* cyan1 */
+ {0, 238, 238, 735}, /* cyan2 */
+ {0, 205, 205, 741}, /* cyan3 */
+ {0, 139, 139, 747}, /* cyan4 */
+ {0, 0, 139, 753}, /* dark blue */
+ {0, 139, 139, 763}, /* dark cyan */
+ {184, 134, 11, 773}, /* dark goldenrod */
+ {169, 169, 169, 788}, /* dark gray */
+ {0, 100, 0, 798}, /* dark green */
+ {169, 169, 169, 809}, /* dark grey */
+ {189, 183, 107, 819}, /* dark khaki */
+ {139, 0, 139, 830}, /* dark magenta */
+ {85, 107, 47, 843}, /* dark olive green */
+ {255, 140, 0, 860}, /* dark orange */
+ {153, 50, 204, 872}, /* dark orchid */
+ {139, 0, 0, 884}, /* dark red */
+ {233, 150, 122, 893}, /* dark salmon */
+ {143, 188, 143, 905}, /* dark sea green */
+ {72, 61, 139, 920}, /* dark slate blue */
+ {47, 79, 79, 936}, /* dark slate gray */
+ {47, 79, 79, 952}, /* dark slate grey */
+ {0, 206, 209, 968}, /* dark turquoise */
+ {148, 0, 211, 983}, /* dark violet */
+ {0, 0, 139, 995}, /* DarkBlue */
+ {0, 139, 139, 1004}, /* DarkCyan */
+ {184, 134, 11, 1013}, /* DarkGoldenrod */
+ {255, 185, 15, 1027}, /* DarkGoldenrod1 */
+ {238, 173, 14, 1042}, /* DarkGoldenrod2 */
+ {205, 149, 12, 1057}, /* DarkGoldenrod3 */
+ {139, 101, 8, 1072}, /* DarkGoldenrod4 */
+ {169, 169, 169, 1087}, /* DarkGray */
+ {0, 100, 0, 1096}, /* DarkGreen */
+ {169, 169, 169, 1106}, /* DarkGrey */
+ {189, 183, 107, 1115}, /* DarkKhaki */
+ {139, 0, 139, 1125}, /* DarkMagenta */
+ {85, 107, 47, 1137}, /* DarkOliveGreen */
+ {202, 255, 112, 1152}, /* DarkOliveGreen1 */
+ {188, 238, 104, 1168}, /* DarkOliveGreen2 */
+ {162, 205, 90, 1184}, /* DarkOliveGreen3 */
+ {110, 139, 61, 1200}, /* DarkOliveGreen4 */
+ {255, 140, 0, 1216}, /* DarkOrange */
+ {255, 127, 0, 1227}, /* DarkOrange1 */
+ {238, 118, 0, 1239}, /* DarkOrange2 */
+ {205, 102, 0, 1251}, /* DarkOrange3 */
+ {139, 69, 0, 1263}, /* DarkOrange4 */
+ {153, 50, 204, 1275}, /* DarkOrchid */
+ {191, 62, 255, 1286}, /* DarkOrchid1 */
+ {178, 58, 238, 1298}, /* DarkOrchid2 */
+ {154, 50, 205, 1310}, /* DarkOrchid3 */
+ {104, 34, 139, 1322}, /* DarkOrchid4 */
+ {139, 0, 0, 1334}, /* DarkRed */
+ {233, 150, 122, 1342}, /* DarkSalmon */
+ {143, 188, 143, 1353}, /* DarkSeaGreen */
+ {193, 255, 193, 1366}, /* DarkSeaGreen1 */
+ {180, 238, 180, 1380}, /* DarkSeaGreen2 */
+ {155, 205, 155, 1394}, /* DarkSeaGreen3 */
+ {105, 139, 105, 1408}, /* DarkSeaGreen4 */
+ {72, 61, 139, 1422}, /* DarkSlateBlue */
+ {47, 79, 79, 1436}, /* DarkSlateGray */
+ {151, 255, 255, 1450}, /* DarkSlateGray1 */
+ {141, 238, 238, 1465}, /* DarkSlateGray2 */
+ {121, 205, 205, 1480}, /* DarkSlateGray3 */
+ {82, 139, 139, 1495}, /* DarkSlateGray4 */
+ {47, 79, 79, 1510}, /* DarkSlateGrey */
+ {0, 206, 209, 1524}, /* DarkTurquoise */
+ {148, 0, 211, 1538}, /* DarkViolet */
+ {255, 20, 147, 1549}, /* deep pink */
+ {0, 191, 255, 1559}, /* deep sky blue */
+ {255, 20, 147, 1573}, /* DeepPink */
+ {255, 20, 147, 1582}, /* DeepPink1 */
+ {238, 18, 137, 1592}, /* DeepPink2 */
+ {205, 16, 118, 1602}, /* DeepPink3 */
+ {139, 10, 80, 1612}, /* DeepPink4 */
+ {0, 191, 255, 1622}, /* DeepSkyBlue */
+ {0, 191, 255, 1634}, /* DeepSkyBlue1 */
+ {0, 178, 238, 1647}, /* DeepSkyBlue2 */
+ {0, 154, 205, 1660}, /* DeepSkyBlue3 */
+ {0, 104, 139, 1673}, /* DeepSkyBlue4 */
+ {105, 105, 105, 1686}, /* dim gray */
+ {105, 105, 105, 1695}, /* dim grey */
+ {105, 105, 105, 1704}, /* DimGray */
+ {105, 105, 105, 1712}, /* DimGrey */
+ {30, 144, 255, 1720}, /* dodger blue */
+ {30, 144, 255, 1732}, /* DodgerBlue */
+ {30, 144, 255, 1743}, /* DodgerBlue1 */
+ {28, 134, 238, 1755}, /* DodgerBlue2 */
+ {24, 116, 205, 1767}, /* DodgerBlue3 */
+ {16, 78, 139, 1779}, /* DodgerBlue4 */
+ {178, 34, 34, 1791}, /* firebrick */
+ {255, 48, 48, 1801}, /* firebrick1 */
+ {238, 44, 44, 1812}, /* firebrick2 */
+ {205, 38, 38, 1823}, /* firebrick3 */
+ {139, 26, 26, 1834}, /* firebrick4 */
+ {255, 250, 240, 1845}, /* floral white */
+ {255, 250, 240, 1858}, /* FloralWhite */
+ {34, 139, 34, 1870}, /* forest green */
+ {34, 139, 34, 1883}, /* ForestGreen */
+ {255, 0, 255, 1895}, /* fuchsia */
+ {220, 220, 220, 1903}, /* gainsboro */
+ {248, 248, 255, 1913}, /* ghost white */
+ {248, 248, 255, 1925}, /* GhostWhite */
+ {255, 215, 0, 1936}, /* gold */
+ {255, 215, 0, 1941}, /* gold1 */
+ {238, 201, 0, 1947}, /* gold2 */
+ {205, 173, 0, 1953}, /* gold3 */
+ {139, 117, 0, 1959}, /* gold4 */
+ {218, 165, 32, 1965}, /* goldenrod */
+ {255, 193, 37, 1975}, /* goldenrod1 */
+ {238, 180, 34, 1986}, /* goldenrod2 */
+ {205, 155, 29, 1997}, /* goldenrod3 */
+ {139, 105, 20, 2008}, /* goldenrod4 */
+ {190, 190, 190, 2019}, /* gray */
+ {0, 0, 0, 2024}, /* gray0 */
+ {3, 3, 3, 2030}, /* gray1 */
+ {26, 26, 26, 2036}, /* gray10 */
+ {255, 255, 255, 2043}, /* gray100 */
+ {28, 28, 28, 2051}, /* gray11 */
+ {31, 31, 31, 2058}, /* gray12 */
+ {33, 33, 33, 2065}, /* gray13 */
+ {36, 36, 36, 2072}, /* gray14 */
+ {38, 38, 38, 2079}, /* gray15 */
+ {41, 41, 41, 2086}, /* gray16 */
+ {43, 43, 43, 2093}, /* gray17 */
+ {46, 46, 46, 2100}, /* gray18 */
+ {48, 48, 48, 2107}, /* gray19 */
+ {5, 5, 5, 2114}, /* gray2 */
+ {51, 51, 51, 2120}, /* gray20 */
+ {54, 54, 54, 2127}, /* gray21 */
+ {56, 56, 56, 2134}, /* gray22 */
+ {59, 59, 59, 2141}, /* gray23 */
+ {61, 61, 61, 2148}, /* gray24 */
+ {64, 64, 64, 2155}, /* gray25 */
+ {66, 66, 66, 2162}, /* gray26 */
+ {69, 69, 69, 2169}, /* gray27 */
+ {71, 71, 71, 2176}, /* gray28 */
+ {74, 74, 74, 2183}, /* gray29 */
+ {8, 8, 8, 2190}, /* gray3 */
+ {77, 77, 77, 2196}, /* gray30 */
+ {79, 79, 79, 2203}, /* gray31 */
+ {82, 82, 82, 2210}, /* gray32 */
+ {84, 84, 84, 2217}, /* gray33 */
+ {87, 87, 87, 2224}, /* gray34 */
+ {89, 89, 89, 2231}, /* gray35 */
+ {92, 92, 92, 2238}, /* gray36 */
+ {94, 94, 94, 2245}, /* gray37 */
+ {97, 97, 97, 2252}, /* gray38 */
+ {99, 99, 99, 2259}, /* gray39 */
+ {10, 10, 10, 2266}, /* gray4 */
+ {102, 102, 102, 2272}, /* gray40 */
+ {105, 105, 105, 2279}, /* gray41 */
+ {107, 107, 107, 2286}, /* gray42 */
+ {110, 110, 110, 2293}, /* gray43 */
+ {112, 112, 112, 2300}, /* gray44 */
+ {115, 115, 115, 2307}, /* gray45 */
+ {117, 117, 117, 2314}, /* gray46 */
+ {120, 120, 120, 2321}, /* gray47 */
+ {122, 122, 122, 2328}, /* gray48 */
+ {125, 125, 125, 2335}, /* gray49 */
+ {13, 13, 13, 2342}, /* gray5 */
+ {127, 127, 127, 2348}, /* gray50 */
+ {130, 130, 130, 2355}, /* gray51 */
+ {133, 133, 133, 2362}, /* gray52 */
+ {135, 135, 135, 2369}, /* gray53 */
+ {138, 138, 138, 2376}, /* gray54 */
+ {140, 140, 140, 2383}, /* gray55 */
+ {143, 143, 143, 2390}, /* gray56 */
+ {145, 145, 145, 2397}, /* gray57 */
+ {148, 148, 148, 2404}, /* gray58 */
+ {150, 150, 150, 2411}, /* gray59 */
+ {15, 15, 15, 2418}, /* gray6 */
+ {153, 153, 153, 2424}, /* gray60 */
+ {156, 156, 156, 2431}, /* gray61 */
+ {158, 158, 158, 2438}, /* gray62 */
+ {161, 161, 161, 2445}, /* gray63 */
+ {163, 163, 163, 2452}, /* gray64 */
+ {166, 166, 166, 2459}, /* gray65 */
+ {168, 168, 168, 2466}, /* gray66 */
+ {171, 171, 171, 2473}, /* gray67 */
+ {173, 173, 173, 2480}, /* gray68 */
+ {176, 176, 176, 2487}, /* gray69 */
+ {18, 18, 18, 2494}, /* gray7 */
+ {179, 179, 179, 2500}, /* gray70 */
+ {181, 181, 181, 2507}, /* gray71 */
+ {184, 184, 184, 2514}, /* gray72 */
+ {186, 186, 186, 2521}, /* gray73 */
+ {189, 189, 189, 2528}, /* gray74 */
+ {191, 191, 191, 2535}, /* gray75 */
+ {194, 194, 194, 2542}, /* gray76 */
+ {196, 196, 196, 2549}, /* gray77 */
+ {199, 199, 199, 2556}, /* gray78 */
+ {201, 201, 201, 2563}, /* gray79 */
+ {20, 20, 20, 2570}, /* gray8 */
+ {204, 204, 204, 2576}, /* gray80 */
+ {207, 207, 207, 2583}, /* gray81 */
+ {209, 209, 209, 2590}, /* gray82 */
+ {212, 212, 212, 2597}, /* gray83 */
+ {214, 214, 214, 2604}, /* gray84 */
+ {217, 217, 217, 2611}, /* gray85 */
+ {219, 219, 219, 2618}, /* gray86 */
+ {222, 222, 222, 2625}, /* gray87 */
+ {224, 224, 224, 2632}, /* gray88 */
+ {227, 227, 227, 2639}, /* gray89 */
+ {23, 23, 23, 2646}, /* gray9 */
+ {229, 229, 229, 2652}, /* gray90 */
+ {232, 232, 232, 2659}, /* gray91 */
+ {235, 235, 235, 2666}, /* gray92 */
+ {237, 237, 237, 2673}, /* gray93 */
+ {240, 240, 240, 2680}, /* gray94 */
+ {242, 242, 242, 2687}, /* gray95 */
+ {245, 245, 245, 2694}, /* gray96 */
+ {247, 247, 247, 2701}, /* gray97 */
+ {250, 250, 250, 2708}, /* gray98 */
+ {252, 252, 252, 2715}, /* gray99 */
+ {0, 255, 0, 2722}, /* green */
+ {173, 255, 47, 2728}, /* green yellow */
+ {0, 255, 0, 2741}, /* green1 */
+ {0, 238, 0, 2748}, /* green2 */
+ {0, 205, 0, 2755}, /* green3 */
+ {0, 139, 0, 2762}, /* green4 */
+ {173, 255, 47, 2769}, /* GreenYellow */
+ {190, 190, 190, 2781}, /* grey */
+ {0, 0, 0, 2786}, /* grey0 */
+ {3, 3, 3, 2792}, /* grey1 */
+ {26, 26, 26, 2798}, /* grey10 */
+ {255, 255, 255, 2805}, /* grey100 */
+ {28, 28, 28, 2813}, /* grey11 */
+ {31, 31, 31, 2820}, /* grey12 */
+ {33, 33, 33, 2827}, /* grey13 */
+ {36, 36, 36, 2834}, /* grey14 */
+ {38, 38, 38, 2841}, /* grey15 */
+ {41, 41, 41, 2848}, /* grey16 */
+ {43, 43, 43, 2855}, /* grey17 */
+ {46, 46, 46, 2862}, /* grey18 */
+ {48, 48, 48, 2869}, /* grey19 */
+ {5, 5, 5, 2876}, /* grey2 */
+ {51, 51, 51, 2882}, /* grey20 */
+ {54, 54, 54, 2889}, /* grey21 */
+ {56, 56, 56, 2896}, /* grey22 */
+ {59, 59, 59, 2903}, /* grey23 */
+ {61, 61, 61, 2910}, /* grey24 */
+ {64, 64, 64, 2917}, /* grey25 */
+ {66, 66, 66, 2924}, /* grey26 */
+ {69, 69, 69, 2931}, /* grey27 */
+ {71, 71, 71, 2938}, /* grey28 */
+ {74, 74, 74, 2945}, /* grey29 */
+ {8, 8, 8, 2952}, /* grey3 */
+ {77, 77, 77, 2958}, /* grey30 */
+ {79, 79, 79, 2965}, /* grey31 */
+ {82, 82, 82, 2972}, /* grey32 */
+ {84, 84, 84, 2979}, /* grey33 */
+ {87, 87, 87, 2986}, /* grey34 */
+ {89, 89, 89, 2993}, /* grey35 */
+ {92, 92, 92, 3000}, /* grey36 */
+ {94, 94, 94, 3007}, /* grey37 */
+ {97, 97, 97, 3014}, /* grey38 */
+ {99, 99, 99, 3021}, /* grey39 */
+ {10, 10, 10, 3028}, /* grey4 */
+ {102, 102, 102, 3034}, /* grey40 */
+ {105, 105, 105, 3041}, /* grey41 */
+ {107, 107, 107, 3048}, /* grey42 */
+ {110, 110, 110, 3055}, /* grey43 */
+ {112, 112, 112, 3062}, /* grey44 */
+ {115, 115, 115, 3069}, /* grey45 */
+ {117, 117, 117, 3076}, /* grey46 */
+ {120, 120, 120, 3083}, /* grey47 */
+ {122, 122, 122, 3090}, /* grey48 */
+ {125, 125, 125, 3097}, /* grey49 */
+ {13, 13, 13, 3104}, /* grey5 */
+ {127, 127, 127, 3110}, /* grey50 */
+ {130, 130, 130, 3117}, /* grey51 */
+ {133, 133, 133, 3124}, /* grey52 */
+ {135, 135, 135, 3131}, /* grey53 */
+ {138, 138, 138, 3138}, /* grey54 */
+ {140, 140, 140, 3145}, /* grey55 */
+ {143, 143, 143, 3152}, /* grey56 */
+ {145, 145, 145, 3159}, /* grey57 */
+ {148, 148, 148, 3166}, /* grey58 */
+ {150, 150, 150, 3173}, /* grey59 */
+ {15, 15, 15, 3180}, /* grey6 */
+ {153, 153, 153, 3186}, /* grey60 */
+ {156, 156, 156, 3193}, /* grey61 */
+ {158, 158, 158, 3200}, /* grey62 */
+ {161, 161, 161, 3207}, /* grey63 */
+ {163, 163, 163, 3214}, /* grey64 */
+ {166, 166, 166, 3221}, /* grey65 */
+ {168, 168, 168, 3228}, /* grey66 */
+ {171, 171, 171, 3235}, /* grey67 */
+ {173, 173, 173, 3242}, /* grey68 */
+ {176, 176, 176, 3249}, /* grey69 */
+ {18, 18, 18, 3256}, /* grey7 */
+ {179, 179, 179, 3262}, /* grey70 */
+ {181, 181, 181, 3269}, /* grey71 */
+ {184, 184, 184, 3276}, /* grey72 */
+ {186, 186, 186, 3283}, /* grey73 */
+ {189, 189, 189, 3290}, /* grey74 */
+ {191, 191, 191, 3297}, /* grey75 */
+ {194, 194, 194, 3304}, /* grey76 */
+ {196, 196, 196, 3311}, /* grey77 */
+ {199, 199, 199, 3318}, /* grey78 */
+ {201, 201, 201, 3325}, /* grey79 */
+ {20, 20, 20, 3332}, /* grey8 */
+ {204, 204, 204, 3338}, /* grey80 */
+ {207, 207, 207, 3345}, /* grey81 */
+ {209, 209, 209, 3352}, /* grey82 */
+ {212, 212, 212, 3359}, /* grey83 */
+ {214, 214, 214, 3366}, /* grey84 */
+ {217, 217, 217, 3373}, /* grey85 */
+ {219, 219, 219, 3380}, /* grey86 */
+ {222, 222, 222, 3387}, /* grey87 */
+ {224, 224, 224, 3394}, /* grey88 */
+ {227, 227, 227, 3401}, /* grey89 */
+ {23, 23, 23, 3408}, /* grey9 */
+ {229, 229, 229, 3414}, /* grey90 */
+ {232, 232, 232, 3421}, /* grey91 */
+ {235, 235, 235, 3428}, /* grey92 */
+ {237, 237, 237, 3435}, /* grey93 */
+ {240, 240, 240, 3442}, /* grey94 */
+ {242, 242, 242, 3449}, /* grey95 */
+ {245, 245, 245, 3456}, /* grey96 */
+ {247, 247, 247, 3463}, /* grey97 */
+ {250, 250, 250, 3470}, /* grey98 */
+ {252, 252, 252, 3477}, /* grey99 */
+ {240, 255, 240, 3484}, /* honeydew */
+ {240, 255, 240, 3493}, /* honeydew1 */
+ {224, 238, 224, 3503}, /* honeydew2 */
+ {193, 205, 193, 3513}, /* honeydew3 */
+ {131, 139, 131, 3523}, /* honeydew4 */
+ {255, 105, 180, 3533}, /* hot pink */
+ {255, 105, 180, 3542}, /* HotPink */
+ {255, 110, 180, 3550}, /* HotPink1 */
+ {238, 106, 167, 3559}, /* HotPink2 */
+ {205, 96, 144, 3568}, /* HotPink3 */
+ {139, 58, 98, 3577}, /* HotPink4 */
+ {205, 92, 92, 3586}, /* indian red */
+ {205, 92, 92, 3597}, /* IndianRed */
+ {255, 106, 106, 3607}, /* IndianRed1 */
+ {238, 99, 99, 3618}, /* IndianRed2 */
+ {205, 85, 85, 3629}, /* IndianRed3 */
+ {139, 58, 58, 3640}, /* IndianRed4 */
+ {75, 0, 130, 3651}, /* indigo */
+ {255, 255, 240, 3658}, /* ivory */
+ {255, 255, 240, 3664}, /* ivory1 */
+ {238, 238, 224, 3671}, /* ivory2 */
+ {205, 205, 193, 3678}, /* ivory3 */
+ {139, 139, 131, 3685}, /* ivory4 */
+ {240, 230, 140, 3692}, /* khaki */
+ {255, 246, 143, 3698}, /* khaki1 */
+ {238, 230, 133, 3705}, /* khaki2 */
+ {205, 198, 115, 3712}, /* khaki3 */
+ {139, 134, 78, 3719}, /* khaki4 */
+ {230, 230, 250, 3726}, /* lavender */
+ {255, 240, 245, 3735}, /* lavender blush */
+ {255, 240, 245, 3750}, /* LavenderBlush */
+ {255, 240, 245, 3764}, /* LavenderBlush1 */
+ {238, 224, 229, 3779}, /* LavenderBlush2 */
+ {205, 193, 197, 3794}, /* LavenderBlush3 */
+ {139, 131, 134, 3809}, /* LavenderBlush4 */
+ {124, 252, 0, 3824}, /* lawn green */
+ {124, 252, 0, 3835}, /* LawnGreen */
+ {255, 250, 205, 3845}, /* lemon chiffon */
+ {255, 250, 205, 3859}, /* LemonChiffon */
+ {255, 250, 205, 3872}, /* LemonChiffon1 */
+ {238, 233, 191, 3886}, /* LemonChiffon2 */
+ {205, 201, 165, 3900}, /* LemonChiffon3 */
+ {139, 137, 112, 3914}, /* LemonChiffon4 */
+ {173, 216, 230, 3928}, /* light blue */
+ {240, 128, 128, 3939}, /* light coral */
+ {224, 255, 255, 3951}, /* light cyan */
+ {238, 221, 130, 3962}, /* light goldenrod */
+ {250, 250, 210, 3978}, /* light goldenrod yellow */
+ {211, 211, 211, 4001}, /* light gray */
+ {144, 238, 144, 4012}, /* light green */
+ {211, 211, 211, 4024}, /* light grey */
+ {255, 182, 193, 4035}, /* light pink */
+ {255, 160, 122, 4046}, /* light salmon */
+ {32, 178, 170, 4059}, /* light sea green */
+ {135, 206, 250, 4075}, /* light sky blue */
+ {132, 112, 255, 4090}, /* light slate blue */
+ {119, 136, 153, 4107}, /* light slate gray */
+ {119, 136, 153, 4124}, /* light slate grey */
+ {176, 196, 222, 4141}, /* light steel blue */
+ {255, 255, 224, 4158}, /* light yellow */
+ {173, 216, 230, 4171}, /* LightBlue */
+ {191, 239, 255, 4181}, /* LightBlue1 */
+ {178, 223, 238, 4192}, /* LightBlue2 */
+ {154, 192, 205, 4203}, /* LightBlue3 */
+ {104, 131, 139, 4214}, /* LightBlue4 */
+ {240, 128, 128, 4225}, /* LightCoral */
+ {224, 255, 255, 4236}, /* LightCyan */
+ {224, 255, 255, 4246}, /* LightCyan1 */
+ {209, 238, 238, 4257}, /* LightCyan2 */
+ {180, 205, 205, 4268}, /* LightCyan3 */
+ {122, 139, 139, 4279}, /* LightCyan4 */
+ {238, 221, 130, 4290}, /* LightGoldenrod */
+ {255, 236, 139, 4305}, /* LightGoldenrod1 */
+ {238, 220, 130, 4321}, /* LightGoldenrod2 */
+ {205, 190, 112, 4337}, /* LightGoldenrod3 */
+ {139, 129, 76, 4353}, /* LightGoldenrod4 */
+ {250, 250, 210, 4369}, /* LightGoldenrodYellow */
+ {211, 211, 211, 4390}, /* LightGray */
+ {144, 238, 144, 4400}, /* LightGreen */
+ {211, 211, 211, 4411}, /* LightGrey */
+ {255, 182, 193, 4421}, /* LightPink */
+ {255, 174, 185, 4431}, /* LightPink1 */
+ {238, 162, 173, 4442}, /* LightPink2 */
+ {205, 140, 149, 4453}, /* LightPink3 */
+ {139, 95, 101, 4464}, /* LightPink4 */
+ {255, 160, 122, 4475}, /* LightSalmon */
+ {255, 160, 122, 4487}, /* LightSalmon1 */
+ {238, 149, 114, 4500}, /* LightSalmon2 */
+ {205, 129, 98, 4513}, /* LightSalmon3 */
+ {139, 87, 66, 4526}, /* LightSalmon4 */
+ {32, 178, 170, 4539}, /* LightSeaGreen */
+ {135, 206, 250, 4553}, /* LightSkyBlue */
+ {176, 226, 255, 4566}, /* LightSkyBlue1 */
+ {164, 211, 238, 4580}, /* LightSkyBlue2 */
+ {141, 182, 205, 4594}, /* LightSkyBlue3 */
+ {96, 123, 139, 4608}, /* LightSkyBlue4 */
+ {132, 112, 255, 4622}, /* LightSlateBlue */
+ {119, 136, 153, 4637}, /* LightSlateGray */
+ {119, 136, 153, 4652}, /* LightSlateGrey */
+ {176, 196, 222, 4667}, /* LightSteelBlue */
+ {202, 225, 255, 4682}, /* LightSteelBlue1 */
+ {188, 210, 238, 4698}, /* LightSteelBlue2 */
+ {162, 181, 205, 4714}, /* LightSteelBlue3 */
+ {110, 123, 139, 4730}, /* LightSteelBlue4 */
+ {255, 255, 224, 4746}, /* LightYellow */
+ {255, 255, 224, 4758}, /* LightYellow1 */
+ {238, 238, 209, 4771}, /* LightYellow2 */
+ {205, 205, 180, 4784}, /* LightYellow3 */
+ {139, 139, 122, 4797}, /* LightYellow4 */
+ {0, 255, 0, 4810}, /* lime */
+ {50, 205, 50, 4815}, /* lime green */
+ {50, 205, 50, 4826}, /* LimeGreen */
+ {250, 240, 230, 4836}, /* linen */
+ {255, 0, 255, 4842}, /* magenta */
+ {255, 0, 255, 4850}, /* magenta1 */
+ {238, 0, 238, 4859}, /* magenta2 */
+ {205, 0, 205, 4868}, /* magenta3 */
+ {139, 0, 139, 4877}, /* magenta4 */
+ {176, 48, 96, 4886}, /* maroon */
+ {255, 52, 179, 4893}, /* maroon1 */
+ {238, 48, 167, 4901}, /* maroon2 */
+ {205, 41, 144, 4909}, /* maroon3 */
+ {139, 28, 98, 4917}, /* maroon4 */
+ {102, 205, 170, 4925}, /* medium aquamarine */
+ {0, 0, 205, 4943}, /* medium blue */
+ {186, 85, 211, 4955}, /* medium orchid */
+ {147, 112, 219, 4969}, /* medium purple */
+ {60, 179, 113, 4983}, /* medium sea green */
+ {123, 104, 238, 5000}, /* medium slate blue */
+ {0, 250, 154, 5018}, /* medium spring green */
+ {72, 209, 204, 5038}, /* medium turquoise */
+ {199, 21, 133, 5055}, /* medium violet red */
+ {102, 205, 170, 5073}, /* MediumAquamarine */
+ {0, 0, 205, 5090}, /* MediumBlue */
+ {186, 85, 211, 5101}, /* MediumOrchid */
+ {224, 102, 255, 5114}, /* MediumOrchid1 */
+ {209, 95, 238, 5128}, /* MediumOrchid2 */
+ {180, 82, 205, 5142}, /* MediumOrchid3 */
+ {122, 55, 139, 5156}, /* MediumOrchid4 */
+ {147, 112, 219, 5170}, /* MediumPurple */
+ {171, 130, 255, 5183}, /* MediumPurple1 */
+ {159, 121, 238, 5197}, /* MediumPurple2 */
+ {137, 104, 205, 5211}, /* MediumPurple3 */
+ {93, 71, 139, 5225}, /* MediumPurple4 */
+ {60, 179, 113, 5239}, /* MediumSeaGreen */
+ {123, 104, 238, 5254}, /* MediumSlateBlue */
+ {0, 250, 154, 5270}, /* MediumSpringGreen */
+ {72, 209, 204, 5288}, /* MediumTurquoise */
+ {199, 21, 133, 5304}, /* MediumVioletRed */
+ {25, 25, 112, 5320}, /* midnight blue */
+ {25, 25, 112, 5334}, /* MidnightBlue */
+ {245, 255, 250, 5347}, /* mint cream */
+ {245, 255, 250, 5358}, /* MintCream */
+ {255, 228, 225, 5368}, /* misty rose */
+ {255, 228, 225, 5379}, /* MistyRose */
+ {255, 228, 225, 5389}, /* MistyRose1 */
+ {238, 213, 210, 5400}, /* MistyRose2 */
+ {205, 183, 181, 5411}, /* MistyRose3 */
+ {139, 125, 123, 5422}, /* MistyRose4 */
+ {255, 228, 181, 5433}, /* moccasin */
+ {255, 222, 173, 5442}, /* navajo white */
+ {255, 222, 173, 5455}, /* NavajoWhite */
+ {255, 222, 173, 5467}, /* NavajoWhite1 */
+ {238, 207, 161, 5480}, /* NavajoWhite2 */
+ {205, 179, 139, 5493}, /* NavajoWhite3 */
+ {139, 121, 94, 5506}, /* NavajoWhite4 */
+ {0, 0, 128, 5519}, /* navy */
+ {0, 0, 128, 5524}, /* navy blue */
+ {0, 0, 128, 5534}, /* NavyBlue */
+ {253, 245, 230, 5543}, /* old lace */
+ {253, 245, 230, 5552}, /* OldLace */
+ {128, 128, 0, 5560}, /* olive */
+ {107, 142, 35, 5566}, /* olive drab */
+ {107, 142, 35, 5577}, /* OliveDrab */
+ {192, 255, 62, 5587}, /* OliveDrab1 */
+ {179, 238, 58, 5598}, /* OliveDrab2 */
+ {154, 205, 50, 5609}, /* OliveDrab3 */
+ {105, 139, 34, 5620}, /* OliveDrab4 */
+ {255, 165, 0, 5631}, /* orange */
+ {255, 69, 0, 5638}, /* orange red */
+ {255, 165, 0, 5649}, /* orange1 */
+ {238, 154, 0, 5657}, /* orange2 */
+ {205, 133, 0, 5665}, /* orange3 */
+ {139, 90, 0, 5673}, /* orange4 */
+ {255, 69, 0, 5681}, /* OrangeRed */
+ {255, 69, 0, 5691}, /* OrangeRed1 */
+ {238, 64, 0, 5702}, /* OrangeRed2 */
+ {205, 55, 0, 5713}, /* OrangeRed3 */
+ {139, 37, 0, 5724}, /* OrangeRed4 */
+ {218, 112, 214, 5735}, /* orchid */
+ {255, 131, 250, 5742}, /* orchid1 */
+ {238, 122, 233, 5750}, /* orchid2 */
+ {205, 105, 201, 5758}, /* orchid3 */
+ {139, 71, 137, 5766}, /* orchid4 */
+ {238, 232, 170, 5774}, /* pale goldenrod */
+ {152, 251, 152, 5789}, /* pale green */
+ {175, 238, 238, 5800}, /* pale turquoise */
+ {219, 112, 147, 5815}, /* pale violet red */
+ {238, 232, 170, 5831}, /* PaleGoldenrod */
+ {152, 251, 152, 5845}, /* PaleGreen */
+ {154, 255, 154, 5855}, /* PaleGreen1 */
+ {144, 238, 144, 5866}, /* PaleGreen2 */
+ {124, 205, 124, 5877}, /* PaleGreen3 */
+ {84, 139, 84, 5888}, /* PaleGreen4 */
+ {175, 238, 238, 5899}, /* PaleTurquoise */
+ {187, 255, 255, 5913}, /* PaleTurquoise1 */
+ {174, 238, 238, 5928}, /* PaleTurquoise2 */
+ {150, 205, 205, 5943}, /* PaleTurquoise3 */
+ {102, 139, 139, 5958}, /* PaleTurquoise4 */
+ {219, 112, 147, 5973}, /* PaleVioletRed */
+ {255, 130, 171, 5987}, /* PaleVioletRed1 */
+ {238, 121, 159, 6002}, /* PaleVioletRed2 */
+ {205, 104, 137, 6017}, /* PaleVioletRed3 */
+ {139, 71, 93, 6032}, /* PaleVioletRed4 */
+ {255, 239, 213, 6047}, /* papaya whip */
+ {255, 239, 213, 6059}, /* PapayaWhip */
+ {255, 218, 185, 6070}, /* peach puff */
+ {255, 218, 185, 6081}, /* PeachPuff */
+ {255, 218, 185, 6091}, /* PeachPuff1 */
+ {238, 203, 173, 6102}, /* PeachPuff2 */
+ {205, 175, 149, 6113}, /* PeachPuff3 */
+ {139, 119, 101, 6124}, /* PeachPuff4 */
+ {205, 133, 63, 6135}, /* peru */
+ {255, 192, 203, 6140}, /* pink */
+ {255, 181, 197, 6145}, /* pink1 */
+ {238, 169, 184, 6151}, /* pink2 */
+ {205, 145, 158, 6157}, /* pink3 */
+ {139, 99, 108, 6163}, /* pink4 */
+ {221, 160, 221, 6169}, /* plum */
+ {255, 187, 255, 6174}, /* plum1 */
+ {238, 174, 238, 6180}, /* plum2 */
+ {205, 150, 205, 6186}, /* plum3 */
+ {139, 102, 139, 6192}, /* plum4 */
+ {176, 224, 230, 6198}, /* powder blue */
+ {176, 224, 230, 6210}, /* PowderBlue */
+ {160, 32, 240, 6221}, /* purple */
+ {155, 48, 255, 6228}, /* purple1 */
+ {145, 44, 238, 6236}, /* purple2 */
+ {125, 38, 205, 6244}, /* purple3 */
+ {85, 26, 139, 6252}, /* purple4 */
+ {102, 51, 153, 6260}, /* rebecca purple */
+ {102, 51, 153, 6275}, /* RebeccaPurple */
+ {255, 0, 0, 6289}, /* red */
+ {255, 0, 0, 6293}, /* red1 */
+ {238, 0, 0, 6298}, /* red2 */
+ {205, 0, 0, 6303}, /* red3 */
+ {139, 0, 0, 6308}, /* red4 */
+ {188, 143, 143, 6313}, /* rosy brown */
+ {188, 143, 143, 6324}, /* RosyBrown */
+ {255, 193, 193, 6334}, /* RosyBrown1 */
+ {238, 180, 180, 6345}, /* RosyBrown2 */
+ {205, 155, 155, 6356}, /* RosyBrown3 */
+ {139, 105, 105, 6367}, /* RosyBrown4 */
+ {65, 105, 225, 6378}, /* royal blue */
+ {65, 105, 225, 6389}, /* RoyalBlue */
+ {72, 118, 255, 6399}, /* RoyalBlue1 */
+ {67, 110, 238, 6410}, /* RoyalBlue2 */
+ {58, 95, 205, 6421}, /* RoyalBlue3 */
+ {39, 64, 139, 6432}, /* RoyalBlue4 */
+ {139, 69, 19, 6443}, /* saddle brown */
+ {139, 69, 19, 6456}, /* SaddleBrown */
+ {250, 128, 114, 6468}, /* salmon */
+ {255, 140, 105, 6475}, /* salmon1 */
+ {238, 130, 98, 6483}, /* salmon2 */
+ {205, 112, 84, 6491}, /* salmon3 */
+ {139, 76, 57, 6499}, /* salmon4 */
+ {244, 164, 96, 6507}, /* sandy brown */
+ {244, 164, 96, 6519}, /* SandyBrown */
+ {46, 139, 87, 6530}, /* sea green */
+ {46, 139, 87, 6540}, /* SeaGreen */
+ {84, 255, 159, 6549}, /* SeaGreen1 */
+ {78, 238, 148, 6559}, /* SeaGreen2 */
+ {67, 205, 128, 6569}, /* SeaGreen3 */
+ {46, 139, 87, 6579}, /* SeaGreen4 */
+ {255, 245, 238, 6589}, /* seashell */
+ {255, 245, 238, 6598}, /* seashell1 */
+ {238, 229, 222, 6608}, /* seashell2 */
+ {205, 197, 191, 6618}, /* seashell3 */
+ {139, 134, 130, 6628}, /* seashell4 */
+ {160, 82, 45, 6638}, /* sienna */
+ {255, 130, 71, 6645}, /* sienna1 */
+ {238, 121, 66, 6653}, /* sienna2 */
+ {205, 104, 57, 6661}, /* sienna3 */
+ {139, 71, 38, 6669}, /* sienna4 */
+ {192, 192, 192, 6677}, /* silver */
+ {135, 206, 235, 6684}, /* sky blue */
+ {135, 206, 235, 6693}, /* SkyBlue */
+ {135, 206, 255, 6701}, /* SkyBlue1 */
+ {126, 192, 238, 6710}, /* SkyBlue2 */
+ {108, 166, 205, 6719}, /* SkyBlue3 */
+ {74, 112, 139, 6728}, /* SkyBlue4 */
+ {106, 90, 205, 6737}, /* slate blue */
+ {112, 128, 144, 6748}, /* slate gray */
+ {112, 128, 144, 6759}, /* slate grey */
+ {106, 90, 205, 6770}, /* SlateBlue */
+ {131, 111, 255, 6780}, /* SlateBlue1 */
+ {122, 103, 238, 6791}, /* SlateBlue2 */
+ {105, 89, 205, 6802}, /* SlateBlue3 */
+ {71, 60, 139, 6813}, /* SlateBlue4 */
+ {112, 128, 144, 6824}, /* SlateGray */
+ {198, 226, 255, 6834}, /* SlateGray1 */
+ {185, 211, 238, 6845}, /* SlateGray2 */
+ {159, 182, 205, 6856}, /* SlateGray3 */
+ {108, 123, 139, 6867}, /* SlateGray4 */
+ {112, 128, 144, 6878}, /* SlateGrey */
+ {255, 250, 250, 6888}, /* snow */
+ {255, 250, 250, 6893}, /* snow1 */
+ {238, 233, 233, 6899}, /* snow2 */
+ {205, 201, 201, 6905}, /* snow3 */
+ {139, 137, 137, 6911}, /* snow4 */
+ {0, 255, 127, 6917}, /* spring green */
+ {0, 255, 127, 6930}, /* SpringGreen */
+ {0, 255, 127, 6942}, /* SpringGreen1 */
+ {0, 238, 118, 6955}, /* SpringGreen2 */
+ {0, 205, 102, 6968}, /* SpringGreen3 */
+ {0, 139, 69, 6981}, /* SpringGreen4 */
+ {70, 130, 180, 6994}, /* steel blue */
+ {70, 130, 180, 7005}, /* SteelBlue */
+ {99, 184, 255, 7015}, /* SteelBlue1 */
+ {92, 172, 238, 7026}, /* SteelBlue2 */
+ {79, 148, 205, 7037}, /* SteelBlue3 */
+ {54, 100, 139, 7048}, /* SteelBlue4 */
+ {210, 180, 140, 7059}, /* tan */
+ {255, 165, 79, 7063}, /* tan1 */
+ {238, 154, 73, 7068}, /* tan2 */
+ {205, 133, 63, 7073}, /* tan3 */
+ {139, 90, 43, 7078}, /* tan4 */
+ {0, 128, 128, 7083}, /* teal */
+ {216, 191, 216, 7088}, /* thistle */
+ {255, 225, 255, 7096}, /* thistle1 */
+ {238, 210, 238, 7105}, /* thistle2 */
+ {205, 181, 205, 7114}, /* thistle3 */
+ {139, 123, 139, 7123}, /* thistle4 */
+ {255, 99, 71, 7132}, /* tomato */
+ {255, 99, 71, 7139}, /* tomato1 */
+ {238, 92, 66, 7147}, /* tomato2 */
+ {205, 79, 57, 7155}, /* tomato3 */
+ {139, 54, 38, 7163}, /* tomato4 */
+ {64, 224, 208, 7171}, /* turquoise */
+ {0, 245, 255, 7181}, /* turquoise1 */
+ {0, 229, 238, 7192}, /* turquoise2 */
+ {0, 197, 205, 7203}, /* turquoise3 */
+ {0, 134, 139, 7214}, /* turquoise4 */
+ {238, 130, 238, 7225}, /* violet */
+ {208, 32, 144, 7232}, /* violet red */
+ {208, 32, 144, 7243}, /* VioletRed */
+ {255, 62, 150, 7253}, /* VioletRed1 */
+ {238, 58, 140, 7264}, /* VioletRed2 */
+ {205, 50, 120, 7275}, /* VioletRed3 */
+ {139, 34, 82, 7286}, /* VioletRed4 */
+ {128, 128, 128, 7297}, /* web gray */
+ {0, 128, 0, 7306}, /* web green */
+ {128, 128, 128, 7316}, /* web grey */
+ {128, 0, 0, 7325}, /* web maroon */
+ {128, 0, 128, 7336}, /* web purple */
+ {128, 128, 128, 7347}, /* WebGray */
+ {0, 128, 0, 7355}, /* WebGreen */
+ {128, 128, 128, 7364}, /* WebGrey */
+ {128, 0, 0, 7372}, /* WebMaroon */
+ {128, 0, 128, 7382}, /* WebPurple */
+ {245, 222, 179, 7392}, /* wheat */
+ {255, 231, 186, 7398}, /* wheat1 */
+ {238, 216, 174, 7405}, /* wheat2 */
+ {205, 186, 150, 7412}, /* wheat3 */
+ {139, 126, 102, 7419}, /* wheat4 */
+ {255, 255, 255, 7426}, /* white */
+ {245, 245, 245, 7432}, /* white smoke */
+ {245, 245, 245, 7444}, /* WhiteSmoke */
+ {190, 190, 190, 7455}, /* x11 gray */
+ {0, 255, 0, 7464}, /* x11 green */
+ {190, 190, 190, 7474}, /* x11 grey */
+ {176, 48, 96, 7483}, /* x11 maroon */
+ {160, 32, 240, 7494}, /* x11 purple */
+ {190, 190, 190, 7505}, /* X11Gray */
+ {0, 255, 0, 7513}, /* X11Green */
+ {190, 190, 190, 7522}, /* X11Grey */
+ {176, 48, 96, 7530}, /* X11Maroon */
+ {160, 32, 240, 7540}, /* X11Purple */
+ {255, 255, 0, 7550}, /* yellow */
+ {154, 205, 50, 7557}, /* yellow green */
+ {255, 255, 0, 7570}, /* yellow1 */
+ {238, 238, 0, 7578}, /* yellow2 */
+ {205, 205, 0, 7586}, /* yellow3 */
+ {139, 139, 0, 7594}, /* yellow4 */
+ {154, 205, 50, 7602}, /* YellowGreen */
};
#define NUM_BUILTIN_COLORS (sizeof (BuiltinColors) / sizeof (BuiltinColors[0]))