X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fshader_enums.h;h=2aedbb9b3fa4c3f744569fc681d126dfda951771;hb=4925347ec5d469574f1280e972940cfea345ed6e;hp=e128b172c20bc03aee6ccdbbac9c1a4449f703db;hpb=4b6819b407220f5d7d97a40ed9474d7673448370;p=mesa.git diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h index e128b172c20..2aedbb9b3fa 100644 --- a/src/compiler/shader_enums.h +++ b/src/compiler/shader_enums.h @@ -39,6 +39,7 @@ extern "C" { */ typedef enum { + MESA_SHADER_NONE = -1, MESA_SHADER_VERTEX = 0, MESA_SHADER_TESS_CTRL = 1, MESA_SHADER_TESS_EVAL = 2, @@ -47,6 +48,14 @@ typedef enum MESA_SHADER_COMPUTE = 5, } gl_shader_stage; +/** + * Number of STATE_* values we need to address any GL state. + * Used to dimension arrays. + */ +#define STATE_LENGTH 5 + +typedef short gl_state_index16; /* see enum gl_state_index */ + const char *gl_shader_stage_name(gl_shader_stage stage); /** @@ -73,40 +82,39 @@ const char *_mesa_shader_stage_to_abbrev(unsigned stage); */ typedef enum { - VERT_ATTRIB_POS = 0, - VERT_ATTRIB_WEIGHT = 1, - VERT_ATTRIB_NORMAL = 2, - VERT_ATTRIB_COLOR0 = 3, - VERT_ATTRIB_COLOR1 = 4, - VERT_ATTRIB_FOG = 5, - VERT_ATTRIB_COLOR_INDEX = 6, - VERT_ATTRIB_EDGEFLAG = 7, - VERT_ATTRIB_TEX0 = 8, - VERT_ATTRIB_TEX1 = 9, - VERT_ATTRIB_TEX2 = 10, - VERT_ATTRIB_TEX3 = 11, - VERT_ATTRIB_TEX4 = 12, - VERT_ATTRIB_TEX5 = 13, - VERT_ATTRIB_TEX6 = 14, - VERT_ATTRIB_TEX7 = 15, - VERT_ATTRIB_POINT_SIZE = 16, - VERT_ATTRIB_GENERIC0 = 17, - VERT_ATTRIB_GENERIC1 = 18, - VERT_ATTRIB_GENERIC2 = 19, - VERT_ATTRIB_GENERIC3 = 20, - VERT_ATTRIB_GENERIC4 = 21, - VERT_ATTRIB_GENERIC5 = 22, - VERT_ATTRIB_GENERIC6 = 23, - VERT_ATTRIB_GENERIC7 = 24, - VERT_ATTRIB_GENERIC8 = 25, - VERT_ATTRIB_GENERIC9 = 26, - VERT_ATTRIB_GENERIC10 = 27, - VERT_ATTRIB_GENERIC11 = 28, - VERT_ATTRIB_GENERIC12 = 29, - VERT_ATTRIB_GENERIC13 = 30, - VERT_ATTRIB_GENERIC14 = 31, - VERT_ATTRIB_GENERIC15 = 32, - VERT_ATTRIB_MAX = 33 + VERT_ATTRIB_POS, + VERT_ATTRIB_NORMAL, + VERT_ATTRIB_COLOR0, + VERT_ATTRIB_COLOR1, + VERT_ATTRIB_FOG, + VERT_ATTRIB_COLOR_INDEX, + VERT_ATTRIB_EDGEFLAG, + VERT_ATTRIB_TEX0, + VERT_ATTRIB_TEX1, + VERT_ATTRIB_TEX2, + VERT_ATTRIB_TEX3, + VERT_ATTRIB_TEX4, + VERT_ATTRIB_TEX5, + VERT_ATTRIB_TEX6, + VERT_ATTRIB_TEX7, + VERT_ATTRIB_POINT_SIZE, + VERT_ATTRIB_GENERIC0, + VERT_ATTRIB_GENERIC1, + VERT_ATTRIB_GENERIC2, + VERT_ATTRIB_GENERIC3, + VERT_ATTRIB_GENERIC4, + VERT_ATTRIB_GENERIC5, + VERT_ATTRIB_GENERIC6, + VERT_ATTRIB_GENERIC7, + VERT_ATTRIB_GENERIC8, + VERT_ATTRIB_GENERIC9, + VERT_ATTRIB_GENERIC10, + VERT_ATTRIB_GENERIC11, + VERT_ATTRIB_GENERIC12, + VERT_ATTRIB_GENERIC13, + VERT_ATTRIB_GENERIC14, + VERT_ATTRIB_GENERIC15, + VERT_ATTRIB_MAX } gl_vert_attrib; const char *gl_vert_attrib_name(gl_vert_attrib attrib); @@ -124,6 +132,11 @@ const char *gl_vert_attrib_name(gl_vert_attrib attrib); * VERT_ATTRIB_GENERIC * include the OpenGL 2.0+ GLSL generic shader attributes. * These alias the generic GL_ARB_vertex_shader attributes. + * VERT_ATTRIB_MAT + * include the generic shader attributes used to alias + * varying material values for the TNL shader programs. + * They are located at the end of the generic attribute + * block not to overlap with the generic 0 attribute. */ #define VERT_ATTRIB_FF(i) (VERT_ATTRIB_POS + (i)) #define VERT_ATTRIB_FF_MAX VERT_ATTRIB_GENERIC0 @@ -134,44 +147,54 @@ const char *gl_vert_attrib_name(gl_vert_attrib attrib); #define VERT_ATTRIB_GENERIC(i) (VERT_ATTRIB_GENERIC0 + (i)) #define VERT_ATTRIB_GENERIC_MAX MAX_VERTEX_GENERIC_ATTRIBS +#define VERT_ATTRIB_MAT0 \ + (VERT_ATTRIB_GENERIC_MAX - VERT_ATTRIB_MAT_MAX) +#define VERT_ATTRIB_MAT(i) \ + VERT_ATTRIB_GENERIC((i) + VERT_ATTRIB_MAT0) +#define VERT_ATTRIB_MAT_MAX MAT_ATTRIB_MAX + /** * Bitflags for vertex attributes. * These are used in bitfields in many places. */ /*@{*/ -#define VERT_BIT_POS BITFIELD64_BIT(VERT_ATTRIB_POS) -#define VERT_BIT_WEIGHT BITFIELD64_BIT(VERT_ATTRIB_WEIGHT) -#define VERT_BIT_NORMAL BITFIELD64_BIT(VERT_ATTRIB_NORMAL) -#define VERT_BIT_COLOR0 BITFIELD64_BIT(VERT_ATTRIB_COLOR0) -#define VERT_BIT_COLOR1 BITFIELD64_BIT(VERT_ATTRIB_COLOR1) -#define VERT_BIT_FOG BITFIELD64_BIT(VERT_ATTRIB_FOG) -#define VERT_BIT_COLOR_INDEX BITFIELD64_BIT(VERT_ATTRIB_COLOR_INDEX) -#define VERT_BIT_EDGEFLAG BITFIELD64_BIT(VERT_ATTRIB_EDGEFLAG) -#define VERT_BIT_TEX0 BITFIELD64_BIT(VERT_ATTRIB_TEX0) -#define VERT_BIT_TEX1 BITFIELD64_BIT(VERT_ATTRIB_TEX1) -#define VERT_BIT_TEX2 BITFIELD64_BIT(VERT_ATTRIB_TEX2) -#define VERT_BIT_TEX3 BITFIELD64_BIT(VERT_ATTRIB_TEX3) -#define VERT_BIT_TEX4 BITFIELD64_BIT(VERT_ATTRIB_TEX4) -#define VERT_BIT_TEX5 BITFIELD64_BIT(VERT_ATTRIB_TEX5) -#define VERT_BIT_TEX6 BITFIELD64_BIT(VERT_ATTRIB_TEX6) -#define VERT_BIT_TEX7 BITFIELD64_BIT(VERT_ATTRIB_TEX7) -#define VERT_BIT_POINT_SIZE BITFIELD64_BIT(VERT_ATTRIB_POINT_SIZE) -#define VERT_BIT_GENERIC0 BITFIELD64_BIT(VERT_ATTRIB_GENERIC0) - -#define VERT_BIT(i) BITFIELD64_BIT(i) -#define VERT_BIT_ALL BITFIELD64_RANGE(0, VERT_ATTRIB_MAX) +#define VERT_BIT_POS BITFIELD_BIT(VERT_ATTRIB_POS) +#define VERT_BIT_NORMAL BITFIELD_BIT(VERT_ATTRIB_NORMAL) +#define VERT_BIT_COLOR0 BITFIELD_BIT(VERT_ATTRIB_COLOR0) +#define VERT_BIT_COLOR1 BITFIELD_BIT(VERT_ATTRIB_COLOR1) +#define VERT_BIT_FOG BITFIELD_BIT(VERT_ATTRIB_FOG) +#define VERT_BIT_COLOR_INDEX BITFIELD_BIT(VERT_ATTRIB_COLOR_INDEX) +#define VERT_BIT_EDGEFLAG BITFIELD_BIT(VERT_ATTRIB_EDGEFLAG) +#define VERT_BIT_TEX0 BITFIELD_BIT(VERT_ATTRIB_TEX0) +#define VERT_BIT_TEX1 BITFIELD_BIT(VERT_ATTRIB_TEX1) +#define VERT_BIT_TEX2 BITFIELD_BIT(VERT_ATTRIB_TEX2) +#define VERT_BIT_TEX3 BITFIELD_BIT(VERT_ATTRIB_TEX3) +#define VERT_BIT_TEX4 BITFIELD_BIT(VERT_ATTRIB_TEX4) +#define VERT_BIT_TEX5 BITFIELD_BIT(VERT_ATTRIB_TEX5) +#define VERT_BIT_TEX6 BITFIELD_BIT(VERT_ATTRIB_TEX6) +#define VERT_BIT_TEX7 BITFIELD_BIT(VERT_ATTRIB_TEX7) +#define VERT_BIT_POINT_SIZE BITFIELD_BIT(VERT_ATTRIB_POINT_SIZE) +#define VERT_BIT_GENERIC0 BITFIELD_BIT(VERT_ATTRIB_GENERIC0) + +#define VERT_BIT(i) BITFIELD_BIT(i) +#define VERT_BIT_ALL BITFIELD_RANGE(0, VERT_ATTRIB_MAX) #define VERT_BIT_FF(i) VERT_BIT(i) -#define VERT_BIT_FF_ALL BITFIELD64_RANGE(0, VERT_ATTRIB_FF_MAX) +#define VERT_BIT_FF_ALL BITFIELD_RANGE(0, VERT_ATTRIB_FF_MAX) #define VERT_BIT_TEX(i) VERT_BIT(VERT_ATTRIB_TEX(i)) #define VERT_BIT_TEX_ALL \ - BITFIELD64_RANGE(VERT_ATTRIB_TEX(0), VERT_ATTRIB_TEX_MAX) + BITFIELD_RANGE(VERT_ATTRIB_TEX(0), VERT_ATTRIB_TEX_MAX) #define VERT_BIT_GENERIC(i) VERT_BIT(VERT_ATTRIB_GENERIC(i)) #define VERT_BIT_GENERIC_ALL \ - BITFIELD64_RANGE(VERT_ATTRIB_GENERIC(0), VERT_ATTRIB_GENERIC_MAX) + BITFIELD_RANGE(VERT_ATTRIB_GENERIC(0), VERT_ATTRIB_GENERIC_MAX) + +#define VERT_BIT_MAT(i) VERT_BIT(VERT_ATTRIB_MAT(i)) +#define VERT_BIT_MAT_ALL \ + BITFIELD_RANGE(VERT_ATTRIB_MAT(0), VERT_ATTRIB_MAT_MAX) /*@}*/ +#define MAX_VARYING 32 /**< number of float[4] vectors */ /** * Indexes for vertex shader outputs, geometry shader inputs/outputs, and @@ -214,6 +237,9 @@ typedef enum VARYING_SLOT_PNTC, /* FS only */ VARYING_SLOT_TESS_LEVEL_OUTER, /* Only appears as TCS output. */ VARYING_SLOT_TESS_LEVEL_INNER, /* Only appears as TCS output. */ + VARYING_SLOT_BOUNDING_BOX0, /* Only appears as TCS output. */ + VARYING_SLOT_BOUNDING_BOX1, /* Only appears as TCS output. */ + VARYING_SLOT_VIEW_INDEX, VARYING_SLOT_VAR0, /* First generic varying slot */ /* the remaining are simply for the benefit of gl_varying_slot_name() * and not to be construed as an upper bound: @@ -294,6 +320,8 @@ const char *gl_varying_slot_name(gl_varying_slot slot); #define VARYING_BIT_PNTC BITFIELD64_BIT(VARYING_SLOT_PNTC) #define VARYING_BIT_TESS_LEVEL_OUTER BITFIELD64_BIT(VARYING_SLOT_TESS_LEVEL_OUTER) #define VARYING_BIT_TESS_LEVEL_INNER BITFIELD64_BIT(VARYING_SLOT_TESS_LEVEL_INNER) +#define VARYING_BIT_BOUNDING_BOX0 BITFIELD64_BIT(VARYING_SLOT_BOUNDING_BOX0) +#define VARYING_BIT_BOUNDING_BOX1 BITFIELD64_BIT(VARYING_SLOT_BOUNDING_BOX1) #define VARYING_BIT_VAR(V) BITFIELD64_BIT(VARYING_SLOT_VAR0 + (V)) /*@}*/ @@ -312,6 +340,73 @@ const char *gl_varying_slot_name(gl_varying_slot slot); */ typedef enum { + /** + * \name System values applicable to all shaders + */ + /*@{*/ + + /** + * Builtin variables added by GL_ARB_shader_ballot. + */ + /*@{*/ + + /** + * From the GL_ARB_shader-ballot spec: + * + * "A sub-group is a collection of invocations which execute in lockstep. + * The variable is the maximum number of + * invocations in a sub-group. The maximum + * supported in this extension is 64." + * + * The spec defines this as a uniform. However, it's highly unlikely that + * implementations actually treat it as a uniform (which is loaded from a + * constant buffer). Most likely, this is an implementation-wide constant, + * or perhaps something that depends on the shader stage. + */ + SYSTEM_VALUE_SUBGROUP_SIZE, + + /** + * From the GL_ARB_shader_ballot spec: + * + * "The variable holds the index of the + * invocation within sub-group. This variable is in the range 0 to + * -1, where is the total + * number of invocations in a sub-group." + */ + SYSTEM_VALUE_SUBGROUP_INVOCATION, + + /** + * From the GL_ARB_shader_ballot spec: + * + * "The variables provide a bitmask for all + * invocations, with one bit per invocation starting with the least + * significant bit, according to the following table, + * + * variable equation for bit values + * -------------------- ------------------------------------ + * gl_SubGroupEqMaskARB bit index == gl_SubGroupInvocationARB + * gl_SubGroupGeMaskARB bit index >= gl_SubGroupInvocationARB + * gl_SubGroupGtMaskARB bit index > gl_SubGroupInvocationARB + * gl_SubGroupLeMaskARB bit index <= gl_SubGroupInvocationARB + * gl_SubGroupLtMaskARB bit index < gl_SubGroupInvocationARB + */ + SYSTEM_VALUE_SUBGROUP_EQ_MASK, + SYSTEM_VALUE_SUBGROUP_GE_MASK, + SYSTEM_VALUE_SUBGROUP_GT_MASK, + SYSTEM_VALUE_SUBGROUP_LE_MASK, + SYSTEM_VALUE_SUBGROUP_LT_MASK, + /*@}*/ + + /** + * Builtin variables added by VK_KHR_subgroups + */ + /*@{*/ + SYSTEM_VALUE_NUM_SUBGROUPS, + SYSTEM_VALUE_SUBGROUP_ID, + /*@}*/ + + /*@}*/ + /** * \name Vertex shader system values */ @@ -468,8 +563,15 @@ typedef enum SYSTEM_VALUE_GLOBAL_INVOCATION_ID, SYSTEM_VALUE_WORK_GROUP_ID, SYSTEM_VALUE_NUM_WORK_GROUPS, + SYSTEM_VALUE_LOCAL_GROUP_SIZE, /*@}*/ + /** Required for VK_KHR_device_group */ + SYSTEM_VALUE_DEVICE_INDEX, + + /** Required for VK_KHX_multiview */ + SYSTEM_VALUE_VIEW_INDEX, + /** * Driver internal vertex-count, used (for example) for drivers to * calculate stride for stream-out outputs. Not externally visible. @@ -486,7 +588,7 @@ const char *gl_system_value_name(gl_system_value sysval); * shader input in GLSL. * * Note: INTERP_MODE_NONE must be 0 so that memsetting the - * gl_fragment_program data structure to 0 causes the default behavior. + * ir_variable data structure to 0 causes the default behavior. */ enum glsl_interp_mode { @@ -497,6 +599,13 @@ enum glsl_interp_mode INTERP_MODE_COUNT /**< Number of interpolation qualifiers */ }; +enum glsl_interface_packing { + GLSL_INTERFACE_PACKING_STD140, + GLSL_INTERFACE_PACKING_SHARED, + GLSL_INTERFACE_PACKING_PACKED, + GLSL_INTERFACE_PACKING_STD430 +}; + const char *glsl_interp_mode_name(enum glsl_interp_mode qual); /** @@ -585,6 +694,31 @@ enum gl_advanced_blend_mode BLEND_ALL = 0x7fff, }; +enum gl_tess_spacing +{ + TESS_SPACING_UNSPECIFIED, + TESS_SPACING_EQUAL, + TESS_SPACING_FRACTIONAL_ODD, + TESS_SPACING_FRACTIONAL_EVEN, +}; + +/** + * A compare function enum for use in compiler lowering passes. This is in + * the same order as GL's compare functions (shifted down by GL_NEVER), and is + * exactly the same as gallium's PIPE_FUNC_*. + */ +enum compare_func +{ + COMPARE_FUNC_NEVER, + COMPARE_FUNC_LESS, + COMPARE_FUNC_EQUAL, + COMPARE_FUNC_LEQUAL, + COMPARE_FUNC_GREATER, + COMPARE_FUNC_NOTEQUAL, + COMPARE_FUNC_GEQUAL, + COMPARE_FUNC_ALWAYS, +}; + #ifdef __cplusplus } /* extern "C" */ #endif