gen6_render.h 29.9 KB
Newer Older
1 2 3
#ifndef GEN6_RENDER_H
#define GEN6_RENDER_H

4
#include <stdint.h>
5
#include "surfaceformat.h"
6
#include "gen4_render.h"
7

8
/* GEN6_STATE_BASE_ADDRESS */
9
# define BUFFER_SIZE_MODIFY			       (1 << 0)
10

11
#define GEN6_3DSTATE_VF_STATISTICS		GEN4_3D(1, 0, 0xB)
12

13 14
#define GEN6_MEDIA_STATE_POINTERS		GEN4_3D(2, 0, 0)
#define GEN6_MEDIA_OBJECT			GEN4_3D(2, 1, 0)
15

16
/* GEN6_3DSTATE_BINDING_TABLE_POINTERS */
17 18 19
# define GEN6_3DSTATE_BINDING_TABLE_MODIFY_PS	       (1 << 12)/* for GEN6 */
# define GEN6_3DSTATE_BINDING_TABLE_MODIFY_GS	       (1 << 9) /* for GEN6 */
# define GEN6_3DSTATE_BINDING_TABLE_MODIFY_VS	       (1 << 8) /* for GEN6 */
20

21
#define GEN6_3DSTATE_SAMPLER_STATE_POINTERS	GEN4_3D(3, 0, 0x02)
22 23 24
# define GEN6_3DSTATE_SAMPLER_STATE_MODIFY_PS	       (1 << 12)
# define GEN6_3DSTATE_SAMPLER_STATE_MODIFY_GS	       (1 << 9)
# define GEN6_3DSTATE_SAMPLER_STATE_MODIFY_VS	       (1 << 8)
25

26
#define GEN6_3DSTATE_URB			GEN4_3D(3, 0, 0x05)
27
/* DW1 */
28 29
# define GEN6_3DSTATE_URB_VS_SIZE_SHIFT			16
# define GEN6_3DSTATE_URB_VS_ENTRIES_SHIFT		0
30
/* DW2 */
31 32
# define GEN6_3DSTATE_URB_GS_ENTRIES_SHIFT		8
# define GEN6_3DSTATE_URB_GS_SIZE_SHIFT			0
33

34 35 36
#define GEN6_3DSTATE_VERTEX_ELEMENTS		GEN4_3D(3, 0, 0x09)
#define GEN6_3DSTATE_INDEX_BUFFER		GEN4_3D(3, 0, 0x0A)
#define GEN6_3DSTATE_VIEWPORT_STATE_POINTERS	GEN4_3D(3, 0, 0x0D)
37 38 39
# define GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_CC	       (1 << 12)
# define GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_SF	       (1 << 11)
# define GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_CLIP       (1 << 10)
40

41
#define GEN6_3DSTATE_CC_STATE_POINTERS		GEN4_3D(3, 0, 0x0E)
42

43
#define GEN6_3DSTATE_VS				GEN4_3D(3, 0, 0x10)
44

45
#define GEN6_3DSTATE_GS				GEN4_3D(3, 0, 0x11)
46 47 48
/* DW4 */
# define GEN6_3DSTATE_GS_DISPATCH_START_GRF_SHIFT	0

49
#define GEN6_3DSTATE_CLIP			GEN4_3D(3, 0, 0x12)
50

51
#define GEN6_3DSTATE_SF				GEN4_3D(3, 0, 0x13)
52
/* DW1 */
53 54 55
# define GEN6_3DSTATE_SF_NUM_OUTPUTS_SHIFT			22
# define GEN6_3DSTATE_SF_URB_ENTRY_READ_LENGTH_SHIFT		11
# define GEN6_3DSTATE_SF_URB_ENTRY_READ_OFFSET_SHIFT		4
56 57
/* DW2 */
/* DW3 */
58 59 60 61
# define GEN6_3DSTATE_SF_CULL_BOTH				(0 << 29)
# define GEN6_3DSTATE_SF_CULL_NONE				(1 << 29)
# define GEN6_3DSTATE_SF_CULL_FRONT				(2 << 29)
# define GEN6_3DSTATE_SF_CULL_BACK				(3 << 29)
62
/* DW4 */
63 64 65 66
# define GEN6_3DSTATE_SF_TRI_PROVOKE_SHIFT			29
# define GEN6_3DSTATE_SF_LINE_PROVOKE_SHIFT			27
# define GEN6_3DSTATE_SF_TRIFAN_PROVOKE_SHIFT			25
# define GEN6_3DSTATE_SF_VERTEX_SUB_PIXEL_PRECISION_SHIFT	12
67

68
#define GEN6_3DSTATE_WM				GEN4_3D(3, 0, 0x14)
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
/* DW2 */
# define GEN6_3DSTATE_WM_SAMPLER_COUNT_SHIFT			27
# define GEN6_3DSTATE_WM_BINDING_TABLE_ENTRY_COUNT_SHIFT	18
/* DW4 */
# define GEN6_3DSTATE_WM_DISPATCH_START_GRF_0_SHIFT		16
/* DW5 */
# define GEN6_3DSTATE_WM_MAX_THREADS_SHIFT			25
# define GEN6_3DSTATE_WM_DISPATCH_ENABLE			(1 << 19)
# define GEN6_3DSTATE_WM_16_DISPATCH_ENABLE			(1 << 1)
# define GEN6_3DSTATE_WM_8_DISPATCH_ENABLE			(1 << 0)
/* DW6 */
# define GEN6_3DSTATE_WM_NUM_SF_OUTPUTS_SHIFT			20
# define GEN6_3DSTATE_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC	(1 << 15)
# define GEN6_3DSTATE_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC	(1 << 14)
# define GEN6_3DSTATE_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC	(1 << 13)
# define GEN6_3DSTATE_WM_PERSPECTIVE_SAMPLE_BARYCENTRIC		(1 << 12)
# define GEN6_3DSTATE_WM_PERSPECTIVE_CENTROID_BARYCENTRIC	(1 << 11)
# define GEN6_3DSTATE_WM_PERSPECTIVE_PIXEL_BARYCENTRIC		(1 << 10)

88 89 90
#define GEN6_3DSTATE_CONSTANT_VS		GEN4_3D(3, 0, 0x15)
#define GEN6_3DSTATE_CONSTANT_GS		GEN4_3D(3, 0, 0x16)
#define GEN6_3DSTATE_CONSTANT_PS		GEN4_3D(3, 0, 0x17)
91

