Clone of mesa.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

p_shader_tokens.h 27KB

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