103b705cfSriastradh /**************************************************************************
203b705cfSriastradh *
303b705cfSriastradh * Copyright 2005 Tungsten Graphics, Inc., Cedar Park, Texas.
403b705cfSriastradh * All Rights Reserved.
503b705cfSriastradh *
603b705cfSriastradh * Permission is hereby granted, free of charge, to any person obtaining a
703b705cfSriastradh * copy of this software and associated documentation files (the
803b705cfSriastradh * "Software"), to deal in the Software without restriction, including
903b705cfSriastradh * without limitation the rights to use, copy, modify, merge, publish,
1003b705cfSriastradh * distribute, sub license, and/or sell copies of the Software, and to
1103b705cfSriastradh * permit persons to whom the Software is furnished to do so, subject to
1203b705cfSriastradh * the following conditions:
1303b705cfSriastradh *
1403b705cfSriastradh * The above copyright notice and this permission notice (including the
1503b705cfSriastradh * next paragraph) shall be included in all copies or substantial portions
1603b705cfSriastradh * of the Software.
1703b705cfSriastradh *
1803b705cfSriastradh * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
1903b705cfSriastradh * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2003b705cfSriastradh * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
2103b705cfSriastradh * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
2203b705cfSriastradh * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
2303b705cfSriastradh * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2403b705cfSriastradh * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2503b705cfSriastradh *
2603b705cfSriastradh **************************************************************************/
2703b705cfSriastradh
2803b705cfSriastradh#ifndef BRW_STRUCTS_H
2903b705cfSriastradh#define BRW_STRUCTS_H
3003b705cfSriastradh
3103b705cfSriastradh/* Command packets:
3203b705cfSriastradh */
3303b705cfSriastradhstruct header
3403b705cfSriastradh{
3503b705cfSriastradh   unsigned int length:16;
3603b705cfSriastradh   unsigned int opcode:16;
3703b705cfSriastradh};
3803b705cfSriastradh
3903b705cfSriastradh
4003b705cfSriastradhunion header_union
4103b705cfSriastradh{
4203b705cfSriastradh   struct header bits;
4303b705cfSriastradh   unsigned int dword;
4403b705cfSriastradh};
4503b705cfSriastradh
4603b705cfSriastradhstruct brw_3d_control
4703b705cfSriastradh{
4803b705cfSriastradh   struct
4903b705cfSriastradh   {
5003b705cfSriastradh      unsigned int length:8;
5103b705cfSriastradh      unsigned int notify_enable:1;
5203b705cfSriastradh      unsigned int pad:3;
5303b705cfSriastradh      unsigned int wc_flush_enable:1;
5403b705cfSriastradh      unsigned int depth_stall_enable:1;
5503b705cfSriastradh      unsigned int operation:2;
5603b705cfSriastradh      unsigned int opcode:16;
5703b705cfSriastradh   } header;
5803b705cfSriastradh
5903b705cfSriastradh   struct
6003b705cfSriastradh   {
6103b705cfSriastradh      unsigned int pad:2;
6203b705cfSriastradh      unsigned int dest_addr_type:1;
6303b705cfSriastradh      unsigned int dest_addr:29;
6403b705cfSriastradh   } dest;
6503b705cfSriastradh
6603b705cfSriastradh   unsigned int dword2;
6703b705cfSriastradh   unsigned int dword3;
6803b705cfSriastradh};
6903b705cfSriastradh
7003b705cfSriastradh
7103b705cfSriastradhstruct brw_3d_primitive
7203b705cfSriastradh{
7303b705cfSriastradh   struct
7403b705cfSriastradh   {
7503b705cfSriastradh      unsigned int length:8;
7603b705cfSriastradh      unsigned int pad:2;
7703b705cfSriastradh      unsigned int topology:5;
7803b705cfSriastradh      unsigned int indexed:1;
7903b705cfSriastradh      unsigned int opcode:16;
8003b705cfSriastradh   } header;
8103b705cfSriastradh
8203b705cfSriastradh   unsigned int verts_per_instance;
8303b705cfSriastradh   unsigned int start_vert_location;
8403b705cfSriastradh   unsigned int instance_count;
8503b705cfSriastradh   unsigned int start_instance_location;
8603b705cfSriastradh   unsigned int base_vert_location;
8703b705cfSriastradh};
8803b705cfSriastradh
8903b705cfSriastradh/* These seem to be passed around as function args, so it works out
9003b705cfSriastradh * better to keep them as #defines:
9103b705cfSriastradh */
9203b705cfSriastradh#define BRW_FLUSH_READ_CACHE           0x1
9303b705cfSriastradh#define BRW_FLUSH_STATE_CACHE          0x2
9403b705cfSriastradh#define BRW_INHIBIT_FLUSH_RENDER_CACHE 0x4
9503b705cfSriastradh#define BRW_FLUSH_SNAPSHOT_COUNTERS    0x8
9603b705cfSriastradh
9703b705cfSriastradhstruct brw_mi_flush
9803b705cfSriastradh{
9903b705cfSriastradh   unsigned int flags:4;
10003b705cfSriastradh   unsigned int pad:12;
10103b705cfSriastradh   unsigned int opcode:16;
10203b705cfSriastradh};
10303b705cfSriastradh
10403b705cfSriastradhstruct brw_vf_statistics
10503b705cfSriastradh{
10603b705cfSriastradh   unsigned int statistics_enable:1;
10703b705cfSriastradh   unsigned int pad:15;
10803b705cfSriastradh   unsigned int opcode:16;
10903b705cfSriastradh};
11003b705cfSriastradh
11103b705cfSriastradh
11203b705cfSriastradh
11303b705cfSriastradhstruct brw_binding_table_pointers
11403b705cfSriastradh{
11503b705cfSriastradh   struct header header;
11603b705cfSriastradh   unsigned int vs;
11703b705cfSriastradh   unsigned int gs;
11803b705cfSriastradh   unsigned int clp;
11903b705cfSriastradh   unsigned int sf;
12003b705cfSriastradh   unsigned int wm;
12103b705cfSriastradh};
12203b705cfSriastradh
12303b705cfSriastradh
12403b705cfSriastradhstruct brw_blend_constant_color
12503b705cfSriastradh{
12603b705cfSriastradh   struct header header;
12703b705cfSriastradh   float blend_constant_color[4];
12803b705cfSriastradh};
12903b705cfSriastradh
13003b705cfSriastradh
13103b705cfSriastradhstruct brw_depthbuffer
13203b705cfSriastradh{
13303b705cfSriastradh   union header_union header;
13403b705cfSriastradh
13503b705cfSriastradh   union {
13603b705cfSriastradh      struct {
13703b705cfSriastradh	 unsigned int pitch:18;
13803b705cfSriastradh	 unsigned int format:3;
13903b705cfSriastradh	 unsigned int pad:4;
14003b705cfSriastradh	 unsigned int depth_offset_disable:1;
14103b705cfSriastradh	 unsigned int tile_walk:1;
14203b705cfSriastradh	 unsigned int tiled_surface:1;
14303b705cfSriastradh	 unsigned int pad2:1;
14403b705cfSriastradh	 unsigned int surface_type:3;
14503b705cfSriastradh      } bits;
14603b705cfSriastradh      unsigned int dword;
14703b705cfSriastradh   } dword1;
14803b705cfSriastradh
14903b705cfSriastradh   unsigned int dword2_base_addr;
15003b705cfSriastradh
15103b705cfSriastradh   union {
15203b705cfSriastradh      struct {
15303b705cfSriastradh	 unsigned int pad:1;
15403b705cfSriastradh	 unsigned int mipmap_layout:1;
15503b705cfSriastradh	 unsigned int lod:4;
15603b705cfSriastradh	 unsigned int width:13;
15703b705cfSriastradh	 unsigned int height:13;
15803b705cfSriastradh      } bits;
15903b705cfSriastradh      unsigned int dword;
16003b705cfSriastradh   } dword3;
16103b705cfSriastradh
16203b705cfSriastradh   union {
16303b705cfSriastradh      struct {
16403b705cfSriastradh	 unsigned int pad:12;
16503b705cfSriastradh	 unsigned int min_array_element:9;
16603b705cfSriastradh	 unsigned int depth:11;
16703b705cfSriastradh      } bits;
16803b705cfSriastradh      unsigned int dword;
16903b705cfSriastradh   } dword4;
17003b705cfSriastradh};
17103b705cfSriastradh
17203b705cfSriastradhstruct brw_drawrect
17303b705cfSriastradh{
17403b705cfSriastradh   struct header header;
17503b705cfSriastradh   unsigned int xmin:16;
17603b705cfSriastradh   unsigned int ymin:16;
17703b705cfSriastradh   unsigned int xmax:16;
17803b705cfSriastradh   unsigned int ymax:16;
17903b705cfSriastradh   unsigned int xorg:16;
18003b705cfSriastradh   unsigned int yorg:16;
18103b705cfSriastradh};
18203b705cfSriastradh
18303b705cfSriastradh
18403b705cfSriastradh
18503b705cfSriastradh
18603b705cfSriastradhstruct brw_global_depth_offset_clamp
18703b705cfSriastradh{
18803b705cfSriastradh   struct header header;
18903b705cfSriastradh   float depth_offset_clamp;
19003b705cfSriastradh};
19103b705cfSriastradh
19203b705cfSriastradhstruct brw_indexbuffer
19303b705cfSriastradh{
19403b705cfSriastradh   union {
19503b705cfSriastradh      struct
19603b705cfSriastradh      {
19703b705cfSriastradh	 unsigned int length:8;
19803b705cfSriastradh	 unsigned int index_format:2;
19903b705cfSriastradh	 unsigned int cut_index_enable:1;
20003b705cfSriastradh	 unsigned int pad:5;
20103b705cfSriastradh	 unsigned int opcode:16;
20203b705cfSriastradh      } bits;
20303b705cfSriastradh      unsigned int dword;
20403b705cfSriastradh
20503b705cfSriastradh   } header;
20603b705cfSriastradh
20703b705cfSriastradh   unsigned int buffer_start;
20803b705cfSriastradh   unsigned int buffer_end;
20903b705cfSriastradh};
21003b705cfSriastradh
21103b705cfSriastradh
21203b705cfSriastradhstruct brw_line_stipple
21303b705cfSriastradh{
21403b705cfSriastradh   struct header header;
21503b705cfSriastradh
21603b705cfSriastradh   struct
21703b705cfSriastradh   {
21803b705cfSriastradh      unsigned int pattern:16;
21903b705cfSriastradh      unsigned int pad:16;
22003b705cfSriastradh   } bits0;
22103b705cfSriastradh
22203b705cfSriastradh   struct
22303b705cfSriastradh   {
22403b705cfSriastradh      unsigned int repeat_count:9;
22503b705cfSriastradh      unsigned int pad:7;
22603b705cfSriastradh      unsigned int inverse_repeat_count:16;
22703b705cfSriastradh   } bits1;
22803b705cfSriastradh};
22903b705cfSriastradh
23003b705cfSriastradh
23103b705cfSriastradhstruct brw_pipelined_state_pointers
23203b705cfSriastradh{
23303b705cfSriastradh   struct header header;
23403b705cfSriastradh
23503b705cfSriastradh   struct {
23603b705cfSriastradh      unsigned int pad:5;
23703b705cfSriastradh      unsigned int offset:27;
23803b705cfSriastradh   } vs;
23903b705cfSriastradh
24003b705cfSriastradh   struct
24103b705cfSriastradh   {
24203b705cfSriastradh      unsigned int enable:1;
24303b705cfSriastradh      unsigned int pad:4;
24403b705cfSriastradh      unsigned int offset:27;
24503b705cfSriastradh   } gs;
24603b705cfSriastradh
24703b705cfSriastradh   struct
24803b705cfSriastradh   {
24903b705cfSriastradh      unsigned int enable:1;
25003b705cfSriastradh      unsigned int pad:4;
25103b705cfSriastradh      unsigned int offset:27;
25203b705cfSriastradh   } clp;
25303b705cfSriastradh
25403b705cfSriastradh   struct
25503b705cfSriastradh   {
25603b705cfSriastradh      unsigned int pad:5;
25703b705cfSriastradh      unsigned int offset:27;
25803b705cfSriastradh   } sf;
25903b705cfSriastradh
26003b705cfSriastradh   struct
26103b705cfSriastradh   {
26203b705cfSriastradh      unsigned int pad:5;
26303b705cfSriastradh      unsigned int offset:27;
26403b705cfSriastradh   } wm;
26503b705cfSriastradh
26603b705cfSriastradh   struct
26703b705cfSriastradh   {
26803b705cfSriastradh      unsigned int pad:5;
26903b705cfSriastradh      unsigned int offset:27; /* KW: check me! */
27003b705cfSriastradh   } cc;
27103b705cfSriastradh};
27203b705cfSriastradh
27303b705cfSriastradh
27403b705cfSriastradhstruct brw_polygon_stipple_offset
27503b705cfSriastradh{
27603b705cfSriastradh   struct header header;
27703b705cfSriastradh
27803b705cfSriastradh   struct {
27903b705cfSriastradh      unsigned int y_offset:5;
28003b705cfSriastradh      unsigned int pad:3;
28103b705cfSriastradh      unsigned int x_offset:5;
28203b705cfSriastradh      unsigned int pad0:19;
28303b705cfSriastradh   } bits0;
28403b705cfSriastradh};
28503b705cfSriastradh
28603b705cfSriastradh
28703b705cfSriastradh
28803b705cfSriastradhstruct brw_polygon_stipple
28903b705cfSriastradh{
29003b705cfSriastradh   struct header header;
29103b705cfSriastradh   unsigned int stipple[32];
29203b705cfSriastradh};
29303b705cfSriastradh
29403b705cfSriastradh
29503b705cfSriastradh
29603b705cfSriastradhstruct brw_pipeline_select
29703b705cfSriastradh{
29803b705cfSriastradh   struct
29903b705cfSriastradh   {
30003b705cfSriastradh      unsigned int pipeline_select:1;
30103b705cfSriastradh      unsigned int pad:15;
30203b705cfSriastradh      unsigned int opcode:16;
30303b705cfSriastradh   } header;
30403b705cfSriastradh};
30503b705cfSriastradh
30603b705cfSriastradh
30703b705cfSriastradhstruct brw_pipe_control
30803b705cfSriastradh{
30903b705cfSriastradh   struct
31003b705cfSriastradh   {
31103b705cfSriastradh      unsigned int length:8;
31203b705cfSriastradh      unsigned int notify_enable:1;
31303b705cfSriastradh      unsigned int pad:2;
31403b705cfSriastradh      unsigned int instruction_state_cache_flush_enable:1;
31503b705cfSriastradh      unsigned int write_cache_flush_enable:1;
31603b705cfSriastradh      unsigned int depth_stall_enable:1;
31703b705cfSriastradh      unsigned int post_sync_operation:2;
31803b705cfSriastradh
31903b705cfSriastradh      unsigned int opcode:16;
32003b705cfSriastradh   } header;
32103b705cfSriastradh
32203b705cfSriastradh   struct
32303b705cfSriastradh   {
32403b705cfSriastradh      unsigned int pad:2;
32503b705cfSriastradh      unsigned int dest_addr_type:1;
32603b705cfSriastradh      unsigned int dest_addr:29;
32703b705cfSriastradh   } bits1;
32803b705cfSriastradh
32903b705cfSriastradh   unsigned int data0;
33003b705cfSriastradh   unsigned int data1;
33103b705cfSriastradh};
33203b705cfSriastradh
33303b705cfSriastradh
33403b705cfSriastradhstruct brw_urb_fence
33503b705cfSriastradh{
33603b705cfSriastradh   struct
33703b705cfSriastradh   {
33803b705cfSriastradh      unsigned int length:8;
33903b705cfSriastradh      unsigned int vs_realloc:1;
34003b705cfSriastradh      unsigned int gs_realloc:1;
34103b705cfSriastradh      unsigned int clp_realloc:1;
34203b705cfSriastradh      unsigned int sf_realloc:1;
34303b705cfSriastradh      unsigned int vfe_realloc:1;
34403b705cfSriastradh      unsigned int cs_realloc:1;
34503b705cfSriastradh      unsigned int pad:2;
34603b705cfSriastradh      unsigned int opcode:16;
34703b705cfSriastradh   } header;
34803b705cfSriastradh
34903b705cfSriastradh   struct
35003b705cfSriastradh   {
35103b705cfSriastradh      unsigned int vs_fence:10;
35203b705cfSriastradh      unsigned int gs_fence:10;
35303b705cfSriastradh      unsigned int clp_fence:10;
35403b705cfSriastradh      unsigned int pad:2;
35503b705cfSriastradh   } bits0;
35603b705cfSriastradh
35703b705cfSriastradh   struct
35803b705cfSriastradh   {
35903b705cfSriastradh      unsigned int sf_fence:10;
36003b705cfSriastradh      unsigned int vf_fence:10;
36103b705cfSriastradh      unsigned int cs_fence:10;
36203b705cfSriastradh      unsigned int pad:2;
36303b705cfSriastradh   } bits1;
36403b705cfSriastradh};
36503b705cfSriastradh
36603b705cfSriastradhstruct brw_constant_buffer_state /* previously brw_command_streamer */
36703b705cfSriastradh{
36803b705cfSriastradh   struct header header;
36903b705cfSriastradh
37003b705cfSriastradh   struct
37103b705cfSriastradh   {
37203b705cfSriastradh      unsigned int nr_urb_entries:3;
37303b705cfSriastradh      unsigned int pad:1;
37403b705cfSriastradh      unsigned int urb_entry_size:5;
37503b705cfSriastradh      unsigned int pad0:23;
37603b705cfSriastradh   } bits0;
37703b705cfSriastradh};
37803b705cfSriastradh
37903b705cfSriastradhstruct brw_constant_buffer
38003b705cfSriastradh{
38103b705cfSriastradh   struct
38203b705cfSriastradh   {
38303b705cfSriastradh      unsigned int length:8;
38403b705cfSriastradh      unsigned int valid:1;
38503b705cfSriastradh      unsigned int pad:7;
38603b705cfSriastradh      unsigned int opcode:16;
38703b705cfSriastradh   } header;
38803b705cfSriastradh
38903b705cfSriastradh   struct
39003b705cfSriastradh   {
39103b705cfSriastradh      unsigned int buffer_length:6;
39203b705cfSriastradh      unsigned int buffer_address:26;
39303b705cfSriastradh   } bits0;
39403b705cfSriastradh};
39503b705cfSriastradh
39603b705cfSriastradhstruct brw_state_base_address
39703b705cfSriastradh{
39803b705cfSriastradh   struct header header;
39903b705cfSriastradh
40003b705cfSriastradh   struct
40103b705cfSriastradh   {
40203b705cfSriastradh      unsigned int modify_enable:1;
40303b705cfSriastradh      unsigned int pad:4;
40403b705cfSriastradh      unsigned int general_state_address:27;
40503b705cfSriastradh   } bits0;
40603b705cfSriastradh
40703b705cfSriastradh   struct
40803b705cfSriastradh   {
40903b705cfSriastradh      unsigned int modify_enable:1;
41003b705cfSriastradh      unsigned int pad:4;
41103b705cfSriastradh      unsigned int surface_state_address:27;
41203b705cfSriastradh   } bits1;
41303b705cfSriastradh
41403b705cfSriastradh   struct
41503b705cfSriastradh   {
41603b705cfSriastradh      unsigned int modify_enable:1;
41703b705cfSriastradh      unsigned int pad:4;
41803b705cfSriastradh      unsigned int indirect_object_state_address:27;
41903b705cfSriastradh   } bits2;
42003b705cfSriastradh
42103b705cfSriastradh   struct
42203b705cfSriastradh   {
42303b705cfSriastradh      unsigned int modify_enable:1;
42403b705cfSriastradh      unsigned int pad:11;
42503b705cfSriastradh      unsigned int general_state_upper_bound:20;
42603b705cfSriastradh   } bits3;
42703b705cfSriastradh
42803b705cfSriastradh   struct
42903b705cfSriastradh   {
43003b705cfSriastradh      unsigned int modify_enable:1;
43103b705cfSriastradh      unsigned int pad:11;
43203b705cfSriastradh      unsigned int indirect_object_state_upper_bound:20;
43303b705cfSriastradh   } bits4;
43403b705cfSriastradh};
43503b705cfSriastradh
43603b705cfSriastradhstruct brw_state_prefetch
43703b705cfSriastradh{
43803b705cfSriastradh   struct header header;
43903b705cfSriastradh
44003b705cfSriastradh   struct
44103b705cfSriastradh   {
44203b705cfSriastradh      unsigned int prefetch_count:3;
44303b705cfSriastradh      unsigned int pad:3;
44403b705cfSriastradh      unsigned int prefetch_pointer:26;
44503b705cfSriastradh   } bits0;
44603b705cfSriastradh};
44703b705cfSriastradh
44803b705cfSriastradhstruct brw_system_instruction_pointer
44903b705cfSriastradh{
45003b705cfSriastradh   struct header header;
45103b705cfSriastradh
45203b705cfSriastradh   struct
45303b705cfSriastradh   {
45403b705cfSriastradh      unsigned int pad:4;
45503b705cfSriastradh      unsigned int system_instruction_pointer:28;
45603b705cfSriastradh   } bits0;
45703b705cfSriastradh};
45803b705cfSriastradh
45903b705cfSriastradh
46003b705cfSriastradh
46103b705cfSriastradh
46203b705cfSriastradh/* State structs for the various fixed function units:
46303b705cfSriastradh */
46403b705cfSriastradh
46503b705cfSriastradh
46603b705cfSriastradhstruct thread0
46703b705cfSriastradh{
46803b705cfSriastradh   unsigned int pad0:1;
46903b705cfSriastradh   unsigned int grf_reg_count:3;
47003b705cfSriastradh   unsigned int pad1:2;
47103b705cfSriastradh   unsigned int kernel_start_pointer:26;
47203b705cfSriastradh};
47303b705cfSriastradh
47403b705cfSriastradhstruct thread1
47503b705cfSriastradh{
47603b705cfSriastradh   unsigned int ext_halt_exception_enable:1;
47703b705cfSriastradh   unsigned int sw_exception_enable:1;
47803b705cfSriastradh   unsigned int mask_stack_exception_enable:1;
47903b705cfSriastradh   unsigned int timeout_exception_enable:1;
48003b705cfSriastradh   unsigned int illegal_op_exception_enable:1;
48103b705cfSriastradh   unsigned int pad0:3;
48203b705cfSriastradh   unsigned int depth_coef_urb_read_offset:6;	/* WM only */
48303b705cfSriastradh   unsigned int pad1:2;
48403b705cfSriastradh   unsigned int floating_point_mode:1;
48503b705cfSriastradh   unsigned int thread_priority:1;
48603b705cfSriastradh   unsigned int binding_table_entry_count:8;
48703b705cfSriastradh   unsigned int pad3:5;
48803b705cfSriastradh   unsigned int single_program_flow:1;
48903b705cfSriastradh};
49003b705cfSriastradh
49103b705cfSriastradhstruct thread2
49203b705cfSriastradh{
49303b705cfSriastradh   unsigned int per_thread_scratch_space:4;
49403b705cfSriastradh   unsigned int pad0:6;
49503b705cfSriastradh   unsigned int scratch_space_base_pointer:22;
49603b705cfSriastradh};
49703b705cfSriastradh
49803b705cfSriastradh
49903b705cfSriastradhstruct thread3
50003b705cfSriastradh{
50103b705cfSriastradh   unsigned int dispatch_grf_start_reg:4;
50203b705cfSriastradh   unsigned int urb_entry_read_offset:6;
50303b705cfSriastradh   unsigned int pad0:1;
50403b705cfSriastradh   unsigned int urb_entry_read_length:6;
50503b705cfSriastradh   unsigned int pad1:1;
50603b705cfSriastradh   unsigned int const_urb_entry_read_offset:6;
50703b705cfSriastradh   unsigned int pad2:1;
50803b705cfSriastradh   unsigned int const_urb_entry_read_length:6;
50903b705cfSriastradh   unsigned int pad3:1;
51003b705cfSriastradh};
51103b705cfSriastradh
51203b705cfSriastradh
51303b705cfSriastradh
51403b705cfSriastradhstruct brw_clip_unit_state
51503b705cfSriastradh{
51603b705cfSriastradh   struct thread0 thread0;
51703b705cfSriastradh   struct thread1 thread1;
51803b705cfSriastradh   struct thread2 thread2;
51903b705cfSriastradh   struct thread3 thread3;
52003b705cfSriastradh
52103b705cfSriastradh   struct
52203b705cfSriastradh   {
52303b705cfSriastradh      unsigned int pad0:9;
52403b705cfSriastradh      unsigned int gs_output_stats:1; /* not always */
52503b705cfSriastradh      unsigned int stats_enable:1;
52603b705cfSriastradh      unsigned int nr_urb_entries:7;
52703b705cfSriastradh      unsigned int pad1:1;
52803b705cfSriastradh      unsigned int urb_entry_allocation_size:5;
52903b705cfSriastradh      unsigned int pad2:1;
53003b705cfSriastradh      unsigned int max_threads:6; 	/* may be less */
53103b705cfSriastradh      unsigned int pad3:1;
53203b705cfSriastradh   } thread4;
53303b705cfSriastradh
53403b705cfSriastradh   struct
53503b705cfSriastradh   {
53603b705cfSriastradh      unsigned int pad0:13;
53703b705cfSriastradh      unsigned int clip_mode:3;
53803b705cfSriastradh      unsigned int userclip_enable_flags:8;
53903b705cfSriastradh      unsigned int userclip_must_clip:1;
54003b705cfSriastradh      unsigned int pad1:1;
54103b705cfSriastradh      unsigned int guard_band_enable:1;
54203b705cfSriastradh      unsigned int viewport_z_clip_enable:1;
54303b705cfSriastradh      unsigned int viewport_xy_clip_enable:1;
54403b705cfSriastradh      unsigned int vertex_position_space:1;
54503b705cfSriastradh      unsigned int api_mode:1;
54603b705cfSriastradh      unsigned int pad2:1;
54703b705cfSriastradh   } clip5;
54803b705cfSriastradh
54903b705cfSriastradh   struct
55003b705cfSriastradh   {
55103b705cfSriastradh      unsigned int pad0:5;
55203b705cfSriastradh      unsigned int clipper_viewport_state_ptr:27;
55303b705cfSriastradh   } clip6;
55403b705cfSriastradh
55503b705cfSriastradh
55603b705cfSriastradh   float viewport_xmin;
55703b705cfSriastradh   float viewport_xmax;
55803b705cfSriastradh   float viewport_ymin;
55903b705cfSriastradh   float viewport_ymax;
56003b705cfSriastradh};
56103b705cfSriastradh
56203b705cfSriastradh
56303b705cfSriastradh
56403b705cfSriastradhstruct brw_cc_unit_state
56503b705cfSriastradh{
56603b705cfSriastradh   struct
56703b705cfSriastradh   {
56803b705cfSriastradh      unsigned int pad0:3;
56903b705cfSriastradh      unsigned int bf_stencil_pass_depth_pass_op:3;
57003b705cfSriastradh      unsigned int bf_stencil_pass_depth_fail_op:3;
57103b705cfSriastradh      unsigned int bf_stencil_fail_op:3;
57203b705cfSriastradh      unsigned int bf_stencil_func:3;
57303b705cfSriastradh      unsigned int bf_stencil_enable:1;
57403b705cfSriastradh      unsigned int pad1:2;
57503b705cfSriastradh      unsigned int stencil_write_enable:1;
57603b705cfSriastradh      unsigned int stencil_pass_depth_pass_op:3;
57703b705cfSriastradh      unsigned int stencil_pass_depth_fail_op:3;
57803b705cfSriastradh      unsigned int stencil_fail_op:3;
57903b705cfSriastradh      unsigned int stencil_func:3;
58003b705cfSriastradh      unsigned int stencil_enable:1;
58103b705cfSriastradh   } cc0;
58203b705cfSriastradh
58303b705cfSriastradh
58403b705cfSriastradh   struct
58503b705cfSriastradh   {
58603b705cfSriastradh      unsigned int bf_stencil_ref:8;
58703b705cfSriastradh      unsigned int stencil_write_mask:8;
58803b705cfSriastradh      unsigned int stencil_test_mask:8;
58903b705cfSriastradh      unsigned int stencil_ref:8;
59003b705cfSriastradh   } cc1;
59103b705cfSriastradh
59203b705cfSriastradh
59303b705cfSriastradh   struct
59403b705cfSriastradh   {
59503b705cfSriastradh      unsigned int logicop_enable:1;
59603b705cfSriastradh      unsigned int pad0:10;
59703b705cfSriastradh      unsigned int depth_write_enable:1;
59803b705cfSriastradh      unsigned int depth_test_function:3;
59903b705cfSriastradh      unsigned int depth_test:1;
60003b705cfSriastradh      unsigned int bf_stencil_write_mask:8;
60103b705cfSriastradh      unsigned int bf_stencil_test_mask:8;
60203b705cfSriastradh   } cc2;
60303b705cfSriastradh
60403b705cfSriastradh
60503b705cfSriastradh   struct
60603b705cfSriastradh   {
60703b705cfSriastradh      unsigned int pad0:8;
60803b705cfSriastradh      unsigned int alpha_test_func:3;
60903b705cfSriastradh      unsigned int alpha_test:1;
61003b705cfSriastradh      unsigned int blend_enable:1;
61103b705cfSriastradh      unsigned int ia_blend_enable:1;
61203b705cfSriastradh      unsigned int pad1:1;
61303b705cfSriastradh      unsigned int alpha_test_format:1;
61403b705cfSriastradh      unsigned int pad2:16;
61503b705cfSriastradh   } cc3;
61603b705cfSriastradh
61703b705cfSriastradh   struct
61803b705cfSriastradh   {
61903b705cfSriastradh      unsigned int pad0:5;
62003b705cfSriastradh      unsigned int cc_viewport_state_offset:27;
62103b705cfSriastradh   } cc4;
62203b705cfSriastradh
62303b705cfSriastradh   struct
62403b705cfSriastradh   {
62503b705cfSriastradh      unsigned int pad0:2;
62603b705cfSriastradh      unsigned int ia_dest_blend_factor:5;
62703b705cfSriastradh      unsigned int ia_src_blend_factor:5;
62803b705cfSriastradh      unsigned int ia_blend_function:3;
62903b705cfSriastradh      unsigned int statistics_enable:1;
63003b705cfSriastradh      unsigned int logicop_func:4;
63103b705cfSriastradh      unsigned int pad1:11;
63203b705cfSriastradh      unsigned int dither_enable:1;
63303b705cfSriastradh   } cc5;
63403b705cfSriastradh
63503b705cfSriastradh   struct
63603b705cfSriastradh   {
63703b705cfSriastradh      unsigned int clamp_post_alpha_blend:1;
63803b705cfSriastradh      unsigned int clamp_pre_alpha_blend:1;
63903b705cfSriastradh      unsigned int clamp_range:2;
64003b705cfSriastradh      unsigned int pad0:11;
64103b705cfSriastradh      unsigned int y_dither_offset:2;
64203b705cfSriastradh      unsigned int x_dither_offset:2;
64303b705cfSriastradh      unsigned int dest_blend_factor:5;
64403b705cfSriastradh      unsigned int src_blend_factor:5;
64503b705cfSriastradh      unsigned int blend_function:3;
64603b705cfSriastradh   } cc6;
64703b705cfSriastradh
64803b705cfSriastradh   struct {
64903b705cfSriastradh      union {
65003b705cfSriastradh	 float f;
65103b705cfSriastradh	 unsigned char ub[4];
65203b705cfSriastradh      } alpha_ref;
65303b705cfSriastradh   } cc7;
65403b705cfSriastradh};
65503b705cfSriastradh
65603b705cfSriastradh
65703b705cfSriastradh
65803b705cfSriastradhstruct brw_sf_unit_state
65903b705cfSriastradh{
66003b705cfSriastradh   struct thread0 thread0;
66103b705cfSriastradh   struct {
66203b705cfSriastradh      unsigned int pad0:7;
66303b705cfSriastradh      unsigned int sw_exception_enable:1;
66403b705cfSriastradh      unsigned int pad1:3;
66503b705cfSriastradh      unsigned int mask_stack_exception_enable:1;
66603b705cfSriastradh      unsigned int pad2:1;
66703b705cfSriastradh      unsigned int illegal_op_exception_enable:1;
66803b705cfSriastradh      unsigned int pad3:2;
66903b705cfSriastradh      unsigned int floating_point_mode:1;
67003b705cfSriastradh      unsigned int thread_priority:1;
67103b705cfSriastradh      unsigned int binding_table_entry_count:8;
67203b705cfSriastradh      unsigned int pad4:5;
67303b705cfSriastradh      unsigned int single_program_flow:1;
67403b705cfSriastradh   } sf1;
67503b705cfSriastradh
67603b705cfSriastradh   struct thread2 thread2;
67703b705cfSriastradh   struct thread3 thread3;
67803b705cfSriastradh
67903b705cfSriastradh   struct
68003b705cfSriastradh   {
68103b705cfSriastradh      unsigned int pad0:10;
68203b705cfSriastradh      unsigned int stats_enable:1;
68303b705cfSriastradh      unsigned int nr_urb_entries:7;
68403b705cfSriastradh      unsigned int pad1:1;
68503b705cfSriastradh      unsigned int urb_entry_allocation_size:5;
68603b705cfSriastradh      unsigned int pad2:1;
68703b705cfSriastradh      unsigned int max_threads:6;
68803b705cfSriastradh      unsigned int pad3:1;
68903b705cfSriastradh   } thread4;
69003b705cfSriastradh
69103b705cfSriastradh   struct
69203b705cfSriastradh   {
69303b705cfSriastradh      unsigned int front_winding:1;
69403b705cfSriastradh      unsigned int viewport_transform:1;
69503b705cfSriastradh      unsigned int pad0:3;
69603b705cfSriastradh      unsigned int sf_viewport_state_offset:27;
69703b705cfSriastradh   } sf5;
69803b705cfSriastradh
69903b705cfSriastradh   struct
70003b705cfSriastradh   {
70103b705cfSriastradh      unsigned int pad0:9;
70203b705cfSriastradh      unsigned int dest_org_vbias:4;
70303b705cfSriastradh      unsigned int dest_org_hbias:4;
70403b705cfSriastradh      unsigned int scissor:1;
70503b705cfSriastradh      unsigned int disable_2x2_trifilter:1;
70603b705cfSriastradh      unsigned int disable_zero_pix_trifilter:1;
70703b705cfSriastradh      unsigned int point_rast_rule:2;
70803b705cfSriastradh      unsigned int line_endcap_aa_region_width:2;
70903b705cfSriastradh      unsigned int line_width:4;
71003b705cfSriastradh      unsigned int fast_scissor_disable:1;
71103b705cfSriastradh      unsigned int cull_mode:2;
71203b705cfSriastradh      unsigned int aa_enable:1;
71303b705cfSriastradh   } sf6;
71403b705cfSriastradh
71503b705cfSriastradh   struct
71603b705cfSriastradh   {
71703b705cfSriastradh      unsigned int point_size:11;
71803b705cfSriastradh      unsigned int use_point_size_state:1;
71903b705cfSriastradh      unsigned int subpixel_precision:1;
72003b705cfSriastradh      unsigned int sprite_point:1;
72103b705cfSriastradh      unsigned int pad0:11;
72203b705cfSriastradh      unsigned int trifan_pv:2;
72303b705cfSriastradh      unsigned int linestrip_pv:2;
72403b705cfSriastradh      unsigned int tristrip_pv:2;
72503b705cfSriastradh      unsigned int line_last_pixel_enable:1;
72603b705cfSriastradh   } sf7;
72703b705cfSriastradh
72803b705cfSriastradh};
72903b705cfSriastradh
73003b705cfSriastradh
73103b705cfSriastradhstruct brw_gs_unit_state
73203b705cfSriastradh{
73303b705cfSriastradh   struct thread0 thread0;
73403b705cfSriastradh   struct thread1 thread1;
73503b705cfSriastradh   struct thread2 thread2;
73603b705cfSriastradh   struct thread3 thread3;
73703b705cfSriastradh
73803b705cfSriastradh   struct
73903b705cfSriastradh   {
74003b705cfSriastradh      unsigned int pad0:10;
74103b705cfSriastradh      unsigned int stats_enable:1;
74203b705cfSriastradh      unsigned int nr_urb_entries:7;
74303b705cfSriastradh      unsigned int pad1:1;
74403b705cfSriastradh      unsigned int urb_entry_allocation_size:5;
74503b705cfSriastradh      unsigned int pad2:1;
74603b705cfSriastradh      unsigned int max_threads:1;
74703b705cfSriastradh      unsigned int pad3:6;
74803b705cfSriastradh   } thread4;
74903b705cfSriastradh
75003b705cfSriastradh   struct
75103b705cfSriastradh   {
75203b705cfSriastradh      unsigned int sampler_count:3;
75303b705cfSriastradh      unsigned int pad0:2;
75403b705cfSriastradh      unsigned int sampler_state_pointer:27;
75503b705cfSriastradh   } gs5;
75603b705cfSriastradh
75703b705cfSriastradh
75803b705cfSriastradh   struct
75903b705cfSriastradh   {
76003b705cfSriastradh      unsigned int max_vp_index:4;
76103b705cfSriastradh      unsigned int pad0:26;
76203b705cfSriastradh      unsigned int reorder_enable:1;
76303b705cfSriastradh      unsigned int pad1:1;
76403b705cfSriastradh   } gs6;
76503b705cfSriastradh};
76603b705cfSriastradh
76703b705cfSriastradh
76803b705cfSriastradhstruct brw_vs_unit_state
76903b705cfSriastradh{
77003b705cfSriastradh   struct thread0 thread0;
77103b705cfSriastradh   struct thread1 thread1;
77203b705cfSriastradh   struct thread2 thread2;
77303b705cfSriastradh   struct thread3 thread3;
77403b705cfSriastradh
77503b705cfSriastradh   struct
77603b705cfSriastradh   {
77703b705cfSriastradh      unsigned int pad0:10;
77803b705cfSriastradh      unsigned int stats_enable:1;
77903b705cfSriastradh      unsigned int nr_urb_entries:7;
78003b705cfSriastradh      unsigned int pad1:1;
78103b705cfSriastradh      unsigned int urb_entry_allocation_size:5;
78203b705cfSriastradh      unsigned int pad2:1;
78303b705cfSriastradh      unsigned int max_threads:4;
78403b705cfSriastradh      unsigned int pad3:3;
78503b705cfSriastradh   } thread4;
78603b705cfSriastradh
78703b705cfSriastradh   struct
78803b705cfSriastradh   {
78903b705cfSriastradh      unsigned int sampler_count:3;
79003b705cfSriastradh      unsigned int pad0:2;
79103b705cfSriastradh      unsigned int sampler_state_pointer:27;
79203b705cfSriastradh   } vs5;
79303b705cfSriastradh
79403b705cfSriastradh   struct
79503b705cfSriastradh   {
79603b705cfSriastradh      unsigned int vs_enable:1;
79703b705cfSriastradh      unsigned int vert_cache_disable:1;
79803b705cfSriastradh      unsigned int pad0:30;
79903b705cfSriastradh   } vs6;
80003b705cfSriastradh};
80103b705cfSriastradh
80203b705cfSriastradh
80303b705cfSriastradhstruct brw_wm_unit_state
80403b705cfSriastradh{
80503b705cfSriastradh   struct thread0 thread0;
80603b705cfSriastradh   struct thread1 thread1;
80703b705cfSriastradh   struct thread2 thread2;
80803b705cfSriastradh   struct thread3 thread3;
80903b705cfSriastradh
81003b705cfSriastradh   struct {
81103b705cfSriastradh      unsigned int stats_enable:1;
81203b705cfSriastradh      unsigned int pad0:1;
81303b705cfSriastradh      unsigned int sampler_count:3;
81403b705cfSriastradh      unsigned int sampler_state_pointer:27;
81503b705cfSriastradh   } wm4;
81603b705cfSriastradh
81703b705cfSriastradh   struct
81803b705cfSriastradh   {
81903b705cfSriastradh      unsigned int enable_8_pix:1;
82003b705cfSriastradh      unsigned int enable_16_pix:1;
82103b705cfSriastradh      unsigned int enable_32_pix:1;
82203b705cfSriastradh      unsigned int pad0:7;
82303b705cfSriastradh      unsigned int legacy_global_depth_bias:1;
82403b705cfSriastradh      unsigned int line_stipple:1;
82503b705cfSriastradh      unsigned int depth_offset:1;
82603b705cfSriastradh      unsigned int polygon_stipple:1;
82703b705cfSriastradh      unsigned int line_aa_region_width:2;
82803b705cfSriastradh      unsigned int line_endcap_aa_region_width:2;
82903b705cfSriastradh      unsigned int early_depth_test:1;
83003b705cfSriastradh      unsigned int thread_dispatch_enable:1;
83103b705cfSriastradh      unsigned int program_uses_depth:1;
83203b705cfSriastradh      unsigned int program_computes_depth:1;
83303b705cfSriastradh      unsigned int program_uses_killpixel:1;
83403b705cfSriastradh      unsigned int legacy_line_rast: 1;
83503b705cfSriastradh      unsigned int transposed_urb_read:1;
83603b705cfSriastradh      unsigned int max_threads:7;
83703b705cfSriastradh   } wm5;
83803b705cfSriastradh
83903b705cfSriastradh   float global_depth_offset_constant;
84003b705cfSriastradh   float global_depth_offset_scale;
84103b705cfSriastradh
84203b705cfSriastradh   struct {
84303b705cfSriastradh      unsigned int pad0:1;
84403b705cfSriastradh      unsigned int grf_reg_count_1:3;
84503b705cfSriastradh      unsigned int pad1:2;
84603b705cfSriastradh      unsigned int kernel_start_pointer_1:26;
84703b705cfSriastradh   } wm8;
84803b705cfSriastradh
84903b705cfSriastradh   struct {
85003b705cfSriastradh      unsigned int pad0:1;
85103b705cfSriastradh      unsigned int grf_reg_count_2:3;
85203b705cfSriastradh      unsigned int pad1:2;
85303b705cfSriastradh      unsigned int kernel_start_pointer_2:26;
85403b705cfSriastradh   } wm9;
85503b705cfSriastradh
85603b705cfSriastradh   struct {
85703b705cfSriastradh      unsigned int pad0:1;
85803b705cfSriastradh      unsigned int grf_reg_count_3:3;
85903b705cfSriastradh      unsigned int pad1:2;
86003b705cfSriastradh      unsigned int kernel_start_pointer_3:26;
86103b705cfSriastradh   } wm10;
86203b705cfSriastradh};
86303b705cfSriastradh
86403b705cfSriastradhstruct brw_wm_unit_state_padded {
86503b705cfSriastradh	struct brw_wm_unit_state state;
86603b705cfSriastradh	char pad[64 - sizeof(struct brw_wm_unit_state)];
86703b705cfSriastradh};
86803b705cfSriastradh
86903b705cfSriastradh/* The hardware supports two different modes for border color. The
87003b705cfSriastradh * default (OpenGL) mode uses floating-point color channels, while the
87103b705cfSriastradh * legacy mode uses 4 bytes.
87203b705cfSriastradh *
87303b705cfSriastradh * More significantly, the legacy mode respects the components of the
87403b705cfSriastradh * border color for channels not present in the source, (whereas the
87503b705cfSriastradh * default mode will ignore the border color's alpha channel and use
87603b705cfSriastradh * alpha==1 for an RGB source, for example).
87703b705cfSriastradh *
87803b705cfSriastradh * The legacy mode matches the semantics specified by the Render
87903b705cfSriastradh * extension.
88003b705cfSriastradh */
88103b705cfSriastradhstruct brw_sampler_default_border_color {
88203b705cfSriastradh   float color[4];
88303b705cfSriastradh};
88403b705cfSriastradh
88503b705cfSriastradhstruct brw_sampler_legacy_border_color {
88603b705cfSriastradh   uint8_t color[4];
88703b705cfSriastradh};
88803b705cfSriastradh
88903b705cfSriastradhstruct brw_sampler_state
89003b705cfSriastradh{
89103b705cfSriastradh
89203b705cfSriastradh   struct
89303b705cfSriastradh   {
89403b705cfSriastradh      unsigned int shadow_function:3;
89503b705cfSriastradh      unsigned int lod_bias:11;
89603b705cfSriastradh      unsigned int min_filter:3;
89703b705cfSriastradh      unsigned int mag_filter:3;
89803b705cfSriastradh      unsigned int mip_filter:2;
89903b705cfSriastradh      unsigned int base_level:5;
90003b705cfSriastradh      unsigned int pad:1;
90103b705cfSriastradh      unsigned int lod_preclamp:1;
90203b705cfSriastradh      unsigned int border_color_mode:1;
90303b705cfSriastradh      unsigned int pad0:1;
90403b705cfSriastradh      unsigned int disable:1;
90503b705cfSriastradh   } ss0;
90603b705cfSriastradh
90703b705cfSriastradh   struct
90803b705cfSriastradh   {
90903b705cfSriastradh      unsigned int r_wrap_mode:3;
91003b705cfSriastradh      unsigned int t_wrap_mode:3;
91103b705cfSriastradh      unsigned int s_wrap_mode:3;
91203b705cfSriastradh      unsigned int pad:3;
91303b705cfSriastradh      unsigned int max_lod:10;
91403b705cfSriastradh      unsigned int min_lod:10;
91503b705cfSriastradh   } ss1;
91603b705cfSriastradh
91703b705cfSriastradh
91803b705cfSriastradh   struct
91903b705cfSriastradh   {
92003b705cfSriastradh      unsigned int pad:5;
92103b705cfSriastradh      unsigned int border_color_pointer:27;
92203b705cfSriastradh   } ss2;
92303b705cfSriastradh
92403b705cfSriastradh   struct
92503b705cfSriastradh   {
92603b705cfSriastradh      unsigned int pad:19;
92703b705cfSriastradh      unsigned int max_aniso:3;
92803b705cfSriastradh      unsigned int chroma_key_mode:1;
92903b705cfSriastradh      unsigned int chroma_key_index:2;
93003b705cfSriastradh      unsigned int chroma_key_enable:1;
93103b705cfSriastradh      unsigned int monochrome_filter_width:3;
93203b705cfSriastradh      unsigned int monochrome_filter_height:3;
93303b705cfSriastradh   } ss3;
93403b705cfSriastradh};
93503b705cfSriastradh
93603b705cfSriastradh
93703b705cfSriastradhstruct brw_clipper_viewport
93803b705cfSriastradh{
93903b705cfSriastradh   float xmin;
94003b705cfSriastradh   float xmax;
94103b705cfSriastradh   float ymin;
94203b705cfSriastradh   float ymax;
94303b705cfSriastradh};
94403b705cfSriastradh
94503b705cfSriastradhstruct brw_cc_viewport
94603b705cfSriastradh{
94703b705cfSriastradh   float min_depth;
94803b705cfSriastradh   float max_depth;
94903b705cfSriastradh};
95003b705cfSriastradh
95103b705cfSriastradhstruct brw_sf_viewport
95203b705cfSriastradh{
95303b705cfSriastradh   struct {
95403b705cfSriastradh      float m00;
95503b705cfSriastradh      float m11;
95603b705cfSriastradh      float m22;
95703b705cfSriastradh      float m30;
95803b705cfSriastradh      float m31;
95903b705cfSriastradh      float m32;
96003b705cfSriastradh   } viewport;
96103b705cfSriastradh
96203b705cfSriastradh   struct {
96303b705cfSriastradh      short xmin;
96403b705cfSriastradh      short ymin;
96503b705cfSriastradh      short xmax;
96603b705cfSriastradh      short ymax;
96703b705cfSriastradh   } scissor;
96803b705cfSriastradh};
96903b705cfSriastradh
97003b705cfSriastradh/* Documented in the subsystem/shared-functions/sampler chapter...
97103b705cfSriastradh */
97203b705cfSriastradhstruct brw_surface_state
97303b705cfSriastradh{
97403b705cfSriastradh   struct {
97503b705cfSriastradh      unsigned int cube_pos_z:1;
97603b705cfSriastradh      unsigned int cube_neg_z:1;
97703b705cfSriastradh      unsigned int cube_pos_y:1;
97803b705cfSriastradh      unsigned int cube_neg_y:1;
97903b705cfSriastradh      unsigned int cube_pos_x:1;
98003b705cfSriastradh      unsigned int cube_neg_x:1;
98103b705cfSriastradh      unsigned int pad:3;
98203b705cfSriastradh      unsigned int render_cache_read_mode:1;
98303b705cfSriastradh      unsigned int mipmap_layout_mode:1;
98403b705cfSriastradh      unsigned int vert_line_stride_ofs:1;
98503b705cfSriastradh      unsigned int vert_line_stride:1;
98603b705cfSriastradh      unsigned int color_blend:1;
98703b705cfSriastradh      unsigned int writedisable_blue:1;
98803b705cfSriastradh      unsigned int writedisable_green:1;
98903b705cfSriastradh      unsigned int writedisable_red:1;
99003b705cfSriastradh      unsigned int writedisable_alpha:1;
99103b705cfSriastradh      unsigned int surface_format:9;
99203b705cfSriastradh      unsigned int data_return_format:1;
99303b705cfSriastradh      unsigned int pad0:1;
99403b705cfSriastradh      unsigned int surface_type:3;
99503b705cfSriastradh   } ss0;
99603b705cfSriastradh
99703b705cfSriastradh   struct {
99803b705cfSriastradh      unsigned int base_addr;
99903b705cfSriastradh   } ss1;
100003b705cfSriastradh
100103b705cfSriastradh   struct {
100203b705cfSriastradh      unsigned int render_target_rotation:2;
100303b705cfSriastradh      unsigned int mip_count:4;
100403b705cfSriastradh      unsigned int width:13;
100503b705cfSriastradh      unsigned int height:13;
100603b705cfSriastradh   } ss2;
100703b705cfSriastradh
100803b705cfSriastradh   struct {
100903b705cfSriastradh      unsigned int tile_walk:1;
101003b705cfSriastradh      unsigned int tiled_surface:1;
101103b705cfSriastradh      unsigned int pad:1;
101203b705cfSriastradh      unsigned int pitch:18;
101303b705cfSriastradh      unsigned int depth:11;
101403b705cfSriastradh   } ss3;
101503b705cfSriastradh
101603b705cfSriastradh   struct {
101703b705cfSriastradh      unsigned int pad:19;
101803b705cfSriastradh      unsigned int min_array_elt:9;
101903b705cfSriastradh      unsigned int min_lod:4;
102003b705cfSriastradh   } ss4;
102103b705cfSriastradh
102203b705cfSriastradh   struct {
102303b705cfSriastradh       unsigned int pad:20;
102403b705cfSriastradh       unsigned int y_offset:4;
102503b705cfSriastradh       unsigned int pad2:1;
102603b705cfSriastradh       unsigned int x_offset:7;
102703b705cfSriastradh   } ss5;
102803b705cfSriastradh};
102903b705cfSriastradh
103003b705cfSriastradh
103103b705cfSriastradh
103203b705cfSriastradhstruct brw_vertex_buffer_state
103303b705cfSriastradh{
103403b705cfSriastradh   struct {
103503b705cfSriastradh      unsigned int pitch:11;
103603b705cfSriastradh      unsigned int pad:15;
103703b705cfSriastradh      unsigned int access_type:1;
103803b705cfSriastradh      unsigned int vb_index:5;
103903b705cfSriastradh   } vb0;
104003b705cfSriastradh
104103b705cfSriastradh   unsigned int start_addr;
104203b705cfSriastradh   unsigned int max_index;
104303b705cfSriastradh#if 1
104403b705cfSriastradh   unsigned int instance_data_step_rate; /* not included for sequential/random vertices? */
104503b705cfSriastradh#endif
104603b705cfSriastradh};
104703b705cfSriastradh
104803b705cfSriastradh#define BRW_VBP_MAX 17
104903b705cfSriastradh
105003b705cfSriastradhstruct brw_vb_array_state {
105103b705cfSriastradh   struct header header;
105203b705cfSriastradh   struct brw_vertex_buffer_state vb[BRW_VBP_MAX];
105303b705cfSriastradh};
105403b705cfSriastradh
105503b705cfSriastradh
105603b705cfSriastradhstruct brw_vertex_element_state
105703b705cfSriastradh{
105803b705cfSriastradh   struct
105903b705cfSriastradh   {
106003b705cfSriastradh      unsigned int src_offset:11;
106103b705cfSriastradh      unsigned int pad:5;
106203b705cfSriastradh      unsigned int src_format:9;
106303b705cfSriastradh      unsigned int pad0:1;
106403b705cfSriastradh      unsigned int valid:1;
106503b705cfSriastradh      unsigned int vertex_buffer_index:5;
106603b705cfSriastradh   } ve0;
106703b705cfSriastradh
106803b705cfSriastradh   struct
106903b705cfSriastradh   {
107003b705cfSriastradh      unsigned int dst_offset:8;
107103b705cfSriastradh      unsigned int pad:8;
107203b705cfSriastradh      unsigned int vfcomponent3:4;
107303b705cfSriastradh      unsigned int vfcomponent2:4;
107403b705cfSriastradh      unsigned int vfcomponent1:4;
107503b705cfSriastradh      unsigned int vfcomponent0:4;
107603b705cfSriastradh   } ve1;
107703b705cfSriastradh};
107803b705cfSriastradh
107903b705cfSriastradh#define BRW_VEP_MAX 18
108003b705cfSriastradh
108103b705cfSriastradhstruct brw_vertex_element_packet {
108203b705cfSriastradh   struct header header;
108303b705cfSriastradh   struct brw_vertex_element_state ve[BRW_VEP_MAX]; /* note: less than _TNL_ATTRIB_MAX */
108403b705cfSriastradh};
108503b705cfSriastradh
108603b705cfSriastradh
108703b705cfSriastradhstruct brw_urb_immediate {
108803b705cfSriastradh   unsigned int opcode:4;
108903b705cfSriastradh   unsigned int offset:6;
109003b705cfSriastradh   unsigned int swizzle_control:2;
109103b705cfSriastradh   unsigned int pad:1;
109203b705cfSriastradh   unsigned int allocate:1;
109303b705cfSriastradh   unsigned int used:1;
109403b705cfSriastradh   unsigned int complete:1;
109503b705cfSriastradh   unsigned int response_length:4;
109603b705cfSriastradh   unsigned int msg_length:4;
109703b705cfSriastradh   unsigned int msg_target:4;
109803b705cfSriastradh   unsigned int pad1:3;
109903b705cfSriastradh   unsigned int end_of_thread:1;
110003b705cfSriastradh};
110103b705cfSriastradh
110203b705cfSriastradh/* Instruction format for the execution units:
110303b705cfSriastradh */
110403b705cfSriastradh
110503b705cfSriastradhstruct brw_instruction
110603b705cfSriastradh{
110703b705cfSriastradh   struct
110803b705cfSriastradh   {
110903b705cfSriastradh      unsigned int opcode:7;
111003b705cfSriastradh      unsigned int pad:1;
111103b705cfSriastradh      unsigned int access_mode:1;
111203b705cfSriastradh      unsigned int mask_control:1;
111303b705cfSriastradh      unsigned int dependency_control:2;
111403b705cfSriastradh      unsigned int compression_control:2;
111503b705cfSriastradh      unsigned int thread_control:2;
111603b705cfSriastradh      unsigned int predicate_control:4;
111703b705cfSriastradh      unsigned int predicate_inverse:1;
111803b705cfSriastradh      unsigned int execution_size:3;
111903b705cfSriastradh      unsigned int destreg__conditonalmod:4; /* destreg - send, conditionalmod - others */
112003b705cfSriastradh      unsigned int pad0:2;
112103b705cfSriastradh      unsigned int debug_control:1;
112203b705cfSriastradh      unsigned int saturate:1;
112303b705cfSriastradh   } header;
112403b705cfSriastradh
112503b705cfSriastradh   union {
112603b705cfSriastradh      struct
112703b705cfSriastradh      {
112803b705cfSriastradh	 unsigned int dest_reg_file:2;
112903b705cfSriastradh	 unsigned int dest_reg_type:3;
113003b705cfSriastradh	 unsigned int src0_reg_file:2;
113103b705cfSriastradh	 unsigned int src0_reg_type:3;
113203b705cfSriastradh	 unsigned int src1_reg_file:2;
113303b705cfSriastradh	 unsigned int src1_reg_type:3;
113403b705cfSriastradh	 unsigned int pad:1;
113503b705cfSriastradh	 unsigned int dest_subreg_nr:5;
113603b705cfSriastradh	 unsigned int dest_reg_nr:8;
113703b705cfSriastradh	 unsigned int dest_horiz_stride:2;
113803b705cfSriastradh	 unsigned int dest_address_mode:1;
113903b705cfSriastradh      } da1;
114003b705cfSriastradh
114103b705cfSriastradh      struct
114203b705cfSriastradh      {
114303b705cfSriastradh	 unsigned int dest_reg_file:2;
114403b705cfSriastradh	 unsigned int dest_reg_type:3;
114503b705cfSriastradh	 unsigned int src0_reg_file:2;
114603b705cfSriastradh	 unsigned int src0_reg_type:3;
114703b705cfSriastradh	 unsigned int pad:6;
114803b705cfSriastradh	 int dest_indirect_offset:10;	/* offset against the deref'd address reg */
114903b705cfSriastradh	 unsigned int dest_subreg_nr:3; /* subnr for the address reg a0.x */
115003b705cfSriastradh	 unsigned int dest_horiz_stride:2;
115103b705cfSriastradh	 unsigned int dest_address_mode:1;
115203b705cfSriastradh      } ia1;
115303b705cfSriastradh
115403b705cfSriastradh      struct
115503b705cfSriastradh      {
115603b705cfSriastradh	 unsigned int dest_reg_file:2;
115703b705cfSriastradh	 unsigned int dest_reg_type:3;
115803b705cfSriastradh	 unsigned int src0_reg_file:2;
115903b705cfSriastradh	 unsigned int src0_reg_type:3;
116003b705cfSriastradh	 unsigned int src1_reg_file:2;
116103b705cfSriastradh	 unsigned int src1_reg_type:3;
116203b705cfSriastradh	 unsigned int pad0:1;
116303b705cfSriastradh	 unsigned int dest_writemask:4;
116403b705cfSriastradh	 unsigned int dest_subreg_nr:1;
116503b705cfSriastradh	 unsigned int dest_reg_nr:8;
116603b705cfSriastradh	 unsigned int pad1:2;
116703b705cfSriastradh	 unsigned int dest_address_mode:1;
116803b705cfSriastradh      } da16;
116903b705cfSriastradh
117003b705cfSriastradh      struct
117103b705cfSriastradh      {
117203b705cfSriastradh	 unsigned int dest_reg_file:2;
117303b705cfSriastradh	 unsigned int dest_reg_type:3;
117403b705cfSriastradh	 unsigned int src0_reg_file:2;
117503b705cfSriastradh	 unsigned int src0_reg_type:3;
117603b705cfSriastradh	 unsigned int pad0:6;
117703b705cfSriastradh	 unsigned int dest_writemask:4;
117803b705cfSriastradh	 int dest_indirect_offset:6;
117903b705cfSriastradh	 unsigned int dest_subreg_nr:3;
118003b705cfSriastradh	 unsigned int pad1:2;
118103b705cfSriastradh	 unsigned int dest_address_mode:1;
118203b705cfSriastradh      } ia16;
118303b705cfSriastradh   } bits1;
118403b705cfSriastradh
118503b705cfSriastradh
118603b705cfSriastradh   union {
118703b705cfSriastradh      struct
118803b705cfSriastradh      {
118903b705cfSriastradh	 unsigned int src0_subreg_nr:5;
119003b705cfSriastradh	 unsigned int src0_reg_nr:8;
119103b705cfSriastradh	 unsigned int src0_abs:1;
119203b705cfSriastradh	 unsigned int src0_negate:1;
119303b705cfSriastradh	 unsigned int src0_address_mode:1;
119403b705cfSriastradh	 unsigned int src0_horiz_stride:2;
119503b705cfSriastradh	 unsigned int src0_width:3;
119603b705cfSriastradh	 unsigned int src0_vert_stride:4;
119703b705cfSriastradh	 unsigned int flag_reg_nr:1;
119803b705cfSriastradh	 unsigned int pad:6;
119903b705cfSriastradh      } da1;
120003b705cfSriastradh
120103b705cfSriastradh      struct
120203b705cfSriastradh      {
120303b705cfSriastradh	 int src0_indirect_offset:10;
120403b705cfSriastradh	 unsigned int src0_subreg_nr:3;
120503b705cfSriastradh	 unsigned int src0_abs:1;
120603b705cfSriastradh	 unsigned int src0_negate:1;
120703b705cfSriastradh	 unsigned int src0_address_mode:1;
120803b705cfSriastradh	 unsigned int src0_horiz_stride:2;
120903b705cfSriastradh	 unsigned int src0_width:3;
121003b705cfSriastradh	 unsigned int src0_vert_stride:4;
121103b705cfSriastradh	 unsigned int flag_reg_nr:1;
121203b705cfSriastradh	 unsigned int pad:6;
121303b705cfSriastradh      } ia1;
121403b705cfSriastradh
121503b705cfSriastradh      struct
121603b705cfSriastradh      {
121703b705cfSriastradh	 unsigned int src0_swz_x:2;
121803b705cfSriastradh	 unsigned int src0_swz_y:2;
121903b705cfSriastradh	 unsigned int src0_subreg_nr:1;
122003b705cfSriastradh	 unsigned int src0_reg_nr:8;
122103b705cfSriastradh	 unsigned int src0_abs:1;
122203b705cfSriastradh	 unsigned int src0_negate:1;
122303b705cfSriastradh	 unsigned int src0_address_mode:1;
122403b705cfSriastradh	 unsigned int src0_swz_z:2;
122503b705cfSriastradh	 unsigned int src0_swz_w:2;
122603b705cfSriastradh	 unsigned int pad0:1;
122703b705cfSriastradh	 unsigned int src0_vert_stride:4;
122803b705cfSriastradh	 unsigned int flag_reg_nr:1;
122903b705cfSriastradh	 unsigned int pad1:6;
123003b705cfSriastradh      } da16;
123103b705cfSriastradh
123203b705cfSriastradh      struct
123303b705cfSriastradh      {
123403b705cfSriastradh	 unsigned int src0_swz_x:2;
123503b705cfSriastradh	 unsigned int src0_swz_y:2;
123603b705cfSriastradh	 int src0_indirect_offset:6;
123703b705cfSriastradh	 unsigned int src0_subreg_nr:3;
123803b705cfSriastradh	 unsigned int src0_abs:1;
123903b705cfSriastradh	 unsigned int src0_negate:1;
124003b705cfSriastradh	 unsigned int src0_address_mode:1;
124103b705cfSriastradh	 unsigned int src0_swz_z:2;
124203b705cfSriastradh	 unsigned int src0_swz_w:2;
124303b705cfSriastradh	 unsigned int pad0:1;
124403b705cfSriastradh	 unsigned int src0_vert_stride:4;
124503b705cfSriastradh	 unsigned int flag_reg_nr:1;
124603b705cfSriastradh	 unsigned int pad1:6;
124703b705cfSriastradh      } ia16;
124803b705cfSriastradh
124903b705cfSriastradh   } bits2;
125003b705cfSriastradh
125103b705cfSriastradh   union
125203b705cfSriastradh   {
125303b705cfSriastradh      struct
125403b705cfSriastradh      {
125503b705cfSriastradh	 unsigned int src1_subreg_nr:5;
125603b705cfSriastradh	 unsigned int src1_reg_nr:8;
125703b705cfSriastradh	 unsigned int src1_abs:1;
125803b705cfSriastradh	 unsigned int src1_negate:1;
125903b705cfSriastradh	 unsigned int pad:1;
126003b705cfSriastradh	 unsigned int src1_horiz_stride:2;
126103b705cfSriastradh	 unsigned int src1_width:3;
126203b705cfSriastradh	 unsigned int src1_vert_stride:4;
126303b705cfSriastradh	 unsigned int pad0:7;
126403b705cfSriastradh      } da1;
126503b705cfSriastradh
126603b705cfSriastradh      struct
126703b705cfSriastradh      {
126803b705cfSriastradh	 unsigned int src1_swz_x:2;
126903b705cfSriastradh	 unsigned int src1_swz_y:2;
127003b705cfSriastradh	 unsigned int src1_subreg_nr:1;
127103b705cfSriastradh	 unsigned int src1_reg_nr:8;
127203b705cfSriastradh	 unsigned int src1_abs:1;
127303b705cfSriastradh	 unsigned int src1_negate:1;
127403b705cfSriastradh	 unsigned int pad0:1;
127503b705cfSriastradh	 unsigned int src1_swz_z:2;
127603b705cfSriastradh	 unsigned int src1_swz_w:2;
127703b705cfSriastradh	 unsigned int pad1:1;
127803b705cfSriastradh	 unsigned int src1_vert_stride:4;
127903b705cfSriastradh	 unsigned int pad2:7;
128003b705cfSriastradh      } da16;
128103b705cfSriastradh
128203b705cfSriastradh      struct
128303b705cfSriastradh      {
128403b705cfSriastradh	 int  src1_indirect_offset:10;
128503b705cfSriastradh	 unsigned int src1_subreg_nr:3;
128603b705cfSriastradh	 unsigned int src1_abs:1;
128703b705cfSriastradh	 unsigned int src1_negate:1;
128803b705cfSriastradh	 unsigned int pad0:1;
128903b705cfSriastradh	 unsigned int src1_horiz_stride:2;
129003b705cfSriastradh	 unsigned int src1_width:3;
129103b705cfSriastradh	 unsigned int src1_vert_stride:4;
129203b705cfSriastradh	 unsigned int flag_reg_nr:1;
129303b705cfSriastradh	 unsigned int pad1:6;
129403b705cfSriastradh      } ia1;
129503b705cfSriastradh
129603b705cfSriastradh      struct
129703b705cfSriastradh      {
129803b705cfSriastradh	 unsigned int src1_swz_x:2;
129903b705cfSriastradh	 unsigned int src1_swz_y:2;
130003b705cfSriastradh	 int  src1_indirect_offset:6;
130103b705cfSriastradh	 unsigned int src1_subreg_nr:3;
130203b705cfSriastradh	 unsigned int src1_abs:1;
130303b705cfSriastradh	 unsigned int src1_negate:1;
130403b705cfSriastradh	 unsigned int pad0:1;
130503b705cfSriastradh	 unsigned int src1_swz_z:2;
130603b705cfSriastradh	 unsigned int src1_swz_w:2;
130703b705cfSriastradh	 unsigned int pad1:1;
130803b705cfSriastradh	 unsigned int src1_vert_stride:4;
130903b705cfSriastradh	 unsigned int flag_reg_nr:1;
131003b705cfSriastradh	 unsigned int pad2:6;
131103b705cfSriastradh      } ia16;
131203b705cfSriastradh
131303b705cfSriastradh
131403b705cfSriastradh      struct
131503b705cfSriastradh      {
131603b705cfSriastradh	 int  jump_count:16;	/* note: signed */
131703b705cfSriastradh	 unsigned int  pop_count:4;
131803b705cfSriastradh	 unsigned int  pad0:12;
131903b705cfSriastradh      } if_else;
132003b705cfSriastradh
132103b705cfSriastradh      struct {
132203b705cfSriastradh	 unsigned int function:4;
132303b705cfSriastradh	 unsigned int int_type:1;
132403b705cfSriastradh	 unsigned int precision:1;
132503b705cfSriastradh	 unsigned int saturate:1;
132603b705cfSriastradh	 unsigned int data_type:1;
132703b705cfSriastradh	 unsigned int pad0:8;
132803b705cfSriastradh	 unsigned int response_length:4;
132903b705cfSriastradh	 unsigned int msg_length:4;
133003b705cfSriastradh	 unsigned int msg_target:4;
133103b705cfSriastradh	 unsigned int pad1:3;
133203b705cfSriastradh	 unsigned int end_of_thread:1;
133303b705cfSriastradh      } math;
133403b705cfSriastradh
133503b705cfSriastradh      struct {
133603b705cfSriastradh	 unsigned int binding_table_index:8;
133703b705cfSriastradh	 unsigned int sampler:4;
133803b705cfSriastradh	 unsigned int return_format:2;
133903b705cfSriastradh	 unsigned int msg_type:2;
134003b705cfSriastradh	 unsigned int response_length:4;
134103b705cfSriastradh	 unsigned int msg_length:4;
134203b705cfSriastradh	 unsigned int msg_target:4;
134303b705cfSriastradh	 unsigned int pad1:3;
134403b705cfSriastradh	 unsigned int end_of_thread:1;
134503b705cfSriastradh      } sampler;
134603b705cfSriastradh
134703b705cfSriastradh      struct brw_urb_immediate urb;
134803b705cfSriastradh
134903b705cfSriastradh      struct {
135003b705cfSriastradh	 unsigned int binding_table_index:8;
135103b705cfSriastradh	 unsigned int msg_control:4;
135203b705cfSriastradh	 unsigned int msg_type:2;
135303b705cfSriastradh	 unsigned int target_cache:2;
135403b705cfSriastradh	 unsigned int response_length:4;
135503b705cfSriastradh	 unsigned int msg_length:4;
135603b705cfSriastradh	 unsigned int msg_target:4;
135703b705cfSriastradh	 unsigned int pad1:3;
135803b705cfSriastradh	 unsigned int end_of_thread:1;
135903b705cfSriastradh      } dp_read;
136003b705cfSriastradh
136103b705cfSriastradh      struct {
136203b705cfSriastradh	 unsigned int binding_table_index:8;
136303b705cfSriastradh	 unsigned int msg_control:3;
136403b705cfSriastradh	 unsigned int pixel_scoreboard_clear:1;
136503b705cfSriastradh	 unsigned int msg_type:3;
136603b705cfSriastradh	 unsigned int send_commit_msg:1;
136703b705cfSriastradh	 unsigned int response_length:4;
136803b705cfSriastradh	 unsigned int msg_length:4;
136903b705cfSriastradh	 unsigned int msg_target:4;
137003b705cfSriastradh	 unsigned int pad1:3;
137103b705cfSriastradh	 unsigned int end_of_thread:1;
137203b705cfSriastradh      } dp_write;
137303b705cfSriastradh
137403b705cfSriastradh      struct {
137503b705cfSriastradh	 unsigned int pad:16;
137603b705cfSriastradh	 unsigned int response_length:4;
137703b705cfSriastradh	 unsigned int msg_length:4;
137803b705cfSriastradh	 unsigned int msg_target:4;
137903b705cfSriastradh	 unsigned int pad1:3;
138003b705cfSriastradh	 unsigned int end_of_thread:1;
138103b705cfSriastradh      } generic;
138203b705cfSriastradh
138303b705cfSriastradh      unsigned int ud;
138403b705cfSriastradh   } bits3;
138503b705cfSriastradh};
138603b705cfSriastradh
138703b705cfSriastradh/* media pipeline */
138803b705cfSriastradh
138903b705cfSriastradhstruct brw_vfe_state {
139003b705cfSriastradh    struct {
139103b705cfSriastradh	unsigned int per_thread_scratch_space:4;
139203b705cfSriastradh	unsigned int pad3:3;
139303b705cfSriastradh	unsigned int extend_vfe_state_present:1;
139403b705cfSriastradh	unsigned int pad2:2;
139503b705cfSriastradh	unsigned int scratch_base:22;
139603b705cfSriastradh    } vfe0;
139703b705cfSriastradh
139803b705cfSriastradh    struct {
139903b705cfSriastradh	unsigned int debug_counter_control:2;
140003b705cfSriastradh	unsigned int children_present:1;
140103b705cfSriastradh	unsigned int vfe_mode:4;
140203b705cfSriastradh	unsigned int pad2:2;
140303b705cfSriastradh	unsigned int num_urb_entries:7;
140403b705cfSriastradh	unsigned int urb_entry_alloc_size:9;
140503b705cfSriastradh	unsigned int max_threads:7;
140603b705cfSriastradh    } vfe1;
140703b705cfSriastradh
140803b705cfSriastradh    struct {
140903b705cfSriastradh	unsigned int pad4:4;
141003b705cfSriastradh	unsigned int interface_descriptor_base:28;
141103b705cfSriastradh    } vfe2;
141203b705cfSriastradh};
141303b705cfSriastradh
141403b705cfSriastradhstruct brw_vld_state {
141503b705cfSriastradh    struct {
141603b705cfSriastradh	unsigned int pad6:6;
141703b705cfSriastradh	unsigned int scan_order:1;
141803b705cfSriastradh	unsigned int intra_vlc_format:1;
141903b705cfSriastradh	unsigned int quantizer_scale_type:1;
142003b705cfSriastradh	unsigned int concealment_motion_vector:1;
142103b705cfSriastradh	unsigned int frame_predict_frame_dct:1;
142203b705cfSriastradh	unsigned int top_field_first:1;
142303b705cfSriastradh	unsigned int picture_structure:2;
142403b705cfSriastradh	unsigned int intra_dc_precision:2;
142503b705cfSriastradh	unsigned int f_code_0_0:4;
142603b705cfSriastradh	unsigned int f_code_0_1:4;
142703b705cfSriastradh	unsigned int f_code_1_0:4;
142803b705cfSriastradh	unsigned int f_code_1_1:4;
142903b705cfSriastradh    } vld0;
143003b705cfSriastradh
143103b705cfSriastradh    struct {
143203b705cfSriastradh	unsigned int pad2:9;
143303b705cfSriastradh	unsigned int picture_coding_type:2;
143403b705cfSriastradh	unsigned int pad:21;
143503b705cfSriastradh    } vld1;
143603b705cfSriastradh
143703b705cfSriastradh    struct {
143803b705cfSriastradh	unsigned int index_0:4;
143903b705cfSriastradh	unsigned int index_1:4;
144003b705cfSriastradh	unsigned int index_2:4;
144103b705cfSriastradh	unsigned int index_3:4;
144203b705cfSriastradh	unsigned int index_4:4;
144303b705cfSriastradh	unsigned int index_5:4;
144403b705cfSriastradh	unsigned int index_6:4;
144503b705cfSriastradh	unsigned int index_7:4;
144603b705cfSriastradh    } desc_remap_table0;
144703b705cfSriastradh
144803b705cfSriastradh    struct {
144903b705cfSriastradh	unsigned int index_8:4;
145003b705cfSriastradh	unsigned int index_9:4;
145103b705cfSriastradh	unsigned int index_10:4;
145203b705cfSriastradh	unsigned int index_11:4;
145303b705cfSriastradh	unsigned int index_12:4;
145403b705cfSriastradh	unsigned int index_13:4;
145503b705cfSriastradh	unsigned int index_14:4;
145603b705cfSriastradh	unsigned int index_15:4;
145703b705cfSriastradh    } desc_remap_table1;
145803b705cfSriastradh};
145903b705cfSriastradh
146003b705cfSriastradhstruct brw_interface_descriptor {
146103b705cfSriastradh    struct {
146203b705cfSriastradh	unsigned int grf_reg_blocks:4;
146303b705cfSriastradh	unsigned int pad:2;
146403b705cfSriastradh	unsigned int kernel_start_pointer:26;
146503b705cfSriastradh    } desc0;
146603b705cfSriastradh
146703b705cfSriastradh    struct {
146803b705cfSriastradh	unsigned int pad:7;
146903b705cfSriastradh	unsigned int software_exception:1;
147003b705cfSriastradh	unsigned int pad2:3;
147103b705cfSriastradh	unsigned int maskstack_exception:1;
147203b705cfSriastradh	unsigned int pad3:1;
147303b705cfSriastradh	unsigned int illegal_opcode_exception:1;
147403b705cfSriastradh	unsigned int pad4:2;
147503b705cfSriastradh	unsigned int floating_point_mode:1;
147603b705cfSriastradh	unsigned int thread_priority:1;
147703b705cfSriastradh	unsigned int single_program_flow:1;
147803b705cfSriastradh	unsigned int pad5:1;
147903b705cfSriastradh	unsigned int const_urb_entry_read_offset:6;
148003b705cfSriastradh	unsigned int const_urb_entry_read_len:6;
148103b705cfSriastradh    } desc1;
148203b705cfSriastradh
148303b705cfSriastradh    struct {
148403b705cfSriastradh	unsigned int pad:2;
148503b705cfSriastradh	unsigned int sampler_count:3;
148603b705cfSriastradh	unsigned int sampler_state_pointer:27;
148703b705cfSriastradh    } desc2;
148803b705cfSriastradh
148903b705cfSriastradh    struct {
149003b705cfSriastradh	unsigned int binding_table_entry_count:5;
149103b705cfSriastradh	unsigned int binding_table_pointer:27;
149203b705cfSriastradh    } desc3;
149303b705cfSriastradh};
149403b705cfSriastradh
149503b705cfSriastradhstruct gen6_blend_state
149603b705cfSriastradh{
149703b705cfSriastradh	struct {
149803b705cfSriastradh		unsigned int dest_blend_factor:5;
149903b705cfSriastradh		unsigned int source_blend_factor:5;
150003b705cfSriastradh		unsigned int pad3:1;
150103b705cfSriastradh		unsigned int blend_func:3;
150203b705cfSriastradh		unsigned int pad2:1;
150303b705cfSriastradh		unsigned int ia_dest_blend_factor:5;
150403b705cfSriastradh		unsigned int ia_source_blend_factor:5;
150503b705cfSriastradh		unsigned int pad1:1;
150603b705cfSriastradh		unsigned int ia_blend_func:3;
150703b705cfSriastradh		unsigned int pad0:1;
150803b705cfSriastradh		unsigned int ia_blend_enable:1;
150903b705cfSriastradh		unsigned int blend_enable:1;
151003b705cfSriastradh	} blend0;
151103b705cfSriastradh
151203b705cfSriastradh	struct {
151303b705cfSriastradh		unsigned int post_blend_clamp_enable:1;
151403b705cfSriastradh		unsigned int pre_blend_clamp_enable:1;
151503b705cfSriastradh		unsigned int clamp_range:2;
151603b705cfSriastradh		unsigned int pad0:4;
151703b705cfSriastradh		unsigned int x_dither_offset:2;
151803b705cfSriastradh		unsigned int y_dither_offset:2;
151903b705cfSriastradh		unsigned int dither_enable:1;
152003b705cfSriastradh		unsigned int alpha_test_func:3;
152103b705cfSriastradh		unsigned int alpha_test_enable:1;
152203b705cfSriastradh		unsigned int pad1:1;
152303b705cfSriastradh		unsigned int logic_op_func:4;
152403b705cfSriastradh		unsigned int logic_op_enable:1;
152503b705cfSriastradh		unsigned int pad2:1;
152603b705cfSriastradh		unsigned int write_disable_b:1;
152703b705cfSriastradh		unsigned int write_disable_g:1;
152803b705cfSriastradh		unsigned int write_disable_r:1;
152903b705cfSriastradh		unsigned int write_disable_a:1;
153003b705cfSriastradh		unsigned int pad3:1;
153103b705cfSriastradh		unsigned int alpha_to_coverage_dither:1;
153203b705cfSriastradh		unsigned int alpha_to_one:1;
153303b705cfSriastradh		unsigned int alpha_to_coverage:1;
153403b705cfSriastradh	} blend1;
153503b705cfSriastradh};
153603b705cfSriastradh
153703b705cfSriastradhstruct gen6_color_calc_state
153803b705cfSriastradh{
153903b705cfSriastradh	struct {
154003b705cfSriastradh		unsigned int alpha_test_format:1;
154103b705cfSriastradh		unsigned int pad0:14;
154203b705cfSriastradh		unsigned int round_disable:1;
154303b705cfSriastradh		unsigned int bf_stencil_ref:8;
154403b705cfSriastradh		unsigned int stencil_ref:8;
154503b705cfSriastradh	} cc0;
154603b705cfSriastradh
154703b705cfSriastradh	union {
154803b705cfSriastradh		float alpha_ref_f;
154903b705cfSriastradh		struct {
155003b705cfSriastradh			unsigned int ui:8;
155103b705cfSriastradh			unsigned int pad0:24;
155203b705cfSriastradh		} alpha_ref_fi;
155303b705cfSriastradh	} cc1;
155403b705cfSriastradh
155503b705cfSriastradh	float constant_r;
155603b705cfSriastradh	float constant_g;
155703b705cfSriastradh	float constant_b;
155803b705cfSriastradh	float constant_a;
155903b705cfSriastradh};
156003b705cfSriastradh
156103b705cfSriastradhstruct gen6_depth_stencil_state
156203b705cfSriastradh{
156303b705cfSriastradh	struct {
156403b705cfSriastradh		unsigned int pad0:3;
156503b705cfSriastradh		unsigned int bf_stencil_pass_depth_pass_op:3;
156603b705cfSriastradh		unsigned int bf_stencil_pass_depth_fail_op:3;
156703b705cfSriastradh		unsigned int bf_stencil_fail_op:3;
156803b705cfSriastradh		unsigned int bf_stencil_func:3;
156903b705cfSriastradh		unsigned int bf_stencil_enable:1;
157003b705cfSriastradh		unsigned int pad1:2;
157103b705cfSriastradh		unsigned int stencil_write_enable:1;
157203b705cfSriastradh		unsigned int stencil_pass_depth_pass_op:3;
157303b705cfSriastradh		unsigned int stencil_pass_depth_fail_op:3;
157403b705cfSriastradh		unsigned int stencil_fail_op:3;
157503b705cfSriastradh		unsigned int stencil_func:3;
157603b705cfSriastradh		unsigned int stencil_enable:1;
157703b705cfSriastradh	} ds0;
157803b705cfSriastradh
157903b705cfSriastradh	struct {
158003b705cfSriastradh		unsigned int bf_stencil_write_mask:8;
158103b705cfSriastradh		unsigned int bf_stencil_test_mask:8;
158203b705cfSriastradh		unsigned int stencil_write_mask:8;
158303b705cfSriastradh		unsigned int stencil_test_mask:8;
158403b705cfSriastradh	} ds1;
158503b705cfSriastradh
158603b705cfSriastradh	struct {
158703b705cfSriastradh		unsigned int pad0:26;
158803b705cfSriastradh		unsigned int depth_write_enable:1;
158903b705cfSriastradh		unsigned int depth_test_func:3;
159003b705cfSriastradh		unsigned int pad1:1;
159103b705cfSriastradh		unsigned int depth_test_enable:1;
159203b705cfSriastradh	} ds2;
159303b705cfSriastradh};
159403b705cfSriastradh
159503b705cfSriastradhstruct gen7_surface_state
159603b705cfSriastradh{
159703b705cfSriastradh	struct {
159803b705cfSriastradh		unsigned int cube_pos_z:1;
159903b705cfSriastradh		unsigned int cube_neg_z:1;
160003b705cfSriastradh		unsigned int cube_pos_y:1;
160103b705cfSriastradh		unsigned int cube_neg_y:1;
160203b705cfSriastradh		unsigned int cube_pos_x:1;
160303b705cfSriastradh		unsigned int cube_neg_x:1;
160403b705cfSriastradh		unsigned int pad2:2;
160503b705cfSriastradh		unsigned int render_cache_read_write:1;
160603b705cfSriastradh		unsigned int pad1:1;
160703b705cfSriastradh		unsigned int surface_array_spacing:1;
160803b705cfSriastradh		unsigned int vert_line_stride_ofs:1;
160903b705cfSriastradh		unsigned int vert_line_stride:1;
161003b705cfSriastradh		unsigned int tile_walk:1;
161103b705cfSriastradh		unsigned int tiled_surface:1;
161203b705cfSriastradh		unsigned int horizontal_alignment:1;
161303b705cfSriastradh		unsigned int vertical_alignment:2;
161403b705cfSriastradh		unsigned int surface_format:9;     /**< BRW_SURFACEFORMAT_x */
161503b705cfSriastradh		unsigned int pad0:1;
161603b705cfSriastradh		unsigned int is_array:1;
161703b705cfSriastradh		unsigned int surface_type:3;       /**< BRW_SURFACE_1D/2D/3D/CUBE */
161803b705cfSriastradh	} ss0;
161903b705cfSriastradh
162003b705cfSriastradh	struct {
162103b705cfSriastradh		unsigned int base_addr;
162203b705cfSriastradh	} ss1;
162303b705cfSriastradh
162403b705cfSriastradh	struct {
162503b705cfSriastradh		unsigned int width:14;
162603b705cfSriastradh		unsigned int pad1:2;
162703b705cfSriastradh		unsigned int height:14;
162803b705cfSriastradh		unsigned int pad0:2;
162903b705cfSriastradh	} ss2;
163003b705cfSriastradh
163103b705cfSriastradh	struct {
163203b705cfSriastradh		unsigned int pitch:18;
163303b705cfSriastradh		unsigned int pad:3;
163403b705cfSriastradh		unsigned int depth:11;
163503b705cfSriastradh	} ss3;
163603b705cfSriastradh
163703b705cfSriastradh	struct {
163803b705cfSriastradh		unsigned int multisample_position_palette_index:3;
163903b705cfSriastradh		unsigned int num_multisamples:3;
164003b705cfSriastradh		unsigned int multisampled_surface_storage_format:1;
164103b705cfSriastradh		unsigned int render_target_view_extent:11;
164203b705cfSriastradh		unsigned int min_array_elt:11;
164303b705cfSriastradh		unsigned int rotation:2;
164403b705cfSriastradh		unsigned int pad0:1;
164503b705cfSriastradh	} ss4;
164603b705cfSriastradh
164703b705cfSriastradh	struct {
164803b705cfSriastradh		unsigned int mip_count:4;
164903b705cfSriastradh		unsigned int min_lod:4;
165003b705cfSriastradh		unsigned int pad1:12;
165103b705cfSriastradh		unsigned int y_offset:4;
165203b705cfSriastradh		unsigned int pad0:1;
165303b705cfSriastradh		unsigned int x_offset:7;
165403b705cfSriastradh	} ss5;
165503b705cfSriastradh
165603b705cfSriastradh	struct {
165703b705cfSriastradh		unsigned int pad; /* Multisample Control Surface stuff */
165803b705cfSriastradh	} ss6;
165903b705cfSriastradh
166003b705cfSriastradh	struct {
166103b705cfSriastradh		unsigned int resource_min_lod:12;
166203b705cfSriastradh		unsigned int pad0:4;
166303b705cfSriastradh		unsigned int shader_chanel_select_a:3;
166403b705cfSriastradh		unsigned int shader_chanel_select_b:3;
166503b705cfSriastradh		unsigned int shader_chanel_select_g:3;
166603b705cfSriastradh		unsigned int shader_chanel_select_r:3;
166703b705cfSriastradh		unsigned int alpha_clear_color:1;
166803b705cfSriastradh		unsigned int blue_clear_color:1;
166903b705cfSriastradh		unsigned int green_clear_color:1;
167003b705cfSriastradh		unsigned int red_clear_color:1;
167103b705cfSriastradh	} ss7;
167203b705cfSriastradh};
167303b705cfSriastradh
167403b705cfSriastradhstruct gen7_sampler_state
167503b705cfSriastradh{
167603b705cfSriastradh	struct
167703b705cfSriastradh	{
167803b705cfSriastradh		unsigned int aniso_algorithm:1;
167903b705cfSriastradh		unsigned int lod_bias:13;
168003b705cfSriastradh		unsigned int min_filter:3;
168103b705cfSriastradh		unsigned int mag_filter:3;
168203b705cfSriastradh		unsigned int mip_filter:2;
168303b705cfSriastradh		unsigned int base_level:5;
168403b705cfSriastradh		unsigned int pad1:1;
168503b705cfSriastradh		unsigned int lod_preclamp:1;
168603b705cfSriastradh		unsigned int default_color_mode:1;
168703b705cfSriastradh		unsigned int pad0:1;
168803b705cfSriastradh		unsigned int disable:1;
168903b705cfSriastradh	} ss0;
169003b705cfSriastradh
169103b705cfSriastradh	struct
169203b705cfSriastradh	{
169303b705cfSriastradh		unsigned int cube_control_mode:1;
169403b705cfSriastradh		unsigned int shadow_function:3;
169503b705cfSriastradh		unsigned int pad:4;
169603b705cfSriastradh		unsigned int max_lod:12;
169703b705cfSriastradh		unsigned int min_lod:12;
169803b705cfSriastradh	} ss1;
169903b705cfSriastradh
170003b705cfSriastradh	struct
170103b705cfSriastradh	{
170203b705cfSriastradh		unsigned int pad:5;
170303b705cfSriastradh		unsigned int default_color_pointer:27;
170403b705cfSriastradh	} ss2;
170503b705cfSriastradh
170603b705cfSriastradh	struct
170703b705cfSriastradh	{
170803b705cfSriastradh		unsigned int r_wrap_mode:3;
170903b705cfSriastradh		unsigned int t_wrap_mode:3;
171003b705cfSriastradh		unsigned int s_wrap_mode:3;
171103b705cfSriastradh		unsigned int pad:1;
171203b705cfSriastradh		unsigned int non_normalized_coord:1;
171303b705cfSriastradh		unsigned int trilinear_quality:2;
171403b705cfSriastradh		unsigned int address_round:6;
171503b705cfSriastradh		unsigned int max_aniso:3;
171603b705cfSriastradh		unsigned int chroma_key_mode:1;
171703b705cfSriastradh		unsigned int chroma_key_index:2;
171803b705cfSriastradh		unsigned int chroma_key_enable:1;
171903b705cfSriastradh		unsigned int pad0:6;
172003b705cfSriastradh	} ss3;
172103b705cfSriastradh};
172203b705cfSriastradh
172303b705cfSriastradh#endif
1724