92
#define GEN6_3DSTATE_SAMPLE_MASK		GEN4_3D(3, 0, 0x18)
93

94 95 96
#define GEN6_3DSTATE_CONSTANT_COLOR		GEN4_3D(3, 1, 0x01)
#define GEN6_3DSTATE_SAMPLER_PALETTE_LOAD	GEN4_3D(3, 1, 0x02)
#define GEN6_3DSTATE_CHROMA_KEY			GEN4_3D(3, 1, 0x04)
97

98 99 100 101
#define GEN6_3DSTATE_POLY_STIPPLE_OFFSET	GEN4_3D(3, 1, 0x06)
#define GEN6_3DSTATE_POLY_STIPPLE_PATTERN	GEN4_3D(3, 1, 0x07)
#define GEN6_3DSTATE_LINE_STIPPLE		GEN4_3D(3, 1, 0x08)
#define GEN6_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP	GEN4_3D(3, 1, 0x09)
102
/* These two are BLC and CTG only, not BW or CL */
103 104 105
#define GEN6_3DSTATE_AA_LINE_PARAMS		GEN4_3D(3, 1, 0x0A)
#define GEN6_3DSTATE_GS_SVB_INDEX		GEN4_3D(3, 1, 0x0B)
#define GEN6_3DSTATE_MULTISAMPLE		GEN4_3D(3, 1, 0x0D)
106 107 108 109 110 111 112
/* DW1 */
# define GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_CENTER		(0 << 4)
# define GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_UPPER_LEFT	(1 << 4)
# define GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_1			(0 << 1)
# define GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_4			(2 << 1)
# define GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_8			(3 << 1)

113
/* DW1 */
114 115 116 117 118 119 120 121 122 123 124 125 126
# define GEN6_PIPE_CONTROL_NOWRITE		       (0 << 14)
# define GEN6_PIPE_CONTROL_WRITE_QWORD		       (1 << 14)
# define GEN6_PIPE_CONTROL_WRITE_DEPTH		       (2 << 14)
# define GEN6_PIPE_CONTROL_WRITE_TIME		       (3 << 14)
# define GEN6_PIPE_CONTROL_DEPTH_STALL		       (1 << 13)
# define GEN6_PIPE_CONTROL_WC_FLUSH		       (1 << 12)
# define GEN6_PIPE_CONTROL_IS_FLUSH		       (1 << 11)
# define GEN6_PIPE_CONTROL_TC_FLUSH		       (1 << 10)
# define GEN6_PIPE_CONTROL_NOTIFY_ENABLE	       (1 << 8)
# define GEN6_PIPE_CONTROL_GLOBAL_GTT		       (1 << 2)
# define GEN6_PIPE_CONTROL_LOCAL_PGTT		       (0 << 2)
# define GEN6_PIPE_CONTROL_DEPTH_CACHE_FLUSH	       (1 << 0)

127 128
#define GEN6_3DSTATE_MONOFILTER_SIZE		GEN4_3D(3, 1, 0x11)
#define GEN6_PIPE_CONTROL			GEN4_3D(3, 2, 0)
129

130
/* VERTEX_BUFFER_STATE Structure */
131 132 133
#define GEN6_VB0_BUFFER_INDEX_SHIFT	 26
#define GEN6_VB0_VERTEXDATA		(0 << 20)
#define GEN6_VB0_INSTANCEDATA	(1 << 20)
134
#define VB0_NULL_VERTEX_BUFFER	(1 << 13)
135 136

/* VERTEX_ELEMENT_STATE Structure */
137 138
#define GEN6_VE0_VERTEX_BUFFER_INDEX_SHIFT	 26 /* for GEN6 */
#define GEN6_VE0_VALID				(1 << 25) /* for GEN6 */
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271

#define GEN6_SVG_CTL		0x7400
# define GEN6_SVG_CTL_GS_BA	(0 << 8)
# define GEN6_SVG_CTL_SS_BA	(1 << 8)
# define GEN6_SVG_CTL_IO_BA	(2 << 8)
# define GEN6_SVG_CTL_GS_AUB	(3 << 8)
# define GEN6_SVG_CTL_IO_AUB	(4 << 8)
# define GEN6_SVG_CTL_SIP	(5 << 8)

#define GEN6_SVG_RDATA		0x7404
#define GEN6_SVG_WORK_CTL	0x7408

#define GEN6_VF_CTL					0x7500
# define GEN6_VF_CTL_SNAPSHOT_COMPLETE			(1 << 31)
# define GEN6_VF_CTL_SNAPSHOT_MUX_SELECT_THREADID	(0 << 8)
# define GEN6_VF_CTL_SNAPSHOT_MUX_SELECT_VF_DEBUG	(1 << 8)
# define GEN6_VF_CTL_SNAPSHOT_TYPE_VERTEX_SEQUENCE	(0 << 4)
# define GEN6_VF_CTL_SNAPSHOT_TYPE_VERTEX_INDEX		(1 << 4)
# define GEN6_VF_CTL_SKIP_INITIAL_PRIMITIVES		(1 << 3)
# define GEN6_VF_CTL_MAX_PRIMITIVES_LIMIT_ENABLE	(1 << 2)
# define GEN6_VF_CTL_VERTEX_RANGE_LIMIT_ENABLE		(1 << 1)
# define GEN6_VF_CTL_SNAPSHOT_ENABLE			(1 << 0)

#define GEN6_VF_STRG_VAL	0x7504
#define GEN6_VF_STR_VL_OVR	0x7508
#define GEN6_VF_VC_OVR		0x750c
#define GEN6_VF_STR_PSKIP	0x7510
#define GEN6_VF_MAX_PRIM	0x7514
#define GEN6_VF_RDATA		0x7518

#define GEN6_VS_CTL					0x7600
# define GEN6_VS_CTL_SNAPSHOT_COMPLETE			(1 << 31)
# define GEN6_VS_CTL_SNAPSHOT_MUX_VERTEX_0		(0 << 8)
# define GEN6_VS_CTL_SNAPSHOT_MUX_VERTEX_1		(1 << 8)
# define GEN6_VS_CTL_SNAPSHOT_MUX_VALID_COUNT		(2 << 8)
# define GEN6_VS_CTL_SNAPSHOT_MUX_VS_KERNEL_POINTER	(3 << 8)
# define GEN6_VS_CTL_SNAPSHOT_ALL_THREADS		(1 << 2)
# define GEN6_VS_CTL_THREAD_SNAPSHOT_ENABLE		(1 << 1)
# define GEN6_VS_CTL_SNAPSHOT_ENABLE			 (1 << 0)

