mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2024-11-22 08:04:04 +01:00
Merge branch 'feature/KASM-3806_hw3d' into 'master'
Resolve KASM-3806 "Feature/ hw3d" Closes KASM-3806 See merge request kasm-technologies/internal/KasmVNC!89
This commit is contained in:
commit
47bdc828c1
@ -101,6 +101,9 @@ desktop:
|
|||||||
height: 768
|
height: 768
|
||||||
allow_resize: true
|
allow_resize: true
|
||||||
pixel_depth: 24
|
pixel_depth: 24
|
||||||
|
gpu:
|
||||||
|
hw3d: false
|
||||||
|
drinode: /dev/dri/renderD128
|
||||||
|
|
||||||
network:
|
network:
|
||||||
protocol: http
|
protocol: http
|
||||||
@ -255,6 +258,7 @@ command_line:
|
|||||||
- Cursor lock
|
- Cursor lock
|
||||||
- IME support for languages with extended characters
|
- IME support for languages with extended characters
|
||||||
- Better mobile support
|
- Better mobile support
|
||||||
|
- DRI3 GPU acceleration with open source drivers (AMDGPU,Intel,ATI,ARM)
|
||||||
|
|
||||||
Future Goals:
|
Future Goals:
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ cd /tmp
|
|||||||
# default to the version of x in Ubuntu 18.04, otherwise caller will need to specify
|
# default to the version of x in Ubuntu 18.04, otherwise caller will need to specify
|
||||||
XORG_VER=${XORG_VER:-"1.19.6"}
|
XORG_VER=${XORG_VER:-"1.19.6"}
|
||||||
XORG_PATCH=$(echo "$XORG_VER" | grep -Po '^\d.\d+' | sed 's#\.##')
|
XORG_PATCH=$(echo "$XORG_VER" | grep -Po '^\d.\d+' | sed 's#\.##')
|
||||||
wget --no-check-certificate https://www.x.org/archive/individual/xserver/xorg-server-${XORG_VER}.tar.bz2
|
wget --no-check-certificate https://www.x.org/archive/individual/xserver/xorg-server-${XORG_VER}.tar.gz
|
||||||
|
|
||||||
#git clone https://kasmweb@bitbucket.org/kasmtech/kasmvnc.git
|
#git clone https://kasmweb@bitbucket.org/kasmtech/kasmvnc.git
|
||||||
#cd kasmvnc
|
#cd kasmvnc
|
||||||
@ -64,9 +64,10 @@ cmake -D CMAKE_BUILD_TYPE=RelWithDebInfo . -DBUILD_VIEWER:BOOL=OFF \
|
|||||||
-DENABLE_GNUTLS:BOOL=OFF
|
-DENABLE_GNUTLS:BOOL=OFF
|
||||||
make -j5
|
make -j5
|
||||||
|
|
||||||
tar -C unix/xserver -xf /tmp/xorg-server-${XORG_VER}.tar.bz2 --strip-components=1
|
tar -C unix/xserver -xf /tmp/xorg-server-${XORG_VER}.tar.gz --strip-components=1
|
||||||
|
|
||||||
cd unix/xserver
|
cd unix/xserver
|
||||||
|
# Apply patches
|
||||||
patch -Np1 -i ../xserver${XORG_PATCH}.patch
|
patch -Np1 -i ../xserver${XORG_PATCH}.patch
|
||||||
case "$XORG_VER" in
|
case "$XORG_VER" in
|
||||||
1.20.*)
|
1.20.*)
|
||||||
@ -85,23 +86,40 @@ autoreconf -i
|
|||||||
# everything after that is based on BUILDING.txt to remove unneeded
|
# everything after that is based on BUILDING.txt to remove unneeded
|
||||||
# components.
|
# components.
|
||||||
ensure_crashpad_can_fetch_line_number_by_address
|
ensure_crashpad_can_fetch_line_number_by_address
|
||||||
|
# Centos7 is too old for dri3
|
||||||
|
if [ ! "${KASMVNC_BUILD_OS}" == "centos" ]; then
|
||||||
|
CONFIG_OPTIONS="--enable-dri3"
|
||||||
|
fi
|
||||||
# remove gl check for opensuse
|
# remove gl check for opensuse
|
||||||
if [ "${KASMVNC_BUILD_OS}" == "opensuse" ] || ([ "${KASMVNC_BUILD_OS}" == "oracle" ] && [ "${KASMVNC_BUILD_OS_CODENAME}" == 9 ]); then
|
if [ "${KASMVNC_BUILD_OS}" == "opensuse" ] || ([ "${KASMVNC_BUILD_OS}" == "oracle" ] && [ "${KASMVNC_BUILD_OS_CODENAME}" == 9 ]); then
|
||||||
sed -i 's/LIBGL="gl >= 7.1.0"/LIBGL="gl >= 1.1"/g' configure
|
sed -i 's/LIBGL="gl >= 7.1.0"/LIBGL="gl >= 1.1"/g' configure
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# build X11
|
# build X11
|
||||||
./configure --prefix=/opt/kasmweb \
|
./configure \
|
||||||
--with-xkb-path=/usr/share/X11/xkb \
|
--disable-config-hal \
|
||||||
--with-xkb-output=/var/lib/xkb \
|
--disable-config-udev \
|
||||||
--with-xkb-bin-directory=/usr/bin \
|
--disable-dmx \
|
||||||
--with-default-font-path="/usr/share/fonts/X11/misc,/usr/share/fonts/X11/cyrillic,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,/usr/share/fonts/X11/75dpi,built-ins" \
|
--disable-dri \
|
||||||
--with-sha1=libcrypto \
|
--disable-dri2 \
|
||||||
--without-dtrace --disable-dri \
|
--disable-kdrive \
|
||||||
--disable-static \
|
--disable-static \
|
||||||
--disable-xinerama --disable-xvfb --disable-xnest --disable-xorg \
|
--disable-xephyr \
|
||||||
--disable-dmx --disable-xwin --disable-xephyr --disable-kdrive \
|
--disable-xinerama \
|
||||||
--disable-config-hal --disable-config-udev \
|
--disable-xnest \
|
||||||
--disable-dri2 --enable-glx --disable-xwayland --disable-dri3
|
--disable-xorg \
|
||||||
|
--disable-xvfb \
|
||||||
|
--disable-xwayland \
|
||||||
|
--disable-xwin \
|
||||||
|
--enable-glx \
|
||||||
|
--prefix=/opt/kasmweb \
|
||||||
|
--with-default-font-path="/usr/share/fonts/X11/misc,/usr/share/fonts/X11/cyrillic,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,/usr/share/fonts/X11/75dpi,built-ins" \
|
||||||
|
--without-dtrace \
|
||||||
|
--with-sha1=libcrypto \
|
||||||
|
--with-xkb-bin-directory=/usr/bin \
|
||||||
|
--with-xkb-output=/var/lib/xkb \
|
||||||
|
--with-xkb-path=/usr/share/X11/xkb ${CONFIG_OPTIONS}
|
||||||
|
|
||||||
# remove array bounds errors for new versions of GCC
|
# remove array bounds errors for new versions of GCC
|
||||||
find . -name "Makefile" -exec sed -i 's/-Werror=array-bounds//g' {} \;
|
find . -name "Makefile" -exec sed -i 's/-Werror=array-bounds//g' {} \;
|
||||||
make -j5
|
make -j5
|
||||||
|
@ -2,7 +2,7 @@ FROM alpine:3.17
|
|||||||
|
|
||||||
ENV KASMVNC_BUILD_OS alpine
|
ENV KASMVNC_BUILD_OS alpine
|
||||||
ENV KASMVNC_BUILD_OS_CODENAME 317
|
ENV KASMVNC_BUILD_OS_CODENAME 317
|
||||||
ENV XORG_VER 1.20.7
|
ENV XORG_VER 1.20.14
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
echo "**** install build deps ****" && \
|
echo "**** install build deps ****" && \
|
||||||
|
@ -2,22 +2,34 @@ FROM fedora:37
|
|||||||
|
|
||||||
ENV KASMVNC_BUILD_OS fedora
|
ENV KASMVNC_BUILD_OS fedora
|
||||||
ENV KASMVNC_BUILD_OS_CODENAME thirtyseven
|
ENV KASMVNC_BUILD_OS_CODENAME thirtyseven
|
||||||
ENV XORG_VER 1.20.7
|
ENV XORG_VER 1.20.14
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
echo "**** install build deps ****" && \
|
echo "**** install build deps ****" && \
|
||||||
|
dnf group install -y \
|
||||||
|
"C Development Tools and Libraries" \
|
||||||
|
"Development Tools" && \
|
||||||
dnf install -y \
|
dnf install -y \
|
||||||
autoconf \
|
autoconf \
|
||||||
automake \
|
automake \
|
||||||
|
bison \
|
||||||
|
byacc \
|
||||||
bzip2 \
|
bzip2 \
|
||||||
cmake \
|
cmake \
|
||||||
|
diffutils \
|
||||||
|
doxygen \
|
||||||
|
file \
|
||||||
|
flex \
|
||||||
|
fop \
|
||||||
gcc \
|
gcc \
|
||||||
gcc-c++ \
|
gcc-c++ \
|
||||||
git \
|
git \
|
||||||
|
glibc-devel \
|
||||||
libdrm-devel \
|
libdrm-devel \
|
||||||
libepoxy-devel \
|
libepoxy-devel \
|
||||||
libjpeg-turbo-devel \
|
libjpeg-turbo-devel \
|
||||||
libjpeg-turbo-static \
|
libjpeg-turbo-static \
|
||||||
|
libmd-devel \
|
||||||
libpciaccess-devel \
|
libpciaccess-devel \
|
||||||
libtool \
|
libtool \
|
||||||
libwebp-devel \
|
libwebp-devel \
|
||||||
@ -34,14 +46,18 @@ RUN \
|
|||||||
libxshmfence-devel \
|
libxshmfence-devel \
|
||||||
libXtst-devel \
|
libXtst-devel \
|
||||||
mesa-libEGL-devel \
|
mesa-libEGL-devel \
|
||||||
|
mesa-libgbm-devel \
|
||||||
mesa-libGL-devel \
|
mesa-libGL-devel \
|
||||||
meson \
|
meson \
|
||||||
|
mingw64-binutils \
|
||||||
|
mt-st \
|
||||||
nettle-devel \
|
nettle-devel \
|
||||||
openssl-devel \
|
openssl-devel \
|
||||||
patch \
|
patch \
|
||||||
pixman-devel \
|
pixman-devel \
|
||||||
wayland-devel \
|
wayland-devel \
|
||||||
wget \
|
wget \
|
||||||
|
which \
|
||||||
xcb-util-devel \
|
xcb-util-devel \
|
||||||
xcb-util-image-devel \
|
xcb-util-image-devel \
|
||||||
xcb-util-keysyms-devel \
|
xcb-util-keysyms-devel \
|
||||||
@ -51,11 +67,13 @@ RUN \
|
|||||||
xkbcomp \
|
xkbcomp \
|
||||||
xkbcomp-devel \
|
xkbcomp-devel \
|
||||||
xkeyboard-config \
|
xkeyboard-config \
|
||||||
|
xmlto \
|
||||||
xorg-x11-font-utils \
|
xorg-x11-font-utils \
|
||||||
xorg-x11-proto-devel \
|
xorg-x11-proto-devel \
|
||||||
xorg-x11-server-common \
|
xorg-x11-server-common \
|
||||||
xorg-x11-server-devel \
|
xorg-x11-server-devel \
|
||||||
xorg-x11-xtrans-devel
|
xorg-x11-xtrans-devel \
|
||||||
|
xsltproc
|
||||||
|
|
||||||
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ RUN zypper install -ny \
|
|||||||
gzip \
|
gzip \
|
||||||
lbzip2 \
|
lbzip2 \
|
||||||
libbz2-devel \
|
libbz2-devel \
|
||||||
|
libgbm-devel \
|
||||||
libGLw-devel \
|
libGLw-devel \
|
||||||
libgnutls-devel \
|
libgnutls-devel \
|
||||||
libjpeg8-devel \
|
libjpeg8-devel \
|
||||||
@ -27,6 +28,7 @@ RUN zypper install -ny \
|
|||||||
libtiff-devel \
|
libtiff-devel \
|
||||||
libXfont2-devel \
|
libXfont2-devel \
|
||||||
libxkbcommon-x11-devel \
|
libxkbcommon-x11-devel \
|
||||||
|
libxshmfence-devel \
|
||||||
make \
|
make \
|
||||||
Mesa-dri \
|
Mesa-dri \
|
||||||
Mesa-libglapi-devel \
|
Mesa-libglapi-devel \
|
||||||
|
@ -5,27 +5,31 @@ ENV KASMVNC_BUILD_OS_CODENAME 8
|
|||||||
ENV XORG_VER 1.20.10
|
ENV XORG_VER 1.20.10
|
||||||
|
|
||||||
# Install from stock repos
|
# Install from stock repos
|
||||||
RUN dnf install -y \
|
RUN \
|
||||||
bzip2-devel \
|
dnf install -y 'dnf-command(config-manager)' && \
|
||||||
ca-certificates \
|
dnf config-manager --set-enabled ol8_codeready_builder && \
|
||||||
cmake \
|
dnf install -y \
|
||||||
dnf-plugins-core \
|
bzip2-devel \
|
||||||
gcc \
|
ca-certificates \
|
||||||
gcc-c++ \
|
cmake \
|
||||||
git \
|
dnf-plugins-core \
|
||||||
gnutls-devel \
|
gcc \
|
||||||
libjpeg-turbo-devel \
|
gcc-c++ \
|
||||||
libpng-devel \
|
git \
|
||||||
libtiff-devel \
|
gnutls-devel \
|
||||||
make \
|
libjpeg-turbo-devel \
|
||||||
mesa-dri-drivers \
|
libpng-devel \
|
||||||
openssl-devel \
|
libtiff-devel \
|
||||||
openssl-devel \
|
libxshmfence-devel \
|
||||||
patch \
|
make \
|
||||||
tigervnc-server \
|
mesa-dri-drivers \
|
||||||
wget \
|
mesa-libgbm-devel \
|
||||||
xorg-x11-font-utils \
|
openssl-devel \
|
||||||
zlib-devel
|
patch \
|
||||||
|
tigervnc-server \
|
||||||
|
wget \
|
||||||
|
xorg-x11-font-utils \
|
||||||
|
zlib-devel
|
||||||
|
|
||||||
# Enable additional repos (epel, powertools, and fusion)
|
# Enable additional repos (epel, powertools, and fusion)
|
||||||
RUN dnf config-manager --set-enabled ol8_codeready_builder
|
RUN dnf config-manager --set-enabled ol8_codeready_builder
|
||||||
|
@ -5,32 +5,35 @@ ENV KASMVNC_BUILD_OS_CODENAME 9
|
|||||||
ENV XORG_VER 1.20.10
|
ENV XORG_VER 1.20.10
|
||||||
|
|
||||||
# Install from stock repos
|
# Install from stock repos
|
||||||
RUN dnf config-manager --set-enabled ol9_distro_builder
|
RUN \
|
||||||
RUN dnf install -y \
|
dnf config-manager --set-enabled ol9_codeready_builder && \
|
||||||
bzip2-devel \
|
dnf config-manager --set-enabled ol9_distro_builder && \
|
||||||
ca-certificates \
|
dnf install -y \
|
||||||
cmake \
|
bzip2-devel \
|
||||||
dnf-plugins-core \
|
ca-certificates \
|
||||||
gcc \
|
cmake \
|
||||||
gcc-c++ \
|
dnf-plugins-core \
|
||||||
git \
|
gcc \
|
||||||
gnutls-devel \
|
gcc-c++ \
|
||||||
libjpeg-turbo-devel \
|
git \
|
||||||
libpng-devel \
|
gnutls-devel \
|
||||||
libtiff-devel \
|
libjpeg-turbo-devel \
|
||||||
make \
|
libpng-devel \
|
||||||
mesa-dri-drivers \
|
libtiff-devel \
|
||||||
mesa-libGL-devel \
|
libxshmfence-devel \
|
||||||
openssl-devel \
|
make \
|
||||||
openssl-devel \
|
mesa-dri-drivers \
|
||||||
patch \
|
mesa-libGL-devel \
|
||||||
tigervnc-server \
|
mesa-libgbm-devel \
|
||||||
wget \
|
openssl-devel \
|
||||||
xorg-x11-font-utils \
|
openssl-devel \
|
||||||
zlib-devel
|
patch \
|
||||||
|
tigervnc-server \
|
||||||
|
wget \
|
||||||
|
xorg-x11-font-utils \
|
||||||
|
zlib-devel
|
||||||
|
|
||||||
# Enable additional repos (epel, powertools, and fusion)
|
# Enable additional repos (epel, powertools, and fusion)
|
||||||
RUN dnf config-manager --set-enabled ol9_codeready_builder
|
|
||||||
RUN dnf install -y oracle-epel-release-el9
|
RUN dnf install -y oracle-epel-release-el9
|
||||||
RUN dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm
|
RUN dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ VNCSConnectionST::VNCSConnectionST(VNCServerST* server_, network::Socket *s,
|
|||||||
needsPermCheck(false), pointerEventTime(0),
|
needsPermCheck(false), pointerEventTime(0),
|
||||||
clientHasCursor(false),
|
clientHasCursor(false),
|
||||||
accessRights(AccessDefault), startTime(time(0)), frameTracking(false),
|
accessRights(AccessDefault), startTime(time(0)), frameTracking(false),
|
||||||
udpFramesSinceFull(0)
|
udpFramesSinceFull(0), complainedAboutNoViewRights(false)
|
||||||
{
|
{
|
||||||
setStreams(&sock->inStream(), &sock->outStream());
|
setStreams(&sock->inStream(), &sock->outStream());
|
||||||
peerEndpoint.buf = sock->getPeerEndpoint();
|
peerEndpoint.buf = sock->getPeerEndpoint();
|
||||||
@ -1308,8 +1308,14 @@ void VNCSConnectionST::writeFramebufferUpdate()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(accessRights & AccessView))
|
if (!(accessRights & AccessView)) {
|
||||||
|
if (!complainedAboutNoViewRights) {
|
||||||
|
complainedAboutNoViewRights = true;
|
||||||
|
vlog.error("User %s has no read permissions. If this is not intended, grant them permissions with kasmvncpasswd or via the API",
|
||||||
|
user);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Updates often consists of many small writes, and in continuous
|
// Updates often consists of many small writes, and in continuous
|
||||||
// mode, we will also have small fence messages around the update. We
|
// mode, we will also have small fence messages around the update. We
|
||||||
|
@ -324,6 +324,7 @@ namespace rfb {
|
|||||||
|
|
||||||
bool frameTracking;
|
bool frameTracking;
|
||||||
uint32_t udpFramesSinceFull;
|
uint32_t udpFramesSinceFull;
|
||||||
|
bool complainedAboutNoViewRights;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
4
debian/control
vendored
4
debian/control
vendored
@ -3,7 +3,7 @@ Section: x11
|
|||||||
Priority: optional
|
Priority: optional
|
||||||
Maintainer: Kasm Technologies LLC <info@kasmweb.com>
|
Maintainer: Kasm Technologies LLC <info@kasmweb.com>
|
||||||
Build-Depends: debhelper (>= 11), rsync, libjpeg-dev, libjpeg-dev, libpng-dev,
|
Build-Depends: debhelper (>= 11), rsync, libjpeg-dev, libjpeg-dev, libpng-dev,
|
||||||
libtiff-dev, libgif-dev, libavcodec-dev, libssl-dev, libgl1, libxfont2, libsm6, libxext-dev, libxrandr-dev, libxtst-dev, libxcursor-dev, libunwind8
|
libtiff-dev, libgif-dev, libavcodec-dev, libssl-dev, libgl1, libxfont2, libsm6, libxext-dev, libxrandr-dev, libxtst-dev, libxcursor-dev, libunwind8, libgbm-dev
|
||||||
Standards-Version: 4.1.3
|
Standards-Version: 4.1.3
|
||||||
Homepage: https://github.com/kasmtech/KasmVNC
|
Homepage: https://github.com/kasmtech/KasmVNC
|
||||||
#Vcs-Browser: https://salsa.debian.org/debian/kasmvnc
|
#Vcs-Browser: https://salsa.debian.org/debian/kasmvnc
|
||||||
@ -14,7 +14,7 @@ Architecture: amd64 arm64
|
|||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, ssl-cert, xauth,
|
Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, ssl-cert, xauth,
|
||||||
x11-xkb-utils, xkb-data, procps, libswitch-perl, libyaml-tiny-perl,
|
x11-xkb-utils, xkb-data, procps, libswitch-perl, libyaml-tiny-perl,
|
||||||
libhash-merge-simple-perl, libscalar-list-utils-perl, liblist-moreutils-perl,
|
libhash-merge-simple-perl, libscalar-list-utils-perl, liblist-moreutils-perl,
|
||||||
libtry-tiny-perl
|
libtry-tiny-perl, libgbm1
|
||||||
Provides: vnc-server
|
Provides: vnc-server
|
||||||
Description: KasmVNC provides remote web-based access to a Desktop or application.
|
Description: KasmVNC provides remote web-based access to a Desktop or application.
|
||||||
While VNC is in the name, KasmVNC differs from other VNC variants such
|
While VNC is in the name, KasmVNC differs from other VNC variants such
|
||||||
|
@ -7,7 +7,7 @@ License: GPLv2+
|
|||||||
URL: https://github.com/kasmtech/KasmVNC
|
URL: https://github.com/kasmtech/KasmVNC
|
||||||
|
|
||||||
BuildRequires: rsync
|
BuildRequires: rsync
|
||||||
Requires: xorg-x11-xauth, xkeyboard-config, openssl, perl, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny
|
Requires: xorg-x11-xauth, xkeyboard-config, openssl, perl, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny, mesa-libgbm, libxshmfence
|
||||||
Conflicts: tigervnc-server, tigervnc-server-minimal
|
Conflicts: tigervnc-server, tigervnc-server-minimal
|
||||||
|
|
||||||
%description
|
%description
|
||||||
|
@ -7,7 +7,7 @@ License: GPLv2+
|
|||||||
URL: https://github.com/kasmtech/KasmVNC
|
URL: https://github.com/kasmtech/KasmVNC
|
||||||
|
|
||||||
BuildRequires: rsync
|
BuildRequires: rsync
|
||||||
Requires: xauth, hostname, libxkbcommon-x11-0, xkeyboard-config, x11-tools, openssl, perl, libpixman-1-0, libjpeg8, libgomp1, libXfont2-2, libXdmcp6, libglvnd, xkbcomp, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny
|
Requires: xauth, hostname, libxkbcommon-x11-0, xkeyboard-config, x11-tools, openssl, perl, libpixman-1-0, libjpeg8, libgomp1, libXfont2-2, libXdmcp6, libglvnd, xkbcomp, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny, libgbm1, libxshmfence1
|
||||||
Conflicts: tigervnc, tigervnc-x11vnc
|
Conflicts: tigervnc, tigervnc-x11vnc
|
||||||
|
|
||||||
%description
|
%description
|
||||||
|
@ -7,7 +7,7 @@ License: GPLv2+
|
|||||||
URL: https://github.com/kasmtech/KasmVNC
|
URL: https://github.com/kasmtech/KasmVNC
|
||||||
|
|
||||||
BuildRequires: rsync
|
BuildRequires: rsync
|
||||||
Requires: xorg-x11-xauth, xorg-x11-xkb-utils, xkeyboard-config, xorg-x11-server-utils, openssl, perl, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny, hostname
|
Requires: xorg-x11-xauth, xorg-x11-xkb-utils, xkeyboard-config, xorg-x11-server-utils, openssl, perl, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny, hostname, mesa-libgbm, libxshmfence
|
||||||
Conflicts: tigervnc-server, tigervnc-server-minimal
|
Conflicts: tigervnc-server, tigervnc-server-minimal
|
||||||
|
|
||||||
%description
|
%description
|
||||||
|
@ -7,7 +7,7 @@ License: GPLv2+
|
|||||||
URL: https://github.com/kasmtech/KasmVNC
|
URL: https://github.com/kasmtech/KasmVNC
|
||||||
|
|
||||||
BuildRequires: rsync
|
BuildRequires: rsync
|
||||||
Requires: xorg-x11-xauth, xkeyboard-config, xorg-x11-server-utils, openssl, perl, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny, hostname
|
Requires: xorg-x11-xauth, xkeyboard-config, xorg-x11-server-utils, openssl, perl, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny, hostname, mesa-libgbm, libxshmfence
|
||||||
Conflicts: tigervnc-server, tigervnc-server-minimal
|
Conflicts: tigervnc-server, tigervnc-server-minimal
|
||||||
|
|
||||||
%description
|
%description
|
||||||
|
3
spec/fixtures/defaults_config.yaml
vendored
3
spec/fixtures/defaults_config.yaml
vendored
@ -4,6 +4,9 @@ desktop:
|
|||||||
height: 768
|
height: 768
|
||||||
allow_resize: true
|
allow_resize: true
|
||||||
pixel_depth: 24
|
pixel_depth: 24
|
||||||
|
gpu:
|
||||||
|
hw3d: false
|
||||||
|
drinode: /dev/dri/renderD128
|
||||||
|
|
||||||
network:
|
network:
|
||||||
protocol: http
|
protocol: http
|
||||||
|
@ -5,6 +5,9 @@ desktop:
|
|||||||
height: 768
|
height: 768
|
||||||
allow_resize: true
|
allow_resize: true
|
||||||
pixel_depth: 24
|
pixel_depth: 24
|
||||||
|
gpu:
|
||||||
|
hw3d: false
|
||||||
|
drinode: /dev/dri/renderD128
|
||||||
|
|
||||||
network:
|
network:
|
||||||
protocol: http
|
protocol: http
|
||||||
|
@ -2242,6 +2242,39 @@ sub DefineConfigToCLIConversion {
|
|||||||
isPresent($value) && $value ne 'auto';
|
isPresent($value) && $value ne 'auto';
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
KasmVNC::CliOption->new({
|
||||||
|
name => 'hw3d',
|
||||||
|
configKeys => [
|
||||||
|
KasmVNC::ConfigKey->new({
|
||||||
|
name => "desktop.gpu.hw3d",
|
||||||
|
type => KasmVNC::ConfigKey::BOOLEAN
|
||||||
|
})
|
||||||
|
],
|
||||||
|
toStringSub => sub {
|
||||||
|
$self = shift;
|
||||||
|
my $value = $self->configValue();
|
||||||
|
|
||||||
|
switch($value) {
|
||||||
|
case 'true' {
|
||||||
|
$valuesStr = '-hw3d ';
|
||||||
|
}
|
||||||
|
case 'false' {
|
||||||
|
$valuesStr = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $valuesStr;
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
KasmVNC::CliOption->new({
|
||||||
|
name => 'drinode',
|
||||||
|
configKeys => [
|
||||||
|
KasmVNC::ConfigKey->new({
|
||||||
|
name => "desktop.gpu.drinode",
|
||||||
|
type => KasmVNC::ConfigKey::ANY
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
%cliArgMap = map { ("-" . $_->{name}) => $_ } @xvncOptions;
|
%cliArgMap = map { ("-" . $_->{name}) => $_ } @xvncOptions;
|
||||||
|
4
unix/xserver/.gitignore
vendored
Normal file
4
unix/xserver/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*
|
||||||
|
!/hw
|
||||||
|
/hw/*
|
||||||
|
!/hw/vnc
|
@ -30,10 +30,14 @@ bin_PROGRAMS = Xvnc
|
|||||||
|
|
||||||
man1_MANS = Xvnc.man
|
man1_MANS = Xvnc.man
|
||||||
|
|
||||||
Xvnc_SOURCES = xvnc.c \
|
Xvnc_SOURCES = xvnc.c dri3.c \
|
||||||
$(top_srcdir)/Xi/stubs.c $(top_srcdir)/mi/miinitext.c \
|
$(top_srcdir)/Xi/stubs.c $(top_srcdir)/mi/miinitext.c \
|
||||||
$(top_srcdir)/fb/fbcmap_mi.c buildtime.c
|
$(top_srcdir)/fb/fbcmap_mi.c buildtime.c
|
||||||
|
|
||||||
|
if DRI3
|
||||||
|
XVNC_SYS_LIBS += -lgbm
|
||||||
|
endif
|
||||||
|
|
||||||
# Xvnc contains no C++ sources so automake doesn't understand that we
|
# Xvnc contains no C++ sources so automake doesn't understand that we
|
||||||
# need to use the C++ compiler to link things. This is the upstream
|
# need to use the C++ compiler to link things. This is the upstream
|
||||||
# recommendation for coaxing automake.
|
# recommendation for coaxing automake.
|
||||||
@ -44,7 +48,8 @@ Xvnc_CPPFLAGS = $(XVNC_CPPFLAGS) -DKASMVNC -DNO_MODULE_EXTS \
|
|||||||
-DXVNCEXTRAVERSION="\".$(KASMVNC_COMMIT_ID)\"" \
|
-DXVNCEXTRAVERSION="\".$(KASMVNC_COMMIT_ID)\"" \
|
||||||
-DXFree86Server -DVENDOR_RELEASE="$(VENDOR_RELEASE)" \
|
-DXFree86Server -DVENDOR_RELEASE="$(VENDOR_RELEASE)" \
|
||||||
-DVENDOR_STRING="\"$(VENDOR_STRING)\"" -I$(KASMVNC_SRCDIR)/common -I$(KASMVNC_SRCDIR)/unix/common \
|
-DVENDOR_STRING="\"$(VENDOR_STRING)\"" -I$(KASMVNC_SRCDIR)/common -I$(KASMVNC_SRCDIR)/unix/common \
|
||||||
-I$(top_srcdir)/include ${XSERVERLIBS_CFLAGS} -I$(includedir)
|
-I$(top_srcdir)/include ${XSERVERLIBS_CFLAGS} -I$(includedir) \
|
||||||
|
-I$(top_srcdir)/dri3 @LIBDRM_CFLAGS@
|
||||||
|
|
||||||
Xvnc_LDADD = $(XVNC_LIBS) libvnccommon.la $(COMMON_LIBS) \
|
Xvnc_LDADD = $(XVNC_LIBS) libvnccommon.la $(COMMON_LIBS) \
|
||||||
$(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XVNC_SYS_LIBS) -lX11 -lwebp -lssl -lcrypto -lcrypt
|
$(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XVNC_SYS_LIBS) -lX11 -lwebp -lssl -lcrypto -lcrypt
|
||||||
|
@ -281,6 +281,15 @@ be either \fB0\fP (off), \fB1\fP (always) or \fB2\fP (auto). Default is
|
|||||||
\fB2\fP.
|
\fB2\fP.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
|
.B \-hw3d
|
||||||
|
Enable hardware 3d acceleration. Default is software (llvmpipe usually).
|
||||||
|
.
|
||||||
|
.TP
|
||||||
|
.B \-drinode \fIpath\fP
|
||||||
|
Use another path instead of /dev/dri/renderD128. You may need this if you have
|
||||||
|
more than one GPU.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
.B \-ZlibLevel \fIlevel\fP
|
.B \-ZlibLevel \fIlevel\fP
|
||||||
Zlib compression level for ZRLE encoding (it does not affect Tight encoding).
|
Zlib compression level for ZRLE encoding (it does not affect Tight encoding).
|
||||||
Acceptable values are between 0 and 9. Default is to use the standard
|
Acceptable values are between 0 and 9. Default is to use the standard
|
||||||
|
284
unix/xserver/hw/vnc/dri3.c
Normal file
284
unix/xserver/hw/vnc/dri3.c
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
/* Copyright (c) 2023 Kasm
|
||||||
|
|
||||||
|
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 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 X CONSORTIUM 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.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall
|
||||||
|
not be used in advertising or otherwise to promote the sale, use or
|
||||||
|
other dealings in this Software without prior written authorization
|
||||||
|
from the X Consortium.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_DIX_CONFIG_H
|
||||||
|
#include <dix-config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DRI3
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#include <X11/X.h>
|
||||||
|
#include <X11/Xmd.h>
|
||||||
|
#include <dri3.h>
|
||||||
|
#include <drm_fourcc.h>
|
||||||
|
#include <fb.h>
|
||||||
|
#include <gcstruct.h>
|
||||||
|
#include <gbm.h>
|
||||||
|
|
||||||
|
extern const char *driNode;
|
||||||
|
|
||||||
|
static struct priv_t {
|
||||||
|
struct gbm_device *gbm;
|
||||||
|
int fd;
|
||||||
|
} priv;
|
||||||
|
|
||||||
|
struct gbm_pixmap {
|
||||||
|
struct gbm_bo *bo;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct gbm_pixmap gbm_pixmap;
|
||||||
|
|
||||||
|
static DevPrivateKeyRec dri3_pixmap_private_key;
|
||||||
|
static struct timeval start;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
xvnc_dri3_open_client(ClientPtr client,
|
||||||
|
ScreenPtr screen,
|
||||||
|
RRProviderPtr provider,
|
||||||
|
int *pfd)
|
||||||
|
{
|
||||||
|
int fd = open(driNode, O_RDWR | O_CLOEXEC);
|
||||||
|
if (fd < 0)
|
||||||
|
return BadAlloc;
|
||||||
|
*pfd = fd;
|
||||||
|
return Success;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t
|
||||||
|
gbm_format_for_depth(CARD8 depth)
|
||||||
|
{
|
||||||
|
switch (depth) {
|
||||||
|
case 16:
|
||||||
|
return GBM_FORMAT_RGB565;
|
||||||
|
case 24:
|
||||||
|
return GBM_FORMAT_XRGB8888;
|
||||||
|
case 30:
|
||||||
|
return GBM_FORMAT_ARGB2101010;
|
||||||
|
default:
|
||||||
|
ErrorF("unexpected depth: %d\n", depth);
|
||||||
|
/* fallthrough */
|
||||||
|
case 32:
|
||||||
|
return GBM_FORMAT_ARGB8888;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dri3_pixmap_set_private(PixmapPtr pixmap, gbm_pixmap *gp)
|
||||||
|
{
|
||||||
|
dixSetPrivate(&pixmap->devPrivates, &dri3_pixmap_private_key, gp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gbm_pixmap *gbm_pixmap_get(PixmapPtr pixmap)
|
||||||
|
{
|
||||||
|
return dixLookupPrivate(&pixmap->devPrivates, &dri3_pixmap_private_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
static PixmapPtr
|
||||||
|
create_pixmap_for_bo(ScreenPtr screen, struct gbm_bo *bo, CARD8 depth)
|
||||||
|
{
|
||||||
|
PixmapPtr pixmap;
|
||||||
|
|
||||||
|
gbm_pixmap *gp = calloc(1, sizeof(gbm_pixmap));
|
||||||
|
if (!gp)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
pixmap = screen->CreatePixmap(screen, gbm_bo_get_width(bo), gbm_bo_get_height(bo),
|
||||||
|
depth, CREATE_PIXMAP_USAGE_SCRATCH);
|
||||||
|
if (!pixmap)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
gp->bo = bo;
|
||||||
|
dri3_pixmap_set_private(pixmap, gp);
|
||||||
|
|
||||||
|
return pixmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PixmapPtr
|
||||||
|
xvnc_pixmap_from_fds(ScreenPtr screen, CARD8 num_fds, const int *fds,
|
||||||
|
CARD16 width, CARD16 height,
|
||||||
|
const CARD32 *strides, const CARD32 *offsets,
|
||||||
|
CARD8 depth, CARD8 bpp, uint64_t modifier)
|
||||||
|
{
|
||||||
|
struct gbm_bo *bo = NULL;
|
||||||
|
PixmapPtr pixmap;
|
||||||
|
|
||||||
|
if (width == 0 || height == 0 || num_fds == 0 ||
|
||||||
|
depth < 15 || bpp != BitsPerPixel(depth) ||
|
||||||
|
strides[0] < width * bpp / 8)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (num_fds == 1) {
|
||||||
|
struct gbm_import_fd_data data;
|
||||||
|
|
||||||
|
data.fd = fds[0];
|
||||||
|
data.width = width;
|
||||||
|
data.height = height;
|
||||||
|
data.stride = strides[0];
|
||||||
|
data.format = gbm_format_for_depth(depth);
|
||||||
|
bo = gbm_bo_import(priv.gbm, GBM_BO_IMPORT_FD, &data,
|
||||||
|
GBM_BO_USE_RENDERING);
|
||||||
|
if (!bo)
|
||||||
|
return NULL;
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
pixmap = create_pixmap_for_bo(screen, bo, depth);
|
||||||
|
if (pixmap == NULL) {
|
||||||
|
gbm_bo_destroy(bo);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pixmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
xvnc_fds_from_pixmap(ScreenPtr screen, PixmapPtr pixmap, int *fds,
|
||||||
|
uint32_t *strides, uint32_t *offsets,
|
||||||
|
uint64_t *modifier)
|
||||||
|
{
|
||||||
|
gbm_pixmap *gp = gbm_pixmap_get(pixmap);
|
||||||
|
if (!gp)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fds[0] = gbm_bo_get_fd(gp->bo);
|
||||||
|
strides[0] = gbm_bo_get_stride(gp->bo);
|
||||||
|
offsets[0] = 0;
|
||||||
|
*modifier = DRM_FORMAT_MOD_INVALID;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
xvnc_get_formats(ScreenPtr screen,
|
||||||
|
CARD32 *num_formats, CARD32 **formats)
|
||||||
|
{
|
||||||
|
ErrorF("xvnc_get_formats\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
xvnc_get_modifiers(ScreenPtr screen, uint32_t format,
|
||||||
|
uint32_t *num_modifiers, uint64_t **modifiers)
|
||||||
|
{
|
||||||
|
ErrorF("xvnc_get_modifiers\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
xvnc_get_drawable_modifiers(DrawablePtr draw, uint32_t format,
|
||||||
|
uint32_t *num_modifiers, uint64_t **modifiers)
|
||||||
|
{
|
||||||
|
ErrorF("xvnc_get_drawable_modifiers\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const dri3_screen_info_rec xvnc_dri3_info = {
|
||||||
|
.version = 2,
|
||||||
|
.open = NULL,
|
||||||
|
.pixmap_from_fds = xvnc_pixmap_from_fds,
|
||||||
|
.fds_from_pixmap = xvnc_fds_from_pixmap,
|
||||||
|
.open_client = xvnc_dri3_open_client,
|
||||||
|
.get_formats = xvnc_get_formats,
|
||||||
|
.get_modifiers = xvnc_get_modifiers,
|
||||||
|
.get_drawable_modifiers = xvnc_get_drawable_modifiers,
|
||||||
|
};
|
||||||
|
|
||||||
|
void xvnc_sync_dri3_pixmap(PixmapPtr pixmap)
|
||||||
|
{
|
||||||
|
// There doesn't seem to be a good hook or sync point, so we do it manually
|
||||||
|
// here, right before Present copies from the pixmap
|
||||||
|
DrawablePtr pDraw;
|
||||||
|
GCPtr gc;
|
||||||
|
void *ptr;
|
||||||
|
uint32_t stride, w, h;
|
||||||
|
void *opaque = NULL;
|
||||||
|
gbm_pixmap *gp = gbm_pixmap_get(pixmap);
|
||||||
|
if (!gp) {
|
||||||
|
ErrorF("Present tried to copy from a non-dri3 pixmap\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
w = gbm_bo_get_width(gp->bo);
|
||||||
|
h = gbm_bo_get_height(gp->bo);
|
||||||
|
|
||||||
|
ptr = gbm_bo_map(gp->bo, 0, 0, w, h,
|
||||||
|
GBM_BO_TRANSFER_READ, &stride, &opaque);
|
||||||
|
if (!ptr) {
|
||||||
|
ErrorF("gbm map failed, errno %d\n", errno);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pDraw = &pixmap->drawable;
|
||||||
|
if ((gc = GetScratchGC(pDraw->depth, pDraw->pScreen))) {
|
||||||
|
ValidateGC(pDraw, gc);
|
||||||
|
//gc->ops->PutImage(pDraw, gc, pDraw->depth, 0, 0, w, h, 0, ZPixmap, data);
|
||||||
|
fbPutZImage(pDraw, fbGetCompositeClip(gc), gc->alu, fbGetGCPrivate(gc)->pm,
|
||||||
|
0, 0, w, h, ptr, stride / sizeof(FbStip));
|
||||||
|
FreeScratchGC(gc);
|
||||||
|
}
|
||||||
|
|
||||||
|
gbm_bo_unmap(gp->bo, opaque);
|
||||||
|
}
|
||||||
|
|
||||||
|
void xvnc_init_dri3(void)
|
||||||
|
{
|
||||||
|
memset(&priv, 0, sizeof(priv));
|
||||||
|
|
||||||
|
gettimeofday(&start, NULL);
|
||||||
|
|
||||||
|
if (!dixRegisterPrivateKey(&dri3_pixmap_private_key, PRIVATE_PIXMAP, 0))
|
||||||
|
FatalError("dix\n");
|
||||||
|
|
||||||
|
if (!driNode)
|
||||||
|
driNode = "/dev/dri/renderD128";
|
||||||
|
|
||||||
|
priv.fd = open(driNode, O_RDWR | O_CLOEXEC);
|
||||||
|
if (!priv.fd)
|
||||||
|
FatalError("Failed to open %s\n", driNode);
|
||||||
|
|
||||||
|
priv.gbm = gbm_create_device(priv.fd);
|
||||||
|
if (!priv.gbm)
|
||||||
|
FatalError("Failed to create gbm\n");
|
||||||
|
|
||||||
|
if (!dri3_screen_init(screenInfo.screens[0], &xvnc_dri3_info))
|
||||||
|
FatalError("Couldn't init dri3\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // DRI3
|
@ -49,7 +49,7 @@ struct dlp_mimetype_t {
|
|||||||
char mime[32];
|
char mime[32];
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned dlp_num_mimetypes();
|
unsigned dlp_num_mimetypes(void);
|
||||||
const char *dlp_get_mimetype(const unsigned i);
|
const char *dlp_get_mimetype(const unsigned i);
|
||||||
|
|
||||||
extern int vncInetdSock;
|
extern int vncInetdSock;
|
||||||
@ -68,7 +68,7 @@ int vncGetSendPrimary(void);
|
|||||||
void vncUpdateDesktopName(void);
|
void vncUpdateDesktopName(void);
|
||||||
|
|
||||||
void vncAnnounceClipboard(int available);
|
void vncAnnounceClipboard(int available);
|
||||||
void vncClearBinaryClipboardData();
|
void vncClearBinaryClipboardData(void);
|
||||||
void vncSendBinaryClipboardData(const char* mime, const unsigned char *data,
|
void vncSendBinaryClipboardData(const char* mime, const unsigned char *data,
|
||||||
const unsigned len);
|
const unsigned len);
|
||||||
void vncGetBinaryClipboardData(const char *mime, const unsigned char **ptr,
|
void vncGetBinaryClipboardData(const char *mime, const unsigned char **ptr,
|
||||||
|
@ -72,6 +72,12 @@ from the X Consortium.
|
|||||||
#include <sys/ipc.h>
|
#include <sys/ipc.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
#endif /* HAS_SHM */
|
#endif /* HAS_SHM */
|
||||||
|
#ifdef MITSHM
|
||||||
|
#include "shmint.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_XSHMFENCE
|
||||||
|
#include <misyncshm.h>
|
||||||
|
#endif
|
||||||
#include "dix.h"
|
#include "dix.h"
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
#include "miline.h"
|
#include "miline.h"
|
||||||
@ -149,6 +155,8 @@ typedef enum { NORMAL_MEMORY_FB, SHARED_MEMORY_FB } fbMemType;
|
|||||||
static fbMemType fbmemtype = NORMAL_MEMORY_FB;
|
static fbMemType fbmemtype = NORMAL_MEMORY_FB;
|
||||||
static int lastScreen = -1;
|
static int lastScreen = -1;
|
||||||
static Bool Render = TRUE;
|
static Bool Render = TRUE;
|
||||||
|
static Bool hw3d = FALSE;
|
||||||
|
const char *driNode = NULL;
|
||||||
|
|
||||||
static Bool displaySpecified = FALSE;
|
static Bool displaySpecified = FALSE;
|
||||||
static char displayNumStr[16];
|
static char displayNumStr[16];
|
||||||
@ -350,6 +358,8 @@ void ddxUseMsg(void)
|
|||||||
ErrorF("+/-render turn on/off RENDER extension support"
|
ErrorF("+/-render turn on/off RENDER extension support"
|
||||||
"(default on)\n");
|
"(default on)\n");
|
||||||
#endif
|
#endif
|
||||||
|
ErrorF("-hw3d enable hardware 3d acceleration\n");
|
||||||
|
ErrorF("-drinode path use another card than /dev/dri/renderD128\n");
|
||||||
ErrorF("-linebias n adjust thin line pixelization\n");
|
ErrorF("-linebias n adjust thin line pixelization\n");
|
||||||
ErrorF("-blackpixel n pixel value for black\n");
|
ErrorF("-blackpixel n pixel value for black\n");
|
||||||
ErrorF("-whitepixel n pixel value for white\n");
|
ErrorF("-whitepixel n pixel value for white\n");
|
||||||
@ -482,6 +492,20 @@ ddxProcessArgument(int argc, char *argv[], int i)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcmp (argv[i], "-hw3d") == 0)
|
||||||
|
{
|
||||||
|
hw3d = TRUE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp (argv[i], "-drinode") == 0)
|
||||||
|
{
|
||||||
|
fail_unless_args(argc, i, 1);
|
||||||
|
++i;
|
||||||
|
driNode = argv[i];
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp (argv[i], "-blackpixel") == 0) /* -blackpixel n */
|
if (strcmp (argv[i], "-blackpixel") == 0) /* -blackpixel n */
|
||||||
{
|
{
|
||||||
Pixel pix;
|
Pixel pix;
|
||||||
@ -1475,7 +1499,7 @@ int vncRandRCreateScreenOutputs(int scrIdx, int extraOutputs)
|
|||||||
|
|
||||||
/* Creating and modifying modes, used by XserverDesktop and init here */
|
/* Creating and modifying modes, used by XserverDesktop and init here */
|
||||||
|
|
||||||
int vncRandRCanCreateModes()
|
int vncRandRCanCreateModes(void)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1684,6 +1708,15 @@ vfbScreenInit(ScreenPtr pScreen, int argc, char **argv)
|
|||||||
ret = fbPictureInit (pScreen, 0, 0);
|
ret = fbPictureInit (pScreen, 0, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MITSHM
|
||||||
|
ShmRegisterFbFuncs(pScreen);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_XSHMFENCE
|
||||||
|
if (!miSyncShmScreenInit(pScreen))
|
||||||
|
return FALSE;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!ret) return FALSE;
|
if (!ret) return FALSE;
|
||||||
|
|
||||||
#if XORG < 110
|
#if XORG < 110
|
||||||
@ -1784,7 +1817,7 @@ static void vfbClientStateChange(CallbackListPtr *a, void *b, void *c) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if XORG >= 113
|
#if XORG >= 113 && XORG < 120
|
||||||
#ifdef GLXEXT
|
#ifdef GLXEXT
|
||||||
extern void GlxExtensionInit(void);
|
extern void GlxExtensionInit(void);
|
||||||
|
|
||||||
@ -1796,6 +1829,10 @@ static ExtensionModule glxExt = {
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef DRI3
|
||||||
|
extern void xvnc_init_dri3(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
InitOutput(ScreenInfo *scrInfo, int argc, char **argv)
|
InitOutput(ScreenInfo *scrInfo, int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -1872,6 +1909,14 @@ InitOutput(ScreenInfo *scrInfo, int argc, char **argv)
|
|||||||
if (!AddCallback(&ClientStateCallback, vfbClientStateChange, 0)) {
|
if (!AddCallback(&ClientStateCallback, vfbClientStateChange, 0)) {
|
||||||
FatalError("AddCallback failed\n");
|
FatalError("AddCallback failed\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hw3d) {
|
||||||
|
#ifdef DRI3
|
||||||
|
xvnc_init_dri3();
|
||||||
|
#else
|
||||||
|
FatalError("DRI3 disabled at compile time\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
} /* end InitOutput */
|
} /* end InitOutput */
|
||||||
|
|
||||||
/* this is just to get the server to link on AIX */
|
/* this is just to get the server to link on AIX */
|
||||||
|
@ -80,3 +80,34 @@ Index: xserver/mi/miinitext.c
|
|||||||
{GEExtensionInit, "Generic Event Extension", &noGEExtension},
|
{GEExtensionInit, "Generic Event Extension", &noGEExtension},
|
||||||
{ShapeExtensionInit, "SHAPE", NULL},
|
{ShapeExtensionInit, "SHAPE", NULL},
|
||||||
#ifdef MITSHM
|
#ifdef MITSHM
|
||||||
|
--- xserver.orig/dri3/Makefile.am 2019-02-26 21:28:50.000000000 +0200
|
||||||
|
+++ xserver/dri3/Makefile.am 2023-01-18 11:55:45.315851638 +0200
|
||||||
|
@@ -1,7 +1,7 @@
|
||||||
|
noinst_LTLIBRARIES = libdri3.la
|
||||||
|
AM_CFLAGS = \
|
||||||
|
-DHAVE_XORG_CONFIG_H \
|
||||||
|
- @DIX_CFLAGS@ @XORG_CFLAGS@
|
||||||
|
+ @DIX_CFLAGS@ @XORG_CFLAGS@ @LIBDRM_CFLAGS@
|
||||||
|
|
||||||
|
libdri3_la_SOURCES = \
|
||||||
|
dri3.h \
|
||||||
|
--- xserver.orig/present/present.c 2019-02-26 21:28:50.000000000 +0200
|
||||||
|
+++ xserver/present/present.c 2023-01-20 11:32:27.175493594 +0200
|
||||||
|
@@ -27,6 +27,8 @@
|
||||||
|
#include "present_priv.h"
|
||||||
|
#include <gcstruct.h>
|
||||||
|
|
||||||
|
+void xvnc_sync_dri3_pixmap(PixmapPtr pixmap);
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Returns:
|
||||||
|
* TRUE if the first MSC value is equal to or after the second one
|
||||||
|
@@ -79,6 +81,8 @@
|
||||||
|
ScreenPtr screen = drawable->pScreen;
|
||||||
|
GCPtr gc;
|
||||||
|
|
||||||
|
+ xvnc_sync_dri3_pixmap(pixmap);
|
||||||
|
+
|
||||||
|
gc = GetScratchGC(drawable->depth, screen);
|
||||||
|
if (update) {
|
||||||
|
ChangeGCVal changes[2];
|
||||||
|
Loading…
Reference in New Issue
Block a user