shader_enums.c revision ed98bd31
101e04c3fSmrg/* 201e04c3fSmrg * Mesa 3-D graphics library 301e04c3fSmrg * 401e04c3fSmrg * Copyright © 2015 Red Hat 501e04c3fSmrg * 601e04c3fSmrg * Permission is hereby granted, free of charge, to any person obtaining a 701e04c3fSmrg * copy of this software and associated documentation files (the "Software"), 801e04c3fSmrg * to deal in the Software without restriction, including without limitation 901e04c3fSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 1001e04c3fSmrg * and/or sell copies of the Software, and to permit persons to whom the 1101e04c3fSmrg * Software is furnished to do so, subject to the following conditions: 1201e04c3fSmrg * 1301e04c3fSmrg * The above copyright notice and this permission notice (including the next 1401e04c3fSmrg * paragraph) shall be included in all copies or substantial portions of the 1501e04c3fSmrg * Software. 1601e04c3fSmrg * 1701e04c3fSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1801e04c3fSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1901e04c3fSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 2001e04c3fSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 2101e04c3fSmrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2201e04c3fSmrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 2301e04c3fSmrg * IN THE SOFTWARE. 2401e04c3fSmrg * 2501e04c3fSmrg * Authors: 2601e04c3fSmrg * Rob Clark <robclark@freedesktop.org> 2701e04c3fSmrg */ 2801e04c3fSmrg 2901e04c3fSmrg#include "shader_enums.h" 3001e04c3fSmrg#include "util/macros.h" 3101e04c3fSmrg#include "mesa/main/config.h" 3201e04c3fSmrg 3301e04c3fSmrg#define ENUM(x) [x] = #x 3401e04c3fSmrg#define NAME(val) ((((val) < ARRAY_SIZE(names)) && names[(val)]) ? names[(val)] : "UNKNOWN") 3501e04c3fSmrg 3601e04c3fSmrgconst char * 3701e04c3fSmrggl_shader_stage_name(gl_shader_stage stage) 3801e04c3fSmrg{ 3901e04c3fSmrg static const char *names[] = { 4001e04c3fSmrg ENUM(MESA_SHADER_VERTEX), 4101e04c3fSmrg ENUM(MESA_SHADER_TESS_CTRL), 4201e04c3fSmrg ENUM(MESA_SHADER_TESS_EVAL), 4301e04c3fSmrg ENUM(MESA_SHADER_GEOMETRY), 4401e04c3fSmrg ENUM(MESA_SHADER_FRAGMENT), 4501e04c3fSmrg ENUM(MESA_SHADER_COMPUTE), 46ed98bd31Smaya ENUM(MESA_SHADER_KERNEL), 4701e04c3fSmrg }; 48ed98bd31Smaya STATIC_ASSERT(ARRAY_SIZE(names) == MESA_ALL_SHADER_STAGES); 4901e04c3fSmrg return NAME(stage); 5001e04c3fSmrg} 5101e04c3fSmrg 5201e04c3fSmrg/** 5301e04c3fSmrg * Translate a gl_shader_stage to a short shader stage name for debug 5401e04c3fSmrg * printouts and error messages. 5501e04c3fSmrg */ 5601e04c3fSmrgconst char * 5701e04c3fSmrg_mesa_shader_stage_to_string(unsigned stage) 5801e04c3fSmrg{ 5901e04c3fSmrg switch (stage) { 6001e04c3fSmrg case MESA_SHADER_VERTEX: return "vertex"; 6101e04c3fSmrg case MESA_SHADER_FRAGMENT: return "fragment"; 6201e04c3fSmrg case MESA_SHADER_GEOMETRY: return "geometry"; 6301e04c3fSmrg case MESA_SHADER_COMPUTE: return "compute"; 64ed98bd31Smaya case MESA_SHADER_KERNEL: return "kernel"; 6501e04c3fSmrg case MESA_SHADER_TESS_CTRL: return "tessellation control"; 6601e04c3fSmrg case MESA_SHADER_TESS_EVAL: return "tessellation evaluation"; 6701e04c3fSmrg } 6801e04c3fSmrg 6901e04c3fSmrg unreachable("Unknown shader stage."); 7001e04c3fSmrg} 7101e04c3fSmrg 7201e04c3fSmrg/** 7301e04c3fSmrg * Translate a gl_shader_stage to a shader stage abbreviation (VS, GS, FS) 7401e04c3fSmrg * for debug printouts and error messages. 7501e04c3fSmrg */ 7601e04c3fSmrgconst char * 7701e04c3fSmrg_mesa_shader_stage_to_abbrev(unsigned stage) 7801e04c3fSmrg{ 7901e04c3fSmrg switch (stage) { 8001e04c3fSmrg case MESA_SHADER_VERTEX: return "VS"; 8101e04c3fSmrg case MESA_SHADER_FRAGMENT: return "FS"; 8201e04c3fSmrg case MESA_SHADER_GEOMETRY: return "GS"; 8301e04c3fSmrg case MESA_SHADER_COMPUTE: return "CS"; 84ed98bd31Smaya case MESA_SHADER_KERNEL: return "CL"; 8501e04c3fSmrg case MESA_SHADER_TESS_CTRL: return "TCS"; 8601e04c3fSmrg case MESA_SHADER_TESS_EVAL: return "TES"; 8701e04c3fSmrg } 8801e04c3fSmrg 8901e04c3fSmrg unreachable("Unknown shader stage."); 9001e04c3fSmrg} 9101e04c3fSmrg 9201e04c3fSmrgconst char * 9301e04c3fSmrggl_vert_attrib_name(gl_vert_attrib attrib) 9401e04c3fSmrg{ 9501e04c3fSmrg static const char *names[] = { 9601e04c3fSmrg ENUM(VERT_ATTRIB_POS), 9701e04c3fSmrg ENUM(VERT_ATTRIB_NORMAL), 9801e04c3fSmrg ENUM(VERT_ATTRIB_COLOR0), 9901e04c3fSmrg ENUM(VERT_ATTRIB_COLOR1), 10001e04c3fSmrg ENUM(VERT_ATTRIB_FOG), 10101e04c3fSmrg ENUM(VERT_ATTRIB_COLOR_INDEX), 10201e04c3fSmrg ENUM(VERT_ATTRIB_EDGEFLAG), 10301e04c3fSmrg ENUM(VERT_ATTRIB_TEX0), 10401e04c3fSmrg ENUM(VERT_ATTRIB_TEX1), 10501e04c3fSmrg ENUM(VERT_ATTRIB_TEX2), 10601e04c3fSmrg ENUM(VERT_ATTRIB_TEX3), 10701e04c3fSmrg ENUM(VERT_ATTRIB_TEX4), 10801e04c3fSmrg ENUM(VERT_ATTRIB_TEX5), 10901e04c3fSmrg ENUM(VERT_ATTRIB_TEX6), 11001e04c3fSmrg ENUM(VERT_ATTRIB_TEX7), 11101e04c3fSmrg ENUM(VERT_ATTRIB_POINT_SIZE), 11201e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC0), 11301e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC1), 11401e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC2), 11501e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC3), 11601e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC4), 11701e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC5), 11801e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC6), 11901e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC7), 12001e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC8), 12101e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC9), 12201e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC10), 12301e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC11), 12401e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC12), 12501e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC13), 12601e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC14), 12701e04c3fSmrg ENUM(VERT_ATTRIB_GENERIC15), 12801e04c3fSmrg }; 12901e04c3fSmrg STATIC_ASSERT(ARRAY_SIZE(names) == VERT_ATTRIB_MAX); 13001e04c3fSmrg return NAME(attrib); 13101e04c3fSmrg} 13201e04c3fSmrg 13301e04c3fSmrgconst char * 13401e04c3fSmrggl_varying_slot_name(gl_varying_slot slot) 13501e04c3fSmrg{ 13601e04c3fSmrg static const char *names[] = { 13701e04c3fSmrg ENUM(VARYING_SLOT_POS), 13801e04c3fSmrg ENUM(VARYING_SLOT_COL0), 13901e04c3fSmrg ENUM(VARYING_SLOT_COL1), 14001e04c3fSmrg ENUM(VARYING_SLOT_FOGC), 14101e04c3fSmrg ENUM(VARYING_SLOT_TEX0), 14201e04c3fSmrg ENUM(VARYING_SLOT_TEX1), 14301e04c3fSmrg ENUM(VARYING_SLOT_TEX2), 14401e04c3fSmrg ENUM(VARYING_SLOT_TEX3), 14501e04c3fSmrg ENUM(VARYING_SLOT_TEX4), 14601e04c3fSmrg ENUM(VARYING_SLOT_TEX5), 14701e04c3fSmrg ENUM(VARYING_SLOT_TEX6), 14801e04c3fSmrg ENUM(VARYING_SLOT_TEX7), 14901e04c3fSmrg ENUM(VARYING_SLOT_PSIZ), 15001e04c3fSmrg ENUM(VARYING_SLOT_BFC0), 15101e04c3fSmrg ENUM(VARYING_SLOT_BFC1), 15201e04c3fSmrg ENUM(VARYING_SLOT_EDGE), 15301e04c3fSmrg ENUM(VARYING_SLOT_CLIP_VERTEX), 15401e04c3fSmrg ENUM(VARYING_SLOT_CLIP_DIST0), 15501e04c3fSmrg ENUM(VARYING_SLOT_CLIP_DIST1), 15601e04c3fSmrg ENUM(VARYING_SLOT_CULL_DIST0), 15701e04c3fSmrg ENUM(VARYING_SLOT_CULL_DIST1), 15801e04c3fSmrg ENUM(VARYING_SLOT_PRIMITIVE_ID), 15901e04c3fSmrg ENUM(VARYING_SLOT_LAYER), 16001e04c3fSmrg ENUM(VARYING_SLOT_VIEWPORT), 16101e04c3fSmrg ENUM(VARYING_SLOT_FACE), 16201e04c3fSmrg ENUM(VARYING_SLOT_PNTC), 16301e04c3fSmrg ENUM(VARYING_SLOT_TESS_LEVEL_OUTER), 16401e04c3fSmrg ENUM(VARYING_SLOT_TESS_LEVEL_INNER), 16501e04c3fSmrg ENUM(VARYING_SLOT_BOUNDING_BOX0), 16601e04c3fSmrg ENUM(VARYING_SLOT_BOUNDING_BOX1), 16701e04c3fSmrg ENUM(VARYING_SLOT_VIEW_INDEX), 16801e04c3fSmrg ENUM(VARYING_SLOT_VAR0), 16901e04c3fSmrg ENUM(VARYING_SLOT_VAR1), 17001e04c3fSmrg ENUM(VARYING_SLOT_VAR2), 17101e04c3fSmrg ENUM(VARYING_SLOT_VAR3), 17201e04c3fSmrg ENUM(VARYING_SLOT_VAR4), 17301e04c3fSmrg ENUM(VARYING_SLOT_VAR5), 17401e04c3fSmrg ENUM(VARYING_SLOT_VAR6), 17501e04c3fSmrg ENUM(VARYING_SLOT_VAR7), 17601e04c3fSmrg ENUM(VARYING_SLOT_VAR8), 17701e04c3fSmrg ENUM(VARYING_SLOT_VAR9), 17801e04c3fSmrg ENUM(VARYING_SLOT_VAR10), 17901e04c3fSmrg ENUM(VARYING_SLOT_VAR11), 18001e04c3fSmrg ENUM(VARYING_SLOT_VAR12), 18101e04c3fSmrg ENUM(VARYING_SLOT_VAR13), 18201e04c3fSmrg ENUM(VARYING_SLOT_VAR14), 18301e04c3fSmrg ENUM(VARYING_SLOT_VAR15), 18401e04c3fSmrg ENUM(VARYING_SLOT_VAR16), 18501e04c3fSmrg ENUM(VARYING_SLOT_VAR17), 18601e04c3fSmrg ENUM(VARYING_SLOT_VAR18), 18701e04c3fSmrg ENUM(VARYING_SLOT_VAR19), 18801e04c3fSmrg ENUM(VARYING_SLOT_VAR20), 18901e04c3fSmrg ENUM(VARYING_SLOT_VAR21), 19001e04c3fSmrg ENUM(VARYING_SLOT_VAR22), 19101e04c3fSmrg ENUM(VARYING_SLOT_VAR23), 19201e04c3fSmrg ENUM(VARYING_SLOT_VAR24), 19301e04c3fSmrg ENUM(VARYING_SLOT_VAR25), 19401e04c3fSmrg ENUM(VARYING_SLOT_VAR26), 19501e04c3fSmrg ENUM(VARYING_SLOT_VAR27), 19601e04c3fSmrg ENUM(VARYING_SLOT_VAR28), 19701e04c3fSmrg ENUM(VARYING_SLOT_VAR29), 19801e04c3fSmrg ENUM(VARYING_SLOT_VAR30), 19901e04c3fSmrg ENUM(VARYING_SLOT_VAR31), 20001e04c3fSmrg }; 20101e04c3fSmrg STATIC_ASSERT(ARRAY_SIZE(names) == VARYING_SLOT_MAX); 20201e04c3fSmrg return NAME(slot); 20301e04c3fSmrg} 20401e04c3fSmrg 20501e04c3fSmrgconst char * 20601e04c3fSmrggl_system_value_name(gl_system_value sysval) 20701e04c3fSmrg{ 20801e04c3fSmrg static const char *names[] = { 20901e04c3fSmrg ENUM(SYSTEM_VALUE_SUBGROUP_SIZE), 21001e04c3fSmrg ENUM(SYSTEM_VALUE_SUBGROUP_INVOCATION), 21101e04c3fSmrg ENUM(SYSTEM_VALUE_SUBGROUP_EQ_MASK), 21201e04c3fSmrg ENUM(SYSTEM_VALUE_SUBGROUP_GE_MASK), 21301e04c3fSmrg ENUM(SYSTEM_VALUE_SUBGROUP_GT_MASK), 21401e04c3fSmrg ENUM(SYSTEM_VALUE_SUBGROUP_LE_MASK), 21501e04c3fSmrg ENUM(SYSTEM_VALUE_SUBGROUP_LT_MASK), 21601e04c3fSmrg ENUM(SYSTEM_VALUE_NUM_SUBGROUPS), 21701e04c3fSmrg ENUM(SYSTEM_VALUE_SUBGROUP_ID), 21801e04c3fSmrg ENUM(SYSTEM_VALUE_VERTEX_ID), 21901e04c3fSmrg ENUM(SYSTEM_VALUE_INSTANCE_ID), 22001e04c3fSmrg ENUM(SYSTEM_VALUE_INSTANCE_INDEX), 22101e04c3fSmrg ENUM(SYSTEM_VALUE_VERTEX_ID_ZERO_BASE), 22201e04c3fSmrg ENUM(SYSTEM_VALUE_BASE_VERTEX), 22301e04c3fSmrg ENUM(SYSTEM_VALUE_FIRST_VERTEX), 22401e04c3fSmrg ENUM(SYSTEM_VALUE_IS_INDEXED_DRAW), 22501e04c3fSmrg ENUM(SYSTEM_VALUE_BASE_INSTANCE), 22601e04c3fSmrg ENUM(SYSTEM_VALUE_DRAW_ID), 22701e04c3fSmrg ENUM(SYSTEM_VALUE_INVOCATION_ID), 22801e04c3fSmrg ENUM(SYSTEM_VALUE_FRAG_COORD), 22901e04c3fSmrg ENUM(SYSTEM_VALUE_FRONT_FACE), 23001e04c3fSmrg ENUM(SYSTEM_VALUE_SAMPLE_ID), 23101e04c3fSmrg ENUM(SYSTEM_VALUE_SAMPLE_POS), 23201e04c3fSmrg ENUM(SYSTEM_VALUE_SAMPLE_MASK_IN), 23301e04c3fSmrg ENUM(SYSTEM_VALUE_HELPER_INVOCATION), 23401e04c3fSmrg ENUM(SYSTEM_VALUE_TESS_COORD), 23501e04c3fSmrg ENUM(SYSTEM_VALUE_VERTICES_IN), 23601e04c3fSmrg ENUM(SYSTEM_VALUE_PRIMITIVE_ID), 23701e04c3fSmrg ENUM(SYSTEM_VALUE_TESS_LEVEL_OUTER), 23801e04c3fSmrg ENUM(SYSTEM_VALUE_TESS_LEVEL_INNER), 23901e04c3fSmrg ENUM(SYSTEM_VALUE_LOCAL_INVOCATION_ID), 24001e04c3fSmrg ENUM(SYSTEM_VALUE_LOCAL_INVOCATION_INDEX), 24101e04c3fSmrg ENUM(SYSTEM_VALUE_GLOBAL_INVOCATION_ID), 24201e04c3fSmrg ENUM(SYSTEM_VALUE_WORK_GROUP_ID), 24301e04c3fSmrg ENUM(SYSTEM_VALUE_NUM_WORK_GROUPS), 24401e04c3fSmrg ENUM(SYSTEM_VALUE_LOCAL_GROUP_SIZE), 24501e04c3fSmrg ENUM(SYSTEM_VALUE_GLOBAL_GROUP_SIZE), 24601e04c3fSmrg ENUM(SYSTEM_VALUE_WORK_DIM), 24701e04c3fSmrg ENUM(SYSTEM_VALUE_DEVICE_INDEX), 24801e04c3fSmrg ENUM(SYSTEM_VALUE_VIEW_INDEX), 24901e04c3fSmrg ENUM(SYSTEM_VALUE_VERTEX_CNT), 250ed98bd31Smaya ENUM(SYSTEM_VALUE_BARYCENTRIC_PIXEL), 251ed98bd31Smaya ENUM(SYSTEM_VALUE_BARYCENTRIC_SAMPLE), 252ed98bd31Smaya ENUM(SYSTEM_VALUE_BARYCENTRIC_CENTROID), 253ed98bd31Smaya ENUM(SYSTEM_VALUE_BARYCENTRIC_SIZE), 25401e04c3fSmrg }; 25501e04c3fSmrg STATIC_ASSERT(ARRAY_SIZE(names) == SYSTEM_VALUE_MAX); 25601e04c3fSmrg return NAME(sysval); 25701e04c3fSmrg} 25801e04c3fSmrg 25901e04c3fSmrgconst char * 26001e04c3fSmrgglsl_interp_mode_name(enum glsl_interp_mode qual) 26101e04c3fSmrg{ 26201e04c3fSmrg static const char *names[] = { 26301e04c3fSmrg ENUM(INTERP_MODE_NONE), 26401e04c3fSmrg ENUM(INTERP_MODE_SMOOTH), 26501e04c3fSmrg ENUM(INTERP_MODE_FLAT), 26601e04c3fSmrg ENUM(INTERP_MODE_NOPERSPECTIVE), 26701e04c3fSmrg }; 26801e04c3fSmrg STATIC_ASSERT(ARRAY_SIZE(names) == INTERP_MODE_COUNT); 26901e04c3fSmrg return NAME(qual); 27001e04c3fSmrg} 27101e04c3fSmrg 27201e04c3fSmrgconst char * 27301e04c3fSmrggl_frag_result_name(gl_frag_result result) 27401e04c3fSmrg{ 27501e04c3fSmrg static const char *names[] = { 27601e04c3fSmrg ENUM(FRAG_RESULT_DEPTH), 27701e04c3fSmrg ENUM(FRAG_RESULT_STENCIL), 27801e04c3fSmrg ENUM(FRAG_RESULT_COLOR), 27901e04c3fSmrg ENUM(FRAG_RESULT_SAMPLE_MASK), 28001e04c3fSmrg ENUM(FRAG_RESULT_DATA0), 28101e04c3fSmrg ENUM(FRAG_RESULT_DATA1), 28201e04c3fSmrg ENUM(FRAG_RESULT_DATA2), 28301e04c3fSmrg ENUM(FRAG_RESULT_DATA3), 28401e04c3fSmrg ENUM(FRAG_RESULT_DATA4), 28501e04c3fSmrg ENUM(FRAG_RESULT_DATA5), 28601e04c3fSmrg ENUM(FRAG_RESULT_DATA6), 28701e04c3fSmrg ENUM(FRAG_RESULT_DATA7), 28801e04c3fSmrg }; 28901e04c3fSmrg STATIC_ASSERT(ARRAY_SIZE(names) == FRAG_RESULT_MAX); 29001e04c3fSmrg return NAME(result); 29101e04c3fSmrg} 292