1428d7b3dSmrg/*
2428d7b3dSmrg * Copyright © 2006 Intel Corporation
3428d7b3dSmrg *
4428d7b3dSmrg * Permission is hereby granted, free of charge, to any person obtaining a
5428d7b3dSmrg * copy of this software and associated documentation files (the "Software"),
6428d7b3dSmrg * to deal in the Software without restriction, including without limitation
7428d7b3dSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8428d7b3dSmrg * and/or sell copies of the Software, and to permit persons to whom the
9428d7b3dSmrg * Software is furnished to do so, subject to the following conditions:
10428d7b3dSmrg *
11428d7b3dSmrg * The above copyright notice and this permission notice (including the next
12428d7b3dSmrg * paragraph) shall be included in all copies or substantial portions of the
13428d7b3dSmrg * Software.
14428d7b3dSmrg *
15428d7b3dSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16428d7b3dSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17428d7b3dSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18428d7b3dSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19428d7b3dSmrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20428d7b3dSmrg * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21428d7b3dSmrg * SOFTWARE.
22428d7b3dSmrg *
23428d7b3dSmrg * Authors:
24428d7b3dSmrg *    Xiang Haihao <haihao.xiang@intel.com>
25428d7b3dSmrg *
26428d7b3dSmrg */
27428d7b3dSmrg
28428d7b3dSmrg#ifndef _I915_STRUCTS_H
29428d7b3dSmrg#define _I915_STRUCTS_H
30428d7b3dSmrg
31428d7b3dSmrg#include <stdint.h>
32428d7b3dSmrg
33428d7b3dSmrg/* BLT */
34428d7b3dSmrg#define CMD_2D          0x02
35428d7b3dSmrg#define OPC_COLOR_BLT                           (0x40)
36428d7b3dSmrg
37428d7b3dSmrgstruct i915_color_blt {
38428d7b3dSmrg	struct {
39428d7b3dSmrg		unsigned length:5;
40428d7b3dSmrg		unsigned pad0:15;
41428d7b3dSmrg		unsigned bpp_mask:2;
42428d7b3dSmrg		unsigned opcode:7;
43428d7b3dSmrg		unsigned type:3;
44428d7b3dSmrg	} dw0;
45428d7b3dSmrg
46428d7b3dSmrg	struct {
47428d7b3dSmrg		unsigned pitch:16;
48428d7b3dSmrg		unsigned rop:8;
49428d7b3dSmrg		unsigned color_depth:2;
50428d7b3dSmrg		unsigned pad0:6;
51428d7b3dSmrg	} dw1;
52428d7b3dSmrg
53428d7b3dSmrg	struct {
54428d7b3dSmrg		unsigned width:16;
55428d7b3dSmrg		unsigned height:16;
56428d7b3dSmrg	} dw2;
57428d7b3dSmrg
58428d7b3dSmrg	struct {
59428d7b3dSmrg		unsigned address;
60428d7b3dSmrg	} dw3;
61428d7b3dSmrg
62428d7b3dSmrg	struct {
63428d7b3dSmrg		unsigned pattern;
64428d7b3dSmrg	} dw4;
65428d7b3dSmrg};
66428d7b3dSmrg
67428d7b3dSmrg/* 3D_INSTRUCTION */
68428d7b3dSmrg#define CMD_3D          0x03
69428d7b3dSmrg#define OPCODE_3D(x)	(CMD_3D << 29 | (x) << 16)
70428d7b3dSmrg
71428d7b3dSmrg#define OPC_3DMPEG_MACROBLOCK_IPICTURE          (0x01 + (0x1e << 5))
72428d7b3dSmrg#define OPC_3DMPEG_SET_ORIGIN                   (0x10 + (0x1e << 5))
73428d7b3dSmrg#define OPC_3DMPEG_MACROBLOCK                   (0x11 + (0x1e << 5))
74428d7b3dSmrg#define OPC_3DMPEG_SLICE                        (0x12 + (0x1e << 5))
75428d7b3dSmrg#define OPC_3DMPEG_QM_PALETTE_LOAD              (0x13 + (0x1e << 5))
76428d7b3dSmrg
77428d7b3dSmrg#define OPC_3DSTATE_SCISSOR_ENABLE              (0x10 + (0x1c << 5))
78428d7b3dSmrg
79428d7b3dSmrg#define OPC_3DSTATE_MAP_STATE                   (0x00 + (0x1d << 8))
80428d7b3dSmrg#define OPC_3DSTATE_SAMPLER_STATE               (0x01 + (0x1d << 8))
81428d7b3dSmrg#define OPC_3DSTATE_LOAD_STATE_IMMEDIATE_1      (0x04 + (0x1d << 8))
82428d7b3dSmrg#define OP_3D_LOAD_STATE_IMMEDIATE_1      	OPCODE_3D(OPC_3DSTATE_LOAD_STATE_IMMEDIATE_1)
83428d7b3dSmrg#define OPC_3DSTATE_PIXEL_SHADER_PROGRAM        (0x05 + (0x1d << 8))
84428d7b3dSmrg#define OPC_3DSTATE_PIXEL_SHADER_CONSTANTS      (0x06 + (0x1d << 8))
85428d7b3dSmrg#define OPC_3DSTATE_LOAD_INDIRECT               (0x07 + (0x1d << 8))
86428d7b3dSmrg#define OP_3D_LOAD_INDIRECT               	OPCODE_3D(OPC_3DSTATE_LOAD_INDIRECT)
87428d7b3dSmrg
88428d7b3dSmrg#define OPC_3DSTATE_MODES_5                     (0x0c)
89428d7b3dSmrg#define OPC_3DSTATE_COORD_SET_BINDINGS          (0x16)
90428d7b3dSmrg#define OPC_3DPRIMITIVE                         (0x1f)
91428d7b3dSmrg
92428d7b3dSmrg#define OPC_3DSTATE_DRAWING_RECTANGLE           (0x80 + (0x1d << 8))
93428d7b3dSmrg#define OPC_3DSTATE_SCISSOR_RECTANGLE           (0x81 + (0x1d << 8))
94428d7b3dSmrg#define OPC_3DSTATE_DEST_BUFFER_VARIABLES       (0x85 + (0x1d << 8))
95428d7b3dSmrg#define OPC_3DSTATE_DEST_BUFFER_VARIABLES_MPEG  (0x87 + (0x1d << 8))
96428d7b3dSmrg#define OPC_3DSTATE_BUFFER_INFO                 (0x8e + (0x1d << 8))
97428d7b3dSmrg
98428d7b3dSmrg/*
99428d7b3dSmrg * 3DMPEG instructions
100428d7b3dSmrg */
101428d7b3dSmrgstruct i915_3dmpeg_macroblock_header {
102428d7b3dSmrg	struct {
103428d7b3dSmrg		unsigned length:19;
104428d7b3dSmrg		unsigned opcode:10;
105428d7b3dSmrg		unsigned type:3;
106428d7b3dSmrg	} dw0;
107428d7b3dSmrg
108428d7b3dSmrg	struct {
109428d7b3dSmrg		unsigned mb_intra:1;
110428d7b3dSmrg		unsigned forward:1;
111428d7b3dSmrg		unsigned backward:1;
112428d7b3dSmrg		unsigned h263_4mv:1;
113428d7b3dSmrg		unsigned pad0:1;
114428d7b3dSmrg		unsigned dct_type:1;
115428d7b3dSmrg		unsigned pad1:2;
116428d7b3dSmrg		unsigned motion_type:2;
117428d7b3dSmrg		unsigned pad2:2;
118428d7b3dSmrg		unsigned vertical_field_select:4;
119428d7b3dSmrg		unsigned coded_block_pattern:6;
120428d7b3dSmrg		unsigned pad3:2;
121428d7b3dSmrg		unsigned skipped_macroblocks:7;
122428d7b3dSmrg		unsigned pad4:1;
123428d7b3dSmrg	} dw1;
124428d7b3dSmrg};
125428d7b3dSmrg
126428d7b3dSmrgstruct i915_3dmpeg_macroblock_0mv {
127428d7b3dSmrg	struct i915_3dmpeg_macroblock_header header;
128428d7b3dSmrg};
129428d7b3dSmrg
130428d7b3dSmrgstruct i915_3dmpeg_macroblock_1fbmv {
131428d7b3dSmrg	struct i915_3dmpeg_macroblock_header header;
132428d7b3dSmrg	unsigned dw2;
133428d7b3dSmrg	unsigned dw3;
134428d7b3dSmrg};
135428d7b3dSmrgstruct i915_3dmpeg_macroblock_2fbmv {
136428d7b3dSmrg	struct i915_3dmpeg_macroblock_header header;
137428d7b3dSmrg	unsigned dw2;
138428d7b3dSmrg	unsigned dw3;
139428d7b3dSmrg	unsigned dw4;
140428d7b3dSmrg	unsigned dw5;
141428d7b3dSmrg};
142428d7b3dSmrg
143428d7b3dSmrgstruct i915_3dmpeg_macroblock_5fmv {
144428d7b3dSmrg	struct i915_3dmpeg_macroblock_header header;
145428d7b3dSmrg	unsigned dw2;
146428d7b3dSmrg	unsigned dw3;
147428d7b3dSmrg	unsigned dw4;
148428d7b3dSmrg	unsigned dw5;
149428d7b3dSmrg	unsigned dw6;
150428d7b3dSmrg};
151428d7b3dSmrg
152428d7b3dSmrgstruct i915_3dmpeg_macroblock_ipicture {
153428d7b3dSmrg	struct {
154428d7b3dSmrg		unsigned pad0:5;
155428d7b3dSmrg		unsigned dct_type:1;
156428d7b3dSmrg		unsigned pad1:13;
157428d7b3dSmrg		unsigned opcode:10;
158428d7b3dSmrg		unsigned type:3;
159428d7b3dSmrg	} dw0;
160428d7b3dSmrg};
161428d7b3dSmrg
162428d7b3dSmrgstruct i915_3dmpeg_set_origin {
163428d7b3dSmrg	struct {
164428d7b3dSmrg		unsigned length:19;
165428d7b3dSmrg		unsigned opcode:10;
166428d7b3dSmrg		unsigned type:3;
167428d7b3dSmrg	} dw0;
168428d7b3dSmrg
169428d7b3dSmrg	struct {
170428d7b3dSmrg		unsigned v_origin:7;
171428d7b3dSmrg		unsigned pad0:1;
172428d7b3dSmrg		unsigned h_origin:7;
173428d7b3dSmrg		unsigned pad1:17;
174428d7b3dSmrg	} dw1;
175428d7b3dSmrg};
176428d7b3dSmrg
177428d7b3dSmrgstruct i915_3dmpeg_slice {
178428d7b3dSmrg	struct {
179428d7b3dSmrg		unsigned length:19;
180428d7b3dSmrg		unsigned opcode:10;
181428d7b3dSmrg		unsigned type:3;
182428d7b3dSmrg	} dw0;
183428d7b3dSmrg
184428d7b3dSmrg	struct {
185428d7b3dSmrg		unsigned fst_mb_bit_off:3;
186428d7b3dSmrg		unsigned pad0:5;
187428d7b3dSmrg		unsigned mb_count:7;
188428d7b3dSmrg		unsigned pad1:1;
189428d7b3dSmrg		unsigned v_position:7;
190428d7b3dSmrg		unsigned pad2:1;
191428d7b3dSmrg		unsigned h_position:7;
192428d7b3dSmrg		unsigned pad3:1;
193428d7b3dSmrg	} dw1;
194428d7b3dSmrg
195428d7b3dSmrg	struct {
196428d7b3dSmrg		unsigned length_minus_one:17;
197428d7b3dSmrg		unsigned pad0:7;
198428d7b3dSmrg		unsigned qt_scale_code:5;
199428d7b3dSmrg		unsigned pad1:3;
200428d7b3dSmrg	} dw2;
201428d7b3dSmrg};
202428d7b3dSmrg
203428d7b3dSmrgstruct i915_3dmpeg_qm_palette_load {
204428d7b3dSmrg	struct {
205428d7b3dSmrg		unsigned length:4;
206428d7b3dSmrg		unsigned pad0:15;
207428d7b3dSmrg		unsigned opcode:10;
208428d7b3dSmrg		unsigned type:3;
209428d7b3dSmrg	} dw0;
210428d7b3dSmrg
211428d7b3dSmrg	unsigned quantmatrix[16];
212428d7b3dSmrg};
213428d7b3dSmrg
214428d7b3dSmrg/*
215428d7b3dSmrg * 3DSTATE instruction
216428d7b3dSmrg */
217428d7b3dSmrg#define BUFFERID_COLOR_BACK     3
218428d7b3dSmrg#define BUFFERID_COLOR_AUX      4
219428d7b3dSmrg#define BUFFERID_MC_INTRA_CORR  5
220428d7b3dSmrg#define BUFFERID_DEPTH          7
221428d7b3dSmrg
222428d7b3dSmrg#define TILEWALK_XMAJOR         0
223428d7b3dSmrg#define TILEWALK_YMAJOR         1
224428d7b3dSmrg
225428d7b3dSmrgstruct i915_3dstate_buffer_info {
226428d7b3dSmrg	struct {
227428d7b3dSmrg		unsigned length:16;
228428d7b3dSmrg		unsigned opcode:13;
229428d7b3dSmrg		unsigned type:3;
230428d7b3dSmrg	} dw0;
231428d7b3dSmrg
232428d7b3dSmrg	struct {
233428d7b3dSmrg		unsigned pad0:2;
234428d7b3dSmrg		unsigned pitch:12;
235428d7b3dSmrg		unsigned pad1:7;
236428d7b3dSmrg		unsigned walk:1;
237428d7b3dSmrg		unsigned tiled_surface:1;
238428d7b3dSmrg		unsigned fence_regs:1;
239428d7b3dSmrg		unsigned buffer_id:4;
240428d7b3dSmrg		unsigned aux_id:1;
241428d7b3dSmrg		unsigned pad2:3;
242428d7b3dSmrg	} dw1;
243428d7b3dSmrg
244428d7b3dSmrg	struct {
245428d7b3dSmrg		unsigned pad0:2;
246428d7b3dSmrg		unsigned base_address:27;
247428d7b3dSmrg		unsigned pad1:3;
248428d7b3dSmrg	} dw2;
249428d7b3dSmrg};
250428d7b3dSmrg
251428d7b3dSmrg#define COLORBUFFER_8BIT         0x00
252428d7b3dSmrg#define COLORBUFFER_X1R5G5B5     0x01
253428d7b3dSmrg#define COLORBUFFER_R5G6B5       0x02
254428d7b3dSmrg#define COLORBUFFER_A8R8G8B8     0x03
255428d7b3dSmrg#define COLORBUFFER_YCRCB_SWAP   0x04
256428d7b3dSmrg#define COLORBUFFER_YCRCB_NORMAL 0x05
257428d7b3dSmrg#define COLORBUFFER_YCRCB_SWAPUV 0x06
258428d7b3dSmrg#define COLORBUFFER_YCRCB_SWAPUVY   0x07
259428d7b3dSmrg#define COLORBUFFER_A4R4G4B4     0x08
260428d7b3dSmrg#define COLORBUFFER_A1R5G5B5     0x09
261428d7b3dSmrg#define COLORBUFFER_A2R10G10B10  0x0a
262428d7b3dSmrg
263428d7b3dSmrgstruct i915_3dstate_dest_buffer_variables {
264428d7b3dSmrg	struct {
265428d7b3dSmrg		unsigned length:16;
266428d7b3dSmrg		unsigned opcode:13;
267428d7b3dSmrg		unsigned type:3;
268428d7b3dSmrg	} dw0;
269428d7b3dSmrg
270428d7b3dSmrg	struct {
271428d7b3dSmrg		unsigned v_ls_offset:1;
272428d7b3dSmrg		unsigned v_ls:1;
273428d7b3dSmrg		unsigned depth_fmt:2;
274428d7b3dSmrg		unsigned pad0:4;
275428d7b3dSmrg		unsigned color_fmt:4;
276428d7b3dSmrg		unsigned yuv422_select:3;
277428d7b3dSmrg		unsigned pad1:1;
278428d7b3dSmrg		unsigned dest_v_bias:4;
279428d7b3dSmrg		unsigned dest_h_bias:4;
280428d7b3dSmrg		unsigned dither_enhancement:1;
281428d7b3dSmrg		unsigned linear_gamma:1;
282428d7b3dSmrg		unsigned dither_pattern:2;
283428d7b3dSmrg		unsigned lod_preclamp:1;
284428d7b3dSmrg		unsigned edt_zone:1;	/* early depth test in zone rendering */
285428d7b3dSmrg		unsigned texture_default_color:1;
286428d7b3dSmrg		unsigned edt_classic:1;	/* early depth test in classic mode */
287428d7b3dSmrg	} dw1;
288428d7b3dSmrg};
289428d7b3dSmrg
290428d7b3dSmrg#define MPEG_DECODE_MC          0
291428d7b3dSmrg#define MPEG_DECODE_VLD_IDCT_MC 1
292428d7b3dSmrg
293428d7b3dSmrg#define MPEG_I_PICTURE          1
294428d7b3dSmrg#define MPEG_P_PICTURE          2
295428d7b3dSmrg#define MPEG_B_PICTURE          3
296428d7b3dSmrg
297428d7b3dSmrg#define MC_SUB_1H               0
298428d7b3dSmrg#define MC_SUB_2H               1
299428d7b3dSmrg#define MC_SUB_4H               2
300428d7b3dSmrg
301428d7b3dSmrg#define MC_SUB_1V               0
302428d7b3dSmrg#define MC_SUB_2V               1
303428d7b3dSmrg
304428d7b3dSmrgstruct i915_3dstate_dest_buffer_variables_mpeg {
305428d7b3dSmrg	struct {
306428d7b3dSmrg		unsigned length:16;
307428d7b3dSmrg		unsigned opcode:13;
308428d7b3dSmrg		unsigned type:3;
309428d7b3dSmrg	} dw0;
310428d7b3dSmrg
311428d7b3dSmrg	struct {
312428d7b3dSmrg		unsigned picture_width:7;
313428d7b3dSmrg		unsigned pad0:1;
314428d7b3dSmrg		unsigned v_subsample_factor:2;
315428d7b3dSmrg		unsigned h_subsample_factor:2;
316428d7b3dSmrg		unsigned tff:1;
317428d7b3dSmrg		unsigned mismatch:1;
318428d7b3dSmrg		unsigned pad1:1;
319428d7b3dSmrg		unsigned intra8:1;
320428d7b3dSmrg		unsigned abort_on_error:8;
321428d7b3dSmrg		unsigned pad2:4;
322428d7b3dSmrg		unsigned bidir_avrg_control:1;
323428d7b3dSmrg		unsigned rcontrol:1;
324428d7b3dSmrg		unsigned decode_mode:2;
325428d7b3dSmrg	} dw1;
326428d7b3dSmrg
327428d7b3dSmrg	struct {
328428d7b3dSmrg		unsigned pad0:1;
329428d7b3dSmrg		unsigned picture_coding_type:2;
330428d7b3dSmrg		unsigned pad1:2;
331428d7b3dSmrg		unsigned scan_order:1;
332428d7b3dSmrg		unsigned pad2:2;
333428d7b3dSmrg		unsigned q_scale_type:1;
334428d7b3dSmrg		unsigned concealment:1;
335428d7b3dSmrg		unsigned fpf_dct:1;
336428d7b3dSmrg		unsigned pad3:2;
337428d7b3dSmrg		unsigned intra_dc:2;
338428d7b3dSmrg		unsigned intra_vlc:1;
339428d7b3dSmrg		unsigned f_code00:4;
340428d7b3dSmrg		unsigned f_code01:4;
341428d7b3dSmrg		unsigned f_code10:4;
342428d7b3dSmrg		unsigned f_code11:4;
343428d7b3dSmrg	} dw2;
344428d7b3dSmrg};
345428d7b3dSmrg
346428d7b3dSmrgstruct i915_mc_static_indirect_state_buffer {
347428d7b3dSmrg	struct i915_3dstate_buffer_info dest_y;
348428d7b3dSmrg	struct i915_3dstate_buffer_info dest_u;
349428d7b3dSmrg	struct i915_3dstate_buffer_info dest_v;
350428d7b3dSmrg	struct i915_3dstate_dest_buffer_variables dest_buf;
351428d7b3dSmrg	struct i915_3dstate_dest_buffer_variables_mpeg dest_buf_mpeg;
352428d7b3dSmrg	struct i915_3dstate_buffer_info corr;
353428d7b3dSmrg};
354428d7b3dSmrg
355428d7b3dSmrg#define MAP_MAP0        0x0001
356428d7b3dSmrg#define MAP_MAP1        0x0002
357428d7b3dSmrg#define MAP_MAP2        0x0004
358428d7b3dSmrg#define MAP_MAP3        0x0008
359428d7b3dSmrg#define MAP_MAP4        0x0010
360428d7b3dSmrg#define MAP_MAP5        0x0020
361428d7b3dSmrg#define MAP_MAP6        0x0040
362428d7b3dSmrg#define MAP_MAP7        0x0080
363428d7b3dSmrg#define MAP_MAP8        0x0100
364428d7b3dSmrg#define MAP_MAP9        0x0200
365428d7b3dSmrg#define MAP_MAP10       0x0400
366428d7b3dSmrg#define MAP_MAP11       0x0800
367428d7b3dSmrg#define MAP_MAP12       0x1000
368428d7b3dSmrg#define MAP_MAP13       0x2000
369428d7b3dSmrg#define MAP_MAP14       0x4000
370428d7b3dSmrg#define MAP_MAP15       0x8000
371428d7b3dSmrg
372428d7b3dSmrgstruct texture_map {
373428d7b3dSmrg	struct {
374428d7b3dSmrg		unsigned v_ls_offset:1;
375428d7b3dSmrg		unsigned v_ls:1;
376428d7b3dSmrg		unsigned base_address:27;
377428d7b3dSmrg		unsigned pad0:2;
378428d7b3dSmrg		unsigned untrusted:1;
379428d7b3dSmrg	} tm0;
380428d7b3dSmrg
381428d7b3dSmrg	struct {
382428d7b3dSmrg		unsigned tile_walk:1;
383428d7b3dSmrg		unsigned tiled_surface:1;
384428d7b3dSmrg		unsigned utilize_fence_regs:1;
385428d7b3dSmrg		unsigned texel_fmt:4;
386428d7b3dSmrg		unsigned surface_fmt:3;
387428d7b3dSmrg		unsigned width:11;
388428d7b3dSmrg		unsigned height:11;
389428d7b3dSmrg	} tm1;
390428d7b3dSmrg
391428d7b3dSmrg	struct {
392428d7b3dSmrg		unsigned depth:8;
393428d7b3dSmrg		unsigned mipmap_layout:1;
394428d7b3dSmrg		unsigned max_lod:6;
395428d7b3dSmrg		unsigned cube_face:6;
396428d7b3dSmrg		unsigned pitch:11;
397428d7b3dSmrg	} tm2;
398428d7b3dSmrg};
399428d7b3dSmrg
400428d7b3dSmrgstruct i915_3dstate_map_state {
401428d7b3dSmrg	struct {
402428d7b3dSmrg		unsigned length:6;
403428d7b3dSmrg		unsigned pad0:9;
404428d7b3dSmrg		unsigned retain:1;
405428d7b3dSmrg		unsigned opcode:13;
406428d7b3dSmrg		unsigned type:3;
407428d7b3dSmrg	} dw0;
408428d7b3dSmrg
409428d7b3dSmrg	struct {
410428d7b3dSmrg		unsigned map_mask:16;
411428d7b3dSmrg		unsigned pad0:16;
412428d7b3dSmrg	} dw1;
413428d7b3dSmrg};
414428d7b3dSmrg
415428d7b3dSmrgstruct i915_mc_map_state {
416428d7b3dSmrg	struct i915_3dstate_map_state y_map;
417428d7b3dSmrg	struct texture_map y_forward;
418428d7b3dSmrg	struct texture_map y_backward;
419428d7b3dSmrg	struct i915_3dstate_map_state u_map;
420428d7b3dSmrg	struct texture_map u_forward;
421428d7b3dSmrg	struct texture_map u_backward;
422428d7b3dSmrg	struct i915_3dstate_map_state v_map;
423428d7b3dSmrg	struct texture_map v_forward;
424428d7b3dSmrg	struct texture_map v_backward;
425428d7b3dSmrg};
426428d7b3dSmrg
427428d7b3dSmrg#define SAMPLER_SAMPLER0        0x0001
428428d7b3dSmrg#define SAMPLER_SAMPLER1        0x0002
429428d7b3dSmrg#define SAMPLER_SAMPLER2        0x0004
430428d7b3dSmrg#define SAMPLER_SAMPLER3        0x0008
431428d7b3dSmrg#define SAMPLER_SAMPLER4        0x0010
432428d7b3dSmrg#define SAMPLER_SAMPLER5        0x0020
433428d7b3dSmrg#define SAMPLER_SAMPLER6        0x0040
434428d7b3dSmrg#define SAMPLER_SAMPLER7        0x0080
435428d7b3dSmrg#define SAMPLER_SAMPLER8        0x0100
436428d7b3dSmrg#define SAMPLER_SAMPLER9        0x0200
437428d7b3dSmrg#define SAMPLER_SAMPLER10       0x0400
438428d7b3dSmrg#define SAMPLER_SAMPLER11       0x0800
439428d7b3dSmrg#define SAMPLER_SAMPLER12       0x1000
440428d7b3dSmrg#define SAMPLER_SAMPLER13       0x2000
441428d7b3dSmrg#define SAMPLER_SAMPLER14       0x4000
442428d7b3dSmrg#define SAMPLER_SAMPLER15       0x8000
443428d7b3dSmrg
444428d7b3dSmrg#define MIPFILTER_NONE          0
445428d7b3dSmrg#define MIPFILTER_NEAREST       1
446428d7b3dSmrg#define MIPFILTER_LINEAR        3
447428d7b3dSmrg
448428d7b3dSmrg#define MAPFILTER_NEAREST       0
449428d7b3dSmrg#define MAPFILTER_LINEAR        1
450428d7b3dSmrg#define MAPFILTER_ANISOTROPIC   2
451428d7b3dSmrg#define MAPFILTER_4X4_1         3
452428d7b3dSmrg#define MAPFILTER_4X4_2         4
453428d7b3dSmrg#define MAPFILTER_4X4_FLAT      5
454428d7b3dSmrg#define MAPFILTER_MONO          6
455428d7b3dSmrg
456428d7b3dSmrg#define ANISORATIO_2            0
457428d7b3dSmrg#define ANISORATIO_4            1
458428d7b3dSmrg
459428d7b3dSmrg#define PREFILTEROP_ALWAYS      0
460428d7b3dSmrg#define PREFILTEROP_NEVER       1
461428d7b3dSmrg#define PREFILTEROP_LESS        2
462428d7b3dSmrg#define PREFILTEROP_EQUAL       3
463428d7b3dSmrg#define PREFILTEROP_LEQUAL      4
464428d7b3dSmrg#define PREFILTEROP_GREATER     5
465428d7b3dSmrg#define PREFILTEROP_NOTEQUAL    6
466428d7b3dSmrg#define PREFILTEROP_GEQUAL      7
467428d7b3dSmrg
468428d7b3dSmrg#define TEXCOORDMODE_WRAP       0
469428d7b3dSmrg#define TEXCOORDMODE_MIRROR     1
470428d7b3dSmrg#define TEXCOORDMODE_CLAMP      2
471428d7b3dSmrg#define TEXCOORDMODE_CUBE       3
472428d7b3dSmrg#define TEXCOORDMODE_CLAMP_BORDER       4
473428d7b3dSmrg#define TEXCOORDMODE_MIRROR_ONCE        5
474428d7b3dSmrg
475428d7b3dSmrgstruct texture_sampler {
476428d7b3dSmrg	struct {
477428d7b3dSmrg		unsigned shadow_function:3;
478428d7b3dSmrg		unsigned max_anisotropy:1;
479428d7b3dSmrg		unsigned shadow_enable:1;
480428d7b3dSmrg		unsigned lod_bias:9;
481428d7b3dSmrg		unsigned min_filter:3;
482428d7b3dSmrg		unsigned mag_filter:3;
483428d7b3dSmrg		unsigned mip_filter:2;
484428d7b3dSmrg		unsigned base_level:5;
485428d7b3dSmrg		unsigned chromakey_index:2;
486428d7b3dSmrg		unsigned color_conversion:1;
487428d7b3dSmrg		unsigned planar2packet:1;
488428d7b3dSmrg		unsigned reverse_gamma:1;
489428d7b3dSmrg	} ts0;
490428d7b3dSmrg
491428d7b3dSmrg	struct {
492428d7b3dSmrg		unsigned east_deinterlacer:1;
493428d7b3dSmrg		unsigned map_index:4;
494428d7b3dSmrg		unsigned normalized_coor:1;
495428d7b3dSmrg		unsigned tcz_control:3;
496428d7b3dSmrg		unsigned tcy_control:3;
497428d7b3dSmrg		unsigned tcx_control:3;
498428d7b3dSmrg		unsigned chromakey_enable:1;
499428d7b3dSmrg		unsigned keyed_texture_filter:1;
500428d7b3dSmrg		unsigned kill_pixel:1;
501428d7b3dSmrg		unsigned pad0:6;
502428d7b3dSmrg		unsigned min_lod:8;
503428d7b3dSmrg	} ts1;
504428d7b3dSmrg
505428d7b3dSmrg	struct {
506428d7b3dSmrg		unsigned default_color;
507428d7b3dSmrg	} ts2;
508428d7b3dSmrg};
509428d7b3dSmrg
510428d7b3dSmrgstruct i915_3dstate_sampler_state {
511428d7b3dSmrg	struct {
512428d7b3dSmrg		unsigned length:6;
513428d7b3dSmrg		unsigned pad0:10;
514428d7b3dSmrg		unsigned opcode:13;
515428d7b3dSmrg		unsigned type:3;
516428d7b3dSmrg	} dw0;
517428d7b3dSmrg
518428d7b3dSmrg	struct {
519428d7b3dSmrg		unsigned sampler_masker:16;
520428d7b3dSmrg		unsigned pad0:16;
521428d7b3dSmrg	} dw1;
522428d7b3dSmrg	/* we always use two samplers for mc */
523428d7b3dSmrg	struct texture_sampler sampler0;
524428d7b3dSmrg	struct texture_sampler sampler1;
525428d7b3dSmrg};
526428d7b3dSmrg
527428d7b3dSmrgstruct arithmetic_inst {
528428d7b3dSmrg	struct {
529428d7b3dSmrg		unsigned pad0:2;
530428d7b3dSmrg		unsigned src0_reg:5;
531428d7b3dSmrg		unsigned src0_reg_t:3;
532428d7b3dSmrg		unsigned dest_channel_mask:4;
533428d7b3dSmrg		unsigned dest_reg:4;
534428d7b3dSmrg		unsigned pad1:1;
535428d7b3dSmrg		unsigned dest_reg_t:3;
536428d7b3dSmrg		unsigned dest_saturate:1;
537428d7b3dSmrg		unsigned pad2:1;
538428d7b3dSmrg		unsigned opcode:5;
539428d7b3dSmrg		unsigned pad3:3;
540428d7b3dSmrg	} dw0;
541428d7b3dSmrg
542428d7b3dSmrg	struct {
543428d7b3dSmrg		unsigned src1_y_select:3;
544428d7b3dSmrg		unsigned src1_y_negate:1;
545428d7b3dSmrg		unsigned src1_x_select:3;
546428d7b3dSmrg		unsigned src1_x_negate:1;
547428d7b3dSmrg		unsigned src1_reg:5;
548428d7b3dSmrg		unsigned src1_reg_t:3;
549428d7b3dSmrg		unsigned src0_w_select:3;
550428d7b3dSmrg		unsigned src0_w_negate:1;
551428d7b3dSmrg		unsigned src0_z_select:3;
552428d7b3dSmrg		unsigned src0_z_negate:1;
553428d7b3dSmrg		unsigned src0_y_select:3;
554428d7b3dSmrg		unsigned src0_y_negate:1;
555428d7b3dSmrg		unsigned src0_x_select:3;
556428d7b3dSmrg		unsigned src0_x_negate:1;
557428d7b3dSmrg	} dw1;
558428d7b3dSmrg
559428d7b3dSmrg	struct {
560428d7b3dSmrg		unsigned src2_w_select:3;
561428d7b3dSmrg		unsigned src2_w_negate:1;
562428d7b3dSmrg		unsigned src2_z_select:3;
563428d7b3dSmrg		unsigned src2_z_negate:1;
564428d7b3dSmrg		unsigned src2_y_select:3;
565428d7b3dSmrg		unsigned src2_y_negate:1;
566428d7b3dSmrg		unsigned src2_x_select:3;
567428d7b3dSmrg		unsigned src2_x_negate:1;
568428d7b3dSmrg		unsigned src2_reg:5;
569428d7b3dSmrg		unsigned src2_reg_t:3;
570428d7b3dSmrg		unsigned src1_w_select:3;
571428d7b3dSmrg		unsigned src1_w_negate:1;
572428d7b3dSmrg		unsigned src1_z_select:3;
573428d7b3dSmrg		unsigned src1_z_negate:1;
574428d7b3dSmrg	} dw2;
575428d7b3dSmrg};
576428d7b3dSmrg
577428d7b3dSmrgstruct texture_inst {
578428d7b3dSmrg	struct {
579428d7b3dSmrg		unsigned sampler_reg:4;
580428d7b3dSmrg		unsigned pad0:10;
581428d7b3dSmrg		unsigned dest_reg:4;
582428d7b3dSmrg		unsigned pad1:1;
583428d7b3dSmrg		unsigned dest_reg_t:3;
584428d7b3dSmrg		unsigned pad2:2;
585428d7b3dSmrg		unsigned opcode:5;
586428d7b3dSmrg		unsigned pad3:3;
587428d7b3dSmrg	} dw0;
588428d7b3dSmrg
589428d7b3dSmrg	struct {
590428d7b3dSmrg		unsigned pad0:16;
591428d7b3dSmrg		unsigned address_reg:5;
592428d7b3dSmrg		unsigned pad1:3;
593428d7b3dSmrg		unsigned address_reg_t:3;
594428d7b3dSmrg		unsigned pad2:5;
595428d7b3dSmrg	} dw1;
596428d7b3dSmrg
597428d7b3dSmrg	struct {
598428d7b3dSmrg		unsigned pad0;
599428d7b3dSmrg	} dw2;
600428d7b3dSmrg};
601428d7b3dSmrg
602428d7b3dSmrgstruct declaration_inst {
603428d7b3dSmrg	struct {
604428d7b3dSmrg		unsigned pad0:10;
605428d7b3dSmrg		unsigned decl_channel_mask:4;
606428d7b3dSmrg		unsigned decl_reg:4;
607428d7b3dSmrg		unsigned pad1:1;
608428d7b3dSmrg		unsigned decl_reg_t:2;
609428d7b3dSmrg		unsigned pad2:1;
610428d7b3dSmrg		unsigned sampler_type:2;
611428d7b3dSmrg		unsigned opcode:5;
612428d7b3dSmrg		unsigned pad3:3;
613428d7b3dSmrg	} dw0;
614428d7b3dSmrg
615428d7b3dSmrg	struct {
616428d7b3dSmrg		unsigned pad0;
617428d7b3dSmrg	} dw1;
618428d7b3dSmrg
619428d7b3dSmrg	struct {
620428d7b3dSmrg		unsigned pad0;
621428d7b3dSmrg	} dw2;
622428d7b3dSmrg};
623428d7b3dSmrg
624428d7b3dSmrgunion shader_inst {
625428d7b3dSmrg	struct arithmetic_inst a;
626428d7b3dSmrg	struct texture_inst t;
627428d7b3dSmrg	struct declaration_inst d;
628428d7b3dSmrg};
629428d7b3dSmrg
630428d7b3dSmrgstruct i915_3dstate_pixel_shader_header {
631428d7b3dSmrg	unsigned length:9;
632428d7b3dSmrg	unsigned pad0:6;
633428d7b3dSmrg	unsigned retain:1;
634428d7b3dSmrg	unsigned opcode:13;
635428d7b3dSmrg	unsigned type:3;
636428d7b3dSmrg};
637428d7b3dSmrg
638428d7b3dSmrgstruct i915_3dstate_pixel_shader_program {
639428d7b3dSmrg	struct i915_3dstate_pixel_shader_header shader0;
640428d7b3dSmrg	/* mov oC, c0.0000 */
641428d7b3dSmrg	uint32_t inst0[3];
642428d7b3dSmrg
643428d7b3dSmrg	struct i915_3dstate_pixel_shader_header shader1;
644428d7b3dSmrg	/* dcl t0.xy */
645428d7b3dSmrg	/* dcl t1.xy */
646428d7b3dSmrg	/* dcl_2D s0 */
647428d7b3dSmrg	/* texld r0, t0, s0 */
648428d7b3dSmrg	/* mov oC, r0 */
649428d7b3dSmrg	uint32_t inst1[3 * 5];
650428d7b3dSmrg
651428d7b3dSmrg	struct i915_3dstate_pixel_shader_header shader2;
652428d7b3dSmrg	/* dcl t2.xy */
653428d7b3dSmrg	/* dcl t3.xy */
654428d7b3dSmrg	/* dcl_2D s1 */
655428d7b3dSmrg	/* texld r0, t2, s1 */
656428d7b3dSmrg	/* mov oC, r0 */
657428d7b3dSmrg	uint32_t inst2[3 * 5];
658428d7b3dSmrg
659428d7b3dSmrg	struct i915_3dstate_pixel_shader_header shader3;
660428d7b3dSmrg	/* dcl t0.xy */
661428d7b3dSmrg	/* dcl t1.xy */
662428d7b3dSmrg	/* dcl t2.xy */
663428d7b3dSmrg	/* dcl t3.xy */
664428d7b3dSmrg	/* dcl_2D s0 */
665428d7b3dSmrg	/* dcl_2D s1 */
666428d7b3dSmrg	/* texld r0, t0, s0 */
667428d7b3dSmrg	/* texld r0, t2, s1 */
668428d7b3dSmrg	/* add r0, r0, r1 */
669428d7b3dSmrg	/* mov oC, r0 */
670428d7b3dSmrg	uint32_t inst3[3 * 10];
671428d7b3dSmrg};
672428d7b3dSmrg
673428d7b3dSmrg#define REG_CR0         0x00000001
674428d7b3dSmrg#define REG_CR1         0x00000002
675428d7b3dSmrg#define REG_CR2         0x00000004
676428d7b3dSmrg#define REG_CR3         0x00000008
677428d7b3dSmrg#define REG_CR4         0x00000010
678428d7b3dSmrg#define REG_CR5         0x00000020
679428d7b3dSmrg#define REG_CR6         0x00000040
680428d7b3dSmrg#define REG_CR7         0x00000080
681428d7b3dSmrg#define REG_CR8         0x00000100
682428d7b3dSmrg#define REG_CR9         0x00000200
683428d7b3dSmrg#define REG_CR10        0x00000400
684428d7b3dSmrg#define REG_CR11        0x00000800
685428d7b3dSmrg#define REG_CR12        0x00001000
686428d7b3dSmrg#define REG_CR13        0x00002000
687428d7b3dSmrg#define REG_CR14        0x00004000
688428d7b3dSmrg#define REG_CR15        0x00008000
689428d7b3dSmrg#define REG_CR16        0x00010000
690428d7b3dSmrg#define REG_CR17        0x00020000
691428d7b3dSmrg#define REG_CR18        0x00040000
692428d7b3dSmrg#define REG_CR19        0x00080000
693428d7b3dSmrg#define REG_CR20        0x00100000
694428d7b3dSmrg#define REG_CR21        0x00200000
695428d7b3dSmrg#define REG_CR22        0x00400000
696428d7b3dSmrg#define REG_CR23        0x00800000
697428d7b3dSmrg#define REG_CR24        0x01000000
698428d7b3dSmrg#define REG_CR25        0x02000000
699428d7b3dSmrg#define REG_CR26        0x04000000
700428d7b3dSmrg#define REG_CR27        0x08000000
701428d7b3dSmrg#define REG_CR28        0x10000000
702428d7b3dSmrg#define REG_CR29        0x20000000
703428d7b3dSmrg#define REG_CR30        0x40000000
704428d7b3dSmrg#define REG_CR31        0x80000000
705428d7b3dSmrg
706428d7b3dSmrgstruct shader_constant {
707428d7b3dSmrg	float x;
708428d7b3dSmrg	float y;
709428d7b3dSmrg	float z;
710428d7b3dSmrg	float w;
711428d7b3dSmrg};
712428d7b3dSmrg
713428d7b3dSmrgstruct i915_3dstate_pixel_shader_constants {
714428d7b3dSmrg	struct {
715428d7b3dSmrg		unsigned length:8;
716428d7b3dSmrg		unsigned pad0:8;
717428d7b3dSmrg		unsigned opcode:13;
718428d7b3dSmrg		unsigned type:3;
719428d7b3dSmrg	} dw0;
720428d7b3dSmrg
721428d7b3dSmrg	struct {
722428d7b3dSmrg		unsigned reg_mask;
723428d7b3dSmrg	} dw1;
724428d7b3dSmrg	/* we only need one constant */
725428d7b3dSmrg	struct shader_constant value;
726428d7b3dSmrg};
727428d7b3dSmrg
728428d7b3dSmrg#define BLOCK_SIS       0x01
729428d7b3dSmrg#define BLOCK_DIS       0x02
730428d7b3dSmrg#define BLOCK_SSB       0x04
731428d7b3dSmrg#define BLOCK_MSB       0x08
732428d7b3dSmrg#define BLOCK_PSP       0x10
733428d7b3dSmrg#define BLOCK_PSC       0x20
734428d7b3dSmrg#define BLOCK_MASK_SHIFT 8
735428d7b3dSmrg
736428d7b3dSmrgtypedef struct _state_ddword {
737428d7b3dSmrg	struct {
738428d7b3dSmrg		unsigned valid:1;
739428d7b3dSmrg		unsigned force:1;
740428d7b3dSmrg		unsigned buffer_address:30;
741428d7b3dSmrg	} dw0;
742428d7b3dSmrg
743428d7b3dSmrg	struct {
744428d7b3dSmrg		unsigned length:9;
745428d7b3dSmrg		unsigned pad0:23;
746428d7b3dSmrg	} dw1;
747428d7b3dSmrg} sis_state, msb_state;
748428d7b3dSmrg#define STATE_VALID	0x1
749428d7b3dSmrg#define STATE_FORCE	0x2
750428d7b3dSmrg
751428d7b3dSmrgstruct i915_3dstate_load_indirect {
752428d7b3dSmrg	struct {
753428d7b3dSmrg		unsigned length:8;
754428d7b3dSmrg		unsigned block_mask:6;
755428d7b3dSmrg		unsigned mem_select:1;
756428d7b3dSmrg		unsigned pad0:1;
757428d7b3dSmrg		unsigned opcode:13;
758428d7b3dSmrg		unsigned type:3;
759428d7b3dSmrg	} dw0;
760428d7b3dSmrg};
761428d7b3dSmrg
762428d7b3dSmrg#define OP_3D_LOAD_INDIRECT_GFX_ADDR (1 << 14)
763428d7b3dSmrg
764428d7b3dSmrg#define TEXCOORDFMT_2FP       0x00
765428d7b3dSmrg#define TEXCOORDFMT_3FP       0x01
766428d7b3dSmrg#define TEXCOORDFMT_4FP       0x02
767428d7b3dSmrg#define TEXCOORDFMT_1FP       0x03
768428d7b3dSmrg#define TEXCOORDFMT_2FP_16    0x04
769428d7b3dSmrg#define TEXCOORDFMT_4FP_16    0x05
770428d7b3dSmrg#define TEXCOORDFMT_NOT_PRESENT  0x0f
771428d7b3dSmrgstruct s2_dword {
772428d7b3dSmrg	unsigned set0_texcoord_fmt:4;
773428d7b3dSmrg	unsigned set1_texcoord_fmt:4;
774428d7b3dSmrg	unsigned set2_texcoord_fmt:4;
775428d7b3dSmrg	unsigned set3_texcoord_fmt:4;
776428d7b3dSmrg	unsigned set4_texcoord_fmt:4;
777428d7b3dSmrg	unsigned set5_texcoord_fmt:4;
778428d7b3dSmrg	unsigned set6_texcoord_fmt:4;
779428d7b3dSmrg	unsigned set7_texcoord_fmt:4;
780428d7b3dSmrg};
781428d7b3dSmrg
782428d7b3dSmrg#define S3_SET0_PCD (1 << 0*4)
783428d7b3dSmrg#define S3_SET1_PCD (1 << 1*4)
784428d7b3dSmrg#define S3_SET2_PCD (1 << 2*4)
785428d7b3dSmrg#define S3_SET3_PCD (1 << 3*4)
786428d7b3dSmrg#define S3_SET4_PCD (1 << 4*4)
787428d7b3dSmrg#define S3_SET5_PCD (1 << 5*4)
788428d7b3dSmrg#define S3_SET6_PCD (1 << 6*4)
789428d7b3dSmrg#define S3_SET7_PCD (1 << 7*4)
790428d7b3dSmrg
791428d7b3dSmrg#define VERTEXHAS_XYZ      1
792428d7b3dSmrg#define VERTEXHAS_XYZW     2
793428d7b3dSmrg#define VERTEXHAS_XY       3
794428d7b3dSmrg#define VERTEXHAS_XYW      4
795428d7b3dSmrg
796428d7b3dSmrg#define CULLMODE_BOTH      0
797428d7b3dSmrg#define CULLMODE_NONE      1
798428d7b3dSmrg#define CULLMODE_CW        2
799428d7b3dSmrg#define CULLMODE_CCW       3
800428d7b3dSmrg
801428d7b3dSmrg#define SHADEMODE_LINEAR   0
802428d7b3dSmrg#define SHADEMODE_FLAT     1
803428d7b3dSmrgstruct s4_dword {
804428d7b3dSmrg	unsigned anti_aliasing_enable:1;
805428d7b3dSmrg	unsigned sprite_point_enable:1;
806428d7b3dSmrg	unsigned fog_parameter_present:1;
807428d7b3dSmrg	unsigned local_depth_offset_enable:1;
808428d7b3dSmrg	unsigned force_specular_diffuse_color:1;
809428d7b3dSmrg	unsigned force_default_diffuse_color:1;
810428d7b3dSmrg	unsigned position_mask:3;
811428d7b3dSmrg	unsigned local_depth_offset_present:1;
812428d7b3dSmrg	unsigned diffuse_color_presetn:1;
813428d7b3dSmrg	unsigned specular_color_fog_factor_present:1;
814428d7b3dSmrg	unsigned point_width_present:1;
815428d7b3dSmrg	unsigned cull_mode:2;
816428d7b3dSmrg	unsigned color_shade_mode:1;
817428d7b3dSmrg	unsigned specular_shade_mode:1;
818428d7b3dSmrg	unsigned fog_shade_mode:1;
819428d7b3dSmrg	unsigned alpha_shade_mode:1;
820428d7b3dSmrg	unsigned line_width:4;
821428d7b3dSmrg	unsigned point_width:9;
822428d7b3dSmrg};
823428d7b3dSmrg
824428d7b3dSmrgstruct s5_dword {
825428d7b3dSmrg	unsigned logic_op_enable:1;
826428d7b3dSmrg	unsigned color_dither_enable:1;
827428d7b3dSmrg	unsigned stencil_test_enable:1;
828428d7b3dSmrg	unsigned stencil_buffer_write_enable:1;
829428d7b3dSmrg	unsigned stencil_pass_depth_pass_op:3;
830428d7b3dSmrg	unsigned stencil_pass_depth_fail_op:3;
831428d7b3dSmrg	unsigned stencil_fail_op:3;
832428d7b3dSmrg	unsigned stencil_test_function:3;
833428d7b3dSmrg	unsigned stencil_reference_value:8;
834428d7b3dSmrg	unsigned fog_enable:1;
835428d7b3dSmrg	unsigned global_depth_offset_enable:1;
836428d7b3dSmrg	unsigned last_pixel_enable:1;
837428d7b3dSmrg	unsigned force_default_point_width:1;
838428d7b3dSmrg	unsigned color_buffer_component_write_disable:4;
839428d7b3dSmrg};
840428d7b3dSmrg
841428d7b3dSmrg#define S6_COLOR_BUFFER_WRITE		(1 << 2)
842428d7b3dSmrg#define S6_DST_BLEND_FACTOR_SHIFT	4
843428d7b3dSmrg#define S6_SRC_BLEND_FACTOR_SHIFT	8
844428d7b3dSmrg#define S6_DEPTH_TEST_ENABLE		(1 << 19)
845428d7b3dSmrg
846428d7b3dSmrgstruct s7_dword {
847428d7b3dSmrg	unsigned global_depth_offset_const;
848428d7b3dSmrg};
849428d7b3dSmrg
850428d7b3dSmrg#define OP_3D_LOAD_STATE_IMM_LOAD_S0 (1 << 4)
851428d7b3dSmrg#define OP_3D_LOAD_STATE_IMM_LOAD_S1 (1 << 5)
852428d7b3dSmrg#define OP_3D_LOAD_STATE_IMM_LOAD_S2 (1 << 6)
853428d7b3dSmrg#define OP_3D_LOAD_STATE_IMM_LOAD_S3 (1 << 7)
854428d7b3dSmrg#define OP_3D_LOAD_STATE_IMM_LOAD_S4 (1 << 8)
855428d7b3dSmrg#define OP_3D_LOAD_STATE_IMM_LOAD_S5 (1 << 9)
856428d7b3dSmrg#define OP_3D_LOAD_STATE_IMM_LOAD_S6 (1 << 10)
857428d7b3dSmrg#define OP_3D_LOAD_STATE_IMM_LOAD_S7 (1 << 11)
858428d7b3dSmrg
859428d7b3dSmrgstruct i915_3dstate_scissor_rectangle {
860428d7b3dSmrg	struct {
861428d7b3dSmrg		unsigned length:16;
862428d7b3dSmrg		unsigned opcode:13;
863428d7b3dSmrg		unsigned type:3;
864428d7b3dSmrg	} dw0;
865428d7b3dSmrg
866428d7b3dSmrg	struct {
867428d7b3dSmrg		unsigned min_x:16;
868428d7b3dSmrg		unsigned min_y:16;
869428d7b3dSmrg	} dw1;
870428d7b3dSmrg
871428d7b3dSmrg	struct {
872428d7b3dSmrg		unsigned max_x:16;
873428d7b3dSmrg		unsigned max_y:16;
874428d7b3dSmrg	} dw2;
875428d7b3dSmrg};
876428d7b3dSmrg
877428d7b3dSmrg#define VERTEX_INLINE         0x00
878428d7b3dSmrg#define VERTEX_INDIRECT       0x01
879428d7b3dSmrg
880428d7b3dSmrg#define PRIM_TRILIST          0x00
881428d7b3dSmrg#define PRIM_TRISTRIP         0x01
882428d7b3dSmrg#define PRIM_TRISTRIP_REVERSE 0x02
883428d7b3dSmrg#define PRIM_TRIFAN           0x03
884428d7b3dSmrg#define PRIM_POLYGON          0x04
885428d7b3dSmrg#define PRIM_LINELIST         0x05
886428d7b3dSmrg#define PRIM_LINESTRIP        0x06
887428d7b3dSmrg#define PRIM_RECTLIST         0x07
888428d7b3dSmrg#define PRIM_POINTLIST        0x08
889428d7b3dSmrg#define PRIM_DIB              0x09
890428d7b3dSmrg#define PRIM_CLEAR_RECT       0x0a
891428d7b3dSmrg#define PRIM_ZONE_INIT        0x0d
892428d7b3dSmrg
893428d7b3dSmrgstruct texture_coordinate_set {
894428d7b3dSmrg	unsigned tcx;
895428d7b3dSmrg	unsigned tcy;
896428d7b3dSmrg};
897428d7b3dSmrg
898428d7b3dSmrgstruct vertex_data {
899428d7b3dSmrg	unsigned x;
900428d7b3dSmrg	unsigned y;
901428d7b3dSmrg	struct texture_coordinate_set tc0;
902428d7b3dSmrg	struct texture_coordinate_set tc1;
903428d7b3dSmrg};
904428d7b3dSmrg
905428d7b3dSmrgstruct i915_3dprimitive {
906428d7b3dSmrg	union {
907428d7b3dSmrg		struct {
908428d7b3dSmrg			unsigned length:18;
909428d7b3dSmrg			unsigned prim:5;
910428d7b3dSmrg			unsigned vertex_location:1;
911428d7b3dSmrg			unsigned opcode:5;
912428d7b3dSmrg			unsigned type:3;
913428d7b3dSmrg		} inline_prim;
914428d7b3dSmrg
915428d7b3dSmrg		struct {
916428d7b3dSmrg			unsigned vertex_count:16;
917428d7b3dSmrg			unsigned pad0:1;
918428d7b3dSmrg			unsigned vertex_access_mode:1;
919428d7b3dSmrg			unsigned prim:5;
920428d7b3dSmrg			unsigned vertex_location:1;
921428d7b3dSmrg			unsigned opcode:5;
922428d7b3dSmrg			unsigned type:3;
923428d7b3dSmrg		} indirect_prim;
924428d7b3dSmrg	} dw0;
925428d7b3dSmrg};
926428d7b3dSmrg#endif /*_I915_STRUCTS_H */
927