Commit Graph

127 Commits

Author SHA1 Message Date
Eric Anholt
a7e3ad1c6b Remove NDEBUG (assert() disable) define from the X Server.
A few pieces of code were abusing this define for other purposes, which are
converted to #ifndef DEBUG instead.  There should be no ABI consequences
to this change.

The rationale is that having the define in xorg-server.h also disables
assert() drivers, which is unexpected, and also difficult to avoid since
xorg-server.h is included in their config.h, and you can't put a #undef in
config.h.  As for removing it from the server instead of moving it to an
internal header, we probably shouldn't have unnecessary assert()s in
critical server paths anyway, and if we do we could #define NDEBUG in the
specific cases needed.
2008-04-10 10:35:14 -07:00
David Nusinow
f028e245a7 Bug #10016: Implement WM_CLASS hints in Xephyr. 2008-03-24 16:06:33 -04:00
Dodji Seketeli
cdadd2ff9b [Xephyr/DRI] correctly route motion events targeted at GL drawable 2008-03-18 14:02:41 +01:00
Donnie Berkholz
aa231f28d5 Xephyr: Build fix: Port across XF86dri.c changes from Mesa. 2008-03-14 18:43:41 -07:00
Donnie Berkholz
a955c3b587 Xephyr: Distribute ephyrdriext.h in tarballs. 2008-03-14 18:43:40 -07:00
Dodji Seketeli
d74b0327e8 [Xephyr/GL] unbreak the build
Don't touch Xephyr DRI stuff when not compiling in a DRI environment.
2008-02-27 09:48:53 +01:00
Adam Jackson
69f7826767 Match Xephyr DRI definitions to the ones in xf86dri.h 2008-02-22 16:04:35 -05:00
Dodji Seketeli
c14fd2a5cb [Xephyr/GL] properly route expose event on GL drawables
When an expose event happens on an host GL window paired with an
internal drawable, route that expose event to the clients listening
to the expose event on the internal drawable.
2008-02-21 15:33:02 +01:00
Dodji Seketeli
437c78ef9f [Xephyr/GL] don't crash when the host returns a NULL server string 2008-02-21 15:29:27 +01:00
Daniel Stone
e85130c85f Xephyr: One-time keyboard leak fix
Don't leak the originally-allocated keysym map.
2008-01-17 18:43:06 +11:00
Tiago Vignatti
7a0d16ef0a Removed some warnings. 2008-01-15 03:27:16 -02:00
Tiago Vignatti
315d6a2b1d Fix Xephyr compilation without GLX. 2008-01-15 02:59:56 -02:00
Daniel Stone
941058f8da KDrive: Xephyr: Don't leak screen damage structure 2007-12-28 15:51:36 +02:00
Eamon Walsh
1c1a4bc970 devPrivates rework: more cleanup from previous merge operation. 2007-12-13 19:51:40 -05:00
Eamon Walsh
1603130236 Merge branch 'master' into XACE-SELINUX
Conflicts:

	Xext/xace.c
	Xext/xace.h
2007-11-14 13:35:50 -05:00
Dodji Seketeli
26e1fc7b42 Xephyr: don't use Xv or GL when those are disabled. 2007-11-07 18:48:23 +01:00
Dodji Seketeli
868e303630 Xephyr: fix a crash when using xrandr twice
* hw/kdrive/ephyr/ephyr.c:
          (ephyrScreenFini): don't forget to
          free shadowfb data (if necessary) upon server is reset.
2007-11-06 16:24:46 +01:00
Eamon Walsh
a52c9b2a59 Merge branch 'master' into XACE-SELINUX
Conflicts:

	dix/dispatch.c
	dix/property.c
	hw/xfree86/common/xf86VidMode.c
	include/xkbsrv.h
	render/glyph.c
	xkb/xkbActions.c
2007-11-05 19:08:36 -05:00
Dodji Seketeli
6ff79ea5f7 Xephyr: fix some DRI build breakage 2007-11-05 16:46:49 +01:00
Eamon Walsh
c3f7b86255 Merge branch 'master' into XACE-SELINUX
Conflicts:

	os/access.c
2007-10-17 15:00:54 -04:00
Dodji Seketeli
ab11bad547 Xephyr: remove a potential crasher
* hw/kdrive/ephyr/hostx.c:
	  (hostx_has_dri): be more defensive.