#define GEN6_VS_STRG_VAL	0x7604
#define GEN6_VS_RDATA		0x7608

#define GEN6_SF_CTL					0x7b00
# define GEN6_SF_CTL_SNAPSHOT_COMPLETE			(1 << 31)
# define GEN6_SF_CTL_SNAPSHOT_MUX_VERTEX_0_FF_ID	(0 << 8)
# define GEN6_SF_CTL_SNAPSHOT_MUX_VERTEX_0_REL_COUNT	(1 << 8)
# define GEN6_SF_CTL_SNAPSHOT_MUX_VERTEX_1_FF_ID	(2 << 8)
# define GEN6_SF_CTL_SNAPSHOT_MUX_VERTEX_1_REL_COUNT	(3 << 8)
# define GEN6_SF_CTL_SNAPSHOT_MUX_VERTEX_2_FF_ID	(4 << 8)
# define GEN6_SF_CTL_SNAPSHOT_MUX_VERTEX_2_REL_COUNT	(5 << 8)
# define GEN6_SF_CTL_SNAPSHOT_MUX_VERTEX_COUNT		(6 << 8)
# define GEN6_SF_CTL_SNAPSHOT_MUX_SF_KERNEL_POINTER	(7 << 8)
# define GEN6_SF_CTL_MIN_MAX_PRIMITIVE_RANGE_ENABLE	(1 << 4)
# define GEN6_SF_CTL_DEBUG_CLIP_RECTANGLE_ENABLE	(1 << 3)
# define GEN6_SF_CTL_SNAPSHOT_ALL_THREADS		(1 << 2)
# define GEN6_SF_CTL_THREAD_SNAPSHOT_ENABLE		(1 << 1)
# define GEN6_SF_CTL_SNAPSHOT_ENABLE			(1 << 0)

#define GEN6_SF_STRG_VAL	0x7b04
#define GEN6_SF_RDATA		0x7b18

#define GEN6_WIZ_CTL					0x7c00
# define GEN6_WIZ_CTL_SNAPSHOT_COMPLETE			(1 << 31)
# define GEN6_WIZ_CTL_SUBSPAN_INSTANCE_SHIFT		 16
# define GEN6_WIZ_CTL_SNAPSHOT_MUX_WIZ_KERNEL_POINTER	(0 << 8)
# define GEN6_WIZ_CTL_SNAPSHOT_MUX_SUBSPAN_INSTANCE	(1 << 8)
# define GEN6_WIZ_CTL_SNAPSHOT_MUX_PRIMITIVE_SEQUENCE	(2 << 8)
# define GEN6_WIZ_CTL_SINGLE_SUBSPAN_DISPATCH		(1 << 6)
# define GEN6_WIZ_CTL_IGNORE_COLOR_SCOREBOARD_STALLS	(1 << 5)
# define GEN6_WIZ_CTL_ENABLE_SUBSPAN_INSTANCE_COMPARE	(1 << 4)
# define GEN6_WIZ_CTL_USE_UPSTREAM_SNAPSHOT_FLAG	(1 << 3)
# define GEN6_WIZ_CTL_SNAPSHOT_ALL_THREADS		(1 << 2)
# define GEN6_WIZ_CTL_THREAD_SNAPSHOT_ENABLE		(1 << 1)
# define GEN6_WIZ_CTL_SNAPSHOT_ENABLE			(1 << 0)

#define GEN6_WIZ_STRG_VAL	0x7c04
#define GEN6_WIZ_RDATA	0x7c18

#define GEN6_TS_CTL					0x7e00
# define GEN6_TS_CTL_SNAPSHOT_COMPLETE			(1 << 31)
# define GEN6_TS_CTL_SNAPSHOT_MESSAGE_ERROR		(0 << 8)
# define GEN6_TS_CTL_SNAPSHOT_INTERFACE_DESCRIPTOR	(3 << 8)
# define GEN6_TS_CTL_SNAPSHOT_ALL_CHILD_THREADS		(1 << 2)
# define GEN6_TS_CTL_SNAPSHOT_ALL_ROOT_THREADS		(1 << 1)
# define GEN6_TS_CTL_SNAPSHOT_ENABLE			(1 << 0)

#define GEN6_TS_STRG_VAL	0x7e04
#define GEN6_TS_RDATA		0x7e08

#define GEN6_TD_CTL_MUX_SHIFT				 8
#define GEN6_TD_CTL_EXTERNAL_HALT_R0_DEBUG_MATCH	(1 << 7)
#define GEN6_TD_CTL_FORCE_EXTERNAL_HALT			(1 << 6)
#define GEN6_TD_CTL_EXCEPTION_MASK_OVERRIDE		(1 << 5)
#define GEN6_TD_CTL_FORCE_THREAD_BREAKPOINT_ENABLE	(1 << 4)
#define GEN6_TD_CTL_BREAKPOINT_ENABLE			(1 << 2)

#define GEN6_TD_CTL2						0x8004
# define GEN6_TD_CTL2_ILLEGAL_OPCODE_EXCEPTION_OVERRIDE		(1 << 28)
# define GEN6_TD_CTL2_MASKSTACK_EXCEPTION_OVERRIDE		(1 << 26)
# define GEN6_TD_CTL2_SOFTWARE_EXCEPTION_OVERRIDE		(1 << 25)
# define GEN6_TD_CTL2_ACTIVE_THREAD_LIMIT_SHIFT			 16
# define GEN6_TD_CTL2_ACTIVE_THREAD_LIMIT_ENABLE		(1 << 8)
# define GEN6_TD_CTL2_THREAD_SPAWNER_EXECUTION_MASK_ENABLE	(1 << 7)
# define GEN6_TD_CTL2_WIZ_EXECUTION_MASK_ENABLE			(1 << 6)
# define GEN6_TD_CTL2_SF_EXECUTION_MASK_ENABLE			(1 << 5)
# define GEN6_TD_CTL2_CLIPPER_EXECUTION_MASK_ENABLE		(1 << 4)
# define GEN6_TD_CTL2_GS_EXECUTION_MASK_ENABLE			(1 << 3)
# define GEN6_TD_CTL2_VS_EXECUTION_MASK_ENABLE			(1 << 0)

