1fa225cbcSrjs /**************************************************************************
2fa225cbcSrjs *
3fa225cbcSrjs * Copyright 2005 Tungsten Graphics, Inc., Cedar Park, Texas.
4fa225cbcSrjs * All Rights Reserved.
5fa225cbcSrjs *
6fa225cbcSrjs * Permission is hereby granted, free of charge, to any person obtaining a
7fa225cbcSrjs * copy of this software and associated documentation files (the
8fa225cbcSrjs * "Software"), to deal in the Software without restriction, including
9fa225cbcSrjs * without limitation the rights to use, copy, modify, merge, publish,
10fa225cbcSrjs * distribute, sub license, and/or sell copies of the Software, and to
11fa225cbcSrjs * permit persons to whom the Software is furnished to do so, subject to
12fa225cbcSrjs * the following conditions:
13fa225cbcSrjs *
14fa225cbcSrjs * The above copyright notice and this permission notice (including the
15fa225cbcSrjs * next paragraph) shall be included in all copies or substantial portions
16fa225cbcSrjs * of the Software.
17fa225cbcSrjs *
18fa225cbcSrjs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19fa225cbcSrjs * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20fa225cbcSrjs * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21fa225cbcSrjs * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22fa225cbcSrjs * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23fa225cbcSrjs * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24fa225cbcSrjs * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25fa225cbcSrjs *
26fa225cbcSrjs **************************************************************************/
27fa225cbcSrjs
28fa225cbcSrjs#ifndef BRW_STRUCTS_H
29fa225cbcSrjs#define BRW_STRUCTS_H
30fa225cbcSrjs
31fa225cbcSrjs/* Command packets:
32fa225cbcSrjs */
33fa225cbcSrjsstruct header
34fa225cbcSrjs{
35fa225cbcSrjs   unsigned int length:16;
36fa225cbcSrjs   unsigned int opcode:16;
37fa225cbcSrjs};
38fa225cbcSrjs
39fa225cbcSrjs
40fa225cbcSrjsunion header_union
41fa225cbcSrjs{
42fa225cbcSrjs   struct header bits;
43fa225cbcSrjs   unsigned int dword;
44fa225cbcSrjs};
45fa225cbcSrjs
46fa225cbcSrjsstruct brw_3d_control
47fa225cbcSrjs{
48fa225cbcSrjs   struct
49fa225cbcSrjs   {
50fa225cbcSrjs      unsigned int length:8;
51fa225cbcSrjs      unsigned int notify_enable:1;
52fa225cbcSrjs      unsigned int pad:3;
53fa225cbcSrjs      unsigned int wc_flush_enable:1;
54fa225cbcSrjs      unsigned int depth_stall_enable:1;
55fa225cbcSrjs      unsigned int operation:2;
56fa225cbcSrjs      unsigned int opcode:16;
57fa225cbcSrjs   } header;
58fa225cbcSrjs
59fa225cbcSrjs   struct
60fa225cbcSrjs   {
61fa225cbcSrjs      unsigned int pad:2;
62fa225cbcSrjs      unsigned int dest_addr_type:1;
63fa225cbcSrjs      unsigned int dest_addr:29;
64fa225cbcSrjs   } dest;
65fa225cbcSrjs
66fa225cbcSrjs   unsigned int dword2;
67fa225cbcSrjs   unsigned int dword3;
68fa225cbcSrjs};
69fa225cbcSrjs
70fa225cbcSrjs
71fa225cbcSrjsstruct brw_3d_primitive
72fa225cbcSrjs{
73fa225cbcSrjs   struct
74fa225cbcSrjs   {
75fa225cbcSrjs      unsigned int length:8;
76fa225cbcSrjs      unsigned int pad:2;
77fa225cbcSrjs      unsigned int topology:5;
78fa225cbcSrjs      unsigned int indexed:1;
79fa225cbcSrjs      unsigned int opcode:16;
80fa225cbcSrjs   } header;
81fa225cbcSrjs
82fa225cbcSrjs   unsigned int verts_per_instance;
83fa225cbcSrjs   unsigned int start_vert_location;
84fa225cbcSrjs   unsigned int instance_count;
85fa225cbcSrjs   unsigned int start_instance_location;
86fa225cbcSrjs   unsigned int base_vert_location;
87fa225cbcSrjs};
88fa225cbcSrjs
89fa225cbcSrjs/* These seem to be passed around as function args, so it works out
90fa225cbcSrjs * better to keep them as #defines:
91fa225cbcSrjs */
92fa225cbcSrjs#define BRW_FLUSH_READ_CACHE           0x1
93fa225cbcSrjs#define BRW_FLUSH_STATE_CACHE          0x2
94fa225cbcSrjs#define BRW_INHIBIT_FLUSH_RENDER_CACHE 0x4
95fa225cbcSrjs#define BRW_FLUSH_SNAPSHOT_COUNTERS    0x8
96fa225cbcSrjs
97fa225cbcSrjsstruct brw_mi_flush
98fa225cbcSrjs{
99fa225cbcSrjs   unsigned int flags:4;
100fa225cbcSrjs   unsigned int pad:12;
101fa225cbcSrjs   unsigned int opcode:16;
102fa225cbcSrjs};
103fa225cbcSrjs
104fa225cbcSrjsstruct brw_vf_statistics
105fa225cbcSrjs{
106fa225cbcSrjs   unsigned int statistics_enable:1;
107fa225cbcSrjs   unsigned int pad:15;
108fa225cbcSrjs   unsigned int opcode:16;
109fa225cbcSrjs};
110fa225cbcSrjs
111fa225cbcSrjs
112fa225cbcSrjs
113fa225cbcSrjsstruct brw_binding_table_pointers
114fa225cbcSrjs{
115fa225cbcSrjs   struct header header;
116fa225cbcSrjs   unsigned int vs;
117fa225cbcSrjs   unsigned int gs;
118fa225cbcSrjs   unsigned int clp;
119fa225cbcSrjs   unsigned int sf;
120fa225cbcSrjs   unsigned int wm;
121fa225cbcSrjs};
122fa225cbcSrjs
123fa225cbcSrjs
124fa225cbcSrjsstruct brw_blend_constant_color
125fa225cbcSrjs{
126fa225cbcSrjs   struct header header;
127fa225cbcSrjs   float blend_constant_color[4];
128fa225cbcSrjs};
129fa225cbcSrjs
130fa225cbcSrjs
131fa225cbcSrjsstruct brw_depthbuffer
132fa225cbcSrjs{
133fa225cbcSrjs   union header_union header;
134fa225cbcSrjs
135fa225cbcSrjs   union {
136fa225cbcSrjs      struct {
137fa225cbcSrjs	 unsigned int pitch:18;
138fa225cbcSrjs	 unsigned int format:3;
139fa225cbcSrjs	 unsigned int pad:4;
140fa225cbcSrjs	 unsigned int depth_offset_disable:1;
141fa225cbcSrjs	 unsigned int tile_walk:1;
142fa225cbcSrjs	 unsigned int tiled_surface:1;
143fa225cbcSrjs	 unsigned int pad2:1;
144fa225cbcSrjs	 unsigned int surface_type:3;
145fa225cbcSrjs      } bits;
146fa225cbcSrjs      unsigned int dword;
147fa225cbcSrjs   } dword1;
148fa225cbcSrjs
149fa225cbcSrjs   unsigned int dword2_base_addr;
150fa225cbcSrjs
151fa225cbcSrjs   union {
152fa225cbcSrjs      struct {
153fa225cbcSrjs	 unsigned int pad:1;
154fa225cbcSrjs	 unsigned int mipmap_layout:1;
155fa225cbcSrjs	 unsigned int lod:4;
156fa225cbcSrjs	 unsigned int width:13;
157fa225cbcSrjs	 unsigned int height:13;
158fa225cbcSrjs      } bits;
159fa225cbcSrjs      unsigned int dword;
160fa225cbcSrjs   } dword3;
161fa225cbcSrjs
162fa225cbcSrjs   union {
163fa225cbcSrjs      struct {
164fa225cbcSrjs	 unsigned int pad:12;
165fa225cbcSrjs	 unsigned int min_array_element:9;
166fa225cbcSrjs	 unsigned int depth:11;
167fa225cbcSrjs      } bits;
168fa225cbcSrjs      unsigned int dword;
169fa225cbcSrjs   } dword4;
170fa225cbcSrjs};
171fa225cbcSrjs
172fa225cbcSrjsstruct brw_drawrect
173fa225cbcSrjs{
174fa225cbcSrjs   struct header header;
175fa225cbcSrjs   unsigned int xmin:16;
176fa225cbcSrjs   unsigned int ymin:16;
177fa225cbcSrjs   unsigned int xmax:16;
178fa225cbcSrjs   unsigned int ymax:16;
179fa225cbcSrjs   unsigned int xorg:16;
180fa225cbcSrjs   unsigned int yorg:16;
181fa225cbcSrjs};
182fa225cbcSrjs
183fa225cbcSrjs
184fa225cbcSrjs
185fa225cbcSrjs
186fa225cbcSrjsstruct brw_global_depth_offset_clamp
187fa225cbcSrjs{
188fa225cbcSrjs   struct header header;
189fa225cbcSrjs   float depth_offset_clamp;
190fa225cbcSrjs};
191fa225cbcSrjs
192fa225cbcSrjsstruct brw_indexbuffer
193fa225cbcSrjs{
194fa225cbcSrjs   union {
195fa225cbcSrjs      struct
196fa225cbcSrjs      {
197fa225cbcSrjs	 unsigned int length:8;
198fa225cbcSrjs	 unsigned int index_format:2;
199fa225cbcSrjs	 unsigned int cut_index_enable:1;
200fa225cbcSrjs	 unsigned int pad:5;
201fa225cbcSrjs	 unsigned int opcode:16;
202fa225cbcSrjs      } bits;
203fa225cbcSrjs      unsigned int dword;
204fa225cbcSrjs
205fa225cbcSrjs   } header;
206fa225cbcSrjs
207fa225cbcSrjs   unsigned int buffer_start;
208fa225cbcSrjs   unsigned int buffer_end;
209fa225cbcSrjs};
210fa225cbcSrjs
211fa225cbcSrjs
212fa225cbcSrjsstruct brw_line_stipple
213fa225cbcSrjs{
214fa225cbcSrjs   struct header header;
215fa225cbcSrjs
216fa225cbcSrjs   struct
217fa225cbcSrjs   {
218fa225cbcSrjs      unsigned int pattern:16;
219fa225cbcSrjs      unsigned int pad:16;
220fa225cbcSrjs   } bits0;
221fa225cbcSrjs
222fa225cbcSrjs   struct
223fa225cbcSrjs   {
224fa225cbcSrjs      unsigned int repeat_count:9;
225fa225cbcSrjs      unsigned int pad:7;
226fa225cbcSrjs      unsigned int inverse_repeat_count:16;
227fa225cbcSrjs   } bits1;
228fa225cbcSrjs};
229fa225cbcSrjs
230fa225cbcSrjs
231fa225cbcSrjsstruct brw_pipelined_state_pointers
232fa225cbcSrjs{
233fa225cbcSrjs   struct header header;
234fa225cbcSrjs
235fa225cbcSrjs   struct {
236fa225cbcSrjs      unsigned int pad:5;
237fa225cbcSrjs      unsigned int offset:27;
238fa225cbcSrjs   } vs;
239fa225cbcSrjs
240fa225cbcSrjs   struct
241fa225cbcSrjs   {
242fa225cbcSrjs      unsigned int enable:1;
243fa225cbcSrjs      unsigned int pad:4;
244fa225cbcSrjs      unsigned int offset:27;
245fa225cbcSrjs   } gs;
246fa225cbcSrjs
247fa225cbcSrjs   struct
248fa225cbcSrjs   {
249fa225cbcSrjs      unsigned int enable:1;
250fa225cbcSrjs      unsigned int pad:4;
251fa225cbcSrjs      unsigned int offset:27;
252fa225cbcSrjs   } clp;
253fa225cbcSrjs
254fa225cbcSrjs   struct
255fa225cbcSrjs   {
256fa225cbcSrjs      unsigned int pad:5;
257fa225cbcSrjs      unsigned int offset:27;
258fa225cbcSrjs   } sf;
259fa225cbcSrjs
260fa225cbcSrjs   struct
261fa225cbcSrjs   {
262fa225cbcSrjs      unsigned int pad:5;
263fa225cbcSrjs      unsigned int offset:27;
264fa225cbcSrjs   } wm;
265fa225cbcSrjs
266fa225cbcSrjs   struct
267fa225cbcSrjs   {
268fa225cbcSrjs      unsigned int pad:5;
269fa225cbcSrjs      unsigned int offset:27; /* KW: check me! */
270fa225cbcSrjs   } cc;
271fa225cbcSrjs};
272fa225cbcSrjs
273fa225cbcSrjs
274fa225cbcSrjsstruct brw_polygon_stipple_offset
275fa225cbcSrjs{
276fa225cbcSrjs   struct header header;
277fa225cbcSrjs
278fa225cbcSrjs   struct {
279fa225cbcSrjs      unsigned int y_offset:5;
280fa225cbcSrjs      unsigned int pad:3;
281fa225cbcSrjs      unsigned int x_offset:5;
282fa225cbcSrjs      unsigned int pad0:19;
283fa225cbcSrjs   } bits0;
284fa225cbcSrjs};
285fa225cbcSrjs
286fa225cbcSrjs
287fa225cbcSrjs
288fa225cbcSrjsstruct brw_polygon_stipple
289fa225cbcSrjs{
290fa225cbcSrjs   struct header header;
291fa225cbcSrjs   unsigned int stipple[32];
292fa225cbcSrjs};
293fa225cbcSrjs
294fa225cbcSrjs
295fa225cbcSrjs
296fa225cbcSrjsstruct brw_pipeline_select
297fa225cbcSrjs{
298fa225cbcSrjs   struct
299fa225cbcSrjs   {
300fa225cbcSrjs      unsigned int pipeline_select:1;
301fa225cbcSrjs      unsigned int pad:15;
302fa225cbcSrjs      unsigned int opcode:16;
303fa225cbcSrjs   } header;
304fa225cbcSrjs};
305fa225cbcSrjs
306fa225cbcSrjs
307fa225cbcSrjsstruct brw_pipe_control
308fa225cbcSrjs{
309fa225cbcSrjs   struct
310fa225cbcSrjs   {
311fa225cbcSrjs      unsigned int length:8;
312fa225cbcSrjs      unsigned int notify_enable:1;
313fa225cbcSrjs      unsigned int pad:2;
314fa225cbcSrjs      unsigned int instruction_state_cache_flush_enable:1;
315fa225cbcSrjs      unsigned int write_cache_flush_enable:1;
316fa225cbcSrjs      unsigned int depth_stall_enable:1;
317fa225cbcSrjs      unsigned int post_sync_operation:2;
318fa225cbcSrjs
319fa225cbcSrjs      unsigned int opcode:16;
320fa225cbcSrjs   } header;
321fa225cbcSrjs
322fa225cbcSrjs   struct
323fa225cbcSrjs   {
324fa225cbcSrjs      unsigned int pad:2;
325fa225cbcSrjs      unsigned int dest_addr_type:1;
326fa225cbcSrjs      unsigned int dest_addr:29;
327fa225cbcSrjs   } bits1;
328fa225cbcSrjs
329fa225cbcSrjs   unsigned int data0;
330fa225cbcSrjs   unsigned int data1;
331fa225cbcSrjs};
332fa225cbcSrjs
333fa225cbcSrjs
334fa225cbcSrjsstruct brw_urb_fence
335fa225cbcSrjs{
336fa225cbcSrjs   struct
337fa225cbcSrjs   {
338fa225cbcSrjs      unsigned int length:8;
339fa225cbcSrjs      unsigned int vs_realloc:1;
340fa225cbcSrjs      unsigned int gs_realloc:1;
341fa225cbcSrjs      unsigned int clp_realloc:1;
342fa225cbcSrjs      unsigned int sf_realloc:1;
343fa225cbcSrjs      unsigned int vfe_realloc:1;
344fa225cbcSrjs      unsigned int cs_realloc:1;
345fa225cbcSrjs      unsigned int pad:2;
346fa225cbcSrjs      unsigned int opcode:16;
347fa225cbcSrjs   } header;
348fa225cbcSrjs
349fa225cbcSrjs   struct
350fa225cbcSrjs   {
351fa225cbcSrjs      unsigned int vs_fence:10;
352fa225cbcSrjs      unsigned int gs_fence:10;
353fa225cbcSrjs      unsigned int clp_fence:10;
354fa225cbcSrjs      unsigned int pad:2;
355fa225cbcSrjs   } bits0;
356fa225cbcSrjs
357fa225cbcSrjs   struct
358fa225cbcSrjs   {
359fa225cbcSrjs      unsigned int sf_fence:10;
360fa225cbcSrjs      unsigned int vf_fence:10;
361fa225cbcSrjs      unsigned int cs_fence:10;
362fa225cbcSrjs      unsigned int pad:2;
363fa225cbcSrjs   } bits1;
364fa225cbcSrjs};
365fa225cbcSrjs
366fa225cbcSrjsstruct brw_constant_buffer_state /* previously brw_command_streamer */
367fa225cbcSrjs{
368fa225cbcSrjs   struct header header;
369fa225cbcSrjs
370fa225cbcSrjs   struct
371fa225cbcSrjs   {
372fa225cbcSrjs      unsigned int nr_urb_entries:3;
373fa225cbcSrjs      unsigned int pad:1;
374fa225cbcSrjs      unsigned int urb_entry_size:5;
375fa225cbcSrjs      unsigned int pad0:23;
376fa225cbcSrjs   } bits0;
377fa225cbcSrjs};
378fa225cbcSrjs
379fa225cbcSrjsstruct brw_constant_buffer
380fa225cbcSrjs{
381fa225cbcSrjs   struct
382fa225cbcSrjs   {
383fa225cbcSrjs      unsigned int length:8;
384fa225cbcSrjs      unsigned int valid:1;
385fa225cbcSrjs      unsigned int pad:7;
386fa225cbcSrjs      unsigned int opcode:16;
387fa225cbcSrjs   } header;
388fa225cbcSrjs
389fa225cbcSrjs   struct
390fa225cbcSrjs   {
391fa225cbcSrjs      unsigned int buffer_length:6;
392fa225cbcSrjs      unsigned int buffer_address:26;
393fa225cbcSrjs   } bits0;
394fa225cbcSrjs};
395fa225cbcSrjs
396fa225cbcSrjsstruct brw_state_base_address
397fa225cbcSrjs{
398fa225cbcSrjs   struct header header;
399fa225cbcSrjs
400fa225cbcSrjs   struct
401fa225cbcSrjs   {
402fa225cbcSrjs      unsigned int modify_enable:1;
403fa225cbcSrjs      unsigned int pad:4;
404fa225cbcSrjs      unsigned int general_state_address:27;
405fa225cbcSrjs   } bits0;
406fa225cbcSrjs
407fa225cbcSrjs   struct
408fa225cbcSrjs   {
409fa225cbcSrjs      unsigned int modify_enable:1;
410fa225cbcSrjs      unsigned int pad:4;
411fa225cbcSrjs      unsigned int surface_state_address:27;
412fa225cbcSrjs   } bits1;
413fa225cbcSrjs
414fa225cbcSrjs   struct
415fa225cbcSrjs   {
416fa225cbcSrjs      unsigned int modify_enable:1;
417fa225cbcSrjs      unsigned int pad:4;
418fa225cbcSrjs      unsigned int indirect_object_state_address:27;
419fa225cbcSrjs   } bits2;
420fa225cbcSrjs
421fa225cbcSrjs   struct
422fa225cbcSrjs   {
423fa225cbcSrjs      unsigned int modify_enable:1;
424fa225cbcSrjs      unsigned int pad:11;
425fa225cbcSrjs      unsigned int general_state_upper_bound:20;
426fa225cbcSrjs   } bits3;
427fa225cbcSrjs
428fa225cbcSrjs   struct
429fa225cbcSrjs   {
430fa225cbcSrjs      unsigned int modify_enable:1;
431fa225cbcSrjs      unsigned int pad:11;
432fa225cbcSrjs      unsigned int indirect_object_state_upper_bound:20;
433fa225cbcSrjs   } bits4;
434fa225cbcSrjs};
435fa225cbcSrjs
436fa225cbcSrjsstruct brw_state_prefetch
437fa225cbcSrjs{
438fa225cbcSrjs   struct header header;
439fa225cbcSrjs
440fa225cbcSrjs   struct
441fa225cbcSrjs   {
442fa225cbcSrjs      unsigned int prefetch_count:3;
443fa225cbcSrjs      unsigned int pad:3;
444fa225cbcSrjs      unsigned int prefetch_pointer:26;
445fa225cbcSrjs   } bits0;
446fa225cbcSrjs};
447fa225cbcSrjs
448fa225cbcSrjsstruct brw_system_instruction_pointer
449fa225cbcSrjs{
450fa225cbcSrjs   struct header header;
451fa225cbcSrjs
452fa225cbcSrjs   struct
453fa225cbcSrjs   {
454fa225cbcSrjs      unsigned int pad:4;
455fa225cbcSrjs      unsigned int system_instruction_pointer:28;
456fa225cbcSrjs   } bits0;
457fa225cbcSrjs};
458fa225cbcSrjs
459fa225cbcSrjs
460fa225cbcSrjs
461fa225cbcSrjs
462fa225cbcSrjs/* State structs for the various fixed function units:
463fa225cbcSrjs */
464fa225cbcSrjs
465fa225cbcSrjs
466fa225cbcSrjsstruct thread0
467fa225cbcSrjs{
468fa225cbcSrjs   unsigned int pad0:1;
469fa225cbcSrjs   unsigned int grf_reg_count:3;
470fa225cbcSrjs   unsigned int pad1:2;
471fa225cbcSrjs   unsigned int kernel_start_pointer:26;
472fa225cbcSrjs};
473fa225cbcSrjs
474fa225cbcSrjsstruct thread1
475fa225cbcSrjs{
476fa225cbcSrjs   unsigned int ext_halt_exception_enable:1;
477fa225cbcSrjs   unsigned int sw_exception_enable:1;
478fa225cbcSrjs   unsigned int mask_stack_exception_enable:1;
479fa225cbcSrjs   unsigned int timeout_exception_enable:1;
480fa225cbcSrjs   unsigned int illegal_op_exception_enable:1;
481fa225cbcSrjs   unsigned int pad0:3;
482fa225cbcSrjs   unsigned int depth_coef_urb_read_offset:6;	/* WM only */
483fa225cbcSrjs   unsigned int pad1:2;
484fa225cbcSrjs   unsigned int floating_point_mode:1;
485fa225cbcSrjs   unsigned int thread_priority:1;
486fa225cbcSrjs   unsigned int binding_table_entry_count:8;
487fa225cbcSrjs   unsigned int pad3:5;
488fa225cbcSrjs   unsigned int single_program_flow:1;
489fa225cbcSrjs};
490fa225cbcSrjs
491fa225cbcSrjsstruct thread2
492fa225cbcSrjs{
493fa225cbcSrjs   unsigned int per_thread_scratch_space:4;
494fa225cbcSrjs   unsigned int pad0:6;
495fa225cbcSrjs   unsigned int scratch_space_base_pointer:22;
496fa225cbcSrjs};
497fa225cbcSrjs
498fa225cbcSrjs
499fa225cbcSrjsstruct thread3
500fa225cbcSrjs{
501fa225cbcSrjs   unsigned int dispatch_grf_start_reg:4;
502fa225cbcSrjs   unsigned int urb_entry_read_offset:6;
503fa225cbcSrjs   unsigned int pad0:1;
504fa225cbcSrjs   unsigned int urb_entry_read_length:6;
505fa225cbcSrjs   unsigned int pad1:1;
506fa225cbcSrjs   unsigned int const_urb_entry_read_offset:6;
507fa225cbcSrjs   unsigned int pad2:1;
508fa225cbcSrjs   unsigned int const_urb_entry_read_length:6;
509fa225cbcSrjs   unsigned int pad3:1;
510fa225cbcSrjs};
511fa225cbcSrjs
512fa225cbcSrjs
513fa225cbcSrjs
514fa225cbcSrjsstruct brw_clip_unit_state
515fa225cbcSrjs{
516fa225cbcSrjs   struct thread0 thread0;
517fa225cbcSrjs   struct thread1 thread1;
518fa225cbcSrjs   struct thread2 thread2;
519fa225cbcSrjs   struct thread3 thread3;
520fa225cbcSrjs
521fa225cbcSrjs   struct
522fa225cbcSrjs   {
523fa225cbcSrjs      unsigned int pad0:9;
524fa225cbcSrjs      unsigned int gs_output_stats:1; /* not always */
525fa225cbcSrjs      unsigned int stats_enable:1;
526fa225cbcSrjs      unsigned int nr_urb_entries:7;
527fa225cbcSrjs      unsigned int pad1:1;
528fa225cbcSrjs      unsigned int urb_entry_allocation_size:5;
529fa225cbcSrjs      unsigned int pad2:1;
530fa225cbcSrjs      unsigned int max_threads:6; 	/* may be less */
531fa225cbcSrjs      unsigned int pad3:1;
532fa225cbcSrjs   } thread4;
533fa225cbcSrjs
534fa225cbcSrjs   struct
535fa225cbcSrjs   {
536fa225cbcSrjs      unsigned int pad0:13;
537fa225cbcSrjs      unsigned int clip_mode:3;
538fa225cbcSrjs      unsigned int userclip_enable_flags:8;
539fa225cbcSrjs      unsigned int userclip_must_clip:1;
540fa225cbcSrjs      unsigned int pad1:1;
541fa225cbcSrjs      unsigned int guard_band_enable:1;
542fa225cbcSrjs      unsigned int viewport_z_clip_enable:1;
543fa225cbcSrjs      unsigned int viewport_xy_clip_enable:1;
544fa225cbcSrjs      unsigned int vertex_position_space:1;
545fa225cbcSrjs      unsigned int api_mode:1;
546fa225cbcSrjs      unsigned int pad2:1;
547fa225cbcSrjs   } clip5;
548fa225cbcSrjs
549fa225cbcSrjs   struct
550fa225cbcSrjs   {
551fa225cbcSrjs      unsigned int pad0:5;
552fa225cbcSrjs      unsigned int clipper_viewport_state_ptr:27;
553fa225cbcSrjs   } clip6;
554fa225cbcSrjs
555fa225cbcSrjs
556fa225cbcSrjs   float viewport_xmin;
557fa225cbcSrjs   float viewport_xmax;
558fa225cbcSrjs   float viewport_ymin;
559fa225cbcSrjs   float viewport_ymax;
560fa225cbcSrjs};
561fa225cbcSrjs
562fa225cbcSrjs
563fa225cbcSrjs
564fa225cbcSrjsstruct brw_cc_unit_state
565fa225cbcSrjs{
566fa225cbcSrjs   struct
567fa225cbcSrjs   {
568fa225cbcSrjs      unsigned int pad0:3;
569fa225cbcSrjs      unsigned int bf_stencil_pass_depth_pass_op:3;
570fa225cbcSrjs      unsigned int bf_stencil_pass_depth_fail_op:3;
571fa225cbcSrjs      unsigned int bf_stencil_fail_op:3;
572fa225cbcSrjs      unsigned int bf_stencil_func:3;
573fa225cbcSrjs      unsigned int bf_stencil_enable:1;
574fa225cbcSrjs      unsigned int pad1:2;
575fa225cbcSrjs      unsigned int stencil_write_enable:1;
576fa225cbcSrjs      unsigned int stencil_pass_depth_pass_op:3;
577fa225cbcSrjs      unsigned int stencil_pass_depth_fail_op:3;
578fa225cbcSrjs      unsigned int stencil_fail_op:3;
579fa225cbcSrjs      unsigned int stencil_func:3;
580fa225cbcSrjs      unsigned int stencil_enable:1;
581fa225cbcSrjs   } cc0;
582fa225cbcSrjs
583fa225cbcSrjs
584fa225cbcSrjs   struct
585fa225cbcSrjs   {
586fa225cbcSrjs      unsigned int bf_stencil_ref:8;
587fa225cbcSrjs      unsigned int stencil_write_mask:8;
588fa225cbcSrjs      unsigned int stencil_test_mask:8;
589fa225cbcSrjs      unsigned int stencil_ref:8;
590fa225cbcSrjs   } cc1;
591fa225cbcSrjs
592fa225cbcSrjs
593fa225cbcSrjs   struct
594fa225cbcSrjs   {
595fa225cbcSrjs      unsigned int logicop_enable:1;
596fa225cbcSrjs      unsigned int pad0:10;
597fa225cbcSrjs      unsigned int depth_write_enable:1;
598fa225cbcSrjs      unsigned int depth_test_function:3;
599fa225cbcSrjs      unsigned int depth_test:1;
600fa225cbcSrjs      unsigned int bf_stencil_write_mask:8;
601fa225cbcSrjs      unsigned int bf_stencil_test_mask:8;
602fa225cbcSrjs   } cc2;
603fa225cbcSrjs
604fa225cbcSrjs
605fa225cbcSrjs   struct
606fa225cbcSrjs   {
607fa225cbcSrjs      unsigned int pad0:8;
608fa225cbcSrjs      unsigned int alpha_test_func:3;
609fa225cbcSrjs      unsigned int alpha_test:1;
610fa225cbcSrjs      unsigned int blend_enable:1;
611fa225cbcSrjs      unsigned int ia_blend_enable:1;
612fa225cbcSrjs      unsigned int pad1:1;
613fa225cbcSrjs      unsigned int alpha_test_format:1;
614fa225cbcSrjs      unsigned int pad2:16;
615fa225cbcSrjs   } cc3;
616fa225cbcSrjs
617fa225cbcSrjs   struct
618fa225cbcSrjs   {
619fa225cbcSrjs      unsigned int pad0:5;
620fa225cbcSrjs      unsigned int cc_viewport_state_offset:27;
621fa225cbcSrjs   } cc4;
622fa225cbcSrjs
623fa225cbcSrjs   struct
624fa225cbcSrjs   {
625fa225cbcSrjs      unsigned int pad0:2;
626fa225cbcSrjs      unsigned int ia_dest_blend_factor:5;
627fa225cbcSrjs      unsigned int ia_src_blend_factor:5;
628fa225cbcSrjs      unsigned int ia_blend_function:3;
629fa225cbcSrjs      unsigned int statistics_enable:1;
630fa225cbcSrjs      unsigned int logicop_func:4;
631fa225cbcSrjs      unsigned int pad1:11;
632fa225cbcSrjs      unsigned int dither_enable:1;
633fa225cbcSrjs   } cc5;
634fa225cbcSrjs
635fa225cbcSrjs   struct
636fa225cbcSrjs   {
637fa225cbcSrjs      unsigned int clamp_post_alpha_blend:1;
638fa225cbcSrjs      unsigned int clamp_pre_alpha_blend:1;
639fa225cbcSrjs      unsigned int clamp_range:2;
640fa225cbcSrjs      unsigned int pad0:11;
641fa225cbcSrjs      unsigned int y_dither_offset:2;
642fa225cbcSrjs      unsigned int x_dither_offset:2;
643fa225cbcSrjs      unsigned int dest_blend_factor:5;
644fa225cbcSrjs      unsigned int src_blend_factor:5;
645fa225cbcSrjs      unsigned int blend_function:3;
646fa225cbcSrjs   } cc6;
647fa225cbcSrjs
648fa225cbcSrjs   struct {
649fa225cbcSrjs      union {
650fa225cbcSrjs	 float f;
651fa225cbcSrjs	 unsigned char ub[4];
652fa225cbcSrjs      } alpha_ref;
653fa225cbcSrjs   } cc7;
654fa225cbcSrjs};
655fa225cbcSrjs
656fa225cbcSrjs
657fa225cbcSrjs
658fa225cbcSrjsstruct brw_sf_unit_state
659fa225cbcSrjs{
660fa225cbcSrjs   struct thread0 thread0;
661fa225cbcSrjs   struct {
662fa225cbcSrjs      unsigned int pad0:7;
663fa225cbcSrjs      unsigned int sw_exception_enable:1;
664fa225cbcSrjs      unsigned int pad1:3;
665fa225cbcSrjs      unsigned int mask_stack_exception_enable:1;
666fa225cbcSrjs      unsigned int pad2:1;
667fa225cbcSrjs      unsigned int illegal_op_exception_enable:1;
668fa225cbcSrjs      unsigned int pad3:2;
669fa225cbcSrjs      unsigned int floating_point_mode:1;
670fa225cbcSrjs      unsigned int thread_priority:1;
671fa225cbcSrjs      unsigned int binding_table_entry_count:8;
672fa225cbcSrjs      unsigned int pad4:5;
673fa225cbcSrjs      unsigned int single_program_flow:1;
674fa225cbcSrjs   } sf1;
675fa225cbcSrjs
676fa225cbcSrjs   struct thread2 thread2;
677fa225cbcSrjs   struct thread3 thread3;
678fa225cbcSrjs
679fa225cbcSrjs   struct
680fa225cbcSrjs   {
681fa225cbcSrjs      unsigned int pad0:10;
682fa225cbcSrjs      unsigned int stats_enable:1;
683fa225cbcSrjs      unsigned int nr_urb_entries:7;
684fa225cbcSrjs      unsigned int pad1:1;
685fa225cbcSrjs      unsigned int urb_entry_allocation_size:5;
686fa225cbcSrjs      unsigned int pad2:1;
687fa225cbcSrjs      unsigned int max_threads:6;
688fa225cbcSrjs      unsigned int pad3:1;
689fa225cbcSrjs   } thread4;
690fa225cbcSrjs
691fa225cbcSrjs   struct
692fa225cbcSrjs   {
693fa225cbcSrjs      unsigned int front_winding:1;
694fa225cbcSrjs      unsigned int viewport_transform:1;
695fa225cbcSrjs      unsigned int pad0:3;
696fa225cbcSrjs      unsigned int sf_viewport_state_offset:27;
697fa225cbcSrjs   } sf5;
698fa225cbcSrjs
699fa225cbcSrjs   struct
700fa225cbcSrjs   {
701fa225cbcSrjs      unsigned int pad0:9;
702fa225cbcSrjs      unsigned int dest_org_vbias:4;
703fa225cbcSrjs      unsigned int dest_org_hbias:4;
704fa225cbcSrjs      unsigned int scissor:1;
705fa225cbcSrjs      unsigned int disable_2x2_trifilter:1;
706fa225cbcSrjs      unsigned int disable_zero_pix_trifilter:1;
707fa225cbcSrjs      unsigned int point_rast_rule:2;
708fa225cbcSrjs      unsigned int line_endcap_aa_region_width:2;
709fa225cbcSrjs      unsigned int line_width:4;
710fa225cbcSrjs      unsigned int fast_scissor_disable:1;
711fa225cbcSrjs      unsigned int cull_mode:2;
712fa225cbcSrjs      unsigned int aa_enable:1;
713fa225cbcSrjs   } sf6;
714fa225cbcSrjs
715fa225cbcSrjs   struct
716fa225cbcSrjs   {
717fa225cbcSrjs      unsigned int point_size:11;
718fa225cbcSrjs      unsigned int use_point_size_state:1;
719fa225cbcSrjs      unsigned int subpixel_precision:1;
720fa225cbcSrjs      unsigned int sprite_point:1;
721fa225cbcSrjs      unsigned int pad0:11;
722fa225cbcSrjs      unsigned int trifan_pv:2;
723fa225cbcSrjs      unsigned int linestrip_pv:2;
724fa225cbcSrjs      unsigned int tristrip_pv:2;
725fa225cbcSrjs      unsigned int line_last_pixel_enable:1;
726fa225cbcSrjs   } sf7;
727fa225cbcSrjs
728fa225cbcSrjs};
729fa225cbcSrjs
730fa225cbcSrjs
731fa225cbcSrjsstruct brw_gs_unit_state
732fa225cbcSrjs{
733fa225cbcSrjs   struct thread0 thread0;
734fa225cbcSrjs   struct thread1 thread1;
735fa225cbcSrjs   struct thread2 thread2;
736fa225cbcSrjs   struct thread3 thread3;
737fa225cbcSrjs
738fa225cbcSrjs   struct
739fa225cbcSrjs   {
740fa225cbcSrjs      unsigned int pad0:10;
741fa225cbcSrjs      unsigned int stats_enable:1;
742fa225cbcSrjs      unsigned int nr_urb_entries:7;
743fa225cbcSrjs      unsigned int pad1:1;
744fa225cbcSrjs      unsigned int urb_entry_allocation_size:5;
745fa225cbcSrjs      unsigned int pad2:1;
746fa225cbcSrjs      unsigned int max_threads:1;
747fa225cbcSrjs      unsigned int pad3:6;
748fa225cbcSrjs   } thread4;
749fa225cbcSrjs
750fa225cbcSrjs   struct
751fa225cbcSrjs   {
752fa225cbcSrjs      unsigned int sampler_count:3;
753fa225cbcSrjs      unsigned int pad0:2;
754fa225cbcSrjs      unsigned int sampler_state_pointer:27;
755fa225cbcSrjs   } gs5;
756fa225cbcSrjs
757fa225cbcSrjs
758fa225cbcSrjs   struct
759fa225cbcSrjs   {
760fa225cbcSrjs      unsigned int max_vp_index:4;
761fa225cbcSrjs      unsigned int pad0:26;
762fa225cbcSrjs      unsigned int reorder_enable:1;
763fa225cbcSrjs      unsigned int pad1:1;
764fa225cbcSrjs   } gs6;
765fa225cbcSrjs};
766fa225cbcSrjs
767fa225cbcSrjs
768fa225cbcSrjsstruct brw_vs_unit_state
769fa225cbcSrjs{
770fa225cbcSrjs   struct thread0 thread0;
771fa225cbcSrjs   struct thread1 thread1;
772fa225cbcSrjs   struct thread2 thread2;
773fa225cbcSrjs   struct thread3 thread3;
774fa225cbcSrjs
775fa225cbcSrjs   struct
776fa225cbcSrjs   {
777fa225cbcSrjs      unsigned int pad0:10;
778fa225cbcSrjs      unsigned int stats_enable:1;
779fa225cbcSrjs      unsigned int nr_urb_entries:7;
780fa225cbcSrjs      unsigned int pad1:1;
781fa225cbcSrjs      unsigned int urb_entry_allocation_size:5;
782fa225cbcSrjs      unsigned int pad2:1;
783fa225cbcSrjs      unsigned int max_threads:4;
784fa225cbcSrjs      unsigned int pad3:3;
785fa225cbcSrjs   } thread4;
786fa225cbcSrjs
787fa225cbcSrjs   struct
788fa225cbcSrjs   {
789fa225cbcSrjs      unsigned int sampler_count:3;
790fa225cbcSrjs      unsigned int pad0:2;
791fa225cbcSrjs      unsigned int sampler_state_pointer:27;
792fa225cbcSrjs   } vs5;
793fa225cbcSrjs
794fa225cbcSrjs   struct
795fa225cbcSrjs   {
796fa225cbcSrjs      unsigned int vs_enable:1;
797fa225cbcSrjs      unsigned int vert_cache_disable:1;
798fa225cbcSrjs      unsigned int pad0:30;
799fa225cbcSrjs   } vs6;
800fa225cbcSrjs};
801fa225cbcSrjs
802fa225cbcSrjs
803fa225cbcSrjsstruct brw_wm_unit_state
804fa225cbcSrjs{
805fa225cbcSrjs   struct thread0 thread0;
806fa225cbcSrjs   struct thread1 thread1;
807fa225cbcSrjs   struct thread2 thread2;
808fa225cbcSrjs   struct thread3 thread3;
809fa225cbcSrjs
810fa225cbcSrjs   struct {
811fa225cbcSrjs      unsigned int stats_enable:1;
812fa225cbcSrjs      unsigned int pad0:1;
813fa225cbcSrjs      unsigned int sampler_count:3;
814fa225cbcSrjs      unsigned int sampler_state_pointer:27;
815fa225cbcSrjs   } wm4;
816fa225cbcSrjs
817fa225cbcSrjs   struct
818fa225cbcSrjs   {
819fa225cbcSrjs      unsigned int enable_8_pix:1;
820fa225cbcSrjs      unsigned int enable_16_pix:1;
821fa225cbcSrjs      unsigned int enable_32_pix:1;
822fa225cbcSrjs      unsigned int pad0:7;
823fa225cbcSrjs      unsigned int legacy_global_depth_bias:1;
824fa225cbcSrjs      unsigned int line_stipple:1;
825fa225cbcSrjs      unsigned int depth_offset:1;
826fa225cbcSrjs      unsigned int polygon_stipple:1;
827fa225cbcSrjs      unsigned int line_aa_region_width:2;
828fa225cbcSrjs      unsigned int line_endcap_aa_region_width:2;
829fa225cbcSrjs      unsigned int early_depth_test:1;
830fa225cbcSrjs      unsigned int thread_dispatch_enable:1;
831fa225cbcSrjs      unsigned int program_uses_depth:1;
832fa225cbcSrjs      unsigned int program_computes_depth:1;
833fa225cbcSrjs      unsigned int program_uses_killpixel:1;
834fa225cbcSrjs      unsigned int legacy_line_rast: 1;
835fa225cbcSrjs      unsigned int transposed_urb_read:1;
836fa225cbcSrjs      unsigned int max_threads:7;
837fa225cbcSrjs   } wm5;
838fa225cbcSrjs
839fa225cbcSrjs   float global_depth_offset_constant;
840fa225cbcSrjs   float global_depth_offset_scale;
841fa225cbcSrjs
842fa225cbcSrjs   struct {
843fa225cbcSrjs      unsigned int pad0:1;
844fa225cbcSrjs      unsigned int grf_reg_count_1:3;
845fa225cbcSrjs      unsigned int pad1:2;
846fa225cbcSrjs      unsigned int kernel_start_pointer_1:26;
847fa225cbcSrjs   } wm8;
848fa225cbcSrjs
849fa225cbcSrjs   struct {
850fa225cbcSrjs      unsigned int pad0:1;
851fa225cbcSrjs      unsigned int grf_reg_count_2:3;
852fa225cbcSrjs      unsigned int pad1:2;
853fa225cbcSrjs      unsigned int kernel_start_pointer_2:26;
854fa225cbcSrjs   } wm9;
855fa225cbcSrjs
856fa225cbcSrjs   struct {
857fa225cbcSrjs      unsigned int pad0:1;
858fa225cbcSrjs      unsigned int grf_reg_count_3:3;
859fa225cbcSrjs      unsigned int pad1:2;
860fa225cbcSrjs      unsigned int kernel_start_pointer_3:26;
861fa225cbcSrjs   } wm10;
862fa225cbcSrjs};
863fa225cbcSrjs
864fa225cbcSrjs/* The hardware supports two different modes for border color. The
865fa225cbcSrjs * default (OpenGL) mode uses floating-point color channels, while the
866fa225cbcSrjs * legacy mode uses 4 bytes.
867fa225cbcSrjs *
868fa225cbcSrjs * More significantly, the legacy mode respects the components of the
869fa225cbcSrjs * border color for channels not present in the source, (whereas the
870fa225cbcSrjs * default mode will ignore the border color's alpha channel and use
871fa225cbcSrjs * alpha==1 for an RGB source, for example).
872fa225cbcSrjs *
873fa225cbcSrjs * The legacy mode matches the semantics specified by the Render
874fa225cbcSrjs * extension.
875fa225cbcSrjs */
876fa225cbcSrjsstruct brw_sampler_default_border_color {
877fa225cbcSrjs   float color[4];
878fa225cbcSrjs};
879fa225cbcSrjs
880fa225cbcSrjsstruct brw_sampler_legacy_border_color {
881fa225cbcSrjs   uint8_t color[4];
882fa225cbcSrjs};
883fa225cbcSrjs
884fa225cbcSrjsstruct brw_sampler_state
885fa225cbcSrjs{
886fa225cbcSrjs
887fa225cbcSrjs   struct
888fa225cbcSrjs   {
889fa225cbcSrjs      unsigned int shadow_function:3;
890fa225cbcSrjs      unsigned int lod_bias:11;
891fa225cbcSrjs      unsigned int min_filter:3;
892fa225cbcSrjs      unsigned int mag_filter:3;
893fa225cbcSrjs      unsigned int mip_filter:2;
894fa225cbcSrjs      unsigned int base_level:5;
895fa225cbcSrjs      unsigned int pad:1;
896fa225cbcSrjs      unsigned int lod_preclamp:1;
897fa225cbcSrjs      unsigned int border_color_mode:1;
898fa225cbcSrjs      unsigned int pad0:1;
899fa225cbcSrjs      unsigned int disable:1;
900fa225cbcSrjs   } ss0;
901fa225cbcSrjs
902fa225cbcSrjs   struct
903fa225cbcSrjs   {
904fa225cbcSrjs      unsigned int r_wrap_mode:3;
905fa225cbcSrjs      unsigned int t_wrap_mode:3;
906fa225cbcSrjs      unsigned int s_wrap_mode:3;
907fa225cbcSrjs      unsigned int pad:3;
908fa225cbcSrjs      unsigned int max_lod:10;
909fa225cbcSrjs      unsigned int min_lod:10;
910fa225cbcSrjs   } ss1;
911fa225cbcSrjs
912fa225cbcSrjs
913fa225cbcSrjs   struct
914fa225cbcSrjs   {
915fa225cbcSrjs      unsigned int pad:5;
916fa225cbcSrjs      unsigned int border_color_pointer:27;
917fa225cbcSrjs   } ss2;
918fa225cbcSrjs
919fa225cbcSrjs   struct
920fa225cbcSrjs   {
921fa225cbcSrjs      unsigned int pad:19;
922fa225cbcSrjs      unsigned int max_aniso:3;
923fa225cbcSrjs      unsigned int chroma_key_mode:1;
924fa225cbcSrjs      unsigned int chroma_key_index:2;
925fa225cbcSrjs      unsigned int chroma_key_enable:1;
926fa225cbcSrjs      unsigned int monochrome_filter_width:3;
927fa225cbcSrjs      unsigned int monochrome_filter_height:3;
928fa225cbcSrjs   } ss3;
929fa225cbcSrjs};
930fa225cbcSrjs
931fa225cbcSrjs
932fa225cbcSrjsstruct brw_clipper_viewport
933fa225cbcSrjs{
934fa225cbcSrjs   float xmin;
935fa225cbcSrjs   float xmax;
936fa225cbcSrjs   float ymin;
937fa225cbcSrjs   float ymax;
938fa225cbcSrjs};
939fa225cbcSrjs
940fa225cbcSrjsstruct brw_cc_viewport
941fa225cbcSrjs{
942fa225cbcSrjs   float min_depth;
943fa225cbcSrjs   float max_depth;
944fa225cbcSrjs};
945fa225cbcSrjs
946fa225cbcSrjsstruct brw_sf_viewport
947fa225cbcSrjs{
948fa225cbcSrjs   struct {
949fa225cbcSrjs      float m00;
950fa225cbcSrjs      float m11;
951fa225cbcSrjs      float m22;
952fa225cbcSrjs      float m30;
953fa225cbcSrjs      float m31;
954fa225cbcSrjs      float m32;
955fa225cbcSrjs   } viewport;
956fa225cbcSrjs
957fa225cbcSrjs   struct {
958fa225cbcSrjs      short xmin;
959fa225cbcSrjs      short ymin;
960fa225cbcSrjs      short xmax;
961fa225cbcSrjs      short ymax;
962fa225cbcSrjs   } scissor;
963fa225cbcSrjs};
964fa225cbcSrjs
965fa225cbcSrjs/* Documented in the subsystem/shared-functions/sampler chapter...
966fa225cbcSrjs */
967fa225cbcSrjsstruct brw_surface_state
968fa225cbcSrjs{
969fa225cbcSrjs   struct {
970fa225cbcSrjs      unsigned int cube_pos_z:1;
971fa225cbcSrjs      unsigned int cube_neg_z:1;
972fa225cbcSrjs      unsigned int cube_pos_y:1;
973fa225cbcSrjs      unsigned int cube_neg_y:1;
974fa225cbcSrjs      unsigned int cube_pos_x:1;
975fa225cbcSrjs      unsigned int cube_neg_x:1;
976fa225cbcSrjs      unsigned int pad:3;
977fa225cbcSrjs      unsigned int render_cache_read_mode:1;
978fa225cbcSrjs      unsigned int mipmap_layout_mode:1;
979fa225cbcSrjs      unsigned int vert_line_stride_ofs:1;
980fa225cbcSrjs      unsigned int vert_line_stride:1;
981fa225cbcSrjs      unsigned int color_blend:1;
982fa225cbcSrjs      unsigned int writedisable_blue:1;
983fa225cbcSrjs      unsigned int writedisable_green:1;
984fa225cbcSrjs      unsigned int writedisable_red:1;
985fa225cbcSrjs      unsigned int writedisable_alpha:1;
986fa225cbcSrjs      unsigned int surface_format:9;
987fa225cbcSrjs      unsigned int data_return_format:1;
988fa225cbcSrjs      unsigned int pad0:1;
989fa225cbcSrjs      unsigned int surface_type:3;
990fa225cbcSrjs   } ss0;
991fa225cbcSrjs
992fa225cbcSrjs   struct {
993fa225cbcSrjs      unsigned int base_addr;
994fa225cbcSrjs   } ss1;
995fa225cbcSrjs
996fa225cbcSrjs   struct {
997fa225cbcSrjs      unsigned int render_target_rotation:2;
998fa225cbcSrjs      unsigned int mip_count:4;
999fa225cbcSrjs      unsigned int width:13;
1000fa225cbcSrjs      unsigned int height:13;
1001fa225cbcSrjs   } ss2;
1002fa225cbcSrjs
1003fa225cbcSrjs   struct {
1004fa225cbcSrjs      unsigned int tile_walk:1;
1005fa225cbcSrjs      unsigned int tiled_surface:1;
1006fa225cbcSrjs      unsigned int pad:1;
1007fa225cbcSrjs      unsigned int pitch:18;
1008fa225cbcSrjs      unsigned int depth:11;
1009fa225cbcSrjs   } ss3;
1010fa225cbcSrjs
1011fa225cbcSrjs   struct {
1012fa225cbcSrjs      unsigned int pad:19;
1013fa225cbcSrjs      unsigned int min_array_elt:9;
1014fa225cbcSrjs      unsigned int min_lod:4;
1015fa225cbcSrjs   } ss4;
1016fa225cbcSrjs
1017fa225cbcSrjs   struct {
1018fa225cbcSrjs       unsigned int pad:20;
1019fa225cbcSrjs       unsigned int y_offset:4;
1020fa225cbcSrjs       unsigned int pad2:1;
1021fa225cbcSrjs       unsigned int x_offset:7;
1022fa225cbcSrjs   } ss5;
1023fa225cbcSrjs};
1024fa225cbcSrjs
1025fa225cbcSrjs
1026fa225cbcSrjs
1027fa225cbcSrjsstruct brw_vertex_buffer_state
1028fa225cbcSrjs{
1029fa225cbcSrjs   struct {
1030fa225cbcSrjs      unsigned int pitch:11;
1031fa225cbcSrjs      unsigned int pad:15;
1032fa225cbcSrjs      unsigned int access_type:1;
1033fa225cbcSrjs      unsigned int vb_index:5;
1034fa225cbcSrjs   } vb0;
1035fa225cbcSrjs
1036fa225cbcSrjs   unsigned int start_addr;
1037fa225cbcSrjs   unsigned int max_index;
1038fa225cbcSrjs#if 1
1039fa225cbcSrjs   unsigned int instance_data_step_rate; /* not included for sequential/random vertices? */
1040fa225cbcSrjs#endif
1041fa225cbcSrjs};
1042fa225cbcSrjs
1043fa225cbcSrjs#define BRW_VBP_MAX 17
1044fa225cbcSrjs
1045fa225cbcSrjsstruct brw_vb_array_state {
1046fa225cbcSrjs   struct header header;
1047fa225cbcSrjs   struct brw_vertex_buffer_state vb[BRW_VBP_MAX];
1048fa225cbcSrjs};
1049fa225cbcSrjs
1050fa225cbcSrjs
1051fa225cbcSrjsstruct brw_vertex_element_state
1052fa225cbcSrjs{
1053fa225cbcSrjs   struct
1054fa225cbcSrjs   {
1055fa225cbcSrjs      unsigned int src_offset:11;
1056fa225cbcSrjs      unsigned int pad:5;
1057fa225cbcSrjs      unsigned int src_format:9;
1058fa225cbcSrjs      unsigned int pad0:1;
1059fa225cbcSrjs      unsigned int valid:1;
1060fa225cbcSrjs      unsigned int vertex_buffer_index:5;
1061fa225cbcSrjs   } ve0;
1062fa225cbcSrjs
1063fa225cbcSrjs   struct
1064fa225cbcSrjs   {
1065fa225cbcSrjs      unsigned int dst_offset:8;
1066fa225cbcSrjs      unsigned int pad:8;
1067fa225cbcSrjs      unsigned int vfcomponent3:4;
1068fa225cbcSrjs      unsigned int vfcomponent2:4;
1069fa225cbcSrjs      unsigned int vfcomponent1:4;
1070fa225cbcSrjs      unsigned int vfcomponent0:4;
1071fa225cbcSrjs   } ve1;
1072fa225cbcSrjs};
1073fa225cbcSrjs
1074fa225cbcSrjs#define BRW_VEP_MAX 18
1075fa225cbcSrjs
1076fa225cbcSrjsstruct brw_vertex_element_packet {
1077fa225cbcSrjs   struct header header;
1078fa225cbcSrjs   struct brw_vertex_element_state ve[BRW_VEP_MAX]; /* note: less than _TNL_ATTRIB_MAX */
1079fa225cbcSrjs};
1080fa225cbcSrjs
1081fa225cbcSrjs
1082fa225cbcSrjsstruct brw_urb_immediate {
1083fa225cbcSrjs   unsigned int opcode:4;
1084fa225cbcSrjs   unsigned int offset:6;
1085fa225cbcSrjs   unsigned int swizzle_control:2;
1086fa225cbcSrjs   unsigned int pad:1;
1087fa225cbcSrjs   unsigned int allocate:1;
1088fa225cbcSrjs   unsigned int used:1;
1089fa225cbcSrjs   unsigned int complete:1;
1090fa225cbcSrjs   unsigned int response_length:4;
1091fa225cbcSrjs   unsigned int msg_length:4;
1092fa225cbcSrjs   unsigned int msg_target:4;
1093fa225cbcSrjs   unsigned int pad1:3;
1094fa225cbcSrjs   unsigned int end_of_thread:1;
1095fa225cbcSrjs};
1096fa225cbcSrjs
1097fa225cbcSrjs/* Instruction format for the execution units:
1098fa225cbcSrjs */
1099fa225cbcSrjs
1100fa225cbcSrjsstruct brw_instruction
1101fa225cbcSrjs{
1102fa225cbcSrjs   struct
1103fa225cbcSrjs   {
1104fa225cbcSrjs      unsigned int opcode:7;
1105fa225cbcSrjs      unsigned int pad:1;
1106fa225cbcSrjs      unsigned int access_mode:1;
1107fa225cbcSrjs      unsigned int mask_control:1;
1108fa225cbcSrjs      unsigned int dependency_control:2;
1109fa225cbcSrjs      unsigned int compression_control:2;
1110fa225cbcSrjs      unsigned int thread_control:2;
1111fa225cbcSrjs      unsigned int predicate_control:4;
1112fa225cbcSrjs      unsigned int predicate_inverse:1;
1113fa225cbcSrjs      unsigned int execution_size:3;
1114fa225cbcSrjs      unsigned int destreg__conditonalmod:4; /* destreg - send, conditionalmod - others */
1115fa225cbcSrjs      unsigned int pad0:2;
1116fa225cbcSrjs      unsigned int debug_control:1;
1117fa225cbcSrjs      unsigned int saturate:1;
1118fa225cbcSrjs   } header;
1119fa225cbcSrjs
1120fa225cbcSrjs   union {
1121fa225cbcSrjs      struct
1122fa225cbcSrjs      {
1123fa225cbcSrjs	 unsigned int dest_reg_file:2;
1124fa225cbcSrjs	 unsigned int dest_reg_type:3;
1125fa225cbcSrjs	 unsigned int src0_reg_file:2;
1126fa225cbcSrjs	 unsigned int src0_reg_type:3;
1127fa225cbcSrjs	 unsigned int src1_reg_file:2;
1128fa225cbcSrjs	 unsigned int src1_reg_type:3;
1129fa225cbcSrjs	 unsigned int pad:1;
1130fa225cbcSrjs	 unsigned int dest_subreg_nr:5;
1131fa225cbcSrjs	 unsigned int dest_reg_nr:8;
1132fa225cbcSrjs	 unsigned int dest_horiz_stride:2;
1133fa225cbcSrjs	 unsigned int dest_address_mode:1;
1134fa225cbcSrjs      } da1;
1135fa225cbcSrjs
1136fa225cbcSrjs      struct
1137fa225cbcSrjs      {
1138fa225cbcSrjs	 unsigned int dest_reg_file:2;
1139fa225cbcSrjs	 unsigned int dest_reg_type:3;
1140fa225cbcSrjs	 unsigned int src0_reg_file:2;
1141fa225cbcSrjs	 unsigned int src0_reg_type:3;
1142fa225cbcSrjs	 unsigned int pad:6;
1143fa225cbcSrjs	 int dest_indirect_offset:10;	/* offset against the deref'd address reg */
1144fa225cbcSrjs	 unsigned int dest_subreg_nr:3; /* subnr for the address reg a0.x */
1145fa225cbcSrjs	 unsigned int dest_horiz_stride:2;
1146fa225cbcSrjs	 unsigned int dest_address_mode:1;
1147fa225cbcSrjs      } ia1;
1148fa225cbcSrjs
1149fa225cbcSrjs      struct
1150fa225cbcSrjs      {
1151fa225cbcSrjs	 unsigned int dest_reg_file:2;
1152fa225cbcSrjs	 unsigned int dest_reg_type:3;
1153fa225cbcSrjs	 unsigned int src0_reg_file:2;
1154fa225cbcSrjs	 unsigned int src0_reg_type:3;
1155fa225cbcSrjs	 unsigned int src1_reg_file:2;
1156fa225cbcSrjs	 unsigned int src1_reg_type:3;
1157fa225cbcSrjs	 unsigned int pad0:1;
1158fa225cbcSrjs	 unsigned int dest_writemask:4;
1159fa225cbcSrjs	 unsigned int dest_subreg_nr:1;
1160fa225cbcSrjs	 unsigned int dest_reg_nr:8;
1161fa225cbcSrjs	 unsigned int pad1:2;
1162fa225cbcSrjs	 unsigned int dest_address_mode:1;
1163fa225cbcSrjs      } da16;
1164fa225cbcSrjs
1165fa225cbcSrjs      struct
1166fa225cbcSrjs      {
1167fa225cbcSrjs	 unsigned int dest_reg_file:2;
1168fa225cbcSrjs	 unsigned int dest_reg_type:3;
1169fa225cbcSrjs	 unsigned int src0_reg_file:2;
1170fa225cbcSrjs	 unsigned int src0_reg_type:3;
1171fa225cbcSrjs	 unsigned int pad0:6;
1172fa225cbcSrjs	 unsigned int dest_writemask:4;
1173fa225cbcSrjs	 int dest_indirect_offset:6;
1174fa225cbcSrjs	 unsigned int dest_subreg_nr:3;
1175fa225cbcSrjs	 unsigned int pad1:2;
1176fa225cbcSrjs	 unsigned int dest_address_mode:1;
1177fa225cbcSrjs      } ia16;
1178fa225cbcSrjs   } bits1;
1179fa225cbcSrjs
1180fa225cbcSrjs
1181fa225cbcSrjs   union {
1182fa225cbcSrjs      struct
1183fa225cbcSrjs      {
1184fa225cbcSrjs	 unsigned int src0_subreg_nr:5;
1185fa225cbcSrjs	 unsigned int src0_reg_nr:8;
1186fa225cbcSrjs	 unsigned int src0_abs:1;
1187fa225cbcSrjs	 unsigned int src0_negate:1;
1188fa225cbcSrjs	 unsigned int src0_address_mode:1;
1189fa225cbcSrjs	 unsigned int src0_horiz_stride:2;
1190fa225cbcSrjs	 unsigned int src0_width:3;
1191fa225cbcSrjs	 unsigned int src0_vert_stride:4;
1192fa225cbcSrjs	 unsigned int flag_reg_nr:1;
1193fa225cbcSrjs	 unsigned int pad:6;
1194fa225cbcSrjs      } da1;
1195fa225cbcSrjs
1196fa225cbcSrjs      struct
1197fa225cbcSrjs      {
1198fa225cbcSrjs	 int src0_indirect_offset:10;
1199fa225cbcSrjs	 unsigned int src0_subreg_nr:3;
1200fa225cbcSrjs	 unsigned int src0_abs:1;
1201fa225cbcSrjs	 unsigned int src0_negate:1;
1202fa225cbcSrjs	 unsigned int src0_address_mode:1;
1203fa225cbcSrjs	 unsigned int src0_horiz_stride:2;
1204fa225cbcSrjs	 unsigned int src0_width:3;
1205fa225cbcSrjs	 unsigned int src0_vert_stride:4;
1206fa225cbcSrjs	 unsigned int flag_reg_nr:1;
1207fa225cbcSrjs	 unsigned int pad:6;
1208fa225cbcSrjs      } ia1;
1209fa225cbcSrjs
1210fa225cbcSrjs      struct
1211fa225cbcSrjs      {
1212fa225cbcSrjs	 unsigned int src0_swz_x:2;
1213fa225cbcSrjs	 unsigned int src0_swz_y:2;
1214fa225cbcSrjs	 unsigned int src0_subreg_nr:1;
1215fa225cbcSrjs	 unsigned int src0_reg_nr:8;
1216fa225cbcSrjs	 unsigned int src0_abs:1;
1217fa225cbcSrjs	 unsigned int src0_negate:1;
1218fa225cbcSrjs	 unsigned int src0_address_mode:1;
1219fa225cbcSrjs	 unsigned int src0_swz_z:2;
1220fa225cbcSrjs	 unsigned int src0_swz_w:2;
1221fa225cbcSrjs	 unsigned int pad0:1;
1222fa225cbcSrjs	 unsigned int src0_vert_stride:4;
1223fa225cbcSrjs	 unsigned int flag_reg_nr:1;
1224fa225cbcSrjs	 unsigned int pad1:6;
1225fa225cbcSrjs      } da16;
1226fa225cbcSrjs
1227fa225cbcSrjs      struct
1228fa225cbcSrjs      {
1229fa225cbcSrjs	 unsigned int src0_swz_x:2;
1230fa225cbcSrjs	 unsigned int src0_swz_y:2;
1231fa225cbcSrjs	 int src0_indirect_offset:6;
1232fa225cbcSrjs	 unsigned int src0_subreg_nr:3;
1233fa225cbcSrjs	 unsigned int src0_abs:1;
1234fa225cbcSrjs	 unsigned int src0_negate:1;
1235fa225cbcSrjs	 unsigned int src0_address_mode:1;
1236fa225cbcSrjs	 unsigned int src0_swz_z:2;
1237fa225cbcSrjs	 unsigned int src0_swz_w:2;
1238fa225cbcSrjs	 unsigned int pad0:1;
1239fa225cbcSrjs	 unsigned int src0_vert_stride:4;
1240fa225cbcSrjs	 unsigned int flag_reg_nr:1;
1241fa225cbcSrjs	 unsigned int pad1:6;
1242fa225cbcSrjs      } ia16;
1243fa225cbcSrjs
1244fa225cbcSrjs   } bits2;
1245fa225cbcSrjs
1246fa225cbcSrjs   union
1247fa225cbcSrjs   {
1248fa225cbcSrjs      struct
1249fa225cbcSrjs      {
1250fa225cbcSrjs	 unsigned int src1_subreg_nr:5;
1251fa225cbcSrjs	 unsigned int src1_reg_nr:8;
1252fa225cbcSrjs	 unsigned int src1_abs:1;
1253fa225cbcSrjs	 unsigned int src1_negate:1;
1254fa225cbcSrjs	 unsigned int pad:1;
1255fa225cbcSrjs	 unsigned int src1_horiz_stride:2;
1256fa225cbcSrjs	 unsigned int src1_width:3;
1257fa225cbcSrjs	 unsigned int src1_vert_stride:4;
1258fa225cbcSrjs	 unsigned int pad0:7;
1259fa225cbcSrjs      } da1;
1260fa225cbcSrjs
1261fa225cbcSrjs      struct
1262fa225cbcSrjs      {
1263fa225cbcSrjs	 unsigned int src1_swz_x:2;
1264fa225cbcSrjs	 unsigned int src1_swz_y:2;
1265fa225cbcSrjs	 unsigned int src1_subreg_nr:1;
1266fa225cbcSrjs	 unsigned int src1_reg_nr:8;
1267fa225cbcSrjs	 unsigned int src1_abs:1;
1268fa225cbcSrjs	 unsigned int src1_negate:1;
1269fa225cbcSrjs	 unsigned int pad0:1;
1270fa225cbcSrjs	 unsigned int src1_swz_z:2;
1271fa225cbcSrjs	 unsigned int src1_swz_w:2;
1272fa225cbcSrjs	 unsigned int pad1:1;
1273fa225cbcSrjs	 unsigned int src1_vert_stride:4;
1274fa225cbcSrjs	 unsigned int pad2:7;
1275fa225cbcSrjs      } da16;
1276fa225cbcSrjs
1277fa225cbcSrjs      struct
1278fa225cbcSrjs      {
1279fa225cbcSrjs	 int  src1_indirect_offset:10;
1280fa225cbcSrjs	 unsigned int src1_subreg_nr:3;
1281fa225cbcSrjs	 unsigned int src1_abs:1;
1282fa225cbcSrjs	 unsigned int src1_negate:1;
1283fa225cbcSrjs	 unsigned int pad0:1;
1284fa225cbcSrjs	 unsigned int src1_horiz_stride:2;
1285fa225cbcSrjs	 unsigned int src1_width:3;
1286fa225cbcSrjs	 unsigned int src1_vert_stride:4;
1287fa225cbcSrjs	 unsigned int flag_reg_nr:1;
1288fa225cbcSrjs	 unsigned int pad1:6;
1289fa225cbcSrjs      } ia1;
1290fa225cbcSrjs
1291fa225cbcSrjs      struct
1292fa225cbcSrjs      {
1293fa225cbcSrjs	 unsigned int src1_swz_x:2;
1294fa225cbcSrjs	 unsigned int src1_swz_y:2;
1295fa225cbcSrjs	 int  src1_indirect_offset:6;
1296fa225cbcSrjs	 unsigned int src1_subreg_nr:3;
1297fa225cbcSrjs	 unsigned int src1_abs:1;
1298fa225cbcSrjs	 unsigned int src1_negate:1;
1299fa225cbcSrjs	 unsigned int pad0:1;
1300fa225cbcSrjs	 unsigned int src1_swz_z:2;
1301fa225cbcSrjs	 unsigned int src1_swz_w:2;
1302fa225cbcSrjs	 unsigned int pad1:1;
1303fa225cbcSrjs	 unsigned int src1_vert_stride:4;
1304fa225cbcSrjs	 unsigned int flag_reg_nr:1;
1305fa225cbcSrjs	 unsigned int pad2:6;
1306fa225cbcSrjs      } ia16;
1307fa225cbcSrjs
1308fa225cbcSrjs
1309fa225cbcSrjs      struct
1310fa225cbcSrjs      {
1311fa225cbcSrjs	 int  jump_count:16;	/* note: signed */
1312fa225cbcSrjs	 unsigned int  pop_count:4;
1313fa225cbcSrjs	 unsigned int  pad0:12;
1314fa225cbcSrjs      } if_else;
1315fa225cbcSrjs
1316fa225cbcSrjs      struct {
1317fa225cbcSrjs	 unsigned int function:4;
1318fa225cbcSrjs	 unsigned int int_type:1;
1319fa225cbcSrjs	 unsigned int precision:1;
1320fa225cbcSrjs	 unsigned int saturate:1;
1321fa225cbcSrjs	 unsigned int data_type:1;
1322fa225cbcSrjs	 unsigned int pad0:8;
1323fa225cbcSrjs	 unsigned int response_length:4;
1324fa225cbcSrjs	 unsigned int msg_length:4;
1325fa225cbcSrjs	 unsigned int msg_target:4;
1326fa225cbcSrjs	 unsigned int pad1:3;
1327fa225cbcSrjs	 unsigned int end_of_thread:1;
1328fa225cbcSrjs      } math;
1329fa225cbcSrjs
1330fa225cbcSrjs      struct {
1331fa225cbcSrjs	 unsigned int binding_table_index:8;
1332fa225cbcSrjs	 unsigned int sampler:4;
1333fa225cbcSrjs	 unsigned int return_format:2;
1334fa225cbcSrjs	 unsigned int msg_type:2;
1335fa225cbcSrjs	 unsigned int response_length:4;
1336fa225cbcSrjs	 unsigned int msg_length:4;
1337fa225cbcSrjs	 unsigned int msg_target:4;
1338fa225cbcSrjs	 unsigned int pad1:3;
1339fa225cbcSrjs	 unsigned int end_of_thread:1;
1340fa225cbcSrjs      } sampler;
1341fa225cbcSrjs
1342fa225cbcSrjs      struct brw_urb_immediate urb;
1343fa225cbcSrjs
1344fa225cbcSrjs      struct {
1345fa225cbcSrjs	 unsigned int binding_table_index:8;
1346fa225cbcSrjs	 unsigned int msg_control:4;
1347fa225cbcSrjs	 unsigned int msg_type:2;
1348fa225cbcSrjs	 unsigned int target_cache:2;
1349fa225cbcSrjs	 unsigned int response_length:4;
1350fa225cbcSrjs	 unsigned int msg_length:4;
1351fa225cbcSrjs	 unsigned int msg_target:4;
1352fa225cbcSrjs	 unsigned int pad1:3;
1353fa225cbcSrjs	 unsigned int end_of_thread:1;
1354fa225cbcSrjs      } dp_read;
1355fa225cbcSrjs
1356fa225cbcSrjs      struct {
1357fa225cbcSrjs	 unsigned int binding_table_index:8;
1358fa225cbcSrjs	 unsigned int msg_control:3;
1359fa225cbcSrjs	 unsigned int pixel_scoreboard_clear:1;
1360fa225cbcSrjs	 unsigned int msg_type:3;
1361fa225cbcSrjs	 unsigned int send_commit_msg:1;
1362fa225cbcSrjs	 unsigned int response_length:4;
1363fa225cbcSrjs	 unsigned int msg_length:4;
1364fa225cbcSrjs	 unsigned int msg_target:4;
1365fa225cbcSrjs	 unsigned int pad1:3;
1366fa225cbcSrjs	 unsigned int end_of_thread:1;
1367fa225cbcSrjs      } dp_write;
1368fa225cbcSrjs
1369fa225cbcSrjs      struct {
1370fa225cbcSrjs	 unsigned int pad:16;
1371fa225cbcSrjs	 unsigned int response_length:4;
1372fa225cbcSrjs	 unsigned int msg_length:4;
1373fa225cbcSrjs	 unsigned int msg_target:4;
1374fa225cbcSrjs	 unsigned int pad1:3;
1375fa225cbcSrjs	 unsigned int end_of_thread:1;
1376fa225cbcSrjs      } generic;
1377fa225cbcSrjs
1378fa225cbcSrjs      unsigned int ud;
1379fa225cbcSrjs   } bits3;
1380fa225cbcSrjs};
1381fa225cbcSrjs
1382fa225cbcSrjs/* media pipeline */
1383fa225cbcSrjs
1384fa225cbcSrjsstruct brw_vfe_state {
1385fa225cbcSrjs    struct {
1386fa225cbcSrjs	unsigned int per_thread_scratch_space:4;
1387fa225cbcSrjs	unsigned int pad3:3;
1388fa225cbcSrjs	unsigned int extend_vfe_state_present:1;
1389fa225cbcSrjs	unsigned int pad2:2;
1390fa225cbcSrjs	unsigned int scratch_base:22;
1391fa225cbcSrjs    } vfe0;
1392fa225cbcSrjs
1393fa225cbcSrjs    struct {
1394fa225cbcSrjs	unsigned int debug_counter_control:2;
1395fa225cbcSrjs	unsigned int children_present:1;
1396fa225cbcSrjs	unsigned int vfe_mode:4;
1397fa225cbcSrjs	unsigned int pad2:2;
1398fa225cbcSrjs	unsigned int num_urb_entries:7;
1399fa225cbcSrjs	unsigned int urb_entry_alloc_size:9;
1400fa225cbcSrjs	unsigned int max_threads:7;
1401fa225cbcSrjs    } vfe1;
1402fa225cbcSrjs
1403fa225cbcSrjs    struct {
1404fa225cbcSrjs	unsigned int pad4:4;
1405fa225cbcSrjs	unsigned int interface_descriptor_base:28;
1406fa225cbcSrjs    } vfe2;
1407fa225cbcSrjs};
1408fa225cbcSrjs
1409fa225cbcSrjsstruct brw_vld_state {
1410fa225cbcSrjs    struct {
1411fa225cbcSrjs	unsigned int pad6:6;
1412fa225cbcSrjs	unsigned int scan_order:1;
1413fa225cbcSrjs	unsigned int intra_vlc_format:1;
1414fa225cbcSrjs	unsigned int quantizer_scale_type:1;
1415fa225cbcSrjs	unsigned int concealment_motion_vector:1;
1416fa225cbcSrjs	unsigned int frame_predict_frame_dct:1;
1417fa225cbcSrjs	unsigned int top_field_first:1;
1418fa225cbcSrjs	unsigned int picture_structure:2;
1419fa225cbcSrjs	unsigned int intra_dc_precision:2;
1420fa225cbcSrjs	unsigned int f_code_0_0:4;
1421fa225cbcSrjs	unsigned int f_code_0_1:4;
1422fa225cbcSrjs	unsigned int f_code_1_0:4;
1423fa225cbcSrjs	unsigned int f_code_1_1:4;
1424fa225cbcSrjs    } vld0;
1425fa225cbcSrjs
1426fa225cbcSrjs    struct {
1427fa225cbcSrjs	unsigned int pad2:9;
1428fa225cbcSrjs	unsigned int picture_coding_type:2;
1429fa225cbcSrjs	unsigned int pad:21;
1430fa225cbcSrjs    } vld1;
1431fa225cbcSrjs
1432fa225cbcSrjs    struct {
1433fa225cbcSrjs	unsigned int index_0:4;
1434fa225cbcSrjs	unsigned int index_1:4;
1435fa225cbcSrjs	unsigned int index_2:4;
1436fa225cbcSrjs	unsigned int index_3:4;
1437fa225cbcSrjs	unsigned int index_4:4;
1438fa225cbcSrjs	unsigned int index_5:4;
1439fa225cbcSrjs	unsigned int index_6:4;
1440fa225cbcSrjs	unsigned int index_7:4;
1441fa225cbcSrjs    } desc_remap_table0;
1442fa225cbcSrjs
1443fa225cbcSrjs    struct {
1444fa225cbcSrjs	unsigned int index_8:4;
1445fa225cbcSrjs	unsigned int index_9:4;
1446fa225cbcSrjs	unsigned int index_10:4;
1447fa225cbcSrjs	unsigned int index_11:4;
1448fa225cbcSrjs	unsigned int index_12:4;
1449fa225cbcSrjs	unsigned int index_13:4;
1450fa225cbcSrjs	unsigned int index_14:4;
1451fa225cbcSrjs	unsigned int index_15:4;
1452fa225cbcSrjs    } desc_remap_table1;
1453fa225cbcSrjs};
1454fa225cbcSrjs
1455fa225cbcSrjsstruct brw_interface_descriptor {
1456fa225cbcSrjs    struct {
1457fa225cbcSrjs	unsigned int grf_reg_blocks:4;
1458fa225cbcSrjs	unsigned int pad:2;
1459fa225cbcSrjs	unsigned int kernel_start_pointer:26;
1460fa225cbcSrjs    } desc0;
1461fa225cbcSrjs
1462fa225cbcSrjs    struct {
1463fa225cbcSrjs	unsigned int pad:7;
1464fa225cbcSrjs	unsigned int software_exception:1;
1465fa225cbcSrjs	unsigned int pad2:3;
1466fa225cbcSrjs	unsigned int maskstack_exception:1;
1467fa225cbcSrjs	unsigned int pad3:1;
1468fa225cbcSrjs	unsigned int illegal_opcode_exception:1;
1469fa225cbcSrjs	unsigned int pad4:2;
1470fa225cbcSrjs	unsigned int floating_point_mode:1;
1471fa225cbcSrjs	unsigned int thread_priority:1;
1472fa225cbcSrjs	unsigned int single_program_flow:1;
1473fa225cbcSrjs	unsigned int pad5:1;
1474fa225cbcSrjs	unsigned int const_urb_entry_read_offset:6;
1475fa225cbcSrjs	unsigned int const_urb_entry_read_len:6;
1476fa225cbcSrjs    } desc1;
1477fa225cbcSrjs
1478fa225cbcSrjs    struct {
1479fa225cbcSrjs	unsigned int pad:2;
1480fa225cbcSrjs	unsigned int sampler_count:3;
1481fa225cbcSrjs	unsigned int sampler_state_pointer:27;
1482fa225cbcSrjs    } desc2;
1483fa225cbcSrjs
1484fa225cbcSrjs    struct {
1485fa225cbcSrjs	unsigned int binding_table_entry_count:5;
1486fa225cbcSrjs	unsigned int binding_table_pointer:27;
1487fa225cbcSrjs    } desc3;
1488fa225cbcSrjs};
1489fa225cbcSrjs
1490fa225cbcSrjs#endif
1491