blob: 0daf1fdac67e9f8e1c54a0f1e9a80d1c2dfd943f [file] [log] [blame]
# This is a little utility to take a SPIR-V binary file and turn it into a header file
import struct
import sys
if (len(sys.argv) != 4):
print("Usage: python binary_to_header.py <input_binary_file_path> <output_header_file_path> <array_name>")
sys.exit(1)
inPath = sys.argv[1]
outPath = sys.argv[2]
arrayName = sys.argv[3]
# Read the entire file in as binary then convert it into an array of integers
with open(inPath, "rb") as file:
binaryData = file.read()
if (len(binaryData) % 4 != 0):
printf("ERROR: Shader binary length was expected to be a multiple of 32 bits")
sys.exit(1)
data = struct.unpack(f"<{len(binaryData)//4}I", binaryData)
with open(outPath, "w") as file:
file.write("#pragma once\n\n")
file.write(f"const uint32_t {arrayName}[] = {{")
for i,val in enumerate(data):
# Add newlines (and indents) every 8 elements
if (i % 8 == 0):
file.write("\n ")
file.write(f"{val:#010x},")
file.write("\n};\n")