Shader conversion utility new in Git master
Converts, compiles, optimizes and links shaders of different formats.
This utility is built if MAGNUM_WITH_SHADERCONVERTER is enabled when building Magnum. To use this utility with CMake, you need to request the shaderconverter component of the Magnum package and use the Magnum::shaderconverter target for example in a custom command:
find_package(Magnum REQUIRED shaderconverter) add_custom_command(OUTPUT ... COMMAND Magnum::shaderconverter ...)
See Downloading and building, Usage with CMake and the ShaderTools namespace for more information.
Example usage
Validate a SPIR-V file for a Vulkan 1.1 target, implicitly using AnyShaderConverter that delegates to SpirvToolsShaderConverter or any other plugin capable of SPIR-V validation depending on what's available:
magnum-shaderconverter --validate --output-version vulkan1.1 shader.spv
Converting a GLSL 4.10 file to a SPIR-V, supplying various preprocessor definitions, treating warnings as errors and targeting OpenGL instead of the (default) Vulkan, this time delegated to GlslangShaderConverter or any other plugin capable of GLSL->SPIR-V conversion depending on what's available:
magnum-shaderconverter phong.frag phong.frag.spv \ -DDIFFUSE_TEXTURE -DNORMAL_TEXTURE --warning-as-error \ --input-version "410 core" --output-version opengl4.5
Full usage documentation
magnum-shaderconverter [-h|--help] [--validate] [--link] [-C|--converter NAME]... [--plugin-dir DIR] [-c|--converter-options key=val,key2=val2,…]... [--info] [-q|--quiet] [-v|--verbose] [--warning-as-error] [-E|--preprocess-only] [-D|--define name=value]... [-U|--undefine name]... [-O|--optimize LEVEL] [-g|--debug-info LEVEL] [--input-format glsl|spv|spvasm|hlsl|metal]... [--output-format glsl|spv|spvasm|hlsl|metal]... [--input-version VERSION]... [--output-version VERSION]... [--] input... output
Arguments:
- input— input file(s)
- output— output file; ignored if- --infois present, disallowed for- --validate. If neither- --info,- --validatenor- --linkis present, corresponds to the ShaderTools::- AbstractConverter:: - convertFileToFile() function. 
- -h,- --help— display this help message and exit
- --validate— validate input. Corresponds to the ShaderTools::- AbstractConverter:: - validateFile() function. 
- --link— link multiple input files together. Corresponds to the ShaderTools::- AbstractConverter:: - linkFilesToFile() function. 
- -C,- --converter CONVERTER— shader converter plugin(s)
- --plugin-dir DIR— override base plugin dir
- -c,- --converter-options key=val,key2=val2,…— configuration options to pass to the converter(s)
- --info— print SPIR-V module info and exit
- -q,- --quiet— quiet output from converter plugin(s). Corresponds to the ShaderTools::- ConverterFlag:: - Quiet flag. 
- -v,- --verbose— verbose output from converter plugin(s). Corresponds to the ShaderTools::- ConverterFlag:: - Verbose flag. 
- --warning-as-error— treat warnings as errors. Corresponds to the ShaderTools::- ConverterFlag:: - WarningAsError flag. 
- -E,- --preprocess-only— preprocess the input file and exit. Corresponds to the ShaderTools::- ConverterFlag:: - PreprocessOnly flag. 
- -D,- --define name=value— define a preprocessor macro. Corresponds to the ShaderTools::- AbstractConverter:: - setDefinitions() function. 
- -U,- --undefine name— undefine a preprocessor macro. Corresponds to the ShaderTools::- AbstractConverter:: - setDefinitions() function. 
- -O,- --optimize LEVEL— optimization level to use. Corresponds to the ShaderTools::- AbstractConverter:: - setOptimizationLevel() function. 
- -g,- --debug-info LEVEL— debug info level to use. Corresponds to the ShaderTools::- AbstractConverter:: - setDebugInfoLevel() function. 
- --input-format glsl|spv|spvasm|hlsl|metal— input format for each converter
- --output-format glsl|spv|spvasm|hlsl|metal— output format for each converter
- --input-version VERSION— input format version for each converter
- --output-version VERSION— output format version for each converter
If --validate is given, the utility will validate the input file using passed --converter (or AnyShaderConverter if none is specified), print the validation log on output and exit with a non-zero code if the validation fails. If --link is given, the utility will link all files together using passed --converter (or AnyShaderConverter if none is specified) and save it to output. If neither is specified, the utility will convert the input file using (one or more) passed --converter (or AnyShaderConverter if none is specified) and save it to output.
The -c / --converter-options argument accept a comma-separated list of key/value pairs to set in the converter plugin configuration. If the = character is omitted, it's equivalent to saying key=true; configuration subgroups are delimited with /. Prefix the key with + to add new options or multiple options of the same name.
It's possible to specify the -C / --converter option (and correspondingly also -c / --converter-options, --input-format, --output-format, --input-version and --output-version) multiple times in order to chain more converters together. All converters in the chain have to support the ShaderTools::-C / --converter is specified, AnyShaderConverter is used.
The -D / --define, -U / --undefine, -O / --optimize, -g / --debug-info, -E / --preprocess-only arguments apply only to the first converter. Split the conversion to multiple passes if you need to pass those to converters later in the chain.
Values accepted by -O / --optimize, -g / --debug-info, --input-format, --output-format, --input-version and --output-version are converter-specific, see documentation of a particular converter for more information.