#define GEN6_TD_VF_VS_EMSK	0x8008
#define GEN6_TD_GS_EMSK		0x800c
#define GEN6_TD_CLIP_EMSK	0x8010
#define GEN6_TD_SF_EMSK		0x8014
#define GEN6_TD_WIZ_EMSK	0x8018
#define GEN6_TD_0_6_EHTRG_VAL	0x801c
#define GEN6_TD_0_7_EHTRG_VAL	0x8020
#define GEN6_TD_0_6_EHTRG_MSK	0x8024
#define GEN6_TD_0_7_EHTRG_MSK	0x8028
#define GEN6_TD_RDATA		0x802c
#define GEN6_TD_TS_EMSK		0x8030

#define GEN6_EU_CTL			0x8800
# define GEN6_EU_CTL_SELECT_SHIFT	16
# define GEN6_EU_CTL_DATA_MUX_SHIFT	8

#define GEN6_EU_ATT_0		0x8810
#define GEN6_EU_ATT_1		0x8814
#define GEN6_EU_ATT_DATA_0	0x8820
#define GEN6_EU_ATT_DATA_1	0x8824
#define GEN6_EU_ATT_CLR_0	0x8830
#define GEN6_EU_ATT_CLR_1	0x8834
#define GEN6_EU_RDATA		0x8840
272

273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736
/* 3D state */
#define _3DOP_3DSTATE_PIPELINED			0x0
#define _3DOP_3DSTATE_NONPIPELINED		0x1
#define _3DOP_3DCONTROL				0x2
#define _3DOP_3DPRIMITIVE			0x3

#define _3DSTATE_PIPELINED_POINTERS		0x00
#define _3DSTATE_BINDING_TABLE_POINTERS		0x01
#define _3DSTATE_VERTEX_BUFFERS			0x08
#define _3DSTATE_VERTEX_ELEMENTS		0x09
#define _3DSTATE_INDEX_BUFFER			0x0A
#define _3DSTATE_VF_STATISTICS			0x0B
#define _3DSTATE_DRAWING_RECTANGLE		0x00
#define _3DSTATE_CONSTANT_COLOR			0x01
#define _3DSTATE_SAMPLER_PALETTE_LOAD		0x02
#define _3DSTATE_CHROMA_KEY			0x04
#define _3DSTATE_DEPTH_BUFFER			0x05
#define _3DSTATE_POLY_STIPPLE_OFFSET		0x06
#define _3DSTATE_POLY_STIPPLE_PATTERN		0x07
#define _3DSTATE_LINE_STIPPLE			0x08
#define _3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP	0x09
#define _3DCONTROL				0x00
#define _3DPRIMITIVE				0x00

#define _3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL	0
#define _3DPRIM_VERTEXBUFFER_ACCESS_RANDOM	1

#define GEN6_ANISORATIO_2	0
#define GEN6_ANISORATIO_4	1
#define GEN6_ANISORATIO_6	2
#define GEN6_ANISORATIO_8	3
#define GEN6_ANISORATIO_10	4
#define GEN6_ANISORATIO_12	5
#define GEN6_ANISORATIO_14	6
#define GEN6_ANISORATIO_16	7

#define GEN6_BLENDFACTOR_ONE			0x01
#define GEN6_BLENDFACTOR_SRC_COLOR		0x02
#define GEN6_BLENDFACTOR_SRC_ALPHA		0x03
#define GEN6_BLENDFACTOR_DST_ALPHA		0x04
#define GEN6_BLENDFACTOR_DST_COLOR		0x05
#define GEN6_BLENDFACTOR_SRC_ALPHA_SATURATE	0x06
#define GEN6_BLENDFACTOR_CONST_COLOR		0x07
#define GEN6_BLENDFACTOR_CONST_ALPHA		0x08
#define GEN6_BLENDFACTOR_SRC1_COLOR		0x09
#define GEN6_BLENDFACTOR_SRC1_ALPHA		0x0A
#define GEN6_BLENDFACTOR_ZERO			0x11
#define GEN6_BLENDFACTOR_INV_SRC_COLOR		0x12
#define GEN6_BLENDFACTOR_INV_SRC_ALPHA		0x13
#define GEN6_BLENDFACTOR_INV_DST_ALPHA		0x14
#define GEN6_BLENDFACTOR_INV_DST_COLOR		0x15
#define GEN6_BLENDFACTOR_INV_CONST_COLOR	0x17
#define GEN6_BLENDFACTOR_INV_CONST_ALPHA	0x18
#define GEN6_BLENDFACTOR_INV_SRC1_COLOR		0x19
#define GEN6_BLENDFACTOR_INV_SRC1_ALPHA		0x1A

#define GEN6_BLENDFUNCTION_ADD			0
#define GEN6_BLENDFUNCTION_SUBTRACT		1
#define GEN6_BLENDFUNCTION_REVERSE_SUBTRACT	2
#define GEN6_BLENDFUNCTION_MIN			3
#define GEN6_BLENDFUNCTION_MAX			4

#define GEN6_ALPHATEST_FORMAT_UNORM8	0
#define GEN6_ALPHATEST_FORMAT_FLOAT32	1

#define GEN6_CHROMAKEY_KILL_ON_ANY_MATCH	0
#define GEN6_CHROMAKEY_REPLACE_BLACK		1

#define GEN6_CLIP_API_OGL	0
#define GEN6_CLIP_API_DX	1

#define GEN6_CLIPMODE_NORMAL		0
#define GEN6_CLIPMODE_CLIP_ALL		1
#define GEN6_CLIPMODE_CLIP_NON_REJECTED	2
#define GEN6_CLIPMODE_REJECT_ALL	3
#define GEN6_CLIPMODE_ACCEPT_ALL	4

#define GEN6_CLIP_NDCSPACE	0
#define GEN6_CLIP_SCREENSPACE	1

#define GEN6_COMPAREFUNCTION_ALWAYS	0
#define GEN6_COMPAREFUNCTION_NEVER	1
#define GEN6_COMPAREFUNCTION_LESS	2
#define GEN6_COMPAREFUNCTION_EQUAL	3
#define GEN6_COMPAREFUNCTION_LEQUAL	4
#define GEN6_COMPAREFUNCTION_GREATER	5
#define GEN6_COMPAREFUNCTION_NOTEQUAL	6
#define GEN6_COMPAREFUNCTION_GEQUAL	7

#define GEN6_COVERAGE_PIXELS_HALF	0
#define GEN6_COVERAGE_PIXELS_1		1
#define GEN6_COVERAGE_PIXELS_2		2
#define GEN6_COVERAGE_PIXELS_4		3

#define GEN6_DEFAULTCOLOR_R8G8B8A8_UNORM	0
#define GEN6_DEFAULTCOLOR_R32G32B32A32_FLOAT	1

