mirror of https://github.com/xemu-project/xemu.git
74 lines
3.3 KiB
Python
74 lines
3.3 KiB
Python
# Usage:
|
|
# python tests/build_all_shaders.py
|
|
import argparse
|
|
import os
|
|
import pathlib
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
|
|
def my_which(cmd):
|
|
if sys.hexversion >= 0x03030000:
|
|
return shutil.which(cmd)
|
|
else:
|
|
try:
|
|
subprocess.check_output([cmd], stderr=subprocess.STDOUT)
|
|
return cmd
|
|
except subprocess.CalledProcessError:
|
|
return cmd # that's fine, it exists though
|
|
except OSError:
|
|
return None
|
|
|
|
shaders = [
|
|
{'source':"glsl/built_in_format.glsl", 'entry':"main", 'stage':'vert'},
|
|
{'source':"glsl/buffer_pointer.glsl", 'entry':"main", 'stage':'frag', 'target-env':'vulkan1.3'},
|
|
{'source':"glsl/input_attachment.glsl", 'entry':"main", 'stage':'frag'},
|
|
{'source':"glsl/texel_buffer.glsl", 'entry':"main", 'stage':'vert'},
|
|
{'source':"glsl/storage_buffer.glsl", 'entry':"main", 'stage':'comp', 'target-env':'vulkan1.1'},
|
|
{'source':"glsl/runtime_array_of_array_of_struct.glsl", 'entry':"main", 'stage':'comp'},
|
|
|
|
{'source':"hlsl/append_consume.hlsl", 'entry':"main", 'profile':'ps_6_0', 'stage':'frag'},
|
|
{'source':"hlsl/binding_array.hlsl", 'entry':"main", 'profile':'ps_6_0', 'stage':'frag'},
|
|
{'source':"hlsl/binding_types.hlsl", 'entry':"main", 'profile':'ps_6_0', 'stage':'frag'},
|
|
{'source':"hlsl/cbuffer.hlsl", 'entry':"main", 'profile':'vs_6_0', 'stage':'vert'},
|
|
{'source':"hlsl/counter_buffers.hlsl", 'entry':"main", 'profile':'ps_6_0', 'stage':'frag'},
|
|
{'source':"hlsl/semantics.hlsl", 'entry':"main", 'profile':'ps_6_0', 'stage':'frag'},
|
|
{'source':"hlsl/user_type.hlsl", 'entry':"main", 'profile':'ps_6_0', 'stage':'frag'},
|
|
]
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="Compile test shaders")
|
|
parser.add_argument("--glslc", help="path to glslc compiler", default=my_which("glslc"))
|
|
parser.add_argument("--dxc", help="path to dxc compiler", default=my_which("dxc"))
|
|
parser.add_argument("--verbose", "-v", help="enable verbose output", action='store_true')
|
|
args = parser.parse_args()
|
|
|
|
test_dir = pathlib.Path(__file__).parent.resolve()
|
|
root_dir = test_dir.parent.resolve()
|
|
|
|
if not args.dxc:
|
|
print("WARNING: dxc not found in PATH; HLSL shaders will be compiled with glslc.")
|
|
if not args.glslc:
|
|
print("WARNING: glslc not found in PATH. This is a bad sign.")
|
|
for shader in shaders:
|
|
src_path = os.path.join(test_dir, shader['source'])
|
|
base, ext = os.path.splitext(src_path)
|
|
spv_path = base + ".spv"
|
|
if ext.lower() == ".glsl" or (ext.lower() == ".hlsl" and not args.dxc):
|
|
compile_cmd_args = [args.glslc, "-g", "-fshader-stage=" + shader['stage'], "-fentry-point=" + shader['entry'], "-o", spv_path, src_path]
|
|
if 'target-env' in shader:
|
|
compile_cmd_args.append("--target-env=" + shader['target-env'])
|
|
elif ext.lower() == ".hlsl":
|
|
compile_cmd_args = [args.dxc, "-spirv", "-Zi", "-fspv-reflect", "-O0", "-T", shader['profile'], "-E", shader['entry'], "-Fo", spv_path, src_path]
|
|
|
|
print("%s -> %s" % (src_path, spv_path))
|
|
if args.verbose:
|
|
print(" ".join(compile_cmd_args))
|
|
|
|
try:
|
|
compile_cmd_output = subprocess.check_output(compile_cmd_args, stderr = subprocess.STDOUT)
|
|
except subprocess.CalledProcessError as error:
|
|
print("Compilation failed for %s with error code %d:\n%s" % (src_path, error.returncode, error.output.decode('utf-8')))
|
|
|
|
print("")
|