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