Path: blob/21.2-virgl/src/gallium/include/pipe/p_shader_tokens.h
4565 views
/**************************************************************************1*2* Copyright 2008 VMware, Inc.3* Copyright 2009-2010 VMware, Inc.4* All Rights Reserved.5*6* Permission is hereby granted, free of charge, to any person obtaining a7* copy of this software and associated documentation files (the8* "Software"), to deal in the Software without restriction, including9* without limitation the rights to use, copy, modify, merge, publish,10* distribute, sub license, and/or sell copies of the Software, and to11* permit persons to whom the Software is furnished to do so, subject to12* the following conditions:13*14* The above copyright notice and this permission notice (including the15* next paragraph) shall be included in all copies or substantial portions16* of the Software.17*18* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS19* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF20* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.21* IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR22* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,23* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE24* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.25*26**************************************************************************/2728#ifndef P_SHADER_TOKENS_H29#define P_SHADER_TOKENS_H3031#ifdef __cplusplus32extern "C" {33#endif343536struct tgsi_header37{38unsigned HeaderSize : 8;39unsigned BodySize : 24;40};4142struct tgsi_processor43{44unsigned Processor : 4; /* PIPE_SHADER_ */45unsigned Padding : 28;46};4748enum tgsi_token_type {49TGSI_TOKEN_TYPE_DECLARATION,50TGSI_TOKEN_TYPE_IMMEDIATE,51TGSI_TOKEN_TYPE_INSTRUCTION,52TGSI_TOKEN_TYPE_PROPERTY,53};5455struct tgsi_token56{57unsigned Type : 4; /**< TGSI_TOKEN_TYPE_x */58unsigned NrTokens : 8; /**< UINT */59unsigned Padding : 20;60};6162enum tgsi_file_type {63TGSI_FILE_NULL,64TGSI_FILE_CONSTANT,65TGSI_FILE_INPUT,66TGSI_FILE_OUTPUT,67TGSI_FILE_TEMPORARY,68TGSI_FILE_SAMPLER,69TGSI_FILE_ADDRESS,70TGSI_FILE_IMMEDIATE,71TGSI_FILE_SYSTEM_VALUE,72TGSI_FILE_IMAGE,73TGSI_FILE_SAMPLER_VIEW,74TGSI_FILE_BUFFER,75TGSI_FILE_MEMORY,76TGSI_FILE_CONSTBUF,77TGSI_FILE_HW_ATOMIC,78TGSI_FILE_COUNT, /**< how many TGSI_FILE_ types */79};808182#define TGSI_WRITEMASK_NONE 0x0083#define TGSI_WRITEMASK_X 0x0184#define TGSI_WRITEMASK_Y 0x0285#define TGSI_WRITEMASK_XY 0x0386#define TGSI_WRITEMASK_Z 0x0487#define TGSI_WRITEMASK_XZ 0x0588#define TGSI_WRITEMASK_YZ 0x0689#define TGSI_WRITEMASK_XYZ 0x0790#define TGSI_WRITEMASK_W 0x0891#define TGSI_WRITEMASK_XW 0x0992#define TGSI_WRITEMASK_YW 0x0A93#define TGSI_WRITEMASK_XYW 0x0B94#define TGSI_WRITEMASK_ZW 0x0C95#define TGSI_WRITEMASK_XZW 0x0D96#define TGSI_WRITEMASK_YZW 0x0E97#define TGSI_WRITEMASK_XYZW 0x0F9899enum tgsi_interpolate_mode {100TGSI_INTERPOLATE_CONSTANT,101TGSI_INTERPOLATE_LINEAR,102TGSI_INTERPOLATE_PERSPECTIVE,103TGSI_INTERPOLATE_COLOR, /* special color case for smooth/flat */104TGSI_INTERPOLATE_COUNT,105};106107enum tgsi_interpolate_loc {108TGSI_INTERPOLATE_LOC_CENTER,109TGSI_INTERPOLATE_LOC_CENTROID,110TGSI_INTERPOLATE_LOC_SAMPLE,111TGSI_INTERPOLATE_LOC_COUNT,112};113114#define TGSI_CYLINDRICAL_WRAP_X (1 << 0)115#define TGSI_CYLINDRICAL_WRAP_Y (1 << 1)116#define TGSI_CYLINDRICAL_WRAP_Z (1 << 2)117#define TGSI_CYLINDRICAL_WRAP_W (1 << 3)118119enum tgsi_memory_type {120TGSI_MEMORY_TYPE_GLOBAL, /* OpenCL global */121TGSI_MEMORY_TYPE_SHARED, /* OpenCL local / GLSL shared */122TGSI_MEMORY_TYPE_PRIVATE, /* OpenCL private */123TGSI_MEMORY_TYPE_INPUT, /* OpenCL kernel input params */124TGSI_MEMORY_TYPE_COUNT,125};126127struct tgsi_declaration128{129unsigned Type : 4; /**< TGSI_TOKEN_TYPE_DECLARATION */130unsigned NrTokens : 8; /**< UINT */131unsigned File : 4; /**< one of TGSI_FILE_x */132unsigned UsageMask : 4; /**< bitmask of TGSI_WRITEMASK_x flags */133unsigned Dimension : 1; /**< any extra dimension info? */134unsigned Semantic : 1; /**< BOOL, any semantic info? */135unsigned Interpolate : 1; /**< any interpolation info? */136unsigned Invariant : 1; /**< invariant optimization? */137unsigned Local : 1; /**< optimize as subroutine local variable? */138unsigned Array : 1; /**< extra array info? */139unsigned Atomic : 1; /**< atomic only? for TGSI_FILE_BUFFER */140unsigned MemType : 2; /**< TGSI_MEMORY_TYPE_x for TGSI_FILE_MEMORY */141unsigned Padding : 3;142};143144struct tgsi_declaration_range145{146unsigned First : 16; /**< UINT */147unsigned Last : 16; /**< UINT */148};149150struct tgsi_declaration_dimension151{152unsigned Index2D:16; /**< UINT */153unsigned Padding:16;154};155156struct tgsi_declaration_interp157{158unsigned Interpolate : 4; /**< one of TGSI_INTERPOLATE_x */159unsigned Location : 2; /**< one of TGSI_INTERPOLATE_LOC_x */160unsigned CylindricalWrap:4; /**< TGSI_CYLINDRICAL_WRAP_x flags */161unsigned Padding : 22;162};163164enum tgsi_semantic {165TGSI_SEMANTIC_POSITION,166TGSI_SEMANTIC_COLOR,167TGSI_SEMANTIC_BCOLOR, /**< back-face color */168TGSI_SEMANTIC_FOG,169TGSI_SEMANTIC_PSIZE,170TGSI_SEMANTIC_GENERIC,171TGSI_SEMANTIC_NORMAL,172TGSI_SEMANTIC_FACE,173TGSI_SEMANTIC_EDGEFLAG,174TGSI_SEMANTIC_PRIMID,175TGSI_SEMANTIC_INSTANCEID, /**< doesn't include start_instance */176TGSI_SEMANTIC_VERTEXID,177TGSI_SEMANTIC_STENCIL,178TGSI_SEMANTIC_CLIPDIST,179TGSI_SEMANTIC_CLIPVERTEX,180TGSI_SEMANTIC_GRID_SIZE, /**< grid size in blocks */181TGSI_SEMANTIC_BLOCK_ID, /**< id of the current block */182TGSI_SEMANTIC_BLOCK_SIZE, /**< block size in threads */183TGSI_SEMANTIC_THREAD_ID, /**< block-relative id of the current thread */184TGSI_SEMANTIC_TEXCOORD, /**< texture or sprite coordinates */185TGSI_SEMANTIC_PCOORD, /**< point sprite coordinate */186TGSI_SEMANTIC_VIEWPORT_INDEX, /**< viewport index */187TGSI_SEMANTIC_LAYER, /**< layer (rendertarget index) */188TGSI_SEMANTIC_SAMPLEID,189TGSI_SEMANTIC_SAMPLEPOS,190TGSI_SEMANTIC_SAMPLEMASK,191TGSI_SEMANTIC_INVOCATIONID,192TGSI_SEMANTIC_VERTEXID_NOBASE,193TGSI_SEMANTIC_BASEVERTEX,194TGSI_SEMANTIC_PATCH, /**< generic per-patch semantic */195TGSI_SEMANTIC_TESSCOORD, /**< coordinate being processed by tess */196TGSI_SEMANTIC_TESSOUTER, /**< outer tessellation levels */197TGSI_SEMANTIC_TESSINNER, /**< inner tessellation levels */198TGSI_SEMANTIC_VERTICESIN, /**< number of input vertices */199TGSI_SEMANTIC_HELPER_INVOCATION, /**< current invocation is helper */200TGSI_SEMANTIC_BASEINSTANCE,201TGSI_SEMANTIC_DRAWID,202TGSI_SEMANTIC_WORK_DIM, /**< opencl get_work_dim value */203TGSI_SEMANTIC_SUBGROUP_SIZE,204TGSI_SEMANTIC_SUBGROUP_INVOCATION,205TGSI_SEMANTIC_SUBGROUP_EQ_MASK,206TGSI_SEMANTIC_SUBGROUP_GE_MASK,207TGSI_SEMANTIC_SUBGROUP_GT_MASK,208TGSI_SEMANTIC_SUBGROUP_LE_MASK,209TGSI_SEMANTIC_SUBGROUP_LT_MASK,210TGSI_SEMANTIC_CS_USER_DATA_AMD,211TGSI_SEMANTIC_VIEWPORT_MASK,212TGSI_SEMANTIC_TESS_DEFAULT_OUTER_LEVEL, /**< from set_tess_state */213TGSI_SEMANTIC_TESS_DEFAULT_INNER_LEVEL, /**< from set_tess_state */214TGSI_SEMANTIC_COUNT, /**< number of semantic values */215};216217struct tgsi_declaration_semantic218{219unsigned Name : 8; /**< one of TGSI_SEMANTIC_x */220unsigned Index : 16; /**< UINT */221unsigned StreamX : 2; /**< vertex stream (for GS output) */222unsigned StreamY : 2;223unsigned StreamZ : 2;224unsigned StreamW : 2;225};226227struct tgsi_declaration_image {228unsigned Resource : 8; /**< one of TGSI_TEXTURE_ */229unsigned Raw : 1;230unsigned Writable : 1;231unsigned Format : 10; /**< one of PIPE_FORMAT_ */232unsigned Padding : 12;233};234235enum tgsi_return_type {236TGSI_RETURN_TYPE_UNORM = 0,237TGSI_RETURN_TYPE_SNORM,238TGSI_RETURN_TYPE_SINT,239TGSI_RETURN_TYPE_UINT,240TGSI_RETURN_TYPE_FLOAT,241TGSI_RETURN_TYPE_UNKNOWN,242TGSI_RETURN_TYPE_COUNT243};244245struct tgsi_declaration_sampler_view {246unsigned Resource : 8; /**< one of TGSI_TEXTURE_ */247unsigned ReturnTypeX : 6; /**< one of enum tgsi_return_type */248unsigned ReturnTypeY : 6; /**< one of enum tgsi_return_type */249unsigned ReturnTypeZ : 6; /**< one of enum tgsi_return_type */250unsigned ReturnTypeW : 6; /**< one of enum tgsi_return_type */251};252253struct tgsi_declaration_array {254unsigned ArrayID : 10;255unsigned Padding : 22;256};257258enum tgsi_imm_type {259TGSI_IMM_FLOAT32,260TGSI_IMM_UINT32,261TGSI_IMM_INT32,262TGSI_IMM_FLOAT64,263TGSI_IMM_UINT64,264TGSI_IMM_INT64,265};266267struct tgsi_immediate268{269unsigned Type : 4; /**< TGSI_TOKEN_TYPE_IMMEDIATE */270unsigned NrTokens : 14; /**< UINT */271unsigned DataType : 4; /**< one of TGSI_IMM_x */272unsigned Padding : 10;273};274275union tgsi_immediate_data276{277float Float;278unsigned Uint;279int Int;280};281282enum tgsi_property_name {283TGSI_PROPERTY_GS_INPUT_PRIM,284TGSI_PROPERTY_GS_OUTPUT_PRIM,285TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES,286TGSI_PROPERTY_FS_COORD_ORIGIN,287TGSI_PROPERTY_FS_COORD_PIXEL_CENTER,288TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS,289TGSI_PROPERTY_FS_DEPTH_LAYOUT,290TGSI_PROPERTY_VS_PROHIBIT_UCPS,291TGSI_PROPERTY_GS_INVOCATIONS,292TGSI_PROPERTY_VS_WINDOW_SPACE_POSITION,293TGSI_PROPERTY_TCS_VERTICES_OUT,294TGSI_PROPERTY_TES_PRIM_MODE,295TGSI_PROPERTY_TES_SPACING,296TGSI_PROPERTY_TES_VERTEX_ORDER_CW,297TGSI_PROPERTY_TES_POINT_MODE,298TGSI_PROPERTY_NUM_CLIPDIST_ENABLED,299TGSI_PROPERTY_NUM_CULLDIST_ENABLED,300TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL,301TGSI_PROPERTY_FS_POST_DEPTH_COVERAGE,302TGSI_PROPERTY_NEXT_SHADER,303TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH,304TGSI_PROPERTY_CS_FIXED_BLOCK_HEIGHT,305TGSI_PROPERTY_CS_FIXED_BLOCK_DEPTH,306TGSI_PROPERTY_MUL_ZERO_WINS,307TGSI_PROPERTY_VS_BLIT_SGPRS_AMD,308TGSI_PROPERTY_CS_USER_DATA_COMPONENTS_AMD,309TGSI_PROPERTY_LAYER_VIEWPORT_RELATIVE,310TGSI_PROPERTY_FS_BLEND_EQUATION_ADVANCED,311TGSI_PROPERTY_COUNT,312};313314struct tgsi_property {315unsigned Type : 4; /**< TGSI_TOKEN_TYPE_PROPERTY */316unsigned NrTokens : 8; /**< UINT */317unsigned PropertyName : 8; /**< one of TGSI_PROPERTY */318unsigned Padding : 12;319};320321enum tgsi_fs_coord_origin {322TGSI_FS_COORD_ORIGIN_UPPER_LEFT,323TGSI_FS_COORD_ORIGIN_LOWER_LEFT,324};325326enum tgsi_fs_coord_pixcenter {327TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER,328TGSI_FS_COORD_PIXEL_CENTER_INTEGER,329};330331enum tgsi_fs_depth_layout {332TGSI_FS_DEPTH_LAYOUT_NONE,333TGSI_FS_DEPTH_LAYOUT_ANY,334TGSI_FS_DEPTH_LAYOUT_GREATER,335TGSI_FS_DEPTH_LAYOUT_LESS,336TGSI_FS_DEPTH_LAYOUT_UNCHANGED,337};338339struct tgsi_property_data {340unsigned Data;341};342343/* TGSI opcodes.344*345* For more information on semantics of opcodes and346* which APIs are known to use which opcodes, see347* gallium/docs/source/tgsi.rst348*/349enum tgsi_opcode {350TGSI_OPCODE_ARL = 0,351TGSI_OPCODE_MOV = 1,352TGSI_OPCODE_LIT = 2,353TGSI_OPCODE_RCP = 3,354TGSI_OPCODE_RSQ = 4,355TGSI_OPCODE_EXP = 5,356TGSI_OPCODE_LOG = 6,357TGSI_OPCODE_MUL = 7,358TGSI_OPCODE_ADD = 8,359TGSI_OPCODE_DP3 = 9,360TGSI_OPCODE_DP4 = 10,361TGSI_OPCODE_DST = 11,362TGSI_OPCODE_MIN = 12,363TGSI_OPCODE_MAX = 13,364TGSI_OPCODE_SLT = 14,365TGSI_OPCODE_SGE = 15,366TGSI_OPCODE_MAD = 16,367TGSI_OPCODE_TEX_LZ = 17,368TGSI_OPCODE_LRP = 18,369TGSI_OPCODE_FMA = 19,370TGSI_OPCODE_SQRT = 20,371TGSI_OPCODE_LDEXP = 21,372TGSI_OPCODE_F2U64 = 22,373TGSI_OPCODE_F2I64 = 23,374TGSI_OPCODE_FRC = 24,375TGSI_OPCODE_TXF_LZ = 25,376TGSI_OPCODE_FLR = 26,377TGSI_OPCODE_ROUND = 27,378TGSI_OPCODE_EX2 = 28,379TGSI_OPCODE_LG2 = 29,380TGSI_OPCODE_POW = 30,381TGSI_OPCODE_DEMOTE = 31,382TGSI_OPCODE_U2I64 = 32,383TGSI_OPCODE_CLOCK = 33,384TGSI_OPCODE_I2I64 = 34,385TGSI_OPCODE_READ_HELPER = 35,386TGSI_OPCODE_COS = 36,387TGSI_OPCODE_DDX = 37,388TGSI_OPCODE_DDY = 38,389TGSI_OPCODE_KILL = 39 /* unconditional */,390TGSI_OPCODE_PK2H = 40,391TGSI_OPCODE_PK2US = 41,392TGSI_OPCODE_PK4B = 42,393TGSI_OPCODE_PK4UB = 43,394TGSI_OPCODE_D2U64 = 44,395TGSI_OPCODE_SEQ = 45,396TGSI_OPCODE_D2I64 = 46,397TGSI_OPCODE_SGT = 47,398TGSI_OPCODE_SIN = 48,399TGSI_OPCODE_SLE = 49,400TGSI_OPCODE_SNE = 50,401TGSI_OPCODE_U642D = 51,402TGSI_OPCODE_TEX = 52,403TGSI_OPCODE_TXD = 53,404TGSI_OPCODE_TXP = 54,405TGSI_OPCODE_UP2H = 55,406TGSI_OPCODE_UP2US = 56,407TGSI_OPCODE_UP4B = 57,408TGSI_OPCODE_UP4UB = 58,409TGSI_OPCODE_U642F = 59,410TGSI_OPCODE_I642F = 60,411TGSI_OPCODE_ARR = 61,412TGSI_OPCODE_I642D = 62,413TGSI_OPCODE_CAL = 63,414TGSI_OPCODE_RET = 64,415TGSI_OPCODE_SSG = 65 /* SGN */,416TGSI_OPCODE_CMP = 66,417/* gap */418TGSI_OPCODE_TXB = 68,419TGSI_OPCODE_FBFETCH = 69,420TGSI_OPCODE_DIV = 70,421TGSI_OPCODE_DP2 = 71,422TGSI_OPCODE_TXL = 72,423TGSI_OPCODE_BRK = 73,424TGSI_OPCODE_IF = 74,425TGSI_OPCODE_UIF = 75,426TGSI_OPCODE_READ_INVOC = 76,427TGSI_OPCODE_ELSE = 77,428TGSI_OPCODE_ENDIF = 78,429TGSI_OPCODE_DDX_FINE = 79,430TGSI_OPCODE_DDY_FINE = 80,431/* gap */432TGSI_OPCODE_CEIL = 83,433TGSI_OPCODE_I2F = 84,434TGSI_OPCODE_NOT = 85,435TGSI_OPCODE_TRUNC = 86,436TGSI_OPCODE_SHL = 87,437TGSI_OPCODE_BALLOT = 88,438TGSI_OPCODE_AND = 89,439TGSI_OPCODE_OR = 90,440TGSI_OPCODE_MOD = 91,441TGSI_OPCODE_XOR = 92,442/* gap */443TGSI_OPCODE_TXF = 94,444TGSI_OPCODE_TXQ = 95,445TGSI_OPCODE_CONT = 96,446TGSI_OPCODE_EMIT = 97,447TGSI_OPCODE_ENDPRIM = 98,448TGSI_OPCODE_BGNLOOP = 99,449TGSI_OPCODE_BGNSUB = 100,450TGSI_OPCODE_ENDLOOP = 101,451TGSI_OPCODE_ENDSUB = 102,452TGSI_OPCODE_ATOMFADD = 103,453TGSI_OPCODE_TXQS = 104,454TGSI_OPCODE_RESQ = 105,455TGSI_OPCODE_READ_FIRST = 106,456TGSI_OPCODE_NOP = 107,457458TGSI_OPCODE_FSEQ = 108,459TGSI_OPCODE_FSGE = 109,460TGSI_OPCODE_FSLT = 110,461TGSI_OPCODE_FSNE = 111,462463TGSI_OPCODE_MEMBAR = 112,464/* gap */465TGSI_OPCODE_KILL_IF = 116 /* conditional kill */,466TGSI_OPCODE_END = 117 /* aka HALT */,467TGSI_OPCODE_DFMA = 118,468TGSI_OPCODE_F2I = 119,469TGSI_OPCODE_IDIV = 120,470TGSI_OPCODE_IMAX = 121,471TGSI_OPCODE_IMIN = 122,472TGSI_OPCODE_INEG = 123,473TGSI_OPCODE_ISGE = 124,474TGSI_OPCODE_ISHR = 125,475TGSI_OPCODE_ISLT = 126,476TGSI_OPCODE_F2U = 127,477TGSI_OPCODE_U2F = 128,478TGSI_OPCODE_UADD = 129,479TGSI_OPCODE_UDIV = 130,480TGSI_OPCODE_UMAD = 131,481TGSI_OPCODE_UMAX = 132,482TGSI_OPCODE_UMIN = 133,483TGSI_OPCODE_UMOD = 134,484TGSI_OPCODE_UMUL = 135,485TGSI_OPCODE_USEQ = 136,486TGSI_OPCODE_USGE = 137,487TGSI_OPCODE_USHR = 138,488TGSI_OPCODE_USLT = 139,489TGSI_OPCODE_USNE = 140,490TGSI_OPCODE_SWITCH = 141,491TGSI_OPCODE_CASE = 142,492TGSI_OPCODE_DEFAULT = 143,493TGSI_OPCODE_ENDSWITCH = 144,494495/* resource related opcodes */496TGSI_OPCODE_SAMPLE = 145,497TGSI_OPCODE_SAMPLE_I = 146,498TGSI_OPCODE_SAMPLE_I_MS = 147,499TGSI_OPCODE_SAMPLE_B = 148,500TGSI_OPCODE_SAMPLE_C = 149,501TGSI_OPCODE_SAMPLE_C_LZ = 150,502TGSI_OPCODE_SAMPLE_D = 151,503TGSI_OPCODE_SAMPLE_L = 152,504TGSI_OPCODE_GATHER4 = 153,505TGSI_OPCODE_SVIEWINFO = 154,506TGSI_OPCODE_SAMPLE_POS = 155,507TGSI_OPCODE_SAMPLE_INFO = 156,508509TGSI_OPCODE_UARL = 157,510TGSI_OPCODE_UCMP = 158,511TGSI_OPCODE_IABS = 159,512TGSI_OPCODE_ISSG = 160,513514TGSI_OPCODE_LOAD = 161,515TGSI_OPCODE_STORE = 162,516TGSI_OPCODE_IMG2HND = 163,517TGSI_OPCODE_SAMP2HND = 164,518/* gap */519TGSI_OPCODE_BARRIER = 166,520521TGSI_OPCODE_ATOMUADD = 167,522TGSI_OPCODE_ATOMXCHG = 168,523TGSI_OPCODE_ATOMCAS = 169,524TGSI_OPCODE_ATOMAND = 170,525TGSI_OPCODE_ATOMOR = 171,526TGSI_OPCODE_ATOMXOR = 172,527TGSI_OPCODE_ATOMUMIN = 173,528TGSI_OPCODE_ATOMUMAX = 174,529TGSI_OPCODE_ATOMIMIN = 175,530TGSI_OPCODE_ATOMIMAX = 176,531532/* to be used for shadow cube map compares */533TGSI_OPCODE_TEX2 = 177,534TGSI_OPCODE_TXB2 = 178,535TGSI_OPCODE_TXL2 = 179,536537TGSI_OPCODE_IMUL_HI = 180,538TGSI_OPCODE_UMUL_HI = 181,539540TGSI_OPCODE_TG4 = 182,541542TGSI_OPCODE_LODQ = 183,543544TGSI_OPCODE_IBFE = 184,545TGSI_OPCODE_UBFE = 185,546TGSI_OPCODE_BFI = 186,547TGSI_OPCODE_BREV = 187,548TGSI_OPCODE_POPC = 188,549TGSI_OPCODE_LSB = 189,550TGSI_OPCODE_IMSB = 190,551TGSI_OPCODE_UMSB = 191,552553TGSI_OPCODE_INTERP_CENTROID = 192,554TGSI_OPCODE_INTERP_SAMPLE = 193,555TGSI_OPCODE_INTERP_OFFSET = 194,556557/* sm5 marked opcodes are supported in D3D11 optionally - also DMOV, DMOVC */558TGSI_OPCODE_F2D = 195 /* SM5 */,559TGSI_OPCODE_D2F = 196,560TGSI_OPCODE_DABS = 197,561TGSI_OPCODE_DNEG = 198 /* SM5 */,562TGSI_OPCODE_DADD = 199 /* SM5 */,563TGSI_OPCODE_DMUL = 200 /* SM5 */,564TGSI_OPCODE_DMAX = 201 /* SM5 */,565TGSI_OPCODE_DMIN = 202 /* SM5 */,566TGSI_OPCODE_DSLT = 203 /* SM5 */,567TGSI_OPCODE_DSGE = 204 /* SM5 */,568TGSI_OPCODE_DSEQ = 205 /* SM5 */,569TGSI_OPCODE_DSNE = 206 /* SM5 */,570TGSI_OPCODE_DRCP = 207 /* eg, cayman */,571TGSI_OPCODE_DSQRT = 208 /* eg, cayman also has DRSQ */,572TGSI_OPCODE_DMAD = 209,573TGSI_OPCODE_DFRAC = 210 /* eg, cayman */,574TGSI_OPCODE_DLDEXP = 211 /* eg, cayman */,575TGSI_OPCODE_DFRACEXP = 212 /* eg, cayman */,576TGSI_OPCODE_D2I = 213,577TGSI_OPCODE_I2D = 214,578TGSI_OPCODE_D2U = 215,579TGSI_OPCODE_U2D = 216,580TGSI_OPCODE_DRSQ = 217 /* eg, cayman also has DRSQ */,581TGSI_OPCODE_DTRUNC = 218 /* nvc0 */,582TGSI_OPCODE_DCEIL = 219 /* nvc0 */,583TGSI_OPCODE_DFLR = 220 /* nvc0 */,584TGSI_OPCODE_DROUND = 221 /* nvc0 */,585TGSI_OPCODE_DSSG = 222,586587TGSI_OPCODE_VOTE_ANY = 223,588TGSI_OPCODE_VOTE_ALL = 224,589TGSI_OPCODE_VOTE_EQ = 225,590591TGSI_OPCODE_U64SEQ = 226,592TGSI_OPCODE_U64SNE = 227,593TGSI_OPCODE_I64SLT = 228,594TGSI_OPCODE_U64SLT = 229,595TGSI_OPCODE_I64SGE = 230,596TGSI_OPCODE_U64SGE = 231,597598TGSI_OPCODE_I64MIN = 232,599TGSI_OPCODE_U64MIN = 233,600TGSI_OPCODE_I64MAX = 234,601TGSI_OPCODE_U64MAX = 235,602603TGSI_OPCODE_I64ABS = 236,604TGSI_OPCODE_I64SSG = 237,605TGSI_OPCODE_I64NEG = 238,606607TGSI_OPCODE_U64ADD = 239,608TGSI_OPCODE_U64MUL = 240,609TGSI_OPCODE_U64SHL = 241,610TGSI_OPCODE_I64SHR = 242,611TGSI_OPCODE_U64SHR = 243,612613TGSI_OPCODE_I64DIV = 244,614TGSI_OPCODE_U64DIV = 245,615TGSI_OPCODE_I64MOD = 246,616TGSI_OPCODE_U64MOD = 247,617618TGSI_OPCODE_DDIV = 248,619620TGSI_OPCODE_LOD = 249,621622TGSI_OPCODE_ATOMINC_WRAP = 250,623TGSI_OPCODE_ATOMDEC_WRAP = 251,624625TGSI_OPCODE_LAST = 252,626};627628629/**630* Opcode is the operation code to execute. A given operation defines the631* semantics how the source registers (if any) are interpreted and what is632* written to the destination registers (if any) as a result of execution.633*634* NumDstRegs and NumSrcRegs is the number of destination and source registers,635* respectively. For a given operation code, those numbers are fixed and are636* present here only for convenience.637*638* Saturate controls how are final results in destination registers modified.639*/640641struct tgsi_instruction642{643unsigned Type : 4; /* TGSI_TOKEN_TYPE_INSTRUCTION */644unsigned NrTokens : 8; /* UINT */645unsigned Opcode : 8; /* TGSI_OPCODE_ */646unsigned Saturate : 1; /* BOOL */647unsigned NumDstRegs : 2; /* UINT */648unsigned NumSrcRegs : 4; /* UINT */649unsigned Label : 1;650unsigned Texture : 1;651unsigned Memory : 1;652unsigned Precise : 1;653unsigned Padding : 1;654};655656/*657* If tgsi_instruction::Label is TRUE, tgsi_instruction_label follows.658*659* If tgsi_instruction::Texture is TRUE, tgsi_instruction_texture follows.660* if texture instruction has a number of offsets,661* then tgsi_instruction::Texture::NumOffset of tgsi_texture_offset follow.662*663* Then, tgsi_instruction::NumDstRegs of tgsi_dst_register follow.664*665* Then, tgsi_instruction::NumSrcRegs of tgsi_src_register follow.666*667* tgsi_instruction::NrTokens contains the total number of words that make the668* instruction, including the instruction word.669*/670671enum tgsi_swizzle {672TGSI_SWIZZLE_X,673TGSI_SWIZZLE_Y,674TGSI_SWIZZLE_Z,675TGSI_SWIZZLE_W,676};677678struct tgsi_instruction_label679{680unsigned Label : 24; /* UINT */681unsigned Padding : 8;682};683684enum tgsi_texture_type {685TGSI_TEXTURE_BUFFER,686TGSI_TEXTURE_1D,687TGSI_TEXTURE_2D,688TGSI_TEXTURE_3D,689TGSI_TEXTURE_CUBE,690TGSI_TEXTURE_RECT,691TGSI_TEXTURE_SHADOW1D,692TGSI_TEXTURE_SHADOW2D,693TGSI_TEXTURE_SHADOWRECT,694TGSI_TEXTURE_1D_ARRAY,695TGSI_TEXTURE_2D_ARRAY,696TGSI_TEXTURE_SHADOW1D_ARRAY,697TGSI_TEXTURE_SHADOW2D_ARRAY,698TGSI_TEXTURE_SHADOWCUBE,699TGSI_TEXTURE_2D_MSAA,700TGSI_TEXTURE_2D_ARRAY_MSAA,701TGSI_TEXTURE_CUBE_ARRAY,702TGSI_TEXTURE_SHADOWCUBE_ARRAY,703TGSI_TEXTURE_UNKNOWN,704TGSI_TEXTURE_COUNT,705};706707struct tgsi_instruction_texture708{709unsigned Texture : 8; /* TGSI_TEXTURE_ */710unsigned NumOffsets : 4;711unsigned ReturnType : 3; /* TGSI_RETURN_TYPE_x */712unsigned Padding : 17;713};714715/* for texture offsets in GLSL and DirectX.716* Generally these always come from TGSI_FILE_IMMEDIATE,717* however DX11 appears to have the capability to do718* non-constant texture offsets.719*/720struct tgsi_texture_offset721{722int Index : 16;723unsigned File : 4; /**< one of TGSI_FILE_x */724unsigned SwizzleX : 2; /* TGSI_SWIZZLE_x */725unsigned SwizzleY : 2; /* TGSI_SWIZZLE_x */726unsigned SwizzleZ : 2; /* TGSI_SWIZZLE_x */727unsigned Padding : 6;728};729730/**731* File specifies the register array to access.732*733* Index specifies the element number of a register in the register file.734*735* If Indirect is TRUE, Index should be offset by the X component of the indirect736* register that follows. The register can be now fetched into local storage737* for further processing.738*739* If Negate is TRUE, all components of the fetched register are negated.740*741* The fetched register components are swizzled according to SwizzleX, SwizzleY,742* SwizzleZ and SwizzleW.743*744*/745746struct tgsi_src_register747{748unsigned File : 4; /* TGSI_FILE_ */749unsigned Indirect : 1; /* BOOL */750unsigned Dimension : 1; /* BOOL */751int Index : 16; /* SINT */752unsigned SwizzleX : 2; /* TGSI_SWIZZLE_ */753unsigned SwizzleY : 2; /* TGSI_SWIZZLE_ */754unsigned SwizzleZ : 2; /* TGSI_SWIZZLE_ */755unsigned SwizzleW : 2; /* TGSI_SWIZZLE_ */756unsigned Absolute : 1; /* BOOL */757unsigned Negate : 1; /* BOOL */758};759760/**761* If tgsi_src_register::Indirect is TRUE, tgsi_ind_register follows.762*763* File, Index and Swizzle are handled the same as in tgsi_src_register.764*765* If ArrayID is zero the whole register file might be indirectly addressed,766* if not only the Declaration with this ArrayID is accessed by this operand.767*768*/769770struct tgsi_ind_register771{772unsigned File : 4; /* TGSI_FILE_ */773int Index : 16; /* SINT */774unsigned Swizzle : 2; /* TGSI_SWIZZLE_ */775unsigned ArrayID : 10; /* UINT */776};777778/**779* If tgsi_src_register::Dimension is TRUE, tgsi_dimension follows.780*/781782struct tgsi_dimension783{784unsigned Indirect : 1; /* BOOL */785unsigned Dimension : 1; /* BOOL */786unsigned Padding : 14;787int Index : 16; /* SINT */788};789790struct tgsi_dst_register791{792unsigned File : 4; /* TGSI_FILE_ */793unsigned WriteMask : 4; /* TGSI_WRITEMASK_ */794unsigned Indirect : 1; /* BOOL */795unsigned Dimension : 1; /* BOOL */796int Index : 16; /* SINT */797unsigned Padding : 6;798};799800#define TGSI_MEMORY_COHERENT (1 << 0)801#define TGSI_MEMORY_RESTRICT (1 << 1)802#define TGSI_MEMORY_VOLATILE (1 << 2)803/* The "stream" cache policy will minimize memory cache usage if other804* memory operations need the cache.805*/806#define TGSI_MEMORY_STREAM_CACHE_POLICY (1 << 3)807808/**809* Specifies the type of memory access to do for the LOAD/STORE instruction.810*/811struct tgsi_instruction_memory812{813unsigned Qualifier : 4; /* TGSI_MEMORY_ */814unsigned Texture : 8; /* only for images: TGSI_TEXTURE_ */815unsigned Format : 10; /* only for images: PIPE_FORMAT_ */816unsigned Padding : 10;817};818819#define TGSI_MEMBAR_SHADER_BUFFER (1 << 0)820#define TGSI_MEMBAR_ATOMIC_BUFFER (1 << 1)821#define TGSI_MEMBAR_SHADER_IMAGE (1 << 2)822#define TGSI_MEMBAR_SHARED (1 << 3)823#define TGSI_MEMBAR_THREAD_GROUP (1 << 4)824825#ifdef __cplusplus826}827#endif828829#endif /* P_SHADER_TOKENS_H */830831832