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