2007-10-04 13:05:29 +02:00
Dodji Seketeli
06c8977966 Xephyr: better handling of the -nodri option
* hw/kdrive/ephyr/ephyr.c:
          (ephyrInitScreen): try and detect when the host has no
          DRI support. In that case, switch to the -nodri behaviour.
          When in the -nodri case, make sure not to skip glx visual
          initialisation.
2007-10-04 13:01:24 +02:00
Dodji Seketeli
ea94f59e9b Xephyr: don't disable glx visual init by default
* hw/kdrive/ephyr/ephyrinit.c:
          (ddxProcessArgument): disabling visual init here
          is bad because it gets disabled even when we want
          to use software GL, leading to Xephyr :1 -nodri
          crashing in mesa.
2007-10-04 12:54:26 +02:00
Dodji Seketeli
a7f210e6fc Xephyr: fix a compiler warning 2007-10-04 12:51:08 +02:00
Dodji Seketeli
5d6eac1251 Xephyr: remove an unused variable 2007-10-04 12:47:05 +02:00
Dodji Seketeli
8018733c39 Xephyr: better compilation without GLX
* hw/kdrive/ephyr/ephyrinit.c: protect GLX related code with GLXEXT
	  macro
2007-10-04 12:06:19 +02:00
Dodji Seketeli
4ba76a7e2b Xephyr: port XV/GL stuff of the new multiscreen architecture
We can now launch GL or XV apps in any of the
        Xephyr screens we want.

	* hw/kdrive/ephyr/hostx.c,h:
	 (hostx_get_window):
	 (hostx_create_window): make these functions be screen
	 number aware.
	* hw/kdrive/ephyr/XF86dri.c : fix some compiler warnings.
	* hw/kdrive/ephyr/ephyrdri.c:
	 (ephyrDRIQueryDirectRenderingCapable),
	 (ephyrDRIOpenConnection),
	 (ephyrDRIAuthConnection),
	 (ephyrDRICloseConnection),
	 (ephyrDRIGetClientDriverName),
	 (ephyrDRICreateContext),
	 (ephyrDRIDestroyContext),
	 (ephyrDRICreateDrawable),
	 (ephyrDRIGetDrawableInfo),
	 (ephyrDRIGetDeviceInfo): in all those functions, don't forward
	 the screen number we receive - from the client - to the host X.
	 We (Xephyr) are always targetting the same X display screen, which is
	 the one Xephyr got launched against. So we enforce that in the code.
	* hw/kdrive/ephyr/ephyrdriext.c:
	 (EphyrMirrorHostVisuals): make this duplicate the visuals of the host X
	  default screen into a given Xephyr screen. This way we have a chance
	  to update the visuals of all Xephyr screen to make them mirror those
	  of the host X.
	 (many other places): specify screen number where required by the api
	 change in hostx.h.
	* hw/kdrive/ephyr/ephyrglxext.c: specify screen number where required
	 by the api change in hostx.h
	* hw/kdrive/ephyr/ephyrhostglx.c: don't forward the screen number we
	  receive - from the client - to the host X.
	  We (Xephyr) are always targetting the same
	  X display screen, which is
	 the one Xephyr got launched against. So we enforce that in the code.
	* hw/kdrive/ephyr/ephyrhostvideo.c,h: take in account the screen number received
	  from the client app. This is useful to know on which Xephyr screen we
	  need to display video stuff.
	* hw/kdrive/ephyr/ephyrvideo.c: update this to reflect the API change
	  in hw/kdrive/ephyr/ephyrhostvideo.h.
	  (ephyrSetPortAttribute): when parameters are not valid
	   - they exceed their validity range - send them to the host anyway
	   and do not return an error to clients.
	  Some host expose buggy validity range, so rejecting client for that
	  is too harsh.
2007-10-03 13:03:34 +02:00
Dodji Seketeli
dcb4db1bf5 Xephyr: glx fixlet
* hw/kdrive/ephyr/ephyrhostglx.c:
	  (ephyrHostGLXQueryVersion): properly query
	  the host for its gxl version.
2007-10-02 16:55:18 +02:00
Dodji Seketeli
6a435b0000 Xephyr: check presence of extensions in host X
* hw/kdrive/ephyr/hostx.c,h:
	  (hostx_has_xshape),
	  (hostx_has_glx),
	  (hostx_has_dri): added these new entry points
	* hw/kdrive/ephyr/ephyrdriext.c:
	  (ephyrDRIExtensionInit):
	  check presence of DRI and XShape extensions before
	  trying to use them.
	* hw/kdrive/ephyr/ephyrglxext.c:
	  (ephyrHijackGLXExtension):
	  check presence of glx extension before we use it.