#define GEN6_FLOATING_POINT_IEEE_754		0
#define GEN6_FLOATING_POINT_NON_IEEE_754	1

#define GEN6_FRONTWINDING_CW	0
#define GEN6_FRONTWINDING_CCW	1

#define GEN6_INDEX_BYTE		0
#define GEN6_INDEX_WORD		1
#define GEN6_INDEX_DWORD	2

#define GEN6_LOGICOPFUNCTION_CLEAR		0
#define GEN6_LOGICOPFUNCTION_NOR		1
#define GEN6_LOGICOPFUNCTION_AND_INVERTED	2
#define GEN6_LOGICOPFUNCTION_COPY_INVERTED	3
#define GEN6_LOGICOPFUNCTION_AND_REVERSE	4
#define GEN6_LOGICOPFUNCTION_INVERT		5
#define GEN6_LOGICOPFUNCTION_XOR		6
#define GEN6_LOGICOPFUNCTION_NAND		7
#define GEN6_LOGICOPFUNCTION_AND		8
#define GEN6_LOGICOPFUNCTION_EQUIV		9
#define GEN6_LOGICOPFUNCTION_NOOP		10
#define GEN6_LOGICOPFUNCTION_OR_INVERTED	11
#define GEN6_LOGICOPFUNCTION_COPY		12
#define GEN6_LOGICOPFUNCTION_OR_REVERSE		13
#define GEN6_LOGICOPFUNCTION_OR			14
#define GEN6_LOGICOPFUNCTION_SET		15

#define GEN6_POLYGON_FRONT_FACING	0
#define GEN6_POLYGON_BACK_FACING	1

#define GEN6_PROVOKING_VERTEX_0		0
#define GEN6_PROVOKING_VERTEX_1		1
#define GEN6_PROVOKING_VERTEX_2		2

#define GEN6_RASTRULE_UPPER_LEFT	0
#define GEN6_RASTRULE_UPPER_RIGHT	1

#define GEN6_RENDERTARGET_CLAMPRANGE_UNORM	0
#define GEN6_RENDERTARGET_CLAMPRANGE_SNORM	1
#define GEN6_RENDERTARGET_CLAMPRANGE_FORMAT	2

#define GEN6_STENCILOP_KEEP	0
#define GEN6_STENCILOP_ZERO	1
#define GEN6_STENCILOP_REPLACE	2
#define GEN6_STENCILOP_INCRSAT	3
#define GEN6_STENCILOP_DECRSAT	4
#define GEN6_STENCILOP_INCR	5
#define GEN6_STENCILOP_DECR	6
#define GEN6_STENCILOP_INVERT	7

#define GEN6_THREAD_PRIORITY_NORMAL	0
#define GEN6_THREAD_PRIORITY_HIGH	1

#define GEN6_TILEWALK_XMAJOR		0
#define GEN6_TILEWALK_YMAJOR		1

#define GEN6_VERTEX_SUBPIXEL_PRECISION_8BITS	0
#define GEN6_VERTEX_SUBPIXEL_PRECISION_4BITS	1

#define GEN6_VERTEXBUFFER_ACCESS_VERTEXDATA	0
#define GEN6_VERTEXBUFFER_ACCESS_INSTANCEDATA	1

/* Execution Unit (EU) defines */

#define GEN6_ALIGN_1	0
#define GEN6_ALIGN_16	1

#define GEN6_ADDRESS_DIRECT			0
#define GEN6_ADDRESS_REGISTER_INDIRECT_REGISTER	1

#define GEN6_CHANNEL_X	0
#define GEN6_CHANNEL_Y	1
#define GEN6_CHANNEL_Z	2
#define GEN6_CHANNEL_W	3

#define GEN6_COMPRESSION_NONE	0
#define GEN6_COMPRESSION_2NDHALF	1
#define GEN6_COMPRESSION_COMPRESSED	2

#define GEN6_CONDITIONAL_NONE	0
#define GEN6_CONDITIONAL_Z	1
#define GEN6_CONDITIONAL_NZ	2
#define GEN6_CONDITIONAL_EQ	1	/* Z */
#define GEN6_CONDITIONAL_NEQ	2	/* NZ */
#define GEN6_CONDITIONAL_G	3
#define GEN6_CONDITIONAL_GE	4
#define GEN6_CONDITIONAL_L	5
#define GEN6_CONDITIONAL_LE	6
#define GEN6_CONDITIONAL_C	7
#define GEN6_CONDITIONAL_O	8

#define GEN6_DEBUG_NONE		0
#define GEN6_DEBUG_BREAKPOINT	1

#define GEN6_DEPENDENCY_NORMAL		0
#define GEN6_DEPENDENCY_NOTCLEARED	1
#define GEN6_DEPENDENCY_NOTCHECKED	2
#define GEN6_DEPENDENCY_DISABLE		3

#define GEN6_EXECUTE_1		0
#define GEN6_EXECUTE_2		1
#define GEN6_EXECUTE_4		2
#define GEN6_EXECUTE_8		3
#define GEN6_EXECUTE_16		4
#define GEN6_EXECUTE_32		5

#define GEN6_HORIZONTAL_STRIDE_0	0
#define GEN6_HORIZONTAL_STRIDE_1	1
#define GEN6_HORIZONTAL_STRIDE_2	2
#define GEN6_HORIZONTAL_STRIDE_4	3

#define GEN6_INSTRUCTION_NORMAL		0
#define GEN6_INSTRUCTION_SATURATE	1

#define GEN6_MASK_ENABLE	0
#define GEN6_MASK_DISABLE	1

