1428d7b3dSmrg /**************************************************************************
2428d7b3dSmrg *
3428d7b3dSmrg * Copyright 2005 Tungsten Graphics, Inc., Cedar Park, Texas.
4428d7b3dSmrg * All Rights Reserved.
5428d7b3dSmrg *
6428d7b3dSmrg * Permission is hereby granted, free of charge, to any person obtaining a
7428d7b3dSmrg * copy of this software and associated documentation files (the
8428d7b3dSmrg * "Software"), to deal in the Software without restriction, including
9428d7b3dSmrg * without limitation the rights to use, copy, modify, merge, publish,
10428d7b3dSmrg * distribute, sub license, and/or sell copies of the Software, and to
11428d7b3dSmrg * permit persons to whom the Software is furnished to do so, subject to
12428d7b3dSmrg * the following conditions:
13428d7b3dSmrg *
14428d7b3dSmrg * The above copyright notice and this permission notice (including the
15428d7b3dSmrg * next paragraph) shall be included in all copies or substantial portions
16428d7b3dSmrg * of the Software.
17428d7b3dSmrg *
18428d7b3dSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19428d7b3dSmrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20428d7b3dSmrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21428d7b3dSmrg * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22428d7b3dSmrg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23428d7b3dSmrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24428d7b3dSmrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25428d7b3dSmrg *
26428d7b3dSmrg **************************************************************************/
27428d7b3dSmrg
28428d7b3dSmrg#ifndef BRW_STRUCTS_H
29428d7b3dSmrg#define BRW_STRUCTS_H
30428d7b3dSmrg
31428d7b3dSmrg/* Command packets:
32428d7b3dSmrg */
33428d7b3dSmrgstruct header
34428d7b3dSmrg{
35428d7b3dSmrg   unsigned int length:16;
36428d7b3dSmrg   unsigned int opcode:16;
37428d7b3dSmrg};
38428d7b3dSmrg
39428d7b3dSmrg
40428d7b3dSmrgunion header_union
41428d7b3dSmrg{
42428d7b3dSmrg   struct header bits;
43428d7b3dSmrg   unsigned int dword;
44428d7b3dSmrg};
45428d7b3dSmrg
46428d7b3dSmrgstruct brw_3d_control
47428d7b3dSmrg{
48428d7b3dSmrg   struct
49428d7b3dSmrg   {
50428d7b3dSmrg      unsigned int length:8;
51428d7b3dSmrg      unsigned int notify_enable:1;
52428d7b3dSmrg      unsigned int pad:3;
53428d7b3dSmrg      unsigned int wc_flush_enable:1;
54428d7b3dSmrg      unsigned int depth_stall_enable:1;
55428d7b3dSmrg      unsigned int operation:2;
56428d7b3dSmrg      unsigned int opcode:16;
57428d7b3dSmrg   } header;
58428d7b3dSmrg
59428d7b3dSmrg   struct
60428d7b3dSmrg   {
61428d7b3dSmrg      unsigned int pad:2;
62428d7b3dSmrg      unsigned int dest_addr_type:1;
63428d7b3dSmrg      unsigned int dest_addr:29;
64428d7b3dSmrg   } dest;
65428d7b3dSmrg
66428d7b3dSmrg   unsigned int dword2;
67428d7b3dSmrg   unsigned int dword3;
68428d7b3dSmrg};
69428d7b3dSmrg
70428d7b3dSmrg
71428d7b3dSmrgstruct brw_3d_primitive
72428d7b3dSmrg{
73428d7b3dSmrg   struct
74428d7b3dSmrg   {
75428d7b3dSmrg      unsigned int length:8;
76428d7b3dSmrg      unsigned int pad:2;
77428d7b3dSmrg      unsigned int topology:5;
78428d7b3dSmrg      unsigned int indexed:1;
79428d7b3dSmrg      unsigned int opcode:16;
80428d7b3dSmrg   } header;
81428d7b3dSmrg
82428d7b3dSmrg   unsigned int verts_per_instance;
83428d7b3dSmrg   unsigned int start_vert_location;
84428d7b3dSmrg   unsigned int instance_count;
85428d7b3dSmrg   unsigned int start_instance_location;
86428d7b3dSmrg   unsigned int base_vert_location;
87428d7b3dSmrg};
88428d7b3dSmrg
89428d7b3dSmrg/* These seem to be passed around as function args, so it works out
90428d7b3dSmrg * better to keep them as #defines:
91428d7b3dSmrg */
92428d7b3dSmrg#define BRW_FLUSH_READ_CACHE           0x1
93428d7b3dSmrg#define BRW_FLUSH_STATE_CACHE          0x2
94428d7b3dSmrg#define BRW_INHIBIT_FLUSH_RENDER_CACHE 0x4
95428d7b3dSmrg#define BRW_FLUSH_SNAPSHOT_COUNTERS    0x8
96428d7b3dSmrg
97428d7b3dSmrgstruct brw_mi_flush
98428d7b3dSmrg{
99428d7b3dSmrg   unsigned int flags:4;
100428d7b3dSmrg   unsigned int pad:12;
101428d7b3dSmrg   unsigned int opcode:16;
102428d7b3dSmrg};
103428d7b3dSmrg
104428d7b3dSmrgstruct brw_vf_statistics
105428d7b3dSmrg{
106428d7b3dSmrg   unsigned int statistics_enable:1;
107428d7b3dSmrg   unsigned int pad:15;
108428d7b3dSmrg   unsigned int opcode:16;
109428d7b3dSmrg};
110428d7b3dSmrg
111428d7b3dSmrg
112428d7b3dSmrg
113428d7b3dSmrgstruct brw_binding_table_pointers
114428d7b3dSmrg{
115428d7b3dSmrg   struct header header;
116428d7b3dSmrg   unsigned int vs;
117428d7b3dSmrg   unsigned int gs;
118428d7b3dSmrg   unsigned int clp;
119428d7b3dSmrg   unsigned int sf;
120428d7b3dSmrg   unsigned int wm;
121428d7b3dSmrg};
122428d7b3dSmrg
123428d7b3dSmrg
124428d7b3dSmrgstruct brw_blend_constant_color
125428d7b3dSmrg{
126428d7b3dSmrg   struct header header;
127428d7b3dSmrg   float blend_constant_color[4];
128428d7b3dSmrg};
129428d7b3dSmrg
130428d7b3dSmrg
131428d7b3dSmrgstruct brw_depthbuffer
132428d7b3dSmrg{
133428d7b3dSmrg   union header_union header;
134428d7b3dSmrg
135428d7b3dSmrg   union {
136428d7b3dSmrg      struct {
137428d7b3dSmrg	 unsigned int pitch:18;
138428d7b3dSmrg	 unsigned int format:3;
139428d7b3dSmrg	 unsigned int pad:4;
140428d7b3dSmrg	 unsigned int depth_offset_disable:1;
141428d7b3dSmrg	 unsigned int tile_walk:1;
142428d7b3dSmrg	 unsigned int tiled_surface:1;
143428d7b3dSmrg	 unsigned int pad2:1;
144428d7b3dSmrg	 unsigned int surface_type:3;
145428d7b3dSmrg      } bits;
146428d7b3dSmrg      unsigned int dword;
147428d7b3dSmrg   } dword1;
148428d7b3dSmrg
149428d7b3dSmrg   unsigned int dword2_base_addr;
150428d7b3dSmrg
151428d7b3dSmrg   union {
152428d7b3dSmrg      struct {
153428d7b3dSmrg	 unsigned int pad:1;
154428d7b3dSmrg	 unsigned int mipmap_layout:1;
155428d7b3dSmrg	 unsigned int lod:4;
156428d7b3dSmrg	 unsigned int width:13;
157428d7b3dSmrg	 unsigned int height:13;
158428d7b3dSmrg      } bits;
159428d7b3dSmrg      unsigned int dword;
160428d7b3dSmrg   } dword3;
161428d7b3dSmrg
162428d7b3dSmrg   union {
163428d7b3dSmrg      struct {
164428d7b3dSmrg	 unsigned int pad:12;
165428d7b3dSmrg	 unsigned int min_array_element:9;
166428d7b3dSmrg	 unsigned int depth:11;
167428d7b3dSmrg      } bits;
168428d7b3dSmrg      unsigned int dword;
169428d7b3dSmrg   } dword4;
170428d7b3dSmrg};
171428d7b3dSmrg
172428d7b3dSmrgstruct brw_drawrect
173428d7b3dSmrg{
174428d7b3dSmrg   struct header header;
175428d7b3dSmrg   unsigned int xmin:16;
176428d7b3dSmrg   unsigned int ymin:16;
177428d7b3dSmrg   unsigned int xmax:16;
178428d7b3dSmrg   unsigned int ymax:16;
179428d7b3dSmrg   unsigned int xorg:16;
180428d7b3dSmrg   unsigned int yorg:16;
181428d7b3dSmrg};
182428d7b3dSmrg
183428d7b3dSmrg
184428d7b3dSmrg
185428d7b3dSmrg
186428d7b3dSmrgstruct brw_global_depth_offset_clamp
187428d7b3dSmrg{
188428d7b3dSmrg   struct header header;
189428d7b3dSmrg   float depth_offset_clamp;
190428d7b3dSmrg};
191428d7b3dSmrg
192428d7b3dSmrgstruct brw_indexbuffer
193428d7b3dSmrg{
194428d7b3dSmrg   union {
195428d7b3dSmrg      struct
196428d7b3dSmrg      {
197428d7b3dSmrg	 unsigned int length:8;
198428d7b3dSmrg	 unsigned int index_format:2;
199428d7b3dSmrg	 unsigned int cut_index_enable:1;
200428d7b3dSmrg	 unsigned int pad:5;
201428d7b3dSmrg	 unsigned int opcode:16;
202428d7b3dSmrg      } bits;
203428d7b3dSmrg      unsigned int dword;
204428d7b3dSmrg
205428d7b3dSmrg   } header;
206428d7b3dSmrg
207428d7b3dSmrg   unsigned int buffer_start;
208428d7b3dSmrg   unsigned int buffer_end;
209428d7b3dSmrg};
210428d7b3dSmrg
211428d7b3dSmrg
212428d7b3dSmrgstruct brw_line_stipple
213428d7b3dSmrg{
214428d7b3dSmrg   struct header header;
215428d7b3dSmrg
216428d7b3dSmrg   struct
217428d7b3dSmrg   {
218428d7b3dSmrg      unsigned int pattern:16;
219428d7b3dSmrg      unsigned int pad:16;
220428d7b3dSmrg   } bits0;
221428d7b3dSmrg
222428d7b3dSmrg   struct
223428d7b3dSmrg   {
224428d7b3dSmrg      unsigned int repeat_count:9;
225428d7b3dSmrg      unsigned int pad:7;
226428d7b3dSmrg      unsigned int inverse_repeat_count:16;
227428d7b3dSmrg   } bits1;
228428d7b3dSmrg};
229428d7b3dSmrg
230428d7b3dSmrg
231428d7b3dSmrgstruct brw_pipelined_state_pointers
232428d7b3dSmrg{
233428d7b3dSmrg   struct header header;
234428d7b3dSmrg
235428d7b3dSmrg   struct {
236428d7b3dSmrg      unsigned int pad:5;
237428d7b3dSmrg      unsigned int offset:27;
238428d7b3dSmrg   } vs;
239428d7b3dSmrg
240428d7b3dSmrg   struct
241428d7b3dSmrg   {
242428d7b3dSmrg      unsigned int enable:1;
243428d7b3dSmrg      unsigned int pad:4;
244428d7b3dSmrg      unsigned int offset:27;
245428d7b3dSmrg   } gs;
246428d7b3dSmrg
247428d7b3dSmrg   struct
248428d7b3dSmrg   {
249428d7b3dSmrg      unsigned int enable:1;
250428d7b3dSmrg      unsigned int pad:4;
251428d7b3dSmrg      unsigned int offset:27;
252428d7b3dSmrg   } clp;
253428d7b3dSmrg
254428d7b3dSmrg   struct
255428d7b3dSmrg   {
256428d7b3dSmrg      unsigned int pad:5;
257428d7b3dSmrg      unsigned int offset:27;
258428d7b3dSmrg   } sf;
259428d7b3dSmrg
260428d7b3dSmrg   struct
261428d7b3dSmrg   {
262428d7b3dSmrg      unsigned int pad:5;
263428d7b3dSmrg      unsigned int offset:27;
264428d7b3dSmrg   } wm;
265428d7b3dSmrg
266428d7b3dSmrg   struct
267428d7b3dSmrg   {
268428d7b3dSmrg      unsigned int pad:5;
269428d7b3dSmrg      unsigned int offset:27; /* KW: check me! */
270428d7b3dSmrg   } cc;
271428d7b3dSmrg};
272428d7b3dSmrg
273428d7b3dSmrg
274428d7b3dSmrgstruct brw_polygon_stipple_offset
275428d7b3dSmrg{
276428d7b3dSmrg   struct header header;
277428d7b3dSmrg
278428d7b3dSmrg   struct {
279428d7b3dSmrg      unsigned int y_offset:5;
280428d7b3dSmrg      unsigned int pad:3;
281428d7b3dSmrg      unsigned int x_offset:5;
282428d7b3dSmrg      unsigned int pad0:19;
283428d7b3dSmrg   } bits0;
284428d7b3dSmrg};
285428d7b3dSmrg
286428d7b3dSmrg
287428d7b3dSmrg
288428d7b3dSmrgstruct brw_polygon_stipple
289428d7b3dSmrg{
290428d7b3dSmrg   struct header header;
291428d7b3dSmrg   unsigned int stipple[32];
292428d7b3dSmrg};
293428d7b3dSmrg
294428d7b3dSmrg
295428d7b3dSmrg
296428d7b3dSmrgstruct brw_pipeline_select
297428d7b3dSmrg{
298428d7b3dSmrg   struct
299428d7b3dSmrg   {
300428d7b3dSmrg      unsigned int pipeline_select:1;
301428d7b3dSmrg      unsigned int pad:15;
302428d7b3dSmrg      unsigned int opcode:16;
303428d7b3dSmrg   } header;
304428d7b3dSmrg};
305428d7b3dSmrg
306428d7b3dSmrg
307428d7b3dSmrgstruct brw_pipe_control
308428d7b3dSmrg{
309428d7b3dSmrg   struct
310428d7b3dSmrg   {
311428d7b3dSmrg      unsigned int length:8;
312428d7b3dSmrg      unsigned int notify_enable:1;
313428d7b3dSmrg      unsigned int pad:2;
314428d7b3dSmrg      unsigned int instruction_state_cache_flush_enable:1;
315428d7b3dSmrg      unsigned int write_cache_flush_enable:1;
316428d7b3dSmrg      unsigned int depth_stall_enable:1;
317428d7b3dSmrg      unsigned int post_sync_operation:2;
318428d7b3dSmrg
319428d7b3dSmrg      unsigned int opcode:16;
320428d7b3dSmrg   } header;
321428d7b3dSmrg
322428d7b3dSmrg   struct
323428d7b3dSmrg   {
324428d7b3dSmrg      unsigned int pad:2;
325428d7b3dSmrg      unsigned int dest_addr_type:1;
326428d7b3dSmrg      unsigned int dest_addr:29;
327428d7b3dSmrg   } bits1;
328428d7b3dSmrg
329428d7b3dSmrg   unsigned int data0;
330428d7b3dSmrg   unsigned int data1;
331428d7b3dSmrg};
332428d7b3dSmrg
333428d7b3dSmrg
334428d7b3dSmrgstruct brw_urb_fence
335428d7b3dSmrg{
336428d7b3dSmrg   struct
337428d7b3dSmrg   {
338428d7b3dSmrg      unsigned int length:8;
339428d7b3dSmrg      unsigned int vs_realloc:1;
340428d7b3dSmrg      unsigned int gs_realloc:1;
341428d7b3dSmrg      unsigned int clp_realloc:1;
342428d7b3dSmrg      unsigned int sf_realloc:1;
343428d7b3dSmrg      unsigned int vfe_realloc:1;
344428d7b3dSmrg      unsigned int cs_realloc:1;
345428d7b3dSmrg      unsigned int pad:2;
346428d7b3dSmrg      unsigned int opcode:16;
347428d7b3dSmrg   } header;
348428d7b3dSmrg
349428d7b3dSmrg   struct
350428d7b3dSmrg   {
351428d7b3dSmrg      unsigned int vs_fence:10;
352428d7b3dSmrg      unsigned int gs_fence:10;
353428d7b3dSmrg      unsigned int clp_fence:10;
354428d7b3dSmrg      unsigned int pad:2;
355428d7b3dSmrg   } bits0;
356428d7b3dSmrg
357428d7b3dSmrg   struct
358428d7b3dSmrg   {
359428d7b3dSmrg      unsigned int sf_fence:10;
360428d7b3dSmrg      unsigned int vf_fence:10;
361428d7b3dSmrg      unsigned int cs_fence:10;
362428d7b3dSmrg      unsigned int pad:2;
363428d7b3dSmrg   } bits1;
364428d7b3dSmrg};
365428d7b3dSmrg
366428d7b3dSmrgstruct brw_constant_buffer_state /* previously brw_command_streamer */
367428d7b3dSmrg{
368428d7b3dSmrg   struct header header;
369428d7b3dSmrg
370428d7b3dSmrg   struct
371428d7b3dSmrg   {
372428d7b3dSmrg      unsigned int nr_urb_entries:3;
373428d7b3dSmrg      unsigned int pad:1;
374428d7b3dSmrg      unsigned int urb_entry_size:5;
375428d7b3dSmrg      unsigned int pad0:23;
376428d7b3dSmrg   } bits0;
377428d7b3dSmrg};
378428d7b3dSmrg
379428d7b3dSmrgstruct brw_constant_buffer
380428d7b3dSmrg{
381428d7b3dSmrg   struct
382428d7b3dSmrg   {
383428d7b3dSmrg      unsigned int length:8;
384428d7b3dSmrg      unsigned int valid:1;
385428d7b3dSmrg      unsigned int pad:7;
386428d7b3dSmrg      unsigned int opcode:16;
387428d7b3dSmrg   } header;
388428d7b3dSmrg
389428d7b3dSmrg   struct
390428d7b3dSmrg   {
391428d7b3dSmrg      unsigned int buffer_length:6;
392428d7b3dSmrg      unsigned int buffer_address:26;
393428d7b3dSmrg   } bits0;
394428d7b3dSmrg};
395428d7b3dSmrg
396428d7b3dSmrgstruct brw_state_base_address
397428d7b3dSmrg{
398428d7b3dSmrg   struct header header;
399428d7b3dSmrg
400428d7b3dSmrg   struct
401428d7b3dSmrg   {
402428d7b3dSmrg      unsigned int modify_enable:1;
403428d7b3dSmrg      unsigned int pad:4;
404428d7b3dSmrg      unsigned int general_state_address:27;
405428d7b3dSmrg   } bits0;
406428d7b3dSmrg
407428d7b3dSmrg   struct
408428d7b3dSmrg   {
409428d7b3dSmrg      unsigned int modify_enable:1;
410428d7b3dSmrg      unsigned int pad:4;
411428d7b3dSmrg      unsigned int surface_state_address:27;
412428d7b3dSmrg   } bits1;
413428d7b3dSmrg
414428d7b3dSmrg   struct
415428d7b3dSmrg   {
416428d7b3dSmrg      unsigned int modify_enable:1;
417428d7b3dSmrg      unsigned int pad:4;
418428d7b3dSmrg      unsigned int indirect_object_state_address:27;
419428d7b3dSmrg   } bits2;
420428d7b3dSmrg
421428d7b3dSmrg   struct
422428d7b3dSmrg   {
423428d7b3dSmrg      unsigned int modify_enable:1;
424428d7b3dSmrg      unsigned int pad:11;
425428d7b3dSmrg      unsigned int general_state_upper_bound:20;
426428d7b3dSmrg   } bits3;
427428d7b3dSmrg
428428d7b3dSmrg   struct
429428d7b3dSmrg   {
430428d7b3dSmrg      unsigned int modify_enable:1;
431428d7b3dSmrg      unsigned int pad:11;
432428d7b3dSmrg      unsigned int indirect_object_state_upper_bound:20;
433428d7b3dSmrg   } bits4;
434428d7b3dSmrg};
435428d7b3dSmrg
436428d7b3dSmrgstruct brw_state_prefetch
437428d7b3dSmrg{
438428d7b3dSmrg   struct header header;
439428d7b3dSmrg
440428d7b3dSmrg   struct
441428d7b3dSmrg   {
442428d7b3dSmrg      unsigned int prefetch_count:3;
443428d7b3dSmrg      unsigned int pad:3;
444428d7b3dSmrg      unsigned int prefetch_pointer:26;
445428d7b3dSmrg   } bits0;
446428d7b3dSmrg};
447428d7b3dSmrg
448428d7b3dSmrgstruct brw_system_instruction_pointer
449428d7b3dSmrg{
450428d7b3dSmrg   struct header header;
451428d7b3dSmrg
452428d7b3dSmrg   struct
453428d7b3dSmrg   {
454428d7b3dSmrg      unsigned int pad:4;
455428d7b3dSmrg      unsigned int system_instruction_pointer:28;
456428d7b3dSmrg   } bits0;
457428d7b3dSmrg};
458428d7b3dSmrg
459428d7b3dSmrg
460428d7b3dSmrg
461428d7b3dSmrg
462428d7b3dSmrg/* State structs for the various fixed function units:
463428d7b3dSmrg */
464428d7b3dSmrg
465428d7b3dSmrg
466428d7b3dSmrgstruct thread0
467428d7b3dSmrg{
468428d7b3dSmrg   unsigned int pad0:1;
469428d7b3dSmrg   unsigned int grf_reg_count:3;
470428d7b3dSmrg   unsigned int pad1:2;
471428d7b3dSmrg   unsigned int kernel_start_pointer:26;
472428d7b3dSmrg};
473428d7b3dSmrg
474428d7b3dSmrgstruct thread1
475428d7b3dSmrg{
476428d7b3dSmrg   unsigned int ext_halt_exception_enable:1;
477428d7b3dSmrg   unsigned int sw_exception_enable:1;
478428d7b3dSmrg   unsigned int mask_stack_exception_enable:1;
479428d7b3dSmrg   unsigned int timeout_exception_enable:1;
480428d7b3dSmrg   unsigned int illegal_op_exception_enable:1;
481428d7b3dSmrg   unsigned int pad0:3;
482428d7b3dSmrg   unsigned int depth_coef_urb_read_offset:6;	/* WM only */
483428d7b3dSmrg   unsigned int pad1:2;
484428d7b3dSmrg   unsigned int floating_point_mode:1;
485428d7b3dSmrg   unsigned int thread_priority:1;
486428d7b3dSmrg   unsigned int binding_table_entry_count:8;
487428d7b3dSmrg   unsigned int pad3:5;
488428d7b3dSmrg   unsigned int single_program_flow:1;
489428d7b3dSmrg};
490428d7b3dSmrg
491428d7b3dSmrgstruct thread2
492428d7b3dSmrg{
493428d7b3dSmrg   unsigned int per_thread_scratch_space:4;
494428d7b3dSmrg   unsigned int pad0:6;
495428d7b3dSmrg   unsigned int scratch_space_base_pointer:22;
496428d7b3dSmrg};
497428d7b3dSmrg
498428d7b3dSmrg
499428d7b3dSmrgstruct thread3
500428d7b3dSmrg{
501428d7b3dSmrg   unsigned int dispatch_grf_start_reg:4;
502428d7b3dSmrg   unsigned int urb_entry_read_offset:6;
503428d7b3dSmrg   unsigned int pad0:1;
504428d7b3dSmrg   unsigned int urb_entry_read_length:6;
505428d7b3dSmrg   unsigned int pad1:1;
506428d7b3dSmrg   unsigned int const_urb_entry_read_offset:6;
507428d7b3dSmrg   unsigned int pad2:1;
508428d7b3dSmrg   unsigned int const_urb_entry_read_length:6;
509428d7b3dSmrg   unsigned int pad3:1;
510428d7b3dSmrg};
511428d7b3dSmrg
512428d7b3dSmrg
513428d7b3dSmrg
514428d7b3dSmrgstruct brw_clip_unit_state
515428d7b3dSmrg{
516428d7b3dSmrg   struct thread0 thread0;
517428d7b3dSmrg   struct thread1 thread1;
518428d7b3dSmrg   struct thread2 thread2;
519428d7b3dSmrg   struct thread3 thread3;
520428d7b3dSmrg
521428d7b3dSmrg   struct
522428d7b3dSmrg   {
523428d7b3dSmrg      unsigned int pad0:9;
524428d7b3dSmrg      unsigned int gs_output_stats:1; /* not always */
525428d7b3dSmrg      unsigned int stats_enable:1;
526428d7b3dSmrg      unsigned int nr_urb_entries:7;
527428d7b3dSmrg      unsigned int pad1:1;
528428d7b3dSmrg      unsigned int urb_entry_allocation_size:5;
529428d7b3dSmrg      unsigned int pad2:1;
530428d7b3dSmrg      unsigned int max_threads:6; 	/* may be less */
531428d7b3dSmrg      unsigned int pad3:1;
532428d7b3dSmrg   } thread4;
533428d7b3dSmrg
534428d7b3dSmrg   struct
535428d7b3dSmrg   {
536428d7b3dSmrg      unsigned int pad0:13;
537428d7b3dSmrg      unsigned int clip_mode:3;
538428d7b3dSmrg      unsigned int userclip_enable_flags:8;
539428d7b3dSmrg      unsigned int userclip_must_clip:1;
540428d7b3dSmrg      unsigned int pad1:1;
541428d7b3dSmrg      unsigned int guard_band_enable:1;
542428d7b3dSmrg      unsigned int viewport_z_clip_enable:1;
543428d7b3dSmrg      unsigned int viewport_xy_clip_enable:1;
544428d7b3dSmrg      unsigned int vertex_position_space:1;
545428d7b3dSmrg      unsigned int api_mode:1;
546428d7b3dSmrg      unsigned int pad2:1;
547428d7b3dSmrg   } clip5;
548428d7b3dSmrg
549428d7b3dSmrg   struct
550428d7b3dSmrg   {
551428d7b3dSmrg      unsigned int pad0:5;
552428d7b3dSmrg      unsigned int clipper_viewport_state_ptr:27;
553428d7b3dSmrg   } clip6;
554428d7b3dSmrg
555428d7b3dSmrg
556428d7b3dSmrg   float viewport_xmin;
557428d7b3dSmrg   float viewport_xmax;
558428d7b3dSmrg   float viewport_ymin;
559428d7b3dSmrg   float viewport_ymax;
560428d7b3dSmrg};
561428d7b3dSmrg
562428d7b3dSmrg
563428d7b3dSmrg
564428d7b3dSmrgstruct brw_cc_unit_state
565428d7b3dSmrg{
566428d7b3dSmrg   struct
567428d7b3dSmrg   {
568428d7b3dSmrg      unsigned int pad0:3;
569428d7b3dSmrg      unsigned int bf_stencil_pass_depth_pass_op:3;
570428d7b3dSmrg      unsigned int bf_stencil_pass_depth_fail_op:3;
571428d7b3dSmrg      unsigned int bf_stencil_fail_op:3;
572428d7b3dSmrg      unsigned int bf_stencil_func:3;
573428d7b3dSmrg      unsigned int bf_stencil_enable:1;
574428d7b3dSmrg      unsigned int pad1:2;
575428d7b3dSmrg      unsigned int stencil_write_enable:1;
576428d7b3dSmrg      unsigned int stencil_pass_depth_pass_op:3;
577428d7b3dSmrg      unsigned int stencil_pass_depth_fail_op:3;
578428d7b3dSmrg      unsigned int stencil_fail_op:3;
579428d7b3dSmrg      unsigned int stencil_func:3;
580428d7b3dSmrg      unsigned int stencil_enable:1;
581428d7b3dSmrg   } cc0;
582428d7b3dSmrg
583428d7b3dSmrg
584428d7b3dSmrg   struct
585428d7b3dSmrg   {
586428d7b3dSmrg      unsigned int bf_stencil_ref:8;
587428d7b3dSmrg      unsigned int stencil_write_mask:8;
588428d7b3dSmrg      unsigned int stencil_test_mask:8;
589428d7b3dSmrg      unsigned int stencil_ref:8;
590428d7b3dSmrg   } cc1;
591428d7b3dSmrg
592428d7b3dSmrg
593428d7b3dSmrg   struct
594428d7b3dSmrg   {
595428d7b3dSmrg      unsigned int logicop_enable:1;
596428d7b3dSmrg      unsigned int pad0:10;
597428d7b3dSmrg      unsigned int depth_write_enable:1;
598428d7b3dSmrg      unsigned int depth_test_function:3;
599428d7b3dSmrg      unsigned int depth_test:1;
600428d7b3dSmrg      unsigned int bf_stencil_write_mask:8;
601428d7b3dSmrg      unsigned int bf_stencil_test_mask:8;
602428d7b3dSmrg   } cc2;
603428d7b3dSmrg
604428d7b3dSmrg
605428d7b3dSmrg   struct
606428d7b3dSmrg   {
607428d7b3dSmrg      unsigned int pad0:8;
608428d7b3dSmrg      unsigned int alpha_test_func:3;
609428d7b3dSmrg      unsigned int alpha_test:1;
610428d7b3dSmrg      unsigned int blend_enable:1;
611428d7b3dSmrg      unsigned int ia_blend_enable:1;
612428d7b3dSmrg      unsigned int pad1:1;
613428d7b3dSmrg      unsigned int alpha_test_format:1;
614428d7b3dSmrg      unsigned int pad2:16;
615428d7b3dSmrg   } cc3;
616428d7b3dSmrg
617428d7b3dSmrg   struct
618428d7b3dSmrg   {
619428d7b3dSmrg      unsigned int pad0:5;
620428d7b3dSmrg      unsigned int cc_viewport_state_offset:27;
621428d7b3dSmrg   } cc4;
622428d7b3dSmrg
623428d7b3dSmrg   struct
624428d7b3dSmrg   {
625428d7b3dSmrg      unsigned int pad0:2;
626428d7b3dSmrg      unsigned int ia_dest_blend_factor:5;
627428d7b3dSmrg      unsigned int ia_src_blend_factor:5;
628428d7b3dSmrg      unsigned int ia_blend_function:3;
629428d7b3dSmrg      unsigned int statistics_enable:1;
630428d7b3dSmrg      unsigned int logicop_func:4;
631428d7b3dSmrg      unsigned int pad1:11;
632428d7b3dSmrg      unsigned int dither_enable:1;
633428d7b3dSmrg   } cc5;
634428d7b3dSmrg
635428d7b3dSmrg   struct
636428d7b3dSmrg   {
637428d7b3dSmrg      unsigned int clamp_post_alpha_blend:1;
638428d7b3dSmrg      unsigned int clamp_pre_alpha_blend:1;
639428d7b3dSmrg      unsigned int clamp_range:2;
640428d7b3dSmrg      unsigned int pad0:11;
641428d7b3dSmrg      unsigned int y_dither_offset:2;
642428d7b3dSmrg      unsigned int x_dither_offset:2;
643428d7b3dSmrg      unsigned int dest_blend_factor:5;
644428d7b3dSmrg      unsigned int src_blend_factor:5;
645428d7b3dSmrg      unsigned int blend_function:3;
646428d7b3dSmrg   } cc6;
647428d7b3dSmrg
648428d7b3dSmrg   struct {
649428d7b3dSmrg      union {
650428d7b3dSmrg	 float f;
651428d7b3dSmrg	 unsigned char ub[4];
652428d7b3dSmrg      } alpha_ref;
653428d7b3dSmrg   } cc7;
654428d7b3dSmrg};
655428d7b3dSmrg
656428d7b3dSmrg
657428d7b3dSmrg
658428d7b3dSmrgstruct brw_sf_unit_state
659428d7b3dSmrg{
660428d7b3dSmrg   struct thread0 thread0;
661428d7b3dSmrg   struct {
662428d7b3dSmrg      unsigned int pad0:7;
663428d7b3dSmrg      unsigned int sw_exception_enable:1;
664428d7b3dSmrg      unsigned int pad1:3;
665428d7b3dSmrg      unsigned int mask_stack_exception_enable:1;
666428d7b3dSmrg      unsigned int pad2:1;
667428d7b3dSmrg      unsigned int illegal_op_exception_enable:1;
668428d7b3dSmrg      unsigned int pad3:2;
669428d7b3dSmrg      unsigned int floating_point_mode:1;
670428d7b3dSmrg      unsigned int thread_priority:1;
671428d7b3dSmrg      unsigned int binding_table_entry_count:8;
672428d7b3dSmrg      unsigned int pad4:5;
673428d7b3dSmrg      unsigned int single_program_flow:1;
674428d7b3dSmrg   } sf1;
675428d7b3dSmrg
676428d7b3dSmrg   struct thread2 thread2;
677428d7b3dSmrg   struct thread3 thread3;
678428d7b3dSmrg
679428d7b3dSmrg   struct
680428d7b3dSmrg   {
681428d7b3dSmrg      unsigned int pad0:10;
682428d7b3dSmrg      unsigned int stats_enable:1;
683428d7b3dSmrg      unsigned int nr_urb_entries:7;
684428d7b3dSmrg      unsigned int pad1:1;
685428d7b3dSmrg      unsigned int urb_entry_allocation_size:5;
686428d7b3dSmrg      unsigned int pad2:1;
687428d7b3dSmrg      unsigned int max_threads:6;
688428d7b3dSmrg      unsigned int pad3:1;
689428d7b3dSmrg   } thread4;
690428d7b3dSmrg
691428d7b3dSmrg   struct
692428d7b3dSmrg   {
693428d7b3dSmrg      unsigned int front_winding:1;
694428d7b3dSmrg      unsigned int viewport_transform:1;
695428d7b3dSmrg      unsigned int pad0:3;
696428d7b3dSmrg      unsigned int sf_viewport_state_offset:27;
697428d7b3dSmrg   } sf5;
698428d7b3dSmrg
699428d7b3dSmrg   struct
700428d7b3dSmrg   {
701428d7b3dSmrg      unsigned int pad0:9;
702428d7b3dSmrg      unsigned int dest_org_vbias:4;
703428d7b3dSmrg      unsigned int dest_org_hbias:4;
704428d7b3dSmrg      unsigned int scissor:1;
705428d7b3dSmrg      unsigned int disable_2x2_trifilter:1;
706428d7b3dSmrg      unsigned int disable_zero_pix_trifilter:1;
707428d7b3dSmrg      unsigned int point_rast_rule:2;
708428d7b3dSmrg      unsigned int line_endcap_aa_region_width:2;
709428d7b3dSmrg      unsigned int line_width:4;
710428d7b3dSmrg      unsigned int fast_scissor_disable:1;
711428d7b3dSmrg      unsigned int cull_mode:2;
712428d7b3dSmrg      unsigned int aa_enable:1;
713428d7b3dSmrg   } sf6;
714428d7b3dSmrg
715428d7b3dSmrg   struct
716428d7b3dSmrg   {
717428d7b3dSmrg      unsigned int point_size:11;
718428d7b3dSmrg      unsigned int use_point_size_state:1;
719428d7b3dSmrg      unsigned int subpixel_precision:1;
720428d7b3dSmrg      unsigned int sprite_point:1;
721428d7b3dSmrg      unsigned int pad0:11;
722428d7b3dSmrg      unsigned int trifan_pv:2;
723428d7b3dSmrg      unsigned int linestrip_pv:2;
724428d7b3dSmrg      unsigned int tristrip_pv:2;
725428d7b3dSmrg      unsigned int line_last_pixel_enable:1;
726428d7b3dSmrg   } sf7;
727428d7b3dSmrg
728428d7b3dSmrg};
729428d7b3dSmrg
730428d7b3dSmrg
731428d7b3dSmrgstruct brw_gs_unit_state
732428d7b3dSmrg{
733428d7b3dSmrg   struct thread0 thread0;
734428d7b3dSmrg   struct thread1 thread1;
735428d7b3dSmrg   struct thread2 thread2;
736428d7b3dSmrg   struct thread3 thread3;
737428d7b3dSmrg
738428d7b3dSmrg   struct
739428d7b3dSmrg   {
740428d7b3dSmrg      unsigned int pad0:10;
741428d7b3dSmrg      unsigned int stats_enable:1;
742428d7b3dSmrg      unsigned int nr_urb_entries:7;
743428d7b3dSmrg      unsigned int pad1:1;
744428d7b3dSmrg      unsigned int urb_entry_allocation_size:5;
745428d7b3dSmrg      unsigned int pad2:1;
746428d7b3dSmrg      unsigned int max_threads:1;
747428d7b3dSmrg      unsigned int pad3:6;
748428d7b3dSmrg   } thread4;
749428d7b3dSmrg
750428d7b3dSmrg   struct
751428d7b3dSmrg   {
752428d7b3dSmrg      unsigned int sampler_count:3;
753428d7b3dSmrg      unsigned int pad0:2;
754428d7b3dSmrg      unsigned int sampler_state_pointer:27;
755428d7b3dSmrg   } gs5;
756428d7b3dSmrg
757428d7b3dSmrg
758428d7b3dSmrg   struct
759428d7b3dSmrg   {
760428d7b3dSmrg      unsigned int max_vp_index:4;
761428d7b3dSmrg      unsigned int pad0:26;
762428d7b3dSmrg      unsigned int reorder_enable:1;
763428d7b3dSmrg      unsigned int pad1:1;
764428d7b3dSmrg   } gs6;
765428d7b3dSmrg};
766428d7b3dSmrg
767428d7b3dSmrg
768428d7b3dSmrgstruct brw_vs_unit_state
769428d7b3dSmrg{
770428d7b3dSmrg   struct thread0 thread0;
771428d7b3dSmrg   struct thread1 thread1;
772428d7b3dSmrg   struct thread2 thread2;
773428d7b3dSmrg   struct thread3 thread3;
774428d7b3dSmrg
775428d7b3dSmrg   struct
776428d7b3dSmrg   {
777428d7b3dSmrg      unsigned int pad0:10;
778428d7b3dSmrg      unsigned int stats_enable:1;
779428d7b3dSmrg      unsigned int nr_urb_entries:7;
780428d7b3dSmrg      unsigned int pad1:1;
781428d7b3dSmrg      unsigned int urb_entry_allocation_size:5;
782428d7b3dSmrg      unsigned int pad2:1;
783428d7b3dSmrg      unsigned int max_threads:4;
784428d7b3dSmrg      unsigned int pad3:3;
785428d7b3dSmrg   } thread4;
786428d7b3dSmrg
787428d7b3dSmrg   struct
788428d7b3dSmrg   {
789428d7b3dSmrg      unsigned int sampler_count:3;
790428d7b3dSmrg      unsigned int pad0:2;
791428d7b3dSmrg      unsigned int sampler_state_pointer:27;
792428d7b3dSmrg   } vs5;
793428d7b3dSmrg
794428d7b3dSmrg   struct
795428d7b3dSmrg   {
796428d7b3dSmrg      unsigned int vs_enable:1;
797428d7b3dSmrg      unsigned int vert_cache_disable:1;
798428d7b3dSmrg      unsigned int pad0:30;
799428d7b3dSmrg   } vs6;
800428d7b3dSmrg};
801428d7b3dSmrg
802428d7b3dSmrg
803428d7b3dSmrgstruct brw_wm_unit_state
804428d7b3dSmrg{
805428d7b3dSmrg   struct thread0 thread0;
806428d7b3dSmrg   struct thread1 thread1;
807428d7b3dSmrg   struct thread2 thread2;
808428d7b3dSmrg   struct thread3 thread3;
809428d7b3dSmrg
810428d7b3dSmrg   struct {
811428d7b3dSmrg      unsigned int stats_enable:1;
812428d7b3dSmrg      unsigned int pad0:1;
813428d7b3dSmrg      unsigned int sampler_count:3;
814428d7b3dSmrg      unsigned int sampler_state_pointer:27;
815428d7b3dSmrg   } wm4;
816428d7b3dSmrg
817428d7b3dSmrg   struct
818428d7b3dSmrg   {
819428d7b3dSmrg      unsigned int enable_8_pix:1;
820428d7b3dSmrg      unsigned int enable_16_pix:1;
821428d7b3dSmrg      unsigned int enable_32_pix:1;
822428d7b3dSmrg      unsigned int pad0:7;
823428d7b3dSmrg      unsigned int legacy_global_depth_bias:1;
824428d7b3dSmrg      unsigned int line_stipple:1;
825428d7b3dSmrg      unsigned int depth_offset:1;
826428d7b3dSmrg      unsigned int polygon_stipple:1;
827428d7b3dSmrg      unsigned int line_aa_region_width:2;
828428d7b3dSmrg      unsigned int line_endcap_aa_region_width:2;
829428d7b3dSmrg      unsigned int early_depth_test:1;
830428d7b3dSmrg      unsigned int thread_dispatch_enable:1;
831428d7b3dSmrg      unsigned int program_uses_depth:1;
832428d7b3dSmrg      unsigned int program_computes_depth:1;
833428d7b3dSmrg      unsigned int program_uses_killpixel:1;
834428d7b3dSmrg      unsigned int legacy_line_rast: 1;
835428d7b3dSmrg      unsigned int transposed_urb_read:1;
836428d7b3dSmrg      unsigned int max_threads:7;
837428d7b3dSmrg   } wm5;
838428d7b3dSmrg
839428d7b3dSmrg   float global_depth_offset_constant;
840428d7b3dSmrg   float global_depth_offset_scale;
841428d7b3dSmrg
842428d7b3dSmrg   struct {
843428d7b3dSmrg      unsigned int pad0:1;
844428d7b3dSmrg      unsigned int grf_reg_count_1:3;
845428d7b3dSmrg      unsigned int pad1:2;
846428d7b3dSmrg      unsigned int kernel_start_pointer_1:26;
847428d7b3dSmrg   } wm8;
848428d7b3dSmrg
849428d7b3dSmrg   struct {
850428d7b3dSmrg      unsigned int pad0:1;
851428d7b3dSmrg      unsigned int grf_reg_count_2:3;
852428d7b3dSmrg      unsigned int pad1:2;
853428d7b3dSmrg      unsigned int kernel_start_pointer_2:26;
854428d7b3dSmrg   } wm9;
855428d7b3dSmrg
856428d7b3dSmrg   struct {
857428d7b3dSmrg      unsigned int pad0:1;
858428d7b3dSmrg      unsigned int grf_reg_count_3:3;
859428d7b3dSmrg      unsigned int pad1:2;
860428d7b3dSmrg      unsigned int kernel_start_pointer_3:26;
861428d7b3dSmrg   } wm10;
862428d7b3dSmrg};
863428d7b3dSmrg
864428d7b3dSmrgstruct brw_wm_unit_state_padded {
865428d7b3dSmrg	struct brw_wm_unit_state state;
866428d7b3dSmrg	char pad[64 - sizeof(struct brw_wm_unit_state)];
867428d7b3dSmrg};
868428d7b3dSmrg
869428d7b3dSmrg/* The hardware supports two different modes for border color. The
870428d7b3dSmrg * default (OpenGL) mode uses floating-point color channels, while the
871428d7b3dSmrg * legacy mode uses 4 bytes.
872428d7b3dSmrg *
873428d7b3dSmrg * More significantly, the legacy mode respects the components of the
874428d7b3dSmrg * border color for channels not present in the source, (whereas the
875428d7b3dSmrg * default mode will ignore the border color's alpha channel and use
876428d7b3dSmrg * alpha==1 for an RGB source, for example).
877428d7b3dSmrg *
878428d7b3dSmrg * The legacy mode matches the semantics specified by the Render
879428d7b3dSmrg * extension.
880428d7b3dSmrg */
881428d7b3dSmrgstruct brw_sampler_default_border_color {
882428d7b3dSmrg   float color[4];
883428d7b3dSmrg};
884428d7b3dSmrg
885428d7b3dSmrgstruct brw_sampler_legacy_border_color {
886428d7b3dSmrg   uint8_t color[4];
887428d7b3dSmrg};
888428d7b3dSmrg
889428d7b3dSmrgstruct brw_sampler_state
890428d7b3dSmrg{
891428d7b3dSmrg
892428d7b3dSmrg   struct
893428d7b3dSmrg   {
894428d7b3dSmrg      unsigned int shadow_function:3;
895428d7b3dSmrg      unsigned int lod_bias:11;
896428d7b3dSmrg      unsigned int min_filter:3;
897428d7b3dSmrg      unsigned int mag_filter:3;
898428d7b3dSmrg      unsigned int mip_filter:2;
899428d7b3dSmrg      unsigned int base_level:5;
900428d7b3dSmrg      unsigned int pad:1;
901428d7b3dSmrg      unsigned int lod_preclamp:1;
902428d7b3dSmrg      unsigned int border_color_mode:1;
903428d7b3dSmrg      unsigned int pad0:1;
904428d7b3dSmrg      unsigned int disable:1;
905428d7b3dSmrg   } ss0;
906428d7b3dSmrg
907428d7b3dSmrg   struct
908428d7b3dSmrg   {
909428d7b3dSmrg      unsigned int r_wrap_mode:3;
910428d7b3dSmrg      unsigned int t_wrap_mode:3;
911428d7b3dSmrg      unsigned int s_wrap_mode:3;
912428d7b3dSmrg      unsigned int pad:3;
913428d7b3dSmrg      unsigned int max_lod:10;
914428d7b3dSmrg      unsigned int min_lod:10;
915428d7b3dSmrg   } ss1;
916428d7b3dSmrg
917428d7b3dSmrg
918428d7b3dSmrg   struct
919428d7b3dSmrg   {
920428d7b3dSmrg      unsigned int pad:5;
921428d7b3dSmrg      unsigned int border_color_pointer:27;
922428d7b3dSmrg   } ss2;
923428d7b3dSmrg
924428d7b3dSmrg   struct
925428d7b3dSmrg   {
926428d7b3dSmrg      unsigned int pad:19;
927428d7b3dSmrg      unsigned int max_aniso:3;
928428d7b3dSmrg      unsigned int chroma_key_mode:1;
929428d7b3dSmrg      unsigned int chroma_key_index:2;
930428d7b3dSmrg      unsigned int chroma_key_enable:1;
931428d7b3dSmrg      unsigned int monochrome_filter_width:3;
932428d7b3dSmrg      unsigned int monochrome_filter_height:3;
933428d7b3dSmrg   } ss3;
934428d7b3dSmrg};
935428d7b3dSmrg
936428d7b3dSmrg
937428d7b3dSmrgstruct brw_clipper_viewport
938428d7b3dSmrg{
939428d7b3dSmrg   float xmin;
940428d7b3dSmrg   float xmax;
941428d7b3dSmrg   float ymin;
942428d7b3dSmrg   float ymax;
943428d7b3dSmrg};
944428d7b3dSmrg
945428d7b3dSmrgstruct brw_cc_viewport
946428d7b3dSmrg{
947428d7b3dSmrg   float min_depth;
948428d7b3dSmrg   float max_depth;
949428d7b3dSmrg};
950428d7b3dSmrg
951428d7b3dSmrgstruct brw_sf_viewport
952428d7b3dSmrg{
953428d7b3dSmrg   struct {
954428d7b3dSmrg      float m00;
955428d7b3dSmrg      float m11;
956428d7b3dSmrg      float m22;
957428d7b3dSmrg      float m30;
958428d7b3dSmrg      float m31;
959428d7b3dSmrg      float m32;
960428d7b3dSmrg   } viewport;
961428d7b3dSmrg
962428d7b3dSmrg   struct {
963428d7b3dSmrg      short xmin;
964428d7b3dSmrg      short ymin;
965428d7b3dSmrg      short xmax;
966428d7b3dSmrg      short ymax;
967428d7b3dSmrg   } scissor;
968428d7b3dSmrg};
969428d7b3dSmrg
970428d7b3dSmrg/* Documented in the subsystem/shared-functions/sampler chapter...
971428d7b3dSmrg */
972428d7b3dSmrgstruct brw_surface_state
973428d7b3dSmrg{
974428d7b3dSmrg   struct {
975428d7b3dSmrg      unsigned int cube_pos_z:1;
976428d7b3dSmrg      unsigned int cube_neg_z:1;
977428d7b3dSmrg      unsigned int cube_pos_y:1;
978428d7b3dSmrg      unsigned int cube_neg_y:1;
979428d7b3dSmrg      unsigned int cube_pos_x:1;
980428d7b3dSmrg      unsigned int cube_neg_x:1;
981428d7b3dSmrg      unsigned int pad:3;
982428d7b3dSmrg      unsigned int render_cache_read_mode:1;
983428d7b3dSmrg      unsigned int mipmap_layout_mode:1;
984428d7b3dSmrg      unsigned int vert_line_stride_ofs:1;
985428d7b3dSmrg      unsigned int vert_line_stride:1;
986428d7b3dSmrg      unsigned int color_blend:1;
987428d7b3dSmrg      unsigned int writedisable_blue:1;
988428d7b3dSmrg      unsigned int writedisable_green:1;
989428d7b3dSmrg      unsigned int writedisable_red:1;
990428d7b3dSmrg      unsigned int writedisable_alpha:1;
991428d7b3dSmrg      unsigned int surface_format:9;
992428d7b3dSmrg      unsigned int data_return_format:1;
993428d7b3dSmrg      unsigned int pad0:1;
994428d7b3dSmrg      unsigned int surface_type:3;
995428d7b3dSmrg   } ss0;
996428d7b3dSmrg
997428d7b3dSmrg   struct {
998428d7b3dSmrg      unsigned int base_addr;
999428d7b3dSmrg   } ss1;
1000428d7b3dSmrg
1001428d7b3dSmrg   struct {
1002428d7b3dSmrg      unsigned int render_target_rotation:2;
1003428d7b3dSmrg      unsigned int mip_count:4;
1004428d7b3dSmrg      unsigned int width:13;
1005428d7b3dSmrg      unsigned int height:13;
1006428d7b3dSmrg   } ss2;
1007428d7b3dSmrg
1008428d7b3dSmrg   struct {
1009428d7b3dSmrg      unsigned int tile_walk:1;
1010428d7b3dSmrg      unsigned int tiled_surface:1;
1011428d7b3dSmrg      unsigned int pad:1;
1012428d7b3dSmrg      unsigned int pitch:18;
1013428d7b3dSmrg      unsigned int depth:11;
1014428d7b3dSmrg   } ss3;
1015428d7b3dSmrg
1016428d7b3dSmrg   struct {
1017428d7b3dSmrg      unsigned int pad:19;
1018428d7b3dSmrg      unsigned int min_array_elt:9;
1019428d7b3dSmrg      unsigned int min_lod:4;
1020428d7b3dSmrg   } ss4;
1021428d7b3dSmrg
1022428d7b3dSmrg   struct {
1023428d7b3dSmrg       unsigned int pad:20;
1024428d7b3dSmrg       unsigned int y_offset:4;
1025428d7b3dSmrg       unsigned int pad2:1;
1026428d7b3dSmrg       unsigned int x_offset:7;
1027428d7b3dSmrg   } ss5;
1028428d7b3dSmrg};
1029428d7b3dSmrg
1030428d7b3dSmrg
1031428d7b3dSmrg
1032428d7b3dSmrgstruct brw_vertex_buffer_state
1033428d7b3dSmrg{
1034428d7b3dSmrg   struct {
1035428d7b3dSmrg      unsigned int pitch:11;
1036428d7b3dSmrg      unsigned int pad:15;
1037428d7b3dSmrg      unsigned int access_type:1;
1038428d7b3dSmrg      unsigned int vb_index:5;
1039428d7b3dSmrg   } vb0;
1040428d7b3dSmrg
1041428d7b3dSmrg   unsigned int start_addr;
1042428d7b3dSmrg   unsigned int max_index;
1043428d7b3dSmrg#if 1
1044428d7b3dSmrg   unsigned int instance_data_step_rate; /* not included for sequential/random vertices? */
1045428d7b3dSmrg#endif
1046428d7b3dSmrg};
1047428d7b3dSmrg
1048428d7b3dSmrg#define BRW_VBP_MAX 17
1049428d7b3dSmrg
1050428d7b3dSmrgstruct brw_vb_array_state {
1051428d7b3dSmrg   struct header header;
1052428d7b3dSmrg   struct brw_vertex_buffer_state vb[BRW_VBP_MAX];
1053428d7b3dSmrg};
1054428d7b3dSmrg
1055428d7b3dSmrg
1056428d7b3dSmrgstruct brw_vertex_element_state
1057428d7b3dSmrg{
1058428d7b3dSmrg   struct
1059428d7b3dSmrg   {
1060428d7b3dSmrg      unsigned int src_offset:11;
1061428d7b3dSmrg      unsigned int pad:5;
1062428d7b3dSmrg      unsigned int src_format:9;
1063428d7b3dSmrg      unsigned int pad0:1;
1064428d7b3dSmrg      unsigned int valid:1;
1065428d7b3dSmrg      unsigned int vertex_buffer_index:5;
1066428d7b3dSmrg   } ve0;
1067428d7b3dSmrg
1068428d7b3dSmrg   struct
1069428d7b3dSmrg   {
1070428d7b3dSmrg      unsigned int dst_offset:8;
1071428d7b3dSmrg      unsigned int pad:8;
1072428d7b3dSmrg      unsigned int vfcomponent3:4;
1073428d7b3dSmrg      unsigned int vfcomponent2:4;
1074428d7b3dSmrg      unsigned int vfcomponent1:4;
1075428d7b3dSmrg      unsigned int vfcomponent0:4;
1076428d7b3dSmrg   } ve1;
1077428d7b3dSmrg};
1078428d7b3dSmrg
1079428d7b3dSmrg#define BRW_VEP_MAX 18
1080428d7b3dSmrg
1081428d7b3dSmrgstruct brw_vertex_element_packet {
1082428d7b3dSmrg   struct header header;
1083428d7b3dSmrg   struct brw_vertex_element_state ve[BRW_VEP_MAX]; /* note: less than _TNL_ATTRIB_MAX */
1084428d7b3dSmrg};
1085428d7b3dSmrg
1086428d7b3dSmrg
1087428d7b3dSmrgstruct brw_urb_immediate {
1088428d7b3dSmrg   unsigned int opcode:4;
1089428d7b3dSmrg   unsigned int offset:6;
1090428d7b3dSmrg   unsigned int swizzle_control:2;
1091428d7b3dSmrg   unsigned int pad:1;
1092428d7b3dSmrg   unsigned int allocate:1;
1093428d7b3dSmrg   unsigned int used:1;
1094428d7b3dSmrg   unsigned int complete:1;
1095428d7b3dSmrg   unsigned int response_length:4;
1096428d7b3dSmrg   unsigned int msg_length:4;
1097428d7b3dSmrg   unsigned int msg_target:4;
1098428d7b3dSmrg   unsigned int pad1:3;
1099428d7b3dSmrg   unsigned int end_of_thread:1;
1100428d7b3dSmrg};
1101428d7b3dSmrg
1102428d7b3dSmrg/* Instruction format for the execution units:
1103428d7b3dSmrg */
1104428d7b3dSmrg
1105428d7b3dSmrgstruct brw_instruction
1106428d7b3dSmrg{
1107428d7b3dSmrg   struct
1108428d7b3dSmrg   {
1109428d7b3dSmrg      unsigned int opcode:7;
1110428d7b3dSmrg      unsigned int pad:1;
1111428d7b3dSmrg      unsigned int access_mode:1;
1112428d7b3dSmrg      unsigned int mask_control:1;
1113428d7b3dSmrg      unsigned int dependency_control:2;
1114428d7b3dSmrg      unsigned int compression_control:2;
1115428d7b3dSmrg      unsigned int thread_control:2;
1116428d7b3dSmrg      unsigned int predicate_control:4;
1117428d7b3dSmrg      unsigned int predicate_inverse:1;
1118428d7b3dSmrg      unsigned int execution_size:3;
1119428d7b3dSmrg      unsigned int destreg__conditonalmod:4; /* destreg - send, conditionalmod - others */
1120428d7b3dSmrg      unsigned int pad0:2;
1121428d7b3dSmrg      unsigned int debug_control:1;
1122428d7b3dSmrg      unsigned int saturate:1;
1123428d7b3dSmrg   } header;
1124428d7b3dSmrg
1125428d7b3dSmrg   union {
1126428d7b3dSmrg      struct
1127428d7b3dSmrg      {
1128428d7b3dSmrg	 unsigned int dest_reg_file:2;
1129428d7b3dSmrg	 unsigned int dest_reg_type:3;
1130428d7b3dSmrg	 unsigned int src0_reg_file:2;
1131428d7b3dSmrg	 unsigned int src0_reg_type:3;
1132428d7b3dSmrg	 unsigned int src1_reg_file:2;
1133428d7b3dSmrg	 unsigned int src1_reg_type:3;
1134428d7b3dSmrg	 unsigned int pad:1;
1135428d7b3dSmrg	 unsigned int dest_subreg_nr:5;
1136428d7b3dSmrg	 unsigned int dest_reg_nr:8;
1137428d7b3dSmrg	 unsigned int dest_horiz_stride:2;
1138428d7b3dSmrg	 unsigned int dest_address_mode:1;
1139428d7b3dSmrg      } da1;
1140428d7b3dSmrg
1141428d7b3dSmrg      struct
1142428d7b3dSmrg      {
1143428d7b3dSmrg	 unsigned int dest_reg_file:2;
1144428d7b3dSmrg	 unsigned int dest_reg_type:3;
1145428d7b3dSmrg	 unsigned int src0_reg_file:2;
1146428d7b3dSmrg	 unsigned int src0_reg_type:3;
1147428d7b3dSmrg	 unsigned int pad:6;
1148428d7b3dSmrg	 int dest_indirect_offset:10;	/* offset against the deref'd address reg */
1149428d7b3dSmrg	 unsigned int dest_subreg_nr:3; /* subnr for the address reg a0.x */
1150428d7b3dSmrg	 unsigned int dest_horiz_stride:2;
1151428d7b3dSmrg	 unsigned int dest_address_mode:1;
1152428d7b3dSmrg      } ia1;
1153428d7b3dSmrg
1154428d7b3dSmrg      struct
1155428d7b3dSmrg      {
1156428d7b3dSmrg	 unsigned int dest_reg_file:2;
1157428d7b3dSmrg	 unsigned int dest_reg_type:3;
1158428d7b3dSmrg	 unsigned int src0_reg_file:2;
1159428d7b3dSmrg	 unsigned int src0_reg_type:3;
1160428d7b3dSmrg	 unsigned int src1_reg_file:2;
1161428d7b3dSmrg	 unsigned int src1_reg_type:3;
1162428d7b3dSmrg	 unsigned int pad0:1;
1163428d7b3dSmrg	 unsigned int dest_writemask:4;
1164428d7b3dSmrg	 unsigned int dest_subreg_nr:1;
1165428d7b3dSmrg	 unsigned int dest_reg_nr:8;
1166428d7b3dSmrg	 unsigned int pad1:2;
1167428d7b3dSmrg	 unsigned int dest_address_mode:1;
1168428d7b3dSmrg      } da16;
1169428d7b3dSmrg
1170428d7b3dSmrg      struct
1171428d7b3dSmrg      {
1172428d7b3dSmrg	 unsigned int dest_reg_file:2;
1173428d7b3dSmrg	 unsigned int dest_reg_type:3;
1174428d7b3dSmrg	 unsigned int src0_reg_file:2;
1175428d7b3dSmrg	 unsigned int src0_reg_type:3;
1176428d7b3dSmrg	 unsigned int pad0:6;
1177428d7b3dSmrg	 unsigned int dest_writemask:4;
1178428d7b3dSmrg	 int dest_indirect_offset:6;
1179428d7b3dSmrg	 unsigned int dest_subreg_nr:3;
1180428d7b3dSmrg	 unsigned int pad1:2;
1181428d7b3dSmrg	 unsigned int dest_address_mode:1;
1182428d7b3dSmrg      } ia16;
1183428d7b3dSmrg   } bits1;
1184428d7b3dSmrg
1185428d7b3dSmrg
1186428d7b3dSmrg   union {
1187428d7b3dSmrg      struct
1188428d7b3dSmrg      {
1189428d7b3dSmrg	 unsigned int src0_subreg_nr:5;
1190428d7b3dSmrg	 unsigned int src0_reg_nr:8;
1191428d7b3dSmrg	 unsigned int src0_abs:1;
1192428d7b3dSmrg	 unsigned int src0_negate:1;
1193428d7b3dSmrg	 unsigned int src0_address_mode:1;
1194428d7b3dSmrg	 unsigned int src0_horiz_stride:2;
1195428d7b3dSmrg	 unsigned int src0_width:3;
1196428d7b3dSmrg	 unsigned int src0_vert_stride:4;
1197428d7b3dSmrg	 unsigned int flag_reg_nr:1;
1198428d7b3dSmrg	 unsigned int pad:6;
1199428d7b3dSmrg      } da1;
1200428d7b3dSmrg
1201428d7b3dSmrg      struct
1202428d7b3dSmrg      {
1203428d7b3dSmrg	 int src0_indirect_offset:10;
1204428d7b3dSmrg	 unsigned int src0_subreg_nr:3;
1205428d7b3dSmrg	 unsigned int src0_abs:1;
1206428d7b3dSmrg	 unsigned int src0_negate:1;
1207428d7b3dSmrg	 unsigned int src0_address_mode:1;
1208428d7b3dSmrg	 unsigned int src0_horiz_stride:2;
1209428d7b3dSmrg	 unsigned int src0_width:3;
1210428d7b3dSmrg	 unsigned int src0_vert_stride:4;
1211428d7b3dSmrg	 unsigned int flag_reg_nr:1;
1212428d7b3dSmrg	 unsigned int pad:6;
1213428d7b3dSmrg      } ia1;
1214428d7b3dSmrg
1215428d7b3dSmrg      struct
1216428d7b3dSmrg      {
1217428d7b3dSmrg	 unsigned int src0_swz_x:2;
1218428d7b3dSmrg	 unsigned int src0_swz_y:2;
1219428d7b3dSmrg	 unsigned int src0_subreg_nr:1;
1220428d7b3dSmrg	 unsigned int src0_reg_nr:8;
1221428d7b3dSmrg	 unsigned int src0_abs:1;
1222428d7b3dSmrg	 unsigned int src0_negate:1;
1223428d7b3dSmrg	 unsigned int src0_address_mode:1;
1224428d7b3dSmrg	 unsigned int src0_swz_z:2;
1225428d7b3dSmrg	 unsigned int src0_swz_w:2;
1226428d7b3dSmrg	 unsigned int pad0:1;
1227428d7b3dSmrg	 unsigned int src0_vert_stride:4;
1228428d7b3dSmrg	 unsigned int flag_reg_nr:1;
1229428d7b3dSmrg	 unsigned int pad1:6;
1230428d7b3dSmrg      } da16;
1231428d7b3dSmrg
1232428d7b3dSmrg      struct
1233428d7b3dSmrg      {
1234428d7b3dSmrg	 unsigned int src0_swz_x:2;
1235428d7b3dSmrg	 unsigned int src0_swz_y:2;
1236428d7b3dSmrg	 int src0_indirect_offset:6;
1237428d7b3dSmrg	 unsigned int src0_subreg_nr:3;
1238428d7b3dSmrg	 unsigned int src0_abs:1;
1239428d7b3dSmrg	 unsigned int src0_negate:1;
1240428d7b3dSmrg	 unsigned int src0_address_mode:1;
1241428d7b3dSmrg	 unsigned int src0_swz_z:2;
1242428d7b3dSmrg	 unsigned int src0_swz_w:2;
1243428d7b3dSmrg	 unsigned int pad0:1;
1244428d7b3dSmrg	 unsigned int src0_vert_stride:4;
1245428d7b3dSmrg	 unsigned int flag_reg_nr:1;
1246428d7b3dSmrg	 unsigned int pad1:6;
1247428d7b3dSmrg      } ia16;
1248428d7b3dSmrg
1249428d7b3dSmrg   } bits2;
1250428d7b3dSmrg
1251428d7b3dSmrg   union
1252428d7b3dSmrg   {
1253428d7b3dSmrg      struct
1254428d7b3dSmrg      {
1255428d7b3dSmrg	 unsigned int src1_subreg_nr:5;
1256428d7b3dSmrg	 unsigned int src1_reg_nr:8;
1257428d7b3dSmrg	 unsigned int src1_abs:1;
1258428d7b3dSmrg	 unsigned int src1_negate:1;
1259428d7b3dSmrg	 unsigned int pad:1;
1260428d7b3dSmrg	 unsigned int src1_horiz_stride:2;
1261428d7b3dSmrg	 unsigned int src1_width:3;
1262428d7b3dSmrg	 unsigned int src1_vert_stride:4;
1263428d7b3dSmrg	 unsigned int pad0:7;
1264428d7b3dSmrg      } da1;
1265428d7b3dSmrg
1266428d7b3dSmrg      struct
1267428d7b3dSmrg      {
1268428d7b3dSmrg	 unsigned int src1_swz_x:2;
1269428d7b3dSmrg	 unsigned int src1_swz_y:2;
1270428d7b3dSmrg	 unsigned int src1_subreg_nr:1;
1271428d7b3dSmrg	 unsigned int src1_reg_nr:8;
1272428d7b3dSmrg	 unsigned int src1_abs:1;
1273428d7b3dSmrg	 unsigned int src1_negate:1;
1274428d7b3dSmrg	 unsigned int pad0:1;
1275428d7b3dSmrg	 unsigned int src1_swz_z:2;
1276428d7b3dSmrg	 unsigned int src1_swz_w:2;
1277428d7b3dSmrg	 unsigned int pad1:1;
1278428d7b3dSmrg	 unsigned int src1_vert_stride:4;
1279428d7b3dSmrg	 unsigned int pad2:7;
1280428d7b3dSmrg      } da16;
1281428d7b3dSmrg
1282428d7b3dSmrg      struct
1283428d7b3dSmrg      {
1284428d7b3dSmrg	 int  src1_indirect_offset:10;
1285428d7b3dSmrg	 unsigned int src1_subreg_nr:3;
1286428d7b3dSmrg	 unsigned int src1_abs:1;
1287428d7b3dSmrg	 unsigned int src1_negate:1;
1288428d7b3dSmrg	 unsigned int pad0:1;
1289428d7b3dSmrg	 unsigned int src1_horiz_stride:2;
1290428d7b3dSmrg	 unsigned int src1_width:3;
1291428d7b3dSmrg	 unsigned int src1_vert_stride:4;
1292428d7b3dSmrg	 unsigned int flag_reg_nr:1;
1293428d7b3dSmrg	 unsigned int pad1:6;
1294428d7b3dSmrg      } ia1;
1295428d7b3dSmrg
1296428d7b3dSmrg      struct
1297428d7b3dSmrg      {
1298428d7b3dSmrg	 unsigned int src1_swz_x:2;
1299428d7b3dSmrg	 unsigned int src1_swz_y:2;
1300428d7b3dSmrg	 int  src1_indirect_offset:6;
1301428d7b3dSmrg	 unsigned int src1_subreg_nr:3;
1302428d7b3dSmrg	 unsigned int src1_abs:1;
1303428d7b3dSmrg	 unsigned int src1_negate:1;
1304428d7b3dSmrg	 unsigned int pad0:1;
1305428d7b3dSmrg	 unsigned int src1_swz_z:2;
1306428d7b3dSmrg	 unsigned int src1_swz_w:2;
1307428d7b3dSmrg	 unsigned int pad1:1;
1308428d7b3dSmrg	 unsigned int src1_vert_stride:4;
1309428d7b3dSmrg	 unsigned int flag_reg_nr:1;
1310428d7b3dSmrg	 unsigned int pad2:6;
1311428d7b3dSmrg      } ia16;
1312428d7b3dSmrg
1313428d7b3dSmrg
1314428d7b3dSmrg      struct
1315428d7b3dSmrg      {
1316428d7b3dSmrg	 int  jump_count:16;	/* note: signed */
1317428d7b3dSmrg	 unsigned int  pop_count:4;
1318428d7b3dSmrg	 unsigned int  pad0:12;
1319428d7b3dSmrg      } if_else;
1320428d7b3dSmrg
1321428d7b3dSmrg      struct {
1322428d7b3dSmrg	 unsigned int function:4;
1323428d7b3dSmrg	 unsigned int int_type:1;
1324428d7b3dSmrg	 unsigned int precision:1;
1325428d7b3dSmrg	 unsigned int saturate:1;
1326428d7b3dSmrg	 unsigned int data_type:1;
1327428d7b3dSmrg	 unsigned int pad0:8;
1328428d7b3dSmrg	 unsigned int response_length:4;
1329428d7b3dSmrg	 unsigned int msg_length:4;
1330428d7b3dSmrg	 unsigned int msg_target:4;
1331428d7b3dSmrg	 unsigned int pad1:3;
1332428d7b3dSmrg	 unsigned int end_of_thread:1;
1333428d7b3dSmrg      } math;
1334428d7b3dSmrg
1335428d7b3dSmrg      struct {
1336428d7b3dSmrg	 unsigned int binding_table_index:8;
1337428d7b3dSmrg	 unsigned int sampler:4;
1338428d7b3dSmrg	 unsigned int return_format:2;
1339428d7b3dSmrg	 unsigned int msg_type:2;
1340428d7b3dSmrg	 unsigned int response_length:4;
1341428d7b3dSmrg	 unsigned int msg_length:4;
1342428d7b3dSmrg	 unsigned int msg_target:4;
1343428d7b3dSmrg	 unsigned int pad1:3;
1344428d7b3dSmrg	 unsigned int end_of_thread:1;
1345428d7b3dSmrg      } sampler;
1346428d7b3dSmrg
1347428d7b3dSmrg      struct brw_urb_immediate urb;
1348428d7b3dSmrg
1349428d7b3dSmrg      struct {
1350428d7b3dSmrg	 unsigned int binding_table_index:8;
1351428d7b3dSmrg	 unsigned int msg_control:4;
1352428d7b3dSmrg	 unsigned int msg_type:2;
1353428d7b3dSmrg	 unsigned int target_cache:2;
1354428d7b3dSmrg	 unsigned int response_length:4;
1355428d7b3dSmrg	 unsigned int msg_length:4;
1356428d7b3dSmrg	 unsigned int msg_target:4;
1357428d7b3dSmrg	 unsigned int pad1:3;
1358428d7b3dSmrg	 unsigned int end_of_thread:1;
1359428d7b3dSmrg      } dp_read;
1360428d7b3dSmrg
1361428d7b3dSmrg      struct {
1362428d7b3dSmrg	 unsigned int binding_table_index:8;
1363428d7b3dSmrg	 unsigned int msg_control:3;
1364428d7b3dSmrg	 unsigned int pixel_scoreboard_clear:1;
1365428d7b3dSmrg	 unsigned int msg_type:3;
1366428d7b3dSmrg	 unsigned int send_commit_msg:1;
1367428d7b3dSmrg	 unsigned int response_length:4;
1368428d7b3dSmrg	 unsigned int msg_length:4;
1369428d7b3dSmrg	 unsigned int msg_target:4;
1370428d7b3dSmrg	 unsigned int pad1:3;
1371428d7b3dSmrg	 unsigned int end_of_thread:1;
1372428d7b3dSmrg      } dp_write;
1373428d7b3dSmrg
1374428d7b3dSmrg      struct {
1375428d7b3dSmrg	 unsigned int pad:16;
1376428d7b3dSmrg	 unsigned int response_length:4;
1377428d7b3dSmrg	 unsigned int msg_length:4;
1378428d7b3dSmrg	 unsigned int msg_target:4;
1379428d7b3dSmrg	 unsigned int pad1:3;
1380428d7b3dSmrg	 unsigned int end_of_thread:1;
1381428d7b3dSmrg      } generic;
1382428d7b3dSmrg
1383428d7b3dSmrg      unsigned int ud;
1384428d7b3dSmrg   } bits3;
1385428d7b3dSmrg};
1386428d7b3dSmrg
1387428d7b3dSmrg/* media pipeline */
1388428d7b3dSmrg
1389428d7b3dSmrgstruct brw_vfe_state {
1390428d7b3dSmrg    struct {
1391428d7b3dSmrg	unsigned int per_thread_scratch_space:4;
1392428d7b3dSmrg	unsigned int pad3:3;
1393428d7b3dSmrg	unsigned int extend_vfe_state_present:1;
1394428d7b3dSmrg	unsigned int pad2:2;
1395428d7b3dSmrg	unsigned int scratch_base:22;
1396428d7b3dSmrg    } vfe0;
1397428d7b3dSmrg
1398428d7b3dSmrg    struct {
1399428d7b3dSmrg	unsigned int debug_counter_control:2;
1400428d7b3dSmrg	unsigned int children_present:1;
1401428d7b3dSmrg	unsigned int vfe_mode:4;
1402428d7b3dSmrg	unsigned int pad2:2;
1403428d7b3dSmrg	unsigned int num_urb_entries:7;
1404428d7b3dSmrg	unsigned int urb_entry_alloc_size:9;
1405428d7b3dSmrg	unsigned int max_threads:7;
1406428d7b3dSmrg    } vfe1;
1407428d7b3dSmrg
1408428d7b3dSmrg    struct {
1409428d7b3dSmrg	unsigned int pad4:4;
1410428d7b3dSmrg	unsigned int interface_descriptor_base:28;
1411428d7b3dSmrg    } vfe2;
1412428d7b3dSmrg};
1413428d7b3dSmrg
1414428d7b3dSmrgstruct brw_vld_state {
1415428d7b3dSmrg    struct {
1416428d7b3dSmrg	unsigned int pad6:6;
1417428d7b3dSmrg	unsigned int scan_order:1;
1418428d7b3dSmrg	unsigned int intra_vlc_format:1;
1419428d7b3dSmrg	unsigned int quantizer_scale_type:1;
1420428d7b3dSmrg	unsigned int concealment_motion_vector:1;
1421428d7b3dSmrg	unsigned int frame_predict_frame_dct:1;
1422428d7b3dSmrg	unsigned int top_field_first:1;
1423428d7b3dSmrg	unsigned int picture_structure:2;
1424428d7b3dSmrg	unsigned int intra_dc_precision:2;
1425428d7b3dSmrg	unsigned int f_code_0_0:4;
1426428d7b3dSmrg	unsigned int f_code_0_1:4;
1427428d7b3dSmrg	unsigned int f_code_1_0:4;
1428428d7b3dSmrg	unsigned int f_code_1_1:4;
1429428d7b3dSmrg    } vld0;
1430428d7b3dSmrg
1431428d7b3dSmrg    struct {
1432428d7b3dSmrg	unsigned int pad2:9;
1433428d7b3dSmrg	unsigned int picture_coding_type:2;
1434428d7b3dSmrg	unsigned int pad:21;
1435428d7b3dSmrg    } vld1;
1436428d7b3dSmrg
1437428d7b3dSmrg    struct {
1438428d7b3dSmrg	unsigned int index_0:4;
1439428d7b3dSmrg	unsigned int index_1:4;
1440428d7b3dSmrg	unsigned int index_2:4;
1441428d7b3dSmrg	unsigned int index_3:4;
1442428d7b3dSmrg	unsigned int index_4:4;
1443428d7b3dSmrg	unsigned int index_5:4;
1444428d7b3dSmrg	unsigned int index_6:4;
1445428d7b3dSmrg	unsigned int index_7:4;
1446428d7b3dSmrg    } desc_remap_table0;
1447428d7b3dSmrg
1448428d7b3dSmrg    struct {
1449428d7b3dSmrg	unsigned int index_8:4;
1450428d7b3dSmrg	unsigned int index_9:4;
1451428d7b3dSmrg	unsigned int index_10:4;
1452428d7b3dSmrg	unsigned int index_11:4;
1453428d7b3dSmrg	unsigned int index_12:4;
1454428d7b3dSmrg	unsigned int index_13:4;
1455428d7b3dSmrg	unsigned int index_14:4;
1456428d7b3dSmrg	unsigned int index_15:4;
1457428d7b3dSmrg    } desc_remap_table1;
1458428d7b3dSmrg};
1459428d7b3dSmrg
1460428d7b3dSmrgstruct brw_interface_descriptor {
1461428d7b3dSmrg    struct {
1462428d7b3dSmrg	unsigned int grf_reg_blocks:4;
1463428d7b3dSmrg	unsigned int pad:2;
1464428d7b3dSmrg	unsigned int kernel_start_pointer:26;
1465428d7b3dSmrg    } desc0;
1466428d7b3dSmrg
1467428d7b3dSmrg    struct {
1468428d7b3dSmrg	unsigned int pad:7;
1469428d7b3dSmrg	unsigned int software_exception:1;
1470428d7b3dSmrg	unsigned int pad2:3;
1471428d7b3dSmrg	unsigned int maskstack_exception:1;
1472428d7b3dSmrg	unsigned int pad3:1;
1473428d7b3dSmrg	unsigned int illegal_opcode_exception:1;
1474428d7b3dSmrg	unsigned int pad4:2;
1475428d7b3dSmrg	unsigned int floating_point_mode:1;
1476428d7b3dSmrg	unsigned int thread_priority:1;
1477428d7b3dSmrg	unsigned int single_program_flow:1;
1478428d7b3dSmrg	unsigned int pad5:1;
1479428d7b3dSmrg	unsigned int const_urb_entry_read_offset:6;
1480428d7b3dSmrg	unsigned int const_urb_entry_read_len:6;
1481428d7b3dSmrg    } desc1;
1482428d7b3dSmrg
1483428d7b3dSmrg    struct {
1484428d7b3dSmrg	unsigned int pad:2;
1485428d7b3dSmrg	unsigned int sampler_count:3;
1486428d7b3dSmrg	unsigned int sampler_state_pointer:27;
1487428d7b3dSmrg    } desc2;
1488428d7b3dSmrg
1489428d7b3dSmrg    struct {
1490428d7b3dSmrg	unsigned int binding_table_entry_count:5;
1491428d7b3dSmrg	unsigned int binding_table_pointer:27;
1492428d7b3dSmrg    } desc3;
1493428d7b3dSmrg};
1494428d7b3dSmrg
1495428d7b3dSmrgstruct gen6_blend_state
1496428d7b3dSmrg{
1497428d7b3dSmrg	struct {
1498428d7b3dSmrg		unsigned int dest_blend_factor:5;
1499428d7b3dSmrg		unsigned int source_blend_factor:5;
1500428d7b3dSmrg		unsigned int pad3:1;
1501428d7b3dSmrg		unsigned int blend_func:3;
1502428d7b3dSmrg		unsigned int pad2:1;
1503428d7b3dSmrg		unsigned int ia_dest_blend_factor:5;
1504428d7b3dSmrg		unsigned int ia_source_blend_factor:5;
1505428d7b3dSmrg		unsigned int pad1:1;
1506428d7b3dSmrg		unsigned int ia_blend_func:3;
1507428d7b3dSmrg		unsigned int pad0:1;
1508428d7b3dSmrg		unsigned int ia_blend_enable:1;
1509428d7b3dSmrg		unsigned int blend_enable:1;
1510428d7b3dSmrg	} blend0;
1511428d7b3dSmrg
1512428d7b3dSmrg	struct {
1513428d7b3dSmrg		unsigned int post_blend_clamp_enable:1;
1514428d7b3dSmrg		unsigned int pre_blend_clamp_enable:1;
1515428d7b3dSmrg		unsigned int clamp_range:2;
1516428d7b3dSmrg		unsigned int pad0:4;
1517428d7b3dSmrg		unsigned int x_dither_offset:2;
1518428d7b3dSmrg		unsigned int y_dither_offset:2;
1519428d7b3dSmrg		unsigned int dither_enable:1;
1520428d7b3dSmrg		unsigned int alpha_test_func:3;
1521428d7b3dSmrg		unsigned int alpha_test_enable:1;
1522428d7b3dSmrg		unsigned int pad1:1;
1523428d7b3dSmrg		unsigned int logic_op_func:4;
1524428d7b3dSmrg		unsigned int logic_op_enable:1;
1525428d7b3dSmrg		unsigned int pad2:1;
1526428d7b3dSmrg		unsigned int write_disable_b:1;
1527428d7b3dSmrg		unsigned int write_disable_g:1;
1528428d7b3dSmrg		unsigned int write_disable_r:1;
1529428d7b3dSmrg		unsigned int write_disable_a:1;
1530428d7b3dSmrg		unsigned int pad3:1;
1531428d7b3dSmrg		unsigned int alpha_to_coverage_dither:1;
1532428d7b3dSmrg		unsigned int alpha_to_one:1;
1533428d7b3dSmrg		unsigned int alpha_to_coverage:1;
1534428d7b3dSmrg	} blend1;
1535428d7b3dSmrg};
1536428d7b3dSmrg
1537428d7b3dSmrgstruct gen6_color_calc_state
1538428d7b3dSmrg{
1539428d7b3dSmrg	struct {
1540428d7b3dSmrg		unsigned int alpha_test_format:1;
1541428d7b3dSmrg		unsigned int pad0:14;
1542428d7b3dSmrg		unsigned int round_disable:1;
1543428d7b3dSmrg		unsigned int bf_stencil_ref:8;
1544428d7b3dSmrg		unsigned int stencil_ref:8;
1545428d7b3dSmrg	} cc0;
1546428d7b3dSmrg
1547428d7b3dSmrg	union {
1548428d7b3dSmrg		float alpha_ref_f;
1549428d7b3dSmrg		struct {
1550428d7b3dSmrg			unsigned int ui:8;
1551428d7b3dSmrg			unsigned int pad0:24;
1552428d7b3dSmrg		} alpha_ref_fi;
1553428d7b3dSmrg	} cc1;
1554428d7b3dSmrg
1555428d7b3dSmrg	float constant_r;
1556428d7b3dSmrg	float constant_g;
1557428d7b3dSmrg	float constant_b;
1558428d7b3dSmrg	float constant_a;
1559428d7b3dSmrg};
1560428d7b3dSmrg
1561428d7b3dSmrgstruct gen6_depth_stencil_state
1562428d7b3dSmrg{
1563428d7b3dSmrg	struct {
1564428d7b3dSmrg		unsigned int pad0:3;
1565428d7b3dSmrg		unsigned int bf_stencil_pass_depth_pass_op:3;
1566428d7b3dSmrg		unsigned int bf_stencil_pass_depth_fail_op:3;
1567428d7b3dSmrg		unsigned int bf_stencil_fail_op:3;
1568428d7b3dSmrg		unsigned int bf_stencil_func:3;
1569428d7b3dSmrg		unsigned int bf_stencil_enable:1;
1570428d7b3dSmrg		unsigned int pad1:2;
1571428d7b3dSmrg		unsigned int stencil_write_enable:1;
1572428d7b3dSmrg		unsigned int stencil_pass_depth_pass_op:3;
1573428d7b3dSmrg		unsigned int stencil_pass_depth_fail_op:3;
1574428d7b3dSmrg		unsigned int stencil_fail_op:3;
1575428d7b3dSmrg		unsigned int stencil_func:3;
1576428d7b3dSmrg		unsigned int stencil_enable:1;
1577428d7b3dSmrg	} ds0;
1578428d7b3dSmrg
1579428d7b3dSmrg	struct {
1580428d7b3dSmrg		unsigned int bf_stencil_write_mask:8;
1581428d7b3dSmrg		unsigned int bf_stencil_test_mask:8;
1582428d7b3dSmrg		unsigned int stencil_write_mask:8;
1583428d7b3dSmrg		unsigned int stencil_test_mask:8;
1584428d7b3dSmrg	} ds1;
1585428d7b3dSmrg
1586428d7b3dSmrg	struct {
1587428d7b3dSmrg		unsigned int pad0:26;
1588428d7b3dSmrg		unsigned int depth_write_enable:1;
1589428d7b3dSmrg		unsigned int depth_test_func:3;
1590428d7b3dSmrg		unsigned int pad1:1;
1591428d7b3dSmrg		unsigned int depth_test_enable:1;
1592428d7b3dSmrg	} ds2;
1593428d7b3dSmrg};
1594428d7b3dSmrg
1595428d7b3dSmrgstruct gen7_surface_state
1596428d7b3dSmrg{
1597428d7b3dSmrg	struct {
1598428d7b3dSmrg		unsigned int cube_pos_z:1;
1599428d7b3dSmrg		unsigned int cube_neg_z:1;
1600428d7b3dSmrg		unsigned int cube_pos_y:1;
1601428d7b3dSmrg		unsigned int cube_neg_y:1;
1602428d7b3dSmrg		unsigned int cube_pos_x:1;
1603428d7b3dSmrg		unsigned int cube_neg_x:1;
1604428d7b3dSmrg		unsigned int pad2:2;
1605428d7b3dSmrg		unsigned int render_cache_read_write:1;
1606428d7b3dSmrg		unsigned int pad1:1;
1607428d7b3dSmrg		unsigned int surface_array_spacing:1;
1608428d7b3dSmrg		unsigned int vert_line_stride_ofs:1;
1609428d7b3dSmrg		unsigned int vert_line_stride:1;
1610428d7b3dSmrg		unsigned int tile_walk:1;
1611428d7b3dSmrg		unsigned int tiled_surface:1;
1612428d7b3dSmrg		unsigned int horizontal_alignment:1;
1613428d7b3dSmrg		unsigned int vertical_alignment:2;
1614428d7b3dSmrg		unsigned int surface_format:9;     /**< BRW_SURFACEFORMAT_x */
1615428d7b3dSmrg		unsigned int pad0:1;
1616428d7b3dSmrg		unsigned int is_array:1;
1617428d7b3dSmrg		unsigned int surface_type:3;       /**< BRW_SURFACE_1D/2D/3D/CUBE */
1618428d7b3dSmrg	} ss0;
1619428d7b3dSmrg
1620428d7b3dSmrg	struct {
1621428d7b3dSmrg		unsigned int base_addr;
1622428d7b3dSmrg	} ss1;
1623428d7b3dSmrg
1624428d7b3dSmrg	struct {
1625428d7b3dSmrg		unsigned int width:14;
1626428d7b3dSmrg		unsigned int pad1:2;
1627428d7b3dSmrg		unsigned int height:14;
1628428d7b3dSmrg		unsigned int pad0:2;
1629428d7b3dSmrg	} ss2;
1630428d7b3dSmrg
1631428d7b3dSmrg	struct {
1632428d7b3dSmrg		unsigned int pitch:18;
1633428d7b3dSmrg		unsigned int pad:3;
1634428d7b3dSmrg		unsigned int depth:11;
1635428d7b3dSmrg	} ss3;
1636428d7b3dSmrg
1637428d7b3dSmrg	struct {
1638428d7b3dSmrg		unsigned int multisample_position_palette_index:3;
1639428d7b3dSmrg		unsigned int num_multisamples:3;
1640428d7b3dSmrg		unsigned int multisampled_surface_storage_format:1;
1641428d7b3dSmrg		unsigned int render_target_view_extent:11;
1642428d7b3dSmrg		unsigned int min_array_elt:11;
1643428d7b3dSmrg		unsigned int rotation:2;
1644428d7b3dSmrg		unsigned int pad0:1;
1645428d7b3dSmrg	} ss4;
1646428d7b3dSmrg
1647428d7b3dSmrg	struct {
1648428d7b3dSmrg		unsigned int mip_count:4;
1649428d7b3dSmrg		unsigned int min_lod:4;
1650428d7b3dSmrg		unsigned int pad1:12;
1651428d7b3dSmrg		unsigned int y_offset:4;
1652428d7b3dSmrg		unsigned int pad0:1;
1653428d7b3dSmrg		unsigned int x_offset:7;
1654428d7b3dSmrg	} ss5;
1655428d7b3dSmrg
1656428d7b3dSmrg	struct {
1657428d7b3dSmrg		unsigned int pad; /* Multisample Control Surface stuff */
1658428d7b3dSmrg	} ss6;
1659428d7b3dSmrg
1660428d7b3dSmrg	struct {
1661428d7b3dSmrg		unsigned int resource_min_lod:12;
1662428d7b3dSmrg		unsigned int pad0:4;
1663428d7b3dSmrg		unsigned int shader_chanel_select_a:3;
1664428d7b3dSmrg		unsigned int shader_chanel_select_b:3;
1665428d7b3dSmrg		unsigned int shader_chanel_select_g:3;
1666428d7b3dSmrg		unsigned int shader_chanel_select_r:3;
1667428d7b3dSmrg		unsigned int alpha_clear_color:1;
1668428d7b3dSmrg		unsigned int blue_clear_color:1;
1669428d7b3dSmrg		unsigned int green_clear_color:1;
1670428d7b3dSmrg		unsigned int red_clear_color:1;
1671428d7b3dSmrg	} ss7;
1672428d7b3dSmrg};
1673428d7b3dSmrg
1674428d7b3dSmrgstruct gen7_sampler_state
1675428d7b3dSmrg{
1676428d7b3dSmrg	struct
1677428d7b3dSmrg	{
1678428d7b3dSmrg		unsigned int aniso_algorithm:1;
1679428d7b3dSmrg		unsigned int lod_bias:13;
1680428d7b3dSmrg		unsigned int min_filter:3;
1681428d7b3dSmrg		unsigned int mag_filter:3;
1682428d7b3dSmrg		unsigned int mip_filter:2;
1683428d7b3dSmrg		unsigned int base_level:5;
1684428d7b3dSmrg		unsigned int pad1:1;
1685428d7b3dSmrg		unsigned int lod_preclamp:1;
1686428d7b3dSmrg		unsigned int default_color_mode:1;
1687428d7b3dSmrg		unsigned int pad0:1;
1688428d7b3dSmrg		unsigned int disable:1;
1689428d7b3dSmrg	} ss0;
1690428d7b3dSmrg
1691428d7b3dSmrg	struct
1692428d7b3dSmrg	{
1693428d7b3dSmrg		unsigned int cube_control_mode:1;
1694428d7b3dSmrg		unsigned int shadow_function:3;
1695428d7b3dSmrg		unsigned int pad:4;
1696428d7b3dSmrg		unsigned int max_lod:12;
1697428d7b3dSmrg		unsigned int min_lod:12;
1698428d7b3dSmrg	} ss1;
1699428d7b3dSmrg
1700428d7b3dSmrg	struct
1701428d7b3dSmrg	{
1702428d7b3dSmrg		unsigned int pad:5;
1703428d7b3dSmrg		unsigned int default_color_pointer:27;
1704428d7b3dSmrg	} ss2;
1705428d7b3dSmrg
1706428d7b3dSmrg	struct
1707428d7b3dSmrg	{
1708428d7b3dSmrg		unsigned int r_wrap_mode:3;
1709428d7b3dSmrg		unsigned int t_wrap_mode:3;
1710428d7b3dSmrg		unsigned int s_wrap_mode:3;
1711428d7b3dSmrg		unsigned int pad:1;
1712428d7b3dSmrg		unsigned int non_normalized_coord:1;
1713428d7b3dSmrg		unsigned int trilinear_quality:2;
1714428d7b3dSmrg		unsigned int address_round:6;
1715428d7b3dSmrg		unsigned int max_aniso:3;
1716428d7b3dSmrg		unsigned int chroma_key_mode:1;
1717428d7b3dSmrg		unsigned int chroma_key_index:2;
1718428d7b3dSmrg		unsigned int chroma_key_enable:1;
1719428d7b3dSmrg		unsigned int pad0:6;
1720428d7b3dSmrg	} ss3;
1721428d7b3dSmrg};
1722428d7b3dSmrg
1723428d7b3dSmrg#endif
1724