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 GEN5_RENDER_H
29428d7b3dSmrg#define GEN5_RENDER_H
30428d7b3dSmrg
31428d7b3dSmrg#define GEN5_3D(Pipeline,Opcode,Subopcode) ((3 << 29) | \
32428d7b3dSmrg					   ((Pipeline) << 27) | \
33428d7b3dSmrg					   ((Opcode) << 24) | \
34428d7b3dSmrg					   ((Subopcode) << 16))
35428d7b3dSmrg
36428d7b3dSmrg#define GEN5_URB_FENCE				GEN5_3D(0, 0, 0)
37428d7b3dSmrg#define GEN5_CS_URB_STATE			GEN5_3D(0, 0, 1)
38428d7b3dSmrg#define GEN5_CONSTANT_BUFFER			GEN5_3D(0, 0, 2)
39428d7b3dSmrg#define GEN5_STATE_PREFETCH			GEN5_3D(0, 0, 3)
40428d7b3dSmrg
41428d7b3dSmrg#define GEN5_STATE_BASE_ADDRESS			GEN5_3D(0, 1, 1)
42428d7b3dSmrg#define GEN5_STATE_SIP				GEN5_3D(0, 1, 2)
43428d7b3dSmrg
44428d7b3dSmrg#define GEN5_PIPELINE_SELECT			GEN5_3D(1, 1, 4)
45428d7b3dSmrg
46428d7b3dSmrg#define GEN5_MEDIA_STATE_POINTERS		GEN5_3D(2, 0, 0)
47428d7b3dSmrg#define GEN5_MEDIA_OBJECT			GEN5_3D(2, 1, 0)
48428d7b3dSmrg
49428d7b3dSmrg#define GEN5_3DSTATE_PIPELINED_POINTERS		GEN5_3D(3, 0, 0)
50428d7b3dSmrg#define GEN5_3DSTATE_BINDING_TABLE_POINTERS	GEN5_3D(3, 0, 1)
51428d7b3dSmrg# define GEN6_3DSTATE_BINDING_TABLE_MODIFY_PS  (1 << 12)/* for GEN6 */
52428d7b3dSmrg# define GEN6_3DSTATE_BINDING_TABLE_MODIFY_GS  (1 << 9) /* for GEN6 */
53428d7b3dSmrg# define GEN6_3DSTATE_BINDING_TABLE_MODIFY_VS  (1 << 8) /* for GEN6 */
54428d7b3dSmrg
55428d7b3dSmrg#define GEN5_3DSTATE_VERTEX_BUFFERS		GEN5_3D(3, 0, 8)
56428d7b3dSmrg#define GEN5_3DSTATE_VERTEX_ELEMENTS		GEN5_3D(3, 0, 9)
57428d7b3dSmrg#define GEN5_3DSTATE_INDEX_BUFFER		GEN5_3D(3, 0, 0xa)
58428d7b3dSmrg#define GEN5_3DSTATE_VF_STATISTICS		GEN5_3D(3, 0, 0xb)
59428d7b3dSmrg
60428d7b3dSmrg#define GEN5_3DSTATE_DRAWING_RECTANGLE		GEN5_3D(3, 1, 0)
61428d7b3dSmrg#define GEN5_3DSTATE_CONSTANT_COLOR		GEN5_3D(3, 1, 1)
62428d7b3dSmrg#define GEN5_3DSTATE_SAMPLER_PALETTE_LOAD	GEN5_3D(3, 1, 2)
63428d7b3dSmrg#define GEN5_3DSTATE_CHROMA_KEY			GEN5_3D(3, 1, 4)
64428d7b3dSmrg#define GEN5_3DSTATE_DEPTH_BUFFER		GEN5_3D(3, 1, 5)
65428d7b3dSmrg# define GEN5_3DSTATE_DEPTH_BUFFER_TYPE_SHIFT	29
66428d7b3dSmrg# define GEN5_3DSTATE_DEPTH_BUFFER_FORMAT_SHIFT	18
67428d7b3dSmrg
68428d7b3dSmrg#define GEN5_3DSTATE_POLY_STIPPLE_OFFSET		GEN5_3D(3, 1, 6)
69428d7b3dSmrg#define GEN5_3DSTATE_POLY_STIPPLE_PATTERN	GEN5_3D(3, 1, 7)
70428d7b3dSmrg#define GEN5_3DSTATE_LINE_STIPPLE		GEN5_3D(3, 1, 8)
71428d7b3dSmrg#define GEN5_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP	GEN5_3D(3, 1, 9)
72428d7b3dSmrg/* These two are BLC and CTG only, not BW or CL */
73428d7b3dSmrg#define GEN5_3DSTATE_AA_LINE_PARAMS		GEN5_3D(3, 1, 0xa)
74428d7b3dSmrg#define GEN5_3DSTATE_GS_SVB_INDEX		GEN5_3D(3, 1, 0xb)
75428d7b3dSmrg
76428d7b3dSmrg#define GEN5_PIPE_CONTROL			GEN5_3D(3, 2, 0)
77428d7b3dSmrg
78428d7b3dSmrg#define GEN5_3DPRIMITIVE				GEN5_3D(3, 3, 0)
79428d7b3dSmrg
80428d7b3dSmrg#define GEN5_3DSTATE_CLEAR_PARAMS		GEN5_3D(3, 1, 0x10)
81428d7b3dSmrg/* DW1 */
82428d7b3dSmrg# define GEN5_3DSTATE_DEPTH_CLEAR_VALID		(1 << 15)
83428d7b3dSmrg
84428d7b3dSmrg/* for GEN6+ */
85428d7b3dSmrg#define GEN6_3DSTATE_SAMPLER_STATE_POINTERS	GEN5_3D(3, 0, 0x02)
86428d7b3dSmrg# define GEN6_3DSTATE_SAMPLER_STATE_MODIFY_PS	(1 << 12)
87428d7b3dSmrg# define GEN6_3DSTATE_SAMPLER_STATE_MODIFY_GS	(1 << 9)
88428d7b3dSmrg# define GEN6_3DSTATE_SAMPLER_STATE_MODIFY_VS	(1 << 8)
89428d7b3dSmrg
90428d7b3dSmrg#define GEN6_3DSTATE_URB			GEN5_3D(3, 0, 0x05)
91428d7b3dSmrg/* DW1 */
92428d7b3dSmrg# define GEN6_3DSTATE_URB_VS_SIZE_SHIFT		16
93428d7b3dSmrg# define GEN6_3DSTATE_URB_VS_ENTRIES_SHIFT	0
94428d7b3dSmrg/* DW2 */
95428d7b3dSmrg# define GEN6_3DSTATE_URB_GS_ENTRIES_SHIFT	8
96428d7b3dSmrg# define GEN6_3DSTATE_URB_GS_SIZE_SHIFT		0
97428d7b3dSmrg
98428d7b3dSmrg#define GEN6_3DSTATE_VIEWPORT_STATE_POINTERS	GEN5_3D(3, 0, 0x0d)
99428d7b3dSmrg# define GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_CC		(1 << 12)
100428d7b3dSmrg# define GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_SF		(1 << 11)
101428d7b3dSmrg# define GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_CLIP	(1 << 10)
102428d7b3dSmrg
103428d7b3dSmrg#define GEN6_3DSTATE_CC_STATE_POINTERS		GEN5_3D(3, 0, 0x0e)
104428d7b3dSmrg
105428d7b3dSmrg#define GEN6_3DSTATE_VS				GEN5_3D(3, 0, 0x10)
106428d7b3dSmrg
107428d7b3dSmrg#define GEN6_3DSTATE_GS				GEN5_3D(3, 0, 0x11)
108428d7b3dSmrg/* DW4 */
109428d7b3dSmrg# define GEN6_3DSTATE_GS_DISPATCH_START_GRF_SHIFT	0
110428d7b3dSmrg
111428d7b3dSmrg#define GEN6_3DSTATE_CLIP			GEN5_3D(3, 0, 0x12)
112428d7b3dSmrg
113428d7b3dSmrg#define GEN6_3DSTATE_SF				GEN5_3D(3, 0, 0x13)
114428d7b3dSmrg/* DW1 */
115428d7b3dSmrg# define GEN6_3DSTATE_SF_NUM_OUTPUTS_SHIFT		22
116428d7b3dSmrg# define GEN6_3DSTATE_SF_URB_ENTRY_READ_LENGTH_SHIFT	11
117428d7b3dSmrg# define GEN6_3DSTATE_SF_URB_ENTRY_READ_OFFSET_SHIFT	4
118428d7b3dSmrg/* DW2 */
119428d7b3dSmrg/* DW3 */
120428d7b3dSmrg# define GEN6_3DSTATE_SF_CULL_BOTH			(0 << 29)
121428d7b3dSmrg# define GEN6_3DSTATE_SF_CULL_NONE			(1 << 29)
122428d7b3dSmrg# define GEN6_3DSTATE_SF_CULL_FRONT			(2 << 29)
123428d7b3dSmrg# define GEN6_3DSTATE_SF_CULL_BACK			(3 << 29)
124428d7b3dSmrg/* DW4 */
125428d7b3dSmrg# define GEN6_3DSTATE_SF_TRI_PROVOKE_SHIFT		29
126428d7b3dSmrg# define GEN6_3DSTATE_SF_LINE_PROVOKE_SHIFT		27
127428d7b3dSmrg# define GEN6_3DSTATE_SF_TRIFAN_PROVOKE_SHIFT		25
128428d7b3dSmrg
129428d7b3dSmrg
130428d7b3dSmrg#define GEN6_3DSTATE_WM				GEN5_3D(3, 0, 0x14)
131428d7b3dSmrg/* DW2 */
132428d7b3dSmrg# define GEN6_3DSTATE_WM_SAMPLER_COUNT_SHITF			27
133428d7b3dSmrg# define GEN6_3DSTATE_WM_BINDING_TABLE_ENTRY_COUNT_SHIFT	18
134428d7b3dSmrg/* DW4 */
135428d7b3dSmrg# define GEN6_3DSTATE_WM_DISPATCH_START_GRF_0_SHIFT		16
136428d7b3dSmrg/* DW5 */
137428d7b3dSmrg# define GEN6_3DSTATE_WM_MAX_THREADS_SHIFT			25
138428d7b3dSmrg# define GEN6_3DSTATE_WM_DISPATCH_ENABLE			(1 << 19)
139428d7b3dSmrg# define GEN6_3DSTATE_WM_16_DISPATCH_ENABLE			(1 << 1)
140428d7b3dSmrg# define GEN6_3DSTATE_WM_8_DISPATCH_ENABLE			(1 << 0)
141428d7b3dSmrg/* DW6 */
142428d7b3dSmrg# define GEN6_3DSTATE_WM_NUM_SF_OUTPUTS_SHIFT			20
143428d7b3dSmrg# define GEN6_3DSTATE_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC	(1 << 15)
144428d7b3dSmrg# define GEN6_3DSTATE_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC	(1 << 14)
145428d7b3dSmrg# define GEN6_3DSTATE_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC	(1 << 13)
146428d7b3dSmrg# define GEN6_3DSTATE_WM_PERSPECTIVE_SAMPLE_BARYCENTRIC		(1 << 12)
147428d7b3dSmrg# define GEN6_3DSTATE_WM_PERSPECTIVE_CENTROID_BARYCENTRIC	(1 << 11)
148428d7b3dSmrg# define GEN6_3DSTATE_WM_PERSPECTIVE_PIXEL_BARYCENTRIC		(1 << 10)
149428d7b3dSmrg
150428d7b3dSmrg
151428d7b3dSmrg#define GEN6_3DSTATE_CONSTANT_VS		GEN5_3D(3, 0, 0x15)
152428d7b3dSmrg#define GEN6_3DSTATE_CONSTANT_GS          	GEN5_3D(3, 0, 0x16)
153428d7b3dSmrg#define GEN6_3DSTATE_CONSTANT_PS          	GEN5_3D(3, 0, 0x17)
154428d7b3dSmrg
155428d7b3dSmrg#define GEN6_3DSTATE_SAMPLE_MASK		GEN5_3D(3, 0, 0x18)
156428d7b3dSmrg
157428d7b3dSmrg#define GEN6_3DSTATE_MULTISAMPLE		GEN5_3D(3, 1, 0x0d)
158428d7b3dSmrg/* DW1 */
159428d7b3dSmrg# define GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_CENTER		(0 << 4)
160428d7b3dSmrg# define GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_UPPER_LEFT	(1 << 4)
161428d7b3dSmrg# define GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_1			(0 << 1)
162428d7b3dSmrg# define GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_4			(2 << 1)
163428d7b3dSmrg# define GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_8			(3 << 1)
164428d7b3dSmrg
165428d7b3dSmrg#define PIPELINE_SELECT_3D		0
166428d7b3dSmrg#define PIPELINE_SELECT_MEDIA		1
167428d7b3dSmrg
168428d7b3dSmrg#define UF0_CS_REALLOC			(1 << 13)
169428d7b3dSmrg#define UF0_VFE_REALLOC			(1 << 12)
170428d7b3dSmrg#define UF0_SF_REALLOC			(1 << 11)
171428d7b3dSmrg#define UF0_CLIP_REALLOC		(1 << 10)
172428d7b3dSmrg#define UF0_GS_REALLOC			(1 << 9)
173428d7b3dSmrg#define UF0_VS_REALLOC			(1 << 8)
174428d7b3dSmrg#define UF1_CLIP_FENCE_SHIFT		20
175428d7b3dSmrg#define UF1_GS_FENCE_SHIFT		10
176428d7b3dSmrg#define UF1_VS_FENCE_SHIFT		0
177428d7b3dSmrg#define UF2_CS_FENCE_SHIFT		20
178428d7b3dSmrg#define UF2_VFE_FENCE_SHIFT		10
179428d7b3dSmrg#define UF2_SF_FENCE_SHIFT		0
180428d7b3dSmrg
181428d7b3dSmrg/* for GEN5_STATE_BASE_ADDRESS */
182428d7b3dSmrg#define BASE_ADDRESS_MODIFY		(1 << 0)
183428d7b3dSmrg
184428d7b3dSmrg/* for GEN5_3DSTATE_PIPELINED_POINTERS */
185428d7b3dSmrg#define GEN5_GS_DISABLE		       0
186428d7b3dSmrg#define GEN5_GS_ENABLE		       1
187428d7b3dSmrg#define GEN5_CLIP_DISABLE	       0
188428d7b3dSmrg#define GEN5_CLIP_ENABLE		       1
189428d7b3dSmrg
190428d7b3dSmrg/* for GEN5_PIPE_CONTROL */
191428d7b3dSmrg#define GEN5_PIPE_CONTROL_NOWRITE       (0 << 14)
192428d7b3dSmrg#define GEN5_PIPE_CONTROL_WRITE_QWORD   (1 << 14)
193428d7b3dSmrg#define GEN5_PIPE_CONTROL_WRITE_DEPTH   (2 << 14)
194428d7b3dSmrg#define GEN5_PIPE_CONTROL_WRITE_TIME    (3 << 14)
195428d7b3dSmrg#define GEN5_PIPE_CONTROL_DEPTH_STALL   (1 << 13)
196428d7b3dSmrg#define GEN5_PIPE_CONTROL_WC_FLUSH      (1 << 12)
197428d7b3dSmrg#define GEN5_PIPE_CONTROL_IS_FLUSH      (1 << 11)
198428d7b3dSmrg#define GEN5_PIPE_CONTROL_TC_FLUSH      (1 << 10)
199428d7b3dSmrg#define GEN5_PIPE_CONTROL_NOTIFY_ENABLE (1 << 8)
200428d7b3dSmrg#define GEN5_PIPE_CONTROL_GLOBAL_GTT    (1 << 2)
201428d7b3dSmrg#define GEN5_PIPE_CONTROL_LOCAL_PGTT    (0 << 2)
202428d7b3dSmrg#define GEN5_PIPE_CONTROL_DEPTH_CACHE_FLUSH	(1 << 0)
203428d7b3dSmrg
204428d7b3dSmrg/* VERTEX_BUFFER_STATE Structure */
205428d7b3dSmrg#define VB0_BUFFER_INDEX_SHIFT		27
206428d7b3dSmrg#define GEN6_VB0_BUFFER_INDEX_SHIFT	26
207428d7b3dSmrg#define VB0_VERTEXDATA			(0 << 26)
208428d7b3dSmrg#define VB0_INSTANCEDATA		(1 << 26)
209428d7b3dSmrg#define GEN6_VB0_VERTEXDATA		(0 << 20)
210428d7b3dSmrg#define GEN6_VB0_INSTANCEDATA		(1 << 20)
211428d7b3dSmrg#define VB0_BUFFER_PITCH_SHIFT		0
212428d7b3dSmrg
213428d7b3dSmrg/* VERTEX_ELEMENT_STATE Structure */
214428d7b3dSmrg#define VE0_VERTEX_BUFFER_INDEX_SHIFT	27
215428d7b3dSmrg#define GEN6_VE0_VERTEX_BUFFER_INDEX_SHIFT	26 /* for GEN6 */
216428d7b3dSmrg#define VE0_VALID			(1 << 26)
217428d7b3dSmrg#define GEN6_VE0_VALID			(1 << 25) /* for GEN6 */
218428d7b3dSmrg#define VE0_FORMAT_SHIFT		16
219428d7b3dSmrg#define VE0_OFFSET_SHIFT		0
220428d7b3dSmrg#define VE1_VFCOMPONENT_0_SHIFT		28
221428d7b3dSmrg#define VE1_VFCOMPONENT_1_SHIFT		24
222428d7b3dSmrg#define VE1_VFCOMPONENT_2_SHIFT		20
223428d7b3dSmrg#define VE1_VFCOMPONENT_3_SHIFT		16
224428d7b3dSmrg#define VE1_DESTINATION_ELEMENT_OFFSET_SHIFT	0
225428d7b3dSmrg
226428d7b3dSmrg/* 3DPRIMITIVE bits */
227428d7b3dSmrg#define GEN5_3DPRIMITIVE_VERTEX_SEQUENTIAL (0 << 15)
228428d7b3dSmrg#define GEN5_3DPRIMITIVE_VERTEX_RANDOM	  (1 << 15)
229428d7b3dSmrg/* Primitive types are in gen5_defines.h */
230428d7b3dSmrg#define GEN5_3DPRIMITIVE_TOPOLOGY_SHIFT	  10
231428d7b3dSmrg
232428d7b3dSmrg#define GEN5_SVG_CTL		       0x7400
233428d7b3dSmrg
234428d7b3dSmrg#define GEN5_SVG_CTL_GS_BA	       (0 << 8)
235428d7b3dSmrg#define GEN5_SVG_CTL_SS_BA	       (1 << 8)
236428d7b3dSmrg#define GEN5_SVG_CTL_IO_BA	       (2 << 8)
237428d7b3dSmrg#define GEN5_SVG_CTL_GS_AUB	       (3 << 8)
238428d7b3dSmrg#define GEN5_SVG_CTL_IO_AUB	       (4 << 8)
239428d7b3dSmrg#define GEN5_SVG_CTL_SIP		       (5 << 8)
240428d7b3dSmrg
241428d7b3dSmrg#define GEN5_SVG_RDATA		       0x7404
242428d7b3dSmrg#define GEN5_SVG_WORK_CTL	       0x7408
243428d7b3dSmrg
244428d7b3dSmrg#define GEN5_VF_CTL		       0x7500
245428d7b3dSmrg
246428d7b3dSmrg#define GEN5_VF_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
247428d7b3dSmrg#define GEN5_VF_CTL_SNAPSHOT_MUX_SELECT_THREADID	   (0 << 8)
248428d7b3dSmrg#define GEN5_VF_CTL_SNAPSHOT_MUX_SELECT_VF_DEBUG	   (1 << 8)
249428d7b3dSmrg#define GEN5_VF_CTL_SNAPSHOT_TYPE_VERTEX_SEQUENCE   (0 << 4)
250428d7b3dSmrg#define GEN5_VF_CTL_SNAPSHOT_TYPE_VERTEX_INDEX	   (1 << 4)
251428d7b3dSmrg#define GEN5_VF_CTL_SKIP_INITIAL_PRIMITIVES	   (1 << 3)
252428d7b3dSmrg#define GEN5_VF_CTL_MAX_PRIMITIVES_LIMIT_ENABLE	   (1 << 2)
253428d7b3dSmrg#define GEN5_VF_CTL_VERTEX_RANGE_LIMIT_ENABLE	   (1 << 1)
254428d7b3dSmrg#define GEN5_VF_CTL_SNAPSHOT_ENABLE	     	   (1 << 0)
255428d7b3dSmrg
256428d7b3dSmrg#define GEN5_VF_STRG_VAL		       0x7504
257428d7b3dSmrg#define GEN5_VF_STR_VL_OVR	       0x7508
258428d7b3dSmrg#define GEN5_VF_VC_OVR		       0x750c
259428d7b3dSmrg#define GEN5_VF_STR_PSKIP	       0x7510
260428d7b3dSmrg#define GEN5_VF_MAX_PRIM		       0x7514
261428d7b3dSmrg#define GEN5_VF_RDATA		       0x7518
262428d7b3dSmrg
263428d7b3dSmrg#define GEN5_VS_CTL		       0x7600
264428d7b3dSmrg#define GEN5_VS_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
265428d7b3dSmrg#define GEN5_VS_CTL_SNAPSHOT_MUX_VERTEX_0	   (0 << 8)
266428d7b3dSmrg#define GEN5_VS_CTL_SNAPSHOT_MUX_VERTEX_1	   (1 << 8)
267428d7b3dSmrg#define GEN5_VS_CTL_SNAPSHOT_MUX_VALID_COUNT	   (2 << 8)
268428d7b3dSmrg#define GEN5_VS_CTL_SNAPSHOT_MUX_VS_KERNEL_POINTER  (3 << 8)
269428d7b3dSmrg#define GEN5_VS_CTL_SNAPSHOT_ALL_THREADS		   (1 << 2)
270428d7b3dSmrg#define GEN5_VS_CTL_THREAD_SNAPSHOT_ENABLE	   (1 << 1)
271428d7b3dSmrg#define GEN5_VS_CTL_SNAPSHOT_ENABLE		   (1 << 0)
272428d7b3dSmrg
273428d7b3dSmrg#define GEN5_VS_STRG_VAL		       0x7604
274428d7b3dSmrg#define GEN5_VS_RDATA		       0x7608
275428d7b3dSmrg
276428d7b3dSmrg#define GEN5_SF_CTL		       0x7b00
277428d7b3dSmrg#define GEN5_SF_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
278428d7b3dSmrg#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_0_FF_ID	   (0 << 8)
279428d7b3dSmrg#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_0_REL_COUNT (1 << 8)
280428d7b3dSmrg#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_1_FF_ID	   (2 << 8)
281428d7b3dSmrg#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_1_REL_COUNT (3 << 8)
282428d7b3dSmrg#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_2_FF_ID	   (4 << 8)
283428d7b3dSmrg#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_2_REL_COUNT (5 << 8)
284428d7b3dSmrg#define GEN5_SF_CTL_SNAPSHOT_MUX_VERTEX_COUNT	   (6 << 8)
285428d7b3dSmrg#define GEN5_SF_CTL_SNAPSHOT_MUX_SF_KERNEL_POINTER  (7 << 8)
286428d7b3dSmrg#define GEN5_SF_CTL_MIN_MAX_PRIMITIVE_RANGE_ENABLE  (1 << 4)
287428d7b3dSmrg#define GEN5_SF_CTL_DEBUG_CLIP_RECTANGLE_ENABLE	   (1 << 3)
288428d7b3dSmrg#define GEN5_SF_CTL_SNAPSHOT_ALL_THREADS		   (1 << 2)
289428d7b3dSmrg#define GEN5_SF_CTL_THREAD_SNAPSHOT_ENABLE	   (1 << 1)
290428d7b3dSmrg#define GEN5_SF_CTL_SNAPSHOT_ENABLE		   (1 << 0)
291428d7b3dSmrg
292428d7b3dSmrg#define GEN5_SF_STRG_VAL		       0x7b04
293428d7b3dSmrg#define GEN5_SF_RDATA		       0x7b18
294428d7b3dSmrg
295428d7b3dSmrg#define GEN5_WIZ_CTL		       0x7c00
296428d7b3dSmrg#define GEN5_WIZ_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
297428d7b3dSmrg#define GEN5_WIZ_CTL_SUBSPAN_INSTANCE_SHIFT	   16
298428d7b3dSmrg#define GEN5_WIZ_CTL_SNAPSHOT_MUX_WIZ_KERNEL_POINTER   (0 << 8)
299428d7b3dSmrg#define GEN5_WIZ_CTL_SNAPSHOT_MUX_SUBSPAN_INSTANCE     (1 << 8)
300428d7b3dSmrg#define GEN5_WIZ_CTL_SNAPSHOT_MUX_PRIMITIVE_SEQUENCE   (2 << 8)
301428d7b3dSmrg#define GEN5_WIZ_CTL_SINGLE_SUBSPAN_DISPATCH	      (1 << 6)
302428d7b3dSmrg#define GEN5_WIZ_CTL_IGNORE_COLOR_SCOREBOARD_STALLS    (1 << 5)
303428d7b3dSmrg#define GEN5_WIZ_CTL_ENABLE_SUBSPAN_INSTANCE_COMPARE   (1 << 4)
304428d7b3dSmrg#define GEN5_WIZ_CTL_USE_UPSTREAM_SNAPSHOT_FLAG	      (1 << 3)
305428d7b3dSmrg#define GEN5_WIZ_CTL_SNAPSHOT_ALL_THREADS	      (1 << 2)
306428d7b3dSmrg#define GEN5_WIZ_CTL_THREAD_SNAPSHOT_ENABLE	      (1 << 1)
307428d7b3dSmrg#define GEN5_WIZ_CTL_SNAPSHOT_ENABLE		      (1 << 0)
308428d7b3dSmrg
309428d7b3dSmrg#define GEN5_WIZ_STRG_VAL			      0x7c04
310428d7b3dSmrg#define GEN5_WIZ_RDATA				      0x7c18
311428d7b3dSmrg
312428d7b3dSmrg#define GEN5_TS_CTL		       0x7e00
313428d7b3dSmrg#define GEN5_TS_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
314428d7b3dSmrg#define GEN5_TS_CTL_SNAPSHOT_MESSAGE_ERROR	   (0 << 8)
315428d7b3dSmrg#define GEN5_TS_CTL_SNAPSHOT_INTERFACE_DESCRIPTOR   (3 << 8)
316428d7b3dSmrg#define GEN5_TS_CTL_SNAPSHOT_ALL_CHILD_THREADS	   (1 << 2)
317428d7b3dSmrg#define GEN5_TS_CTL_SNAPSHOT_ALL_ROOT_THREADS  	   (1 << 1)
318428d7b3dSmrg#define GEN5_TS_CTL_SNAPSHOT_ENABLE		   (1 << 0)
319428d7b3dSmrg
320428d7b3dSmrg#define GEN5_TS_STRG_VAL		       0x7e04
321428d7b3dSmrg#define GEN5_TS_RDATA		       0x7e08
322428d7b3dSmrg
323428d7b3dSmrg#define GEN5_TD_CTL		       0x8000
324428d7b3dSmrg#define GEN5_TD_CTL_MUX_SHIFT	       8
325428d7b3dSmrg#define GEN5_TD_CTL_EXTERNAL_HALT_R0_DEBUG_MATCH	   (1 << 7)
326428d7b3dSmrg#define GEN5_TD_CTL_FORCE_EXTERNAL_HALT		   (1 << 6)
327428d7b3dSmrg#define GEN5_TD_CTL_EXCEPTION_MASK_OVERRIDE	   (1 << 5)
328428d7b3dSmrg#define GEN5_TD_CTL_FORCE_THREAD_BREAKPOINT_ENABLE  (1 << 4)
329428d7b3dSmrg#define GEN5_TD_CTL_BREAKPOINT_ENABLE		   (1 << 2)
330428d7b3dSmrg#define GEN5_TD_CTL2		       0x8004
331428d7b3dSmrg#define GEN5_TD_CTL2_ILLEGAL_OPCODE_EXCEPTION_OVERRIDE (1 << 28)
332428d7b3dSmrg#define GEN5_TD_CTL2_MASKSTACK_EXCEPTION_OVERRIDE      (1 << 26)
333428d7b3dSmrg#define GEN5_TD_CTL2_SOFTWARE_EXCEPTION_OVERRIDE	      (1 << 25)
334428d7b3dSmrg#define GEN5_TD_CTL2_ACTIVE_THREAD_LIMIT_SHIFT	      16
335428d7b3dSmrg#define GEN5_TD_CTL2_ACTIVE_THREAD_LIMIT_ENABLE	      (1 << 8)
336428d7b3dSmrg#define GEN5_TD_CTL2_THREAD_SPAWNER_EXECUTION_MASK_ENABLE (1 << 7)
337428d7b3dSmrg#define GEN5_TD_CTL2_WIZ_EXECUTION_MASK_ENABLE	      (1 << 6)
338428d7b3dSmrg#define GEN5_TD_CTL2_SF_EXECUTION_MASK_ENABLE	      (1 << 5)
339428d7b3dSmrg#define GEN5_TD_CTL2_CLIPPER_EXECUTION_MASK_ENABLE     (1 << 4)
340428d7b3dSmrg#define GEN5_TD_CTL2_GS_EXECUTION_MASK_ENABLE	      (1 << 3)
341428d7b3dSmrg#define GEN5_TD_CTL2_VS_EXECUTION_MASK_ENABLE	      (1 << 0)
342428d7b3dSmrg#define GEN5_TD_VF_VS_EMSK	       0x8008
343428d7b3dSmrg#define GEN5_TD_GS_EMSK		       0x800c
344428d7b3dSmrg#define GEN5_TD_CLIP_EMSK	       0x8010
345428d7b3dSmrg#define GEN5_TD_SF_EMSK		       0x8014
346428d7b3dSmrg#define GEN5_TD_WIZ_EMSK		       0x8018
347428d7b3dSmrg#define GEN5_TD_0_6_EHTRG_VAL	       0x801c
348428d7b3dSmrg#define GEN5_TD_0_7_EHTRG_VAL	       0x8020
349428d7b3dSmrg#define GEN5_TD_0_6_EHTRG_MSK           0x8024
350428d7b3dSmrg#define GEN5_TD_0_7_EHTRG_MSK	       0x8028
351428d7b3dSmrg#define GEN5_TD_RDATA		       0x802c
352428d7b3dSmrg#define GEN5_TD_TS_EMSK		       0x8030
353428d7b3dSmrg
354428d7b3dSmrg#define GEN5_EU_CTL		       0x8800
355428d7b3dSmrg#define GEN5_EU_CTL_SELECT_SHIFT	       16
356428d7b3dSmrg#define GEN5_EU_CTL_DATA_MUX_SHIFT      8
357428d7b3dSmrg#define GEN5_EU_ATT_0		       0x8810
358428d7b3dSmrg#define GEN5_EU_ATT_1		       0x8814
359428d7b3dSmrg#define GEN5_EU_ATT_DATA_0	       0x8820
360428d7b3dSmrg#define GEN5_EU_ATT_DATA_1	       0x8824
361428d7b3dSmrg#define GEN5_EU_ATT_CLR_0	       0x8830
362428d7b3dSmrg#define GEN5_EU_ATT_CLR_1	       0x8834
363428d7b3dSmrg#define GEN5_EU_RDATA		       0x8840
364428d7b3dSmrg
365428d7b3dSmrg/* 3D state:
366428d7b3dSmrg */
367428d7b3dSmrg#define _3DOP_3DSTATE_PIPELINED       0x0
368428d7b3dSmrg#define _3DOP_3DSTATE_NONPIPELINED    0x1
369428d7b3dSmrg#define _3DOP_3DCONTROL               0x2
370428d7b3dSmrg#define _3DOP_3DPRIMITIVE             0x3
371428d7b3dSmrg
372428d7b3dSmrg#define _3DSTATE_PIPELINED_POINTERS       0x00
373428d7b3dSmrg#define _3DSTATE_BINDING_TABLE_POINTERS   0x01
374428d7b3dSmrg#define _3DSTATE_VERTEX_BUFFERS           0x08
375428d7b3dSmrg#define _3DSTATE_VERTEX_ELEMENTS          0x09
376428d7b3dSmrg#define _3DSTATE_INDEX_BUFFER             0x0A
377428d7b3dSmrg#define _3DSTATE_VF_STATISTICS            0x0B
378428d7b3dSmrg#define _3DSTATE_DRAWING_RECTANGLE            0x00
379428d7b3dSmrg#define _3DSTATE_CONSTANT_COLOR               0x01
380428d7b3dSmrg#define _3DSTATE_SAMPLER_PALETTE_LOAD         0x02
381428d7b3dSmrg#define _3DSTATE_CHROMA_KEY                   0x04
382428d7b3dSmrg#define _3DSTATE_DEPTH_BUFFER                 0x05
383428d7b3dSmrg#define _3DSTATE_POLY_STIPPLE_OFFSET          0x06
384428d7b3dSmrg#define _3DSTATE_POLY_STIPPLE_PATTERN         0x07
385428d7b3dSmrg#define _3DSTATE_LINE_STIPPLE                 0x08
386428d7b3dSmrg#define _3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP    0x09
387428d7b3dSmrg#define _3DCONTROL    0x00
388428d7b3dSmrg#define _3DPRIMITIVE  0x00
389428d7b3dSmrg
390428d7b3dSmrg#define _3DPRIM_POINTLIST         0x01
391428d7b3dSmrg#define _3DPRIM_LINELIST          0x02
392428d7b3dSmrg#define _3DPRIM_LINESTRIP         0x03
393428d7b3dSmrg#define _3DPRIM_TRILIST           0x04
394428d7b3dSmrg#define _3DPRIM_TRISTRIP          0x05
395428d7b3dSmrg#define _3DPRIM_TRIFAN            0x06
396428d7b3dSmrg#define _3DPRIM_QUADLIST          0x07
397428d7b3dSmrg#define _3DPRIM_QUADSTRIP         0x08
398428d7b3dSmrg#define _3DPRIM_LINELIST_ADJ      0x09
399428d7b3dSmrg#define _3DPRIM_LINESTRIP_ADJ     0x0A
400428d7b3dSmrg#define _3DPRIM_TRILIST_ADJ       0x0B
401428d7b3dSmrg#define _3DPRIM_TRISTRIP_ADJ      0x0C
402428d7b3dSmrg#define _3DPRIM_TRISTRIP_REVERSE  0x0D
403428d7b3dSmrg#define _3DPRIM_POLYGON           0x0E
404428d7b3dSmrg#define _3DPRIM_RECTLIST          0x0F
405428d7b3dSmrg#define _3DPRIM_LINELOOP          0x10
406428d7b3dSmrg#define _3DPRIM_POINTLIST_BF      0x11
407428d7b3dSmrg#define _3DPRIM_LINESTRIP_CONT    0x12
408428d7b3dSmrg#define _3DPRIM_LINESTRIP_BF      0x13
409428d7b3dSmrg#define _3DPRIM_LINESTRIP_CONT_BF 0x14
410428d7b3dSmrg#define _3DPRIM_TRIFAN_NOSTIPPLE  0x15
411428d7b3dSmrg
412428d7b3dSmrg#define _3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL 0
413428d7b3dSmrg#define _3DPRIM_VERTEXBUFFER_ACCESS_RANDOM     1
414428d7b3dSmrg
415428d7b3dSmrg#define GEN5_ANISORATIO_2     0
416428d7b3dSmrg#define GEN5_ANISORATIO_4     1
417428d7b3dSmrg#define GEN5_ANISORATIO_6     2
418428d7b3dSmrg#define GEN5_ANISORATIO_8     3
419428d7b3dSmrg#define GEN5_ANISORATIO_10    4
420428d7b3dSmrg#define GEN5_ANISORATIO_12    5
421428d7b3dSmrg#define GEN5_ANISORATIO_14    6
422428d7b3dSmrg#define GEN5_ANISORATIO_16    7
423428d7b3dSmrg
424428d7b3dSmrg#define GEN5_BLENDFACTOR_ONE                 0x1
425428d7b3dSmrg#define GEN5_BLENDFACTOR_SRC_COLOR           0x2
426428d7b3dSmrg#define GEN5_BLENDFACTOR_SRC_ALPHA           0x3
427428d7b3dSmrg#define GEN5_BLENDFACTOR_DST_ALPHA           0x4
428428d7b3dSmrg#define GEN5_BLENDFACTOR_DST_COLOR           0x5
429428d7b3dSmrg#define GEN5_BLENDFACTOR_SRC_ALPHA_SATURATE  0x6
430428d7b3dSmrg#define GEN5_BLENDFACTOR_CONST_COLOR         0x7
431428d7b3dSmrg#define GEN5_BLENDFACTOR_CONST_ALPHA         0x8
432428d7b3dSmrg#define GEN5_BLENDFACTOR_SRC1_COLOR          0x9
433428d7b3dSmrg#define GEN5_BLENDFACTOR_SRC1_ALPHA          0x0A
434428d7b3dSmrg#define GEN5_BLENDFACTOR_ZERO                0x11
435428d7b3dSmrg#define GEN5_BLENDFACTOR_INV_SRC_COLOR       0x12
436428d7b3dSmrg#define GEN5_BLENDFACTOR_INV_SRC_ALPHA       0x13
437428d7b3dSmrg#define GEN5_BLENDFACTOR_INV_DST_ALPHA       0x14
438428d7b3dSmrg#define GEN5_BLENDFACTOR_INV_DST_COLOR       0x15
439428d7b3dSmrg#define GEN5_BLENDFACTOR_INV_CONST_COLOR     0x17
440428d7b3dSmrg#define GEN5_BLENDFACTOR_INV_CONST_ALPHA     0x18
441428d7b3dSmrg#define GEN5_BLENDFACTOR_INV_SRC1_COLOR      0x19
442428d7b3dSmrg#define GEN5_BLENDFACTOR_INV_SRC1_ALPHA      0x1A
443428d7b3dSmrg
444428d7b3dSmrg#define GEN5_BLENDFUNCTION_ADD               0
445428d7b3dSmrg#define GEN5_BLENDFUNCTION_SUBTRACT          1
446428d7b3dSmrg#define GEN5_BLENDFUNCTION_REVERSE_SUBTRACT  2
447428d7b3dSmrg#define GEN5_BLENDFUNCTION_MIN               3
448428d7b3dSmrg#define GEN5_BLENDFUNCTION_MAX               4
449428d7b3dSmrg
450428d7b3dSmrg#define GEN5_ALPHATEST_FORMAT_UNORM8         0
451428d7b3dSmrg#define GEN5_ALPHATEST_FORMAT_FLOAT32        1
452428d7b3dSmrg
453428d7b3dSmrg#define GEN5_CHROMAKEY_KILL_ON_ANY_MATCH  0
454428d7b3dSmrg#define GEN5_CHROMAKEY_REPLACE_BLACK      1
455428d7b3dSmrg
456428d7b3dSmrg#define GEN5_CLIP_API_OGL     0
457428d7b3dSmrg#define GEN5_CLIP_API_DX      1
458428d7b3dSmrg
459428d7b3dSmrg#define GEN5_CLIPMODE_NORMAL              0
460428d7b3dSmrg#define GEN5_CLIPMODE_CLIP_ALL            1
461428d7b3dSmrg#define GEN5_CLIPMODE_CLIP_NON_REJECTED   2
462428d7b3dSmrg#define GEN5_CLIPMODE_REJECT_ALL          3
463428d7b3dSmrg#define GEN5_CLIPMODE_ACCEPT_ALL          4
464428d7b3dSmrg
465428d7b3dSmrg#define GEN5_CLIP_NDCSPACE     0
466428d7b3dSmrg#define GEN5_CLIP_SCREENSPACE  1
467428d7b3dSmrg
468428d7b3dSmrg#define GEN5_COMPAREFUNCTION_ALWAYS       0
469428d7b3dSmrg#define GEN5_COMPAREFUNCTION_NEVER        1
470428d7b3dSmrg#define GEN5_COMPAREFUNCTION_LESS         2
471428d7b3dSmrg#define GEN5_COMPAREFUNCTION_EQUAL        3
472428d7b3dSmrg#define GEN5_COMPAREFUNCTION_LEQUAL       4
473428d7b3dSmrg#define GEN5_COMPAREFUNCTION_GREATER      5
474428d7b3dSmrg#define GEN5_COMPAREFUNCTION_NOTEQUAL     6
475428d7b3dSmrg#define GEN5_COMPAREFUNCTION_GEQUAL       7
476428d7b3dSmrg
477428d7b3dSmrg#define GEN5_COVERAGE_PIXELS_HALF     0
478428d7b3dSmrg#define GEN5_COVERAGE_PIXELS_1        1
479428d7b3dSmrg#define GEN5_COVERAGE_PIXELS_2        2
480428d7b3dSmrg#define GEN5_COVERAGE_PIXELS_4        3
481428d7b3dSmrg
482428d7b3dSmrg#define GEN5_CULLMODE_BOTH        0
483428d7b3dSmrg#define GEN5_CULLMODE_NONE        1
484428d7b3dSmrg#define GEN5_CULLMODE_FRONT       2
485428d7b3dSmrg#define GEN5_CULLMODE_BACK        3
486428d7b3dSmrg
487428d7b3dSmrg#define GEN5_DEFAULTCOLOR_R8G8B8A8_UNORM      0
488428d7b3dSmrg#define GEN5_DEFAULTCOLOR_R32G32B32A32_FLOAT  1
489428d7b3dSmrg
490428d7b3dSmrg#define GEN5_DEPTHFORMAT_D32_FLOAT_S8X24_UINT     0
491428d7b3dSmrg#define GEN5_DEPTHFORMAT_D32_FLOAT                1
492428d7b3dSmrg#define GEN5_DEPTHFORMAT_D24_UNORM_S8_UINT        2
493428d7b3dSmrg#define GEN5_DEPTHFORMAT_D16_UNORM                5
494428d7b3dSmrg
495428d7b3dSmrg#define GEN5_FLOATING_POINT_IEEE_754        0
496428d7b3dSmrg#define GEN5_FLOATING_POINT_NON_IEEE_754    1
497428d7b3dSmrg
498428d7b3dSmrg#define GEN5_FRONTWINDING_CW      0
499428d7b3dSmrg#define GEN5_FRONTWINDING_CCW     1
500428d7b3dSmrg
501428d7b3dSmrg#define GEN5_INDEX_BYTE     0
502428d7b3dSmrg#define GEN5_INDEX_WORD     1
503428d7b3dSmrg#define GEN5_INDEX_DWORD    2
504428d7b3dSmrg
505428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_CLEAR            0
506428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_NOR              1
507428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_AND_INVERTED     2
508428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_COPY_INVERTED    3
509428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_AND_REVERSE      4
510428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_INVERT           5
511428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_XOR              6
512428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_NAND             7
513428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_AND              8
514428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_EQUIV            9
515428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_NOOP             10
516428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_OR_INVERTED      11
517428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_COPY             12
518428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_OR_REVERSE       13
519428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_OR               14
520428d7b3dSmrg#define GEN5_LOGICOPFUNCTION_SET              15
521428d7b3dSmrg
522428d7b3dSmrg#define GEN5_MAPFILTER_NEAREST        0x0
523428d7b3dSmrg#define GEN5_MAPFILTER_LINEAR         0x1
524428d7b3dSmrg#define GEN5_MAPFILTER_ANISOTROPIC    0x2
525428d7b3dSmrg
526428d7b3dSmrg#define GEN5_MIPFILTER_NONE        0
527428d7b3dSmrg#define GEN5_MIPFILTER_NEAREST     1
528428d7b3dSmrg#define GEN5_MIPFILTER_LINEAR      3
529428d7b3dSmrg
530428d7b3dSmrg#define GEN5_POLYGON_FRONT_FACING     0
531428d7b3dSmrg#define GEN5_POLYGON_BACK_FACING      1
532428d7b3dSmrg
533428d7b3dSmrg#define GEN5_PREFILTER_ALWAYS     0x0
534428d7b3dSmrg#define GEN5_PREFILTER_NEVER      0x1
535428d7b3dSmrg#define GEN5_PREFILTER_LESS       0x2
536428d7b3dSmrg#define GEN5_PREFILTER_EQUAL      0x3
537428d7b3dSmrg#define GEN5_PREFILTER_LEQUAL     0x4
538428d7b3dSmrg#define GEN5_PREFILTER_GREATER    0x5
539428d7b3dSmrg#define GEN5_PREFILTER_NOTEQUAL   0x6
540428d7b3dSmrg#define GEN5_PREFILTER_GEQUAL     0x7
541428d7b3dSmrg
542428d7b3dSmrg#define GEN5_PROVOKING_VERTEX_0    0
543428d7b3dSmrg#define GEN5_PROVOKING_VERTEX_1    1
544428d7b3dSmrg#define GEN5_PROVOKING_VERTEX_2    2
545428d7b3dSmrg
546428d7b3dSmrg#define GEN5_RASTRULE_UPPER_LEFT  0
547428d7b3dSmrg#define GEN5_RASTRULE_UPPER_RIGHT 1
548428d7b3dSmrg
549428d7b3dSmrg#define GEN5_RENDERTARGET_CLAMPRANGE_UNORM    0
550428d7b3dSmrg#define GEN5_RENDERTARGET_CLAMPRANGE_SNORM    1
551428d7b3dSmrg#define GEN5_RENDERTARGET_CLAMPRANGE_FORMAT   2
552428d7b3dSmrg
553428d7b3dSmrg#define GEN5_STENCILOP_KEEP               0
554428d7b3dSmrg#define GEN5_STENCILOP_ZERO               1
555428d7b3dSmrg#define GEN5_STENCILOP_REPLACE            2
556428d7b3dSmrg#define GEN5_STENCILOP_INCRSAT            3
557428d7b3dSmrg#define GEN5_STENCILOP_DECRSAT            4
558428d7b3dSmrg#define GEN5_STENCILOP_INCR               5
559428d7b3dSmrg#define GEN5_STENCILOP_DECR               6
560428d7b3dSmrg#define GEN5_STENCILOP_INVERT             7
561428d7b3dSmrg
562428d7b3dSmrg#define GEN5_SURFACE_MIPMAPLAYOUT_BELOW   0
563428d7b3dSmrg#define GEN5_SURFACE_MIPMAPLAYOUT_RIGHT   1
564428d7b3dSmrg
565428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32A32_FLOAT             0x000
566428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32A32_SINT              0x001
567428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32A32_UINT              0x002
568428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32A32_UNORM             0x003
569428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32A32_SNORM             0x004
570428d7b3dSmrg#define GEN5_SURFACEFORMAT_R64G64_FLOAT                   0x005
571428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32X32_FLOAT             0x006
572428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32A32_SSCALED           0x007
573428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32A32_USCALED           0x008
574428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32_FLOAT                0x040
575428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32_SINT                 0x041
576428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32_UINT                 0x042
577428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32_UNORM                0x043
578428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32_SNORM                0x044
579428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32_SSCALED              0x045
580428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32B32_USCALED              0x046
581428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16A16_UNORM             0x080
582428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16A16_SNORM             0x081
583428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16A16_SINT              0x082
584428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16A16_UINT              0x083
585428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16A16_FLOAT             0x084
586428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32_FLOAT                   0x085
587428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32_SINT                    0x086
588428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32_UINT                    0x087
589428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS       0x088
590428d7b3dSmrg#define GEN5_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT        0x089
591428d7b3dSmrg#define GEN5_SURFACEFORMAT_L32A32_FLOAT                   0x08A
592428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32_UNORM                   0x08B
593428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32_SNORM                   0x08C
594428d7b3dSmrg#define GEN5_SURFACEFORMAT_R64_FLOAT                      0x08D
595428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16X16_UNORM             0x08E
596428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16X16_FLOAT             0x08F
597428d7b3dSmrg#define GEN5_SURFACEFORMAT_A32X32_FLOAT                   0x090
598428d7b3dSmrg#define GEN5_SURFACEFORMAT_L32X32_FLOAT                   0x091
599428d7b3dSmrg#define GEN5_SURFACEFORMAT_I32X32_FLOAT                   0x092
600428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16A16_SSCALED           0x093
601428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16A16_USCALED           0x094
602428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32_SSCALED                 0x095
603428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32G32_USCALED                 0x096
604428d7b3dSmrg#define GEN5_SURFACEFORMAT_B8G8R8A8_UNORM                 0x0C0
605428d7b3dSmrg#define GEN5_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB            0x0C1
606428d7b3dSmrg#define GEN5_SURFACEFORMAT_R10G10B10A2_UNORM              0x0C2
607428d7b3dSmrg#define GEN5_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB         0x0C3
608428d7b3dSmrg#define GEN5_SURFACEFORMAT_R10G10B10A2_UINT               0x0C4
609428d7b3dSmrg#define GEN5_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM       0x0C5
610428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8A8_UNORM                 0x0C7
611428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB            0x0C8
612428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8A8_SNORM                 0x0C9
613428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8A8_SINT                  0x0CA
614428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8A8_UINT                  0x0CB
615428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16_UNORM                   0x0CC
616428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16_SNORM                   0x0CD
617428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16_SINT                    0x0CE
618428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16_UINT                    0x0CF
619428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16_FLOAT                   0x0D0
620428d7b3dSmrg#define GEN5_SURFACEFORMAT_B10G10R10A2_UNORM              0x0D1
621428d7b3dSmrg#define GEN5_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB         0x0D2
622428d7b3dSmrg#define GEN5_SURFACEFORMAT_R11G11B10_FLOAT                0x0D3
623428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32_SINT                       0x0D6
624428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32_UINT                       0x0D7
625428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32_FLOAT                      0x0D8
626428d7b3dSmrg#define GEN5_SURFACEFORMAT_R24_UNORM_X8_TYPELESS          0x0D9
627428d7b3dSmrg#define GEN5_SURFACEFORMAT_X24_TYPELESS_G8_UINT           0x0DA
628428d7b3dSmrg#define GEN5_SURFACEFORMAT_L16A16_UNORM                   0x0DF
629428d7b3dSmrg#define GEN5_SURFACEFORMAT_I24X8_UNORM                    0x0E0
630428d7b3dSmrg#define GEN5_SURFACEFORMAT_L24X8_UNORM                    0x0E1
631428d7b3dSmrg#define GEN5_SURFACEFORMAT_A24X8_UNORM                    0x0E2
632428d7b3dSmrg#define GEN5_SURFACEFORMAT_I32_FLOAT                      0x0E3
633428d7b3dSmrg#define GEN5_SURFACEFORMAT_L32_FLOAT                      0x0E4
634428d7b3dSmrg#define GEN5_SURFACEFORMAT_A32_FLOAT                      0x0E5
635428d7b3dSmrg#define GEN5_SURFACEFORMAT_B8G8R8X8_UNORM                 0x0E9
636428d7b3dSmrg#define GEN5_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB            0x0EA
637428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8X8_UNORM                 0x0EB
638428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB            0x0EC
639428d7b3dSmrg#define GEN5_SURFACEFORMAT_R9G9B9E5_SHAREDEXP             0x0ED
640428d7b3dSmrg#define GEN5_SURFACEFORMAT_B10G10R10X2_UNORM              0x0EE
641428d7b3dSmrg#define GEN5_SURFACEFORMAT_L16A16_FLOAT                   0x0F0
642428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32_UNORM                      0x0F1
643428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32_SNORM                      0x0F2
644428d7b3dSmrg#define GEN5_SURFACEFORMAT_R10G10B10X2_USCALED            0x0F3
645428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8A8_SSCALED               0x0F4
646428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8A8_USCALED               0x0F5
647428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16_SSCALED                 0x0F6
648428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16_USCALED                 0x0F7
649428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32_SSCALED                    0x0F8
650428d7b3dSmrg#define GEN5_SURFACEFORMAT_R32_USCALED                    0x0F9
651428d7b3dSmrg#define GEN5_SURFACEFORMAT_B5G6R5_UNORM                   0x100
652428d7b3dSmrg#define GEN5_SURFACEFORMAT_B5G6R5_UNORM_SRGB              0x101
653428d7b3dSmrg#define GEN5_SURFACEFORMAT_B5G5R5A1_UNORM                 0x102
654428d7b3dSmrg#define GEN5_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB            0x103
655428d7b3dSmrg#define GEN5_SURFACEFORMAT_B4G4R4A4_UNORM                 0x104
656428d7b3dSmrg#define GEN5_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB            0x105
657428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8_UNORM                     0x106
658428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8_SNORM                     0x107
659428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8_SINT                      0x108
660428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8_UINT                      0x109
661428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16_UNORM                      0x10A
662428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16_SNORM                      0x10B
663428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16_SINT                       0x10C
664428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16_UINT                       0x10D
665428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16_FLOAT                      0x10E
666428d7b3dSmrg#define GEN5_SURFACEFORMAT_I16_UNORM                      0x111
667428d7b3dSmrg#define GEN5_SURFACEFORMAT_L16_UNORM                      0x112
668428d7b3dSmrg#define GEN5_SURFACEFORMAT_A16_UNORM                      0x113
669428d7b3dSmrg#define GEN5_SURFACEFORMAT_L8A8_UNORM                     0x114
670428d7b3dSmrg#define GEN5_SURFACEFORMAT_I16_FLOAT                      0x115
671428d7b3dSmrg#define GEN5_SURFACEFORMAT_L16_FLOAT                      0x116
672428d7b3dSmrg#define GEN5_SURFACEFORMAT_A16_FLOAT                      0x117
673428d7b3dSmrg#define GEN5_SURFACEFORMAT_R5G5_SNORM_B6_UNORM            0x119
674428d7b3dSmrg#define GEN5_SURFACEFORMAT_B5G5R5X1_UNORM                 0x11A
675428d7b3dSmrg#define GEN5_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB            0x11B
676428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8_SSCALED                   0x11C
677428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8_USCALED                   0x11D
678428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16_SSCALED                    0x11E
679428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16_USCALED                    0x11F
680428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8_UNORM                       0x140
681428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8_SNORM                       0x141
682428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8_SINT                        0x142
683428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8_UINT                        0x143
684428d7b3dSmrg#define GEN5_SURFACEFORMAT_A8_UNORM                       0x144
685428d7b3dSmrg#define GEN5_SURFACEFORMAT_I8_UNORM                       0x145
686428d7b3dSmrg#define GEN5_SURFACEFORMAT_L8_UNORM                       0x146
687428d7b3dSmrg#define GEN5_SURFACEFORMAT_P4A4_UNORM                     0x147
688428d7b3dSmrg#define GEN5_SURFACEFORMAT_A4P4_UNORM                     0x148
689428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8_SSCALED                     0x149
690428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8_USCALED                     0x14A
691428d7b3dSmrg#define GEN5_SURFACEFORMAT_R1_UINT                        0x181
692428d7b3dSmrg#define GEN5_SURFACEFORMAT_YCRCB_NORMAL                   0x182
693428d7b3dSmrg#define GEN5_SURFACEFORMAT_YCRCB_SWAPUVY                  0x183
694428d7b3dSmrg#define GEN5_SURFACEFORMAT_BC1_UNORM                      0x186
695428d7b3dSmrg#define GEN5_SURFACEFORMAT_BC2_UNORM                      0x187
696428d7b3dSmrg#define GEN5_SURFACEFORMAT_BC3_UNORM                      0x188
697428d7b3dSmrg#define GEN5_SURFACEFORMAT_BC4_UNORM                      0x189
698428d7b3dSmrg#define GEN5_SURFACEFORMAT_BC5_UNORM                      0x18A
699428d7b3dSmrg#define GEN5_SURFACEFORMAT_BC1_UNORM_SRGB                 0x18B
700428d7b3dSmrg#define GEN5_SURFACEFORMAT_BC2_UNORM_SRGB                 0x18C
701428d7b3dSmrg#define GEN5_SURFACEFORMAT_BC3_UNORM_SRGB                 0x18D
702428d7b3dSmrg#define GEN5_SURFACEFORMAT_MONO8                          0x18E
703428d7b3dSmrg#define GEN5_SURFACEFORMAT_YCRCB_SWAPUV                   0x18F
704428d7b3dSmrg#define GEN5_SURFACEFORMAT_YCRCB_SWAPY                    0x190
705428d7b3dSmrg#define GEN5_SURFACEFORMAT_DXT1_RGB                       0x191
706428d7b3dSmrg#define GEN5_SURFACEFORMAT_FXT1                           0x192
707428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8_UNORM                   0x193
708428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8_SNORM                   0x194
709428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8_SSCALED                 0x195
710428d7b3dSmrg#define GEN5_SURFACEFORMAT_R8G8B8_USCALED                 0x196
711428d7b3dSmrg#define GEN5_SURFACEFORMAT_R64G64B64A64_FLOAT             0x197
712428d7b3dSmrg#define GEN5_SURFACEFORMAT_R64G64B64_FLOAT                0x198
713428d7b3dSmrg#define GEN5_SURFACEFORMAT_BC4_SNORM                      0x199
714428d7b3dSmrg#define GEN5_SURFACEFORMAT_BC5_SNORM                      0x19A
715428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16_UNORM                0x19C
716428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16_SNORM                0x19D
717428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16_SSCALED              0x19E
718428d7b3dSmrg#define GEN5_SURFACEFORMAT_R16G16B16_USCALED              0x19F
719428d7b3dSmrg
720428d7b3dSmrg#define GEN5_SURFACERETURNFORMAT_FLOAT32  0
721428d7b3dSmrg#define GEN5_SURFACERETURNFORMAT_S1       1
722428d7b3dSmrg
723428d7b3dSmrg#define GEN5_SURFACE_1D      0
724428d7b3dSmrg#define GEN5_SURFACE_2D      1
725428d7b3dSmrg#define GEN5_SURFACE_3D      2
726428d7b3dSmrg#define GEN5_SURFACE_CUBE    3
727428d7b3dSmrg#define GEN5_SURFACE_BUFFER  4
728428d7b3dSmrg#define GEN5_SURFACE_NULL    7
729428d7b3dSmrg
730428d7b3dSmrg#define GEN5_BORDER_COLOR_MODE_DEFAULT	0
731428d7b3dSmrg#define GEN5_BORDER_COLOR_MODE_LEGACY	1
732428d7b3dSmrg
733428d7b3dSmrg#define GEN5_TEXCOORDMODE_WRAP            0
734428d7b3dSmrg#define GEN5_TEXCOORDMODE_MIRROR          1
735428d7b3dSmrg#define GEN5_TEXCOORDMODE_CLAMP           2
736428d7b3dSmrg#define GEN5_TEXCOORDMODE_CUBE            3
737428d7b3dSmrg#define GEN5_TEXCOORDMODE_CLAMP_BORDER    4
738428d7b3dSmrg#define GEN5_TEXCOORDMODE_MIRROR_ONCE     5
739428d7b3dSmrg
740428d7b3dSmrg#define GEN5_THREAD_PRIORITY_NORMAL   0
741428d7b3dSmrg#define GEN5_THREAD_PRIORITY_HIGH     1
742428d7b3dSmrg
743428d7b3dSmrg#define GEN5_TILEWALK_XMAJOR                 0
744428d7b3dSmrg#define GEN5_TILEWALK_YMAJOR                 1
745428d7b3dSmrg
746428d7b3dSmrg#define GEN5_VERTEX_SUBPIXEL_PRECISION_8BITS  0
747428d7b3dSmrg#define GEN5_VERTEX_SUBPIXEL_PRECISION_4BITS  1
748428d7b3dSmrg
749428d7b3dSmrg#define GEN5_VERTEXBUFFER_ACCESS_VERTEXDATA     0
750428d7b3dSmrg#define GEN5_VERTEXBUFFER_ACCESS_INSTANCEDATA   1
751428d7b3dSmrg
752428d7b3dSmrg#define VFCOMPONENT_NOSTORE      0
753428d7b3dSmrg#define VFCOMPONENT_STORE_SRC    1
754428d7b3dSmrg#define VFCOMPONENT_STORE_0      2
755428d7b3dSmrg#define VFCOMPONENT_STORE_1_FLT  3
756428d7b3dSmrg#define VFCOMPONENT_STORE_1_INT  4
757428d7b3dSmrg#define VFCOMPONENT_STORE_VID    5
758428d7b3dSmrg#define VFCOMPONENT_STORE_IID    6
759428d7b3dSmrg#define VFCOMPONENT_STORE_PID    7
760428d7b3dSmrg
761428d7b3dSmrg
762428d7b3dSmrg/* Execution Unit (EU) defines
763428d7b3dSmrg */
764428d7b3dSmrg
765428d7b3dSmrg#define GEN5_ALIGN_1   0
766428d7b3dSmrg#define GEN5_ALIGN_16  1
767428d7b3dSmrg
768428d7b3dSmrg#define GEN5_ADDRESS_DIRECT                        0
769428d7b3dSmrg#define GEN5_ADDRESS_REGISTER_INDIRECT_REGISTER    1
770428d7b3dSmrg
771428d7b3dSmrg#define GEN5_CHANNEL_X     0
772428d7b3dSmrg#define GEN5_CHANNEL_Y     1
773428d7b3dSmrg#define GEN5_CHANNEL_Z     2
774428d7b3dSmrg#define GEN5_CHANNEL_W     3
775428d7b3dSmrg
776428d7b3dSmrg#define GEN5_COMPRESSION_NONE          0
777428d7b3dSmrg#define GEN5_COMPRESSION_2NDHALF       1
778428d7b3dSmrg#define GEN5_COMPRESSION_COMPRESSED    2
779428d7b3dSmrg
780428d7b3dSmrg#define GEN5_CONDITIONAL_NONE  0
781428d7b3dSmrg#define GEN5_CONDITIONAL_Z     1
782428d7b3dSmrg#define GEN5_CONDITIONAL_NZ    2
783428d7b3dSmrg#define GEN5_CONDITIONAL_EQ    1	/* Z */
784428d7b3dSmrg#define GEN5_CONDITIONAL_NEQ   2	/* NZ */
785428d7b3dSmrg#define GEN5_CONDITIONAL_G     3
786428d7b3dSmrg#define GEN5_CONDITIONAL_GE    4
787428d7b3dSmrg#define GEN5_CONDITIONAL_L     5
788428d7b3dSmrg#define GEN5_CONDITIONAL_LE    6
789428d7b3dSmrg#define GEN5_CONDITIONAL_C     7
790428d7b3dSmrg#define GEN5_CONDITIONAL_O     8
791428d7b3dSmrg
792428d7b3dSmrg#define GEN5_DEBUG_NONE        0
793428d7b3dSmrg#define GEN5_DEBUG_BREAKPOINT  1
794428d7b3dSmrg
795428d7b3dSmrg#define GEN5_DEPENDENCY_NORMAL         0
796428d7b3dSmrg#define GEN5_DEPENDENCY_NOTCLEARED     1
797428d7b3dSmrg#define GEN5_DEPENDENCY_NOTCHECKED     2
798428d7b3dSmrg#define GEN5_DEPENDENCY_DISABLE        3
799428d7b3dSmrg
800428d7b3dSmrg#define GEN5_EXECUTE_1     0
801428d7b3dSmrg#define GEN5_EXECUTE_2     1
802428d7b3dSmrg#define GEN5_EXECUTE_4     2
803428d7b3dSmrg#define GEN5_EXECUTE_8     3
804428d7b3dSmrg#define GEN5_EXECUTE_16    4
805428d7b3dSmrg#define GEN5_EXECUTE_32    5
806428d7b3dSmrg
807428d7b3dSmrg#define GEN5_HORIZONTAL_STRIDE_0   0
808428d7b3dSmrg#define GEN5_HORIZONTAL_STRIDE_1   1
809428d7b3dSmrg#define GEN5_HORIZONTAL_STRIDE_2   2
810428d7b3dSmrg#define GEN5_HORIZONTAL_STRIDE_4   3
811428d7b3dSmrg
812428d7b3dSmrg#define GEN5_INSTRUCTION_NORMAL    0
813428d7b3dSmrg#define GEN5_INSTRUCTION_SATURATE  1
814428d7b3dSmrg
815428d7b3dSmrg#define GEN5_MASK_ENABLE   0
816428d7b3dSmrg#define GEN5_MASK_DISABLE  1
817428d7b3dSmrg
818428d7b3dSmrg#define GEN5_OPCODE_MOV        1
819428d7b3dSmrg#define GEN5_OPCODE_SEL        2
820428d7b3dSmrg#define GEN5_OPCODE_NOT        4
821428d7b3dSmrg#define GEN5_OPCODE_AND        5
822428d7b3dSmrg#define GEN5_OPCODE_OR         6
823428d7b3dSmrg#define GEN5_OPCODE_XOR        7
824428d7b3dSmrg#define GEN5_OPCODE_SHR        8
825428d7b3dSmrg#define GEN5_OPCODE_SHL        9
826428d7b3dSmrg#define GEN5_OPCODE_RSR        10
827428d7b3dSmrg#define GEN5_OPCODE_RSL        11
828428d7b3dSmrg#define GEN5_OPCODE_ASR        12
829428d7b3dSmrg#define GEN5_OPCODE_CMP        16
830428d7b3dSmrg#define GEN5_OPCODE_JMPI       32
831428d7b3dSmrg#define GEN5_OPCODE_IF         34
832428d7b3dSmrg#define GEN5_OPCODE_IFF        35
833428d7b3dSmrg#define GEN5_OPCODE_ELSE       36
834428d7b3dSmrg#define GEN5_OPCODE_ENDIF      37
835428d7b3dSmrg#define GEN5_OPCODE_DO         38
836428d7b3dSmrg#define GEN5_OPCODE_WHILE      39
837428d7b3dSmrg#define GEN5_OPCODE_BREAK      40
838428d7b3dSmrg#define GEN5_OPCODE_CONTINUE   41
839428d7b3dSmrg#define GEN5_OPCODE_HALT       42
840428d7b3dSmrg#define GEN5_OPCODE_MSAVE      44
841428d7b3dSmrg#define GEN5_OPCODE_MRESTORE   45
842428d7b3dSmrg#define GEN5_OPCODE_PUSH       46
843428d7b3dSmrg#define GEN5_OPCODE_POP        47
844428d7b3dSmrg#define GEN5_OPCODE_WAIT       48
845428d7b3dSmrg#define GEN5_OPCODE_SEND       49
846428d7b3dSmrg#define GEN5_OPCODE_ADD        64
847428d7b3dSmrg#define GEN5_OPCODE_MUL        65
848428d7b3dSmrg#define GEN5_OPCODE_AVG        66
849428d7b3dSmrg#define GEN5_OPCODE_FRC        67
850428d7b3dSmrg#define GEN5_OPCODE_RNDU       68
851428d7b3dSmrg#define GEN5_OPCODE_RNDD       69
852428d7b3dSmrg#define GEN5_OPCODE_RNDE       70
853428d7b3dSmrg#define GEN5_OPCODE_RNDZ       71
854428d7b3dSmrg#define GEN5_OPCODE_MAC        72
855428d7b3dSmrg#define GEN5_OPCODE_MACH       73
856428d7b3dSmrg#define GEN5_OPCODE_LZD        74
857428d7b3dSmrg#define GEN5_OPCODE_SAD2       80
858428d7b3dSmrg#define GEN5_OPCODE_SADA2      81
859428d7b3dSmrg#define GEN5_OPCODE_DP4        84
860428d7b3dSmrg#define GEN5_OPCODE_DPH        85
861428d7b3dSmrg#define GEN5_OPCODE_DP3        86
862428d7b3dSmrg#define GEN5_OPCODE_DP2        87
863428d7b3dSmrg#define GEN5_OPCODE_DPA2       88
864428d7b3dSmrg#define GEN5_OPCODE_LINE       89
865428d7b3dSmrg#define GEN5_OPCODE_NOP        126
866428d7b3dSmrg
867428d7b3dSmrg#define GEN5_PREDICATE_NONE             0
868428d7b3dSmrg#define GEN5_PREDICATE_NORMAL           1
869428d7b3dSmrg#define GEN5_PREDICATE_ALIGN1_ANYV             2
870428d7b3dSmrg#define GEN5_PREDICATE_ALIGN1_ALLV             3
871428d7b3dSmrg#define GEN5_PREDICATE_ALIGN1_ANY2H            4
872428d7b3dSmrg#define GEN5_PREDICATE_ALIGN1_ALL2H            5
873428d7b3dSmrg#define GEN5_PREDICATE_ALIGN1_ANY4H            6
874428d7b3dSmrg#define GEN5_PREDICATE_ALIGN1_ALL4H            7
875428d7b3dSmrg#define GEN5_PREDICATE_ALIGN1_ANY8H            8
876428d7b3dSmrg#define GEN5_PREDICATE_ALIGN1_ALL8H            9
877428d7b3dSmrg#define GEN5_PREDICATE_ALIGN1_ANY16H           10
878428d7b3dSmrg#define GEN5_PREDICATE_ALIGN1_ALL16H           11
879428d7b3dSmrg#define GEN5_PREDICATE_ALIGN16_REPLICATE_X     2
880428d7b3dSmrg#define GEN5_PREDICATE_ALIGN16_REPLICATE_Y     3
881428d7b3dSmrg#define GEN5_PREDICATE_ALIGN16_REPLICATE_Z     4
882428d7b3dSmrg#define GEN5_PREDICATE_ALIGN16_REPLICATE_W     5
883428d7b3dSmrg#define GEN5_PREDICATE_ALIGN16_ANY4H           6
884428d7b3dSmrg#define GEN5_PREDICATE_ALIGN16_ALL4H           7
885428d7b3dSmrg
886428d7b3dSmrg#define GEN5_ARCHITECTURE_REGISTER_FILE    0
887428d7b3dSmrg#define GEN5_GENERAL_REGISTER_FILE         1
888428d7b3dSmrg#define GEN5_MESSAGE_REGISTER_FILE         2
889428d7b3dSmrg#define GEN5_IMMEDIATE_VALUE               3
890428d7b3dSmrg
891428d7b3dSmrg#define GEN5_REGISTER_TYPE_UD  0
892428d7b3dSmrg#define GEN5_REGISTER_TYPE_D   1
893428d7b3dSmrg#define GEN5_REGISTER_TYPE_UW  2
894428d7b3dSmrg#define GEN5_REGISTER_TYPE_W   3
895428d7b3dSmrg#define GEN5_REGISTER_TYPE_UB  4
896428d7b3dSmrg#define GEN5_REGISTER_TYPE_B   5
897428d7b3dSmrg#define GEN5_REGISTER_TYPE_VF  5	/* packed float vector, immediates only? */
898428d7b3dSmrg#define GEN5_REGISTER_TYPE_HF  6
899428d7b3dSmrg#define GEN5_REGISTER_TYPE_V   6	/* packed int vector, immediates only, uword dest only */
900428d7b3dSmrg#define GEN5_REGISTER_TYPE_F   7
901428d7b3dSmrg
902428d7b3dSmrg#define GEN5_ARF_NULL                  0x00
903428d7b3dSmrg#define GEN5_ARF_ADDRESS               0x10
904428d7b3dSmrg#define GEN5_ARF_ACCUMULATOR           0x20
905428d7b3dSmrg#define GEN5_ARF_FLAG                  0x30
906428d7b3dSmrg#define GEN5_ARF_MASK                  0x40
907428d7b3dSmrg#define GEN5_ARF_MASK_STACK            0x50
908428d7b3dSmrg#define GEN5_ARF_MASK_STACK_DEPTH      0x60
909428d7b3dSmrg#define GEN5_ARF_STATE                 0x70
910428d7b3dSmrg#define GEN5_ARF_CONTROL               0x80
911428d7b3dSmrg#define GEN5_ARF_NOTIFICATION_COUNT    0x90
912428d7b3dSmrg#define GEN5_ARF_IP                    0xA0
913428d7b3dSmrg
914428d7b3dSmrg#define GEN5_AMASK   0
915428d7b3dSmrg#define GEN5_IMASK   1
916428d7b3dSmrg#define GEN5_LMASK   2
917428d7b3dSmrg#define GEN5_CMASK   3
918428d7b3dSmrg
919428d7b3dSmrg
920428d7b3dSmrg
921428d7b3dSmrg#define GEN5_THREAD_NORMAL     0
922428d7b3dSmrg#define GEN5_THREAD_ATOMIC     1
923428d7b3dSmrg#define GEN5_THREAD_SWITCH     2
924428d7b3dSmrg
925428d7b3dSmrg#define GEN5_VERTICAL_STRIDE_0                 0
926428d7b3dSmrg#define GEN5_VERTICAL_STRIDE_1                 1
927428d7b3dSmrg#define GEN5_VERTICAL_STRIDE_2                 2
928428d7b3dSmrg#define GEN5_VERTICAL_STRIDE_4                 3
929428d7b3dSmrg#define GEN5_VERTICAL_STRIDE_8                 4
930428d7b3dSmrg#define GEN5_VERTICAL_STRIDE_16                5
931428d7b3dSmrg#define GEN5_VERTICAL_STRIDE_32                6
932428d7b3dSmrg#define GEN5_VERTICAL_STRIDE_64                7
933428d7b3dSmrg#define GEN5_VERTICAL_STRIDE_128               8
934428d7b3dSmrg#define GEN5_VERTICAL_STRIDE_256               9
935428d7b3dSmrg#define GEN5_VERTICAL_STRIDE_ONE_DIMENSIONAL   0xF
936428d7b3dSmrg
937428d7b3dSmrg#define GEN5_WIDTH_1       0
938428d7b3dSmrg#define GEN5_WIDTH_2       1
939428d7b3dSmrg#define GEN5_WIDTH_4       2
940428d7b3dSmrg#define GEN5_WIDTH_8       3
941428d7b3dSmrg#define GEN5_WIDTH_16      4
942428d7b3dSmrg
943428d7b3dSmrg#define GEN5_STATELESS_BUFFER_BOUNDARY_1K      0
944428d7b3dSmrg#define GEN5_STATELESS_BUFFER_BOUNDARY_2K      1
945428d7b3dSmrg#define GEN5_STATELESS_BUFFER_BOUNDARY_4K      2
946428d7b3dSmrg#define GEN5_STATELESS_BUFFER_BOUNDARY_8K      3
947428d7b3dSmrg#define GEN5_STATELESS_BUFFER_BOUNDARY_16K     4
948428d7b3dSmrg#define GEN5_STATELESS_BUFFER_BOUNDARY_32K     5
949428d7b3dSmrg#define GEN5_STATELESS_BUFFER_BOUNDARY_64K     6
950428d7b3dSmrg#define GEN5_STATELESS_BUFFER_BOUNDARY_128K    7
951428d7b3dSmrg#define GEN5_STATELESS_BUFFER_BOUNDARY_256K    8
952428d7b3dSmrg#define GEN5_STATELESS_BUFFER_BOUNDARY_512K    9
953428d7b3dSmrg#define GEN5_STATELESS_BUFFER_BOUNDARY_1M      10
954428d7b3dSmrg#define GEN5_STATELESS_BUFFER_BOUNDARY_2M      11
955428d7b3dSmrg
956428d7b3dSmrg#define GEN5_POLYGON_FACING_FRONT      0
957428d7b3dSmrg#define GEN5_POLYGON_FACING_BACK       1
958428d7b3dSmrg
959428d7b3dSmrg#define GEN5_MESSAGE_TARGET_NULL               0
960428d7b3dSmrg#define GEN5_MESSAGE_TARGET_MATH               1
961428d7b3dSmrg#define GEN5_MESSAGE_TARGET_SAMPLER            2
962428d7b3dSmrg#define GEN5_MESSAGE_TARGET_GATEWAY            3
963428d7b3dSmrg#define GEN5_MESSAGE_TARGET_DATAPORT_READ      4
964428d7b3dSmrg#define GEN5_MESSAGE_TARGET_DATAPORT_WRITE     5
965428d7b3dSmrg#define GEN5_MESSAGE_TARGET_URB                6
966428d7b3dSmrg#define GEN5_MESSAGE_TARGET_THREAD_SPAWNER     7
967428d7b3dSmrg
968428d7b3dSmrg#define GEN5_SAMPLER_RETURN_FORMAT_FLOAT32     0
969428d7b3dSmrg#define GEN5_SAMPLER_RETURN_FORMAT_UINT32      2
970428d7b3dSmrg#define GEN5_SAMPLER_RETURN_FORMAT_SINT32      3
971428d7b3dSmrg
972428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD8_SAMPLE              0
973428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD16_SAMPLE             0
974428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS        0
975428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD8_KILLPIX             1
976428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_LOD        1
977428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD16_SAMPLE_LOD         1
978428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_GRADIENTS  2
979428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD8_SAMPLE_GRADIENTS    2
980428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_COMPARE    0
981428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD16_SAMPLE_COMPARE     2
982428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD4X2_RESINFO           2
983428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD8_RESINFO             2
984428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD16_RESINFO            2
985428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD4X2_LD                3
986428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD8_LD                  3
987428d7b3dSmrg#define GEN5_SAMPLER_MESSAGE_SIMD16_LD                 3
988428d7b3dSmrg
989428d7b3dSmrg#define GEN5_DATAPORT_OWORD_BLOCK_1_OWORDLOW   0
990428d7b3dSmrg#define GEN5_DATAPORT_OWORD_BLOCK_1_OWORDHIGH  1
991428d7b3dSmrg#define GEN5_DATAPORT_OWORD_BLOCK_2_OWORDS     2
992428d7b3dSmrg#define GEN5_DATAPORT_OWORD_BLOCK_4_OWORDS     3
993428d7b3dSmrg#define GEN5_DATAPORT_OWORD_BLOCK_8_OWORDS     4
994428d7b3dSmrg
995428d7b3dSmrg#define GEN5_DATAPORT_OWORD_DUAL_BLOCK_1OWORD     0
996428d7b3dSmrg#define GEN5_DATAPORT_OWORD_DUAL_BLOCK_4OWORDS    2
997428d7b3dSmrg
998428d7b3dSmrg#define GEN5_DATAPORT_DWORD_SCATTERED_BLOCK_8DWORDS   2
999428d7b3dSmrg#define GEN5_DATAPORT_DWORD_SCATTERED_BLOCK_16DWORDS  3
1000428d7b3dSmrg
1001428d7b3dSmrg#define GEN5_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ          0
1002428d7b3dSmrg#define GEN5_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ     1
1003428d7b3dSmrg#define GEN5_DATAPORT_READ_MESSAGE_DWORD_BLOCK_READ          2
1004428d7b3dSmrg#define GEN5_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ      3
1005428d7b3dSmrg
1006428d7b3dSmrg#define GEN5_DATAPORT_READ_TARGET_DATA_CACHE      0
1007428d7b3dSmrg#define GEN5_DATAPORT_READ_TARGET_RENDER_CACHE    1
1008428d7b3dSmrg#define GEN5_DATAPORT_READ_TARGET_SAMPLER_CACHE   2
1009428d7b3dSmrg
1010428d7b3dSmrg#define GEN5_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE                0
1011428d7b3dSmrg#define GEN5_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE_REPLICATED     1
1012428d7b3dSmrg#define GEN5_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN01         2
1013428d7b3dSmrg#define GEN5_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN23         3
1014428d7b3dSmrg#define GEN5_DATAPORT_RENDER_TARGET_WRITE_SIMD8_SINGLE_SOURCE_SUBSPAN01       4
1015428d7b3dSmrg
1016428d7b3dSmrg#define GEN5_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE                0
1017428d7b3dSmrg#define GEN5_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE           1
1018428d7b3dSmrg#define GEN5_DATAPORT_WRITE_MESSAGE_DWORD_BLOCK_WRITE                2
1019428d7b3dSmrg#define GEN5_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE            3
1020428d7b3dSmrg#define GEN5_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE              4
1021428d7b3dSmrg#define GEN5_DATAPORT_WRITE_MESSAGE_STREAMED_VERTEX_BUFFER_WRITE     5
1022428d7b3dSmrg#define GEN5_DATAPORT_WRITE_MESSAGE_FLUSH_RENDER_CACHE               7
1023428d7b3dSmrg
1024428d7b3dSmrg#define GEN5_MATH_FUNCTION_INV                              1
1025428d7b3dSmrg#define GEN5_MATH_FUNCTION_LOG                              2
1026428d7b3dSmrg#define GEN5_MATH_FUNCTION_EXP                              3
1027428d7b3dSmrg#define GEN5_MATH_FUNCTION_SQRT                             4
1028428d7b3dSmrg#define GEN5_MATH_FUNCTION_RSQ                              5
1029428d7b3dSmrg#define GEN5_MATH_FUNCTION_SIN                              6 /* was 7 */
1030428d7b3dSmrg#define GEN5_MATH_FUNCTION_COS                              7 /* was 8 */
1031428d7b3dSmrg#define GEN5_MATH_FUNCTION_SINCOS                           8 /* was 6 */
1032428d7b3dSmrg#define GEN5_MATH_FUNCTION_TAN                              9
1033428d7b3dSmrg#define GEN5_MATH_FUNCTION_POW                              10
1034428d7b3dSmrg#define GEN5_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER   11
1035428d7b3dSmrg#define GEN5_MATH_FUNCTION_INT_DIV_QUOTIENT                 12
1036428d7b3dSmrg#define GEN5_MATH_FUNCTION_INT_DIV_REMAINDER                13
1037428d7b3dSmrg
1038428d7b3dSmrg#define GEN5_MATH_INTEGER_UNSIGNED     0
1039428d7b3dSmrg#define GEN5_MATH_INTEGER_SIGNED       1
1040428d7b3dSmrg
1041428d7b3dSmrg#define GEN5_MATH_PRECISION_FULL        0
1042428d7b3dSmrg#define GEN5_MATH_PRECISION_PARTIAL     1
1043428d7b3dSmrg
1044428d7b3dSmrg#define GEN5_MATH_SATURATE_NONE         0
1045428d7b3dSmrg#define GEN5_MATH_SATURATE_SATURATE     1
1046428d7b3dSmrg
1047428d7b3dSmrg#define GEN5_MATH_DATA_VECTOR  0
1048428d7b3dSmrg#define GEN5_MATH_DATA_SCALAR  1
1049428d7b3dSmrg
1050428d7b3dSmrg#define GEN5_URB_OPCODE_WRITE  0
1051428d7b3dSmrg
1052428d7b3dSmrg#define GEN5_URB_SWIZZLE_NONE          0
1053428d7b3dSmrg#define GEN5_URB_SWIZZLE_INTERLEAVE    1
1054428d7b3dSmrg#define GEN5_URB_SWIZZLE_TRANSPOSE     2
1055428d7b3dSmrg
1056428d7b3dSmrg#define GEN5_SCRATCH_SPACE_SIZE_1K     0
1057428d7b3dSmrg#define GEN5_SCRATCH_SPACE_SIZE_2K     1
1058428d7b3dSmrg#define GEN5_SCRATCH_SPACE_SIZE_4K     2
1059428d7b3dSmrg#define GEN5_SCRATCH_SPACE_SIZE_8K     3
1060428d7b3dSmrg#define GEN5_SCRATCH_SPACE_SIZE_16K    4
1061428d7b3dSmrg#define GEN5_SCRATCH_SPACE_SIZE_32K    5
1062428d7b3dSmrg#define GEN5_SCRATCH_SPACE_SIZE_64K    6
1063428d7b3dSmrg#define GEN5_SCRATCH_SPACE_SIZE_128K   7
1064428d7b3dSmrg#define GEN5_SCRATCH_SPACE_SIZE_256K   8
1065428d7b3dSmrg#define GEN5_SCRATCH_SPACE_SIZE_512K   9
1066428d7b3dSmrg#define GEN5_SCRATCH_SPACE_SIZE_1M     10
1067428d7b3dSmrg#define GEN5_SCRATCH_SPACE_SIZE_2M     11
1068428d7b3dSmrg
1069428d7b3dSmrg
1070428d7b3dSmrg
1071428d7b3dSmrg
1072428d7b3dSmrg#define CMD_URB_FENCE                 0x6000
1073428d7b3dSmrg#define CMD_CONST_BUFFER_STATE        0x6001
1074428d7b3dSmrg#define CMD_CONST_BUFFER              0x6002
1075428d7b3dSmrg
1076428d7b3dSmrg#define CMD_STATE_BASE_ADDRESS        0x6101
1077428d7b3dSmrg#define CMD_STATE_INSN_POINTER        0x6102
1078428d7b3dSmrg#define CMD_PIPELINE_SELECT           0x6104
1079428d7b3dSmrg
1080428d7b3dSmrg#define CMD_PIPELINED_STATE_POINTERS  0x7800
1081428d7b3dSmrg#define CMD_BINDING_TABLE_PTRS        0x7801
1082428d7b3dSmrg#define CMD_VERTEX_BUFFER             0x7808
1083428d7b3dSmrg#define CMD_VERTEX_ELEMENT            0x7809
1084428d7b3dSmrg#define CMD_INDEX_BUFFER              0x780a
1085428d7b3dSmrg#define CMD_VF_STATISTICS             0x780b
1086428d7b3dSmrg
1087428d7b3dSmrg#define CMD_DRAW_RECT                 0x7900
1088428d7b3dSmrg#define CMD_BLEND_CONSTANT_COLOR      0x7901
1089428d7b3dSmrg#define CMD_CHROMA_KEY                0x7904
1090428d7b3dSmrg#define CMD_DEPTH_BUFFER              0x7905
1091428d7b3dSmrg#define CMD_POLY_STIPPLE_OFFSET       0x7906
1092428d7b3dSmrg#define CMD_POLY_STIPPLE_PATTERN      0x7907
1093428d7b3dSmrg#define CMD_LINE_STIPPLE_PATTERN      0x7908
1094428d7b3dSmrg#define CMD_GLOBAL_DEPTH_OFFSET_CLAMP 0x7908
1095428d7b3dSmrg
1096428d7b3dSmrg#define CMD_PIPE_CONTROL              0x7a00
1097428d7b3dSmrg
1098428d7b3dSmrg#define CMD_3D_PRIM                   0x7b00
1099428d7b3dSmrg
1100428d7b3dSmrg#define CMD_MI_FLUSH                  0x0200
1101428d7b3dSmrg
1102428d7b3dSmrg
1103428d7b3dSmrg/* Various values from the R0 vertex header:
1104428d7b3dSmrg */
1105428d7b3dSmrg#define R02_PRIM_END    0x1
1106428d7b3dSmrg#define R02_PRIM_START  0x2
1107428d7b3dSmrg
1108428d7b3dSmrg/* media pipeline */
1109428d7b3dSmrg
1110428d7b3dSmrg#define GEN5_VFE_MODE_GENERIC		0x0
1111428d7b3dSmrg#define GEN5_VFE_MODE_VLD_MPEG2		0x1
1112428d7b3dSmrg#define GEN5_VFE_MODE_IS			0x2
1113428d7b3dSmrg#define GEN5_VFE_MODE_AVC_MC		0x4
1114428d7b3dSmrg#define GEN5_VFE_MODE_AVC_IT		0x7
1115428d7b3dSmrg#define GEN5_VFE_MODE_VC1_IT		0xB
1116428d7b3dSmrg
1117428d7b3dSmrg#define GEN5_VFE_DEBUG_COUNTER_FREE	0
1118428d7b3dSmrg#define GEN5_VFE_DEBUG_COUNTER_FROZEN	1
1119428d7b3dSmrg#define GEN5_VFE_DEBUG_COUNTER_ONCE	2
1120428d7b3dSmrg#define GEN5_VFE_DEBUG_COUNTER_ALWAYS	3
1121428d7b3dSmrg
1122428d7b3dSmrg/* VLD_STATE */
1123428d7b3dSmrg#define GEN5_MPEG_TOP_FIELD		1
1124428d7b3dSmrg#define GEN5_MPEG_BOTTOM_FIELD		2
1125428d7b3dSmrg#define GEN5_MPEG_FRAME			3
1126428d7b3dSmrg#define GEN5_MPEG_QSCALE_LINEAR		0
1127428d7b3dSmrg#define GEN5_MPEG_QSCALE_NONLINEAR	1
1128428d7b3dSmrg#define GEN5_MPEG_ZIGZAG_SCAN		0
1129428d7b3dSmrg#define GEN5_MPEG_ALTER_VERTICAL_SCAN	1
1130428d7b3dSmrg#define GEN5_MPEG_I_PICTURE		1
1131428d7b3dSmrg#define GEN5_MPEG_P_PICTURE		2
1132428d7b3dSmrg#define GEN5_MPEG_B_PICTURE		3
1133428d7b3dSmrg
1134428d7b3dSmrg/* Command packets:
1135428d7b3dSmrg */
1136428d7b3dSmrgstruct header
1137428d7b3dSmrg{
1138428d7b3dSmrg   unsigned int length:16;
1139428d7b3dSmrg   unsigned int opcode:16;
1140428d7b3dSmrg};
1141428d7b3dSmrg
1142428d7b3dSmrg
1143428d7b3dSmrgunion header_union
1144428d7b3dSmrg{
1145428d7b3dSmrg   struct header bits;
1146428d7b3dSmrg   unsigned int dword;
1147428d7b3dSmrg};
1148428d7b3dSmrg
1149428d7b3dSmrgstruct gen5_3d_control
1150428d7b3dSmrg{
1151428d7b3dSmrg   struct
1152428d7b3dSmrg   {
1153428d7b3dSmrg      unsigned int length:8;
1154428d7b3dSmrg      unsigned int notify_enable:1;
1155428d7b3dSmrg      unsigned int pad:3;
1156428d7b3dSmrg      unsigned int wc_flush_enable:1;
1157428d7b3dSmrg      unsigned int depth_stall_enable:1;
1158428d7b3dSmrg      unsigned int operation:2;
1159428d7b3dSmrg      unsigned int opcode:16;
1160428d7b3dSmrg   } header;
1161428d7b3dSmrg
1162428d7b3dSmrg   struct
1163428d7b3dSmrg   {
1164428d7b3dSmrg      unsigned int pad:2;
1165428d7b3dSmrg      unsigned int dest_addr_type:1;
1166428d7b3dSmrg      unsigned int dest_addr:29;
1167428d7b3dSmrg   } dest;
1168428d7b3dSmrg
1169428d7b3dSmrg   unsigned int dword2;
1170428d7b3dSmrg   unsigned int dword3;
1171428d7b3dSmrg};
1172428d7b3dSmrg
1173428d7b3dSmrg
1174428d7b3dSmrgstruct gen5_3d_primitive
1175428d7b3dSmrg{
1176428d7b3dSmrg   struct
1177428d7b3dSmrg   {
1178428d7b3dSmrg      unsigned int length:8;
1179428d7b3dSmrg      unsigned int pad:2;
1180428d7b3dSmrg      unsigned int topology:5;
1181428d7b3dSmrg      unsigned int indexed:1;
1182428d7b3dSmrg      unsigned int opcode:16;
1183428d7b3dSmrg   } header;
1184428d7b3dSmrg
1185428d7b3dSmrg   unsigned int verts_per_instance;
1186428d7b3dSmrg   unsigned int start_vert_location;
1187428d7b3dSmrg   unsigned int instance_count;
1188428d7b3dSmrg   unsigned int start_instance_location;
1189428d7b3dSmrg   unsigned int base_vert_location;
1190428d7b3dSmrg};
1191428d7b3dSmrg
1192428d7b3dSmrg/* These seem to be passed around as function args, so it works out
1193428d7b3dSmrg * better to keep them as #defines:
1194428d7b3dSmrg */
1195428d7b3dSmrg#define GEN5_FLUSH_READ_CACHE           0x1
1196428d7b3dSmrg#define GEN5_FLUSH_STATE_CACHE          0x2
1197428d7b3dSmrg#define GEN5_INHIBIT_FLUSH_RENDER_CACHE 0x4
1198428d7b3dSmrg#define GEN5_FLUSH_SNAPSHOT_COUNTERS    0x8
1199428d7b3dSmrg
1200428d7b3dSmrgstruct gen5_mi_flush
1201428d7b3dSmrg{
1202428d7b3dSmrg   unsigned int flags:4;
1203428d7b3dSmrg   unsigned int pad:12;
1204428d7b3dSmrg   unsigned int opcode:16;
1205428d7b3dSmrg};
1206428d7b3dSmrg
1207428d7b3dSmrgstruct gen5_vf_statistics
1208428d7b3dSmrg{
1209428d7b3dSmrg   unsigned int statistics_enable:1;
1210428d7b3dSmrg   unsigned int pad:15;
1211428d7b3dSmrg   unsigned int opcode:16;
1212428d7b3dSmrg};
1213428d7b3dSmrg
1214428d7b3dSmrg
1215428d7b3dSmrg
1216428d7b3dSmrgstruct gen5_binding_table_pointers
1217428d7b3dSmrg{
1218428d7b3dSmrg   struct header header;
1219428d7b3dSmrg   unsigned int vs;
1220428d7b3dSmrg   unsigned int gs;
1221428d7b3dSmrg   unsigned int clp;
1222428d7b3dSmrg   unsigned int sf;
1223428d7b3dSmrg   unsigned int wm;
1224428d7b3dSmrg};
1225428d7b3dSmrg
1226428d7b3dSmrg
1227428d7b3dSmrgstruct gen5_blend_constant_color
1228428d7b3dSmrg{
1229428d7b3dSmrg   struct header header;
1230428d7b3dSmrg   float blend_constant_color[4];
1231428d7b3dSmrg};
1232428d7b3dSmrg
1233428d7b3dSmrg
1234428d7b3dSmrgstruct gen5_depthbuffer
1235428d7b3dSmrg{
1236428d7b3dSmrg   union header_union header;
1237428d7b3dSmrg
1238428d7b3dSmrg   union {
1239428d7b3dSmrg      struct {
1240428d7b3dSmrg	 unsigned int pitch:18;
1241428d7b3dSmrg	 unsigned int format:3;
1242428d7b3dSmrg	 unsigned int pad:4;
1243428d7b3dSmrg	 unsigned int depth_offset_disable:1;
1244428d7b3dSmrg	 unsigned int tile_walk:1;
1245428d7b3dSmrg	 unsigned int tiled_surface:1;
1246428d7b3dSmrg	 unsigned int pad2:1;
1247428d7b3dSmrg	 unsigned int surface_type:3;
1248428d7b3dSmrg      } bits;
1249428d7b3dSmrg      unsigned int dword;
1250428d7b3dSmrg   } dword1;
1251428d7b3dSmrg
1252428d7b3dSmrg   unsigned int dword2_base_addr;
1253428d7b3dSmrg
1254428d7b3dSmrg   union {
1255428d7b3dSmrg      struct {
1256428d7b3dSmrg	 unsigned int pad:1;
1257428d7b3dSmrg	 unsigned int mipmap_layout:1;
1258428d7b3dSmrg	 unsigned int lod:4;
1259428d7b3dSmrg	 unsigned int width:13;
1260428d7b3dSmrg	 unsigned int height:13;
1261428d7b3dSmrg      } bits;
1262428d7b3dSmrg      unsigned int dword;
1263428d7b3dSmrg   } dword3;
1264428d7b3dSmrg
1265428d7b3dSmrg   union {
1266428d7b3dSmrg      struct {
1267428d7b3dSmrg	 unsigned int pad:12;
1268428d7b3dSmrg	 unsigned int min_array_element:9;
1269428d7b3dSmrg	 unsigned int depth:11;
1270428d7b3dSmrg      } bits;
1271428d7b3dSmrg      unsigned int dword;
1272428d7b3dSmrg   } dword4;
1273428d7b3dSmrg};
1274428d7b3dSmrg
1275428d7b3dSmrgstruct gen5_drawrect
1276428d7b3dSmrg{
1277428d7b3dSmrg   struct header header;
1278428d7b3dSmrg   unsigned int xmin:16;
1279428d7b3dSmrg   unsigned int ymin:16;
1280428d7b3dSmrg   unsigned int xmax:16;
1281428d7b3dSmrg   unsigned int ymax:16;
1282428d7b3dSmrg   unsigned int xorg:16;
1283428d7b3dSmrg   unsigned int yorg:16;
1284428d7b3dSmrg};
1285428d7b3dSmrg
1286428d7b3dSmrg
1287428d7b3dSmrg
1288428d7b3dSmrg
1289428d7b3dSmrgstruct gen5_global_depth_offset_clamp
1290428d7b3dSmrg{
1291428d7b3dSmrg   struct header header;
1292428d7b3dSmrg   float depth_offset_clamp;
1293428d7b3dSmrg};
1294428d7b3dSmrg
1295428d7b3dSmrgstruct gen5_indexbuffer
1296428d7b3dSmrg{
1297428d7b3dSmrg   union {
1298428d7b3dSmrg      struct
1299428d7b3dSmrg      {
1300428d7b3dSmrg	 unsigned int length:8;
1301428d7b3dSmrg	 unsigned int index_format:2;
1302428d7b3dSmrg	 unsigned int cut_index_enable:1;
1303428d7b3dSmrg	 unsigned int pad:5;
1304428d7b3dSmrg	 unsigned int opcode:16;
1305428d7b3dSmrg      } bits;
1306428d7b3dSmrg      unsigned int dword;
1307428d7b3dSmrg
1308428d7b3dSmrg   } header;
1309428d7b3dSmrg
1310428d7b3dSmrg   unsigned int buffer_start;
1311428d7b3dSmrg   unsigned int buffer_end;
1312428d7b3dSmrg};
1313428d7b3dSmrg
1314428d7b3dSmrg
1315428d7b3dSmrgstruct gen5_line_stipple
1316428d7b3dSmrg{
1317428d7b3dSmrg   struct header header;
1318428d7b3dSmrg
1319428d7b3dSmrg   struct
1320428d7b3dSmrg   {
1321428d7b3dSmrg      unsigned int pattern:16;
1322428d7b3dSmrg      unsigned int pad:16;
1323428d7b3dSmrg   } bits0;
1324428d7b3dSmrg
1325428d7b3dSmrg   struct
1326428d7b3dSmrg   {
1327428d7b3dSmrg      unsigned int repeat_count:9;
1328428d7b3dSmrg      unsigned int pad:7;
1329428d7b3dSmrg      unsigned int inverse_repeat_count:16;
1330428d7b3dSmrg   } bits1;
1331428d7b3dSmrg};
1332428d7b3dSmrg
1333428d7b3dSmrg
1334428d7b3dSmrgstruct gen5_pipelined_state_pointers
1335428d7b3dSmrg{
1336428d7b3dSmrg   struct header header;
1337428d7b3dSmrg
1338428d7b3dSmrg   struct {
1339428d7b3dSmrg      unsigned int pad:5;
1340428d7b3dSmrg      unsigned int offset:27;
1341428d7b3dSmrg   } vs;
1342428d7b3dSmrg
1343428d7b3dSmrg   struct
1344428d7b3dSmrg   {
1345428d7b3dSmrg      unsigned int enable:1;
1346428d7b3dSmrg      unsigned int pad:4;
1347428d7b3dSmrg      unsigned int offset:27;
1348428d7b3dSmrg   } gs;
1349428d7b3dSmrg
1350428d7b3dSmrg   struct
1351428d7b3dSmrg   {
1352428d7b3dSmrg      unsigned int enable:1;
1353428d7b3dSmrg      unsigned int pad:4;
1354428d7b3dSmrg      unsigned int offset:27;
1355428d7b3dSmrg   } clp;
1356428d7b3dSmrg
1357428d7b3dSmrg   struct
1358428d7b3dSmrg   {
1359428d7b3dSmrg      unsigned int pad:5;
1360428d7b3dSmrg      unsigned int offset:27;
1361428d7b3dSmrg   } sf;
1362428d7b3dSmrg
1363428d7b3dSmrg   struct
1364428d7b3dSmrg   {
1365428d7b3dSmrg      unsigned int pad:5;
1366428d7b3dSmrg      unsigned int offset:27;
1367428d7b3dSmrg   } wm;
1368428d7b3dSmrg
1369428d7b3dSmrg   struct
1370428d7b3dSmrg   {
1371428d7b3dSmrg      unsigned int pad:5;
1372428d7b3dSmrg      unsigned int offset:27; /* KW: check me! */
1373428d7b3dSmrg   } cc;
1374428d7b3dSmrg};
1375428d7b3dSmrg
1376428d7b3dSmrg
1377428d7b3dSmrgstruct gen5_polygon_stipple_offset
1378428d7b3dSmrg{
1379428d7b3dSmrg   struct header header;
1380428d7b3dSmrg
1381428d7b3dSmrg   struct {
1382428d7b3dSmrg      unsigned int y_offset:5;
1383428d7b3dSmrg      unsigned int pad:3;
1384428d7b3dSmrg      unsigned int x_offset:5;
1385428d7b3dSmrg      unsigned int pad0:19;
1386428d7b3dSmrg   } bits0;
1387428d7b3dSmrg};
1388428d7b3dSmrg
1389428d7b3dSmrg
1390428d7b3dSmrg
1391428d7b3dSmrgstruct gen5_polygon_stipple
1392428d7b3dSmrg{
1393428d7b3dSmrg   struct header header;
1394428d7b3dSmrg   unsigned int stipple[32];
1395428d7b3dSmrg};
1396428d7b3dSmrg
1397428d7b3dSmrg
1398428d7b3dSmrg
1399428d7b3dSmrgstruct gen5_pipeline_select
1400428d7b3dSmrg{
1401428d7b3dSmrg   struct
1402428d7b3dSmrg   {
1403428d7b3dSmrg      unsigned int pipeline_select:1;
1404428d7b3dSmrg      unsigned int pad:15;
1405428d7b3dSmrg      unsigned int opcode:16;
1406428d7b3dSmrg   } header;
1407428d7b3dSmrg};
1408428d7b3dSmrg
1409428d7b3dSmrg
1410428d7b3dSmrgstruct gen5_pipe_control
1411428d7b3dSmrg{
1412428d7b3dSmrg   struct
1413428d7b3dSmrg   {
1414428d7b3dSmrg      unsigned int length:8;
1415428d7b3dSmrg      unsigned int notify_enable:1;
1416428d7b3dSmrg      unsigned int pad:2;
1417428d7b3dSmrg      unsigned int instruction_state_cache_flush_enable:1;
1418428d7b3dSmrg      unsigned int write_cache_flush_enable:1;
1419428d7b3dSmrg      unsigned int depth_stall_enable:1;
1420428d7b3dSmrg      unsigned int post_sync_operation:2;
1421428d7b3dSmrg
1422428d7b3dSmrg      unsigned int opcode:16;
1423428d7b3dSmrg   } header;
1424428d7b3dSmrg
1425428d7b3dSmrg   struct
1426428d7b3dSmrg   {
1427428d7b3dSmrg      unsigned int pad:2;
1428428d7b3dSmrg      unsigned int dest_addr_type:1;
1429428d7b3dSmrg      unsigned int dest_addr:29;
1430428d7b3dSmrg   } bits1;
1431428d7b3dSmrg
1432428d7b3dSmrg   unsigned int data0;
1433428d7b3dSmrg   unsigned int data1;
1434428d7b3dSmrg};
1435428d7b3dSmrg
1436428d7b3dSmrg
1437428d7b3dSmrgstruct gen5_urb_fence
1438428d7b3dSmrg{
1439428d7b3dSmrg   struct
1440428d7b3dSmrg   {
1441428d7b3dSmrg      unsigned int length:8;
1442428d7b3dSmrg      unsigned int vs_realloc:1;
1443428d7b3dSmrg      unsigned int gs_realloc:1;
1444428d7b3dSmrg      unsigned int clp_realloc:1;
1445428d7b3dSmrg      unsigned int sf_realloc:1;
1446428d7b3dSmrg      unsigned int vfe_realloc:1;
1447428d7b3dSmrg      unsigned int cs_realloc:1;
1448428d7b3dSmrg      unsigned int pad:2;
1449428d7b3dSmrg      unsigned int opcode:16;
1450428d7b3dSmrg   } header;
1451428d7b3dSmrg
1452428d7b3dSmrg   struct
1453428d7b3dSmrg   {
1454428d7b3dSmrg      unsigned int vs_fence:10;
1455428d7b3dSmrg      unsigned int gs_fence:10;
1456428d7b3dSmrg      unsigned int clp_fence:10;
1457428d7b3dSmrg      unsigned int pad:2;
1458428d7b3dSmrg   } bits0;
1459428d7b3dSmrg
1460428d7b3dSmrg   struct
1461428d7b3dSmrg   {
1462428d7b3dSmrg      unsigned int sf_fence:10;
1463428d7b3dSmrg      unsigned int vf_fence:10;
1464428d7b3dSmrg      unsigned int cs_fence:10;
1465428d7b3dSmrg      unsigned int pad:2;
1466428d7b3dSmrg   } bits1;
1467428d7b3dSmrg};
1468428d7b3dSmrg
1469428d7b3dSmrgstruct gen5_constant_buffer_state /* previously gen5_command_streamer */
1470428d7b3dSmrg{
1471428d7b3dSmrg   struct header header;
1472428d7b3dSmrg
1473428d7b3dSmrg   struct
1474428d7b3dSmrg   {
1475428d7b3dSmrg      unsigned int nr_urb_entries:3;
1476428d7b3dSmrg      unsigned int pad:1;
1477428d7b3dSmrg      unsigned int urb_entry_size:5;
1478428d7b3dSmrg      unsigned int pad0:23;
1479428d7b3dSmrg   } bits0;
1480428d7b3dSmrg};
1481428d7b3dSmrg
1482428d7b3dSmrgstruct gen5_constant_buffer
1483428d7b3dSmrg{
1484428d7b3dSmrg   struct
1485428d7b3dSmrg   {
1486428d7b3dSmrg      unsigned int length:8;
1487428d7b3dSmrg      unsigned int valid:1;
1488428d7b3dSmrg      unsigned int pad:7;
1489428d7b3dSmrg      unsigned int opcode:16;
1490428d7b3dSmrg   } header;
1491428d7b3dSmrg
1492428d7b3dSmrg   struct
1493428d7b3dSmrg   {
1494428d7b3dSmrg      unsigned int buffer_length:6;
1495428d7b3dSmrg      unsigned int buffer_address:26;
1496428d7b3dSmrg   } bits0;
1497428d7b3dSmrg};
1498428d7b3dSmrg
1499428d7b3dSmrgstruct gen5_state_base_address
1500428d7b3dSmrg{
1501428d7b3dSmrg   struct header header;
1502428d7b3dSmrg
1503428d7b3dSmrg   struct
1504428d7b3dSmrg   {
1505428d7b3dSmrg      unsigned int modify_enable:1;
1506428d7b3dSmrg      unsigned int pad:4;
1507428d7b3dSmrg      unsigned int general_state_address:27;
1508428d7b3dSmrg   } bits0;
1509428d7b3dSmrg
1510428d7b3dSmrg   struct
1511428d7b3dSmrg   {
1512428d7b3dSmrg      unsigned int modify_enable:1;
1513428d7b3dSmrg      unsigned int pad:4;
1514428d7b3dSmrg      unsigned int surface_state_address:27;
1515428d7b3dSmrg   } bits1;
1516428d7b3dSmrg
1517428d7b3dSmrg   struct
1518428d7b3dSmrg   {
1519428d7b3dSmrg      unsigned int modify_enable:1;
1520428d7b3dSmrg      unsigned int pad:4;
1521428d7b3dSmrg      unsigned int indirect_object_state_address:27;
1522428d7b3dSmrg   } bits2;
1523428d7b3dSmrg
1524428d7b3dSmrg   struct
1525428d7b3dSmrg   {
1526428d7b3dSmrg      unsigned int modify_enable:1;
1527428d7b3dSmrg      unsigned int pad:11;
1528428d7b3dSmrg      unsigned int general_state_upper_bound:20;
1529428d7b3dSmrg   } bits3;
1530428d7b3dSmrg
1531428d7b3dSmrg   struct
1532428d7b3dSmrg   {
1533428d7b3dSmrg      unsigned int modify_enable:1;
1534428d7b3dSmrg      unsigned int pad:11;
1535428d7b3dSmrg      unsigned int indirect_object_state_upper_bound:20;
1536428d7b3dSmrg   } bits4;
1537428d7b3dSmrg};
1538428d7b3dSmrg
1539428d7b3dSmrgstruct gen5_state_prefetch
1540428d7b3dSmrg{
1541428d7b3dSmrg   struct header header;
1542428d7b3dSmrg
1543428d7b3dSmrg   struct
1544428d7b3dSmrg   {
1545428d7b3dSmrg      unsigned int prefetch_count:3;
1546428d7b3dSmrg      unsigned int pad:3;
1547428d7b3dSmrg      unsigned int prefetch_pointer:26;
1548428d7b3dSmrg   } bits0;
1549428d7b3dSmrg};
1550428d7b3dSmrg
1551428d7b3dSmrgstruct gen5_system_instruction_pointer
1552428d7b3dSmrg{
1553428d7b3dSmrg   struct header header;
1554428d7b3dSmrg
1555428d7b3dSmrg   struct
1556428d7b3dSmrg   {
1557428d7b3dSmrg      unsigned int pad:4;
1558428d7b3dSmrg      unsigned int system_instruction_pointer:28;
1559428d7b3dSmrg   } bits0;
1560428d7b3dSmrg};
1561428d7b3dSmrg
1562428d7b3dSmrg
1563428d7b3dSmrg
1564428d7b3dSmrg
1565428d7b3dSmrg/* State structs for the various fixed function units:
1566428d7b3dSmrg */
1567428d7b3dSmrg
1568428d7b3dSmrg
1569428d7b3dSmrgstruct thread0
1570428d7b3dSmrg{
1571428d7b3dSmrg   unsigned int pad0:1;
1572428d7b3dSmrg   unsigned int grf_reg_count:3;
1573428d7b3dSmrg   unsigned int pad1:2;
1574428d7b3dSmrg   unsigned int kernel_start_pointer:26;
1575428d7b3dSmrg};
1576428d7b3dSmrg
1577428d7b3dSmrgstruct thread1
1578428d7b3dSmrg{
1579428d7b3dSmrg   unsigned int ext_halt_exception_enable:1;
1580428d7b3dSmrg   unsigned int sw_exception_enable:1;
1581428d7b3dSmrg   unsigned int mask_stack_exception_enable:1;
1582428d7b3dSmrg   unsigned int timeout_exception_enable:1;
1583428d7b3dSmrg   unsigned int illegal_op_exception_enable:1;
1584428d7b3dSmrg   unsigned int pad0:3;
1585428d7b3dSmrg   unsigned int depth_coef_urb_read_offset:6;	/* WM only */
1586428d7b3dSmrg   unsigned int pad1:2;
1587428d7b3dSmrg   unsigned int floating_point_mode:1;
1588428d7b3dSmrg   unsigned int thread_priority:1;
1589428d7b3dSmrg   unsigned int binding_table_entry_count:8;
1590428d7b3dSmrg   unsigned int pad3:5;
1591428d7b3dSmrg   unsigned int single_program_flow:1;
1592428d7b3dSmrg};
1593428d7b3dSmrg
1594428d7b3dSmrgstruct thread2
1595428d7b3dSmrg{
1596428d7b3dSmrg   unsigned int per_thread_scratch_space:4;
1597428d7b3dSmrg   unsigned int pad0:6;
1598428d7b3dSmrg   unsigned int scratch_space_base_pointer:22;
1599428d7b3dSmrg};
1600428d7b3dSmrg
1601428d7b3dSmrg
1602428d7b3dSmrgstruct thread3
1603428d7b3dSmrg{
1604428d7b3dSmrg   unsigned int dispatch_grf_start_reg:4;
1605428d7b3dSmrg   unsigned int urb_entry_read_offset:6;
1606428d7b3dSmrg   unsigned int pad0:1;
1607428d7b3dSmrg   unsigned int urb_entry_read_length:6;
1608428d7b3dSmrg   unsigned int pad1:1;
1609428d7b3dSmrg   unsigned int const_urb_entry_read_offset:6;
1610428d7b3dSmrg   unsigned int pad2:1;
1611428d7b3dSmrg   unsigned int const_urb_entry_read_length:6;
1612428d7b3dSmrg   unsigned int pad3:1;
1613428d7b3dSmrg};
1614428d7b3dSmrg
1615428d7b3dSmrg
1616428d7b3dSmrg
1617428d7b3dSmrgstruct gen5_clip_unit_state
1618428d7b3dSmrg{
1619428d7b3dSmrg   struct thread0 thread0;
1620428d7b3dSmrg   struct thread1 thread1;
1621428d7b3dSmrg   struct thread2 thread2;
1622428d7b3dSmrg   struct thread3 thread3;
1623428d7b3dSmrg
1624428d7b3dSmrg   struct
1625428d7b3dSmrg   {
1626428d7b3dSmrg      unsigned int pad0:9;
1627428d7b3dSmrg      unsigned int gs_output_stats:1; /* not always */
1628428d7b3dSmrg      unsigned int stats_enable:1;
1629428d7b3dSmrg      unsigned int nr_urb_entries:7;
1630428d7b3dSmrg      unsigned int pad1:1;
1631428d7b3dSmrg      unsigned int urb_entry_allocation_size:5;
1632428d7b3dSmrg      unsigned int pad2:1;
1633428d7b3dSmrg      unsigned int max_threads:6; 	/* may be less */
1634428d7b3dSmrg      unsigned int pad3:1;
1635428d7b3dSmrg   } thread4;
1636428d7b3dSmrg
1637428d7b3dSmrg   struct
1638428d7b3dSmrg   {
1639428d7b3dSmrg      unsigned int pad0:13;
1640428d7b3dSmrg      unsigned int clip_mode:3;
1641428d7b3dSmrg      unsigned int userclip_enable_flags:8;
1642428d7b3dSmrg      unsigned int userclip_must_clip:1;
1643428d7b3dSmrg      unsigned int pad1:1;
1644428d7b3dSmrg      unsigned int guard_band_enable:1;
1645428d7b3dSmrg      unsigned int viewport_z_clip_enable:1;
1646428d7b3dSmrg      unsigned int viewport_xy_clip_enable:1;
1647428d7b3dSmrg      unsigned int vertex_position_space:1;
1648428d7b3dSmrg      unsigned int api_mode:1;
1649428d7b3dSmrg      unsigned int pad2:1;
1650428d7b3dSmrg   } clip5;
1651428d7b3dSmrg
1652428d7b3dSmrg   struct
1653428d7b3dSmrg   {
1654428d7b3dSmrg      unsigned int pad0:5;
1655428d7b3dSmrg      unsigned int clipper_viewport_state_ptr:27;
1656428d7b3dSmrg   } clip6;
1657428d7b3dSmrg
1658428d7b3dSmrg
1659428d7b3dSmrg   float viewport_xmin;
1660428d7b3dSmrg   float viewport_xmax;
1661428d7b3dSmrg   float viewport_ymin;
1662428d7b3dSmrg   float viewport_ymax;
1663428d7b3dSmrg};
1664428d7b3dSmrg
1665428d7b3dSmrg
1666428d7b3dSmrg
1667428d7b3dSmrgstruct gen5_cc_unit_state
1668428d7b3dSmrg{
1669428d7b3dSmrg   struct
1670428d7b3dSmrg   {
1671428d7b3dSmrg      unsigned int pad0:3;
1672428d7b3dSmrg      unsigned int bf_stencil_pass_depth_pass_op:3;
1673428d7b3dSmrg      unsigned int bf_stencil_pass_depth_fail_op:3;
1674428d7b3dSmrg      unsigned int bf_stencil_fail_op:3;
1675428d7b3dSmrg      unsigned int bf_stencil_func:3;
1676428d7b3dSmrg      unsigned int bf_stencil_enable:1;
1677428d7b3dSmrg      unsigned int pad1:2;
1678428d7b3dSmrg      unsigned int stencil_write_enable:1;
1679428d7b3dSmrg      unsigned int stencil_pass_depth_pass_op:3;
1680428d7b3dSmrg      unsigned int stencil_pass_depth_fail_op:3;
1681428d7b3dSmrg      unsigned int stencil_fail_op:3;
1682428d7b3dSmrg      unsigned int stencil_func:3;
1683428d7b3dSmrg      unsigned int stencil_enable:1;
1684428d7b3dSmrg   } cc0;
1685428d7b3dSmrg
1686428d7b3dSmrg
1687428d7b3dSmrg   struct
1688428d7b3dSmrg   {
1689428d7b3dSmrg      unsigned int bf_stencil_ref:8;
1690428d7b3dSmrg      unsigned int stencil_write_mask:8;
1691428d7b3dSmrg      unsigned int stencil_test_mask:8;
1692428d7b3dSmrg      unsigned int stencil_ref:8;
1693428d7b3dSmrg   } cc1;
1694428d7b3dSmrg
1695428d7b3dSmrg
1696428d7b3dSmrg   struct
1697428d7b3dSmrg   {
1698428d7b3dSmrg      unsigned int logicop_enable:1;
1699428d7b3dSmrg      unsigned int pad0:10;
1700428d7b3dSmrg      unsigned int depth_write_enable:1;
1701428d7b3dSmrg      unsigned int depth_test_function:3;
1702428d7b3dSmrg      unsigned int depth_test:1;
1703428d7b3dSmrg      unsigned int bf_stencil_write_mask:8;
1704428d7b3dSmrg      unsigned int bf_stencil_test_mask:8;
1705428d7b3dSmrg   } cc2;
1706428d7b3dSmrg
1707428d7b3dSmrg
1708428d7b3dSmrg   struct
1709428d7b3dSmrg   {
1710428d7b3dSmrg      unsigned int pad0:8;
1711428d7b3dSmrg      unsigned int alpha_test_func:3;
1712428d7b3dSmrg      unsigned int alpha_test:1;
1713428d7b3dSmrg      unsigned int blend_enable:1;
1714428d7b3dSmrg      unsigned int ia_blend_enable:1;
1715428d7b3dSmrg      unsigned int pad1:1;
1716428d7b3dSmrg      unsigned int alpha_test_format:1;
1717428d7b3dSmrg      unsigned int pad2:16;
1718428d7b3dSmrg   } cc3;
1719428d7b3dSmrg
1720428d7b3dSmrg   struct
1721428d7b3dSmrg   {
1722428d7b3dSmrg      unsigned int pad0:5;
1723428d7b3dSmrg      unsigned int cc_viewport_state_offset:27;
1724428d7b3dSmrg   } cc4;
1725428d7b3dSmrg
1726428d7b3dSmrg   struct
1727428d7b3dSmrg   {
1728428d7b3dSmrg      unsigned int pad0:2;
1729428d7b3dSmrg      unsigned int ia_dest_blend_factor:5;
1730428d7b3dSmrg      unsigned int ia_src_blend_factor:5;
1731428d7b3dSmrg      unsigned int ia_blend_function:3;
1732428d7b3dSmrg      unsigned int statistics_enable:1;
1733428d7b3dSmrg      unsigned int logicop_func:4;
1734428d7b3dSmrg      unsigned int pad1:11;
1735428d7b3dSmrg      unsigned int dither_enable:1;
1736428d7b3dSmrg   } cc5;
1737428d7b3dSmrg
1738428d7b3dSmrg   struct
1739428d7b3dSmrg   {
1740428d7b3dSmrg      unsigned int clamp_post_alpha_blend:1;
1741428d7b3dSmrg      unsigned int clamp_pre_alpha_blend:1;
1742428d7b3dSmrg      unsigned int clamp_range:2;
1743428d7b3dSmrg      unsigned int pad0:11;
1744428d7b3dSmrg      unsigned int y_dither_offset:2;
1745428d7b3dSmrg      unsigned int x_dither_offset:2;
1746428d7b3dSmrg      unsigned int dest_blend_factor:5;
1747428d7b3dSmrg      unsigned int src_blend_factor:5;
1748428d7b3dSmrg      unsigned int blend_function:3;
1749428d7b3dSmrg   } cc6;
1750428d7b3dSmrg
1751428d7b3dSmrg   struct {
1752428d7b3dSmrg      union {
1753428d7b3dSmrg	 float f;
1754428d7b3dSmrg	 unsigned char ub[4];
1755428d7b3dSmrg      } alpha_ref;
1756428d7b3dSmrg   } cc7;
1757428d7b3dSmrg};
1758428d7b3dSmrg
1759428d7b3dSmrg
1760428d7b3dSmrg
1761428d7b3dSmrgstruct gen5_sf_unit_state
1762428d7b3dSmrg{
1763428d7b3dSmrg   struct thread0 thread0;
1764428d7b3dSmrg   struct {
1765428d7b3dSmrg      unsigned int pad0:7;
1766428d7b3dSmrg      unsigned int sw_exception_enable:1;
1767428d7b3dSmrg      unsigned int pad1:3;
1768428d7b3dSmrg      unsigned int mask_stack_exception_enable:1;
1769428d7b3dSmrg      unsigned int pad2:1;
1770428d7b3dSmrg      unsigned int illegal_op_exception_enable:1;
1771428d7b3dSmrg      unsigned int pad3:2;
1772428d7b3dSmrg      unsigned int floating_point_mode:1;
1773428d7b3dSmrg      unsigned int thread_priority:1;
1774428d7b3dSmrg      unsigned int binding_table_entry_count:8;
1775428d7b3dSmrg      unsigned int pad4:5;
1776428d7b3dSmrg      unsigned int single_program_flow:1;
1777428d7b3dSmrg   } sf1;
1778428d7b3dSmrg
1779428d7b3dSmrg   struct thread2 thread2;
1780428d7b3dSmrg   struct thread3 thread3;
1781428d7b3dSmrg
1782428d7b3dSmrg   struct
1783428d7b3dSmrg   {
1784428d7b3dSmrg      unsigned int pad0:10;
1785428d7b3dSmrg      unsigned int stats_enable:1;
1786428d7b3dSmrg      unsigned int nr_urb_entries:7;
1787428d7b3dSmrg      unsigned int pad1:1;
1788428d7b3dSmrg      unsigned int urb_entry_allocation_size:5;
1789428d7b3dSmrg      unsigned int pad2:1;
1790428d7b3dSmrg      unsigned int max_threads:6;
1791428d7b3dSmrg      unsigned int pad3:1;
1792428d7b3dSmrg   } thread4;
1793428d7b3dSmrg
1794428d7b3dSmrg   struct
1795428d7b3dSmrg   {
1796428d7b3dSmrg      unsigned int front_winding:1;
1797428d7b3dSmrg      unsigned int viewport_transform:1;
1798428d7b3dSmrg      unsigned int pad0:3;
1799428d7b3dSmrg      unsigned int sf_viewport_state_offset:27;
1800428d7b3dSmrg   } sf5;
1801428d7b3dSmrg
1802428d7b3dSmrg   struct
1803428d7b3dSmrg   {
1804428d7b3dSmrg      unsigned int pad0:9;
1805428d7b3dSmrg      unsigned int dest_org_vbias:4;
1806428d7b3dSmrg      unsigned int dest_org_hbias:4;
1807428d7b3dSmrg      unsigned int scissor:1;
1808428d7b3dSmrg      unsigned int disable_2x2_trifilter:1;
1809428d7b3dSmrg      unsigned int disable_zero_pix_trifilter:1;
1810428d7b3dSmrg      unsigned int point_rast_rule:2;
1811428d7b3dSmrg      unsigned int line_endcap_aa_region_width:2;
1812428d7b3dSmrg      unsigned int line_width:4;
1813428d7b3dSmrg      unsigned int fast_scissor_disable:1;
1814428d7b3dSmrg      unsigned int cull_mode:2;
1815428d7b3dSmrg      unsigned int aa_enable:1;
1816428d7b3dSmrg   } sf6;
1817428d7b3dSmrg
1818428d7b3dSmrg   struct
1819428d7b3dSmrg   {
1820428d7b3dSmrg      unsigned int point_size:11;
1821428d7b3dSmrg      unsigned int use_point_size_state:1;
1822428d7b3dSmrg      unsigned int subpixel_precision:1;
1823428d7b3dSmrg      unsigned int sprite_point:1;
1824428d7b3dSmrg      unsigned int pad0:11;
1825428d7b3dSmrg      unsigned int trifan_pv:2;
1826428d7b3dSmrg      unsigned int linestrip_pv:2;
1827428d7b3dSmrg      unsigned int tristrip_pv:2;
1828428d7b3dSmrg      unsigned int line_last_pixel_enable:1;
1829428d7b3dSmrg   } sf7;
1830428d7b3dSmrg
1831428d7b3dSmrg};
1832428d7b3dSmrg
1833428d7b3dSmrg
1834428d7b3dSmrgstruct gen5_gs_unit_state
1835428d7b3dSmrg{
1836428d7b3dSmrg   struct thread0 thread0;
1837428d7b3dSmrg   struct thread1 thread1;
1838428d7b3dSmrg   struct thread2 thread2;
1839428d7b3dSmrg   struct thread3 thread3;
1840428d7b3dSmrg
1841428d7b3dSmrg   struct
1842428d7b3dSmrg   {
1843428d7b3dSmrg      unsigned int pad0:10;
1844428d7b3dSmrg      unsigned int stats_enable:1;
1845428d7b3dSmrg      unsigned int nr_urb_entries:7;
1846428d7b3dSmrg      unsigned int pad1:1;
1847428d7b3dSmrg      unsigned int urb_entry_allocation_size:5;
1848428d7b3dSmrg      unsigned int pad2:1;
1849428d7b3dSmrg      unsigned int max_threads:1;
1850428d7b3dSmrg      unsigned int pad3:6;
1851428d7b3dSmrg   } thread4;
1852428d7b3dSmrg
1853428d7b3dSmrg   struct
1854428d7b3dSmrg   {
1855428d7b3dSmrg      unsigned int sampler_count:3;
1856428d7b3dSmrg      unsigned int pad0:2;
1857428d7b3dSmrg      unsigned int sampler_state_pointer:27;
1858428d7b3dSmrg   } gs5;
1859428d7b3dSmrg
1860428d7b3dSmrg
1861428d7b3dSmrg   struct
1862428d7b3dSmrg   {
1863428d7b3dSmrg      unsigned int max_vp_index:4;
1864428d7b3dSmrg      unsigned int pad0:26;
1865428d7b3dSmrg      unsigned int reorder_enable:1;
1866428d7b3dSmrg      unsigned int pad1:1;
1867428d7b3dSmrg   } gs6;
1868428d7b3dSmrg};
1869428d7b3dSmrg
1870428d7b3dSmrg
1871428d7b3dSmrgstruct gen5_vs_unit_state
1872428d7b3dSmrg{
1873428d7b3dSmrg   struct thread0 thread0;
1874428d7b3dSmrg   struct thread1 thread1;
1875428d7b3dSmrg   struct thread2 thread2;
1876428d7b3dSmrg   struct thread3 thread3;
1877428d7b3dSmrg
1878428d7b3dSmrg   struct
1879428d7b3dSmrg   {
1880428d7b3dSmrg      unsigned int pad0:10;
1881428d7b3dSmrg      unsigned int stats_enable:1;
1882428d7b3dSmrg      unsigned int nr_urb_entries:7;
1883428d7b3dSmrg      unsigned int pad1:1;
1884428d7b3dSmrg      unsigned int urb_entry_allocation_size:5;
1885428d7b3dSmrg      unsigned int pad2:1;
1886428d7b3dSmrg      unsigned int max_threads:4;
1887428d7b3dSmrg      unsigned int pad3:3;
1888428d7b3dSmrg   } thread4;
1889428d7b3dSmrg
1890428d7b3dSmrg   struct
1891428d7b3dSmrg   {
1892428d7b3dSmrg      unsigned int sampler_count:3;
1893428d7b3dSmrg      unsigned int pad0:2;
1894428d7b3dSmrg      unsigned int sampler_state_pointer:27;
1895428d7b3dSmrg   } vs5;
1896428d7b3dSmrg
1897428d7b3dSmrg   struct
1898428d7b3dSmrg   {
1899428d7b3dSmrg      unsigned int vs_enable:1;
1900428d7b3dSmrg      unsigned int vert_cache_disable:1;
1901428d7b3dSmrg      unsigned int pad0:30;
1902428d7b3dSmrg   } vs6;
1903428d7b3dSmrg};
1904428d7b3dSmrg
1905428d7b3dSmrg
1906428d7b3dSmrgstruct gen5_wm_unit_state
1907428d7b3dSmrg{
1908428d7b3dSmrg   struct thread0 thread0;
1909428d7b3dSmrg   struct thread1 thread1;
1910428d7b3dSmrg   struct thread2 thread2;
1911428d7b3dSmrg   struct thread3 thread3;
1912428d7b3dSmrg
1913428d7b3dSmrg   struct {
1914428d7b3dSmrg      unsigned int stats_enable:1;
1915428d7b3dSmrg      unsigned int pad0:1;
1916428d7b3dSmrg      unsigned int sampler_count:3;
1917428d7b3dSmrg      unsigned int sampler_state_pointer:27;
1918428d7b3dSmrg   } wm4;
1919428d7b3dSmrg
1920428d7b3dSmrg   struct
1921428d7b3dSmrg   {
1922428d7b3dSmrg      unsigned int enable_8_pix:1;
1923428d7b3dSmrg      unsigned int enable_16_pix:1;
1924428d7b3dSmrg      unsigned int enable_32_pix:1;
1925428d7b3dSmrg      unsigned int pad0:7;
1926428d7b3dSmrg      unsigned int legacy_global_depth_bias:1;
1927428d7b3dSmrg      unsigned int line_stipple:1;
1928428d7b3dSmrg      unsigned int depth_offset:1;
1929428d7b3dSmrg      unsigned int polygon_stipple:1;
1930428d7b3dSmrg      unsigned int line_aa_region_width:2;
1931428d7b3dSmrg      unsigned int line_endcap_aa_region_width:2;
1932428d7b3dSmrg      unsigned int early_depth_test:1;
1933428d7b3dSmrg      unsigned int thread_dispatch_enable:1;
1934428d7b3dSmrg      unsigned int program_uses_depth:1;
1935428d7b3dSmrg      unsigned int program_computes_depth:1;
1936428d7b3dSmrg      unsigned int program_uses_killpixel:1;
1937428d7b3dSmrg      unsigned int legacy_line_rast: 1;
1938428d7b3dSmrg      unsigned int transposed_urb_read:1;
1939428d7b3dSmrg      unsigned int max_threads:7;
1940428d7b3dSmrg   } wm5;
1941428d7b3dSmrg
1942428d7b3dSmrg   float global_depth_offset_constant;
1943428d7b3dSmrg   float global_depth_offset_scale;
1944428d7b3dSmrg
1945428d7b3dSmrg   struct {
1946428d7b3dSmrg      unsigned int pad0:1;
1947428d7b3dSmrg      unsigned int grf_reg_count_1:3;
1948428d7b3dSmrg      unsigned int pad1:2;
1949428d7b3dSmrg      unsigned int kernel_start_pointer_1:26;
1950428d7b3dSmrg   } wm8;
1951428d7b3dSmrg
1952428d7b3dSmrg   struct {
1953428d7b3dSmrg      unsigned int pad0:1;
1954428d7b3dSmrg      unsigned int grf_reg_count_2:3;
1955428d7b3dSmrg      unsigned int pad1:2;
1956428d7b3dSmrg      unsigned int kernel_start_pointer_2:26;
1957428d7b3dSmrg   } wm9;
1958428d7b3dSmrg
1959428d7b3dSmrg   struct {
1960428d7b3dSmrg      unsigned int pad0:1;
1961428d7b3dSmrg      unsigned int grf_reg_count_3:3;
1962428d7b3dSmrg      unsigned int pad1:2;
1963428d7b3dSmrg      unsigned int kernel_start_pointer_3:26;
1964428d7b3dSmrg   } wm10;
1965428d7b3dSmrg};
1966428d7b3dSmrg
1967428d7b3dSmrgstruct gen5_wm_unit_state_padded {
1968428d7b3dSmrg	struct gen5_wm_unit_state state;
1969428d7b3dSmrg	char pad[64 - sizeof(struct gen5_wm_unit_state)];
1970428d7b3dSmrg};
1971428d7b3dSmrg
1972428d7b3dSmrg/* The hardware supports two different modes for border color. The
1973428d7b3dSmrg * default (OpenGL) mode uses floating-point color channels, while the
1974428d7b3dSmrg * legacy mode uses 4 bytes.
1975428d7b3dSmrg *
1976428d7b3dSmrg * More significantly, the legacy mode respects the components of the
1977428d7b3dSmrg * border color for channels not present in the source, (whereas the
1978428d7b3dSmrg * default mode will ignore the border color's alpha channel and use
1979428d7b3dSmrg * alpha==1 for an RGB source, for example).
1980428d7b3dSmrg *
1981428d7b3dSmrg * The legacy mode matches the semantics specified by the Render
1982428d7b3dSmrg * extension.
1983428d7b3dSmrg */
1984428d7b3dSmrgstruct gen5_sampler_default_border_color {
1985428d7b3dSmrg   float color[4];
1986428d7b3dSmrg};
1987428d7b3dSmrg
1988428d7b3dSmrgstruct gen5_sampler_legacy_border_color {
1989428d7b3dSmrg   uint8_t color[4];
1990428d7b3dSmrg};
1991428d7b3dSmrg
1992428d7b3dSmrgstruct gen5_sampler_state {
1993428d7b3dSmrg   struct {
1994428d7b3dSmrg      unsigned int shadow_function:3;
1995428d7b3dSmrg      unsigned int lod_bias:11;
1996428d7b3dSmrg      unsigned int min_filter:3;
1997428d7b3dSmrg      unsigned int mag_filter:3;
1998428d7b3dSmrg      unsigned int mip_filter:2;
1999428d7b3dSmrg      unsigned int base_level:5;
2000428d7b3dSmrg      unsigned int pad:1;
2001428d7b3dSmrg      unsigned int lod_preclamp:1;
2002428d7b3dSmrg      unsigned int border_color_mode:1;
2003428d7b3dSmrg      unsigned int pad0:1;
2004428d7b3dSmrg      unsigned int disable:1;
2005428d7b3dSmrg   } ss0;
2006428d7b3dSmrg
2007428d7b3dSmrg   struct {
2008428d7b3dSmrg      unsigned int r_wrap_mode:3;
2009428d7b3dSmrg      unsigned int t_wrap_mode:3;
2010428d7b3dSmrg      unsigned int s_wrap_mode:3;
2011428d7b3dSmrg      unsigned int pad:3;
2012428d7b3dSmrg      unsigned int max_lod:10;
2013428d7b3dSmrg      unsigned int min_lod:10;
2014428d7b3dSmrg   } ss1;
2015428d7b3dSmrg
2016428d7b3dSmrg   struct {
2017428d7b3dSmrg      unsigned int pad:5;
2018428d7b3dSmrg      unsigned int border_color_pointer:27;
2019428d7b3dSmrg   } ss2;
2020428d7b3dSmrg
2021428d7b3dSmrg   struct {
2022428d7b3dSmrg      uint32_t pad:13;
2023428d7b3dSmrg      uint32_t address_round:6;
2024428d7b3dSmrg      uint32_t max_aniso:3;
2025428d7b3dSmrg      uint32_t chroma_key_mode:1;
2026428d7b3dSmrg      uint32_t chroma_key_index:2;
2027428d7b3dSmrg      uint32_t chroma_key_enable:1;
2028428d7b3dSmrg      uint32_t mbz:6;
2029428d7b3dSmrg   } ss3;
2030428d7b3dSmrg};
2031428d7b3dSmrg
2032428d7b3dSmrg
2033428d7b3dSmrgstruct gen5_clipper_viewport
2034428d7b3dSmrg{
2035428d7b3dSmrg   float xmin;
2036428d7b3dSmrg   float xmax;
2037428d7b3dSmrg   float ymin;
2038428d7b3dSmrg   float ymax;
2039428d7b3dSmrg};
2040428d7b3dSmrg
2041428d7b3dSmrgstruct gen5_cc_viewport
2042428d7b3dSmrg{
2043428d7b3dSmrg   float min_depth;
2044428d7b3dSmrg   float max_depth;
2045428d7b3dSmrg};
2046428d7b3dSmrg
2047428d7b3dSmrgstruct gen5_sf_viewport
2048428d7b3dSmrg{
2049428d7b3dSmrg   struct {
2050428d7b3dSmrg      float m00;
2051428d7b3dSmrg      float m11;
2052428d7b3dSmrg      float m22;
2053428d7b3dSmrg      float m30;
2054428d7b3dSmrg      float m31;
2055428d7b3dSmrg      float m32;
2056428d7b3dSmrg   } viewport;
2057428d7b3dSmrg
2058428d7b3dSmrg   struct {
2059428d7b3dSmrg      short xmin;
2060428d7b3dSmrg      short ymin;
2061428d7b3dSmrg      short xmax;
2062428d7b3dSmrg      short ymax;
2063428d7b3dSmrg   } scissor;
2064428d7b3dSmrg};
2065428d7b3dSmrg
2066428d7b3dSmrg/* Documented in the subsystem/shared-functions/sampler chapter...
2067428d7b3dSmrg */
2068428d7b3dSmrgstruct gen5_surface_state
2069428d7b3dSmrg{
2070428d7b3dSmrg   struct {
2071428d7b3dSmrg      unsigned int cube_pos_z:1;
2072428d7b3dSmrg      unsigned int cube_neg_z:1;
2073428d7b3dSmrg      unsigned int cube_pos_y:1;
2074428d7b3dSmrg      unsigned int cube_neg_y:1;
2075428d7b3dSmrg      unsigned int cube_pos_x:1;
2076428d7b3dSmrg      unsigned int cube_neg_x:1;
2077428d7b3dSmrg      unsigned int pad:3;
2078428d7b3dSmrg      unsigned int render_cache_read_mode:1;
2079428d7b3dSmrg      unsigned int mipmap_layout_mode:1;
2080428d7b3dSmrg      unsigned int vert_line_stride_ofs:1;
2081428d7b3dSmrg      unsigned int vert_line_stride:1;
2082428d7b3dSmrg      unsigned int color_blend:1;
2083428d7b3dSmrg      unsigned int writedisable_blue:1;
2084428d7b3dSmrg      unsigned int writedisable_green:1;
2085428d7b3dSmrg      unsigned int writedisable_red:1;
2086428d7b3dSmrg      unsigned int writedisable_alpha:1;
2087428d7b3dSmrg      unsigned int surface_format:9;
2088428d7b3dSmrg      unsigned int data_return_format:1;
2089428d7b3dSmrg      unsigned int pad0:1;
2090428d7b3dSmrg      unsigned int surface_type:3;
2091428d7b3dSmrg   } ss0;
2092428d7b3dSmrg
2093428d7b3dSmrg   struct {
2094428d7b3dSmrg      unsigned int base_addr;
2095428d7b3dSmrg   } ss1;
2096428d7b3dSmrg
2097428d7b3dSmrg   struct {
2098428d7b3dSmrg      unsigned int render_target_rotation:2;
2099428d7b3dSmrg      unsigned int mip_count:4;
2100428d7b3dSmrg      unsigned int width:13;
2101428d7b3dSmrg      unsigned int height:13;
2102428d7b3dSmrg   } ss2;
2103428d7b3dSmrg
2104428d7b3dSmrg   struct {
2105428d7b3dSmrg      unsigned int tile_walk:1;
2106428d7b3dSmrg      unsigned int tiled_surface:1;
2107428d7b3dSmrg      unsigned int pad:1;
2108428d7b3dSmrg      unsigned int pitch:18;
2109428d7b3dSmrg      unsigned int depth:11;
2110428d7b3dSmrg   } ss3;
2111428d7b3dSmrg
2112428d7b3dSmrg   struct {
2113428d7b3dSmrg      unsigned int pad:19;
2114428d7b3dSmrg      unsigned int min_array_elt:9;
2115428d7b3dSmrg      unsigned int min_lod:4;
2116428d7b3dSmrg   } ss4;
2117428d7b3dSmrg
2118428d7b3dSmrg   struct {
2119428d7b3dSmrg       unsigned int pad:20;
2120428d7b3dSmrg       unsigned int y_offset:4;
2121428d7b3dSmrg       unsigned int pad2:1;
2122428d7b3dSmrg       unsigned int x_offset:7;
2123428d7b3dSmrg   } ss5;
2124428d7b3dSmrg};
2125428d7b3dSmrg
2126428d7b3dSmrg/* Surface state DW0 */
2127428d7b3dSmrg#define GEN5_SURFACE_RC_READ_WRITE       (1 << 8)
2128428d7b3dSmrg#define GEN5_SURFACE_MIPLAYOUT_SHIFT     10
2129428d7b3dSmrg#define GEN5_SURFACE_MIPMAPLAYOUT_BELOW   0
2130428d7b3dSmrg#define GEN5_SURFACE_MIPMAPLAYOUT_RIGHT   1
2131428d7b3dSmrg#define GEN5_SURFACE_CUBEFACE_ENABLES    0x3f
2132428d7b3dSmrg#define GEN5_SURFACE_BLEND_ENABLED       (1 << 13)
2133428d7b3dSmrg#define GEN5_SURFACE_WRITEDISABLE_B_SHIFT        14
2134428d7b3dSmrg#define GEN5_SURFACE_WRITEDISABLE_G_SHIFT        15
2135428d7b3dSmrg#define GEN5_SURFACE_WRITEDISABLE_R_SHIFT        16
2136428d7b3dSmrg#define GEN5_SURFACE_WRITEDISABLE_A_SHIFT        17
2137428d7b3dSmrg#define GEN5_SURFACE_FORMAT_SHIFT        18
2138428d7b3dSmrg#define GEN5_SURFACE_FORMAT_MASK         INTEL_MASK(26, 18)
2139428d7b3dSmrg
2140428d7b3dSmrg#define GEN5_SURFACE_TYPE_SHIFT          29
2141428d7b3dSmrg#define GEN5_SURFACE_TYPE_MASK           GEN5_MASK(31, 29)
2142428d7b3dSmrg#define GEN5_SURFACE_1D      0
2143428d7b3dSmrg#define GEN5_SURFACE_2D      1
2144428d7b3dSmrg#define GEN5_SURFACE_3D      2
2145428d7b3dSmrg#define GEN5_SURFACE_CUBE    3
2146428d7b3dSmrg#define GEN5_SURFACE_BUFFER  4
2147428d7b3dSmrg#define GEN5_SURFACE_NULL    7
2148428d7b3dSmrg
2149428d7b3dSmrg/* Surface state DW2 */
2150428d7b3dSmrg#define GEN5_SURFACE_HEIGHT_SHIFT        19
2151428d7b3dSmrg#define GEN5_SURFACE_HEIGHT_MASK         GEN5_MASK(31, 19)
2152428d7b3dSmrg#define GEN5_SURFACE_WIDTH_SHIFT         6
2153428d7b3dSmrg#define GEN5_SURFACE_WIDTH_MASK          GEN5_MASK(18, 6)
2154428d7b3dSmrg#define GEN5_SURFACE_LOD_SHIFT           2
2155428d7b3dSmrg#define GEN5_SURFACE_LOD_MASK            GEN5_MASK(5, 2)
2156428d7b3dSmrg
2157428d7b3dSmrg/* Surface state DW3 */
2158428d7b3dSmrg#define GEN5_SURFACE_DEPTH_SHIFT         21
2159428d7b3dSmrg#define GEN5_SURFACE_DEPTH_MASK          GEN5_MASK(31, 21)
2160428d7b3dSmrg#define GEN5_SURFACE_PITCH_SHIFT         3
2161428d7b3dSmrg#define GEN5_SURFACE_PITCH_MASK          GEN5_MASK(19, 3)
2162428d7b3dSmrg#define GEN5_SURFACE_TILED               (1 << 1)
2163428d7b3dSmrg#define GEN5_SURFACE_TILED_Y             (1 << 0)
2164428d7b3dSmrg
2165428d7b3dSmrg/* Surface state DW4 */
2166428d7b3dSmrg#define GEN5_SURFACE_MIN_LOD_SHIFT       28
2167428d7b3dSmrg#define GEN5_SURFACE_MIN_LOD_MASK        GEN5_MASK(31, 28)
2168428d7b3dSmrg
2169428d7b3dSmrg/* Surface state DW5 */
2170428d7b3dSmrg#define GEN5_SURFACE_X_OFFSET_SHIFT      25
2171428d7b3dSmrg#define GEN5_SURFACE_X_OFFSET_MASK       GEN5_MASK(31, 25)
2172428d7b3dSmrg#define GEN5_SURFACE_Y_OFFSET_SHIFT      20
2173428d7b3dSmrg#define GEN5_SURFACE_Y_OFFSET_MASK       GEN5_MASK(23, 20)
2174428d7b3dSmrg
2175428d7b3dSmrgstruct gen5_vertex_buffer_state
2176428d7b3dSmrg{
2177428d7b3dSmrg   struct {
2178428d7b3dSmrg      unsigned int pitch:11;
2179428d7b3dSmrg      unsigned int pad:15;
2180428d7b3dSmrg      unsigned int access_type:1;
2181428d7b3dSmrg      unsigned int vb_index:5;
2182428d7b3dSmrg   } vb0;
2183428d7b3dSmrg
2184428d7b3dSmrg   unsigned int start_addr;
2185428d7b3dSmrg   unsigned int max_index;
2186428d7b3dSmrg#if 1
2187428d7b3dSmrg   unsigned int instance_data_step_rate; /* not included for sequential/random vertices? */
2188428d7b3dSmrg#endif
2189428d7b3dSmrg};
2190428d7b3dSmrg
2191428d7b3dSmrg#define GEN5_VBP_MAX 17
2192428d7b3dSmrg
2193428d7b3dSmrgstruct gen5_vb_array_state {
2194428d7b3dSmrg   struct header header;
2195428d7b3dSmrg   struct gen5_vertex_buffer_state vb[GEN5_VBP_MAX];
2196428d7b3dSmrg};
2197428d7b3dSmrg
2198428d7b3dSmrg
2199428d7b3dSmrgstruct gen5_vertex_element_state
2200428d7b3dSmrg{
2201428d7b3dSmrg   struct
2202428d7b3dSmrg   {
2203428d7b3dSmrg      unsigned int src_offset:11;
2204428d7b3dSmrg      unsigned int pad:5;
2205428d7b3dSmrg      unsigned int src_format:9;
2206428d7b3dSmrg      unsigned int pad0:1;
2207428d7b3dSmrg      unsigned int valid:1;
2208428d7b3dSmrg      unsigned int vertex_buffer_index:5;
2209428d7b3dSmrg   } ve0;
2210428d7b3dSmrg
2211428d7b3dSmrg   struct
2212428d7b3dSmrg   {
2213428d7b3dSmrg      unsigned int dst_offset:8;
2214428d7b3dSmrg      unsigned int pad:8;
2215428d7b3dSmrg      unsigned int vfcomponent3:4;
2216428d7b3dSmrg      unsigned int vfcomponent2:4;
2217428d7b3dSmrg      unsigned int vfcomponent1:4;
2218428d7b3dSmrg      unsigned int vfcomponent0:4;
2219428d7b3dSmrg   } ve1;
2220428d7b3dSmrg};
2221428d7b3dSmrg
2222428d7b3dSmrg#define GEN5_VEP_MAX 18
2223428d7b3dSmrg
2224428d7b3dSmrgstruct gen5_vertex_element_packet {
2225428d7b3dSmrg   struct header header;
2226428d7b3dSmrg   struct gen5_vertex_element_state ve[GEN5_VEP_MAX]; /* note: less than _TNL_ATTRIB_MAX */
2227428d7b3dSmrg};
2228428d7b3dSmrg
2229428d7b3dSmrg
2230428d7b3dSmrgstruct gen5_urb_immediate {
2231428d7b3dSmrg   unsigned int opcode:4;
2232428d7b3dSmrg   unsigned int offset:6;
2233428d7b3dSmrg   unsigned int swizzle_control:2;
2234428d7b3dSmrg   unsigned int pad:1;
2235428d7b3dSmrg   unsigned int allocate:1;
2236428d7b3dSmrg   unsigned int used:1;
2237428d7b3dSmrg   unsigned int complete:1;
2238428d7b3dSmrg   unsigned int response_length:4;
2239428d7b3dSmrg   unsigned int msg_length:4;
2240428d7b3dSmrg   unsigned int msg_target:4;
2241428d7b3dSmrg   unsigned int pad1:3;
2242428d7b3dSmrg   unsigned int end_of_thread:1;
2243428d7b3dSmrg};
2244428d7b3dSmrg
2245428d7b3dSmrg/* Instruction format for the execution units:
2246428d7b3dSmrg */
2247428d7b3dSmrg
2248428d7b3dSmrgstruct gen5_instruction
2249428d7b3dSmrg{
2250428d7b3dSmrg   struct
2251428d7b3dSmrg   {
2252428d7b3dSmrg      unsigned int opcode:7;
2253428d7b3dSmrg      unsigned int pad:1;
2254428d7b3dSmrg      unsigned int access_mode:1;
2255428d7b3dSmrg      unsigned int mask_control:1;
2256428d7b3dSmrg      unsigned int dependency_control:2;
2257428d7b3dSmrg      unsigned int compression_control:2;
2258428d7b3dSmrg      unsigned int thread_control:2;
2259428d7b3dSmrg      unsigned int predicate_control:4;
2260428d7b3dSmrg      unsigned int predicate_inverse:1;
2261428d7b3dSmrg      unsigned int execution_size:3;
2262428d7b3dSmrg      unsigned int destreg__conditonalmod:4; /* destreg - send, conditionalmod - others */
2263428d7b3dSmrg      unsigned int pad0:2;
2264428d7b3dSmrg      unsigned int debug_control:1;
2265428d7b3dSmrg      unsigned int saturate:1;
2266428d7b3dSmrg   } header;
2267428d7b3dSmrg
2268428d7b3dSmrg   union {
2269428d7b3dSmrg      struct
2270428d7b3dSmrg      {
2271428d7b3dSmrg	 unsigned int dest_reg_file:2;
2272428d7b3dSmrg	 unsigned int dest_reg_type:3;
2273428d7b3dSmrg	 unsigned int src0_reg_file:2;
2274428d7b3dSmrg	 unsigned int src0_reg_type:3;
2275428d7b3dSmrg	 unsigned int src1_reg_file:2;
2276428d7b3dSmrg	 unsigned int src1_reg_type:3;
2277428d7b3dSmrg	 unsigned int pad:1;
2278428d7b3dSmrg	 unsigned int dest_subreg_nr:5;
2279428d7b3dSmrg	 unsigned int dest_reg_nr:8;
2280428d7b3dSmrg	 unsigned int dest_horiz_stride:2;
2281428d7b3dSmrg	 unsigned int dest_address_mode:1;
2282428d7b3dSmrg      } da1;
2283428d7b3dSmrg
2284428d7b3dSmrg      struct
2285428d7b3dSmrg      {
2286428d7b3dSmrg	 unsigned int dest_reg_file:2;
2287428d7b3dSmrg	 unsigned int dest_reg_type:3;
2288428d7b3dSmrg	 unsigned int src0_reg_file:2;
2289428d7b3dSmrg	 unsigned int src0_reg_type:3;
2290428d7b3dSmrg	 unsigned int pad:6;
2291428d7b3dSmrg	 int dest_indirect_offset:10;	/* offset against the deref'd address reg */
2292428d7b3dSmrg	 unsigned int dest_subreg_nr:3; /* subnr for the address reg a0.x */
2293428d7b3dSmrg	 unsigned int dest_horiz_stride:2;
2294428d7b3dSmrg	 unsigned int dest_address_mode:1;
2295428d7b3dSmrg      } ia1;
2296428d7b3dSmrg
2297428d7b3dSmrg      struct
2298428d7b3dSmrg      {
2299428d7b3dSmrg	 unsigned int dest_reg_file:2;
2300428d7b3dSmrg	 unsigned int dest_reg_type:3;
2301428d7b3dSmrg	 unsigned int src0_reg_file:2;
2302428d7b3dSmrg	 unsigned int src0_reg_type:3;
2303428d7b3dSmrg	 unsigned int src1_reg_file:2;
2304428d7b3dSmrg	 unsigned int src1_reg_type:3;
2305428d7b3dSmrg	 unsigned int pad0:1;
2306428d7b3dSmrg	 unsigned int dest_writemask:4;
2307428d7b3dSmrg	 unsigned int dest_subreg_nr:1;
2308428d7b3dSmrg	 unsigned int dest_reg_nr:8;
2309428d7b3dSmrg	 unsigned int pad1:2;
2310428d7b3dSmrg	 unsigned int dest_address_mode:1;
2311428d7b3dSmrg      } da16;
2312428d7b3dSmrg
2313428d7b3dSmrg      struct
2314428d7b3dSmrg      {
2315428d7b3dSmrg	 unsigned int dest_reg_file:2;
2316428d7b3dSmrg	 unsigned int dest_reg_type:3;
2317428d7b3dSmrg	 unsigned int src0_reg_file:2;
2318428d7b3dSmrg	 unsigned int src0_reg_type:3;
2319428d7b3dSmrg	 unsigned int pad0:6;
2320428d7b3dSmrg	 unsigned int dest_writemask:4;
2321428d7b3dSmrg	 int dest_indirect_offset:6;
2322428d7b3dSmrg	 unsigned int dest_subreg_nr:3;
2323428d7b3dSmrg	 unsigned int pad1:2;
2324428d7b3dSmrg	 unsigned int dest_address_mode:1;
2325428d7b3dSmrg      } ia16;
2326428d7b3dSmrg   } bits1;
2327428d7b3dSmrg
2328428d7b3dSmrg
2329428d7b3dSmrg   union {
2330428d7b3dSmrg      struct
2331428d7b3dSmrg      {
2332428d7b3dSmrg	 unsigned int src0_subreg_nr:5;
2333428d7b3dSmrg	 unsigned int src0_reg_nr:8;
2334428d7b3dSmrg	 unsigned int src0_abs:1;
2335428d7b3dSmrg	 unsigned int src0_negate:1;
2336428d7b3dSmrg	 unsigned int src0_address_mode:1;
2337428d7b3dSmrg	 unsigned int src0_horiz_stride:2;
2338428d7b3dSmrg	 unsigned int src0_width:3;
2339428d7b3dSmrg	 unsigned int src0_vert_stride:4;
2340428d7b3dSmrg	 unsigned int flag_reg_nr:1;
2341428d7b3dSmrg	 unsigned int pad:6;
2342428d7b3dSmrg      } da1;
2343428d7b3dSmrg
2344428d7b3dSmrg      struct
2345428d7b3dSmrg      {
2346428d7b3dSmrg	 int src0_indirect_offset:10;
2347428d7b3dSmrg	 unsigned int src0_subreg_nr:3;
2348428d7b3dSmrg	 unsigned int src0_abs:1;
2349428d7b3dSmrg	 unsigned int src0_negate:1;
2350428d7b3dSmrg	 unsigned int src0_address_mode:1;
2351428d7b3dSmrg	 unsigned int src0_horiz_stride:2;
2352428d7b3dSmrg	 unsigned int src0_width:3;
2353428d7b3dSmrg	 unsigned int src0_vert_stride:4;
2354428d7b3dSmrg	 unsigned int flag_reg_nr:1;
2355428d7b3dSmrg	 unsigned int pad:6;
2356428d7b3dSmrg      } ia1;
2357428d7b3dSmrg
2358428d7b3dSmrg      struct
2359428d7b3dSmrg      {
2360428d7b3dSmrg	 unsigned int src0_swz_x:2;
2361428d7b3dSmrg	 unsigned int src0_swz_y:2;
2362428d7b3dSmrg	 unsigned int src0_subreg_nr:1;
2363428d7b3dSmrg	 unsigned int src0_reg_nr:8;
2364428d7b3dSmrg	 unsigned int src0_abs:1;
2365428d7b3dSmrg	 unsigned int src0_negate:1;
2366428d7b3dSmrg	 unsigned int src0_address_mode:1;
2367428d7b3dSmrg	 unsigned int src0_swz_z:2;
2368428d7b3dSmrg	 unsigned int src0_swz_w:2;
2369428d7b3dSmrg	 unsigned int pad0:1;
2370428d7b3dSmrg	 unsigned int src0_vert_stride:4;
2371428d7b3dSmrg	 unsigned int flag_reg_nr:1;
2372428d7b3dSmrg	 unsigned int pad1:6;
2373428d7b3dSmrg      } da16;
2374428d7b3dSmrg
2375428d7b3dSmrg      struct
2376428d7b3dSmrg      {
2377428d7b3dSmrg	 unsigned int src0_swz_x:2;
2378428d7b3dSmrg	 unsigned int src0_swz_y:2;
2379428d7b3dSmrg	 int src0_indirect_offset:6;
2380428d7b3dSmrg	 unsigned int src0_subreg_nr:3;
2381428d7b3dSmrg	 unsigned int src0_abs:1;
2382428d7b3dSmrg	 unsigned int src0_negate:1;
2383428d7b3dSmrg	 unsigned int src0_address_mode:1;
2384428d7b3dSmrg	 unsigned int src0_swz_z:2;
2385428d7b3dSmrg	 unsigned int src0_swz_w:2;
2386428d7b3dSmrg	 unsigned int pad0:1;
2387428d7b3dSmrg	 unsigned int src0_vert_stride:4;
2388428d7b3dSmrg	 unsigned int flag_reg_nr:1;
2389428d7b3dSmrg	 unsigned int pad1:6;
2390428d7b3dSmrg      } ia16;
2391428d7b3dSmrg
2392428d7b3dSmrg   } bits2;
2393428d7b3dSmrg
2394428d7b3dSmrg   union
2395428d7b3dSmrg   {
2396428d7b3dSmrg      struct
2397428d7b3dSmrg      {
2398428d7b3dSmrg	 unsigned int src1_subreg_nr:5;
2399428d7b3dSmrg	 unsigned int src1_reg_nr:8;
2400428d7b3dSmrg	 unsigned int src1_abs:1;
2401428d7b3dSmrg	 unsigned int src1_negate:1;
2402428d7b3dSmrg	 unsigned int pad:1;
2403428d7b3dSmrg	 unsigned int src1_horiz_stride:2;
2404428d7b3dSmrg	 unsigned int src1_width:3;
2405428d7b3dSmrg	 unsigned int src1_vert_stride:4;
2406428d7b3dSmrg	 unsigned int pad0:7;
2407428d7b3dSmrg      } da1;
2408428d7b3dSmrg
2409428d7b3dSmrg      struct
2410428d7b3dSmrg      {
2411428d7b3dSmrg	 unsigned int src1_swz_x:2;
2412428d7b3dSmrg	 unsigned int src1_swz_y:2;
2413428d7b3dSmrg	 unsigned int src1_subreg_nr:1;
2414428d7b3dSmrg	 unsigned int src1_reg_nr:8;
2415428d7b3dSmrg	 unsigned int src1_abs:1;
2416428d7b3dSmrg	 unsigned int src1_negate:1;
2417428d7b3dSmrg	 unsigned int pad0:1;
2418428d7b3dSmrg	 unsigned int src1_swz_z:2;
2419428d7b3dSmrg	 unsigned int src1_swz_w:2;
2420428d7b3dSmrg	 unsigned int pad1:1;
2421428d7b3dSmrg	 unsigned int src1_vert_stride:4;
2422428d7b3dSmrg	 unsigned int pad2:7;
2423428d7b3dSmrg      } da16;
2424428d7b3dSmrg
2425428d7b3dSmrg      struct
2426428d7b3dSmrg      {
2427428d7b3dSmrg	 int  src1_indirect_offset:10;
2428428d7b3dSmrg	 unsigned int src1_subreg_nr:3;
2429428d7b3dSmrg	 unsigned int src1_abs:1;
2430428d7b3dSmrg	 unsigned int src1_negate:1;
2431428d7b3dSmrg	 unsigned int pad0:1;
2432428d7b3dSmrg	 unsigned int src1_horiz_stride:2;
2433428d7b3dSmrg	 unsigned int src1_width:3;
2434428d7b3dSmrg	 unsigned int src1_vert_stride:4;
2435428d7b3dSmrg	 unsigned int flag_reg_nr:1;
2436428d7b3dSmrg	 unsigned int pad1:6;
2437428d7b3dSmrg      } ia1;
2438428d7b3dSmrg
2439428d7b3dSmrg      struct
2440428d7b3dSmrg      {
2441428d7b3dSmrg	 unsigned int src1_swz_x:2;
2442428d7b3dSmrg	 unsigned int src1_swz_y:2;
2443428d7b3dSmrg	 int  src1_indirect_offset:6;
2444428d7b3dSmrg	 unsigned int src1_subreg_nr:3;
2445428d7b3dSmrg	 unsigned int src1_abs:1;
2446428d7b3dSmrg	 unsigned int src1_negate:1;
2447428d7b3dSmrg	 unsigned int pad0:1;
2448428d7b3dSmrg	 unsigned int src1_swz_z:2;
2449428d7b3dSmrg	 unsigned int src1_swz_w:2;
2450428d7b3dSmrg	 unsigned int pad1:1;
2451428d7b3dSmrg	 unsigned int src1_vert_stride:4;
2452428d7b3dSmrg	 unsigned int flag_reg_nr:1;
2453428d7b3dSmrg	 unsigned int pad2:6;
2454428d7b3dSmrg      } ia16;
2455428d7b3dSmrg
2456428d7b3dSmrg
2457428d7b3dSmrg      struct
2458428d7b3dSmrg      {
2459428d7b3dSmrg	 int  jump_count:16;	/* note: signed */
2460428d7b3dSmrg	 unsigned int  pop_count:4;
2461428d7b3dSmrg	 unsigned int  pad0:12;
2462428d7b3dSmrg      } if_else;
2463428d7b3dSmrg
2464428d7b3dSmrg      struct {
2465428d7b3dSmrg	 unsigned int function:4;
2466428d7b3dSmrg	 unsigned int int_type:1;
2467428d7b3dSmrg	 unsigned int precision:1;
2468428d7b3dSmrg	 unsigned int saturate:1;
2469428d7b3dSmrg	 unsigned int data_type:1;
2470428d7b3dSmrg	 unsigned int pad0:8;
2471428d7b3dSmrg	 unsigned int response_length:4;
2472428d7b3dSmrg	 unsigned int msg_length:4;
2473428d7b3dSmrg	 unsigned int msg_target:4;
2474428d7b3dSmrg	 unsigned int pad1:3;
2475428d7b3dSmrg	 unsigned int end_of_thread:1;
2476428d7b3dSmrg      } math;
2477428d7b3dSmrg
2478428d7b3dSmrg      struct {
2479428d7b3dSmrg	 unsigned int binding_table_index:8;
2480428d7b3dSmrg	 unsigned int sampler:4;
2481428d7b3dSmrg	 unsigned int return_format:2;
2482428d7b3dSmrg	 unsigned int msg_type:2;
2483428d7b3dSmrg	 unsigned int response_length:4;
2484428d7b3dSmrg	 unsigned int msg_length:4;
2485428d7b3dSmrg	 unsigned int msg_target:4;
2486428d7b3dSmrg	 unsigned int pad1:3;
2487428d7b3dSmrg	 unsigned int end_of_thread:1;
2488428d7b3dSmrg      } sampler;
2489428d7b3dSmrg
2490428d7b3dSmrg      struct gen5_urb_immediate urb;
2491428d7b3dSmrg
2492428d7b3dSmrg      struct {
2493428d7b3dSmrg	 unsigned int binding_table_index:8;
2494428d7b3dSmrg	 unsigned int msg_control:4;
2495428d7b3dSmrg	 unsigned int msg_type:2;
2496428d7b3dSmrg	 unsigned int target_cache:2;
2497428d7b3dSmrg	 unsigned int response_length:4;
2498428d7b3dSmrg	 unsigned int msg_length:4;
2499428d7b3dSmrg	 unsigned int msg_target:4;
2500428d7b3dSmrg	 unsigned int pad1:3;
2501428d7b3dSmrg	 unsigned int end_of_thread:1;
2502428d7b3dSmrg      } dp_read;
2503428d7b3dSmrg
2504428d7b3dSmrg      struct {
2505428d7b3dSmrg	 unsigned int binding_table_index:8;
2506428d7b3dSmrg	 unsigned int msg_control:3;
2507428d7b3dSmrg	 unsigned int pixel_scoreboard_clear:1;
2508428d7b3dSmrg	 unsigned int msg_type:3;
2509428d7b3dSmrg	 unsigned int send_commit_msg:1;
2510428d7b3dSmrg	 unsigned int response_length:4;
2511428d7b3dSmrg	 unsigned int msg_length:4;
2512428d7b3dSmrg	 unsigned int msg_target:4;
2513428d7b3dSmrg	 unsigned int pad1:3;
2514428d7b3dSmrg	 unsigned int end_of_thread:1;
2515428d7b3dSmrg      } dp_write;
2516428d7b3dSmrg
2517428d7b3dSmrg      struct {
2518428d7b3dSmrg	 unsigned int pad:16;
2519428d7b3dSmrg	 unsigned int response_length:4;
2520428d7b3dSmrg	 unsigned int msg_length:4;
2521428d7b3dSmrg	 unsigned int msg_target:4;
2522428d7b3dSmrg	 unsigned int pad1:3;
2523428d7b3dSmrg	 unsigned int end_of_thread:1;
2524428d7b3dSmrg      } generic;
2525428d7b3dSmrg
2526428d7b3dSmrg      unsigned int ud;
2527428d7b3dSmrg   } bits3;
2528428d7b3dSmrg};
2529428d7b3dSmrg
2530428d7b3dSmrg/* media pipeline */
2531428d7b3dSmrg
2532428d7b3dSmrgstruct gen5_vfe_state {
2533428d7b3dSmrg    struct {
2534428d7b3dSmrg	unsigned int per_thread_scratch_space:4;
2535428d7b3dSmrg	unsigned int pad3:3;
2536428d7b3dSmrg	unsigned int extend_vfe_state_present:1;
2537428d7b3dSmrg	unsigned int pad2:2;
2538428d7b3dSmrg	unsigned int scratch_base:22;
2539428d7b3dSmrg    } vfe0;
2540428d7b3dSmrg
2541428d7b3dSmrg    struct {
2542428d7b3dSmrg	unsigned int debug_counter_control:2;
2543428d7b3dSmrg	unsigned int children_present:1;
2544428d7b3dSmrg	unsigned int vfe_mode:4;
2545428d7b3dSmrg	unsigned int pad2:2;
2546428d7b3dSmrg	unsigned int num_urb_entries:7;
2547428d7b3dSmrg	unsigned int urb_entry_alloc_size:9;
2548428d7b3dSmrg	unsigned int max_threads:7;
2549428d7b3dSmrg    } vfe1;
2550428d7b3dSmrg
2551428d7b3dSmrg    struct {
2552428d7b3dSmrg	unsigned int pad4:4;
2553428d7b3dSmrg	unsigned int interface_descriptor_base:28;
2554428d7b3dSmrg    } vfe2;
2555428d7b3dSmrg};
2556428d7b3dSmrg
2557428d7b3dSmrgstruct gen5_vld_state {
2558428d7b3dSmrg    struct {
2559428d7b3dSmrg	unsigned int pad6:6;
2560428d7b3dSmrg	unsigned int scan_order:1;
2561428d7b3dSmrg	unsigned int intra_vlc_format:1;
2562428d7b3dSmrg	unsigned int quantizer_scale_type:1;
2563428d7b3dSmrg	unsigned int concealment_motion_vector:1;
2564428d7b3dSmrg	unsigned int frame_predict_frame_dct:1;
2565428d7b3dSmrg	unsigned int top_field_first:1;
2566428d7b3dSmrg	unsigned int picture_structure:2;
2567428d7b3dSmrg	unsigned int intra_dc_precision:2;
2568428d7b3dSmrg	unsigned int f_code_0_0:4;
2569428d7b3dSmrg	unsigned int f_code_0_1:4;
2570428d7b3dSmrg	unsigned int f_code_1_0:4;
2571428d7b3dSmrg	unsigned int f_code_1_1:4;
2572428d7b3dSmrg    } vld0;
2573428d7b3dSmrg
2574428d7b3dSmrg    struct {
2575428d7b3dSmrg	unsigned int pad2:9;
2576428d7b3dSmrg	unsigned int picture_coding_type:2;
2577428d7b3dSmrg	unsigned int pad:21;
2578428d7b3dSmrg    } vld1;
2579428d7b3dSmrg
2580428d7b3dSmrg    struct {
2581428d7b3dSmrg	unsigned int index_0:4;
2582428d7b3dSmrg	unsigned int index_1:4;
2583428d7b3dSmrg	unsigned int index_2:4;
2584428d7b3dSmrg	unsigned int index_3:4;
2585428d7b3dSmrg	unsigned int index_4:4;
2586428d7b3dSmrg	unsigned int index_5:4;
2587428d7b3dSmrg	unsigned int index_6:4;
2588428d7b3dSmrg	unsigned int index_7:4;
2589428d7b3dSmrg    } desc_remap_table0;
2590428d7b3dSmrg
2591428d7b3dSmrg    struct {
2592428d7b3dSmrg	unsigned int index_8:4;
2593428d7b3dSmrg	unsigned int index_9:4;
2594428d7b3dSmrg	unsigned int index_10:4;
2595428d7b3dSmrg	unsigned int index_11:4;
2596428d7b3dSmrg	unsigned int index_12:4;
2597428d7b3dSmrg	unsigned int index_13:4;
2598428d7b3dSmrg	unsigned int index_14:4;
2599428d7b3dSmrg	unsigned int index_15:4;
2600428d7b3dSmrg    } desc_remap_table1;
2601428d7b3dSmrg};
2602428d7b3dSmrg
2603428d7b3dSmrgstruct gen5_interface_descriptor {
2604428d7b3dSmrg    struct {
2605428d7b3dSmrg	unsigned int grf_reg_blocks:4;
2606428d7b3dSmrg	unsigned int pad:2;
2607428d7b3dSmrg	unsigned int kernel_start_pointer:26;
2608428d7b3dSmrg    } desc0;
2609428d7b3dSmrg
2610428d7b3dSmrg    struct {
2611428d7b3dSmrg	unsigned int pad:7;
2612428d7b3dSmrg	unsigned int software_exception:1;
2613428d7b3dSmrg	unsigned int pad2:3;
2614428d7b3dSmrg	unsigned int maskstack_exception:1;
2615428d7b3dSmrg	unsigned int pad3:1;
2616428d7b3dSmrg	unsigned int illegal_opcode_exception:1;
2617428d7b3dSmrg	unsigned int pad4:2;
2618428d7b3dSmrg	unsigned int floating_point_mode:1;
2619428d7b3dSmrg	unsigned int thread_priority:1;
2620428d7b3dSmrg	unsigned int single_program_flow:1;
2621428d7b3dSmrg	unsigned int pad5:1;
2622428d7b3dSmrg	unsigned int const_urb_entry_read_offset:6;
2623428d7b3dSmrg	unsigned int const_urb_entry_read_len:6;
2624428d7b3dSmrg    } desc1;
2625428d7b3dSmrg
2626428d7b3dSmrg    struct {
2627428d7b3dSmrg	unsigned int pad:2;
2628428d7b3dSmrg	unsigned int sampler_count:3;
2629428d7b3dSmrg	unsigned int sampler_state_pointer:27;
2630428d7b3dSmrg    } desc2;
2631428d7b3dSmrg
2632428d7b3dSmrg    struct {
2633428d7b3dSmrg	unsigned int binding_table_entry_count:5;
2634428d7b3dSmrg	unsigned int binding_table_pointer:27;
2635428d7b3dSmrg    } desc3;
2636428d7b3dSmrg};
2637428d7b3dSmrg
2638428d7b3dSmrgstruct gen6_blend_state
2639428d7b3dSmrg{
2640428d7b3dSmrg	struct {
2641428d7b3dSmrg		unsigned int dest_blend_factor:5;
2642428d7b3dSmrg		unsigned int source_blend_factor:5;
2643428d7b3dSmrg		unsigned int pad3:1;
2644428d7b3dSmrg		unsigned int blend_func:3;
2645428d7b3dSmrg		unsigned int pad2:1;
2646428d7b3dSmrg		unsigned int ia_dest_blend_factor:5;
2647428d7b3dSmrg		unsigned int ia_source_blend_factor:5;
2648428d7b3dSmrg		unsigned int pad1:1;
2649428d7b3dSmrg		unsigned int ia_blend_func:3;
2650428d7b3dSmrg		unsigned int pad0:1;
2651428d7b3dSmrg		unsigned int ia_blend_enable:1;
2652428d7b3dSmrg		unsigned int blend_enable:1;
2653428d7b3dSmrg	} blend0;
2654428d7b3dSmrg
2655428d7b3dSmrg	struct {
2656428d7b3dSmrg		unsigned int post_blend_clamp_enable:1;
2657428d7b3dSmrg		unsigned int pre_blend_clamp_enable:1;
2658428d7b3dSmrg		unsigned int clamp_range:2;
2659428d7b3dSmrg		unsigned int pad0:4;
2660428d7b3dSmrg		unsigned int x_dither_offset:2;
2661428d7b3dSmrg		unsigned int y_dither_offset:2;
2662428d7b3dSmrg		unsigned int dither_enable:1;
2663428d7b3dSmrg		unsigned int alpha_test_func:3;
2664428d7b3dSmrg		unsigned int alpha_test_enable:1;
2665428d7b3dSmrg		unsigned int pad1:1;
2666428d7b3dSmrg		unsigned int logic_op_func:4;
2667428d7b3dSmrg		unsigned int logic_op_enable:1;
2668428d7b3dSmrg		unsigned int pad2:1;
2669428d7b3dSmrg		unsigned int write_disable_b:1;
2670428d7b3dSmrg		unsigned int write_disable_g:1;
2671428d7b3dSmrg		unsigned int write_disable_r:1;
2672428d7b3dSmrg		unsigned int write_disable_a:1;
2673428d7b3dSmrg		unsigned int pad3:1;
2674428d7b3dSmrg		unsigned int alpha_to_coverage_dither:1;
2675428d7b3dSmrg		unsigned int alpha_to_one:1;
2676428d7b3dSmrg		unsigned int alpha_to_coverage:1;
2677428d7b3dSmrg	} blend1;
2678428d7b3dSmrg};
2679428d7b3dSmrg
2680428d7b3dSmrgstruct gen6_color_calc_state
2681428d7b3dSmrg{
2682428d7b3dSmrg	struct {
2683428d7b3dSmrg		unsigned int alpha_test_format:1;
2684428d7b3dSmrg		unsigned int pad0:14;
2685428d7b3dSmrg		unsigned int round_disable:1;
2686428d7b3dSmrg		unsigned int bf_stencil_ref:8;
2687428d7b3dSmrg		unsigned int stencil_ref:8;
2688428d7b3dSmrg	} cc0;
2689428d7b3dSmrg
2690428d7b3dSmrg	union {
2691428d7b3dSmrg		float alpha_ref_f;
2692428d7b3dSmrg		struct {
2693428d7b3dSmrg			unsigned int ui:8;
2694428d7b3dSmrg			unsigned int pad0:24;
2695428d7b3dSmrg		} alpha_ref_fi;
2696428d7b3dSmrg	} cc1;
2697428d7b3dSmrg
2698428d7b3dSmrg	float constant_r;
2699428d7b3dSmrg	float constant_g;
2700428d7b3dSmrg	float constant_b;
2701428d7b3dSmrg	float constant_a;
2702428d7b3dSmrg};
2703428d7b3dSmrg
2704428d7b3dSmrgstruct gen6_depth_stencil_state
2705428d7b3dSmrg{
2706428d7b3dSmrg	struct {
2707428d7b3dSmrg		unsigned int pad0:3;
2708428d7b3dSmrg		unsigned int bf_stencil_pass_depth_pass_op:3;
2709428d7b3dSmrg		unsigned int bf_stencil_pass_depth_fail_op:3;
2710428d7b3dSmrg		unsigned int bf_stencil_fail_op:3;
2711428d7b3dSmrg		unsigned int bf_stencil_func:3;
2712428d7b3dSmrg		unsigned int bf_stencil_enable:1;
2713428d7b3dSmrg		unsigned int pad1:2;
2714428d7b3dSmrg		unsigned int stencil_write_enable:1;
2715428d7b3dSmrg		unsigned int stencil_pass_depth_pass_op:3;
2716428d7b3dSmrg		unsigned int stencil_pass_depth_fail_op:3;
2717428d7b3dSmrg		unsigned int stencil_fail_op:3;
2718428d7b3dSmrg		unsigned int stencil_func:3;
2719428d7b3dSmrg		unsigned int stencil_enable:1;
2720428d7b3dSmrg	} ds0;
2721428d7b3dSmrg
2722428d7b3dSmrg	struct {
2723428d7b3dSmrg		unsigned int bf_stencil_write_mask:8;
2724428d7b3dSmrg		unsigned int bf_stencil_test_mask:8;
2725428d7b3dSmrg		unsigned int stencil_write_mask:8;
2726428d7b3dSmrg		unsigned int stencil_test_mask:8;
2727428d7b3dSmrg	} ds1;
2728428d7b3dSmrg
2729428d7b3dSmrg	struct {
2730428d7b3dSmrg		unsigned int pad0:26;
2731428d7b3dSmrg		unsigned int depth_write_enable:1;
2732428d7b3dSmrg		unsigned int depth_test_func:3;
2733428d7b3dSmrg		unsigned int pad1:1;
2734428d7b3dSmrg		unsigned int depth_test_enable:1;
2735428d7b3dSmrg	} ds2;
2736428d7b3dSmrg};
2737428d7b3dSmrg
2738428d7b3dSmrgtypedef enum {
2739428d7b3dSmrg	SAMPLER_FILTER_NEAREST = 0,
2740428d7b3dSmrg	SAMPLER_FILTER_BILINEAR,
2741428d7b3dSmrg	FILTER_COUNT
2742428d7b3dSmrg} sampler_filter_t;
2743428d7b3dSmrg
2744428d7b3dSmrgtypedef enum {
2745428d7b3dSmrg	SAMPLER_EXTEND_NONE = 0,
2746428d7b3dSmrg	SAMPLER_EXTEND_REPEAT,
2747428d7b3dSmrg	SAMPLER_EXTEND_PAD,
2748428d7b3dSmrg	SAMPLER_EXTEND_REFLECT,
2749428d7b3dSmrg	EXTEND_COUNT
2750428d7b3dSmrg} sampler_extend_t;
2751428d7b3dSmrg
2752428d7b3dSmrgtypedef enum {
2753428d7b3dSmrg	WM_KERNEL = 0,
2754428d7b3dSmrg	WM_KERNEL_P,
2755428d7b3dSmrg
2756428d7b3dSmrg	WM_KERNEL_MASK,
2757428d7b3dSmrg	WM_KERNEL_MASK_P,
2758428d7b3dSmrg
2759428d7b3dSmrg	WM_KERNEL_MASKCA,
2760428d7b3dSmrg	WM_KERNEL_MASKCA_P,
2761428d7b3dSmrg
2762428d7b3dSmrg	WM_KERNEL_MASKSA,
2763428d7b3dSmrg	WM_KERNEL_MASKSA_P,
2764428d7b3dSmrg
2765428d7b3dSmrg	WM_KERNEL_OPACITY,
2766428d7b3dSmrg	WM_KERNEL_OPACITY_P,
2767428d7b3dSmrg
2768428d7b3dSmrg	WM_KERNEL_VIDEO_PLANAR,
2769428d7b3dSmrg	WM_KERNEL_VIDEO_PACKED,
2770428d7b3dSmrg	KERNEL_COUNT
2771428d7b3dSmrg} wm_kernel_t;
2772428d7b3dSmrg#endif
2773