Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2008 VMware, Inc.
  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 VMWARE 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_TESSCTRL  3
  47. #define TGSI_PROCESSOR_TESSEVAL  4
  48. #define TGSI_PROCESSOR_COMPUTE   5
  49.  
  50. struct tgsi_processor
  51. {
  52.    unsigned Processor  : 4;  /* TGSI_PROCESSOR_ */
  53.    unsigned Padding    : 28;
  54. };
  55.  
  56. #define TGSI_TOKEN_TYPE_DECLARATION    0
  57. #define TGSI_TOKEN_TYPE_IMMEDIATE      1
  58. #define TGSI_TOKEN_TYPE_INSTRUCTION    2
  59. #define TGSI_TOKEN_TYPE_PROPERTY       3
  60.  
  61. struct tgsi_token
  62. {
  63.    unsigned Type       : 4;  /**< TGSI_TOKEN_TYPE_x */
  64.    unsigned NrTokens   : 8;  /**< UINT */
  65.    unsigned Padding    : 20;
  66. };
  67.  
  68. enum tgsi_file_type {
  69.    TGSI_FILE_NULL                =0,
  70.    TGSI_FILE_CONSTANT            =1,
  71.    TGSI_FILE_INPUT               =2,
  72.    TGSI_FILE_OUTPUT              =3,
  73.    TGSI_FILE_TEMPORARY           =4,
  74.    TGSI_FILE_SAMPLER             =5,
  75.    TGSI_FILE_ADDRESS             =6,
  76.    TGSI_FILE_IMMEDIATE           =7,
  77.    TGSI_FILE_PREDICATE           =8,
  78.    TGSI_FILE_SYSTEM_VALUE        =9,
  79.    TGSI_FILE_RESOURCE            =10,
  80.    TGSI_FILE_SAMPLER_VIEW        =11,
  81.    TGSI_FILE_COUNT      /**< how many TGSI_FILE_ types */
  82. };
  83.  
  84.  
  85. #define TGSI_WRITEMASK_NONE     0x00
  86. #define TGSI_WRITEMASK_X        0x01
  87. #define TGSI_WRITEMASK_Y        0x02
  88. #define TGSI_WRITEMASK_XY       0x03
  89. #define TGSI_WRITEMASK_Z        0x04
  90. #define TGSI_WRITEMASK_XZ       0x05
  91. #define TGSI_WRITEMASK_YZ       0x06
  92. #define TGSI_WRITEMASK_XYZ      0x07
  93. #define TGSI_WRITEMASK_W        0x08
  94. #define TGSI_WRITEMASK_XW       0x09
  95. #define TGSI_WRITEMASK_YW       0x0A
  96. #define TGSI_WRITEMASK_XYW      0x0B
  97. #define TGSI_WRITEMASK_ZW       0x0C
  98. #define TGSI_WRITEMASK_XZW      0x0D
  99. #define TGSI_WRITEMASK_YZW      0x0E
  100. #define TGSI_WRITEMASK_XYZW     0x0F
  101.  
  102. #define TGSI_INTERPOLATE_CONSTANT      0
  103. #define TGSI_INTERPOLATE_LINEAR        1
  104. #define TGSI_INTERPOLATE_PERSPECTIVE   2
  105. #define TGSI_INTERPOLATE_COLOR         3 /* special color case for smooth/flat */
  106. #define TGSI_INTERPOLATE_COUNT         4
  107.  
  108. #define TGSI_INTERPOLATE_LOC_CENTER    0
  109. #define TGSI_INTERPOLATE_LOC_CENTROID  1
  110. #define TGSI_INTERPOLATE_LOC_SAMPLE    2
  111. #define TGSI_INTERPOLATE_LOC_COUNT     3
  112.  
  113. #define TGSI_CYLINDRICAL_WRAP_X (1 << 0)
  114. #define TGSI_CYLINDRICAL_WRAP_Y (1 << 1)
  115. #define TGSI_CYLINDRICAL_WRAP_Z (1 << 2)
  116. #define TGSI_CYLINDRICAL_WRAP_W (1 << 3)
  117.  
  118. struct tgsi_declaration
  119. {
  120.    unsigned Type        : 4;  /**< TGSI_TOKEN_TYPE_DECLARATION */
  121.    unsigned NrTokens    : 8;  /**< UINT */
  122.    unsigned File        : 4;  /**< one of TGSI_FILE_x */
  123.    unsigned UsageMask   : 4;  /**< bitmask of TGSI_WRITEMASK_x flags */
  124.    unsigned Dimension   : 1;  /**< any extra dimension info? */
  125.    unsigned Semantic    : 1;  /**< BOOL, any semantic info? */
  126.    unsigned Interpolate : 1;  /**< any interpolation info? */
  127.    unsigned Invariant   : 1;  /**< invariant optimization? */
  128.    unsigned Local       : 1;  /**< optimize as subroutine local variable? */
  129.    unsigned Array       : 1;  /**< extra array info? */
  130.    unsigned Padding     : 6;
  131. };
  132.  
  133. struct tgsi_declaration_range
  134. {
  135.    unsigned First   : 16; /**< UINT */
  136.    unsigned Last    : 16; /**< UINT */
  137. };
  138.  
  139. struct tgsi_declaration_dimension
  140. {
  141.    unsigned Index2D:16; /**< UINT */
  142.    unsigned Padding:16;
  143. };
  144.  
  145. struct tgsi_declaration_interp
  146. {
  147.    unsigned Interpolate : 4;   /**< one of TGSI_INTERPOLATE_x */
  148.    unsigned Location    : 2;   /**< one of TGSI_INTERPOLATE_LOC_x */
  149.    unsigned CylindricalWrap:4; /**< TGSI_CYLINDRICAL_WRAP_x flags */
  150.    unsigned Padding     : 22;
  151. };
  152.  
  153. #define TGSI_SEMANTIC_POSITION   0
  154. #define TGSI_SEMANTIC_COLOR      1
  155. #define TGSI_SEMANTIC_BCOLOR     2  /**< back-face color */
  156. #define TGSI_SEMANTIC_FOG        3
  157. #define TGSI_SEMANTIC_PSIZE      4
  158. #define TGSI_SEMANTIC_GENERIC    5
  159. #define TGSI_SEMANTIC_NORMAL     6
  160. #define TGSI_SEMANTIC_FACE       7
  161. #define TGSI_SEMANTIC_EDGEFLAG   8
  162. #define TGSI_SEMANTIC_PRIMID     9
  163. #define TGSI_SEMANTIC_INSTANCEID 10 /**< doesn't include start_instance */
  164. #define TGSI_SEMANTIC_VERTEXID   11
  165. #define TGSI_SEMANTIC_STENCIL    12
  166. #define TGSI_SEMANTIC_CLIPDIST   13
  167. #define TGSI_SEMANTIC_CLIPVERTEX 14
  168. #define TGSI_SEMANTIC_GRID_SIZE  15 /**< grid size in blocks */
  169. #define TGSI_SEMANTIC_BLOCK_ID   16 /**< id of the current block */
  170. #define TGSI_SEMANTIC_BLOCK_SIZE 17 /**< block size in threads */
  171. #define TGSI_SEMANTIC_THREAD_ID  18 /**< block-relative id of the current thread */
  172. #define TGSI_SEMANTIC_TEXCOORD   19 /**< texture or sprite coordinates */
  173. #define TGSI_SEMANTIC_PCOORD     20 /**< point sprite coordinate */
  174. #define TGSI_SEMANTIC_VIEWPORT_INDEX 21 /**< viewport index */
  175. #define TGSI_SEMANTIC_LAYER      22 /**< layer (rendertarget index) */
  176. #define TGSI_SEMANTIC_CULLDIST   23
  177. #define TGSI_SEMANTIC_SAMPLEID   24
  178. #define TGSI_SEMANTIC_SAMPLEPOS  25
  179. #define TGSI_SEMANTIC_SAMPLEMASK 26
  180. #define TGSI_SEMANTIC_INVOCATIONID 27
  181. #define TGSI_SEMANTIC_VERTEXID_NOBASE 28
  182. #define TGSI_SEMANTIC_BASEVERTEX 29
  183. #define TGSI_SEMANTIC_PATCH      30 /**< generic per-patch semantic */
  184. #define TGSI_SEMANTIC_TESSCOORD  31 /**< coordinate being processed by tess */
  185. #define TGSI_SEMANTIC_TESSOUTER  32 /**< outer tessellation levels */
  186. #define TGSI_SEMANTIC_TESSINNER  33 /**< inner tessellation levels */
  187. #define TGSI_SEMANTIC_VERTICESIN 34 /**< number of input vertices */
  188. #define TGSI_SEMANTIC_COUNT      35 /**< number of semantic values */
  189.  
  190. struct tgsi_declaration_semantic
  191. {
  192.    unsigned Name           : 8;  /**< one of TGSI_SEMANTIC_x */
  193.    unsigned Index          : 16; /**< UINT */
  194.    unsigned Padding        : 8;
  195. };
  196.  
  197. struct tgsi_declaration_resource {
  198.    unsigned Resource    : 8; /**< one of TGSI_TEXTURE_ */
  199.    unsigned Raw         : 1;
  200.    unsigned Writable    : 1;
  201.    unsigned Padding     : 22;
  202. };
  203.  
  204. enum tgsi_return_type {
  205.    TGSI_RETURN_TYPE_UNORM = 0,
  206.    TGSI_RETURN_TYPE_SNORM,
  207.    TGSI_RETURN_TYPE_SINT,
  208.    TGSI_RETURN_TYPE_UINT,
  209.    TGSI_RETURN_TYPE_FLOAT,
  210.    TGSI_RETURN_TYPE_COUNT
  211. };
  212.  
  213. struct tgsi_declaration_sampler_view {
  214.    unsigned Resource    : 8; /**< one of TGSI_TEXTURE_ */
  215.    unsigned ReturnTypeX : 6; /**< one of enum tgsi_return_type */
  216.    unsigned ReturnTypeY : 6; /**< one of enum tgsi_return_type */
  217.    unsigned ReturnTypeZ : 6; /**< one of enum tgsi_return_type */
  218.    unsigned ReturnTypeW : 6; /**< one of enum tgsi_return_type */
  219. };
  220.  
  221. struct tgsi_declaration_array {
  222.    unsigned ArrayID : 10;
  223.    unsigned Padding : 22;
  224. };
  225.  
  226. /*
  227.  * Special resources that don't need to be declared.  They map to the
  228.  * GLOBAL/LOCAL/PRIVATE/INPUT compute memory spaces.
  229.  */
  230. #define TGSI_RESOURCE_GLOBAL    0x7fff
  231. #define TGSI_RESOURCE_LOCAL     0x7ffe
  232. #define TGSI_RESOURCE_PRIVATE   0x7ffd
  233. #define TGSI_RESOURCE_INPUT     0x7ffc
  234.  
  235. #define TGSI_IMM_FLOAT32   0
  236. #define TGSI_IMM_UINT32    1
  237. #define TGSI_IMM_INT32     2
  238. #define TGSI_IMM_FLOAT64   3
  239.  
  240. struct tgsi_immediate
  241. {
  242.    unsigned Type       : 4;  /**< TGSI_TOKEN_TYPE_IMMEDIATE */
  243.    unsigned NrTokens   : 14; /**< UINT */
  244.    unsigned DataType   : 4;  /**< one of TGSI_IMM_x */
  245.    unsigned Padding    : 10;
  246. };
  247.  
  248. union tgsi_immediate_data
  249. {
  250.    float Float;
  251.    unsigned Uint;
  252.    int Int;
  253. };
  254.  
  255. #define TGSI_PROPERTY_GS_INPUT_PRIM          0
  256. #define TGSI_PROPERTY_GS_OUTPUT_PRIM         1
  257. #define TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES 2
  258. #define TGSI_PROPERTY_FS_COORD_ORIGIN        3
  259. #define TGSI_PROPERTY_FS_COORD_PIXEL_CENTER  4
  260. #define TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS 5
  261. #define TGSI_PROPERTY_FS_DEPTH_LAYOUT        6
  262. #define TGSI_PROPERTY_VS_PROHIBIT_UCPS       7
  263. #define TGSI_PROPERTY_GS_INVOCATIONS         8
  264. #define TGSI_PROPERTY_VS_WINDOW_SPACE_POSITION 9
  265. #define TGSI_PROPERTY_TCS_VERTICES_OUT       10
  266. #define TGSI_PROPERTY_TES_PRIM_MODE          11
  267. #define TGSI_PROPERTY_TES_SPACING            12
  268. #define TGSI_PROPERTY_TES_VERTEX_ORDER_CW    13
  269. #define TGSI_PROPERTY_TES_POINT_MODE         14
  270. #define TGSI_PROPERTY_COUNT                  15
  271.  
  272. struct tgsi_property {
  273.    unsigned Type         : 4;  /**< TGSI_TOKEN_TYPE_PROPERTY */
  274.    unsigned NrTokens     : 8;  /**< UINT */
  275.    unsigned PropertyName : 8;  /**< one of TGSI_PROPERTY */
  276.    unsigned Padding      : 12;
  277. };
  278.  
  279. #define TGSI_FS_COORD_ORIGIN_UPPER_LEFT 0
  280. #define TGSI_FS_COORD_ORIGIN_LOWER_LEFT 1
  281.  
  282. #define TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER 0
  283. #define TGSI_FS_COORD_PIXEL_CENTER_INTEGER 1
  284.  
  285. #define TGSI_FS_DEPTH_LAYOUT_NONE         0
  286. #define TGSI_FS_DEPTH_LAYOUT_ANY          1
  287. #define TGSI_FS_DEPTH_LAYOUT_GREATER      2
  288. #define TGSI_FS_DEPTH_LAYOUT_LESS         3
  289. #define TGSI_FS_DEPTH_LAYOUT_UNCHANGED    4
  290.  
  291.  
  292. struct tgsi_property_data {
  293.    unsigned Data;
  294. };
  295.  
  296. /* TGSI opcodes.  
  297.  *
  298.  * For more information on semantics of opcodes and
  299.  * which APIs are known to use which opcodes, see
  300.  * gallium/docs/source/tgsi.rst
  301.  */
  302. #define TGSI_OPCODE_ARL                 0
  303. #define TGSI_OPCODE_MOV                 1
  304. #define TGSI_OPCODE_LIT                 2
  305. #define TGSI_OPCODE_RCP                 3
  306. #define TGSI_OPCODE_RSQ                 4
  307. #define TGSI_OPCODE_EXP                 5
  308. #define TGSI_OPCODE_LOG                 6
  309. #define TGSI_OPCODE_MUL                 7
  310. #define TGSI_OPCODE_ADD                 8
  311. #define TGSI_OPCODE_DP3                 9
  312. #define TGSI_OPCODE_DP4                 10
  313. #define TGSI_OPCODE_DST                 11
  314. #define TGSI_OPCODE_MIN                 12
  315. #define TGSI_OPCODE_MAX                 13
  316. #define TGSI_OPCODE_SLT                 14
  317. #define TGSI_OPCODE_SGE                 15
  318. #define TGSI_OPCODE_MAD                 16
  319. #define TGSI_OPCODE_SUB                 17
  320. #define TGSI_OPCODE_LRP                 18
  321. #define TGSI_OPCODE_FMA                 19
  322. #define TGSI_OPCODE_SQRT                20
  323. #define TGSI_OPCODE_DP2A                21
  324.                                 /* gap */
  325. #define TGSI_OPCODE_FRC                 24
  326. #define TGSI_OPCODE_CLAMP               25
  327. #define TGSI_OPCODE_FLR                 26
  328. #define TGSI_OPCODE_ROUND               27
  329. #define TGSI_OPCODE_EX2                 28
  330. #define TGSI_OPCODE_LG2                 29
  331. #define TGSI_OPCODE_POW                 30
  332. #define TGSI_OPCODE_XPD                 31
  333.                                 /* gap */
  334. #define TGSI_OPCODE_ABS                 33
  335.                                 /* gap */
  336. #define TGSI_OPCODE_DPH                 35
  337. #define TGSI_OPCODE_COS                 36
  338. #define TGSI_OPCODE_DDX                 37
  339. #define TGSI_OPCODE_DDY                 38
  340. #define TGSI_OPCODE_KILL                39 /* unconditional */
  341. #define TGSI_OPCODE_PK2H                40
  342. #define TGSI_OPCODE_PK2US               41
  343. #define TGSI_OPCODE_PK4B                42
  344. #define TGSI_OPCODE_PK4UB               43
  345.                                 /* gap */
  346. #define TGSI_OPCODE_SEQ                 45
  347.                                 /* gap */
  348. #define TGSI_OPCODE_SGT                 47
  349. #define TGSI_OPCODE_SIN                 48
  350. #define TGSI_OPCODE_SLE                 49
  351. #define TGSI_OPCODE_SNE                 50
  352.                                 /* gap */
  353. #define TGSI_OPCODE_TEX                 52
  354. #define TGSI_OPCODE_TXD                 53
  355. #define TGSI_OPCODE_TXP                 54
  356. #define TGSI_OPCODE_UP2H                55
  357. #define TGSI_OPCODE_UP2US               56
  358. #define TGSI_OPCODE_UP4B                57
  359. #define TGSI_OPCODE_UP4UB               58
  360.                                 /* gap */
  361. #define TGSI_OPCODE_ARR                 61
  362.                                 /* gap */
  363. #define TGSI_OPCODE_CAL                 63
  364. #define TGSI_OPCODE_RET                 64
  365. #define TGSI_OPCODE_SSG                 65 /* SGN */
  366. #define TGSI_OPCODE_CMP                 66
  367. #define TGSI_OPCODE_SCS                 67
  368. #define TGSI_OPCODE_TXB                 68
  369.                                 /* gap */
  370. #define TGSI_OPCODE_DIV                 70
  371. #define TGSI_OPCODE_DP2                 71
  372. #define TGSI_OPCODE_TXL                 72
  373. #define TGSI_OPCODE_BRK                 73
  374. #define TGSI_OPCODE_IF                  74
  375. #define TGSI_OPCODE_UIF                 75
  376. #define TGSI_OPCODE_ELSE                77
  377. #define TGSI_OPCODE_ENDIF               78
  378.  
  379. #define TGSI_OPCODE_DDX_FINE            79
  380. #define TGSI_OPCODE_DDY_FINE            80
  381.  
  382. #define TGSI_OPCODE_PUSHA               81
  383. #define TGSI_OPCODE_POPA                82
  384. #define TGSI_OPCODE_CEIL                83
  385. #define TGSI_OPCODE_I2F                 84
  386. #define TGSI_OPCODE_NOT                 85
  387. #define TGSI_OPCODE_TRUNC               86
  388. #define TGSI_OPCODE_SHL                 87
  389.                                 /* gap */
  390. #define TGSI_OPCODE_AND                 89
  391. #define TGSI_OPCODE_OR                  90
  392. #define TGSI_OPCODE_MOD                 91
  393. #define TGSI_OPCODE_XOR                 92
  394. #define TGSI_OPCODE_SAD                 93
  395. #define TGSI_OPCODE_TXF                 94
  396. #define TGSI_OPCODE_TXQ                 95
  397. #define TGSI_OPCODE_CONT                96
  398. #define TGSI_OPCODE_EMIT                97
  399. #define TGSI_OPCODE_ENDPRIM             98
  400. #define TGSI_OPCODE_BGNLOOP             99
  401. #define TGSI_OPCODE_BGNSUB              100
  402. #define TGSI_OPCODE_ENDLOOP             101
  403. #define TGSI_OPCODE_ENDSUB              102
  404. #define TGSI_OPCODE_TXQ_LZ              103 /* TXQ for mipmap level 0 */
  405.                                 /* gap */
  406. #define TGSI_OPCODE_NOP                 107
  407.  
  408. #define TGSI_OPCODE_FSEQ                108
  409. #define TGSI_OPCODE_FSGE                109
  410. #define TGSI_OPCODE_FSLT                110
  411. #define TGSI_OPCODE_FSNE                111
  412.  
  413.                                 /* gap */
  414. #define TGSI_OPCODE_CALLNZ              113
  415.                                 /* gap */
  416. #define TGSI_OPCODE_BREAKC              115
  417. #define TGSI_OPCODE_KILL_IF             116  /* conditional kill */
  418. #define TGSI_OPCODE_END                 117  /* aka HALT */
  419. #define TGSI_OPCODE_DFMA                118
  420. #define TGSI_OPCODE_F2I                 119
  421. #define TGSI_OPCODE_IDIV                120
  422. #define TGSI_OPCODE_IMAX                121
  423. #define TGSI_OPCODE_IMIN                122
  424. #define TGSI_OPCODE_INEG                123
  425. #define TGSI_OPCODE_ISGE                124
  426. #define TGSI_OPCODE_ISHR                125
  427. #define TGSI_OPCODE_ISLT                126
  428. #define TGSI_OPCODE_F2U                 127
  429. #define TGSI_OPCODE_U2F                 128
  430. #define TGSI_OPCODE_UADD                129
  431. #define TGSI_OPCODE_UDIV                130
  432. #define TGSI_OPCODE_UMAD                131
  433. #define TGSI_OPCODE_UMAX                132
  434. #define TGSI_OPCODE_UMIN                133
  435. #define TGSI_OPCODE_UMOD                134
  436. #define TGSI_OPCODE_UMUL                135
  437. #define TGSI_OPCODE_USEQ                136
  438. #define TGSI_OPCODE_USGE                137
  439. #define TGSI_OPCODE_USHR                138
  440. #define TGSI_OPCODE_USLT                139
  441. #define TGSI_OPCODE_USNE                140
  442. #define TGSI_OPCODE_SWITCH              141
  443. #define TGSI_OPCODE_CASE                142
  444. #define TGSI_OPCODE_DEFAULT             143
  445. #define TGSI_OPCODE_ENDSWITCH           144
  446.  
  447. /* resource related opcodes */
  448. #define TGSI_OPCODE_SAMPLE              145
  449. #define TGSI_OPCODE_SAMPLE_I            146
  450. #define TGSI_OPCODE_SAMPLE_I_MS         147
  451. #define TGSI_OPCODE_SAMPLE_B            148
  452. #define TGSI_OPCODE_SAMPLE_C            149
  453. #define TGSI_OPCODE_SAMPLE_C_LZ         150
  454. #define TGSI_OPCODE_SAMPLE_D            151
  455. #define TGSI_OPCODE_SAMPLE_L            152
  456. #define TGSI_OPCODE_GATHER4             153
  457. #define TGSI_OPCODE_SVIEWINFO           154
  458. #define TGSI_OPCODE_SAMPLE_POS          155
  459. #define TGSI_OPCODE_SAMPLE_INFO         156
  460.  
  461. #define TGSI_OPCODE_UARL                157
  462. #define TGSI_OPCODE_UCMP                158
  463. #define TGSI_OPCODE_IABS                159
  464. #define TGSI_OPCODE_ISSG                160
  465.  
  466. #define TGSI_OPCODE_LOAD                161
  467. #define TGSI_OPCODE_STORE               162
  468.  
  469. #define TGSI_OPCODE_MFENCE              163
  470. #define TGSI_OPCODE_LFENCE              164
  471. #define TGSI_OPCODE_SFENCE              165
  472. #define TGSI_OPCODE_BARRIER             166
  473.  
  474. #define TGSI_OPCODE_ATOMUADD            167
  475. #define TGSI_OPCODE_ATOMXCHG            168
  476. #define TGSI_OPCODE_ATOMCAS             169
  477. #define TGSI_OPCODE_ATOMAND             170
  478. #define TGSI_OPCODE_ATOMOR              171
  479. #define TGSI_OPCODE_ATOMXOR             172
  480. #define TGSI_OPCODE_ATOMUMIN            173
  481. #define TGSI_OPCODE_ATOMUMAX            174
  482. #define TGSI_OPCODE_ATOMIMIN            175
  483. #define TGSI_OPCODE_ATOMIMAX            176
  484.  
  485. /* to be used for shadow cube map compares */
  486. #define TGSI_OPCODE_TEX2                177
  487. #define TGSI_OPCODE_TXB2                178
  488. #define TGSI_OPCODE_TXL2                179
  489.  
  490. #define TGSI_OPCODE_IMUL_HI             180
  491. #define TGSI_OPCODE_UMUL_HI             181
  492.  
  493. #define TGSI_OPCODE_TG4                 182
  494.  
  495. #define TGSI_OPCODE_LODQ                183
  496.  
  497. #define TGSI_OPCODE_IBFE                184
  498. #define TGSI_OPCODE_UBFE                185
  499. #define TGSI_OPCODE_BFI                 186
  500. #define TGSI_OPCODE_BREV                187
  501. #define TGSI_OPCODE_POPC                188
  502. #define TGSI_OPCODE_LSB                 189
  503. #define TGSI_OPCODE_IMSB                190
  504. #define TGSI_OPCODE_UMSB                191
  505.  
  506. #define TGSI_OPCODE_INTERP_CENTROID     192
  507. #define TGSI_OPCODE_INTERP_SAMPLE       193
  508. #define TGSI_OPCODE_INTERP_OFFSET       194
  509.  
  510. /* sm5 marked opcodes are supported in D3D11 optionally - also DMOV, DMOVC */
  511. #define TGSI_OPCODE_F2D                 195 /* SM5 */
  512. #define TGSI_OPCODE_D2F                 196
  513. #define TGSI_OPCODE_DABS                197
  514. #define TGSI_OPCODE_DNEG                198 /* SM5 */
  515. #define TGSI_OPCODE_DADD                199 /* SM5 */
  516. #define TGSI_OPCODE_DMUL                200 /* SM5 */
  517. #define TGSI_OPCODE_DMAX                201 /* SM5 */
  518. #define TGSI_OPCODE_DMIN                202 /* SM5 */
  519. #define TGSI_OPCODE_DSLT                203 /* SM5 */
  520. #define TGSI_OPCODE_DSGE                204 /* SM5 */
  521. #define TGSI_OPCODE_DSEQ                205 /* SM5 */
  522. #define TGSI_OPCODE_DSNE                206 /* SM5 */
  523. #define TGSI_OPCODE_DRCP                207 /* eg, cayman */
  524. #define TGSI_OPCODE_DSQRT               208 /* eg, cayman also has DRSQ */
  525. #define TGSI_OPCODE_DMAD                209
  526. #define TGSI_OPCODE_DFRAC               210 /* eg, cayman */
  527. #define TGSI_OPCODE_DLDEXP              211 /* eg, cayman */
  528. #define TGSI_OPCODE_DFRACEXP            212 /* eg, cayman */
  529. #define TGSI_OPCODE_D2I                 213
  530. #define TGSI_OPCODE_I2D                 214
  531. #define TGSI_OPCODE_D2U                 215
  532. #define TGSI_OPCODE_U2D                 216
  533. #define TGSI_OPCODE_DRSQ                217 /* eg, cayman also has DRSQ */
  534. #define TGSI_OPCODE_DTRUNC              218 /* nvc0 */
  535. #define TGSI_OPCODE_DCEIL               219 /* nvc0 */
  536. #define TGSI_OPCODE_DFLR                220 /* nvc0 */
  537. #define TGSI_OPCODE_DROUND              221 /* nvc0 */
  538. #define TGSI_OPCODE_DSSG                222
  539. #define TGSI_OPCODE_LAST                223
  540.  
  541. #define TGSI_SAT_NONE            0  /* do not saturate */
  542. #define TGSI_SAT_ZERO_ONE        1  /* clamp to [0,1] */
  543. #define TGSI_SAT_MINUS_PLUS_ONE  2  /* clamp to [-1,1] */
  544.  
  545. /**
  546.  * Opcode is the operation code to execute. A given operation defines the
  547.  * semantics how the source registers (if any) are interpreted and what is
  548.  * written to the destination registers (if any) as a result of execution.
  549.  *
  550.  * NumDstRegs and NumSrcRegs is the number of destination and source registers,
  551.  * respectively. For a given operation code, those numbers are fixed and are
  552.  * present here only for convenience.
  553.  *
  554.  * If Predicate is TRUE, tgsi_instruction_predicate token immediately follows.
  555.  *
  556.  * Saturate controls how are final results in destination registers modified.
  557.  */
  558.  
  559. struct tgsi_instruction
  560. {
  561.    unsigned Type       : 4;  /* TGSI_TOKEN_TYPE_INSTRUCTION */
  562.    unsigned NrTokens   : 8;  /* UINT */
  563.    unsigned Opcode     : 8;  /* TGSI_OPCODE_ */
  564.    unsigned Saturate   : 2;  /* TGSI_SAT_ */
  565.    unsigned NumDstRegs : 2;  /* UINT */
  566.    unsigned NumSrcRegs : 4;  /* UINT */
  567.    unsigned Predicate  : 1;  /* BOOL */
  568.    unsigned Label      : 1;
  569.    unsigned Texture    : 1;
  570.    unsigned Padding    : 1;
  571. };
  572.  
  573. /*
  574.  * If tgsi_instruction::Label is TRUE, tgsi_instruction_label follows.
  575.  *
  576.  * If tgsi_instruction::Texture is TRUE, tgsi_instruction_texture follows.
  577.  *   if texture instruction has a number of offsets,
  578.  *   then tgsi_instruction::Texture::NumOffset of tgsi_texture_offset follow.
  579.  *
  580.  * Then, tgsi_instruction::NumDstRegs of tgsi_dst_register follow.
  581.  *
  582.  * Then, tgsi_instruction::NumSrcRegs of tgsi_src_register follow.
  583.  *
  584.  * tgsi_instruction::NrTokens contains the total number of words that make the
  585.  * instruction, including the instruction word.
  586.  */
  587.  
  588. #define TGSI_SWIZZLE_X      0
  589. #define TGSI_SWIZZLE_Y      1
  590. #define TGSI_SWIZZLE_Z      2
  591. #define TGSI_SWIZZLE_W      3
  592.  
  593. struct tgsi_instruction_label
  594. {
  595.    unsigned Label    : 24;   /* UINT */
  596.    unsigned Padding  : 8;
  597. };
  598.  
  599. #define TGSI_TEXTURE_BUFFER         0
  600. #define TGSI_TEXTURE_1D             1
  601. #define TGSI_TEXTURE_2D             2
  602. #define TGSI_TEXTURE_3D             3
  603. #define TGSI_TEXTURE_CUBE           4
  604. #define TGSI_TEXTURE_RECT           5
  605. #define TGSI_TEXTURE_SHADOW1D       6
  606. #define TGSI_TEXTURE_SHADOW2D       7
  607. #define TGSI_TEXTURE_SHADOWRECT     8
  608. #define TGSI_TEXTURE_1D_ARRAY       9
  609. #define TGSI_TEXTURE_2D_ARRAY       10
  610. #define TGSI_TEXTURE_SHADOW1D_ARRAY 11
  611. #define TGSI_TEXTURE_SHADOW2D_ARRAY 12
  612. #define TGSI_TEXTURE_SHADOWCUBE     13
  613. #define TGSI_TEXTURE_2D_MSAA        14
  614. #define TGSI_TEXTURE_2D_ARRAY_MSAA  15
  615. #define TGSI_TEXTURE_CUBE_ARRAY     16
  616. #define TGSI_TEXTURE_SHADOWCUBE_ARRAY 17
  617. #define TGSI_TEXTURE_UNKNOWN        18
  618. #define TGSI_TEXTURE_COUNT          19
  619.  
  620. struct tgsi_instruction_texture
  621. {
  622.    unsigned Texture  : 8;    /* TGSI_TEXTURE_ */
  623.    unsigned NumOffsets : 4;
  624.    unsigned Padding : 20;
  625. };
  626.  
  627. /* for texture offsets in GLSL and DirectX.
  628.  * Generally these always come from TGSI_FILE_IMMEDIATE,
  629.  * however DX11 appears to have the capability to do
  630.  * non-constant texture offsets.
  631.  */
  632. struct tgsi_texture_offset
  633. {
  634.    int      Index    : 16;
  635.    unsigned File     : 4;  /**< one of TGSI_FILE_x */
  636.    unsigned SwizzleX : 2;  /* TGSI_SWIZZLE_x */
  637.    unsigned SwizzleY : 2;  /* TGSI_SWIZZLE_x */
  638.    unsigned SwizzleZ : 2;  /* TGSI_SWIZZLE_x */
  639.    unsigned Padding  : 6;
  640. };
  641.  
  642. /*
  643.  * For SM3, the following constraint applies.
  644.  *   - Swizzle is either set to identity or replicate.
  645.  */
  646. struct tgsi_instruction_predicate
  647. {
  648.    int      Index    : 16; /* SINT */
  649.    unsigned SwizzleX : 2;  /* TGSI_SWIZZLE_x */
  650.    unsigned SwizzleY : 2;  /* TGSI_SWIZZLE_x */
  651.    unsigned SwizzleZ : 2;  /* TGSI_SWIZZLE_x */
  652.    unsigned SwizzleW : 2;  /* TGSI_SWIZZLE_x */
  653.    unsigned Negate   : 1;  /* BOOL */
  654.    unsigned Padding  : 7;
  655. };
  656.  
  657. /**
  658.  * File specifies the register array to access.
  659.  *
  660.  * Index specifies the element number of a register in the register file.
  661.  *
  662.  * If Indirect is TRUE, Index should be offset by the X component of the indirect
  663.  * register that follows. The register can be now fetched into local storage
  664.  * for further processing.
  665.  *
  666.  * If Negate is TRUE, all components of the fetched register are negated.
  667.  *
  668.  * The fetched register components are swizzled according to SwizzleX, SwizzleY,
  669.  * SwizzleZ and SwizzleW.
  670.  *
  671.  */
  672.  
  673. struct tgsi_src_register
  674. {
  675.    unsigned File        : 4;  /* TGSI_FILE_ */
  676.    unsigned Indirect    : 1;  /* BOOL */
  677.    unsigned Dimension   : 1;  /* BOOL */
  678.    int      Index       : 16; /* SINT */
  679.    unsigned SwizzleX    : 2;  /* TGSI_SWIZZLE_ */
  680.    unsigned SwizzleY    : 2;  /* TGSI_SWIZZLE_ */
  681.    unsigned SwizzleZ    : 2;  /* TGSI_SWIZZLE_ */
  682.    unsigned SwizzleW    : 2;  /* TGSI_SWIZZLE_ */
  683.    unsigned Absolute    : 1;    /* BOOL */
  684.    unsigned Negate      : 1;    /* BOOL */
  685. };
  686.  
  687. /**
  688.  * If tgsi_src_register::Indirect is TRUE, tgsi_ind_register follows.
  689.  *
  690.  * File, Index and Swizzle are handled the same as in tgsi_src_register.
  691.  *
  692.  * If ArrayID is zero the whole register file might be is indirectly addressed,
  693.  * if not only the Declaration with this ArrayID is accessed by this operand.
  694.  *
  695.  */
  696.  
  697. struct tgsi_ind_register
  698. {
  699.    unsigned File    : 4;  /* TGSI_FILE_ */
  700.    int      Index   : 16; /* SINT */
  701.    unsigned Swizzle : 2;  /* TGSI_SWIZZLE_ */
  702.    unsigned ArrayID : 10; /* UINT */
  703. };
  704.  
  705. /**
  706.  * If tgsi_src_register::Dimension is TRUE, tgsi_dimension follows.
  707.  */
  708.  
  709. struct tgsi_dimension
  710. {
  711.    unsigned Indirect    : 1;  /* BOOL */
  712.    unsigned Dimension   : 1;  /* BOOL */
  713.    unsigned Padding     : 14;
  714.    int      Index       : 16; /* SINT */
  715. };
  716.  
  717. struct tgsi_dst_register
  718. {
  719.    unsigned File        : 4;  /* TGSI_FILE_ */
  720.    unsigned WriteMask   : 4;  /* TGSI_WRITEMASK_ */
  721.    unsigned Indirect    : 1;  /* BOOL */
  722.    unsigned Dimension   : 1;  /* BOOL */
  723.    int      Index       : 16; /* SINT */
  724.    unsigned Padding     : 6;
  725. };
  726.  
  727.  
  728. #ifdef __cplusplus
  729. }
  730. #endif
  731.  
  732. #endif /* P_SHADER_TOKENS_H */
  733.