p_shader_tokens.h revision 235981d8719aa7f67bfe547bf96e5343020e0373
1abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#if !defined TGSI_TOKEN_H 2abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TOKEN_H 3abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 494c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca#ifdef __cplusplus 5abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolextern "C" { 694c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca#endif 7abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 84339744c1676f925d42251bd32795bba9928cd5fKeith Whitwell#include "p_compiler.h" 94339744c1676f925d42251bd32795bba9928cd5fKeith Whitwell 10abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_version 11abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 12abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned MajorVersion : 8; 13abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned MinorVersion : 8; 14abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 16; 15abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 16abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 17abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_header 18abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 19abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned HeaderSize : 8; 20abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned BodySize : 24; 21abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 22abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 23abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PROCESSOR_FRAGMENT 0 24abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PROCESSOR_VERTEX 1 25abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PROCESSOR_GEOMETRY 2 26abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 27abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_processor 28abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 29abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Processor : 4; /* TGSI_PROCESSOR_ */ 30abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 28; 31abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 32abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 33abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TOKEN_TYPE_DECLARATION 0 34abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TOKEN_TYPE_IMMEDIATE 1 35abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TOKEN_TYPE_INSTRUCTION 2 36abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 37abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_token 38abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 39abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_TOKEN_TYPE_ */ 40abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Size : 8; /* UINT */ 41abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 19; 42abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 43abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 44abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 45e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusinenum tgsi_file_type { 46e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin TGSI_FILE_NULL =0, 47e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin TGSI_FILE_CONSTANT =1, 48e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin TGSI_FILE_INPUT =2, 49e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin TGSI_FILE_OUTPUT =3, 50e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin TGSI_FILE_TEMPORARY =4, 51e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin TGSI_FILE_SAMPLER =5, 52e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin TGSI_FILE_ADDRESS =6, 53e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin TGSI_FILE_IMMEDIATE =7, 54e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin TGSI_FILE_COUNT /**< how many TGSI_FILE_ types */ 55e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin}; 5635ca45daba3906ac94fb879d2374d476ba2dac47Brian 57abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 58abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_NONE 0x00 59abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_X 0x01 60abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_Y 0x02 61abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XY 0x03 62abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_Z 0x04 63abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XZ 0x05 64abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_YZ 0x06 65abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XYZ 0x07 66abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_W 0x08 67abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XW 0x09 68abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_YW 0x0A 69abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XYW 0x0B 70abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_ZW 0x0C 71abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XZW 0x0D 72abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_YZW 0x0E 73abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XYZW 0x0F 74abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 754e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol#define TGSI_INTERPOLATE_CONSTANT 0 764e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol#define TGSI_INTERPOLATE_LINEAR 1 774e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol#define TGSI_INTERPOLATE_PERSPECTIVE 2 78bd3b47590e2a8e91a8f5545d7c8872b26879c228Michal Krol#define TGSI_INTERPOLATE_COUNT 3 794e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol 80abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_declaration 81abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 82abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_TOKEN_TYPE_DECLARATION */ 83abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Size : 8; /* UINT */ 84abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned File : 4; /* one of TGSI_FILE_x */ 85abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned UsageMask : 4; /* bitmask of TGSI_WRITEMASK_x flags */ 864e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol unsigned Interpolate : 4; /* TGSI_INTERPOLATE_ */ 87abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Semantic : 1; /* BOOL, any semantic info? */ 884e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol unsigned Padding : 6; 89abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 90abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 91abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 92abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_declaration_range 93abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 94abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned First : 16; /* UINT */ 95abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Last : 16; /* UINT */ 96abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 97abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 98abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SEMANTIC_POSITION 0 99abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SEMANTIC_COLOR 1 100abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SEMANTIC_BCOLOR 2 /**< back-face color */ 101abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SEMANTIC_FOG 3 102abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SEMANTIC_PSIZE 4 103abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SEMANTIC_GENERIC 5 104271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca#define TGSI_SEMANTIC_NORMAL 6 105271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca#define TGSI_SEMANTIC_COUNT 7 /**< number of semantic values */ 106abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 107abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_declaration_semantic 108abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 109abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned SemanticName : 8; /* one of TGSI_SEMANTIC_ */ 110abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned SemanticIndex : 16; /* UINT */ 111abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 8; 112abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 113abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 114abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_IMM_FLOAT32 0 115abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 116abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_immediate 117abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 118abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_TOKEN_TYPE_IMMEDIATE */ 119abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Size : 8; /* UINT */ 120abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned DataType : 4; /* TGSI_IMM_ */ 121abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 15; 122abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 123abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 124abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 125abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_immediate_float32 126abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 127abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol float Float; 128abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 129abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 130abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 131abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_NV_vertex_program 132abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 133abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_ARL 0 134abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MOV 1 135abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_LIT 2 136abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RCP 3 137abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RSQ 4 138abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_EXP 5 139abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_LOG 6 140abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MUL 7 141abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_ADD 8 142abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DP3 9 143abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DP4 10 144abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DST 11 145abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MIN 12 146abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MAX 13 147abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SLT 14 148abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SGE 15 149abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MAD 16 150abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 151abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 152abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_ATI_fragment_shader 153abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 154abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SUB 17 155abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DOT3 TGSI_OPCODE_DP3 156abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DOT4 TGSI_OPCODE_DP4 157abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_LERP 18 158abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_CND 19 159abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_CND0 20 160abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DOT2ADD 21 161abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 162abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 163abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_EXT_vertex_shader 164abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 165abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_INDEX 22 166abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_NEGATE 23 167abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MADD TGSI_OPCODE_MAD 168abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_FRAC 24 169abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SETGE TGSI_OPCODE_SGE 170abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SETLT TGSI_OPCODE_SLT 171abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_CLAMP 25 172abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_FLOOR 26 173abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_ROUND 27 174abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_EXPBASE2 28 175abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_LOGBASE2 29 176abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_POWER 30 177abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RECIP TGSI_OPCODE_RCP 178abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RECIPSQRT TGSI_OPCODE_RSQ 179abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_CROSSPRODUCT 31 180abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MULTIPLYMATRIX 32 181abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 182abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 183abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_NV_vertex_program1_1 184abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 185abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_ABS 33 186abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RCC 34 187abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DPH 35 188abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 189abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 190abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_NV_fragment_program 191abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 192abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_COS 36 193abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DDX 37 194abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DDY 38 195abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_EX2 TGSI_OPCODE_EXPBASE2 196abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_FLR TGSI_OPCODE_FLOOR 197abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_FRC TGSI_OPCODE_FRAC 198abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_KILP 39 /* predicated kill */ 199abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_LG2 TGSI_OPCODE_LOGBASE2 200abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_LRP TGSI_OPCODE_LERP 201abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_PK2H 40 202abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_PK2US 41 203abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_PK4B 42 204abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_PK4UB 43 205abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_POW TGSI_OPCODE_POWER 206abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RFL 44 207abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SEQ 45 208abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SFL 46 209abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SGT 47 210abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SIN 48 211abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SLE 49 212abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SNE 50 213abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_STR 51 214abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_TEX 52 215abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_TXD 53 216bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXP 54 217bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_UP2H 55 218bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_UP2US 56 219bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_UP4B 57 220bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_UP4UB 58 221bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_X2D 59 222abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 223abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 224abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_NV_vertex_program2 225abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 226bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ARA 60 227bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ARR 61 228bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BRA 62 229bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CAL 63 230bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_RET 64 231bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_SSG 65 232abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 233abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 234abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_ARB_vertex_program 235abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 236837d49a84e24420dbc06924f4862a5f7dcf4caceMichal Krol#define TGSI_OPCODE_SWZ 118 237abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_XPD TGSI_OPCODE_CROSSPRODUCT 238abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 239abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 240abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_ARB_fragment_program 241abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 242bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CMP 66 2439804ab9accb3c6607c64a65bebe70124578240cdMichal Krol#define TGSI_OPCODE_KIL 116 /* conditional kill */ 244bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_SCS 67 245bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXB 68 246abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 247abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 248abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_NV_fragment_program_option 249abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 250abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* No new opcode */ 251abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 252abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 253abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_NV_fragment_program2 254abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 255bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NRM 69 256bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_DIV 70 257bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_DP2 71 258abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DP2A TGSI_OPCODE_DOT2ADD 259bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXL 72 260bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BRK 73 261bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_IF 74 262bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_LOOP 75 263bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_REP 76 264bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ELSE 77 265bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDIF 78 266bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDLOOP 79 267bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDREP 80 268abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 269abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 270abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_NV_vertex_program2_option 271abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 272abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 273abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 274abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_NV_vertex_program3 275abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 276bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_PUSHA 81 277bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_POPA 82 278abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 279abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 280abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_NV_gpu_program4 281abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 282bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CEIL 83 283bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_I2F 84 284bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NOT 85 285bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TRUNC 86 286bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_SHL 87 287bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_SHR 88 288bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_AND 89 289bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_OR 90 290bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_MOD 91 291bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_XOR 92 292bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_SAD 93 293bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXF 94 294bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXQ 95 295bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CONT 96 296abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 297abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 298abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_NV_vertex_program4 299abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 300abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* Same as GL_NV_gpu_program4 */ 301abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 302abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 303abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_NV_fragment_program4 304abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 305abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* Same as GL_NV_gpu_program4 */ 306abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 307abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 308abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GL_NV_geometry_program4 309abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 310abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* Same as GL_NV_gpu_program4 */ 311bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_EMIT 97 312bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDPRIM 98 313abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 314abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 315abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * GLSL 316abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 317bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BGNLOOP2 99 318bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BGNSUB 100 319bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDLOOP2 101 320bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDSUB 102 321abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_INT TGSI_OPCODE_TRUNC 322bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NOISE1 103 323bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NOISE2 104 324bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NOISE3 105 325bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NOISE4 106 326bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NOP 107 327abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 328abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 329abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * ps_1_1 330abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 3319804ab9accb3c6607c64a65bebe70124578240cdMichal Krol#define TGSI_OPCODE_TEXKILL TGSI_OPCODE_KIL 332abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 333abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 334abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * ps_1_2 335abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 336abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* CMP - use TGSI_OPCODE_CND0 */ 337abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 338abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 339abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * ps_1_3 340abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 341abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* CMP - use TGSI_OPCODE_CND0 */ 342abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 343abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 344abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * ps_1_4 345abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 346abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_TEXLD TGSI_OPCODE_TEX 347abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 348abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 349abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * ps_2_0 350abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 351abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_M4X4 TGSI_OPCODE_MULTIPLYMATRIX 352bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_M4X3 108 353bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_M3X4 109 354bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_M3X3 110 355bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_M3X2 111 356abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_CRS TGSI_OPCODE_XPD 357bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NRM4 112 358abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SINCOS TGSI_OPCODE_SCS 359abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_TEXLDB TGSI_OPCODE_TXB 360abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DP2ADD TGSI_OPCODE_DP2A 361abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 362abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 363abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * ps_2_x 364abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 365abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_CALL TGSI_OPCODE_CAL 366bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CALLNZ 113 367bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_IFC 114 368abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_BREAK TGSI_OPCODE_BRK 369bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BREAKC 115 370abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DSX TGSI_OPCODE_DDX 371abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DSY TGSI_OPCODE_DDY 372abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_TEXLDD TGSI_OPCODE_TXD 373abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 374abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 375abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * vs_1_1 376abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 377abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_EXPP TGSI_OPCODE_EXP 378abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_LOGP TGSI_OPCODE_LG2 379abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 380abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 381abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * vs_2_0 382abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 383abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SGN TGSI_OPCODE_SSG 384abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MOVA TGSI_OPCODE_ARR 385abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 386abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 387abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * vs_2_x 388abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 389abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 390bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_END 117 /* aka HALT */ 391abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 392837d49a84e24420dbc06924f4862a5f7dcf4caceMichal Krol#define TGSI_OPCODE_LAST 119 393abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 394abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SAT_NONE 0 /* do not saturate */ 395abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SAT_ZERO_ONE 1 /* clamp to [0,1] */ 396abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SAT_MINUS_PLUS_ONE 2 /* clamp to [-1,1] */ 397abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 398abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 399abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Opcode is the operation code to execute. A given operation defines the 400abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * semantics how the source registers (if any) are interpreted and what is 401abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * written to the destination registers (if any) as a result of execution. 402abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 403abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * NumDstRegs and NumSrcRegs is the number of destination and source registers, 404abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * respectively. For a given operation code, those numbers are fixed and are 405abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * present here only for convenience. 406abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 407abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Extended is TRUE, it is now executed. 408abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 409abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Saturate controls how are final results in destination registers modified. 410abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 411abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 412abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_instruction 413abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 414abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_TOKEN_TYPE_INSTRUCTION */ 415abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Size : 8; /* UINT */ 416abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Opcode : 8; /* TGSI_OPCODE_ */ 417abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Saturate : 2; /* TGSI_SAT_ */ 418abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned NumDstRegs : 2; /* UINT */ 419abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned NumSrcRegs : 4; /* UINT */ 420abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 3; 421abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 422abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 423abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 424abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 425abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_instruction::Extended is TRUE, tgsi_instruction_ext follows. 426abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 427abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, tgsi_instruction::NumDstRegs of tgsi_dst_register follow. 428abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 429abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, tgsi_instruction::NumSrcRegs of tgsi_src_register follow. 430abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 431abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * tgsi_instruction::Size contains the total number of words that make the 432abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * instruction, including the instruction word. 433abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 434abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 435abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_INSTRUCTION_EXT_TYPE_NV 0 436abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_INSTRUCTION_EXT_TYPE_LABEL 1 437abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_INSTRUCTION_EXT_TYPE_TEXTURE 2 438abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_INSTRUCTION_EXT_TYPE_PREDICATE 3 439abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 440abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_instruction_ext 441abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 442abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_INSTRUCTION_EXT_TYPE_ */ 443abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 27; 444abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 445abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 446abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 447abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 448abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_instruction_ext::Type is TGSI_INSTRUCTION_EXT_TYPE_NV, it should 449abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * be cast to tgsi_instruction_ext_nv. 450abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 451abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_instruction_ext::Type is TGSI_INSTRUCTION_EXT_TYPE_LABEL, it 452abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * should be cast to tgsi_instruction_ext_label. 453abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 454abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_instruction_ext::Type is TGSI_INSTRUCTION_EXT_TYPE_TEXTURE, it 455abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * should be cast to tgsi_instruction_ext_texture. 456abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 457abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_instruction_ext::Type is TGSI_INSTRUCTION_EXT_TYPE_PREDICATE, it 458abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * should be cast to tgsi_instruction_ext_predicate. 459abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 460abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_instruction_ext::Extended is TRUE, another tgsi_instruction_ext 461abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * follows. 462abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 463abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 464abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PRECISION_DEFAULT 0 465abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PRECISION_FLOAT32 1 466abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PRECISION_FLOAT16 2 467abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PRECISION_FIXED12 3 468abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 469abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_CC_GT 0 470abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_CC_EQ 1 471abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_CC_LT 2 472235981d8719aa7f67bfe547bf96e5343020e0373Michal Krol#define TGSI_CC_GE 3 473235981d8719aa7f67bfe547bf96e5343020e0373Michal Krol#define TGSI_CC_LE 4 474235981d8719aa7f67bfe547bf96e5343020e0373Michal Krol#define TGSI_CC_NE 5 475235981d8719aa7f67bfe547bf96e5343020e0373Michal Krol#define TGSI_CC_TR 6 476235981d8719aa7f67bfe547bf96e5343020e0373Michal Krol#define TGSI_CC_FL 7 477abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 478abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SWIZZLE_X 0 479abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SWIZZLE_Y 1 480abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SWIZZLE_Z 2 481abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SWIZZLE_W 3 482abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 483abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 484abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Precision controls the precision at which the operation should be executed. 485abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 486abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * CondDstUpdate enables condition code register writes. When this field is 487abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * TRUE, CondDstIndex specifies the index of the condition code register to 488abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * update. 489abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 490abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * CondFlowEnable enables conditional execution of the operation. When this 491abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * field is TRUE, CondFlowIndex specifies the index of the condition code 492abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * register to test against CondMask with component swizzle controled by 493abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * CondSwizzleX, CondSwizzleY, CondSwizzleZ and CondSwizzleW. If the test fails, 494abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * the operation is not executed. 495abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 496abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 497abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_instruction_ext_nv 498abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 499abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_INSTRUCTION_EXT_TYPE_NV */ 500abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Precision : 4; /* TGSI_PRECISION_ */ 501abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondDstIndex : 4; /* UINT */ 502abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondFlowIndex : 4; /* UINT */ 503abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondMask : 4; /* TGSI_CC_ */ 504abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondSwizzleX : 2; /* TGSI_SWIZZLE_ */ 505abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondSwizzleY : 2; /* TGSI_SWIZZLE_ */ 506abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondSwizzleZ : 2; /* TGSI_SWIZZLE_ */ 507abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondSwizzleW : 2; /* TGSI_SWIZZLE_ */ 508abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondDstUpdate : 1; /* BOOL */ 509abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondFlowEnable : 1; /* BOOL */ 510abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 1; 511abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 512abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 513abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 514abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_instruction_ext_label 515abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 516abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_INSTRUCTION_EXT_TYPE_LABEL */ 517abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Label : 24; /* UINT */ 518abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 3; 519abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 520abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 521abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 522abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_UNKNOWN 0 523abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_1D 1 524abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_2D 2 525abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_3D 3 526abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_CUBE 4 527abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_RECT 5 528abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_SHADOW1D 6 529abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_SHADOW2D 7 530abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_SHADOWRECT 8 5313d5dcc2203f5018863ad51958871542696e1ed1bMichal Krol#define TGSI_TEXTURE_COUNT 9 532abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 533abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_instruction_ext_texture 534abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 535abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_INSTRUCTION_EXT_TYPE_TEXTURE */ 536abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Texture : 8; /* TGSI_TEXTURE_ */ 537abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 19; 538abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 539abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 540abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 541abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_instruction_ext_predicate 542abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 543abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_INSTRUCTION_EXT_TYPE_PREDICATE */ 544abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned PredDstIndex : 4; /* UINT */ 545abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned PredWriteMask : 4; /* TGSI_WRITEMASK_ */ 546abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 19; 547abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 548abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 549abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 550abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 551abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * File specifies the register array to access. 552abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 553abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Index specifies the element number of a register in the register file. 554abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 555abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Indirect is TRUE, Index should be offset by the X component of a source 556abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * register that follows. The register can be now fetched into local storage 557abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * for further processing. 558abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 559abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Negate is TRUE, all components of the fetched register are negated. 560abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 561abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * The fetched register components are swizzled according to SwizzleX, SwizzleY, 562abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * SwizzleZ and SwizzleW. 563abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 564abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Extended is TRUE, any further modifications to the source register are 565abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * made to this temporary storage. 566abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 567abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 568abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_src_register 569abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 570abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned File : 4; /* TGSI_FILE_ */ 571abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned SwizzleX : 2; /* TGSI_SWIZZLE_ */ 572abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned SwizzleY : 2; /* TGSI_SWIZZLE_ */ 573abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned SwizzleZ : 2; /* TGSI_SWIZZLE_ */ 574abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned SwizzleW : 2; /* TGSI_SWIZZLE_ */ 575abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Negate : 1; /* BOOL */ 576abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Indirect : 1; /* BOOL */ 577abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Dimension : 1; /* BOOL */ 578abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol int Index : 16; /* SINT */ 579abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 580abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 581abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 582abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 583abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_src_register::Extended is TRUE, tgsi_src_register_ext follows. 584abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 585abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, if tgsi_src_register::Indirect is TRUE, another tgsi_src_register 586abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * follows. 587abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 588abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, if tgsi_src_register::Dimension is TRUE, tgsi_dimension follows. 589abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 590abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 591abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SRC_REGISTER_EXT_TYPE_SWZ 0 592abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SRC_REGISTER_EXT_TYPE_MOD 1 593abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 594abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_src_register_ext 595abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 596abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_SRC_REGISTER_EXT_TYPE_ */ 597abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 27; 598abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 599abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 600abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 601abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 602abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_src_register_ext::Type is TGSI_SRC_REGISTER_EXT_TYPE_SWZ, 603635341ec5b06b3db453e88f44663d2ad711c3f7dBrian * it should be cast to tgsi_src_register_ext_swz. 604abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 605abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_src_register_ext::Type is TGSI_SRC_REGISTER_EXT_TYPE_MOD, 606abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * it should be cast to tgsi_src_register_ext_mod. 607abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 608abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_dst_register_ext::Extended is TRUE, another tgsi_dst_register_ext 609abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * follows. 610abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 611abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 612abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_EXTSWIZZLE_X TGSI_SWIZZLE_X 613abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_EXTSWIZZLE_Y TGSI_SWIZZLE_Y 614abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_EXTSWIZZLE_Z TGSI_SWIZZLE_Z 615abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_EXTSWIZZLE_W TGSI_SWIZZLE_W 616abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_EXTSWIZZLE_ZERO 4 617abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_EXTSWIZZLE_ONE 5 618abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 619abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 620abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * ExtSwizzleX, ExtSwizzleY, ExtSwizzleZ and ExtSwizzleW swizzle the source 621abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * register in an extended manner. 622abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 623abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * NegateX, NegateY, NegateZ and NegateW negate individual components of the 624abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * source register. 625837d49a84e24420dbc06924f4862a5f7dcf4caceMichal Krol * 626837d49a84e24420dbc06924f4862a5f7dcf4caceMichal Krol * NOTE: To simplify matter, if this token is present, the corresponding Swizzle 627837d49a84e24420dbc06924f4862a5f7dcf4caceMichal Krol * and Negate fields in tgsi_src_register should be set to X,Y,Z,W 628837d49a84e24420dbc06924f4862a5f7dcf4caceMichal Krol * and FALSE, respectively. 629abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 630abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 631abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_src_register_ext_swz 632abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 633abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_SRC_REGISTER_EXT_TYPE_SWZ */ 634abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned ExtSwizzleX : 4; /* TGSI_EXTSWIZZLE_ */ 635abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned ExtSwizzleY : 4; /* TGSI_EXTSWIZZLE_ */ 636abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned ExtSwizzleZ : 4; /* TGSI_EXTSWIZZLE_ */ 637abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned ExtSwizzleW : 4; /* TGSI_EXTSWIZZLE_ */ 638abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned NegateX : 1; /* BOOL */ 639abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned NegateY : 1; /* BOOL */ 640abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned NegateZ : 1; /* BOOL */ 641abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned NegateW : 1; /* BOOL */ 642ba75e82b6ebaf88dd2e4a8f764b2d296d715bf8aMichal Krol unsigned Padding : 7; 643abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 644abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 645abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 646abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/** 647abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Extra src register modifiers 648abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 649abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Complement is TRUE, the source register is modified by subtracting it 650abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * from 1.0. 651abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 652abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Bias is TRUE, the source register is modified by subtracting 0.5 from it. 653abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 654abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Scale2X is TRUE, the source register is modified by multiplying it by 2.0. 655abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 656abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Absolute is TRUE, the source register is modified by removing the sign. 657abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 658abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Negate is TRUE, the source register is modified by negating it. 659abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 660abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 661abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_src_register_ext_mod 662abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 663abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_SRC_REGISTER_EXT_TYPE_MOD */ 664abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Complement : 1; /* BOOL */ 665abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Bias : 1; /* BOOL */ 666abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Scale2X : 1; /* BOOL */ 667abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Absolute : 1; /* BOOL */ 668abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Negate : 1; /* BOOL */ 669abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 22; 670abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 671abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 672abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 673abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_dimension 674abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 675abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Indirect : 1; /* BOOL */ 676abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Dimension : 1; /* BOOL */ 677abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 13; 678abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol int Index : 16; /* SINT */ 679abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 680abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 681abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 682abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_dst_register 683abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 684abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned File : 4; /* TGSI_FILE_ */ 685abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned WriteMask : 4; /* TGSI_WRITEMASK_ */ 686abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Indirect : 1; /* BOOL */ 687abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Dimension : 1; /* BOOL */ 688abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol int Index : 16; /* SINT */ 689abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 5; 690abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 691abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 692abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 693abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 694abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_dst_register::Extended is TRUE, tgsi_dst_register_ext follows. 695abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 696abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, if tgsi_dst_register::Indirect is TRUE, tgsi_src_register follows. 697abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 698abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 699abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_DST_REGISTER_EXT_TYPE_CONDCODE 0 700abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_DST_REGISTER_EXT_TYPE_MODULATE 1 701abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_DST_REGISTER_EXT_TYPE_PREDICATE 2 702abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 703abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_dst_register_ext 704abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 705abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_DST_REGISTER_EXT_TYPE_ */ 706abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 27; 707abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 708abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 709abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 710abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/** 711abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Extra destination register modifiers 712abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 713abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_dst_register_ext::Type is TGSI_DST_REGISTER_EXT_TYPE_CONDCODE, 714abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * it should be cast to tgsi_dst_register_ext_condcode. 715abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 716abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_dst_register_ext::Type is TGSI_DST_REGISTER_EXT_TYPE_MODULATE, 717abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * it should be cast to tgsi_dst_register_ext_modulate. 718abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 719abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_dst_register_ext::Type is TGSI_DST_REGISTER_EXT_TYPE_PREDICATE, 720abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * it should be cast to tgsi_dst_register_ext_predicate. 721abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 722abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If tgsi_dst_register_ext::Extended is TRUE, another tgsi_dst_register_ext 723abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * follows. 724abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 725abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_dst_register_ext_concode 726abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 727abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_DST_REGISTER_EXT_TYPE_CONDCODE */ 728abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondMask : 4; /* TGSI_CC_ */ 729abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondSwizzleX : 2; /* TGSI_SWIZZLE_ */ 730abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondSwizzleY : 2; /* TGSI_SWIZZLE_ */ 731abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondSwizzleZ : 2; /* TGSI_SWIZZLE_ */ 732abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondSwizzleW : 2; /* TGSI_SWIZZLE_ */ 733abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned CondSrcIndex : 4; /* UINT */ 734abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 11; 735abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 736abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 737abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 738abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_MODULATE_1X 0 739abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_MODULATE_2X 1 740abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_MODULATE_4X 2 741abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_MODULATE_8X 3 742abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_MODULATE_HALF 4 743abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_MODULATE_QUARTER 5 744abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_MODULATE_EIGHTH 6 745f5c51ebd2afdfc87de40dca115526a5e0f6ab115Michal Krol#define TGSI_MODULATE_COUNT 7 746abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 747abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_dst_register_ext_modulate 748abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 749abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_DST_REGISTER_EXT_TYPE_MODULATE */ 750abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Modulate : 4; /* TGSI_MODULATE_ */ 751abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 23; 752abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 753abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 754abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 755abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/* 756abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Currently, the following constraints apply. 757abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * 758abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * - PredSwizzleXYZW is either set to identity or replicate. 759abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * - PredSrcIndex is 0. 760abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */ 761abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 762abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_dst_register_ext_predicate 763abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{ 764abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Type : 4; /* TGSI_DST_REGISTER_EXT_TYPE_PREDICATE */ 765abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned PredSwizzleX : 2; /* TGSI_SWIZZLE_ */ 766abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned PredSwizzleY : 2; /* TGSI_SWIZZLE_ */ 767abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned PredSwizzleZ : 2; /* TGSI_SWIZZLE_ */ 768abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned PredSwizzleW : 2; /* TGSI_SWIZZLE_ */ 769abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned PredSrcIndex : 4; /* UINT */ 770abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Negate : 1; /* BOOL */ 771abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Padding : 14; 772abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol unsigned Extended : 1; /* BOOL */ 773abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol}; 774abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 775abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 77694c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca#ifdef __cplusplus 77794c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca} 77894c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca#endif 779abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 78094c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca#endif /* TGSI_TOKEN_H */ 781abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol 782