Path: blob/21.2-virgl/src/compiler/shader_enums.c
4545 views
/*1* Mesa 3-D graphics library2*3* Copyright © 2015 Red Hat4*5* Permission is hereby granted, free of charge, to any person obtaining a6* copy of this software and associated documentation files (the "Software"),7* to deal in the Software without restriction, including without limitation8* the rights to use, copy, modify, merge, publish, distribute, sublicense,9* and/or sell copies of the Software, and to permit persons to whom the10* Software is furnished to do so, subject to the following conditions:11*12* The above copyright notice and this permission notice (including the next13* paragraph) shall be included in all copies or substantial portions of the14* Software.15*16* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR17* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,18* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL19* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER20* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING21* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS22* IN THE SOFTWARE.23*24* Authors:25* Rob Clark <[email protected]>26*/2728#include "shader_enums.h"29#include "util/macros.h"30#include "mesa/main/config.h"3132#define ENUM(x) [x] = #x33#define NAME(val) ((((val) < ARRAY_SIZE(names)) && names[(val)]) ? names[(val)] : "UNKNOWN")3435const char *36gl_shader_stage_name(gl_shader_stage stage)37{38static const char *names[] = {39ENUM(MESA_SHADER_VERTEX),40ENUM(MESA_SHADER_TESS_CTRL),41ENUM(MESA_SHADER_TESS_EVAL),42ENUM(MESA_SHADER_GEOMETRY),43ENUM(MESA_SHADER_FRAGMENT),44ENUM(MESA_SHADER_COMPUTE),45ENUM(MESA_SHADER_TASK),46ENUM(MESA_SHADER_MESH),47ENUM(MESA_SHADER_RAYGEN),48ENUM(MESA_SHADER_ANY_HIT),49ENUM(MESA_SHADER_CLOSEST_HIT),50ENUM(MESA_SHADER_MISS),51ENUM(MESA_SHADER_INTERSECTION),52ENUM(MESA_SHADER_CALLABLE),53ENUM(MESA_SHADER_KERNEL),54};55STATIC_ASSERT(ARRAY_SIZE(names) == MESA_ALL_SHADER_STAGES);56return NAME(stage);57}5859/**60* Translate a gl_shader_stage to a short shader stage name for debug61* printouts and error messages.62*/63const char *64_mesa_shader_stage_to_string(unsigned stage)65{66switch (stage) {67case MESA_SHADER_VERTEX: return "vertex";68case MESA_SHADER_FRAGMENT: return "fragment";69case MESA_SHADER_GEOMETRY: return "geometry";70case MESA_SHADER_COMPUTE: return "compute";71case MESA_SHADER_KERNEL: return "kernel";72case MESA_SHADER_TESS_CTRL: return "tessellation control";73case MESA_SHADER_TESS_EVAL: return "tessellation evaluation";74case MESA_SHADER_TASK: return "task";75case MESA_SHADER_MESH: return "mesh";76case MESA_SHADER_RAYGEN: return "raygen";77case MESA_SHADER_ANY_HIT: return "any hit";78case MESA_SHADER_CLOSEST_HIT: return "closest hit";79case MESA_SHADER_MISS: return "miss";80case MESA_SHADER_INTERSECTION: return "intersection";81case MESA_SHADER_CALLABLE: return "callable";82}8384unreachable("Unknown shader stage.");85}8687/**88* Translate a gl_shader_stage to a shader stage abbreviation (VS, GS, FS)89* for debug printouts and error messages.90*/91const char *92_mesa_shader_stage_to_abbrev(unsigned stage)93{94switch (stage) {95case MESA_SHADER_VERTEX: return "VS";96case MESA_SHADER_FRAGMENT: return "FS";97case MESA_SHADER_GEOMETRY: return "GS";98case MESA_SHADER_COMPUTE: return "CS";99case MESA_SHADER_KERNEL: return "CL";100case MESA_SHADER_TESS_CTRL: return "TCS";101case MESA_SHADER_TESS_EVAL: return "TES";102case MESA_SHADER_TASK: return "TASK";103case MESA_SHADER_MESH: return "MESH";104case MESA_SHADER_RAYGEN: return "RGEN";105case MESA_SHADER_ANY_HIT: return "RAHIT";106case MESA_SHADER_CLOSEST_HIT: return "RCHIT";107case MESA_SHADER_MISS: return "RMISS";108case MESA_SHADER_INTERSECTION: return "RINT";109case MESA_SHADER_CALLABLE: return "RCALL";110}111112unreachable("Unknown shader stage.");113}114115const char *116gl_vert_attrib_name(gl_vert_attrib attrib)117{118static const char *names[] = {119ENUM(VERT_ATTRIB_POS),120ENUM(VERT_ATTRIB_NORMAL),121ENUM(VERT_ATTRIB_COLOR0),122ENUM(VERT_ATTRIB_COLOR1),123ENUM(VERT_ATTRIB_FOG),124ENUM(VERT_ATTRIB_COLOR_INDEX),125ENUM(VERT_ATTRIB_EDGEFLAG),126ENUM(VERT_ATTRIB_TEX0),127ENUM(VERT_ATTRIB_TEX1),128ENUM(VERT_ATTRIB_TEX2),129ENUM(VERT_ATTRIB_TEX3),130ENUM(VERT_ATTRIB_TEX4),131ENUM(VERT_ATTRIB_TEX5),132ENUM(VERT_ATTRIB_TEX6),133ENUM(VERT_ATTRIB_TEX7),134ENUM(VERT_ATTRIB_POINT_SIZE),135ENUM(VERT_ATTRIB_GENERIC0),136ENUM(VERT_ATTRIB_GENERIC1),137ENUM(VERT_ATTRIB_GENERIC2),138ENUM(VERT_ATTRIB_GENERIC3),139ENUM(VERT_ATTRIB_GENERIC4),140ENUM(VERT_ATTRIB_GENERIC5),141ENUM(VERT_ATTRIB_GENERIC6),142ENUM(VERT_ATTRIB_GENERIC7),143ENUM(VERT_ATTRIB_GENERIC8),144ENUM(VERT_ATTRIB_GENERIC9),145ENUM(VERT_ATTRIB_GENERIC10),146ENUM(VERT_ATTRIB_GENERIC11),147ENUM(VERT_ATTRIB_GENERIC12),148ENUM(VERT_ATTRIB_GENERIC13),149ENUM(VERT_ATTRIB_GENERIC14),150ENUM(VERT_ATTRIB_GENERIC15),151};152STATIC_ASSERT(ARRAY_SIZE(names) == VERT_ATTRIB_MAX);153return NAME(attrib);154}155156const char *157gl_varying_slot_name_for_stage(gl_varying_slot slot, gl_shader_stage stage)158{159if (stage != MESA_SHADER_FRAGMENT && slot == VARYING_SLOT_PRIMITIVE_SHADING_RATE)160return "VARYING_SLOT_PRIMITIVE_SHADING_RATE";161162static const char *names[] = {163ENUM(VARYING_SLOT_POS),164ENUM(VARYING_SLOT_COL0),165ENUM(VARYING_SLOT_COL1),166ENUM(VARYING_SLOT_FOGC),167ENUM(VARYING_SLOT_TEX0),168ENUM(VARYING_SLOT_TEX1),169ENUM(VARYING_SLOT_TEX2),170ENUM(VARYING_SLOT_TEX3),171ENUM(VARYING_SLOT_TEX4),172ENUM(VARYING_SLOT_TEX5),173ENUM(VARYING_SLOT_TEX6),174ENUM(VARYING_SLOT_TEX7),175ENUM(VARYING_SLOT_PSIZ),176ENUM(VARYING_SLOT_BFC0),177ENUM(VARYING_SLOT_BFC1),178ENUM(VARYING_SLOT_EDGE),179ENUM(VARYING_SLOT_CLIP_VERTEX),180ENUM(VARYING_SLOT_CLIP_DIST0),181ENUM(VARYING_SLOT_CLIP_DIST1),182ENUM(VARYING_SLOT_CULL_DIST0),183ENUM(VARYING_SLOT_CULL_DIST1),184ENUM(VARYING_SLOT_PRIMITIVE_ID),185ENUM(VARYING_SLOT_LAYER),186ENUM(VARYING_SLOT_VIEWPORT),187ENUM(VARYING_SLOT_FACE),188ENUM(VARYING_SLOT_PNTC),189ENUM(VARYING_SLOT_TESS_LEVEL_OUTER),190ENUM(VARYING_SLOT_TESS_LEVEL_INNER),191ENUM(VARYING_SLOT_BOUNDING_BOX0),192ENUM(VARYING_SLOT_BOUNDING_BOX1),193ENUM(VARYING_SLOT_VIEW_INDEX),194ENUM(VARYING_SLOT_VIEWPORT_MASK),195ENUM(VARYING_SLOT_VAR0),196ENUM(VARYING_SLOT_VAR1),197ENUM(VARYING_SLOT_VAR2),198ENUM(VARYING_SLOT_VAR3),199ENUM(VARYING_SLOT_VAR4),200ENUM(VARYING_SLOT_VAR5),201ENUM(VARYING_SLOT_VAR6),202ENUM(VARYING_SLOT_VAR7),203ENUM(VARYING_SLOT_VAR8),204ENUM(VARYING_SLOT_VAR9),205ENUM(VARYING_SLOT_VAR10),206ENUM(VARYING_SLOT_VAR11),207ENUM(VARYING_SLOT_VAR12),208ENUM(VARYING_SLOT_VAR13),209ENUM(VARYING_SLOT_VAR14),210ENUM(VARYING_SLOT_VAR15),211ENUM(VARYING_SLOT_VAR16),212ENUM(VARYING_SLOT_VAR17),213ENUM(VARYING_SLOT_VAR18),214ENUM(VARYING_SLOT_VAR19),215ENUM(VARYING_SLOT_VAR20),216ENUM(VARYING_SLOT_VAR21),217ENUM(VARYING_SLOT_VAR22),218ENUM(VARYING_SLOT_VAR23),219ENUM(VARYING_SLOT_VAR24),220ENUM(VARYING_SLOT_VAR25),221ENUM(VARYING_SLOT_VAR26),222ENUM(VARYING_SLOT_VAR27),223ENUM(VARYING_SLOT_VAR28),224ENUM(VARYING_SLOT_VAR29),225ENUM(VARYING_SLOT_VAR30),226ENUM(VARYING_SLOT_VAR31),227};228STATIC_ASSERT(ARRAY_SIZE(names) == VARYING_SLOT_MAX);229return NAME(slot);230}231232const char *233gl_system_value_name(gl_system_value sysval)234{235static const char *names[] = {236ENUM(SYSTEM_VALUE_SUBGROUP_SIZE),237ENUM(SYSTEM_VALUE_SUBGROUP_INVOCATION),238ENUM(SYSTEM_VALUE_SUBGROUP_EQ_MASK),239ENUM(SYSTEM_VALUE_SUBGROUP_GE_MASK),240ENUM(SYSTEM_VALUE_SUBGROUP_GT_MASK),241ENUM(SYSTEM_VALUE_SUBGROUP_LE_MASK),242ENUM(SYSTEM_VALUE_SUBGROUP_LT_MASK),243ENUM(SYSTEM_VALUE_NUM_SUBGROUPS),244ENUM(SYSTEM_VALUE_SUBGROUP_ID),245ENUM(SYSTEM_VALUE_VERTEX_ID),246ENUM(SYSTEM_VALUE_INSTANCE_ID),247ENUM(SYSTEM_VALUE_INSTANCE_INDEX),248ENUM(SYSTEM_VALUE_VERTEX_ID_ZERO_BASE),249ENUM(SYSTEM_VALUE_BASE_VERTEX),250ENUM(SYSTEM_VALUE_FIRST_VERTEX),251ENUM(SYSTEM_VALUE_IS_INDEXED_DRAW),252ENUM(SYSTEM_VALUE_BASE_INSTANCE),253ENUM(SYSTEM_VALUE_DRAW_ID),254ENUM(SYSTEM_VALUE_INVOCATION_ID),255ENUM(SYSTEM_VALUE_FRAG_COORD),256ENUM(SYSTEM_VALUE_POINT_COORD),257ENUM(SYSTEM_VALUE_LINE_COORD),258ENUM(SYSTEM_VALUE_FRONT_FACE),259ENUM(SYSTEM_VALUE_SAMPLE_ID),260ENUM(SYSTEM_VALUE_SAMPLE_POS),261ENUM(SYSTEM_VALUE_SAMPLE_MASK_IN),262ENUM(SYSTEM_VALUE_HELPER_INVOCATION),263ENUM(SYSTEM_VALUE_COLOR0),264ENUM(SYSTEM_VALUE_COLOR1),265ENUM(SYSTEM_VALUE_TESS_COORD),266ENUM(SYSTEM_VALUE_VERTICES_IN),267ENUM(SYSTEM_VALUE_PRIMITIVE_ID),268ENUM(SYSTEM_VALUE_TESS_LEVEL_OUTER),269ENUM(SYSTEM_VALUE_TESS_LEVEL_INNER),270ENUM(SYSTEM_VALUE_TESS_LEVEL_OUTER_DEFAULT),271ENUM(SYSTEM_VALUE_TESS_LEVEL_INNER_DEFAULT),272ENUM(SYSTEM_VALUE_LOCAL_INVOCATION_ID),273ENUM(SYSTEM_VALUE_LOCAL_INVOCATION_INDEX),274ENUM(SYSTEM_VALUE_GLOBAL_INVOCATION_ID),275ENUM(SYSTEM_VALUE_BASE_GLOBAL_INVOCATION_ID),276ENUM(SYSTEM_VALUE_GLOBAL_INVOCATION_INDEX),277ENUM(SYSTEM_VALUE_WORKGROUP_ID),278ENUM(SYSTEM_VALUE_NUM_WORKGROUPS),279ENUM(SYSTEM_VALUE_WORKGROUP_SIZE),280ENUM(SYSTEM_VALUE_GLOBAL_GROUP_SIZE),281ENUM(SYSTEM_VALUE_USER_DATA_AMD),282ENUM(SYSTEM_VALUE_WORK_DIM),283ENUM(SYSTEM_VALUE_DEVICE_INDEX),284ENUM(SYSTEM_VALUE_VIEW_INDEX),285ENUM(SYSTEM_VALUE_VERTEX_CNT),286ENUM(SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL),287ENUM(SYSTEM_VALUE_BARYCENTRIC_PERSP_SAMPLE),288ENUM(SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTROID),289ENUM(SYSTEM_VALUE_BARYCENTRIC_PERSP_SIZE),290ENUM(SYSTEM_VALUE_BARYCENTRIC_LINEAR_PIXEL),291ENUM(SYSTEM_VALUE_BARYCENTRIC_LINEAR_CENTROID),292ENUM(SYSTEM_VALUE_BARYCENTRIC_LINEAR_SAMPLE),293ENUM(SYSTEM_VALUE_BARYCENTRIC_PULL_MODEL),294ENUM(SYSTEM_VALUE_RAY_LAUNCH_ID),295ENUM(SYSTEM_VALUE_RAY_LAUNCH_SIZE),296ENUM(SYSTEM_VALUE_RAY_WORLD_ORIGIN),297ENUM(SYSTEM_VALUE_RAY_WORLD_DIRECTION),298ENUM(SYSTEM_VALUE_RAY_OBJECT_ORIGIN),299ENUM(SYSTEM_VALUE_RAY_OBJECT_DIRECTION),300ENUM(SYSTEM_VALUE_RAY_T_MIN),301ENUM(SYSTEM_VALUE_RAY_T_MAX),302ENUM(SYSTEM_VALUE_RAY_OBJECT_TO_WORLD),303ENUM(SYSTEM_VALUE_RAY_WORLD_TO_OBJECT),304ENUM(SYSTEM_VALUE_RAY_HIT_KIND),305ENUM(SYSTEM_VALUE_RAY_FLAGS),306ENUM(SYSTEM_VALUE_RAY_GEOMETRY_INDEX),307ENUM(SYSTEM_VALUE_GS_HEADER_IR3),308ENUM(SYSTEM_VALUE_TCS_HEADER_IR3),309ENUM(SYSTEM_VALUE_FRAG_SHADING_RATE),310};311STATIC_ASSERT(ARRAY_SIZE(names) == SYSTEM_VALUE_MAX);312return NAME(sysval);313}314315const char *316glsl_interp_mode_name(enum glsl_interp_mode qual)317{318static const char *names[] = {319ENUM(INTERP_MODE_NONE),320ENUM(INTERP_MODE_SMOOTH),321ENUM(INTERP_MODE_FLAT),322ENUM(INTERP_MODE_NOPERSPECTIVE),323ENUM(INTERP_MODE_EXPLICIT),324ENUM(INTERP_MODE_COLOR),325};326STATIC_ASSERT(ARRAY_SIZE(names) == INTERP_MODE_COUNT);327return NAME(qual);328}329330const char *331gl_frag_result_name(gl_frag_result result)332{333static const char *names[] = {334ENUM(FRAG_RESULT_DEPTH),335ENUM(FRAG_RESULT_STENCIL),336ENUM(FRAG_RESULT_COLOR),337ENUM(FRAG_RESULT_SAMPLE_MASK),338ENUM(FRAG_RESULT_DATA0),339ENUM(FRAG_RESULT_DATA1),340ENUM(FRAG_RESULT_DATA2),341ENUM(FRAG_RESULT_DATA3),342ENUM(FRAG_RESULT_DATA4),343ENUM(FRAG_RESULT_DATA5),344ENUM(FRAG_RESULT_DATA6),345ENUM(FRAG_RESULT_DATA7),346};347STATIC_ASSERT(ARRAY_SIZE(names) == FRAG_RESULT_MAX);348return NAME(result);349}350351352