First commit

For now xserver refuse to compile dues to missing dependencies
This commit is contained in:
Yorick Barbanneau 2021-06-03 22:56:13 +02:00
commit 3d3a37d79f
34 changed files with 1570 additions and 0 deletions

74
src/init_target.sh Executable file
View file

@ -0,0 +1,74 @@
#!/bin/bash
# populate Debian image
#
# create a file descriptor for storing log
exec 3>/tmp/error.log
function error {
>&2 printf "\e[31mE\e[0m: %s\n" "$1"
}
erase_display_char () {
local i
local nchar
nchar=$1
i=0
while [ "$i" -lt "$nchar" ]; do
printf "\b \b"
((i=i + 1))
done
}
install_packages () {
local package
package="$1"
printf "Install %s: " "$package"
apt-get install -y "$package" 2>&3 | while read -r x; do
display=""
pkg_name=""
case $x in
Get*)
pkg_name=$(echo "$x" | awk '{ printf $5 }')
display="downloading $pkg_name"
;;
Unpack*)
pkg_name=$(echo "$x" | awk '{ printf $2 }')
display="Unpacking $pkg_name"
;;
*already*newest*)
pkg_name=$(echo "$x" | awk '{ printf $1 }')
display="Already Installed"
break
;;
esac
if [[ -n "$display" ]]
then
display="$display $pkg_name"
erase_display_char "$nchar"
printf "%s" "$display"
nchar=${#display}
fi
done
}
SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )"
RECIPE_DIR="${SCRIPT_DIR}/recipe"
[[ ! -d "$RECIPE_DIR" ]] && { error "Recipe dir ${RECIPE_DIR} does not exist"; exit 10; }
export DEBIAN_FRONTEND=noninteractive
export DEBCONF_NONINTERACTIVE_SEEN=true
export LC_ALL=C
export LANGUAGE=C
export LANG=C
for i in $RECIPE_DIR/*.sh
do
source $i
done
exit 0

157
src/make_userland.sh Executable file
View file

@ -0,0 +1,157 @@
#!/bin/bash
set -e
function usage {
cat <<EOF
Create Debian userland filesystem for MNT Reform
---
This script create an userland system for the MNT Reform 2 laptop
USAGE:
make_userland.sh -t <target> -r <recipe> -m <mirror>
<target>
<recipe>.
EOF
}
function error {
>&2 printf "\e[31mE\e[0m %s\n" "$1"
}
function clean {
rm -rf "$output"
}
function process_args {
while :; do
case $1 in
-h|-\?|--help)
usage
exit 0
;;
-r|--recipe)
recipe_name="$2"
shift
;;
-m|--mirror)
local http_response
http_response=$(curl -o /dev/null -s -L -I -w "%{http_code}\n" "$2")
if [ ! "$http_response" -eq 200 ]
then
error "Mirror $1 seems to have problem."
exit 5
fi
debian_mirror="$2"
shift
;;
-o|--output)
if [ ! -d "$2" ]
then
error "output directory $2 not exist."
exit 5
fi
output_dir=$2
;;
*)
break
esac
shift
done
}
function process_packagefile () {
local packagesfile
local packageslist
packagesfile="$1"
packageslist="$2"
if [ ! -f "$packagesfile" ]
then
error "Package file $packagesfile not found"
return
fi
while read -r pkg
do
if [[ -z $packageslist ]]
then
packageslist="$pkg"
else
packageslist="${packageslist},${pkg}"
fi
done < "$packagesfile"
printf "%s" "$packageslist"
}
for c in curl mmdebstrap
do
if ! command -v "$c" >/dev/null
then
error "This script need $c to work properly"
exit 6
fi
done
# default values
debian_mirror="http://ftp.debian.org/debian"
output_dir="/tmp"
recipe_name="default"
process_args "$@"
export RECIPE="recipes/$recipe_name"
printf "Make userland script, dir:%s recipe:%s" "$(pwd)" "$recipe"
if [ ! -d "$RECIPE" ]
then
error "recipe folder $RECIPE not found"
usage
exit 2
fi
output="$output_dir/$recipe_name"
if [ -f "$output" ]
then
error "$output directory exist, remove it and launch $0 again"
exit 20
fi
trap clean ERR SIGINT
include=""
if [ -d "$RECIPE/packages" ]
then
for f in "$RECIPE"/packages/*.list
do
printf "Add package list for mmdebstrap: %s\n" "$f"
include="$( process_packagefile "$f" "$include")"
done
fi
if [ -d "$RECIPE"/hook ]
then
hook="--hook-directory=$(pwd)/${RECIPE}/hook"
fi
command="mmdebstrap --architectures=arm64 --components=main --variant=minbase"
[[ -n "$include" ]] && command="$command --include=$include"
[[ -n "$hook" ]] && command="$command $hook"
command="$command sid $output $debian_mirror"
$command || exit 20
exit
#mkdir "$output/root/recipe" || exit 21
#
#cp init_target.sh "$output/root/" || exit 40
#cp -r "$recipe"/* "$output/root/recipe" || exit 41
#
#chroot "$output" /root/init_target.sh
#
#exit 0

View file

@ -0,0 +1,28 @@
#!/bin/bash
printf "Customize hook script for mmdebstrap %s\n\n" "$RECIPE"
printf "Add MNT repository and key\n"
chroot $1 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 376511EB67AD7BAF
echo "deb https://mntre.com/reform-debian sid/" | chroot $1 tee /etc/apt/sources.list.d/mntre.list
chroot $1 apt update
printf "Install MNT packages\n"
chroot $1 apt install -y reform-tools reform-handbook
source="${RECIPE}/hook/data/overlay"
printf "Sync overlay directory from %s to %s\n" "$source" "$1"
if [ -d $source ]
then
printf " -> source exist\n"
cp -Raf ${RECIPE}/hook/data/overlay/* $1
else
printf "Can't find %s directory\n" "$source"
fi
# Procfs is needed to build DRM
mount -t proc /proc $1/proc
chroot $1 /root/build_script.sh
exit 0

View file

@ -0,0 +1,85 @@
# /etc/adduser.conf: `adduser' configuration.
# See adduser(8) and adduser.conf(5) for full documentation.
# The DSHELL variable specifies the default login shell on your
# system.
DSHELL=/bin/bash
# The DHOME variable specifies the directory containing users' home
# directories.
DHOME=/home
# If GROUPHOMES is "yes", then the home directories will be created as
# /home/groupname/user.
GROUPHOMES=no
# If LETTERHOMES is "yes", then the created home directories will have
# an extra directory - the first letter of the user name. For example:
# /home/u/user.
LETTERHOMES=no
# The SKEL variable specifies the directory containing "skeletal" user
# files; in other words, files such as a sample .profile that will be
# copied to the new user's home directory when it is created.
SKEL=/etc/skel
# FIRST_SYSTEM_[GU]ID to LAST_SYSTEM_[GU]ID inclusive is the range for UIDs
# for dynamically allocated administrative and system accounts/groups.
# Please note that system software, such as the users allocated by the base-passwd
# package, may assume that UIDs less than 100 are unallocated.
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999
FIRST_SYSTEM_GID=100
LAST_SYSTEM_GID=999
# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of dynamically
# allocated user accounts/groups.
FIRST_UID=1000
LAST_UID=59999
FIRST_GID=1000
LAST_GID=59999
# The USERGROUPS variable can be either "yes" or "no". If "yes" each
# created user will be given their own group to use as a default. If
# "no", each created user will be placed in the group whose gid is
# USERS_GID (see below).
USERGROUPS=yes
# If USERGROUPS is "no", then USERS_GID should be the GID of the group
# `users' (or the equivalent group) on your system.
USERS_GID=100
# If DIR_MODE is set, directories will be created with the specified
# mode. Otherwise the default mode 0755 will be used.
DIR_MODE=0755
# If SETGID_HOME is "yes" home directories for users with their own
# group the setgid bit will be set. This was the default for
# versions << 3.13 of adduser. Because it has some bad side effects we
# no longer do this per default. If you want it nevertheless you can
# still set it here.
SETGID_HOME=no
# If QUOTAUSER is set, a default quota will be set from that user with
# `edquota -p QUOTAUSER newuser'
QUOTAUSER=""
# If SKEL_IGNORE_REGEX is set, adduser will ignore files matching this
# regular expression when creating a new home directory
SKEL_IGNORE_REGEX="dpkg-(old|new|dist|save)"
# Set this if you want the --add_extra_groups option to adduser to add
# new users to other groups.
# This is the list of groups that new non-system users will be added to
# Default:
EXTRA_GROUPS="dialout cdrom floppy audio video plugdev users"
# If ADD_EXTRA_GROUPS is set to something non-zero, the EXTRA_GROUPS
# option above will be default behavior for adding new, non-system users
ADD_EXTRA_GROUPS=1
# check user and group names also against this regular expression.
#NAME_REGEX="^[a-z][-a-z0-9_]*\$"

View file

@ -0,0 +1,54 @@
# Configuration file for /sbin/dhclient.
#
# This is a sample configuration file for dhclient. See dhclient.conf's
# man page for more information about the syntax of this file
# and a more comprehensive list of the parameters understood by
# dhclient.
#
# Normally, if the DHCP server provides reasonable information and does
# not leave anything out (like the domain name, for example), then
# few changes must be made to this file, if any.
#
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers;
#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
#send dhcp-lease-time 3600;
#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;
#require subnet-mask, domain-name-servers;
timeout 5;
#retry 60;
#reboot 10;
#select-timeout 5;
#initial-interval 2;
#script "/sbin/dhclient-script";
#media "-link0 -link1 -link2", "link0 link1";
#reject 192.33.137.209;
#alias {
# interface "eth0";
# fixed-address 192.5.5.213;
# option subnet-mask 255.255.255.255;
#}
#lease {
# interface "eth0";
# fixed-address 192.33.137.200;
# medium "link0 link1";
# option host-name "andare.swiftmedia.com";
# option subnet-mask 255.255.255.0;
# option broadcast-address 192.33.137.255;
# option routers 192.33.137.250;
# option domain-name-servers 127.0.0.1;
# renew 2 2000/1/12 00:00:01;
# rebind 2 2000/1/12 00:00:01;
# expire 2 2000/1/12 00:00:01;
#}

View file

@ -0,0 +1,2 @@
reform

View file

@ -0,0 +1,4 @@
127.0.0.1 localhost reform
::1 localhost ip6-localhost ip6-loopback reform
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

View file

@ -0,0 +1,4 @@
/usr/local/lib
/usr/local/lib/dri
include /etc/ld.so.conf.d/*.conf

View file

@ -0,0 +1,14 @@
%G
▒ ▒ ▒
██▒ ██▒ ██▒ Welcome to Debian GNU/Linux
████▒ ████▒ ████▒ ██████▒ on MNT Reform
██████▒ ██████▒ ██████▒ ██████▒ System Image: 2021-03-04
███████████████████████████
███▒███████▒███████▒███████ https://mntre.com/reform
███ ▒█████ ▒█████ ▒█████ https://www.debian.org
▒███ ▒███ ▒███
▒█ ▒█ ▒█ ████████████████████████

View file

@ -0,0 +1 @@
nameserver 8.8.8.8

View file

@ -0,0 +1,11 @@
[Unit]
Description=MNT Reform Hardware Defaults Setup
[Service]
Type=oneshot
ExecStart=/usr/sbin/reform-hw-setup.sh
StandardOutput=journal
[Install]
WantedBy=sysinit.target

View file

@ -0,0 +1,85 @@
#!/bin/bash
exec 3>/tmp/build_error.log
function error {
>&2 printf "\e[31mE\e[0m: %s\n" "$1"
}
function get_current_dir {
# this function return the absolute path of the script
local script_path
script_path="$(dirname $0)"
# If the path begin with /, this is an absolute part
if [[ "$script_path" =~ ^/[[:graph:]]*$ ]]
then
printf "%s" "$script_path"
return
fi
local current_path
current_path="$(pwd)"
if [[ $script_path == "." ]]
then
script_path=""
elif [[ $script_path =~ ^./[[:graph:]]*$ ]]
then
script_path=${script_path##./}
echo " $current_path trad: $script_path"
else
while [[ $script_path =~ ^../[[:graph:]]*$ ]]
do
script_path="${script_path##../}"
current_path="${current_path%/*}"
done
fi
printf "%s/%s" "${current_path}" "${script_path}"
}
current_dir=$(get_current_dir)
scripts_dir="${current_dir}/scripts"
for script in ${scripts_dir}/*.sh
do
source $script
printf "\nBuilding %s\n" "$name"
printf " >> cloning repository\n"
$clone_command 2>&3 || {
error "Error when cloning $name"
exit 1
}
post_clone_hook
cd $clone_directory
if [[ ! $patches_dir == 0 ]]
then
printf " >> patching\n"
for patch in ${current_dir}/${patches_dir}/*
do
printf " > patchfile: %s" "$patch"
patch -p1 < "$patch" || {
error "Error whan applying patch, check log\n";
exit 1;
}
done
fi
printf " >> configure\n"
$configure_command 2>&3 1>/dev/null|| {
error "Error when configuring $name, command: $configure_command"
exit 1
}
post_configure_hook
printf " >> Build and install\n"
$build_command 2>&3 || {
error "Error when buildind and installing $name, command: $build_command"
exit 1
}
cd ..
post_install_hook
done
exit 0

View file

@ -0,0 +1,436 @@
From 96106df17897b862b87937d6222a3e6483f45480 Mon Sep 17 00:00:00 2001
From: Lucas Stach <l.stach@pengutronix.de>
Date: Fri, 13 Nov 2020 14:26:23 +0100
Subject: [PATCH 1/6] frontend/dri: copy image use in dup_image
Don't lose the use flags when dup'ing an image.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
---
src/gallium/frontends/dri/dri2.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c
index 0c0168497a2..1cd42cd8114 100644
--- a/src/gallium/frontends/dri/dri2.c
+++ b/src/gallium/frontends/dri/dri2.c
@@ -1308,6 +1308,7 @@ dri2_dup_image(__DRIimage *image, void *loaderPrivate)
img->dri_format = image->dri_format;
/* This should be 0 for sub images, but dup is also used for base images. */
img->dri_components = image->dri_components;
+ img->use = image->use;
img->loader_private = loaderPrivate;
return img;
--
GitLab
From 00add4be8620175ccc69869e22479962dacdce9d Mon Sep 17 00:00:00 2001
From: Lucas Stach <l.stach@pengutronix.de>
Date: Fri, 13 Nov 2020 14:38:41 +0100
Subject: [PATCH 2/6] dri: bring back use flags for createImageWithModifiers
createImageWithModifiers dropped the use flags that were present with
the createImage interface as it was believed at the time that all those
use flags could be expressed as a modifier. This turned out to be untrue,
as there are some use flags like SCANOUT and the BACKBUFFER hint that
won't ever get a eqivalent modifier expression.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
---
include/GL/internal/dri_interface.h | 1 +
src/egl/drivers/dri2/platform_wayland.c | 4 ++--
src/gallium/frontends/dri/dri2.c | 5 ++---
src/gbm/backends/dri/gbm_dri.c | 2 +-
src/loader/loader_dri3_helper.c | 3 +++
src/mesa/drivers/dri/i965/intel_screen.c | 2 +-
6 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h
index 39d5dd07533..222821428d0 100644
--- a/include/GL/internal/dri_interface.h
+++ b/include/GL/internal/dri_interface.h
@@ -1678,6 +1678,7 @@ struct __DRIimageExtensionRec {
int width, int height, int format,
const uint64_t *modifiers,
const unsigned int modifier_count,
+ unsigned int use,
void *loaderPrivate);
/*
diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
index c0b26c4b623..bb508cbe421 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -595,7 +595,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
dri2_surf->base.Height,
linear_dri_image_format,
&linear_mod,
- 1,
+ 1, use_flags,
NULL);
} else {
dri2_surf->back->linear_copy =
@@ -624,7 +624,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
dri2_surf->base.Height,
dri_image_format,
modifiers,
- num_modifiers,
+ num_modifiers, use_flags,
NULL);
} else {
dri2_surf->back->dri_image =
diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c
index 1cd42cd8114..1f1e7a9a65e 100644
--- a/src/gallium/frontends/dri/dri2.c
+++ b/src/gallium/frontends/dri/dri2.c
@@ -1074,12 +1074,11 @@ static __DRIimage *
dri2_create_image_with_modifiers(__DRIscreen *dri_screen,
int width, int height, int format,
const uint64_t *modifiers,
- const unsigned count,
+ const unsigned count, unsigned int use,
void *loaderPrivate)
{
return dri2_create_image_common(dri_screen, width, height, format,
- __DRI_IMAGE_USE_SHARE, modifiers, count,
- loaderPrivate);
+ use, modifiers, count, loaderPrivate);
}
static bool
diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c
index b5634741554..aff3a107e7d 100644
--- a/src/gbm/backends/dri/gbm_dri.c
+++ b/src/gbm/backends/dri/gbm_dri.c
@@ -1173,7 +1173,7 @@ gbm_dri_bo_create(struct gbm_device *gbm,
width, height,
dri_format,
modifiers, count,
- bo);
+ dri_use, bo);
if (bo->image) {
/* The client passed in a list of invalid modifiers */
diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
index ccf8d1795e7..6fc6a2b705a 100644
--- a/src/loader/loader_dri3_helper.c
+++ b/src/loader/loader_dri3_helper.c
@@ -1407,6 +1407,9 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format,
format,
modifiers,
count,
+ __DRI_IMAGE_USE_SHARE |
+ __DRI_IMAGE_USE_SCANOUT |
+ __DRI_IMAGE_USE_BACKBUFFER,
buffer);
}
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index 4492d43c040..4511b962eef 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -893,7 +893,7 @@ static __DRIimage *
intel_create_image_with_modifiers(__DRIscreen *dri_screen,
int width, int height, int format,
const uint64_t *modifiers,
- const unsigned count,
+ const unsigned count, unsigned int use,
void *loaderPrivate)
{
return intel_create_image_common(dri_screen, width, height, format, 0,
--
GitLab
From 587aac46dbadf2aca1489aadd4216e592e11e17b Mon Sep 17 00:00:00 2001
From: Lucas Stach <l.stach@pengutronix.de>
Date: Fri, 13 Nov 2020 14:59:52 +0100
Subject: [PATCH 3/6] frontend/dri: add EXPLICIT_FLUSH hint in
dri2_resource_get_param
dri2_resource_get_param() is called from two different places right now.
Only one of them adds the EXPLICIT_FLUSH hint to the handle usage, which
may disable the optimizations provided by this hint without a reason.
Make sure to always add this hint when appropriate.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
---
src/gallium/frontends/dri/dri2.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c
index 1f1e7a9a65e..7851ebceb3e 100644
--- a/src/gallium/frontends/dri/dri2.c
+++ b/src/gallium/frontends/dri/dri2.c
@@ -1198,6 +1198,9 @@ dri2_resource_get_param(__DRIimage *image, enum pipe_resource_param param,
if (!pscreen->resource_get_param)
return false;
+ if (image->use & __DRI_IMAGE_USE_BACKBUFFER)
+ handle_usage |= PIPE_HANDLE_USAGE_EXPLICIT_FLUSH;
+
return pscreen->resource_get_param(pscreen, NULL, image->texture,
image->plane, 0, 0, param, handle_usage,
value);
@@ -1242,9 +1245,6 @@ dri2_query_image_by_resource_param(__DRIimage *image, int attrib, int *value)
handle_usage = PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE;
- if (image->use & __DRI_IMAGE_USE_BACKBUFFER)
- handle_usage |= PIPE_HANDLE_USAGE_EXPLICIT_FLUSH;
-
if (!dri2_resource_get_param(image, param, handle_usage, &res_param))
return false;
--
GitLab
From 59f74212bbb5e28badd0775929e42856c9a01d35 Mon Sep 17 00:00:00 2001
From: Lucas Stach <l.stach@pengutronix.de>
Date: Fri, 13 Nov 2020 15:03:37 +0100
Subject: [PATCH 4/6] etnaviv: remove double assigment of surface->texture
surf->base.texture is already assigned earlier via a proper
pipe_resource_reference call. Remove the superfluous assignement.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
---
src/gallium/drivers/etnaviv/etnaviv_surface.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/gallium/drivers/etnaviv/etnaviv_surface.c b/src/gallium/drivers/etnaviv/etnaviv_surface.c
index c78973bdb09..52a937652d2 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_surface.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_surface.c
@@ -112,7 +112,6 @@ etna_create_surface(struct pipe_context *pctx, struct pipe_resource *prsc,
etna_screen_resource_alloc_ts(pctx->screen, rsc);
}
- surf->base.texture = &rsc->base;
surf->base.format = templat->format;
surf->base.width = rsc->levels[level].width;
surf->base.height = rsc->levels[level].height;
--
GitLab
From 570908323e02c4558f5a9abc2d82621056cd65ab Mon Sep 17 00:00:00 2001
From: Lucas Stach <l.stach@pengutronix.de>
Date: Tue, 17 Nov 2020 12:08:13 +0100
Subject: [PATCH 5/6] etnaviv: compact etna_state_updates
Just reclaim a bit of screen real estate, purely cosmetic change.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
---
src/gallium/drivers/etnaviv/etnaviv_state.c | 18 ++++++------------
1 file changed, 6 insertions(+), 12 deletions(-)
diff --git a/src/gallium/drivers/etnaviv/etnaviv_state.c b/src/gallium/drivers/etnaviv/etnaviv_state.c
index 1b4a7040b50..84fea58ecb5 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_state.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_state.c
@@ -749,24 +749,18 @@ struct etna_state_updater {
static const struct etna_state_updater etna_state_updates[] = {
{
etna_shader_update_vertex, ETNA_DIRTY_SHADER | ETNA_DIRTY_VERTEX_ELEMENTS,
- },
- {
+ }, {
etna_shader_link, ETNA_DIRTY_SHADER,
- },
- {
+ }, {
etna_update_blend, ETNA_DIRTY_BLEND | ETNA_DIRTY_FRAMEBUFFER
- },
- {
+ }, {
etna_update_blend_color, ETNA_DIRTY_BLEND_COLOR | ETNA_DIRTY_FRAMEBUFFER,
- },
- {
+ }, {
etna_update_ts_config, ETNA_DIRTY_DERIVE_TS,
- },
- {
+ }, {
etna_update_clipping, ETNA_DIRTY_SCISSOR | ETNA_DIRTY_FRAMEBUFFER |
ETNA_DIRTY_RASTERIZER | ETNA_DIRTY_VIEWPORT,
- },
- {
+ }, {
etna_update_zsa, ETNA_DIRTY_ZSA | ETNA_DIRTY_SHADER,
}
};
--
GitLab
From 537c7a6ea3fd2e5a6433e52b406ba39b89f520d9 Mon Sep 17 00:00:00 2001
From: Lucas Stach <l.stach@pengutronix.de>
Date: Fri, 13 Nov 2020 15:05:55 +0100
Subject: [PATCH 6/6] etnaviv: flush used render buffers on context flush when
neccessary
Some resources like backbuffers are explicitly flushed by the frontend
at the appropriate time, others however won't get flushed explicitly.
Remember those resources when they get emitted as a render buffer and
flush them on a context flush to make their content visible to other
entities sharing the buffer.
We still keep the optimized path for most resources where the frontend
promises to do the flushing for us and only enable implicit flushing
when a buffer handle is exported/imported without the
PIPE_HANDLE_USAGE_EXPLICIT_FLUSH flag set.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
---
src/gallium/drivers/etnaviv/etnaviv_context.c | 16 ++++++++++++++++
src/gallium/drivers/etnaviv/etnaviv_context.h | 3 +++
src/gallium/drivers/etnaviv/etnaviv_resource.c | 7 +++++++
src/gallium/drivers/etnaviv/etnaviv_resource.h | 2 ++
src/gallium/drivers/etnaviv/etnaviv_state.c | 17 +++++++++++++++++
5 files changed, 45 insertions(+)
diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.c b/src/gallium/drivers/etnaviv/etnaviv_context.c
index 9c334a450c6..80c5d430419 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_context.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_context.c
@@ -128,6 +128,9 @@ etna_context_destroy(struct pipe_context *pctx)
_mesa_set_destroy(ctx->used_resources_write, NULL);
}
+ if (ctx->flush_resources)
+ _mesa_set_destroy(ctx->flush_resources, NULL);
+
mtx_unlock(&ctx->lock);
if (ctx->dummy_desc_bo)
@@ -475,6 +478,14 @@ etna_flush(struct pipe_context *pctx, struct pipe_fence_handle **fence,
list_for_each_entry(struct etna_acc_query, aq, &ctx->active_acc_queries, node)
etna_acc_query_suspend(aq, ctx);
+ /* flush all resources that need an implicit flush */
+ set_foreach(ctx->flush_resources, entry) {
+ struct pipe_resource *prsc = (struct pipe_resource *)entry->key;
+
+ pctx->flush_resource(pctx, prsc);
+ }
+ _mesa_set_clear(ctx->flush_resources, NULL);
+
etna_cmd_stream_flush(ctx->stream, ctx->in_fence_fd,
(flags & PIPE_FLUSH_FENCE_FD) ? &out_fence_fd : NULL);
@@ -581,6 +592,11 @@ etna_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
if (!ctx->used_resources_write)
goto fail;
+ ctx->flush_resources = _mesa_set_create(NULL, _mesa_hash_pointer,
+ _mesa_key_pointer_equal);
+ if (!ctx->flush_resources)
+ goto fail;
+
mtx_init(&ctx->lock, mtx_recursive);
/* context ctxate setup */
diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.h b/src/gallium/drivers/etnaviv/etnaviv_context.h
index dd6af3d93e6..112902aac8a 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_context.h
+++ b/src/gallium/drivers/etnaviv/etnaviv_context.h
@@ -206,6 +206,9 @@ struct etna_context {
struct set *used_resources_read;
struct set *used_resources_write;
+ /* resources that must be flushed implicitly at the context flush time */
+ struct set *flush_resources;
+
mtx_t lock;
};
diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c
index ae4f24b9b44..0c8c28e66aa 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_resource.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c
@@ -265,6 +265,7 @@ etna_resource_alloc(struct pipe_screen *pscreen, unsigned layout,
rsc->base.nr_samples = nr_samples;
rsc->layout = layout;
rsc->halign = halign;
+ rsc->explicit_flush = true;
pipe_reference_init(&rsc->base.reference, 1);
util_range_init(&rsc->valid_buffer_range);
@@ -519,6 +520,9 @@ etna_resource_from_handle(struct pipe_screen *pscreen,
rsc->layout = modifier_to_layout(handle->modifier);
rsc->halign = TEXTURE_HALIGN_FOUR;
+ if (usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH)
+ rsc->explicit_flush = true;
+
level->width = tmpl->width0;
level->height = tmpl->height0;
level->depth = tmpl->depth0;
@@ -584,6 +588,9 @@ etna_resource_get_handle(struct pipe_screen *pscreen,
handle->offset = rsc->levels[0].offset;
handle->modifier = layout_to_modifier(rsc->layout);
+ if (!(usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH))
+ rsc->explicit_flush = false;
+
if (handle->type == WINSYS_HANDLE_TYPE_SHARED) {
return etna_bo_get_name(rsc->bo, &handle->handle) == 0;
} else if (handle->type == WINSYS_HANDLE_TYPE_KMS) {
diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.h b/src/gallium/drivers/etnaviv/etnaviv_resource.h
index cb83e891d34..167cf4ed069 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_resource.h
+++ b/src/gallium/drivers/etnaviv/etnaviv_resource.h
@@ -93,6 +93,8 @@ struct etna_resource {
struct pipe_resource *texture;
/* for when PE doesn't support the base layout */
struct pipe_resource *render;
+ /* frontend flushes resource via an explicit call to flush_resource */
+ bool explicit_flush;
enum etna_resource_status status;
diff --git a/src/gallium/drivers/etnaviv/etnaviv_state.c b/src/gallium/drivers/etnaviv/etnaviv_state.c
index 84fea58ecb5..5848735ab14 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_state.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_state.c
@@ -741,6 +741,21 @@ etna_update_zsa(struct etna_context *ctx)
return true;
}
+static bool
+etna_record_flush_resources(struct etna_context *ctx)
+{
+ struct pipe_framebuffer_state *fb = &ctx->framebuffer_s;
+
+ if (fb->nr_cbufs > 0) {
+ struct etna_surface *surf = etna_surface(fb->cbufs[0]);
+
+ if (!etna_resource(surf->prsc)->explicit_flush)
+ _mesa_set_add(ctx->flush_resources, surf->prsc);
+ }
+
+ return true;
+}
+
struct etna_state_updater {
bool (*update)(struct etna_context *ctx);
uint32_t dirty;
@@ -762,6 +777,8 @@ static const struct etna_state_updater etna_state_updates[] = {
ETNA_DIRTY_RASTERIZER | ETNA_DIRTY_VIEWPORT,
}, {
etna_update_zsa, ETNA_DIRTY_ZSA | ETNA_DIRTY_SHADER,
+ }, {
+ etna_record_flush_resources, ETNA_DIRTY_FRAMEBUFFER,
}
};
--
GitLab

View file

@ -0,0 +1,12 @@
--- a/src/gallium/drivers/etnaviv/etnaviv_screen.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c
@@ -445,6 +445,10 @@ etna_screen_is_format_supported(struct pipe_screen *pscreen,
struct etna_screen *screen = etna_screen(pscreen);
unsigned allowed = 0;
+ /* HACK to disable all MSAA, as is causes GPU crashes */
+ if (sample_count > 1)
+ return false;
+
if (!gpu_supports_texture_target(screen, target))
return false;

View file

@ -0,0 +1,19 @@
name="DRM"
patches_dir=0
clone_directory="drm"
clone_command="git clone --depth 1 https://gitlab.freedesktop.org/mesa/drm.git"
configure_command="meson build -Detnaviv=true -Dradeon=false -Damdgpu=false -Dvmwgfx=false -Dfreedreno=false -Dvc4=false -Dnouveau=false"
build_command="ninja -C build install"
## Hooks
function post_clone_hook {
return
}
function post_configure_hook {
return
}
function post_install_hook {
ldconfig
}

View file

@ -0,0 +1,19 @@
name="MESA"
patches_dir="mesa_patches"
clone_directory="mesa"
clone_command="git clone --depth 1 --branch mesa-20.3.4 https://gitlab.freedesktop.org/mesa/mesa.git"
configure_command="meson build -Dplatforms=x11,wayland -Ddri3=true -Dgallium-drivers=swrast,etnaviv,kmsro,virgl -Dgbm=enabled -Degl=enabled -Dbuildtype=release -Db_ndebug=true"
build_command="ninja -C build install"
## Hooks
function post_clone_hook {
return
}
function post_configure_hook {
return
}
function post_install_hook {
ldconfig
}

View file

@ -0,0 +1,19 @@
name="Wayland"
patches_dir=0
clone_directory="wayland"
clone_command="git clone --depth 1 https://github.com/wayland-project/wayland.git"
configure_command="meson build -Ddocumentation=false"
build_command="ninja -C build install"
## Hooks
function post_clone_hook {
return
}
function post_configure_hook {
return
}
function post_install_hook {
ldconfig
}

View file

@ -0,0 +1,19 @@
name="wlroots"
patches_dir=0
clone_directory="wlroots"
clone_command="git clone --depth 1 --branch=0.12.0 https://github.com/swaywm/wlroots.git"
configure_command="meson build"
build_command="ninja -C build install"
## Hooks
function post_clone_hook {
return
}
function post_configure_hook {
return
}
function post_install_hook {
ldconfig
}

View file

@ -0,0 +1,19 @@
name="sway"
patches_dir=0
clone_directory="sway"
clone_command="git clone --depth 1 --branch=1.5.1 https://github.com/swaywm/sway.git"
configure_command="meson build"
build_command="ninja -C build install"
## Hooks
function post_clone_hook {
return
}
function post_configure_hook {
return
}
function post_install_hook {
chmod +s /usr/local/bin/sway
}

View file

@ -0,0 +1,21 @@
name="xserver"
patches_dir="xserver_patches"
clone_directory="xserver"
clone_command="git clone --depth 1 --branch-xorg-server-1.20.11 https://gitlab.freedesktop.org/xorg/xserver.git"
configure_command="meson build -Dxorg=true -Dxwayland=true -Dglamor=true -Dxwayland_eglstream=false -Dxnest=false -Ddmx=false -Dxvfb=true -Dxwin=false -Dxephyr=false -Ddri3=true"
build_command="ninja -C build install"
## Hooks
function post_clone_hook {
return
}
function post_configure_hook {
return
}
function post_install_hook {
# overwrite /usr/bin/Xwayland with symlink to our Xwayland (FIXME: brittle)
rm -f /usr/bin/Xwayland
ln -s /usr/local/bin/Xwayland /usr/bin/Xwayland
}

View file

@ -0,0 +1,19 @@
name="Waybar"
patches_dir=0
clone_directory="Waybar"
clone_command="git clone --depth 1 https://github.com/Alexays/Waybar.git"
configure_command="meson build"
build_command="ninja -C build install"
## Hooks
function post_clone_hook {
return
}
function post_configure_hook {
return
}
function post_install_hook {
return
}

View file

@ -0,0 +1,32 @@
name="WayVNC"
patches_dir=0
clone_directory="Waybar"
clone_command="git clone --depth 1 https://github.com/any1/wayvnc.git"
configure_command="meson build"
build_command="ninja -C build install"
## Hooks
function post_clone_hook {
printf " >> post-clone hook : clone subproject\n"
cd $clone_directory
mkdir subprojects
cd subprojects
git clone https://github.com/any1/neatvnc.git 1>/dev/null || {
error "Error when cloning netvnc.\n";
exit 1;
}
git clone https://github.com/any1/aml.git 1>/dev/null || {
error "Error when cloning aml.\n";
exit 1;
}
cd ..
}
function post_configure_hook {
return
}
function post_install_hook {
return
}

View file

@ -0,0 +1,19 @@
name="Cage"
patches_dir=0
clone_directory="cage"
clone_command="git clone --depth 1 https://github.com/Hjdskes/cage.git"
configure_command="meson build"
build_command="ninja -C build install"
## Hooks
function post_clone_hook {
return
}
function post_configure_hook {
return
}
function post_install_hook {
return
}

View file

@ -0,0 +1,13 @@
diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index be0741a..1dd2876 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -1584,6 +1584,8 @@ glamor_composite_clipped_region(CARD8 op,
if (prect != rect)
free(prect);
out:
+ glFinish();
+
if (temp_src != source)
FreePicture(temp_src, 0);
if (temp_mask != mask)

View file

@ -0,0 +1,98 @@
# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; either version 2.1 of the
# License, or (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
; Analog input path for MNT Reform, which has a headset mic input
; that is only on the left channel (mono).
[General]
priority = 100
[Element Capture]
switch = mute
volume = ignore
[Element Mic]
required-absent = any
[Element Mic Boost]
required-absent = any
[Element Dock Mic]
required-absent = any
[Element Dock Mic Boost]
required-absent = any
[Element Front Mic]
required-absent = any
[Element Front Mic Boost]
required-absent = any
[Element Int Mic]
required-absent = any
[Element Int Mic Boost]
required-absent = any
[Element Internal Mic]
required-absent = any
[Element Internal Mic Boost]
required-absent = any
[Element Rear Mic]
required-absent = any
[Element Rear Mic Boost]
required-absent = any
[Element Headset]
required-absent = any
[Element Headset Mic]
required-absent = any
[Element Headset Mic Boost]
required-absent = any
[Element Headphone Mic]
required-absent = any
[Element Headphone Mic Boost]
required-absent = any
[Element Line]
required-absent = any
[Element Line Boost]
required-absent = any
[Element Aux]
required-absent = any
[Element Video]
required-absent = any
[Element Mic/Line]
required-absent = any
[Element TV Tuner]
required-absent = any
[Element FM]
required-absent = any
.include analog-input.conf.common

View file

@ -0,0 +1,24 @@
[General]
auto-profiles = yes
[Mapping stereo-out]
device-strings = hw:0
fallback = yes
channel-map = left,right
paths-output = analog-output analog-output-speaker analog-output-headphones
direction = output
priority = 1
[Mapping headset-mono-in]
device-strings = hw:0
fallback = yes
channel-map = mono
paths-input = analog-input-reform
direction = input
priority = 1
[Profile output:stereo-out+input:mono-in]
description = MNT Reform
output-mappings = stereo-out
input-mappings = headset-mono-in

View file

@ -0,0 +1,10 @@
#!/bin/bash
printf "Essential hook script for mmdebstrap\n\n"
printf "Configure locales\n"
chroot $1 ln --force --symbolic /usr/share/zoneinfo/Europe/Paris /etc/localtime
echo "locales locales/default_environment_locale select en_US.UTF-8" | chroot $1 debconf-set-selections
echo "locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8" | chroot $1 debconf-set-selections
chroot $1 dpkg --configure -a
exit 0

View file

@ -0,0 +1,5 @@
#!/bin/bash
printf "Extract hook script for mmdebstrap\n\n"
exit 0

View file

@ -0,0 +1,5 @@
#!/bin/bash
printf "Setup hook script for mmdebstrap\n\n"
exit 0

View file

@ -0,0 +1,92 @@
alsa-utils
arc-theme
bash-completion
breeze-icon-theme
brightness-udev
brightnessctl
bsdmainutils
ca-certificates
connman-gtk
console-data
console-setup
coreutils
cpio
cron
cryptsetup
curl
debian-archive-keyring
dosfstools
e2fsprogs
engrampa
eog
evince
fbset
file
fonts-noto-color-emoji
gedit
git
gpg
gnome-disk-utility
gnome-icon-theme
gnome-system-monitor
gpgv
gpm
grim
htop
ifupdown
init-system-helpers
iproute2
iptables
iputils-ping
ircii
isc-dhcp-client
kbd
less
libblockdev-crypto2
libblockdev-dm2
libpam-systemd
lm-sensors
locales
lxpolkit
man-db
mesa-utils
micro
mpv
nano
ncdu
ncurses-term
net-tools
netbase
netcat-traditional
nfacct
ntp
ntpdate
parted
pavucontrol
pciutils
policykit-1
procps
pulseaudio
python3-psutil
readline-common
rfkill
rofi
screen
slurp
sudo
sway
systemd
systemd-sysv
telnet
thunar
tmux
traceroute
unicode-data
usbutils
vim
w3m
wget
wpasupplicant
xfce4-terminal
xterm
xwayland

View file

@ -0,0 +1,86 @@
autoconf
autopoint
bison
cmake
expat
flex
g++
gcc
gettext
git
intltool
libbsd-dev
libdbus-1-dev
libdbusmenu-gtk3-dev
libdrm-dev
libepoxy-dev
libevdev-dev
libflac-dev
libfmt-dev
libgarcon-1-dev
libgbm-dev
libgirepository1.0-dev
libgtkmm-3.0-dev
libinput-dev
libjson-c-dev
libjsoncpp-dev
libmpdclient-dev
libmpeg2-4-dev
libmpg123-dev
libmtdev-dev
libnl-3-dev
libnl-genl-3-dev
libpango1.0-dev
libpciaccess-dev
libpcre3-dev
libpixman-1-dev
libpng-dev
libpulse-dev
libsdl2-dev
libsdl2-gfx-dev
libsdl2-image-dev
libsdl2-mixer-dev
libsdl2-net-dev
libsdl2-ttf-dev
libsigc++-2.0-dev
libspdlog-dev
libsystemd-dev
libtool
libudev-dev
libunwind-dev
libwayland-dev
libwayland-egl-backend-dev
libx11-dev
libx11-xcb-dev
libxcb-composite0-dev
libxcb-dri2-0-dev
libxcb-dri3-dev
libxcb-glx0-dev
libxcb-icccm4-dev
libxcb-present-dev
libxcb-sync-dev
libxcb-xfixes0-dev
libxcb-xinput-dev
libxdamage-dev
libxext-dev
libxfce4ui-2-dev
libxfixes-dev
libxfont-dev
libxkbcommon-dev
libxkbfile-dev
libxml2-dev
libxrandr-dev
libxshmfence-dev
libxxf86vm-dev
llvm-dev
make
meson
nettle-dev
patch
python3-mako
python3-setuptools
wayland-protocols
xfce4-dev-tools
xfonts-utils
xutils-dev
zlib1g-dev