X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fshader_enums.h;h=0f402f427413e0e50b8dfd53328f3be5bec94b56;hb=272f9cfe6a19212354c89dc443959473ac5d398e;hp=fb78ad384cbc790da1123b951445919d22bc6721;hpb=186f03cfb021223f0a6f238da036517fbf240d26;p=mesa.git diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h index fb78ad384cb..0f402f42741 100644 --- a/src/compiler/shader_enums.h +++ b/src/compiler/shader_enums.h @@ -26,6 +26,9 @@ #ifndef SHADER_ENUMS_H #define SHADER_ENUMS_H +#include +#include "mesa/main/config.h" + #ifdef __cplusplus extern "C" { #endif @@ -46,8 +49,24 @@ typedef enum MESA_SHADER_GEOMETRY = 3, MESA_SHADER_FRAGMENT = 4, MESA_SHADER_COMPUTE = 5, + /* must be last so it doesn't affect the GL pipeline */ + MESA_SHADER_KERNEL = 6, } gl_shader_stage; +static inline bool +gl_shader_stage_is_compute(gl_shader_stage stage) +{ + return stage == MESA_SHADER_COMPUTE || stage == MESA_SHADER_KERNEL; +} + +/** + * 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); /** @@ -62,8 +81,16 @@ const char *_mesa_shader_stage_to_string(unsigned stage); */ const char *_mesa_shader_stage_to_abbrev(unsigned stage); +/** + * GL related stages (not including CL) + */ #define MESA_SHADER_STAGES (MESA_SHADER_COMPUTE + 1) +/** + * All stages + */ +#define MESA_ALL_SHADER_STAGES (MESA_SHADER_KERNEL + 1) + /** * Indexes for vertex program attributes. @@ -389,6 +416,14 @@ typedef enum SYSTEM_VALUE_SUBGROUP_LT_MASK, /*@}*/ + /** + * Builtin variables added by VK_KHR_subgroups + */ + /*@{*/ + SYSTEM_VALUE_NUM_SUBGROUPS, + SYSTEM_VALUE_SUBGROUP_ID, + /*@}*/ + /*@}*/ /** @@ -487,6 +522,27 @@ typedef enum */ SYSTEM_VALUE_BASE_VERTEX, + /** + * Depending on the type of the draw call (indexed or non-indexed), + * is the value of \c basevertex passed to \c glDrawElementsBaseVertex and + * similar, or is the value of \c first passed to \c glDrawArrays and + * similar. + * + * \note + * It can be used to calculate the \c SYSTEM_VALUE_VERTEX_ID as + * \c SYSTEM_VALUE_VERTEX_ID_ZERO_BASE plus \c SYSTEM_VALUE_FIRST_VERTEX. + * + * \sa SYSTEM_VALUE_VERTEX_ID_ZERO_BASE, SYSTEM_VALUE_VERTEX_ID + */ + SYSTEM_VALUE_FIRST_VERTEX, + + /** + * If the Draw command used to start the rendering was an indexed draw + * or not (~0/0). Useful to calculate \c SYSTEM_VALUE_BASE_VERTEX as + * \c SYSTEM_VALUE_IS_INDEXED_DRAW & \c SYSTEM_VALUE_FIRST_VERTEX. + */ + SYSTEM_VALUE_IS_INDEXED_DRAW, + /** * Value of \c baseinstance passed to instanced draw entry points * @@ -520,11 +576,14 @@ typedef enum */ /*@{*/ SYSTEM_VALUE_FRAG_COORD, + SYSTEM_VALUE_POINT_COORD, SYSTEM_VALUE_FRONT_FACE, SYSTEM_VALUE_SAMPLE_ID, SYSTEM_VALUE_SAMPLE_POS, SYSTEM_VALUE_SAMPLE_MASK_IN, SYSTEM_VALUE_HELPER_INVOCATION, + SYSTEM_VALUE_COLOR0, + SYSTEM_VALUE_COLOR1, /*@}*/ /** @@ -536,6 +595,8 @@ typedef enum SYSTEM_VALUE_PRIMITIVE_ID, SYSTEM_VALUE_TESS_LEVEL_OUTER, /**< TES input */ SYSTEM_VALUE_TESS_LEVEL_INNER, /**< TES input */ + SYSTEM_VALUE_TESS_LEVEL_OUTER_DEFAULT, /**< TCS input for passthru TCS */ + SYSTEM_VALUE_TESS_LEVEL_INNER_DEFAULT, /**< TCS input for passthru TCS */ /*@}*/ /** @@ -545,11 +606,18 @@ typedef enum SYSTEM_VALUE_LOCAL_INVOCATION_ID, SYSTEM_VALUE_LOCAL_INVOCATION_INDEX, SYSTEM_VALUE_GLOBAL_INVOCATION_ID, + SYSTEM_VALUE_GLOBAL_INVOCATION_INDEX, SYSTEM_VALUE_WORK_GROUP_ID, SYSTEM_VALUE_NUM_WORK_GROUPS, SYSTEM_VALUE_LOCAL_GROUP_SIZE, + SYSTEM_VALUE_GLOBAL_GROUP_SIZE, + SYSTEM_VALUE_WORK_DIM, + SYSTEM_VALUE_USER_DATA_AMD, /*@}*/ + /** Required for VK_KHR_device_group */ + SYSTEM_VALUE_DEVICE_INDEX, + /** Required for VK_KHX_multiview */ SYSTEM_VALUE_VIEW_INDEX, @@ -559,6 +627,18 @@ typedef enum */ SYSTEM_VALUE_VERTEX_CNT, + /** + * Driver internal varying-coords, used for varying-fetch instructions. + * Not externally visible. + * + * The _SIZE value is "primitive size", used to scale i/j in primitive + * space to pixel space. + */ + SYSTEM_VALUE_BARYCENTRIC_PIXEL, + SYSTEM_VALUE_BARYCENTRIC_SAMPLE, + SYSTEM_VALUE_BARYCENTRIC_CENTROID, + SYSTEM_VALUE_BARYCENTRIC_SIZE, + SYSTEM_VALUE_MAX /**< Number of values */ } gl_system_value; @@ -642,11 +722,27 @@ enum gl_frag_depth_layout /** * \brief Buffer access qualifiers */ -enum gl_buffer_access_qualifier +enum gl_access_qualifier { - ACCESS_COHERENT = 1, - ACCESS_RESTRICT = 2, - ACCESS_VOLATILE = 4, + ACCESS_COHERENT = (1 << 0), + ACCESS_RESTRICT = (1 << 1), + ACCESS_VOLATILE = (1 << 2), + ACCESS_NON_READABLE = (1 << 3), + ACCESS_NON_WRITEABLE = (1 << 4), + + /** The access may use a non-uniform buffer or image index */ + ACCESS_NON_UNIFORM = (1 << 5), + + /* This has the same semantics as NIR_INTRINSIC_CAN_REORDER, only to be + * used with loads. In other words, it means that the load can be + * arbitrarily reordered, or combined with other loads to the same address. + * It is implied by ACCESS_NON_WRITEABLE together with ACCESS_RESTRICT, and + * a lack of ACCESS_COHERENT and ACCESS_VOLATILE. + */ + ACCESS_CAN_REORDER = (1 << 6), + + /** Use as little cache space as possible. */ + ACCESS_STREAM_CACHE_POLICY = (1 << 7), }; /** @@ -675,6 +771,27 @@ enum gl_advanced_blend_mode BLEND_ALL = 0x7fff, }; +enum blend_func +{ + BLEND_FUNC_ADD, + BLEND_FUNC_SUBTRACT, + BLEND_FUNC_REVERSE_SUBTRACT, + BLEND_FUNC_MIN, + BLEND_FUNC_MAX, +}; + +enum blend_factor +{ + BLEND_FACTOR_ZERO, + BLEND_FACTOR_SRC_COLOR, + BLEND_FACTOR_DST_COLOR, + BLEND_FACTOR_SRC_ALPHA, + BLEND_FACTOR_DST_ALPHA, + BLEND_FACTOR_CONSTANT_COLOR, + BLEND_FACTOR_CONSTANT_ALPHA, + BLEND_FACTOR_SRC_ALPHA_SATURATE, +}; + enum gl_tess_spacing { TESS_SPACING_UNSPECIFIED, @@ -700,6 +817,47 @@ enum compare_func COMPARE_FUNC_ALWAYS, }; +/** + * Arrangements for grouping invocations from NV_compute_shader_derivatives. + * + * The extension provides new layout qualifiers that support two different + * arrangements of compute shader invocations for the purpose of derivative + * computation. When specifying + * + * layout(derivative_group_quadsNV) in; + * + * compute shader invocations are grouped into 2x2x1 arrays whose four local + * invocation ID values follow the pattern: + * + * +-----------------+------------------+ + * | (2x+0, 2y+0, z) | (2x+1, 2y+0, z) | + * +-----------------+------------------+ + * | (2x+0, 2y+1, z) | (2x+1, 2y+1, z) | + * +-----------------+------------------+ + * + * where Y increases from bottom to top. When specifying + * + * layout(derivative_group_linearNV) in; + * + * compute shader invocations are grouped into 2x2x1 arrays whose four local + * invocation index values follow the pattern: + * + * +------+------+ + * | 4n+0 | 4n+1 | + * +------+------+ + * | 4n+2 | 4n+3 | + * +------+------+ + * + * If neither layout qualifier is specified, derivatives in compute shaders + * return zero, which is consistent with the handling of built-in texture + * functions like texture() in GLSL 4.50 compute shaders. + */ +enum gl_derivative_group { + DERIVATIVE_GROUP_NONE = 0, + DERIVATIVE_GROUP_QUADS, + DERIVATIVE_GROUP_LINEAR, +}; + #ifdef __cplusplus } /* extern "C" */ #endif