Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
  4.  * Copyright 2009-2010 VMware, Inc.
  5.  * All Rights Reserved.
  6.  *
  7.  * Permission is hereby granted, free of charge, to any person obtaining a
  8.  * copy of this software and associated documentation files (the
  9.  * "Software"), to deal in the Software without restriction, including
  10.  * without limitation the rights to use, copy, modify, merge, publish,
  11.  * distribute, sub license, and/or sell copies of the Software, and to
  12.  * permit persons to whom the Software is furnished to do so, subject to
  13.  * the following conditions:
  14.  *
  15.  * The above copyright notice and this permission notice (including the
  16.  * next paragraph) shall be included in all copies or substantial portions
  17.  * of the Software.
  18.  *
  19.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  20.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  21.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  22.  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
  23.  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  24.  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  25.  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  26.  *
  27.  **************************************************************************/
  28.  
  29. #ifndef P_SHADER_TOKENS_H
  30. #define P_SHADER_TOKENS_H
  31.  
  32. #ifdef __cplusplus
  33. extern "C" {
  34. #endif
  35.  
  36.  
  37. struct tgsi_header
  38. {
  39.    unsigned HeaderSize : 8;
  40.    unsigned BodySize   : 24;
  41. };
  42.  
  43. #define TGSI_PROCESSOR_FRAGMENT  0
  44. #define TGSI_PROCESSOR_VERTEX    1
  45. #define TGSI_PROCESSOR_GEOMETRY  2
  46. #define TGSI_PROCESSOR_COMPUTE   3
  47.  
  48. struct tgsi_processor
  49. {
  50.    unsigned Processor  : 4;  /* TGSI_PROCESSOR_ */
  51.    unsigned Padding    : 28;
  52. };
  53.  
  54. #define TGSI_TOKEN_TYPE_DECLARATION    0
  55. #define TGSI_TOKEN_TYPE_IMMEDIATE      1
  56. #define TGSI_TOKEN_TYPE_INSTRUCTION    2
  57. #define TGSI_TOKEN_TYPE_PROPERTY       3
  58.  
  59. struct tgsi_token
  60. {
  61.    unsigned Type       : 4;  /**< TGSI_TOKEN_TYPE_x */
  62.    unsigned NrTokens   : 8;  /**< UINT */
  63.    unsigned Padding    : 20;
  64. };
  65.  
  66. enum tgsi_file_type {
  67.    TGSI_FILE_NULL                =0,
  68.    TGSI_FILE_CONSTANT            =1,
  69.    TGSI_FILE_INPUT               =2,
  70.    TGSI_FILE_OUTPUT              =3,
  71.    TGSI_FILE_TEMPORARY           =4,
  72.    TGSI_FILE_SAMPLER             =5,
  73.    TGSI_FILE_ADDRESS             =6,
  74.    TGSI_FILE_IMMEDIATE           =7,
  75.    TGSI_FILE_PREDICATE           =8,
  76.    TGSI_FILE_SYSTEM_VALUE        =9,
  77.    TGSI_FILE_RESOURCE            =10,
  78.    TGSI_FILE_SAMPLER_VIEW        =11,
  79.    TGSI_FILE_COUNT      /**< how many TGSI_FILE_ types */
  80. };
  81.  
  82.  
  83. #define TGSI_WRITEMASK_NONE     0x00
  84. #define TGSI_WRITEMASK_X        0x01
  85. #define TGSI_WRITEMASK_Y        0x02
  86. #define TGSI_WRITEMASK_XY       0x03
  87. #define TGSI_WRITEMASK_Z        0x04
  88. #define TGSI_WRITEMASK_XZ       0x05
  89. #define TGSI_WRITEMASK_YZ       0x06
  90. #define TGSI_WRITEMASK_XYZ      0x07
  91. #define TGSI_WRITEMASK_W        0x08
  92. #define TGSI_WRITEMASK_XW       0x09
  93. #define TGSI_WRITEMASK_YW       0x0A
  94. #define TGSI_WRITEMASK_XYW      0x0B
  95. #define TGSI_WRITEMASK_ZW       0x0C
  96. #define TGSI_WRITEMASK_XZW      0x0D
  97. #define TGSI_WRITEMASK_YZW      0x0E
  98. #define TGSI_WRITEMASK_XYZW     0x0F
  99.  
  100. #define TGSI_INTERPOLATE_CONSTANT      0
  101. #define TGSI_INTERPOLATE_LINEAR        1
  102. #define TGSI_INTERPOLATE_PERSPECTIVE   2
  103. #define TGSI_INTERPOLATE_COLOR         3 /* special color case for smooth/flat */
  104. #define TGSI_INTERPOLATE_COUNT         4
  105.  
  106. #define TGSI_CYLINDRICAL_WRAP_X (1 << 0)
  107. #define TGSI_CYLINDRICAL_WRAP_Y (1 << 1)
  108. #define TGSI_CYLINDRICAL_WRAP_Z (1 << 2)
  109. #define TGSI_CYLINDRICAL_WRAP_W (1 << 3)
  110.  
  111. struct tgsi_declaration
  112. {
  113.    unsigned Type        : 4;  /**< TGSI_TOKEN_TYPE_DECLARATION */
  114.    unsigned NrTokens    : 8;  /**< UINT */
  115.    unsigned File        : 4;  /**< one of TGSI_FILE_x */
  116.    unsigned UsageMask   : 4;  /**< bitmask of TGSI_WRITEMASK_x flags */
  117.    unsigned Dimension   : 1;  /**< any extra dimension info? */
  118.    unsigned Semantic    : 1;  /**< BOOL, any semantic info? */
  119.    unsigned Interpolate : 1;  /**< any interpolation info? */
  120.    unsigned Invariant   : 1;  /**< invariant optimization? */
  121.    unsigned Local       : 1;  /**< optimize as subroutine local variable? */
  122.    unsigned Array       : 1;  /**< extra array info? */
  123.    unsigned Padding     : 6;
  124. };
  125.  
  126. struct tgsi_declaration_range
  127. {
  128.    unsigned First   : 16; /**< UINT */
  129.    unsigned Last    : 16; /**< UINT */
  130. };
  131.  
  132. struct tgsi_declaration_dimension
  133. {
  134.    unsigned Index2D:16; /**< UINT */
  135.    unsigned Padding:16;
  136. };
  137.  
  138. struct tgsi_declaration_interp
  139. {
  140.    unsigned Interpolate : 4;   /**< one of TGSI_INTERPOLATE_x */
  141.    unsigned Centroid    : 1;   /**< centroid sampling? */
  142.    unsigned CylindricalWrap:4; /**< TGSI_CYLINDRICAL_WRAP_x flags */
  143.    unsigned Padding     : 23;
  144. };
  145.  
  146. #define TGSI_SEMANTIC_POSITION   0
  147. #define TGSI_SEMANTIC_COLOR      1
  148. #define TGSI_SEMANTIC_BCOLOR     2  /**< back-face color */
  149. #define TGSI_SEMANTIC_FOG        3
  150. #define TGSI_SEMANTIC_PSIZE      4
  151. #define TGSI_SEMANTIC_GENERIC    5
  152. #define TGSI_SEMANTIC_NORMAL     6
  153. #define TGSI_SEMANTIC_FACE       7
  154. #define TGSI_SEMANTIC_EDGEFLAG   8
  155. #define TGSI_SEMANTIC_PRIMID     9
  156. #define TGSI_SEMANTIC_INSTANCEID 10
  157. #define TGSI_SEMANTIC_VERTEXID   11
  158. #define TGSI_SEMANTIC_STENCIL    12
  159. #define TGSI_SEMANTIC_CLIPDIST   13
  160. #define TGSI_SEMANTIC_CLIPVERTEX 14
  161. #define TGSI_SEMANTIC_GRID_SIZE  15 /**< grid size in blocks */
  162. #define TGSI_SEMANTIC_BLOCK_ID   16 /**< id of the current block */
  163. #define TGSI_SEMANTIC_BLOCK_SIZE 17 /**< block size in threads */
  164. #define TGSI_SEMANTIC_THREAD_ID  18 /**< block-relative id of the current thread */
  165. #define TGSI_SEMANTIC_TEXCOORD   19 /**< texture or sprite coordinates */
  166. #define TGSI_SEMANTIC_PCOORD     20 /**< point sprite coordinate */
  167. #define TGSI_SEMANTIC_VIEWPORT_INDEX 21 /**< viewport index */
  168. #define TGSI_SEMANTIC_LAYER      22 /**< layer (rendertarget index) */
  169. #define TGSI_SEMANTIC_CULLDIST   23
  170. #define TGSI_SEMANTIC_COUNT      24 /**< number of semantic values */
  171.  
  172. struct tgsi_declaration_semantic
  173. {
  174.    unsigned Name           : 8;  /**< one of TGSI_SEMANTIC_x */
  175.    unsigned Index          : 16; /**< UINT */
  176.    unsigned Padding        : 8;
  177. };
  178.  
  179. struct tgsi_declaration_resource {
  180.    unsigned Resource    : 8; /**< one of TGSI_TEXTURE_ */
  181.    unsigned Raw         : 1;
  182.    unsigned Writable    : 1;
  183.    unsigned Padding     : 22;
  184. };
  185.  
  186. struct tgsi_declaration_sampler_view {
  187.    unsigned Resource    : 8; /**< one of TGSI_TEXTURE_ */
  188.    unsigned ReturnTypeX : 6; /**< one of enum pipe_type */
  189.    unsigned ReturnTypeY : 6; /**< one of enum pipe_type */
  190.    unsigned ReturnTypeZ : 6; /**< one of enum pipe_type */
  191.    unsigned ReturnTypeW : 6; /**< one of enum pipe_type */
  192. };
  193.  
  194. struct tgsi_declaration_array {
  195.    unsigned ArrayID : 10;
  196.    unsigned Padding : 22;
  197. };
  198.  
  199. /*
  200.  * Special resources that don't need to be declared.  They map to the
  201.  * GLOBAL/LOCAL/PRIVATE/INPUT compute memory spaces.
  202.  */
  203. #define TGSI_RESOURCE_GLOBAL    0x7fff
  204. #define TGSI_RESOURCE_LOCAL     0x7ffe
  205. #define TGSI_RESOURCE_PRIVATE   0x7ffd
  206. #define TGSI_RESOURCE_INPUT     0x7ffc
  207.  
  208. #define TGSI_IMM_FLOAT32   0
  209. #define TGSI_IMM_UINT32    1
  210. #define TGSI_IMM_INT32     2
  211.  
  212. struct tgsi_immediate
  213. {
  214.    unsigned Type       : 4;  /**< TGSI_TOKEN_TYPE_IMMEDIATE */
  215.    unsigned NrTokens   : 14; /**< UINT */
  216.    unsigned DataType   : 4;  /**< one of TGSI_IMM_x */
  217.    unsigned Padding    : 10;
  218. };
  219.  
  220. union tgsi_immediate_data
  221. {
  222.    float Float;
  223.    unsigned Uint;
  224.    int Int;
  225. };
  226.  
  227. #define TGSI_PROPERTY_GS_INPUT_PRIM          0
  228. #define TGSI_PROPERTY_GS_OUTPUT_PRIM         1
  229. #define TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES 2
  230. #define TGSI_PROPERTY_FS_COORD_ORIGIN        3
  231. #define TGSI_PROPERTY_FS_COORD_PIXEL_CENTER  4
  232. #define TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS 5
  233. #define TGSI_PROPERTY_FS_DEPTH_LAYOUT        6
  234. #define TGSI_PROPERTY_VS_PROHIBIT_UCPS       7
  235. #define TGSI_PROPERTY_COUNT                  8
  236.  
  237. struct tgsi_property {
  238.    unsigned Type         : 4;  /**< TGSI_TOKEN_TYPE_PROPERTY */
  239.    unsigned NrTokens     : 8;  /**< UINT */
  240.    unsigned PropertyName : 8;  /**< one of TGSI_PROPERTY */
  241.    unsigned Padding      : 12;
  242. };
  243.  
  244. #define TGSI_FS_COORD_ORIGIN_UPPER_LEFT 0
  245. #define TGSI_FS_COORD_ORIGIN_LOWER_LEFT 1
  246.  
  247. #define TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER 0
  248. #define TGSI_FS_COORD_PIXEL_CENTER_INTEGER 1
  249.  
  250. #define TGSI_FS_DEPTH_LAYOUT_NONE         0
  251. #define TGSI_FS_DEPTH_LAYOUT_ANY          1
  252. #define TGSI_FS_DEPTH_LAYOUT_GREATER      2
  253. #define TGSI_FS_DEPTH_LAYOUT_LESS         3
  254. #define TGSI_FS_DEPTH_LAYOUT_UNCHANGED    4
  255.  
  256.  
  257. struct tgsi_property_data {
  258.    unsigned Data;
  259. };
  260.  
  261. /* TGSI opcodes.  
  262.  *
  263.  * For more information on semantics of opcodes and
  264.  * which APIs are known to use which opcodes, see
  265.  * gallium/docs/source/tgsi.rst
  266.  */
  267. #define TGSI_OPCODE_ARL                 0
  268. #define TGSI_OPCODE_MOV                 1
  269. #define TGSI_OPCODE_LIT                 2
  270. #define TGSI_OPCODE_RCP                 3
  271. #define TGSI_OPCODE_RSQ                 4
  272. #define TGSI_OPCODE_EXP                 5
  273. #define TGSI_OPCODE_LOG                 6
  274. #define TGSI_OPCODE_MUL                 7
  275. #define TGSI_OPCODE_ADD                 8
  276. #define TGSI_OPCODE_DP3                 9
  277. #define TGSI_OPCODE_DP4                 10
  278. #define TGSI_OPCODE_DST                 11
  279. #define TGSI_OPCODE_MIN                 12
  280. #define TGSI_OPCODE_MAX                 13
  281. #define TGSI_OPCODE_SLT                 14
  282. #define TGSI_OPCODE_SGE                 15
  283. #define TGSI_OPCODE_MAD                 16
  284. #define TGSI_OPCODE_SUB                 17
  285. #define TGSI_OPCODE_LRP                 18
  286. #define TGSI_OPCODE_CND                 19
  287. #define TGSI_OPCODE_SQRT                20
  288. #define TGSI_OPCODE_DP2A                21
  289.                                 /* gap */
  290. #define TGSI_OPCODE_FRC                 24
  291. #define TGSI_OPCODE_CLAMP               25
  292. #define TGSI_OPCODE_FLR                 26
  293. #define TGSI_OPCODE_ROUND               27
  294. #define TGSI_OPCODE_EX2                 28
  295. #define TGSI_OPCODE_LG2                 29
  296. #define TGSI_OPCODE_POW                 30
  297. #define TGSI_OPCODE_XPD                 31
  298.                                 /* gap */
  299. #define TGSI_OPCODE_ABS                 33
  300. #define TGSI_OPCODE_RCC                 34
  301. #define TGSI_OPCODE_DPH                 35
  302. #define TGSI_OPCODE_COS                 36
  303. #define TGSI_OPCODE_DDX                 37
  304. #define TGSI_OPCODE_DDY                 38
  305. #define TGSI_OPCODE_KILL                39 /* unconditional */
  306. #define TGSI_OPCODE_PK2H                40
  307. #define TGSI_OPCODE_PK2US               41
  308. #define TGSI_OPCODE_PK4B                42
  309. #define TGSI_OPCODE_PK4UB               43
  310. #define TGSI_OPCODE_RFL                 44
  311. #define TGSI_OPCODE_SEQ                 45
  312. #define TGSI_OPCODE_SFL                 46
  313. #define TGSI_OPCODE_SGT                 47
  314. #define TGSI_OPCODE_SIN                 48
  315. #define TGSI_OPCODE_SLE                 49
  316. #define TGSI_OPCODE_SNE                 50
  317. #define TGSI_OPCODE_STR                 51
  318. #define TGSI_OPCODE_TEX                 52
  319. #define TGSI_OPCODE_TXD                 53
  320. #define TGSI_OPCODE_TXP                 54
  321. #define TGSI_OPCODE_UP2H                55
  322. #define TGSI_OPCODE_UP2US               56
  323. #define TGSI_OPCODE_UP4B                57
  324. #define TGSI_OPCODE_UP4UB               58
  325. #define TGSI_OPCODE_X2D                 59
  326. #define TGSI_OPCODE_ARA                 60
  327. #define TGSI_OPCODE_ARR                 61
  328. #define TGSI_OPCODE_BRA                 62
  329. #define TGSI_OPCODE_CAL                 63
  330. #define TGSI_OPCODE_RET                 64
  331. #define TGSI_OPCODE_SSG                 65 /* SGN */
  332. #define TGSI_OPCODE_CMP                 66
  333. #define TGSI_OPCODE_SCS                 67
  334. #define TGSI_OPCODE_TXB                 68
  335. #define TGSI_OPCODE_NRM                 69
  336. #define TGSI_OPCODE_DIV                 70
  337. #define TGSI_OPCODE_DP2                 71
  338. #define TGSI_OPCODE_TXL                 72
  339. #define TGSI_OPCODE_BRK                 73
  340. #define TGSI_OPCODE_IF                  74
  341. #define TGSI_OPCODE_UIF                 75
  342. #define TGSI_OPCODE_ELSE                77
  343. #define TGSI_OPCODE_ENDIF               78
  344.                                 /* gap */
  345. #define TGSI_OPCODE_PUSHA               81
  346. #define TGSI_OPCODE_POPA                82
  347. #define TGSI_OPCODE_CEIL                83
  348. #define TGSI_OPCODE_I2F                 84
  349. #define TGSI_OPCODE_NOT                 85
  350. #define TGSI_OPCODE_TRUNC               86
  351. #define TGSI_OPCODE_SHL                 87
  352.                                 /* gap */
  353. #define TGSI_OPCODE_AND                 89
  354. #define TGSI_OPCODE_OR                  90
  355. #define TGSI_OPCODE_MOD                 91
  356. #define TGSI_OPCODE_XOR                 92
  357. #define TGSI_OPCODE_SAD                 93
  358. #define TGSI_OPCODE_TXF                 94
  359. #define TGSI_OPCODE_TXQ                 95
  360. #define TGSI_OPCODE_CONT                96
  361. #define TGSI_OPCODE_EMIT                97
  362. #define TGSI_OPCODE_ENDPRIM             98
  363. #define TGSI_OPCODE_BGNLOOP             99
  364. #define TGSI_OPCODE_BGNSUB              100
  365. #define TGSI_OPCODE_ENDLOOP             101
  366. #define TGSI_OPCODE_ENDSUB              102
  367. #define TGSI_OPCODE_TXQ_LZ              103 /* TXQ for mipmap level 0 */
  368.                                 /* gap */
  369. #define TGSI_OPCODE_NOP                 107
  370.                                 /* gap */
  371. #define TGSI_OPCODE_NRM4                112
  372. #define TGSI_OPCODE_CALLNZ              113
  373.                                 /* gap */
  374. #define TGSI_OPCODE_BREAKC              115
  375. #define TGSI_OPCODE_KILL_IF             116  /* conditional kill */
  376. #define TGSI_OPCODE_END                 117  /* aka HALT */
  377.                                 /* gap */
  378. #define TGSI_OPCODE_F2I                 119
  379. #define TGSI_OPCODE_IDIV                120
  380. #define TGSI_OPCODE_IMAX                121
  381. #define TGSI_OPCODE_IMIN                122
  382. #define TGSI_OPCODE_INEG                123
  383. #define TGSI_OPCODE_ISGE                124
  384. #define TGSI_OPCODE_ISHR                125
  385. #define TGSI_OPCODE_ISLT                126
  386. #define TGSI_OPCODE_F2U                 127
  387. #define TGSI_OPCODE_U2F                 128
  388. #define TGSI_OPCODE_UADD                129
  389. #define TGSI_OPCODE_UDIV                130
  390. #define TGSI_OPCODE_UMAD                131
  391. #define TGSI_OPCODE_UMAX                132
  392. #define TGSI_OPCODE_UMIN                133
  393. #define TGSI_OPCODE_UMOD                134
  394. #define TGSI_OPCODE_UMUL                135
  395. #define TGSI_OPCODE_USEQ                136
  396. #define TGSI_OPCODE_USGE                137
  397. #define TGSI_OPCODE_USHR                138
  398. #define TGSI_OPCODE_USLT                139
  399. #define TGSI_OPCODE_USNE                140
  400. #define TGSI_OPCODE_SWITCH              141
  401. #define TGSI_OPCODE_CASE                142
  402. #define TGSI_OPCODE_DEFAULT             143
  403. #define TGSI_OPCODE_ENDSWITCH           144
  404.  
  405. /* resource related opcodes */
  406. #define TGSI_OPCODE_SAMPLE              145
  407. #define TGSI_OPCODE_SAMPLE_I            146
  408. #define TGSI_OPCODE_SAMPLE_I_MS         147
  409. #define TGSI_OPCODE_SAMPLE_B            148
  410. #define TGSI_OPCODE_SAMPLE_C            149
  411. #define TGSI_OPCODE_SAMPLE_C_LZ         150
  412. #define TGSI_OPCODE_SAMPLE_D            151
  413. #define TGSI_OPCODE_SAMPLE_L            152
  414. #define TGSI_OPCODE_GATHER4             153
  415. #define TGSI_OPCODE_SVIEWINFO           154
  416. #define TGSI_OPCODE_SAMPLE_POS          155
  417. #define TGSI_OPCODE_SAMPLE_INFO         156
  418.  
  419. #define TGSI_OPCODE_UARL                157
  420. #define TGSI_OPCODE_UCMP                158
  421. #define TGSI_OPCODE_IABS                159
  422. #define TGSI_OPCODE_ISSG                160
  423.  
  424. #define TGSI_OPCODE_LOAD                161
  425. #define TGSI_OPCODE_STORE               162
  426.  
  427. #define TGSI_OPCODE_MFENCE              163
  428. #define TGSI_OPCODE_LFENCE              164
  429. #define TGSI_OPCODE_SFENCE              165
  430. #define TGSI_OPCODE_BARRIER             166
  431.  
  432. #define TGSI_OPCODE_ATOMUADD            167
  433. #define TGSI_OPCODE_ATOMXCHG            168
  434. #define TGSI_OPCODE_ATOMCAS             169
  435. #define TGSI_OPCODE_ATOMAND             170
  436. #define TGSI_OPCODE_ATOMOR              171
  437. #define TGSI_OPCODE_ATOMXOR             172
  438. #define TGSI_OPCODE_ATOMUMIN            173
  439. #define TGSI_OPCODE_ATOMUMAX            174
  440. #define TGSI_OPCODE_ATOMIMIN            175
  441. #define TGSI_OPCODE_ATOMIMAX            176
  442.  
  443. /* to be used for shadow cube map compares */
  444. #define TGSI_OPCODE_TEX2                177
  445. #define TGSI_OPCODE_TXB2                178
  446. #define TGSI_OPCODE_TXL2                179
  447.  
  448. #define TGSI_OPCODE_LAST                180
  449.  
  450. #define TGSI_SAT_NONE            0  /* do not saturate */
  451. #define TGSI_SAT_ZERO_ONE        1  /* clamp to [0,1] */
  452. #define TGSI_SAT_MINUS_PLUS_ONE  2  /* clamp to [-1,1] */
  453.  
  454. /**
  455.  * Opcode is the operation code to execute. A given operation defines the
  456.  * semantics how the source registers (if any) are interpreted and what is
  457.  * written to the destination registers (if any) as a result of execution.
  458.  *
  459.  * NumDstRegs and NumSrcRegs is the number of destination and source registers,
  460.  * respectively. For a given operation code, those numbers are fixed and are
  461.  * present here only for convenience.
  462.  *
  463.  * If Predicate is TRUE, tgsi_instruction_predicate token immediately follows.
  464.  *
  465.  * Saturate controls how are final results in destination registers modified.
  466.  */
  467.  
  468. struct tgsi_instruction
  469. {
  470.    unsigned Type       : 4;  /* TGSI_TOKEN_TYPE_INSTRUCTION */
  471.    unsigned NrTokens   : 8;  /* UINT */
  472.    unsigned Opcode     : 8;  /* TGSI_OPCODE_ */
  473.    unsigned Saturate   : 2;  /* TGSI_SAT_ */
  474.    unsigned NumDstRegs : 2;  /* UINT */
  475.    unsigned NumSrcRegs : 4;  /* UINT */
  476.    unsigned Predicate  : 1;  /* BOOL */
  477.    unsigned Label      : 1;
  478.    unsigned Texture    : 1;
  479.    unsigned Padding    : 1;
  480. };
  481.  
  482. /*
  483.  * If tgsi_instruction::Label is TRUE, tgsi_instruction_label follows.
  484.  *
  485.  * If tgsi_instruction::Texture is TRUE, tgsi_instruction_texture follows.
  486.  *   if texture instruction has a number of offsets,
  487.  *   then tgsi_instruction::Texture::NumOffset of tgsi_texture_offset follow.
  488.  *
  489.  * Then, tgsi_instruction::NumDstRegs of tgsi_dst_register follow.
  490.  *
  491.  * Then, tgsi_instruction::NumSrcRegs of tgsi_src_register follow.
  492.  *
  493.  * tgsi_instruction::NrTokens contains the total number of words that make the
  494.  * instruction, including the instruction word.
  495.  */
  496.  
  497. #define TGSI_SWIZZLE_X      0
  498. #define TGSI_SWIZZLE_Y      1
  499. #define TGSI_SWIZZLE_Z      2
  500. #define TGSI_SWIZZLE_W      3
  501.  
  502. struct tgsi_instruction_label
  503. {
  504.    unsigned Label    : 24;   /* UINT */
  505.    unsigned Padding  : 8;
  506. };
  507.  
  508. #define TGSI_TEXTURE_BUFFER         0
  509. #define TGSI_TEXTURE_1D             1
  510. #define TGSI_TEXTURE_2D             2
  511. #define TGSI_TEXTURE_3D             3
  512. #define TGSI_TEXTURE_CUBE           4
  513. #define TGSI_TEXTURE_RECT           5
  514. #define TGSI_TEXTURE_SHADOW1D       6
  515. #define TGSI_TEXTURE_SHADOW2D       7
  516. #define TGSI_TEXTURE_SHADOWRECT     8
  517. #define TGSI_TEXTURE_1D_ARRAY       9
  518. #define TGSI_TEXTURE_2D_ARRAY       10
  519. #define TGSI_TEXTURE_SHADOW1D_ARRAY 11
  520. #define TGSI_TEXTURE_SHADOW2D_ARRAY 12
  521. #define TGSI_TEXTURE_SHADOWCUBE     13
  522. #define TGSI_TEXTURE_2D_MSAA        14
  523. #define TGSI_TEXTURE_2D_ARRAY_MSAA  15
  524. #define TGSI_TEXTURE_CUBE_ARRAY     16
  525. #define TGSI_TEXTURE_SHADOWCUBE_ARRAY 17
  526. #define TGSI_TEXTURE_UNKNOWN        18
  527. #define TGSI_TEXTURE_COUNT          19
  528.  
  529. struct tgsi_instruction_texture
  530. {
  531.    unsigned Texture  : 8;    /* TGSI_TEXTURE_ */
  532.    unsigned NumOffsets : 4;
  533.    unsigned Padding : 20;
  534. };
  535.  
  536. /* for texture offsets in GLSL and DirectX.
  537.  * Generally these always come from TGSI_FILE_IMMEDIATE,
  538.  * however DX11 appears to have the capability to do
  539.  * non-constant texture offsets.
  540.  */
  541. struct tgsi_texture_offset
  542. {
  543.    int      Index    : 16;
  544.    unsigned File     : 4;  /**< one of TGSI_FILE_x */
  545.    unsigned SwizzleX : 2;  /* TGSI_SWIZZLE_x */
  546.    unsigned SwizzleY : 2;  /* TGSI_SWIZZLE_x */
  547.    unsigned SwizzleZ : 2;  /* TGSI_SWIZZLE_x */
  548.    unsigned Padding  : 6;
  549. };
  550.  
  551. /*
  552.  * For SM3, the following constraint applies.
  553.  *   - Swizzle is either set to identity or replicate.
  554.  */
  555. struct tgsi_instruction_predicate
  556. {
  557.    int      Index    : 16; /* SINT */
  558.    unsigned SwizzleX : 2;  /* TGSI_SWIZZLE_x */
  559.    unsigned SwizzleY : 2;  /* TGSI_SWIZZLE_x */
  560.    unsigned SwizzleZ : 2;  /* TGSI_SWIZZLE_x */
  561.    unsigned SwizzleW : 2;  /* TGSI_SWIZZLE_x */
  562.    unsigned Negate   : 1;  /* BOOL */
  563.    unsigned Padding  : 7;
  564. };
  565.  
  566. /**
  567.  * File specifies the register array to access.
  568.  *
  569.  * Index specifies the element number of a register in the register file.
  570.  *
  571.  * If Indirect is TRUE, Index should be offset by the X component of the indirect
  572.  * register that follows. The register can be now fetched into local storage
  573.  * for further processing.
  574.  *
  575.  * If Negate is TRUE, all components of the fetched register are negated.
  576.  *
  577.  * The fetched register components are swizzled according to SwizzleX, SwizzleY,
  578.  * SwizzleZ and SwizzleW.
  579.  *
  580.  */
  581.  
  582. struct tgsi_src_register
  583. {
  584.    unsigned File        : 4;  /* TGSI_FILE_ */
  585.    unsigned Indirect    : 1;  /* BOOL */
  586.    unsigned Dimension   : 1;  /* BOOL */
  587.    int      Index       : 16; /* SINT */
  588.    unsigned SwizzleX    : 2;  /* TGSI_SWIZZLE_ */
  589.    unsigned SwizzleY    : 2;  /* TGSI_SWIZZLE_ */
  590.    unsigned SwizzleZ    : 2;  /* TGSI_SWIZZLE_ */
  591.    unsigned SwizzleW    : 2;  /* TGSI_SWIZZLE_ */
  592.    unsigned Absolute    : 1;    /* BOOL */
  593.    unsigned Negate      : 1;    /* BOOL */
  594. };
  595.  
  596. /**
  597.  * If tgsi_src_register::Indirect is TRUE, tgsi_ind_register follows.
  598.  *
  599.  * File, Index and Swizzle are handled the same as in tgsi_src_register.
  600.  *
  601.  * If ArrayID is zero the whole register file might be is indirectly addressed,
  602.  * if not only the Declaration with this ArrayID is accessed by this operand.
  603.  *
  604.  */
  605.  
  606. struct tgsi_ind_register
  607. {
  608.    unsigned File    : 4;  /* TGSI_FILE_ */
  609.    int      Index   : 16; /* SINT */
  610.    unsigned Swizzle : 2;  /* TGSI_SWIZZLE_ */
  611.    unsigned ArrayID : 10; /* UINT */
  612. };
  613.  
  614. /**
  615.  * If tgsi_src_register::Dimension is TRUE, tgsi_dimension follows.
  616.  */
  617.  
  618. struct tgsi_dimension
  619. {
  620.    unsigned Indirect    : 1;  /* BOOL */
  621.    unsigned Dimension   : 1;  /* BOOL */
  622.    unsigned Padding     : 14;
  623.    int      Index       : 16; /* SINT */
  624. };
  625.  
  626. struct tgsi_dst_register
  627. {
  628.    unsigned File        : 4;  /* TGSI_FILE_ */
  629.    unsigned WriteMask   : 4;  /* TGSI_WRITEMASK_ */
  630.    unsigned Indirect    : 1;  /* BOOL */
  631.    unsigned Dimension   : 1;  /* BOOL */
  632.    int      Index       : 16; /* SINT */
  633.    unsigned Padding     : 6;
  634. };
  635.  
  636.  
  637. #ifdef __cplusplus
  638. }
  639. #endif
  640.  
  641. #endif /* P_SHADER_TOKENS_H */
  642.