Convert LinuxDoc documents to DocBook/XML

Only the markup/formatting is changed - the contents should still
be wildly out of date for now.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Rémi Cardona <remi@gentoo.org>
Tested-by: Gaetan Nadon <memsize@videotron.ca>
This commit is contained in:
Alan Coopersmith 2010-05-14 14:56:09 -07:00
parent ebd745ced8
commit fc6ebe1e1d
8 changed files with 11353 additions and 8697 deletions

View File

@ -716,10 +716,9 @@ fi
dnl Handle building documentation
AM_CONDITIONAL(BUILDDOCS, test "x$BUILDDOCS" = xyes)
dnl Only build sgml docs when linuxdoc is available and
dnl def.ents has been installed
XORG_CHECK_LINUXDOC
XORG_ENABLE_DEVEL_DOCS
XORG_WITH_XMLTO(0.0.20)
XORG_WITH_FOP
dnl Handle installing libxf86config
AM_CONDITIONAL(INSTALL_LIBXF86CONFIG, [test "x$INSTALL_LIBXF86CONFIG" = xyes])

59
doc/xml/xmlrules.in Normal file
View File

@ -0,0 +1,59 @@
#
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice (including the next
# paragraph) shall be included in all copies or substantial portions of the
# Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
#
# This file is included by Makefile.am in subdirectories that have
# DocBook XML documentation files.
#
# No files are automatically distributed or installed by this subset of rules
# Any files to be distributed or installed would be listed in the including
# Makefile.am
TXT_FILES = $(XML_FILES:%.xml=%.txt)
HTML_FILES = $(XML_FILES:%.xml=%.html)
PDF_FILES = $(XML_FILES:%.xml=%.pdf)
BUILT_DOC_FILES =
SUFFIXES = .xml .txt .html .pdf
if HAVE_XMLTO
BUILT_DOC_FILES += $(TXT_FILES)
.xml.txt:
@rm -f $@
$(AM_V_GEN)$(XMLTO) txt $<
BUILT_DOC_FILES += $(HTML_FILES)
.xml.html:
@rm -f $@
$(AM_V_GEN)$(XMLTO) xhtml-nochunks $<
if HAVE_FOP
BUILT_DOC_FILES += $(PDF_FILES)
.xml.pdf:
@rm -f $@
$(AM_V_GEN)$(XMLTO) --with-fop pdf $<
endif
endif
CLEAN_DOC_FILES = $(TXT_FILES) $(HTML_FILES) $(PDF_FILES)

View File

@ -19,37 +19,14 @@
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
SGML_FILES = dmx.sgml scaled.sgml
XML_FILES = dmx.xml scaled.xml
if BUILD_LINUXDOC
TXT_FILES = $(SGML_FILES:%.sgml=%.txt)
PS_FILES = $(SGML_FILES:%.sgml=%.ps)
if BUILD_PDFDOC
PDF_FILES = $(SGML_FILES:%.sgml=%.pdf)
endif
HTML_FILES = $(SGML_FILES:%.sgml=%.html)
SUFFIXES = .sgml .txt .html .ps .pdf
.sgml.txt:
@rm -f $@
$(AM_V_GEN)$(MAKE_TEXT) $<
.sgml.ps:
@rm -f $@
$(AM_V_GEN)$(MAKE_PS) $<
.ps.pdf:
@rm -f $@
$(AM_V_GEN)$(MAKE_PDF) $<
.sgml.html:
@rm -f $@
$(AM_V_GEN)$(MAKE_HTML) $<
noinst_DATA = $(TXT_FILES) $(PS_FILES) $(PDF_FILES) $(HTML_FILES)
CLEANFILES = $(TXT_FILES) $(PS_FILES) $(PDF_FILES) $(HTML_FILES)
include ../../../doc/xml/xmlrules.in
if ENABLE_DEVEL_DOCS
noinst_DATA = $(BUILT_DOC_FILES)
endif
CLEANFILES = $(CLEAN_DOC_FILES)
if HAVE_DOXYGEN
@ -67,7 +44,7 @@ maintainer-clean-local:
endif
EXTRA_DIST = \
$(SGML_FILES) \
$(XML_FILES) \
DMXSpec.txt \
DMXSpec-v1.txt \
dmx.txt \

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +1,34 @@
<!DOCTYPE linuxdoc PUBLIC "-//XFree86//DTD linuxdoc//EN">
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
]>
<article>
<articleinfo>
<!-- Title information -->
<title>Scaled Window Support in DMX</title>
<author>Rickard E. Faith and Kevin E. Martin</author>
<date>15 October 2003 (created 19 September 2003)</date>
<authorgroup>
<author><firstname>Kevin E.</firstname><surname>Martin</surname></author>
<author><firstname>Rickard E.</firstname><surname>Faith</surname></author>
</authorgroup>
<pubdate>15 October 2003 (created 19 September 2003)</pubdate>
<abstract>
<para>
This document investigates the possibility of adding scaled window
support to the DMX X server, thereby allowing a window or some
selected part of the logical DMX area to be displayed using a
scaling factor. For example, this might allow the contents of a
window to be magnified for easier viewing. In particular, scaling
for the VNC client is explored. <it>Copyright 2003
by Red Hat, Inc., Raleigh, North Carolina</it>
for the VNC client is explored. <emphasis remap="it">Copyright 2003
by Red Hat, Inc., Raleigh, North Carolina</emphasis>
</para>
</abstract>
</articleinfo>
<!-- Table of contents -->
<toc>
<!-- Begin the document -->
<sect>Introduction
<sect1>DMX
<p>
<sect1><title>Introduction</title>
<sect2><title>DMX</title>
<para>
The DMX X server (Xdmx) is a proxy server that is designed
to allow X servers on multiple machines to be combined into
a single multi-headed X server. Combined with Xinerama,
@ -29,86 +36,86 @@
screen. Typical applications include the creation of a
video wall with 16 1280x1024 displays arranged in a
rectangle, for a total resolution of of 5120x4096.
</p>
</sect1>
<sect1>Problem Statement
<p>
</para>
</sect2>
<sect2><title>Problem Statement</title>
<para>
Applications displayed on a physically large video wall that
provides high pixel-resolution may be difficult to see,
especially if the application is designed for use on a
typical desktop computer with a relatively small display
located close to the human operator. The goal of this paper
is to describe and discuss solutions to this problem.
</p>
<p>
</para>
<para>
The original driving problem for this work is to provide
scaling for the <tt>vncviewer</tt> application when
scaling for the <command>vncviewer</command> application when
displayed using DMX (VNC scaling is currently available only
with the Windows client, and there is no plan to extend that
capability to other clients). While this specific problem
will be addressed in this paper, the general solution space
will also be explored, since this may lead to a good
solution not only for <tt>vncviewer</tt> but also for
solution not only for <command>vncviewer</command> but also for
other applications.
</p>
</sect1>
<sect1>Task
<p>
</para>
</sect2>
<sect2><title>Task</title>
<para>
For reference, here is the original description of the task
this paper addresses:
<itemize>
<item>Scaled window support (for VNC)
<itemize>
<item>
<itemizedlist>
<listitem><para>Scaled window support (for VNC)
<itemizedlist>
<listitem><para>
Investigate possibility of implementing a "scaled
window" extension:
<itemize>
<item>
<itemizedlist>
<listitem><para>
Add XCreateScaledWindow call that could be used
in place of XCreateWindow
</item>
<item>
</para></listitem>
<listitem><para>
All primitives drawn to scaled window would be
scaled by appropriate (integral?) scaling factor
</item>
</itemize>
</item>
<item>
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
Alternate approach: special case VNC support
</item>
</itemize>
</item>
</itemize>
</p>
</sect1>
</sect>
<sect>Previous Work
<p>
</para></listitem>
</itemizedlist>
</para></listitem>
</itemizedlist>
</para>
</sect2>
</sect1>
<sect1><title>Previous Work</title>
<para>
This section reviews relevant previous work.
</p>
<sect1>VNC
<sect2>Scaling under VNC
<p>
When using the <tt>vncviewer</tt> program for Windows, it
</para>
<sect2><title>VNC</title>
<sect3><title>Scaling under VNC</title>
<para>
When using the <command>vncviewer</command> program for Windows, it
is possible to specify a scaling factor (as numerator and
denominator). When scaling is in effect, the viewer
software uses StretchBlt (instead of BitBlt) to display
the pixels for the user. When this call is made, the
viewer already has received all of the pixel information
(at full unscaled resolution).
</p>
<p>
</para>
<para>
The scaling in VNC is primitive. It does not conserve
bandwidth, it does not treat textual information
differently (i.e., by using a suitably scaled font), and
it does not provide any anti-aliasing other than that
provided by the underlying (Windows-only) system library.
</p>
</sect2>
</sect1>
<sect1>The X Video Extension
<p>
</para>
</sect3>
</sect2>
<sect2><title>The X Video Extension</title>
<para>
The X Video Extension is a widely-available extension to the
X11 protocol that provides support for streaming video.
Integral to this support is the ability to arbitrarily scale
@ -120,58 +127,58 @@
implemented in XFree86 only support data in various YUV
formats. However, several modern video adaptors support RGB
as well.
</p>
<p>
</para>
<para>
Note, though, that the target output for this scaling is an
overlay plane -- so X Video provides functionality that is
fundamentally different from that provided by the Windows
StrechBlt call.
</p>
</sect1>
</sect>
<sect>Possible Solutions
<p>
</para>
</sect2>
</sect1>
<sect1><title>Possible Solutions</title>
<para>
This section briefly discusses possible solutions, including
major advantages and disadvantages from both the
implementation and the end-user programmer standpoint.
</p>
<sect1>VNC-like Scaling
<sect2>Software Scaling
<p>
The <tt>vncviewer</tt> application could be modified to
</para>
<sect2><title>VNC-like Scaling</title>
<sect3><title>Software Scaling</title>
<para>
The <command>vncviewer</command> application could be modified to
provide software scaling. This is not a general solution,
but it does solve one of the goals of this work.
</p>
<p>
</para>
<para>
A prototype of this solution was implemented and a patch
against <tt>vnc-3.3.7-unixsrc</tt> is available in the
<tt>dmx/external</tt> directory. Because of limited time
against <filename>vnc-3.3.7-unixsrc</filename> is available in the
<filename>dmx/external</filename> directory. Because of limited time
available for this work, all of the edge cases were not
considered and the solution works well mainly for integer
scaling.
</p>
<p>
Currently, <tt>vncviewer</tt> writes to the X display
</para>
<para>
Currently, <command>vncviewer</command> writes to the X display
with XPutImage, XCopyArea, and XFillRectangle. All
instances of these calls have to be aware of scaling
and must round correctly. In the prototype solution,
rounding is incorrect and can cause artifacts.
</p>
<p>
</para>
<para>
A better solution would be to cache all updates to the
desktop image in <tt>vncviewer</tt> and only send the
desktop image in <command>vncviewer</command> and only send the
damaged area to the X display with XPutImage. This would
allow the damaged area to be computed so that rounding
errors do not create artifacts. This method is probably
similar to what is used in the Window client. (The whole
VNC suite is being re-written in C++ and the forthcoming
version 4 has not been evaluated.)
</p>
</sect2>
<sect2>Scaling with the X Video Extension
<p>
The scaling in the Windows <tt>vncviewer</tt> application
</para>
</sect3>
<sect3><title>Scaling with the X Video Extension</title>
<para>
The scaling in the Windows <command>vncviewer</command> application
makes use of a scaled blit that is supplied by the
underlying system library. Several video cards currently
provide support for a scaled blit, and some X servers
@ -181,38 +188,38 @@
image being drawn to an overlay plane. Most video cards
also provide support for a scaled blit into the normal
output planes, but this is not exposed via XvPutImage.
</p>
<p>
The <tt>vncviewer</tt> program could be modified to use
</para>
<para>
The <command>vncviewer</command> program could be modified to use
the X Video Extension to provide scaling under X11 that is
similar to the scaling currently provided under Windows.
Unfortunately, Xdmx does not currently export the X Video
Extension, so this would not provide an immediate solution
usable with DMX.
</p>
<p>
</para>
<para>
A very early-stage proof-of-concept prototype was
implemented and a preliminary patch against
<tt>vnc-3.3.7-unixsrc</tt> is available in the
<tt>dmx/external</tt> directory. This prototype was
<filename>vnc-3.3.7-unixsrc</filename> is available in the
<filename>dmx/external</filename> directory. This prototype was
implemented to better understand the problems that must be
solved to make this solution viable:
<itemize>
<item>
<itemizedlist>
<listitem><para>
As noted under the software scaling section above,
<tt>vncviewer</tt> writes to the X display with
<command>vncviewer</command> writes to the X display with
several different calls. These calls write to the
normal output planes and are compatible with
XvPutImage, which writes to an overlay plane. To
eliminate artifacts caused by this problem,
<tt>vncviewer</tt> should be modified so that a cached
<command>vncviewer</command> should be modified so that a cached
copy of the desktop is available, either as a
client-side image or a server-side off-screen pixmap,
so that XvPutImage would be the only method for
writing to the X display.
</item>
<item>
<p>
</para></listitem>
<listitem>
<para>
Although several modern graphics adaptors support
hardware scaling using an RGB format (e.g., ATI
Radeon, nVidia, etc.), XFree86 drivers typically
@ -226,7 +233,8 @@
wire, additional artifacts are introduced (because
there may not be enough information from the wire to
update a pair of pixels).
<p>
</para>
<para>
Further, the well-known problem with YUV encoding
is even more evident when the image is a desktop
instead of a movie. For example, consider a
@ -237,26 +245,28 @@
depending on the algorithm used for RGB to YUV
conversion and on how the border pixel is ordered in
the pair of pixels used by the algorithm.
<p>
</para>
<para>
Many of these artifacts could be eliminated if
<tt>vncviewer</tt> cached a complete RGB image of
<command>vncviewer</command> cached a complete RGB image of
the desktop, and only did the conversion to YUV for
properly aligned areas of damage. The remaining artifacts
could be eliminated if an RGB format was used with X
Video (which may require the extension of existing
XFree86 drivers to support RGB).
</item>
<item>
</para>
</listitem>
<listitem><para>
Most modern video cards support exactly one overlay
plane that is suitable for use with X Video.
Therefore, only one application can use X Video at any
given time. This is a severe limitation in a desktop
environment.
</item>
</itemize>
</p>
<sect3>Implementing the X Video Extension for DMX
<p>
</para></listitem>
</itemizedlist>
</para>
<sect4><title>Implementing the X Video Extension for DMX</title>
<para>
The user-level API for X Video is fairly simple, but the
underlying support required for the full specification
is large. However, since the API provides a method to
@ -264,56 +274,56 @@
Video can be implemented that would support XvPutImage
and little else. This would require support for the
following:
<itemize>
<item>
<itemizedlist>
<listitem><para>
X Video Extension API calls, including the
following:
<itemize>
<item>XvQueryExtension</item>
<item>XvQueryAdaptors</item>
<item>XvQueryPortAttributes</item>
<item>XvFreeAdaptorInfo</item>
<item>XvListImageFormats</item>
<item>XvGrabPort</item>
<item>XvCreateImage</item>
<item>XvPutImage</item>
<item>XvShmCreateImage</item>
<item>XvShmPutImage</item>
</itemize>
</item>
<item>
<itemizedlist>
<listitem><para>XvQueryExtension</para></listitem>
<listitem><para>XvQueryAdaptors</para></listitem>
<listitem><para>XvQueryPortAttributes</para></listitem>
<listitem><para>XvFreeAdaptorInfo</para></listitem>
<listitem><para>XvListImageFormats</para></listitem>
<listitem><para>XvGrabPort</para></listitem>
<listitem><para>XvCreateImage</para></listitem>
<listitem><para>XvPutImage</para></listitem>
<listitem><para>XvShmCreateImage</para></listitem>
<listitem><para>XvShmPutImage</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
Support for querying back-end X Video Extension
capabilities.
</item>
<item>
</para></listitem>
<listitem><para>
Support for sending the image to the back-ends.
Because X Video requires sending full images, there
may be a trade-off between bandwidth limitations and
additional complexity to divide the image up such
that is scales properly.
</item>
<item>
</para></listitem>
<listitem><para>
Possible support for a software fall-back. For
example, if all of the back-ends do not support the X
Video Extension, software scaling can be implemented
such that the image is sent to the back-end with
XPutImage. This pathway would have poor
performance.
</item>
</itemize>
</p>
</sect3>
<sect3>Supporting RGB formats for the X Video Extension
<p>
</para></listitem>
</itemizedlist>
</para>
</sect4>
<sect4><title>Supporting RGB formats for the X Video Extension</title>
<para>
Assuming an XFree86 driver already supports the X Video
Extension, and assuming the target hardware supports an
RGB format, then adding support for that format is
relatively simple and straightforward.
</p>
</sect3>
</sect2>
<sect2>Scaling with an XPutImageScaled Extension
<p>
</para>
</sect4>
</sect3>
<sect3><title>Scaling with an XPutImageScaled Extension</title>
<para>
Instead of (or in addition to) implementing the X Video
Extension in DMX, one obvious solution would be to
implement a new extension that provides access to
@ -321,59 +331,59 @@
call available under Windows. This call would scale RGB
images and would not use the overlay plane (unlike the X
Video Extension).
</p>
<p>
</para>
<para>
This approach has many of the same advantages and
disadvantages as the XCopyAreaScaled Extension, discussed
in the next section. Discussion of XPutImageScaled is
deferred in favor of XCopyAreaScaled for the following
reasons:
<itemize>
<item>
<itemizedlist>
<listitem><para>
XPutImageScaled can be emulated with XCopyAreaScaled
by first using XPutImage to copy the image to an
off-screen pixmap, and then calling XCopyAreaScaled
between that off-screen pixmap and the target
drawable.
</item>
<item>
</para></listitem>
<listitem><para>
Since XCopyAreaScaled would copy between two areas of
on-screen or off-screen memory, it has additional uses
and can be viewed as efficiently providing a superset
of XPutImageScaled functionality.
</item>
</itemize>
</p>
</sect2>
<sect2>Scaling with an XCopyAreaScaled Extension
<p>
</para></listitem>
</itemizedlist>
</para>
</sect3>
<sect3><title>Scaling with an XCopyAreaScaled Extension</title>
<para>
As noted in the previous section, because XCopyAreaScaled
provides a superset of the functionality provided by
XPutImageScaled, we will consider this extension instead.
</p>
<p>
</para>
<para>
First, XCopyAreaScaled would provide for RGB scaling
between pixmaps (i.e., on-screen or off-screen areas of
memory that reside on the video card). Unlike the X Video
Extension, which writes into an overlay plane,
XCopyAreaScaled would write into the non-overlay areas of
the screen. Key points to consider are as follows:
<itemize>
<item>
<itemizedlist>
<listitem><para>
Because different planes are involved, the two scaling
operations are usually implemented in hardware
differently, so an XCopyAreaScaled extension could be
added in a manner that would neither conflict with nor
interact with the X Video extension in any way.
</item>
<item>
</para></listitem>
<listitem><para>
The XCopyAreaScaled extension provides new
functionality that the X Video Extension does not
provide. Based on anecdotal feedback, we believe that
many people outside the DMX and VNC communities would
be excited about this extension.
</item>
<item>
</para></listitem>
<listitem><para>
The main drawback to this extension is that it is new
and needs to be implemented at the driver level in
XFree86 for each video card to be supported. At the
@ -384,8 +394,8 @@
XCopyAreaScaled extension to be implemented along with
the X Video extension, especially if it becomes
popular.
</item>
<item>
</para></listitem>
<listitem><para>
Another drawback is that not all modern cards provide
support for a simple scaled blit operation. However,
these cards usually do provide a 3D pipeline which
@ -394,12 +404,12 @@
that is using the XCopyAreaScaled extension. However,
this implementation pathway would make this extension
somewhat more difficult to implement on certain cards.
</item>
</itemize>
</p>
</sect2>
<sect2>Scaling with OpenGL
<p>
</para></listitem>
</itemizedlist>
</para>
</sect3>
<sect3><title>Scaling with OpenGL</title>
<para>
Another general solution to the scaling problem is to use
the texture scaling found in all 3D hardware. This
ability is already exposed through OpenGL and can be
@ -411,8 +421,8 @@
around the single overlay problem with the X Video
Extension as well as the need to implement additional
scaled primitive extensions.
</p>
<p>
</para>
<para>
The downside is that most OpenGL implementations require
power of 2 texture sizes and this can be very wasteful of
memory if, for example, the application needs to scale a
@ -422,18 +432,18 @@
implementations have a limited about of texture memory and
cannot handle textures that are very large. For example,
they might limit the texture size to 1024x1024.
</p>
</sect2>
</sect1>
<sect1>Application-transparent Scaling for DMX
<sect2>Back-end Scaling Without Disconnect/Reconnect
<p>
</para>
</sect3>
</sect2>
<sect2><title>Application-transparent Scaling for DMX
</title><sect3><title>Back-end Scaling Without Disconnect/Reconnect</title>
<para>
VNC does scaling on the client side (in the
<tt>vncviewer</tt> application). Implementing a similar
<command>vncviewer</command> application). Implementing a similar
solution for DMX would require support in the back-end X
servers and, therefore, is not a general solution.
</p>
<p>
</para>
<para>
XFree86 already implements some support for "scaling" that
could be used with DMX: if, in the XF86Config file,
multiple Modes are listed in the Display Subsection of the
@ -443,15 +453,15 @@
dimensions in the Modes line, but the logical dimensions
of the X server (i.e., the dimensions that Xdmx knows
about) will not change.
</p>
<p>
</para>
<para>
Further, the dimensions of the XFree86 display are under
software control (via the XFree86-VidModeExtension), so
the Xdmx server could change the screen dimensions on a
per-display basis, thereby scaling the information on part
of that display.
</p>
<p>
</para>
<para>
However, this scaling appears to have limited use. For
example, assume a 4 by 4 display wall consisting of 16
1280x1024 displays. If all of the back-end servers were
@ -461,31 +471,31 @@
display at a time could be usable, but could have limited
utility, since the result would still be no larger than a
single display.
</p>
</sect2>
<sect2>Back-end Scaling With Disconnect/Reconnect
<p>
</para>
</sect3>
<sect3><title>Back-end Scaling With Disconnect/Reconnect</title>
<para>
Disconnect and reconnect features are not currently
supported in DMX, but are scheduled to be implemented in
the future. These features, combined with the
XFree86-VidModeExtension Extension, would allow an
application to do the following:
<itemize>
<item>
<itemizedlist>
<listitem><para>
Disconnect a specific back-end server (via the DMX
Extension),
</item>
<item>
</para></listitem>
<listitem><para>
reconfigure the XFree86 back-end server resolution,
and
</item>
<item>
and
</para></listitem>
<listitem><para>
reconnect the back-end server to DMX -- at a new
origin with the new screen resolution.
</item>
</itemize>
</p>
<p>
</para></listitem>
</itemizedlist>
</para>
<para>
For example, consider a display wall consisting of 16
1280x1024 displays with a total resolution of 5120x4096.
All of the screens could be disconnected, repositioned,
@ -498,18 +508,18 @@
the increased resolution was completed, the back-end
servers could be disconnected, reconfigured, and
reconnected for the original 5120x4096 view.
</p>
<p>
</para>
<para>
Support for this type of scaling can be implemented in a
DMX-aware X11 client assuming the DMX server support
arbitrary disconnect and reconnect semantics. Because
this application cannot be written before
disconnect/reconnect is implemented, this solution will
not be discussed further in this paper.
</p>
</sect2>
<sect2>Server-side Scaling
<p>
</para>
</sect3>
<sect3><title>Server-side Scaling</title>
<para>
In earlier versions of DMX, a frame buffer was maintained
on the server side, and XPutImage was used to move the
information from the server to the client (similar to some
@ -518,14 +528,14 @@
not a recommended solution because of overall performance
issues and server-side memory issues (i.e., the frame
buffer would be very large for large display walls).
</p>
<p>
</para>
<para>
Exploration of this path is not recommended.
</p>
</sect2>
</sect1>
<sect1>XCreateScaledWindow API
<p>
</para>
</sect3>
</sect2>
<sect2><title>XCreateScaledWindow API</title>
<para>
The implementation of X Video Extension in DMX, and the use
of XvPutImage by applications requiring scaling requires
significant changes in DMX Further, XvPutImage is,
@ -533,8 +543,8 @@
applications which are already using (or can be modified to
use) XPutImage. Therefore, a more general API will be
discussed as another possibility.
</p>
<p>
</para>
<para>
X applications typically create windows with the
XCreateWindow call. A new extension could provide an
XCreateScaledWindow call that could be used in place of the
@ -544,33 +554,33 @@
scaling. In this section we describe how the call would
work, what transparency it provides, and how to solve the
potential problems that transparency creates.
</p>
<sect2>XCreateWindow
<p>
</para>
<sect3><title>XCreateWindow</title>
<para>
The XCreateWindow call takes width and height as
parameters. An XCreateScaledWindow call could take all
the same parameters, with the addition of a scaling factor.
</p>
</sect2>
<sect2>XSetWindowAttributes
<p>
</para>
</sect3>
<sect3><title>XSetWindowAttributes</title>
<para>
An X11 window has several attributes that would have to be
scaled:
<itemize>
<item>Background and border pixmaps</item>
<item>Border width</item>
<item>Cursor</item>
</itemize>
</p>
</sect2>
<sect2>XGetWindowAttributes, XGetGeometry
<p>
<itemizedlist>
<listitem><para>Background and border pixmaps</para></listitem>
<listitem><para>Border width</para></listitem>
<listitem><para>Cursor</para></listitem>
</itemizedlist>
</para>
</sect3>
<sect3><title>XGetWindowAttributes, XGetGeometry</title>
<para>
For transparency, calls that query the window attributes
should return unscaled information. This suggests that
all unscaled pixmaps and window attributes should be
cached.
</p>
<p>
</para>
<para>
Unfortunately, a window manager requires the scaled
geometry to properly decorate the window. The X server
can probably determine which client is acting as the
@ -581,26 +591,26 @@
least two additional extension calls should be
implemented: XGetScaledWindowAttributes and
XGetScaledGeometry.
</p>
</sect2>
<sect2>Popup and Child window positions
<p>
</para>
</sect3>
<sect3><title>Popup and Child window positions</title>
<para>
Some applications may position popup and child windows
based on an unscaled notion of the main window geometry.
In this case, additional modifications to the client would
be required.
</p>
</sect2>
<sect2>Events
<p>
</para>
</sect3>
<sect3><title>Events</title>
<para>
Most events (e.g., for mouse motion) return information
about the coordinates at which the even occurred. These
coordinates would have to be modified so that unscaled
values were presented to the client.
</p>
</sect2>
<sect2>Implementation
<p>
</para>
</sect3>
<sect3><title>Implementation</title>
<para>
There are many implementation issues, some of which are
similar to the issues involved in implementing the X Video
Extension for DMX. The window contents must be scaled,
@ -610,25 +620,26 @@
various drawing operations to perform scaling. Because of
the complexity involved, the frame buffer option is
recommended.
</p>
</sect2>
</sect1>
</sect>
<sect>Conclusion and Recommendations
<p>
</para>
</sect3>
</sect2>
</sect1>
<sect1><title>Conclusion and Recommendations
</title><para>
We recommend a three phase implementation strategy, based on
how an application could be written to take advantage of
scaling:
<enum>
<item>
<p>
<orderedlist>
<listitem>
<para>
The XCopyAreaScaled extension should be implemented, since
this is the ideal solution for applications like VNC, and
since making use of this extension will require minimal
changes to applications that already use XPutImage or
XCopyArea.
<p>
</para>
<para>
The initial implementation work would include the design
of the X protocol extension, writing this up in the
usual format for extension documentation, implementation
@ -636,7 +647,8 @@
implementation of a software fall-back in XFree86 and
DMX, one example hardware implementation for XFree86,
and implementation of support for this extension in DMX.
<p>
</para>
<para>
We suggest implementing the extension first on the ATI
Radeon cards. However, since these cards do not provide
a 2D scaled blit primitive, the implementation would
@ -645,62 +657,68 @@
graphics cards also do not provide a simple 2D scaled
blit operation and an example of the more difficult
implementation pathway would be helpful to others.
</item>
<item>
<p>
</para>
</listitem>
<listitem>
<para>
Until XCopyAreaScaled is widely supported, applications
that require scaling will have to fall back to another
scaling method. We suggest OpenGL as the first fall-back
method because it is widely available and supported by
DMX.
<p>
</para>
<para>
A project centered around OpenGL-based scaling would
implement this scaling in VNC as an example. This work
would include re-writing the <tt>vncviewer</tt>
would include re-writing the <command>vncviewer</command>
rendering engine to cache a master copy of the desktop
image for all operations.
</item>
<item>
<p>
</para>
</listitem>
<listitem>
<para>
Since OpenGL is not implemented everywhere, and may not
provide hardware-assisted performance in every
implementation, an application that requires scaling
should also fall back to using the X Video Extension.
<p>
</para>
<para>
This project would add support for the X Video Extension
to DMX and would add support to VNC to take advantage of
this extension without introducing artifacts. This
would require modifying the <tt>vncviewer</tt> rendering
would require modifying the <command>vncviewer</command> rendering
engine to cache a master copy of the desktop image for
all operations. This project should also add support
for the RGB format to at least one XFree86 driver (e.g.,
ATI Radeon).
<p>
</para>
<para>
The X Video Extension is one of the few popular
extensions that DMX does not support. We recommend
implementing the X Video Extension even if scaling is
the specific goal of that work.
</item>
</enum>
</p>
<p>
We do <bf>not</bf> recommend implementation of the
</para>
</listitem>
</orderedlist>
</para>
<para>
We do <emphasis>not</emphasis> recommend implementation of the
XCreateScaledWindow extension because of the complexity
involved. We do <bf>not</bf> recommend implementation of the
involved. We do <emphasis>not</emphasis> recommend implementation of the
XPutImageScaled extension because it requires the same amount
of work as the XCopyAreaScaled extension, but provides less
functionality. Further, server-side scaling with a large
frame buffer is <bf>not</bf> recommended because of the
frame buffer is <emphasis>not</emphasis> recommended because of the
performance implications.
</p>
<p>
</para>
<para>
The back-end scaling, especially with disconnect/reconnect
support should be explored in the future after
disconnect/reconnect is implemented, but not at the present
time.
</p>
</sect>
</para>
</sect1>
</article>
<!-- Local Variables: -->
<!-- fill-column: 72 -->

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -19,36 +19,13 @@
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
SGML_FILES = DESIGN.sgml
XML_FILES = DESIGN.xml
if BUILD_LINUXDOC
TXT_FILES = $(SGML_FILES:%.sgml=%.txt)
PS_FILES = $(SGML_FILES:%.sgml=%.ps)
if BUILD_PDFDOC
PDF_FILES = $(SGML_FILES:%.sgml=%.pdf)
include ../../../../doc/xml/xmlrules.in
if ENABLE_DEVEL_DOCS
noinst_DATA = $(BUILT_DOC_FILES)
endif
HTML_FILES = $(SGML_FILES:%.sgml=%.html)
CLEANFILES = $(CLEAN_DOC_FILES)
SUFFIXES = .sgml .txt .html .ps .pdf
.sgml.txt:
@rm -f $@
$(AM_V_GEN)$(MAKE_TEXT) $<
.sgml.ps:
@rm -f $@
$(AM_V_GEN)$(MAKE_PS) $<
.ps.pdf:
@rm -f $@
$(AM_V_GEN)$(MAKE_PDF) $<
.sgml.html:
@rm -f $@
$(AM_V_GEN)$(MAKE_HTML) $<
noinst_DATA = $(TXT_FILES) $(PS_FILES) $(PDF_FILES) $(HTML_FILES)
CLEANFILES = $(TXT_FILES) $(PS_FILES) $(PDF_FILES) $(HTML_FILES)
endif
EXTRA_DIST = $(SGML_FILES)
EXTRA_DIST = $(XML_FILES)