2007-10-02 16:55:18 +02:00
Dodji Seketeli
2b217fc055 Xephyr: cleanup XF86dri.c a bit 2007-10-02 16:55:18 +02:00
Dodji Seketeli
f731b9da7d Xephyr: add -nodri and -noxv switches.
* hw/kdrive/ephyr/ephyr.c,ephyrinit.c::
	  add -nodri and -noxv to disable either DRI or XV.
	  When -nodri, mesa GL (non acceleretated) works.
2007-10-02 16:55:18 +02:00
Dodji Seketeli
ffe9ce6a84 Xephyr: fix a clipping issue xephyr-dri
* hw/kdrive/ephyr/ephyrdri.c:
	  (ephyrDRIGetDrawableInfo): force the back clipping rects
	  to equal the front clipping rects.
	* hw/kdrive/ephyr/ephyrdriext.c:
	  (ProcXF86DRIGetDrawableInfo): properly overclip the clipping rects we
	   got from the client. This bug fixes a clipping rect that was too
	   small in height, basically. Also fix a possible mem corruption.
	* hw/kdrive/ephyr/hostx.c:
	  (hostx_set_window_geometry): remove a useless XSync
2007-10-02 16:55:17 +02:00
Dodji Seketeli
7978272661 Xephyr: properly clip GL drawables in Xephyr 2007-10-02 16:55:17 +02:00
Dodji Seketeli
3816d64e50 Xephyr: oops, forgot to add ephyrdriext.h 2007-10-02 16:55:17 +02:00
Dodji Seketeli
cf58781eee Xephyr: make accelerated glxgears work in Xephyr
* hw/kdrive/ephyr/ephyr.c:
	 (ephyrInitialize): cleanup ephyrDRI extension init.
	 remove functions that belongs in ephyrdriext.c .
	* hw/kdrive/ephyr/ephyrdri.c:
	 (ephyrDRICreateDrawable): create the drawable on the host X peer
	  window, not on the host xephyr main window.
	 (ephyrDRIGetDrawableInfo): get drawable info of the host X peer
	  window.
	* hw/kdrive/ephyr/ephyrdriext.c: make ephyr DRI extention wrap
	  a bunch of screen ops so that it can update the host X peer
	  window whenever DRI bound drawable are moved in Xephyr.
	  Also code the building blocks of the management of the
	  host X window peer.
	* hw/kdrive/ephyr/hostx.c,h:
	  (hostx_create_window): added this new entry point
	  (hostx_destroy_window): ditto
	  ()hostx_set_window_geometry): ditto
2007-10-02 16:55:16 +02:00
Dodji Seketeli
6d1e44d3d5 Xephyr: fix a host X hang.
* hw/kdrive/ephyr/ephyrdri.c:
	  (ephyrDRIGetDrawableInfo): quickly hook
	  this into getting the drawable info from the host
	  X server. For the time being, this only gets the drawable info
	  of the Xephyr main window in the host. It should really get
	  the info of a the peer drawable in the host X. So there should be a
	  peer drawable to begin with.
	* hw/kdrive/ephyr/ephyrdriext.c:
	  (ProcXF86DRIGetDrawableInfo): some cleanups. Properly get the
          the drawable info otherwise there is a host X hang.
	* hw/kdrive/ephyr/ephyrhostglx.c: do not
	  (ephyrHostGLXQueryVersion): do not use C bindings of the glx protocol
	   calls. Some of those actually access DRI context directly, resulting
	   in the context having three clients. Instead all XF86DRI proto
	   fowarding request should be coded by hand and only forward the
	   protocol requests
2007-10-02 16:55:16 +02:00
Dodji Seketeli
a39b57d2f7 Xephyr: add more logging to GLX forwarding
* hw/kdrive/ephyr/ephyrhostglx.c: added more logging.
2007-10-02 16:55:16 +02:00
Dodji Seketeli
9e192d2118 Xephyr: better error handling in GLX forwarding
* hw/kdrive/ephyr/ephyrglxext.c:
	  fixed various logging functions
	  (ephyrGLXGetStringReal): make sure all the string is sent to clients
	  including the ending zero.
	* hw/kdrive/ephyr/ephyrhostglx.c:
	  (ephyrHostGLXGetStringFromServer): better error handling.
	  (ephyrHostGLXSendClientInfo): ditto.
	  (ephyrHostGLXMakeCurrent): ditto
