"Fossies" - the Fresh Open Source Software Archive

Member "mesa-20.1.8/src/compiler/shader_enums.h" (16 Sep 2020, 30109 Bytes) of package /linux/misc/mesa-20.1.8.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "shader_enums.h" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 20.1.5_vs_20.2.0-rc1.

    1 /*
    2  * Mesa 3-D graphics library
    3  *
    4  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
    5  * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.
    6  *
    7  * Permission is hereby granted, free of charge, to any person obtaining a
    8  * copy of this software and associated documentation files (the "Software"),
    9  * to deal in the Software without restriction, including without limitation
   10  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   11  * and/or sell copies of the Software, and to permit persons to whom the
   12  * Software is furnished to do so, subject to the following conditions:
   13  *
   14  * The above copyright notice and this permission notice shall be included
   15  * in all copies or substantial portions of the Software.
   16  *
   17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
   20  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
   21  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
   22  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
   23  * OTHER DEALINGS IN THE SOFTWARE.
   24  */
   25 
   26 #ifndef SHADER_ENUMS_H
   27 #define SHADER_ENUMS_H
   28 
   29 #include <stdbool.h>
   30 
   31 /* Project-wide (GL and Vulkan) maximum. */
   32 #define MAX_DRAW_BUFFERS 8
   33 
   34 #ifdef __cplusplus
   35 extern "C" {
   36 #endif
   37 
   38 /**
   39  * Shader stages.
   40  *
   41  * The order must match how shaders are ordered in the pipeline.
   42  * The GLSL linker assumes that if i<j, then the j-th shader is
   43  * executed later than the i-th shader.
   44  */
   45 typedef enum
   46 {
   47    MESA_SHADER_NONE = -1,
   48    MESA_SHADER_VERTEX = 0,
   49    MESA_SHADER_TESS_CTRL = 1,
   50    MESA_SHADER_TESS_EVAL = 2,
   51    MESA_SHADER_GEOMETRY = 3,
   52    MESA_SHADER_FRAGMENT = 4,
   53    MESA_SHADER_COMPUTE = 5,
   54    /* must be last so it doesn't affect the GL pipeline */
   55    MESA_SHADER_KERNEL = 6,
   56 } gl_shader_stage;
   57 
   58 static inline bool
   59 gl_shader_stage_is_compute(gl_shader_stage stage)
   60 {
   61    return stage == MESA_SHADER_COMPUTE || stage == MESA_SHADER_KERNEL;
   62 }
   63 
   64 /**
   65  * Number of STATE_* values we need to address any GL state.
   66  * Used to dimension arrays.
   67  */
   68 #define STATE_LENGTH 5
   69 
   70 typedef short gl_state_index16; /* see enum gl_state_index */
   71 
   72 const char *gl_shader_stage_name(gl_shader_stage stage);
   73 
   74 /**
   75  * Translate a gl_shader_stage to a short shader stage name for debug
   76  * printouts and error messages.
   77  */
   78 const char *_mesa_shader_stage_to_string(unsigned stage);
   79 
   80 /**
   81  * Translate a gl_shader_stage to a shader stage abbreviation (VS, GS, FS)
   82  * for debug printouts and error messages.
   83  */
   84 const char *_mesa_shader_stage_to_abbrev(unsigned stage);
   85 
   86 /**
   87  * GL related stages (not including CL)
   88  */
   89 #define MESA_SHADER_STAGES (MESA_SHADER_COMPUTE + 1)
   90 
   91 /**
   92  * All stages
   93  */
   94 #define MESA_ALL_SHADER_STAGES (MESA_SHADER_KERNEL + 1)
   95 
   96 
   97 /**
   98  * Indexes for vertex program attributes.
   99  * GL_NV_vertex_program aliases generic attributes over the conventional
  100  * attributes.  In GL_ARB_vertex_program shader the aliasing is optional.
  101  * In GL_ARB_vertex_shader / OpenGL 2.0 the aliasing is disallowed (the
  102  * generic attributes are distinct/separate).
  103  */
  104 typedef enum
  105 {
  106    VERT_ATTRIB_POS,
  107    VERT_ATTRIB_NORMAL,
  108    VERT_ATTRIB_COLOR0,
  109    VERT_ATTRIB_COLOR1,
  110    VERT_ATTRIB_FOG,
  111    VERT_ATTRIB_COLOR_INDEX,
  112    VERT_ATTRIB_EDGEFLAG,
  113    VERT_ATTRIB_TEX0,
  114    VERT_ATTRIB_TEX1,
  115    VERT_ATTRIB_TEX2,
  116    VERT_ATTRIB_TEX3,
  117    VERT_ATTRIB_TEX4,
  118    VERT_ATTRIB_TEX5,
  119    VERT_ATTRIB_TEX6,
  120    VERT_ATTRIB_TEX7,
  121    VERT_ATTRIB_POINT_SIZE,
  122    VERT_ATTRIB_GENERIC0,
  123    VERT_ATTRIB_GENERIC1,
  124    VERT_ATTRIB_GENERIC2,
  125    VERT_ATTRIB_GENERIC3,
  126    VERT_ATTRIB_GENERIC4,
  127    VERT_ATTRIB_GENERIC5,
  128    VERT_ATTRIB_GENERIC6,
  129    VERT_ATTRIB_GENERIC7,
  130    VERT_ATTRIB_GENERIC8,
  131    VERT_ATTRIB_GENERIC9,
  132    VERT_ATTRIB_GENERIC10,
  133    VERT_ATTRIB_GENERIC11,
  134    VERT_ATTRIB_GENERIC12,
  135    VERT_ATTRIB_GENERIC13,
  136    VERT_ATTRIB_GENERIC14,
  137    VERT_ATTRIB_GENERIC15,
  138    VERT_ATTRIB_MAX
  139 } gl_vert_attrib;
  140 
  141 const char *gl_vert_attrib_name(gl_vert_attrib attrib);
  142 
  143 /**
  144  * Symbolic constats to help iterating over
  145  * specific blocks of vertex attributes.
  146  *
  147  * VERT_ATTRIB_FF
  148  *   includes all fixed function attributes as well as
  149  *   the aliased GL_NV_vertex_program shader attributes.
  150  * VERT_ATTRIB_TEX
  151  *   include the classic texture coordinate attributes.
  152  *   Is a subset of VERT_ATTRIB_FF.
  153  * VERT_ATTRIB_GENERIC
  154  *   include the OpenGL 2.0+ GLSL generic shader attributes.
  155  *   These alias the generic GL_ARB_vertex_shader attributes.
  156  * VERT_ATTRIB_MAT
  157  *   include the generic shader attributes used to alias
  158  *   varying material values for the TNL shader programs.
  159  *   They are located at the end of the generic attribute
  160  *   block not to overlap with the generic 0 attribute.
  161  */
  162 #define VERT_ATTRIB_FF(i)           (VERT_ATTRIB_POS + (i))
  163 #define VERT_ATTRIB_FF_MAX          VERT_ATTRIB_GENERIC0
  164 
  165 #define VERT_ATTRIB_TEX(i)          (VERT_ATTRIB_TEX0 + (i))
  166 #define VERT_ATTRIB_TEX_MAX         MAX_TEXTURE_COORD_UNITS
  167 
  168 #define VERT_ATTRIB_GENERIC(i)      (VERT_ATTRIB_GENERIC0 + (i))
  169 #define VERT_ATTRIB_GENERIC_MAX     MAX_VERTEX_GENERIC_ATTRIBS
  170 
  171 #define VERT_ATTRIB_MAT0            \
  172    (VERT_ATTRIB_GENERIC_MAX - VERT_ATTRIB_MAT_MAX)
  173 #define VERT_ATTRIB_MAT(i)          \
  174    VERT_ATTRIB_GENERIC((i) + VERT_ATTRIB_MAT0)
  175 #define VERT_ATTRIB_MAT_MAX         MAT_ATTRIB_MAX
  176 
  177 /**
  178  * Bitflags for vertex attributes.
  179  * These are used in bitfields in many places.
  180  */
  181 /*@{*/
  182 #define VERT_BIT_POS             BITFIELD_BIT(VERT_ATTRIB_POS)
  183 #define VERT_BIT_NORMAL          BITFIELD_BIT(VERT_ATTRIB_NORMAL)
  184 #define VERT_BIT_COLOR0          BITFIELD_BIT(VERT_ATTRIB_COLOR0)
  185 #define VERT_BIT_COLOR1          BITFIELD_BIT(VERT_ATTRIB_COLOR1)
  186 #define VERT_BIT_FOG             BITFIELD_BIT(VERT_ATTRIB_FOG)
  187 #define VERT_BIT_COLOR_INDEX     BITFIELD_BIT(VERT_ATTRIB_COLOR_INDEX)
  188 #define VERT_BIT_EDGEFLAG        BITFIELD_BIT(VERT_ATTRIB_EDGEFLAG)
  189 #define VERT_BIT_TEX0            BITFIELD_BIT(VERT_ATTRIB_TEX0)
  190 #define VERT_BIT_TEX1            BITFIELD_BIT(VERT_ATTRIB_TEX1)
  191 #define VERT_BIT_TEX2            BITFIELD_BIT(VERT_ATTRIB_TEX2)
  192 #define VERT_BIT_TEX3            BITFIELD_BIT(VERT_ATTRIB_TEX3)
  193 #define VERT_BIT_TEX4            BITFIELD_BIT(VERT_ATTRIB_TEX4)
  194 #define VERT_BIT_TEX5            BITFIELD_BIT(VERT_ATTRIB_TEX5)
  195 #define VERT_BIT_TEX6            BITFIELD_BIT(VERT_ATTRIB_TEX6)
  196 #define VERT_BIT_TEX7            BITFIELD_BIT(VERT_ATTRIB_TEX7)
  197 #define VERT_BIT_POINT_SIZE      BITFIELD_BIT(VERT_ATTRIB_POINT_SIZE)
  198 #define VERT_BIT_GENERIC0        BITFIELD_BIT(VERT_ATTRIB_GENERIC0)
  199 
  200 #define VERT_BIT(i)              BITFIELD_BIT(i)
  201 #define VERT_BIT_ALL             BITFIELD_RANGE(0, VERT_ATTRIB_MAX)
  202 
  203 #define VERT_BIT_FF(i)           VERT_BIT(i)
  204 #define VERT_BIT_FF_ALL          BITFIELD_RANGE(0, VERT_ATTRIB_FF_MAX)
  205 #define VERT_BIT_TEX(i)          VERT_BIT(VERT_ATTRIB_TEX(i))
  206 #define VERT_BIT_TEX_ALL         \
  207    BITFIELD_RANGE(VERT_ATTRIB_TEX(0), VERT_ATTRIB_TEX_MAX)
  208 
  209 #define VERT_BIT_GENERIC(i)      VERT_BIT(VERT_ATTRIB_GENERIC(i))
  210 #define VERT_BIT_GENERIC_ALL     \
  211    BITFIELD_RANGE(VERT_ATTRIB_GENERIC(0), VERT_ATTRIB_GENERIC_MAX)
  212 
  213 #define VERT_BIT_MAT(i)          VERT_BIT(VERT_ATTRIB_MAT(i))
  214 #define VERT_BIT_MAT_ALL         \
  215    BITFIELD_RANGE(VERT_ATTRIB_MAT(0), VERT_ATTRIB_MAT_MAX)
  216 /*@}*/
  217 
  218 #define MAX_VARYING 32 /**< number of float[4] vectors */
  219 
  220 /**
  221  * Indexes for vertex shader outputs, geometry shader inputs/outputs, and
  222  * fragment shader inputs.
  223  *
  224  * Note that some of these values are not available to all pipeline stages.
  225  *
  226  * When this enum is updated, the following code must be updated too:
  227  * - vertResults (in prog_print.c's arb_output_attrib_string())
  228  * - fragAttribs (in prog_print.c's arb_input_attrib_string())
  229  * - _mesa_varying_slot_in_fs()
  230  */
  231 typedef enum
  232 {
  233    VARYING_SLOT_POS,
  234    VARYING_SLOT_COL0, /* COL0 and COL1 must be contiguous */
  235    VARYING_SLOT_COL1,
  236    VARYING_SLOT_FOGC,
  237    VARYING_SLOT_TEX0, /* TEX0-TEX7 must be contiguous */
  238    VARYING_SLOT_TEX1,
  239    VARYING_SLOT_TEX2,
  240    VARYING_SLOT_TEX3,
  241    VARYING_SLOT_TEX4,
  242    VARYING_SLOT_TEX5,
  243    VARYING_SLOT_TEX6,
  244    VARYING_SLOT_TEX7,
  245    VARYING_SLOT_PSIZ, /* Does not appear in FS */
  246    VARYING_SLOT_BFC0, /* Does not appear in FS */
  247    VARYING_SLOT_BFC1, /* Does not appear in FS */
  248    VARYING_SLOT_EDGE, /* Does not appear in FS */
  249    VARYING_SLOT_CLIP_VERTEX, /* Does not appear in FS */
  250    VARYING_SLOT_CLIP_DIST0,
  251    VARYING_SLOT_CLIP_DIST1,
  252    VARYING_SLOT_CULL_DIST0,
  253    VARYING_SLOT_CULL_DIST1,
  254    VARYING_SLOT_PRIMITIVE_ID, /* Does not appear in VS */
  255    VARYING_SLOT_LAYER, /* Appears as VS or GS output */
  256    VARYING_SLOT_VIEWPORT, /* Appears as VS or GS output */
  257    VARYING_SLOT_FACE, /* FS only */
  258    VARYING_SLOT_PNTC, /* FS only */
  259    VARYING_SLOT_TESS_LEVEL_OUTER, /* Only appears as TCS output. */
  260    VARYING_SLOT_TESS_LEVEL_INNER, /* Only appears as TCS output. */
  261    VARYING_SLOT_BOUNDING_BOX0, /* Only appears as TCS output. */
  262    VARYING_SLOT_BOUNDING_BOX1, /* Only appears as TCS output. */
  263    VARYING_SLOT_VIEW_INDEX,
  264    VARYING_SLOT_VIEWPORT_MASK, /* Does not appear in FS */
  265    VARYING_SLOT_VAR0, /* First generic varying slot */
  266    /* the remaining are simply for the benefit of gl_varying_slot_name()
  267     * and not to be construed as an upper bound:
  268     */
  269    VARYING_SLOT_VAR1,
  270    VARYING_SLOT_VAR2,
  271    VARYING_SLOT_VAR3,
  272    VARYING_SLOT_VAR4,
  273    VARYING_SLOT_VAR5,
  274    VARYING_SLOT_VAR6,
  275    VARYING_SLOT_VAR7,
  276    VARYING_SLOT_VAR8,
  277    VARYING_SLOT_VAR9,
  278    VARYING_SLOT_VAR10,
  279    VARYING_SLOT_VAR11,
  280    VARYING_SLOT_VAR12,
  281    VARYING_SLOT_VAR13,
  282    VARYING_SLOT_VAR14,
  283    VARYING_SLOT_VAR15,
  284    VARYING_SLOT_VAR16,
  285    VARYING_SLOT_VAR17,
  286    VARYING_SLOT_VAR18,
  287    VARYING_SLOT_VAR19,
  288    VARYING_SLOT_VAR20,
  289    VARYING_SLOT_VAR21,
  290    VARYING_SLOT_VAR22,
  291    VARYING_SLOT_VAR23,
  292    VARYING_SLOT_VAR24,
  293    VARYING_SLOT_VAR25,
  294    VARYING_SLOT_VAR26,
  295    VARYING_SLOT_VAR27,
  296    VARYING_SLOT_VAR28,
  297    VARYING_SLOT_VAR29,
  298    VARYING_SLOT_VAR30,
  299    VARYING_SLOT_VAR31,
  300 } gl_varying_slot;
  301 
  302 
  303 #define VARYING_SLOT_MAX    (VARYING_SLOT_VAR0 + MAX_VARYING)
  304 #define VARYING_SLOT_PATCH0 (VARYING_SLOT_MAX)
  305 #define VARYING_SLOT_TESS_MAX   (VARYING_SLOT_PATCH0 + MAX_VARYING)
  306 #define MAX_VARYINGS_INCL_PATCH (VARYING_SLOT_TESS_MAX - VARYING_SLOT_VAR0)
  307 
  308 const char *gl_varying_slot_name(gl_varying_slot slot);
  309 
  310 /**
  311  * Bitflags for varying slots.
  312  */
  313 /*@{*/
  314 #define VARYING_BIT_POS BITFIELD64_BIT(VARYING_SLOT_POS)
  315 #define VARYING_BIT_COL0 BITFIELD64_BIT(VARYING_SLOT_COL0)
  316 #define VARYING_BIT_COL1 BITFIELD64_BIT(VARYING_SLOT_COL1)
  317 #define VARYING_BIT_FOGC BITFIELD64_BIT(VARYING_SLOT_FOGC)
  318 #define VARYING_BIT_TEX0 BITFIELD64_BIT(VARYING_SLOT_TEX0)
  319 #define VARYING_BIT_TEX1 BITFIELD64_BIT(VARYING_SLOT_TEX1)
  320 #define VARYING_BIT_TEX2 BITFIELD64_BIT(VARYING_SLOT_TEX2)
  321 #define VARYING_BIT_TEX3 BITFIELD64_BIT(VARYING_SLOT_TEX3)
  322 #define VARYING_BIT_TEX4 BITFIELD64_BIT(VARYING_SLOT_TEX4)
  323 #define VARYING_BIT_TEX5 BITFIELD64_BIT(VARYING_SLOT_TEX5)
  324 #define VARYING_BIT_TEX6 BITFIELD64_BIT(VARYING_SLOT_TEX6)
  325 #define VARYING_BIT_TEX7 BITFIELD64_BIT(VARYING_SLOT_TEX7)
  326 #define VARYING_BIT_TEX(U) BITFIELD64_BIT(VARYING_SLOT_TEX0 + (U))
  327 #define VARYING_BITS_TEX_ANY BITFIELD64_RANGE(VARYING_SLOT_TEX0, \
  328                                               MAX_TEXTURE_COORD_UNITS)
  329 #define VARYING_BIT_PSIZ BITFIELD64_BIT(VARYING_SLOT_PSIZ)
  330 #define VARYING_BIT_BFC0 BITFIELD64_BIT(VARYING_SLOT_BFC0)
  331 #define VARYING_BIT_BFC1 BITFIELD64_BIT(VARYING_SLOT_BFC1)
  332 #define VARYING_BIT_EDGE BITFIELD64_BIT(VARYING_SLOT_EDGE)
  333 #define VARYING_BIT_CLIP_VERTEX BITFIELD64_BIT(VARYING_SLOT_CLIP_VERTEX)
  334 #define VARYING_BIT_CLIP_DIST0 BITFIELD64_BIT(VARYING_SLOT_CLIP_DIST0)
  335 #define VARYING_BIT_CLIP_DIST1 BITFIELD64_BIT(VARYING_SLOT_CLIP_DIST1)
  336 #define VARYING_BIT_CULL_DIST0 BITFIELD64_BIT(VARYING_SLOT_CULL_DIST0)
  337 #define VARYING_BIT_CULL_DIST1 BITFIELD64_BIT(VARYING_SLOT_CULL_DIST1)
  338 #define VARYING_BIT_PRIMITIVE_ID BITFIELD64_BIT(VARYING_SLOT_PRIMITIVE_ID)
  339 #define VARYING_BIT_LAYER BITFIELD64_BIT(VARYING_SLOT_LAYER)
  340 #define VARYING_BIT_VIEWPORT BITFIELD64_BIT(VARYING_SLOT_VIEWPORT)
  341 #define VARYING_BIT_FACE BITFIELD64_BIT(VARYING_SLOT_FACE)
  342 #define VARYING_BIT_PNTC BITFIELD64_BIT(VARYING_SLOT_PNTC)
  343 #define VARYING_BIT_TESS_LEVEL_OUTER BITFIELD64_BIT(VARYING_SLOT_TESS_LEVEL_OUTER)
  344 #define VARYING_BIT_TESS_LEVEL_INNER BITFIELD64_BIT(VARYING_SLOT_TESS_LEVEL_INNER)
  345 #define VARYING_BIT_BOUNDING_BOX0 BITFIELD64_BIT(VARYING_SLOT_BOUNDING_BOX0)
  346 #define VARYING_BIT_BOUNDING_BOX1 BITFIELD64_BIT(VARYING_SLOT_BOUNDING_BOX1)
  347 #define VARYING_BIT_VIEWPORT_MASK BITFIELD64_BIT(VARYING_SLOT_VIEWPORT_MASK)
  348 #define VARYING_BIT_VAR(V) BITFIELD64_BIT(VARYING_SLOT_VAR0 + (V))
  349 /*@}*/
  350 
  351 /**
  352  * Bitflags for system values.
  353  */
  354 #define SYSTEM_BIT_SAMPLE_ID ((uint64_t)1 << SYSTEM_VALUE_SAMPLE_ID)
  355 #define SYSTEM_BIT_SAMPLE_POS ((uint64_t)1 << SYSTEM_VALUE_SAMPLE_POS)
  356 #define SYSTEM_BIT_SAMPLE_MASK_IN ((uint64_t)1 << SYSTEM_VALUE_SAMPLE_MASK_IN)
  357 #define SYSTEM_BIT_LOCAL_INVOCATION_ID ((uint64_t)1 << SYSTEM_VALUE_LOCAL_INVOCATION_ID)
  358 
  359 /**
  360  * If the gl_register_file is PROGRAM_SYSTEM_VALUE, the register index will be
  361  * one of these values.  If a NIR variable's mode is nir_var_system_value, it
  362  * will be one of these values.
  363  */
  364 typedef enum
  365 {
  366    /**
  367     * \name System values applicable to all shaders
  368     */
  369    /*@{*/
  370 
  371    /**
  372     * Builtin variables added by GL_ARB_shader_ballot.
  373     */
  374    /*@{*/
  375 
  376    /**
  377     * From the GL_ARB_shader-ballot spec:
  378     *
  379     *    "A sub-group is a collection of invocations which execute in lockstep.
  380     *     The variable <gl_SubGroupSizeARB> is the maximum number of
  381     *     invocations in a sub-group. The maximum <gl_SubGroupSizeARB>
  382     *     supported in this extension is 64."
  383     *
  384     * The spec defines this as a uniform. However, it's highly unlikely that
  385     * implementations actually treat it as a uniform (which is loaded from a
  386     * constant buffer). Most likely, this is an implementation-wide constant,
  387     * or perhaps something that depends on the shader stage.
  388     */
  389    SYSTEM_VALUE_SUBGROUP_SIZE,
  390 
  391    /**
  392     * From the GL_ARB_shader_ballot spec:
  393     *
  394     *    "The variable <gl_SubGroupInvocationARB> holds the index of the
  395     *     invocation within sub-group. This variable is in the range 0 to
  396     *     <gl_SubGroupSizeARB>-1, where <gl_SubGroupSizeARB> is the total
  397     *     number of invocations in a sub-group."
  398     */
  399    SYSTEM_VALUE_SUBGROUP_INVOCATION,
  400 
  401    /**
  402     * From the GL_ARB_shader_ballot spec:
  403     *
  404     *    "The <gl_SubGroup??MaskARB> variables provide a bitmask for all
  405     *     invocations, with one bit per invocation starting with the least
  406     *     significant bit, according to the following table,
  407     *
  408     *       variable               equation for bit values
  409     *       --------------------   ------------------------------------
  410     *       gl_SubGroupEqMaskARB   bit index == gl_SubGroupInvocationARB
  411     *       gl_SubGroupGeMaskARB   bit index >= gl_SubGroupInvocationARB
  412     *       gl_SubGroupGtMaskARB   bit index >  gl_SubGroupInvocationARB
  413     *       gl_SubGroupLeMaskARB   bit index <= gl_SubGroupInvocationARB
  414     *       gl_SubGroupLtMaskARB   bit index <  gl_SubGroupInvocationARB
  415     */
  416    SYSTEM_VALUE_SUBGROUP_EQ_MASK,
  417    SYSTEM_VALUE_SUBGROUP_GE_MASK,
  418    SYSTEM_VALUE_SUBGROUP_GT_MASK,
  419    SYSTEM_VALUE_SUBGROUP_LE_MASK,
  420    SYSTEM_VALUE_SUBGROUP_LT_MASK,
  421    /*@}*/
  422 
  423    /**
  424     * Builtin variables added by VK_KHR_subgroups
  425     */
  426    /*@{*/
  427    SYSTEM_VALUE_NUM_SUBGROUPS,
  428    SYSTEM_VALUE_SUBGROUP_ID,
  429    /*@}*/
  430 
  431    /*@}*/
  432 
  433    /**
  434     * \name Vertex shader system values
  435     */
  436    /*@{*/
  437    /**
  438     * OpenGL-style vertex ID.
  439     *
  440     * Section 2.11.7 (Shader Execution), subsection Shader Inputs, of the
  441     * OpenGL 3.3 core profile spec says:
  442     *
  443     *     "gl_VertexID holds the integer index i implicitly passed by
  444     *     DrawArrays or one of the other drawing commands defined in section
  445     *     2.8.3."
  446     *
  447     * Section 2.8.3 (Drawing Commands) of the same spec says:
  448     *
  449     *     "The commands....are equivalent to the commands with the same base
  450     *     name (without the BaseVertex suffix), except that the ith element
  451     *     transferred by the corresponding draw call will be taken from
  452     *     element indices[i] + basevertex of each enabled array."
  453     *
  454     * Additionally, the overview in the GL_ARB_shader_draw_parameters spec
  455     * says:
  456     *
  457     *     "In unextended GL, vertex shaders have inputs named gl_VertexID and
  458     *     gl_InstanceID, which contain, respectively the index of the vertex
  459     *     and instance. The value of gl_VertexID is the implicitly passed
  460     *     index of the vertex being processed, which includes the value of
  461     *     baseVertex, for those commands that accept it."
  462     *
  463     * gl_VertexID gets basevertex added in.  This differs from DirectX where
  464     * SV_VertexID does \b not get basevertex added in.
  465     *
  466     * \note
  467     * If all system values are available, \c SYSTEM_VALUE_VERTEX_ID will be
  468     * equal to \c SYSTEM_VALUE_VERTEX_ID_ZERO_BASE plus
  469     * \c SYSTEM_VALUE_BASE_VERTEX.
  470     *
  471     * \sa SYSTEM_VALUE_VERTEX_ID_ZERO_BASE, SYSTEM_VALUE_BASE_VERTEX
  472     */
  473    SYSTEM_VALUE_VERTEX_ID,
  474 
  475    /**
  476     * Instanced ID as supplied to gl_InstanceID
  477     *
  478     * Values assigned to gl_InstanceID always begin with zero, regardless of
  479     * the value of baseinstance.
  480     *
  481     * Section 11.1.3.9 (Shader Inputs) of the OpenGL 4.4 core profile spec
  482     * says:
  483     *
  484     *     "gl_InstanceID holds the integer instance number of the current
  485     *     primitive in an instanced draw call (see section 10.5)."
  486     *
  487     * Through a big chain of pseudocode, section 10.5 describes that
  488     * baseinstance is not counted by gl_InstanceID.  In that section, notice
  489     *
  490     *     "If an enabled vertex attribute array is instanced (it has a
  491     *     non-zero divisor as specified by VertexAttribDivisor), the element
  492     *     index that is transferred to the GL, for all vertices, is given by
  493     *
  494     *         floor(instance/divisor) + baseinstance
  495     *
  496     *     If an array corresponding to an attribute required by a vertex
  497     *     shader is not enabled, then the corresponding element is taken from
  498     *     the current attribute state (see section 10.2)."
  499     *
  500     * Note that baseinstance is \b not included in the value of instance.
  501     */
  502    SYSTEM_VALUE_INSTANCE_ID,
  503 
  504    /**
  505     * Vulkan InstanceIndex.
  506     *
  507     * InstanceIndex = gl_InstanceID + gl_BaseInstance
  508     */
  509    SYSTEM_VALUE_INSTANCE_INDEX,
  510 
  511    /**
  512     * DirectX-style vertex ID.
  513     *
  514     * Unlike \c SYSTEM_VALUE_VERTEX_ID, this system value does \b not include
  515     * the value of basevertex.
  516     *
  517     * \sa SYSTEM_VALUE_VERTEX_ID, SYSTEM_VALUE_BASE_VERTEX
  518     */
  519    SYSTEM_VALUE_VERTEX_ID_ZERO_BASE,
  520 
  521    /**
  522     * Value of \c basevertex passed to \c glDrawElementsBaseVertex and similar
  523     * functions.
  524     *
  525     * \sa SYSTEM_VALUE_VERTEX_ID, SYSTEM_VALUE_VERTEX_ID_ZERO_BASE
  526     */
  527    SYSTEM_VALUE_BASE_VERTEX,
  528 
  529    /**
  530     * Depending on the type of the draw call (indexed or non-indexed),
  531     * is the value of \c basevertex passed to \c glDrawElementsBaseVertex and
  532     * similar, or is the value of \c first passed to \c glDrawArrays and
  533     * similar.
  534     *
  535     * \note
  536     * It can be used to calculate the \c SYSTEM_VALUE_VERTEX_ID as
  537     * \c SYSTEM_VALUE_VERTEX_ID_ZERO_BASE plus \c SYSTEM_VALUE_FIRST_VERTEX.
  538     *
  539     * \sa SYSTEM_VALUE_VERTEX_ID_ZERO_BASE, SYSTEM_VALUE_VERTEX_ID
  540     */
  541    SYSTEM_VALUE_FIRST_VERTEX,
  542 
  543    /**
  544     * If the Draw command used to start the rendering was an indexed draw
  545     * or not (~0/0). Useful to calculate \c SYSTEM_VALUE_BASE_VERTEX as
  546     * \c SYSTEM_VALUE_IS_INDEXED_DRAW & \c SYSTEM_VALUE_FIRST_VERTEX.
  547     */
  548    SYSTEM_VALUE_IS_INDEXED_DRAW,
  549 
  550    /**
  551     * Value of \c baseinstance passed to instanced draw entry points
  552     *
  553     * \sa SYSTEM_VALUE_INSTANCE_ID
  554     */
  555    SYSTEM_VALUE_BASE_INSTANCE,
  556 
  557    /**
  558     * From _ARB_shader_draw_parameters:
  559     *
  560     *   "Additionally, this extension adds a further built-in variable,
  561     *    gl_DrawID to the shading language. This variable contains the index
  562     *    of the draw currently being processed by a Multi* variant of a
  563     *    drawing command (such as MultiDrawElements or
  564     *    MultiDrawArraysIndirect)."
  565     *
  566     * If GL_ARB_multi_draw_indirect is not supported, this is always 0.
  567     */
  568    SYSTEM_VALUE_DRAW_ID,
  569    /*@}*/
  570 
  571    /**
  572     * \name Geometry shader system values
  573     */
  574    /*@{*/
  575    SYSTEM_VALUE_INVOCATION_ID,  /**< (Also in Tessellation Control shader) */
  576    /*@}*/
  577 
  578    /**
  579     * \name Fragment shader system values
  580     */
  581    /*@{*/
  582    SYSTEM_VALUE_FRAG_COORD,
  583    SYSTEM_VALUE_POINT_COORD,
  584    SYSTEM_VALUE_FRONT_FACE,
  585    SYSTEM_VALUE_SAMPLE_ID,
  586    SYSTEM_VALUE_SAMPLE_POS,
  587    SYSTEM_VALUE_SAMPLE_MASK_IN,
  588    SYSTEM_VALUE_HELPER_INVOCATION,
  589    SYSTEM_VALUE_COLOR0,
  590    SYSTEM_VALUE_COLOR1,
  591    /*@}*/
  592 
  593    /**
  594     * \name Tessellation Evaluation shader system values
  595     */
  596    /*@{*/
  597    SYSTEM_VALUE_TESS_COORD,
  598    SYSTEM_VALUE_VERTICES_IN,    /**< Tessellation vertices in input patch */
  599    SYSTEM_VALUE_PRIMITIVE_ID,
  600    SYSTEM_VALUE_TESS_LEVEL_OUTER, /**< TES input */
  601    SYSTEM_VALUE_TESS_LEVEL_INNER, /**< TES input */
  602    SYSTEM_VALUE_TESS_LEVEL_OUTER_DEFAULT, /**< TCS input for passthru TCS */
  603    SYSTEM_VALUE_TESS_LEVEL_INNER_DEFAULT, /**< TCS input for passthru TCS */
  604    /*@}*/
  605 
  606    /**
  607     * \name Compute shader system values
  608     */
  609    /*@{*/
  610    SYSTEM_VALUE_LOCAL_INVOCATION_ID,
  611    SYSTEM_VALUE_LOCAL_INVOCATION_INDEX,
  612    SYSTEM_VALUE_GLOBAL_INVOCATION_ID,
  613    SYSTEM_VALUE_GLOBAL_INVOCATION_INDEX,
  614    SYSTEM_VALUE_WORK_GROUP_ID,
  615    SYSTEM_VALUE_NUM_WORK_GROUPS,
  616    SYSTEM_VALUE_LOCAL_GROUP_SIZE,
  617    SYSTEM_VALUE_GLOBAL_GROUP_SIZE,
  618    SYSTEM_VALUE_WORK_DIM,
  619    SYSTEM_VALUE_USER_DATA_AMD,
  620    /*@}*/
  621 
  622    /** Required for VK_KHR_device_group */
  623    SYSTEM_VALUE_DEVICE_INDEX,
  624 
  625    /** Required for VK_KHX_multiview */
  626    SYSTEM_VALUE_VIEW_INDEX,
  627 
  628    /**
  629     * Driver internal vertex-count, used (for example) for drivers to
  630     * calculate stride for stream-out outputs.  Not externally visible.
  631     */
  632    SYSTEM_VALUE_VERTEX_CNT,
  633 
  634    /**
  635     * Required for AMD_shader_explicit_vertex_parameter and also used for
  636     * varying-fetch instructions.
  637     *
  638     * The _SIZE value is "primitive size", used to scale i/j in primitive
  639     * space to pixel space.
  640     */
  641    SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL,
  642    SYSTEM_VALUE_BARYCENTRIC_PERSP_SAMPLE,
  643    SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTROID,
  644    SYSTEM_VALUE_BARYCENTRIC_PERSP_SIZE,
  645    SYSTEM_VALUE_BARYCENTRIC_LINEAR_PIXEL,
  646    SYSTEM_VALUE_BARYCENTRIC_LINEAR_CENTROID,
  647    SYSTEM_VALUE_BARYCENTRIC_LINEAR_SAMPLE,
  648    SYSTEM_VALUE_BARYCENTRIC_PULL_MODEL,
  649 
  650    /**
  651     * IR3 specific geometry shader and tesselation control shader system
  652     * values that packs invocation id, thread id and vertex id.  Having this
  653     * as a nir level system value lets us do the unpacking in nir.
  654     */
  655    SYSTEM_VALUE_GS_HEADER_IR3,
  656    SYSTEM_VALUE_TCS_HEADER_IR3,
  657 
  658    SYSTEM_VALUE_MAX             /**< Number of values */
  659 } gl_system_value;
  660 
  661 const char *gl_system_value_name(gl_system_value sysval);
  662 
  663 /**
  664  * The possible interpolation qualifiers that can be applied to a fragment
  665  * shader input in GLSL.
  666  *
  667  * Note: INTERP_MODE_NONE must be 0 so that memsetting the
  668  * ir_variable data structure to 0 causes the default behavior.
  669  */
  670 enum glsl_interp_mode
  671 {
  672    INTERP_MODE_NONE = 0,
  673    INTERP_MODE_SMOOTH,
  674    INTERP_MODE_FLAT,
  675    INTERP_MODE_NOPERSPECTIVE,
  676    INTERP_MODE_EXPLICIT,
  677    INTERP_MODE_COUNT /**< Number of interpolation qualifiers */
  678 };
  679 
  680 enum glsl_interface_packing {
  681    GLSL_INTERFACE_PACKING_STD140,
  682    GLSL_INTERFACE_PACKING_SHARED,
  683    GLSL_INTERFACE_PACKING_PACKED,
  684    GLSL_INTERFACE_PACKING_STD430
  685 };
  686 
  687 const char *glsl_interp_mode_name(enum glsl_interp_mode qual);
  688 
  689 /**
  690  * Fragment program results
  691  */
  692 typedef enum
  693 {
  694    FRAG_RESULT_DEPTH = 0,
  695    FRAG_RESULT_STENCIL = 1,
  696    /* If a single color should be written to all render targets, this
  697     * register is written.  No FRAG_RESULT_DATAn will be written.
  698     */
  699    FRAG_RESULT_COLOR = 2,
  700    FRAG_RESULT_SAMPLE_MASK = 3,
  701 
  702    /* FRAG_RESULT_DATAn are the per-render-target (GLSL gl_FragData[n]
  703     * or ARB_fragment_program fragment.color[n]) color results.  If
  704     * any are written, FRAG_RESULT_COLOR will not be written.
  705     * FRAG_RESULT_DATA1 and up are simply for the benefit of
  706     * gl_frag_result_name() and not to be construed as an upper bound
  707     */
  708    FRAG_RESULT_DATA0 = 4,
  709    FRAG_RESULT_DATA1,
  710    FRAG_RESULT_DATA2,
  711    FRAG_RESULT_DATA3,
  712    FRAG_RESULT_DATA4,
  713    FRAG_RESULT_DATA5,
  714    FRAG_RESULT_DATA6,
  715    FRAG_RESULT_DATA7,
  716 } gl_frag_result;
  717 
  718 const char *gl_frag_result_name(gl_frag_result result);
  719 
  720 #define FRAG_RESULT_MAX     (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS)
  721 
  722 /**
  723  * \brief Layout qualifiers for gl_FragDepth.
  724  *
  725  * Extension AMD_conservative_depth allows gl_FragDepth to be redeclared with
  726  * a layout qualifier.
  727  *
  728  * \see enum ir_depth_layout
  729  */
  730 enum gl_frag_depth_layout
  731 {
  732    FRAG_DEPTH_LAYOUT_NONE, /**< No layout is specified. */
  733    FRAG_DEPTH_LAYOUT_ANY,
  734    FRAG_DEPTH_LAYOUT_GREATER,
  735    FRAG_DEPTH_LAYOUT_LESS,
  736    FRAG_DEPTH_LAYOUT_UNCHANGED
  737 };
  738 
  739 /**
  740  * \brief Buffer access qualifiers
  741  */
  742 enum gl_access_qualifier
  743 {
  744    ACCESS_COHERENT      = (1 << 0),
  745    ACCESS_RESTRICT      = (1 << 1),
  746    ACCESS_VOLATILE      = (1 << 2),
  747    ACCESS_NON_READABLE  = (1 << 3),
  748    ACCESS_NON_WRITEABLE = (1 << 4),
  749 
  750    /** The access may use a non-uniform buffer or image index */
  751    ACCESS_NON_UNIFORM   = (1 << 5),
  752 
  753    /* This has the same semantics as NIR_INTRINSIC_CAN_REORDER, only to be
  754     * used with loads. In other words, it means that the load can be
  755     * arbitrarily reordered, or combined with other loads to the same address.
  756     * It is implied by ACCESS_NON_WRITEABLE together with ACCESS_RESTRICT, and
  757     * a lack of ACCESS_COHERENT and ACCESS_VOLATILE.
  758     */
  759    ACCESS_CAN_REORDER = (1 << 6),
  760 
  761    /** Use as little cache space as possible. */
  762    ACCESS_STREAM_CACHE_POLICY = (1 << 7),
  763 };
  764 
  765 /**
  766  * \brief Blend support qualifiers
  767  */
  768 enum gl_advanced_blend_mode
  769 {
  770    BLEND_NONE           = 0x0000,
  771 
  772    BLEND_MULTIPLY       = 0x0001,
  773    BLEND_SCREEN         = 0x0002,
  774    BLEND_OVERLAY        = 0x0004,
  775    BLEND_DARKEN         = 0x0008,
  776    BLEND_LIGHTEN        = 0x0010,
  777    BLEND_COLORDODGE     = 0x0020,
  778    BLEND_COLORBURN      = 0x0040,
  779    BLEND_HARDLIGHT      = 0x0080,
  780    BLEND_SOFTLIGHT      = 0x0100,
  781    BLEND_DIFFERENCE     = 0x0200,
  782    BLEND_EXCLUSION      = 0x0400,
  783    BLEND_HSL_HUE        = 0x0800,
  784    BLEND_HSL_SATURATION = 0x1000,
  785    BLEND_HSL_COLOR      = 0x2000,
  786    BLEND_HSL_LUMINOSITY = 0x4000,
  787 
  788    BLEND_ALL            = 0x7fff,
  789 };
  790 
  791 enum blend_func
  792 {
  793    BLEND_FUNC_ADD,
  794    BLEND_FUNC_SUBTRACT,
  795    BLEND_FUNC_REVERSE_SUBTRACT,
  796    BLEND_FUNC_MIN,
  797    BLEND_FUNC_MAX,
  798 };
  799 
  800 enum blend_factor
  801 {
  802    BLEND_FACTOR_ZERO,
  803    BLEND_FACTOR_SRC_COLOR,
  804    BLEND_FACTOR_DST_COLOR,
  805    BLEND_FACTOR_SRC_ALPHA,
  806    BLEND_FACTOR_DST_ALPHA,
  807    BLEND_FACTOR_CONSTANT_COLOR,
  808    BLEND_FACTOR_CONSTANT_ALPHA,
  809    BLEND_FACTOR_SRC_ALPHA_SATURATE,
  810 };
  811 
  812 enum gl_tess_spacing
  813 {
  814    TESS_SPACING_UNSPECIFIED,
  815    TESS_SPACING_EQUAL,
  816    TESS_SPACING_FRACTIONAL_ODD,
  817    TESS_SPACING_FRACTIONAL_EVEN,
  818 };
  819 
  820 /**
  821  * A compare function enum for use in compiler lowering passes.  This is in
  822  * the same order as GL's compare functions (shifted down by GL_NEVER), and is
  823  * exactly the same as gallium's PIPE_FUNC_*.
  824  */
  825 enum compare_func
  826 {
  827    COMPARE_FUNC_NEVER,
  828    COMPARE_FUNC_LESS,
  829    COMPARE_FUNC_EQUAL,
  830    COMPARE_FUNC_LEQUAL,
  831    COMPARE_FUNC_GREATER,
  832    COMPARE_FUNC_NOTEQUAL,
  833    COMPARE_FUNC_GEQUAL,
  834    COMPARE_FUNC_ALWAYS,
  835 };
  836 
  837 /**
  838  * Arrangements for grouping invocations from NV_compute_shader_derivatives.
  839  *
  840  *   The extension provides new layout qualifiers that support two different
  841  *   arrangements of compute shader invocations for the purpose of derivative
  842  *   computation.  When specifying
  843  *
  844  *     layout(derivative_group_quadsNV) in;
  845  *
  846  *   compute shader invocations are grouped into 2x2x1 arrays whose four local
  847  *   invocation ID values follow the pattern:
  848  *
  849  *       +-----------------+------------------+
  850  *       | (2x+0, 2y+0, z) |  (2x+1, 2y+0, z) |
  851  *       +-----------------+------------------+
  852  *       | (2x+0, 2y+1, z) |  (2x+1, 2y+1, z) |
  853  *       +-----------------+------------------+
  854  *
  855  *   where Y increases from bottom to top.  When specifying
  856  *
  857  *     layout(derivative_group_linearNV) in;
  858  *
  859  *   compute shader invocations are grouped into 2x2x1 arrays whose four local
  860  *   invocation index values follow the pattern:
  861  *
  862  *       +------+------+
  863  *       | 4n+0 | 4n+1 |
  864  *       +------+------+
  865  *       | 4n+2 | 4n+3 |
  866  *       +------+------+
  867  *
  868  *   If neither layout qualifier is specified, derivatives in compute shaders
  869  *   return zero, which is consistent with the handling of built-in texture
  870  *   functions like texture() in GLSL 4.50 compute shaders.
  871  */
  872 enum gl_derivative_group {
  873    DERIVATIVE_GROUP_NONE = 0,
  874    DERIVATIVE_GROUP_QUADS,
  875    DERIVATIVE_GROUP_LINEAR,
  876 };
  877 
  878 enum float_controls
  879 {
  880    FLOAT_CONTROLS_DEFAULT_FLOAT_CONTROL_MODE        = 0x0000,
  881    FLOAT_CONTROLS_DENORM_PRESERVE_FP16              = 0x0001,
  882    FLOAT_CONTROLS_DENORM_PRESERVE_FP32              = 0x0002,
  883    FLOAT_CONTROLS_DENORM_PRESERVE_FP64              = 0x0004,
  884    FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP16         = 0x0008,
  885    FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP32         = 0x0010,
  886    FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP64         = 0x0020,
  887    FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP16 = 0x0040,
  888    FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP32 = 0x0080,
  889    FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP64 = 0x0100,
  890    FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP16            = 0x0200,
  891    FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP32            = 0x0400,
  892    FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP64            = 0x0800,
  893    FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP16            = 0x1000,
  894    FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP32            = 0x2000,
  895    FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP64            = 0x4000,
  896 };
  897 
  898 #ifdef __cplusplus
  899 } /* extern "C" */
  900 #endif
  901 
  902 #endif /* SHADER_ENUMS_H */