forked from aya/aya
80 lines
2.9 KiB
Python
Executable File
80 lines
2.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import argparse
|
|
import os
|
|
import json
|
|
import subprocess
|
|
import platform
|
|
import re
|
|
import sys
|
|
import struct
|
|
import time
|
|
|
|
class ShaderPackBytecode:
|
|
def __init__(self, bytecode: bytes, data_size: int):
|
|
self.bytecode = bytecode
|
|
self.data_size = data_size
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="Process shader packs")
|
|
parser.add_argument("--packs", nargs='+', required=True, help="Space-delimited list of shader packs")
|
|
args = parser.parse_args()
|
|
|
|
cwd = os.getcwd()
|
|
build_dir = os.path.join(cwd, "build")
|
|
|
|
os.makedirs(build_dir, exist_ok=True)
|
|
|
|
print("-- Running shader compiler")
|
|
|
|
shader_compiler = os.path.join(cwd, "shader_compiler.exe")
|
|
packs_arg = " ".join(args.packs)
|
|
command = f"{shader_compiler} /P {cwd} {packs_arg}"
|
|
|
|
if platform.system() == "Linux":
|
|
command = f"wine {command}"
|
|
|
|
# Start the timer
|
|
start_time = time.time()
|
|
|
|
try:
|
|
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
|
stdout, _ = process.communicate()
|
|
process.wait()
|
|
|
|
# Stop the timer and calculate the compilation time in seconds with two decimal places
|
|
end_time = time.time()
|
|
compilation_time = "{:.2f}sec".format(end_time - start_time)
|
|
|
|
if process.returncode != 0:
|
|
print(f"Error running shader compiler: {stdout.decode('utf-8')}")
|
|
sys.exit(1)
|
|
else:
|
|
# Initialize a counter for the number of packed shaders
|
|
packed_shaders_count = 0
|
|
|
|
# Parse and print the output
|
|
output_lines = stdout.decode('utf-8').splitlines()
|
|
for line in output_lines:
|
|
match = re.search(r'(\w+): updated (\d+) shaders', line)
|
|
if match:
|
|
shader_type = match.group(1)
|
|
updated_shaders = match.group(2)
|
|
packed_shaders_count += int(updated_shaders) # Update the counter
|
|
print(f"-- Updated {updated_shaders} shaders in {shader_type}")
|
|
|
|
shader_plural = "shader" if packed_shaders_count == 1 else "shaders"
|
|
print(f"-- Compiled and packed {packed_shaders_count} {shader_plural} in {compilation_time} {packed_shaders_count == 0 and '(no new changes)' or ''}")
|
|
|
|
# Move the generated files to the build directory
|
|
for pack in args.packs:
|
|
with open(os.path.join(cwd, f'shaders_{pack}.pack'), 'rb') as f:
|
|
with open(os.path.join(build_dir, f'shaders_{pack}.pack'), 'wb') as f2:
|
|
f2.write(f.read())
|
|
|
|
print(f"-- Built shader pack files available in '{build_dir}'")
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"Error running shader compiler: {e}")
|
|
sys.exit(1)
|
|
|
|
if __name__ == "__main__":
|
|
main() |