2007-10-02 16:55:16 +02:00
Dodji Seketeli
4dd4be99df Xephyr: Make glxinfo work on the ATI R200 free driver.
* hw/kdrive/ephyr/ephyr.c:
	  (EphyrDuplicateVisual): when duplicating the
	  visual, copy the color component masks and the class
	  from the hostX
	  (EphyrMirrorHostVisuals): don't mix blue and green mask.
	* hw/kdrive/ephyr/ephyrdri.c: add more logs.
	  (ephyrDRICreateDrawable): actually implement this.
	  for the moment it creates a DRI drawable for the hostX window,
	  no matter what drawable this call was issued for.
	  (ephyrDRIGetDrawableInfo): actually implemented this.
	  for the moment the drawable info queried for its attrs is the
	  Xephyr main main window.
	* hw/kdrive/ephyr/ephyrdriext.c:
	  (ProcXF86DRIGetDrawableInfo): properly hook this dispatch
	  function to the ephyrDRIGetDrawableInfo() function.
	* hw/kdrive/ephyr/ephyrglxext.c: add a bunch of GLX implementation hooks
	  here. Hijack some of the xserver GLX hooks with them. Still need to
	  properly support byteswapped clients though.
	* hw/kdrive/ephyr/ephyrhostglx.c,h: actually implemented the protocol
	  level forwarding functions used by the GLX entr points in
	  ephyrglxext.c. Here as well, there are a bunch of them, but we are
	  far from having implemented all the GLX calls.
	* hw/kdrive/ephyr/hostx.c,h:
	  (hostx_get_window_attributes): added this new entry point
	  (hostx_allocate_resource_id_peer): added this to keep track of
	   resource IDs peers: one member of the peer is in Xephyr, the other
	   is in host X.
	  (hostx_get_resource_id_peer): ditto.
2007-10-02 16:55:16 +02:00
Dodji Seketeli
024abe825c Xephyr: add logging in the DRI extension 2007-10-02 16:55:15 +02:00
Dodji Seketeli
1dd589410c mirror the visuals of the host X at startup.
* hw/kdrive/ephyr/ephyr.c: make Xephyr mirror
	  the visuals of the host X upon startup. This
	  is important for GLX client apps.
	* hw/kdrive/ephyr/hostx.c,h: add a hostx_get_visuals_info()
	  to get the visuals of the host X.
2007-10-02 16:55:15 +02:00
Dodji Seketeli
26da625055 proxy the glXGetFBConfigSGIX call
* hw/kdrive/ephyr/ephyrglxext.c:
	  (ephyrGLXGetFBConfigsSGIX): proxy the GLXGetFBConfigsSGIX call.
	  It is a vendor extension to get the visual configs as a list of
	  name/value pairs.
	  (ephyrHijackGLXExtension): hijack the VendorPriv_dispatch_info
	  dispatch table to register our implementation of GLXGetFBConfigsSGIX
	  (ephyrGLXGetFBConfigsSGIXReal): added this where the real
	   implementation of GLXGetFBConfigsSGIX is. It support bytes swapping.
	  (ephyrGLXGetFBConfigsSGIX,ephyrGLXGetFBConfigsSGIXSwap): these are
	  the dispatch entry points. They just call
	  ephyrGLXGetFBConfigsSGIXReal.
	* hw/kdrive/ephyr/ephyrhostglx.c,h: reorganize the proxies to get
	  visual params from the host so that they clearly support the different
	  methods of doing so.
2007-10-02 16:55:15 +02:00
Dodji Seketeli
5af73f98c4 EPHYR: Add an experiment proto proxy extension.
* hw/kdrive/ephyr/Makefile.am: add the proxy extension to
	  ephyr. The proxy extension is an experimental extension that
	  forwards protocol packets targeted at a given extension to the
	  host X.
	* hw/kdrive/ephyr/ephyr.c: init proxy ext.
	* hw/kdrive/ephyr/ephyrhostproxy.c,h: added this new file as part of the
	  proxy extension.
	* hw/kdrive/ephyr/ephyrproxyext.c,h: ditto
	* hw/kdrive/ephyr/hostx.c: add the hostx_get_get_extension_info() entry
	  point.
