mirror of https://github.com/xemu-project/xemu.git
73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
# Usage:
|
|
# Prereq: build spirv-reflect
|
|
# Prereq: build shader SPVs
|
|
# python tests/build_golden_yaml.py
|
|
import argparse
|
|
import os
|
|
import pathlib
|
|
import platform
|
|
import subprocess
|
|
import sys
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="Generate golden YAML from test shader .spv files")
|
|
parser.add_argument("--verbose", "-v", help="enable verbose output", action='store_true')
|
|
args = parser.parse_args()
|
|
|
|
print("""\
|
|
WARNING: This script regenerates the golden YAML output for all test shaders.
|
|
The new YAML will be considered the expected correct output for future test
|
|
runs. Before commiting the updated YAML to GitHub, it is therefore critical
|
|
to carefully inspect the diffs between the old and new YAML output, to ensure
|
|
that all differences can be traced back to intentional changes to either the
|
|
reflection code or the test shaders.
|
|
""")
|
|
|
|
test_dir = pathlib.Path(__file__).parent.resolve()
|
|
root_dir = test_dir.parent.resolve()
|
|
|
|
spirv_reflect_exe_paths_windows = [
|
|
os.path.join(root_dir, "bin", "Debug", "spirv-reflect.exe"),
|
|
os.path.join(root_dir, "bin", "Release", "spirv-reflect.exe"),
|
|
]
|
|
spirv_reflect_exe_paths_unix = [
|
|
os.path.join(root_dir, "bin", "spirv-reflect"),
|
|
]
|
|
spirv_reflect_exe = None
|
|
if platform.system() == "Windows":
|
|
for path in spirv_reflect_exe_paths_windows:
|
|
if os.path.isfile(path):
|
|
spirv_reflect_exe = path
|
|
break
|
|
else:
|
|
for path in spirv_reflect_exe_paths_unix:
|
|
if os.path.isfile(path):
|
|
spirv_reflect_exe = path
|
|
break
|
|
|
|
if spirv_reflect_exe is None:
|
|
exit("spirv-reflect executable not found!")
|
|
|
|
spv_paths = []
|
|
for root, dirs, files in os.walk(test_dir):
|
|
for f in files:
|
|
base, ext = os.path.splitext(f)
|
|
if ext.lower() == ".spv":
|
|
spv_paths.append(os.path.normpath(os.path.join(root, f)))
|
|
|
|
for spv_path in spv_paths:
|
|
yaml_path = spv_path + ".yaml"
|
|
try:
|
|
# TODO Replace hard-coded EXE path with something less brittle.
|
|
yaml_cmd_args = [spirv_reflect_exe, "-y", "-v", "1", spv_path]
|
|
if args.verbose:
|
|
print(" ".join(yaml_cmd_args))
|
|
subprocess.run(yaml_cmd_args, stdout=open(yaml_path, "w"))
|
|
subprocess.run(yaml_cmd_args)
|
|
print("%s -> %s" % (spv_path, yaml_path))
|
|
except NameError:
|
|
print("spirv-reflect application not found; did you build it first?")
|
|
sys.exit()
|
|
except subprocess.CalledProcessError as error:
|
|
print("YAML generation failed with error code %d:\n%s" % (error.returncode, error.output.decode('utf-8')))
|