This repository has been archived on 2023-02-09. You can view files and clone it, but cannot push or open issues or pull requests.
Files
blender-benchmark-bundle/bundle/bundle-linux.sh

156 lines
4.8 KiB
Bash
Raw Normal View History

#!/bin/bash
################################################################################
#
# Prepares benchmark bundle for Linux.
#
# This is so called "works for me (tm)".
#
#
# The following settings are to be passed via config file in this directory
# or via environment variable:
#
# - STORAGE_DIRECTORY
#
# This is directory where persistent "temporary" files will be stored.
# For example, this is where benchmark repository is being checked out.
#
################################################################################
SCRIPT=$(readlink -f $0)
SCRIPTPATH=`dirname $SCRIPT`
CONFIG="${SCRIPTPATH}/config"
if [ ! -f ${CONFIG} ]; then
echo "Configuration is not provided, will expect all settings to be"
echo "passed via environment variables."
else
. "${CONFIG}"
fi
################################################################################
# Initialization and sanity checks.
UNAME=`which uname`
if [ -z "${UNAME}" ]; then
echo "ERROR: uname is not found, can not continue."
exit 1
fi
KERNEL_NAME=`$UNAME -s`
BITNESS="64"
if [ "${KERNEL_NAME}" == "Linux" ]; then
MACHINE_TYPE=`${UNAME} -m`
if [ "${MACHINE_TYPE}" == 'x86_64' ]; then
BITNESS="64"
else
BITNESS="32"
fi
fi
SVN_BENCHMARK_URL="https://svn.blender.org/svnroot/bf-blender/trunk/lib/benchmarks/cycles/"
SVN_BENCHMARK_CHECKOUT_DIRECTORY="${STORAGE_DIRECTORY}/benchmark_scenes"
BUNDLE_DIRECTORY="${STORAGE_DIRECTORY}/blender-benchmark"
SCENES="barbershop_interior bmw27 classroom fishy_cat koro pavillon_barcelona victor"
IMAGE_WIDTH=1600 # 800*2
IMAGE_HEIGHT=740 # 370*2
# Information about Blender to bundle.
if [ "${KERNEL_NAME}" == "Linux" ]; then
if [ "${BITNESS}" == "64" ]; then
BLENDER_PLATFORM_AND_EXTENSION="linux-glibc219-x86_64.tar.bz2"
else
BLENDER_PLATFORM_AND_EXTENSION="linux-glibc219-i686.tar.bz2"
fi
else
echo "ERROR: Unsupported platform."
exit 1
fi
BLENDER_RELEASE="2.79b"
BLENDER_RELEASE_NO_LETTER=${BLENDER_RELEASE//[a-z]/}
BLENDER_RELEASE_URL="https://download.blender.org/release/Blender${BLENDER_RELEASE_NO_LETTER}"
BLENDER_RELEASE_FILE="blender-${BLENDER_RELEASE}-${BLENDER_PLATFORM_AND_EXTENSION}"
BLENDER_FULL_URL="${BLENDER_RELEASE_URL}/${BLENDER_RELEASE_FILE}"
SVN=`which svn`
if [ -z "${SVN}" ]; then
echo "ERROR: Subversion is not found, can not continue."
exit 1
fi
CONVERT=`which convert`
if [ -z "${CONVERT}" ]; then
echo "ERROR: ImageMagic's convert is not found, can not continue."
exit 1
fi
WGET=`which wget`
if [ -z "${WGET}" ]; then
echo "ERROR: wget is not found, can not continue."
exit 1
fi
# Make sure storage directory exists.
if [ -z ${STORAGE_DIRECTORY} ]; then
echo "ERROR: STORAGE_DIRECTORY is not specified, can not continue."
exit 1
fi
mkdir -p "${STORAGE_DIRECTORY}"
if [ -z "${BLENDER_VERSION}" ]; then
echo ""
fi
################################################################################
# Check out benchmark repository.
if [ -d "${SVN_BENCHMARK_CHECKOUT_DIRECTORY}" ]; then
echo "Updating benchmark scenes..."
${SVN} up "${SVN_BENCHMARK_CHECKOUT_DIRECTORY}"
else
echo "Making a new checkout of scenes..."
${SVN} checkout "${SVN_BENCHMARK_URL}" "${SVN_BENCHMARK_CHECKOUT_DIRECTORY}"
fi
################################################################################
# Package the bundle.
# We always start from scratch.
rm -rf "${BUNDLE_DIRECTORY}"
mkdir -p "${BUNDLE_DIRECTORY}"
# Download blender
echo "Downloading Blender..."
${WGET} -c "${BLENDER_FULL_URL}" -O "${STORAGE_DIRECTORY}/${BLENDER_RELEASE_FILE}"
echo "Unpacking Blender..."
mkdir -p "${BUNDLE_DIRECTORY}/blender"
tar -xf "${STORAGE_DIRECTORY}/${BLENDER_RELEASE_FILE}" --directory "${BUNDLE_DIRECTORY}/blender" --strip-components 1
# Create background to stack image on.
BACKGROUND_IMAGE="${STORAGE_DIRECTORY}/background.png"
${CONVERT} -size ${IMAGE_WIDTH}x${IMAGE_HEIGHT} xc:'rgb(51,51,51)' ${BACKGROUND_IMAGE}
# Copy scenes.
mkdir -p "${BUNDLE_DIRECTORY}/scenes"
echo "Bundling scenes..."
for scene in ${SCENES}; do
echo "Bundling scene ${scene}..."
cp -r "${SVN_BENCHMARK_CHECKOUT_DIRECTORY}/${scene}" "${BUNDLE_DIRECTORY}/scenes/${scene}"
# Leave single scene only.
rm -f "${BUNDLE_DIRECTORY}/scenes/${scene}/${scene}_gpu.blend"
mv "${BUNDLE_DIRECTORY}/scenes/${scene}/${scene}_cpu.blend" "${BUNDLE_DIRECTORY}/scenes/${scene}/${scene}.blend"
# Tweak image.
if true; then
input="${BUNDLE_DIRECTORY}/scenes/${scene}/${scene}.png"
input_we=`basename "${input%.*}"`
output_scaled="${STORAGE_DIRECTORY}/${input_we}_scaled.png"
output_compo="${STORAGE_DIRECTORY}/${input_we}.png"
${CONVERT} "${input}" -resize ${IMAGE_WIDTH}x${IMAGE_HEIGHT} "${output_scaled}"
${CONVERT} ${BACKGROUND_IMAGE} "${output_scaled}" -gravity center -composite "${output_compo}"
mv "${output_compo}" "${input}"
rm ${output_scaled}
fi
done