1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Copyright (C) Intel Corp.  2006.  All Rights Reserved.
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org develop this 3D driver.
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Permission is hereby granted, free of charge, to any person obtaining
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org a copy of this software and associated documentation files (the
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "Software"), to deal in the Software without restriction, including
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org without limitation the rights to use, copy, modify, merge, publish,
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org distribute, sublicense, and/or sell copies of the Software, and to
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org permit persons to whom the Software is furnished to do so, subject to
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org the following conditions:
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org The above copyright notice and this permission notice (including the
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org next paragraph) shall be included in all copies or substantial
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org portions of the Software.
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **********************************************************************/
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  * Authors:
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  *   Keith Whitwell <keith@tungstengraphics.com>
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  */
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef BRW_STRUCTS_H
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_STRUCTS_H
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Number of general purpose registers (VS, WM, etc) */
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_MAX_GRF 128
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * First GRF used for the MRF hack.
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * On gen7, MRFs are no longer used, and contiguous GRFs are used instead.  We
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * haven't converted our compiler to be aware of this, so it asks for MRFs and
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * brw_eu_emit.c quietly converts them to be accesses of the top GRFs.  The
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * register allocators have to be careful of this to avoid corrupting the "MRF"s
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * with actual GRF allocations.
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GEN7_MRF_HACK_START 112.
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Number of message register file registers */
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_MAX_MRF 16
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* These seem to be passed around as function args, so it works out
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * better to keep them as #defines:
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_FLUSH_READ_CACHE           0x1
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_FLUSH_STATE_CACHE          0x2
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_INHIBIT_FLUSH_RENDER_CACHE 0x4
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_FLUSH_SNAPSHOT_COUNTERS    0x8
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_urb_fence
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint length:8;
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vs_realloc:1;
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint gs_realloc:1;
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint clp_realloc:1;
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint sf_realloc:1;
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vfe_realloc:1;
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cs_realloc:1;
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:2;
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint opcode:16;
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } header;
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vs_fence:10;
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint gs_fence:10;
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint clp_fence:10;
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:2;
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } bits0;
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint sf_fence:10;
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vf_fence:10;
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cs_fence:11;
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:1;
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } bits1;
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* State structs for the various fixed function units:
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct thread0
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad0:1;
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint grf_reg_count:3;
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad1:2;
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint kernel_start_pointer:26; /* Offset from GENERAL_STATE_BASE */
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct thread1
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint ext_halt_exception_enable:1;
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint sw_exception_enable:1;
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint mask_stack_exception_enable:1;
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint timeout_exception_enable:1;
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint illegal_op_exception_enable:1;
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad0:3;
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint depth_coef_urb_read_offset:6;	/* WM only */
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad1:2;
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint floating_point_mode:1;
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint thread_priority:1;
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint binding_table_entry_count:8;
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad3:5;
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint single_program_flow:1;
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct thread2
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint per_thread_scratch_space:4;
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad0:6;
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint scratch_space_base_pointer:22;
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct thread3
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint dispatch_grf_start_reg:4;
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint urb_entry_read_offset:6;
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad0:1;
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint urb_entry_read_length:6;
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad1:1;
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint const_urb_entry_read_offset:6;
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad2:1;
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint const_urb_entry_read_length:6;
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad3:1;
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_clip_unit_state
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread0 thread0;
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:7;
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint sw_exception_enable:1;
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:3;
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint mask_stack_exception_enable:1;
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad2:1;
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint illegal_op_exception_enable:1;
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad3:2;
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint floating_point_mode:1;
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint thread_priority:1;
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint binding_table_entry_count:8;
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad4:5;
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint single_program_flow:1;
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } thread1;
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread2 thread2;
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread3 thread3;
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:9;
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint gs_output_stats:1; /* not always */
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stats_enable:1;
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint nr_urb_entries:7;
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:1;
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint urb_entry_allocation_size:5;
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad2:1;
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint max_threads:5; 	/* may be less */
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad3:2;
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } thread4;
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:13;
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint clip_mode:3;
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint userclip_enable_flags:8;
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint userclip_must_clip:1;
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint negative_w_clip_test:1;
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint guard_band_enable:1;
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint viewport_z_clip_enable:1;
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint viewport_xy_clip_enable:1;
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vertex_position_space:1;
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint api_mode:1;
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad2:1;
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } clip5;
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:5;
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint clipper_viewport_state_ptr:27;
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } clip6;
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat viewport_xmin;
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat viewport_xmax;
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat viewport_ymin;
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat viewport_ymax;
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gen6_blend_state
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint dest_blend_factor:5;
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint source_blend_factor:5;
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad3:1;
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint blend_func:3;
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad2:1;
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint ia_dest_blend_factor:5;
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint ia_source_blend_factor:5;
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:1;
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint ia_blend_func:3;
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:1;
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint ia_blend_enable:1;
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint blend_enable:1;
224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } blend0;
225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint post_blend_clamp_enable:1;
228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pre_blend_clamp_enable:1;
229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint clamp_range:2;
230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:4;
231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint x_dither_offset:2;
232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint y_dither_offset:2;
233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint dither_enable:1;
234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint alpha_test_func:3;
235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint alpha_test_enable:1;
236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:1;
237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint logic_op_func:4;
238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint logic_op_enable:1;
239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad2:1;
240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint write_disable_b:1;
241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint write_disable_g:1;
242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint write_disable_r:1;
243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint write_disable_a:1;
244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad3:1;
245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint alpha_to_coverage_dither:1;
246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint alpha_to_one:1;
247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint alpha_to_coverage:1;
248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } blend1;
249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gen6_color_calc_state
252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint alpha_test_format:1;
255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:14;
256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint round_disable:1;
257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_ref:8;
258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_ref:8;
259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } cc0;
260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   union {
262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat alpha_ref_f;
263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint ui:8;
265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:24;
266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } alpha_ref_fi;
267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } cc1;
268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat constant_r;
270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat constant_g;
271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat constant_b;
272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat constant_a;
273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gen6_depth_stencil_state
276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:3;
279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_pass_depth_pass_op:3;
280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_pass_depth_fail_op:3;
281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_fail_op:3;
282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_func:3;
283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_enable:1;
284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:2;
285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_write_enable:1;
286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_pass_depth_pass_op:3;
287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_pass_depth_fail_op:3;
288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_fail_op:3;
289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_func:3;
290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_enable:1;
291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ds0;
292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_write_mask:8;
295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_test_mask:8;
296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_write_mask:8;
297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_test_mask:8;
298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ds1;
299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:26;
302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint depth_write_enable:1;
303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint depth_test_func:3;
304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:1;
305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint depth_test_enable:1;
306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ds2;
307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_cc_unit_state
310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:3;
314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_pass_depth_pass_op:3;
315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_pass_depth_fail_op:3;
316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_fail_op:3;
317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_func:3;
318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_enable:1;
319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:2;
320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_write_enable:1;
321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_pass_depth_pass_op:3;
322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_pass_depth_fail_op:3;
323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_fail_op:3;
324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_func:3;
325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_enable:1;
326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } cc0;
327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_ref:8;
332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_write_mask:8;
333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_test_mask:8;
334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stencil_ref:8;
335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } cc1;
336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint logicop_enable:1;
341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:10;
342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint depth_write_enable:1;
343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint depth_test_function:3;
344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint depth_test:1;
345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_write_mask:8;
346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint bf_stencil_test_mask:8;
347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } cc2;
348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:8;
353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint alpha_test_func:3;
354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint alpha_test:1;
355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint blend_enable:1;
356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint ia_blend_enable:1;
357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:1;
358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint alpha_test_format:1;
359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad2:16;
360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } cc3;
361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:5;
365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cc_viewport_state_offset:27; /* Offset from GENERAL_STATE_BASE */
366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } cc4;
367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:2;
371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint ia_dest_blend_factor:5;
372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint ia_src_blend_factor:5;
373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint ia_blend_function:3;
374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint statistics_enable:1;
375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint logicop_func:4;
376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:11;
377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint dither_enable:1;
378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } cc5;
379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint clamp_post_alpha_blend:1;
383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint clamp_pre_alpha_blend:1;
384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint clamp_range:2;
385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:11;
386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint y_dither_offset:2;
387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint x_dither_offset:2;
388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint dest_blend_factor:5;
389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint src_blend_factor:5;
390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint blend_function:3;
391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } cc6;
392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      union {
395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLfloat f;
396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLubyte ub[4];
397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } alpha_ref;
398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } cc7;
399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_sf_unit_state
402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread0 thread0;
404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread1 thread1;
405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread2 thread2;
406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread3 thread3;
407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:10;
411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stats_enable:1;
412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint nr_urb_entries:7;
413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:1;
414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint urb_entry_allocation_size:5;
415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad2:1;
416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint max_threads:6;
417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad3:1;
418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } thread4;
419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint front_winding:1;
423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint viewport_transform:1;
424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:3;
425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint sf_viewport_state_offset:27; /* Offset from GENERAL_STATE_BASE */
426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } sf5;
427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:9;
431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint dest_org_vbias:4;
432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint dest_org_hbias:4;
433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint scissor:1;
434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint disable_2x2_trifilter:1;
435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint disable_zero_pix_trifilter:1;
436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint point_rast_rule:2;
437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint line_endcap_aa_region_width:2;
438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint line_width:4;
439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint fast_scissor_disable:1;
440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cull_mode:2;
441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint aa_enable:1;
442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } sf6;
443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint point_size:11;
447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint use_point_size_state:1;
448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint subpixel_precision:1;
449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint sprite_point:1;
450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:10;
451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint aa_line_distance_mode:1;
452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint trifan_pv:2;
453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint linestrip_pv:2;
454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint tristrip_pv:2;
455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint line_last_pixel_enable:1;
456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } sf7;
457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gen6_scissor_rect
461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint xmin:16;
463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint ymin:16;
464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint xmax:16;
465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint ymax:16;
466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_gs_unit_state
469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread0 thread0;
471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread1 thread1;
472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread2 thread2;
473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread3 thread3;
474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:8;
478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint rendering_enable:1; /* for Ironlake */
479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad4:1;
480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stats_enable:1;
481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint nr_urb_entries:7;
482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:1;
483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint urb_entry_allocation_size:5;
484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad2:1;
485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint max_threads:5;
486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad3:2;
487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } thread4;
488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint sampler_count:3;
492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:2;
493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint sampler_state_pointer:27;
494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } gs5;
495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint max_vp_index:4;
500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:12;
501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint svbi_post_inc_value:10;
502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:1;
503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint svbi_post_inc_enable:1;
504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint svbi_payload:1;
505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint discard_adjaceny:1;
506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint reorder_enable:1;
507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad2:1;
508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } gs6;
509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_vs_unit_state
513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread0 thread0;
515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread1 thread1;
516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread2 thread2;
517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread3 thread3;
518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:10;
522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stats_enable:1;
523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint nr_urb_entries:7;
524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:1;
525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint urb_entry_allocation_size:5;
526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad2:1;
527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint max_threads:6;
528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad3:1;
529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } thread4;
530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint sampler_count:3;
534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:2;
535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint sampler_state_pointer:27;
536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } vs5;
537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vs_enable:1;
541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vert_cache_disable:1;
542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:30;
543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } vs6;
544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_wm_unit_state
548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread0 thread0;
550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread1 thread1;
551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread2 thread2;
552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct thread3 thread3;
553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint stats_enable:1;
556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint depth_buffer_clear:1;
557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint sampler_count:3;
558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint sampler_state_pointer:27;
559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } wm4;
560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint enable_8_pix:1;
564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint enable_16_pix:1;
565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint enable_32_pix:1;
566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint enable_con_32_pix:1;
567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint enable_con_64_pix:1;
568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:1;
569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* These next four bits are for Ironlake+ */
571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint fast_span_coverage_enable:1;
572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint depth_buffer_clear:1;
573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint depth_buffer_resolve_enable:1;
574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint hierarchical_depth_buffer_resolve_enable:1;
575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint legacy_global_depth_bias:1;
577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint line_stipple:1;
578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint depth_offset:1;
579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint polygon_stipple:1;
580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint line_aa_region_width:2;
581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint line_endcap_aa_region_width:2;
582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint early_depth_test:1;
583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint thread_dispatch_enable:1;
584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint program_uses_depth:1;
585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint program_computes_depth:1;
586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint program_uses_killpixel:1;
587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint legacy_line_rast: 1;
588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint transposed_urb_read_enable:1;
589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint max_threads:7;
590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } wm5;
591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat global_depth_offset_constant;
593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat global_depth_offset_scale;
594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* for Ironlake only */
596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:1;
598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint grf_reg_count_1:3;
599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:2;
600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint kernel_start_pointer_1:26;
601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } wm8;
602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:1;
605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint grf_reg_count_2:3;
606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:2;
607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint kernel_start_pointer_2:26;
608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } wm9;
609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:1;
612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint grf_reg_count_3:3;
613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:2;
614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint kernel_start_pointer_3:26;
615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } wm10;
616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_sampler_default_color {
619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat color[4];
620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gen5_sampler_default_color {
623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint8_t ub[4];
624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   float f[4];
625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint16_t hf[4];
626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint16_t us[4];
627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int16_t s[4];
628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint8_t b[4];
629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_sampler_state
632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint shadow_function:3;
637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint lod_bias:11;
638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint min_filter:3;
639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint mag_filter:3;
640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint mip_filter:2;
641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint base_level:5;
642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint min_mag_neq:1;
643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint lod_preclamp:1;
644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint default_color_mode:1;
645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:1;
646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint disable:1;
647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss0;
648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint r_wrap_mode:3;
652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint t_wrap_mode:3;
653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint s_wrap_mode:3;
654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cube_control_mode:1;
655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:2;
656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint max_lod:10;
657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint min_lod:10;
658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss1;
659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:5;
664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint default_color_pointer:27;
665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss2;
666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint non_normalized_coord:1;
670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:12;
671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint address_round:6;
672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint max_aniso:3;
673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint chroma_key_mode:1;
674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint chroma_key_index:2;
675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint chroma_key_enable:1;
676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint monochrome_filter_width:3;
677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint monochrome_filter_height:3;
678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss3;
679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gen7_sampler_state
682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint aniso_algorithm:1;
686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint lod_bias:13;
687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint min_filter:3;
688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint mag_filter:3;
689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint mip_filter:2;
690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint base_level:5;
691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:1;
692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint lod_preclamp:1;
693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint default_color_mode:1;
694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:1;
695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint disable:1;
696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss0;
697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cube_control_mode:1;
701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint shadow_function:3;
702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:4;
703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint max_lod:12;
704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint min_lod:12;
705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss1;
706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:5;
710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint default_color_pointer:27;
711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss2;
712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint r_wrap_mode:3;
716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint t_wrap_mode:3;
717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint s_wrap_mode:3;
718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:1;
719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint non_normalized_coord:1;
720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint trilinear_quality:2;
721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint address_round:6;
722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint max_aniso:3;
723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint chroma_key_mode:1;
724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint chroma_key_index:2;
725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint chroma_key_enable:1;
726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:6;
727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss3;
728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_clipper_viewport
731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat xmin;
733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat xmax;
734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat ymin;
735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat ymax;
736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_cc_viewport
739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat min_depth;
741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat max_depth;
742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_sf_viewport
745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat m00;
748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat m11;
749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat m22;
750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat m30;
751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat m31;
752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat m32;
753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } viewport;
754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* scissor coordinates are inclusive */
756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLshort xmin;
758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLshort ymin;
759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLshort xmax;
760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLshort ymax;
761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } scissor;
762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gen6_sf_viewport {
765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat m00;
766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat m11;
767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat m22;
768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat m30;
769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat m31;
770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat m32;
771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gen7_sf_clip_viewport {
774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat m00;
776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat m11;
777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat m22;
778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat m30;
779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat m31;
780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat m32;
781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } viewport;
782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad0[2];
784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat xmin;
787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat xmax;
788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat ymin;
789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLfloat ymax;
790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } guardband;
791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat pad1[4];
793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* volume 5c Shared Functions - 1.13.4.1.2 */
796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct gen7_surface_state
797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cube_pos_z:1;
800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cube_neg_z:1;
801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cube_pos_y:1;
802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cube_neg_y:1;
803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cube_pos_x:1;
804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cube_neg_x:1;
805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad2:2;
806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint render_cache_read_write:1;
807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:1;
808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint surface_array_spacing:1;
809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vert_line_stride_ofs:1;
810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vert_line_stride:1;
811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint tile_walk:1;
812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint tiled_surface:1;
813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint horizontal_alignment:1;
814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vertical_alignment:2;
815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint surface_format:9;     /**< BRW_SURFACEFORMAT_x */
816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:1;
817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint is_array:1;
818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint surface_type:3;       /**< BRW_SURFACE_1D/2D/3D/CUBE */
819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss0;
820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint base_addr;
823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss1;
824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint width:14;
827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:2;
828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint height:14;
829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:2;
830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss2;
831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pitch:18;
834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:3;
835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint depth:11;
836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss3;
837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint multisample_position_palette_index:3;
840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint num_multisamples:3;
841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint multisampled_surface_storage_format:1;
842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint render_target_view_extent:11;
843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint min_array_elt:11;
844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint rotation:2;
845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:1;
846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss4;
847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint mip_count:4;
850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint min_lod:4;
851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad1:12;
852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint y_offset:4;
853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:1;
854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint x_offset:7;
855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss5;
856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   union {
858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint raw_data;
859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint y_offset_for_uv_plane:14;
861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint pad1:2;
862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint x_offset_for_uv_plane:14;
863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint pad0:2;
864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } planar; /** Interpretation when Surface Format == PLANAR */
865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint mcs_enable:1;
867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint append_counter_enable:1;
868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint pad:4;
869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint append_counter_address:26;
870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } mcs_disabled; /** Interpretation when mcs_enable == 0 */
871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint mcs_enable:1;
873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint pad:2;
874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint mcs_surface_pitch:9;
875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint mcs_base_address:20;
876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } mcs_enabled; /** Interpretation when mcs_enable == 1 */
877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss6;
878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct {
880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint resource_min_lod:12;
881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* Only on Haswell */
883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:4;
884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint shader_channel_select_a:3;
885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint shader_channel_select_b:3;
886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint shader_channel_select_g:3;
887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint shader_channel_select_r:3;
888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint alpha_clear_color:1;
890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint blue_clear_color:1;
891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint green_clear_color:1;
892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint red_clear_color:1;
893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ss7;
894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_vertex_element_state
898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint src_offset:11;
902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:5;
903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint src_format:9;
904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad0:1;
905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint valid:1;
906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vertex_buffer_index:5;
907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ve0;
908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint dst_offset:8;
912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:8;
913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vfcomponent3:4;
914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vfcomponent2:4;
915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vfcomponent1:4;
916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint vfcomponent0:4;
917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } ve1;
918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_urb_immediate {
921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint opcode:4;
922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint offset:6;
923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint swizzle_control:2;
924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad:1;
925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint allocate:1;
926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint used:1;
927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint complete:1;
928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint response_length:4;
929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint msg_length:4;
930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint msg_target:4;
931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint pad1:3;
932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint end_of_thread:1;
933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Instruction format for the execution units:
936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_instruction
939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct
941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint opcode:7;
943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint pad:1;
944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint access_mode:1;
945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint mask_control:1;
946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint dependency_control:2;
947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint compression_control:2; /* gen6: quater control */
948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint thread_control:2;
949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint predicate_control:4;
950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint predicate_inverse:1;
951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint execution_size:3;
952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /**
953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Conditional Modifier for most instructions.  On Gen6+, this is also
954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * used for the SEND instruction's Message Target/SFID.
955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       */
956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint destreg__conditionalmod:4;
957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint acc_wr_control:1;
958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint cmpt_control:1;
959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint debug_control:1;
960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint saturate:1;
961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } header;
962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   union {
964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_file:2;
967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_type:3;
968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_file:2;
969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_type:3;
970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_reg_file:2;
971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_reg_type:3;
972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad:1;
973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_subreg_nr:5;
974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_nr:8;
975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_horiz_stride:2;
976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_address_mode:1;
977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } da1;
978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_file:2;
982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_type:3;
983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_file:2;
984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_type:3;
985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_reg_file:2;        /* 0x00000c00 */
986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_reg_type:3;        /* 0x00007000 */
987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad:1;
988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLint dest_indirect_offset:10;	/* offset against the deref'd address reg */
989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_subreg_nr:3; /* subnr for the address reg a0.x */
990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_horiz_stride:2;
991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_address_mode:1;
992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } ia1;
993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_file:2;
997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_type:3;
998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_file:2;
999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_type:3;
1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_reg_file:2;
1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_reg_type:3;
1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad:1;
1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_writemask:4;
1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_subreg_nr:1;
1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_nr:8;
1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_horiz_stride:2;
1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_address_mode:1;
1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } da16;
1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_file:2;
1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_type:3;
1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_file:2;
1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_type:3;
1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:6;
1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_writemask:4;
1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLint dest_indirect_offset:6;
1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_subreg_nr:3;
1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_horiz_stride:2;
1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_address_mode:1;
1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } ia16;
1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_file:2;
1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_type:3;
1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_file:2;
1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_type:3;
1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_reg_file:2;
1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_reg_type:3;
1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad:1;
1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLint jump_count:16;
1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } branch_gen6;
1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_file:1;
1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint flag_subreg_num:1;
1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:2;
1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_abs:1;
1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_negate:1;
1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_abs:1;
1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_negate:1;
1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src2_abs:1;
1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src2_negate:1;
1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:7;
1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_writemask:4;
1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_subreg_nr:3;
1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint dest_reg_nr:8;
1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } da3src;
1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } bits1;
1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   union {
1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_subreg_nr:5;
1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_nr:8;
1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_abs:1;
1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_negate:1;
1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_address_mode:1;
1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_horiz_stride:2;
1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_width:3;
1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_vert_stride:4;
1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint flag_reg_nr:1;
1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad:6;
1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } da1;
1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLint src0_indirect_offset:10;
1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_subreg_nr:3;
1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_abs:1;
1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_negate:1;
1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_address_mode:1;
1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_horiz_stride:2;
1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_width:3;
1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_vert_stride:4;
1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint flag_reg_nr:1;
1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad:6;
1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } ia1;
1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_swz_x:2;
1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_swz_y:2;
1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_subreg_nr:1;
1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_nr:8;
1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_abs:1;
1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_negate:1;
1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_address_mode:1;
1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_swz_z:2;
1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_swz_w:2;
1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:1;
1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_vert_stride:4;
1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint flag_reg_nr:1;
1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:6;
1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } da16;
1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_swz_x:2;
1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_swz_y:2;
1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLint src0_indirect_offset:6;
1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_subreg_nr:3;
1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_abs:1;
1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_negate:1;
1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_address_mode:1;
1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_swz_z:2;
1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_swz_w:2;
1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:1;
1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_vert_stride:4;
1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint flag_reg_nr:1;
1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:6;
1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } ia16;
1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* Extended Message Descriptor for Ironlake (Gen5) SEND instruction.
1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       *
1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Does not apply to Gen6+.  The SFID/message target moved to bits
1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * 27:24 of the header (destreg__conditionalmod); EOT is in bits3.
1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       */
1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       struct
1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       {
1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org           GLuint pad:26;
1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org           GLuint end_of_thread:1;
1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org           GLuint pad1:1;
1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org           GLuint sfid:4;
1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       } send_gen5;  /* for Ironlake only */
1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_rep_ctrl:1;
1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_swizzle:8;
1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_subreg_nr:3;
1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src0_reg_nr:8;
1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:1;
1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_rep_ctrl:1;
1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_swizzle:8;
1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_subreg_nr_low:2;
1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } da3src;
1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } bits2;
1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   union
1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_subreg_nr:5;
1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_reg_nr:8;
1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_abs:1;
1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_negate:1;
1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_address_mode:1;
1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_horiz_stride:2;
1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_width:3;
1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_vert_stride:4;
1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:7;
1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } da1;
1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_swz_x:2;
1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_swz_y:2;
1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_subreg_nr:1;
1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_reg_nr:8;
1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_abs:1;
1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_negate:1;
1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_address_mode:1;
1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_swz_z:2;
1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_swz_w:2;
1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:1;
1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_vert_stride:4;
1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad2:7;
1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } da16;
1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLint  src1_indirect_offset:10;
1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_subreg_nr:3;
1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_abs:1;
1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_negate:1;
1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_address_mode:1;
1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_horiz_stride:2;
1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_width:3;
1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_vert_stride:4;
1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint flag_reg_nr:1;
1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:6;
1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } ia1;
1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_swz_x:2;
1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_swz_y:2;
1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLint  src1_indirect_offset:6;
1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_subreg_nr:3;
1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_abs:1;
1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_negate:1;
1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:1;
1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_swz_z:2;
1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_swz_w:2;
1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:1;
1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_vert_stride:4;
1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint flag_reg_nr:1;
1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad2:6;
1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } ia16;
1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLint  jump_count:16;	/* note: signed */
1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint  pop_count:4;
1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint  pad0:12;
1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } if_else;
1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* This is also used for gen7 IF/ELSE instructions */
1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct
1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 /* Signed jump distance to the ip to jump to if all channels
1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	  * are disabled after the break or continue.  It should point
1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	  * to the end of the innermost control flow block, as that's
1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	  * where some channel could get re-enabled.
1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	  */
1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 int jip:16;
1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 /* Signed jump distance to the location to resume execution
1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	  * of this channel if it's enabled for the break or continue.
1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	  */
1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 int uip:16;
1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } break_cont;
1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /**
1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * \defgroup SEND instructions / Message Descriptors
1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       *
1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * @{
1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       */
1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /**
1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Generic Message Descriptor for Gen4 SEND instructions.  The structs
1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * below expand function_control to something specific for their
1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * message.  Due to struct packing issues, they duplicate these bits.
1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       *
1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * See the G45 PRM, Volume 4, Table 14-15.
1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       */
1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint function_control:16;
1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:4;
1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_target:4;
1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:3;
1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } generic;
1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /**
1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Generic Message Descriptor for Gen5-7 SEND instructions.
1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       *
1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * See the Sandybridge PRM, Volume 2 Part 2, Table 8-15.  (Sadly, most
1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * of the information on the SEND instruction is missing from the public
1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Ironlake PRM.)
1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       *
1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * The table claims that bit 31 is reserved/MBZ on Gen6+, but it lies.
1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * According to the SEND instruction description:
1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * "The MSb of the message description, the EOT field, always comes from
1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       *  bit 127 of the instruction word"...which is bit 31 of this field.
1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       */
1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint function_control:19;
1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint header_present:1;
1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:5;
1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:2;
1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } generic_gen5;
1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /** G45 PRM, Volume 4, Section 6.1.1.1 */
1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint function:4;
1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint int_type:1;
1275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint precision:1;
1276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint saturate:1;
1277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint data_type:1;
1278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:8;
1279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:4;
1280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_target:4;
1282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:3;
1283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } math;
1285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /** Ironlake PRM, Volume 4 Part 1, Section 6.1.1.1 */
1287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint function:4;
1289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint int_type:1;
1290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint precision:1;
1291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint saturate:1;
1292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint data_type:1;
1293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint snapshot:1;
1294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:10;
1295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint header_present:1;
1296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:5;
1297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:2;
1299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } math_gen5;
1301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /** G45 PRM, Volume 4, Section 4.8.1.1.1 [DevBW] and [DevCL] */
1303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint binding_table_index:8;
1305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint sampler:4;
1306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint return_format:2;
1307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_type:2;
1308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:4;
1309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_target:4;
1311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:3;
1312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } sampler;
1314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /** G45 PRM, Volume 4, Section 4.8.1.1.2 [DevCTG] */
1316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint binding_table_index:8;
1318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint sampler:4;
1319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint msg_type:4;
1320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint response_length:4;
1321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint msg_length:4;
1322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint msg_target:4;
1323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint pad1:3;
1324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLuint end_of_thread:1;
1325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } sampler_g4x;
1326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /** Ironlake PRM, Volume 4 Part 1, Section 4.11.1.1.3 */
1328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint binding_table_index:8;
1330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint sampler:4;
1331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_type:4;
1332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint simd_mode:2;
1333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:1;
1334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint header_present:1;
1335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:5;
1336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:2;
1338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } sampler_gen5;
1340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint binding_table_index:8;
1343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint sampler:4;
1344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_type:5;
1345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint simd_mode:2;
1346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint header_present:1;
1347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:5;
1348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:2;
1350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } sampler_gen7;
1352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct brw_urb_immediate urb;
1354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint opcode:4;
1357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint offset:6;
1358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint swizzle_control:2;
1359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad:1;
1360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint allocate:1;
1361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint used:1;
1362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint complete:1;
1363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:3;
1364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint header_present:1;
1365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:5;
1366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:2;
1368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } urb_gen5;
1370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint opcode:3;
1373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint offset:11;
1374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint swizzle_control:1;
1375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint complete:1;
1376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint per_slot_offset:1;
1377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:2;
1378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint header_present:1;
1379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:5;
1380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:2;
1382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } urb_gen7;
1384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /** 965 PRM, Volume 4, Section 5.10.1.1: Message Descriptor */
1386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint binding_table_index:8;
1388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_control:4;
1389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_type:2;
1390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint target_cache:2;
1391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:4;
1392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_target:4;
1394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:3;
1395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } dp_read;
1397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /** G45 PRM, Volume 4, Section 5.10.1.1.2 */
1399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint binding_table_index:8;
1401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_control:3;
1402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_type:3;
1403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint target_cache:2;
1404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:4;
1405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_target:4;
1407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:3;
1408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } dp_read_g4x;
1410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /** Ironlake PRM, Volume 4 Part 1, Section 5.10.2.1.2. */
1412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint binding_table_index:8;
1414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_control:3;
1415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_type:3;
1416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint target_cache:2;
1417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:3;
1418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint header_present:1;
1419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:5;
1420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:2;
1422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } dp_read_gen5;
1424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /** G45 PRM, Volume 4, Section 5.10.1.1.2.  For both Gen4 and G45. */
1426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint binding_table_index:8;
1428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_control:3;
1429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint last_render_target:1;
1430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_type:3;
1431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint send_commit_msg:1;
1432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:4;
1433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_target:4;
1435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:3;
1436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } dp_write;
1438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /** Ironlake PRM, Volume 4 Part 1, Section 5.10.2.1.2. */
1440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint binding_table_index:8;
1442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_control:3;
1443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint last_render_target:1;
1444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_type:3;
1445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint send_commit_msg:1;
1446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:3;
1447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint header_present:1;
1448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:5;
1449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:2;
1451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } dp_write_gen5;
1453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /**
1455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Message for the Sandybridge Sampler Cache or Constant Cache Data Port.
1456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       *
1457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * See the Sandybridge PRM, Volume 4 Part 1, Section 3.9.2.1.1.
1458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       **/
1459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint binding_table_index:8;
1461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_control:5;
1462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_type:3;
1463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:3;
1464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint header_present:1;
1465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:5;
1466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:2;
1468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } gen6_dp_sampler_const_cache;
1470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /**
1472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Message for the Sandybridge Render Cache Data Port.
1473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       *
1474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Most fields are defined in the Sandybridge PRM, Volume 4 Part 1,
1475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Section 3.9.2.1.1: Message Descriptor.
1476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       *
1477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * "Slot Group Select" and "Last Render Target" are part of the
1478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * 5-bit message control for Render Target Write messages.  See
1479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Section 3.9.9.2.1 of the same volume.
1480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       */
1481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint binding_table_index:8;
1483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_control:3;
1484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint slot_group_select:1;
1485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint last_render_target:1;
1486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_type:4;
1487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint send_commit_msg:1;
1488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:1;
1489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint header_present:1;
1490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:5;
1491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:2;
1493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } gen6_dp;
1495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /**
1497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Message for any of the Gen7 Data Port caches.
1498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       *
1499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Most fields are defined in BSpec volume 5c.2 Data Port / Messages /
1500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Data Port Messages / Message Descriptor.  Once again, "Slot Group
1501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * Select" and "Last Render Target" are part of the 6-bit message
1502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * control for Render Target Writes.
1503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       */
1504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint binding_table_index:8;
1506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_control:3;
1507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint slot_group_select:1;
1508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint last_render_target:1;
1509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_control_pad:1;
1510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_type:4;
1511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:1;
1512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint header_present:1;
1513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint response_length:5;
1514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint msg_length:4;
1515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad2:2;
1516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint end_of_thread:1;
1517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } gen7_dp;
1518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /** @} */
1519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct {
1521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_subreg_nr_high:1;
1522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src1_reg_nr:8;
1523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad0:1;
1524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src2_rep_ctrl:1;
1525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src2_swizzle:8;
1526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src2_subreg_nr:3;
1527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint src2_reg_nr:8;
1528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 GLuint pad1:2;
1529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      } da3src;
1530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLint d;
1532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GLuint ud;
1533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      float f;
1534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } bits3;
1535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
1536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
1539