1fa225cbcSrjs/*
2fa225cbcSrjs * Copyright © 2006 Intel Corporation
3fa225cbcSrjs *
4fa225cbcSrjs * Permission is hereby granted, free of charge, to any person obtaining a
5fa225cbcSrjs * copy of this software and associated documentation files (the "Software"),
6fa225cbcSrjs * to deal in the Software without restriction, including without limitation
7fa225cbcSrjs * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8fa225cbcSrjs * and/or sell copies of the Software, and to permit persons to whom the
9fa225cbcSrjs * Software is furnished to do so, subject to the following conditions:
10fa225cbcSrjs *
11fa225cbcSrjs * The above copyright notice and this permission notice (including the next
12fa225cbcSrjs * paragraph) shall be included in all copies or substantial portions of the
13fa225cbcSrjs * Software.
14fa225cbcSrjs *
15fa225cbcSrjs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16fa225cbcSrjs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17fa225cbcSrjs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18fa225cbcSrjs * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19fa225cbcSrjs * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20fa225cbcSrjs * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21fa225cbcSrjs * SOFTWARE.
22fa225cbcSrjs *
23fa225cbcSrjs * Authors:
24fa225cbcSrjs *    Xiang Haihao <haihao.xiang@intel.com>
25fa225cbcSrjs *
26fa225cbcSrjs */
27fa225cbcSrjs
28fa225cbcSrjs#ifndef _I915_STRUCTS_H
29fa225cbcSrjs#define _I915_STRUCTS_H
30fa225cbcSrjs
31fa225cbcSrjs#include <stdint.h>
32fa225cbcSrjs
33fa225cbcSrjs/* MI_INSTRUCTION */
34fa225cbcSrjs#define CMD_MI          0x00
35fa225cbcSrjs
36fa225cbcSrjs#define OPC_MI_FLUSH                            (0x04)
37fa225cbcSrjs
38fa225cbcSrjsstruct i915_mi_flush
39fa225cbcSrjs{
40fa225cbcSrjs    struct {
41fa225cbcSrjs        unsigned map_cache_invalidate : 1;
42fa225cbcSrjs        unsigned pad0 : 1;
43fa225cbcSrjs        unsigned render_cache_flush_inhibit : 1;
44fa225cbcSrjs        unsigned scene_count : 1;
45fa225cbcSrjs        unsigned end_scene : 1;
46fa225cbcSrjs        unsigned pad1 : 18;
47fa225cbcSrjs        unsigned opcode : 6;
48fa225cbcSrjs        unsigned type : 3;
49fa225cbcSrjs    } dw0;
50fa225cbcSrjs};
51fa225cbcSrjs
52fa225cbcSrjs/* BLT */
53fa225cbcSrjs#define CMD_2D          0x02
54fa225cbcSrjs#define OPC_COLOR_BLT                           (0x40)
55fa225cbcSrjs
56fa225cbcSrjsstruct i915_color_blt
57fa225cbcSrjs{
58fa225cbcSrjs    struct {
59fa225cbcSrjs        unsigned length : 5;
60fa225cbcSrjs        unsigned pad0 : 15;
61fa225cbcSrjs        unsigned bpp_mask : 2;
62fa225cbcSrjs        unsigned opcode : 7;
63fa225cbcSrjs        unsigned type : 3;
64fa225cbcSrjs    } dw0;
65fa225cbcSrjs
66fa225cbcSrjs    struct {
67fa225cbcSrjs        unsigned pitch : 16;
68fa225cbcSrjs        unsigned rop : 8;
69fa225cbcSrjs        unsigned color_depth : 2;
70fa225cbcSrjs        unsigned pad0 : 6;
71fa225cbcSrjs    } dw1;
72fa225cbcSrjs
73fa225cbcSrjs    struct {
74fa225cbcSrjs        unsigned width : 16;
75fa225cbcSrjs        unsigned height : 16;
76fa225cbcSrjs    } dw2;
77fa225cbcSrjs
78fa225cbcSrjs    struct {
79fa225cbcSrjs        unsigned address;
80fa225cbcSrjs    } dw3;
81fa225cbcSrjs
82fa225cbcSrjs    struct {
83fa225cbcSrjs        unsigned pattern;
84fa225cbcSrjs    } dw4;
85fa225cbcSrjs};
86fa225cbcSrjs
87fa225cbcSrjs/* 3D_INSTRUCTION */
88fa225cbcSrjs#define CMD_3D          0x03
89fa225cbcSrjs
90fa225cbcSrjs#define OPC_3DMPEG_MACROBLOCK_IPICTURE          (0x01 + (0x1e << 5))
91fa225cbcSrjs#define OPC_3DMPEG_SET_ORIGIN                   (0x10 + (0x1e << 5))
92fa225cbcSrjs#define OPC_3DMPEG_MACROBLOCK                   (0x11 + (0x1e << 5))
93fa225cbcSrjs#define OPC_3DMPEG_SLICE                        (0x12 + (0x1e << 5))
94fa225cbcSrjs#define OPC_3DMPEG_QM_PALETTE_LOAD              (0x13 + (0x1e << 5))
95fa225cbcSrjs
96fa225cbcSrjs#define OPC_3DSTATE_SCISSOR_ENABLE              (0x10 + (0x1c << 5))
97fa225cbcSrjs
98fa225cbcSrjs#define OPC_3DSTATE_MAP_STATE                   (0x00 + (0x1d << 8))
99fa225cbcSrjs#define OPC_3DSTATE_SAMPLER_STATE               (0x01 + (0x1d << 8))
100fa225cbcSrjs#define OPC_3DSTATE_LOAD_STATE_IMMEDIATE_1      (0x04 + (0x1d << 8))
101fa225cbcSrjs#define OPC_3DSTATE_PIXEL_SHADER_PROGRAM        (0x05 + (0x1d << 8))
102fa225cbcSrjs#define OPC_3DSTATE_PIXEL_SHADER_CONSTANTS      (0x06 + (0x1d << 8))
103fa225cbcSrjs#define OPC_3DSTATE_LOAD_INDIRECT               (0x07 + (0x1d << 8))
104fa225cbcSrjs
105fa225cbcSrjs#define OPC_3DSTATE_MODES_5                     (0x0c)
106fa225cbcSrjs#define OPC_3DSTATE_COORD_SET_BINDINGS          (0x16)
107fa225cbcSrjs#define OPC_3DPRIMITIVE                         (0x1f)
108fa225cbcSrjs
109fa225cbcSrjs#define OPC_3DSTATE_DRAWING_RECTANGLE           (0x80 + (0x1d << 8))
110fa225cbcSrjs#define OPC_3DSTATE_SCISSOR_RECTANGLE           (0x81 + (0x1d << 8))
111fa225cbcSrjs#define OPC_3DSTATE_DEST_BUFFER_VARIABLES       (0x85 + (0x1d << 8))
112fa225cbcSrjs#define OPC_3DSTATE_DEST_BUFFER_VARIABLES_MPEG  (0x87 + (0x1d << 8))
113fa225cbcSrjs#define OPC_3DSTATE_BUFFER_INFO                 (0x8e + (0x1d << 8))
114fa225cbcSrjs
115fa225cbcSrjs/*
116fa225cbcSrjs * 3DMPEG instructions
117fa225cbcSrjs */
118fa225cbcSrjsstruct i915_3dmpeg_macroblock_header
119fa225cbcSrjs{
120fa225cbcSrjs    struct {
121fa225cbcSrjs        unsigned length : 19;
122fa225cbcSrjs        unsigned opcode : 10;
123fa225cbcSrjs        unsigned type : 3;
124fa225cbcSrjs    } dw0;
125fa225cbcSrjs
126fa225cbcSrjs    struct {
127fa225cbcSrjs        unsigned mb_intra : 1;
128fa225cbcSrjs        unsigned forward : 1;
129fa225cbcSrjs        unsigned backward : 1;
130fa225cbcSrjs        unsigned h263_4mv : 1;
131fa225cbcSrjs        unsigned pad0 : 1;
132fa225cbcSrjs        unsigned dct_type : 1;
133fa225cbcSrjs        unsigned pad1 : 2;
134fa225cbcSrjs        unsigned motion_type : 2;
135fa225cbcSrjs        unsigned pad2 : 2;
136fa225cbcSrjs        unsigned vertical_field_select : 4;
137fa225cbcSrjs        unsigned coded_block_pattern : 6;
138fa225cbcSrjs        unsigned pad3 : 2;
139fa225cbcSrjs        unsigned skipped_macroblocks : 7;
140fa225cbcSrjs        unsigned pad4 : 1;
141fa225cbcSrjs    } dw1;
142fa225cbcSrjs};
143fa225cbcSrjs
144fa225cbcSrjsstruct i915_3dmpeg_macroblock_0mv
145fa225cbcSrjs{
146fa225cbcSrjs    struct i915_3dmpeg_macroblock_header header;
147fa225cbcSrjs};
148fa225cbcSrjs
149fa225cbcSrjsstruct i915_3dmpeg_macroblock_1fbmv
150fa225cbcSrjs{
151fa225cbcSrjs    struct i915_3dmpeg_macroblock_header header;
152fa225cbcSrjs    unsigned dw2;
153fa225cbcSrjs    unsigned dw3;
154fa225cbcSrjs};
155fa225cbcSrjsstruct i915_3dmpeg_macroblock_2fbmv
156fa225cbcSrjs{
157fa225cbcSrjs    struct i915_3dmpeg_macroblock_header header;
158fa225cbcSrjs    unsigned dw2;
159fa225cbcSrjs    unsigned dw3;
160fa225cbcSrjs    unsigned dw4;
161fa225cbcSrjs    unsigned dw5;
162fa225cbcSrjs};
163fa225cbcSrjs
164fa225cbcSrjsstruct i915_3dmpeg_macroblock_5fmv
165fa225cbcSrjs{
166fa225cbcSrjs    struct i915_3dmpeg_macroblock_header header;
167fa225cbcSrjs    unsigned dw2;
168fa225cbcSrjs    unsigned dw3;
169fa225cbcSrjs    unsigned dw4;
170fa225cbcSrjs    unsigned dw5;
171fa225cbcSrjs    unsigned dw6;
172fa225cbcSrjs};
173fa225cbcSrjs
174fa225cbcSrjsstruct i915_3dmpeg_macroblock_ipicture
175fa225cbcSrjs{
176fa225cbcSrjs    struct {
177fa225cbcSrjs        unsigned pad0 : 5;
178fa225cbcSrjs        unsigned dct_type : 1;
179fa225cbcSrjs        unsigned pad1 : 13;
180fa225cbcSrjs        unsigned opcode : 10;
181fa225cbcSrjs        unsigned type : 3;
182fa225cbcSrjs    } dw0;
183fa225cbcSrjs};
184fa225cbcSrjs
185fa225cbcSrjsstruct i915_3dmpeg_set_origin
186fa225cbcSrjs{
187fa225cbcSrjs    struct {
188fa225cbcSrjs        unsigned length : 19;
189fa225cbcSrjs        unsigned opcode : 10;
190fa225cbcSrjs        unsigned type : 3;
191fa225cbcSrjs    } dw0;
192fa225cbcSrjs
193fa225cbcSrjs    struct {
194fa225cbcSrjs        unsigned v_origin : 7;
195fa225cbcSrjs        unsigned pad0 : 1;
196fa225cbcSrjs        unsigned h_origin : 7;
197fa225cbcSrjs        unsigned pad1 : 17;
198fa225cbcSrjs    } dw1;
199fa225cbcSrjs};
200fa225cbcSrjs
201fa225cbcSrjsstruct i915_3dmpeg_slice
202fa225cbcSrjs{
203fa225cbcSrjs    struct {
204fa225cbcSrjs        unsigned length : 19;
205fa225cbcSrjs        unsigned opcode : 10;
206fa225cbcSrjs        unsigned type : 3;
207fa225cbcSrjs    } dw0;
208fa225cbcSrjs
209fa225cbcSrjs    struct {
210fa225cbcSrjs        unsigned fst_mb_bit_off : 3;
211fa225cbcSrjs        unsigned pad0 : 5;
212fa225cbcSrjs        unsigned mb_count : 7;
213fa225cbcSrjs        unsigned pad1 : 1;
214fa225cbcSrjs        unsigned v_position : 7;
215fa225cbcSrjs        unsigned pad2 : 1;
216fa225cbcSrjs        unsigned h_position : 7;
217fa225cbcSrjs        unsigned pad3 : 1;
218fa225cbcSrjs    } dw1;
219fa225cbcSrjs
220fa225cbcSrjs    struct {
221fa225cbcSrjs        unsigned length_minus_one : 17;
222fa225cbcSrjs        unsigned pad0 : 7;
223fa225cbcSrjs        unsigned qt_scale_code : 5;
224fa225cbcSrjs        unsigned pad1 : 3;
225fa225cbcSrjs    } dw2;
226fa225cbcSrjs};
227fa225cbcSrjs
228fa225cbcSrjsstruct i915_3dmpeg_qm_palette_load
229fa225cbcSrjs{
230fa225cbcSrjs    struct {
231fa225cbcSrjs        unsigned length : 4;
232fa225cbcSrjs        unsigned pad0 : 15;
233fa225cbcSrjs        unsigned opcode : 10;
234fa225cbcSrjs        unsigned type : 3;
235fa225cbcSrjs    } dw0;
236fa225cbcSrjs
237fa225cbcSrjs    unsigned quantmatrix[16];
238fa225cbcSrjs};
239fa225cbcSrjs
240fa225cbcSrjs
241fa225cbcSrjs/*
242fa225cbcSrjs * 3DSTATE instruction
243fa225cbcSrjs */
244fa225cbcSrjs#define BUFFERID_COLOR_BACK     3
245fa225cbcSrjs#define BUFFERID_COLOR_AUX      4
246fa225cbcSrjs#define BUFFERID_MC_INTRA_CORR  5
247fa225cbcSrjs#define BUFFERID_DEPTH          7
248fa225cbcSrjs
249fa225cbcSrjs#define TILEWALK_XMAJOR         0
250fa225cbcSrjs#define TILEWALK_YMAJOR         1
251fa225cbcSrjs
252fa225cbcSrjsstruct i915_3dstate_buffer_info
253fa225cbcSrjs{
254fa225cbcSrjs    struct {
255fa225cbcSrjs        unsigned length : 16;
256fa225cbcSrjs        unsigned opcode : 13;
257fa225cbcSrjs        unsigned type : 3;
258fa225cbcSrjs    } dw0;
259fa225cbcSrjs
260fa225cbcSrjs    struct {
261fa225cbcSrjs        unsigned pad0 : 2;
262fa225cbcSrjs        unsigned pitch : 12;
263fa225cbcSrjs        unsigned pad1 : 7;
264fa225cbcSrjs        unsigned walk : 1;
265fa225cbcSrjs        unsigned tiled_surface : 1;
266fa225cbcSrjs        unsigned fence_regs : 1;
267fa225cbcSrjs        unsigned buffer_id : 4;
268fa225cbcSrjs        unsigned aux_id : 1;
269fa225cbcSrjs        unsigned pad2 : 3;
270fa225cbcSrjs    } dw1;
271fa225cbcSrjs
272fa225cbcSrjs    struct {
273fa225cbcSrjs        unsigned pad0 : 2;
274fa225cbcSrjs        unsigned base_address : 27;
275fa225cbcSrjs        unsigned pad1 : 3;
276fa225cbcSrjs    } dw2;
277fa225cbcSrjs};
278fa225cbcSrjs
279fa225cbcSrjs#define COLORBUFFER_8BIT         0x00
280fa225cbcSrjs#define COLORBUFFER_X1R5G5B5     0x01
281fa225cbcSrjs#define COLORBUFFER_R5G6B5       0x02
282fa225cbcSrjs#define COLORBUFFER_A8R8G8B8     0x03
283fa225cbcSrjs#define COLORBUFFER_YCRCB_SWAP   0x04
284fa225cbcSrjs#define COLORBUFFER_YCRCB_NORMAL 0x05
285fa225cbcSrjs#define COLORBUFFER_YCRCB_SWAPUV 0x06
286fa225cbcSrjs#define COLORBUFFER_YCRCB_SWAPUVY   0x07
287fa225cbcSrjs#define COLORBUFFER_A4R4G4B4     0x08
288fa225cbcSrjs#define COLORBUFFER_A1R5G5B5     0x09
289fa225cbcSrjs#define COLORBUFFER_A2R10G10B10  0x0a
290fa225cbcSrjs
291fa225cbcSrjs
292fa225cbcSrjsstruct i915_3dstate_dest_buffer_variables
293fa225cbcSrjs{
294fa225cbcSrjs    struct {
295fa225cbcSrjs        unsigned length : 16;
296fa225cbcSrjs        unsigned opcode : 13;
297fa225cbcSrjs        unsigned type : 3;
298fa225cbcSrjs    } dw0;
299fa225cbcSrjs
300fa225cbcSrjs    struct {
301fa225cbcSrjs        unsigned v_ls_offset : 1;
302fa225cbcSrjs        unsigned v_ls : 1;
303fa225cbcSrjs        unsigned depth_fmt : 2;
304fa225cbcSrjs        unsigned pad0 : 4;
305fa225cbcSrjs        unsigned color_fmt : 4;
306fa225cbcSrjs        unsigned yuv422_select : 3;
307fa225cbcSrjs        unsigned pad1 : 1;
308fa225cbcSrjs        unsigned dest_v_bias : 4;
309fa225cbcSrjs        unsigned dest_h_bias : 4;
310fa225cbcSrjs        unsigned dither_enhancement : 1;
311fa225cbcSrjs        unsigned linear_gamma : 1;
312fa225cbcSrjs        unsigned dither_pattern : 2;
313fa225cbcSrjs        unsigned lod_preclamp : 1;
314fa225cbcSrjs        unsigned edt_zone : 1;          /* early depth test in zone rendering */
315fa225cbcSrjs        unsigned texture_default_color : 1;
316fa225cbcSrjs        unsigned edt_classic : 1;       /* early depth test in classic mode */
317fa225cbcSrjs    } dw1;
318fa225cbcSrjs};
319fa225cbcSrjs
320fa225cbcSrjs#define MPEG_DECODE_MC          0
321fa225cbcSrjs#define MPEG_DECODE_VLD_IDCT_MC 1
322fa225cbcSrjs
323fa225cbcSrjs#define MPEG_I_PICTURE          1
324fa225cbcSrjs#define MPEG_P_PICTURE          2
325fa225cbcSrjs#define MPEG_B_PICTURE          3
326fa225cbcSrjs
327fa225cbcSrjs#define MC_SUB_1H               0
328fa225cbcSrjs#define MC_SUB_2H               1
329fa225cbcSrjs#define MC_SUB_4H               2
330fa225cbcSrjs
331fa225cbcSrjs#define MC_SUB_1V               0
332fa225cbcSrjs#define MC_SUB_2V               1
333fa225cbcSrjs
334fa225cbcSrjsstruct i915_3dstate_dest_buffer_variables_mpeg
335fa225cbcSrjs{
336fa225cbcSrjs    struct {
337fa225cbcSrjs        unsigned length : 16;
338fa225cbcSrjs        unsigned opcode : 13;
339fa225cbcSrjs        unsigned type : 3;
340fa225cbcSrjs    } dw0;
341fa225cbcSrjs
342fa225cbcSrjs    struct {
343fa225cbcSrjs        unsigned picture_width : 7;
344fa225cbcSrjs        unsigned pad0 : 1;
345fa225cbcSrjs        unsigned v_subsample_factor : 2;
346fa225cbcSrjs        unsigned h_subsample_factor : 2;
347fa225cbcSrjs        unsigned tff : 1;
348fa225cbcSrjs        unsigned mismatch : 1;
349fa225cbcSrjs        unsigned pad1 : 1;
350fa225cbcSrjs        unsigned intra8 : 1;
351fa225cbcSrjs        unsigned abort_on_error : 8;
352fa225cbcSrjs        unsigned pad2 : 4;
353fa225cbcSrjs        unsigned bidir_avrg_control : 1;
354fa225cbcSrjs        unsigned rcontrol : 1;
355fa225cbcSrjs        unsigned decode_mode : 2;
356fa225cbcSrjs    } dw1;
357fa225cbcSrjs
358fa225cbcSrjs    struct {
359fa225cbcSrjs        unsigned pad0 : 1;
360fa225cbcSrjs        unsigned picture_coding_type : 2;
361fa225cbcSrjs        unsigned pad1 : 2;
362fa225cbcSrjs        unsigned scan_order : 1;
363fa225cbcSrjs        unsigned pad2 : 2;
364fa225cbcSrjs        unsigned q_scale_type : 1;
365fa225cbcSrjs        unsigned concealment : 1;
366fa225cbcSrjs        unsigned fpf_dct : 1;
367fa225cbcSrjs        unsigned pad3 : 2;
368fa225cbcSrjs        unsigned intra_dc : 2;
369fa225cbcSrjs        unsigned intra_vlc : 1;
370fa225cbcSrjs        unsigned f_code00 : 4;
371fa225cbcSrjs        unsigned f_code01 : 4;
372fa225cbcSrjs        unsigned f_code10 : 4;
373fa225cbcSrjs        unsigned f_code11 : 4;
374fa225cbcSrjs    } dw2;
375fa225cbcSrjs};
376fa225cbcSrjs
377fa225cbcSrjsstruct i915_mc_static_indirect_state_buffer {
378fa225cbcSrjs    struct i915_3dstate_buffer_info dest_y;
379fa225cbcSrjs    struct i915_3dstate_buffer_info dest_u;
380fa225cbcSrjs    struct i915_3dstate_buffer_info dest_v;
381fa225cbcSrjs    struct i915_3dstate_dest_buffer_variables dest_buf;
382fa225cbcSrjs    struct i915_3dstate_dest_buffer_variables_mpeg dest_buf_mpeg;
383fa225cbcSrjs    struct i915_3dstate_buffer_info corr;
384fa225cbcSrjs};
385fa225cbcSrjs
386fa225cbcSrjs#define MAP_MAP0        0x0001
387fa225cbcSrjs#define MAP_MAP1        0x0002
388fa225cbcSrjs#define MAP_MAP2        0x0004
389fa225cbcSrjs#define MAP_MAP3        0x0008
390fa225cbcSrjs#define MAP_MAP4        0x0010
391fa225cbcSrjs#define MAP_MAP5        0x0020
392fa225cbcSrjs#define MAP_MAP6        0x0040
393fa225cbcSrjs#define MAP_MAP7        0x0080
394fa225cbcSrjs#define MAP_MAP8        0x0100
395fa225cbcSrjs#define MAP_MAP9        0x0200
396fa225cbcSrjs#define MAP_MAP10       0x0400
397fa225cbcSrjs#define MAP_MAP11       0x0800
398fa225cbcSrjs#define MAP_MAP12       0x1000
399fa225cbcSrjs#define MAP_MAP13       0x2000
400fa225cbcSrjs#define MAP_MAP14       0x4000
401fa225cbcSrjs#define MAP_MAP15       0x8000
402fa225cbcSrjs
403fa225cbcSrjsstruct texture_map
404fa225cbcSrjs{
405fa225cbcSrjs    struct {
406fa225cbcSrjs        unsigned v_ls_offset : 1;
407fa225cbcSrjs        unsigned v_ls : 1;
408fa225cbcSrjs        unsigned base_address : 27;
409fa225cbcSrjs        unsigned pad0 : 2;
410fa225cbcSrjs        unsigned untrusted : 1;
411fa225cbcSrjs    } tm0;
412fa225cbcSrjs
413fa225cbcSrjs    struct {
414fa225cbcSrjs        unsigned tile_walk : 1;
415fa225cbcSrjs        unsigned tiled_surface : 1;
416fa225cbcSrjs        unsigned utilize_fence_regs : 1;
417fa225cbcSrjs        unsigned texel_fmt : 4;
418fa225cbcSrjs        unsigned surface_fmt : 3;
419fa225cbcSrjs        unsigned width : 11;
420fa225cbcSrjs        unsigned height : 11;
421fa225cbcSrjs    } tm1;
422fa225cbcSrjs
423fa225cbcSrjs    struct {
424fa225cbcSrjs        unsigned depth : 8;
425fa225cbcSrjs        unsigned mipmap_layout : 1;
426fa225cbcSrjs        unsigned max_lod : 6;
427fa225cbcSrjs        unsigned cube_face : 6;
428fa225cbcSrjs        unsigned pitch : 11;
429fa225cbcSrjs    } tm2;
430fa225cbcSrjs};
431fa225cbcSrjs
432fa225cbcSrjsstruct i915_3dstate_map_state
433fa225cbcSrjs{
434fa225cbcSrjs    struct {
435fa225cbcSrjs        unsigned length : 6;
436fa225cbcSrjs        unsigned pad0 : 9;
437fa225cbcSrjs        unsigned retain : 1;
438fa225cbcSrjs        unsigned opcode : 13;
439fa225cbcSrjs        unsigned type : 3;
440fa225cbcSrjs    } dw0;
441fa225cbcSrjs
442fa225cbcSrjs    struct {
443fa225cbcSrjs        unsigned map_mask : 16;
444fa225cbcSrjs        unsigned pad0 : 16;
445fa225cbcSrjs    } dw1;
446fa225cbcSrjs};
447fa225cbcSrjs
448fa225cbcSrjsstruct i915_mc_map_state {
449fa225cbcSrjs    struct i915_3dstate_map_state y_map;
450fa225cbcSrjs    struct texture_map y_forward;
451fa225cbcSrjs    struct texture_map y_backward;
452fa225cbcSrjs    struct i915_3dstate_map_state u_map;
453fa225cbcSrjs    struct texture_map u_forward;
454fa225cbcSrjs    struct texture_map u_backward;
455fa225cbcSrjs    struct i915_3dstate_map_state v_map;
456fa225cbcSrjs    struct texture_map v_forward;
457fa225cbcSrjs    struct texture_map v_backward;
458fa225cbcSrjs};
459fa225cbcSrjs
460fa225cbcSrjs#define SAMPLER_SAMPLER0        0x0001
461fa225cbcSrjs#define SAMPLER_SAMPLER1        0x0002
462fa225cbcSrjs#define SAMPLER_SAMPLER2        0x0004
463fa225cbcSrjs#define SAMPLER_SAMPLER3        0x0008
464fa225cbcSrjs#define SAMPLER_SAMPLER4        0x0010
465fa225cbcSrjs#define SAMPLER_SAMPLER5        0x0020
466fa225cbcSrjs#define SAMPLER_SAMPLER6        0x0040
467fa225cbcSrjs#define SAMPLER_SAMPLER7        0x0080
468fa225cbcSrjs#define SAMPLER_SAMPLER8        0x0100
469fa225cbcSrjs#define SAMPLER_SAMPLER9        0x0200
470fa225cbcSrjs#define SAMPLER_SAMPLER10       0x0400
471fa225cbcSrjs#define SAMPLER_SAMPLER11       0x0800
472fa225cbcSrjs#define SAMPLER_SAMPLER12       0x1000
473fa225cbcSrjs#define SAMPLER_SAMPLER13       0x2000
474fa225cbcSrjs#define SAMPLER_SAMPLER14       0x4000
475fa225cbcSrjs#define SAMPLER_SAMPLER15       0x8000
476fa225cbcSrjs
477fa225cbcSrjs#define MIPFILTER_NONE          0
478fa225cbcSrjs#define MIPFILTER_NEAREST       1
479fa225cbcSrjs#define MIPFILTER_LINEAR        3
480fa225cbcSrjs
481fa225cbcSrjs#define MAPFILTER_NEAREST       0
482fa225cbcSrjs#define MAPFILTER_LINEAR        1
483fa225cbcSrjs#define MAPFILTER_ANISOTROPIC   2
484fa225cbcSrjs#define MAPFILTER_4X4_1         3
485fa225cbcSrjs#define MAPFILTER_4X4_2         4
486fa225cbcSrjs#define MAPFILTER_4X4_FLAT      5
487fa225cbcSrjs#define MAPFILTER_MONO          6
488fa225cbcSrjs
489fa225cbcSrjs#define ANISORATIO_2            0
490fa225cbcSrjs#define ANISORATIO_4            1
491fa225cbcSrjs
492fa225cbcSrjs#define PREFILTEROP_ALWAYS      0
493fa225cbcSrjs#define PREFILTEROP_NEVER       1
494fa225cbcSrjs#define PREFILTEROP_LESS        2
495fa225cbcSrjs#define PREFILTEROP_EQUAL       3
496fa225cbcSrjs#define PREFILTEROP_LEQUAL      4
497fa225cbcSrjs#define PREFILTEROP_GREATER     5
498fa225cbcSrjs#define PREFILTEROP_NOTEQUAL    6
499fa225cbcSrjs#define PREFILTEROP_GEQUAL      7
500fa225cbcSrjs
501fa225cbcSrjs#define TEXCOORDMODE_WRAP       0
502fa225cbcSrjs#define TEXCOORDMODE_MIRROR     1
503fa225cbcSrjs#define TEXCOORDMODE_CLAMP      2
504fa225cbcSrjs#define TEXCOORDMODE_CUBE       3
505fa225cbcSrjs#define TEXCOORDMODE_CLAMP_BORDER       4
506fa225cbcSrjs#define TEXCOORDMODE_MIRROR_ONCE        5
507fa225cbcSrjs
508fa225cbcSrjsstruct texture_sampler
509fa225cbcSrjs{
510fa225cbcSrjs    struct {
511fa225cbcSrjs        unsigned shadow_function : 3;
512fa225cbcSrjs        unsigned max_anisotropy : 1;
513fa225cbcSrjs        unsigned shadow_enable : 1;
514fa225cbcSrjs        unsigned lod_bias : 9;
515fa225cbcSrjs        unsigned min_filter : 3;
516fa225cbcSrjs        unsigned mag_filter : 3;
517fa225cbcSrjs        unsigned mip_filter : 2;
518fa225cbcSrjs        unsigned base_level : 5;
519fa225cbcSrjs        unsigned chromakey_index : 2;
520fa225cbcSrjs        unsigned color_conversion : 1;
521fa225cbcSrjs        unsigned planar2packet : 1;
522fa225cbcSrjs        unsigned reverse_gamma : 1;
523fa225cbcSrjs    } ts0;
524fa225cbcSrjs
525fa225cbcSrjs    struct {
526fa225cbcSrjs        unsigned east_deinterlacer : 1;
527fa225cbcSrjs        unsigned map_index : 4;
528fa225cbcSrjs        unsigned normalized_coor : 1;
529fa225cbcSrjs        unsigned tcz_control : 3;
530fa225cbcSrjs        unsigned tcy_control : 3;
531fa225cbcSrjs        unsigned tcx_control : 3;
532fa225cbcSrjs        unsigned chromakey_enable : 1;
533fa225cbcSrjs        unsigned keyed_texture_filter : 1;
534fa225cbcSrjs        unsigned kill_pixel : 1;
535fa225cbcSrjs        unsigned pad0 : 6;
536fa225cbcSrjs        unsigned min_lod : 8;
537fa225cbcSrjs    } ts1;
538fa225cbcSrjs
539fa225cbcSrjs    struct {
540fa225cbcSrjs        unsigned default_color;
541fa225cbcSrjs    } ts2;
542fa225cbcSrjs};
543fa225cbcSrjs
544fa225cbcSrjsstruct i915_3dstate_sampler_state
545fa225cbcSrjs{
546fa225cbcSrjs    struct {
547fa225cbcSrjs        unsigned length : 6;
548fa225cbcSrjs        unsigned pad0 : 10;
549fa225cbcSrjs        unsigned opcode : 13;
550fa225cbcSrjs        unsigned type : 3;
551fa225cbcSrjs    } dw0;
552fa225cbcSrjs
553fa225cbcSrjs    struct {
554fa225cbcSrjs        unsigned sampler_masker : 16;
555fa225cbcSrjs        unsigned pad0 : 16;
556fa225cbcSrjs    } dw1;
557fa225cbcSrjs    /* we always use two samplers for mc */
558fa225cbcSrjs    struct texture_sampler sampler0;
559fa225cbcSrjs    struct texture_sampler sampler1;
560fa225cbcSrjs};
561fa225cbcSrjs
562fa225cbcSrjsstruct arithmetic_inst
563fa225cbcSrjs{
564fa225cbcSrjs    struct {
565fa225cbcSrjs        unsigned pad0 : 2;
566fa225cbcSrjs        unsigned src0_reg : 5;
567fa225cbcSrjs        unsigned src0_reg_t : 3;
568fa225cbcSrjs        unsigned dest_channel_mask : 4;
569fa225cbcSrjs        unsigned dest_reg : 4;
570fa225cbcSrjs        unsigned pad1 : 1;
571fa225cbcSrjs        unsigned dest_reg_t: 3;
572fa225cbcSrjs        unsigned dest_saturate : 1;
573fa225cbcSrjs        unsigned pad2 : 1;
574fa225cbcSrjs        unsigned opcode : 5;
575fa225cbcSrjs        unsigned pad3 : 3;
576fa225cbcSrjs    } dw0;
577fa225cbcSrjs
578fa225cbcSrjs    struct {
579fa225cbcSrjs        unsigned src1_y_select : 3;
580fa225cbcSrjs        unsigned src1_y_negate : 1;
581fa225cbcSrjs        unsigned src1_x_select : 3;
582fa225cbcSrjs        unsigned src1_x_negate : 1;
583fa225cbcSrjs        unsigned src1_reg : 5;
584fa225cbcSrjs        unsigned src1_reg_t : 3;
585fa225cbcSrjs        unsigned src0_w_select : 3;
586fa225cbcSrjs        unsigned src0_w_negate : 1;
587fa225cbcSrjs        unsigned src0_z_select : 3;
588fa225cbcSrjs        unsigned src0_z_negate : 1;
589fa225cbcSrjs        unsigned src0_y_select : 3;
590fa225cbcSrjs        unsigned src0_y_negate : 1;
591fa225cbcSrjs        unsigned src0_x_select : 3;
592fa225cbcSrjs        unsigned src0_x_negate : 1;
593fa225cbcSrjs    } dw1;
594fa225cbcSrjs
595fa225cbcSrjs    struct {
596fa225cbcSrjs        unsigned src2_w_select : 3;
597fa225cbcSrjs        unsigned src2_w_negate : 1;
598fa225cbcSrjs        unsigned src2_z_select : 3;
599fa225cbcSrjs        unsigned src2_z_negate : 1;
600fa225cbcSrjs        unsigned src2_y_select : 3;
601fa225cbcSrjs        unsigned src2_y_negate : 1;
602fa225cbcSrjs        unsigned src2_x_select : 3;
603fa225cbcSrjs        unsigned src2_x_negate : 1;
604fa225cbcSrjs        unsigned src2_reg : 5;
605fa225cbcSrjs        unsigned src2_reg_t : 3;
606fa225cbcSrjs        unsigned src1_w_select : 3;
607fa225cbcSrjs        unsigned src1_w_negate : 1;
608fa225cbcSrjs        unsigned src1_z_select : 3;
609fa225cbcSrjs        unsigned src1_z_negate : 1;
610fa225cbcSrjs    } dw2;
611fa225cbcSrjs};
612fa225cbcSrjs
613fa225cbcSrjsstruct texture_inst
614fa225cbcSrjs{
615fa225cbcSrjs    struct {
616fa225cbcSrjs        unsigned sampler_reg : 4;
617fa225cbcSrjs        unsigned pad0 : 10;
618fa225cbcSrjs        unsigned dest_reg : 4;
619fa225cbcSrjs        unsigned pad1 : 1;
620fa225cbcSrjs        unsigned dest_reg_t : 3;
621fa225cbcSrjs        unsigned pad2 : 2;
622fa225cbcSrjs        unsigned opcode : 5;
623fa225cbcSrjs        unsigned pad3 : 3;
624fa225cbcSrjs    } dw0;
625fa225cbcSrjs
626fa225cbcSrjs    struct {
627fa225cbcSrjs        unsigned pad0 : 16;
628fa225cbcSrjs        unsigned address_reg : 5;
629fa225cbcSrjs        unsigned pad1 : 3;
630fa225cbcSrjs        unsigned address_reg_t : 3;
631fa225cbcSrjs        unsigned pad2 : 5;
632fa225cbcSrjs    } dw1;
633fa225cbcSrjs
634fa225cbcSrjs    struct {
635fa225cbcSrjs        unsigned pad0;
636fa225cbcSrjs    } dw2;
637fa225cbcSrjs};
638fa225cbcSrjs
639fa225cbcSrjsstruct declaration_inst
640fa225cbcSrjs{
641fa225cbcSrjs    struct {
642fa225cbcSrjs        unsigned pad0 : 10;
643fa225cbcSrjs        unsigned decl_channel_mask : 4;
644fa225cbcSrjs        unsigned decl_reg : 4;
645fa225cbcSrjs        unsigned pad1 : 1;
646fa225cbcSrjs        unsigned decl_reg_t : 2;
647fa225cbcSrjs        unsigned pad2 : 1;
648fa225cbcSrjs        unsigned sampler_type : 2;
649fa225cbcSrjs        unsigned opcode : 5;
650fa225cbcSrjs        unsigned pad3 : 3;
651fa225cbcSrjs    } dw0;
652fa225cbcSrjs
653fa225cbcSrjs    struct {
654fa225cbcSrjs        unsigned pad0;
655fa225cbcSrjs    } dw1;
656fa225cbcSrjs
657fa225cbcSrjs    struct {
658fa225cbcSrjs        unsigned pad0;
659fa225cbcSrjs    } dw2;
660fa225cbcSrjs};
661fa225cbcSrjs
662fa225cbcSrjsunion shader_inst
663fa225cbcSrjs{
664fa225cbcSrjs    struct arithmetic_inst a;
665fa225cbcSrjs    struct texture_inst t;
666fa225cbcSrjs    struct declaration_inst d;
667fa225cbcSrjs};
668fa225cbcSrjs
669fa225cbcSrjsstruct i915_3dstate_pixel_shader_header {
670fa225cbcSrjs    unsigned length : 9;
671fa225cbcSrjs    unsigned pad0 : 6;
672fa225cbcSrjs    unsigned retain : 1;
673fa225cbcSrjs    unsigned opcode : 13;
674fa225cbcSrjs    unsigned type : 3;
675fa225cbcSrjs};
676fa225cbcSrjs
677fa225cbcSrjsstruct i915_3dstate_pixel_shader_program
678fa225cbcSrjs{
679fa225cbcSrjs    struct i915_3dstate_pixel_shader_header shader0;
680fa225cbcSrjs    /* mov oC, c0.0000 */
681fa225cbcSrjs    uint32_t inst0[3];
682fa225cbcSrjs
683fa225cbcSrjs    struct i915_3dstate_pixel_shader_header shader1;
684fa225cbcSrjs    /* dcl t0.xy */
685fa225cbcSrjs    /* dcl t1.xy */
686fa225cbcSrjs    /* dcl_2D s0 */
687fa225cbcSrjs    /* texld r0, t0, s0 */
688fa225cbcSrjs    /* mov oC, r0 */
689fa225cbcSrjs    uint32_t inst1[3*5];
690fa225cbcSrjs
691fa225cbcSrjs    struct i915_3dstate_pixel_shader_header shader2;
692fa225cbcSrjs    /* dcl t2.xy */
693fa225cbcSrjs    /* dcl t3.xy */
694fa225cbcSrjs    /* dcl_2D s1 */
695fa225cbcSrjs    /* texld r0, t2, s1 */
696fa225cbcSrjs    /* mov oC, r0 */
697fa225cbcSrjs    uint32_t inst2[3*5];
698fa225cbcSrjs
699fa225cbcSrjs    struct i915_3dstate_pixel_shader_header shader3;
700fa225cbcSrjs    /* dcl t0.xy */
701fa225cbcSrjs    /* dcl t1.xy */
702fa225cbcSrjs    /* dcl t2.xy */
703fa225cbcSrjs    /* dcl t3.xy */
704fa225cbcSrjs    /* dcl_2D s0 */
705fa225cbcSrjs    /* dcl_2D s1 */
706fa225cbcSrjs    /* texld r0, t0, s0 */
707fa225cbcSrjs    /* texld r0, t2, s1 */
708fa225cbcSrjs    /* add r0, r0, r1*/
709fa225cbcSrjs    /* mov oC, r0 */
710fa225cbcSrjs    uint32_t inst3[3*10];
711fa225cbcSrjs};
712fa225cbcSrjs
713fa225cbcSrjs#define REG_CR0         0x00000001
714fa225cbcSrjs#define REG_CR1         0x00000002
715fa225cbcSrjs#define REG_CR2         0x00000004
716fa225cbcSrjs#define REG_CR3         0x00000008
717fa225cbcSrjs#define REG_CR4         0x00000010
718fa225cbcSrjs#define REG_CR5         0x00000020
719fa225cbcSrjs#define REG_CR6         0x00000040
720fa225cbcSrjs#define REG_CR7         0x00000080
721fa225cbcSrjs#define REG_CR8         0x00000100
722fa225cbcSrjs#define REG_CR9         0x00000200
723fa225cbcSrjs#define REG_CR10        0x00000400
724fa225cbcSrjs#define REG_CR11        0x00000800
725fa225cbcSrjs#define REG_CR12        0x00001000
726fa225cbcSrjs#define REG_CR13        0x00002000
727fa225cbcSrjs#define REG_CR14        0x00004000
728fa225cbcSrjs#define REG_CR15        0x00008000
729fa225cbcSrjs#define REG_CR16        0x00010000
730fa225cbcSrjs#define REG_CR17        0x00020000
731fa225cbcSrjs#define REG_CR18        0x00040000
732fa225cbcSrjs#define REG_CR19        0x00080000
733fa225cbcSrjs#define REG_CR20        0x00100000
734fa225cbcSrjs#define REG_CR21        0x00200000
735fa225cbcSrjs#define REG_CR22        0x00400000
736fa225cbcSrjs#define REG_CR23        0x00800000
737fa225cbcSrjs#define REG_CR24        0x01000000
738fa225cbcSrjs#define REG_CR25        0x02000000
739fa225cbcSrjs#define REG_CR26        0x04000000
740fa225cbcSrjs#define REG_CR27        0x08000000
741fa225cbcSrjs#define REG_CR28        0x10000000
742fa225cbcSrjs#define REG_CR29        0x20000000
743fa225cbcSrjs#define REG_CR30        0x40000000
744fa225cbcSrjs#define REG_CR31        0x80000000
745fa225cbcSrjs
746fa225cbcSrjsstruct shader_constant
747fa225cbcSrjs{
748fa225cbcSrjs    float x;
749fa225cbcSrjs    float y;
750fa225cbcSrjs    float z;
751fa225cbcSrjs    float w;
752fa225cbcSrjs};
753fa225cbcSrjs
754fa225cbcSrjsstruct i915_3dstate_pixel_shader_constants
755fa225cbcSrjs{
756fa225cbcSrjs    struct {
757fa225cbcSrjs        unsigned length : 8;
758fa225cbcSrjs        unsigned pad0 : 8;
759fa225cbcSrjs        unsigned opcode : 13;
760fa225cbcSrjs        unsigned type : 3;
761fa225cbcSrjs    } dw0;
762fa225cbcSrjs
763fa225cbcSrjs    struct {
764fa225cbcSrjs        unsigned reg_mask;
765fa225cbcSrjs    } dw1;
766fa225cbcSrjs    /* we only need one constant */
767fa225cbcSrjs    struct shader_constant value;
768fa225cbcSrjs};
769fa225cbcSrjs
770fa225cbcSrjs#define BLOCK_SIS       0x01
771fa225cbcSrjs#define BLOCK_DIS       0x02
772fa225cbcSrjs#define BLOCK_SSB       0x04
773fa225cbcSrjs#define BLOCK_MSB       0x08
774fa225cbcSrjs#define BLOCK_PSP       0x10
775fa225cbcSrjs#define BLOCK_PSC       0x20
776fa225cbcSrjs
777fa225cbcSrjstypedef struct _state_ddword
778fa225cbcSrjs{
779fa225cbcSrjs    struct {
780fa225cbcSrjs        unsigned valid : 1;
781fa225cbcSrjs        unsigned force : 1;
782fa225cbcSrjs        unsigned buffer_address : 30;
783fa225cbcSrjs    } dw0;
784fa225cbcSrjs
785fa225cbcSrjs    struct {
786fa225cbcSrjs        unsigned length : 9;
787fa225cbcSrjs        unsigned pad0 : 23;
788fa225cbcSrjs    } dw1;
789fa225cbcSrjs} sis_state, ssb_state, msb_state, psp_state, psc_state;
790fa225cbcSrjs
791fa225cbcSrjstypedef struct _state_dword
792fa225cbcSrjs{
793fa225cbcSrjs    struct {
794fa225cbcSrjs        unsigned valid : 1;
795fa225cbcSrjs        unsigned reset : 1;
796fa225cbcSrjs        unsigned buffer_address : 30;
797fa225cbcSrjs    } dw0;
798fa225cbcSrjs} dis_state;
799fa225cbcSrjs
800fa225cbcSrjsstruct i915_3dstate_load_indirect
801fa225cbcSrjs{
802fa225cbcSrjs    struct {
803fa225cbcSrjs        unsigned length : 8;
804fa225cbcSrjs        unsigned block_mask : 6;
805fa225cbcSrjs        unsigned mem_select : 1;
806fa225cbcSrjs        unsigned pad0 : 1;
807fa225cbcSrjs        unsigned opcode : 13;
808fa225cbcSrjs        unsigned type : 3;
809fa225cbcSrjs    } dw0;
810fa225cbcSrjs};
811fa225cbcSrjs
812fa225cbcSrjs#define TEXCOORDFMT_2FP       0x00
813fa225cbcSrjs#define TEXCOORDFMT_3FP       0x01
814fa225cbcSrjs#define TEXCOORDFMT_4FP       0x02
815fa225cbcSrjs#define TEXCOORDFMT_1FP       0x03
816fa225cbcSrjs#define TEXCOORDFMT_2FP_16    0x04
817fa225cbcSrjs#define TEXCOORDFMT_4FP_16    0x05
818fa225cbcSrjs#define TEXCOORDFMT_NOT_PRESENT  0x0f
819fa225cbcSrjsstruct s2_dword
820fa225cbcSrjs{
821fa225cbcSrjs    unsigned set0_texcoord_fmt : 4;
822fa225cbcSrjs    unsigned set1_texcoord_fmt : 4;
823fa225cbcSrjs    unsigned set2_texcoord_fmt : 4;
824fa225cbcSrjs    unsigned set3_texcoord_fmt : 4;
825fa225cbcSrjs    unsigned set4_texcoord_fmt : 4;
826fa225cbcSrjs    unsigned set5_texcoord_fmt : 4;
827fa225cbcSrjs    unsigned set6_texcoord_fmt : 4;
828fa225cbcSrjs    unsigned set7_texcoord_fmt : 4;
829fa225cbcSrjs};
830fa225cbcSrjs
831fa225cbcSrjsstruct s3_dword
832fa225cbcSrjs{
833fa225cbcSrjs    unsigned set0_pcd : 1;
834fa225cbcSrjs    unsigned set0_ws_tcz : 1;
835fa225cbcSrjs    unsigned set0_ws_tcy : 1;
836fa225cbcSrjs    unsigned set0_ws_tcx : 1;
837fa225cbcSrjs    unsigned set1_pcd : 1;
838fa225cbcSrjs    unsigned set1_ws_tcz : 1;
839fa225cbcSrjs    unsigned set1_ws_tcy : 1;
840fa225cbcSrjs    unsigned set1_ws_tcx : 1;
841fa225cbcSrjs    unsigned set2_pcd : 1;
842fa225cbcSrjs    unsigned set2_ws_tcz : 1;
843fa225cbcSrjs    unsigned set2_ws_tcy : 1;
844fa225cbcSrjs    unsigned set2_ws_tcx : 1;
845fa225cbcSrjs    unsigned set3_pcd : 1;
846fa225cbcSrjs    unsigned set3_ws_tcz : 1;
847fa225cbcSrjs    unsigned set3_ws_tcy : 1;
848fa225cbcSrjs    unsigned set3_ws_tcx : 1;
849fa225cbcSrjs    unsigned set4_pcd : 1;
850fa225cbcSrjs    unsigned set4_ws_tcz : 1;
851fa225cbcSrjs    unsigned set4_ws_tcy : 1;
852fa225cbcSrjs    unsigned set4_ws_tcx : 1;
853fa225cbcSrjs    unsigned set5_pcd : 1;
854fa225cbcSrjs    unsigned set5_ws_tcz : 1;
855fa225cbcSrjs    unsigned set5_ws_tcy : 1;
856fa225cbcSrjs    unsigned set5_ws_tcx : 1;
857fa225cbcSrjs    unsigned set6_pcd : 1;
858fa225cbcSrjs    unsigned set6_ws_tcz : 1;
859fa225cbcSrjs    unsigned set6_ws_tcy : 1;
860fa225cbcSrjs    unsigned set6_ws_tcx : 1;
861fa225cbcSrjs    unsigned set7_pcd : 1;
862fa225cbcSrjs    unsigned set7_ws_tcz : 1;
863fa225cbcSrjs    unsigned set7_ws_tcy : 1;
864fa225cbcSrjs    unsigned set7_ws_tcx : 1;
865fa225cbcSrjs};
866fa225cbcSrjs
867fa225cbcSrjs#define VERTEXHAS_XYZ      1
868fa225cbcSrjs#define VERTEXHAS_XYZW     2
869fa225cbcSrjs#define VERTEXHAS_XY       3
870fa225cbcSrjs#define VERTEXHAS_XYW      4
871fa225cbcSrjs
872fa225cbcSrjs#define CULLMODE_BOTH      0
873fa225cbcSrjs#define CULLMODE_NONE      1
874fa225cbcSrjs#define CULLMODE_CW        2
875fa225cbcSrjs#define CULLMODE_CCW       3
876fa225cbcSrjs
877fa225cbcSrjs#define SHADEMODE_LINEAR   0
878fa225cbcSrjs#define SHADEMODE_FLAT     1
879fa225cbcSrjsstruct s4_dword
880fa225cbcSrjs{
881fa225cbcSrjs    unsigned anti_aliasing_enable : 1;
882fa225cbcSrjs    unsigned sprite_point_enable : 1;
883fa225cbcSrjs    unsigned fog_parameter_present : 1;
884fa225cbcSrjs    unsigned local_depth_offset_enable : 1;
885fa225cbcSrjs    unsigned force_specular_diffuse_color : 1;
886fa225cbcSrjs    unsigned force_default_diffuse_color : 1;
887fa225cbcSrjs    unsigned position_mask : 3;
888fa225cbcSrjs    unsigned local_depth_offset_present : 1;
889fa225cbcSrjs    unsigned diffuse_color_presetn : 1;
890fa225cbcSrjs    unsigned specular_color_fog_factor_present : 1;
891fa225cbcSrjs    unsigned point_width_present : 1;
892fa225cbcSrjs    unsigned cull_mode : 2;
893fa225cbcSrjs    unsigned color_shade_mode : 1;
894fa225cbcSrjs    unsigned specular_shade_mode : 1;
895fa225cbcSrjs    unsigned fog_shade_mode : 1;
896fa225cbcSrjs    unsigned alpha_shade_mode : 1;
897fa225cbcSrjs    unsigned line_width : 4;
898fa225cbcSrjs    unsigned point_width : 9;
899fa225cbcSrjs};
900fa225cbcSrjs
901fa225cbcSrjsstruct s5_dword
902fa225cbcSrjs{
903fa225cbcSrjs    unsigned logic_op_enable : 1;
904fa225cbcSrjs    unsigned color_dither_enable  : 1;
905fa225cbcSrjs    unsigned stencil_test_enable : 1;
906fa225cbcSrjs    unsigned stencil_buffer_write_enable : 1;
907fa225cbcSrjs    unsigned stencil_pass_depth_pass_op : 3;
908fa225cbcSrjs    unsigned stencil_pass_depth_fail_op : 3;
909fa225cbcSrjs    unsigned stencil_fail_op : 3;
910fa225cbcSrjs    unsigned stencil_test_function : 3;
911fa225cbcSrjs    unsigned stencil_reference_value : 8;
912fa225cbcSrjs    unsigned fog_enable : 1;
913fa225cbcSrjs    unsigned global_depth_offset_enable : 1;
914fa225cbcSrjs    unsigned last_pixel_enable : 1;
915fa225cbcSrjs    unsigned force_default_point_width : 1;
916fa225cbcSrjs    unsigned color_buffer_component_write_disable : 4;
917fa225cbcSrjs};
918fa225cbcSrjs
919fa225cbcSrjsstruct s6_dword
920fa225cbcSrjs{
921fa225cbcSrjs    unsigned triangle_pv : 2;
922fa225cbcSrjs    unsigned color_buffer_write : 1;
923fa225cbcSrjs    unsigned depth_buffer_write : 1;
924fa225cbcSrjs    unsigned dest_blend_factor : 4;
925fa225cbcSrjs    unsigned src_blend_factor : 4;
926fa225cbcSrjs    unsigned color_blend_function : 3;
927fa225cbcSrjs    unsigned color_buffer_blend : 1;
928fa225cbcSrjs    unsigned depth_test_function : 3;
929fa225cbcSrjs    unsigned depth_test_enable : 1;
930fa225cbcSrjs    unsigned alpha_reference_value : 8;
931fa225cbcSrjs    unsigned alpha_test_function : 3;
932fa225cbcSrjs    unsigned alpha_test_enable : 1;
933fa225cbcSrjs
934fa225cbcSrjs};
935fa225cbcSrjs
936fa225cbcSrjsstruct s7_dword
937fa225cbcSrjs{
938fa225cbcSrjs    unsigned global_depth_offset_const;
939fa225cbcSrjs};
940fa225cbcSrjs
941fa225cbcSrjsstruct i915_3dstate_load_state_immediate_1
942fa225cbcSrjs{
943fa225cbcSrjs    struct {
944fa225cbcSrjs        unsigned length : 4;
945fa225cbcSrjs        unsigned load_s0 : 1;
946fa225cbcSrjs        unsigned load_s1 : 1;
947fa225cbcSrjs        unsigned load_s2 : 1;
948fa225cbcSrjs        unsigned load_s3 : 1;
949fa225cbcSrjs        unsigned load_s4 : 1;
950fa225cbcSrjs        unsigned load_s5 : 1;
951fa225cbcSrjs        unsigned load_s6 : 1;
952fa225cbcSrjs        unsigned load_s7 : 1;
953fa225cbcSrjs        unsigned pad0 : 4;
954fa225cbcSrjs        unsigned opcode : 13;
955fa225cbcSrjs        unsigned type : 3;
956fa225cbcSrjs    } dw0;
957fa225cbcSrjs};
958fa225cbcSrjs
959fa225cbcSrjsstruct i915_3dstate_scissor_rectangle
960fa225cbcSrjs{
961fa225cbcSrjs    struct {
962fa225cbcSrjs        unsigned length : 16;
963fa225cbcSrjs        unsigned opcode : 13;
964fa225cbcSrjs        unsigned type : 3;
965fa225cbcSrjs    } dw0;
966fa225cbcSrjs
967fa225cbcSrjs    struct {
968fa225cbcSrjs        unsigned min_x : 16;
969fa225cbcSrjs        unsigned min_y : 16;
970fa225cbcSrjs    } dw1;
971fa225cbcSrjs
972fa225cbcSrjs    struct {
973fa225cbcSrjs        unsigned max_x : 16;
974fa225cbcSrjs        unsigned max_y : 16;
975fa225cbcSrjs    } dw2;
976fa225cbcSrjs};
977fa225cbcSrjs
978fa225cbcSrjs#define VERTEX_INLINE         0x00
979fa225cbcSrjs#define VERTEX_INDIRECT       0x01
980fa225cbcSrjs
981fa225cbcSrjs#define PRIM_TRILIST          0x00
982fa225cbcSrjs#define PRIM_TRISTRIP         0x01
983fa225cbcSrjs#define PRIM_TRISTRIP_REVERSE 0x02
984fa225cbcSrjs#define PRIM_TRIFAN           0x03
985fa225cbcSrjs#define PRIM_POLYGON          0x04
986fa225cbcSrjs#define PRIM_LINELIST         0x05
987fa225cbcSrjs#define PRIM_LINESTRIP        0x06
988fa225cbcSrjs#define PRIM_RECTLIST         0x07
989fa225cbcSrjs#define PRIM_POINTLIST        0x08
990fa225cbcSrjs#define PRIM_DIB              0x09
991fa225cbcSrjs#define PRIM_CLEAR_RECT       0x0a
992fa225cbcSrjs#define PRIM_ZONE_INIT        0x0d
993fa225cbcSrjs
994fa225cbcSrjsstruct texture_coordinate_set
995fa225cbcSrjs{
996fa225cbcSrjs    unsigned tcx;
997fa225cbcSrjs    unsigned tcy;
998fa225cbcSrjs};
999fa225cbcSrjs
1000fa225cbcSrjsstruct vertex_data
1001fa225cbcSrjs{
1002fa225cbcSrjs    unsigned x;
1003fa225cbcSrjs    unsigned y;
1004fa225cbcSrjs    struct texture_coordinate_set tc0;
1005fa225cbcSrjs    struct texture_coordinate_set tc1;
1006fa225cbcSrjs};
1007fa225cbcSrjs
1008fa225cbcSrjsstruct i915_3dprimitive
1009fa225cbcSrjs{
1010fa225cbcSrjs    union {
1011fa225cbcSrjs        struct {
1012fa225cbcSrjs            unsigned length : 18;
1013fa225cbcSrjs            unsigned prim : 5;
1014fa225cbcSrjs            unsigned vertex_location : 1;
1015fa225cbcSrjs            unsigned opcode : 5;
1016fa225cbcSrjs            unsigned type : 3;
1017fa225cbcSrjs        } inline_prim;
1018fa225cbcSrjs
1019fa225cbcSrjs        struct {
1020fa225cbcSrjs            unsigned vertex_count : 16;
1021fa225cbcSrjs            unsigned pad0 : 1;
1022fa225cbcSrjs            unsigned vertex_access_mode : 1;
1023fa225cbcSrjs            unsigned prim : 5;
1024fa225cbcSrjs            unsigned vertex_location : 1;
1025fa225cbcSrjs            unsigned opcode : 5;
1026fa225cbcSrjs            unsigned type : 3;
1027fa225cbcSrjs        } indirect_prim;
1028fa225cbcSrjs    } dw0;
1029fa225cbcSrjs};
1030fa225cbcSrjs#endif /*_I915_STRUCTS_H */
1031