#define GEN6_OPCODE_MOV		1
#define GEN6_OPCODE_SEL		2
#define GEN6_OPCODE_NOT		4
#define GEN6_OPCODE_AND		5
#define GEN6_OPCODE_OR		6
#define GEN6_OPCODE_XOR		7
#define GEN6_OPCODE_SHR		8
#define GEN6_OPCODE_SHL		9
#define GEN6_OPCODE_RSR		10
#define GEN6_OPCODE_RSL		11
#define GEN6_OPCODE_ASR		12
#define GEN6_OPCODE_CMP		16
#define GEN6_OPCODE_JMPI	32
#define GEN6_OPCODE_IF		34
#define GEN6_OPCODE_IFF		35
#define GEN6_OPCODE_ELSE	36
#define GEN6_OPCODE_ENDIF	37
#define GEN6_OPCODE_DO		38
#define GEN6_OPCODE_WHILE	39
#define GEN6_OPCODE_BREAK	40
#define GEN6_OPCODE_CONTINUE	41
#define GEN6_OPCODE_HALT	42
#define GEN6_OPCODE_MSAVE	44
#define GEN6_OPCODE_MRESTORE	45
#define GEN6_OPCODE_PUSH	46
#define GEN6_OPCODE_POP		47
#define GEN6_OPCODE_WAIT	48
#define GEN6_OPCODE_SEND	49
#define GEN6_OPCODE_ADD		64
#define GEN6_OPCODE_MUL		65
#define GEN6_OPCODE_AVG		66
#define GEN6_OPCODE_FRC		67
#define GEN6_OPCODE_RNDU	68
#define GEN6_OPCODE_RNDD	69
#define GEN6_OPCODE_RNDE	70
#define GEN6_OPCODE_RNDZ	71
#define GEN6_OPCODE_MAC		72
#define GEN6_OPCODE_MACH	73
#define GEN6_OPCODE_LZD		74
#define GEN6_OPCODE_SAD2	80
#define GEN6_OPCODE_SADA2	81
#define GEN6_OPCODE_DP4		84
#define GEN6_OPCODE_DPH		85
#define GEN6_OPCODE_DP3		86
#define GEN6_OPCODE_DP2		87
#define GEN6_OPCODE_DPA2	88
#define GEN6_OPCODE_LINE	89
#define GEN6_OPCODE_NOP		126

#define GEN6_PREDICATE_NONE			0
#define GEN6_PREDICATE_NORMAL			1
#define GEN6_PREDICATE_ALIGN1_ANYV		2
#define GEN6_PREDICATE_ALIGN1_ALLV		3
#define GEN6_PREDICATE_ALIGN1_ANY2H		4
#define GEN6_PREDICATE_ALIGN1_ALL2H		5
#define GEN6_PREDICATE_ALIGN1_ANY4H		6
#define GEN6_PREDICATE_ALIGN1_ALL4H		7
#define GEN6_PREDICATE_ALIGN1_ANY8H		8
#define GEN6_PREDICATE_ALIGN1_ALL8H		9
#define GEN6_PREDICATE_ALIGN1_ANY16H		10
#define GEN6_PREDICATE_ALIGN1_ALL16H		11
#define GEN6_PREDICATE_ALIGN16_REPLICATE_X	2
#define GEN6_PREDICATE_ALIGN16_REPLICATE_Y	3
#define GEN6_PREDICATE_ALIGN16_REPLICATE_Z	4
#define GEN6_PREDICATE_ALIGN16_REPLICATE_W	5
#define GEN6_PREDICATE_ALIGN16_ANY4H		6
#define GEN6_PREDICATE_ALIGN16_ALL4H		7

#define GEN6_ARCHITECTURE_REGISTER_FILE		0
#define GEN6_GENERAL_REGISTER_FILE		1
#define GEN6_MESSAGE_REGISTER_FILE		2
#define GEN6_IMMEDIATE_VALUE			3

#define GEN6_REGISTER_TYPE_UD	0
#define GEN6_REGISTER_TYPE_D	1
#define GEN6_REGISTER_TYPE_UW	2
#define GEN6_REGISTER_TYPE_W	3
#define GEN6_REGISTER_TYPE_UB	4
#define GEN6_REGISTER_TYPE_B	5
/* packed float vector, immediates only? */
#define GEN6_REGISTER_TYPE_VF	5
#define GEN6_REGISTER_TYPE_HF	6
/* packed int vector, immediates only, uword dest only */
#define GEN6_REGISTER_TYPE_V	6
#define GEN6_REGISTER_TYPE_F	7

#define GEN6_ARF_NULL			0x00
#define GEN6_ARF_ADDRESS		0x10
#define GEN6_ARF_ACCUMULATOR		0x20
#define GEN6_ARF_FLAG			0x30
#define GEN6_ARF_MASK			0x40
#define GEN6_ARF_MASK_STACK		0x50
#define GEN6_ARF_MASK_STACK_DEPTH	0x60
#define GEN6_ARF_STATE			0x70
#define GEN6_ARF_CONTROL		0x80
#define GEN6_ARF_NOTIFICATION_COUNT	0x90
#define GEN6_ARF_I			0xA0

#define GEN6_AMASK	0
#define GEN6_IMASK	1
#define GEN6_LMASK	2
#define GEN6_CMASK	3

#define GEN6_THREAD_NORMAL	0
#define GEN6_THREAD_ATOMIC	1
#define GEN6_THREAD_SWITCH	2

#define GEN6_VERTICAL_STRIDE_0			0
#define GEN6_VERTICAL_STRIDE_1			1
#define GEN6_VERTICAL_STRIDE_2			2
#define GEN6_VERTICAL_STRIDE_4			3
#define GEN6_VERTICAL_STRIDE_8			4
#define GEN6_VERTICAL_STRIDE_16			5
#define GEN6_VERTICAL_STRIDE_32			6
#define GEN6_VERTICAL_STRIDE_64			7
#define GEN6_VERTICAL_STRIDE_128		8
#define GEN6_VERTICAL_STRIDE_256		9
#define GEN6_VERTICAL_STRIDE_ONE_DIMENSIONAL	0xF

#define GEN6_WIDTH_1	0
#define GEN6_WIDTH_2	1
#define GEN6_WIDTH_4	2
#define GEN6_WIDTH_8	3
#define GEN6_WIDTH_16	4

#define GEN6_STATELESS_BUFFER_BOUNDARY_1K	0
#define GEN6_STATELESS_BUFFER_BOUNDARY_2K	1
#define GEN6_STATELESS_BUFFER_BOUNDARY_4K	2
#define GEN6_STATELESS_BUFFER_BOUNDARY_8K	3
#define GEN6_STATELESS_BUFFER_BOUNDARY_16K	4
#define GEN6_STATELESS_BUFFER_BOUNDARY_32K	5
#define GEN6_STATELESS_BUFFER_BOUNDARY_64K	6
#define GEN6_STATELESS_BUFFER_BOUNDARY_128K	7
#define GEN6_STATELESS_BUFFER_BOUNDARY_256K	8
#define GEN6_STATELESS_BUFFER_BOUNDARY_512K	9
#define GEN6_STATELESS_BUFFER_BOUNDARY_1M	10
#define GEN6_STATELESS_BUFFER_BOUNDARY_2M	11

