Convert shaders in dali-demo to use shader compilation tool
[platform/core/uifw/dali-demo.git] / build / tizen / shader-generator.sh
1 #!/bin/bash
2
3 # Set Colors
4 Red='\033[0;31m'          # Red
5 Yellow='\033[0;33m'       # Yellow
6 Blue='\033[0;34m'         # Blue
7 Clear='\033[0m'       # Text Reset
8
9 #########################################################################################
10
11 Usage()
12 {
13   echo -e "${Yellow}Usage: $(basename ${BASH_SOURCE[0]}) [indir] [outdir] [OPTIONS]"
14   echo
15   echo -e " ${Blue}Mandatory parameters:${Clear}"
16   echo -e "  indir       The input directory where the original shader files are located"
17   echo -e "  outdir      The output directory where the header files for the shaders should be generated"
18   echo -e " ${Red}NOTE: All the above parameters must be provided${Clear}"
19   echo
20   echo -e " ${Blue}Options:${Clear}"
21   echo -e "  -s|--skip   Skip the generation of header and cpp files that include all the generated shader header files"
22   echo -e "  -h|--help   Help"
23 }
24
25 if [ "$1" = "-h" ] || [ "$1" = "--help" ]
26 then
27   Usage
28   exit 0
29 elif [ "$#" -lt 2 ]
30 then
31   echo -e "${Red}ERROR:${Clear} Mandatory parameters are not provided"
32   echo
33   Usage
34   exit 1
35 fi
36
37 #########################################################################################
38
39 indir=$1
40 outdir=$2
41 skip=""
42
43 for option in $*
44 do
45   if [ "$option" = "-s" ] || [ "$option" = "--skip" ]
46   then
47     skip="--skip"
48     continue
49   elif [[ $option == -* ]]
50   then
51     echo -e "${Red}Invalid Option: ${Blue}$option${Clear}"
52     echo
53     Usage
54     exit 1
55   fi
56 done
57
58 #########################################################################################
59
60 mkdir -p $outdir
61
62 if [ ! -e $indir ] ; then
63     echo "Error: The folder \""$indir"\" does not exist!"
64     exit 1
65 fi
66
67 cd $indir
68 all_shaders=$(ls -1 *.{vert,frag,def} 2>/dev/null)
69 cd $OLDPWD
70
71 # Generate one header file per shader which is defined as a const std::string_view
72 for name in $all_shaders ; do
73   echo "Generating header files for $name..."
74   varname=$(echo "SHADER_$name" | tr [a-z] [A-Z] | sed -e 's/-/_/g;s/\./_/g;')
75
76   newname=$(echo ${name} | sed -e 's/\./-/;')".h"
77   echo Writing $newname
78
79   shader_fullpath=$(echo ${indir})$name
80
81   header_name="${varname}_GEN_H"
82   echo "const std::string_view" "$varname""{" > $outdir/$newname
83   cat $shader_fullpath | sed -e 's/^..*$/"&\\n"/' >> $outdir/$newname
84   echo "};" >> $outdir/$newname
85 done
86
87 if [ "$skip" != "--skip" ]; then
88   # Generate one cpp file that includes all the previously generated string_views for shaders
89   echo "Generating cpp file..."
90   echo -e "#include \"../builtin-shader-extern-gen.h\"\n" > $outdir/builtin-shader-gen.cpp
91
92   varnames=
93   for name in $all_shaders ; do
94     varname=$(echo "SHADER_$name" | tr [a-z] [A-Z] | sed -e 's/-/_/g;s/\./_/g;')
95     newname=$(echo ${name} | sed -e 's/\./-/;')".h"
96     varnames="${varnames} $varname"
97     echo "#include \"$newname\"" >> $outdir/builtin-shader-gen.cpp
98   done
99
100   # Generate one header file that defines all the shader string_views as extern variables
101   echo "Generating extern header file ( for external use )..."
102   echo "#ifndef GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H" > $outdir/../builtin-shader-extern-gen.h
103   echo -e "#define GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H\n" >> $outdir/../builtin-shader-extern-gen.h
104
105   echo "#include <string_view>" >> $outdir/../builtin-shader-extern-gen.h
106   echo "" >> $outdir/../builtin-shader-extern-gen.h
107
108   for name in $all_shaders ; do
109     varname=$(echo "SHADER_$name" | tr [a-z] [A-Z] | sed -e 's/-/_/g;s/\./_/g;')
110     newname=$(echo ${name} | sed -e 's/\./-/;')".h"
111     echo "extern const std::string_view $varname;" >> $outdir/../builtin-shader-extern-gen.h
112   done
113   cat >> $outdir/../builtin-shader-extern-gen.h << EOF
114
115 #endif // GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H
116 EOF
117 fi
118