diff options
| author | 3gg <3gg@shellblade.net> | 2025-12-27 12:03:39 -0800 |
|---|---|---|
| committer | 3gg <3gg@shellblade.net> | 2025-12-27 12:03:39 -0800 |
| commit | 5a079a2d114f96d4847d1ee305d5b7c16eeec50e (patch) | |
| tree | 8926ab44f168acf787d8e19608857b3af0f82758 /contrib/SDL-3.2.8/src/render/gpu/shaders/build-shaders.sh | |
Initial commit
Diffstat (limited to 'contrib/SDL-3.2.8/src/render/gpu/shaders/build-shaders.sh')
| -rwxr-xr-x | contrib/SDL-3.2.8/src/render/gpu/shaders/build-shaders.sh | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/contrib/SDL-3.2.8/src/render/gpu/shaders/build-shaders.sh b/contrib/SDL-3.2.8/src/render/gpu/shaders/build-shaders.sh new file mode 100755 index 0000000..9b019e5 --- /dev/null +++ b/contrib/SDL-3.2.8/src/render/gpu/shaders/build-shaders.sh | |||
| @@ -0,0 +1,106 @@ | |||
| 1 | #!/usr/bin/env bash | ||
| 2 | |||
| 3 | set -e | ||
| 4 | |||
| 5 | # NOTE: fxc is tested on Linux with https://github.com/mozilla/fxc2 | ||
| 6 | |||
| 7 | which fxc &>/dev/null && HAVE_FXC=1 || HAVE_FXC=0 | ||
| 8 | which dxc &>/dev/null && HAVE_DXC=1 || HAVE_DXC=0 | ||
| 9 | which spirv-cross &>/dev/null && HAVE_SPIRV_CROSS=1 || HAVE_SPIRV_CROSS=0 | ||
| 10 | |||
| 11 | [ "$HAVE_FXC" != 0 ] || echo "fxc not in PATH; D3D11 shaders will not be rebuilt" | ||
| 12 | [ "$HAVE_DXC" != 0 ] || echo "dxc not in PATH; D3D12 shaders will not be rebuilt" | ||
| 13 | [ "$HAVE_SPIRV_CROSS" != 0 ] || echo "spirv-cross not in PATH; D3D11, D3D12, Metal shaders will not be rebuilt" | ||
| 14 | |||
| 15 | USE_FXC=${USE_FXC:-$HAVE_FXC} | ||
| 16 | USE_DXC=${USE_DXC:-$HAVE_DXC} | ||
| 17 | USE_SPIRV_CROSS=${USE_SPIRV_CROSS:-$HAVE_SPIRV_CROSS} | ||
| 18 | |||
| 19 | spirv_bundle="spir-v.h" | ||
| 20 | dxbc50_bundle="dxbc50.h" | ||
| 21 | dxil60_bundle="dxil60.h" | ||
| 22 | metal_bundle="metal.h" | ||
| 23 | |||
| 24 | rm -f "$spirv_bundle" | ||
| 25 | [ "$USE_SPIRV_CROSS" != 0 ] && rm -f "$metal_bundle" | ||
| 26 | [ "$USE_SPIRV_CROSS" != 0 ] && [ "$USE_FXC" != 0 ] && rm -f "$dxbc50_bundle" | ||
| 27 | [ "$USE_SPIRV_CROSS" != 0 ] && [ "$USE_DXC" != 0 ] && rm -f "$dxil60_bundle" | ||
| 28 | |||
| 29 | make-header() { | ||
| 30 | xxd -i "$1" | sed \ | ||
| 31 | -e 's/^unsigned /const unsigned /g' \ | ||
| 32 | -e 's,^const,static const,' \ | ||
| 33 | > "$1.h" | ||
| 34 | } | ||
| 35 | |||
| 36 | compile-hlsl-dxbc() { | ||
| 37 | local src="$1" | ||
| 38 | local profile="$2" | ||
| 39 | local output_basename="$3" | ||
| 40 | local var_name="$(echo "$output_basename" | sed -e 's/\./_/g')" | ||
| 41 | |||
| 42 | fxc "$src" /E main /T $2 /Fh "$output_basename.tmp.h" || exit $? | ||
| 43 | sed \ | ||
| 44 | -e "s/g_main/$var_name/;s/\r//g" \ | ||
| 45 | -e 's,^const,static const,' \ | ||
| 46 | -e 's,const unsigned,const signed,' \ | ||
| 47 | < "$output_basename.tmp.h" \ | ||
| 48 | > "$output_basename.h" | ||
| 49 | rm -f "$output_basename.tmp.h" | ||
| 50 | } | ||
| 51 | |||
| 52 | compile-hlsl-dxil() { | ||
| 53 | local src="$1" | ||
| 54 | local profile="$2" | ||
| 55 | local output_basename="$3" | ||
| 56 | local var_name="$(echo "$output_basename" | sed -e 's/\./_/g')" | ||
| 57 | |||
| 58 | dxc "$src" -E main -T $2 -Fh "$output_basename.tmp.h" -O3 || exit $? | ||
| 59 | sed \ | ||
| 60 | -e "s/g_main/$var_name/;s/\r//g" \ | ||
| 61 | -e 's,^const,static const,' \ | ||
| 62 | < "$output_basename.tmp.h" \ | ||
| 63 | > "$output_basename.h" | ||
| 64 | rm -f "$output_basename.tmp.h" | ||
| 65 | } | ||
| 66 | |||
| 67 | for i in *.vert *.frag; do | ||
| 68 | spv="$i.spv" | ||
| 69 | metal="$i.metal" | ||
| 70 | hlsl50="$i.sm50.hlsl" | ||
| 71 | dxbc50="$i.sm50.dxbc" | ||
| 72 | hlsl60="$i.sm60.hlsl" | ||
| 73 | dxil60="$i.sm60.dxil" | ||
| 74 | |||
| 75 | glslangValidator -g0 -Os "$i" -V -o "$spv" --quiet | ||
| 76 | |||
| 77 | make-header "$spv" | ||
| 78 | echo "#include \"$spv.h\"" >> "$spirv_bundle" | ||
| 79 | |||
| 80 | if [ "$USE_SPIRV_CROSS" = "0" ]; then | ||
| 81 | continue | ||
| 82 | fi | ||
| 83 | |||
| 84 | spirv-cross "$spv" --hlsl --shader-model 50 --hlsl-enable-compat --output "$hlsl50" | ||
| 85 | spirv-cross "$spv" --hlsl --shader-model 60 --hlsl-enable-compat --output "$hlsl60" | ||
| 86 | |||
| 87 | if [ "${i##*.}" == "frag" ]; then | ||
| 88 | hlsl_stage="ps" | ||
| 89 | else | ||
| 90 | hlsl_stage="vs" | ||
| 91 | fi | ||
| 92 | |||
| 93 | if [ "$USE_FXC" != "0" ]; then | ||
| 94 | compile-hlsl-dxbc "$hlsl50" ${hlsl_stage}_5_0 "$dxbc50" | ||
| 95 | echo "#include \"$dxbc50.h\"" >> "$dxbc50_bundle" | ||
| 96 | fi | ||
| 97 | |||
| 98 | if [ "$USE_DXC" != "0" ]; then | ||
| 99 | compile-hlsl-dxil "$hlsl60" ${hlsl_stage}_6_0 "$dxil60" | ||
| 100 | echo "#include \"$dxil60.h\"" >> "$dxil60_bundle" | ||
| 101 | fi | ||
| 102 | |||
| 103 | spirv-cross "$spv" --msl --output "$metal" | ||
| 104 | make-header "$metal" | ||
| 105 | echo "#include \"$metal.h\"" >> "$metal_bundle" | ||
| 106 | done | ||