#define GEN6_POLYGON_FACING_FRONT	0
#define GEN6_POLYGON_FACING_BACK	1

#define GEN6_MESSAGE_TARGET_NULL		0
#define GEN6_MESSAGE_TARGET_MATH		1
#define GEN6_MESSAGE_TARGET_SAMPLER		2
#define GEN6_MESSAGE_TARGET_GATEWAY		3
#define GEN6_MESSAGE_TARGET_DATAPORT_READ	4
#define GEN6_MESSAGE_TARGET_DATAPORT_WRITE	5
#define GEN6_MESSAGE_TARGET_URB			6
#define GEN6_MESSAGE_TARGET_THREAD_SPAWNER	7

#define GEN6_SAMPLER_RETURN_FORMAT_FLOAT32	0
#define GEN6_SAMPLER_RETURN_FORMAT_UINT32	2
#define GEN6_SAMPLER_RETURN_FORMAT_SINT32	3

#define GEN6_SAMPLER_MESSAGE_SIMD8_SAMPLE		0
#define GEN6_SAMPLER_MESSAGE_SIMD16_SAMPLE		0
#define GEN6_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS		0
#define GEN6_SAMPLER_MESSAGE_SIMD8_KILLPIX		1
#define GEN6_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_LOD		1
#define GEN6_SAMPLER_MESSAGE_SIMD16_SAMPLE_LOD		1
#define GEN6_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_GRADIENTS	2
#define GEN6_SAMPLER_MESSAGE_SIMD8_SAMPLE_GRADIENTS	2
#define GEN6_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_COMPARE	0
#define GEN6_SAMPLER_MESSAGE_SIMD16_SAMPLE_COMPARE	2
#define GEN6_SAMPLER_MESSAGE_SIMD4X2_RESINFO		2
#define GEN6_SAMPLER_MESSAGE_SIMD8_RESINFO		2
#define GEN6_SAMPLER_MESSAGE_SIMD16_RESINFO		2
#define GEN6_SAMPLER_MESSAGE_SIMD4X2_LD			3
#define GEN6_SAMPLER_MESSAGE_SIMD8_LD			3
#define GEN6_SAMPLER_MESSAGE_SIMD16_LD			3

#define GEN6_DATAPORT_OWORD_BLOCK_1_OWORDLOW	0
#define GEN6_DATAPORT_OWORD_BLOCK_1_OWORDHIGH	1
#define GEN6_DATAPORT_OWORD_BLOCK_2_OWORDS	2
#define GEN6_DATAPORT_OWORD_BLOCK_4_OWORDS	3
#define GEN6_DATAPORT_OWORD_BLOCK_8_OWORDS	4

#define GEN6_DATAPORT_OWORD_DUAL_BLOCK_1OWORD	0
#define GEN6_DATAPORT_OWORD_DUAL_BLOCK_4OWORDS	2

#define GEN6_DATAPORT_DWORD_SCATTERED_BLOCK_8DWORDS	2
#define GEN6_DATAPORT_DWORD_SCATTERED_BLOCK_16DWORDS	3

#define GEN6_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ		0
#define GEN6_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ	1
#define GEN6_DATAPORT_READ_MESSAGE_DWORD_BLOCK_READ		2
#define GEN6_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ		3

#define GEN6_DATAPORT_READ_TARGET_DATA_CACHE	0
#define GEN6_DATAPORT_READ_TARGET_RENDER_CACHE	1
#define GEN6_DATAPORT_READ_TARGET_SAMPLER_CACHE	2

#define GEN6_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE		   0
#define GEN6_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE_REPLICATED  1
#define GEN6_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN01	   2
#define GEN6_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN23	   3
#define GEN6_DATAPORT_RENDER_TARGET_WRITE_SIMD8_SINGLE_SOURCE_SUBSPAN01    4

#define GEN6_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE			0
#define GEN6_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE		1
#define GEN6_DATAPORT_WRITE_MESSAGE_DWORD_BLOCK_WRITE			2
#define GEN6_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE		3
#define GEN6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE			4
#define GEN6_DATAPORT_WRITE_MESSAGE_STREAMED_VERTEX_BUFFER_WRITE	5
#define GEN6_DATAPORT_WRITE_MESSAGE_FLUSH_RENDER_CACHE			7

#define GEN6_MATH_FUNCTION_INV					1
#define GEN6_MATH_FUNCTION_LOG					2
#define GEN6_MATH_FUNCTION_EXP					3
#define GEN6_MATH_FUNCTION_SQRT					4
#define GEN6_MATH_FUNCTION_RSQ					5
#define GEN6_MATH_FUNCTION_SIN					6 /* was 7 */
#define GEN6_MATH_FUNCTION_COS					7 /* was 8 */
#define GEN6_MATH_FUNCTION_SINCOS				8 /* was 6 */
#define GEN6_MATH_FUNCTION_TAN					9
#define GEN6_MATH_FUNCTION_POW					10
#define GEN6_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER	11
#define GEN6_MATH_FUNCTION_INT_DIV_QUOTIENT			12
#define GEN6_MATH_FUNCTION_INT_DIV_REMAINDER			13

#define GEN6_MATH_INTEGER_UNSIGNED	0
#define GEN6_MATH_INTEGER_SIGNED	1

#define GEN6_MATH_PRECISION_FULL	0
#define GEN6_MATH_PRECISION_PARTIAL	1

#define GEN6_MATH_SATURATE_NONE		0
#define GEN6_MATH_SATURATE_SATURATE	1

#define GEN6_MATH_DATA_VECTOR	0
#define GEN6_MATH_DATA_SCALAR	1

#define GEN6_URB_OPCODE_WRITE	0

#define GEN6_URB_SWIZZLE_NONE		0
#define GEN6_URB_SWIZZLE_INTERLEAVE	1
#define GEN6_URB_SWIZZLE_TRANSPOSE	2

#define GEN6_SCRATCH_SPACE_SIZE_1K	0
#define GEN6_SCRATCH_SPACE_SIZE_2K	1
#define GEN6_SCRATCH_SPACE_SIZE_4K	2
#define GEN6_SCRATCH_SPACE_SIZE_8K	3
#define GEN6_SCRATCH_SPACE_SIZE_16K	4
#define GEN6_SCRATCH_SPACE_SIZE_32K	5
#define GEN6_SCRATCH_SPACE_SIZE_64K	6
#define GEN6_SCRATCH_SPACE_SIZE_128K	7
#define GEN6_SCRATCH_SPACE_SIZE_256K	8
#define GEN6_SCRATCH_SPACE_SIZE_512K	9
#define GEN6_SCRATCH_SPACE_SIZE_1M	10
#define GEN6_SCRATCH_SPACE_SIZE_2M	11
737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943