2007-10-02 16:55:15 +02:00
Dodji Seketeli
c06fa924b4 XEPHYR: more GLX/DRI proxying work.
* hw/kdrive/ephyr/XF86dri.c: re format this correctly.
	  Make function decls honour the Ansi-C standard.
	* hw/kdrive/ephyr/ephyr.c: protect glx/dri related
	  extension initialisation with the XEPHYR_DRI
	  macro. Initialize the GLX ext hijacking
	  at startup.
	* hw/kdrive/ephyr/ephyrdri.c: add more logging to ease debugging
	* hw/kdrive/ephyr/ephyrdriext.c: ditto. reformat.
	* hw/kdrive/ephyr/ephyrglxext.c,h: add this extension to
	  proxy GLX requests to the host X. started to proxy those nedded to
	  make glxinfo work with fglrx. Not yet finished.
	* hw/kdrive/ephyr/ephyrhostglx.c,h: put here the actual
	  Xlib code used to hit the host X server because Xlib stuff cannot be
	  mixed with xserver internal code, otherwise compilation erros due to
	  type clashes happen. So no Xlib type should be exported by the
	  entrypoints defined here.
2007-10-02 16:55:15 +02:00
Dodji Seketeli
0b85451449 Implement ReputImage and StopVideo
* hw/kdrive/ephyr/ephyrhostvideo.c/h:
	  (ephyrHostXVStopVideo): add this entry point.
	* hw/kdrive/ephyr/ephyrvideo.c:
	  Basically add ReputImage and StopVideo implementations.
	  Now, when other windows obscur the video window, the reclipping
	  seems to be well handled using StopVideo and ReputImage.
	  To do this, I was obliged to save the frame in PutImage, so
	  that I could resend it un ReputImage.
2007-10-02 16:55:14 +02:00
Dodji Seketeli
810dc55866 Ephyr-Xv: add a new line to a log
* hw/kdrive/ephyr/ephyrvideo.c:
	  (ephyrQueryImageAttributes): add newline to log.
2007-10-02 16:55:14 +02:00
Dodji Seketeli
47e6dff89e Xephyr-Xv: fix a crash when host X support several ports
* hw/kdrive/ephyr/ephyrvideo.c:
	  (ephyrXVPrivQueryHostAdaptors): properly set
	  port private luke. This fixes a crash when
	  the host Xv supports multiple ports.
	  Make sure number of ports cannot be zero.
2007-10-02 16:55:14 +02:00
Dodji Seketeli
a38ad562a6 make xephyr talk DRI protocol with hostX
* configure.ac,include/dix-config.h.in: define the XEPHYR_DRI macro.
	  define it when --enable-xephyr and --enable-dri are both turned on.
	* hw/kdrive/ephyr/XF86dri.c: copy this from mesa source to enable
	  Xephyr to talk DRI protocol the host X. In mesa, this is used by libGL.so to
	  talk DRI protocol with the server.
	* hw/kdrive/ephyr/ephyr.c: finally initialise the DRI extension
	  in the ephyrInitScreen() function.
	* hw/kdrive/ephyr/ephyrdri.c,ephyrdriext.c: safeguard the compilation
	  using the XEPHYR_DRI macro.
2007-10-02 16:55:14 +02:00
Dodji Seketeli
e4239a4807 Initial dri forwarding big bricks.
* hw/kdrive/ephyr/ephyrdriext.c: added this to implement a DRI extension
	  into Xephyr. Normally the DRI extension is only present in the
	  xfree86 server, but I have ported it to Xephyr. The extension calls
	  functions that declared/defined in ephyrdri.h ephyrdri.c that
	  forwards the DRI calls to the host X. It does not work yet, as this
	  entry is just to put the big bricks in place.
	* hw/kdrive/ephyr/ephyrdri.c,h: declaration & definition of the
	  DRI client API that would hit the hostX server.
	* hw/kdrive/ephyr/GL/internal/dri_interface.h: added this, otherwise
	  inclusion of /usr/include/X11/dri/xf86dri.h won't compile
2007-10-02 16:55:14 +02:00
Dodji Seketeli
e01d3dd98d Support clipping region in PutImage.
* hw/kdrive/ephyr/ephyrhostvideo.c,h:
	  (ephyrHostXVPutImage): make this support clipping region.
	  The clipping region is propagated to host using XSetClipRectangles.
	  This changes the API of ephyrHostXVPutImage.
	* hw/kdrive/ephyr/ephyrvideo.c:
	  (ephyrPutImage): propagate the clipping region to the new
	  ephyrHostXVPutImage() entry point.
2007-10-02 16:55:14 +02:00