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 GEN4_RENDER_H
29#define GEN4_RENDER_H
30
31#define GEN4_3D(Pipeline,Opcode,Subopcode) ((3 << 29) | \
32					   ((Pipeline) << 27) | \
33					   ((Opcode) << 24) | \
34					   ((Subopcode) << 16))
35
36#define GEN4_URB_FENCE				GEN4_3D(0, 0, 0)
37#define GEN4_CS_URB_STATE			GEN4_3D(0, 0, 1)
38#define GEN4_CONSTANT_BUFFER			GEN4_3D(0, 0, 2)
39#define GEN4_STATE_PREFETCH			GEN4_3D(0, 0, 3)
40
41#define GEN4_STATE_BASE_ADDRESS			GEN4_3D(0, 1, 1)
42#define GEN4_STATE_SIP				GEN4_3D(0, 1, 2)
43#define GEN4_PIPELINE_SELECT			GEN4_3D(0, 1, 4)
44
45#define NEW_PIPELINE_SELECT			GEN4_3D(1, 1, 4)
46
47#define GEN4_MEDIA_STATE_POINTERS		GEN4_3D(2, 0, 0)
48#define GEN4_MEDIA_OBJECT			GEN4_3D(2, 1, 0)
49
50#define GEN4_3DSTATE_PIPELINED_POINTERS		GEN4_3D(3, 0, 0)
51#define GEN4_3DSTATE_BINDING_TABLE_POINTERS	GEN4_3D(3, 0, 1)
52
53#define GEN4_3DSTATE_VERTEX_BUFFERS		GEN4_3D(3, 0, 8)
54#define GEN4_3DSTATE_VERTEX_ELEMENTS		GEN4_3D(3, 0, 9)
55#define GEN4_3DSTATE_INDEX_BUFFER		GEN4_3D(3, 0, 0xa)
56#define GEN4_3DSTATE_VF_STATISTICS		GEN4_3D(3, 0, 0xb)
57
58#define GEN4_3DSTATE_DRAWING_RECTANGLE		GEN4_3D(3, 1, 0)
59#define GEN4_3DSTATE_CONSTANT_COLOR		GEN4_3D(3, 1, 1)
60#define GEN4_3DSTATE_SAMPLER_PALETTE_LOAD	GEN4_3D(3, 1, 2)
61#define GEN4_3DSTATE_CHROMA_KEY			GEN4_3D(3, 1, 4)
62#define GEN4_3DSTATE_DEPTH_BUFFER		GEN4_3D(3, 1, 5)
63# define GEN4_3DSTATE_DEPTH_BUFFER_TYPE_SHIFT	29
64# define GEN4_3DSTATE_DEPTH_BUFFER_FORMAT_SHIFT	18
65
66#define GEN4_3DSTATE_POLY_STIPPLE_OFFSET		GEN4_3D(3, 1, 6)
67#define GEN4_3DSTATE_POLY_STIPPLE_PATTERN	GEN4_3D(3, 1, 7)
68#define GEN4_3DSTATE_LINE_STIPPLE		GEN4_3D(3, 1, 8)
69#define GEN4_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP	GEN4_3D(3, 1, 9)
70/* These two are BLC and CTG only, not BW or CL */
71#define GEN4_3DSTATE_AA_LINE_PARAMS		GEN4_3D(3, 1, 0xa)
72#define GEN4_3DSTATE_GS_SVB_INDEX		GEN4_3D(3, 1, 0xb)
73
74#define GEN4_PIPE_CONTROL			GEN4_3D(3, 2, 0)
75
76#define GEN4_3DPRIMITIVE				GEN4_3D(3, 3, 0)
77
78#define GEN4_3DSTATE_CLEAR_PARAMS		GEN4_3D(3, 1, 0x10)
79/* DW1 */
80# define GEN4_3DSTATE_DEPTH_CLEAR_VALID		(1 << 15)
81
82#define PIPELINE_SELECT_3D		0
83#define PIPELINE_SELECT_MEDIA		1
84
85#define UF0_CS_REALLOC			(1 << 13)
86#define UF0_VFE_REALLOC			(1 << 12)
87#define UF0_SF_REALLOC			(1 << 11)
88#define UF0_CLIP_REALLOC		(1 << 10)
89#define UF0_GS_REALLOC			(1 << 9)
90#define UF0_VS_REALLOC			(1 << 8)
91#define UF1_CLIP_FENCE_SHIFT		20
92#define UF1_GS_FENCE_SHIFT		10
93#define UF1_VS_FENCE_SHIFT		0
94#define UF2_CS_FENCE_SHIFT		20
95#define UF2_VFE_FENCE_SHIFT		10
96#define UF2_SF_FENCE_SHIFT		0
97
98/* for GEN4_STATE_BASE_ADDRESS */
99#define BASE_ADDRESS_MODIFY		(1 << 0)
100
101/* for GEN4_3DSTATE_PIPELINED_POINTERS */
102#define GEN4_GS_DISABLE		       0
103#define GEN4_GS_ENABLE		       1
104#define GEN4_CLIP_DISABLE	       0
105#define GEN4_CLIP_ENABLE		       1
106
107/* for GEN4_PIPE_CONTROL */
108#define GEN4_PIPE_CONTROL_NOWRITE       (0 << 14)
109#define GEN4_PIPE_CONTROL_WRITE_QWORD   (1 << 14)
110#define GEN4_PIPE_CONTROL_WRITE_DEPTH   (2 << 14)
111#define GEN4_PIPE_CONTROL_WRITE_TIME    (3 << 14)
112#define GEN4_PIPE_CONTROL_DEPTH_STALL   (1 << 13)
113#define GEN4_PIPE_CONTROL_WC_FLUSH      (1 << 12)
114#define GEN4_PIPE_CONTROL_IS_FLUSH      (1 << 11)
115#define GEN4_PIPE_CONTROL_TC_FLUSH      (1 << 10) /* ctg+ */
116#define GEN4_PIPE_CONTROL_NOTIFY_ENABLE (1 << 8)
117#define GEN4_PIPE_CONTROL_GLOBAL_GTT    (1 << 2)
118#define GEN4_PIPE_CONTROL_LOCAL_PGTT    (0 << 2)
119#define GEN4_PIPE_CONTROL_DEPTH_CACHE_FLUSH	(1 << 0)
120
121/* VERTEX_BUFFER_STATE Structure */
122#define VB0_BUFFER_INDEX_SHIFT		27
123#define VB0_VERTEXDATA			(0 << 26)
124#define VB0_INSTANCEDATA		(1 << 26)
125#define VB0_BUFFER_PITCH_SHIFT		0
126
127/* VERTEX_ELEMENT_STATE Structure */
128#define VE0_VERTEX_BUFFER_INDEX_SHIFT	27
129#define VE0_VALID			(1 << 26)
130#define VE0_FORMAT_SHIFT		16
131#define VE0_OFFSET_SHIFT		0
132#define VE1_VFCOMPONENT_0_SHIFT		28
133#define VE1_VFCOMPONENT_1_SHIFT		24
134#define VE1_VFCOMPONENT_2_SHIFT		20
135#define VE1_VFCOMPONENT_3_SHIFT		16
136#define VE1_DESTINATION_ELEMENT_OFFSET_SHIFT	0
137
138/* 3DPRIMITIVE bits */
139#define GEN4_3DPRIMITIVE_VERTEX_SEQUENTIAL (0 << 15)
140#define GEN4_3DPRIMITIVE_VERTEX_RANDOM	  (1 << 15)
141/* Primitive types are in gen4_defines.h */
142#define GEN4_3DPRIMITIVE_TOPOLOGY_SHIFT	  10
143
144#define GEN4_SVG_CTL		       0x7400
145
146#define GEN4_SVG_CTL_GS_BA	       (0 << 8)
147#define GEN4_SVG_CTL_SS_BA	       (1 << 8)
148#define GEN4_SVG_CTL_IO_BA	       (2 << 8)
149#define GEN4_SVG_CTL_GS_AUB	       (3 << 8)
150#define GEN4_SVG_CTL_IO_AUB	       (4 << 8)
151#define GEN4_SVG_CTL_SIP		       (5 << 8)
152
153#define GEN4_SVG_RDATA		       0x7404
154#define GEN4_SVG_WORK_CTL	       0x7408
155
156#define GEN4_VF_CTL		       0x7500
157
158#define GEN4_VF_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
159#define GEN4_VF_CTL_SNAPSHOT_MUX_SELECT_THREADID	   (0 << 8)
160#define GEN4_VF_CTL_SNAPSHOT_MUX_SELECT_VF_DEBUG	   (1 << 8)
161#define GEN4_VF_CTL_SNAPSHOT_TYPE_VERTEX_SEQUENCE   (0 << 4)
162#define GEN4_VF_CTL_SNAPSHOT_TYPE_VERTEX_INDEX	   (1 << 4)
163#define GEN4_VF_CTL_SKIP_INITIAL_PRIMITIVES	   (1 << 3)
164#define GEN4_VF_CTL_MAX_PRIMITIVES_LIMIT_ENABLE	   (1 << 2)
165#define GEN4_VF_CTL_VERTEX_RANGE_LIMIT_ENABLE	   (1 << 1)
166#define GEN4_VF_CTL_SNAPSHOT_ENABLE	     	   (1 << 0)
167
168#define GEN4_VF_STRG_VAL		       0x7504
169#define GEN4_VF_STR_VL_OVR	       0x7508
170#define GEN4_VF_VC_OVR		       0x750c
171#define GEN4_VF_STR_PSKIP	       0x7510
172#define GEN4_VF_MAX_PRIM		       0x7514
173#define GEN4_VF_RDATA		       0x7518
174
175#define GEN4_VS_CTL		       0x7600
176#define GEN4_VS_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
177#define GEN4_VS_CTL_SNAPSHOT_MUX_VERTEX_0	   (0 << 8)
178#define GEN4_VS_CTL_SNAPSHOT_MUX_VERTEX_1	   (1 << 8)
179#define GEN4_VS_CTL_SNAPSHOT_MUX_VALID_COUNT	   (2 << 8)
180#define GEN4_VS_CTL_SNAPSHOT_MUX_VS_KERNEL_POINTER  (3 << 8)
181#define GEN4_VS_CTL_SNAPSHOT_ALL_THREADS		   (1 << 2)
182#define GEN4_VS_CTL_THREAD_SNAPSHOT_ENABLE	   (1 << 1)
183#define GEN4_VS_CTL_SNAPSHOT_ENABLE		   (1 << 0)
184
185#define GEN4_VS_STRG_VAL		       0x7604
186#define GEN4_VS_RDATA		       0x7608
187
188#define GEN4_SF_CTL		       0x7b00
189#define GEN4_SF_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
190#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_0_FF_ID	   (0 << 8)
191#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_0_REL_COUNT (1 << 8)
192#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_1_FF_ID	   (2 << 8)
193#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_1_REL_COUNT (3 << 8)
194#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_2_FF_ID	   (4 << 8)
195#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_2_REL_COUNT (5 << 8)
196#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_COUNT	   (6 << 8)
197#define GEN4_SF_CTL_SNAPSHOT_MUX_SF_KERNEL_POINTER  (7 << 8)
198#define GEN4_SF_CTL_MIN_MAX_PRIMITIVE_RANGE_ENABLE  (1 << 4)
199#define GEN4_SF_CTL_DEBUG_CLIP_RECTANGLE_ENABLE	   (1 << 3)
200#define GEN4_SF_CTL_SNAPSHOT_ALL_THREADS		   (1 << 2)
201#define GEN4_SF_CTL_THREAD_SNAPSHOT_ENABLE	   (1 << 1)
202#define GEN4_SF_CTL_SNAPSHOT_ENABLE		   (1 << 0)
203
204#define GEN4_SF_STRG_VAL		       0x7b04
205#define GEN4_SF_RDATA		       0x7b18
206
207#define GEN4_WIZ_CTL		       0x7c00
208#define GEN4_WIZ_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
209#define GEN4_WIZ_CTL_SUBSPAN_INSTANCE_SHIFT	   16
210#define GEN4_WIZ_CTL_SNAPSHOT_MUX_WIZ_KERNEL_POINTER   (0 << 8)
211#define GEN4_WIZ_CTL_SNAPSHOT_MUX_SUBSPAN_INSTANCE     (1 << 8)
212#define GEN4_WIZ_CTL_SNAPSHOT_MUX_PRIMITIVE_SEQUENCE   (2 << 8)
213#define GEN4_WIZ_CTL_SINGLE_SUBSPAN_DISPATCH	      (1 << 6)
214#define GEN4_WIZ_CTL_IGNORE_COLOR_SCOREBOARD_STALLS    (1 << 5)
215#define GEN4_WIZ_CTL_ENABLE_SUBSPAN_INSTANCE_COMPARE   (1 << 4)
216#define GEN4_WIZ_CTL_USE_UPSTREAM_SNAPSHOT_FLAG	      (1 << 3)
217#define GEN4_WIZ_CTL_SNAPSHOT_ALL_THREADS	      (1 << 2)
218#define GEN4_WIZ_CTL_THREAD_SNAPSHOT_ENABLE	      (1 << 1)
219#define GEN4_WIZ_CTL_SNAPSHOT_ENABLE		      (1 << 0)
220
221#define GEN4_WIZ_STRG_VAL			      0x7c04
222#define GEN4_WIZ_RDATA				      0x7c18
223
224#define GEN4_TS_CTL		       0x7e00
225#define GEN4_TS_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
226#define GEN4_TS_CTL_SNAPSHOT_MESSAGE_ERROR	   (0 << 8)
227#define GEN4_TS_CTL_SNAPSHOT_INTERFACE_DESCRIPTOR   (3 << 8)
228#define GEN4_TS_CTL_SNAPSHOT_ALL_CHILD_THREADS	   (1 << 2)
229#define GEN4_TS_CTL_SNAPSHOT_ALL_ROOT_THREADS  	   (1 << 1)
230#define GEN4_TS_CTL_SNAPSHOT_ENABLE		   (1 << 0)
231
232#define GEN4_TS_STRG_VAL		       0x7e04
233#define GEN4_TS_RDATA		       0x7e08
234
235#define GEN4_TD_CTL		       0x8000
236#define GEN4_TD_CTL_MUX_SHIFT	       8
237#define GEN4_TD_CTL_EXTERNAL_HALT_R0_DEBUG_MATCH	   (1 << 7)
238#define GEN4_TD_CTL_FORCE_EXTERNAL_HALT		   (1 << 6)
239#define GEN4_TD_CTL_EXCEPTION_MASK_OVERRIDE	   (1 << 5)
240#define GEN4_TD_CTL_FORCE_THREAD_BREAKPOINT_ENABLE  (1 << 4)
241#define GEN4_TD_CTL_BREAKPOINT_ENABLE		   (1 << 2)
242#define GEN4_TD_CTL2		       0x8004
243#define GEN4_TD_CTL2_ILLEGAL_OPCODE_EXCEPTION_OVERRIDE (1 << 28)
244#define GEN4_TD_CTL2_MASKSTACK_EXCEPTION_OVERRIDE      (1 << 26)
245#define GEN4_TD_CTL2_SOFTWARE_EXCEPTION_OVERRIDE	      (1 << 25)
246#define GEN4_TD_CTL2_ACTIVE_THREAD_LIMIT_SHIFT	      16
247#define GEN4_TD_CTL2_ACTIVE_THREAD_LIMIT_ENABLE	      (1 << 8)
248#define GEN4_TD_CTL2_THREAD_SPAWNER_EXECUTION_MASK_ENABLE (1 << 7)
249#define GEN4_TD_CTL2_WIZ_EXECUTION_MASK_ENABLE	      (1 << 6)
250#define GEN4_TD_CTL2_SF_EXECUTION_MASK_ENABLE	      (1 << 5)
251#define GEN4_TD_CTL2_CLIPPER_EXECUTION_MASK_ENABLE     (1 << 4)
252#define GEN4_TD_CTL2_GS_EXECUTION_MASK_ENABLE	      (1 << 3)
253#define GEN4_TD_CTL2_VS_EXECUTION_MASK_ENABLE	      (1 << 0)
254#define GEN4_TD_VF_VS_EMSK	       0x8008
255#define GEN4_TD_GS_EMSK		       0x800c
256#define GEN4_TD_CLIP_EMSK	       0x8010
257#define GEN4_TD_SF_EMSK		       0x8014
258#define GEN4_TD_WIZ_EMSK		       0x8018
259#define GEN4_TD_0_6_EHTRG_VAL	       0x801c
260#define GEN4_TD_0_7_EHTRG_VAL	       0x8020
261#define GEN4_TD_0_6_EHTRG_MSK           0x8024
262#define GEN4_TD_0_7_EHTRG_MSK	       0x8028
263#define GEN4_TD_RDATA		       0x802c
264#define GEN4_TD_TS_EMSK		       0x8030
265
266#define GEN4_EU_CTL		       0x8800
267#define GEN4_EU_CTL_SELECT_SHIFT	       16
268#define GEN4_EU_CTL_DATA_MUX_SHIFT      8
269#define GEN4_EU_ATT_0		       0x8810
270#define GEN4_EU_ATT_1		       0x8814
271#define GEN4_EU_ATT_DATA_0	       0x8820
272#define GEN4_EU_ATT_DATA_1	       0x8824
273#define GEN4_EU_ATT_CLR_0	       0x8830
274#define GEN4_EU_ATT_CLR_1	       0x8834
275#define GEN4_EU_RDATA		       0x8840
276
277/* 3D state:
278 */
279#define _3DOP_3DSTATE_PIPELINED       0x0
280#define _3DOP_3DSTATE_NONPIPELINED    0x1
281#define _3DOP_3DCONTROL               0x2
282#define _3DOP_3DPRIMITIVE             0x3
283
284#define _3DSTATE_PIPELINED_POINTERS       0x00
285#define _3DSTATE_BINDING_TABLE_POINTERS   0x01
286#define _3DSTATE_VERTEX_BUFFERS           0x08
287#define _3DSTATE_VERTEX_ELEMENTS          0x09
288#define _3DSTATE_INDEX_BUFFER             0x0A
289#define _3DSTATE_VF_STATISTICS            0x0B
290#define _3DSTATE_DRAWING_RECTANGLE            0x00
291#define _3DSTATE_CONSTANT_COLOR               0x01
292#define _3DSTATE_SAMPLER_PALETTE_LOAD         0x02
293#define _3DSTATE_CHROMA_KEY                   0x04
294#define _3DSTATE_DEPTH_BUFFER                 0x05
295#define _3DSTATE_POLY_STIPPLE_OFFSET          0x06
296#define _3DSTATE_POLY_STIPPLE_PATTERN         0x07
297#define _3DSTATE_LINE_STIPPLE                 0x08
298#define _3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP    0x09
299#define _3DCONTROL    0x00
300#define _3DPRIMITIVE  0x00
301
302#define _3DPRIM_POINTLIST         0x01
303#define _3DPRIM_LINELIST          0x02
304#define _3DPRIM_LINESTRIP         0x03
305#define _3DPRIM_TRILIST           0x04
306#define _3DPRIM_TRISTRIP          0x05
307#define _3DPRIM_TRIFAN            0x06
308#define _3DPRIM_QUADLIST          0x07
309#define _3DPRIM_QUADSTRIP         0x08
310#define _3DPRIM_LINELIST_ADJ      0x09
311#define _3DPRIM_LINESTRIP_ADJ     0x0A
312#define _3DPRIM_TRILIST_ADJ       0x0B
313#define _3DPRIM_TRISTRIP_ADJ      0x0C
314#define _3DPRIM_TRISTRIP_REVERSE  0x0D
315#define _3DPRIM_POLYGON           0x0E
316#define _3DPRIM_RECTLIST          0x0F
317#define _3DPRIM_LINELOOP          0x10
318#define _3DPRIM_POINTLIST_BF      0x11
319#define _3DPRIM_LINESTRIP_CONT    0x12
320#define _3DPRIM_LINESTRIP_BF      0x13
321#define _3DPRIM_LINESTRIP_CONT_BF 0x14
322#define _3DPRIM_TRIFAN_NOSTIPPLE  0x15
323
324#define _3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL 0
325#define _3DPRIM_VERTEXBUFFER_ACCESS_RANDOM     1
326
327#define GEN4_ANISORATIO_2     0
328#define GEN4_ANISORATIO_4     1
329#define GEN4_ANISORATIO_6     2
330#define GEN4_ANISORATIO_8     3
331#define GEN4_ANISORATIO_10    4
332#define GEN4_ANISORATIO_12    5
333#define GEN4_ANISORATIO_14    6
334#define GEN4_ANISORATIO_16    7
335
336#define GEN4_BLENDFACTOR_ONE                 0x1
337#define GEN4_BLENDFACTOR_SRC_COLOR           0x2
338#define GEN4_BLENDFACTOR_SRC_ALPHA           0x3
339#define GEN4_BLENDFACTOR_DST_ALPHA           0x4
340#define GEN4_BLENDFACTOR_DST_COLOR           0x5
341#define GEN4_BLENDFACTOR_SRC_ALPHA_SATURATE  0x6
342#define GEN4_BLENDFACTOR_CONST_COLOR         0x7
343#define GEN4_BLENDFACTOR_CONST_ALPHA         0x8
344#define GEN4_BLENDFACTOR_SRC1_COLOR          0x9
345#define GEN4_BLENDFACTOR_SRC1_ALPHA          0x0A
346#define GEN4_BLENDFACTOR_ZERO                0x11
347#define GEN4_BLENDFACTOR_INV_SRC_COLOR       0x12
348#define GEN4_BLENDFACTOR_INV_SRC_ALPHA       0x13
349#define GEN4_BLENDFACTOR_INV_DST_ALPHA       0x14
350#define GEN4_BLENDFACTOR_INV_DST_COLOR       0x15
351#define GEN4_BLENDFACTOR_INV_CONST_COLOR     0x17
352#define GEN4_BLENDFACTOR_INV_CONST_ALPHA     0x18
353#define GEN4_BLENDFACTOR_INV_SRC1_COLOR      0x19
354#define GEN4_BLENDFACTOR_INV_SRC1_ALPHA      0x1A
355
356#define GEN4_BLENDFUNCTION_ADD               0
357#define GEN4_BLENDFUNCTION_SUBTRACT          1
358#define GEN4_BLENDFUNCTION_REVERSE_SUBTRACT  2
359#define GEN4_BLENDFUNCTION_MIN               3
360#define GEN4_BLENDFUNCTION_MAX               4
361
362#define GEN4_ALPHATEST_FORMAT_UNORM8         0
363#define GEN4_ALPHATEST_FORMAT_FLOAT32        1
364
365#define GEN4_CHROMAKEY_KILL_ON_ANY_MATCH  0
366#define GEN4_CHROMAKEY_REPLACE_BLACK      1
367
368#define GEN4_CLIP_API_OGL     0
369#define GEN4_CLIP_API_DX      1
370
371#define GEN4_CLIPMODE_NORMAL              0
372#define GEN4_CLIPMODE_CLIP_ALL            1
373#define GEN4_CLIPMODE_CLIP_NON_REJECTED   2
374#define GEN4_CLIPMODE_REJECT_ALL          3
375#define GEN4_CLIPMODE_ACCEPT_ALL          4
376
377#define GEN4_CLIP_NDCSPACE     0
378#define GEN4_CLIP_SCREENSPACE  1
379
380#define GEN4_COMPAREFUNCTION_ALWAYS       0
381#define GEN4_COMPAREFUNCTION_NEVER        1
382#define GEN4_COMPAREFUNCTION_LESS         2
383#define GEN4_COMPAREFUNCTION_EQUAL        3
384#define GEN4_COMPAREFUNCTION_LEQUAL       4
385#define GEN4_COMPAREFUNCTION_GREATER      5
386#define GEN4_COMPAREFUNCTION_NOTEQUAL     6
387#define GEN4_COMPAREFUNCTION_GEQUAL       7
388
389#define GEN4_COVERAGE_PIXELS_HALF     0
390#define GEN4_COVERAGE_PIXELS_1        1
391#define GEN4_COVERAGE_PIXELS_2        2
392#define GEN4_COVERAGE_PIXELS_4        3
393
394#define GEN4_CULLMODE_BOTH        0
395#define GEN4_CULLMODE_NONE        1
396#define GEN4_CULLMODE_FRONT       2
397#define GEN4_CULLMODE_BACK        3
398
399#define GEN4_DEFAULTCOLOR_R8G8B8A8_UNORM      0
400#define GEN4_DEFAULTCOLOR_R32G32B32A32_FLOAT  1
401
402#define GEN4_DEPTHFORMAT_D32_FLOAT_S8X24_UINT     0
403#define GEN4_DEPTHFORMAT_D32_FLOAT                1
404#define GEN4_DEPTHFORMAT_D24_UNORM_S8_UINT        2
405#define GEN4_DEPTHFORMAT_D16_UNORM                5
406
407#define GEN4_FLOATING_POINT_IEEE_754        0
408#define GEN4_FLOATING_POINT_NON_IEEE_754    1
409
410#define GEN4_FRONTWINDING_CW      0
411#define GEN4_FRONTWINDING_CCW     1
412
413#define GEN4_INDEX_BYTE     0
414#define GEN4_INDEX_WORD     1
415#define GEN4_INDEX_DWORD    2
416
417#define GEN4_LOGICOPFUNCTION_CLEAR            0
418#define GEN4_LOGICOPFUNCTION_NOR              1
419#define GEN4_LOGICOPFUNCTION_AND_INVERTED     2
420#define GEN4_LOGICOPFUNCTION_COPY_INVERTED    3
421#define GEN4_LOGICOPFUNCTION_AND_REVERSE      4
422#define GEN4_LOGICOPFUNCTION_INVERT           5
423#define GEN4_LOGICOPFUNCTION_XOR              6
424#define GEN4_LOGICOPFUNCTION_NAND             7
425#define GEN4_LOGICOPFUNCTION_AND              8
426#define GEN4_LOGICOPFUNCTION_EQUIV            9
427#define GEN4_LOGICOPFUNCTION_NOOP             10
428#define GEN4_LOGICOPFUNCTION_OR_INVERTED      11
429#define GEN4_LOGICOPFUNCTION_COPY             12
430#define GEN4_LOGICOPFUNCTION_OR_REVERSE       13
431#define GEN4_LOGICOPFUNCTION_OR               14
432#define GEN4_LOGICOPFUNCTION_SET              15
433
434#define GEN4_MAPFILTER_NEAREST        0x0
435#define GEN4_MAPFILTER_LINEAR         0x1
436#define GEN4_MAPFILTER_ANISOTROPIC    0x2
437
438#define GEN4_MIPFILTER_NONE        0
439#define GEN4_MIPFILTER_NEAREST     1
440#define GEN4_MIPFILTER_LINEAR      3
441
442#define GEN4_POLYGON_FRONT_FACING     0
443#define GEN4_POLYGON_BACK_FACING      1
444
445#define GEN4_PREFILTER_ALWAYS     0x0
446#define GEN4_PREFILTER_NEVER      0x1
447#define GEN4_PREFILTER_LESS       0x2
448#define GEN4_PREFILTER_EQUAL      0x3
449#define GEN4_PREFILTER_LEQUAL     0x4
450#define GEN4_PREFILTER_GREATER    0x5
451#define GEN4_PREFILTER_NOTEQUAL   0x6
452#define GEN4_PREFILTER_GEQUAL     0x7
453
454#define GEN4_PROVOKING_VERTEX_0    0
455#define GEN4_PROVOKING_VERTEX_1    1
456#define GEN4_PROVOKING_VERTEX_2    2
457
458#define GEN4_RASTRULE_UPPER_LEFT  0
459#define GEN4_RASTRULE_UPPER_RIGHT 1
460
461#define GEN4_RENDERTARGET_CLAMPRANGE_UNORM    0
462#define GEN4_RENDERTARGET_CLAMPRANGE_SNORM    1
463#define GEN4_RENDERTARGET_CLAMPRANGE_FORMAT   2
464
465#define GEN4_STENCILOP_KEEP               0
466#define GEN4_STENCILOP_ZERO               1
467#define GEN4_STENCILOP_REPLACE            2
468#define GEN4_STENCILOP_INCRSAT            3
469#define GEN4_STENCILOP_DECRSAT            4
470#define GEN4_STENCILOP_INCR               5
471#define GEN4_STENCILOP_DECR               6
472#define GEN4_STENCILOP_INVERT             7
473
474#define GEN4_SURFACE_MIPMAPLAYOUT_BELOW   0
475#define GEN4_SURFACE_MIPMAPLAYOUT_RIGHT   1
476
477#define GEN4_SURFACEFORMAT_R32G32B32A32_FLOAT             0x000
478#define GEN4_SURFACEFORMAT_R32G32B32A32_SINT              0x001
479#define GEN4_SURFACEFORMAT_R32G32B32A32_UINT              0x002
480#define GEN4_SURFACEFORMAT_R32G32B32A32_UNORM             0x003
481#define GEN4_SURFACEFORMAT_R32G32B32A32_SNORM             0x004
482#define GEN4_SURFACEFORMAT_R64G64_FLOAT                   0x005
483#define GEN4_SURFACEFORMAT_R32G32B32X32_FLOAT             0x006
484#define GEN4_SURFACEFORMAT_R32G32B32A32_SSCALED           0x007
485#define GEN4_SURFACEFORMAT_R32G32B32A32_USCALED           0x008
486#define GEN4_SURFACEFORMAT_R32G32B32_FLOAT                0x040
487#define GEN4_SURFACEFORMAT_R32G32B32_SINT                 0x041
488#define GEN4_SURFACEFORMAT_R32G32B32_UINT                 0x042
489#define GEN4_SURFACEFORMAT_R32G32B32_UNORM                0x043
490#define GEN4_SURFACEFORMAT_R32G32B32_SNORM                0x044
491#define GEN4_SURFACEFORMAT_R32G32B32_SSCALED              0x045
492#define GEN4_SURFACEFORMAT_R32G32B32_USCALED              0x046
493#define GEN4_SURFACEFORMAT_R16G16B16A16_UNORM             0x080
494#define GEN4_SURFACEFORMAT_R16G16B16A16_SNORM             0x081
495#define GEN4_SURFACEFORMAT_R16G16B16A16_SINT              0x082
496#define GEN4_SURFACEFORMAT_R16G16B16A16_UINT              0x083
497#define GEN4_SURFACEFORMAT_R16G16B16A16_FLOAT             0x084
498#define GEN4_SURFACEFORMAT_R32G32_FLOAT                   0x085
499#define GEN4_SURFACEFORMAT_R32G32_SINT                    0x086
500#define GEN4_SURFACEFORMAT_R32G32_UINT                    0x087
501#define GEN4_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS       0x088
502#define GEN4_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT        0x089
503#define GEN4_SURFACEFORMAT_L32A32_FLOAT                   0x08A
504#define GEN4_SURFACEFORMAT_R32G32_UNORM                   0x08B
505#define GEN4_SURFACEFORMAT_R32G32_SNORM                   0x08C
506#define GEN4_SURFACEFORMAT_R64_FLOAT                      0x08D
507#define GEN4_SURFACEFORMAT_R16G16B16X16_UNORM             0x08E
508#define GEN4_SURFACEFORMAT_R16G16B16X16_FLOAT             0x08F
509#define GEN4_SURFACEFORMAT_A32X32_FLOAT                   0x090
510#define GEN4_SURFACEFORMAT_L32X32_FLOAT                   0x091
511#define GEN4_SURFACEFORMAT_I32X32_FLOAT                   0x092
512#define GEN4_SURFACEFORMAT_R16G16B16A16_SSCALED           0x093
513#define GEN4_SURFACEFORMAT_R16G16B16A16_USCALED           0x094
514#define GEN4_SURFACEFORMAT_R32G32_SSCALED                 0x095
515#define GEN4_SURFACEFORMAT_R32G32_USCALED                 0x096
516#define GEN4_SURFACEFORMAT_B8G8R8A8_UNORM                 0x0C0
517#define GEN4_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB            0x0C1
518#define GEN4_SURFACEFORMAT_R10G10B10A2_UNORM              0x0C2
519#define GEN4_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB         0x0C3
520#define GEN4_SURFACEFORMAT_R10G10B10A2_UINT               0x0C4
521#define GEN4_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM       0x0C5
522#define GEN4_SURFACEFORMAT_R8G8B8A8_UNORM                 0x0C7
523#define GEN4_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB            0x0C8
524#define GEN4_SURFACEFORMAT_R8G8B8A8_SNORM                 0x0C9
525#define GEN4_SURFACEFORMAT_R8G8B8A8_SINT                  0x0CA
526#define GEN4_SURFACEFORMAT_R8G8B8A8_UINT                  0x0CB
527#define GEN4_SURFACEFORMAT_R16G16_UNORM                   0x0CC
528#define GEN4_SURFACEFORMAT_R16G16_SNORM                   0x0CD
529#define GEN4_SURFACEFORMAT_R16G16_SINT                    0x0CE
530#define GEN4_SURFACEFORMAT_R16G16_UINT                    0x0CF
531#define GEN4_SURFACEFORMAT_R16G16_FLOAT                   0x0D0
532#define GEN4_SURFACEFORMAT_B10G10R10A2_UNORM              0x0D1
533#define GEN4_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB         0x0D2
534#define GEN4_SURFACEFORMAT_R11G11B10_FLOAT                0x0D3
535#define GEN4_SURFACEFORMAT_R32_SINT                       0x0D6
536#define GEN4_SURFACEFORMAT_R32_UINT                       0x0D7
537#define GEN4_SURFACEFORMAT_R32_FLOAT                      0x0D8
538#define GEN4_SURFACEFORMAT_R24_UNORM_X8_TYPELESS          0x0D9
539#define GEN4_SURFACEFORMAT_X24_TYPELESS_G8_UINT           0x0DA
540#define GEN4_SURFACEFORMAT_L16A16_UNORM                   0x0DF
541#define GEN4_SURFACEFORMAT_I24X8_UNORM                    0x0E0
542#define GEN4_SURFACEFORMAT_L24X8_UNORM                    0x0E1
543#define GEN4_SURFACEFORMAT_A24X8_UNORM                    0x0E2
544#define GEN4_SURFACEFORMAT_I32_FLOAT                      0x0E3
545#define GEN4_SURFACEFORMAT_L32_FLOAT                      0x0E4
546#define GEN4_SURFACEFORMAT_A32_FLOAT                      0x0E5
547#define GEN4_SURFACEFORMAT_B8G8R8X8_UNORM                 0x0E9
548#define GEN4_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB            0x0EA
549#define GEN4_SURFACEFORMAT_R8G8B8X8_UNORM                 0x0EB
550#define GEN4_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB            0x0EC
551#define GEN4_SURFACEFORMAT_R9G9B9E5_SHAREDEXP             0x0ED
552#define GEN4_SURFACEFORMAT_B10G10R10X2_UNORM              0x0EE
553#define GEN4_SURFACEFORMAT_L16A16_FLOAT                   0x0F0
554#define GEN4_SURFACEFORMAT_R32_UNORM                      0x0F1
555#define GEN4_SURFACEFORMAT_R32_SNORM                      0x0F2
556#define GEN4_SURFACEFORMAT_R10G10B10X2_USCALED            0x0F3
557#define GEN4_SURFACEFORMAT_R8G8B8A8_SSCALED               0x0F4
558#define GEN4_SURFACEFORMAT_R8G8B8A8_USCALED               0x0F5
559#define GEN4_SURFACEFORMAT_R16G16_SSCALED                 0x0F6
560#define GEN4_SURFACEFORMAT_R16G16_USCALED                 0x0F7
561#define GEN4_SURFACEFORMAT_R32_SSCALED                    0x0F8
562#define GEN4_SURFACEFORMAT_R32_USCALED                    0x0F9
563#define GEN4_SURFACEFORMAT_B5G6R5_UNORM                   0x100
564#define GEN4_SURFACEFORMAT_B5G6R5_UNORM_SRGB              0x101
565#define GEN4_SURFACEFORMAT_B5G5R5A1_UNORM                 0x102
566#define GEN4_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB            0x103
567#define GEN4_SURFACEFORMAT_B4G4R4A4_UNORM                 0x104
568#define GEN4_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB            0x105
569#define GEN4_SURFACEFORMAT_R8G8_UNORM                     0x106
570#define GEN4_SURFACEFORMAT_R8G8_SNORM                     0x107
571#define GEN4_SURFACEFORMAT_R8G8_SINT                      0x108
572#define GEN4_SURFACEFORMAT_R8G8_UINT                      0x109
573#define GEN4_SURFACEFORMAT_R16_UNORM                      0x10A
574#define GEN4_SURFACEFORMAT_R16_SNORM                      0x10B
575#define GEN4_SURFACEFORMAT_R16_SINT                       0x10C
576#define GEN4_SURFACEFORMAT_R16_UINT                       0x10D
577#define GEN4_SURFACEFORMAT_R16_FLOAT                      0x10E
578#define GEN4_SURFACEFORMAT_I16_UNORM                      0x111
579#define GEN4_SURFACEFORMAT_L16_UNORM                      0x112
580#define GEN4_SURFACEFORMAT_A16_UNORM                      0x113
581#define GEN4_SURFACEFORMAT_L8A8_UNORM                     0x114
582#define GEN4_SURFACEFORMAT_I16_FLOAT                      0x115
583#define GEN4_SURFACEFORMAT_L16_FLOAT                      0x116
584#define GEN4_SURFACEFORMAT_A16_FLOAT                      0x117
585#define GEN4_SURFACEFORMAT_R5G5_SNORM_B6_UNORM            0x119
586#define GEN4_SURFACEFORMAT_B5G5R5X1_UNORM                 0x11A
587#define GEN4_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB            0x11B
588#define GEN4_SURFACEFORMAT_R8G8_SSCALED                   0x11C
589#define GEN4_SURFACEFORMAT_R8G8_USCALED                   0x11D
590#define GEN4_SURFACEFORMAT_R16_SSCALED                    0x11E
591#define GEN4_SURFACEFORMAT_R16_USCALED                    0x11F
592#define GEN4_SURFACEFORMAT_R8_UNORM                       0x140
593#define GEN4_SURFACEFORMAT_R8_SNORM                       0x141
594#define GEN4_SURFACEFORMAT_R8_SINT                        0x142
595#define GEN4_SURFACEFORMAT_R8_UINT                        0x143
596#define GEN4_SURFACEFORMAT_A8_UNORM                       0x144
597#define GEN4_SURFACEFORMAT_I8_UNORM                       0x145
598#define GEN4_SURFACEFORMAT_L8_UNORM                       0x146
599#define GEN4_SURFACEFORMAT_P4A4_UNORM                     0x147
600#define GEN4_SURFACEFORMAT_A4P4_UNORM                     0x148
601#define GEN4_SURFACEFORMAT_R8_SSCALED                     0x149
602#define GEN4_SURFACEFORMAT_R8_USCALED                     0x14A
603#define GEN4_SURFACEFORMAT_R1_UINT                        0x181
604#define GEN4_SURFACEFORMAT_YCRCB_NORMAL                   0x182
605#define GEN4_SURFACEFORMAT_YCRCB_SWAPUVY                  0x183
606#define GEN4_SURFACEFORMAT_BC1_UNORM                      0x186
607#define GEN4_SURFACEFORMAT_BC2_UNORM                      0x187
608#define GEN4_SURFACEFORMAT_BC3_UNORM                      0x188
609#define GEN4_SURFACEFORMAT_BC4_UNORM                      0x189
610#define GEN4_SURFACEFORMAT_BC5_UNORM                      0x18A
611#define GEN4_SURFACEFORMAT_BC1_UNORM_SRGB                 0x18B
612#define GEN4_SURFACEFORMAT_BC2_UNORM_SRGB                 0x18C
613#define GEN4_SURFACEFORMAT_BC3_UNORM_SRGB                 0x18D
614#define GEN4_SURFACEFORMAT_MONO8                          0x18E
615#define GEN4_SURFACEFORMAT_YCRCB_SWAPUV                   0x18F
616#define GEN4_SURFACEFORMAT_YCRCB_SWAPY                    0x190
617#define GEN4_SURFACEFORMAT_DXT1_RGB                       0x191
618#define GEN4_SURFACEFORMAT_FXT1                           0x192
619#define GEN4_SURFACEFORMAT_R8G8B8_UNORM                   0x193
620#define GEN4_SURFACEFORMAT_R8G8B8_SNORM                   0x194
621#define GEN4_SURFACEFORMAT_R8G8B8_SSCALED                 0x195
622#define GEN4_SURFACEFORMAT_R8G8B8_USCALED                 0x196
623#define GEN4_SURFACEFORMAT_R64G64B64A64_FLOAT             0x197
624#define GEN4_SURFACEFORMAT_R64G64B64_FLOAT                0x198
625#define GEN4_SURFACEFORMAT_BC4_SNORM                      0x199
626#define GEN4_SURFACEFORMAT_BC5_SNORM                      0x19A
627#define GEN4_SURFACEFORMAT_R16G16B16_UNORM                0x19C
628#define GEN4_SURFACEFORMAT_R16G16B16_SNORM                0x19D
629#define GEN4_SURFACEFORMAT_R16G16B16_SSCALED              0x19E
630#define GEN4_SURFACEFORMAT_R16G16B16_USCALED              0x19F
631
632#define GEN4_SURFACERETURNFORMAT_FLOAT32  0
633#define GEN4_SURFACERETURNFORMAT_S1       1
634
635#define GEN4_SURFACE_1D      0
636#define GEN4_SURFACE_2D      1
637#define GEN4_SURFACE_3D      2
638#define GEN4_SURFACE_CUBE    3
639#define GEN4_SURFACE_BUFFER  4
640#define GEN4_SURFACE_NULL    7
641
642#define GEN4_BORDER_COLOR_MODE_DEFAULT	0
643#define GEN4_BORDER_COLOR_MODE_LEGACY	1
644
645#define GEN4_TEXCOORDMODE_WRAP            0
646#define GEN4_TEXCOORDMODE_MIRROR          1
647#define GEN4_TEXCOORDMODE_CLAMP           2
648#define GEN4_TEXCOORDMODE_CUBE            3
649#define GEN4_TEXCOORDMODE_CLAMP_BORDER    4
650#define GEN4_TEXCOORDMODE_MIRROR_ONCE     5
651
652#define GEN4_THREAD_PRIORITY_NORMAL   0
653#define GEN4_THREAD_PRIORITY_HIGH     1
654
655#define GEN4_TILEWALK_XMAJOR                 0
656#define GEN4_TILEWALK_YMAJOR                 1
657
658#define GEN4_VERTEX_SUBPIXEL_PRECISION_8BITS  0
659#define GEN4_VERTEX_SUBPIXEL_PRECISION_4BITS  1
660
661#define GEN4_VERTEXBUFFER_ACCESS_VERTEXDATA     0
662#define GEN4_VERTEXBUFFER_ACCESS_INSTANCEDATA   1
663
664#define VFCOMPONENT_NOSTORE      0
665#define VFCOMPONENT_STORE_SRC    1
666#define VFCOMPONENT_STORE_0      2
667#define VFCOMPONENT_STORE_1_FLT  3
668#define VFCOMPONENT_STORE_1_INT  4
669#define VFCOMPONENT_STORE_VID    5
670#define VFCOMPONENT_STORE_IID    6
671#define VFCOMPONENT_STORE_PID    7
672
673
674/* Execution Unit (EU) defines
675 */
676
677#define GEN4_ALIGN_1   0
678#define GEN4_ALIGN_16  1
679
680#define GEN4_ADDRESS_DIRECT                        0
681#define GEN4_ADDRESS_REGISTER_INDIRECT_REGISTER    1
682
683#define GEN4_CHANNEL_X     0
684#define GEN4_CHANNEL_Y     1
685#define GEN4_CHANNEL_Z     2
686#define GEN4_CHANNEL_W     3
687
688#define GEN4_COMPRESSION_NONE          0
689#define GEN4_COMPRESSION_2NDHALF       1
690#define GEN4_COMPRESSION_COMPRESSED    2
691
692#define GEN4_CONDITIONAL_NONE  0
693#define GEN4_CONDITIONAL_Z     1
694#define GEN4_CONDITIONAL_NZ    2
695#define GEN4_CONDITIONAL_EQ    1	/* Z */
696#define GEN4_CONDITIONAL_NEQ   2	/* NZ */
697#define GEN4_CONDITIONAL_G     3
698#define GEN4_CONDITIONAL_GE    4
699#define GEN4_CONDITIONAL_L     5
700#define GEN4_CONDITIONAL_LE    6
701#define GEN4_CONDITIONAL_C     7
702#define GEN4_CONDITIONAL_O     8
703
704#define GEN4_DEBUG_NONE        0
705#define GEN4_DEBUG_BREAKPOINT  1
706
707#define GEN4_DEPENDENCY_NORMAL         0
708#define GEN4_DEPENDENCY_NOTCLEARED     1
709#define GEN4_DEPENDENCY_NOTCHECKED     2
710#define GEN4_DEPENDENCY_DISABLE        3
711
712#define GEN4_EXECUTE_1     0
713#define GEN4_EXECUTE_2     1
714#define GEN4_EXECUTE_4     2
715#define GEN4_EXECUTE_8     3
716#define GEN4_EXECUTE_16    4
717#define GEN4_EXECUTE_32    5
718
719#define GEN4_HORIZONTAL_STRIDE_0   0
720#define GEN4_HORIZONTAL_STRIDE_1   1
721#define GEN4_HORIZONTAL_STRIDE_2   2
722#define GEN4_HORIZONTAL_STRIDE_4   3
723
724#define GEN4_INSTRUCTION_NORMAL    0
725#define GEN4_INSTRUCTION_SATURATE  1
726
727#define _MASK_ENABLE   0
728#define _MASK_DISABLE  1
729
730#define GEN4_OPCODE_MOV        1
731#define GEN4_OPCODE_SEL        2
732#define GEN4_OPCODE_NOT        4
733#define GEN4_OPCODE_AND        5
734#define GEN4_OPCODE_OR         6
735#define GEN4_OPCODE_XOR        7
736#define GEN4_OPCODE_SHR        8
737#define GEN4_OPCODE_SHL        9
738#define GEN4_OPCODE_RSR        10
739#define GEN4_OPCODE_RSL        11
740#define GEN4_OPCODE_ASR        12
741#define GEN4_OPCODE_CMP        16
742#define GEN4_OPCODE_JMPI       32
743#define GEN4_OPCODE_IF         34
744#define GEN4_OPCODE_IFF        35
745#define GEN4_OPCODE_ELSE       36
746#define GEN4_OPCODE_ENDIF      37
747#define GEN4_OPCODE_DO         38
748#define GEN4_OPCODE_WHILE      39
749#define GEN4_OPCODE_BREAK      40
750#define GEN4_OPCODE_CONTINUE   41
751#define GEN4_OPCODE_HALT       42
752#define GEN4_OPCODE_MSAVE      44
753#define GEN4_OPCODE_MRESTORE   45
754#define GEN4_OPCODE_PUSH       46
755#define GEN4_OPCODE_POP        47
756#define GEN4_OPCODE_WAIT       48
757#define GEN4_OPCODE_SEND       49
758#define GEN4_OPCODE_ADD        64
759#define GEN4_OPCODE_MUL        65
760#define GEN4_OPCODE_AVG        66
761#define GEN4_OPCODE_FRC        67
762#define GEN4_OPCODE_RNDU       68
763#define GEN4_OPCODE_RNDD       69
764#define GEN4_OPCODE_RNDE       70
765#define GEN4_OPCODE_RNDZ       71
766#define GEN4_OPCODE_MAC        72
767#define GEN4_OPCODE_MACH       73
768#define GEN4_OPCODE_LZD        74
769#define GEN4_OPCODE_SAD2       80
770#define GEN4_OPCODE_SADA2      81
771#define GEN4_OPCODE_DP4        84
772#define GEN4_OPCODE_DPH        85
773#define GEN4_OPCODE_DP3        86
774#define GEN4_OPCODE_DP2        87
775#define GEN4_OPCODE_DPA2       88
776#define GEN4_OPCODE_LINE       89
777#define GEN4_OPCODE_NOP        126
778
779#define GEN4_PREDICATE_NONE             0
780#define GEN4_PREDICATE_NORMAL           1
781#define GEN4_PREDICATE_ALIGN1_ANYV             2
782#define GEN4_PREDICATE_ALIGN1_ALLV             3
783#define GEN4_PREDICATE_ALIGN1_ANY2H            4
784#define GEN4_PREDICATE_ALIGN1_ALL2H            5
785#define GEN4_PREDICATE_ALIGN1_ANY4H            6
786#define GEN4_PREDICATE_ALIGN1_ALL4H            7
787#define GEN4_PREDICATE_ALIGN1_ANY8H            8
788#define GEN4_PREDICATE_ALIGN1_ALL8H            9
789#define GEN4_PREDICATE_ALIGN1_ANY16H           10
790#define GEN4_PREDICATE_ALIGN1_ALL16H           11
791#define GEN4_PREDICATE_ALIGN16_REPLICATE_X     2
792#define GEN4_PREDICATE_ALIGN16_REPLICATE_Y     3
793#define GEN4_PREDICATE_ALIGN16_REPLICATE_Z     4
794#define GEN4_PREDICATE_ALIGN16_REPLICATE_W     5
795#define GEN4_PREDICATE_ALIGN16_ANY4H           6
796#define GEN4_PREDICATE_ALIGN16_ALL4H           7
797
798#define GEN4_ARCHITECTURE_REGISTER_FILE    0
799#define GEN4_GENERAL_REGISTER_FILE         1
800#define GEN4_MESSAGE_REGISTER_FILE         2
801#define GEN4_IMMEDIATE_VALUE               3
802
803#define GEN4_REGISTER_TYPE_UD  0
804#define GEN4_REGISTER_TYPE_D   1
805#define GEN4_REGISTER_TYPE_UW  2
806#define GEN4_REGISTER_TYPE_W   3
807#define GEN4_REGISTER_TYPE_UB  4
808#define GEN4_REGISTER_TYPE_B   5
809#define GEN4_REGISTER_TYPE_VF  5	/* packed float vector, immediates only? */
810#define GEN4_REGISTER_TYPE_HF  6
811#define GEN4_REGISTER_TYPE_V   6	/* packed int vector, immediates only, uword dest only */
812#define GEN4_REGISTER_TYPE_F   7
813
814#define GEN4_ARF_NULL                  0x00
815#define GEN4_ARF_ADDRESS               0x10
816#define GEN4_ARF_ACCUMULATOR           0x20
817#define GEN4_ARF_FLAG                  0x30
818#define GEN4_ARF_MASK                  0x40
819#define GEN4_ARF_MASK_STACK            0x50
820#define GEN4_ARF_MASK_STACK_DEPTH      0x60
821#define GEN4_ARF_STATE                 0x70
822#define GEN4_ARF_CONTROL               0x80
823#define GEN4_ARF_NOTIFICATION_COUNT    0x90
824#define GEN4_ARF_IP                    0xA0
825
826#define GEN4_AMASK   0
827#define GEN4_IMASK   1
828#define GEN4_LMASK   2
829#define GEN4_CMASK   3
830
831
832
833#define GEN4_THREAD_NORMAL     0
834#define GEN4_THREAD_ATOMIC     1
835#define GEN4_THREAD_SWITCH     2
836
837#define GEN4_VERTICAL_STRIDE_0                 0
838#define GEN4_VERTICAL_STRIDE_1                 1
839#define GEN4_VERTICAL_STRIDE_2                 2
840#define GEN4_VERTICAL_STRIDE_4                 3
841#define GEN4_VERTICAL_STRIDE_8                 4
842#define GEN4_VERTICAL_STRIDE_16                5
843#define GEN4_VERTICAL_STRIDE_32                6
844#define GEN4_VERTICAL_STRIDE_64                7
845#define GEN4_VERTICAL_STRIDE_128               8
846#define GEN4_VERTICAL_STRIDE_256               9
847#define GEN4_VERTICAL_STRIDE_ONE_DIMENSIONAL   0xF
848
849#define GEN4_WIDTH_1       0
850#define GEN4_WIDTH_2       1
851#define GEN4_WIDTH_4       2
852#define GEN4_WIDTH_8       3
853#define GEN4_WIDTH_16      4
854
855#define GEN4_STATELESS_BUFFER_BOUNDARY_1K      0
856#define GEN4_STATELESS_BUFFER_BOUNDARY_2K      1
857#define GEN4_STATELESS_BUFFER_BOUNDARY_4K      2
858#define GEN4_STATELESS_BUFFER_BOUNDARY_8K      3
859#define GEN4_STATELESS_BUFFER_BOUNDARY_16K     4
860#define GEN4_STATELESS_BUFFER_BOUNDARY_32K     5
861#define GEN4_STATELESS_BUFFER_BOUNDARY_64K     6
862#define GEN4_STATELESS_BUFFER_BOUNDARY_128K    7
863#define GEN4_STATELESS_BUFFER_BOUNDARY_256K    8
864#define GEN4_STATELESS_BUFFER_BOUNDARY_512K    9
865#define GEN4_STATELESS_BUFFER_BOUNDARY_1M      10
866#define GEN4_STATELESS_BUFFER_BOUNDARY_2M      11
867
868#define GEN4_POLYGON_FACING_FRONT      0
869#define GEN4_POLYGON_FACING_BACK       1
870
871#define GEN4_MESSAGE_TARGET_NULL               0
872#define GEN4_MESSAGE_TARGET_MATH               1
873#define GEN4_MESSAGE_TARGET_SAMPLER            2
874#define GEN4_MESSAGE_TARGET_GATEWAY            3
875#define GEN4_MESSAGE_TARGET_DATAPORT_READ      4
876#define GEN4_MESSAGE_TARGET_DATAPORT_WRITE     5
877#define GEN4_MESSAGE_TARGET_URB                6
878#define GEN4_MESSAGE_TARGET_THREAD_SPAWNER     7
879
880#define GEN4_SAMPLER_RETURN_FORMAT_FLOAT32     0
881#define GEN4_SAMPLER_RETURN_FORMAT_UINT32      2
882#define GEN4_SAMPLER_RETURN_FORMAT_SINT32      3
883
884#define GEN4_SAMPLER_MESSAGE_SIMD8_SAMPLE              0
885#define GEN4_SAMPLER_MESSAGE_SIMD16_SAMPLE             0
886#define GEN4_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS        0
887#define GEN4_SAMPLER_MESSAGE_SIMD8_KILLPIX             1
888#define GEN4_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_LOD        1
889#define GEN4_SAMPLER_MESSAGE_SIMD16_SAMPLE_LOD         1
890#define GEN4_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_GRADIENTS  2
891#define GEN4_SAMPLER_MESSAGE_SIMD8_SAMPLE_GRADIENTS    2
892#define GEN4_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_COMPARE    0
893#define GEN4_SAMPLER_MESSAGE_SIMD16_SAMPLE_COMPARE     2
894#define GEN4_SAMPLER_MESSAGE_SIMD4X2_RESINFO           2
895#define GEN4_SAMPLER_MESSAGE_SIMD8_RESINFO             2
896#define GEN4_SAMPLER_MESSAGE_SIMD16_RESINFO            2
897#define GEN4_SAMPLER_MESSAGE_SIMD4X2_LD                3
898#define GEN4_SAMPLER_MESSAGE_SIMD8_LD                  3
899#define GEN4_SAMPLER_MESSAGE_SIMD16_LD                 3
900
901#define GEN4_DATAPORT_OWORD_BLOCK_1_OWORDLOW   0
902#define GEN4_DATAPORT_OWORD_BLOCK_1_OWORDHIGH  1
903#define GEN4_DATAPORT_OWORD_BLOCK_2_OWORDS     2
904#define GEN4_DATAPORT_OWORD_BLOCK_4_OWORDS     3
905#define GEN4_DATAPORT_OWORD_BLOCK_8_OWORDS     4
906
907#define GEN4_DATAPORT_OWORD_DUAL_BLOCK_1OWORD     0
908#define GEN4_DATAPORT_OWORD_DUAL_BLOCK_4OWORDS    2
909
910#define GEN4_DATAPORT_DWORD_SCATTERED_BLOCK_8DWORDS   2
911#define GEN4_DATAPORT_DWORD_SCATTERED_BLOCK_16DWORDS  3
912
913#define GEN4_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ          0
914#define GEN4_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ     1
915#define GEN4_DATAPORT_READ_MESSAGE_DWORD_BLOCK_READ          2
916#define GEN4_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ      3
917
918#define GEN4_DATAPORT_READ_TARGET_DATA_CACHE      0
919#define GEN4_DATAPORT_READ_TARGET_RENDER_CACHE    1
920#define GEN4_DATAPORT_READ_TARGET_SAMPLER_CACHE   2
921
922#define GEN4_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE                0
923#define GEN4_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE_REPLICATED     1
924#define GEN4_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN01         2
925#define GEN4_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN23         3
926#define GEN4_DATAPORT_RENDER_TARGET_WRITE_SIMD8_SINGLE_SOURCE_SUBSPAN01       4
927
928#define GEN4_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE                0
929#define GEN4_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE           1
930#define GEN4_DATAPORT_WRITE_MESSAGE_DWORD_BLOCK_WRITE                2
931#define GEN4_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE            3
932#define GEN4_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE              4
933#define GEN4_DATAPORT_WRITE_MESSAGE_STREAMED_VERTEX_BUFFER_WRITE     5
934#define GEN4_DATAPORT_WRITE_MESSAGE_FLUSH_RENDER_CACHE               7
935
936#define GEN4_MATH_FUNCTION_INV                              1
937#define GEN4_MATH_FUNCTION_LOG                              2
938#define GEN4_MATH_FUNCTION_EXP                              3
939#define GEN4_MATH_FUNCTION_SQRT                             4
940#define GEN4_MATH_FUNCTION_RSQ                              5
941#define GEN4_MATH_FUNCTION_SIN                              6 /* was 7 */
942#define GEN4_MATH_FUNCTION_COS                              7 /* was 8 */
943#define GEN4_MATH_FUNCTION_SINCOS                           8 /* was 6 */
944#define GEN4_MATH_FUNCTION_TAN                              9
945#define GEN4_MATH_FUNCTION_POW                              10
946#define GEN4_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER   11
947#define GEN4_MATH_FUNCTION_INT_DIV_QUOTIENT                 12
948#define GEN4_MATH_FUNCTION_INT_DIV_REMAINDER                13
949
950#define GEN4_MATH_INTEGER_UNSIGNED     0
951#define GEN4_MATH_INTEGER_SIGNED       1
952
953#define GEN4_MATH_PRECISION_FULL        0
954#define GEN4_MATH_PRECISION_PARTIAL     1
955
956#define GEN4_MATH_SATURATE_NONE         0
957#define GEN4_MATH_SATURATE_SATURATE     1
958
959#define GEN4_MATH_DATA_VECTOR  0
960#define GEN4_MATH_DATA_SCALAR  1
961
962#define GEN4_URB_OPCODE_WRITE  0
963
964#define GEN4_URB_SWIZZLE_NONE          0
965#define GEN4_URB_SWIZZLE_INTERLEAVE    1
966#define GEN4_URB_SWIZZLE_TRANSPOSE     2
967
968#define GEN4_SCRATCH_SPACE_SIZE_1K     0
969#define GEN4_SCRATCH_SPACE_SIZE_2K     1
970#define GEN4_SCRATCH_SPACE_SIZE_4K     2
971#define GEN4_SCRATCH_SPACE_SIZE_8K     3
972#define GEN4_SCRATCH_SPACE_SIZE_16K    4
973#define GEN4_SCRATCH_SPACE_SIZE_32K    5
974#define GEN4_SCRATCH_SPACE_SIZE_64K    6
975#define GEN4_SCRATCH_SPACE_SIZE_128K   7
976#define GEN4_SCRATCH_SPACE_SIZE_256K   8
977#define GEN4_SCRATCH_SPACE_SIZE_512K   9
978#define GEN4_SCRATCH_SPACE_SIZE_1M     10
979#define GEN4_SCRATCH_SPACE_SIZE_2M     11
980
981
982
983
984#define CMD_URB_FENCE                 0x6000
985#define CMD_CONST_BUFFER_STATE        0x6001
986#define CMD_CONST_BUFFER              0x6002
987
988#define CMD_STATE_BASE_ADDRESS        0x6101
989#define CMD_STATE_INSN_POINTER        0x6102
990#define CMD_PIPELINE_SELECT           0x6104
991
992#define CMD_PIPELINED_STATE_POINTERS  0x7800
993#define CMD_BINDING_TABLE_PTRS        0x7801
994#define CMD_VERTEX_BUFFER             0x7808
995#define CMD_VERTEX_ELEMENT            0x7809
996#define CMD_INDEX_BUFFER              0x780a
997#define CMD_VF_STATISTICS             0x780b
998
999#define CMD_DRAW_RECT                 0x7900
1000#define CMD_BLEND_CONSTANT_COLOR      0x7901
1001#define CMD_CHROMA_KEY                0x7904
1002#define CMD_DEPTH_BUFFER              0x7905
1003#define CMD_POLY_STIPPLE_OFFSET       0x7906
1004#define CMD_POLY_STIPPLE_PATTERN      0x7907
1005#define CMD_LINE_STIPPLE_PATTERN      0x7908
1006#define CMD_GLOBAL_DEPTH_OFFSET_CLAMP 0x7908
1007
1008#define CMD_PIPE_CONTROL              0x7a00
1009
1010#define CMD_3D_PRIM                   0x7b00
1011
1012#define CMD_MI_FLUSH                  0x0200
1013
1014
1015/* Various values from the R0 vertex header:
1016 */
1017#define R02_PRIM_END    0x1
1018#define R02_PRIM_START  0x2
1019
1020/* media pipeline */
1021
1022#define GEN4_VFE_MODE_GENERIC		0x0
1023#define GEN4_VFE_MODE_VLD_MPEG2		0x1
1024#define GEN4_VFE_MODE_IS			0x2
1025#define GEN4_VFE_MODE_AVC_MC		0x4
1026#define GEN4_VFE_MODE_AVC_IT		0x7
1027#define GEN4_VFE_MODE_VC1_IT		0xB
1028
1029#define GEN4_VFE_DEBUG_COUNTER_FREE	0
1030#define GEN4_VFE_DEBUG_COUNTER_FROZEN	1
1031#define GEN4_VFE_DEBUG_COUNTER_ONCE	2
1032#define GEN4_VFE_DEBUG_COUNTER_ALWAYS	3
1033
1034/* VLD_STATE */
1035#define GEN4_MPEG_TOP_FIELD		1
1036#define GEN4_MPEG_BOTTOM_FIELD		2
1037#define GEN4_MPEG_FRAME			3
1038#define GEN4_MPEG_QSCALE_LINEAR		0
1039#define GEN4_MPEG_QSCALE_NONLINEAR	1
1040#define GEN4_MPEG_ZIGZAG_SCAN		0
1041#define GEN4_MPEG_ALTER_VERTICAL_SCAN	1
1042#define GEN4_MPEG_I_PICTURE		1
1043#define GEN4_MPEG_P_PICTURE		2
1044#define GEN4_MPEG_B_PICTURE		3
1045
1046/* Command packets:
1047 */
1048struct header
1049{
1050   unsigned int length:16;
1051   unsigned int opcode:16;
1052};
1053
1054
1055union header_union
1056{
1057   struct header bits;
1058   unsigned int dword;
1059};
1060
1061struct gen4_3d_control
1062{
1063   struct
1064   {
1065      unsigned int length:8;
1066      unsigned int notify_enable:1;
1067      unsigned int pad:3;
1068      unsigned int wc_flush_enable:1;
1069      unsigned int depth_stall_enable:1;
1070      unsigned int operation:2;
1071      unsigned int opcode:16;
1072   } header;
1073
1074   struct
1075   {
1076      unsigned int pad:2;
1077      unsigned int dest_addr_type:1;
1078      unsigned int dest_addr:29;
1079   } dest;
1080
1081   unsigned int dword2;
1082   unsigned int dword3;
1083};
1084
1085
1086struct gen4_3d_primitive
1087{
1088   struct
1089   {
1090      unsigned int length:8;
1091      unsigned int pad:2;
1092      unsigned int topology:5;
1093      unsigned int indexed:1;
1094      unsigned int opcode:16;
1095   } header;
1096
1097   unsigned int verts_per_instance;
1098   unsigned int start_vert_location;
1099   unsigned int instance_count;
1100   unsigned int start_instance_location;
1101   unsigned int base_vert_location;
1102};
1103
1104/* These seem to be passed around as function args, so it works out
1105 * better to keep them as #defines:
1106 */
1107#define GEN4_FLUSH_READ_CACHE           0x1
1108#define GEN4_FLUSH_STATE_CACHE          0x2
1109#define GEN4_INHIBIT_FLUSH_RENDER_CACHE 0x4
1110#define GEN4_FLUSH_SNAPSHOT_COUNTERS    0x8
1111
1112struct gen4_mi_flush
1113{
1114   unsigned int flags:4;
1115   unsigned int pad:12;
1116   unsigned int opcode:16;
1117};
1118
1119struct gen4_vf_statistics
1120{
1121   unsigned int statistics_enable:1;
1122   unsigned int pad:15;
1123   unsigned int opcode:16;
1124};
1125
1126
1127
1128struct gen4_binding_table_pointers
1129{
1130   struct header header;
1131   unsigned int vs;
1132   unsigned int gs;
1133   unsigned int clp;
1134   unsigned int sf;
1135   unsigned int wm;
1136};
1137
1138
1139struct gen4_blend_constant_color
1140{
1141   struct header header;
1142   float blend_constant_color[4];
1143};
1144
1145
1146struct gen4_depthbuffer
1147{
1148   union header_union header;
1149
1150   union {
1151      struct {
1152	 unsigned int pitch:18;
1153	 unsigned int format:3;
1154	 unsigned int pad:4;
1155	 unsigned int depth_offset_disable:1;
1156	 unsigned int tile_walk:1;
1157	 unsigned int tiled_surface:1;
1158	 unsigned int pad2:1;
1159	 unsigned int surface_type:3;
1160      } bits;
1161      unsigned int dword;
1162   } dword1;
1163
1164   unsigned int dword2_base_addr;
1165
1166   union {
1167      struct {
1168	 unsigned int pad:1;
1169	 unsigned int mipmap_layout:1;
1170	 unsigned int lod:4;
1171	 unsigned int width:13;
1172	 unsigned int height:13;
1173      } bits;
1174      unsigned int dword;
1175   } dword3;
1176
1177   union {
1178      struct {
1179	 unsigned int pad:12;
1180	 unsigned int min_array_element:9;
1181	 unsigned int depth:11;
1182      } bits;
1183      unsigned int dword;
1184   } dword4;
1185};
1186
1187struct gen4_drawrect
1188{
1189   struct header header;
1190   unsigned int xmin:16;
1191   unsigned int ymin:16;
1192   unsigned int xmax:16;
1193   unsigned int ymax:16;
1194   unsigned int xorg:16;
1195   unsigned int yorg:16;
1196};
1197
1198
1199
1200
1201struct gen4_global_depth_offset_clamp
1202{
1203   struct header header;
1204   float depth_offset_clamp;
1205};
1206
1207struct gen4_indexbuffer
1208{
1209   union {
1210      struct
1211      {
1212	 unsigned int length:8;
1213	 unsigned int index_format:2;
1214	 unsigned int cut_index_enable:1;
1215	 unsigned int pad:5;
1216	 unsigned int opcode:16;
1217      } bits;
1218      unsigned int dword;
1219
1220   } header;
1221
1222   unsigned int buffer_start;
1223   unsigned int buffer_end;
1224};
1225
1226
1227struct gen4_line_stipple
1228{
1229   struct header header;
1230
1231   struct
1232   {
1233      unsigned int pattern:16;
1234      unsigned int pad:16;
1235   } bits0;
1236
1237   struct
1238   {
1239      unsigned int repeat_count:9;
1240      unsigned int pad:7;
1241      unsigned int inverse_repeat_count:16;
1242   } bits1;
1243};
1244
1245
1246struct gen4_pipelined_state_pointers
1247{
1248   struct header header;
1249
1250   struct {
1251      unsigned int pad:5;
1252      unsigned int offset:27;
1253   } vs;
1254
1255   struct
1256   {
1257      unsigned int enable:1;
1258      unsigned int pad:4;
1259      unsigned int offset:27;
1260   } gs;
1261
1262   struct
1263   {
1264      unsigned int enable:1;
1265      unsigned int pad:4;
1266      unsigned int offset:27;
1267   } clp;
1268
1269   struct
1270   {
1271      unsigned int pad:5;
1272      unsigned int offset:27;
1273   } sf;
1274
1275   struct
1276   {
1277      unsigned int pad:5;
1278      unsigned int offset:27;
1279   } wm;
1280
1281   struct
1282   {
1283      unsigned int pad:5;
1284      unsigned int offset:27; /* KW: check me! */
1285   } cc;
1286};
1287
1288
1289struct gen4_polygon_stipple_offset
1290{
1291   struct header header;
1292
1293   struct {
1294      unsigned int y_offset:5;
1295      unsigned int pad:3;
1296      unsigned int x_offset:5;
1297      unsigned int pad0:19;
1298   } bits0;
1299};
1300
1301
1302
1303struct gen4_polygon_stipple
1304{
1305   struct header header;
1306   unsigned int stipple[32];
1307};
1308
1309
1310
1311struct gen4_pipeline_select
1312{
1313   struct
1314   {
1315      unsigned int pipeline_select:1;
1316      unsigned int pad:15;
1317      unsigned int opcode:16;
1318   } header;
1319};
1320
1321
1322struct gen4_pipe_control
1323{
1324   struct
1325   {
1326      unsigned int length:8;
1327      unsigned int notify_enable:1;
1328      unsigned int pad:2;
1329      unsigned int instruction_state_cache_flush_enable:1;
1330      unsigned int write_cache_flush_enable:1;
1331      unsigned int depth_stall_enable:1;
1332      unsigned int post_sync_operation:2;
1333
1334      unsigned int opcode:16;
1335   } header;
1336
1337   struct
1338   {
1339      unsigned int pad:2;
1340      unsigned int dest_addr_type:1;
1341      unsigned int dest_addr:29;
1342   } bits1;
1343
1344   unsigned int data0;
1345   unsigned int data1;
1346};
1347
1348
1349struct gen4_urb_fence
1350{
1351   struct
1352   {
1353      unsigned int length:8;
1354      unsigned int vs_realloc:1;
1355      unsigned int gs_realloc:1;
1356      unsigned int clp_realloc:1;
1357      unsigned int sf_realloc:1;
1358      unsigned int vfe_realloc:1;
1359      unsigned int cs_realloc:1;
1360      unsigned int pad:2;
1361      unsigned int opcode:16;
1362   } header;
1363
1364   struct
1365   {
1366      unsigned int vs_fence:10;
1367      unsigned int gs_fence:10;
1368      unsigned int clp_fence:10;
1369      unsigned int pad:2;
1370   } bits0;
1371
1372   struct
1373   {
1374      unsigned int sf_fence:10;
1375      unsigned int vf_fence:10;
1376      unsigned int cs_fence:10;
1377      unsigned int pad:2;
1378   } bits1;
1379};
1380
1381struct gen4_constant_buffer_state /* previously gen4_command_streamer */
1382{
1383   struct header header;
1384
1385   struct
1386   {
1387      unsigned int nr_urb_entries:3;
1388      unsigned int pad:1;
1389      unsigned int urb_entry_size:5;
1390      unsigned int pad0:23;
1391   } bits0;
1392};
1393
1394struct gen4_constant_buffer
1395{
1396   struct
1397   {
1398      unsigned int length:8;
1399      unsigned int valid:1;
1400      unsigned int pad:7;
1401      unsigned int opcode:16;
1402   } header;
1403
1404   struct
1405   {
1406      unsigned int buffer_length:6;
1407      unsigned int buffer_address:26;
1408   } bits0;
1409};
1410
1411struct gen4_state_base_address
1412{
1413   struct header header;
1414
1415   struct
1416   {
1417      unsigned int modify_enable:1;
1418      unsigned int pad:4;
1419      unsigned int general_state_address:27;
1420   } bits0;
1421
1422   struct
1423   {
1424      unsigned int modify_enable:1;
1425      unsigned int pad:4;
1426      unsigned int surface_state_address:27;
1427   } bits1;
1428
1429   struct
1430   {
1431      unsigned int modify_enable:1;
1432      unsigned int pad:4;
1433      unsigned int indirect_object_state_address:27;
1434   } bits2;
1435
1436   struct
1437   {
1438      unsigned int modify_enable:1;
1439      unsigned int pad:11;
1440      unsigned int general_state_upper_bound:20;
1441   } bits3;
1442
1443   struct
1444   {
1445      unsigned int modify_enable:1;
1446      unsigned int pad:11;
1447      unsigned int indirect_object_state_upper_bound:20;
1448   } bits4;
1449};
1450
1451struct gen4_state_prefetch
1452{
1453   struct header header;
1454
1455   struct
1456   {
1457      unsigned int prefetch_count:3;
1458      unsigned int pad:3;
1459      unsigned int prefetch_pointer:26;
1460   } bits0;
1461};
1462
1463struct gen4_system_instruction_pointer
1464{
1465   struct header header;
1466
1467   struct
1468   {
1469      unsigned int pad:4;
1470      unsigned int system_instruction_pointer:28;
1471   } bits0;
1472};
1473
1474
1475
1476
1477/* State structs for the various fixed function units:
1478 */
1479
1480
1481struct thread0
1482{
1483   unsigned int pad0:1;
1484   unsigned int grf_reg_count:3;
1485   unsigned int pad1:2;
1486   unsigned int kernel_start_pointer:26;
1487};
1488
1489struct thread1
1490{
1491   unsigned int ext_halt_exception_enable:1;
1492   unsigned int sw_exception_enable:1;
1493   unsigned int mask_stack_exception_enable:1;
1494   unsigned int timeout_exception_enable:1;
1495   unsigned int illegal_op_exception_enable:1;
1496   unsigned int pad0:3;
1497   unsigned int depth_coef_urb_read_offset:6;	/* WM only */
1498   unsigned int pad1:2;
1499   unsigned int floating_point_mode:1;
1500   unsigned int thread_priority:1;
1501   unsigned int binding_table_entry_count:8;
1502   unsigned int pad3:5;
1503   unsigned int single_program_flow:1;
1504};
1505
1506struct thread2
1507{
1508   unsigned int per_thread_scratch_space:4;
1509   unsigned int pad0:6;
1510   unsigned int scratch_space_base_pointer:22;
1511};
1512
1513
1514struct thread3
1515{
1516   unsigned int dispatch_grf_start_reg:4;
1517   unsigned int urb_entry_read_offset:6;
1518   unsigned int pad0:1;
1519   unsigned int urb_entry_read_length:6;
1520   unsigned int pad1:1;
1521   unsigned int const_urb_entry_read_offset:6;
1522   unsigned int pad2:1;
1523   unsigned int const_urb_entry_read_length:6;
1524   unsigned int pad3:1;
1525};
1526
1527
1528
1529struct gen4_clip_unit_state
1530{
1531   struct thread0 thread0;
1532   struct thread1 thread1;
1533   struct thread2 thread2;
1534   struct thread3 thread3;
1535
1536   struct
1537   {
1538      unsigned int pad0:9;
1539      unsigned int gs_output_stats:1; /* not always */
1540      unsigned int stats_enable:1;
1541      unsigned int nr_urb_entries:7;
1542      unsigned int pad1:1;
1543      unsigned int urb_entry_allocation_size:5;
1544      unsigned int pad2:1;
1545      unsigned int max_threads:6; 	/* may be less */
1546      unsigned int pad3:1;
1547   } thread4;
1548
1549   struct
1550   {
1551      unsigned int pad0:13;
1552      unsigned int clip_mode:3;
1553      unsigned int userclip_enable_flags:8;
1554      unsigned int userclip_must_clip:1;
1555      unsigned int pad1:1;
1556      unsigned int guard_band_enable:1;
1557      unsigned int viewport_z_clip_enable:1;
1558      unsigned int viewport_xy_clip_enable:1;
1559      unsigned int vertex_position_space:1;
1560      unsigned int api_mode:1;
1561      unsigned int pad2:1;
1562   } clip5;
1563
1564   struct
1565   {
1566      unsigned int pad0:5;
1567      unsigned int clipper_viewport_state_ptr:27;
1568   } clip6;
1569
1570
1571   float viewport_xmin;
1572   float viewport_xmax;
1573   float viewport_ymin;
1574   float viewport_ymax;
1575};
1576
1577
1578
1579struct gen4_cc_unit_state
1580{
1581   struct
1582   {
1583      unsigned int pad0:3;
1584      unsigned int bf_stencil_pass_depth_pass_op:3;
1585      unsigned int bf_stencil_pass_depth_fail_op:3;
1586      unsigned int bf_stencil_fail_op:3;
1587      unsigned int bf_stencil_func:3;
1588      unsigned int bf_stencil_enable:1;
1589      unsigned int pad1:2;
1590      unsigned int stencil_write_enable:1;
1591      unsigned int stencil_pass_depth_pass_op:3;
1592      unsigned int stencil_pass_depth_fail_op:3;
1593      unsigned int stencil_fail_op:3;
1594      unsigned int stencil_func:3;
1595      unsigned int stencil_enable:1;
1596   } cc0;
1597
1598
1599   struct
1600   {
1601      unsigned int bf_stencil_ref:8;
1602      unsigned int stencil_write_mask:8;
1603      unsigned int stencil_test_mask:8;
1604      unsigned int stencil_ref:8;
1605   } cc1;
1606
1607
1608   struct
1609   {
1610      unsigned int logicop_enable:1;
1611      unsigned int pad0:10;
1612      unsigned int depth_write_enable:1;
1613      unsigned int depth_test_function:3;
1614      unsigned int depth_test:1;
1615      unsigned int bf_stencil_write_mask:8;
1616      unsigned int bf_stencil_test_mask:8;
1617   } cc2;
1618
1619
1620   struct
1621   {
1622      unsigned int pad0:8;
1623      unsigned int alpha_test_func:3;
1624      unsigned int alpha_test:1;
1625      unsigned int blend_enable:1;
1626      unsigned int ia_blend_enable:1;
1627      unsigned int pad1:1;
1628      unsigned int alpha_test_format:1;
1629      unsigned int pad2:16;
1630   } cc3;
1631
1632   struct
1633   {
1634      unsigned int pad0:5;
1635      unsigned int cc_viewport_state_offset:27;
1636   } cc4;
1637
1638   struct
1639   {
1640      unsigned int pad0:2;
1641      unsigned int ia_dest_blend_factor:5;
1642      unsigned int ia_src_blend_factor:5;
1643      unsigned int ia_blend_function:3;
1644      unsigned int statistics_enable:1;
1645      unsigned int logicop_func:4;
1646      unsigned int pad1:11;
1647      unsigned int dither_enable:1;
1648   } cc5;
1649
1650   struct
1651   {
1652      unsigned int clamp_post_alpha_blend:1;
1653      unsigned int clamp_pre_alpha_blend:1;
1654      unsigned int clamp_range:2;
1655      unsigned int pad0:11;
1656      unsigned int y_dither_offset:2;
1657      unsigned int x_dither_offset:2;
1658      unsigned int dest_blend_factor:5;
1659      unsigned int src_blend_factor:5;
1660      unsigned int blend_function:3;
1661   } cc6;
1662
1663   struct {
1664      union {
1665	 float f;
1666	 unsigned char ub[4];
1667      } alpha_ref;
1668   } cc7;
1669};
1670
1671
1672
1673struct gen4_sf_unit_state
1674{
1675   struct thread0 thread0;
1676   struct {
1677      unsigned int pad0:7;
1678      unsigned int sw_exception_enable:1;
1679      unsigned int pad1:3;
1680      unsigned int mask_stack_exception_enable:1;
1681      unsigned int pad2:1;
1682      unsigned int illegal_op_exception_enable:1;
1683      unsigned int pad3:2;
1684      unsigned int floating_point_mode:1;
1685      unsigned int thread_priority:1;
1686      unsigned int binding_table_entry_count:8;
1687      unsigned int pad4:5;
1688      unsigned int single_program_flow:1;
1689   } sf1;
1690
1691   struct thread2 thread2;
1692   struct thread3 thread3;
1693
1694   struct
1695   {
1696      unsigned int pad0:10;
1697      unsigned int stats_enable:1;
1698      unsigned int nr_urb_entries:7;
1699      unsigned int pad1:1;
1700      unsigned int urb_entry_allocation_size:5;
1701      unsigned int pad2:1;
1702      unsigned int max_threads:6;
1703      unsigned int pad3:1;
1704   } thread4;
1705
1706   struct
1707   {
1708      unsigned int front_winding:1;
1709      unsigned int viewport_transform:1;
1710      unsigned int pad0:3;
1711      unsigned int sf_viewport_state_offset:27;
1712   } sf5;
1713
1714   struct
1715   {
1716      unsigned int pad0:9;
1717      unsigned int dest_org_vbias:4;
1718      unsigned int dest_org_hbias:4;
1719      unsigned int scissor:1;
1720      unsigned int disable_2x2_trifilter:1;
1721      unsigned int disable_zero_pix_trifilter:1;
1722      unsigned int point_rast_rule:2;
1723      unsigned int line_endcap_aa_region_width:2;
1724      unsigned int line_width:4;
1725      unsigned int fast_scissor_disable:1;
1726      unsigned int cull_mode:2;
1727      unsigned int aa_enable:1;
1728   } sf6;
1729
1730   struct
1731   {
1732      unsigned int point_size:11;
1733      unsigned int use_point_size_state:1;
1734      unsigned int subpixel_precision:1;
1735      unsigned int sprite_point:1;
1736      unsigned int pad0:11;
1737      unsigned int trifan_pv:2;
1738      unsigned int linestrip_pv:2;
1739      unsigned int tristrip_pv:2;
1740      unsigned int line_last_pixel_enable:1;
1741   } sf7;
1742
1743};
1744
1745
1746struct gen4_gs_unit_state
1747{
1748   struct thread0 thread0;
1749   struct thread1 thread1;
1750   struct thread2 thread2;
1751   struct thread3 thread3;
1752
1753   struct
1754   {
1755      unsigned int pad0:10;
1756      unsigned int stats_enable:1;
1757      unsigned int nr_urb_entries:7;
1758      unsigned int pad1:1;
1759      unsigned int urb_entry_allocation_size:5;
1760      unsigned int pad2:1;
1761      unsigned int max_threads:1;
1762      unsigned int pad3:6;
1763   } thread4;
1764
1765   struct
1766   {
1767      unsigned int sampler_count:3;
1768      unsigned int pad0:2;
1769      unsigned int sampler_state_pointer:27;
1770   } gs5;
1771
1772
1773   struct
1774   {
1775      unsigned int max_vp_index:4;
1776      unsigned int pad0:26;
1777      unsigned int reorder_enable:1;
1778      unsigned int pad1:1;
1779   } gs6;
1780};
1781
1782
1783struct gen4_vs_unit_state
1784{
1785   struct thread0 thread0;
1786   struct thread1 thread1;
1787   struct thread2 thread2;
1788   struct thread3 thread3;
1789
1790   struct
1791   {
1792      unsigned int pad0:10;
1793      unsigned int stats_enable:1;
1794      unsigned int nr_urb_entries:7;
1795      unsigned int pad1:1;
1796      unsigned int urb_entry_allocation_size:5;
1797      unsigned int pad2:1;
1798      unsigned int max_threads:4;
1799      unsigned int pad3:3;
1800   } thread4;
1801
1802   struct
1803   {
1804      unsigned int sampler_count:3;
1805      unsigned int pad0:2;
1806      unsigned int sampler_state_pointer:27;
1807   } vs5;
1808
1809   struct
1810   {
1811      unsigned int vs_enable:1;
1812      unsigned int vert_cache_disable:1;
1813      unsigned int pad0:30;
1814   } vs6;
1815};
1816
1817
1818struct gen4_wm_unit_state
1819{
1820   struct thread0 thread0;
1821   struct thread1 thread1;
1822   struct thread2 thread2;
1823   struct thread3 thread3;
1824
1825   struct {
1826      unsigned int stats_enable:1;
1827      unsigned int pad0:1;
1828      unsigned int sampler_count:3;
1829      unsigned int sampler_state_pointer:27;
1830   } wm4;
1831
1832   struct
1833   {
1834      unsigned int enable_8_pix:1;
1835      unsigned int enable_16_pix:1;
1836      unsigned int enable_32_pix:1;
1837      unsigned int pad0:7;
1838      unsigned int legacy_global_depth_bias:1;
1839      unsigned int line_stipple:1;
1840      unsigned int depth_offset:1;
1841      unsigned int polygon_stipple:1;
1842      unsigned int line_aa_region_width:2;
1843      unsigned int line_endcap_aa_region_width:2;
1844      unsigned int early_depth_test:1;
1845      unsigned int thread_dispatch_enable:1;
1846      unsigned int program_uses_depth:1;
1847      unsigned int program_computes_depth:1;
1848      unsigned int program_uses_killpixel:1;
1849      unsigned int legacy_line_rast: 1;
1850      unsigned int transposed_urb_read:1;
1851      unsigned int max_threads:7;
1852   } wm5;
1853
1854   float global_depth_offset_constant;
1855   float global_depth_offset_scale;
1856
1857   struct {
1858      unsigned int pad0:1;
1859      unsigned int grf_reg_count_1:3;
1860      unsigned int pad1:2;
1861      unsigned int kernel_start_pointer_1:26;
1862   } wm8;
1863
1864   struct {
1865      unsigned int pad0:1;
1866      unsigned int grf_reg_count_2:3;
1867      unsigned int pad1:2;
1868      unsigned int kernel_start_pointer_2:26;
1869   } wm9;
1870
1871   struct {
1872      unsigned int pad0:1;
1873      unsigned int grf_reg_count_3:3;
1874      unsigned int pad1:2;
1875      unsigned int kernel_start_pointer_3:26;
1876   } wm10;
1877};
1878
1879struct gen4_wm_unit_state_padded {
1880	struct gen4_wm_unit_state state;
1881	char pad[64 - sizeof(struct gen4_wm_unit_state)];
1882};
1883
1884/* The hardware supports two different modes for border color. The
1885 * default (OpenGL) mode uses floating-point color channels, while the
1886 * legacy mode uses 4 bytes.
1887 *
1888 * More significantly, the legacy mode respects the components of the
1889 * border color for channels not present in the source, (whereas the
1890 * default mode will ignore the border color's alpha channel and use
1891 * alpha==1 for an RGB source, for example).
1892 *
1893 * The legacy mode matches the semantics specified by the Render
1894 * extension.
1895 */
1896struct gen4_sampler_default_border_color {
1897   float color[4];
1898};
1899
1900struct gen4_sampler_legacy_border_color {
1901   uint8_t color[4];
1902};
1903
1904struct gen4_sampler_state
1905{
1906
1907   struct
1908   {
1909      unsigned int shadow_function:3;
1910      unsigned int lod_bias:11;
1911      unsigned int min_filter:3;
1912      unsigned int mag_filter:3;
1913      unsigned int mip_filter:2;
1914      unsigned int base_level:5;
1915      unsigned int pad:1;
1916      unsigned int lod_preclamp:1;
1917      unsigned int border_color_mode:1;
1918      unsigned int pad0:1;
1919      unsigned int disable:1;
1920   } ss0;
1921
1922   struct
1923   {
1924      unsigned int r_wrap_mode:3;
1925      unsigned int t_wrap_mode:3;
1926      unsigned int s_wrap_mode:3;
1927      unsigned int pad:3;
1928      unsigned int max_lod:10;
1929      unsigned int min_lod:10;
1930   } ss1;
1931
1932
1933   struct
1934   {
1935      unsigned int pad:5;
1936      unsigned int border_color_pointer:27;
1937   } ss2;
1938
1939   struct
1940   {
1941      unsigned int pad:19;
1942      unsigned int max_aniso:3;
1943      unsigned int chroma_key_mode:1;
1944      unsigned int chroma_key_index:2;
1945      unsigned int chroma_key_enable:1;
1946      unsigned int monochrome_filter_width:3;
1947      unsigned int monochrome_filter_height:3;
1948   } ss3;
1949};
1950
1951
1952struct gen4_clipper_viewport
1953{
1954   float xmin;
1955   float xmax;
1956   float ymin;
1957   float ymax;
1958};
1959
1960struct gen4_cc_viewport
1961{
1962   float min_depth;
1963   float max_depth;
1964};
1965
1966struct gen4_sf_viewport
1967{
1968   struct {
1969      float m00;
1970      float m11;
1971      float m22;
1972      float m30;
1973      float m31;
1974      float m32;
1975   } viewport;
1976
1977   struct {
1978      short xmin;
1979      short ymin;
1980      short xmax;
1981      short ymax;
1982   } scissor;
1983};
1984
1985/* Documented in the subsystem/shared-functions/sampler chapter...
1986 */
1987struct gen4_surface_state
1988{
1989   struct {
1990      unsigned int cube_pos_z:1;
1991      unsigned int cube_neg_z:1;
1992      unsigned int cube_pos_y:1;
1993      unsigned int cube_neg_y:1;
1994      unsigned int cube_pos_x:1;
1995      unsigned int cube_neg_x:1;
1996      unsigned int pad:3;
1997      unsigned int render_cache_read_mode:1;
1998      unsigned int mipmap_layout_mode:1;
1999      unsigned int vert_line_stride_ofs:1;
2000      unsigned int vert_line_stride:1;
2001      unsigned int color_blend:1;
2002      unsigned int writedisable_blue:1;
2003      unsigned int writedisable_green:1;
2004      unsigned int writedisable_red:1;
2005      unsigned int writedisable_alpha:1;
2006      unsigned int surface_format:9;
2007      unsigned int data_return_format:1;
2008      unsigned int pad0:1;
2009      unsigned int surface_type:3;
2010   } ss0;
2011
2012   struct {
2013      unsigned int base_addr;
2014   } ss1;
2015
2016   struct {
2017      unsigned int render_target_rotation:2;
2018      unsigned int mip_count:4;
2019      unsigned int width:13;
2020      unsigned int height:13;
2021   } ss2;
2022
2023   struct {
2024      unsigned int tile_walk:1;
2025      unsigned int tiled_surface:1;
2026      unsigned int pad:1;
2027      unsigned int pitch:18;
2028      unsigned int depth:11;
2029   } ss3;
2030
2031   struct {
2032      unsigned int pad:19;
2033      unsigned int min_array_elt:9;
2034      unsigned int min_lod:4;
2035   } ss4;
2036
2037   struct {
2038       unsigned int pad:20;
2039       unsigned int y_offset:4;
2040       unsigned int pad2:1;
2041       unsigned int x_offset:7;
2042   } ss5;
2043};
2044
2045/* Surface state DW0 */
2046#define GEN4_SURFACE_RC_READ_WRITE       (1 << 8)
2047#define GEN4_SURFACE_MIPLAYOUT_SHIFT     10
2048#define GEN4_SURFACE_MIPMAPLAYOUT_BELOW   0
2049#define GEN4_SURFACE_MIPMAPLAYOUT_RIGHT   1
2050#define GEN4_SURFACE_CUBEFACE_ENABLES    0x3f
2051#define GEN4_SURFACE_BLEND_ENABLED       (1 << 13)
2052#define GEN4_SURFACE_WRITEDISABLE_B_SHIFT        14
2053#define GEN4_SURFACE_WRITEDISABLE_G_SHIFT        15
2054#define GEN4_SURFACE_WRITEDISABLE_R_SHIFT        16
2055#define GEN4_SURFACE_WRITEDISABLE_A_SHIFT        17
2056#define GEN4_SURFACE_FORMAT_SHIFT        18
2057#define GEN4_SURFACE_FORMAT_MASK         _MASK(26, 18)
2058
2059#define GEN4_SURFACE_TYPE_SHIFT          29
2060#define GEN4_SURFACE_TYPE_MASK           _MASK(31, 29)
2061#define GEN4_SURFACE_1D      0
2062#define GEN4_SURFACE_2D      1
2063#define GEN4_SURFACE_3D      2
2064#define GEN4_SURFACE_CUBE    3
2065#define GEN4_SURFACE_BUFFER  4
2066#define GEN4_SURFACE_NULL    7
2067
2068/* Surface state DW2 */
2069#define GEN4_SURFACE_HEIGHT_SHIFT        19
2070#define GEN4_SURFACE_HEIGHT_MASK         _MASK(31, 19)
2071#define GEN4_SURFACE_WIDTH_SHIFT         6
2072#define GEN4_SURFACE_WIDTH_MASK          _MASK(18, 6)
2073#define GEN4_SURFACE_LOD_SHIFT           2
2074#define GEN4_SURFACE_LOD_MASK            _MASK(5, 2)
2075
2076/* Surface state DW3 */
2077#define GEN4_SURFACE_DEPTH_SHIFT         21
2078#define GEN4_SURFACE_DEPTH_MASK          _MASK(31, 21)
2079#define GEN4_SURFACE_PITCH_SHIFT         3
2080#define GEN4_SURFACE_PITCH_MASK          _MASK(19, 3)
2081#define GEN4_SURFACE_TILED               (1 << 1)
2082#define GEN4_SURFACE_TILED_Y             (1 << 0)
2083
2084/* Surface state DW4 */
2085#define GEN4_SURFACE_MIN_LOD_SHIFT       28
2086#define GEN4_SURFACE_MIN_LOD_MASK        _MASK(31, 28)
2087
2088/* Surface state DW5 */
2089#define GEN4_SURFACE_X_OFFSET_SHIFT      25
2090#define GEN4_SURFACE_X_OFFSET_MASK       _MASK(31, 25)
2091#define GEN4_SURFACE_Y_OFFSET_SHIFT      20
2092#define GEN4_SURFACE_Y_OFFSET_MASK       _MASK(23, 20)
2093
2094
2095struct gen4_vertex_buffer_state
2096{
2097   struct {
2098      unsigned int pitch:11;
2099      unsigned int pad:15;
2100      unsigned int access_type:1;
2101      unsigned int vb_index:5;
2102   } vb0;
2103
2104   unsigned int start_addr;
2105   unsigned int max_index;
2106#if 1
2107   unsigned int instance_data_step_rate; /* not included for sequential/random vertices? */
2108#endif
2109};
2110
2111#define GEN4_VBP_MAX 17
2112
2113struct gen4_vb_array_state {
2114   struct header header;
2115   struct gen4_vertex_buffer_state vb[GEN4_VBP_MAX];
2116};
2117
2118
2119struct gen4_vertex_element_state
2120{
2121   struct
2122   {
2123      unsigned int src_offset:11;
2124      unsigned int pad:5;
2125      unsigned int src_format:9;
2126      unsigned int pad0:1;
2127      unsigned int valid:1;
2128      unsigned int vertex_buffer_index:5;
2129   } ve0;
2130
2131   struct
2132   {
2133      unsigned int dst_offset:8;
2134      unsigned int pad:8;
2135      unsigned int vfcomponent3:4;
2136      unsigned int vfcomponent2:4;
2137      unsigned int vfcomponent1:4;
2138      unsigned int vfcomponent0:4;
2139   } ve1;
2140};
2141
2142#define GEN4_VEP_MAX 18
2143
2144struct gen4_vertex_element_packet {
2145   struct header header;
2146   struct gen4_vertex_element_state ve[GEN4_VEP_MAX]; /* note: less than _TNL_ATTRIB_MAX */
2147};
2148
2149
2150struct gen4_urb_immediate {
2151   unsigned int opcode:4;
2152   unsigned int offset:6;
2153   unsigned int swizzle_control:2;
2154   unsigned int pad:1;
2155   unsigned int allocate:1;
2156   unsigned int used:1;
2157   unsigned int complete:1;
2158   unsigned int response_length:4;
2159   unsigned int msg_length:4;
2160   unsigned int msg_target:4;
2161   unsigned int pad1:3;
2162   unsigned int end_of_thread:1;
2163};
2164
2165/* Instruction format for the execution units:
2166 */
2167
2168struct gen4_instruction
2169{
2170   struct
2171   {
2172      unsigned int opcode:7;
2173      unsigned int pad:1;
2174      unsigned int access_mode:1;
2175      unsigned int mask_control:1;
2176      unsigned int dependency_control:2;
2177      unsigned int compression_control:2;
2178      unsigned int thread_control:2;
2179      unsigned int predicate_control:4;
2180      unsigned int predicate_inverse:1;
2181      unsigned int execution_size:3;
2182      unsigned int destreg__conditonalmod:4; /* destreg - send, conditionalmod - others */
2183      unsigned int pad0:2;
2184      unsigned int debug_control:1;
2185      unsigned int saturate:1;
2186   } header;
2187
2188   union {
2189      struct
2190      {
2191	 unsigned int dest_reg_file:2;
2192	 unsigned int dest_reg_type:3;
2193	 unsigned int src0_reg_file:2;
2194	 unsigned int src0_reg_type:3;
2195	 unsigned int src1_reg_file:2;
2196	 unsigned int src1_reg_type:3;
2197	 unsigned int pad:1;
2198	 unsigned int dest_subreg_nr:5;
2199	 unsigned int dest_reg_nr:8;
2200	 unsigned int dest_horiz_stride:2;
2201	 unsigned int dest_address_mode:1;
2202      } da1;
2203
2204      struct
2205      {
2206	 unsigned int dest_reg_file:2;
2207	 unsigned int dest_reg_type:3;
2208	 unsigned int src0_reg_file:2;
2209	 unsigned int src0_reg_type:3;
2210	 unsigned int pad:6;
2211	 int dest_indirect_offset:10;	/* offset against the deref'd address reg */
2212	 unsigned int dest_subreg_nr:3; /* subnr for the address reg a0.x */
2213	 unsigned int dest_horiz_stride:2;
2214	 unsigned int dest_address_mode:1;
2215      } ia1;
2216
2217      struct
2218      {
2219	 unsigned int dest_reg_file:2;
2220	 unsigned int dest_reg_type:3;
2221	 unsigned int src0_reg_file:2;
2222	 unsigned int src0_reg_type:3;
2223	 unsigned int src1_reg_file:2;
2224	 unsigned int src1_reg_type:3;
2225	 unsigned int pad0:1;
2226	 unsigned int dest_writemask:4;
2227	 unsigned int dest_subreg_nr:1;
2228	 unsigned int dest_reg_nr:8;
2229	 unsigned int pad1:2;
2230	 unsigned int dest_address_mode:1;
2231      } da16;
2232
2233      struct
2234      {
2235	 unsigned int dest_reg_file:2;
2236	 unsigned int dest_reg_type:3;
2237	 unsigned int src0_reg_file:2;
2238	 unsigned int src0_reg_type:3;
2239	 unsigned int pad0:6;
2240	 unsigned int dest_writemask:4;
2241	 int dest_indirect_offset:6;
2242	 unsigned int dest_subreg_nr:3;
2243	 unsigned int pad1:2;
2244	 unsigned int dest_address_mode:1;
2245      } ia16;
2246   } bits1;
2247
2248
2249   union {
2250      struct
2251      {
2252	 unsigned int src0_subreg_nr:5;
2253	 unsigned int src0_reg_nr:8;
2254	 unsigned int src0_abs:1;
2255	 unsigned int src0_negate:1;
2256	 unsigned int src0_address_mode:1;
2257	 unsigned int src0_horiz_stride:2;
2258	 unsigned int src0_width:3;
2259	 unsigned int src0_vert_stride:4;
2260	 unsigned int flag_reg_nr:1;
2261	 unsigned int pad:6;
2262      } da1;
2263
2264      struct
2265      {
2266	 int src0_indirect_offset:10;
2267	 unsigned int src0_subreg_nr:3;
2268	 unsigned int src0_abs:1;
2269	 unsigned int src0_negate:1;
2270	 unsigned int src0_address_mode:1;
2271	 unsigned int src0_horiz_stride:2;
2272	 unsigned int src0_width:3;
2273	 unsigned int src0_vert_stride:4;
2274	 unsigned int flag_reg_nr:1;
2275	 unsigned int pad:6;
2276      } ia1;
2277
2278      struct
2279      {
2280	 unsigned int src0_swz_x:2;
2281	 unsigned int src0_swz_y:2;
2282	 unsigned int src0_subreg_nr:1;
2283	 unsigned int src0_reg_nr:8;
2284	 unsigned int src0_abs:1;
2285	 unsigned int src0_negate:1;
2286	 unsigned int src0_address_mode:1;
2287	 unsigned int src0_swz_z:2;
2288	 unsigned int src0_swz_w:2;
2289	 unsigned int pad0:1;
2290	 unsigned int src0_vert_stride:4;
2291	 unsigned int flag_reg_nr:1;
2292	 unsigned int pad1:6;
2293      } da16;
2294
2295      struct
2296      {
2297	 unsigned int src0_swz_x:2;
2298	 unsigned int src0_swz_y:2;
2299	 int src0_indirect_offset:6;
2300	 unsigned int src0_subreg_nr:3;
2301	 unsigned int src0_abs:1;
2302	 unsigned int src0_negate:1;
2303	 unsigned int src0_address_mode:1;
2304	 unsigned int src0_swz_z:2;
2305	 unsigned int src0_swz_w:2;
2306	 unsigned int pad0:1;
2307	 unsigned int src0_vert_stride:4;
2308	 unsigned int flag_reg_nr:1;
2309	 unsigned int pad1:6;
2310      } ia16;
2311
2312   } bits2;
2313
2314   union
2315   {
2316      struct
2317      {
2318	 unsigned int src1_subreg_nr:5;
2319	 unsigned int src1_reg_nr:8;
2320	 unsigned int src1_abs:1;
2321	 unsigned int src1_negate:1;
2322	 unsigned int pad:1;
2323	 unsigned int src1_horiz_stride:2;
2324	 unsigned int src1_width:3;
2325	 unsigned int src1_vert_stride:4;
2326	 unsigned int pad0:7;
2327      } da1;
2328
2329      struct
2330      {
2331	 unsigned int src1_swz_x:2;
2332	 unsigned int src1_swz_y:2;
2333	 unsigned int src1_subreg_nr:1;
2334	 unsigned int src1_reg_nr:8;
2335	 unsigned int src1_abs:1;
2336	 unsigned int src1_negate:1;
2337	 unsigned int pad0:1;
2338	 unsigned int src1_swz_z:2;
2339	 unsigned int src1_swz_w:2;
2340	 unsigned int pad1:1;
2341	 unsigned int src1_vert_stride:4;
2342	 unsigned int pad2:7;
2343      } da16;
2344
2345      struct
2346      {
2347	 int  src1_indirect_offset:10;
2348	 unsigned int src1_subreg_nr:3;
2349	 unsigned int src1_abs:1;
2350	 unsigned int src1_negate:1;
2351	 unsigned int pad0:1;
2352	 unsigned int src1_horiz_stride:2;
2353	 unsigned int src1_width:3;
2354	 unsigned int src1_vert_stride:4;
2355	 unsigned int flag_reg_nr:1;
2356	 unsigned int pad1:6;
2357      } ia1;
2358
2359      struct
2360      {
2361	 unsigned int src1_swz_x:2;
2362	 unsigned int src1_swz_y:2;
2363	 int  src1_indirect_offset:6;
2364	 unsigned int src1_subreg_nr:3;
2365	 unsigned int src1_abs:1;
2366	 unsigned int src1_negate:1;
2367	 unsigned int pad0:1;
2368	 unsigned int src1_swz_z:2;
2369	 unsigned int src1_swz_w:2;
2370	 unsigned int pad1:1;
2371	 unsigned int src1_vert_stride:4;
2372	 unsigned int flag_reg_nr:1;
2373	 unsigned int pad2:6;
2374      } ia16;
2375
2376
2377      struct
2378      {
2379	 int  jump_count:16;	/* note: signed */
2380	 unsigned int  pop_count:4;
2381	 unsigned int  pad0:12;
2382      } if_else;
2383
2384      struct {
2385	 unsigned int function:4;
2386	 unsigned int int_type:1;
2387	 unsigned int precision:1;
2388	 unsigned int saturate:1;
2389	 unsigned int data_type:1;
2390	 unsigned int pad0:8;
2391	 unsigned int response_length:4;
2392	 unsigned int msg_length:4;
2393	 unsigned int msg_target:4;
2394	 unsigned int pad1:3;
2395	 unsigned int end_of_thread:1;
2396      } math;
2397
2398      struct {
2399	 unsigned int binding_table_index:8;
2400	 unsigned int sampler:4;
2401	 unsigned int return_format:2;
2402	 unsigned int msg_type:2;
2403	 unsigned int response_length:4;
2404	 unsigned int msg_length:4;
2405	 unsigned int msg_target:4;
2406	 unsigned int pad1:3;
2407	 unsigned int end_of_thread:1;
2408      } sampler;
2409
2410      struct gen4_urb_immediate urb;
2411
2412      struct {
2413	 unsigned int binding_table_index:8;
2414	 unsigned int msg_control:4;
2415	 unsigned int msg_type:2;
2416	 unsigned int target_cache:2;
2417	 unsigned int response_length:4;
2418	 unsigned int msg_length:4;
2419	 unsigned int msg_target:4;
2420	 unsigned int pad1:3;
2421	 unsigned int end_of_thread:1;
2422      } dp_read;
2423
2424      struct {
2425	 unsigned int binding_table_index:8;
2426	 unsigned int msg_control:3;
2427	 unsigned int pixel_scoreboard_clear:1;
2428	 unsigned int msg_type:3;
2429	 unsigned int send_commit_msg:1;
2430	 unsigned int response_length:4;
2431	 unsigned int msg_length:4;
2432	 unsigned int msg_target:4;
2433	 unsigned int pad1:3;
2434	 unsigned int end_of_thread:1;
2435      } dp_write;
2436
2437      struct {
2438	 unsigned int pad:16;
2439	 unsigned int response_length:4;
2440	 unsigned int msg_length:4;
2441	 unsigned int msg_target:4;
2442	 unsigned int pad1:3;
2443	 unsigned int end_of_thread:1;
2444      } generic;
2445
2446      unsigned int ud;
2447   } bits3;
2448};
2449
2450/* media pipeline */
2451
2452struct gen4_vfe_state {
2453    struct {
2454	unsigned int per_thread_scratch_space:4;
2455	unsigned int pad3:3;
2456	unsigned int extend_vfe_state_present:1;
2457	unsigned int pad2:2;
2458	unsigned int scratch_base:22;
2459    } vfe0;
2460
2461    struct {
2462	unsigned int debug_counter_control:2;
2463	unsigned int children_present:1;
2464	unsigned int vfe_mode:4;
2465	unsigned int pad2:2;
2466	unsigned int num_urb_entries:7;
2467	unsigned int urb_entry_alloc_size:9;
2468	unsigned int max_threads:7;
2469    } vfe1;
2470
2471    struct {
2472	unsigned int pad4:4;
2473	unsigned int interface_descriptor_base:28;
2474    } vfe2;
2475};
2476
2477struct gen4_vld_state {
2478    struct {
2479	unsigned int pad6:6;
2480	unsigned int scan_order:1;
2481	unsigned int intra_vlc_format:1;
2482	unsigned int quantizer_scale_type:1;
2483	unsigned int concealment_motion_vector:1;
2484	unsigned int frame_predict_frame_dct:1;
2485	unsigned int top_field_first:1;
2486	unsigned int picture_structure:2;
2487	unsigned int intra_dc_precision:2;
2488	unsigned int f_code_0_0:4;
2489	unsigned int f_code_0_1:4;
2490	unsigned int f_code_1_0:4;
2491	unsigned int f_code_1_1:4;
2492    } vld0;
2493
2494    struct {
2495	unsigned int pad2:9;
2496	unsigned int picture_coding_type:2;
2497	unsigned int pad:21;
2498    } vld1;
2499
2500    struct {
2501	unsigned int index_0:4;
2502	unsigned int index_1:4;
2503	unsigned int index_2:4;
2504	unsigned int index_3:4;
2505	unsigned int index_4:4;
2506	unsigned int index_5:4;
2507	unsigned int index_6:4;
2508	unsigned int index_7:4;
2509    } desc_remap_table0;
2510
2511    struct {
2512	unsigned int index_8:4;
2513	unsigned int index_9:4;
2514	unsigned int index_10:4;
2515	unsigned int index_11:4;
2516	unsigned int index_12:4;
2517	unsigned int index_13:4;
2518	unsigned int index_14:4;
2519	unsigned int index_15:4;
2520    } desc_remap_table1;
2521};
2522
2523struct gen4_interface_descriptor {
2524    struct {
2525	unsigned int grf_reg_blocks:4;
2526	unsigned int pad:2;
2527	unsigned int kernel_start_pointer:26;
2528    } desc0;
2529
2530    struct {
2531	unsigned int pad:7;
2532	unsigned int software_exception:1;
2533	unsigned int pad2:3;
2534	unsigned int maskstack_exception:1;
2535	unsigned int pad3:1;
2536	unsigned int illegal_opcode_exception:1;
2537	unsigned int pad4:2;
2538	unsigned int floating_point_mode:1;
2539	unsigned int thread_priority:1;
2540	unsigned int single_program_flow:1;
2541	unsigned int pad5:1;
2542	unsigned int const_urb_entry_read_offset:6;
2543	unsigned int const_urb_entry_read_len:6;
2544    } desc1;
2545
2546    struct {
2547	unsigned int pad:2;
2548	unsigned int sampler_count:3;
2549	unsigned int sampler_state_pointer:27;
2550    } desc2;
2551
2552    struct {
2553	unsigned int binding_table_entry_count:5;
2554	unsigned int binding_table_pointer:27;
2555    } desc3;
2556};
2557
2558struct gen6_blend_state
2559{
2560	struct {
2561		unsigned int dest_blend_factor:5;
2562		unsigned int source_blend_factor:5;
2563		unsigned int pad3:1;
2564		unsigned int blend_func:3;
2565		unsigned int pad2:1;
2566		unsigned int ia_dest_blend_factor:5;
2567		unsigned int ia_source_blend_factor:5;
2568		unsigned int pad1:1;
2569		unsigned int ia_blend_func:3;
2570		unsigned int pad0:1;
2571		unsigned int ia_blend_enable:1;
2572		unsigned int blend_enable:1;
2573	} blend0;
2574
2575	struct {
2576		unsigned int post_blend_clamp_enable:1;
2577		unsigned int pre_blend_clamp_enable:1;
2578		unsigned int clamp_range:2;
2579		unsigned int pad0:4;
2580		unsigned int x_dither_offset:2;
2581		unsigned int y_dither_offset:2;
2582		unsigned int dither_enable:1;
2583		unsigned int alpha_test_func:3;
2584		unsigned int alpha_test_enable:1;
2585		unsigned int pad1:1;
2586		unsigned int logic_op_func:4;
2587		unsigned int logic_op_enable:1;
2588		unsigned int pad2:1;
2589		unsigned int write_disable_b:1;
2590		unsigned int write_disable_g:1;
2591		unsigned int write_disable_r:1;
2592		unsigned int write_disable_a:1;
2593		unsigned int pad3:1;
2594		unsigned int alpha_to_coverage_dither:1;
2595		unsigned int alpha_to_one:1;
2596		unsigned int alpha_to_coverage:1;
2597	} blend1;
2598};
2599
2600struct gen6_color_calc_state
2601{
2602	struct {
2603		unsigned int alpha_test_format:1;
2604		unsigned int pad0:14;
2605		unsigned int round_disable:1;
2606		unsigned int bf_stencil_ref:8;
2607		unsigned int stencil_ref:8;
2608	} cc0;
2609
2610	union {
2611		float alpha_ref_f;
2612		struct {
2613			unsigned int ui:8;
2614			unsigned int pad0:24;
2615		} alpha_ref_fi;
2616	} cc1;
2617
2618	float constant_r;
2619	float constant_g;
2620	float constant_b;
2621	float constant_a;
2622};
2623
2624struct gen6_depth_stencil_state
2625{
2626	struct {
2627		unsigned int pad0:3;
2628		unsigned int bf_stencil_pass_depth_pass_op:3;
2629		unsigned int bf_stencil_pass_depth_fail_op:3;
2630		unsigned int bf_stencil_fail_op:3;
2631		unsigned int bf_stencil_func:3;
2632		unsigned int bf_stencil_enable:1;
2633		unsigned int pad1:2;
2634		unsigned int stencil_write_enable:1;
2635		unsigned int stencil_pass_depth_pass_op:3;
2636		unsigned int stencil_pass_depth_fail_op:3;
2637		unsigned int stencil_fail_op:3;
2638		unsigned int stencil_func:3;
2639		unsigned int stencil_enable:1;
2640	} ds0;
2641
2642	struct {
2643		unsigned int bf_stencil_write_mask:8;
2644		unsigned int bf_stencil_test_mask:8;
2645		unsigned int stencil_write_mask:8;
2646		unsigned int stencil_test_mask:8;
2647	} ds1;
2648
2649	struct {
2650		unsigned int pad0:26;
2651		unsigned int depth_write_enable:1;
2652		unsigned int depth_test_func:3;
2653		unsigned int pad1:1;
2654		unsigned int depth_test_enable:1;
2655	} ds2;
2656};
2657
2658typedef enum {
2659	SAMPLER_FILTER_NEAREST = 0,
2660	SAMPLER_FILTER_BILINEAR,
2661	FILTER_COUNT
2662} sampler_filter_t;
2663
2664typedef enum {
2665	SAMPLER_EXTEND_NONE = 0,
2666	SAMPLER_EXTEND_REPEAT,
2667	SAMPLER_EXTEND_PAD,
2668	SAMPLER_EXTEND_REFLECT,
2669	EXTEND_COUNT
2670} sampler_extend_t;
2671
2672typedef enum {
2673	WM_KERNEL = 0,
2674	WM_KERNEL_P,
2675
2676	WM_KERNEL_MASK,
2677	WM_KERNEL_MASK_P,
2678
2679	WM_KERNEL_MASKCA,
2680	WM_KERNEL_MASKCA_P,
2681
2682	WM_KERNEL_MASKSA,
2683	WM_KERNEL_MASKSA_P,
2684
2685	WM_KERNEL_OPACITY,
2686	WM_KERNEL_OPACITY_P,
2687
2688	WM_KERNEL_VIDEO_PLANAR_BT601,
2689	WM_KERNEL_VIDEO_NV12_BT601,
2690	WM_KERNEL_VIDEO_PACKED_BT601,
2691
2692	WM_KERNEL_VIDEO_PLANAR_BT709,
2693	WM_KERNEL_VIDEO_NV12_BT709,
2694	WM_KERNEL_VIDEO_PACKED_BT709,
2695
2696	KERNEL_COUNT
2697} wm_kernel_t;
2698
2699#endif
2700