1428d7b3dSmrg /************************************************************************** 2428d7b3dSmrg * 3428d7b3dSmrg * Copyright 2005 Tungsten Graphics, Inc., Cedar Park, Texas. 4428d7b3dSmrg * All Rights Reserved. 5428d7b3dSmrg * 6428d7b3dSmrg * Permission is hereby granted, free of charge, to any person obtaining a 7428d7b3dSmrg * copy of this software and associated documentation files (the 8428d7b3dSmrg * "Software"), to deal in the Software without restriction, including 9428d7b3dSmrg * without limitation the rights to use, copy, modify, merge, publish, 10428d7b3dSmrg * distribute, sub license, and/or sell copies of the Software, and to 11428d7b3dSmrg * permit persons to whom the Software is furnished to do so, subject to 12428d7b3dSmrg * the following conditions: 13428d7b3dSmrg * 14428d7b3dSmrg * The above copyright notice and this permission notice (including the 15428d7b3dSmrg * next paragraph) shall be included in all copies or substantial portions 16428d7b3dSmrg * of the Software. 17428d7b3dSmrg * 18428d7b3dSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19428d7b3dSmrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20428d7b3dSmrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21428d7b3dSmrg * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22428d7b3dSmrg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23428d7b3dSmrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24428d7b3dSmrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25428d7b3dSmrg * 26428d7b3dSmrg **************************************************************************/ 27428d7b3dSmrg 28428d7b3dSmrg#ifndef BRW_STRUCTS_H 29428d7b3dSmrg#define BRW_STRUCTS_H 30428d7b3dSmrg 31428d7b3dSmrg/* Command packets: 32428d7b3dSmrg */ 33428d7b3dSmrgstruct header 34428d7b3dSmrg{ 35428d7b3dSmrg unsigned int length:16; 36428d7b3dSmrg unsigned int opcode:16; 37428d7b3dSmrg}; 38428d7b3dSmrg 39428d7b3dSmrg 40428d7b3dSmrgunion header_union 41428d7b3dSmrg{ 42428d7b3dSmrg struct header bits; 43428d7b3dSmrg unsigned int dword; 44428d7b3dSmrg}; 45428d7b3dSmrg 46428d7b3dSmrgstruct brw_3d_control 47428d7b3dSmrg{ 48428d7b3dSmrg struct 49428d7b3dSmrg { 50428d7b3dSmrg unsigned int length:8; 51428d7b3dSmrg unsigned int notify_enable:1; 52428d7b3dSmrg unsigned int pad:3; 53428d7b3dSmrg unsigned int wc_flush_enable:1; 54428d7b3dSmrg unsigned int depth_stall_enable:1; 55428d7b3dSmrg unsigned int operation:2; 56428d7b3dSmrg unsigned int opcode:16; 57428d7b3dSmrg } header; 58428d7b3dSmrg 59428d7b3dSmrg struct 60428d7b3dSmrg { 61428d7b3dSmrg unsigned int pad:2; 62428d7b3dSmrg unsigned int dest_addr_type:1; 63428d7b3dSmrg unsigned int dest_addr:29; 64428d7b3dSmrg } dest; 65428d7b3dSmrg 66428d7b3dSmrg unsigned int dword2; 67428d7b3dSmrg unsigned int dword3; 68428d7b3dSmrg}; 69428d7b3dSmrg 70428d7b3dSmrg 71428d7b3dSmrgstruct brw_3d_primitive 72428d7b3dSmrg{ 73428d7b3dSmrg struct 74428d7b3dSmrg { 75428d7b3dSmrg unsigned int length:8; 76428d7b3dSmrg unsigned int pad:2; 77428d7b3dSmrg unsigned int topology:5; 78428d7b3dSmrg unsigned int indexed:1; 79428d7b3dSmrg unsigned int opcode:16; 80428d7b3dSmrg } header; 81428d7b3dSmrg 82428d7b3dSmrg unsigned int verts_per_instance; 83428d7b3dSmrg unsigned int start_vert_location; 84428d7b3dSmrg unsigned int instance_count; 85428d7b3dSmrg unsigned int start_instance_location; 86428d7b3dSmrg unsigned int base_vert_location; 87428d7b3dSmrg}; 88428d7b3dSmrg 89428d7b3dSmrg/* These seem to be passed around as function args, so it works out 90428d7b3dSmrg * better to keep them as #defines: 91428d7b3dSmrg */ 92428d7b3dSmrg#define BRW_FLUSH_READ_CACHE 0x1 93428d7b3dSmrg#define BRW_FLUSH_STATE_CACHE 0x2 94428d7b3dSmrg#define BRW_INHIBIT_FLUSH_RENDER_CACHE 0x4 95428d7b3dSmrg#define BRW_FLUSH_SNAPSHOT_COUNTERS 0x8 96428d7b3dSmrg 97428d7b3dSmrgstruct brw_mi_flush 98428d7b3dSmrg{ 99428d7b3dSmrg unsigned int flags:4; 100428d7b3dSmrg unsigned int pad:12; 101428d7b3dSmrg unsigned int opcode:16; 102428d7b3dSmrg}; 103428d7b3dSmrg 104428d7b3dSmrgstruct brw_vf_statistics 105428d7b3dSmrg{ 106428d7b3dSmrg unsigned int statistics_enable:1; 107428d7b3dSmrg unsigned int pad:15; 108428d7b3dSmrg unsigned int opcode:16; 109428d7b3dSmrg}; 110428d7b3dSmrg 111428d7b3dSmrg 112428d7b3dSmrg 113428d7b3dSmrgstruct brw_binding_table_pointers 114428d7b3dSmrg{ 115428d7b3dSmrg struct header header; 116428d7b3dSmrg unsigned int vs; 117428d7b3dSmrg unsigned int gs; 118428d7b3dSmrg unsigned int clp; 119428d7b3dSmrg unsigned int sf; 120428d7b3dSmrg unsigned int wm; 121428d7b3dSmrg}; 122428d7b3dSmrg 123428d7b3dSmrg 124428d7b3dSmrgstruct brw_blend_constant_color 125428d7b3dSmrg{ 126428d7b3dSmrg struct header header; 127428d7b3dSmrg float blend_constant_color[4]; 128428d7b3dSmrg}; 129428d7b3dSmrg 130428d7b3dSmrg 131428d7b3dSmrgstruct brw_depthbuffer 132428d7b3dSmrg{ 133428d7b3dSmrg union header_union header; 134428d7b3dSmrg 135428d7b3dSmrg union { 136428d7b3dSmrg struct { 137428d7b3dSmrg unsigned int pitch:18; 138428d7b3dSmrg unsigned int format:3; 139428d7b3dSmrg unsigned int pad:4; 140428d7b3dSmrg unsigned int depth_offset_disable:1; 141428d7b3dSmrg unsigned int tile_walk:1; 142428d7b3dSmrg unsigned int tiled_surface:1; 143428d7b3dSmrg unsigned int pad2:1; 144428d7b3dSmrg unsigned int surface_type:3; 145428d7b3dSmrg } bits; 146428d7b3dSmrg unsigned int dword; 147428d7b3dSmrg } dword1; 148428d7b3dSmrg 149428d7b3dSmrg unsigned int dword2_base_addr; 150428d7b3dSmrg 151428d7b3dSmrg union { 152428d7b3dSmrg struct { 153428d7b3dSmrg unsigned int pad:1; 154428d7b3dSmrg unsigned int mipmap_layout:1; 155428d7b3dSmrg unsigned int lod:4; 156428d7b3dSmrg unsigned int width:13; 157428d7b3dSmrg unsigned int height:13; 158428d7b3dSmrg } bits; 159428d7b3dSmrg unsigned int dword; 160428d7b3dSmrg } dword3; 161428d7b3dSmrg 162428d7b3dSmrg union { 163428d7b3dSmrg struct { 164428d7b3dSmrg unsigned int pad:12; 165428d7b3dSmrg unsigned int min_array_element:9; 166428d7b3dSmrg unsigned int depth:11; 167428d7b3dSmrg } bits; 168428d7b3dSmrg unsigned int dword; 169428d7b3dSmrg } dword4; 170428d7b3dSmrg}; 171428d7b3dSmrg 172428d7b3dSmrgstruct brw_drawrect 173428d7b3dSmrg{ 174428d7b3dSmrg struct header header; 175428d7b3dSmrg unsigned int xmin:16; 176428d7b3dSmrg unsigned int ymin:16; 177428d7b3dSmrg unsigned int xmax:16; 178428d7b3dSmrg unsigned int ymax:16; 179428d7b3dSmrg unsigned int xorg:16; 180428d7b3dSmrg unsigned int yorg:16; 181428d7b3dSmrg}; 182428d7b3dSmrg 183428d7b3dSmrg 184428d7b3dSmrg 185428d7b3dSmrg 186428d7b3dSmrgstruct brw_global_depth_offset_clamp 187428d7b3dSmrg{ 188428d7b3dSmrg struct header header; 189428d7b3dSmrg float depth_offset_clamp; 190428d7b3dSmrg}; 191428d7b3dSmrg 192428d7b3dSmrgstruct brw_indexbuffer 193428d7b3dSmrg{ 194428d7b3dSmrg union { 195428d7b3dSmrg struct 196428d7b3dSmrg { 197428d7b3dSmrg unsigned int length:8; 198428d7b3dSmrg unsigned int index_format:2; 199428d7b3dSmrg unsigned int cut_index_enable:1; 200428d7b3dSmrg unsigned int pad:5; 201428d7b3dSmrg unsigned int opcode:16; 202428d7b3dSmrg } bits; 203428d7b3dSmrg unsigned int dword; 204428d7b3dSmrg 205428d7b3dSmrg } header; 206428d7b3dSmrg 207428d7b3dSmrg unsigned int buffer_start; 208428d7b3dSmrg unsigned int buffer_end; 209428d7b3dSmrg}; 210428d7b3dSmrg 211428d7b3dSmrg 212428d7b3dSmrgstruct brw_line_stipple 213428d7b3dSmrg{ 214428d7b3dSmrg struct header header; 215428d7b3dSmrg 216428d7b3dSmrg struct 217428d7b3dSmrg { 218428d7b3dSmrg unsigned int pattern:16; 219428d7b3dSmrg unsigned int pad:16; 220428d7b3dSmrg } bits0; 221428d7b3dSmrg 222428d7b3dSmrg struct 223428d7b3dSmrg { 224428d7b3dSmrg unsigned int repeat_count:9; 225428d7b3dSmrg unsigned int pad:7; 226428d7b3dSmrg unsigned int inverse_repeat_count:16; 227428d7b3dSmrg } bits1; 228428d7b3dSmrg}; 229428d7b3dSmrg 230428d7b3dSmrg 231428d7b3dSmrgstruct brw_pipelined_state_pointers 232428d7b3dSmrg{ 233428d7b3dSmrg struct header header; 234428d7b3dSmrg 235428d7b3dSmrg struct { 236428d7b3dSmrg unsigned int pad:5; 237428d7b3dSmrg unsigned int offset:27; 238428d7b3dSmrg } vs; 239428d7b3dSmrg 240428d7b3dSmrg struct 241428d7b3dSmrg { 242428d7b3dSmrg unsigned int enable:1; 243428d7b3dSmrg unsigned int pad:4; 244428d7b3dSmrg unsigned int offset:27; 245428d7b3dSmrg } gs; 246428d7b3dSmrg 247428d7b3dSmrg struct 248428d7b3dSmrg { 249428d7b3dSmrg unsigned int enable:1; 250428d7b3dSmrg unsigned int pad:4; 251428d7b3dSmrg unsigned int offset:27; 252428d7b3dSmrg } clp; 253428d7b3dSmrg 254428d7b3dSmrg struct 255428d7b3dSmrg { 256428d7b3dSmrg unsigned int pad:5; 257428d7b3dSmrg unsigned int offset:27; 258428d7b3dSmrg } sf; 259428d7b3dSmrg 260428d7b3dSmrg struct 261428d7b3dSmrg { 262428d7b3dSmrg unsigned int pad:5; 263428d7b3dSmrg unsigned int offset:27; 264428d7b3dSmrg } wm; 265428d7b3dSmrg 266428d7b3dSmrg struct 267428d7b3dSmrg { 268428d7b3dSmrg unsigned int pad:5; 269428d7b3dSmrg unsigned int offset:27; /* KW: check me! */ 270428d7b3dSmrg } cc; 271428d7b3dSmrg}; 272428d7b3dSmrg 273428d7b3dSmrg 274428d7b3dSmrgstruct brw_polygon_stipple_offset 275428d7b3dSmrg{ 276428d7b3dSmrg struct header header; 277428d7b3dSmrg 278428d7b3dSmrg struct { 279428d7b3dSmrg unsigned int y_offset:5; 280428d7b3dSmrg unsigned int pad:3; 281428d7b3dSmrg unsigned int x_offset:5; 282428d7b3dSmrg unsigned int pad0:19; 283428d7b3dSmrg } bits0; 284428d7b3dSmrg}; 285428d7b3dSmrg 286428d7b3dSmrg 287428d7b3dSmrg 288428d7b3dSmrgstruct brw_polygon_stipple 289428d7b3dSmrg{ 290428d7b3dSmrg struct header header; 291428d7b3dSmrg unsigned int stipple[32]; 292428d7b3dSmrg}; 293428d7b3dSmrg 294428d7b3dSmrg 295428d7b3dSmrg 296428d7b3dSmrgstruct brw_pipeline_select 297428d7b3dSmrg{ 298428d7b3dSmrg struct 299428d7b3dSmrg { 300428d7b3dSmrg unsigned int pipeline_select:1; 301428d7b3dSmrg unsigned int pad:15; 302428d7b3dSmrg unsigned int opcode:16; 303428d7b3dSmrg } header; 304428d7b3dSmrg}; 305428d7b3dSmrg 306428d7b3dSmrg 307428d7b3dSmrgstruct brw_pipe_control 308428d7b3dSmrg{ 309428d7b3dSmrg struct 310428d7b3dSmrg { 311428d7b3dSmrg unsigned int length:8; 312428d7b3dSmrg unsigned int notify_enable:1; 313428d7b3dSmrg unsigned int pad:2; 314428d7b3dSmrg unsigned int instruction_state_cache_flush_enable:1; 315428d7b3dSmrg unsigned int write_cache_flush_enable:1; 316428d7b3dSmrg unsigned int depth_stall_enable:1; 317428d7b3dSmrg unsigned int post_sync_operation:2; 318428d7b3dSmrg 319428d7b3dSmrg unsigned int opcode:16; 320428d7b3dSmrg } header; 321428d7b3dSmrg 322428d7b3dSmrg struct 323428d7b3dSmrg { 324428d7b3dSmrg unsigned int pad:2; 325428d7b3dSmrg unsigned int dest_addr_type:1; 326428d7b3dSmrg unsigned int dest_addr:29; 327428d7b3dSmrg } bits1; 328428d7b3dSmrg 329428d7b3dSmrg unsigned int data0; 330428d7b3dSmrg unsigned int data1; 331428d7b3dSmrg}; 332428d7b3dSmrg 333428d7b3dSmrg 334428d7b3dSmrgstruct brw_urb_fence 335428d7b3dSmrg{ 336428d7b3dSmrg struct 337428d7b3dSmrg { 338428d7b3dSmrg unsigned int length:8; 339428d7b3dSmrg unsigned int vs_realloc:1; 340428d7b3dSmrg unsigned int gs_realloc:1; 341428d7b3dSmrg unsigned int clp_realloc:1; 342428d7b3dSmrg unsigned int sf_realloc:1; 343428d7b3dSmrg unsigned int vfe_realloc:1; 344428d7b3dSmrg unsigned int cs_realloc:1; 345428d7b3dSmrg unsigned int pad:2; 346428d7b3dSmrg unsigned int opcode:16; 347428d7b3dSmrg } header; 348428d7b3dSmrg 349428d7b3dSmrg struct 350428d7b3dSmrg { 351428d7b3dSmrg unsigned int vs_fence:10; 352428d7b3dSmrg unsigned int gs_fence:10; 353428d7b3dSmrg unsigned int clp_fence:10; 354428d7b3dSmrg unsigned int pad:2; 355428d7b3dSmrg } bits0; 356428d7b3dSmrg 357428d7b3dSmrg struct 358428d7b3dSmrg { 359428d7b3dSmrg unsigned int sf_fence:10; 360428d7b3dSmrg unsigned int vf_fence:10; 361428d7b3dSmrg unsigned int cs_fence:10; 362428d7b3dSmrg unsigned int pad:2; 363428d7b3dSmrg } bits1; 364428d7b3dSmrg}; 365428d7b3dSmrg 366428d7b3dSmrgstruct brw_constant_buffer_state /* previously brw_command_streamer */ 367428d7b3dSmrg{ 368428d7b3dSmrg struct header header; 369428d7b3dSmrg 370428d7b3dSmrg struct 371428d7b3dSmrg { 372428d7b3dSmrg unsigned int nr_urb_entries:3; 373428d7b3dSmrg unsigned int pad:1; 374428d7b3dSmrg unsigned int urb_entry_size:5; 375428d7b3dSmrg unsigned int pad0:23; 376428d7b3dSmrg } bits0; 377428d7b3dSmrg}; 378428d7b3dSmrg 379428d7b3dSmrgstruct brw_constant_buffer 380428d7b3dSmrg{ 381428d7b3dSmrg struct 382428d7b3dSmrg { 383428d7b3dSmrg unsigned int length:8; 384428d7b3dSmrg unsigned int valid:1; 385428d7b3dSmrg unsigned int pad:7; 386428d7b3dSmrg unsigned int opcode:16; 387428d7b3dSmrg } header; 388428d7b3dSmrg 389428d7b3dSmrg struct 390428d7b3dSmrg { 391428d7b3dSmrg unsigned int buffer_length:6; 392428d7b3dSmrg unsigned int buffer_address:26; 393428d7b3dSmrg } bits0; 394428d7b3dSmrg}; 395428d7b3dSmrg 396428d7b3dSmrgstruct brw_state_base_address 397428d7b3dSmrg{ 398428d7b3dSmrg struct header header; 399428d7b3dSmrg 400428d7b3dSmrg struct 401428d7b3dSmrg { 402428d7b3dSmrg unsigned int modify_enable:1; 403428d7b3dSmrg unsigned int pad:4; 404428d7b3dSmrg unsigned int general_state_address:27; 405428d7b3dSmrg } bits0; 406428d7b3dSmrg 407428d7b3dSmrg struct 408428d7b3dSmrg { 409428d7b3dSmrg unsigned int modify_enable:1; 410428d7b3dSmrg unsigned int pad:4; 411428d7b3dSmrg unsigned int surface_state_address:27; 412428d7b3dSmrg } bits1; 413428d7b3dSmrg 414428d7b3dSmrg struct 415428d7b3dSmrg { 416428d7b3dSmrg unsigned int modify_enable:1; 417428d7b3dSmrg unsigned int pad:4; 418428d7b3dSmrg unsigned int indirect_object_state_address:27; 419428d7b3dSmrg } bits2; 420428d7b3dSmrg 421428d7b3dSmrg struct 422428d7b3dSmrg { 423428d7b3dSmrg unsigned int modify_enable:1; 424428d7b3dSmrg unsigned int pad:11; 425428d7b3dSmrg unsigned int general_state_upper_bound:20; 426428d7b3dSmrg } bits3; 427428d7b3dSmrg 428428d7b3dSmrg struct 429428d7b3dSmrg { 430428d7b3dSmrg unsigned int modify_enable:1; 431428d7b3dSmrg unsigned int pad:11; 432428d7b3dSmrg unsigned int indirect_object_state_upper_bound:20; 433428d7b3dSmrg } bits4; 434428d7b3dSmrg}; 435428d7b3dSmrg 436428d7b3dSmrgstruct brw_state_prefetch 437428d7b3dSmrg{ 438428d7b3dSmrg struct header header; 439428d7b3dSmrg 440428d7b3dSmrg struct 441428d7b3dSmrg { 442428d7b3dSmrg unsigned int prefetch_count:3; 443428d7b3dSmrg unsigned int pad:3; 444428d7b3dSmrg unsigned int prefetch_pointer:26; 445428d7b3dSmrg } bits0; 446428d7b3dSmrg}; 447428d7b3dSmrg 448428d7b3dSmrgstruct brw_system_instruction_pointer 449428d7b3dSmrg{ 450428d7b3dSmrg struct header header; 451428d7b3dSmrg 452428d7b3dSmrg struct 453428d7b3dSmrg { 454428d7b3dSmrg unsigned int pad:4; 455428d7b3dSmrg unsigned int system_instruction_pointer:28; 456428d7b3dSmrg } bits0; 457428d7b3dSmrg}; 458428d7b3dSmrg 459428d7b3dSmrg 460428d7b3dSmrg 461428d7b3dSmrg 462428d7b3dSmrg/* State structs for the various fixed function units: 463428d7b3dSmrg */ 464428d7b3dSmrg 465428d7b3dSmrg 466428d7b3dSmrgstruct thread0 467428d7b3dSmrg{ 468428d7b3dSmrg unsigned int pad0:1; 469428d7b3dSmrg unsigned int grf_reg_count:3; 470428d7b3dSmrg unsigned int pad1:2; 471428d7b3dSmrg unsigned int kernel_start_pointer:26; 472428d7b3dSmrg}; 473428d7b3dSmrg 474428d7b3dSmrgstruct thread1 475428d7b3dSmrg{ 476428d7b3dSmrg unsigned int ext_halt_exception_enable:1; 477428d7b3dSmrg unsigned int sw_exception_enable:1; 478428d7b3dSmrg unsigned int mask_stack_exception_enable:1; 479428d7b3dSmrg unsigned int timeout_exception_enable:1; 480428d7b3dSmrg unsigned int illegal_op_exception_enable:1; 481428d7b3dSmrg unsigned int pad0:3; 482428d7b3dSmrg unsigned int depth_coef_urb_read_offset:6; /* WM only */ 483428d7b3dSmrg unsigned int pad1:2; 484428d7b3dSmrg unsigned int floating_point_mode:1; 485428d7b3dSmrg unsigned int thread_priority:1; 486428d7b3dSmrg unsigned int binding_table_entry_count:8; 487428d7b3dSmrg unsigned int pad3:5; 488428d7b3dSmrg unsigned int single_program_flow:1; 489428d7b3dSmrg}; 490428d7b3dSmrg 491428d7b3dSmrgstruct thread2 492428d7b3dSmrg{ 493428d7b3dSmrg unsigned int per_thread_scratch_space:4; 494428d7b3dSmrg unsigned int pad0:6; 495428d7b3dSmrg unsigned int scratch_space_base_pointer:22; 496428d7b3dSmrg}; 497428d7b3dSmrg 498428d7b3dSmrg 499428d7b3dSmrgstruct thread3 500428d7b3dSmrg{ 501428d7b3dSmrg unsigned int dispatch_grf_start_reg:4; 502428d7b3dSmrg unsigned int urb_entry_read_offset:6; 503428d7b3dSmrg unsigned int pad0:1; 504428d7b3dSmrg unsigned int urb_entry_read_length:6; 505428d7b3dSmrg unsigned int pad1:1; 506428d7b3dSmrg unsigned int const_urb_entry_read_offset:6; 507428d7b3dSmrg unsigned int pad2:1; 508428d7b3dSmrg unsigned int const_urb_entry_read_length:6; 509428d7b3dSmrg unsigned int pad3:1; 510428d7b3dSmrg}; 511428d7b3dSmrg 512428d7b3dSmrg 513428d7b3dSmrg 514428d7b3dSmrgstruct brw_clip_unit_state 515428d7b3dSmrg{ 516428d7b3dSmrg struct thread0 thread0; 517428d7b3dSmrg struct thread1 thread1; 518428d7b3dSmrg struct thread2 thread2; 519428d7b3dSmrg struct thread3 thread3; 520428d7b3dSmrg 521428d7b3dSmrg struct 522428d7b3dSmrg { 523428d7b3dSmrg unsigned int pad0:9; 524428d7b3dSmrg unsigned int gs_output_stats:1; /* not always */ 525428d7b3dSmrg unsigned int stats_enable:1; 526428d7b3dSmrg unsigned int nr_urb_entries:7; 527428d7b3dSmrg unsigned int pad1:1; 528428d7b3dSmrg unsigned int urb_entry_allocation_size:5; 529428d7b3dSmrg unsigned int pad2:1; 530428d7b3dSmrg unsigned int max_threads:6; /* may be less */ 531428d7b3dSmrg unsigned int pad3:1; 532428d7b3dSmrg } thread4; 533428d7b3dSmrg 534428d7b3dSmrg struct 535428d7b3dSmrg { 536428d7b3dSmrg unsigned int pad0:13; 537428d7b3dSmrg unsigned int clip_mode:3; 538428d7b3dSmrg unsigned int userclip_enable_flags:8; 539428d7b3dSmrg unsigned int userclip_must_clip:1; 540428d7b3dSmrg unsigned int pad1:1; 541428d7b3dSmrg unsigned int guard_band_enable:1; 542428d7b3dSmrg unsigned int viewport_z_clip_enable:1; 543428d7b3dSmrg unsigned int viewport_xy_clip_enable:1; 544428d7b3dSmrg unsigned int vertex_position_space:1; 545428d7b3dSmrg unsigned int api_mode:1; 546428d7b3dSmrg unsigned int pad2:1; 547428d7b3dSmrg } clip5; 548428d7b3dSmrg 549428d7b3dSmrg struct 550428d7b3dSmrg { 551428d7b3dSmrg unsigned int pad0:5; 552428d7b3dSmrg unsigned int clipper_viewport_state_ptr:27; 553428d7b3dSmrg } clip6; 554428d7b3dSmrg 555428d7b3dSmrg 556428d7b3dSmrg float viewport_xmin; 557428d7b3dSmrg float viewport_xmax; 558428d7b3dSmrg float viewport_ymin; 559428d7b3dSmrg float viewport_ymax; 560428d7b3dSmrg}; 561428d7b3dSmrg 562428d7b3dSmrg 563428d7b3dSmrg 564428d7b3dSmrgstruct brw_cc_unit_state 565428d7b3dSmrg{ 566428d7b3dSmrg struct 567428d7b3dSmrg { 568428d7b3dSmrg unsigned int pad0:3; 569428d7b3dSmrg unsigned int bf_stencil_pass_depth_pass_op:3; 570428d7b3dSmrg unsigned int bf_stencil_pass_depth_fail_op:3; 571428d7b3dSmrg unsigned int bf_stencil_fail_op:3; 572428d7b3dSmrg unsigned int bf_stencil_func:3; 573428d7b3dSmrg unsigned int bf_stencil_enable:1; 574428d7b3dSmrg unsigned int pad1:2; 575428d7b3dSmrg unsigned int stencil_write_enable:1; 576428d7b3dSmrg unsigned int stencil_pass_depth_pass_op:3; 577428d7b3dSmrg unsigned int stencil_pass_depth_fail_op:3; 578428d7b3dSmrg unsigned int stencil_fail_op:3; 579428d7b3dSmrg unsigned int stencil_func:3; 580428d7b3dSmrg unsigned int stencil_enable:1; 581428d7b3dSmrg } cc0; 582428d7b3dSmrg 583428d7b3dSmrg 584428d7b3dSmrg struct 585428d7b3dSmrg { 586428d7b3dSmrg unsigned int bf_stencil_ref:8; 587428d7b3dSmrg unsigned int stencil_write_mask:8; 588428d7b3dSmrg unsigned int stencil_test_mask:8; 589428d7b3dSmrg unsigned int stencil_ref:8; 590428d7b3dSmrg } cc1; 591428d7b3dSmrg 592428d7b3dSmrg 593428d7b3dSmrg struct 594428d7b3dSmrg { 595428d7b3dSmrg unsigned int logicop_enable:1; 596428d7b3dSmrg unsigned int pad0:10; 597428d7b3dSmrg unsigned int depth_write_enable:1; 598428d7b3dSmrg unsigned int depth_test_function:3; 599428d7b3dSmrg unsigned int depth_test:1; 600428d7b3dSmrg unsigned int bf_stencil_write_mask:8; 601428d7b3dSmrg unsigned int bf_stencil_test_mask:8; 602428d7b3dSmrg } cc2; 603428d7b3dSmrg 604428d7b3dSmrg 605428d7b3dSmrg struct 606428d7b3dSmrg { 607428d7b3dSmrg unsigned int pad0:8; 608428d7b3dSmrg unsigned int alpha_test_func:3; 609428d7b3dSmrg unsigned int alpha_test:1; 610428d7b3dSmrg unsigned int blend_enable:1; 611428d7b3dSmrg unsigned int ia_blend_enable:1; 612428d7b3dSmrg unsigned int pad1:1; 613428d7b3dSmrg unsigned int alpha_test_format:1; 614428d7b3dSmrg unsigned int pad2:16; 615428d7b3dSmrg } cc3; 616428d7b3dSmrg 617428d7b3dSmrg struct 618428d7b3dSmrg { 619428d7b3dSmrg unsigned int pad0:5; 620428d7b3dSmrg unsigned int cc_viewport_state_offset:27; 621428d7b3dSmrg } cc4; 622428d7b3dSmrg 623428d7b3dSmrg struct 624428d7b3dSmrg { 625428d7b3dSmrg unsigned int pad0:2; 626428d7b3dSmrg unsigned int ia_dest_blend_factor:5; 627428d7b3dSmrg unsigned int ia_src_blend_factor:5; 628428d7b3dSmrg unsigned int ia_blend_function:3; 629428d7b3dSmrg unsigned int statistics_enable:1; 630428d7b3dSmrg unsigned int logicop_func:4; 631428d7b3dSmrg unsigned int pad1:11; 632428d7b3dSmrg unsigned int dither_enable:1; 633428d7b3dSmrg } cc5; 634428d7b3dSmrg 635428d7b3dSmrg struct 636428d7b3dSmrg { 637428d7b3dSmrg unsigned int clamp_post_alpha_blend:1; 638428d7b3dSmrg unsigned int clamp_pre_alpha_blend:1; 639428d7b3dSmrg unsigned int clamp_range:2; 640428d7b3dSmrg unsigned int pad0:11; 641428d7b3dSmrg unsigned int y_dither_offset:2; 642428d7b3dSmrg unsigned int x_dither_offset:2; 643428d7b3dSmrg unsigned int dest_blend_factor:5; 644428d7b3dSmrg unsigned int src_blend_factor:5; 645428d7b3dSmrg unsigned int blend_function:3; 646428d7b3dSmrg } cc6; 647428d7b3dSmrg 648428d7b3dSmrg struct { 649428d7b3dSmrg union { 650428d7b3dSmrg float f; 651428d7b3dSmrg unsigned char ub[4]; 652428d7b3dSmrg } alpha_ref; 653428d7b3dSmrg } cc7; 654428d7b3dSmrg}; 655428d7b3dSmrg 656428d7b3dSmrg 657428d7b3dSmrg 658428d7b3dSmrgstruct brw_sf_unit_state 659428d7b3dSmrg{ 660428d7b3dSmrg struct thread0 thread0; 661428d7b3dSmrg struct { 662428d7b3dSmrg unsigned int pad0:7; 663428d7b3dSmrg unsigned int sw_exception_enable:1; 664428d7b3dSmrg unsigned int pad1:3; 665428d7b3dSmrg unsigned int mask_stack_exception_enable:1; 666428d7b3dSmrg unsigned int pad2:1; 667428d7b3dSmrg unsigned int illegal_op_exception_enable:1; 668428d7b3dSmrg unsigned int pad3:2; 669428d7b3dSmrg unsigned int floating_point_mode:1; 670428d7b3dSmrg unsigned int thread_priority:1; 671428d7b3dSmrg unsigned int binding_table_entry_count:8; 672428d7b3dSmrg unsigned int pad4:5; 673428d7b3dSmrg unsigned int single_program_flow:1; 674428d7b3dSmrg } sf1; 675428d7b3dSmrg 676428d7b3dSmrg struct thread2 thread2; 677428d7b3dSmrg struct thread3 thread3; 678428d7b3dSmrg 679428d7b3dSmrg struct 680428d7b3dSmrg { 681428d7b3dSmrg unsigned int pad0:10; 682428d7b3dSmrg unsigned int stats_enable:1; 683428d7b3dSmrg unsigned int nr_urb_entries:7; 684428d7b3dSmrg unsigned int pad1:1; 685428d7b3dSmrg unsigned int urb_entry_allocation_size:5; 686428d7b3dSmrg unsigned int pad2:1; 687428d7b3dSmrg unsigned int max_threads:6; 688428d7b3dSmrg unsigned int pad3:1; 689428d7b3dSmrg } thread4; 690428d7b3dSmrg 691428d7b3dSmrg struct 692428d7b3dSmrg { 693428d7b3dSmrg unsigned int front_winding:1; 694428d7b3dSmrg unsigned int viewport_transform:1; 695428d7b3dSmrg unsigned int pad0:3; 696428d7b3dSmrg unsigned int sf_viewport_state_offset:27; 697428d7b3dSmrg } sf5; 698428d7b3dSmrg 699428d7b3dSmrg struct 700428d7b3dSmrg { 701428d7b3dSmrg unsigned int pad0:9; 702428d7b3dSmrg unsigned int dest_org_vbias:4; 703428d7b3dSmrg unsigned int dest_org_hbias:4; 704428d7b3dSmrg unsigned int scissor:1; 705428d7b3dSmrg unsigned int disable_2x2_trifilter:1; 706428d7b3dSmrg unsigned int disable_zero_pix_trifilter:1; 707428d7b3dSmrg unsigned int point_rast_rule:2; 708428d7b3dSmrg unsigned int line_endcap_aa_region_width:2; 709428d7b3dSmrg unsigned int line_width:4; 710428d7b3dSmrg unsigned int fast_scissor_disable:1; 711428d7b3dSmrg unsigned int cull_mode:2; 712428d7b3dSmrg unsigned int aa_enable:1; 713428d7b3dSmrg } sf6; 714428d7b3dSmrg 715428d7b3dSmrg struct 716428d7b3dSmrg { 717428d7b3dSmrg unsigned int point_size:11; 718428d7b3dSmrg unsigned int use_point_size_state:1; 719428d7b3dSmrg unsigned int subpixel_precision:1; 720428d7b3dSmrg unsigned int sprite_point:1; 721428d7b3dSmrg unsigned int pad0:11; 722428d7b3dSmrg unsigned int trifan_pv:2; 723428d7b3dSmrg unsigned int linestrip_pv:2; 724428d7b3dSmrg unsigned int tristrip_pv:2; 725428d7b3dSmrg unsigned int line_last_pixel_enable:1; 726428d7b3dSmrg } sf7; 727428d7b3dSmrg 728428d7b3dSmrg}; 729428d7b3dSmrg 730428d7b3dSmrg 731428d7b3dSmrgstruct brw_gs_unit_state 732428d7b3dSmrg{ 733428d7b3dSmrg struct thread0 thread0; 734428d7b3dSmrg struct thread1 thread1; 735428d7b3dSmrg struct thread2 thread2; 736428d7b3dSmrg struct thread3 thread3; 737428d7b3dSmrg 738428d7b3dSmrg struct 739428d7b3dSmrg { 740428d7b3dSmrg unsigned int pad0:10; 741428d7b3dSmrg unsigned int stats_enable:1; 742428d7b3dSmrg unsigned int nr_urb_entries:7; 743428d7b3dSmrg unsigned int pad1:1; 744428d7b3dSmrg unsigned int urb_entry_allocation_size:5; 745428d7b3dSmrg unsigned int pad2:1; 746428d7b3dSmrg unsigned int max_threads:1; 747428d7b3dSmrg unsigned int pad3:6; 748428d7b3dSmrg } thread4; 749428d7b3dSmrg 750428d7b3dSmrg struct 751428d7b3dSmrg { 752428d7b3dSmrg unsigned int sampler_count:3; 753428d7b3dSmrg unsigned int pad0:2; 754428d7b3dSmrg unsigned int sampler_state_pointer:27; 755428d7b3dSmrg } gs5; 756428d7b3dSmrg 757428d7b3dSmrg 758428d7b3dSmrg struct 759428d7b3dSmrg { 760428d7b3dSmrg unsigned int max_vp_index:4; 761428d7b3dSmrg unsigned int pad0:26; 762428d7b3dSmrg unsigned int reorder_enable:1; 763428d7b3dSmrg unsigned int pad1:1; 764428d7b3dSmrg } gs6; 765428d7b3dSmrg}; 766428d7b3dSmrg 767428d7b3dSmrg 768428d7b3dSmrgstruct brw_vs_unit_state 769428d7b3dSmrg{ 770428d7b3dSmrg struct thread0 thread0; 771428d7b3dSmrg struct thread1 thread1; 772428d7b3dSmrg struct thread2 thread2; 773428d7b3dSmrg struct thread3 thread3; 774428d7b3dSmrg 775428d7b3dSmrg struct 776428d7b3dSmrg { 777428d7b3dSmrg unsigned int pad0:10; 778428d7b3dSmrg unsigned int stats_enable:1; 779428d7b3dSmrg unsigned int nr_urb_entries:7; 780428d7b3dSmrg unsigned int pad1:1; 781428d7b3dSmrg unsigned int urb_entry_allocation_size:5; 782428d7b3dSmrg unsigned int pad2:1; 783428d7b3dSmrg unsigned int max_threads:4; 784428d7b3dSmrg unsigned int pad3:3; 785428d7b3dSmrg } thread4; 786428d7b3dSmrg 787428d7b3dSmrg struct 788428d7b3dSmrg { 789428d7b3dSmrg unsigned int sampler_count:3; 790428d7b3dSmrg unsigned int pad0:2; 791428d7b3dSmrg unsigned int sampler_state_pointer:27; 792428d7b3dSmrg } vs5; 793428d7b3dSmrg 794428d7b3dSmrg struct 795428d7b3dSmrg { 796428d7b3dSmrg unsigned int vs_enable:1; 797428d7b3dSmrg unsigned int vert_cache_disable:1; 798428d7b3dSmrg unsigned int pad0:30; 799428d7b3dSmrg } vs6; 800428d7b3dSmrg}; 801428d7b3dSmrg 802428d7b3dSmrg 803428d7b3dSmrgstruct brw_wm_unit_state 804428d7b3dSmrg{ 805428d7b3dSmrg struct thread0 thread0; 806428d7b3dSmrg struct thread1 thread1; 807428d7b3dSmrg struct thread2 thread2; 808428d7b3dSmrg struct thread3 thread3; 809428d7b3dSmrg 810428d7b3dSmrg struct { 811428d7b3dSmrg unsigned int stats_enable:1; 812428d7b3dSmrg unsigned int pad0:1; 813428d7b3dSmrg unsigned int sampler_count:3; 814428d7b3dSmrg unsigned int sampler_state_pointer:27; 815428d7b3dSmrg } wm4; 816428d7b3dSmrg 817428d7b3dSmrg struct 818428d7b3dSmrg { 819428d7b3dSmrg unsigned int enable_8_pix:1; 820428d7b3dSmrg unsigned int enable_16_pix:1; 821428d7b3dSmrg unsigned int enable_32_pix:1; 822428d7b3dSmrg unsigned int pad0:7; 823428d7b3dSmrg unsigned int legacy_global_depth_bias:1; 824428d7b3dSmrg unsigned int line_stipple:1; 825428d7b3dSmrg unsigned int depth_offset:1; 826428d7b3dSmrg unsigned int polygon_stipple:1; 827428d7b3dSmrg unsigned int line_aa_region_width:2; 828428d7b3dSmrg unsigned int line_endcap_aa_region_width:2; 829428d7b3dSmrg unsigned int early_depth_test:1; 830428d7b3dSmrg unsigned int thread_dispatch_enable:1; 831428d7b3dSmrg unsigned int program_uses_depth:1; 832428d7b3dSmrg unsigned int program_computes_depth:1; 833428d7b3dSmrg unsigned int program_uses_killpixel:1; 834428d7b3dSmrg unsigned int legacy_line_rast: 1; 835428d7b3dSmrg unsigned int transposed_urb_read:1; 836428d7b3dSmrg unsigned int max_threads:7; 837428d7b3dSmrg } wm5; 838428d7b3dSmrg 839428d7b3dSmrg float global_depth_offset_constant; 840428d7b3dSmrg float global_depth_offset_scale; 841428d7b3dSmrg 842428d7b3dSmrg struct { 843428d7b3dSmrg unsigned int pad0:1; 844428d7b3dSmrg unsigned int grf_reg_count_1:3; 845428d7b3dSmrg unsigned int pad1:2; 846428d7b3dSmrg unsigned int kernel_start_pointer_1:26; 847428d7b3dSmrg } wm8; 848428d7b3dSmrg 849428d7b3dSmrg struct { 850428d7b3dSmrg unsigned int pad0:1; 851428d7b3dSmrg unsigned int grf_reg_count_2:3; 852428d7b3dSmrg unsigned int pad1:2; 853428d7b3dSmrg unsigned int kernel_start_pointer_2:26; 854428d7b3dSmrg } wm9; 855428d7b3dSmrg 856428d7b3dSmrg struct { 857428d7b3dSmrg unsigned int pad0:1; 858428d7b3dSmrg unsigned int grf_reg_count_3:3; 859428d7b3dSmrg unsigned int pad1:2; 860428d7b3dSmrg unsigned int kernel_start_pointer_3:26; 861428d7b3dSmrg } wm10; 862428d7b3dSmrg}; 863428d7b3dSmrg 864428d7b3dSmrgstruct brw_wm_unit_state_padded { 865428d7b3dSmrg struct brw_wm_unit_state state; 866428d7b3dSmrg char pad[64 - sizeof(struct brw_wm_unit_state)]; 867428d7b3dSmrg}; 868428d7b3dSmrg 869428d7b3dSmrg/* The hardware supports two different modes for border color. The 870428d7b3dSmrg * default (OpenGL) mode uses floating-point color channels, while the 871428d7b3dSmrg * legacy mode uses 4 bytes. 872428d7b3dSmrg * 873428d7b3dSmrg * More significantly, the legacy mode respects the components of the 874428d7b3dSmrg * border color for channels not present in the source, (whereas the 875428d7b3dSmrg * default mode will ignore the border color's alpha channel and use 876428d7b3dSmrg * alpha==1 for an RGB source, for example). 877428d7b3dSmrg * 878428d7b3dSmrg * The legacy mode matches the semantics specified by the Render 879428d7b3dSmrg * extension. 880428d7b3dSmrg */ 881428d7b3dSmrgstruct brw_sampler_default_border_color { 882428d7b3dSmrg float color[4]; 883428d7b3dSmrg}; 884428d7b3dSmrg 885428d7b3dSmrgstruct brw_sampler_legacy_border_color { 886428d7b3dSmrg uint8_t color[4]; 887428d7b3dSmrg}; 888428d7b3dSmrg 889428d7b3dSmrgstruct brw_sampler_state 890428d7b3dSmrg{ 891428d7b3dSmrg 892428d7b3dSmrg struct 893428d7b3dSmrg { 894428d7b3dSmrg unsigned int shadow_function:3; 895428d7b3dSmrg unsigned int lod_bias:11; 896428d7b3dSmrg unsigned int min_filter:3; 897428d7b3dSmrg unsigned int mag_filter:3; 898428d7b3dSmrg unsigned int mip_filter:2; 899428d7b3dSmrg unsigned int base_level:5; 900428d7b3dSmrg unsigned int pad:1; 901428d7b3dSmrg unsigned int lod_preclamp:1; 902428d7b3dSmrg unsigned int border_color_mode:1; 903428d7b3dSmrg unsigned int pad0:1; 904428d7b3dSmrg unsigned int disable:1; 905428d7b3dSmrg } ss0; 906428d7b3dSmrg 907428d7b3dSmrg struct 908428d7b3dSmrg { 909428d7b3dSmrg unsigned int r_wrap_mode:3; 910428d7b3dSmrg unsigned int t_wrap_mode:3; 911428d7b3dSmrg unsigned int s_wrap_mode:3; 912428d7b3dSmrg unsigned int pad:3; 913428d7b3dSmrg unsigned int max_lod:10; 914428d7b3dSmrg unsigned int min_lod:10; 915428d7b3dSmrg } ss1; 916428d7b3dSmrg 917428d7b3dSmrg 918428d7b3dSmrg struct 919428d7b3dSmrg { 920428d7b3dSmrg unsigned int pad:5; 921428d7b3dSmrg unsigned int border_color_pointer:27; 922428d7b3dSmrg } ss2; 923428d7b3dSmrg 924428d7b3dSmrg struct 925428d7b3dSmrg { 926428d7b3dSmrg unsigned int pad:19; 927428d7b3dSmrg unsigned int max_aniso:3; 928428d7b3dSmrg unsigned int chroma_key_mode:1; 929428d7b3dSmrg unsigned int chroma_key_index:2; 930428d7b3dSmrg unsigned int chroma_key_enable:1; 931428d7b3dSmrg unsigned int monochrome_filter_width:3; 932428d7b3dSmrg unsigned int monochrome_filter_height:3; 933428d7b3dSmrg } ss3; 934428d7b3dSmrg}; 935428d7b3dSmrg 936428d7b3dSmrg 937428d7b3dSmrgstruct brw_clipper_viewport 938428d7b3dSmrg{ 939428d7b3dSmrg float xmin; 940428d7b3dSmrg float xmax; 941428d7b3dSmrg float ymin; 942428d7b3dSmrg float ymax; 943428d7b3dSmrg}; 944428d7b3dSmrg 945428d7b3dSmrgstruct brw_cc_viewport 946428d7b3dSmrg{ 947428d7b3dSmrg float min_depth; 948428d7b3dSmrg float max_depth; 949428d7b3dSmrg}; 950428d7b3dSmrg 951428d7b3dSmrgstruct brw_sf_viewport 952428d7b3dSmrg{ 953428d7b3dSmrg struct { 954428d7b3dSmrg float m00; 955428d7b3dSmrg float m11; 956428d7b3dSmrg float m22; 957428d7b3dSmrg float m30; 958428d7b3dSmrg float m31; 959428d7b3dSmrg float m32; 960428d7b3dSmrg } viewport; 961428d7b3dSmrg 962428d7b3dSmrg struct { 963428d7b3dSmrg short xmin; 964428d7b3dSmrg short ymin; 965428d7b3dSmrg short xmax; 966428d7b3dSmrg short ymax; 967428d7b3dSmrg } scissor; 968428d7b3dSmrg}; 969428d7b3dSmrg 970428d7b3dSmrg/* Documented in the subsystem/shared-functions/sampler chapter... 971428d7b3dSmrg */ 972428d7b3dSmrgstruct brw_surface_state 973428d7b3dSmrg{ 974428d7b3dSmrg struct { 975428d7b3dSmrg unsigned int cube_pos_z:1; 976428d7b3dSmrg unsigned int cube_neg_z:1; 977428d7b3dSmrg unsigned int cube_pos_y:1; 978428d7b3dSmrg unsigned int cube_neg_y:1; 979428d7b3dSmrg unsigned int cube_pos_x:1; 980428d7b3dSmrg unsigned int cube_neg_x:1; 981428d7b3dSmrg unsigned int pad:3; 982428d7b3dSmrg unsigned int render_cache_read_mode:1; 983428d7b3dSmrg unsigned int mipmap_layout_mode:1; 984428d7b3dSmrg unsigned int vert_line_stride_ofs:1; 985428d7b3dSmrg unsigned int vert_line_stride:1; 986428d7b3dSmrg unsigned int color_blend:1; 987428d7b3dSmrg unsigned int writedisable_blue:1; 988428d7b3dSmrg unsigned int writedisable_green:1; 989428d7b3dSmrg unsigned int writedisable_red:1; 990428d7b3dSmrg unsigned int writedisable_alpha:1; 991428d7b3dSmrg unsigned int surface_format:9; 992428d7b3dSmrg unsigned int data_return_format:1; 993428d7b3dSmrg unsigned int pad0:1; 994428d7b3dSmrg unsigned int surface_type:3; 995428d7b3dSmrg } ss0; 996428d7b3dSmrg 997428d7b3dSmrg struct { 998428d7b3dSmrg unsigned int base_addr; 999428d7b3dSmrg } ss1; 1000428d7b3dSmrg 1001428d7b3dSmrg struct { 1002428d7b3dSmrg unsigned int render_target_rotation:2; 1003428d7b3dSmrg unsigned int mip_count:4; 1004428d7b3dSmrg unsigned int width:13; 1005428d7b3dSmrg unsigned int height:13; 1006428d7b3dSmrg } ss2; 1007428d7b3dSmrg 1008428d7b3dSmrg struct { 1009428d7b3dSmrg unsigned int tile_walk:1; 1010428d7b3dSmrg unsigned int tiled_surface:1; 1011428d7b3dSmrg unsigned int pad:1; 1012428d7b3dSmrg unsigned int pitch:18; 1013428d7b3dSmrg unsigned int depth:11; 1014428d7b3dSmrg } ss3; 1015428d7b3dSmrg 1016428d7b3dSmrg struct { 1017428d7b3dSmrg unsigned int pad:19; 1018428d7b3dSmrg unsigned int min_array_elt:9; 1019428d7b3dSmrg unsigned int min_lod:4; 1020428d7b3dSmrg } ss4; 1021428d7b3dSmrg 1022428d7b3dSmrg struct { 1023428d7b3dSmrg unsigned int pad:20; 1024428d7b3dSmrg unsigned int y_offset:4; 1025428d7b3dSmrg unsigned int pad2:1; 1026428d7b3dSmrg unsigned int x_offset:7; 1027428d7b3dSmrg } ss5; 1028428d7b3dSmrg}; 1029428d7b3dSmrg 1030428d7b3dSmrg 1031428d7b3dSmrg 1032428d7b3dSmrgstruct brw_vertex_buffer_state 1033428d7b3dSmrg{ 1034428d7b3dSmrg struct { 1035428d7b3dSmrg unsigned int pitch:11; 1036428d7b3dSmrg unsigned int pad:15; 1037428d7b3dSmrg unsigned int access_type:1; 1038428d7b3dSmrg unsigned int vb_index:5; 1039428d7b3dSmrg } vb0; 1040428d7b3dSmrg 1041428d7b3dSmrg unsigned int start_addr; 1042428d7b3dSmrg unsigned int max_index; 1043428d7b3dSmrg#if 1 1044428d7b3dSmrg unsigned int instance_data_step_rate; /* not included for sequential/random vertices? */ 1045428d7b3dSmrg#endif 1046428d7b3dSmrg}; 1047428d7b3dSmrg 1048428d7b3dSmrg#define BRW_VBP_MAX 17 1049428d7b3dSmrg 1050428d7b3dSmrgstruct brw_vb_array_state { 1051428d7b3dSmrg struct header header; 1052428d7b3dSmrg struct brw_vertex_buffer_state vb[BRW_VBP_MAX]; 1053428d7b3dSmrg}; 1054428d7b3dSmrg 1055428d7b3dSmrg 1056428d7b3dSmrgstruct brw_vertex_element_state 1057428d7b3dSmrg{ 1058428d7b3dSmrg struct 1059428d7b3dSmrg { 1060428d7b3dSmrg unsigned int src_offset:11; 1061428d7b3dSmrg unsigned int pad:5; 1062428d7b3dSmrg unsigned int src_format:9; 1063428d7b3dSmrg unsigned int pad0:1; 1064428d7b3dSmrg unsigned int valid:1; 1065428d7b3dSmrg unsigned int vertex_buffer_index:5; 1066428d7b3dSmrg } ve0; 1067428d7b3dSmrg 1068428d7b3dSmrg struct 1069428d7b3dSmrg { 1070428d7b3dSmrg unsigned int dst_offset:8; 1071428d7b3dSmrg unsigned int pad:8; 1072428d7b3dSmrg unsigned int vfcomponent3:4; 1073428d7b3dSmrg unsigned int vfcomponent2:4; 1074428d7b3dSmrg unsigned int vfcomponent1:4; 1075428d7b3dSmrg unsigned int vfcomponent0:4; 1076428d7b3dSmrg } ve1; 1077428d7b3dSmrg}; 1078428d7b3dSmrg 1079428d7b3dSmrg#define BRW_VEP_MAX 18 1080428d7b3dSmrg 1081428d7b3dSmrgstruct brw_vertex_element_packet { 1082428d7b3dSmrg struct header header; 1083428d7b3dSmrg struct brw_vertex_element_state ve[BRW_VEP_MAX]; /* note: less than _TNL_ATTRIB_MAX */ 1084428d7b3dSmrg}; 1085428d7b3dSmrg 1086428d7b3dSmrg 1087428d7b3dSmrgstruct brw_urb_immediate { 1088428d7b3dSmrg unsigned int opcode:4; 1089428d7b3dSmrg unsigned int offset:6; 1090428d7b3dSmrg unsigned int swizzle_control:2; 1091428d7b3dSmrg unsigned int pad:1; 1092428d7b3dSmrg unsigned int allocate:1; 1093428d7b3dSmrg unsigned int used:1; 1094428d7b3dSmrg unsigned int complete:1; 1095428d7b3dSmrg unsigned int response_length:4; 1096428d7b3dSmrg unsigned int msg_length:4; 1097428d7b3dSmrg unsigned int msg_target:4; 1098428d7b3dSmrg unsigned int pad1:3; 1099428d7b3dSmrg unsigned int end_of_thread:1; 1100428d7b3dSmrg}; 1101428d7b3dSmrg 1102428d7b3dSmrg/* Instruction format for the execution units: 1103428d7b3dSmrg */ 1104428d7b3dSmrg 1105428d7b3dSmrgstruct brw_instruction 1106428d7b3dSmrg{ 1107428d7b3dSmrg struct 1108428d7b3dSmrg { 1109428d7b3dSmrg unsigned int opcode:7; 1110428d7b3dSmrg unsigned int pad:1; 1111428d7b3dSmrg unsigned int access_mode:1; 1112428d7b3dSmrg unsigned int mask_control:1; 1113428d7b3dSmrg unsigned int dependency_control:2; 1114428d7b3dSmrg unsigned int compression_control:2; 1115428d7b3dSmrg unsigned int thread_control:2; 1116428d7b3dSmrg unsigned int predicate_control:4; 1117428d7b3dSmrg unsigned int predicate_inverse:1; 1118428d7b3dSmrg unsigned int execution_size:3; 1119428d7b3dSmrg unsigned int destreg__conditonalmod:4; /* destreg - send, conditionalmod - others */ 1120428d7b3dSmrg unsigned int pad0:2; 1121428d7b3dSmrg unsigned int debug_control:1; 1122428d7b3dSmrg unsigned int saturate:1; 1123428d7b3dSmrg } header; 1124428d7b3dSmrg 1125428d7b3dSmrg union { 1126428d7b3dSmrg struct 1127428d7b3dSmrg { 1128428d7b3dSmrg unsigned int dest_reg_file:2; 1129428d7b3dSmrg unsigned int dest_reg_type:3; 1130428d7b3dSmrg unsigned int src0_reg_file:2; 1131428d7b3dSmrg unsigned int src0_reg_type:3; 1132428d7b3dSmrg unsigned int src1_reg_file:2; 1133428d7b3dSmrg unsigned int src1_reg_type:3; 1134428d7b3dSmrg unsigned int pad:1; 1135428d7b3dSmrg unsigned int dest_subreg_nr:5; 1136428d7b3dSmrg unsigned int dest_reg_nr:8; 1137428d7b3dSmrg unsigned int dest_horiz_stride:2; 1138428d7b3dSmrg unsigned int dest_address_mode:1; 1139428d7b3dSmrg } da1; 1140428d7b3dSmrg 1141428d7b3dSmrg struct 1142428d7b3dSmrg { 1143428d7b3dSmrg unsigned int dest_reg_file:2; 1144428d7b3dSmrg unsigned int dest_reg_type:3; 1145428d7b3dSmrg unsigned int src0_reg_file:2; 1146428d7b3dSmrg unsigned int src0_reg_type:3; 1147428d7b3dSmrg unsigned int pad:6; 1148428d7b3dSmrg int dest_indirect_offset:10; /* offset against the deref'd address reg */ 1149428d7b3dSmrg unsigned int dest_subreg_nr:3; /* subnr for the address reg a0.x */ 1150428d7b3dSmrg unsigned int dest_horiz_stride:2; 1151428d7b3dSmrg unsigned int dest_address_mode:1; 1152428d7b3dSmrg } ia1; 1153428d7b3dSmrg 1154428d7b3dSmrg struct 1155428d7b3dSmrg { 1156428d7b3dSmrg unsigned int dest_reg_file:2; 1157428d7b3dSmrg unsigned int dest_reg_type:3; 1158428d7b3dSmrg unsigned int src0_reg_file:2; 1159428d7b3dSmrg unsigned int src0_reg_type:3; 1160428d7b3dSmrg unsigned int src1_reg_file:2; 1161428d7b3dSmrg unsigned int src1_reg_type:3; 1162428d7b3dSmrg unsigned int pad0:1; 1163428d7b3dSmrg unsigned int dest_writemask:4; 1164428d7b3dSmrg unsigned int dest_subreg_nr:1; 1165428d7b3dSmrg unsigned int dest_reg_nr:8; 1166428d7b3dSmrg unsigned int pad1:2; 1167428d7b3dSmrg unsigned int dest_address_mode:1; 1168428d7b3dSmrg } da16; 1169428d7b3dSmrg 1170428d7b3dSmrg struct 1171428d7b3dSmrg { 1172428d7b3dSmrg unsigned int dest_reg_file:2; 1173428d7b3dSmrg unsigned int dest_reg_type:3; 1174428d7b3dSmrg unsigned int src0_reg_file:2; 1175428d7b3dSmrg unsigned int src0_reg_type:3; 1176428d7b3dSmrg unsigned int pad0:6; 1177428d7b3dSmrg unsigned int dest_writemask:4; 1178428d7b3dSmrg int dest_indirect_offset:6; 1179428d7b3dSmrg unsigned int dest_subreg_nr:3; 1180428d7b3dSmrg unsigned int pad1:2; 1181428d7b3dSmrg unsigned int dest_address_mode:1; 1182428d7b3dSmrg } ia16; 1183428d7b3dSmrg } bits1; 1184428d7b3dSmrg 1185428d7b3dSmrg 1186428d7b3dSmrg union { 1187428d7b3dSmrg struct 1188428d7b3dSmrg { 1189428d7b3dSmrg unsigned int src0_subreg_nr:5; 1190428d7b3dSmrg unsigned int src0_reg_nr:8; 1191428d7b3dSmrg unsigned int src0_abs:1; 1192428d7b3dSmrg unsigned int src0_negate:1; 1193428d7b3dSmrg unsigned int src0_address_mode:1; 1194428d7b3dSmrg unsigned int src0_horiz_stride:2; 1195428d7b3dSmrg unsigned int src0_width:3; 1196428d7b3dSmrg unsigned int src0_vert_stride:4; 1197428d7b3dSmrg unsigned int flag_reg_nr:1; 1198428d7b3dSmrg unsigned int pad:6; 1199428d7b3dSmrg } da1; 1200428d7b3dSmrg 1201428d7b3dSmrg struct 1202428d7b3dSmrg { 1203428d7b3dSmrg int src0_indirect_offset:10; 1204428d7b3dSmrg unsigned int src0_subreg_nr:3; 1205428d7b3dSmrg unsigned int src0_abs:1; 1206428d7b3dSmrg unsigned int src0_negate:1; 1207428d7b3dSmrg unsigned int src0_address_mode:1; 1208428d7b3dSmrg unsigned int src0_horiz_stride:2; 1209428d7b3dSmrg unsigned int src0_width:3; 1210428d7b3dSmrg unsigned int src0_vert_stride:4; 1211428d7b3dSmrg unsigned int flag_reg_nr:1; 1212428d7b3dSmrg unsigned int pad:6; 1213428d7b3dSmrg } ia1; 1214428d7b3dSmrg 1215428d7b3dSmrg struct 1216428d7b3dSmrg { 1217428d7b3dSmrg unsigned int src0_swz_x:2; 1218428d7b3dSmrg unsigned int src0_swz_y:2; 1219428d7b3dSmrg unsigned int src0_subreg_nr:1; 1220428d7b3dSmrg unsigned int src0_reg_nr:8; 1221428d7b3dSmrg unsigned int src0_abs:1; 1222428d7b3dSmrg unsigned int src0_negate:1; 1223428d7b3dSmrg unsigned int src0_address_mode:1; 1224428d7b3dSmrg unsigned int src0_swz_z:2; 1225428d7b3dSmrg unsigned int src0_swz_w:2; 1226428d7b3dSmrg unsigned int pad0:1; 1227428d7b3dSmrg unsigned int src0_vert_stride:4; 1228428d7b3dSmrg unsigned int flag_reg_nr:1; 1229428d7b3dSmrg unsigned int pad1:6; 1230428d7b3dSmrg } da16; 1231428d7b3dSmrg 1232428d7b3dSmrg struct 1233428d7b3dSmrg { 1234428d7b3dSmrg unsigned int src0_swz_x:2; 1235428d7b3dSmrg unsigned int src0_swz_y:2; 1236428d7b3dSmrg int src0_indirect_offset:6; 1237428d7b3dSmrg unsigned int src0_subreg_nr:3; 1238428d7b3dSmrg unsigned int src0_abs:1; 1239428d7b3dSmrg unsigned int src0_negate:1; 1240428d7b3dSmrg unsigned int src0_address_mode:1; 1241428d7b3dSmrg unsigned int src0_swz_z:2; 1242428d7b3dSmrg unsigned int src0_swz_w:2; 1243428d7b3dSmrg unsigned int pad0:1; 1244428d7b3dSmrg unsigned int src0_vert_stride:4; 1245428d7b3dSmrg unsigned int flag_reg_nr:1; 1246428d7b3dSmrg unsigned int pad1:6; 1247428d7b3dSmrg } ia16; 1248428d7b3dSmrg 1249428d7b3dSmrg } bits2; 1250428d7b3dSmrg 1251428d7b3dSmrg union 1252428d7b3dSmrg { 1253428d7b3dSmrg struct 1254428d7b3dSmrg { 1255428d7b3dSmrg unsigned int src1_subreg_nr:5; 1256428d7b3dSmrg unsigned int src1_reg_nr:8; 1257428d7b3dSmrg unsigned int src1_abs:1; 1258428d7b3dSmrg unsigned int src1_negate:1; 1259428d7b3dSmrg unsigned int pad:1; 1260428d7b3dSmrg unsigned int src1_horiz_stride:2; 1261428d7b3dSmrg unsigned int src1_width:3; 1262428d7b3dSmrg unsigned int src1_vert_stride:4; 1263428d7b3dSmrg unsigned int pad0:7; 1264428d7b3dSmrg } da1; 1265428d7b3dSmrg 1266428d7b3dSmrg struct 1267428d7b3dSmrg { 1268428d7b3dSmrg unsigned int src1_swz_x:2; 1269428d7b3dSmrg unsigned int src1_swz_y:2; 1270428d7b3dSmrg unsigned int src1_subreg_nr:1; 1271428d7b3dSmrg unsigned int src1_reg_nr:8; 1272428d7b3dSmrg unsigned int src1_abs:1; 1273428d7b3dSmrg unsigned int src1_negate:1; 1274428d7b3dSmrg unsigned int pad0:1; 1275428d7b3dSmrg unsigned int src1_swz_z:2; 1276428d7b3dSmrg unsigned int src1_swz_w:2; 1277428d7b3dSmrg unsigned int pad1:1; 1278428d7b3dSmrg unsigned int src1_vert_stride:4; 1279428d7b3dSmrg unsigned int pad2:7; 1280428d7b3dSmrg } da16; 1281428d7b3dSmrg 1282428d7b3dSmrg struct 1283428d7b3dSmrg { 1284428d7b3dSmrg int src1_indirect_offset:10; 1285428d7b3dSmrg unsigned int src1_subreg_nr:3; 1286428d7b3dSmrg unsigned int src1_abs:1; 1287428d7b3dSmrg unsigned int src1_negate:1; 1288428d7b3dSmrg unsigned int pad0:1; 1289428d7b3dSmrg unsigned int src1_horiz_stride:2; 1290428d7b3dSmrg unsigned int src1_width:3; 1291428d7b3dSmrg unsigned int src1_vert_stride:4; 1292428d7b3dSmrg unsigned int flag_reg_nr:1; 1293428d7b3dSmrg unsigned int pad1:6; 1294428d7b3dSmrg } ia1; 1295428d7b3dSmrg 1296428d7b3dSmrg struct 1297428d7b3dSmrg { 1298428d7b3dSmrg unsigned int src1_swz_x:2; 1299428d7b3dSmrg unsigned int src1_swz_y:2; 1300428d7b3dSmrg int src1_indirect_offset:6; 1301428d7b3dSmrg unsigned int src1_subreg_nr:3; 1302428d7b3dSmrg unsigned int src1_abs:1; 1303428d7b3dSmrg unsigned int src1_negate:1; 1304428d7b3dSmrg unsigned int pad0:1; 1305428d7b3dSmrg unsigned int src1_swz_z:2; 1306428d7b3dSmrg unsigned int src1_swz_w:2; 1307428d7b3dSmrg unsigned int pad1:1; 1308428d7b3dSmrg unsigned int src1_vert_stride:4; 1309428d7b3dSmrg unsigned int flag_reg_nr:1; 1310428d7b3dSmrg unsigned int pad2:6; 1311428d7b3dSmrg } ia16; 1312428d7b3dSmrg 1313428d7b3dSmrg 1314428d7b3dSmrg struct 1315428d7b3dSmrg { 1316428d7b3dSmrg int jump_count:16; /* note: signed */ 1317428d7b3dSmrg unsigned int pop_count:4; 1318428d7b3dSmrg unsigned int pad0:12; 1319428d7b3dSmrg } if_else; 1320428d7b3dSmrg 1321428d7b3dSmrg struct { 1322428d7b3dSmrg unsigned int function:4; 1323428d7b3dSmrg unsigned int int_type:1; 1324428d7b3dSmrg unsigned int precision:1; 1325428d7b3dSmrg unsigned int saturate:1; 1326428d7b3dSmrg unsigned int data_type:1; 1327428d7b3dSmrg unsigned int pad0:8; 1328428d7b3dSmrg unsigned int response_length:4; 1329428d7b3dSmrg unsigned int msg_length:4; 1330428d7b3dSmrg unsigned int msg_target:4; 1331428d7b3dSmrg unsigned int pad1:3; 1332428d7b3dSmrg unsigned int end_of_thread:1; 1333428d7b3dSmrg } math; 1334428d7b3dSmrg 1335428d7b3dSmrg struct { 1336428d7b3dSmrg unsigned int binding_table_index:8; 1337428d7b3dSmrg unsigned int sampler:4; 1338428d7b3dSmrg unsigned int return_format:2; 1339428d7b3dSmrg unsigned int msg_type:2; 1340428d7b3dSmrg unsigned int response_length:4; 1341428d7b3dSmrg unsigned int msg_length:4; 1342428d7b3dSmrg unsigned int msg_target:4; 1343428d7b3dSmrg unsigned int pad1:3; 1344428d7b3dSmrg unsigned int end_of_thread:1; 1345428d7b3dSmrg } sampler; 1346428d7b3dSmrg 1347428d7b3dSmrg struct brw_urb_immediate urb; 1348428d7b3dSmrg 1349428d7b3dSmrg struct { 1350428d7b3dSmrg unsigned int binding_table_index:8; 1351428d7b3dSmrg unsigned int msg_control:4; 1352428d7b3dSmrg unsigned int msg_type:2; 1353428d7b3dSmrg unsigned int target_cache:2; 1354428d7b3dSmrg unsigned int response_length:4; 1355428d7b3dSmrg unsigned int msg_length:4; 1356428d7b3dSmrg unsigned int msg_target:4; 1357428d7b3dSmrg unsigned int pad1:3; 1358428d7b3dSmrg unsigned int end_of_thread:1; 1359428d7b3dSmrg } dp_read; 1360428d7b3dSmrg 1361428d7b3dSmrg struct { 1362428d7b3dSmrg unsigned int binding_table_index:8; 1363428d7b3dSmrg unsigned int msg_control:3; 1364428d7b3dSmrg unsigned int pixel_scoreboard_clear:1; 1365428d7b3dSmrg unsigned int msg_type:3; 1366428d7b3dSmrg unsigned int send_commit_msg:1; 1367428d7b3dSmrg unsigned int response_length:4; 1368428d7b3dSmrg unsigned int msg_length:4; 1369428d7b3dSmrg unsigned int msg_target:4; 1370428d7b3dSmrg unsigned int pad1:3; 1371428d7b3dSmrg unsigned int end_of_thread:1; 1372428d7b3dSmrg } dp_write; 1373428d7b3dSmrg 1374428d7b3dSmrg struct { 1375428d7b3dSmrg unsigned int pad:16; 1376428d7b3dSmrg unsigned int response_length:4; 1377428d7b3dSmrg unsigned int msg_length:4; 1378428d7b3dSmrg unsigned int msg_target:4; 1379428d7b3dSmrg unsigned int pad1:3; 1380428d7b3dSmrg unsigned int end_of_thread:1; 1381428d7b3dSmrg } generic; 1382428d7b3dSmrg 1383428d7b3dSmrg unsigned int ud; 1384428d7b3dSmrg } bits3; 1385428d7b3dSmrg}; 1386428d7b3dSmrg 1387428d7b3dSmrg/* media pipeline */ 1388428d7b3dSmrg 1389428d7b3dSmrgstruct brw_vfe_state { 1390428d7b3dSmrg struct { 1391428d7b3dSmrg unsigned int per_thread_scratch_space:4; 1392428d7b3dSmrg unsigned int pad3:3; 1393428d7b3dSmrg unsigned int extend_vfe_state_present:1; 1394428d7b3dSmrg unsigned int pad2:2; 1395428d7b3dSmrg unsigned int scratch_base:22; 1396428d7b3dSmrg } vfe0; 1397428d7b3dSmrg 1398428d7b3dSmrg struct { 1399428d7b3dSmrg unsigned int debug_counter_control:2; 1400428d7b3dSmrg unsigned int children_present:1; 1401428d7b3dSmrg unsigned int vfe_mode:4; 1402428d7b3dSmrg unsigned int pad2:2; 1403428d7b3dSmrg unsigned int num_urb_entries:7; 1404428d7b3dSmrg unsigned int urb_entry_alloc_size:9; 1405428d7b3dSmrg unsigned int max_threads:7; 1406428d7b3dSmrg } vfe1; 1407428d7b3dSmrg 1408428d7b3dSmrg struct { 1409428d7b3dSmrg unsigned int pad4:4; 1410428d7b3dSmrg unsigned int interface_descriptor_base:28; 1411428d7b3dSmrg } vfe2; 1412428d7b3dSmrg}; 1413428d7b3dSmrg 1414428d7b3dSmrgstruct brw_vld_state { 1415428d7b3dSmrg struct { 1416428d7b3dSmrg unsigned int pad6:6; 1417428d7b3dSmrg unsigned int scan_order:1; 1418428d7b3dSmrg unsigned int intra_vlc_format:1; 1419428d7b3dSmrg unsigned int quantizer_scale_type:1; 1420428d7b3dSmrg unsigned int concealment_motion_vector:1; 1421428d7b3dSmrg unsigned int frame_predict_frame_dct:1; 1422428d7b3dSmrg unsigned int top_field_first:1; 1423428d7b3dSmrg unsigned int picture_structure:2; 1424428d7b3dSmrg unsigned int intra_dc_precision:2; 1425428d7b3dSmrg unsigned int f_code_0_0:4; 1426428d7b3dSmrg unsigned int f_code_0_1:4; 1427428d7b3dSmrg unsigned int f_code_1_0:4; 1428428d7b3dSmrg unsigned int f_code_1_1:4; 1429428d7b3dSmrg } vld0; 1430428d7b3dSmrg 1431428d7b3dSmrg struct { 1432428d7b3dSmrg unsigned int pad2:9; 1433428d7b3dSmrg unsigned int picture_coding_type:2; 1434428d7b3dSmrg unsigned int pad:21; 1435428d7b3dSmrg } vld1; 1436428d7b3dSmrg 1437428d7b3dSmrg struct { 1438428d7b3dSmrg unsigned int index_0:4; 1439428d7b3dSmrg unsigned int index_1:4; 1440428d7b3dSmrg unsigned int index_2:4; 1441428d7b3dSmrg unsigned int index_3:4; 1442428d7b3dSmrg unsigned int index_4:4; 1443428d7b3dSmrg unsigned int index_5:4; 1444428d7b3dSmrg unsigned int index_6:4; 1445428d7b3dSmrg unsigned int index_7:4; 1446428d7b3dSmrg } desc_remap_table0; 1447428d7b3dSmrg 1448428d7b3dSmrg struct { 1449428d7b3dSmrg unsigned int index_8:4; 1450428d7b3dSmrg unsigned int index_9:4; 1451428d7b3dSmrg unsigned int index_10:4; 1452428d7b3dSmrg unsigned int index_11:4; 1453428d7b3dSmrg unsigned int index_12:4; 1454428d7b3dSmrg unsigned int index_13:4; 1455428d7b3dSmrg unsigned int index_14:4; 1456428d7b3dSmrg unsigned int index_15:4; 1457428d7b3dSmrg } desc_remap_table1; 1458428d7b3dSmrg}; 1459428d7b3dSmrg 1460428d7b3dSmrgstruct brw_interface_descriptor { 1461428d7b3dSmrg struct { 1462428d7b3dSmrg unsigned int grf_reg_blocks:4; 1463428d7b3dSmrg unsigned int pad:2; 1464428d7b3dSmrg unsigned int kernel_start_pointer:26; 1465428d7b3dSmrg } desc0; 1466428d7b3dSmrg 1467428d7b3dSmrg struct { 1468428d7b3dSmrg unsigned int pad:7; 1469428d7b3dSmrg unsigned int software_exception:1; 1470428d7b3dSmrg unsigned int pad2:3; 1471428d7b3dSmrg unsigned int maskstack_exception:1; 1472428d7b3dSmrg unsigned int pad3:1; 1473428d7b3dSmrg unsigned int illegal_opcode_exception:1; 1474428d7b3dSmrg unsigned int pad4:2; 1475428d7b3dSmrg unsigned int floating_point_mode:1; 1476428d7b3dSmrg unsigned int thread_priority:1; 1477428d7b3dSmrg unsigned int single_program_flow:1; 1478428d7b3dSmrg unsigned int pad5:1; 1479428d7b3dSmrg unsigned int const_urb_entry_read_offset:6; 1480428d7b3dSmrg unsigned int const_urb_entry_read_len:6; 1481428d7b3dSmrg } desc1; 1482428d7b3dSmrg 1483428d7b3dSmrg struct { 1484428d7b3dSmrg unsigned int pad:2; 1485428d7b3dSmrg unsigned int sampler_count:3; 1486428d7b3dSmrg unsigned int sampler_state_pointer:27; 1487428d7b3dSmrg } desc2; 1488428d7b3dSmrg 1489428d7b3dSmrg struct { 1490428d7b3dSmrg unsigned int binding_table_entry_count:5; 1491428d7b3dSmrg unsigned int binding_table_pointer:27; 1492428d7b3dSmrg } desc3; 1493428d7b3dSmrg}; 1494428d7b3dSmrg 1495428d7b3dSmrgstruct gen6_blend_state 1496428d7b3dSmrg{ 1497428d7b3dSmrg struct { 1498428d7b3dSmrg unsigned int dest_blend_factor:5; 1499428d7b3dSmrg unsigned int source_blend_factor:5; 1500428d7b3dSmrg unsigned int pad3:1; 1501428d7b3dSmrg unsigned int blend_func:3; 1502428d7b3dSmrg unsigned int pad2:1; 1503428d7b3dSmrg unsigned int ia_dest_blend_factor:5; 1504428d7b3dSmrg unsigned int ia_source_blend_factor:5; 1505428d7b3dSmrg unsigned int pad1:1; 1506428d7b3dSmrg unsigned int ia_blend_func:3; 1507428d7b3dSmrg unsigned int pad0:1; 1508428d7b3dSmrg unsigned int ia_blend_enable:1; 1509428d7b3dSmrg unsigned int blend_enable:1; 1510428d7b3dSmrg } blend0; 1511428d7b3dSmrg 1512428d7b3dSmrg struct { 1513428d7b3dSmrg unsigned int post_blend_clamp_enable:1; 1514428d7b3dSmrg unsigned int pre_blend_clamp_enable:1; 1515428d7b3dSmrg unsigned int clamp_range:2; 1516428d7b3dSmrg unsigned int pad0:4; 1517428d7b3dSmrg unsigned int x_dither_offset:2; 1518428d7b3dSmrg unsigned int y_dither_offset:2; 1519428d7b3dSmrg unsigned int dither_enable:1; 1520428d7b3dSmrg unsigned int alpha_test_func:3; 1521428d7b3dSmrg unsigned int alpha_test_enable:1; 1522428d7b3dSmrg unsigned int pad1:1; 1523428d7b3dSmrg unsigned int logic_op_func:4; 1524428d7b3dSmrg unsigned int logic_op_enable:1; 1525428d7b3dSmrg unsigned int pad2:1; 1526428d7b3dSmrg unsigned int write_disable_b:1; 1527428d7b3dSmrg unsigned int write_disable_g:1; 1528428d7b3dSmrg unsigned int write_disable_r:1; 1529428d7b3dSmrg unsigned int write_disable_a:1; 1530428d7b3dSmrg unsigned int pad3:1; 1531428d7b3dSmrg unsigned int alpha_to_coverage_dither:1; 1532428d7b3dSmrg unsigned int alpha_to_one:1; 1533428d7b3dSmrg unsigned int alpha_to_coverage:1; 1534428d7b3dSmrg } blend1; 1535428d7b3dSmrg}; 1536428d7b3dSmrg 1537428d7b3dSmrgstruct gen6_color_calc_state 1538428d7b3dSmrg{ 1539428d7b3dSmrg struct { 1540428d7b3dSmrg unsigned int alpha_test_format:1; 1541428d7b3dSmrg unsigned int pad0:14; 1542428d7b3dSmrg unsigned int round_disable:1; 1543428d7b3dSmrg unsigned int bf_stencil_ref:8; 1544428d7b3dSmrg unsigned int stencil_ref:8; 1545428d7b3dSmrg } cc0; 1546428d7b3dSmrg 1547428d7b3dSmrg union { 1548428d7b3dSmrg float alpha_ref_f; 1549428d7b3dSmrg struct { 1550428d7b3dSmrg unsigned int ui:8; 1551428d7b3dSmrg unsigned int pad0:24; 1552428d7b3dSmrg } alpha_ref_fi; 1553428d7b3dSmrg } cc1; 1554428d7b3dSmrg 1555428d7b3dSmrg float constant_r; 1556428d7b3dSmrg float constant_g; 1557428d7b3dSmrg float constant_b; 1558428d7b3dSmrg float constant_a; 1559428d7b3dSmrg}; 1560428d7b3dSmrg 1561428d7b3dSmrgstruct gen6_depth_stencil_state 1562428d7b3dSmrg{ 1563428d7b3dSmrg struct { 1564428d7b3dSmrg unsigned int pad0:3; 1565428d7b3dSmrg unsigned int bf_stencil_pass_depth_pass_op:3; 1566428d7b3dSmrg unsigned int bf_stencil_pass_depth_fail_op:3; 1567428d7b3dSmrg unsigned int bf_stencil_fail_op:3; 1568428d7b3dSmrg unsigned int bf_stencil_func:3; 1569428d7b3dSmrg unsigned int bf_stencil_enable:1; 1570428d7b3dSmrg unsigned int pad1:2; 1571428d7b3dSmrg unsigned int stencil_write_enable:1; 1572428d7b3dSmrg unsigned int stencil_pass_depth_pass_op:3; 1573428d7b3dSmrg unsigned int stencil_pass_depth_fail_op:3; 1574428d7b3dSmrg unsigned int stencil_fail_op:3; 1575428d7b3dSmrg unsigned int stencil_func:3; 1576428d7b3dSmrg unsigned int stencil_enable:1; 1577428d7b3dSmrg } ds0; 1578428d7b3dSmrg 1579428d7b3dSmrg struct { 1580428d7b3dSmrg unsigned int bf_stencil_write_mask:8; 1581428d7b3dSmrg unsigned int bf_stencil_test_mask:8; 1582428d7b3dSmrg unsigned int stencil_write_mask:8; 1583428d7b3dSmrg unsigned int stencil_test_mask:8; 1584428d7b3dSmrg } ds1; 1585428d7b3dSmrg 1586428d7b3dSmrg struct { 1587428d7b3dSmrg unsigned int pad0:26; 1588428d7b3dSmrg unsigned int depth_write_enable:1; 1589428d7b3dSmrg unsigned int depth_test_func:3; 1590428d7b3dSmrg unsigned int pad1:1; 1591428d7b3dSmrg unsigned int depth_test_enable:1; 1592428d7b3dSmrg } ds2; 1593428d7b3dSmrg}; 1594428d7b3dSmrg 1595428d7b3dSmrgstruct gen7_surface_state 1596428d7b3dSmrg{ 1597428d7b3dSmrg struct { 1598428d7b3dSmrg unsigned int cube_pos_z:1; 1599428d7b3dSmrg unsigned int cube_neg_z:1; 1600428d7b3dSmrg unsigned int cube_pos_y:1; 1601428d7b3dSmrg unsigned int cube_neg_y:1; 1602428d7b3dSmrg unsigned int cube_pos_x:1; 1603428d7b3dSmrg unsigned int cube_neg_x:1; 1604428d7b3dSmrg unsigned int pad2:2; 1605428d7b3dSmrg unsigned int render_cache_read_write:1; 1606428d7b3dSmrg unsigned int pad1:1; 1607428d7b3dSmrg unsigned int surface_array_spacing:1; 1608428d7b3dSmrg unsigned int vert_line_stride_ofs:1; 1609428d7b3dSmrg unsigned int vert_line_stride:1; 1610428d7b3dSmrg unsigned int tile_walk:1; 1611428d7b3dSmrg unsigned int tiled_surface:1; 1612428d7b3dSmrg unsigned int horizontal_alignment:1; 1613428d7b3dSmrg unsigned int vertical_alignment:2; 1614428d7b3dSmrg unsigned int surface_format:9; /**< BRW_SURFACEFORMAT_x */ 1615428d7b3dSmrg unsigned int pad0:1; 1616428d7b3dSmrg unsigned int is_array:1; 1617428d7b3dSmrg unsigned int surface_type:3; /**< BRW_SURFACE_1D/2D/3D/CUBE */ 1618428d7b3dSmrg } ss0; 1619428d7b3dSmrg 1620428d7b3dSmrg struct { 1621428d7b3dSmrg unsigned int base_addr; 1622428d7b3dSmrg } ss1; 1623428d7b3dSmrg 1624428d7b3dSmrg struct { 1625428d7b3dSmrg unsigned int width:14; 1626428d7b3dSmrg unsigned int pad1:2; 1627428d7b3dSmrg unsigned int height:14; 1628428d7b3dSmrg unsigned int pad0:2; 1629428d7b3dSmrg } ss2; 1630428d7b3dSmrg 1631428d7b3dSmrg struct { 1632428d7b3dSmrg unsigned int pitch:18; 1633428d7b3dSmrg unsigned int pad:3; 1634428d7b3dSmrg unsigned int depth:11; 1635428d7b3dSmrg } ss3; 1636428d7b3dSmrg 1637428d7b3dSmrg struct { 1638428d7b3dSmrg unsigned int multisample_position_palette_index:3; 1639428d7b3dSmrg unsigned int num_multisamples:3; 1640428d7b3dSmrg unsigned int multisampled_surface_storage_format:1; 1641428d7b3dSmrg unsigned int render_target_view_extent:11; 1642428d7b3dSmrg unsigned int min_array_elt:11; 1643428d7b3dSmrg unsigned int rotation:2; 1644428d7b3dSmrg unsigned int pad0:1; 1645428d7b3dSmrg } ss4; 1646428d7b3dSmrg 1647428d7b3dSmrg struct { 1648428d7b3dSmrg unsigned int mip_count:4; 1649428d7b3dSmrg unsigned int min_lod:4; 1650428d7b3dSmrg unsigned int pad1:12; 1651428d7b3dSmrg unsigned int y_offset:4; 1652428d7b3dSmrg unsigned int pad0:1; 1653428d7b3dSmrg unsigned int x_offset:7; 1654428d7b3dSmrg } ss5; 1655428d7b3dSmrg 1656428d7b3dSmrg struct { 1657428d7b3dSmrg unsigned int pad; /* Multisample Control Surface stuff */ 1658428d7b3dSmrg } ss6; 1659428d7b3dSmrg 1660428d7b3dSmrg struct { 1661428d7b3dSmrg unsigned int resource_min_lod:12; 1662428d7b3dSmrg unsigned int pad0:4; 1663428d7b3dSmrg unsigned int shader_chanel_select_a:3; 1664428d7b3dSmrg unsigned int shader_chanel_select_b:3; 1665428d7b3dSmrg unsigned int shader_chanel_select_g:3; 1666428d7b3dSmrg unsigned int shader_chanel_select_r:3; 1667428d7b3dSmrg unsigned int alpha_clear_color:1; 1668428d7b3dSmrg unsigned int blue_clear_color:1; 1669428d7b3dSmrg unsigned int green_clear_color:1; 1670428d7b3dSmrg unsigned int red_clear_color:1; 1671428d7b3dSmrg } ss7; 1672428d7b3dSmrg}; 1673428d7b3dSmrg 1674428d7b3dSmrgstruct gen7_sampler_state 1675428d7b3dSmrg{ 1676428d7b3dSmrg struct 1677428d7b3dSmrg { 1678428d7b3dSmrg unsigned int aniso_algorithm:1; 1679428d7b3dSmrg unsigned int lod_bias:13; 1680428d7b3dSmrg unsigned int min_filter:3; 1681428d7b3dSmrg unsigned int mag_filter:3; 1682428d7b3dSmrg unsigned int mip_filter:2; 1683428d7b3dSmrg unsigned int base_level:5; 1684428d7b3dSmrg unsigned int pad1:1; 1685428d7b3dSmrg unsigned int lod_preclamp:1; 1686428d7b3dSmrg unsigned int default_color_mode:1; 1687428d7b3dSmrg unsigned int pad0:1; 1688428d7b3dSmrg unsigned int disable:1; 1689428d7b3dSmrg } ss0; 1690428d7b3dSmrg 1691428d7b3dSmrg struct 1692428d7b3dSmrg { 1693428d7b3dSmrg unsigned int cube_control_mode:1; 1694428d7b3dSmrg unsigned int shadow_function:3; 1695428d7b3dSmrg unsigned int pad:4; 1696428d7b3dSmrg unsigned int max_lod:12; 1697428d7b3dSmrg unsigned int min_lod:12; 1698428d7b3dSmrg } ss1; 1699428d7b3dSmrg 1700428d7b3dSmrg struct 1701428d7b3dSmrg { 1702428d7b3dSmrg unsigned int pad:5; 1703428d7b3dSmrg unsigned int default_color_pointer:27; 1704428d7b3dSmrg } ss2; 1705428d7b3dSmrg 1706428d7b3dSmrg struct 1707428d7b3dSmrg { 1708428d7b3dSmrg unsigned int r_wrap_mode:3; 1709428d7b3dSmrg unsigned int t_wrap_mode:3; 1710428d7b3dSmrg unsigned int s_wrap_mode:3; 1711428d7b3dSmrg unsigned int pad:1; 1712428d7b3dSmrg unsigned int non_normalized_coord:1; 1713428d7b3dSmrg unsigned int trilinear_quality:2; 1714428d7b3dSmrg unsigned int address_round:6; 1715428d7b3dSmrg unsigned int max_aniso:3; 1716428d7b3dSmrg unsigned int chroma_key_mode:1; 1717428d7b3dSmrg unsigned int chroma_key_index:2; 1718428d7b3dSmrg unsigned int chroma_key_enable:1; 1719428d7b3dSmrg unsigned int pad0:6; 1720428d7b3dSmrg } ss3; 1721428d7b3dSmrg}; 1722428d7b3dSmrg 1723428d7b3dSmrg#endif 1724