/* The hardware supports two different modes for border color. The
 * default (OpenGL) mode uses floating-point color channels, while the
 * legacy mode uses 4 bytes.
 *
 * More significantly, the legacy mode respects the components of the
 * border color for channels not present in the source, (whereas the
 * default mode will ignore the border color's alpha channel and use
 * alpha==1 for an RGB source, for example).
 *
 * The legacy mode matches the semantics specified by the Render
 * extension.
 */
struct gen6_sampler_state {
   struct {
      uint32_t shadow_function:3;
      uint32_t lod_bias:11;
      uint32_t min_filter:3;
      uint32_t mag_filter:3;
      uint32_t mip_filter:2;
      uint32_t base_level:5;
      uint32_t pad:1;
      uint32_t lod_preclamp:1;
      uint32_t border_color_mode:1;
      uint32_t pad0:1;
      uint32_t disable:1;
   } ss0;

   struct {
      uint32_t r_wrap_mode:3;
      uint32_t t_wrap_mode:3;
      uint32_t s_wrap_mode:3;
      uint32_t pad:3;
      uint32_t max_lod:10;
      uint32_t min_lod:10;
   } ss1;

   struct {
      uint32_t border_color;
   } ss2;

   struct {
      uint32_t pad:19;
      uint32_t max_aniso:3;
      uint32_t chroma_key_mode:1;
      uint32_t chroma_key_index:2;
      uint32_t chroma_key_enable:1;
      uint32_t monochrome_filter_width:3;
      uint32_t monochrome_filter_height:3;
   } ss3;
};

struct gen6_blend_state {
	struct {
		uint32_t dest_blend_factor:5;
		uint32_t source_blend_factor:5;
		uint32_t pad3:1;
		uint32_t blend_func:3;
		uint32_t pad2:1;
		uint32_t ia_dest_blend_factor:5;
		uint32_t ia_source_blend_factor:5;
		uint32_t pad1:1;
		uint32_t ia_blend_func:3;
		uint32_t pad0:1;
		uint32_t ia_blend_enable:1;
		uint32_t blend_enable:1;
	} blend0;

	struct {
		uint32_t post_blend_clamp_enable:1;
		uint32_t pre_blend_clamp_enable:1;
		uint32_t clamp_range:2;
		uint32_t pad0:4;
		uint32_t x_dither_offset:2;
		uint32_t y_dither_offset:2;
		uint32_t dither_enable:1;
		uint32_t alpha_test_func:3;
		uint32_t alpha_test_enable:1;
		uint32_t pad1:1;
		uint32_t logic_op_func:4;
		uint32_t logic_op_enable:1;
		uint32_t pad2:1;
		uint32_t write_disable_b:1;
		uint32_t write_disable_g:1;
		uint32_t write_disable_r:1;
		uint32_t write_disable_a:1;
		uint32_t pad3:1;
		uint32_t alpha_to_coverage_dither:1;
		uint32_t alpha_to_one:1;
		uint32_t alpha_to_coverage:1;
	} blend1;
};

struct gen6_color_calc_state {
	struct {
		uint32_t alpha_test_format:1;
		uint32_t pad0:14;
		uint32_t round_disable:1;
		uint32_t bf_stencil_ref:8;
		uint32_t stencil_ref:8;
	} cc0;

	union {
		float alpha_ref_f;
		struct {
			uint32_t ui:8;
			uint32_t pad0:24;
		} alpha_ref_fi;
	} cc1;

	float constant_r;
	float constant_g;
	float constant_b;
	float constant_a;
};

struct gen6_depth_stencil_state {
	struct {
		uint32_t pad0:3;
		uint32_t bf_stencil_pass_depth_pass_op:3;
		uint32_t bf_stencil_pass_depth_fail_op:3;
		uint32_t bf_stencil_fail_op:3;
		uint32_t bf_stencil_func:3;
		uint32_t bf_stencil_enable:1;
		uint32_t pad1:2;
		uint32_t stencil_write_enable:1;
		uint32_t stencil_pass_depth_pass_op:3;
		uint32_t stencil_pass_depth_fail_op:3;
		uint32_t stencil_fail_op:3;
		uint32_t stencil_func:3;
		uint32_t stencil_enable:1;
	} ds0;

	struct {
		uint32_t bf_stencil_write_mask:8;
		uint32_t bf_stencil_test_mask:8;
		uint32_t stencil_write_mask:8;
		uint32_t stencil_test_mask:8;
	} ds1;

	struct {
		uint32_t pad0:26;
		uint32_t depth_write_enable:1;
		uint32_t depth_test_func:3;
		uint32_t pad1:1;
		uint32_t depth_test_enable:1;
	} ds2;
};

struct gen6_surface_state {
	struct {
		uint32_t cube_pos_z:1;
		uint32_t cube_neg_z:1;
		uint32_t cube_pos_y:1;
		uint32_t cube_neg_y:1;
		uint32_t cube_pos_x:1;
		uint32_t cube_neg_x:1;
		uint32_t pad:3;
		uint32_t render_cache_read_mode:1;
		uint32_t mipmap_layout_mode:1;
		uint32_t vert_line_stride_ofs:1;
		uint32_t vert_line_stride:1;
		uint32_t color_blend:1;
		uint32_t writedisable_blue:1;
		uint32_t writedisable_green:1;
		uint32_t writedisable_red:1;
		uint32_t writedisable_alpha:1;
		uint32_t surface_format:9;
		uint32_t data_return_format:1;
		uint32_t pad0:1;
		uint32_t surface_type:3;
	} ss0;

	struct {
		uint32_t base_addr;
	} ss1;

	struct {
		uint32_t render_target_rotation:2;
		uint32_t mip_count:4;
		uint32_t width:13;
		uint32_t height:13;
	} ss2;

	struct {
		uint32_t tile_walk:1;
		uint32_t tiled_surface:1;
		uint32_t pad:1;
		uint32_t pitch:18;
		uint32_t depth:11;
	} ss3;

	struct {
		uint32_t pad:19;
		uint32_t min_array_elt:9;
		uint32_t min_lod:4;
	} ss4;

	struct {
		uint32_t pad:20;
		uint32_t y_offset:4;
		uint32_t pad2:1;
		uint32_t x_offset:7;
	} ss5;
};

#endif