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