blob: fe802422167f59e6d3c3b25dee73ceb12cf06610 [file] [log] [blame]
#!/bin/sh
#
# SPDX-License-Identifier: MIT
#
# Copyright © 2020 Intel Corporation
#
# 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.
export ASSEMBLY_SOURCE=./lib/i915/shaders/clear_kernel
get_help() {
echo "Usage: ${0} [options]"
echo "Note: hsw_clear_kernel.c/ivb_clear_kernel.c automatically generated by this script should never be modified - it would be imported to i915, to use as it is..."
echo " "
echo "Please make sure your Mesa tool is compiled with "-Dtools=intel" and "-Ddri-drivers=i965", and run this script from IGT source root directory"
echo " "
echo "Options are:"
echo " -h display this help message, and exit"
echo " -g=platform generation of device: use "hsw" for gen7.5, and "ivb" for gen7 devices"
echo " -o=name_of_file output file to store Mesa assembled c-literal for the device - If none specified, default file will be used - ivb/hsw-cb_assembled"
echo " -m=mesa Path to Mesa i965_asm binary"
echo " "
echo " Usage example: \"./scripts/generate_clear_kernel.sh -g hsw -o hsw_clear_buffer.h -m ~/mesa/build/src/intel/tools/i965_asm\""
}
include_array() # $1=array_name - update Mesa output with desired format
{
array_declaration="static const u32 $(basename $1)_clear_kernel[] = {"
close_array=";"
sed -i "1s/.*/$array_declaration/" $output_file
sed -i "$ s/$/$close_array/" $output_file
}
prefix_header() # $1=filename $2=comment
{
cat <<EOF
// SPDX-License-Identifier: MIT
/*
* Copyright © 2020 Intel Corporation
*
* Generated by: IGT Gpu Tools on $(date)
*/
EOF
}
check_output_file() #check output file
{
if [ "x$output_file" != "x" ]; then
if [ -f "$output_file" ]; then
printf "Warning: The '%s' file already exist - choose another file\n" "$output_file"
get_help
exit 1
fi
else
# It is okay to overwrite default file created
output_file="$gen_device-cb_assembled"
printf "Output file not specified - using default file '%s'\n" "$output_file"
fi
}
asm_cb_kernel() # as-root <args>
{
check_output_file
# Using i965_asm tool to assemble hex file from assembly source
$mesa_i965_asm -g $gen_device -t c_literal $input_asm_source -o $output_file
if [ ! -f ${output_file} ]; then
printf "Failed to assemble CB Kernel with Mesa tool\n"
get_help
exit 1
fi
# Generate header file
if [ "$gen_device" = "hsw" ]; then
printf "Generating gen7.5 CB Kernel assembled file 'hsw_clear_kernel.c' for i915 driver...\n"
i915_filename=hsw_clear_kernel.c
include_array $gen_device
prefix_header > $i915_filename
cat $output_file >> $i915_filename
elif [ "$gen_device" = "ivb" ]; then
printf "Generating gen7 CB Kernel assembled file 'ivb_clear_kernel.c' for i915 driver...\n"
i915_filename=ivb_clear_kernel.c
include_array $gen_device
prefix_header $gen_device > $i915_filename
cat $output_file >> $i915_filename
fi
}
while getopts "hg:o:m:" opt; do
case $opt in
h) get_help; exit 0;;
g) gen_device="$OPTARG" ;;
o) output_file="$OPTARG" ;;
m) mesa_i965_asm="$OPTARG" ;;
\?)
printf "Unknown option: -%s\n" "$OPTARG"
get_help
exit 1
;;
esac
done
shift $(($OPTIND-1))
if [ "x$1" != "x" ]; then
printf "Unknown option: %s\n" "$1"
get_help
exit 1
fi
if [ "x$mesa_i965_asm" = "x" ]; then
printf "i965_asm binary not found\n"
get_help
exit 1
fi
if [ "x$gen_device" != "x" ]; then
if [ "$gen_device" = "hsw" ]; then
input_asm_source="${ASSEMBLY_SOURCE}/hsw.asm"
elif [ "$gen_device" = "ivb" ]; then
input_asm_source="${ASSEMBLY_SOURCE}/ivb.asm"
else
printf "Unknown platform specified\n"
get_help
exit 1
fi
asm_cb_kernel
else
printf "Platform generation not specified\n"
get_help
exit 1
fi