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