1428d7b3dSmrg/**************************************************************************
2428d7b3dSmrg *
3428d7b3dSmrg * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
4428d7b3dSmrg * All Rights Reserved.
5428d7b3dSmrg *
6428d7b3dSmrg * Permission is hereby granted, free of charge, to any person obtaining a
7428d7b3dSmrg * copy of this software and associated documentation files (the
8428d7b3dSmrg * "Software"), to deal in the Software without restriction, including
9428d7b3dSmrg * without limitation the rights to use, copy, modify, merge, publish,
10428d7b3dSmrg * distribute, sub license, and/or sell copies of the Software, and to
11428d7b3dSmrg * permit persons to whom the Software is furnished to do so, subject to
12428d7b3dSmrg * the following conditions:
13428d7b3dSmrg *
14428d7b3dSmrg * The above copyright notice and this permission notice (including the
15428d7b3dSmrg * next paragraph) shall be included in all copies or substantial portions
16428d7b3dSmrg * of the Software.
17428d7b3dSmrg *
18428d7b3dSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19428d7b3dSmrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20428d7b3dSmrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21428d7b3dSmrg * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22428d7b3dSmrg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23428d7b3dSmrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24428d7b3dSmrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25428d7b3dSmrg *
26428d7b3dSmrg **************************************************************************/
27428d7b3dSmrg
28428d7b3dSmrg#ifndef GEN4_RENDER_H
29428d7b3dSmrg#define GEN4_RENDER_H
30428d7b3dSmrg
31428d7b3dSmrg#define GEN4_3D(Pipeline,Opcode,Subopcode) ((3 << 29) | \
32428d7b3dSmrg					   ((Pipeline) << 27) | \
33428d7b3dSmrg					   ((Opcode) << 24) | \
34428d7b3dSmrg					   ((Subopcode) << 16))
35428d7b3dSmrg
36428d7b3dSmrg#define GEN4_URB_FENCE				GEN4_3D(0, 0, 0)
37428d7b3dSmrg#define GEN4_CS_URB_STATE			GEN4_3D(0, 0, 1)
38428d7b3dSmrg#define GEN4_CONSTANT_BUFFER			GEN4_3D(0, 0, 2)
39428d7b3dSmrg#define GEN4_STATE_PREFETCH			GEN4_3D(0, 0, 3)
40428d7b3dSmrg
41428d7b3dSmrg#define GEN4_STATE_BASE_ADDRESS			GEN4_3D(0, 1, 1)
42428d7b3dSmrg#define GEN4_STATE_SIP				GEN4_3D(0, 1, 2)
43428d7b3dSmrg#define GEN4_PIPELINE_SELECT			GEN4_3D(0, 1, 4)
44428d7b3dSmrg
45428d7b3dSmrg#define NEW_PIPELINE_SELECT			GEN4_3D(1, 1, 4)
46428d7b3dSmrg
47428d7b3dSmrg#define GEN4_MEDIA_STATE_POINTERS		GEN4_3D(2, 0, 0)
48428d7b3dSmrg#define GEN4_MEDIA_OBJECT			GEN4_3D(2, 1, 0)
49428d7b3dSmrg
50428d7b3dSmrg#define GEN4_3DSTATE_PIPELINED_POINTERS		GEN4_3D(3, 0, 0)
51428d7b3dSmrg#define GEN4_3DSTATE_BINDING_TABLE_POINTERS	GEN4_3D(3, 0, 1)
52428d7b3dSmrg
53428d7b3dSmrg#define GEN4_3DSTATE_VERTEX_BUFFERS		GEN4_3D(3, 0, 8)
54428d7b3dSmrg#define GEN4_3DSTATE_VERTEX_ELEMENTS		GEN4_3D(3, 0, 9)
55428d7b3dSmrg#define GEN4_3DSTATE_INDEX_BUFFER		GEN4_3D(3, 0, 0xa)
56428d7b3dSmrg#define GEN4_3DSTATE_VF_STATISTICS		GEN4_3D(3, 0, 0xb)
57428d7b3dSmrg
58428d7b3dSmrg#define GEN4_3DSTATE_DRAWING_RECTANGLE		GEN4_3D(3, 1, 0)
59428d7b3dSmrg#define GEN4_3DSTATE_CONSTANT_COLOR		GEN4_3D(3, 1, 1)
60428d7b3dSmrg#define GEN4_3DSTATE_SAMPLER_PALETTE_LOAD	GEN4_3D(3, 1, 2)
61428d7b3dSmrg#define GEN4_3DSTATE_CHROMA_KEY			GEN4_3D(3, 1, 4)
62428d7b3dSmrg#define GEN4_3DSTATE_DEPTH_BUFFER		GEN4_3D(3, 1, 5)
63428d7b3dSmrg# define GEN4_3DSTATE_DEPTH_BUFFER_TYPE_SHIFT	29
64428d7b3dSmrg# define GEN4_3DSTATE_DEPTH_BUFFER_FORMAT_SHIFT	18
65428d7b3dSmrg
66428d7b3dSmrg#define GEN4_3DSTATE_POLY_STIPPLE_OFFSET		GEN4_3D(3, 1, 6)
67428d7b3dSmrg#define GEN4_3DSTATE_POLY_STIPPLE_PATTERN	GEN4_3D(3, 1, 7)
68428d7b3dSmrg#define GEN4_3DSTATE_LINE_STIPPLE		GEN4_3D(3, 1, 8)
69428d7b3dSmrg#define GEN4_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP	GEN4_3D(3, 1, 9)
70428d7b3dSmrg/* These two are BLC and CTG only, not BW or CL */
71428d7b3dSmrg#define GEN4_3DSTATE_AA_LINE_PARAMS		GEN4_3D(3, 1, 0xa)
72428d7b3dSmrg#define GEN4_3DSTATE_GS_SVB_INDEX		GEN4_3D(3, 1, 0xb)
73428d7b3dSmrg
74428d7b3dSmrg#define GEN4_PIPE_CONTROL			GEN4_3D(3, 2, 0)
75428d7b3dSmrg
76428d7b3dSmrg#define GEN4_3DPRIMITIVE				GEN4_3D(3, 3, 0)
77428d7b3dSmrg
78428d7b3dSmrg#define GEN4_3DSTATE_CLEAR_PARAMS		GEN4_3D(3, 1, 0x10)
79428d7b3dSmrg/* DW1 */
80428d7b3dSmrg# define GEN4_3DSTATE_DEPTH_CLEAR_VALID		(1 << 15)
81428d7b3dSmrg
82428d7b3dSmrg#define PIPELINE_SELECT_3D		0
83428d7b3dSmrg#define PIPELINE_SELECT_MEDIA		1
84428d7b3dSmrg
85428d7b3dSmrg#define UF0_CS_REALLOC			(1 << 13)
86428d7b3dSmrg#define UF0_VFE_REALLOC			(1 << 12)
87428d7b3dSmrg#define UF0_SF_REALLOC			(1 << 11)
88428d7b3dSmrg#define UF0_CLIP_REALLOC		(1 << 10)
89428d7b3dSmrg#define UF0_GS_REALLOC			(1 << 9)
90428d7b3dSmrg#define UF0_VS_REALLOC			(1 << 8)
91428d7b3dSmrg#define UF1_CLIP_FENCE_SHIFT		20
92428d7b3dSmrg#define UF1_GS_FENCE_SHIFT		10
93428d7b3dSmrg#define UF1_VS_FENCE_SHIFT		0
94428d7b3dSmrg#define UF2_CS_FENCE_SHIFT		20
95428d7b3dSmrg#define UF2_VFE_FENCE_SHIFT		10
96428d7b3dSmrg#define UF2_SF_FENCE_SHIFT		0
97428d7b3dSmrg
98428d7b3dSmrg/* for GEN4_STATE_BASE_ADDRESS */
99428d7b3dSmrg#define BASE_ADDRESS_MODIFY		(1 << 0)
100428d7b3dSmrg
101428d7b3dSmrg/* for GEN4_3DSTATE_PIPELINED_POINTERS */
102428d7b3dSmrg#define GEN4_GS_DISABLE		       0
103428d7b3dSmrg#define GEN4_GS_ENABLE		       1
104428d7b3dSmrg#define GEN4_CLIP_DISABLE	       0
105428d7b3dSmrg#define GEN4_CLIP_ENABLE		       1
106428d7b3dSmrg
107428d7b3dSmrg/* for GEN4_PIPE_CONTROL */
108428d7b3dSmrg#define GEN4_PIPE_CONTROL_NOWRITE       (0 << 14)
109428d7b3dSmrg#define GEN4_PIPE_CONTROL_WRITE_QWORD   (1 << 14)
110428d7b3dSmrg#define GEN4_PIPE_CONTROL_WRITE_DEPTH   (2 << 14)
111428d7b3dSmrg#define GEN4_PIPE_CONTROL_WRITE_TIME    (3 << 14)
112428d7b3dSmrg#define GEN4_PIPE_CONTROL_DEPTH_STALL   (1 << 13)
113428d7b3dSmrg#define GEN4_PIPE_CONTROL_WC_FLUSH      (1 << 12)
114428d7b3dSmrg#define GEN4_PIPE_CONTROL_IS_FLUSH      (1 << 11)
115428d7b3dSmrg#define GEN4_PIPE_CONTROL_TC_FLUSH      (1 << 10) /* ctg+ */
116428d7b3dSmrg#define GEN4_PIPE_CONTROL_NOTIFY_ENABLE (1 << 8)
117428d7b3dSmrg#define GEN4_PIPE_CONTROL_GLOBAL_GTT    (1 << 2)
118428d7b3dSmrg#define GEN4_PIPE_CONTROL_LOCAL_PGTT    (0 << 2)
119428d7b3dSmrg#define GEN4_PIPE_CONTROL_DEPTH_CACHE_FLUSH	(1 << 0)
120428d7b3dSmrg
121428d7b3dSmrg/* VERTEX_BUFFER_STATE Structure */
122428d7b3dSmrg#define VB0_BUFFER_INDEX_SHIFT		27
123428d7b3dSmrg#define VB0_VERTEXDATA			(0 << 26)
124428d7b3dSmrg#define VB0_INSTANCEDATA		(1 << 26)
125428d7b3dSmrg#define VB0_BUFFER_PITCH_SHIFT		0
126428d7b3dSmrg
127428d7b3dSmrg/* VERTEX_ELEMENT_STATE Structure */
128428d7b3dSmrg#define VE0_VERTEX_BUFFER_INDEX_SHIFT	27
129428d7b3dSmrg#define VE0_VALID			(1 << 26)
130428d7b3dSmrg#define VE0_FORMAT_SHIFT		16
131428d7b3dSmrg#define VE0_OFFSET_SHIFT		0
132428d7b3dSmrg#define VE1_VFCOMPONENT_0_SHIFT		28
133428d7b3dSmrg#define VE1_VFCOMPONENT_1_SHIFT		24
134428d7b3dSmrg#define VE1_VFCOMPONENT_2_SHIFT		20
135428d7b3dSmrg#define VE1_VFCOMPONENT_3_SHIFT		16
136428d7b3dSmrg#define VE1_DESTINATION_ELEMENT_OFFSET_SHIFT	0
137428d7b3dSmrg
138428d7b3dSmrg/* 3DPRIMITIVE bits */
139428d7b3dSmrg#define GEN4_3DPRIMITIVE_VERTEX_SEQUENTIAL (0 << 15)
140428d7b3dSmrg#define GEN4_3DPRIMITIVE_VERTEX_RANDOM	  (1 << 15)
141428d7b3dSmrg/* Primitive types are in gen4_defines.h */
142428d7b3dSmrg#define GEN4_3DPRIMITIVE_TOPOLOGY_SHIFT	  10
143428d7b3dSmrg
144428d7b3dSmrg#define GEN4_SVG_CTL		       0x7400
145428d7b3dSmrg
146428d7b3dSmrg#define GEN4_SVG_CTL_GS_BA	       (0 << 8)
147428d7b3dSmrg#define GEN4_SVG_CTL_SS_BA	       (1 << 8)
148428d7b3dSmrg#define GEN4_SVG_CTL_IO_BA	       (2 << 8)
149428d7b3dSmrg#define GEN4_SVG_CTL_GS_AUB	       (3 << 8)
150428d7b3dSmrg#define GEN4_SVG_CTL_IO_AUB	       (4 << 8)
151428d7b3dSmrg#define GEN4_SVG_CTL_SIP		       (5 << 8)
152428d7b3dSmrg
153428d7b3dSmrg#define GEN4_SVG_RDATA		       0x7404
154428d7b3dSmrg#define GEN4_SVG_WORK_CTL	       0x7408
155428d7b3dSmrg
156428d7b3dSmrg#define GEN4_VF_CTL		       0x7500
157428d7b3dSmrg
158428d7b3dSmrg#define GEN4_VF_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
159428d7b3dSmrg#define GEN4_VF_CTL_SNAPSHOT_MUX_SELECT_THREADID	   (0 << 8)
160428d7b3dSmrg#define GEN4_VF_CTL_SNAPSHOT_MUX_SELECT_VF_DEBUG	   (1 << 8)
161428d7b3dSmrg#define GEN4_VF_CTL_SNAPSHOT_TYPE_VERTEX_SEQUENCE   (0 << 4)
162428d7b3dSmrg#define GEN4_VF_CTL_SNAPSHOT_TYPE_VERTEX_INDEX	   (1 << 4)
163428d7b3dSmrg#define GEN4_VF_CTL_SKIP_INITIAL_PRIMITIVES	   (1 << 3)
164428d7b3dSmrg#define GEN4_VF_CTL_MAX_PRIMITIVES_LIMIT_ENABLE	   (1 << 2)
165428d7b3dSmrg#define GEN4_VF_CTL_VERTEX_RANGE_LIMIT_ENABLE	   (1 << 1)
166428d7b3dSmrg#define GEN4_VF_CTL_SNAPSHOT_ENABLE	     	   (1 << 0)
167428d7b3dSmrg
168428d7b3dSmrg#define GEN4_VF_STRG_VAL		       0x7504
169428d7b3dSmrg#define GEN4_VF_STR_VL_OVR	       0x7508
170428d7b3dSmrg#define GEN4_VF_VC_OVR		       0x750c
171428d7b3dSmrg#define GEN4_VF_STR_PSKIP	       0x7510
172428d7b3dSmrg#define GEN4_VF_MAX_PRIM		       0x7514
173428d7b3dSmrg#define GEN4_VF_RDATA		       0x7518
174428d7b3dSmrg
175428d7b3dSmrg#define GEN4_VS_CTL		       0x7600
176428d7b3dSmrg#define GEN4_VS_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
177428d7b3dSmrg#define GEN4_VS_CTL_SNAPSHOT_MUX_VERTEX_0	   (0 << 8)
178428d7b3dSmrg#define GEN4_VS_CTL_SNAPSHOT_MUX_VERTEX_1	   (1 << 8)
179428d7b3dSmrg#define GEN4_VS_CTL_SNAPSHOT_MUX_VALID_COUNT	   (2 << 8)
180428d7b3dSmrg#define GEN4_VS_CTL_SNAPSHOT_MUX_VS_KERNEL_POINTER  (3 << 8)
181428d7b3dSmrg#define GEN4_VS_CTL_SNAPSHOT_ALL_THREADS		   (1 << 2)
182428d7b3dSmrg#define GEN4_VS_CTL_THREAD_SNAPSHOT_ENABLE	   (1 << 1)
183428d7b3dSmrg#define GEN4_VS_CTL_SNAPSHOT_ENABLE		   (1 << 0)
184428d7b3dSmrg
185428d7b3dSmrg#define GEN4_VS_STRG_VAL		       0x7604
186428d7b3dSmrg#define GEN4_VS_RDATA		       0x7608
187428d7b3dSmrg
188428d7b3dSmrg#define GEN4_SF_CTL		       0x7b00
189428d7b3dSmrg#define GEN4_SF_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
190428d7b3dSmrg#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_0_FF_ID	   (0 << 8)
191428d7b3dSmrg#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_0_REL_COUNT (1 << 8)
192428d7b3dSmrg#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_1_FF_ID	   (2 << 8)
193428d7b3dSmrg#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_1_REL_COUNT (3 << 8)
194428d7b3dSmrg#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_2_FF_ID	   (4 << 8)
195428d7b3dSmrg#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_2_REL_COUNT (5 << 8)
196428d7b3dSmrg#define GEN4_SF_CTL_SNAPSHOT_MUX_VERTEX_COUNT	   (6 << 8)
197428d7b3dSmrg#define GEN4_SF_CTL_SNAPSHOT_MUX_SF_KERNEL_POINTER  (7 << 8)
198428d7b3dSmrg#define GEN4_SF_CTL_MIN_MAX_PRIMITIVE_RANGE_ENABLE  (1 << 4)
199428d7b3dSmrg#define GEN4_SF_CTL_DEBUG_CLIP_RECTANGLE_ENABLE	   (1 << 3)
200428d7b3dSmrg#define GEN4_SF_CTL_SNAPSHOT_ALL_THREADS		   (1 << 2)
201428d7b3dSmrg#define GEN4_SF_CTL_THREAD_SNAPSHOT_ENABLE	   (1 << 1)
202428d7b3dSmrg#define GEN4_SF_CTL_SNAPSHOT_ENABLE		   (1 << 0)
203428d7b3dSmrg
204428d7b3dSmrg#define GEN4_SF_STRG_VAL		       0x7b04
205428d7b3dSmrg#define GEN4_SF_RDATA		       0x7b18
206428d7b3dSmrg
207428d7b3dSmrg#define GEN4_WIZ_CTL		       0x7c00
208428d7b3dSmrg#define GEN4_WIZ_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
209428d7b3dSmrg#define GEN4_WIZ_CTL_SUBSPAN_INSTANCE_SHIFT	   16
210428d7b3dSmrg#define GEN4_WIZ_CTL_SNAPSHOT_MUX_WIZ_KERNEL_POINTER   (0 << 8)
211428d7b3dSmrg#define GEN4_WIZ_CTL_SNAPSHOT_MUX_SUBSPAN_INSTANCE     (1 << 8)
212428d7b3dSmrg#define GEN4_WIZ_CTL_SNAPSHOT_MUX_PRIMITIVE_SEQUENCE   (2 << 8)
213428d7b3dSmrg#define GEN4_WIZ_CTL_SINGLE_SUBSPAN_DISPATCH	      (1 << 6)
214428d7b3dSmrg#define GEN4_WIZ_CTL_IGNORE_COLOR_SCOREBOARD_STALLS    (1 << 5)
215428d7b3dSmrg#define GEN4_WIZ_CTL_ENABLE_SUBSPAN_INSTANCE_COMPARE   (1 << 4)
216428d7b3dSmrg#define GEN4_WIZ_CTL_USE_UPSTREAM_SNAPSHOT_FLAG	      (1 << 3)
217428d7b3dSmrg#define GEN4_WIZ_CTL_SNAPSHOT_ALL_THREADS	      (1 << 2)
218428d7b3dSmrg#define GEN4_WIZ_CTL_THREAD_SNAPSHOT_ENABLE	      (1 << 1)
219428d7b3dSmrg#define GEN4_WIZ_CTL_SNAPSHOT_ENABLE		      (1 << 0)
220428d7b3dSmrg
221428d7b3dSmrg#define GEN4_WIZ_STRG_VAL			      0x7c04
222428d7b3dSmrg#define GEN4_WIZ_RDATA				      0x7c18
223428d7b3dSmrg
224428d7b3dSmrg#define GEN4_TS_CTL		       0x7e00
225428d7b3dSmrg#define GEN4_TS_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
226428d7b3dSmrg#define GEN4_TS_CTL_SNAPSHOT_MESSAGE_ERROR	   (0 << 8)
227428d7b3dSmrg#define GEN4_TS_CTL_SNAPSHOT_INTERFACE_DESCRIPTOR   (3 << 8)
228428d7b3dSmrg#define GEN4_TS_CTL_SNAPSHOT_ALL_CHILD_THREADS	   (1 << 2)
229428d7b3dSmrg#define GEN4_TS_CTL_SNAPSHOT_ALL_ROOT_THREADS  	   (1 << 1)
230428d7b3dSmrg#define GEN4_TS_CTL_SNAPSHOT_ENABLE		   (1 << 0)
231428d7b3dSmrg
232428d7b3dSmrg#define GEN4_TS_STRG_VAL		       0x7e04
233428d7b3dSmrg#define GEN4_TS_RDATA		       0x7e08
234428d7b3dSmrg
235428d7b3dSmrg#define GEN4_TD_CTL		       0x8000
236428d7b3dSmrg#define GEN4_TD_CTL_MUX_SHIFT	       8
237428d7b3dSmrg#define GEN4_TD_CTL_EXTERNAL_HALT_R0_DEBUG_MATCH	   (1 << 7)
238428d7b3dSmrg#define GEN4_TD_CTL_FORCE_EXTERNAL_HALT		   (1 << 6)
239428d7b3dSmrg#define GEN4_TD_CTL_EXCEPTION_MASK_OVERRIDE	   (1 << 5)
240428d7b3dSmrg#define GEN4_TD_CTL_FORCE_THREAD_BREAKPOINT_ENABLE  (1 << 4)
241428d7b3dSmrg#define GEN4_TD_CTL_BREAKPOINT_ENABLE		   (1 << 2)
242428d7b3dSmrg#define GEN4_TD_CTL2		       0x8004
243428d7b3dSmrg#define GEN4_TD_CTL2_ILLEGAL_OPCODE_EXCEPTION_OVERRIDE (1 << 28)
244428d7b3dSmrg#define GEN4_TD_CTL2_MASKSTACK_EXCEPTION_OVERRIDE      (1 << 26)
245428d7b3dSmrg#define GEN4_TD_CTL2_SOFTWARE_EXCEPTION_OVERRIDE	      (1 << 25)
246428d7b3dSmrg#define GEN4_TD_CTL2_ACTIVE_THREAD_LIMIT_SHIFT	      16
247428d7b3dSmrg#define GEN4_TD_CTL2_ACTIVE_THREAD_LIMIT_ENABLE	      (1 << 8)
248428d7b3dSmrg#define GEN4_TD_CTL2_THREAD_SPAWNER_EXECUTION_MASK_ENABLE (1 << 7)
249428d7b3dSmrg#define GEN4_TD_CTL2_WIZ_EXECUTION_MASK_ENABLE	      (1 << 6)
250428d7b3dSmrg#define GEN4_TD_CTL2_SF_EXECUTION_MASK_ENABLE	      (1 << 5)
251428d7b3dSmrg#define GEN4_TD_CTL2_CLIPPER_EXECUTION_MASK_ENABLE     (1 << 4)
252428d7b3dSmrg#define GEN4_TD_CTL2_GS_EXECUTION_MASK_ENABLE	      (1 << 3)
253428d7b3dSmrg#define GEN4_TD_CTL2_VS_EXECUTION_MASK_ENABLE	      (1 << 0)
254428d7b3dSmrg#define GEN4_TD_VF_VS_EMSK	       0x8008
255428d7b3dSmrg#define GEN4_TD_GS_EMSK		       0x800c
256428d7b3dSmrg#define GEN4_TD_CLIP_EMSK	       0x8010
257428d7b3dSmrg#define GEN4_TD_SF_EMSK		       0x8014
258428d7b3dSmrg#define GEN4_TD_WIZ_EMSK		       0x8018
259428d7b3dSmrg#define GEN4_TD_0_6_EHTRG_VAL	       0x801c
260428d7b3dSmrg#define GEN4_TD_0_7_EHTRG_VAL	       0x8020
261428d7b3dSmrg#define GEN4_TD_0_6_EHTRG_MSK           0x8024
262428d7b3dSmrg#define GEN4_TD_0_7_EHTRG_MSK	       0x8028
263428d7b3dSmrg#define GEN4_TD_RDATA		       0x802c
264428d7b3dSmrg#define GEN4_TD_TS_EMSK		       0x8030
265428d7b3dSmrg
266428d7b3dSmrg#define GEN4_EU_CTL		       0x8800
267428d7b3dSmrg#define GEN4_EU_CTL_SELECT_SHIFT	       16
268428d7b3dSmrg#define GEN4_EU_CTL_DATA_MUX_SHIFT      8
269428d7b3dSmrg#define GEN4_EU_ATT_0		       0x8810
270428d7b3dSmrg#define GEN4_EU_ATT_1		       0x8814
271428d7b3dSmrg#define GEN4_EU_ATT_DATA_0	       0x8820
272428d7b3dSmrg#define GEN4_EU_ATT_DATA_1	       0x8824
273428d7b3dSmrg#define GEN4_EU_ATT_CLR_0	       0x8830
274428d7b3dSmrg#define GEN4_EU_ATT_CLR_1	       0x8834
275428d7b3dSmrg#define GEN4_EU_RDATA		       0x8840
276428d7b3dSmrg
277428d7b3dSmrg/* 3D state:
278428d7b3dSmrg */
279428d7b3dSmrg#define _3DOP_3DSTATE_PIPELINED       0x0
280428d7b3dSmrg#define _3DOP_3DSTATE_NONPIPELINED    0x1
281428d7b3dSmrg#define _3DOP_3DCONTROL               0x2
282428d7b3dSmrg#define _3DOP_3DPRIMITIVE             0x3
283428d7b3dSmrg
284428d7b3dSmrg#define _3DSTATE_PIPELINED_POINTERS       0x00
285428d7b3dSmrg#define _3DSTATE_BINDING_TABLE_POINTERS   0x01
286428d7b3dSmrg#define _3DSTATE_VERTEX_BUFFERS           0x08
287428d7b3dSmrg#define _3DSTATE_VERTEX_ELEMENTS          0x09
288428d7b3dSmrg#define _3DSTATE_INDEX_BUFFER             0x0A
289428d7b3dSmrg#define _3DSTATE_VF_STATISTICS            0x0B
290428d7b3dSmrg#define _3DSTATE_DRAWING_RECTANGLE            0x00
291428d7b3dSmrg#define _3DSTATE_CONSTANT_COLOR               0x01
292428d7b3dSmrg#define _3DSTATE_SAMPLER_PALETTE_LOAD         0x02
293428d7b3dSmrg#define _3DSTATE_CHROMA_KEY                   0x04
294428d7b3dSmrg#define _3DSTATE_DEPTH_BUFFER                 0x05
295428d7b3dSmrg#define _3DSTATE_POLY_STIPPLE_OFFSET          0x06
296428d7b3dSmrg#define _3DSTATE_POLY_STIPPLE_PATTERN         0x07
297428d7b3dSmrg#define _3DSTATE_LINE_STIPPLE                 0x08
298428d7b3dSmrg#define _3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP    0x09
299428d7b3dSmrg#define _3DCONTROL    0x00
300428d7b3dSmrg#define _3DPRIMITIVE  0x00
301428d7b3dSmrg
302428d7b3dSmrg#define _3DPRIM_POINTLIST         0x01
303428d7b3dSmrg#define _3DPRIM_LINELIST          0x02
304428d7b3dSmrg#define _3DPRIM_LINESTRIP         0x03
305428d7b3dSmrg#define _3DPRIM_TRILIST           0x04
306428d7b3dSmrg#define _3DPRIM_TRISTRIP          0x05
307428d7b3dSmrg#define _3DPRIM_TRIFAN            0x06
308428d7b3dSmrg#define _3DPRIM_QUADLIST          0x07
309428d7b3dSmrg#define _3DPRIM_QUADSTRIP         0x08
310428d7b3dSmrg#define _3DPRIM_LINELIST_ADJ      0x09
311428d7b3dSmrg#define _3DPRIM_LINESTRIP_ADJ     0x0A
312428d7b3dSmrg#define _3DPRIM_TRILIST_ADJ       0x0B
313428d7b3dSmrg#define _3DPRIM_TRISTRIP_ADJ      0x0C
314428d7b3dSmrg#define _3DPRIM_TRISTRIP_REVERSE  0x0D
315428d7b3dSmrg#define _3DPRIM_POLYGON           0x0E
316428d7b3dSmrg#define _3DPRIM_RECTLIST          0x0F
317428d7b3dSmrg#define _3DPRIM_LINELOOP          0x10
318428d7b3dSmrg#define _3DPRIM_POINTLIST_BF      0x11
319428d7b3dSmrg#define _3DPRIM_LINESTRIP_CONT    0x12
320428d7b3dSmrg#define _3DPRIM_LINESTRIP_BF      0x13
321428d7b3dSmrg#define _3DPRIM_LINESTRIP_CONT_BF 0x14
322428d7b3dSmrg#define _3DPRIM_TRIFAN_NOSTIPPLE  0x15
323428d7b3dSmrg
324428d7b3dSmrg#define _3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL 0
325428d7b3dSmrg#define _3DPRIM_VERTEXBUFFER_ACCESS_RANDOM     1
326428d7b3dSmrg
327428d7b3dSmrg#define GEN4_ANISORATIO_2     0
328428d7b3dSmrg#define GEN4_ANISORATIO_4     1
329428d7b3dSmrg#define GEN4_ANISORATIO_6     2
330428d7b3dSmrg#define GEN4_ANISORATIO_8     3
331428d7b3dSmrg#define GEN4_ANISORATIO_10    4
332428d7b3dSmrg#define GEN4_ANISORATIO_12    5
333428d7b3dSmrg#define GEN4_ANISORATIO_14    6
334428d7b3dSmrg#define GEN4_ANISORATIO_16    7
335428d7b3dSmrg
336428d7b3dSmrg#define GEN4_BLENDFACTOR_ONE                 0x1
337428d7b3dSmrg#define GEN4_BLENDFACTOR_SRC_COLOR           0x2
338428d7b3dSmrg#define GEN4_BLENDFACTOR_SRC_ALPHA           0x3
339428d7b3dSmrg#define GEN4_BLENDFACTOR_DST_ALPHA           0x4
340428d7b3dSmrg#define GEN4_BLENDFACTOR_DST_COLOR           0x5
341428d7b3dSmrg#define GEN4_BLENDFACTOR_SRC_ALPHA_SATURATE  0x6
342428d7b3dSmrg#define GEN4_BLENDFACTOR_CONST_COLOR         0x7
343428d7b3dSmrg#define GEN4_BLENDFACTOR_CONST_ALPHA         0x8
344428d7b3dSmrg#define GEN4_BLENDFACTOR_SRC1_COLOR          0x9
345428d7b3dSmrg#define GEN4_BLENDFACTOR_SRC1_ALPHA          0x0A
346428d7b3dSmrg#define GEN4_BLENDFACTOR_ZERO                0x11
347428d7b3dSmrg#define GEN4_BLENDFACTOR_INV_SRC_COLOR       0x12
348428d7b3dSmrg#define GEN4_BLENDFACTOR_INV_SRC_ALPHA       0x13
349428d7b3dSmrg#define GEN4_BLENDFACTOR_INV_DST_ALPHA       0x14
350428d7b3dSmrg#define GEN4_BLENDFACTOR_INV_DST_COLOR       0x15
351428d7b3dSmrg#define GEN4_BLENDFACTOR_INV_CONST_COLOR     0x17
352428d7b3dSmrg#define GEN4_BLENDFACTOR_INV_CONST_ALPHA     0x18
353428d7b3dSmrg#define GEN4_BLENDFACTOR_INV_SRC1_COLOR      0x19
354428d7b3dSmrg#define GEN4_BLENDFACTOR_INV_SRC1_ALPHA      0x1A
355428d7b3dSmrg
356428d7b3dSmrg#define GEN4_BLENDFUNCTION_ADD               0
357428d7b3dSmrg#define GEN4_BLENDFUNCTION_SUBTRACT          1
358428d7b3dSmrg#define GEN4_BLENDFUNCTION_REVERSE_SUBTRACT  2
359428d7b3dSmrg#define GEN4_BLENDFUNCTION_MIN               3
360428d7b3dSmrg#define GEN4_BLENDFUNCTION_MAX               4
361428d7b3dSmrg
362428d7b3dSmrg#define GEN4_ALPHATEST_FORMAT_UNORM8         0
363428d7b3dSmrg#define GEN4_ALPHATEST_FORMAT_FLOAT32        1
364428d7b3dSmrg
365428d7b3dSmrg#define GEN4_CHROMAKEY_KILL_ON_ANY_MATCH  0
366428d7b3dSmrg#define GEN4_CHROMAKEY_REPLACE_BLACK      1
367428d7b3dSmrg
368428d7b3dSmrg#define GEN4_CLIP_API_OGL     0
369428d7b3dSmrg#define GEN4_CLIP_API_DX      1
370428d7b3dSmrg
371428d7b3dSmrg#define GEN4_CLIPMODE_NORMAL              0
372428d7b3dSmrg#define GEN4_CLIPMODE_CLIP_ALL            1
373428d7b3dSmrg#define GEN4_CLIPMODE_CLIP_NON_REJECTED   2
374428d7b3dSmrg#define GEN4_CLIPMODE_REJECT_ALL          3
375428d7b3dSmrg#define GEN4_CLIPMODE_ACCEPT_ALL          4
376428d7b3dSmrg
377428d7b3dSmrg#define GEN4_CLIP_NDCSPACE     0
378428d7b3dSmrg#define GEN4_CLIP_SCREENSPACE  1
379428d7b3dSmrg
380428d7b3dSmrg#define GEN4_COMPAREFUNCTION_ALWAYS       0
381428d7b3dSmrg#define GEN4_COMPAREFUNCTION_NEVER        1
382428d7b3dSmrg#define GEN4_COMPAREFUNCTION_LESS         2
383428d7b3dSmrg#define GEN4_COMPAREFUNCTION_EQUAL        3
384428d7b3dSmrg#define GEN4_COMPAREFUNCTION_LEQUAL       4
385428d7b3dSmrg#define GEN4_COMPAREFUNCTION_GREATER      5
386428d7b3dSmrg#define GEN4_COMPAREFUNCTION_NOTEQUAL     6
387428d7b3dSmrg#define GEN4_COMPAREFUNCTION_GEQUAL       7
388428d7b3dSmrg
389428d7b3dSmrg#define GEN4_COVERAGE_PIXELS_HALF     0
390428d7b3dSmrg#define GEN4_COVERAGE_PIXELS_1        1
391428d7b3dSmrg#define GEN4_COVERAGE_PIXELS_2        2
392428d7b3dSmrg#define GEN4_COVERAGE_PIXELS_4        3
393428d7b3dSmrg
394428d7b3dSmrg#define GEN4_CULLMODE_BOTH        0
395428d7b3dSmrg#define GEN4_CULLMODE_NONE        1
396428d7b3dSmrg#define GEN4_CULLMODE_FRONT       2
397428d7b3dSmrg#define GEN4_CULLMODE_BACK        3
398428d7b3dSmrg
399428d7b3dSmrg#define GEN4_DEFAULTCOLOR_R8G8B8A8_UNORM      0
400428d7b3dSmrg#define GEN4_DEFAULTCOLOR_R32G32B32A32_FLOAT  1
401428d7b3dSmrg
402428d7b3dSmrg#define GEN4_DEPTHFORMAT_D32_FLOAT_S8X24_UINT     0
403428d7b3dSmrg#define GEN4_DEPTHFORMAT_D32_FLOAT                1
404428d7b3dSmrg#define GEN4_DEPTHFORMAT_D24_UNORM_S8_UINT        2
405428d7b3dSmrg#define GEN4_DEPTHFORMAT_D16_UNORM                5
406428d7b3dSmrg
407428d7b3dSmrg#define GEN4_FLOATING_POINT_IEEE_754        0
408428d7b3dSmrg#define GEN4_FLOATING_POINT_NON_IEEE_754    1
409428d7b3dSmrg
410428d7b3dSmrg#define GEN4_FRONTWINDING_CW      0
411428d7b3dSmrg#define GEN4_FRONTWINDING_CCW     1
412428d7b3dSmrg
413428d7b3dSmrg#define GEN4_INDEX_BYTE     0
414428d7b3dSmrg#define GEN4_INDEX_WORD     1
415428d7b3dSmrg#define GEN4_INDEX_DWORD    2
416428d7b3dSmrg
417428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_CLEAR            0
418428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_NOR              1
419428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_AND_INVERTED     2
420428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_COPY_INVERTED    3
421428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_AND_REVERSE      4
422428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_INVERT           5
423428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_XOR              6
424428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_NAND             7
425428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_AND              8
426428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_EQUIV            9
427428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_NOOP             10
428428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_OR_INVERTED      11
429428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_COPY             12
430428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_OR_REVERSE       13
431428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_OR               14
432428d7b3dSmrg#define GEN4_LOGICOPFUNCTION_SET              15
433428d7b3dSmrg
434428d7b3dSmrg#define GEN4_MAPFILTER_NEAREST        0x0
435428d7b3dSmrg#define GEN4_MAPFILTER_LINEAR         0x1
436428d7b3dSmrg#define GEN4_MAPFILTER_ANISOTROPIC    0x2
437428d7b3dSmrg
438428d7b3dSmrg#define GEN4_MIPFILTER_NONE        0
439428d7b3dSmrg#define GEN4_MIPFILTER_NEAREST     1
440428d7b3dSmrg#define GEN4_MIPFILTER_LINEAR      3
441428d7b3dSmrg
442428d7b3dSmrg#define GEN4_POLYGON_FRONT_FACING     0
443428d7b3dSmrg#define GEN4_POLYGON_BACK_FACING      1
444428d7b3dSmrg
445428d7b3dSmrg#define GEN4_PREFILTER_ALWAYS     0x0
446428d7b3dSmrg#define GEN4_PREFILTER_NEVER      0x1
447428d7b3dSmrg#define GEN4_PREFILTER_LESS       0x2
448428d7b3dSmrg#define GEN4_PREFILTER_EQUAL      0x3
449428d7b3dSmrg#define GEN4_PREFILTER_LEQUAL     0x4
450428d7b3dSmrg#define GEN4_PREFILTER_GREATER    0x5
451428d7b3dSmrg#define GEN4_PREFILTER_NOTEQUAL   0x6
452428d7b3dSmrg#define GEN4_PREFILTER_GEQUAL     0x7
453428d7b3dSmrg
454428d7b3dSmrg#define GEN4_PROVOKING_VERTEX_0    0
455428d7b3dSmrg#define GEN4_PROVOKING_VERTEX_1    1
456428d7b3dSmrg#define GEN4_PROVOKING_VERTEX_2    2
457428d7b3dSmrg
458428d7b3dSmrg#define GEN4_RASTRULE_UPPER_LEFT  0
459428d7b3dSmrg#define GEN4_RASTRULE_UPPER_RIGHT 1
460428d7b3dSmrg
461428d7b3dSmrg#define GEN4_RENDERTARGET_CLAMPRANGE_UNORM    0
462428d7b3dSmrg#define GEN4_RENDERTARGET_CLAMPRANGE_SNORM    1
463428d7b3dSmrg#define GEN4_RENDERTARGET_CLAMPRANGE_FORMAT   2
464428d7b3dSmrg
465428d7b3dSmrg#define GEN4_STENCILOP_KEEP               0
466428d7b3dSmrg#define GEN4_STENCILOP_ZERO               1
467428d7b3dSmrg#define GEN4_STENCILOP_REPLACE            2
468428d7b3dSmrg#define GEN4_STENCILOP_INCRSAT            3
469428d7b3dSmrg#define GEN4_STENCILOP_DECRSAT            4
470428d7b3dSmrg#define GEN4_STENCILOP_INCR               5
471428d7b3dSmrg#define GEN4_STENCILOP_DECR               6
472428d7b3dSmrg#define GEN4_STENCILOP_INVERT             7
473428d7b3dSmrg
474428d7b3dSmrg#define GEN4_SURFACE_MIPMAPLAYOUT_BELOW   0
475428d7b3dSmrg#define GEN4_SURFACE_MIPMAPLAYOUT_RIGHT   1
476428d7b3dSmrg
477428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32A32_FLOAT             0x000
478428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32A32_SINT              0x001
479428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32A32_UINT              0x002
480428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32A32_UNORM             0x003
481428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32A32_SNORM             0x004
482428d7b3dSmrg#define GEN4_SURFACEFORMAT_R64G64_FLOAT                   0x005
483428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32X32_FLOAT             0x006
484428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32A32_SSCALED           0x007
485428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32A32_USCALED           0x008
486428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32_FLOAT                0x040
487428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32_SINT                 0x041
488428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32_UINT                 0x042
489428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32_UNORM                0x043
490428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32_SNORM                0x044
491428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32_SSCALED              0x045
492428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32B32_USCALED              0x046
493428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16A16_UNORM             0x080
494428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16A16_SNORM             0x081
495428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16A16_SINT              0x082
496428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16A16_UINT              0x083
497428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16A16_FLOAT             0x084
498428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32_FLOAT                   0x085
499428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32_SINT                    0x086
500428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32_UINT                    0x087
501428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS       0x088
502428d7b3dSmrg#define GEN4_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT        0x089
503428d7b3dSmrg#define GEN4_SURFACEFORMAT_L32A32_FLOAT                   0x08A
504428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32_UNORM                   0x08B
505428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32_SNORM                   0x08C
506428d7b3dSmrg#define GEN4_SURFACEFORMAT_R64_FLOAT                      0x08D
507428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16X16_UNORM             0x08E
508428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16X16_FLOAT             0x08F
509428d7b3dSmrg#define GEN4_SURFACEFORMAT_A32X32_FLOAT                   0x090
510428d7b3dSmrg#define GEN4_SURFACEFORMAT_L32X32_FLOAT                   0x091
511428d7b3dSmrg#define GEN4_SURFACEFORMAT_I32X32_FLOAT                   0x092
512428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16A16_SSCALED           0x093
513428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16A16_USCALED           0x094
514428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32_SSCALED                 0x095
515428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32G32_USCALED                 0x096
516428d7b3dSmrg#define GEN4_SURFACEFORMAT_B8G8R8A8_UNORM                 0x0C0
517428d7b3dSmrg#define GEN4_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB            0x0C1
518428d7b3dSmrg#define GEN4_SURFACEFORMAT_R10G10B10A2_UNORM              0x0C2
519428d7b3dSmrg#define GEN4_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB         0x0C3
520428d7b3dSmrg#define GEN4_SURFACEFORMAT_R10G10B10A2_UINT               0x0C4
521428d7b3dSmrg#define GEN4_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM       0x0C5
522428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8A8_UNORM                 0x0C7
523428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB            0x0C8
524428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8A8_SNORM                 0x0C9
525428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8A8_SINT                  0x0CA
526428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8A8_UINT                  0x0CB
527428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16_UNORM                   0x0CC
528428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16_SNORM                   0x0CD
529428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16_SINT                    0x0CE
530428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16_UINT                    0x0CF
531428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16_FLOAT                   0x0D0
532428d7b3dSmrg#define GEN4_SURFACEFORMAT_B10G10R10A2_UNORM              0x0D1
533428d7b3dSmrg#define GEN4_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB         0x0D2
534428d7b3dSmrg#define GEN4_SURFACEFORMAT_R11G11B10_FLOAT                0x0D3
535428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32_SINT                       0x0D6
536428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32_UINT                       0x0D7
537428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32_FLOAT                      0x0D8
538428d7b3dSmrg#define GEN4_SURFACEFORMAT_R24_UNORM_X8_TYPELESS          0x0D9
539428d7b3dSmrg#define GEN4_SURFACEFORMAT_X24_TYPELESS_G8_UINT           0x0DA
540428d7b3dSmrg#define GEN4_SURFACEFORMAT_L16A16_UNORM                   0x0DF
541428d7b3dSmrg#define GEN4_SURFACEFORMAT_I24X8_UNORM                    0x0E0
542428d7b3dSmrg#define GEN4_SURFACEFORMAT_L24X8_UNORM                    0x0E1
543428d7b3dSmrg#define GEN4_SURFACEFORMAT_A24X8_UNORM                    0x0E2
544428d7b3dSmrg#define GEN4_SURFACEFORMAT_I32_FLOAT                      0x0E3
545428d7b3dSmrg#define GEN4_SURFACEFORMAT_L32_FLOAT                      0x0E4
546428d7b3dSmrg#define GEN4_SURFACEFORMAT_A32_FLOAT                      0x0E5
547428d7b3dSmrg#define GEN4_SURFACEFORMAT_B8G8R8X8_UNORM                 0x0E9
548428d7b3dSmrg#define GEN4_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB            0x0EA
549428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8X8_UNORM                 0x0EB
550428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB            0x0EC
551428d7b3dSmrg#define GEN4_SURFACEFORMAT_R9G9B9E5_SHAREDEXP             0x0ED
552428d7b3dSmrg#define GEN4_SURFACEFORMAT_B10G10R10X2_UNORM              0x0EE
553428d7b3dSmrg#define GEN4_SURFACEFORMAT_L16A16_FLOAT                   0x0F0
554428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32_UNORM                      0x0F1
555428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32_SNORM                      0x0F2
556428d7b3dSmrg#define GEN4_SURFACEFORMAT_R10G10B10X2_USCALED            0x0F3
557428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8A8_SSCALED               0x0F4
558428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8A8_USCALED               0x0F5
559428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16_SSCALED                 0x0F6
560428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16_USCALED                 0x0F7
561428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32_SSCALED                    0x0F8
562428d7b3dSmrg#define GEN4_SURFACEFORMAT_R32_USCALED                    0x0F9
563428d7b3dSmrg#define GEN4_SURFACEFORMAT_B5G6R5_UNORM                   0x100
564428d7b3dSmrg#define GEN4_SURFACEFORMAT_B5G6R5_UNORM_SRGB              0x101
565428d7b3dSmrg#define GEN4_SURFACEFORMAT_B5G5R5A1_UNORM                 0x102
566428d7b3dSmrg#define GEN4_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB            0x103
567428d7b3dSmrg#define GEN4_SURFACEFORMAT_B4G4R4A4_UNORM                 0x104
568428d7b3dSmrg#define GEN4_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB            0x105
569428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8_UNORM                     0x106
570428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8_SNORM                     0x107
571428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8_SINT                      0x108
572428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8_UINT                      0x109
573428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16_UNORM                      0x10A
574428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16_SNORM                      0x10B
575428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16_SINT                       0x10C
576428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16_UINT                       0x10D
577428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16_FLOAT                      0x10E
578428d7b3dSmrg#define GEN4_SURFACEFORMAT_I16_UNORM                      0x111
579428d7b3dSmrg#define GEN4_SURFACEFORMAT_L16_UNORM                      0x112
580428d7b3dSmrg#define GEN4_SURFACEFORMAT_A16_UNORM                      0x113
581428d7b3dSmrg#define GEN4_SURFACEFORMAT_L8A8_UNORM                     0x114
582428d7b3dSmrg#define GEN4_SURFACEFORMAT_I16_FLOAT                      0x115
583428d7b3dSmrg#define GEN4_SURFACEFORMAT_L16_FLOAT                      0x116
584428d7b3dSmrg#define GEN4_SURFACEFORMAT_A16_FLOAT                      0x117
585428d7b3dSmrg#define GEN4_SURFACEFORMAT_R5G5_SNORM_B6_UNORM            0x119
586428d7b3dSmrg#define GEN4_SURFACEFORMAT_B5G5R5X1_UNORM                 0x11A
587428d7b3dSmrg#define GEN4_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB            0x11B
588428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8_SSCALED                   0x11C
589428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8_USCALED                   0x11D
590428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16_SSCALED                    0x11E
591428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16_USCALED                    0x11F
592428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8_UNORM                       0x140
593428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8_SNORM                       0x141
594428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8_SINT                        0x142
595428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8_UINT                        0x143
596428d7b3dSmrg#define GEN4_SURFACEFORMAT_A8_UNORM                       0x144
597428d7b3dSmrg#define GEN4_SURFACEFORMAT_I8_UNORM                       0x145
598428d7b3dSmrg#define GEN4_SURFACEFORMAT_L8_UNORM                       0x146
599428d7b3dSmrg#define GEN4_SURFACEFORMAT_P4A4_UNORM                     0x147
600428d7b3dSmrg#define GEN4_SURFACEFORMAT_A4P4_UNORM                     0x148
601428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8_SSCALED                     0x149
602428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8_USCALED                     0x14A
603428d7b3dSmrg#define GEN4_SURFACEFORMAT_R1_UINT                        0x181
604428d7b3dSmrg#define GEN4_SURFACEFORMAT_YCRCB_NORMAL                   0x182
605428d7b3dSmrg#define GEN4_SURFACEFORMAT_YCRCB_SWAPUVY                  0x183
606428d7b3dSmrg#define GEN4_SURFACEFORMAT_BC1_UNORM                      0x186
607428d7b3dSmrg#define GEN4_SURFACEFORMAT_BC2_UNORM                      0x187
608428d7b3dSmrg#define GEN4_SURFACEFORMAT_BC3_UNORM                      0x188
609428d7b3dSmrg#define GEN4_SURFACEFORMAT_BC4_UNORM                      0x189
610428d7b3dSmrg#define GEN4_SURFACEFORMAT_BC5_UNORM                      0x18A
611428d7b3dSmrg#define GEN4_SURFACEFORMAT_BC1_UNORM_SRGB                 0x18B
612428d7b3dSmrg#define GEN4_SURFACEFORMAT_BC2_UNORM_SRGB                 0x18C
613428d7b3dSmrg#define GEN4_SURFACEFORMAT_BC3_UNORM_SRGB                 0x18D
614428d7b3dSmrg#define GEN4_SURFACEFORMAT_MONO8                          0x18E
615428d7b3dSmrg#define GEN4_SURFACEFORMAT_YCRCB_SWAPUV                   0x18F
616428d7b3dSmrg#define GEN4_SURFACEFORMAT_YCRCB_SWAPY                    0x190
617428d7b3dSmrg#define GEN4_SURFACEFORMAT_DXT1_RGB                       0x191
618428d7b3dSmrg#define GEN4_SURFACEFORMAT_FXT1                           0x192
619428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8_UNORM                   0x193
620428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8_SNORM                   0x194
621428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8_SSCALED                 0x195
622428d7b3dSmrg#define GEN4_SURFACEFORMAT_R8G8B8_USCALED                 0x196
623428d7b3dSmrg#define GEN4_SURFACEFORMAT_R64G64B64A64_FLOAT             0x197
624428d7b3dSmrg#define GEN4_SURFACEFORMAT_R64G64B64_FLOAT                0x198
625428d7b3dSmrg#define GEN4_SURFACEFORMAT_BC4_SNORM                      0x199
626428d7b3dSmrg#define GEN4_SURFACEFORMAT_BC5_SNORM                      0x19A
627428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16_UNORM                0x19C
628428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16_SNORM                0x19D
629428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16_SSCALED              0x19E
630428d7b3dSmrg#define GEN4_SURFACEFORMAT_R16G16B16_USCALED              0x19F
631428d7b3dSmrg
632428d7b3dSmrg#define GEN4_SURFACERETURNFORMAT_FLOAT32  0
633428d7b3dSmrg#define GEN4_SURFACERETURNFORMAT_S1       1
634428d7b3dSmrg
635428d7b3dSmrg#define GEN4_SURFACE_1D      0
636428d7b3dSmrg#define GEN4_SURFACE_2D      1
637428d7b3dSmrg#define GEN4_SURFACE_3D      2
638428d7b3dSmrg#define GEN4_SURFACE_CUBE    3
639428d7b3dSmrg#define GEN4_SURFACE_BUFFER  4
640428d7b3dSmrg#define GEN4_SURFACE_NULL    7
641428d7b3dSmrg
642428d7b3dSmrg#define GEN4_BORDER_COLOR_MODE_DEFAULT	0
643428d7b3dSmrg#define GEN4_BORDER_COLOR_MODE_LEGACY	1
644428d7b3dSmrg
645428d7b3dSmrg#define GEN4_TEXCOORDMODE_WRAP            0
646428d7b3dSmrg#define GEN4_TEXCOORDMODE_MIRROR          1
647428d7b3dSmrg#define GEN4_TEXCOORDMODE_CLAMP           2
648428d7b3dSmrg#define GEN4_TEXCOORDMODE_CUBE            3
649428d7b3dSmrg#define GEN4_TEXCOORDMODE_CLAMP_BORDER    4
650428d7b3dSmrg#define GEN4_TEXCOORDMODE_MIRROR_ONCE     5
651428d7b3dSmrg
652428d7b3dSmrg#define GEN4_THREAD_PRIORITY_NORMAL   0
653428d7b3dSmrg#define GEN4_THREAD_PRIORITY_HIGH     1
654428d7b3dSmrg
655428d7b3dSmrg#define GEN4_TILEWALK_XMAJOR                 0
656428d7b3dSmrg#define GEN4_TILEWALK_YMAJOR                 1
657428d7b3dSmrg
658428d7b3dSmrg#define GEN4_VERTEX_SUBPIXEL_PRECISION_8BITS  0
659428d7b3dSmrg#define GEN4_VERTEX_SUBPIXEL_PRECISION_4BITS  1
660428d7b3dSmrg
661428d7b3dSmrg#define GEN4_VERTEXBUFFER_ACCESS_VERTEXDATA     0
662428d7b3dSmrg#define GEN4_VERTEXBUFFER_ACCESS_INSTANCEDATA   1
663428d7b3dSmrg
664428d7b3dSmrg#define VFCOMPONENT_NOSTORE      0
665428d7b3dSmrg#define VFCOMPONENT_STORE_SRC    1
666428d7b3dSmrg#define VFCOMPONENT_STORE_0      2
667428d7b3dSmrg#define VFCOMPONENT_STORE_1_FLT  3
668428d7b3dSmrg#define VFCOMPONENT_STORE_1_INT  4
669428d7b3dSmrg#define VFCOMPONENT_STORE_VID    5
670428d7b3dSmrg#define VFCOMPONENT_STORE_IID    6
671428d7b3dSmrg#define VFCOMPONENT_STORE_PID    7
672428d7b3dSmrg
673428d7b3dSmrg
674428d7b3dSmrg/* Execution Unit (EU) defines
675428d7b3dSmrg */
676428d7b3dSmrg
677428d7b3dSmrg#define GEN4_ALIGN_1   0
678428d7b3dSmrg#define GEN4_ALIGN_16  1
679428d7b3dSmrg
680428d7b3dSmrg#define GEN4_ADDRESS_DIRECT                        0
681428d7b3dSmrg#define GEN4_ADDRESS_REGISTER_INDIRECT_REGISTER    1
682428d7b3dSmrg
683428d7b3dSmrg#define GEN4_CHANNEL_X     0
684428d7b3dSmrg#define GEN4_CHANNEL_Y     1
685428d7b3dSmrg#define GEN4_CHANNEL_Z     2
686428d7b3dSmrg#define GEN4_CHANNEL_W     3
687428d7b3dSmrg
688428d7b3dSmrg#define GEN4_COMPRESSION_NONE          0
689428d7b3dSmrg#define GEN4_COMPRESSION_2NDHALF       1
690428d7b3dSmrg#define GEN4_COMPRESSION_COMPRESSED    2
691428d7b3dSmrg
692428d7b3dSmrg#define GEN4_CONDITIONAL_NONE  0
693428d7b3dSmrg#define GEN4_CONDITIONAL_Z     1
694428d7b3dSmrg#define GEN4_CONDITIONAL_NZ    2
695428d7b3dSmrg#define GEN4_CONDITIONAL_EQ    1	/* Z */
696428d7b3dSmrg#define GEN4_CONDITIONAL_NEQ   2	/* NZ */
697428d7b3dSmrg#define GEN4_CONDITIONAL_G     3
698428d7b3dSmrg#define GEN4_CONDITIONAL_GE    4
699428d7b3dSmrg#define GEN4_CONDITIONAL_L     5
700428d7b3dSmrg#define GEN4_CONDITIONAL_LE    6
701428d7b3dSmrg#define GEN4_CONDITIONAL_C     7
702428d7b3dSmrg#define GEN4_CONDITIONAL_O     8
703428d7b3dSmrg
704428d7b3dSmrg#define GEN4_DEBUG_NONE        0
705428d7b3dSmrg#define GEN4_DEBUG_BREAKPOINT  1
706428d7b3dSmrg
707428d7b3dSmrg#define GEN4_DEPENDENCY_NORMAL         0
708428d7b3dSmrg#define GEN4_DEPENDENCY_NOTCLEARED     1
709428d7b3dSmrg#define GEN4_DEPENDENCY_NOTCHECKED     2
710428d7b3dSmrg#define GEN4_DEPENDENCY_DISABLE        3
711428d7b3dSmrg
712428d7b3dSmrg#define GEN4_EXECUTE_1     0
713428d7b3dSmrg#define GEN4_EXECUTE_2     1
714428d7b3dSmrg#define GEN4_EXECUTE_4     2
715428d7b3dSmrg#define GEN4_EXECUTE_8     3
716428d7b3dSmrg#define GEN4_EXECUTE_16    4
717428d7b3dSmrg#define GEN4_EXECUTE_32    5
718428d7b3dSmrg
719428d7b3dSmrg#define GEN4_HORIZONTAL_STRIDE_0   0
720428d7b3dSmrg#define GEN4_HORIZONTAL_STRIDE_1   1
721428d7b3dSmrg#define GEN4_HORIZONTAL_STRIDE_2   2
722428d7b3dSmrg#define GEN4_HORIZONTAL_STRIDE_4   3
723428d7b3dSmrg
724428d7b3dSmrg#define GEN4_INSTRUCTION_NORMAL    0
725428d7b3dSmrg#define GEN4_INSTRUCTION_SATURATE  1
726428d7b3dSmrg
727428d7b3dSmrg#define _MASK_ENABLE   0
728428d7b3dSmrg#define _MASK_DISABLE  1
729428d7b3dSmrg
730428d7b3dSmrg#define GEN4_OPCODE_MOV        1
731428d7b3dSmrg#define GEN4_OPCODE_SEL        2
732428d7b3dSmrg#define GEN4_OPCODE_NOT        4
733428d7b3dSmrg#define GEN4_OPCODE_AND        5
734428d7b3dSmrg#define GEN4_OPCODE_OR         6
735428d7b3dSmrg#define GEN4_OPCODE_XOR        7
736428d7b3dSmrg#define GEN4_OPCODE_SHR        8
737428d7b3dSmrg#define GEN4_OPCODE_SHL        9
738428d7b3dSmrg#define GEN4_OPCODE_RSR        10
739428d7b3dSmrg#define GEN4_OPCODE_RSL        11
740428d7b3dSmrg#define GEN4_OPCODE_ASR        12
741428d7b3dSmrg#define GEN4_OPCODE_CMP        16
742428d7b3dSmrg#define GEN4_OPCODE_JMPI       32
743428d7b3dSmrg#define GEN4_OPCODE_IF         34
744428d7b3dSmrg#define GEN4_OPCODE_IFF        35
745428d7b3dSmrg#define GEN4_OPCODE_ELSE       36
746428d7b3dSmrg#define GEN4_OPCODE_ENDIF      37
747428d7b3dSmrg#define GEN4_OPCODE_DO         38
748428d7b3dSmrg#define GEN4_OPCODE_WHILE      39
749428d7b3dSmrg#define GEN4_OPCODE_BREAK      40
750428d7b3dSmrg#define GEN4_OPCODE_CONTINUE   41
751428d7b3dSmrg#define GEN4_OPCODE_HALT       42
752428d7b3dSmrg#define GEN4_OPCODE_MSAVE      44
753428d7b3dSmrg#define GEN4_OPCODE_MRESTORE   45
754428d7b3dSmrg#define GEN4_OPCODE_PUSH       46
755428d7b3dSmrg#define GEN4_OPCODE_POP        47
756428d7b3dSmrg#define GEN4_OPCODE_WAIT       48
757428d7b3dSmrg#define GEN4_OPCODE_SEND       49
758428d7b3dSmrg#define GEN4_OPCODE_ADD        64
759428d7b3dSmrg#define GEN4_OPCODE_MUL        65
760428d7b3dSmrg#define GEN4_OPCODE_AVG        66
761428d7b3dSmrg#define GEN4_OPCODE_FRC        67
762428d7b3dSmrg#define GEN4_OPCODE_RNDU       68
763428d7b3dSmrg#define GEN4_OPCODE_RNDD       69
764428d7b3dSmrg#define GEN4_OPCODE_RNDE       70
765428d7b3dSmrg#define GEN4_OPCODE_RNDZ       71
766428d7b3dSmrg#define GEN4_OPCODE_MAC        72
767428d7b3dSmrg#define GEN4_OPCODE_MACH       73
768428d7b3dSmrg#define GEN4_OPCODE_LZD        74
769428d7b3dSmrg#define GEN4_OPCODE_SAD2       80
770428d7b3dSmrg#define GEN4_OPCODE_SADA2      81
771428d7b3dSmrg#define GEN4_OPCODE_DP4        84
772428d7b3dSmrg#define GEN4_OPCODE_DPH        85
773428d7b3dSmrg#define GEN4_OPCODE_DP3        86
774428d7b3dSmrg#define GEN4_OPCODE_DP2        87
775428d7b3dSmrg#define GEN4_OPCODE_DPA2       88
776428d7b3dSmrg#define GEN4_OPCODE_LINE       89
777428d7b3dSmrg#define GEN4_OPCODE_NOP        126
778428d7b3dSmrg
779428d7b3dSmrg#define GEN4_PREDICATE_NONE             0
780428d7b3dSmrg#define GEN4_PREDICATE_NORMAL           1
781428d7b3dSmrg#define GEN4_PREDICATE_ALIGN1_ANYV             2
782428d7b3dSmrg#define GEN4_PREDICATE_ALIGN1_ALLV             3
783428d7b3dSmrg#define GEN4_PREDICATE_ALIGN1_ANY2H            4
784428d7b3dSmrg#define GEN4_PREDICATE_ALIGN1_ALL2H            5
785428d7b3dSmrg#define GEN4_PREDICATE_ALIGN1_ANY4H            6
786428d7b3dSmrg#define GEN4_PREDICATE_ALIGN1_ALL4H            7
787428d7b3dSmrg#define GEN4_PREDICATE_ALIGN1_ANY8H            8
788428d7b3dSmrg#define GEN4_PREDICATE_ALIGN1_ALL8H            9
789428d7b3dSmrg#define GEN4_PREDICATE_ALIGN1_ANY16H           10
790428d7b3dSmrg#define GEN4_PREDICATE_ALIGN1_ALL16H           11
791428d7b3dSmrg#define GEN4_PREDICATE_ALIGN16_REPLICATE_X     2
792428d7b3dSmrg#define GEN4_PREDICATE_ALIGN16_REPLICATE_Y     3
793428d7b3dSmrg#define GEN4_PREDICATE_ALIGN16_REPLICATE_Z     4
794428d7b3dSmrg#define GEN4_PREDICATE_ALIGN16_REPLICATE_W     5
795428d7b3dSmrg#define GEN4_PREDICATE_ALIGN16_ANY4H           6
796428d7b3dSmrg#define GEN4_PREDICATE_ALIGN16_ALL4H           7
797428d7b3dSmrg
798428d7b3dSmrg#define GEN4_ARCHITECTURE_REGISTER_FILE    0
799428d7b3dSmrg#define GEN4_GENERAL_REGISTER_FILE         1
800428d7b3dSmrg#define GEN4_MESSAGE_REGISTER_FILE         2
801428d7b3dSmrg#define GEN4_IMMEDIATE_VALUE               3
802428d7b3dSmrg
803428d7b3dSmrg#define GEN4_REGISTER_TYPE_UD  0
804428d7b3dSmrg#define GEN4_REGISTER_TYPE_D   1
805428d7b3dSmrg#define GEN4_REGISTER_TYPE_UW  2
806428d7b3dSmrg#define GEN4_REGISTER_TYPE_W   3
807428d7b3dSmrg#define GEN4_REGISTER_TYPE_UB  4
808428d7b3dSmrg#define GEN4_REGISTER_TYPE_B   5
809428d7b3dSmrg#define GEN4_REGISTER_TYPE_VF  5	/* packed float vector, immediates only? */
810428d7b3dSmrg#define GEN4_REGISTER_TYPE_HF  6
811428d7b3dSmrg#define GEN4_REGISTER_TYPE_V   6	/* packed int vector, immediates only, uword dest only */
812428d7b3dSmrg#define GEN4_REGISTER_TYPE_F   7
813428d7b3dSmrg
814428d7b3dSmrg#define GEN4_ARF_NULL                  0x00
815428d7b3dSmrg#define GEN4_ARF_ADDRESS               0x10
816428d7b3dSmrg#define GEN4_ARF_ACCUMULATOR           0x20
817428d7b3dSmrg#define GEN4_ARF_FLAG                  0x30
818428d7b3dSmrg#define GEN4_ARF_MASK                  0x40
819428d7b3dSmrg#define GEN4_ARF_MASK_STACK            0x50
820428d7b3dSmrg#define GEN4_ARF_MASK_STACK_DEPTH      0x60
821428d7b3dSmrg#define GEN4_ARF_STATE                 0x70
822428d7b3dSmrg#define GEN4_ARF_CONTROL               0x80
823428d7b3dSmrg#define GEN4_ARF_NOTIFICATION_COUNT    0x90
824428d7b3dSmrg#define GEN4_ARF_IP                    0xA0
825428d7b3dSmrg
826428d7b3dSmrg#define GEN4_AMASK   0
827428d7b3dSmrg#define GEN4_IMASK   1
828428d7b3dSmrg#define GEN4_LMASK   2
829428d7b3dSmrg#define GEN4_CMASK   3
830428d7b3dSmrg
831428d7b3dSmrg
832428d7b3dSmrg
833428d7b3dSmrg#define GEN4_THREAD_NORMAL     0
834428d7b3dSmrg#define GEN4_THREAD_ATOMIC     1
835428d7b3dSmrg#define GEN4_THREAD_SWITCH     2
836428d7b3dSmrg
837428d7b3dSmrg#define GEN4_VERTICAL_STRIDE_0                 0
838428d7b3dSmrg#define GEN4_VERTICAL_STRIDE_1                 1
839428d7b3dSmrg#define GEN4_VERTICAL_STRIDE_2                 2
840428d7b3dSmrg#define GEN4_VERTICAL_STRIDE_4                 3
841428d7b3dSmrg#define GEN4_VERTICAL_STRIDE_8                 4
842428d7b3dSmrg#define GEN4_VERTICAL_STRIDE_16                5
843428d7b3dSmrg#define GEN4_VERTICAL_STRIDE_32                6
844428d7b3dSmrg#define GEN4_VERTICAL_STRIDE_64                7
845428d7b3dSmrg#define GEN4_VERTICAL_STRIDE_128               8
846428d7b3dSmrg#define GEN4_VERTICAL_STRIDE_256               9
847428d7b3dSmrg#define GEN4_VERTICAL_STRIDE_ONE_DIMENSIONAL   0xF
848428d7b3dSmrg
849428d7b3dSmrg#define GEN4_WIDTH_1       0
850428d7b3dSmrg#define GEN4_WIDTH_2       1
851428d7b3dSmrg#define GEN4_WIDTH_4       2
852428d7b3dSmrg#define GEN4_WIDTH_8       3
853428d7b3dSmrg#define GEN4_WIDTH_16      4
854428d7b3dSmrg
855428d7b3dSmrg#define GEN4_STATELESS_BUFFER_BOUNDARY_1K      0
856428d7b3dSmrg#define GEN4_STATELESS_BUFFER_BOUNDARY_2K      1
857428d7b3dSmrg#define GEN4_STATELESS_BUFFER_BOUNDARY_4K      2
858428d7b3dSmrg#define GEN4_STATELESS_BUFFER_BOUNDARY_8K      3
859428d7b3dSmrg#define GEN4_STATELESS_BUFFER_BOUNDARY_16K     4
860428d7b3dSmrg#define GEN4_STATELESS_BUFFER_BOUNDARY_32K     5
861428d7b3dSmrg#define GEN4_STATELESS_BUFFER_BOUNDARY_64K     6
862428d7b3dSmrg#define GEN4_STATELESS_BUFFER_BOUNDARY_128K    7
863428d7b3dSmrg#define GEN4_STATELESS_BUFFER_BOUNDARY_256K    8
864428d7b3dSmrg#define GEN4_STATELESS_BUFFER_BOUNDARY_512K    9
865428d7b3dSmrg#define GEN4_STATELESS_BUFFER_BOUNDARY_1M      10
866428d7b3dSmrg#define GEN4_STATELESS_BUFFER_BOUNDARY_2M      11
867428d7b3dSmrg
868428d7b3dSmrg#define GEN4_POLYGON_FACING_FRONT      0
869428d7b3dSmrg#define GEN4_POLYGON_FACING_BACK       1
870428d7b3dSmrg
871428d7b3dSmrg#define GEN4_MESSAGE_TARGET_NULL               0
872428d7b3dSmrg#define GEN4_MESSAGE_TARGET_MATH               1
873428d7b3dSmrg#define GEN4_MESSAGE_TARGET_SAMPLER            2
874428d7b3dSmrg#define GEN4_MESSAGE_TARGET_GATEWAY            3
875428d7b3dSmrg#define GEN4_MESSAGE_TARGET_DATAPORT_READ      4
876428d7b3dSmrg#define GEN4_MESSAGE_TARGET_DATAPORT_WRITE     5
877428d7b3dSmrg#define GEN4_MESSAGE_TARGET_URB                6
878428d7b3dSmrg#define GEN4_MESSAGE_TARGET_THREAD_SPAWNER     7
879428d7b3dSmrg
880428d7b3dSmrg#define GEN4_SAMPLER_RETURN_FORMAT_FLOAT32     0
881428d7b3dSmrg#define GEN4_SAMPLER_RETURN_FORMAT_UINT32      2
882428d7b3dSmrg#define GEN4_SAMPLER_RETURN_FORMAT_SINT32      3
883428d7b3dSmrg
884428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD8_SAMPLE              0
885428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD16_SAMPLE             0
886428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS        0
887428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD8_KILLPIX             1
888428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_LOD        1
889428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD16_SAMPLE_LOD         1
890428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_GRADIENTS  2
891428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD8_SAMPLE_GRADIENTS    2
892428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_COMPARE    0
893428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD16_SAMPLE_COMPARE     2
894428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD4X2_RESINFO           2
895428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD8_RESINFO             2
896428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD16_RESINFO            2
897428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD4X2_LD                3
898428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD8_LD                  3
899428d7b3dSmrg#define GEN4_SAMPLER_MESSAGE_SIMD16_LD                 3
900428d7b3dSmrg
901428d7b3dSmrg#define GEN4_DATAPORT_OWORD_BLOCK_1_OWORDLOW   0
902428d7b3dSmrg#define GEN4_DATAPORT_OWORD_BLOCK_1_OWORDHIGH  1
903428d7b3dSmrg#define GEN4_DATAPORT_OWORD_BLOCK_2_OWORDS     2
904428d7b3dSmrg#define GEN4_DATAPORT_OWORD_BLOCK_4_OWORDS     3
905428d7b3dSmrg#define GEN4_DATAPORT_OWORD_BLOCK_8_OWORDS     4
906428d7b3dSmrg
907428d7b3dSmrg#define GEN4_DATAPORT_OWORD_DUAL_BLOCK_1OWORD     0
908428d7b3dSmrg#define GEN4_DATAPORT_OWORD_DUAL_BLOCK_4OWORDS    2
909428d7b3dSmrg
910428d7b3dSmrg#define GEN4_DATAPORT_DWORD_SCATTERED_BLOCK_8DWORDS   2
911428d7b3dSmrg#define GEN4_DATAPORT_DWORD_SCATTERED_BLOCK_16DWORDS  3
912428d7b3dSmrg
913428d7b3dSmrg#define GEN4_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ          0
914428d7b3dSmrg#define GEN4_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ     1
915428d7b3dSmrg#define GEN4_DATAPORT_READ_MESSAGE_DWORD_BLOCK_READ          2
916428d7b3dSmrg#define GEN4_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ      3
917428d7b3dSmrg
918428d7b3dSmrg#define GEN4_DATAPORT_READ_TARGET_DATA_CACHE      0
919428d7b3dSmrg#define GEN4_DATAPORT_READ_TARGET_RENDER_CACHE    1
920428d7b3dSmrg#define GEN4_DATAPORT_READ_TARGET_SAMPLER_CACHE   2
921428d7b3dSmrg
922428d7b3dSmrg#define GEN4_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE                0
923428d7b3dSmrg#define GEN4_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE_REPLICATED     1
924428d7b3dSmrg#define GEN4_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN01         2
925428d7b3dSmrg#define GEN4_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN23         3
926428d7b3dSmrg#define GEN4_DATAPORT_RENDER_TARGET_WRITE_SIMD8_SINGLE_SOURCE_SUBSPAN01       4
927428d7b3dSmrg
928428d7b3dSmrg#define GEN4_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE                0
929428d7b3dSmrg#define GEN4_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE           1
930428d7b3dSmrg#define GEN4_DATAPORT_WRITE_MESSAGE_DWORD_BLOCK_WRITE                2
931428d7b3dSmrg#define GEN4_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE            3
932428d7b3dSmrg#define GEN4_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE              4
933428d7b3dSmrg#define GEN4_DATAPORT_WRITE_MESSAGE_STREAMED_VERTEX_BUFFER_WRITE     5
934428d7b3dSmrg#define GEN4_DATAPORT_WRITE_MESSAGE_FLUSH_RENDER_CACHE               7
935428d7b3dSmrg
936428d7b3dSmrg#define GEN4_MATH_FUNCTION_INV                              1
937428d7b3dSmrg#define GEN4_MATH_FUNCTION_LOG                              2
938428d7b3dSmrg#define GEN4_MATH_FUNCTION_EXP                              3
939428d7b3dSmrg#define GEN4_MATH_FUNCTION_SQRT                             4
940428d7b3dSmrg#define GEN4_MATH_FUNCTION_RSQ                              5
941428d7b3dSmrg#define GEN4_MATH_FUNCTION_SIN                              6 /* was 7 */
942428d7b3dSmrg#define GEN4_MATH_FUNCTION_COS                              7 /* was 8 */
943428d7b3dSmrg#define GEN4_MATH_FUNCTION_SINCOS                           8 /* was 6 */
944428d7b3dSmrg#define GEN4_MATH_FUNCTION_TAN                              9
945428d7b3dSmrg#define GEN4_MATH_FUNCTION_POW                              10
946428d7b3dSmrg#define GEN4_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER   11
947428d7b3dSmrg#define GEN4_MATH_FUNCTION_INT_DIV_QUOTIENT                 12
948428d7b3dSmrg#define GEN4_MATH_FUNCTION_INT_DIV_REMAINDER                13
949428d7b3dSmrg
950428d7b3dSmrg#define GEN4_MATH_INTEGER_UNSIGNED     0
951428d7b3dSmrg#define GEN4_MATH_INTEGER_SIGNED       1
952428d7b3dSmrg
953428d7b3dSmrg#define GEN4_MATH_PRECISION_FULL        0
954428d7b3dSmrg#define GEN4_MATH_PRECISION_PARTIAL     1
955428d7b3dSmrg
956428d7b3dSmrg#define GEN4_MATH_SATURATE_NONE         0
957428d7b3dSmrg#define GEN4_MATH_SATURATE_SATURATE     1
958428d7b3dSmrg
959428d7b3dSmrg#define GEN4_MATH_DATA_VECTOR  0
960428d7b3dSmrg#define GEN4_MATH_DATA_SCALAR  1
961428d7b3dSmrg
962428d7b3dSmrg#define GEN4_URB_OPCODE_WRITE  0
963428d7b3dSmrg
964428d7b3dSmrg#define GEN4_URB_SWIZZLE_NONE          0
965428d7b3dSmrg#define GEN4_URB_SWIZZLE_INTERLEAVE    1
966428d7b3dSmrg#define GEN4_URB_SWIZZLE_TRANSPOSE     2
967428d7b3dSmrg
968428d7b3dSmrg#define GEN4_SCRATCH_SPACE_SIZE_1K     0
969428d7b3dSmrg#define GEN4_SCRATCH_SPACE_SIZE_2K     1
970428d7b3dSmrg#define GEN4_SCRATCH_SPACE_SIZE_4K     2
971428d7b3dSmrg#define GEN4_SCRATCH_SPACE_SIZE_8K     3
972428d7b3dSmrg#define GEN4_SCRATCH_SPACE_SIZE_16K    4
973428d7b3dSmrg#define GEN4_SCRATCH_SPACE_SIZE_32K    5
974428d7b3dSmrg#define GEN4_SCRATCH_SPACE_SIZE_64K    6
975428d7b3dSmrg#define GEN4_SCRATCH_SPACE_SIZE_128K   7
976428d7b3dSmrg#define GEN4_SCRATCH_SPACE_SIZE_256K   8
977428d7b3dSmrg#define GEN4_SCRATCH_SPACE_SIZE_512K   9
978428d7b3dSmrg#define GEN4_SCRATCH_SPACE_SIZE_1M     10
979428d7b3dSmrg#define GEN4_SCRATCH_SPACE_SIZE_2M     11
980428d7b3dSmrg
981428d7b3dSmrg
982428d7b3dSmrg
983428d7b3dSmrg
984428d7b3dSmrg#define CMD_URB_FENCE                 0x6000
985428d7b3dSmrg#define CMD_CONST_BUFFER_STATE        0x6001
986428d7b3dSmrg#define CMD_CONST_BUFFER              0x6002
987428d7b3dSmrg
988428d7b3dSmrg#define CMD_STATE_BASE_ADDRESS        0x6101
989428d7b3dSmrg#define CMD_STATE_INSN_POINTER        0x6102
990428d7b3dSmrg#define CMD_PIPELINE_SELECT           0x6104
991428d7b3dSmrg
992428d7b3dSmrg#define CMD_PIPELINED_STATE_POINTERS  0x7800
993428d7b3dSmrg#define CMD_BINDING_TABLE_PTRS        0x7801
994428d7b3dSmrg#define CMD_VERTEX_BUFFER             0x7808
995428d7b3dSmrg#define CMD_VERTEX_ELEMENT            0x7809
996428d7b3dSmrg#define CMD_INDEX_BUFFER              0x780a
997428d7b3dSmrg#define CMD_VF_STATISTICS             0x780b
998428d7b3dSmrg
999428d7b3dSmrg#define CMD_DRAW_RECT                 0x7900
1000428d7b3dSmrg#define CMD_BLEND_CONSTANT_COLOR      0x7901
1001428d7b3dSmrg#define CMD_CHROMA_KEY                0x7904
1002428d7b3dSmrg#define CMD_DEPTH_BUFFER              0x7905
1003428d7b3dSmrg#define CMD_POLY_STIPPLE_OFFSET       0x7906
1004428d7b3dSmrg#define CMD_POLY_STIPPLE_PATTERN      0x7907
1005428d7b3dSmrg#define CMD_LINE_STIPPLE_PATTERN      0x7908
1006428d7b3dSmrg#define CMD_GLOBAL_DEPTH_OFFSET_CLAMP 0x7908
1007428d7b3dSmrg
1008428d7b3dSmrg#define CMD_PIPE_CONTROL              0x7a00
1009428d7b3dSmrg
1010428d7b3dSmrg#define CMD_3D_PRIM                   0x7b00
1011428d7b3dSmrg
1012428d7b3dSmrg#define CMD_MI_FLUSH                  0x0200
1013428d7b3dSmrg
1014428d7b3dSmrg
1015428d7b3dSmrg/* Various values from the R0 vertex header:
1016428d7b3dSmrg */
1017428d7b3dSmrg#define R02_PRIM_END    0x1
1018428d7b3dSmrg#define R02_PRIM_START  0x2
1019428d7b3dSmrg
1020428d7b3dSmrg/* media pipeline */
1021428d7b3dSmrg
1022428d7b3dSmrg#define GEN4_VFE_MODE_GENERIC		0x0
1023428d7b3dSmrg#define GEN4_VFE_MODE_VLD_MPEG2		0x1
1024428d7b3dSmrg#define GEN4_VFE_MODE_IS			0x2
1025428d7b3dSmrg#define GEN4_VFE_MODE_AVC_MC		0x4
1026428d7b3dSmrg#define GEN4_VFE_MODE_AVC_IT		0x7
1027428d7b3dSmrg#define GEN4_VFE_MODE_VC1_IT		0xB
1028428d7b3dSmrg
1029428d7b3dSmrg#define GEN4_VFE_DEBUG_COUNTER_FREE	0
1030428d7b3dSmrg#define GEN4_VFE_DEBUG_COUNTER_FROZEN	1
1031428d7b3dSmrg#define GEN4_VFE_DEBUG_COUNTER_ONCE	2
1032428d7b3dSmrg#define GEN4_VFE_DEBUG_COUNTER_ALWAYS	3
1033428d7b3dSmrg
1034428d7b3dSmrg/* VLD_STATE */
1035428d7b3dSmrg#define GEN4_MPEG_TOP_FIELD		1
1036428d7b3dSmrg#define GEN4_MPEG_BOTTOM_FIELD		2
1037428d7b3dSmrg#define GEN4_MPEG_FRAME			3
1038428d7b3dSmrg#define GEN4_MPEG_QSCALE_LINEAR		0
1039428d7b3dSmrg#define GEN4_MPEG_QSCALE_NONLINEAR	1
1040428d7b3dSmrg#define GEN4_MPEG_ZIGZAG_SCAN		0
1041428d7b3dSmrg#define GEN4_MPEG_ALTER_VERTICAL_SCAN	1
1042428d7b3dSmrg#define GEN4_MPEG_I_PICTURE		1
1043428d7b3dSmrg#define GEN4_MPEG_P_PICTURE		2
1044428d7b3dSmrg#define GEN4_MPEG_B_PICTURE		3
1045428d7b3dSmrg
1046428d7b3dSmrg/* Command packets:
1047428d7b3dSmrg */
1048428d7b3dSmrgstruct header
1049428d7b3dSmrg{
1050428d7b3dSmrg   unsigned int length:16;
1051428d7b3dSmrg   unsigned int opcode:16;
1052428d7b3dSmrg};
1053428d7b3dSmrg
1054428d7b3dSmrg
1055428d7b3dSmrgunion header_union
1056428d7b3dSmrg{
1057428d7b3dSmrg   struct header bits;
1058428d7b3dSmrg   unsigned int dword;
1059428d7b3dSmrg};
1060428d7b3dSmrg
1061428d7b3dSmrgstruct gen4_3d_control
1062428d7b3dSmrg{
1063428d7b3dSmrg   struct
1064428d7b3dSmrg   {
1065428d7b3dSmrg      unsigned int length:8;
1066428d7b3dSmrg      unsigned int notify_enable:1;
1067428d7b3dSmrg      unsigned int pad:3;
1068428d7b3dSmrg      unsigned int wc_flush_enable:1;
1069428d7b3dSmrg      unsigned int depth_stall_enable:1;
1070428d7b3dSmrg      unsigned int operation:2;
1071428d7b3dSmrg      unsigned int opcode:16;
1072428d7b3dSmrg   } header;
1073428d7b3dSmrg
1074428d7b3dSmrg   struct
1075428d7b3dSmrg   {
1076428d7b3dSmrg      unsigned int pad:2;
1077428d7b3dSmrg      unsigned int dest_addr_type:1;
1078428d7b3dSmrg      unsigned int dest_addr:29;
1079428d7b3dSmrg   } dest;
1080428d7b3dSmrg
1081428d7b3dSmrg   unsigned int dword2;
1082428d7b3dSmrg   unsigned int dword3;
1083428d7b3dSmrg};
1084428d7b3dSmrg
1085428d7b3dSmrg
1086428d7b3dSmrgstruct gen4_3d_primitive
1087428d7b3dSmrg{
1088428d7b3dSmrg   struct
1089428d7b3dSmrg   {
1090428d7b3dSmrg      unsigned int length:8;
1091428d7b3dSmrg      unsigned int pad:2;
1092428d7b3dSmrg      unsigned int topology:5;
1093428d7b3dSmrg      unsigned int indexed:1;
1094428d7b3dSmrg      unsigned int opcode:16;
1095428d7b3dSmrg   } header;
1096428d7b3dSmrg
1097428d7b3dSmrg   unsigned int verts_per_instance;
1098428d7b3dSmrg   unsigned int start_vert_location;
1099428d7b3dSmrg   unsigned int instance_count;
1100428d7b3dSmrg   unsigned int start_instance_location;
1101428d7b3dSmrg   unsigned int base_vert_location;
1102428d7b3dSmrg};
1103428d7b3dSmrg
1104428d7b3dSmrg/* These seem to be passed around as function args, so it works out
1105428d7b3dSmrg * better to keep them as #defines:
1106428d7b3dSmrg */
1107428d7b3dSmrg#define GEN4_FLUSH_READ_CACHE           0x1
1108428d7b3dSmrg#define GEN4_FLUSH_STATE_CACHE          0x2
1109428d7b3dSmrg#define GEN4_INHIBIT_FLUSH_RENDER_CACHE 0x4
1110428d7b3dSmrg#define GEN4_FLUSH_SNAPSHOT_COUNTERS    0x8
1111428d7b3dSmrg
1112428d7b3dSmrgstruct gen4_mi_flush
1113428d7b3dSmrg{
1114428d7b3dSmrg   unsigned int flags:4;
1115428d7b3dSmrg   unsigned int pad:12;
1116428d7b3dSmrg   unsigned int opcode:16;
1117428d7b3dSmrg};
1118428d7b3dSmrg
1119428d7b3dSmrgstruct gen4_vf_statistics
1120428d7b3dSmrg{
1121428d7b3dSmrg   unsigned int statistics_enable:1;
1122428d7b3dSmrg   unsigned int pad:15;
1123428d7b3dSmrg   unsigned int opcode:16;
1124428d7b3dSmrg};
1125428d7b3dSmrg
1126428d7b3dSmrg
1127428d7b3dSmrg
1128428d7b3dSmrgstruct gen4_binding_table_pointers
1129428d7b3dSmrg{
1130428d7b3dSmrg   struct header header;
1131428d7b3dSmrg   unsigned int vs;
1132428d7b3dSmrg   unsigned int gs;
1133428d7b3dSmrg   unsigned int clp;
1134428d7b3dSmrg   unsigned int sf;
1135428d7b3dSmrg   unsigned int wm;
1136428d7b3dSmrg};
1137428d7b3dSmrg
1138428d7b3dSmrg
1139428d7b3dSmrgstruct gen4_blend_constant_color
1140428d7b3dSmrg{
1141428d7b3dSmrg   struct header header;
1142428d7b3dSmrg   float blend_constant_color[4];
1143428d7b3dSmrg};
1144428d7b3dSmrg
1145428d7b3dSmrg
1146428d7b3dSmrgstruct gen4_depthbuffer
1147428d7b3dSmrg{
1148428d7b3dSmrg   union header_union header;
1149428d7b3dSmrg
1150428d7b3dSmrg   union {
1151428d7b3dSmrg      struct {
1152428d7b3dSmrg	 unsigned int pitch:18;
1153428d7b3dSmrg	 unsigned int format:3;
1154428d7b3dSmrg	 unsigned int pad:4;
1155428d7b3dSmrg	 unsigned int depth_offset_disable:1;
1156428d7b3dSmrg	 unsigned int tile_walk:1;
1157428d7b3dSmrg	 unsigned int tiled_surface:1;
1158428d7b3dSmrg	 unsigned int pad2:1;
1159428d7b3dSmrg	 unsigned int surface_type:3;
1160428d7b3dSmrg      } bits;
1161428d7b3dSmrg      unsigned int dword;
1162428d7b3dSmrg   } dword1;
1163428d7b3dSmrg
1164428d7b3dSmrg   unsigned int dword2_base_addr;
1165428d7b3dSmrg
1166428d7b3dSmrg   union {
1167428d7b3dSmrg      struct {
1168428d7b3dSmrg	 unsigned int pad:1;
1169428d7b3dSmrg	 unsigned int mipmap_layout:1;
1170428d7b3dSmrg	 unsigned int lod:4;
1171428d7b3dSmrg	 unsigned int width:13;
1172428d7b3dSmrg	 unsigned int height:13;
1173428d7b3dSmrg      } bits;
1174428d7b3dSmrg      unsigned int dword;
1175428d7b3dSmrg   } dword3;
1176428d7b3dSmrg
1177428d7b3dSmrg   union {
1178428d7b3dSmrg      struct {
1179428d7b3dSmrg	 unsigned int pad:12;
1180428d7b3dSmrg	 unsigned int min_array_element:9;
1181428d7b3dSmrg	 unsigned int depth:11;
1182428d7b3dSmrg      } bits;
1183428d7b3dSmrg      unsigned int dword;
1184428d7b3dSmrg   } dword4;
1185428d7b3dSmrg};
1186428d7b3dSmrg
1187428d7b3dSmrgstruct gen4_drawrect
1188428d7b3dSmrg{
1189428d7b3dSmrg   struct header header;
1190428d7b3dSmrg   unsigned int xmin:16;
1191428d7b3dSmrg   unsigned int ymin:16;
1192428d7b3dSmrg   unsigned int xmax:16;
1193428d7b3dSmrg   unsigned int ymax:16;
1194428d7b3dSmrg   unsigned int xorg:16;
1195428d7b3dSmrg   unsigned int yorg:16;
1196428d7b3dSmrg};
1197428d7b3dSmrg
1198428d7b3dSmrg
1199428d7b3dSmrg
1200428d7b3dSmrg
1201428d7b3dSmrgstruct gen4_global_depth_offset_clamp
1202428d7b3dSmrg{
1203428d7b3dSmrg   struct header header;
1204428d7b3dSmrg   float depth_offset_clamp;
1205428d7b3dSmrg};
1206428d7b3dSmrg
1207428d7b3dSmrgstruct gen4_indexbuffer
1208428d7b3dSmrg{
1209428d7b3dSmrg   union {
1210428d7b3dSmrg      struct
1211428d7b3dSmrg      {
1212428d7b3dSmrg	 unsigned int length:8;
1213428d7b3dSmrg	 unsigned int index_format:2;
1214428d7b3dSmrg	 unsigned int cut_index_enable:1;
1215428d7b3dSmrg	 unsigned int pad:5;
1216428d7b3dSmrg	 unsigned int opcode:16;
1217428d7b3dSmrg      } bits;
1218428d7b3dSmrg      unsigned int dword;
1219428d7b3dSmrg
1220428d7b3dSmrg   } header;
1221428d7b3dSmrg
1222428d7b3dSmrg   unsigned int buffer_start;
1223428d7b3dSmrg   unsigned int buffer_end;
1224428d7b3dSmrg};
1225428d7b3dSmrg
1226428d7b3dSmrg
1227428d7b3dSmrgstruct gen4_line_stipple
1228428d7b3dSmrg{
1229428d7b3dSmrg   struct header header;
1230428d7b3dSmrg
1231428d7b3dSmrg   struct
1232428d7b3dSmrg   {
1233428d7b3dSmrg      unsigned int pattern:16;
1234428d7b3dSmrg      unsigned int pad:16;
1235428d7b3dSmrg   } bits0;
1236428d7b3dSmrg
1237428d7b3dSmrg   struct
1238428d7b3dSmrg   {
1239428d7b3dSmrg      unsigned int repeat_count:9;
1240428d7b3dSmrg      unsigned int pad:7;
1241428d7b3dSmrg      unsigned int inverse_repeat_count:16;
1242428d7b3dSmrg   } bits1;
1243428d7b3dSmrg};
1244428d7b3dSmrg
1245428d7b3dSmrg
1246428d7b3dSmrgstruct gen4_pipelined_state_pointers
1247428d7b3dSmrg{
1248428d7b3dSmrg   struct header header;
1249428d7b3dSmrg
1250428d7b3dSmrg   struct {
1251428d7b3dSmrg      unsigned int pad:5;
1252428d7b3dSmrg      unsigned int offset:27;
1253428d7b3dSmrg   } vs;
1254428d7b3dSmrg
1255428d7b3dSmrg   struct
1256428d7b3dSmrg   {
1257428d7b3dSmrg      unsigned int enable:1;
1258428d7b3dSmrg      unsigned int pad:4;
1259428d7b3dSmrg      unsigned int offset:27;
1260428d7b3dSmrg   } gs;
1261428d7b3dSmrg
1262428d7b3dSmrg   struct
1263428d7b3dSmrg   {
1264428d7b3dSmrg      unsigned int enable:1;
1265428d7b3dSmrg      unsigned int pad:4;
1266428d7b3dSmrg      unsigned int offset:27;
1267428d7b3dSmrg   } clp;
1268428d7b3dSmrg
1269428d7b3dSmrg   struct
1270428d7b3dSmrg   {
1271428d7b3dSmrg      unsigned int pad:5;
1272428d7b3dSmrg      unsigned int offset:27;
1273428d7b3dSmrg   } sf;
1274428d7b3dSmrg
1275428d7b3dSmrg   struct
1276428d7b3dSmrg   {
1277428d7b3dSmrg      unsigned int pad:5;
1278428d7b3dSmrg      unsigned int offset:27;
1279428d7b3dSmrg   } wm;
1280428d7b3dSmrg
1281428d7b3dSmrg   struct
1282428d7b3dSmrg   {
1283428d7b3dSmrg      unsigned int pad:5;
1284428d7b3dSmrg      unsigned int offset:27; /* KW: check me! */
1285428d7b3dSmrg   } cc;
1286428d7b3dSmrg};
1287428d7b3dSmrg
1288428d7b3dSmrg
1289428d7b3dSmrgstruct gen4_polygon_stipple_offset
1290428d7b3dSmrg{
1291428d7b3dSmrg   struct header header;
1292428d7b3dSmrg
1293428d7b3dSmrg   struct {
1294428d7b3dSmrg      unsigned int y_offset:5;
1295428d7b3dSmrg      unsigned int pad:3;
1296428d7b3dSmrg      unsigned int x_offset:5;
1297428d7b3dSmrg      unsigned int pad0:19;
1298428d7b3dSmrg   } bits0;
1299428d7b3dSmrg};
1300428d7b3dSmrg
1301428d7b3dSmrg
1302428d7b3dSmrg
1303428d7b3dSmrgstruct gen4_polygon_stipple
1304428d7b3dSmrg{
1305428d7b3dSmrg   struct header header;
1306428d7b3dSmrg   unsigned int stipple[32];
1307428d7b3dSmrg};
1308428d7b3dSmrg
1309428d7b3dSmrg
1310428d7b3dSmrg
1311428d7b3dSmrgstruct gen4_pipeline_select
1312428d7b3dSmrg{
1313428d7b3dSmrg   struct
1314428d7b3dSmrg   {
1315428d7b3dSmrg      unsigned int pipeline_select:1;
1316428d7b3dSmrg      unsigned int pad:15;
1317428d7b3dSmrg      unsigned int opcode:16;
1318428d7b3dSmrg   } header;
1319428d7b3dSmrg};
1320428d7b3dSmrg
1321428d7b3dSmrg
1322428d7b3dSmrgstruct gen4_pipe_control
1323428d7b3dSmrg{
1324428d7b3dSmrg   struct
1325428d7b3dSmrg   {
1326428d7b3dSmrg      unsigned int length:8;
1327428d7b3dSmrg      unsigned int notify_enable:1;
1328428d7b3dSmrg      unsigned int pad:2;
1329428d7b3dSmrg      unsigned int instruction_state_cache_flush_enable:1;
1330428d7b3dSmrg      unsigned int write_cache_flush_enable:1;
1331428d7b3dSmrg      unsigned int depth_stall_enable:1;
1332428d7b3dSmrg      unsigned int post_sync_operation:2;
1333428d7b3dSmrg
1334428d7b3dSmrg      unsigned int opcode:16;
1335428d7b3dSmrg   } header;
1336428d7b3dSmrg
1337428d7b3dSmrg   struct
1338428d7b3dSmrg   {
1339428d7b3dSmrg      unsigned int pad:2;
1340428d7b3dSmrg      unsigned int dest_addr_type:1;
1341428d7b3dSmrg      unsigned int dest_addr:29;
1342428d7b3dSmrg   } bits1;
1343428d7b3dSmrg
1344428d7b3dSmrg   unsigned int data0;
1345428d7b3dSmrg   unsigned int data1;
1346428d7b3dSmrg};
1347428d7b3dSmrg
1348428d7b3dSmrg
1349428d7b3dSmrgstruct gen4_urb_fence
1350428d7b3dSmrg{
1351428d7b3dSmrg   struct
1352428d7b3dSmrg   {
1353428d7b3dSmrg      unsigned int length:8;
1354428d7b3dSmrg      unsigned int vs_realloc:1;
1355428d7b3dSmrg      unsigned int gs_realloc:1;
1356428d7b3dSmrg      unsigned int clp_realloc:1;
1357428d7b3dSmrg      unsigned int sf_realloc:1;
1358428d7b3dSmrg      unsigned int vfe_realloc:1;
1359428d7b3dSmrg      unsigned int cs_realloc:1;
1360428d7b3dSmrg      unsigned int pad:2;
1361428d7b3dSmrg      unsigned int opcode:16;
1362428d7b3dSmrg   } header;
1363428d7b3dSmrg
1364428d7b3dSmrg   struct
1365428d7b3dSmrg   {
1366428d7b3dSmrg      unsigned int vs_fence:10;
1367428d7b3dSmrg      unsigned int gs_fence:10;
1368428d7b3dSmrg      unsigned int clp_fence:10;
1369428d7b3dSmrg      unsigned int pad:2;
1370428d7b3dSmrg   } bits0;
1371428d7b3dSmrg
1372428d7b3dSmrg   struct
1373428d7b3dSmrg   {
1374428d7b3dSmrg      unsigned int sf_fence:10;
1375428d7b3dSmrg      unsigned int vf_fence:10;
1376428d7b3dSmrg      unsigned int cs_fence:10;
1377428d7b3dSmrg      unsigned int pad:2;
1378428d7b3dSmrg   } bits1;
1379428d7b3dSmrg};
1380428d7b3dSmrg
1381428d7b3dSmrgstruct gen4_constant_buffer_state /* previously gen4_command_streamer */
1382428d7b3dSmrg{
1383428d7b3dSmrg   struct header header;
1384428d7b3dSmrg
1385428d7b3dSmrg   struct
1386428d7b3dSmrg   {
1387428d7b3dSmrg      unsigned int nr_urb_entries:3;
1388428d7b3dSmrg      unsigned int pad:1;
1389428d7b3dSmrg      unsigned int urb_entry_size:5;
1390428d7b3dSmrg      unsigned int pad0:23;
1391428d7b3dSmrg   } bits0;
1392428d7b3dSmrg};
1393428d7b3dSmrg
1394428d7b3dSmrgstruct gen4_constant_buffer
1395428d7b3dSmrg{
1396428d7b3dSmrg   struct
1397428d7b3dSmrg   {
1398428d7b3dSmrg      unsigned int length:8;
1399428d7b3dSmrg      unsigned int valid:1;
1400428d7b3dSmrg      unsigned int pad:7;
1401428d7b3dSmrg      unsigned int opcode:16;
1402428d7b3dSmrg   } header;
1403428d7b3dSmrg
1404428d7b3dSmrg   struct
1405428d7b3dSmrg   {
1406428d7b3dSmrg      unsigned int buffer_length:6;
1407428d7b3dSmrg      unsigned int buffer_address:26;
1408428d7b3dSmrg   } bits0;
1409428d7b3dSmrg};
1410428d7b3dSmrg
1411428d7b3dSmrgstruct gen4_state_base_address
1412428d7b3dSmrg{
1413428d7b3dSmrg   struct header header;
1414428d7b3dSmrg
1415428d7b3dSmrg   struct
1416428d7b3dSmrg   {
1417428d7b3dSmrg      unsigned int modify_enable:1;
1418428d7b3dSmrg      unsigned int pad:4;
1419428d7b3dSmrg      unsigned int general_state_address:27;
1420428d7b3dSmrg   } bits0;
1421428d7b3dSmrg
1422428d7b3dSmrg   struct
1423428d7b3dSmrg   {
1424428d7b3dSmrg      unsigned int modify_enable:1;
1425428d7b3dSmrg      unsigned int pad:4;
1426428d7b3dSmrg      unsigned int surface_state_address:27;
1427428d7b3dSmrg   } bits1;
1428428d7b3dSmrg
1429428d7b3dSmrg   struct
1430428d7b3dSmrg   {
1431428d7b3dSmrg      unsigned int modify_enable:1;
1432428d7b3dSmrg      unsigned int pad:4;
1433428d7b3dSmrg      unsigned int indirect_object_state_address:27;
1434428d7b3dSmrg   } bits2;
1435428d7b3dSmrg
1436428d7b3dSmrg   struct
1437428d7b3dSmrg   {
1438428d7b3dSmrg      unsigned int modify_enable:1;
1439428d7b3dSmrg      unsigned int pad:11;
1440428d7b3dSmrg      unsigned int general_state_upper_bound:20;
1441428d7b3dSmrg   } bits3;
1442428d7b3dSmrg
1443428d7b3dSmrg   struct
1444428d7b3dSmrg   {
1445428d7b3dSmrg      unsigned int modify_enable:1;
1446428d7b3dSmrg      unsigned int pad:11;
1447428d7b3dSmrg      unsigned int indirect_object_state_upper_bound:20;
1448428d7b3dSmrg   } bits4;
1449428d7b3dSmrg};
1450428d7b3dSmrg
1451428d7b3dSmrgstruct gen4_state_prefetch
1452428d7b3dSmrg{
1453428d7b3dSmrg   struct header header;
1454428d7b3dSmrg
1455428d7b3dSmrg   struct
1456428d7b3dSmrg   {
1457428d7b3dSmrg      unsigned int prefetch_count:3;
1458428d7b3dSmrg      unsigned int pad:3;
1459428d7b3dSmrg      unsigned int prefetch_pointer:26;
1460428d7b3dSmrg   } bits0;
1461428d7b3dSmrg};
1462428d7b3dSmrg
1463428d7b3dSmrgstruct gen4_system_instruction_pointer
1464428d7b3dSmrg{
1465428d7b3dSmrg   struct header header;
1466428d7b3dSmrg
1467428d7b3dSmrg   struct
1468428d7b3dSmrg   {
1469428d7b3dSmrg      unsigned int pad:4;
1470428d7b3dSmrg      unsigned int system_instruction_pointer:28;
1471428d7b3dSmrg   } bits0;
1472428d7b3dSmrg};
1473428d7b3dSmrg
1474428d7b3dSmrg
1475428d7b3dSmrg
1476428d7b3dSmrg
1477428d7b3dSmrg/* State structs for the various fixed function units:
1478428d7b3dSmrg */
1479428d7b3dSmrg
1480428d7b3dSmrg
1481428d7b3dSmrgstruct thread0
1482428d7b3dSmrg{
1483428d7b3dSmrg   unsigned int pad0:1;
1484428d7b3dSmrg   unsigned int grf_reg_count:3;
1485428d7b3dSmrg   unsigned int pad1:2;
1486428d7b3dSmrg   unsigned int kernel_start_pointer:26;
1487428d7b3dSmrg};
1488428d7b3dSmrg
1489428d7b3dSmrgstruct thread1
1490428d7b3dSmrg{
1491428d7b3dSmrg   unsigned int ext_halt_exception_enable:1;
1492428d7b3dSmrg   unsigned int sw_exception_enable:1;
1493428d7b3dSmrg   unsigned int mask_stack_exception_enable:1;
1494428d7b3dSmrg   unsigned int timeout_exception_enable:1;
1495428d7b3dSmrg   unsigned int illegal_op_exception_enable:1;
1496428d7b3dSmrg   unsigned int pad0:3;
1497428d7b3dSmrg   unsigned int depth_coef_urb_read_offset:6;	/* WM only */
1498428d7b3dSmrg   unsigned int pad1:2;
1499428d7b3dSmrg   unsigned int floating_point_mode:1;
1500428d7b3dSmrg   unsigned int thread_priority:1;
1501428d7b3dSmrg   unsigned int binding_table_entry_count:8;
1502428d7b3dSmrg   unsigned int pad3:5;
1503428d7b3dSmrg   unsigned int single_program_flow:1;
1504428d7b3dSmrg};
1505428d7b3dSmrg
1506428d7b3dSmrgstruct thread2
1507428d7b3dSmrg{
1508428d7b3dSmrg   unsigned int per_thread_scratch_space:4;
1509428d7b3dSmrg   unsigned int pad0:6;
1510428d7b3dSmrg   unsigned int scratch_space_base_pointer:22;
1511428d7b3dSmrg};
1512428d7b3dSmrg
1513428d7b3dSmrg
1514428d7b3dSmrgstruct thread3
1515428d7b3dSmrg{
1516428d7b3dSmrg   unsigned int dispatch_grf_start_reg:4;
1517428d7b3dSmrg   unsigned int urb_entry_read_offset:6;
1518428d7b3dSmrg   unsigned int pad0:1;
1519428d7b3dSmrg   unsigned int urb_entry_read_length:6;
1520428d7b3dSmrg   unsigned int pad1:1;
1521428d7b3dSmrg   unsigned int const_urb_entry_read_offset:6;
1522428d7b3dSmrg   unsigned int pad2:1;
1523428d7b3dSmrg   unsigned int const_urb_entry_read_length:6;
1524428d7b3dSmrg   unsigned int pad3:1;
1525428d7b3dSmrg};
1526428d7b3dSmrg
1527428d7b3dSmrg
1528428d7b3dSmrg
1529428d7b3dSmrgstruct gen4_clip_unit_state
1530428d7b3dSmrg{
1531428d7b3dSmrg   struct thread0 thread0;
1532428d7b3dSmrg   struct thread1 thread1;
1533428d7b3dSmrg   struct thread2 thread2;
1534428d7b3dSmrg   struct thread3 thread3;
1535428d7b3dSmrg
1536428d7b3dSmrg   struct
1537428d7b3dSmrg   {
1538428d7b3dSmrg      unsigned int pad0:9;
1539428d7b3dSmrg      unsigned int gs_output_stats:1; /* not always */
1540428d7b3dSmrg      unsigned int stats_enable:1;
1541428d7b3dSmrg      unsigned int nr_urb_entries:7;
1542428d7b3dSmrg      unsigned int pad1:1;
1543428d7b3dSmrg      unsigned int urb_entry_allocation_size:5;
1544428d7b3dSmrg      unsigned int pad2:1;
1545428d7b3dSmrg      unsigned int max_threads:6; 	/* may be less */
1546428d7b3dSmrg      unsigned int pad3:1;
1547428d7b3dSmrg   } thread4;
1548428d7b3dSmrg
1549428d7b3dSmrg   struct
1550428d7b3dSmrg   {
1551428d7b3dSmrg      unsigned int pad0:13;
1552428d7b3dSmrg      unsigned int clip_mode:3;
1553428d7b3dSmrg      unsigned int userclip_enable_flags:8;
1554428d7b3dSmrg      unsigned int userclip_must_clip:1;
1555428d7b3dSmrg      unsigned int pad1:1;
1556428d7b3dSmrg      unsigned int guard_band_enable:1;
1557428d7b3dSmrg      unsigned int viewport_z_clip_enable:1;
1558428d7b3dSmrg      unsigned int viewport_xy_clip_enable:1;
1559428d7b3dSmrg      unsigned int vertex_position_space:1;
1560428d7b3dSmrg      unsigned int api_mode:1;
1561428d7b3dSmrg      unsigned int pad2:1;
1562428d7b3dSmrg   } clip5;
1563428d7b3dSmrg
1564428d7b3dSmrg   struct
1565428d7b3dSmrg   {
1566428d7b3dSmrg      unsigned int pad0:5;
1567428d7b3dSmrg      unsigned int clipper_viewport_state_ptr:27;
1568428d7b3dSmrg   } clip6;
1569428d7b3dSmrg
1570428d7b3dSmrg
1571428d7b3dSmrg   float viewport_xmin;
1572428d7b3dSmrg   float viewport_xmax;
1573428d7b3dSmrg   float viewport_ymin;
1574428d7b3dSmrg   float viewport_ymax;
1575428d7b3dSmrg};
1576428d7b3dSmrg
1577428d7b3dSmrg
1578428d7b3dSmrg
1579428d7b3dSmrgstruct gen4_cc_unit_state
1580428d7b3dSmrg{
1581428d7b3dSmrg   struct
1582428d7b3dSmrg   {
1583428d7b3dSmrg      unsigned int pad0:3;
1584428d7b3dSmrg      unsigned int bf_stencil_pass_depth_pass_op:3;
1585428d7b3dSmrg      unsigned int bf_stencil_pass_depth_fail_op:3;
1586428d7b3dSmrg      unsigned int bf_stencil_fail_op:3;
1587428d7b3dSmrg      unsigned int bf_stencil_func:3;
1588428d7b3dSmrg      unsigned int bf_stencil_enable:1;
1589428d7b3dSmrg      unsigned int pad1:2;
1590428d7b3dSmrg      unsigned int stencil_write_enable:1;
1591428d7b3dSmrg      unsigned int stencil_pass_depth_pass_op:3;
1592428d7b3dSmrg      unsigned int stencil_pass_depth_fail_op:3;
1593428d7b3dSmrg      unsigned int stencil_fail_op:3;
1594428d7b3dSmrg      unsigned int stencil_func:3;
1595428d7b3dSmrg      unsigned int stencil_enable:1;
1596428d7b3dSmrg   } cc0;
1597428d7b3dSmrg
1598428d7b3dSmrg
1599428d7b3dSmrg   struct
1600428d7b3dSmrg   {
1601428d7b3dSmrg      unsigned int bf_stencil_ref:8;
1602428d7b3dSmrg      unsigned int stencil_write_mask:8;
1603428d7b3dSmrg      unsigned int stencil_test_mask:8;
1604428d7b3dSmrg      unsigned int stencil_ref:8;
1605428d7b3dSmrg   } cc1;
1606428d7b3dSmrg
1607428d7b3dSmrg
1608428d7b3dSmrg   struct
1609428d7b3dSmrg   {
1610428d7b3dSmrg      unsigned int logicop_enable:1;
1611428d7b3dSmrg      unsigned int pad0:10;
1612428d7b3dSmrg      unsigned int depth_write_enable:1;
1613428d7b3dSmrg      unsigned int depth_test_function:3;
1614428d7b3dSmrg      unsigned int depth_test:1;
1615428d7b3dSmrg      unsigned int bf_stencil_write_mask:8;
1616428d7b3dSmrg      unsigned int bf_stencil_test_mask:8;
1617428d7b3dSmrg   } cc2;
1618428d7b3dSmrg
1619428d7b3dSmrg
1620428d7b3dSmrg   struct
1621428d7b3dSmrg   {
1622428d7b3dSmrg      unsigned int pad0:8;
1623428d7b3dSmrg      unsigned int alpha_test_func:3;
1624428d7b3dSmrg      unsigned int alpha_test:1;
1625428d7b3dSmrg      unsigned int blend_enable:1;
1626428d7b3dSmrg      unsigned int ia_blend_enable:1;
1627428d7b3dSmrg      unsigned int pad1:1;
1628428d7b3dSmrg      unsigned int alpha_test_format:1;
1629428d7b3dSmrg      unsigned int pad2:16;
1630428d7b3dSmrg   } cc3;
1631428d7b3dSmrg
1632428d7b3dSmrg   struct
1633428d7b3dSmrg   {
1634428d7b3dSmrg      unsigned int pad0:5;
1635428d7b3dSmrg      unsigned int cc_viewport_state_offset:27;
1636428d7b3dSmrg   } cc4;
1637428d7b3dSmrg
1638428d7b3dSmrg   struct
1639428d7b3dSmrg   {
1640428d7b3dSmrg      unsigned int pad0:2;
1641428d7b3dSmrg      unsigned int ia_dest_blend_factor:5;
1642428d7b3dSmrg      unsigned int ia_src_blend_factor:5;
1643428d7b3dSmrg      unsigned int ia_blend_function:3;
1644428d7b3dSmrg      unsigned int statistics_enable:1;
1645428d7b3dSmrg      unsigned int logicop_func:4;
1646428d7b3dSmrg      unsigned int pad1:11;
1647428d7b3dSmrg      unsigned int dither_enable:1;
1648428d7b3dSmrg   } cc5;
1649428d7b3dSmrg
1650428d7b3dSmrg   struct
1651428d7b3dSmrg   {
1652428d7b3dSmrg      unsigned int clamp_post_alpha_blend:1;
1653428d7b3dSmrg      unsigned int clamp_pre_alpha_blend:1;
1654428d7b3dSmrg      unsigned int clamp_range:2;
1655428d7b3dSmrg      unsigned int pad0:11;
1656428d7b3dSmrg      unsigned int y_dither_offset:2;
1657428d7b3dSmrg      unsigned int x_dither_offset:2;
1658428d7b3dSmrg      unsigned int dest_blend_factor:5;
1659428d7b3dSmrg      unsigned int src_blend_factor:5;
1660428d7b3dSmrg      unsigned int blend_function:3;
1661428d7b3dSmrg   } cc6;
1662428d7b3dSmrg
1663428d7b3dSmrg   struct {
1664428d7b3dSmrg      union {
1665428d7b3dSmrg	 float f;
1666428d7b3dSmrg	 unsigned char ub[4];
1667428d7b3dSmrg      } alpha_ref;
1668428d7b3dSmrg   } cc7;
1669428d7b3dSmrg};
1670428d7b3dSmrg
1671428d7b3dSmrg
1672428d7b3dSmrg
1673428d7b3dSmrgstruct gen4_sf_unit_state
1674428d7b3dSmrg{
1675428d7b3dSmrg   struct thread0 thread0;
1676428d7b3dSmrg   struct {
1677428d7b3dSmrg      unsigned int pad0:7;
1678428d7b3dSmrg      unsigned int sw_exception_enable:1;
1679428d7b3dSmrg      unsigned int pad1:3;
1680428d7b3dSmrg      unsigned int mask_stack_exception_enable:1;
1681428d7b3dSmrg      unsigned int pad2:1;
1682428d7b3dSmrg      unsigned int illegal_op_exception_enable:1;
1683428d7b3dSmrg      unsigned int pad3:2;
1684428d7b3dSmrg      unsigned int floating_point_mode:1;
1685428d7b3dSmrg      unsigned int thread_priority:1;
1686428d7b3dSmrg      unsigned int binding_table_entry_count:8;
1687428d7b3dSmrg      unsigned int pad4:5;
1688428d7b3dSmrg      unsigned int single_program_flow:1;
1689428d7b3dSmrg   } sf1;
1690428d7b3dSmrg
1691428d7b3dSmrg   struct thread2 thread2;
1692428d7b3dSmrg   struct thread3 thread3;
1693428d7b3dSmrg
1694428d7b3dSmrg   struct
1695428d7b3dSmrg   {
1696428d7b3dSmrg      unsigned int pad0:10;
1697428d7b3dSmrg      unsigned int stats_enable:1;
1698428d7b3dSmrg      unsigned int nr_urb_entries:7;
1699428d7b3dSmrg      unsigned int pad1:1;
1700428d7b3dSmrg      unsigned int urb_entry_allocation_size:5;
1701428d7b3dSmrg      unsigned int pad2:1;
1702428d7b3dSmrg      unsigned int max_threads:6;
1703428d7b3dSmrg      unsigned int pad3:1;
1704428d7b3dSmrg   } thread4;
1705428d7b3dSmrg
1706428d7b3dSmrg   struct
1707428d7b3dSmrg   {
1708428d7b3dSmrg      unsigned int front_winding:1;
1709428d7b3dSmrg      unsigned int viewport_transform:1;
1710428d7b3dSmrg      unsigned int pad0:3;
1711428d7b3dSmrg      unsigned int sf_viewport_state_offset:27;
1712428d7b3dSmrg   } sf5;
1713428d7b3dSmrg
1714428d7b3dSmrg   struct
1715428d7b3dSmrg   {
1716428d7b3dSmrg      unsigned int pad0:9;
1717428d7b3dSmrg      unsigned int dest_org_vbias:4;
1718428d7b3dSmrg      unsigned int dest_org_hbias:4;
1719428d7b3dSmrg      unsigned int scissor:1;
1720428d7b3dSmrg      unsigned int disable_2x2_trifilter:1;
1721428d7b3dSmrg      unsigned int disable_zero_pix_trifilter:1;
1722428d7b3dSmrg      unsigned int point_rast_rule:2;
1723428d7b3dSmrg      unsigned int line_endcap_aa_region_width:2;
1724428d7b3dSmrg      unsigned int line_width:4;
1725428d7b3dSmrg      unsigned int fast_scissor_disable:1;
1726428d7b3dSmrg      unsigned int cull_mode:2;
1727428d7b3dSmrg      unsigned int aa_enable:1;
1728428d7b3dSmrg   } sf6;
1729428d7b3dSmrg
1730428d7b3dSmrg   struct
1731428d7b3dSmrg   {
1732428d7b3dSmrg      unsigned int point_size:11;
1733428d7b3dSmrg      unsigned int use_point_size_state:1;
1734428d7b3dSmrg      unsigned int subpixel_precision:1;
1735428d7b3dSmrg      unsigned int sprite_point:1;
1736428d7b3dSmrg      unsigned int pad0:11;
1737428d7b3dSmrg      unsigned int trifan_pv:2;
1738428d7b3dSmrg      unsigned int linestrip_pv:2;
1739428d7b3dSmrg      unsigned int tristrip_pv:2;
1740428d7b3dSmrg      unsigned int line_last_pixel_enable:1;
1741428d7b3dSmrg   } sf7;
1742428d7b3dSmrg
1743428d7b3dSmrg};
1744428d7b3dSmrg
1745428d7b3dSmrg
1746428d7b3dSmrgstruct gen4_gs_unit_state
1747428d7b3dSmrg{
1748428d7b3dSmrg   struct thread0 thread0;
1749428d7b3dSmrg   struct thread1 thread1;
1750428d7b3dSmrg   struct thread2 thread2;
1751428d7b3dSmrg   struct thread3 thread3;
1752428d7b3dSmrg
1753428d7b3dSmrg   struct
1754428d7b3dSmrg   {
1755428d7b3dSmrg      unsigned int pad0:10;
1756428d7b3dSmrg      unsigned int stats_enable:1;
1757428d7b3dSmrg      unsigned int nr_urb_entries:7;
1758428d7b3dSmrg      unsigned int pad1:1;
1759428d7b3dSmrg      unsigned int urb_entry_allocation_size:5;
1760428d7b3dSmrg      unsigned int pad2:1;
1761428d7b3dSmrg      unsigned int max_threads:1;
1762428d7b3dSmrg      unsigned int pad3:6;
1763428d7b3dSmrg   } thread4;
1764428d7b3dSmrg
1765428d7b3dSmrg   struct
1766428d7b3dSmrg   {
1767428d7b3dSmrg      unsigned int sampler_count:3;
1768428d7b3dSmrg      unsigned int pad0:2;
1769428d7b3dSmrg      unsigned int sampler_state_pointer:27;
1770428d7b3dSmrg   } gs5;
1771428d7b3dSmrg
1772428d7b3dSmrg
1773428d7b3dSmrg   struct
1774428d7b3dSmrg   {
1775428d7b3dSmrg      unsigned int max_vp_index:4;
1776428d7b3dSmrg      unsigned int pad0:26;
1777428d7b3dSmrg      unsigned int reorder_enable:1;
1778428d7b3dSmrg      unsigned int pad1:1;
1779428d7b3dSmrg   } gs6;
1780428d7b3dSmrg};
1781428d7b3dSmrg
1782428d7b3dSmrg
1783428d7b3dSmrgstruct gen4_vs_unit_state
1784428d7b3dSmrg{
1785428d7b3dSmrg   struct thread0 thread0;
1786428d7b3dSmrg   struct thread1 thread1;
1787428d7b3dSmrg   struct thread2 thread2;
1788428d7b3dSmrg   struct thread3 thread3;
1789428d7b3dSmrg
1790428d7b3dSmrg   struct
1791428d7b3dSmrg   {
1792428d7b3dSmrg      unsigned int pad0:10;
1793428d7b3dSmrg      unsigned int stats_enable:1;
1794428d7b3dSmrg      unsigned int nr_urb_entries:7;
1795428d7b3dSmrg      unsigned int pad1:1;
1796428d7b3dSmrg      unsigned int urb_entry_allocation_size:5;
1797428d7b3dSmrg      unsigned int pad2:1;
1798428d7b3dSmrg      unsigned int max_threads:4;
1799428d7b3dSmrg      unsigned int pad3:3;
1800428d7b3dSmrg   } thread4;
1801428d7b3dSmrg
1802428d7b3dSmrg   struct
1803428d7b3dSmrg   {
1804428d7b3dSmrg      unsigned int sampler_count:3;
1805428d7b3dSmrg      unsigned int pad0:2;
1806428d7b3dSmrg      unsigned int sampler_state_pointer:27;
1807428d7b3dSmrg   } vs5;
1808428d7b3dSmrg
1809428d7b3dSmrg   struct
1810428d7b3dSmrg   {
1811428d7b3dSmrg      unsigned int vs_enable:1;
1812428d7b3dSmrg      unsigned int vert_cache_disable:1;
1813428d7b3dSmrg      unsigned int pad0:30;
1814428d7b3dSmrg   } vs6;
1815428d7b3dSmrg};
1816428d7b3dSmrg
1817428d7b3dSmrg
1818428d7b3dSmrgstruct gen4_wm_unit_state
1819428d7b3dSmrg{
1820428d7b3dSmrg   struct thread0 thread0;
1821428d7b3dSmrg   struct thread1 thread1;
1822428d7b3dSmrg   struct thread2 thread2;
1823428d7b3dSmrg   struct thread3 thread3;
1824428d7b3dSmrg
1825428d7b3dSmrg   struct {
1826428d7b3dSmrg      unsigned int stats_enable:1;
1827428d7b3dSmrg      unsigned int pad0:1;
1828428d7b3dSmrg      unsigned int sampler_count:3;
1829428d7b3dSmrg      unsigned int sampler_state_pointer:27;
1830428d7b3dSmrg   } wm4;
1831428d7b3dSmrg
1832428d7b3dSmrg   struct
1833428d7b3dSmrg   {
1834428d7b3dSmrg      unsigned int enable_8_pix:1;
1835428d7b3dSmrg      unsigned int enable_16_pix:1;
1836428d7b3dSmrg      unsigned int enable_32_pix:1;
1837428d7b3dSmrg      unsigned int pad0:7;
1838428d7b3dSmrg      unsigned int legacy_global_depth_bias:1;
1839428d7b3dSmrg      unsigned int line_stipple:1;
1840428d7b3dSmrg      unsigned int depth_offset:1;
1841428d7b3dSmrg      unsigned int polygon_stipple:1;
1842428d7b3dSmrg      unsigned int line_aa_region_width:2;
1843428d7b3dSmrg      unsigned int line_endcap_aa_region_width:2;
1844428d7b3dSmrg      unsigned int early_depth_test:1;
1845428d7b3dSmrg      unsigned int thread_dispatch_enable:1;
1846428d7b3dSmrg      unsigned int program_uses_depth:1;
1847428d7b3dSmrg      unsigned int program_computes_depth:1;
1848428d7b3dSmrg      unsigned int program_uses_killpixel:1;
1849428d7b3dSmrg      unsigned int legacy_line_rast: 1;
1850428d7b3dSmrg      unsigned int transposed_urb_read:1;
1851428d7b3dSmrg      unsigned int max_threads:7;
1852428d7b3dSmrg   } wm5;
1853428d7b3dSmrg
1854428d7b3dSmrg   float global_depth_offset_constant;
1855428d7b3dSmrg   float global_depth_offset_scale;
1856428d7b3dSmrg
1857428d7b3dSmrg   struct {
1858428d7b3dSmrg      unsigned int pad0:1;
1859428d7b3dSmrg      unsigned int grf_reg_count_1:3;
1860428d7b3dSmrg      unsigned int pad1:2;
1861428d7b3dSmrg      unsigned int kernel_start_pointer_1:26;
1862428d7b3dSmrg   } wm8;
1863428d7b3dSmrg
1864428d7b3dSmrg   struct {
1865428d7b3dSmrg      unsigned int pad0:1;
1866428d7b3dSmrg      unsigned int grf_reg_count_2:3;
1867428d7b3dSmrg      unsigned int pad1:2;
1868428d7b3dSmrg      unsigned int kernel_start_pointer_2:26;
1869428d7b3dSmrg   } wm9;
1870428d7b3dSmrg
1871428d7b3dSmrg   struct {
1872428d7b3dSmrg      unsigned int pad0:1;
1873428d7b3dSmrg      unsigned int grf_reg_count_3:3;
1874428d7b3dSmrg      unsigned int pad1:2;
1875428d7b3dSmrg      unsigned int kernel_start_pointer_3:26;
1876428d7b3dSmrg   } wm10;
1877428d7b3dSmrg};
1878428d7b3dSmrg
1879428d7b3dSmrgstruct gen4_wm_unit_state_padded {
1880428d7b3dSmrg	struct gen4_wm_unit_state state;
1881428d7b3dSmrg	char pad[64 - sizeof(struct gen4_wm_unit_state)];
1882428d7b3dSmrg};
1883428d7b3dSmrg
1884428d7b3dSmrg/* The hardware supports two different modes for border color. The
1885428d7b3dSmrg * default (OpenGL) mode uses floating-point color channels, while the
1886428d7b3dSmrg * legacy mode uses 4 bytes.
1887428d7b3dSmrg *
1888428d7b3dSmrg * More significantly, the legacy mode respects the components of the
1889428d7b3dSmrg * border color for channels not present in the source, (whereas the
1890428d7b3dSmrg * default mode will ignore the border color's alpha channel and use
1891428d7b3dSmrg * alpha==1 for an RGB source, for example).
1892428d7b3dSmrg *
1893428d7b3dSmrg * The legacy mode matches the semantics specified by the Render
1894428d7b3dSmrg * extension.
1895428d7b3dSmrg */
1896428d7b3dSmrgstruct gen4_sampler_default_border_color {
1897428d7b3dSmrg   float color[4];
1898428d7b3dSmrg};
1899428d7b3dSmrg
1900428d7b3dSmrgstruct gen4_sampler_legacy_border_color {
1901428d7b3dSmrg   uint8_t color[4];
1902428d7b3dSmrg};
1903428d7b3dSmrg
1904428d7b3dSmrgstruct gen4_sampler_state
1905428d7b3dSmrg{
1906428d7b3dSmrg
1907428d7b3dSmrg   struct
1908428d7b3dSmrg   {
1909428d7b3dSmrg      unsigned int shadow_function:3;
1910428d7b3dSmrg      unsigned int lod_bias:11;
1911428d7b3dSmrg      unsigned int min_filter:3;
1912428d7b3dSmrg      unsigned int mag_filter:3;
1913428d7b3dSmrg      unsigned int mip_filter:2;
1914428d7b3dSmrg      unsigned int base_level:5;
1915428d7b3dSmrg      unsigned int pad:1;
1916428d7b3dSmrg      unsigned int lod_preclamp:1;
1917428d7b3dSmrg      unsigned int border_color_mode:1;
1918428d7b3dSmrg      unsigned int pad0:1;
1919428d7b3dSmrg      unsigned int disable:1;
1920428d7b3dSmrg   } ss0;
1921428d7b3dSmrg
1922428d7b3dSmrg   struct
1923428d7b3dSmrg   {
1924428d7b3dSmrg      unsigned int r_wrap_mode:3;
1925428d7b3dSmrg      unsigned int t_wrap_mode:3;
1926428d7b3dSmrg      unsigned int s_wrap_mode:3;
1927428d7b3dSmrg      unsigned int pad:3;
1928428d7b3dSmrg      unsigned int max_lod:10;
1929428d7b3dSmrg      unsigned int min_lod:10;
1930428d7b3dSmrg   } ss1;
1931428d7b3dSmrg
1932428d7b3dSmrg
1933428d7b3dSmrg   struct
1934428d7b3dSmrg   {
1935428d7b3dSmrg      unsigned int pad:5;
1936428d7b3dSmrg      unsigned int border_color_pointer:27;
1937428d7b3dSmrg   } ss2;
1938428d7b3dSmrg
1939428d7b3dSmrg   struct
1940428d7b3dSmrg   {
1941428d7b3dSmrg      unsigned int pad:19;
1942428d7b3dSmrg      unsigned int max_aniso:3;
1943428d7b3dSmrg      unsigned int chroma_key_mode:1;
1944428d7b3dSmrg      unsigned int chroma_key_index:2;
1945428d7b3dSmrg      unsigned int chroma_key_enable:1;
1946428d7b3dSmrg      unsigned int monochrome_filter_width:3;
1947428d7b3dSmrg      unsigned int monochrome_filter_height:3;
1948428d7b3dSmrg   } ss3;
1949428d7b3dSmrg};
1950428d7b3dSmrg
1951428d7b3dSmrg
1952428d7b3dSmrgstruct gen4_clipper_viewport
1953428d7b3dSmrg{
1954428d7b3dSmrg   float xmin;
1955428d7b3dSmrg   float xmax;
1956428d7b3dSmrg   float ymin;
1957428d7b3dSmrg   float ymax;
1958428d7b3dSmrg};
1959428d7b3dSmrg
1960428d7b3dSmrgstruct gen4_cc_viewport
1961428d7b3dSmrg{
1962428d7b3dSmrg   float min_depth;
1963428d7b3dSmrg   float max_depth;
1964428d7b3dSmrg};
1965428d7b3dSmrg
1966428d7b3dSmrgstruct gen4_sf_viewport
1967428d7b3dSmrg{
1968428d7b3dSmrg   struct {
1969428d7b3dSmrg      float m00;
1970428d7b3dSmrg      float m11;
1971428d7b3dSmrg      float m22;
1972428d7b3dSmrg      float m30;
1973428d7b3dSmrg      float m31;
1974428d7b3dSmrg      float m32;
1975428d7b3dSmrg   } viewport;
1976428d7b3dSmrg
1977428d7b3dSmrg   struct {
1978428d7b3dSmrg      short xmin;
1979428d7b3dSmrg      short ymin;
1980428d7b3dSmrg      short xmax;
1981428d7b3dSmrg      short ymax;
1982428d7b3dSmrg   } scissor;
1983428d7b3dSmrg};
1984428d7b3dSmrg
1985428d7b3dSmrg/* Documented in the subsystem/shared-functions/sampler chapter...
1986428d7b3dSmrg */
1987428d7b3dSmrgstruct gen4_surface_state
1988428d7b3dSmrg{
1989428d7b3dSmrg   struct {
1990428d7b3dSmrg      unsigned int cube_pos_z:1;
1991428d7b3dSmrg      unsigned int cube_neg_z:1;
1992428d7b3dSmrg      unsigned int cube_pos_y:1;
1993428d7b3dSmrg      unsigned int cube_neg_y:1;
1994428d7b3dSmrg      unsigned int cube_pos_x:1;
1995428d7b3dSmrg      unsigned int cube_neg_x:1;
1996428d7b3dSmrg      unsigned int pad:3;
1997428d7b3dSmrg      unsigned int render_cache_read_mode:1;
1998428d7b3dSmrg      unsigned int mipmap_layout_mode:1;
1999428d7b3dSmrg      unsigned int vert_line_stride_ofs:1;
2000428d7b3dSmrg      unsigned int vert_line_stride:1;
2001428d7b3dSmrg      unsigned int color_blend:1;
2002428d7b3dSmrg      unsigned int writedisable_blue:1;
2003428d7b3dSmrg      unsigned int writedisable_green:1;
2004428d7b3dSmrg      unsigned int writedisable_red:1;
2005428d7b3dSmrg      unsigned int writedisable_alpha:1;
2006428d7b3dSmrg      unsigned int surface_format:9;
2007428d7b3dSmrg      unsigned int data_return_format:1;
2008428d7b3dSmrg      unsigned int pad0:1;
2009428d7b3dSmrg      unsigned int surface_type:3;
2010428d7b3dSmrg   } ss0;
2011428d7b3dSmrg
2012428d7b3dSmrg   struct {
2013428d7b3dSmrg      unsigned int base_addr;
2014428d7b3dSmrg   } ss1;
2015428d7b3dSmrg
2016428d7b3dSmrg   struct {
2017428d7b3dSmrg      unsigned int render_target_rotation:2;
2018428d7b3dSmrg      unsigned int mip_count:4;
2019428d7b3dSmrg      unsigned int width:13;
2020428d7b3dSmrg      unsigned int height:13;
2021428d7b3dSmrg   } ss2;
2022428d7b3dSmrg
2023428d7b3dSmrg   struct {
2024428d7b3dSmrg      unsigned int tile_walk:1;
2025428d7b3dSmrg      unsigned int tiled_surface:1;
2026428d7b3dSmrg      unsigned int pad:1;
2027428d7b3dSmrg      unsigned int pitch:18;
2028428d7b3dSmrg      unsigned int depth:11;
2029428d7b3dSmrg   } ss3;
2030428d7b3dSmrg
2031428d7b3dSmrg   struct {
2032428d7b3dSmrg      unsigned int pad:19;
2033428d7b3dSmrg      unsigned int min_array_elt:9;
2034428d7b3dSmrg      unsigned int min_lod:4;
2035428d7b3dSmrg   } ss4;
2036428d7b3dSmrg
2037428d7b3dSmrg   struct {
2038428d7b3dSmrg       unsigned int pad:20;
2039428d7b3dSmrg       unsigned int y_offset:4;
2040428d7b3dSmrg       unsigned int pad2:1;
2041428d7b3dSmrg       unsigned int x_offset:7;
2042428d7b3dSmrg   } ss5;
2043428d7b3dSmrg};
2044428d7b3dSmrg
2045428d7b3dSmrg/* Surface state DW0 */
2046428d7b3dSmrg#define GEN4_SURFACE_RC_READ_WRITE       (1 << 8)
2047428d7b3dSmrg#define GEN4_SURFACE_MIPLAYOUT_SHIFT     10
2048428d7b3dSmrg#define GEN4_SURFACE_MIPMAPLAYOUT_BELOW   0
2049428d7b3dSmrg#define GEN4_SURFACE_MIPMAPLAYOUT_RIGHT   1
2050428d7b3dSmrg#define GEN4_SURFACE_CUBEFACE_ENABLES    0x3f
2051428d7b3dSmrg#define GEN4_SURFACE_BLEND_ENABLED       (1 << 13)
2052428d7b3dSmrg#define GEN4_SURFACE_WRITEDISABLE_B_SHIFT        14
2053428d7b3dSmrg#define GEN4_SURFACE_WRITEDISABLE_G_SHIFT        15
2054428d7b3dSmrg#define GEN4_SURFACE_WRITEDISABLE_R_SHIFT        16
2055428d7b3dSmrg#define GEN4_SURFACE_WRITEDISABLE_A_SHIFT        17
2056428d7b3dSmrg#define GEN4_SURFACE_FORMAT_SHIFT        18
2057428d7b3dSmrg#define GEN4_SURFACE_FORMAT_MASK         _MASK(26, 18)
2058428d7b3dSmrg
2059428d7b3dSmrg#define GEN4_SURFACE_TYPE_SHIFT          29
2060428d7b3dSmrg#define GEN4_SURFACE_TYPE_MASK           _MASK(31, 29)
2061428d7b3dSmrg#define GEN4_SURFACE_1D      0
2062428d7b3dSmrg#define GEN4_SURFACE_2D      1
2063428d7b3dSmrg#define GEN4_SURFACE_3D      2
2064428d7b3dSmrg#define GEN4_SURFACE_CUBE    3
2065428d7b3dSmrg#define GEN4_SURFACE_BUFFER  4
2066428d7b3dSmrg#define GEN4_SURFACE_NULL    7
2067428d7b3dSmrg
2068428d7b3dSmrg/* Surface state DW2 */
2069428d7b3dSmrg#define GEN4_SURFACE_HEIGHT_SHIFT        19
2070428d7b3dSmrg#define GEN4_SURFACE_HEIGHT_MASK         _MASK(31, 19)
2071428d7b3dSmrg#define GEN4_SURFACE_WIDTH_SHIFT         6
2072428d7b3dSmrg#define GEN4_SURFACE_WIDTH_MASK          _MASK(18, 6)
2073428d7b3dSmrg#define GEN4_SURFACE_LOD_SHIFT           2
2074428d7b3dSmrg#define GEN4_SURFACE_LOD_MASK            _MASK(5, 2)
2075428d7b3dSmrg
2076428d7b3dSmrg/* Surface state DW3 */
2077428d7b3dSmrg#define GEN4_SURFACE_DEPTH_SHIFT         21
2078428d7b3dSmrg#define GEN4_SURFACE_DEPTH_MASK          _MASK(31, 21)
2079428d7b3dSmrg#define GEN4_SURFACE_PITCH_SHIFT         3
2080428d7b3dSmrg#define GEN4_SURFACE_PITCH_MASK          _MASK(19, 3)
2081428d7b3dSmrg#define GEN4_SURFACE_TILED               (1 << 1)
2082428d7b3dSmrg#define GEN4_SURFACE_TILED_Y             (1 << 0)
2083428d7b3dSmrg
2084428d7b3dSmrg/* Surface state DW4 */
2085428d7b3dSmrg#define GEN4_SURFACE_MIN_LOD_SHIFT       28
2086428d7b3dSmrg#define GEN4_SURFACE_MIN_LOD_MASK        _MASK(31, 28)
2087428d7b3dSmrg
2088428d7b3dSmrg/* Surface state DW5 */
2089428d7b3dSmrg#define GEN4_SURFACE_X_OFFSET_SHIFT      25
2090428d7b3dSmrg#define GEN4_SURFACE_X_OFFSET_MASK       _MASK(31, 25)
2091428d7b3dSmrg#define GEN4_SURFACE_Y_OFFSET_SHIFT      20
2092428d7b3dSmrg#define GEN4_SURFACE_Y_OFFSET_MASK       _MASK(23, 20)
2093428d7b3dSmrg
2094428d7b3dSmrg
2095428d7b3dSmrgstruct gen4_vertex_buffer_state
2096428d7b3dSmrg{
2097428d7b3dSmrg   struct {
2098428d7b3dSmrg      unsigned int pitch:11;
2099428d7b3dSmrg      unsigned int pad:15;
2100428d7b3dSmrg      unsigned int access_type:1;
2101428d7b3dSmrg      unsigned int vb_index:5;
2102428d7b3dSmrg   } vb0;
2103428d7b3dSmrg
2104428d7b3dSmrg   unsigned int start_addr;
2105428d7b3dSmrg   unsigned int max_index;
2106428d7b3dSmrg#if 1
2107428d7b3dSmrg   unsigned int instance_data_step_rate; /* not included for sequential/random vertices? */
2108428d7b3dSmrg#endif
2109428d7b3dSmrg};
2110428d7b3dSmrg
2111428d7b3dSmrg#define GEN4_VBP_MAX 17
2112428d7b3dSmrg
2113428d7b3dSmrgstruct gen4_vb_array_state {
2114428d7b3dSmrg   struct header header;
2115428d7b3dSmrg   struct gen4_vertex_buffer_state vb[GEN4_VBP_MAX];
2116428d7b3dSmrg};
2117428d7b3dSmrg
2118428d7b3dSmrg
2119428d7b3dSmrgstruct gen4_vertex_element_state
2120428d7b3dSmrg{
2121428d7b3dSmrg   struct
2122428d7b3dSmrg   {
2123428d7b3dSmrg      unsigned int src_offset:11;
2124428d7b3dSmrg      unsigned int pad:5;
2125428d7b3dSmrg      unsigned int src_format:9;
2126428d7b3dSmrg      unsigned int pad0:1;
2127428d7b3dSmrg      unsigned int valid:1;
2128428d7b3dSmrg      unsigned int vertex_buffer_index:5;
2129428d7b3dSmrg   } ve0;
2130428d7b3dSmrg
2131428d7b3dSmrg   struct
2132428d7b3dSmrg   {
2133428d7b3dSmrg      unsigned int dst_offset:8;
2134428d7b3dSmrg      unsigned int pad:8;
2135428d7b3dSmrg      unsigned int vfcomponent3:4;
2136428d7b3dSmrg      unsigned int vfcomponent2:4;
2137428d7b3dSmrg      unsigned int vfcomponent1:4;
2138428d7b3dSmrg      unsigned int vfcomponent0:4;
2139428d7b3dSmrg   } ve1;
2140428d7b3dSmrg};
2141428d7b3dSmrg
2142428d7b3dSmrg#define GEN4_VEP_MAX 18
2143428d7b3dSmrg
2144428d7b3dSmrgstruct gen4_vertex_element_packet {
2145428d7b3dSmrg   struct header header;
2146428d7b3dSmrg   struct gen4_vertex_element_state ve[GEN4_VEP_MAX]; /* note: less than _TNL_ATTRIB_MAX */
2147428d7b3dSmrg};
2148428d7b3dSmrg
2149428d7b3dSmrg
2150428d7b3dSmrgstruct gen4_urb_immediate {
2151428d7b3dSmrg   unsigned int opcode:4;
2152428d7b3dSmrg   unsigned int offset:6;
2153428d7b3dSmrg   unsigned int swizzle_control:2;
2154428d7b3dSmrg   unsigned int pad:1;
2155428d7b3dSmrg   unsigned int allocate:1;
2156428d7b3dSmrg   unsigned int used:1;
2157428d7b3dSmrg   unsigned int complete:1;
2158428d7b3dSmrg   unsigned int response_length:4;
2159428d7b3dSmrg   unsigned int msg_length:4;
2160428d7b3dSmrg   unsigned int msg_target:4;
2161428d7b3dSmrg   unsigned int pad1:3;
2162428d7b3dSmrg   unsigned int end_of_thread:1;
2163428d7b3dSmrg};
2164428d7b3dSmrg
2165428d7b3dSmrg/* Instruction format for the execution units:
2166428d7b3dSmrg */
2167428d7b3dSmrg
2168428d7b3dSmrgstruct gen4_instruction
2169428d7b3dSmrg{
2170428d7b3dSmrg   struct
2171428d7b3dSmrg   {
2172428d7b3dSmrg      unsigned int opcode:7;
2173428d7b3dSmrg      unsigned int pad:1;
2174428d7b3dSmrg      unsigned int access_mode:1;
2175428d7b3dSmrg      unsigned int mask_control:1;
2176428d7b3dSmrg      unsigned int dependency_control:2;
2177428d7b3dSmrg      unsigned int compression_control:2;
2178428d7b3dSmrg      unsigned int thread_control:2;
2179428d7b3dSmrg      unsigned int predicate_control:4;
2180428d7b3dSmrg      unsigned int predicate_inverse:1;
2181428d7b3dSmrg      unsigned int execution_size:3;
2182428d7b3dSmrg      unsigned int destreg__conditonalmod:4; /* destreg - send, conditionalmod - others */
2183428d7b3dSmrg      unsigned int pad0:2;
2184428d7b3dSmrg      unsigned int debug_control:1;
2185428d7b3dSmrg      unsigned int saturate:1;
2186428d7b3dSmrg   } header;
2187428d7b3dSmrg
2188428d7b3dSmrg   union {
2189428d7b3dSmrg      struct
2190428d7b3dSmrg      {
2191428d7b3dSmrg	 unsigned int dest_reg_file:2;
2192428d7b3dSmrg	 unsigned int dest_reg_type:3;
2193428d7b3dSmrg	 unsigned int src0_reg_file:2;
2194428d7b3dSmrg	 unsigned int src0_reg_type:3;
2195428d7b3dSmrg	 unsigned int src1_reg_file:2;
2196428d7b3dSmrg	 unsigned int src1_reg_type:3;
2197428d7b3dSmrg	 unsigned int pad:1;
2198428d7b3dSmrg	 unsigned int dest_subreg_nr:5;
2199428d7b3dSmrg	 unsigned int dest_reg_nr:8;
2200428d7b3dSmrg	 unsigned int dest_horiz_stride:2;
2201428d7b3dSmrg	 unsigned int dest_address_mode:1;
2202428d7b3dSmrg      } da1;
2203428d7b3dSmrg
2204428d7b3dSmrg      struct
2205428d7b3dSmrg      {
2206428d7b3dSmrg	 unsigned int dest_reg_file:2;
2207428d7b3dSmrg	 unsigned int dest_reg_type:3;
2208428d7b3dSmrg	 unsigned int src0_reg_file:2;
2209428d7b3dSmrg	 unsigned int src0_reg_type:3;
2210428d7b3dSmrg	 unsigned int pad:6;
2211428d7b3dSmrg	 int dest_indirect_offset:10;	/* offset against the deref'd address reg */
2212428d7b3dSmrg	 unsigned int dest_subreg_nr:3; /* subnr for the address reg a0.x */
2213428d7b3dSmrg	 unsigned int dest_horiz_stride:2;
2214428d7b3dSmrg	 unsigned int dest_address_mode:1;
2215428d7b3dSmrg      } ia1;
2216428d7b3dSmrg
2217428d7b3dSmrg      struct
2218428d7b3dSmrg      {
2219428d7b3dSmrg	 unsigned int dest_reg_file:2;
2220428d7b3dSmrg	 unsigned int dest_reg_type:3;
2221428d7b3dSmrg	 unsigned int src0_reg_file:2;
2222428d7b3dSmrg	 unsigned int src0_reg_type:3;
2223428d7b3dSmrg	 unsigned int src1_reg_file:2;
2224428d7b3dSmrg	 unsigned int src1_reg_type:3;
2225428d7b3dSmrg	 unsigned int pad0:1;
2226428d7b3dSmrg	 unsigned int dest_writemask:4;
2227428d7b3dSmrg	 unsigned int dest_subreg_nr:1;
2228428d7b3dSmrg	 unsigned int dest_reg_nr:8;
2229428d7b3dSmrg	 unsigned int pad1:2;
2230428d7b3dSmrg	 unsigned int dest_address_mode:1;
2231428d7b3dSmrg      } da16;
2232428d7b3dSmrg
2233428d7b3dSmrg      struct
2234428d7b3dSmrg      {
2235428d7b3dSmrg	 unsigned int dest_reg_file:2;
2236428d7b3dSmrg	 unsigned int dest_reg_type:3;
2237428d7b3dSmrg	 unsigned int src0_reg_file:2;
2238428d7b3dSmrg	 unsigned int src0_reg_type:3;
2239428d7b3dSmrg	 unsigned int pad0:6;
2240428d7b3dSmrg	 unsigned int dest_writemask:4;
2241428d7b3dSmrg	 int dest_indirect_offset:6;
2242428d7b3dSmrg	 unsigned int dest_subreg_nr:3;
2243428d7b3dSmrg	 unsigned int pad1:2;
2244428d7b3dSmrg	 unsigned int dest_address_mode:1;
2245428d7b3dSmrg      } ia16;
2246428d7b3dSmrg   } bits1;
2247428d7b3dSmrg
2248428d7b3dSmrg
2249428d7b3dSmrg   union {
2250428d7b3dSmrg      struct
2251428d7b3dSmrg      {
2252428d7b3dSmrg	 unsigned int src0_subreg_nr:5;
2253428d7b3dSmrg	 unsigned int src0_reg_nr:8;
2254428d7b3dSmrg	 unsigned int src0_abs:1;
2255428d7b3dSmrg	 unsigned int src0_negate:1;
2256428d7b3dSmrg	 unsigned int src0_address_mode:1;
2257428d7b3dSmrg	 unsigned int src0_horiz_stride:2;
2258428d7b3dSmrg	 unsigned int src0_width:3;
2259428d7b3dSmrg	 unsigned int src0_vert_stride:4;
2260428d7b3dSmrg	 unsigned int flag_reg_nr:1;
2261428d7b3dSmrg	 unsigned int pad:6;
2262428d7b3dSmrg      } da1;
2263428d7b3dSmrg
2264428d7b3dSmrg      struct
2265428d7b3dSmrg      {
2266428d7b3dSmrg	 int src0_indirect_offset:10;
2267428d7b3dSmrg	 unsigned int src0_subreg_nr:3;
2268428d7b3dSmrg	 unsigned int src0_abs:1;
2269428d7b3dSmrg	 unsigned int src0_negate:1;
2270428d7b3dSmrg	 unsigned int src0_address_mode:1;
2271428d7b3dSmrg	 unsigned int src0_horiz_stride:2;
2272428d7b3dSmrg	 unsigned int src0_width:3;
2273428d7b3dSmrg	 unsigned int src0_vert_stride:4;
2274428d7b3dSmrg	 unsigned int flag_reg_nr:1;
2275428d7b3dSmrg	 unsigned int pad:6;
2276428d7b3dSmrg      } ia1;
2277428d7b3dSmrg
2278428d7b3dSmrg      struct
2279428d7b3dSmrg      {
2280428d7b3dSmrg	 unsigned int src0_swz_x:2;
2281428d7b3dSmrg	 unsigned int src0_swz_y:2;
2282428d7b3dSmrg	 unsigned int src0_subreg_nr:1;
2283428d7b3dSmrg	 unsigned int src0_reg_nr:8;
2284428d7b3dSmrg	 unsigned int src0_abs:1;
2285428d7b3dSmrg	 unsigned int src0_negate:1;
2286428d7b3dSmrg	 unsigned int src0_address_mode:1;
2287428d7b3dSmrg	 unsigned int src0_swz_z:2;
2288428d7b3dSmrg	 unsigned int src0_swz_w:2;
2289428d7b3dSmrg	 unsigned int pad0:1;
2290428d7b3dSmrg	 unsigned int src0_vert_stride:4;
2291428d7b3dSmrg	 unsigned int flag_reg_nr:1;
2292428d7b3dSmrg	 unsigned int pad1:6;
2293428d7b3dSmrg      } da16;
2294428d7b3dSmrg
2295428d7b3dSmrg      struct
2296428d7b3dSmrg      {
2297428d7b3dSmrg	 unsigned int src0_swz_x:2;
2298428d7b3dSmrg	 unsigned int src0_swz_y:2;
2299428d7b3dSmrg	 int src0_indirect_offset:6;
2300428d7b3dSmrg	 unsigned int src0_subreg_nr:3;
2301428d7b3dSmrg	 unsigned int src0_abs:1;
2302428d7b3dSmrg	 unsigned int src0_negate:1;
2303428d7b3dSmrg	 unsigned int src0_address_mode:1;
2304428d7b3dSmrg	 unsigned int src0_swz_z:2;
2305428d7b3dSmrg	 unsigned int src0_swz_w:2;
2306428d7b3dSmrg	 unsigned int pad0:1;
2307428d7b3dSmrg	 unsigned int src0_vert_stride:4;
2308428d7b3dSmrg	 unsigned int flag_reg_nr:1;
2309428d7b3dSmrg	 unsigned int pad1:6;
2310428d7b3dSmrg      } ia16;
2311428d7b3dSmrg
2312428d7b3dSmrg   } bits2;
2313428d7b3dSmrg
2314428d7b3dSmrg   union
2315428d7b3dSmrg   {
2316428d7b3dSmrg      struct
2317428d7b3dSmrg      {
2318428d7b3dSmrg	 unsigned int src1_subreg_nr:5;
2319428d7b3dSmrg	 unsigned int src1_reg_nr:8;
2320428d7b3dSmrg	 unsigned int src1_abs:1;
2321428d7b3dSmrg	 unsigned int src1_negate:1;
2322428d7b3dSmrg	 unsigned int pad:1;
2323428d7b3dSmrg	 unsigned int src1_horiz_stride:2;
2324428d7b3dSmrg	 unsigned int src1_width:3;
2325428d7b3dSmrg	 unsigned int src1_vert_stride:4;
2326428d7b3dSmrg	 unsigned int pad0:7;
2327428d7b3dSmrg      } da1;
2328428d7b3dSmrg
2329428d7b3dSmrg      struct
2330428d7b3dSmrg      {
2331428d7b3dSmrg	 unsigned int src1_swz_x:2;
2332428d7b3dSmrg	 unsigned int src1_swz_y:2;
2333428d7b3dSmrg	 unsigned int src1_subreg_nr:1;
2334428d7b3dSmrg	 unsigned int src1_reg_nr:8;
2335428d7b3dSmrg	 unsigned int src1_abs:1;
2336428d7b3dSmrg	 unsigned int src1_negate:1;
2337428d7b3dSmrg	 unsigned int pad0:1;
2338428d7b3dSmrg	 unsigned int src1_swz_z:2;
2339428d7b3dSmrg	 unsigned int src1_swz_w:2;
2340428d7b3dSmrg	 unsigned int pad1:1;
2341428d7b3dSmrg	 unsigned int src1_vert_stride:4;
2342428d7b3dSmrg	 unsigned int pad2:7;
2343428d7b3dSmrg      } da16;
2344428d7b3dSmrg
2345428d7b3dSmrg      struct
2346428d7b3dSmrg      {
2347428d7b3dSmrg	 int  src1_indirect_offset:10;
2348428d7b3dSmrg	 unsigned int src1_subreg_nr:3;
2349428d7b3dSmrg	 unsigned int src1_abs:1;
2350428d7b3dSmrg	 unsigned int src1_negate:1;
2351428d7b3dSmrg	 unsigned int pad0:1;
2352428d7b3dSmrg	 unsigned int src1_horiz_stride:2;
2353428d7b3dSmrg	 unsigned int src1_width:3;
2354428d7b3dSmrg	 unsigned int src1_vert_stride:4;
2355428d7b3dSmrg	 unsigned int flag_reg_nr:1;
2356428d7b3dSmrg	 unsigned int pad1:6;
2357428d7b3dSmrg      } ia1;
2358428d7b3dSmrg
2359428d7b3dSmrg      struct
2360428d7b3dSmrg      {
2361428d7b3dSmrg	 unsigned int src1_swz_x:2;
2362428d7b3dSmrg	 unsigned int src1_swz_y:2;
2363428d7b3dSmrg	 int  src1_indirect_offset:6;
2364428d7b3dSmrg	 unsigned int src1_subreg_nr:3;
2365428d7b3dSmrg	 unsigned int src1_abs:1;
2366428d7b3dSmrg	 unsigned int src1_negate:1;
2367428d7b3dSmrg	 unsigned int pad0:1;
2368428d7b3dSmrg	 unsigned int src1_swz_z:2;
2369428d7b3dSmrg	 unsigned int src1_swz_w:2;
2370428d7b3dSmrg	 unsigned int pad1:1;
2371428d7b3dSmrg	 unsigned int src1_vert_stride:4;
2372428d7b3dSmrg	 unsigned int flag_reg_nr:1;
2373428d7b3dSmrg	 unsigned int pad2:6;
2374428d7b3dSmrg      } ia16;
2375428d7b3dSmrg
2376428d7b3dSmrg
2377428d7b3dSmrg      struct
2378428d7b3dSmrg      {
2379428d7b3dSmrg	 int  jump_count:16;	/* note: signed */
2380428d7b3dSmrg	 unsigned int  pop_count:4;
2381428d7b3dSmrg	 unsigned int  pad0:12;
2382428d7b3dSmrg      } if_else;
2383428d7b3dSmrg
2384428d7b3dSmrg      struct {
2385428d7b3dSmrg	 unsigned int function:4;
2386428d7b3dSmrg	 unsigned int int_type:1;
2387428d7b3dSmrg	 unsigned int precision:1;
2388428d7b3dSmrg	 unsigned int saturate:1;
2389428d7b3dSmrg	 unsigned int data_type:1;
2390428d7b3dSmrg	 unsigned int pad0:8;
2391428d7b3dSmrg	 unsigned int response_length:4;
2392428d7b3dSmrg	 unsigned int msg_length:4;
2393428d7b3dSmrg	 unsigned int msg_target:4;
2394428d7b3dSmrg	 unsigned int pad1:3;
2395428d7b3dSmrg	 unsigned int end_of_thread:1;
2396428d7b3dSmrg      } math;
2397428d7b3dSmrg
2398428d7b3dSmrg      struct {
2399428d7b3dSmrg	 unsigned int binding_table_index:8;
2400428d7b3dSmrg	 unsigned int sampler:4;
2401428d7b3dSmrg	 unsigned int return_format:2;
2402428d7b3dSmrg	 unsigned int msg_type:2;
2403428d7b3dSmrg	 unsigned int response_length:4;
2404428d7b3dSmrg	 unsigned int msg_length:4;
2405428d7b3dSmrg	 unsigned int msg_target:4;
2406428d7b3dSmrg	 unsigned int pad1:3;
2407428d7b3dSmrg	 unsigned int end_of_thread:1;
2408428d7b3dSmrg      } sampler;
2409428d7b3dSmrg
2410428d7b3dSmrg      struct gen4_urb_immediate urb;
2411428d7b3dSmrg
2412428d7b3dSmrg      struct {
2413428d7b3dSmrg	 unsigned int binding_table_index:8;
2414428d7b3dSmrg	 unsigned int msg_control:4;
2415428d7b3dSmrg	 unsigned int msg_type:2;
2416428d7b3dSmrg	 unsigned int target_cache:2;
2417428d7b3dSmrg	 unsigned int response_length:4;
2418428d7b3dSmrg	 unsigned int msg_length:4;
2419428d7b3dSmrg	 unsigned int msg_target:4;
2420428d7b3dSmrg	 unsigned int pad1:3;
2421428d7b3dSmrg	 unsigned int end_of_thread:1;
2422428d7b3dSmrg      } dp_read;
2423428d7b3dSmrg
2424428d7b3dSmrg      struct {
2425428d7b3dSmrg	 unsigned int binding_table_index:8;
2426428d7b3dSmrg	 unsigned int msg_control:3;
2427428d7b3dSmrg	 unsigned int pixel_scoreboard_clear:1;
2428428d7b3dSmrg	 unsigned int msg_type:3;
2429428d7b3dSmrg	 unsigned int send_commit_msg:1;
2430428d7b3dSmrg	 unsigned int response_length:4;
2431428d7b3dSmrg	 unsigned int msg_length:4;
2432428d7b3dSmrg	 unsigned int msg_target:4;
2433428d7b3dSmrg	 unsigned int pad1:3;
2434428d7b3dSmrg	 unsigned int end_of_thread:1;
2435428d7b3dSmrg      } dp_write;
2436428d7b3dSmrg
2437428d7b3dSmrg      struct {
2438428d7b3dSmrg	 unsigned int pad:16;
2439428d7b3dSmrg	 unsigned int response_length:4;
2440428d7b3dSmrg	 unsigned int msg_length:4;
2441428d7b3dSmrg	 unsigned int msg_target:4;
2442428d7b3dSmrg	 unsigned int pad1:3;
2443428d7b3dSmrg	 unsigned int end_of_thread:1;
2444428d7b3dSmrg      } generic;
2445428d7b3dSmrg
2446428d7b3dSmrg      unsigned int ud;
2447428d7b3dSmrg   } bits3;
2448428d7b3dSmrg};
2449428d7b3dSmrg
2450428d7b3dSmrg/* media pipeline */
2451428d7b3dSmrg
2452428d7b3dSmrgstruct gen4_vfe_state {
2453428d7b3dSmrg    struct {
2454428d7b3dSmrg	unsigned int per_thread_scratch_space:4;
2455428d7b3dSmrg	unsigned int pad3:3;
2456428d7b3dSmrg	unsigned int extend_vfe_state_present:1;
2457428d7b3dSmrg	unsigned int pad2:2;
2458428d7b3dSmrg	unsigned int scratch_base:22;
2459428d7b3dSmrg    } vfe0;
2460428d7b3dSmrg
2461428d7b3dSmrg    struct {
2462428d7b3dSmrg	unsigned int debug_counter_control:2;
2463428d7b3dSmrg	unsigned int children_present:1;
2464428d7b3dSmrg	unsigned int vfe_mode:4;
2465428d7b3dSmrg	unsigned int pad2:2;
2466428d7b3dSmrg	unsigned int num_urb_entries:7;
2467428d7b3dSmrg	unsigned int urb_entry_alloc_size:9;
2468428d7b3dSmrg	unsigned int max_threads:7;
2469428d7b3dSmrg    } vfe1;
2470428d7b3dSmrg
2471428d7b3dSmrg    struct {
2472428d7b3dSmrg	unsigned int pad4:4;
2473428d7b3dSmrg	unsigned int interface_descriptor_base:28;
2474428d7b3dSmrg    } vfe2;
2475428d7b3dSmrg};
2476428d7b3dSmrg
2477428d7b3dSmrgstruct gen4_vld_state {
2478428d7b3dSmrg    struct {
2479428d7b3dSmrg	unsigned int pad6:6;
2480428d7b3dSmrg	unsigned int scan_order:1;
2481428d7b3dSmrg	unsigned int intra_vlc_format:1;
2482428d7b3dSmrg	unsigned int quantizer_scale_type:1;
2483428d7b3dSmrg	unsigned int concealment_motion_vector:1;
2484428d7b3dSmrg	unsigned int frame_predict_frame_dct:1;
2485428d7b3dSmrg	unsigned int top_field_first:1;
2486428d7b3dSmrg	unsigned int picture_structure:2;
2487428d7b3dSmrg	unsigned int intra_dc_precision:2;
2488428d7b3dSmrg	unsigned int f_code_0_0:4;
2489428d7b3dSmrg	unsigned int f_code_0_1:4;
2490428d7b3dSmrg	unsigned int f_code_1_0:4;
2491428d7b3dSmrg	unsigned int f_code_1_1:4;
2492428d7b3dSmrg    } vld0;
2493428d7b3dSmrg
2494428d7b3dSmrg    struct {
2495428d7b3dSmrg	unsigned int pad2:9;
2496428d7b3dSmrg	unsigned int picture_coding_type:2;
2497428d7b3dSmrg	unsigned int pad:21;
2498428d7b3dSmrg    } vld1;
2499428d7b3dSmrg
2500428d7b3dSmrg    struct {
2501428d7b3dSmrg	unsigned int index_0:4;
2502428d7b3dSmrg	unsigned int index_1:4;
2503428d7b3dSmrg	unsigned int index_2:4;
2504428d7b3dSmrg	unsigned int index_3:4;
2505428d7b3dSmrg	unsigned int index_4:4;
2506428d7b3dSmrg	unsigned int index_5:4;
2507428d7b3dSmrg	unsigned int index_6:4;
2508428d7b3dSmrg	unsigned int index_7:4;
2509428d7b3dSmrg    } desc_remap_table0;
2510428d7b3dSmrg
2511428d7b3dSmrg    struct {
2512428d7b3dSmrg	unsigned int index_8:4;
2513428d7b3dSmrg	unsigned int index_9:4;
2514428d7b3dSmrg	unsigned int index_10:4;
2515428d7b3dSmrg	unsigned int index_11:4;
2516428d7b3dSmrg	unsigned int index_12:4;
2517428d7b3dSmrg	unsigned int index_13:4;
2518428d7b3dSmrg	unsigned int index_14:4;
2519428d7b3dSmrg	unsigned int index_15:4;
2520428d7b3dSmrg    } desc_remap_table1;
2521428d7b3dSmrg};
2522428d7b3dSmrg
2523428d7b3dSmrgstruct gen4_interface_descriptor {
2524428d7b3dSmrg    struct {
2525428d7b3dSmrg	unsigned int grf_reg_blocks:4;
2526428d7b3dSmrg	unsigned int pad:2;
2527428d7b3dSmrg	unsigned int kernel_start_pointer:26;
2528428d7b3dSmrg    } desc0;
2529428d7b3dSmrg
2530428d7b3dSmrg    struct {
2531428d7b3dSmrg	unsigned int pad:7;
2532428d7b3dSmrg	unsigned int software_exception:1;
2533428d7b3dSmrg	unsigned int pad2:3;
2534428d7b3dSmrg	unsigned int maskstack_exception:1;
2535428d7b3dSmrg	unsigned int pad3:1;
2536428d7b3dSmrg	unsigned int illegal_opcode_exception:1;
2537428d7b3dSmrg	unsigned int pad4:2;
2538428d7b3dSmrg	unsigned int floating_point_mode:1;
2539428d7b3dSmrg	unsigned int thread_priority:1;
2540428d7b3dSmrg	unsigned int single_program_flow:1;
2541428d7b3dSmrg	unsigned int pad5:1;
2542428d7b3dSmrg	unsigned int const_urb_entry_read_offset:6;
2543428d7b3dSmrg	unsigned int const_urb_entry_read_len:6;
2544428d7b3dSmrg    } desc1;
2545428d7b3dSmrg
2546428d7b3dSmrg    struct {
2547428d7b3dSmrg	unsigned int pad:2;
2548428d7b3dSmrg	unsigned int sampler_count:3;
2549428d7b3dSmrg	unsigned int sampler_state_pointer:27;
2550428d7b3dSmrg    } desc2;
2551428d7b3dSmrg
2552428d7b3dSmrg    struct {
2553428d7b3dSmrg	unsigned int binding_table_entry_count:5;
2554428d7b3dSmrg	unsigned int binding_table_pointer:27;
2555428d7b3dSmrg    } desc3;
2556428d7b3dSmrg};
2557428d7b3dSmrg
2558428d7b3dSmrgstruct gen6_blend_state
2559428d7b3dSmrg{
2560428d7b3dSmrg	struct {
2561428d7b3dSmrg		unsigned int dest_blend_factor:5;
2562428d7b3dSmrg		unsigned int source_blend_factor:5;
2563428d7b3dSmrg		unsigned int pad3:1;
2564428d7b3dSmrg		unsigned int blend_func:3;
2565428d7b3dSmrg		unsigned int pad2:1;
2566428d7b3dSmrg		unsigned int ia_dest_blend_factor:5;
2567428d7b3dSmrg		unsigned int ia_source_blend_factor:5;
2568428d7b3dSmrg		unsigned int pad1:1;
2569428d7b3dSmrg		unsigned int ia_blend_func:3;
2570428d7b3dSmrg		unsigned int pad0:1;
2571428d7b3dSmrg		unsigned int ia_blend_enable:1;
2572428d7b3dSmrg		unsigned int blend_enable:1;
2573428d7b3dSmrg	} blend0;
2574428d7b3dSmrg
2575428d7b3dSmrg	struct {
2576428d7b3dSmrg		unsigned int post_blend_clamp_enable:1;
2577428d7b3dSmrg		unsigned int pre_blend_clamp_enable:1;
2578428d7b3dSmrg		unsigned int clamp_range:2;
2579428d7b3dSmrg		unsigned int pad0:4;
2580428d7b3dSmrg		unsigned int x_dither_offset:2;
2581428d7b3dSmrg		unsigned int y_dither_offset:2;
2582428d7b3dSmrg		unsigned int dither_enable:1;
2583428d7b3dSmrg		unsigned int alpha_test_func:3;
2584428d7b3dSmrg		unsigned int alpha_test_enable:1;
2585428d7b3dSmrg		unsigned int pad1:1;
2586428d7b3dSmrg		unsigned int logic_op_func:4;
2587428d7b3dSmrg		unsigned int logic_op_enable:1;
2588428d7b3dSmrg		unsigned int pad2:1;
2589428d7b3dSmrg		unsigned int write_disable_b:1;
2590428d7b3dSmrg		unsigned int write_disable_g:1;
2591428d7b3dSmrg		unsigned int write_disable_r:1;
2592428d7b3dSmrg		unsigned int write_disable_a:1;
2593428d7b3dSmrg		unsigned int pad3:1;
2594428d7b3dSmrg		unsigned int alpha_to_coverage_dither:1;
2595428d7b3dSmrg		unsigned int alpha_to_one:1;
2596428d7b3dSmrg		unsigned int alpha_to_coverage:1;
2597428d7b3dSmrg	} blend1;
2598428d7b3dSmrg};
2599428d7b3dSmrg
2600428d7b3dSmrgstruct gen6_color_calc_state
2601428d7b3dSmrg{
2602428d7b3dSmrg	struct {
2603428d7b3dSmrg		unsigned int alpha_test_format:1;
2604428d7b3dSmrg		unsigned int pad0:14;
2605428d7b3dSmrg		unsigned int round_disable:1;
2606428d7b3dSmrg		unsigned int bf_stencil_ref:8;
2607428d7b3dSmrg		unsigned int stencil_ref:8;
2608428d7b3dSmrg	} cc0;
2609428d7b3dSmrg
2610428d7b3dSmrg	union {
2611428d7b3dSmrg		float alpha_ref_f;
2612428d7b3dSmrg		struct {
2613428d7b3dSmrg			unsigned int ui:8;
2614428d7b3dSmrg			unsigned int pad0:24;
2615428d7b3dSmrg		} alpha_ref_fi;
2616428d7b3dSmrg	} cc1;
2617428d7b3dSmrg
2618428d7b3dSmrg	float constant_r;
2619428d7b3dSmrg	float constant_g;
2620428d7b3dSmrg	float constant_b;
2621428d7b3dSmrg	float constant_a;
2622428d7b3dSmrg};
2623428d7b3dSmrg
2624428d7b3dSmrgstruct gen6_depth_stencil_state
2625428d7b3dSmrg{
2626428d7b3dSmrg	struct {
2627428d7b3dSmrg		unsigned int pad0:3;
2628428d7b3dSmrg		unsigned int bf_stencil_pass_depth_pass_op:3;
2629428d7b3dSmrg		unsigned int bf_stencil_pass_depth_fail_op:3;
2630428d7b3dSmrg		unsigned int bf_stencil_fail_op:3;
2631428d7b3dSmrg		unsigned int bf_stencil_func:3;
2632428d7b3dSmrg		unsigned int bf_stencil_enable:1;
2633428d7b3dSmrg		unsigned int pad1:2;
2634428d7b3dSmrg		unsigned int stencil_write_enable:1;
2635428d7b3dSmrg		unsigned int stencil_pass_depth_pass_op:3;
2636428d7b3dSmrg		unsigned int stencil_pass_depth_fail_op:3;
2637428d7b3dSmrg		unsigned int stencil_fail_op:3;
2638428d7b3dSmrg		unsigned int stencil_func:3;
2639428d7b3dSmrg		unsigned int stencil_enable:1;
2640428d7b3dSmrg	} ds0;
2641428d7b3dSmrg
2642428d7b3dSmrg	struct {
2643428d7b3dSmrg		unsigned int bf_stencil_write_mask:8;
2644428d7b3dSmrg		unsigned int bf_stencil_test_mask:8;
2645428d7b3dSmrg		unsigned int stencil_write_mask:8;
2646428d7b3dSmrg		unsigned int stencil_test_mask:8;
2647428d7b3dSmrg	} ds1;
2648428d7b3dSmrg
2649428d7b3dSmrg	struct {
2650428d7b3dSmrg		unsigned int pad0:26;
2651428d7b3dSmrg		unsigned int depth_write_enable:1;
2652428d7b3dSmrg		unsigned int depth_test_func:3;
2653428d7b3dSmrg		unsigned int pad1:1;
2654428d7b3dSmrg		unsigned int depth_test_enable:1;
2655428d7b3dSmrg	} ds2;
2656428d7b3dSmrg};
2657428d7b3dSmrg
2658428d7b3dSmrgtypedef enum {
2659428d7b3dSmrg	SAMPLER_FILTER_NEAREST = 0,
2660428d7b3dSmrg	SAMPLER_FILTER_BILINEAR,
2661428d7b3dSmrg	FILTER_COUNT
2662428d7b3dSmrg} sampler_filter_t;
2663428d7b3dSmrg
2664428d7b3dSmrgtypedef enum {
2665428d7b3dSmrg	SAMPLER_EXTEND_NONE = 0,
2666428d7b3dSmrg	SAMPLER_EXTEND_REPEAT,
2667428d7b3dSmrg	SAMPLER_EXTEND_PAD,
2668428d7b3dSmrg	SAMPLER_EXTEND_REFLECT,
2669428d7b3dSmrg	EXTEND_COUNT
2670428d7b3dSmrg} sampler_extend_t;
2671428d7b3dSmrg
2672428d7b3dSmrgtypedef enum {
2673428d7b3dSmrg	WM_KERNEL = 0,
2674428d7b3dSmrg	WM_KERNEL_P,
2675428d7b3dSmrg
2676428d7b3dSmrg	WM_KERNEL_MASK,
2677428d7b3dSmrg	WM_KERNEL_MASK_P,
2678428d7b3dSmrg
2679428d7b3dSmrg	WM_KERNEL_MASKCA,
2680428d7b3dSmrg	WM_KERNEL_MASKCA_P,
2681428d7b3dSmrg
2682428d7b3dSmrg	WM_KERNEL_MASKSA,
2683428d7b3dSmrg	WM_KERNEL_MASKSA_P,
2684428d7b3dSmrg
2685428d7b3dSmrg	WM_KERNEL_OPACITY,
2686428d7b3dSmrg	WM_KERNEL_OPACITY_P,
2687428d7b3dSmrg
2688428d7b3dSmrg	WM_KERNEL_VIDEO_PLANAR,
2689428d7b3dSmrg	WM_KERNEL_VIDEO_PACKED,
2690428d7b3dSmrg	KERNEL_COUNT
2691428d7b3dSmrg} wm_kernel_t;
2692428d7b3dSmrg
2693428d7b3dSmrg#endif
2694