utils: gen-shader-headers: Add a utility to generate headers from shaders
Two simple script to generate a header that contains GLSL shaders translated to C arrays. Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
This commit is contained in:
parent
367b29199b
commit
a6a1fbd82b
2 changed files with 82 additions and 0 deletions
38
utils/gen-shader-header.py
Executable file
38
utils/gen-shader-header.py
Executable file
|
@ -0,0 +1,38 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
# Copyright (C) 2025, Bryan O'Donoghue.
|
||||||
|
#
|
||||||
|
# Author: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
|
||||||
|
#
|
||||||
|
# A python script which takes a list of shader files and converts into a C
|
||||||
|
# header.
|
||||||
|
#
|
||||||
|
import sys
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(sys.argv[2]) as file:
|
||||||
|
data = file.read()
|
||||||
|
data_len = len(data)
|
||||||
|
|
||||||
|
name = sys.argv[1].replace(".", "_")
|
||||||
|
name_len = name + "_len"
|
||||||
|
|
||||||
|
j = 0
|
||||||
|
print("unsigned char", name, "[] = {")
|
||||||
|
for ch in data:
|
||||||
|
print(f"0x{ord(ch):02x}, ", end="")
|
||||||
|
j = j + 1
|
||||||
|
if j == 16:
|
||||||
|
print()
|
||||||
|
j = 0
|
||||||
|
if j != 0:
|
||||||
|
print()
|
||||||
|
print("};")
|
||||||
|
|
||||||
|
print()
|
||||||
|
print(f"const unsigned int {name_len}={data_len};")
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
print(f"File {sys.argv[2]} not found", file=sys.stderr)
|
||||||
|
except IOError:
|
||||||
|
print(f"Unable to read {sys.argv[2]}", file=sys.stderr)
|
44
utils/gen-shader-headers.sh
Executable file
44
utils/gen-shader-headers.sh
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -x
|
||||||
|
|
||||||
|
if [ $# -lt 4 ]; then
|
||||||
|
echo "Invalid arg count must be >= 5"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
src_dir="$1"; shift
|
||||||
|
build_dir="$1"; shift
|
||||||
|
build_path=$build_dir/"$1"; shift
|
||||||
|
|
||||||
|
cat <<EOF > "$build_path"
|
||||||
|
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||||
|
/* This file is auto-generated, do not edit! */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2025, Linaro Ltd.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >> "$build_path"
|
||||||
|
/*
|
||||||
|
* List the names of the shaders at the top of
|
||||||
|
* header for readability's sake
|
||||||
|
*
|
||||||
|
EOF
|
||||||
|
|
||||||
|
for file in "$@"; do
|
||||||
|
echo "file is $file"
|
||||||
|
name=$(basename "$build_dir/$file" | tr '.' '_')
|
||||||
|
echo " * unsigned char $name;" >> "$build_path"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "*/" >> "$build_path"
|
||||||
|
|
||||||
|
echo "/* Hex encoded shader data */" >> "$build_path"
|
||||||
|
for file in "$@"; do
|
||||||
|
name=$(basename "$build_dir/$file")
|
||||||
|
"$src_dir/utils/gen-shader-header.py" "$name" "$build_dir/$file" >> "$build_path"
|
||||||
|
echo >> "$build_path"
|
||||||
|
done
|
Loading…
Add table
Add a link
Reference in a new issue