1/**************************************************************************
2 *
3 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sub license, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
13 *
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
16 * of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 *
26 **************************************************************************/
27
28#ifndef GEN5_RENDER_H
29#define GEN5_RENDER_H
30
31#define GEN5_3D(Pipeline,Opcode,Subopcode) ((3 << 29) | \
32					   ((Pipeline) << 27) | \
33					   ((Opcode) << 24) | \
34					   ((Subopcode) << 16))
35
36#define GEN5_URB_FENCE				GEN5_3D(0, 0, 0)
37#define GEN5_CS_URB_STATE			GEN5_3D(0, 0, 1)
38#define GEN5_CONSTANT_BUFFER			GEN5_3D(0, 0, 2)
39#define GEN5_STATE_PREFETCH			GEN5_3D(0, 0, 3)
40
41#define GEN5_STATE_BASE_ADDRESS			GEN5_3D(0, 1, 1)
42#define GEN5_STATE_SIP				GEN5_3D(0, 1, 2)
43
44#define GEN5_PIPELINE_SELECT			GEN5_3D(1, 1, 4)
45
46#define GEN5_MEDIA_STATE_POINTERS		GEN5_3D(2, 0, 0)
47#define GEN5_MEDIA_OBJECT			GEN5_3D(2, 1, 0)
48
49#define GEN5_3DSTATE_PIPELINED_POINTERS		GEN5_3D(3, 0, 0)
50#define GEN5_3DSTATE_BINDING_TABLE_POINTERS	GEN5_3D(3, 0, 1)
51# define GEN6_3DSTATE_BINDING_TABLE_MODIFY_PS  (1 << 12)/* for GEN6 */
52# define GEN6_3DSTATE_BINDING_TABLE_MODIFY_GS  (1 << 9) /* for GEN6 */
53# define GEN6_3DSTATE_BINDING_TABLE_MODIFY_VS  (1 << 8) /* for GEN6 */
54
55#define GEN5_3DSTATE_VERTEX_BUFFERS		GEN5_3D(3, 0, 8)
56#define GEN5_3DSTATE_VERTEX_ELEMENTS		GEN5_3D(3, 0, 9)
57#define GEN5_3DSTATE_INDEX_BUFFER		GEN5_3D(3, 0, 0xa)
58#define GEN5_3DSTATE_VF_STATISTICS		GEN5_3D(3, 0, 0xb)
59
60#define GEN5_3DSTATE_DRAWING_RECTANGLE		GEN5_3D(3, 1, 0)
61#define GEN5_3DSTATE_CONSTANT_COLOR		GEN5_3D(3, 1, 1)
62#define GEN5_3DSTATE_SAMPLER_PALETTE_LOAD	GEN5_3D(3, 1, 2)
63#define GEN5_3DSTATE_CHROMA_KEY			GEN5_3D(3, 1, 4)
64#define GEN5_3DSTATE_DEPTH_BUFFER		GEN5_3D(3, 1, 5)
65# define GEN5_3DSTATE_DEPTH_BUFFER_TYPE_SHIFT	29
66# define GEN5_3DSTATE_DEPTH_BUFFER_FORMAT_SHIFT	18
67
68#define GEN5_3DSTATE_POLY_STIPPLE_OFFSET		GEN5_3D(3, 1, 6)
69#define GEN5_3DSTATE_POLY_STIPPLE_PATTERN	GEN5_3D(3, 1, 7)
70#define GEN5_3DSTATE_LINE_STIPPLE		GEN5_3D(3, 1, 8)
71#define GEN5_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP	GEN5_3D(3, 1, 9)
72/* These two are BLC and CTG only, not BW or CL */
73#define GEN5_3DSTATE_AA_LINE_PARAMS		GEN5_3D(3, 1, 0xa)
74#define GEN5_3DSTATE_GS_SVB_INDEX		GEN5_3D(3, 1, 0xb)
75
76#define GEN5_PIPE_CONTROL			GEN5_3D(3, 2, 0)
77
78#define GEN5_3DPRIMITIVE				GEN5_3D(3, 3, 0)
79
80#define GEN5_3DSTATE_CLEAR_PARAMS		GEN5_3D(3, 1, 0x10)
81/* DW1 */
82# define GEN5_3DSTATE_DEPTH_CLEAR_VALID		(1 << 15)
83
84/* for GEN6+ */
85#define GEN6_3DSTATE_SAMPLER_STATE_POINTERS	GEN5_3D(3, 0, 0x02)
86# define GEN6_3DSTATE_SAMPLER_STATE_MODIFY_PS	(1 << 12)
87# define GEN6_3DSTATE_SAMPLER_STATE_MODIFY_GS	(1 << 9)
88# define GEN6_3DSTATE_SAMPLER_STATE_MODIFY_VS	(1 << 8)
89
90#define GEN6_3DSTATE_URB			GEN5_3D(3, 0, 0x05)
91/* DW1 */
92# define GEN6_3DSTATE_URB_VS_SIZE_SHIFT		16
93# define GEN6_3DSTATE_URB_VS_ENTRIES_SHIFT	0
94/* DW2 */
95# define GEN6_3DSTATE_URB_GS_ENTRIES_SHIFT	8
96# define GEN6_3DSTATE_URB_GS_SIZE_SHIFT		0
97
98#define GEN6_3DSTATE_VIEWPORT_STATE_POINTERS	GEN5_3D(3, 0, 0x0d)
99# define GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_CC		(1 << 12)
100# define GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_SF		(1 << 11)
101# define GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_CLIP	(1 << 10)
102
103#define GEN6_3DSTATE_CC_STATE_POINTERS		GEN5_3D(3, 0, 0x0e)
104
105#define GEN6_3DSTATE_VS				GEN5_3D(3, 0, 0x10)
106
107#define GEN6_3DSTATE_GS				GEN5_3D(3, 0, 0x11)
108/* DW4 */
109# define GEN6_3DSTATE_GS_DISPATCH_START_GRF_SHIFT	0
110
111#define GEN6_3DSTATE_CLIP			GEN5_3D(3, 0, 0x12)
112
113#define GEN6_3DSTATE_SF				GEN5_3D(3, 0, 0x13)
114/* DW1 */
115# define GEN6_3DSTATE_SF_NUM_OUTPUTS_SHIFT		22
116# define GEN6_3DSTATE_SF_URB_ENTRY_READ_LENGTH_SHIFT	11
117# define GEN6_3DSTATE_SF_URB_ENTRY_READ_OFFSET_SHIFT	4
118/* DW2 */
119/* DW3 */
120# define GEN6_3DSTATE_SF_CULL_BOTH			(0 << 29)
121# define GEN6_3DSTATE_SF_CULL_NONE			(1 << 29)
122# define GEN6_3DSTATE_SF_CULL_FRONT			(2 << 29)
123# define GEN6_3DSTATE_SF_CULL_BACK			(3 << 29)
124/* DW4 */
125# define GEN6_3DSTATE_SF_TRI_PROVOKE_SHIFT		29
126# define GEN6_3DSTATE_SF_LINE_PROVOKE_SHIFT		27
127# define GEN6_3DSTATE_SF_TRIFAN_PROVOKE_SHIFT		25
128
129
130#define GEN6_3DSTATE_WM				GEN5_3D(3, 0, 0x14)
131/* DW2 */
132# define GEN6_3DSTATE_WM_SAMPLER_COUNT_SHITF			27
133# define GEN6_3DSTATE_WM_BINDING_TABLE_ENTRY_COUNT_SHIFT	18
134/* DW4 */
135# define GEN6_3DSTATE_WM_DISPATCH_START_GRF_0_SHIFT		16
136/* DW5 */
137# define GEN6_3DSTATE_WM_MAX_THREADS_SHIFT			25
138# define GEN6_3DSTATE_WM_DISPATCH_ENABLE			(1 << 19)
139# define GEN6_3DSTATE_WM_16_DISPATCH_ENABLE			(1 << 1)
140# define GEN6_3DSTATE_WM_8_DISPATCH_ENABLE			(1 << 0)
141/* DW6 */
142# define GEN6_3DSTATE_WM_NUM_SF_OUTPUTS_SHIFT			20
143# define GEN6_3DSTATE_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC	(1 << 15)
144# define GEN6_3DSTATE_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC	(1 << 14)
145# define GEN6_3DSTATE_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC	(1 << 13)
146# define GEN6_3DSTATE_WM_PERSPECTIVE_SAMPLE_BARYCENTRIC		(1 << 12)
147# define GEN6_3DSTATE_WM_PERSPECTIVE_CENTROID_BARYCENTRIC	(1 << 11)
148# define GEN6_3DSTATE_WM_PERSPECTIVE_PIXEL_BARYCENTRIC		(1 << 10)
149
150
151#define GEN6_3DSTATE_CONSTANT_VS		GEN5_3D(3, 0, 0x15)
152#define GEN6_3DSTATE_CONSTANT_GS          	GEN5_3D(3, 0, 0x16)
153#define GEN6_3DSTATE_CONSTANT_PS          	GEN5_3D(3, 0, 0x17)
154
155#define GEN6_3DSTATE_SAMPLE_MASK		GEN5_3D(3, 0, 0x18)
156
157#define GEN6_3DSTATE_MULTISAMPLE		GEN5_3D(3, 1, 0x0d)
158/* DW1 */
159# define GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_CENTER		(0 << 4)
160# define GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_UPPER_LEFT	(1 << 4)
161# define GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_1			(0 << 1)
162# define GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_4			(2 << 1)
163# define GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_8			(3 << 1)
164
165#define PIPELINE_SELECT_3D		0
166#define PIPELINE_SELECT_MEDIA		1
167
168#define UF0_CS_REALLOC			(1 << 13)
169#define UF0_VFE_REALLOC			(1 << 12)
170#define UF0_SF_REALLOC			(1 << 11)
171#define UF0_CLIP_REALLOC		(1 << 10)
172#define UF0_GS_REALLOC			(1 << 9)
173#define UF0_VS_REALLOC			(1 << 8)
174#define UF1_CLIP_FENCE_SHIFT		20
175#define UF1_GS_FENCE_SHIFT		10
176#define UF1_VS_FENCE_SHIFT		0
177#define UF2_CS_FENCE_SHIFT		20
178#define UF2_VFE_FENCE_SHIFT		10
179#define UF2_SF_FENCE_SHIFT		0
180
181/* for GEN5_STATE_BASE_ADDRESS */
182#define BASE_ADDRESS_MODIFY		(1 << 0)
183
184/* for GEN5_3DSTATE_PIPELINED_POINTERS */
185#define GEN5_GS_DISABLE		       0
186#define GEN5_GS_ENABLE		       1
187#define GEN5_CLIP_DISABLE	       0
188#define GEN5_CLIP_ENABLE		       1
189
190/* for GEN5_PIPE_CONTROL */
191#define GEN5_PIPE_CONTROL_NOWRITE       (0 << 14)
192#define GEN5_PIPE_CONTROL_WRITE_QWORD   (1 << 14)
193#define GEN5_PIPE_CONTROL_WRITE_DEPTH   (2 << 14)
194#define GEN5_PIPE_CONTROL_WRITE_TIME    (3 << 14)
195#define GEN5_PIPE_CONTROL_DEPTH_STALL   (1 << 13)
196#define GEN5_PIPE_CONTROL_WC_FLUSH      (1 << 12)
197#define GEN5_PIPE_CONTROL_IS_FLUSH      (1 << 11)
198#define GEN5_PIPE_CONTROL_TC_FLUSH      (1 << 10)
199#define GEN5_PIPE_CONTROL_NOTIFY_ENABLE (1 << 8)
200#define GEN5_PIPE_CONTROL_GLOBAL_GTT    (1 << 2)
201#define GEN5_PIPE_CONTROL_LOCAL_PGTT    (0 << 2)
202#define GEN5_PIPE_CONTROL_DEPTH_CACHE_FLUSH	(1 << 0)
203
204/* VERTEX_BUFFER_STATE Structure */
205#define VB0_BUFFER_INDEX_SHIFT		27
206#define GEN6_VB0_BUFFER_INDEX_SHIFT	26
207#define VB0_VERTEXDATA			(0 << 26)
208#define VB0_INSTANCEDATA		(1 << 26)
209#define GEN6_VB0_VERTEXDATA		(0 << 20)
210#define GEN6_VB0_INSTANCEDATA		(1 << 20)
211#define VB0_BUFFER_PITCH_SHIFT		0
212
213/* VERTEX_ELEMENT_STATE Structure */
214#define VE0_VERTEX_BUFFER_INDEX_SHIFT	27
215#define GEN6_VE0_VERTEX_BUFFER_INDEX_SHIFT	26 /* for GEN6 */
216#define VE0_VALID			(1 << 26)
217#define GEN6_VE0_VALID			(1 << 25) /* for GEN6 */
218#define VE0_FORMAT_SHIFT		16
219#define VE0_OFFSET_SHIFT		0
220#define VE1_VFCOMPONENT_0_SHIFT		28
221#define VE1_VFCOMPONENT_1_SHIFT		24
222#define VE1_VFCOMPONENT_2_SHIFT		20
223#define VE1_VFCOMPONENT_3_SHIFT		16
224#define VE1_DESTINATION_ELEMENT_OFFSET_SHIFT	0
225
226/* 3DPRIMITIVE bits */
227#define GEN5_3DPRIMITIVE_VERTEX_SEQUENTIAL (0 << 15)
228#define GEN5_3DPRIMITIVE_VERTEX_RANDOM	  (1 << 15)
229/* Primitive types are in gen5_defines.h */
230#define GEN5_3DPRIMITIVE_TOPOLOGY_SHIFT	  10
231
232#define GEN5_SVG_CTL		       0x7400
233
234#define GEN5_SVG_CTL_GS_BA	       (0 << 8)
235#define GEN5_SVG_CTL_SS_BA	       (1 << 8)
236#define GEN5_SVG_CTL_IO_BA	       (2 << 8)
237#define GEN5_SVG_CTL_GS_AUB	       (3 << 8)
238#define GEN5_SVG_CTL_IO_AUB	       (4 << 8)
239#define GEN5_SVG_CTL_SIP		       (5 << 8)
240
241#define GEN5_SVG_RDATA		       0x7404
242#define GEN5_SVG_WORK_CTL	       0x7408
243
244#define GEN5_VF_CTL		       0x7500
245
246#define GEN5_VF_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
247#define GEN5_VF_CTL_SNAPSHOT_MUX_SELECT_THREADID	   (0 << 8)
248#define GEN5_VF_CTL_SNAPSHOT_MUX_SELECT_VF_DEBUG	   (1 << 8)
249#define GEN5_VF_CTL_SNAPSHOT_TYPE_VERTEX_SEQUENCE   (0 << 4)
250#define GEN5_VF_CTL_SNAPSHOT_TYPE_VERTEX_INDEX	   (1 << 4)
251#define GEN5_VF_CTL_SKIP_INITIAL_PRIMITIVES	   (1 << 3)
252#define GEN5_VF_CTL_MAX_PRIMITIVES_LIMIT_ENABLE	   (1 << 2)
253#define GEN5_VF_CTL_VERTEX_RANGE_LIMIT_ENABLE	   (1 << 1)
254#define GEN5_VF_CTL_SNAPSHOT_ENABLE	     	   (1 << 0)
255
256#define GEN5_VF_STRG_VAL		       0x7504
257#define GEN5_VF_STR_VL_OVR	       0x7508
258#define GEN5_VF_VC_OVR		       0x750c
259#define GEN5_VF_STR_PSKIP	       0x7510
260#define GEN5_VF_MAX_PRIM		       0x7514
261#define GEN5_VF_RDATA		       0x7518
262
263#define GEN5_VS_CTL		       0x7600
264#define GEN5_VS_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
265#define GEN5_VS_CTL_SNAPSHOT_MUX_VERTEX_0	   (0 << 8)
266#define GEN5_VS_CTL_SNAPSHOT_MUX_VERTEX_1	   (1 << 8)
267#define GEN5_VS_CTL_SNAPSHOT_MUX_VALID_COUNT	   (2 << 8)
268#define GEN5_VS_CTL_SNAPSHOT_MUX_VS_KERNEL_POINTER  (3 << 8)
269#define GEN5_VS_CTL_SNAPSHOT_ALL_THREADS		   (1 << 2)
270#define GEN5_VS_CTL_THREAD_SNAPSHOT_ENABLE	   (1 << 1)
271#define GEN5_VS_CTL_SNAPSHOT_ENABLE		   (1 << 0)
272
273#define GEN5_VS_STRG_VAL		       0x7604
274#define GEN5_VS_RDATA		       0x7608
275
276#define GEN5_SF_CTL		       0x7b00
277#define GEN5_SF_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
278#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_0_FF_ID	   (0 << 8)
279#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_0_REL_COUNT (1 << 8)
280#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_1_FF_ID	   (2 << 8)
281#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_1_REL_COUNT (3 << 8)
282#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_2_FF_ID	   (4 << 8)
283#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_2_REL_COUNT (5 << 8)
284#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_COUNT	   (6 << 8)
285#define GEN5_SF_CTL_SNAPSHOT_MUX_SF_KERNEL_POINTER  (7 << 8)
286#define GEN5_SF_CTL_MIN_MAX_PRIMITIVE_RANGE_ENABLE  (1 << 4)
287#define GEN5_SF_CTL_DEBUG_CLIP_RECTANGLE_ENABLE	   (1 << 3)
288#define GEN5_SF_CTL_SNAPSHOT_ALL_THREADS		   (1 << 2)
289#define GEN5_SF_CTL_THREAD_SNAPSHOT_ENABLE	   (1 << 1)
290#define GEN5_SF_CTL_SNAPSHOT_ENABLE		   (1 << 0)
291
292#define GEN5_SF_STRG_VAL		       0x7b04
293#define GEN5_SF_RDATA		       0x7b18
294
295#define GEN5_WIZ_CTL		       0x7c00
296#define GEN5_WIZ_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
297#define GEN5_WIZ_CTL_SUBSPAN_INSTANCE_SHIFT	   16
298#define GEN5_WIZ_CTL_SNAPSHOT_MUX_WIZ_KERNEL_POINTER   (0 << 8)
299#define GEN5_WIZ_CTL_SNAPSHOT_MUX_SUBSPAN_INSTANCE     (1 << 8)
300#define GEN5_WIZ_CTL_SNAPSHOT_MUX_PRIMITIVE_SEQUENCE   (2 << 8)
301#define GEN5_WIZ_CTL_SINGLE_SUBSPAN_DISPATCH	      (1 << 6)
302#define GEN5_WIZ_CTL_IGNORE_COLOR_SCOREBOARD_STALLS    (1 << 5)
303#define GEN5_WIZ_CTL_ENABLE_SUBSPAN_INSTANCE_COMPARE   (1 << 4)
304#define GEN5_WIZ_CTL_USE_UPSTREAM_SNAPSHOT_FLAG	      (1 << 3)
305#define GEN5_WIZ_CTL_SNAPSHOT_ALL_THREADS	      (1 << 2)
306#define GEN5_WIZ_CTL_THREAD_SNAPSHOT_ENABLE	      (1 << 1)
307#define GEN5_WIZ_CTL_SNAPSHOT_ENABLE		      (1 << 0)
308
309#define GEN5_WIZ_STRG_VAL			      0x7c04
310#define GEN5_WIZ_RDATA				      0x7c18
311
312#define GEN5_TS_CTL		       0x7e00
313#define GEN5_TS_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
314#define GEN5_TS_CTL_SNAPSHOT_MESSAGE_ERROR	   (0 << 8)
315#define GEN5_TS_CTL_SNAPSHOT_INTERFACE_DESCRIPTOR   (3 << 8)
316#define GEN5_TS_CTL_SNAPSHOT_ALL_CHILD_THREADS	   (1 << 2)
317#define GEN5_TS_CTL_SNAPSHOT_ALL_ROOT_THREADS  	   (1 << 1)
318#define GEN5_TS_CTL_SNAPSHOT_ENABLE		   (1 << 0)
319
320#define GEN5_TS_STRG_VAL		       0x7e04
321#define GEN5_TS_RDATA		       0x7e08
322
323#define GEN5_TD_CTL		       0x8000
324#define GEN5_TD_CTL_MUX_SHIFT	       8
325#define GEN5_TD_CTL_EXTERNAL_HALT_R0_DEBUG_MATCH	   (1 << 7)
326#define GEN5_TD_CTL_FORCE_EXTERNAL_HALT		   (1 << 6)
327#define GEN5_TD_CTL_EXCEPTION_MASK_OVERRIDE	   (1 << 5)
328#define GEN5_TD_CTL_FORCE_THREAD_BREAKPOINT_ENABLE  (1 << 4)
329#define GEN5_TD_CTL_BREAKPOINT_ENABLE		   (1 << 2)
330#define GEN5_TD_CTL2		       0x8004
331#define GEN5_TD_CTL2_ILLEGAL_OPCODE_EXCEPTION_OVERRIDE (1 << 28)
332#define GEN5_TD_CTL2_MASKSTACK_EXCEPTION_OVERRIDE      (1 << 26)
333#define GEN5_TD_CTL2_SOFTWARE_EXCEPTION_OVERRIDE	      (1 << 25)
334#define GEN5_TD_CTL2_ACTIVE_THREAD_LIMIT_SHIFT	      16
335#define GEN5_TD_CTL2_ACTIVE_THREAD_LIMIT_ENABLE	      (1 << 8)
336#define GEN5_TD_CTL2_THREAD_SPAWNER_EXECUTION_MASK_ENABLE (1 << 7)
337#define GEN5_TD_CTL2_WIZ_EXECUTION_MASK_ENABLE	      (1 << 6)
338#define GEN5_TD_CTL2_SF_EXECUTION_MASK_ENABLE	      (1 << 5)
339#define GEN5_TD_CTL2_CLIPPER_EXECUTION_MASK_ENABLE     (1 << 4)
340#define GEN5_TD_CTL2_GS_EXECUTION_MASK_ENABLE	      (1 << 3)
341#define GEN5_TD_CTL2_VS_EXECUTION_MASK_ENABLE	      (1 << 0)
342#define GEN5_TD_VF_VS_EMSK	       0x8008
343#define GEN5_TD_GS_EMSK		       0x800c
344#define GEN5_TD_CLIP_EMSK	       0x8010
345#define GEN5_TD_SF_EMSK		       0x8014
346#define GEN5_TD_WIZ_EMSK		       0x8018
347#define GEN5_TD_0_6_EHTRG_VAL	       0x801c
348#define GEN5_TD_0_7_EHTRG_VAL	       0x8020
349#define GEN5_TD_0_6_EHTRG_MSK           0x8024
350#define GEN5_TD_0_7_EHTRG_MSK	       0x8028
351#define GEN5_TD_RDATA		       0x802c
352#define GEN5_TD_TS_EMSK		       0x8030
353
354#define GEN5_EU_CTL		       0x8800
355#define GEN5_EU_CTL_SELECT_SHIFT	       16
356#define GEN5_EU_CTL_DATA_MUX_SHIFT      8
357#define GEN5_EU_ATT_0		       0x8810
358#define GEN5_EU_ATT_1		       0x8814
359#define GEN5_EU_ATT_DATA_0	       0x8820
360#define GEN5_EU_ATT_DATA_1	       0x8824
361#define GEN5_EU_ATT_CLR_0	       0x8830
362#define GEN5_EU_ATT_CLR_1	       0x8834
363#define GEN5_EU_RDATA		       0x8840
364
365/* 3D state:
366 */
367#define _3DOP_3DSTATE_PIPELINED       0x0
368#define _3DOP_3DSTATE_NONPIPELINED    0x1
369#define _3DOP_3DCONTROL               0x2
370#define _3DOP_3DPRIMITIVE             0x3
371
372#define _3DSTATE_PIPELINED_POINTERS       0x00
373#define _3DSTATE_BINDING_TABLE_POINTERS   0x01
374#define _3DSTATE_VERTEX_BUFFERS           0x08
375#define _3DSTATE_VERTEX_ELEMENTS          0x09
376#define _3DSTATE_INDEX_BUFFER             0x0A
377#define _3DSTATE_VF_STATISTICS            0x0B
378#define _3DSTATE_DRAWING_RECTANGLE            0x00
379#define _3DSTATE_CONSTANT_COLOR               0x01
380#define _3DSTATE_SAMPLER_PALETTE_LOAD         0x02
381#define _3DSTATE_CHROMA_KEY                   0x04
382#define _3DSTATE_DEPTH_BUFFER                 0x05
383#define _3DSTATE_POLY_STIPPLE_OFFSET          0x06
384#define _3DSTATE_POLY_STIPPLE_PATTERN         0x07
385#define _3DSTATE_LINE_STIPPLE                 0x08
386#define _3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP    0x09
387#define _3DCONTROL    0x00
388#define _3DPRIMITIVE  0x00
389
390#define _3DPRIM_POINTLIST         0x01
391#define _3DPRIM_LINELIST          0x02
392#define _3DPRIM_LINESTRIP         0x03
393#define _3DPRIM_TRILIST           0x04
394#define _3DPRIM_TRISTRIP          0x05
395#define _3DPRIM_TRIFAN            0x06
396#define _3DPRIM_QUADLIST          0x07
397#define _3DPRIM_QUADSTRIP         0x08
398#define _3DPRIM_LINELIST_ADJ      0x09
399#define _3DPRIM_LINESTRIP_ADJ     0x0A
400#define _3DPRIM_TRILIST_ADJ       0x0B
401#define _3DPRIM_TRISTRIP_ADJ      0x0C
402#define _3DPRIM_TRISTRIP_REVERSE  0x0D
403#define _3DPRIM_POLYGON           0x0E
404#define _3DPRIM_RECTLIST          0x0F
405#define _3DPRIM_LINELOOP          0x10
406#define _3DPRIM_POINTLIST_BF      0x11
407#define _3DPRIM_LINESTRIP_CONT    0x12
408#define _3DPRIM_LINESTRIP_BF      0x13
409#define _3DPRIM_LINESTRIP_CONT_BF 0x14
410#define _3DPRIM_TRIFAN_NOSTIPPLE  0x15
411
412#define _3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL 0
413#define _3DPRIM_VERTEXBUFFER_ACCESS_RANDOM     1
414
415#define GEN5_ANISORATIO_2     0
416#define GEN5_ANISORATIO_4     1
417#define GEN5_ANISORATIO_6     2
418#define GEN5_ANISORATIO_8     3
419#define GEN5_ANISORATIO_10    4
420#define GEN5_ANISORATIO_12    5
421#define GEN5_ANISORATIO_14    6
422#define GEN5_ANISORATIO_16    7
423
424#define GEN5_BLENDFACTOR_ONE                 0x1
425#define GEN5_BLENDFACTOR_SRC_COLOR           0x2
426#define GEN5_BLENDFACTOR_SRC_ALPHA           0x3
427#define GEN5_BLENDFACTOR_DST_ALPHA           0x4
428#define GEN5_BLENDFACTOR_DST_COLOR           0x5
429#define GEN5_BLENDFACTOR_SRC_ALPHA_SATURATE  0x6
430#define GEN5_BLENDFACTOR_CONST_COLOR         0x7
431#define GEN5_BLENDFACTOR_CONST_ALPHA         0x8
432#define GEN5_BLENDFACTOR_SRC1_COLOR          0x9
433#define GEN5_BLENDFACTOR_SRC1_ALPHA          0x0A
434#define GEN5_BLENDFACTOR_ZERO                0x11
435#define GEN5_BLENDFACTOR_INV_SRC_COLOR       0x12
436#define GEN5_BLENDFACTOR_INV_SRC_ALPHA       0x13
437#define GEN5_BLENDFACTOR_INV_DST_ALPHA       0x14
438#define GEN5_BLENDFACTOR_INV_DST_COLOR       0x15
439#define GEN5_BLENDFACTOR_INV_CONST_COLOR     0x17
440#define GEN5_BLENDFACTOR_INV_CONST_ALPHA     0x18
441#define GEN5_BLENDFACTOR_INV_SRC1_COLOR      0x19
442#define GEN5_BLENDFACTOR_INV_SRC1_ALPHA      0x1A
443
444#define GEN5_BLENDFUNCTION_ADD               0
445#define GEN5_BLENDFUNCTION_SUBTRACT          1
446#define GEN5_BLENDFUNCTION_REVERSE_SUBTRACT  2
447#define GEN5_BLENDFUNCTION_MIN               3
448#define GEN5_BLENDFUNCTION_MAX               4
449
450#define GEN5_ALPHATEST_FORMAT_UNORM8         0
451#define GEN5_ALPHATEST_FORMAT_FLOAT32        1
452
453#define GEN5_CHROMAKEY_KILL_ON_ANY_MATCH  0
454#define GEN5_CHROMAKEY_REPLACE_BLACK      1
455
456#define GEN5_CLIP_API_OGL     0
457#define GEN5_CLIP_API_DX      1
458
459#define GEN5_CLIPMODE_NORMAL              0
460#define GEN5_CLIPMODE_CLIP_ALL            1
461#define GEN5_CLIPMODE_CLIP_NON_REJECTED   2
462#define GEN5_CLIPMODE_REJECT_ALL          3
463#define GEN5_CLIPMODE_ACCEPT_ALL          4
464
465#define GEN5_CLIP_NDCSPACE     0
466#define GEN5_CLIP_SCREENSPACE  1
467
468#define GEN5_COMPAREFUNCTION_ALWAYS       0
469#define GEN5_COMPAREFUNCTION_NEVER        1
470#define GEN5_COMPAREFUNCTION_LESS         2
471#define GEN5_COMPAREFUNCTION_EQUAL        3
472#define GEN5_COMPAREFUNCTION_LEQUAL       4
473#define GEN5_COMPAREFUNCTION_GREATER      5
474#define GEN5_COMPAREFUNCTION_NOTEQUAL     6
475#define GEN5_COMPAREFUNCTION_GEQUAL       7
476
477#define GEN5_COVERAGE_PIXELS_HALF     0
478#define GEN5_COVERAGE_PIXELS_1        1
479#define GEN5_COVERAGE_PIXELS_2        2
480#define GEN5_COVERAGE_PIXELS_4        3
481
482#define GEN5_CULLMODE_BOTH        0
483#define GEN5_CULLMODE_NONE        1
484#define GEN5_CULLMODE_FRONT       2
485#define GEN5_CULLMODE_BACK        3
486
487#define GEN5_DEFAULTCOLOR_R8G8B8A8_UNORM      0
488#define GEN5_DEFAULTCOLOR_R32G32B32A32_FLOAT  1
489
490#define GEN5_DEPTHFORMAT_D32_FLOAT_S8X24_UINT     0
491#define GEN5_DEPTHFORMAT_D32_FLOAT                1
492#define GEN5_DEPTHFORMAT_D24_UNORM_S8_UINT        2
493#define GEN5_DEPTHFORMAT_D16_UNORM                5
494
495#define GEN5_FLOATING_POINT_IEEE_754        0
496#define GEN5_FLOATING_POINT_NON_IEEE_754    1
497
498#define GEN5_FRONTWINDING_CW      0
499#define GEN5_FRONTWINDING_CCW     1
500
501#define GEN5_INDEX_BYTE     0
502#define GEN5_INDEX_WORD     1
503#define GEN5_INDEX_DWORD    2
504
505#define GEN5_LOGICOPFUNCTION_CLEAR            0
506#define GEN5_LOGICOPFUNCTION_NOR              1
507#define GEN5_LOGICOPFUNCTION_AND_INVERTED     2
508#define GEN5_LOGICOPFUNCTION_COPY_INVERTED    3
509#define GEN5_LOGICOPFUNCTION_AND_REVERSE      4
510#define GEN5_LOGICOPFUNCTION_INVERT           5
511#define GEN5_LOGICOPFUNCTION_XOR              6
512#define GEN5_LOGICOPFUNCTION_NAND             7
513#define GEN5_LOGICOPFUNCTION_AND              8
514#define GEN5_LOGICOPFUNCTION_EQUIV            9
515#define GEN5_LOGICOPFUNCTION_NOOP             10
516#define GEN5_LOGICOPFUNCTION_OR_INVERTED      11
517#define GEN5_LOGICOPFUNCTION_COPY             12
518#define GEN5_LOGICOPFUNCTION_OR_REVERSE       13
519#define GEN5_LOGICOPFUNCTION_OR               14
520#define GEN5_LOGICOPFUNCTION_SET              15
521
522#define GEN5_MAPFILTER_NEAREST        0x0
523#define GEN5_MAPFILTER_LINEAR         0x1
524#define GEN5_MAPFILTER_ANISOTROPIC    0x2
525
526#define GEN5_MIPFILTER_NONE        0
527#define GEN5_MIPFILTER_NEAREST     1
528#define GEN5_MIPFILTER_LINEAR      3
529
530#define GEN5_POLYGON_FRONT_FACING     0
531#define GEN5_POLYGON_BACK_FACING      1
532
533#define GEN5_PREFILTER_ALWAYS     0x0
534#define GEN5_PREFILTER_NEVER      0x1
535#define GEN5_PREFILTER_LESS       0x2
536#define GEN5_PREFILTER_EQUAL      0x3
537#define GEN5_PREFILTER_LEQUAL     0x4
538#define GEN5_PREFILTER_GREATER    0x5
539#define GEN5_PREFILTER_NOTEQUAL   0x6
540#define GEN5_PREFILTER_GEQUAL     0x7
541
542#define GEN5_PROVOKING_VERTEX_0    0
543#define GEN5_PROVOKING_VERTEX_1    1
544#define GEN5_PROVOKING_VERTEX_2    2
545
546#define GEN5_RASTRULE_UPPER_LEFT  0
547#define GEN5_RASTRULE_UPPER_RIGHT 1
548
549#define GEN5_RENDERTARGET_CLAMPRANGE_UNORM    0
550#define GEN5_RENDERTARGET_CLAMPRANGE_SNORM    1
551#define GEN5_RENDERTARGET_CLAMPRANGE_FORMAT   2
552
553#define GEN5_STENCILOP_KEEP               0
554#define GEN5_STENCILOP_ZERO               1
555#define GEN5_STENCILOP_REPLACE            2
556#define GEN5_STENCILOP_INCRSAT            3
557#define GEN5_STENCILOP_DECRSAT            4
558#define GEN5_STENCILOP_INCR               5
559#define GEN5_STENCILOP_DECR               6
560#define GEN5_STENCILOP_INVERT             7
561
562#define GEN5_SURFACE_MIPMAPLAYOUT_BELOW   0
563#define GEN5_SURFACE_MIPMAPLAYOUT_RIGHT   1
564
565#define GEN5_SURFACEFORMAT_R32G32B32A32_FLOAT             0x000
566#define GEN5_SURFACEFORMAT_R32G32B32A32_SINT              0x001
567#define GEN5_SURFACEFORMAT_R32G32B32A32_UINT              0x002
568#define GEN5_SURFACEFORMAT_R32G32B32A32_UNORM             0x003
569#define GEN5_SURFACEFORMAT_R32G32B32A32_SNORM             0x004
570#define GEN5_SURFACEFORMAT_R64G64_FLOAT                   0x005
571#define GEN5_SURFACEFORMAT_R32G32B32X32_FLOAT             0x006
572#define GEN5_SURFACEFORMAT_R32G32B32A32_SSCALED           0x007
573#define GEN5_SURFACEFORMAT_R32G32B32A32_USCALED           0x008
574#define GEN5_SURFACEFORMAT_R32G32B32_FLOAT                0x040
575#define GEN5_SURFACEFORMAT_R32G32B32_SINT                 0x041
576#define GEN5_SURFACEFORMAT_R32G32B32_UINT                 0x042
577#define GEN5_SURFACEFORMAT_R32G32B32_UNORM                0x043
578#define GEN5_SURFACEFORMAT_R32G32B32_SNORM                0x044
579#define GEN5_SURFACEFORMAT_R32G32B32_SSCALED              0x045
580#define GEN5_SURFACEFORMAT_R32G32B32_USCALED              0x046
581#define GEN5_SURFACEFORMAT_R16G16B16A16_UNORM             0x080
582#define GEN5_SURFACEFORMAT_R16G16B16A16_SNORM             0x081
583#define GEN5_SURFACEFORMAT_R16G16B16A16_SINT              0x082
584#define GEN5_SURFACEFORMAT_R16G16B16A16_UINT              0x083
585#define GEN5_SURFACEFORMAT_R16G16B16A16_FLOAT             0x084
586#define GEN5_SURFACEFORMAT_R32G32_FLOAT                   0x085
587#define GEN5_SURFACEFORMAT_R32G32_SINT                    0x086
588#define GEN5_SURFACEFORMAT_R32G32_UINT                    0x087
589#define GEN5_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS       0x088
590#define GEN5_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT        0x089
591#define GEN5_SURFACEFORMAT_L32A32_FLOAT                   0x08A
592#define GEN5_SURFACEFORMAT_R32G32_UNORM                   0x08B
593#define GEN5_SURFACEFORMAT_R32G32_SNORM                   0x08C
594#define GEN5_SURFACEFORMAT_R64_FLOAT                      0x08D
595#define GEN5_SURFACEFORMAT_R16G16B16X16_UNORM             0x08E
596#define GEN5_SURFACEFORMAT_R16G16B16X16_FLOAT             0x08F
597#define GEN5_SURFACEFORMAT_A32X32_FLOAT                   0x090
598#define GEN5_SURFACEFORMAT_L32X32_FLOAT                   0x091
599#define GEN5_SURFACEFORMAT_I32X32_FLOAT                   0x092
600#define GEN5_SURFACEFORMAT_R16G16B16A16_SSCALED           0x093
601#define GEN5_SURFACEFORMAT_R16G16B16A16_USCALED           0x094
602#define GEN5_SURFACEFORMAT_R32G32_SSCALED                 0x095
603#define GEN5_SURFACEFORMAT_R32G32_USCALED                 0x096
604#define GEN5_SURFACEFORMAT_B8G8R8A8_UNORM                 0x0C0
605#define GEN5_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB            0x0C1
606#define GEN5_SURFACEFORMAT_R10G10B10A2_UNORM              0x0C2
607#define GEN5_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB         0x0C3
608#define GEN5_SURFACEFORMAT_R10G10B10A2_UINT               0x0C4
609#define GEN5_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM       0x0C5
610#define GEN5_SURFACEFORMAT_R8G8B8A8_UNORM                 0x0C7
611#define GEN5_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB            0x0C8
612#define GEN5_SURFACEFORMAT_R8G8B8A8_SNORM                 0x0C9
613#define GEN5_SURFACEFORMAT_R8G8B8A8_SINT                  0x0CA
614#define GEN5_SURFACEFORMAT_R8G8B8A8_UINT                  0x0CB
615#define GEN5_SURFACEFORMAT_R16G16_UNORM                   0x0CC
616#define GEN5_SURFACEFORMAT_R16G16_SNORM                   0x0CD
617#define GEN5_SURFACEFORMAT_R16G16_SINT                    0x0CE
618#define GEN5_SURFACEFORMAT_R16G16_UINT                    0x0CF
619#define GEN5_SURFACEFORMAT_R16G16_FLOAT                   0x0D0
620#define GEN5_SURFACEFORMAT_B10G10R10A2_UNORM              0x0D1
621#define GEN5_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB         0x0D2
622#define GEN5_SURFACEFORMAT_R11G11B10_FLOAT                0x0D3
623#define GEN5_SURFACEFORMAT_R32_SINT                       0x0D6
624#define GEN5_SURFACEFORMAT_R32_UINT                       0x0D7
625#define GEN5_SURFACEFORMAT_R32_FLOAT                      0x0D8
626#define GEN5_SURFACEFORMAT_R24_UNORM_X8_TYPELESS          0x0D9
627#define GEN5_SURFACEFORMAT_X24_TYPELESS_G8_UINT           0x0DA
628#define GEN5_SURFACEFORMAT_L16A16_UNORM                   0x0DF
629#define GEN5_SURFACEFORMAT_I24X8_UNORM                    0x0E0
630#define GEN5_SURFACEFORMAT_L24X8_UNORM                    0x0E1
631#define GEN5_SURFACEFORMAT_A24X8_UNORM                    0x0E2
632#define GEN5_SURFACEFORMAT_I32_FLOAT                      0x0E3
633#define GEN5_SURFACEFORMAT_L32_FLOAT                      0x0E4
634#define GEN5_SURFACEFORMAT_A32_FLOAT                      0x0E5
635#define GEN5_SURFACEFORMAT_B8G8R8X8_UNORM                 0x0E9
636#define GEN5_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB            0x0EA
637#define GEN5_SURFACEFORMAT_R8G8B8X8_UNORM                 0x0EB
638#define GEN5_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB            0x0EC
639#define GEN5_SURFACEFORMAT_R9G9B9E5_SHAREDEXP             0x0ED
640#define GEN5_SURFACEFORMAT_B10G10R10X2_UNORM              0x0EE
641#define GEN5_SURFACEFORMAT_L16A16_FLOAT                   0x0F0
642#define GEN5_SURFACEFORMAT_R32_UNORM                      0x0F1
643#define GEN5_SURFACEFORMAT_R32_SNORM                      0x0F2
644#define GEN5_SURFACEFORMAT_R10G10B10X2_USCALED            0x0F3
645#define GEN5_SURFACEFORMAT_R8G8B8A8_SSCALED               0x0F4
646#define GEN5_SURFACEFORMAT_R8G8B8A8_USCALED               0x0F5
647#define GEN5_SURFACEFORMAT_R16G16_SSCALED                 0x0F6
648#define GEN5_SURFACEFORMAT_R16G16_USCALED                 0x0F7
649#define GEN5_SURFACEFORMAT_R32_SSCALED                    0x0F8
650#define GEN5_SURFACEFORMAT_R32_USCALED                    0x0F9
651#define GEN5_SURFACEFORMAT_B5G6R5_UNORM                   0x100
652#define GEN5_SURFACEFORMAT_B5G6R5_UNORM_SRGB              0x101
653#define GEN5_SURFACEFORMAT_B5G5R5A1_UNORM                 0x102
654#define GEN5_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB            0x103
655#define GEN5_SURFACEFORMAT_B4G4R4A4_UNORM                 0x104
656#define GEN5_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB            0x105
657#define GEN5_SURFACEFORMAT_R8G8_UNORM                     0x106
658#define GEN5_SURFACEFORMAT_R8G8_SNORM                     0x107
659#define GEN5_SURFACEFORMAT_R8G8_SINT                      0x108
660#define GEN5_SURFACEFORMAT_R8G8_UINT                      0x109
661#define GEN5_SURFACEFORMAT_R16_UNORM                      0x10A
662#define GEN5_SURFACEFORMAT_R16_SNORM                      0x10B
663#define GEN5_SURFACEFORMAT_R16_SINT                       0x10C
664#define GEN5_SURFACEFORMAT_R16_UINT                       0x10D
665#define GEN5_SURFACEFORMAT_R16_FLOAT                      0x10E
666#define GEN5_SURFACEFORMAT_I16_UNORM                      0x111
667#define GEN5_SURFACEFORMAT_L16_UNORM                      0x112
668#define GEN5_SURFACEFORMAT_A16_UNORM                      0x113
669#define GEN5_SURFACEFORMAT_L8A8_UNORM                     0x114
670#define GEN5_SURFACEFORMAT_I16_FLOAT                      0x115
671#define GEN5_SURFACEFORMAT_L16_FLOAT                      0x116
672#define GEN5_SURFACEFORMAT_A16_FLOAT                      0x117
673#define GEN5_SURFACEFORMAT_R5G5_SNORM_B6_UNORM            0x119
674#define GEN5_SURFACEFORMAT_B5G5R5X1_UNORM                 0x11A
675#define GEN5_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB            0x11B
676#define GEN5_SURFACEFORMAT_R8G8_SSCALED                   0x11C
677#define GEN5_SURFACEFORMAT_R8G8_USCALED                   0x11D
678#define GEN5_SURFACEFORMAT_R16_SSCALED                    0x11E
679#define GEN5_SURFACEFORMAT_R16_USCALED                    0x11F
680#define GEN5_SURFACEFORMAT_R8_UNORM                       0x140
681#define GEN5_SURFACEFORMAT_R8_SNORM                       0x141
682#define GEN5_SURFACEFORMAT_R8_SINT                        0x142
683#define GEN5_SURFACEFORMAT_R8_UINT                        0x143
684#define GEN5_SURFACEFORMAT_A8_UNORM                       0x144
685#define GEN5_SURFACEFORMAT_I8_UNORM                       0x145
686#define GEN5_SURFACEFORMAT_L8_UNORM                       0x146
687#define GEN5_SURFACEFORMAT_P4A4_UNORM                     0x147
688#define GEN5_SURFACEFORMAT_A4P4_UNORM                     0x148
689#define GEN5_SURFACEFORMAT_R8_SSCALED                     0x149
690#define GEN5_SURFACEFORMAT_R8_USCALED                     0x14A
691#define GEN5_SURFACEFORMAT_R1_UINT                        0x181
692#define GEN5_SURFACEFORMAT_YCRCB_NORMAL                   0x182
693#define GEN5_SURFACEFORMAT_YCRCB_SWAPUVY                  0x183
694#define GEN5_SURFACEFORMAT_BC1_UNORM                      0x186
695#define GEN5_SURFACEFORMAT_BC2_UNORM                      0x187
696#define GEN5_SURFACEFORMAT_BC3_UNORM                      0x188
697#define GEN5_SURFACEFORMAT_BC4_UNORM                      0x189
698#define GEN5_SURFACEFORMAT_BC5_UNORM                      0x18A
699#define GEN5_SURFACEFORMAT_BC1_UNORM_SRGB                 0x18B
700#define GEN5_SURFACEFORMAT_BC2_UNORM_SRGB                 0x18C
701#define GEN5_SURFACEFORMAT_BC3_UNORM_SRGB                 0x18D
702#define GEN5_SURFACEFORMAT_MONO8                          0x18E
703#define GEN5_SURFACEFORMAT_YCRCB_SWAPUV                   0x18F
704#define GEN5_SURFACEFORMAT_YCRCB_SWAPY                    0x190
705#define GEN5_SURFACEFORMAT_DXT1_RGB                       0x191
706#define GEN5_SURFACEFORMAT_FXT1                           0x192
707#define GEN5_SURFACEFORMAT_R8G8B8_UNORM                   0x193
708#define GEN5_SURFACEFORMAT_R8G8B8_SNORM                   0x194
709#define GEN5_SURFACEFORMAT_R8G8B8_SSCALED                 0x195
710#define GEN5_SURFACEFORMAT_R8G8B8_USCALED                 0x196
711#define GEN5_SURFACEFORMAT_R64G64B64A64_FLOAT             0x197
712#define GEN5_SURFACEFORMAT_R64G64B64_FLOAT                0x198
713#define GEN5_SURFACEFORMAT_BC4_SNORM                      0x199
714#define GEN5_SURFACEFORMAT_BC5_SNORM                      0x19A
715#define GEN5_SURFACEFORMAT_R16G16B16_UNORM                0x19C
716#define GEN5_SURFACEFORMAT_R16G16B16_SNORM                0x19D
717#define GEN5_SURFACEFORMAT_R16G16B16_SSCALED              0x19E
718#define GEN5_SURFACEFORMAT_R16G16B16_USCALED              0x19F
719
720#define GEN5_SURFACERETURNFORMAT_FLOAT32  0
721#define GEN5_SURFACERETURNFORMAT_S1       1
722
723#define GEN5_SURFACE_1D      0
724#define GEN5_SURFACE_2D      1
725#define GEN5_SURFACE_3D      2
726#define GEN5_SURFACE_CUBE    3
727#define GEN5_SURFACE_BUFFER  4
728#define GEN5_SURFACE_NULL    7
729
730#define GEN5_BORDER_COLOR_MODE_DEFAULT	0
731#define GEN5_BORDER_COLOR_MODE_LEGACY	1
732
733#define GEN5_TEXCOORDMODE_WRAP            0
734#define GEN5_TEXCOORDMODE_MIRROR          1
735#define GEN5_TEXCOORDMODE_CLAMP           2
736#define GEN5_TEXCOORDMODE_CUBE            3
737#define GEN5_TEXCOORDMODE_CLAMP_BORDER    4
738#define GEN5_TEXCOORDMODE_MIRROR_ONCE     5
739
740#define GEN5_THREAD_PRIORITY_NORMAL   0
741#define GEN5_THREAD_PRIORITY_HIGH     1
742
743#define GEN5_TILEWALK_XMAJOR                 0
744#define GEN5_TILEWALK_YMAJOR                 1
745
746#define GEN5_VERTEX_SUBPIXEL_PRECISION_8BITS  0
747#define GEN5_VERTEX_SUBPIXEL_PRECISION_4BITS  1
748
749#define GEN5_VERTEXBUFFER_ACCESS_VERTEXDATA     0
750#define GEN5_VERTEXBUFFER_ACCESS_INSTANCEDATA   1
751
752#define VFCOMPONENT_NOSTORE      0
753#define VFCOMPONENT_STORE_SRC    1
754#define VFCOMPONENT_STORE_0      2
755#define VFCOMPONENT_STORE_1_FLT  3
756#define VFCOMPONENT_STORE_1_INT  4
757#define VFCOMPONENT_STORE_VID    5
758#define VFCOMPONENT_STORE_IID    6
759#define VFCOMPONENT_STORE_PID    7
760
761
762/* Execution Unit (EU) defines
763 */
764
765#define GEN5_ALIGN_1   0
766#define GEN5_ALIGN_16  1
767
768#define GEN5_ADDRESS_DIRECT                        0
769#define GEN5_ADDRESS_REGISTER_INDIRECT_REGISTER    1
770
771#define GEN5_CHANNEL_X     0
772#define GEN5_CHANNEL_Y     1
773#define GEN5_CHANNEL_Z     2
774#define GEN5_CHANNEL_W     3
775
776#define GEN5_COMPRESSION_NONE          0
777#define GEN5_COMPRESSION_2NDHALF       1
778#define GEN5_COMPRESSION_COMPRESSED    2
779
780#define GEN5_CONDITIONAL_NONE  0
781#define GEN5_CONDITIONAL_Z     1
782#define GEN5_CONDITIONAL_NZ    2
783#define GEN5_CONDITIONAL_EQ    1	/* Z */
784#define GEN5_CONDITIONAL_NEQ   2	/* NZ */
785#define GEN5_CONDITIONAL_G     3
786#define GEN5_CONDITIONAL_GE    4
787#define GEN5_CONDITIONAL_L     5
788#define GEN5_CONDITIONAL_LE    6
789#define GEN5_CONDITIONAL_C     7
790#define GEN5_CONDITIONAL_O     8
791
792#define GEN5_DEBUG_NONE        0
793#define GEN5_DEBUG_BREAKPOINT  1
794
795#define GEN5_DEPENDENCY_NORMAL         0
796#define GEN5_DEPENDENCY_NOTCLEARED     1
797#define GEN5_DEPENDENCY_NOTCHECKED     2
798#define GEN5_DEPENDENCY_DISABLE        3
799
800#define GEN5_EXECUTE_1     0
801#define GEN5_EXECUTE_2     1
802#define GEN5_EXECUTE_4     2
803#define GEN5_EXECUTE_8     3
804#define GEN5_EXECUTE_16    4
805#define GEN5_EXECUTE_32    5
806
807#define GEN5_HORIZONTAL_STRIDE_0   0
808#define GEN5_HORIZONTAL_STRIDE_1   1
809#define GEN5_HORIZONTAL_STRIDE_2   2
810#define GEN5_HORIZONTAL_STRIDE_4   3
811
812#define GEN5_INSTRUCTION_NORMAL    0
813#define GEN5_INSTRUCTION_SATURATE  1
814
815#define GEN5_MASK_ENABLE   0
816#define GEN5_MASK_DISABLE  1
817
818#define GEN5_OPCODE_MOV        1
819#define GEN5_OPCODE_SEL        2
820#define GEN5_OPCODE_NOT        4
821#define GEN5_OPCODE_AND        5
822#define GEN5_OPCODE_OR         6
823#define GEN5_OPCODE_XOR        7
824#define GEN5_OPCODE_SHR        8
825#define GEN5_OPCODE_SHL        9
826#define GEN5_OPCODE_RSR        10
827#define GEN5_OPCODE_RSL        11
828#define GEN5_OPCODE_ASR        12
829#define GEN5_OPCODE_CMP        16
830#define GEN5_OPCODE_JMPI       32
831#define GEN5_OPCODE_IF         34
832#define GEN5_OPCODE_IFF        35
833#define GEN5_OPCODE_ELSE       36
834#define GEN5_OPCODE_ENDIF      37
835#define GEN5_OPCODE_DO         38
836#define GEN5_OPCODE_WHILE      39
837#define GEN5_OPCODE_BREAK      40
838#define GEN5_OPCODE_CONTINUE   41
839#define GEN5_OPCODE_HALT       42
840#define GEN5_OPCODE_MSAVE      44
841#define GEN5_OPCODE_MRESTORE   45
842#define GEN5_OPCODE_PUSH       46
843#define GEN5_OPCODE_POP        47
844#define GEN5_OPCODE_WAIT       48
845#define GEN5_OPCODE_SEND       49
846#define GEN5_OPCODE_ADD        64
847#define GEN5_OPCODE_MUL        65
848#define GEN5_OPCODE_AVG        66
849#define GEN5_OPCODE_FRC        67
850#define GEN5_OPCODE_RNDU       68
851#define GEN5_OPCODE_RNDD       69
852#define GEN5_OPCODE_RNDE       70
853#define GEN5_OPCODE_RNDZ       71
854#define GEN5_OPCODE_MAC        72
855#define GEN5_OPCODE_MACH       73
856#define GEN5_OPCODE_LZD        74
857#define GEN5_OPCODE_SAD2       80
858#define GEN5_OPCODE_SADA2      81
859#define GEN5_OPCODE_DP4        84
860#define GEN5_OPCODE_DPH        85
861#define GEN5_OPCODE_DP3        86
862#define GEN5_OPCODE_DP2        87
863#define GEN5_OPCODE_DPA2       88
864#define GEN5_OPCODE_LINE       89
865#define GEN5_OPCODE_NOP        126
866
867#define GEN5_PREDICATE_NONE             0
868#define GEN5_PREDICATE_NORMAL           1
869#define GEN5_PREDICATE_ALIGN1_ANYV             2
870#define GEN5_PREDICATE_ALIGN1_ALLV             3
871#define GEN5_PREDICATE_ALIGN1_ANY2H            4
872#define GEN5_PREDICATE_ALIGN1_ALL2H            5
873#define GEN5_PREDICATE_ALIGN1_ANY4H            6
874#define GEN5_PREDICATE_ALIGN1_ALL4H            7
875#define GEN5_PREDICATE_ALIGN1_ANY8H            8
876#define GEN5_PREDICATE_ALIGN1_ALL8H            9
877#define GEN5_PREDICATE_ALIGN1_ANY16H           10
878#define GEN5_PREDICATE_ALIGN1_ALL16H           11
879#define GEN5_PREDICATE_ALIGN16_REPLICATE_X     2
880#define GEN5_PREDICATE_ALIGN16_REPLICATE_Y     3
881#define GEN5_PREDICATE_ALIGN16_REPLICATE_Z     4
882#define GEN5_PREDICATE_ALIGN16_REPLICATE_W     5
883#define GEN5_PREDICATE_ALIGN16_ANY4H           6
884#define GEN5_PREDICATE_ALIGN16_ALL4H           7
885
886#define GEN5_ARCHITECTURE_REGISTER_FILE    0
887#define GEN5_GENERAL_REGISTER_FILE         1
888#define GEN5_MESSAGE_REGISTER_FILE         2
889#define GEN5_IMMEDIATE_VALUE               3
890
891#define GEN5_REGISTER_TYPE_UD  0
892#define GEN5_REGISTER_TYPE_D   1
893#define GEN5_REGISTER_TYPE_UW  2
894#define GEN5_REGISTER_TYPE_W   3
895#define GEN5_REGISTER_TYPE_UB  4
896#define GEN5_REGISTER_TYPE_B   5
897#define GEN5_REGISTER_TYPE_VF  5	/* packed float vector, immediates only? */
898#define GEN5_REGISTER_TYPE_HF  6
899#define GEN5_REGISTER_TYPE_V   6	/* packed int vector, immediates only, uword dest only */
900#define GEN5_REGISTER_TYPE_F   7
901
902#define GEN5_ARF_NULL                  0x00
903#define GEN5_ARF_ADDRESS               0x10
904#define GEN5_ARF_ACCUMULATOR           0x20
905#define GEN5_ARF_FLAG                  0x30
906#define GEN5_ARF_MASK                  0x40
907#define GEN5_ARF_MASK_STACK            0x50
908#define GEN5_ARF_MASK_STACK_DEPTH      0x60
909#define GEN5_ARF_STATE                 0x70
910#define GEN5_ARF_CONTROL               0x80
911#define GEN5_ARF_NOTIFICATION_COUNT    0x90
912#define GEN5_ARF_IP                    0xA0
913
914#define GEN5_AMASK   0
915#define GEN5_IMASK   1
916#define GEN5_LMASK   2
917#define GEN5_CMASK   3
918
919
920
921#define GEN5_THREAD_NORMAL     0
922#define GEN5_THREAD_ATOMIC     1
923#define GEN5_THREAD_SWITCH     2
924
925#define GEN5_VERTICAL_STRIDE_0                 0
926#define GEN5_VERTICAL_STRIDE_1                 1
927#define GEN5_VERTICAL_STRIDE_2                 2
928#define GEN5_VERTICAL_STRIDE_4                 3
929#define GEN5_VERTICAL_STRIDE_8                 4
930#define GEN5_VERTICAL_STRIDE_16                5
931#define GEN5_VERTICAL_STRIDE_32                6
932#define GEN5_VERTICAL_STRIDE_64                7
933#define GEN5_VERTICAL_STRIDE_128               8
934#define GEN5_VERTICAL_STRIDE_256               9
935#define GEN5_VERTICAL_STRIDE_ONE_DIMENSIONAL   0xF
936
937#define GEN5_WIDTH_1       0
938#define GEN5_WIDTH_2       1
939#define GEN5_WIDTH_4       2
940#define GEN5_WIDTH_8       3
941#define GEN5_WIDTH_16      4
942
943#define GEN5_STATELESS_BUFFER_BOUNDARY_1K      0
944#define GEN5_STATELESS_BUFFER_BOUNDARY_2K      1
945#define GEN5_STATELESS_BUFFER_BOUNDARY_4K      2
946#define GEN5_STATELESS_BUFFER_BOUNDARY_8K      3
947#define GEN5_STATELESS_BUFFER_BOUNDARY_16K     4
948#define GEN5_STATELESS_BUFFER_BOUNDARY_32K     5
949#define GEN5_STATELESS_BUFFER_BOUNDARY_64K     6
950#define GEN5_STATELESS_BUFFER_BOUNDARY_128K    7
951#define GEN5_STATELESS_BUFFER_BOUNDARY_256K    8
952#define GEN5_STATELESS_BUFFER_BOUNDARY_512K    9
953#define GEN5_STATELESS_BUFFER_BOUNDARY_1M      10
954#define GEN5_STATELESS_BUFFER_BOUNDARY_2M      11
955
956#define GEN5_POLYGON_FACING_FRONT      0
957#define GEN5_POLYGON_FACING_BACK       1
958
959#define GEN5_MESSAGE_TARGET_NULL               0
960#define GEN5_MESSAGE_TARGET_MATH               1
961#define GEN5_MESSAGE_TARGET_SAMPLER            2
962#define GEN5_MESSAGE_TARGET_GATEWAY            3
963#define GEN5_MESSAGE_TARGET_DATAPORT_READ      4
964#define GEN5_MESSAGE_TARGET_DATAPORT_WRITE     5
965#define GEN5_MESSAGE_TARGET_URB                6
966#define GEN5_MESSAGE_TARGET_THREAD_SPAWNER     7
967
968#define GEN5_SAMPLER_RETURN_FORMAT_FLOAT32     0
969#define GEN5_SAMPLER_RETURN_FORMAT_UINT32      2
970#define GEN5_SAMPLER_RETURN_FORMAT_SINT32      3
971
972#define GEN5_SAMPLER_MESSAGE_SIMD8_SAMPLE              0
973#define GEN5_SAMPLER_MESSAGE_SIMD16_SAMPLE             0
974#define GEN5_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS        0
975#define GEN5_SAMPLER_MESSAGE_SIMD8_KILLPIX             1
976#define GEN5_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_LOD        1
977#define GEN5_SAMPLER_MESSAGE_SIMD16_SAMPLE_LOD         1
978#define GEN5_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_GRADIENTS  2
979#define GEN5_SAMPLER_MESSAGE_SIMD8_SAMPLE_GRADIENTS    2
980#define GEN5_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_COMPARE    0
981#define GEN5_SAMPLER_MESSAGE_SIMD16_SAMPLE_COMPARE     2
982#define GEN5_SAMPLER_MESSAGE_SIMD4X2_RESINFO           2
983#define GEN5_SAMPLER_MESSAGE_SIMD8_RESINFO             2
984#define GEN5_SAMPLER_MESSAGE_SIMD16_RESINFO            2
985#define GEN5_SAMPLER_MESSAGE_SIMD4X2_LD                3
986#define GEN5_SAMPLER_MESSAGE_SIMD8_LD                  3
987#define GEN5_SAMPLER_MESSAGE_SIMD16_LD                 3
988
989#define GEN5_DATAPORT_OWORD_BLOCK_1_OWORDLOW   0
990#define GEN5_DATAPORT_OWORD_BLOCK_1_OWORDHIGH  1
991#define GEN5_DATAPORT_OWORD_BLOCK_2_OWORDS     2
992#define GEN5_DATAPORT_OWORD_BLOCK_4_OWORDS     3
993#define GEN5_DATAPORT_OWORD_BLOCK_8_OWORDS     4
994
995#define GEN5_DATAPORT_OWORD_DUAL_BLOCK_1OWORD     0
996#define GEN5_DATAPORT_OWORD_DUAL_BLOCK_4OWORDS    2
997
998#define GEN5_DATAPORT_DWORD_SCATTERED_BLOCK_8DWORDS   2
999#define GEN5_DATAPORT_DWORD_SCATTERED_BLOCK_16DWORDS  3
1000
1001#define GEN5_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ          0
1002#define GEN5_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ     1
1003#define GEN5_DATAPORT_READ_MESSAGE_DWORD_BLOCK_READ          2
1004#define GEN5_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ      3
1005
1006#define GEN5_DATAPORT_READ_TARGET_DATA_CACHE      0
1007#define GEN5_DATAPORT_READ_TARGET_RENDER_CACHE    1
1008#define GEN5_DATAPORT_READ_TARGET_SAMPLER_CACHE   2
1009
1010#define GEN5_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE                0
1011#define GEN5_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE_REPLICATED     1
1012#define GEN5_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN01         2
1013#define GEN5_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN23         3
1014#define GEN5_DATAPORT_RENDER_TARGET_WRITE_SIMD8_SINGLE_SOURCE_SUBSPAN01       4
1015
1016#define GEN5_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE                0
1017#define GEN5_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE           1
1018#define GEN5_DATAPORT_WRITE_MESSAGE_DWORD_BLOCK_WRITE                2
1019#define GEN5_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE            3
1020#define GEN5_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE              4
1021#define GEN5_DATAPORT_WRITE_MESSAGE_STREAMED_VERTEX_BUFFER_WRITE     5
1022#define GEN5_DATAPORT_WRITE_MESSAGE_FLUSH_RENDER_CACHE               7
1023
1024#define GEN5_MATH_FUNCTION_INV                              1
1025#define GEN5_MATH_FUNCTION_LOG                              2
1026#define GEN5_MATH_FUNCTION_EXP                              3
1027#define GEN5_MATH_FUNCTION_SQRT                             4
1028#define GEN5_MATH_FUNCTION_RSQ                              5
1029#define GEN5_MATH_FUNCTION_SIN                              6 /* was 7 */
1030#define GEN5_MATH_FUNCTION_COS                              7 /* was 8 */
1031#define GEN5_MATH_FUNCTION_SINCOS                           8 /* was 6 */
1032#define GEN5_MATH_FUNCTION_TAN                              9
1033#define GEN5_MATH_FUNCTION_POW                              10
1034#define GEN5_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER   11
1035#define GEN5_MATH_FUNCTION_INT_DIV_QUOTIENT                 12
1036#define GEN5_MATH_FUNCTION_INT_DIV_REMAINDER                13
1037
1038#define GEN5_MATH_INTEGER_UNSIGNED     0
1039#define GEN5_MATH_INTEGER_SIGNED       1
1040
1041#define GEN5_MATH_PRECISION_FULL        0
1042#define GEN5_MATH_PRECISION_PARTIAL     1
1043
1044#define GEN5_MATH_SATURATE_NONE         0
1045#define GEN5_MATH_SATURATE_SATURATE     1
1046
1047#define GEN5_MATH_DATA_VECTOR  0
1048#define GEN5_MATH_DATA_SCALAR  1
1049
1050#define GEN5_URB_OPCODE_WRITE  0
1051
1052#define GEN5_URB_SWIZZLE_NONE          0
1053#define GEN5_URB_SWIZZLE_INTERLEAVE    1
1054#define GEN5_URB_SWIZZLE_TRANSPOSE     2
1055
1056#define GEN5_SCRATCH_SPACE_SIZE_1K     0
1057#define GEN5_SCRATCH_SPACE_SIZE_2K     1
1058#define GEN5_SCRATCH_SPACE_SIZE_4K     2
1059#define GEN5_SCRATCH_SPACE_SIZE_8K     3
1060#define GEN5_SCRATCH_SPACE_SIZE_16K    4
1061#define GEN5_SCRATCH_SPACE_SIZE_32K    5
1062#define GEN5_SCRATCH_SPACE_SIZE_64K    6
1063#define GEN5_SCRATCH_SPACE_SIZE_128K   7
1064#define GEN5_SCRATCH_SPACE_SIZE_256K   8
1065#define GEN5_SCRATCH_SPACE_SIZE_512K   9
1066#define GEN5_SCRATCH_SPACE_SIZE_1M     10
1067#define GEN5_SCRATCH_SPACE_SIZE_2M     11
1068
1069
1070
1071
1072#define CMD_URB_FENCE                 0x6000
1073#define CMD_CONST_BUFFER_STATE        0x6001
1074#define CMD_CONST_BUFFER              0x6002
1075
1076#define CMD_STATE_BASE_ADDRESS        0x6101
1077#define CMD_STATE_INSN_POINTER        0x6102
1078#define CMD_PIPELINE_SELECT           0x6104
1079
1080#define CMD_PIPELINED_STATE_POINTERS  0x7800
1081#define CMD_BINDING_TABLE_PTRS        0x7801
1082#define CMD_VERTEX_BUFFER             0x7808
1083#define CMD_VERTEX_ELEMENT            0x7809
1084#define CMD_INDEX_BUFFER              0x780a
1085#define CMD_VF_STATISTICS             0x780b
1086
1087#define CMD_DRAW_RECT                 0x7900
1088#define CMD_BLEND_CONSTANT_COLOR      0x7901
1089#define CMD_CHROMA_KEY                0x7904
1090#define CMD_DEPTH_BUFFER              0x7905
1091#define CMD_POLY_STIPPLE_OFFSET       0x7906
1092#define CMD_POLY_STIPPLE_PATTERN      0x7907
1093#define CMD_LINE_STIPPLE_PATTERN      0x7908
1094#define CMD_GLOBAL_DEPTH_OFFSET_CLAMP 0x7908
1095
1096#define CMD_PIPE_CONTROL              0x7a00
1097
1098#define CMD_3D_PRIM                   0x7b00
1099
1100#define CMD_MI_FLUSH                  0x0200
1101
1102
1103/* Various values from the R0 vertex header:
1104 */
1105#define R02_PRIM_END    0x1
1106#define R02_PRIM_START  0x2
1107
1108/* media pipeline */
1109
1110#define GEN5_VFE_MODE_GENERIC		0x0
1111#define GEN5_VFE_MODE_VLD_MPEG2		0x1
1112#define GEN5_VFE_MODE_IS			0x2
1113#define GEN5_VFE_MODE_AVC_MC		0x4
1114#define GEN5_VFE_MODE_AVC_IT		0x7
1115#define GEN5_VFE_MODE_VC1_IT		0xB
1116
1117#define GEN5_VFE_DEBUG_COUNTER_FREE	0
1118#define GEN5_VFE_DEBUG_COUNTER_FROZEN	1
1119#define GEN5_VFE_DEBUG_COUNTER_ONCE	2
1120#define GEN5_VFE_DEBUG_COUNTER_ALWAYS	3
1121
1122/* VLD_STATE */
1123#define GEN5_MPEG_TOP_FIELD		1
1124#define GEN5_MPEG_BOTTOM_FIELD		2
1125#define GEN5_MPEG_FRAME			3
1126#define GEN5_MPEG_QSCALE_LINEAR		0
1127#define GEN5_MPEG_QSCALE_NONLINEAR	1
1128#define GEN5_MPEG_ZIGZAG_SCAN		0
1129#define GEN5_MPEG_ALTER_VERTICAL_SCAN	1
1130#define GEN5_MPEG_I_PICTURE		1
1131#define GEN5_MPEG_P_PICTURE		2
1132#define GEN5_MPEG_B_PICTURE		3
1133
1134/* Command packets:
1135 */
1136struct header
1137{
1138   unsigned int length:16;
1139   unsigned int opcode:16;
1140};
1141
1142
1143union header_union
1144{
1145   struct header bits;
1146   unsigned int dword;
1147};
1148
1149struct gen5_3d_control
1150{
1151   struct
1152   {
1153      unsigned int length:8;
1154      unsigned int notify_enable:1;
1155      unsigned int pad:3;
1156      unsigned int wc_flush_enable:1;
1157      unsigned int depth_stall_enable:1;
1158      unsigned int operation:2;
1159      unsigned int opcode:16;
1160   } header;
1161
1162   struct
1163   {
1164      unsigned int pad:2;
1165      unsigned int dest_addr_type:1;
1166      unsigned int dest_addr:29;
1167   } dest;
1168
1169   unsigned int dword2;
1170   unsigned int dword3;
1171};
1172
1173
1174struct gen5_3d_primitive
1175{
1176   struct
1177   {
1178      unsigned int length:8;
1179      unsigned int pad:2;
1180      unsigned int topology:5;
1181      unsigned int indexed:1;
1182      unsigned int opcode:16;
1183   } header;
1184
1185   unsigned int verts_per_instance;
1186   unsigned int start_vert_location;
1187   unsigned int instance_count;
1188   unsigned int start_instance_location;
1189   unsigned int base_vert_location;
1190};
1191
1192/* These seem to be passed around as function args, so it works out
1193 * better to keep them as #defines:
1194 */
1195#define GEN5_FLUSH_READ_CACHE           0x1
1196#define GEN5_FLUSH_STATE_CACHE          0x2
1197#define GEN5_INHIBIT_FLUSH_RENDER_CACHE 0x4
1198#define GEN5_FLUSH_SNAPSHOT_COUNTERS    0x8
1199
1200struct gen5_mi_flush
1201{
1202   unsigned int flags:4;
1203   unsigned int pad:12;
1204   unsigned int opcode:16;
1205};
1206
1207struct gen5_vf_statistics
1208{
1209   unsigned int statistics_enable:1;
1210   unsigned int pad:15;
1211   unsigned int opcode:16;
1212};
1213
1214
1215
1216struct gen5_binding_table_pointers
1217{
1218   struct header header;
1219   unsigned int vs;
1220   unsigned int gs;
1221   unsigned int clp;
1222   unsigned int sf;
1223   unsigned int wm;
1224};
1225
1226
1227struct gen5_blend_constant_color
1228{
1229   struct header header;
1230   float blend_constant_color[4];
1231};
1232
1233
1234struct gen5_depthbuffer
1235{
1236   union header_union header;
1237
1238   union {
1239      struct {
1240	 unsigned int pitch:18;
1241	 unsigned int format:3;
1242	 unsigned int pad:4;
1243	 unsigned int depth_offset_disable:1;
1244	 unsigned int tile_walk:1;
1245	 unsigned int tiled_surface:1;
1246	 unsigned int pad2:1;
1247	 unsigned int surface_type:3;
1248      } bits;
1249      unsigned int dword;
1250   } dword1;
1251
1252   unsigned int dword2_base_addr;
1253
1254   union {
1255      struct {
1256	 unsigned int pad:1;
1257	 unsigned int mipmap_layout:1;
1258	 unsigned int lod:4;
1259	 unsigned int width:13;
1260	 unsigned int height:13;
1261      } bits;
1262      unsigned int dword;
1263   } dword3;
1264
1265   union {
1266      struct {
1267	 unsigned int pad:12;
1268	 unsigned int min_array_element:9;
1269	 unsigned int depth:11;
1270      } bits;
1271      unsigned int dword;
1272   } dword4;
1273};
1274
1275struct gen5_drawrect
1276{
1277   struct header header;
1278   unsigned int xmin:16;
1279   unsigned int ymin:16;
1280   unsigned int xmax:16;
1281   unsigned int ymax:16;
1282   unsigned int xorg:16;
1283   unsigned int yorg:16;
1284};
1285
1286
1287
1288
1289struct gen5_global_depth_offset_clamp
1290{
1291   struct header header;
1292   float depth_offset_clamp;
1293};
1294
1295struct gen5_indexbuffer
1296{
1297   union {
1298      struct
1299      {
1300	 unsigned int length:8;
1301	 unsigned int index_format:2;
1302	 unsigned int cut_index_enable:1;
1303	 unsigned int pad:5;
1304	 unsigned int opcode:16;
1305      } bits;
1306      unsigned int dword;
1307
1308   } header;
1309
1310   unsigned int buffer_start;
1311   unsigned int buffer_end;
1312};
1313
1314
1315struct gen5_line_stipple
1316{
1317   struct header header;
1318
1319   struct
1320   {
1321      unsigned int pattern:16;
1322      unsigned int pad:16;
1323   } bits0;
1324
1325   struct
1326   {
1327      unsigned int repeat_count:9;
1328      unsigned int pad:7;
1329      unsigned int inverse_repeat_count:16;
1330   } bits1;
1331};
1332
1333
1334struct gen5_pipelined_state_pointers
1335{
1336   struct header header;
1337
1338   struct {
1339      unsigned int pad:5;
1340      unsigned int offset:27;
1341   } vs;
1342
1343   struct
1344   {
1345      unsigned int enable:1;
1346      unsigned int pad:4;
1347      unsigned int offset:27;
1348   } gs;
1349
1350   struct
1351   {
1352      unsigned int enable:1;
1353      unsigned int pad:4;
1354      unsigned int offset:27;
1355   } clp;
1356
1357   struct
1358   {
1359      unsigned int pad:5;
1360      unsigned int offset:27;
1361   } sf;
1362
1363   struct
1364   {
1365      unsigned int pad:5;
1366      unsigned int offset:27;
1367   } wm;
1368
1369   struct
1370   {
1371      unsigned int pad:5;
1372      unsigned int offset:27; /* KW: check me! */
1373   } cc;
1374};
1375
1376
1377struct gen5_polygon_stipple_offset
1378{
1379   struct header header;
1380
1381   struct {
1382      unsigned int y_offset:5;
1383      unsigned int pad:3;
1384      unsigned int x_offset:5;
1385      unsigned int pad0:19;
1386   } bits0;
1387};
1388
1389
1390
1391struct gen5_polygon_stipple
1392{
1393   struct header header;
1394   unsigned int stipple[32];
1395};
1396
1397
1398
1399struct gen5_pipeline_select
1400{
1401   struct
1402   {
1403      unsigned int pipeline_select:1;
1404      unsigned int pad:15;
1405      unsigned int opcode:16;
1406   } header;
1407};
1408
1409
1410struct gen5_pipe_control
1411{
1412   struct
1413   {
1414      unsigned int length:8;
1415      unsigned int notify_enable:1;
1416      unsigned int pad:2;
1417      unsigned int instruction_state_cache_flush_enable:1;
1418      unsigned int write_cache_flush_enable:1;
1419      unsigned int depth_stall_enable:1;
1420      unsigned int post_sync_operation:2;
1421
1422      unsigned int opcode:16;
1423   } header;
1424
1425   struct
1426   {
1427      unsigned int pad:2;
1428      unsigned int dest_addr_type:1;
1429      unsigned int dest_addr:29;
1430   } bits1;
1431
1432   unsigned int data0;
1433   unsigned int data1;
1434};
1435
1436
1437struct gen5_urb_fence
1438{
1439   struct
1440   {
1441      unsigned int length:8;
1442      unsigned int vs_realloc:1;
1443      unsigned int gs_realloc:1;
1444      unsigned int clp_realloc:1;
1445      unsigned int sf_realloc:1;
1446      unsigned int vfe_realloc:1;
1447      unsigned int cs_realloc:1;
1448      unsigned int pad:2;
1449      unsigned int opcode:16;
1450   } header;
1451
1452   struct
1453   {
1454      unsigned int vs_fence:10;
1455      unsigned int gs_fence:10;
1456      unsigned int clp_fence:10;
1457      unsigned int pad:2;
1458   } bits0;
1459
1460   struct
1461   {
1462      unsigned int sf_fence:10;
1463      unsigned int vf_fence:10;
1464      unsigned int cs_fence:10;
1465      unsigned int pad:2;
1466   } bits1;
1467};
1468
1469struct gen5_constant_buffer_state /* previously gen5_command_streamer */
1470{
1471   struct header header;
1472
1473   struct
1474   {
1475      unsigned int nr_urb_entries:3;
1476      unsigned int pad:1;
1477      unsigned int urb_entry_size:5;
1478      unsigned int pad0:23;
1479   } bits0;
1480};
1481
1482struct gen5_constant_buffer
1483{
1484   struct
1485   {
1486      unsigned int length:8;
1487      unsigned int valid:1;
1488      unsigned int pad:7;
1489      unsigned int opcode:16;
1490   } header;
1491
1492   struct
1493   {
1494      unsigned int buffer_length:6;
1495      unsigned int buffer_address:26;
1496   } bits0;
1497};
1498
1499struct gen5_state_base_address
1500{
1501   struct header header;
1502
1503   struct
1504   {
1505      unsigned int modify_enable:1;
1506      unsigned int pad:4;
1507      unsigned int general_state_address:27;
1508   } bits0;
1509
1510   struct
1511   {
1512      unsigned int modify_enable:1;
1513      unsigned int pad:4;
1514      unsigned int surface_state_address:27;
1515   } bits1;
1516
1517   struct
1518   {
1519      unsigned int modify_enable:1;
1520      unsigned int pad:4;
1521      unsigned int indirect_object_state_address:27;
1522   } bits2;
1523
1524   struct
1525   {
1526      unsigned int modify_enable:1;
1527      unsigned int pad:11;
1528      unsigned int general_state_upper_bound:20;
1529   } bits3;
1530
1531   struct
1532   {
1533      unsigned int modify_enable:1;
1534      unsigned int pad:11;
1535      unsigned int indirect_object_state_upper_bound:20;
1536   } bits4;
1537};
1538
1539struct gen5_state_prefetch
1540{
1541   struct header header;
1542
1543   struct
1544   {
1545      unsigned int prefetch_count:3;
1546      unsigned int pad:3;
1547      unsigned int prefetch_pointer:26;
1548   } bits0;
1549};
1550
1551struct gen5_system_instruction_pointer
1552{
1553   struct header header;
1554
1555   struct
1556   {
1557      unsigned int pad:4;
1558      unsigned int system_instruction_pointer:28;
1559   } bits0;
1560};
1561
1562
1563
1564
1565/* State structs for the various fixed function units:
1566 */
1567
1568
1569struct thread0
1570{
1571   unsigned int pad0:1;
1572   unsigned int grf_reg_count:3;
1573   unsigned int pad1:2;
1574   unsigned int kernel_start_pointer:26;
1575};
1576
1577struct thread1
1578{
1579   unsigned int ext_halt_exception_enable:1;
1580   unsigned int sw_exception_enable:1;
1581   unsigned int mask_stack_exception_enable:1;
1582   unsigned int timeout_exception_enable:1;
1583   unsigned int illegal_op_exception_enable:1;
1584   unsigned int pad0:3;
1585   unsigned int depth_coef_urb_read_offset:6;	/* WM only */
1586   unsigned int pad1:2;
1587   unsigned int floating_point_mode:1;
1588   unsigned int thread_priority:1;
1589   unsigned int binding_table_entry_count:8;
1590   unsigned int pad3:5;
1591   unsigned int single_program_flow:1;
1592};
1593
1594struct thread2
1595{
1596   unsigned int per_thread_scratch_space:4;
1597   unsigned int pad0:6;
1598   unsigned int scratch_space_base_pointer:22;
1599};
1600
1601
1602struct thread3
1603{
1604   unsigned int dispatch_grf_start_reg:4;
1605   unsigned int urb_entry_read_offset:6;
1606   unsigned int pad0:1;
1607   unsigned int urb_entry_read_length:6;
1608   unsigned int pad1:1;
1609   unsigned int const_urb_entry_read_offset:6;
1610   unsigned int pad2:1;
1611   unsigned int const_urb_entry_read_length:6;
1612   unsigned int pad3:1;
1613};
1614
1615
1616
1617struct gen5_clip_unit_state
1618{
1619   struct thread0 thread0;
1620   struct thread1 thread1;
1621   struct thread2 thread2;
1622   struct thread3 thread3;
1623
1624   struct
1625   {
1626      unsigned int pad0:9;
1627      unsigned int gs_output_stats:1; /* not always */
1628      unsigned int stats_enable:1;
1629      unsigned int nr_urb_entries:7;
1630      unsigned int pad1:1;
1631      unsigned int urb_entry_allocation_size:5;
1632      unsigned int pad2:1;
1633      unsigned int max_threads:6; 	/* may be less */
1634      unsigned int pad3:1;
1635   } thread4;
1636
1637   struct
1638   {
1639      unsigned int pad0:13;
1640      unsigned int clip_mode:3;
1641      unsigned int userclip_enable_flags:8;
1642      unsigned int userclip_must_clip:1;
1643      unsigned int pad1:1;
1644      unsigned int guard_band_enable:1;
1645      unsigned int viewport_z_clip_enable:1;
1646      unsigned int viewport_xy_clip_enable:1;
1647      unsigned int vertex_position_space:1;
1648      unsigned int api_mode:1;
1649      unsigned int pad2:1;
1650   } clip5;
1651
1652   struct
1653   {
1654      unsigned int pad0:5;
1655      unsigned int clipper_viewport_state_ptr:27;
1656   } clip6;
1657
1658
1659   float viewport_xmin;
1660   float viewport_xmax;
1661   float viewport_ymin;
1662   float viewport_ymax;
1663};
1664
1665
1666
1667struct gen5_cc_unit_state
1668{
1669   struct
1670   {
1671      unsigned int pad0:3;
1672      unsigned int bf_stencil_pass_depth_pass_op:3;
1673      unsigned int bf_stencil_pass_depth_fail_op:3;
1674      unsigned int bf_stencil_fail_op:3;
1675      unsigned int bf_stencil_func:3;
1676      unsigned int bf_stencil_enable:1;
1677      unsigned int pad1:2;
1678      unsigned int stencil_write_enable:1;
1679      unsigned int stencil_pass_depth_pass_op:3;
1680      unsigned int stencil_pass_depth_fail_op:3;
1681      unsigned int stencil_fail_op:3;
1682      unsigned int stencil_func:3;
1683      unsigned int stencil_enable:1;
1684   } cc0;
1685
1686
1687   struct
1688   {
1689      unsigned int bf_stencil_ref:8;
1690      unsigned int stencil_write_mask:8;
1691      unsigned int stencil_test_mask:8;
1692      unsigned int stencil_ref:8;
1693   } cc1;
1694
1695
1696   struct
1697   {
1698      unsigned int logicop_enable:1;
1699      unsigned int pad0:10;
1700      unsigned int depth_write_enable:1;
1701      unsigned int depth_test_function:3;
1702      unsigned int depth_test:1;
1703      unsigned int bf_stencil_write_mask:8;
1704      unsigned int bf_stencil_test_mask:8;
1705   } cc2;
1706
1707
1708   struct
1709   {
1710      unsigned int pad0:8;
1711      unsigned int alpha_test_func:3;
1712      unsigned int alpha_test:1;
1713      unsigned int blend_enable:1;
1714      unsigned int ia_blend_enable:1;
1715      unsigned int pad1:1;
1716      unsigned int alpha_test_format:1;
1717      unsigned int pad2:16;
1718   } cc3;
1719
1720   struct
1721   {
1722      unsigned int pad0:5;
1723      unsigned int cc_viewport_state_offset:27;
1724   } cc4;
1725
1726   struct
1727   {
1728      unsigned int pad0:2;
1729      unsigned int ia_dest_blend_factor:5;
1730      unsigned int ia_src_blend_factor:5;
1731      unsigned int ia_blend_function:3;
1732      unsigned int statistics_enable:1;
1733      unsigned int logicop_func:4;
1734      unsigned int pad1:11;
1735      unsigned int dither_enable:1;
1736   } cc5;
1737
1738   struct
1739   {
1740      unsigned int clamp_post_alpha_blend:1;
1741      unsigned int clamp_pre_alpha_blend:1;
1742      unsigned int clamp_range:2;
1743      unsigned int pad0:11;
1744      unsigned int y_dither_offset:2;
1745      unsigned int x_dither_offset:2;
1746      unsigned int dest_blend_factor:5;
1747      unsigned int src_blend_factor:5;
1748      unsigned int blend_function:3;
1749   } cc6;
1750
1751   struct {
1752      union {
1753	 float f;
1754	 unsigned char ub[4];
1755      } alpha_ref;
1756   } cc7;
1757};
1758
1759
1760
1761struct gen5_sf_unit_state
1762{
1763   struct thread0 thread0;
1764   struct {
1765      unsigned int pad0:7;
1766      unsigned int sw_exception_enable:1;
1767      unsigned int pad1:3;
1768      unsigned int mask_stack_exception_enable:1;
1769      unsigned int pad2:1;
1770      unsigned int illegal_op_exception_enable:1;
1771      unsigned int pad3:2;
1772      unsigned int floating_point_mode:1;
1773      unsigned int thread_priority:1;
1774      unsigned int binding_table_entry_count:8;
1775      unsigned int pad4:5;
1776      unsigned int single_program_flow:1;
1777   } sf1;
1778
1779   struct thread2 thread2;
1780   struct thread3 thread3;
1781
1782   struct
1783   {
1784      unsigned int pad0:10;
1785      unsigned int stats_enable:1;
1786      unsigned int nr_urb_entries:7;
1787      unsigned int pad1:1;
1788      unsigned int urb_entry_allocation_size:5;
1789      unsigned int pad2:1;
1790      unsigned int max_threads:6;
1791      unsigned int pad3:1;
1792   } thread4;
1793
1794   struct
1795   {
1796      unsigned int front_winding:1;
1797      unsigned int viewport_transform:1;
1798      unsigned int pad0:3;
1799      unsigned int sf_viewport_state_offset:27;
1800   } sf5;
1801
1802   struct
1803   {
1804      unsigned int pad0:9;
1805      unsigned int dest_org_vbias:4;
1806      unsigned int dest_org_hbias:4;
1807      unsigned int scissor:1;
1808      unsigned int disable_2x2_trifilter:1;
1809      unsigned int disable_zero_pix_trifilter:1;
1810      unsigned int point_rast_rule:2;
1811      unsigned int line_endcap_aa_region_width:2;
1812      unsigned int line_width:4;
1813      unsigned int fast_scissor_disable:1;
1814      unsigned int cull_mode:2;
1815      unsigned int aa_enable:1;
1816   } sf6;
1817
1818   struct
1819   {
1820      unsigned int point_size:11;
1821      unsigned int use_point_size_state:1;
1822      unsigned int subpixel_precision:1;
1823      unsigned int sprite_point:1;
1824      unsigned int pad0:11;
1825      unsigned int trifan_pv:2;
1826      unsigned int linestrip_pv:2;
1827      unsigned int tristrip_pv:2;
1828      unsigned int line_last_pixel_enable:1;
1829   } sf7;
1830
1831};
1832
1833
1834struct gen5_gs_unit_state
1835{
1836   struct thread0 thread0;
1837   struct thread1 thread1;
1838   struct thread2 thread2;
1839   struct thread3 thread3;
1840
1841   struct
1842   {
1843      unsigned int pad0:10;
1844      unsigned int stats_enable:1;
1845      unsigned int nr_urb_entries:7;
1846      unsigned int pad1:1;
1847      unsigned int urb_entry_allocation_size:5;
1848      unsigned int pad2:1;
1849      unsigned int max_threads:1;
1850      unsigned int pad3:6;
1851   } thread4;
1852
1853   struct
1854   {
1855      unsigned int sampler_count:3;
1856      unsigned int pad0:2;
1857      unsigned int sampler_state_pointer:27;
1858   } gs5;
1859
1860
1861   struct
1862   {
1863      unsigned int max_vp_index:4;
1864      unsigned int pad0:26;
1865      unsigned int reorder_enable:1;
1866      unsigned int pad1:1;
1867   } gs6;
1868};
1869
1870
1871struct gen5_vs_unit_state
1872{
1873   struct thread0 thread0;
1874   struct thread1 thread1;
1875   struct thread2 thread2;
1876   struct thread3 thread3;
1877
1878   struct
1879   {
1880      unsigned int pad0:10;
1881      unsigned int stats_enable:1;
1882      unsigned int nr_urb_entries:7;
1883      unsigned int pad1:1;
1884      unsigned int urb_entry_allocation_size:5;
1885      unsigned int pad2:1;
1886      unsigned int max_threads:4;
1887      unsigned int pad3:3;
1888   } thread4;
1889
1890   struct
1891   {
1892      unsigned int sampler_count:3;
1893      unsigned int pad0:2;
1894      unsigned int sampler_state_pointer:27;
1895   } vs5;
1896
1897   struct
1898   {
1899      unsigned int vs_enable:1;
1900      unsigned int vert_cache_disable:1;
1901      unsigned int pad0:30;
1902   } vs6;
1903};
1904
1905
1906struct gen5_wm_unit_state
1907{
1908   struct thread0 thread0;
1909   struct thread1 thread1;
1910   struct thread2 thread2;
1911   struct thread3 thread3;
1912
1913   struct {
1914      unsigned int stats_enable:1;
1915      unsigned int pad0:1;
1916      unsigned int sampler_count:3;
1917      unsigned int sampler_state_pointer:27;
1918   } wm4;
1919
1920   struct
1921   {
1922      unsigned int enable_8_pix:1;
1923      unsigned int enable_16_pix:1;
1924      unsigned int enable_32_pix:1;
1925      unsigned int pad0:7;
1926      unsigned int legacy_global_depth_bias:1;
1927      unsigned int line_stipple:1;
1928      unsigned int depth_offset:1;
1929      unsigned int polygon_stipple:1;
1930      unsigned int line_aa_region_width:2;
1931      unsigned int line_endcap_aa_region_width:2;
1932      unsigned int early_depth_test:1;
1933      unsigned int thread_dispatch_enable:1;
1934      unsigned int program_uses_depth:1;
1935      unsigned int program_computes_depth:1;
1936      unsigned int program_uses_killpixel:1;
1937      unsigned int legacy_line_rast: 1;
1938      unsigned int transposed_urb_read:1;
1939      unsigned int max_threads:7;
1940   } wm5;
1941
1942   float global_depth_offset_constant;
1943   float global_depth_offset_scale;
1944
1945   struct {
1946      unsigned int pad0:1;
1947      unsigned int grf_reg_count_1:3;
1948      unsigned int pad1:2;
1949      unsigned int kernel_start_pointer_1:26;
1950   } wm8;
1951
1952   struct {
1953      unsigned int pad0:1;
1954      unsigned int grf_reg_count_2:3;
1955      unsigned int pad1:2;
1956      unsigned int kernel_start_pointer_2:26;
1957   } wm9;
1958
1959   struct {
1960      unsigned int pad0:1;
1961      unsigned int grf_reg_count_3:3;
1962      unsigned int pad1:2;
1963      unsigned int kernel_start_pointer_3:26;
1964   } wm10;
1965};
1966
1967struct gen5_wm_unit_state_padded {
1968	struct gen5_wm_unit_state state;
1969	char pad[64 - sizeof(struct gen5_wm_unit_state)];
1970};
1971
1972/* The hardware supports two different modes for border color. The
1973 * default (OpenGL) mode uses floating-point color channels, while the
1974 * legacy mode uses 4 bytes.
1975 *
1976 * More significantly, the legacy mode respects the components of the
1977 * border color for channels not present in the source, (whereas the
1978 * default mode will ignore the border color's alpha channel and use
1979 * alpha==1 for an RGB source, for example).
1980 *
1981 * The legacy mode matches the semantics specified by the Render
1982 * extension.
1983 */
1984struct gen5_sampler_default_border_color {
1985   float color[4];
1986};
1987
1988struct gen5_sampler_legacy_border_color {
1989   uint8_t color[4];
1990};
1991
1992struct gen5_sampler_state {
1993   struct {
1994      unsigned int shadow_function:3;
1995      unsigned int lod_bias:11;
1996      unsigned int min_filter:3;
1997      unsigned int mag_filter:3;
1998      unsigned int mip_filter:2;
1999      unsigned int base_level:5;
2000      unsigned int pad:1;
2001      unsigned int lod_preclamp:1;
2002      unsigned int border_color_mode:1;
2003      unsigned int pad0:1;
2004      unsigned int disable:1;
2005   } ss0;
2006
2007   struct {
2008      unsigned int r_wrap_mode:3;
2009      unsigned int t_wrap_mode:3;
2010      unsigned int s_wrap_mode:3;
2011      unsigned int pad:3;
2012      unsigned int max_lod:10;
2013      unsigned int min_lod:10;
2014   } ss1;
2015
2016   struct {
2017      unsigned int pad:5;
2018      unsigned int border_color_pointer:27;
2019   } ss2;
2020
2021   struct {
2022      uint32_t pad:13;
2023      uint32_t address_round:6;
2024      uint32_t max_aniso:3;
2025      uint32_t chroma_key_mode:1;
2026      uint32_t chroma_key_index:2;
2027      uint32_t chroma_key_enable:1;
2028      uint32_t mbz:6;
2029   } ss3;
2030};
2031
2032
2033struct gen5_clipper_viewport
2034{
2035   float xmin;
2036   float xmax;
2037   float ymin;
2038   float ymax;
2039};
2040
2041struct gen5_cc_viewport
2042{
2043   float min_depth;
2044   float max_depth;
2045};
2046
2047struct gen5_sf_viewport
2048{
2049   struct {
2050      float m00;
2051      float m11;
2052      float m22;
2053      float m30;
2054      float m31;
2055      float m32;
2056   } viewport;
2057
2058   struct {
2059      short xmin;
2060      short ymin;
2061      short xmax;
2062      short ymax;
2063   } scissor;
2064};
2065
2066/* Documented in the subsystem/shared-functions/sampler chapter...
2067 */
2068struct gen5_surface_state
2069{
2070   struct {
2071      unsigned int cube_pos_z:1;
2072      unsigned int cube_neg_z:1;
2073      unsigned int cube_pos_y:1;
2074      unsigned int cube_neg_y:1;
2075      unsigned int cube_pos_x:1;
2076      unsigned int cube_neg_x:1;
2077      unsigned int pad:3;
2078      unsigned int render_cache_read_mode:1;
2079      unsigned int mipmap_layout_mode:1;
2080      unsigned int vert_line_stride_ofs:1;
2081      unsigned int vert_line_stride:1;
2082      unsigned int color_blend:1;
2083      unsigned int writedisable_blue:1;
2084      unsigned int writedisable_green:1;
2085      unsigned int writedisable_red:1;
2086      unsigned int writedisable_alpha:1;
2087      unsigned int surface_format:9;
2088      unsigned int data_return_format:1;
2089      unsigned int pad0:1;
2090      unsigned int surface_type:3;
2091   } ss0;
2092
2093   struct {
2094      unsigned int base_addr;
2095   } ss1;
2096
2097   struct {
2098      unsigned int render_target_rotation:2;
2099      unsigned int mip_count:4;
2100      unsigned int width:13;
2101      unsigned int height:13;
2102   } ss2;
2103
2104   struct {
2105      unsigned int tile_walk:1;
2106      unsigned int tiled_surface:1;
2107      unsigned int pad:1;
2108      unsigned int pitch:18;
2109      unsigned int depth:11;
2110   } ss3;
2111
2112   struct {
2113      unsigned int pad:19;
2114      unsigned int min_array_elt:9;
2115      unsigned int min_lod:4;
2116   } ss4;
2117
2118   struct {
2119       unsigned int pad:20;
2120       unsigned int y_offset:4;
2121       unsigned int pad2:1;
2122       unsigned int x_offset:7;
2123   } ss5;
2124};
2125
2126/* Surface state DW0 */
2127#define GEN5_SURFACE_RC_READ_WRITE       (1 << 8)
2128#define GEN5_SURFACE_MIPLAYOUT_SHIFT     10
2129#define GEN5_SURFACE_MIPMAPLAYOUT_BELOW   0
2130#define GEN5_SURFACE_MIPMAPLAYOUT_RIGHT   1
2131#define GEN5_SURFACE_CUBEFACE_ENABLES    0x3f
2132#define GEN5_SURFACE_BLEND_ENABLED       (1 << 13)
2133#define GEN5_SURFACE_WRITEDISABLE_B_SHIFT        14
2134#define GEN5_SURFACE_WRITEDISABLE_G_SHIFT        15
2135#define GEN5_SURFACE_WRITEDISABLE_R_SHIFT        16
2136#define GEN5_SURFACE_WRITEDISABLE_A_SHIFT        17
2137#define GEN5_SURFACE_FORMAT_SHIFT        18
2138#define GEN5_SURFACE_FORMAT_MASK         INTEL_MASK(26, 18)
2139
2140#define GEN5_SURFACE_TYPE_SHIFT          29
2141#define GEN5_SURFACE_TYPE_MASK           GEN5_MASK(31, 29)
2142#define GEN5_SURFACE_1D      0
2143#define GEN5_SURFACE_2D      1
2144#define GEN5_SURFACE_3D      2
2145#define GEN5_SURFACE_CUBE    3
2146#define GEN5_SURFACE_BUFFER  4
2147#define GEN5_SURFACE_NULL    7
2148
2149/* Surface state DW2 */
2150#define GEN5_SURFACE_HEIGHT_SHIFT        19
2151#define GEN5_SURFACE_HEIGHT_MASK         GEN5_MASK(31, 19)
2152#define GEN5_SURFACE_WIDTH_SHIFT         6
2153#define GEN5_SURFACE_WIDTH_MASK          GEN5_MASK(18, 6)
2154#define GEN5_SURFACE_LOD_SHIFT           2
2155#define GEN5_SURFACE_LOD_MASK            GEN5_MASK(5, 2)
2156
2157/* Surface state DW3 */
2158#define GEN5_SURFACE_DEPTH_SHIFT         21
2159#define GEN5_SURFACE_DEPTH_MASK          GEN5_MASK(31, 21)
2160#define GEN5_SURFACE_PITCH_SHIFT         3
2161#define GEN5_SURFACE_PITCH_MASK          GEN5_MASK(19, 3)
2162#define GEN5_SURFACE_TILED               (1 << 1)
2163#define GEN5_SURFACE_TILED_Y             (1 << 0)
2164
2165/* Surface state DW4 */
2166#define GEN5_SURFACE_MIN_LOD_SHIFT       28
2167#define GEN5_SURFACE_MIN_LOD_MASK        GEN5_MASK(31, 28)
2168
2169/* Surface state DW5 */
2170#define GEN5_SURFACE_X_OFFSET_SHIFT      25
2171#define GEN5_SURFACE_X_OFFSET_MASK       GEN5_MASK(31, 25)
2172#define GEN5_SURFACE_Y_OFFSET_SHIFT      20
2173#define GEN5_SURFACE_Y_OFFSET_MASK       GEN5_MASK(23, 20)
2174
2175struct gen5_vertex_buffer_state
2176{
2177   struct {
2178      unsigned int pitch:11;
2179      unsigned int pad:15;
2180      unsigned int access_type:1;
2181      unsigned int vb_index:5;
2182   } vb0;
2183
2184   unsigned int start_addr;
2185   unsigned int max_index;
2186#if 1
2187   unsigned int instance_data_step_rate; /* not included for sequential/random vertices? */
2188#endif
2189};
2190
2191#define GEN5_VBP_MAX 17
2192
2193struct gen5_vb_array_state {
2194   struct header header;
2195   struct gen5_vertex_buffer_state vb[GEN5_VBP_MAX];
2196};
2197
2198
2199struct gen5_vertex_element_state
2200{
2201   struct
2202   {
2203      unsigned int src_offset:11;
2204      unsigned int pad:5;
2205      unsigned int src_format:9;
2206      unsigned int pad0:1;
2207      unsigned int valid:1;
2208      unsigned int vertex_buffer_index:5;
2209   } ve0;
2210
2211   struct
2212   {
2213      unsigned int dst_offset:8;
2214      unsigned int pad:8;
2215      unsigned int vfcomponent3:4;
2216      unsigned int vfcomponent2:4;
2217      unsigned int vfcomponent1:4;
2218      unsigned int vfcomponent0:4;
2219   } ve1;
2220};
2221
2222#define GEN5_VEP_MAX 18
2223
2224struct gen5_vertex_element_packet {
2225   struct header header;
2226   struct gen5_vertex_element_state ve[GEN5_VEP_MAX]; /* note: less than _TNL_ATTRIB_MAX */
2227};
2228
2229
2230struct gen5_urb_immediate {
2231   unsigned int opcode:4;
2232   unsigned int offset:6;
2233   unsigned int swizzle_control:2;
2234   unsigned int pad:1;
2235   unsigned int allocate:1;
2236   unsigned int used:1;
2237   unsigned int complete:1;
2238   unsigned int response_length:4;
2239   unsigned int msg_length:4;
2240   unsigned int msg_target:4;
2241   unsigned int pad1:3;
2242   unsigned int end_of_thread:1;
2243};
2244
2245/* Instruction format for the execution units:
2246 */
2247
2248struct gen5_instruction
2249{
2250   struct
2251   {
2252      unsigned int opcode:7;
2253      unsigned int pad:1;
2254      unsigned int access_mode:1;
2255      unsigned int mask_control:1;
2256      unsigned int dependency_control:2;
2257      unsigned int compression_control:2;
2258      unsigned int thread_control:2;
2259      unsigned int predicate_control:4;
2260      unsigned int predicate_inverse:1;
2261      unsigned int execution_size:3;
2262      unsigned int destreg__conditonalmod:4; /* destreg - send, conditionalmod - others */
2263      unsigned int pad0:2;
2264      unsigned int debug_control:1;
2265      unsigned int saturate:1;
2266   } header;
2267
2268   union {
2269      struct
2270      {
2271	 unsigned int dest_reg_file:2;
2272	 unsigned int dest_reg_type:3;
2273	 unsigned int src0_reg_file:2;
2274	 unsigned int src0_reg_type:3;
2275	 unsigned int src1_reg_file:2;
2276	 unsigned int src1_reg_type:3;
2277	 unsigned int pad:1;
2278	 unsigned int dest_subreg_nr:5;
2279	 unsigned int dest_reg_nr:8;
2280	 unsigned int dest_horiz_stride:2;
2281	 unsigned int dest_address_mode:1;
2282      } da1;
2283
2284      struct
2285      {
2286	 unsigned int dest_reg_file:2;
2287	 unsigned int dest_reg_type:3;
2288	 unsigned int src0_reg_file:2;
2289	 unsigned int src0_reg_type:3;
2290	 unsigned int pad:6;
2291	 int dest_indirect_offset:10;	/* offset against the deref'd address reg */
2292	 unsigned int dest_subreg_nr:3; /* subnr for the address reg a0.x */
2293	 unsigned int dest_horiz_stride:2;
2294	 unsigned int dest_address_mode:1;
2295      } ia1;
2296
2297      struct
2298      {
2299	 unsigned int dest_reg_file:2;
2300	 unsigned int dest_reg_type:3;
2301	 unsigned int src0_reg_file:2;
2302	 unsigned int src0_reg_type:3;
2303	 unsigned int src1_reg_file:2;
2304	 unsigned int src1_reg_type:3;
2305	 unsigned int pad0:1;
2306	 unsigned int dest_writemask:4;
2307	 unsigned int dest_subreg_nr:1;
2308	 unsigned int dest_reg_nr:8;
2309	 unsigned int pad1:2;
2310	 unsigned int dest_address_mode:1;
2311      } da16;
2312
2313      struct
2314      {
2315	 unsigned int dest_reg_file:2;
2316	 unsigned int dest_reg_type:3;
2317	 unsigned int src0_reg_file:2;
2318	 unsigned int src0_reg_type:3;
2319	 unsigned int pad0:6;
2320	 unsigned int dest_writemask:4;
2321	 int dest_indirect_offset:6;
2322	 unsigned int dest_subreg_nr:3;
2323	 unsigned int pad1:2;
2324	 unsigned int dest_address_mode:1;
2325      } ia16;
2326   } bits1;
2327
2328
2329   union {
2330      struct
2331      {
2332	 unsigned int src0_subreg_nr:5;
2333	 unsigned int src0_reg_nr:8;
2334	 unsigned int src0_abs:1;
2335	 unsigned int src0_negate:1;
2336	 unsigned int src0_address_mode:1;
2337	 unsigned int src0_horiz_stride:2;
2338	 unsigned int src0_width:3;
2339	 unsigned int src0_vert_stride:4;
2340	 unsigned int flag_reg_nr:1;
2341	 unsigned int pad:6;
2342      } da1;
2343
2344      struct
2345      {
2346	 int src0_indirect_offset:10;
2347	 unsigned int src0_subreg_nr:3;
2348	 unsigned int src0_abs:1;
2349	 unsigned int src0_negate:1;
2350	 unsigned int src0_address_mode:1;
2351	 unsigned int src0_horiz_stride:2;
2352	 unsigned int src0_width:3;
2353	 unsigned int src0_vert_stride:4;
2354	 unsigned int flag_reg_nr:1;
2355	 unsigned int pad:6;
2356      } ia1;
2357
2358      struct
2359      {
2360	 unsigned int src0_swz_x:2;
2361	 unsigned int src0_swz_y:2;
2362	 unsigned int src0_subreg_nr:1;
2363	 unsigned int src0_reg_nr:8;
2364	 unsigned int src0_abs:1;
2365	 unsigned int src0_negate:1;
2366	 unsigned int src0_address_mode:1;
2367	 unsigned int src0_swz_z:2;
2368	 unsigned int src0_swz_w:2;
2369	 unsigned int pad0:1;
2370	 unsigned int src0_vert_stride:4;
2371	 unsigned int flag_reg_nr:1;
2372	 unsigned int pad1:6;
2373      } da16;
2374
2375      struct
2376      {
2377	 unsigned int src0_swz_x:2;
2378	 unsigned int src0_swz_y:2;
2379	 int src0_indirect_offset:6;
2380	 unsigned int src0_subreg_nr:3;
2381	 unsigned int src0_abs:1;
2382	 unsigned int src0_negate:1;
2383	 unsigned int src0_address_mode:1;
2384	 unsigned int src0_swz_z:2;
2385	 unsigned int src0_swz_w:2;
2386	 unsigned int pad0:1;
2387	 unsigned int src0_vert_stride:4;
2388	 unsigned int flag_reg_nr:1;
2389	 unsigned int pad1:6;
2390      } ia16;
2391
2392   } bits2;
2393
2394   union
2395   {
2396      struct
2397      {
2398	 unsigned int src1_subreg_nr:5;
2399	 unsigned int src1_reg_nr:8;
2400	 unsigned int src1_abs:1;
2401	 unsigned int src1_negate:1;
2402	 unsigned int pad:1;
2403	 unsigned int src1_horiz_stride:2;
2404	 unsigned int src1_width:3;
2405	 unsigned int src1_vert_stride:4;
2406	 unsigned int pad0:7;
2407      } da1;
2408
2409      struct
2410      {
2411	 unsigned int src1_swz_x:2;
2412	 unsigned int src1_swz_y:2;
2413	 unsigned int src1_subreg_nr:1;
2414	 unsigned int src1_reg_nr:8;
2415	 unsigned int src1_abs:1;
2416	 unsigned int src1_negate:1;
2417	 unsigned int pad0:1;
2418	 unsigned int src1_swz_z:2;
2419	 unsigned int src1_swz_w:2;
2420	 unsigned int pad1:1;
2421	 unsigned int src1_vert_stride:4;
2422	 unsigned int pad2:7;
2423      } da16;
2424
2425      struct
2426      {
2427	 int  src1_indirect_offset:10;
2428	 unsigned int src1_subreg_nr:3;
2429	 unsigned int src1_abs:1;
2430	 unsigned int src1_negate:1;
2431	 unsigned int pad0:1;
2432	 unsigned int src1_horiz_stride:2;
2433	 unsigned int src1_width:3;
2434	 unsigned int src1_vert_stride:4;
2435	 unsigned int flag_reg_nr:1;
2436	 unsigned int pad1:6;
2437      } ia1;
2438
2439      struct
2440      {
2441	 unsigned int src1_swz_x:2;
2442	 unsigned int src1_swz_y:2;
2443	 int  src1_indirect_offset:6;
2444	 unsigned int src1_subreg_nr:3;
2445	 unsigned int src1_abs:1;
2446	 unsigned int src1_negate:1;
2447	 unsigned int pad0:1;
2448	 unsigned int src1_swz_z:2;
2449	 unsigned int src1_swz_w:2;
2450	 unsigned int pad1:1;
2451	 unsigned int src1_vert_stride:4;
2452	 unsigned int flag_reg_nr:1;
2453	 unsigned int pad2:6;
2454      } ia16;
2455
2456
2457      struct
2458      {
2459	 int  jump_count:16;	/* note: signed */
2460	 unsigned int  pop_count:4;
2461	 unsigned int  pad0:12;
2462      } if_else;
2463
2464      struct {
2465	 unsigned int function:4;
2466	 unsigned int int_type:1;
2467	 unsigned int precision:1;
2468	 unsigned int saturate:1;
2469	 unsigned int data_type:1;
2470	 unsigned int pad0:8;
2471	 unsigned int response_length:4;
2472	 unsigned int msg_length:4;
2473	 unsigned int msg_target:4;
2474	 unsigned int pad1:3;
2475	 unsigned int end_of_thread:1;
2476      } math;
2477
2478      struct {
2479	 unsigned int binding_table_index:8;
2480	 unsigned int sampler:4;
2481	 unsigned int return_format:2;
2482	 unsigned int msg_type:2;
2483	 unsigned int response_length:4;
2484	 unsigned int msg_length:4;
2485	 unsigned int msg_target:4;
2486	 unsigned int pad1:3;
2487	 unsigned int end_of_thread:1;
2488      } sampler;
2489
2490      struct gen5_urb_immediate urb;
2491
2492      struct {
2493	 unsigned int binding_table_index:8;
2494	 unsigned int msg_control:4;
2495	 unsigned int msg_type:2;
2496	 unsigned int target_cache:2;
2497	 unsigned int response_length:4;
2498	 unsigned int msg_length:4;
2499	 unsigned int msg_target:4;
2500	 unsigned int pad1:3;
2501	 unsigned int end_of_thread:1;
2502      } dp_read;
2503
2504      struct {
2505	 unsigned int binding_table_index:8;
2506	 unsigned int msg_control:3;
2507	 unsigned int pixel_scoreboard_clear:1;
2508	 unsigned int msg_type:3;
2509	 unsigned int send_commit_msg:1;
2510	 unsigned int response_length:4;
2511	 unsigned int msg_length:4;
2512	 unsigned int msg_target:4;
2513	 unsigned int pad1:3;
2514	 unsigned int end_of_thread:1;
2515      } dp_write;
2516
2517      struct {
2518	 unsigned int pad:16;
2519	 unsigned int response_length:4;
2520	 unsigned int msg_length:4;
2521	 unsigned int msg_target:4;
2522	 unsigned int pad1:3;
2523	 unsigned int end_of_thread:1;
2524      } generic;
2525
2526      unsigned int ud;
2527   } bits3;
2528};
2529
2530/* media pipeline */
2531
2532struct gen5_vfe_state {
2533    struct {
2534	unsigned int per_thread_scratch_space:4;
2535	unsigned int pad3:3;
2536	unsigned int extend_vfe_state_present:1;
2537	unsigned int pad2:2;
2538	unsigned int scratch_base:22;
2539    } vfe0;
2540
2541    struct {
2542	unsigned int debug_counter_control:2;
2543	unsigned int children_present:1;
2544	unsigned int vfe_mode:4;
2545	unsigned int pad2:2;
2546	unsigned int num_urb_entries:7;
2547	unsigned int urb_entry_alloc_size:9;
2548	unsigned int max_threads:7;
2549    } vfe1;
2550
2551    struct {
2552	unsigned int pad4:4;
2553	unsigned int interface_descriptor_base:28;
2554    } vfe2;
2555};
2556
2557struct gen5_vld_state {
2558    struct {
2559	unsigned int pad6:6;
2560	unsigned int scan_order:1;
2561	unsigned int intra_vlc_format:1;
2562	unsigned int quantizer_scale_type:1;
2563	unsigned int concealment_motion_vector:1;
2564	unsigned int frame_predict_frame_dct:1;
2565	unsigned int top_field_first:1;
2566	unsigned int picture_structure:2;
2567	unsigned int intra_dc_precision:2;
2568	unsigned int f_code_0_0:4;
2569	unsigned int f_code_0_1:4;
2570	unsigned int f_code_1_0:4;
2571	unsigned int f_code_1_1:4;
2572    } vld0;
2573
2574    struct {
2575	unsigned int pad2:9;
2576	unsigned int picture_coding_type:2;
2577	unsigned int pad:21;
2578    } vld1;
2579
2580    struct {
2581	unsigned int index_0:4;
2582	unsigned int index_1:4;
2583	unsigned int index_2:4;
2584	unsigned int index_3:4;
2585	unsigned int index_4:4;
2586	unsigned int index_5:4;
2587	unsigned int index_6:4;
2588	unsigned int index_7:4;
2589    } desc_remap_table0;
2590
2591    struct {
2592	unsigned int index_8:4;
2593	unsigned int index_9:4;
2594	unsigned int index_10:4;
2595	unsigned int index_11:4;
2596	unsigned int index_12:4;
2597	unsigned int index_13:4;
2598	unsigned int index_14:4;
2599	unsigned int index_15:4;
2600    } desc_remap_table1;
2601};
2602
2603struct gen5_interface_descriptor {
2604    struct {
2605	unsigned int grf_reg_blocks:4;
2606	unsigned int pad:2;
2607	unsigned int kernel_start_pointer:26;
2608    } desc0;
2609
2610    struct {
2611	unsigned int pad:7;
2612	unsigned int software_exception:1;
2613	unsigned int pad2:3;
2614	unsigned int maskstack_exception:1;
2615	unsigned int pad3:1;
2616	unsigned int illegal_opcode_exception:1;
2617	unsigned int pad4:2;
2618	unsigned int floating_point_mode:1;
2619	unsigned int thread_priority:1;
2620	unsigned int single_program_flow:1;
2621	unsigned int pad5:1;
2622	unsigned int const_urb_entry_read_offset:6;
2623	unsigned int const_urb_entry_read_len:6;
2624    } desc1;
2625
2626    struct {
2627	unsigned int pad:2;
2628	unsigned int sampler_count:3;
2629	unsigned int sampler_state_pointer:27;
2630    } desc2;
2631
2632    struct {
2633	unsigned int binding_table_entry_count:5;
2634	unsigned int binding_table_pointer:27;
2635    } desc3;
2636};
2637
2638struct gen6_blend_state
2639{
2640	struct {
2641		unsigned int dest_blend_factor:5;
2642		unsigned int source_blend_factor:5;
2643		unsigned int pad3:1;
2644		unsigned int blend_func:3;
2645		unsigned int pad2:1;
2646		unsigned int ia_dest_blend_factor:5;
2647		unsigned int ia_source_blend_factor:5;
2648		unsigned int pad1:1;
2649		unsigned int ia_blend_func:3;
2650		unsigned int pad0:1;
2651		unsigned int ia_blend_enable:1;
2652		unsigned int blend_enable:1;
2653	} blend0;
2654
2655	struct {
2656		unsigned int post_blend_clamp_enable:1;
2657		unsigned int pre_blend_clamp_enable:1;
2658		unsigned int clamp_range:2;
2659		unsigned int pad0:4;
2660		unsigned int x_dither_offset:2;
2661		unsigned int y_dither_offset:2;
2662		unsigned int dither_enable:1;
2663		unsigned int alpha_test_func:3;
2664		unsigned int alpha_test_enable:1;
2665		unsigned int pad1:1;
2666		unsigned int logic_op_func:4;
2667		unsigned int logic_op_enable:1;
2668		unsigned int pad2:1;
2669		unsigned int write_disable_b:1;
2670		unsigned int write_disable_g:1;
2671		unsigned int write_disable_r:1;
2672		unsigned int write_disable_a:1;
2673		unsigned int pad3:1;
2674		unsigned int alpha_to_coverage_dither:1;
2675		unsigned int alpha_to_one:1;
2676		unsigned int alpha_to_coverage:1;
2677	} blend1;
2678};
2679
2680struct gen6_color_calc_state
2681{
2682	struct {
2683		unsigned int alpha_test_format:1;
2684		unsigned int pad0:14;
2685		unsigned int round_disable:1;
2686		unsigned int bf_stencil_ref:8;
2687		unsigned int stencil_ref:8;
2688	} cc0;
2689
2690	union {
2691		float alpha_ref_f;
2692		struct {
2693			unsigned int ui:8;
2694			unsigned int pad0:24;
2695		} alpha_ref_fi;
2696	} cc1;
2697
2698	float constant_r;
2699	float constant_g;
2700	float constant_b;
2701	float constant_a;
2702};
2703
2704struct gen6_depth_stencil_state
2705{
2706	struct {
2707		unsigned int pad0:3;
2708		unsigned int bf_stencil_pass_depth_pass_op:3;
2709		unsigned int bf_stencil_pass_depth_fail_op:3;
2710		unsigned int bf_stencil_fail_op:3;
2711		unsigned int bf_stencil_func:3;
2712		unsigned int bf_stencil_enable:1;
2713		unsigned int pad1:2;
2714		unsigned int stencil_write_enable:1;
2715		unsigned int stencil_pass_depth_pass_op:3;
2716		unsigned int stencil_pass_depth_fail_op:3;
2717		unsigned int stencil_fail_op:3;
2718		unsigned int stencil_func:3;
2719		unsigned int stencil_enable:1;
2720	} ds0;
2721
2722	struct {
2723		unsigned int bf_stencil_write_mask:8;
2724		unsigned int bf_stencil_test_mask:8;
2725		unsigned int stencil_write_mask:8;
2726		unsigned int stencil_test_mask:8;
2727	} ds1;
2728
2729	struct {
2730		unsigned int pad0:26;
2731		unsigned int depth_write_enable:1;
2732		unsigned int depth_test_func:3;
2733		unsigned int pad1:1;
2734		unsigned int depth_test_enable:1;
2735	} ds2;
2736};
2737
2738typedef enum {
2739	SAMPLER_FILTER_NEAREST = 0,
2740	SAMPLER_FILTER_BILINEAR,
2741	FILTER_COUNT
2742} sampler_filter_t;
2743
2744typedef enum {
2745	SAMPLER_EXTEND_NONE = 0,
2746	SAMPLER_EXTEND_REPEAT,
2747	SAMPLER_EXTEND_PAD,
2748	SAMPLER_EXTEND_REFLECT,
2749	EXTEND_COUNT
2750} sampler_extend_t;
2751
2752typedef enum {
2753	WM_KERNEL = 0,
2754	WM_KERNEL_P,
2755
2756	WM_KERNEL_MASK,
2757	WM_KERNEL_MASK_P,
2758
2759	WM_KERNEL_MASKCA,
2760	WM_KERNEL_MASKCA_P,
2761
2762	WM_KERNEL_MASKSA,
2763	WM_KERNEL_MASKSA_P,
2764
2765	WM_KERNEL_OPACITY,
2766	WM_KERNEL_OPACITY_P,
2767
2768	WM_KERNEL_VIDEO_PLANAR_BT601,
2769	WM_KERNEL_VIDEO_NV12_BT601,
2770	WM_KERNEL_VIDEO_PACKED_BT601,
2771
2772	WM_KERNEL_VIDEO_PLANAR_BT709,
2773	WM_KERNEL_VIDEO_NV12_BT709,
2774	WM_KERNEL_VIDEO_PACKED_BT709,
2775
2776	KERNEL_COUNT
2777} wm_kernel_t;
2778#endif
2779