//===--- HLSLOptions.td - Options for HLSL --------------------------------===// /////////////////////////////////////////////////////////////////////////////// // // // HLSLOptions.td // // Copyright (C) Microsoft Corporation. All rights reserved. // // This file is distributed under the University of Illinois Open Source // // License. See LICENSE.TXT for details. // // // // This file defines the options accepted by HLSL. // // // /////////////////////////////////////////////////////////////////////////////// // Include the common option parsing interfaces. // include "llvm/Option/OptParser.td" ////////////////////////////////////////////////////////////////////////////// // Flags // DriverOption - The option is a "driver" option, and should not be forwarded // to other tools. def DriverOption : OptionFlag; // CoreOption - This is considered a "core" HLSL option. def CoreOption : OptionFlag; // ISenseOption - This option is only supported for IntelliSense. def ISenseOption : OptionFlag; ////////////////////////////////////////////////////////////////////////////// // Groups // Meta-group for options which are only used for compilation, // and not linking etc. def CompileOnly_Group : OptionGroup<"">; def Action_Group : OptionGroup<"">; def I_Group : OptionGroup<"">, Group; def M_Group : OptionGroup<"">, Group; def T_Group : OptionGroup<"">; def O_Group : OptionGroup<"">, Group; def R_Group : OptionGroup<"">, Group; def R_value_Group : OptionGroup<"">, Group; def W_Group : OptionGroup<"">, Group; def W_value_Group : OptionGroup<"">, Group; def d_Group : OptionGroup<"">; def f_Group : OptionGroup<"">, Group; def f_clang_Group : OptionGroup<"">, Group; def g_Group : OptionGroup<"">; def g_flags_Group : OptionGroup<"">; def i_Group : OptionGroup<"">, Group; def clang_i_Group : OptionGroup<"">, Group; def m_Group : OptionGroup<"">, Group; def u_Group : OptionGroup<"">; // Developer Driver Options def internal_Group : OptionGroup<"">; def internal_driver_Group : OptionGroup<"">, Group, HelpText<"DRIVER OPTIONS">; def internal_debug_Group : OptionGroup<"">, Group, HelpText<"DEBUG/DEVELOPMENT OPTIONS">; def hlslcomp_Group : OptionGroup<"HLSL Compilation">, HelpText<"Compilation Options">; def hlsloptz_Group : OptionGroup<"HLSL Optimization">, HelpText<"Optimization Options">; def hlslutil_Group : OptionGroup<"HLSL Utility">, HelpText<"Utility Options">; def hlslcore_Group : OptionGroup<"HLSL Core">, HelpText<"Common Options">; def spirv_Group : OptionGroup<"SPIR-V CodeGen">, HelpText<"SPIR-V CodeGen Options">; // SPIRV Change ////////////////////////////////////////////////////////////////////////////// // Options // The internal option ID must be a valid C++ identifier and results in a // hlsl::options::OPT_XX enum constant for XX. // // See tools/clang/include/clang/Driver/Options.td for more notes. // These options are based on those used by clang. // fxc-based options kept for compatiblity are below. // // The general approach is to include only things that are in use, in the // same order as in Options.td. def D : JoinedOrSeparate<["-", "/"], "D">, Group, Flags<[CoreOption]>, HelpText<"Define macro">; def H : Flag<["-"], "H">, Flags<[CoreOption]>, Group, HelpText<"Show header includes and nesting depth">; def I : JoinedOrSeparate<["-", "/"], "I">, Group, Flags<[CoreOption]>, HelpText<"Add directory to include search path">; def O0 : Flag<["-", "/"], "O0">, Group, Flags<[CoreOption]>, HelpText<"Optimization Level 0">; def O1 : Flag<["-", "/"], "O1">, Group, Flags<[CoreOption]>, HelpText<"Optimization Level 1">; def O2 : Flag<["-", "/"], "O2">, Group, Flags<[CoreOption]>, HelpText<"Optimization Level 2">; def O3 : Flag<["-", "/"], "O3">, Group, Flags<[CoreOption]>, HelpText<"Optimization Level 3 (Default)">; def O4 : Flag<["-", "/"], "O4">, Group, Flags<[CoreOption]>, HelpText<"Optimization Level 4">; def Odump : Flag<["-", "/"], "Odump">, Group, Flags<[CoreOption]>, HelpText<"Print the optimizer commands.">; def Qunused_arguments : Flag<["-"], "Qunused-arguments">, Group, Flags<[CoreOption]>, HelpText<"Don't emit warning for unused driver arguments">; def Wall : Flag<["-"], "Wall">, Group, Flags<[CoreOption]>; def Wdeprecated : Flag<["-"], "Wdeprecated">, Group, Flags<[CoreOption]>; //def W_Joined : Joined<["-"], "W">, Group, Flags<[CoreOption]>, // MetaVarName<"">, HelpText<"Enable the specified warning">; def d_Flag : Flag<["-"], "d">, Group; def d_Joined : Joined<["-"], "d">, Group; //def fcolor_diagnostics : Flag<["-"], "fcolor-diagnostics">, Group, // Flags<[CoreOption, DriverOption]>, HelpText<"Use colors in diagnostics">; def fdiagnostics_color : Flag<["-"], "fdiagnostics-color">, Group, Flags<[CoreOption, DriverOption]>; def fdiagnostics_color_EQ : Joined<["-"], "fdiagnostics-color=">, Group; //def fansi_escape_codes : Flag<["-"], "fansi-escape-codes">, Group, // HLSL Change: disable ANSI escape codes // Flags<[CoreOption, CC1Option]>, HelpText<"Use ANSI escape codes for diagnostics">; def fconstexpr_depth_EQ : Joined<["-"], "fconstexpr-depth=">, Group; def fconstexpr_steps_EQ : Joined<["-"], "fconstexpr-steps=">, Group; def fconstexpr_backtrace_limit_EQ : Joined<["-"], "fconstexpr-backtrace-limit=">, Group; //def fdiagnostics_show_option : Flag<["-"], "fdiagnostics-show-option">, Group, // Flags<[CoreOption]>, HelpText<"Print option name with mappable diagnostics">; def fdiagnostics_show_category_EQ : Joined<["-"], "fdiagnostics-show-category=">, Group; def ferror_limit_EQ : Joined<["-"], "ferror-limit=">, Group, Flags<[CoreOption]>; def funsafe_math_optimizations : Flag<["-"], "funsafe-math-optimizations">, Group; def fno_unsafe_math_optimizations : Flag<["-"], "fno-unsafe-math-optimizations">, Group; def fassociative_math : Flag<["-"], "fassociative-math">, Group; def fno_associative_math : Flag<["-"], "fno-associative-math">, Group; //def freciprocal_math : // Flag<["-"], "freciprocal-math">, Group, Flags<[CoreOption]>, // HelpText<"Allow division operations to be reassociated">; def fno_reciprocal_math : Flag<["-"], "fno-reciprocal-math">, Group; def ffinite_math_only : Flag<["-"], "ffinite-math-only">, Group, Flags<[CoreOption]>; def fno_finite_math_only : Flag<["-"], "fno-finite-math-only">, Group; def fsigned_zeros : Flag<["-"], "fsigned-zeros">, Group; //def fno_signed_zeros : // Flag<["-"], "fno-signed-zeros">, Group, Flags<[CoreOption]>, // HelpText<"Allow optimizations that ignore the sign of floating point zeros">; def fhonor_nans : Flag<["-"], "fhonor-nans">, Group; def fno_honor_nans : Flag<["-"], "fno-honor-nans">, Group; def fhonor_infinities : Flag<["-"], "fhonor-infinities">, Group; def fno_honor_infinities : Flag<["-"], "fno-honor-infinities">, Group; //def ftrapping_math : Flag<["-"], "ftrapping-math">, Group; //def fno_trapping_math : Flag<["-"], "fno-trapping-math">, Group; //def ffp_contract : Joined<["-"], "ffp-contract=">, Group, // Flags<[CoreOption]>, HelpText<"Form fused FP ops (e.g. FMAs): fast (everywhere)" // " | on (according to FP_CONTRACT pragma, default) | off (never fuse)">; def flimited_precision_EQ : Joined<["-"], "flimited-precision=">, Group; /* def fno_caret_diagnostics : Flag<["-"], "fno-caret-diagnostics">, Group, Flags<[CoreOption]>; def fno_color_diagnostics : Flag<["-"], "fno-color-diagnostics">, Group, Flags<[CoreOption]>; def fno_diagnostics_color : Flag<["-"], "fno-diagnostics-color">, Group, Flags<[CoreOption, DriverOption]>; def fno_show_column : Flag<["-"], "fno-show-column">, Group, Flags<[CoreOption]>, HelpText<"Do not include column number on diagnostics">; def fno_spell_checking : Flag<["-"], "fno-spell-checking">, Group, Flags<[CoreOption]>, HelpText<"Disable spell-checking">; def fshow_column : Flag<["-"], "fshow-column">, Group, Flags<[CoreOption]>; def fshow_source_location : Flag<["-"], "fshow-source-location">, Group; def fspell_checking : Flag<["-"], "fspell-checking">, Group; def fspell_checking_limit_EQ : Joined<["-"], "fspell-checking-limit=">, Group; def funroll_loops : Flag<["-"], "funroll-loops">, Group, HelpText<"Turn on loop unroller">, Flags<[CoreOption]>; def fno_unroll_loops : Flag<["-"], "fno-unroll-loops">, Group, HelpText<"Turn off loop unroller">, Flags<[CoreOption]>; def freroll_loops : Flag<["-"], "freroll-loops">, Group, HelpText<"Turn on loop reroller">, Flags<[CoreOption]>; def fno_reroll_loops : Flag<["-"], "fno-reroll-loops">, Group, HelpText<"Turn off loop reroller">; */ def help : Flag<["-", "--", "/"], "help">, Flags<[DriverOption]>, Group, HelpText<"Display available options">; /* def imacros : JoinedOrSeparate<["-", "--"], "imacros">, Group, Flags<[CoreOption]>, HelpText<"Include macros from file before parsing">, MetaVarName<"">; def include_ : JoinedOrSeparate<["-", "--"], "include">, Group, EnumName<"include">, MetaVarName<"">, HelpText<"Include file before parsing">, Flags<[CoreOption]>; def mllvm : Separate<["-"], "mllvm">, Flags<[CoreOption]>, HelpText<"Additional arguments to forward to LLVM's option processing">; def mms_bitfields : Flag<["-"], "mms-bitfields">, Group, Flags<[CoreOption]>, HelpText<"Set the default structure layout to be compatible with the Microsoft compiler standard">; def o : JoinedOrSeparate<["-"], "o">, Flags<[DriverOption, RenderAsInput, CoreOption]>, HelpText<"Write output to ">, MetaVarName<"">; def time : Flag<["-"], "time">, HelpText<"Time individual commands">; // def U : JoinedOrSeparate<["-"], "U">, Group, Flags<[CoreOption]>; def w : Flag<["-"], "w">, HelpText<"Suppress all warnings">, Flags<[CoreOption]>; def working_directory : JoinedOrSeparate<["-"], "working-directory">, Flags<[CoreOption]>, MetaVarName<"">, HelpText<"Resolve file paths relative to the specified directory">; def working_directory_EQ : Joined<["-"], "working-directory=">, Flags<[CoreOption]>, MetaVarName<"">, Alias; */ // Double dash options, which are usually an alias for one of the previous // options. def _all_warnings : Flag<["--"], "all-warnings">, Flags<[CoreOption]>, Alias; def _help_hidden : Flag<["--"], "help-hidden">, Flags<[DriverOption]>; def _help_question : Flag<["-", "/"], "?">, Flags<[DriverOption]>, Alias; ////////////////////////////////////////////////////////////////////////////// // New HLSL-specific flags. def ast_dump : Flag<["-", "/"], "ast-dump">, Flags<[CoreOption, DriverOption, HelpHidden]>, HelpText<"Dumps the parsed Abstract Syntax Tree.">; // should not be core, but handy workaround until explicit API written def external_lib : Separate<["-", "/"], "external">, Group, Flags<[DriverOption, HelpHidden]>, HelpText<"External DLL name to load for compiler support">; def external_fn : Separate<["-", "/"], "external-fn">, Group, Flags<[DriverOption, HelpHidden]>, HelpText<"External function name to load for compiler support">; def fcgl : Flag<["-", "/"], "fcgl">, Group, Flags<[CoreOption, HelpHidden]>, HelpText<"Generate high-level code only">; def not_use_legacy_cbuf_load : Flag<["-", "/"], "not_use_legacy_cbuf_load">, Group, Flags<[CoreOption]>, HelpText<"Do not use legacy cbuffer load">; def pack_prefix_stable : Flag<["-", "/"], "pack_prefix_stable">, Group, Flags<[CoreOption]>, HelpText<"(default) Pack signatures preserving prefix-stable property - appended elements will not disturb placement of prior elements">; def pack_optimized : Flag<["-", "/"], "pack_optimized">, Group, Flags<[CoreOption]>, HelpText<"Optimize signature packing assuming identical signature provided for each connecting stage">; def hlsl_version : Separate<["-", "/"], "HV">, Group, Flags<[CoreOption]>, HelpText<"HLSL version (2016, 2017, 2018). Default is 2018">; def no_warnings : Flag<["-", "/"], "no-warnings">, Group, Flags<[CoreOption]>, HelpText<"Suppress warnings">; def rootsig_define : Separate<["-", "/"], "rootsig-define">, Group, Flags<[CoreOption]>, HelpText<"Read root signature from a #define">; def enable_16bit_types: Flag<["-", "/"], "enable-16bit-types">, Flags<[CoreOption, DriverOption]>, Group, HelpText<"Enable 16bit types and disable min precision types. Available in HLSL 2018 and shader model 6.2">; def ignore_line_directives : Flag<["-", "/"], "ignore-line-directives">, HelpText<"Ignore line directives">, Flags<[CoreOption]>, Group; // SPIRV Change Starts def spirv : Flag<["-"], "spirv">, Group, Flags<[CoreOption, DriverOption]>, HelpText<"Generate SPIR-V code">; def fvk_ignore_unused_resources : Flag<["-"], "fvk-ignore-unused-resources">, Group, Flags<[CoreOption, DriverOption]>, HelpText<"Do not emit SPIR-V code for unused resources">; def fvk_stage_io_order_EQ : Joined<["-"], "fvk-stage-io-order=">, Group, Flags<[CoreOption, DriverOption, HelpHidden]>, HelpText<"Specify Vulkan stage I/O location assignment order">; def fvk_b_shift : MultiArg<["-"], "fvk-b-shift", 2>, MetaVarName<" ">, Group, Flags<[CoreOption, DriverOption]>, HelpText<"Specify Vulkan binding number shift for b-type register">; def fvk_t_shift : MultiArg<["-"], "fvk-t-shift", 2>, MetaVarName<" ">, Group, Flags<[CoreOption, DriverOption]>, HelpText<"Specify Vulkan binding number shift for t-type register">; def fvk_s_shift : MultiArg<["-"], "fvk-s-shift", 2>, MetaVarName<" ">, Group, Flags<[CoreOption, DriverOption]>, HelpText<"Specify Vulkan binding number shift for s-type register">; def fvk_u_shift : MultiArg<["-"], "fvk-u-shift", 2>, MetaVarName<" ">, Group, Flags<[CoreOption, DriverOption]>, HelpText<"Specify Vulkan binding number shift for u-type register">; def fvk_invert_y: Flag<["-"], "fvk-invert-y">, Group, Flags<[CoreOption, DriverOption]>, HelpText<"Invert SV_Position.y in VS/DS/GS to accommodate Vulkan's coordinate system">; // SPIRV Change Ends ////////////////////////////////////////////////////////////////////////////// // fxc-based flags that don't match those previously defined. def target_profile : JoinedOrSeparate<["-", "/"], "T">, Flags<[CoreOption]>, Group, MetaVarName<"">, HelpText<"Set target profile. \n\t: ps_6_0, ps_6_1, ps_6_2, vs_6_0, vs_6_1, vs_6_2, \n\t\t cs_6_0, cs_6_1, cs_6_2, gs_6_0, gs_6_1, gs_6_2, \n\t\t ds_6_0, ds_6_1, ds_6_2, hs_6_0, hs_6_1, hs_6_2, \n\t\t lib_6_0, lib_6_1, lib_6_2">; def entrypoint : JoinedOrSeparate<["-", "/"], "E">, Flags<[CoreOption]>, Group, HelpText<"Entry point name">; // /I - already defined above def _vi : Flag<["-", "/"], "Vi">, Alias, Flags<[CoreOption]>, Group, HelpText<"Display details about the include process.">; def Od : Flag<["-", "/"], "Od">, Flags<[CoreOption]>, Group, HelpText<"Disable optimizations">; def _SLASH_WX : Flag<["-", "/"], "WX">, Flags<[CoreOption]>, Group, HelpText<"Treat warnings as errors">; def VD : Flag<["-", "/"], "Vd">, Flags<[CoreOption]>, Group, HelpText<"Disable validation">; def _SLASH_Zi : Flag<["-", "/"], "Zi">, Flags<[CoreOption]>, Group, HelpText<"Enable debug information">; def recompile : Flag<["-", "/"], "recompile">, Flags<[CoreOption]>, Group, HelpText<"recompile from DXIL container with Debug Info or Debug Info bitcode file">; def Zpr : Flag<["-", "/"], "Zpr">, Flags<[CoreOption]>, Group, HelpText<"Pack matrices in row-major order">; def Zpc : Flag<["-", "/"], "Zpc">, Flags<[CoreOption]>, Group, HelpText<"Pack matrices in column-major order">; def Zss : Flag<["-", "/"], "Zss">, Flags<[CoreOption]>, Group, HelpText<"Build debug name considering source information">; def Zsb : Flag<["-", "/"], "Zsb">, Flags<[CoreOption]>, Group, HelpText<"Build debug name considering only output binary">; // deprecated /Gpp def Gpp : Flag<["-", "/"], "Gpp">, HelpText<"Force partial precision">; def Gfa : Flag<["-", "/"], "Gfa">, HelpText<"Avoid flow control constructs">, Flags<[CoreOption]>, Group; def Gfp : Flag<["-", "/"], "Gfp">, HelpText<"Prefer flow control constructs">, Flags<[CoreOption]>, Group; // /Gdp - disable effect performance mode - unsupported def Ges : Flag<["-", "/"], "Ges">, HelpText<"Enable strict mode">, Flags<[CoreOption]>, Group; def Gis : Flag<["-", "/"], "Gis">, HelpText<"Force IEEE strictness">, Flags<[CoreOption]>, Group; def denorm : JoinedOrSeparate<["-", "/"], "denorm">, HelpText<"select denormal value options (any, preserve, ftz). any is the default.">, Flags<[CoreOption]>, Group; def Fo : JoinedOrSeparate<["-", "/"], "Fo">, MetaVarName<"">, HelpText<"Output object file">, Flags<[DriverOption]>, Group; // def Fl : JoinedOrSeparate<["-", "/"], "Fl">, MetaVarName<"">, HelpText<"Output a library">; def Fc : JoinedOrSeparate<["-", "/"], "Fc">, MetaVarName<"">, HelpText<"Output assembly code listing file">, Flags<[DriverOption]>, Group; //def Fx : JoinedOrSeparate<["-", "/"], "Fx">, MetaVarName<"">, HelpText<"Output assembly code and hex listing file">; def Fh : JoinedOrSeparate<["-", "/"], "Fh">, MetaVarName<"">, HelpText<"Output header file containing object code">, Flags<[DriverOption]>, Group; def Fe : JoinedOrSeparate<["-", "/"], "Fe">, MetaVarName<"">, HelpText<"Output warnings and errors to the given file">, Flags<[DriverOption]>, Group; def Fd : JoinedOrSeparate<["-", "/"], "Fd">, MetaVarName<"">, HelpText<"Write debug information to the given file or directory; trail \\ to auto-generate and imply Qstrip_priv">, Flags<[DriverOption]>, Group; def Vn : JoinedOrSeparate<["-", "/"], "Vn">, MetaVarName<"">, HelpText<"Use as variable name in header file">, Flags<[DriverOption]>, Group; def Cc : Flag<["-", "/"], "Cc">, HelpText<"Output color coded assembly listings">, Group, Flags<[DriverOption]>; def Ni : Flag<["-", "/"], "Ni">, HelpText<"Output instruction numbers in assembly listings">, Group, Flags<[DriverOption]>; def No : Flag<["-", "/"], "No">, HelpText<"Output instruction byte offsets in assembly listings">, Group, Flags<[DriverOption]>; def Lx : Flag<["-", "/"], "Lx">, HelpText<"Output hexadecimal literals">, Group, Flags<[DriverOption]>; // In place of 'E' for clang; fxc uses 'E' for entry point. def P : Separate<["-", "/"], "P">, Flags<[DriverOption]>, Group, HelpText<"Preprocess to file (must be used alone)">; // @ - options response file def dumpbin : Flag<["-", "/"], "dumpbin">, Flags<[DriverOption]>, Group, HelpText<"Load a binary file rather than compiling">; def Qstrip_reflect : Flag<["-", "/"], "Qstrip_reflect">, Flags<[DriverOption]>, Group, HelpText<"Strip reflection data from shader bytecode (must be used with /Fo )">; def Qstrip_debug : Flag<["-", "/"], "Qstrip_debug">, Flags<[CoreOption]>, Group, HelpText<"Strip debug information from 4_0+ shader bytecode (must be used with /Fo )">; def Qstrip_priv : Flag<["-", "/"], "Qstrip_priv">, Flags<[DriverOption]>, Group, HelpText<"Strip private data from shader bytecode (must be used with /Fo )">; def Qstrip_rootsignature : Flag<["-", "/"], "Qstrip_rootsignature">, Flags<[DriverOption]>, Group, HelpText<"Strip root signature data from shader bytecode (must be used with /Fo )">; def setrootsignature : JoinedOrSeparate<["-", "/"], "setrootsignature">, MetaVarName<"">, Flags<[DriverOption]>, Group, HelpText<"Attach root signature to shader bytecode">; def extractrootsignature : Flag<["-", "/"], "extractrootsignature">, Flags<[DriverOption]>, Group, HelpText<"Extract root signature from shader bytecode (must be used with /Fo )">; def verifyrootsignature : JoinedOrSeparate<["-", "/"], "verifyrootsignature">, MetaVarName<"">, Flags<[DriverOption]>, Group, HelpText<"Verify shader bytecode with root signature">; def force_rootsig_ver : JoinedOrSeparate<["-", "/"], "force_rootsig_ver">, Flags<[CoreOption]>, MetaVarName<"">, Group, HelpText<"force root signature version (rootsig_1_1 if omitted)">; /* def shtemplate : JoinedOrSeparate<["-", "/"], "shtemplate">, MetaVarName<"">, Group, HelpText<"Template shader file for merging/matching resources">; def mergeUAVs : JoinedOrSeparate<["-", "/"], "mergeUAVs">, MetaVarName<"">, Group, HelpText<"Merge UAV slots of template shader and current shader">; def matchUAVs : JoinedOrSeparate<["-", "/"], "matchUAVs">, MetaVarName<"">, Group, HelpText<"Match template shader UAV slots in current shader">; def res_may_alias : Flag<["-", "/"], "res_may_alias">, Flags<[CoreOption]>, Group, HelpText<"Assume that UAVs/SRVs may alias">; def enable_unbounded_descriptor_tables : Flag<["-", "/"], "enable_unbounded_descriptor_tables">, Flags<[CoreOption]>, Group, HelpText<"Enables unbounded descriptor tables">; */ def all_resources_bound : Flag<["-", "/"], "all_resources_bound">, Flags<[CoreOption]>, Group, HelpText<"Enables agressive flattening">; def setprivate : JoinedOrSeparate<["-", "/"], "setprivate">, Flags<[DriverOption]>, MetaVarName<"">, Group, HelpText<"Private data to add to compiled shader blob">; def getprivate : JoinedOrSeparate<["-", "/"], "getprivate">, Flags<[DriverOption]>, MetaVarName<"">, Group, HelpText<"Save private data from shader blob">; def nologo : Flag<["-", "/"], "nologo">, Group, Flags<[DriverOption]>, HelpText<"Suppress copyright message">; // Also removed: compress, decompress, /Gch (child effect), /Gec (back compat), /Gpp (partial precision) // /Op - no support for preshaders.