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