diff --git a/.gitignore b/.gitignore index 7ae7b19..fce5a1d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,7 @@ /config/*.cfg # Ignore generated datasets. /benchmark/website/dataset/*.js +# Ignore configuration +/bundle/config # Ignore Python cache -__pycache__ \ No newline at end of file +__pycache__ diff --git a/bundle/bundle-linux.sh b/bundle/bundle-linux.sh new file mode 100755 index 0000000..7b88eb9 --- /dev/null +++ b/bundle/bundle-linux.sh @@ -0,0 +1,108 @@ +#!/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. + +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 + +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 + +# 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}" + +# 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