1*d83cc019SAndroid Build Coastguard Worker /* 2*d83cc019SAndroid Build Coastguard Worker Copyright (C) Intel Corp. 2006. All Rights Reserved. 3*d83cc019SAndroid Build Coastguard Worker Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to 4*d83cc019SAndroid Build Coastguard Worker develop this 3D driver. 5*d83cc019SAndroid Build Coastguard Worker 6*d83cc019SAndroid Build Coastguard Worker Permission is hereby granted, free of charge, to any person obtaining 7*d83cc019SAndroid Build Coastguard Worker a copy of this software and associated documentation files (the 8*d83cc019SAndroid Build Coastguard Worker "Software"), to deal in the Software without restriction, including 9*d83cc019SAndroid Build Coastguard Worker without limitation the rights to use, copy, modify, merge, publish, 10*d83cc019SAndroid Build Coastguard Worker distribute, sublicense, and/or sell copies of the Software, and to 11*d83cc019SAndroid Build Coastguard Worker permit persons to whom the Software is furnished to do so, subject to 12*d83cc019SAndroid Build Coastguard Worker the following conditions: 13*d83cc019SAndroid Build Coastguard Worker 14*d83cc019SAndroid Build Coastguard Worker The above copyright notice and this permission notice (including the 15*d83cc019SAndroid Build Coastguard Worker next paragraph) shall be included in all copies or substantial 16*d83cc019SAndroid Build Coastguard Worker portions of the Software. 17*d83cc019SAndroid Build Coastguard Worker 18*d83cc019SAndroid Build Coastguard Worker THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19*d83cc019SAndroid Build Coastguard Worker EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20*d83cc019SAndroid Build Coastguard Worker MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21*d83cc019SAndroid Build Coastguard Worker IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 22*d83cc019SAndroid Build Coastguard Worker LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23*d83cc019SAndroid Build Coastguard Worker OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 24*d83cc019SAndroid Build Coastguard Worker WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25*d83cc019SAndroid Build Coastguard Worker 26*d83cc019SAndroid Build Coastguard Worker **********************************************************************/ 27*d83cc019SAndroid Build Coastguard Worker /* 28*d83cc019SAndroid Build Coastguard Worker * Authors: 29*d83cc019SAndroid Build Coastguard Worker * Keith Whitwell <[email protected]> 30*d83cc019SAndroid Build Coastguard Worker */ 31*d83cc019SAndroid Build Coastguard Worker 32*d83cc019SAndroid Build Coastguard Worker 33*d83cc019SAndroid Build Coastguard Worker #ifndef BRW_STRUCTS_H 34*d83cc019SAndroid Build Coastguard Worker #define BRW_STRUCTS_H 35*d83cc019SAndroid Build Coastguard Worker 36*d83cc019SAndroid Build Coastguard Worker #include <stdint.h> 37*d83cc019SAndroid Build Coastguard Worker 38*d83cc019SAndroid Build Coastguard Worker /* These seem to be passed around as function args, so it works out 39*d83cc019SAndroid Build Coastguard Worker * better to keep them as #defines: 40*d83cc019SAndroid Build Coastguard Worker */ 41*d83cc019SAndroid Build Coastguard Worker #define BRW_FLUSH_READ_CACHE 0x1 42*d83cc019SAndroid Build Coastguard Worker #define BRW_FLUSH_STATE_CACHE 0x2 43*d83cc019SAndroid Build Coastguard Worker #define BRW_INHIBIT_FLUSH_RENDER_CACHE 0x4 44*d83cc019SAndroid Build Coastguard Worker #define BRW_FLUSH_SNAPSHOT_COUNTERS 0x8 45*d83cc019SAndroid Build Coastguard Worker 46*d83cc019SAndroid Build Coastguard Worker struct brw_urb_fence 47*d83cc019SAndroid Build Coastguard Worker { 48*d83cc019SAndroid Build Coastguard Worker struct 49*d83cc019SAndroid Build Coastguard Worker { 50*d83cc019SAndroid Build Coastguard Worker unsigned length:8; 51*d83cc019SAndroid Build Coastguard Worker unsigned vs_realloc:1; 52*d83cc019SAndroid Build Coastguard Worker unsigned gs_realloc:1; 53*d83cc019SAndroid Build Coastguard Worker unsigned clp_realloc:1; 54*d83cc019SAndroid Build Coastguard Worker unsigned sf_realloc:1; 55*d83cc019SAndroid Build Coastguard Worker unsigned vfe_realloc:1; 56*d83cc019SAndroid Build Coastguard Worker unsigned cs_realloc:1; 57*d83cc019SAndroid Build Coastguard Worker unsigned pad:2; 58*d83cc019SAndroid Build Coastguard Worker unsigned opcode:16; 59*d83cc019SAndroid Build Coastguard Worker } header; 60*d83cc019SAndroid Build Coastguard Worker 61*d83cc019SAndroid Build Coastguard Worker struct 62*d83cc019SAndroid Build Coastguard Worker { 63*d83cc019SAndroid Build Coastguard Worker unsigned vs_fence:10; 64*d83cc019SAndroid Build Coastguard Worker unsigned gs_fence:10; 65*d83cc019SAndroid Build Coastguard Worker unsigned clp_fence:10; 66*d83cc019SAndroid Build Coastguard Worker unsigned pad:2; 67*d83cc019SAndroid Build Coastguard Worker } bits0; 68*d83cc019SAndroid Build Coastguard Worker 69*d83cc019SAndroid Build Coastguard Worker struct 70*d83cc019SAndroid Build Coastguard Worker { 71*d83cc019SAndroid Build Coastguard Worker unsigned sf_fence:10; 72*d83cc019SAndroid Build Coastguard Worker unsigned vf_fence:10; 73*d83cc019SAndroid Build Coastguard Worker unsigned cs_fence:11; 74*d83cc019SAndroid Build Coastguard Worker unsigned pad:1; 75*d83cc019SAndroid Build Coastguard Worker } bits1; 76*d83cc019SAndroid Build Coastguard Worker }; 77*d83cc019SAndroid Build Coastguard Worker 78*d83cc019SAndroid Build Coastguard Worker /* State structs for the various fixed function units: 79*d83cc019SAndroid Build Coastguard Worker */ 80*d83cc019SAndroid Build Coastguard Worker 81*d83cc019SAndroid Build Coastguard Worker 82*d83cc019SAndroid Build Coastguard Worker struct thread0 83*d83cc019SAndroid Build Coastguard Worker { 84*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 85*d83cc019SAndroid Build Coastguard Worker unsigned grf_reg_count:3; 86*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 87*d83cc019SAndroid Build Coastguard Worker unsigned kernel_start_pointer:26; /* Offset from GENERAL_STATE_BASE */ 88*d83cc019SAndroid Build Coastguard Worker }; 89*d83cc019SAndroid Build Coastguard Worker 90*d83cc019SAndroid Build Coastguard Worker struct thread1 91*d83cc019SAndroid Build Coastguard Worker { 92*d83cc019SAndroid Build Coastguard Worker unsigned ext_halt_exception_enable:1; 93*d83cc019SAndroid Build Coastguard Worker unsigned sw_exception_enable:1; 94*d83cc019SAndroid Build Coastguard Worker unsigned mask_stack_exception_enable:1; 95*d83cc019SAndroid Build Coastguard Worker unsigned timeout_exception_enable:1; 96*d83cc019SAndroid Build Coastguard Worker unsigned illegal_op_exception_enable:1; 97*d83cc019SAndroid Build Coastguard Worker unsigned pad0:3; 98*d83cc019SAndroid Build Coastguard Worker unsigned depth_coef_urb_read_offset:6; /* WM only */ 99*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 100*d83cc019SAndroid Build Coastguard Worker unsigned floating_point_mode:1; 101*d83cc019SAndroid Build Coastguard Worker unsigned thread_priority:1; 102*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_entry_count:8; 103*d83cc019SAndroid Build Coastguard Worker unsigned pad3:5; 104*d83cc019SAndroid Build Coastguard Worker unsigned single_program_flow:1; 105*d83cc019SAndroid Build Coastguard Worker }; 106*d83cc019SAndroid Build Coastguard Worker 107*d83cc019SAndroid Build Coastguard Worker struct thread2 108*d83cc019SAndroid Build Coastguard Worker { 109*d83cc019SAndroid Build Coastguard Worker unsigned per_thread_scratch_space:4; 110*d83cc019SAndroid Build Coastguard Worker unsigned pad0:6; 111*d83cc019SAndroid Build Coastguard Worker unsigned scratch_space_base_pointer:22; 112*d83cc019SAndroid Build Coastguard Worker }; 113*d83cc019SAndroid Build Coastguard Worker 114*d83cc019SAndroid Build Coastguard Worker 115*d83cc019SAndroid Build Coastguard Worker struct thread3 116*d83cc019SAndroid Build Coastguard Worker { 117*d83cc019SAndroid Build Coastguard Worker unsigned dispatch_grf_start_reg:4; 118*d83cc019SAndroid Build Coastguard Worker unsigned urb_entry_read_offset:6; 119*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 120*d83cc019SAndroid Build Coastguard Worker unsigned urb_entry_read_length:6; 121*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 122*d83cc019SAndroid Build Coastguard Worker unsigned const_urb_entry_read_offset:6; 123*d83cc019SAndroid Build Coastguard Worker unsigned pad2:1; 124*d83cc019SAndroid Build Coastguard Worker unsigned const_urb_entry_read_length:6; 125*d83cc019SAndroid Build Coastguard Worker unsigned pad3:1; 126*d83cc019SAndroid Build Coastguard Worker }; 127*d83cc019SAndroid Build Coastguard Worker 128*d83cc019SAndroid Build Coastguard Worker 129*d83cc019SAndroid Build Coastguard Worker 130*d83cc019SAndroid Build Coastguard Worker struct brw_clip_unit_state 131*d83cc019SAndroid Build Coastguard Worker { 132*d83cc019SAndroid Build Coastguard Worker struct thread0 thread0; 133*d83cc019SAndroid Build Coastguard Worker struct 134*d83cc019SAndroid Build Coastguard Worker { 135*d83cc019SAndroid Build Coastguard Worker unsigned pad0:7; 136*d83cc019SAndroid Build Coastguard Worker unsigned sw_exception_enable:1; 137*d83cc019SAndroid Build Coastguard Worker unsigned pad1:3; 138*d83cc019SAndroid Build Coastguard Worker unsigned mask_stack_exception_enable:1; 139*d83cc019SAndroid Build Coastguard Worker unsigned pad2:1; 140*d83cc019SAndroid Build Coastguard Worker unsigned illegal_op_exception_enable:1; 141*d83cc019SAndroid Build Coastguard Worker unsigned pad3:2; 142*d83cc019SAndroid Build Coastguard Worker unsigned floating_point_mode:1; 143*d83cc019SAndroid Build Coastguard Worker unsigned thread_priority:1; 144*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_entry_count:8; 145*d83cc019SAndroid Build Coastguard Worker unsigned pad4:5; 146*d83cc019SAndroid Build Coastguard Worker unsigned single_program_flow:1; 147*d83cc019SAndroid Build Coastguard Worker } thread1; 148*d83cc019SAndroid Build Coastguard Worker 149*d83cc019SAndroid Build Coastguard Worker struct thread2 thread2; 150*d83cc019SAndroid Build Coastguard Worker struct thread3 thread3; 151*d83cc019SAndroid Build Coastguard Worker 152*d83cc019SAndroid Build Coastguard Worker struct 153*d83cc019SAndroid Build Coastguard Worker { 154*d83cc019SAndroid Build Coastguard Worker unsigned pad0:9; 155*d83cc019SAndroid Build Coastguard Worker unsigned gs_output_stats:1; /* not always */ 156*d83cc019SAndroid Build Coastguard Worker unsigned stats_enable:1; 157*d83cc019SAndroid Build Coastguard Worker unsigned nr_urb_entries:7; 158*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 159*d83cc019SAndroid Build Coastguard Worker unsigned urb_entry_allocation_size:5; 160*d83cc019SAndroid Build Coastguard Worker unsigned pad2:1; 161*d83cc019SAndroid Build Coastguard Worker unsigned max_threads:5; /* may be less */ 162*d83cc019SAndroid Build Coastguard Worker unsigned pad3:2; 163*d83cc019SAndroid Build Coastguard Worker } thread4; 164*d83cc019SAndroid Build Coastguard Worker 165*d83cc019SAndroid Build Coastguard Worker struct 166*d83cc019SAndroid Build Coastguard Worker { 167*d83cc019SAndroid Build Coastguard Worker unsigned pad0:13; 168*d83cc019SAndroid Build Coastguard Worker unsigned clip_mode:3; 169*d83cc019SAndroid Build Coastguard Worker unsigned userclip_enable_flags:8; 170*d83cc019SAndroid Build Coastguard Worker unsigned userclip_must_clip:1; 171*d83cc019SAndroid Build Coastguard Worker unsigned negative_w_clip_test:1; 172*d83cc019SAndroid Build Coastguard Worker unsigned guard_band_enable:1; 173*d83cc019SAndroid Build Coastguard Worker unsigned viewport_z_clip_enable:1; 174*d83cc019SAndroid Build Coastguard Worker unsigned viewport_xy_clip_enable:1; 175*d83cc019SAndroid Build Coastguard Worker unsigned vertex_position_space:1; 176*d83cc019SAndroid Build Coastguard Worker unsigned api_mode:1; 177*d83cc019SAndroid Build Coastguard Worker unsigned pad2:1; 178*d83cc019SAndroid Build Coastguard Worker } clip5; 179*d83cc019SAndroid Build Coastguard Worker 180*d83cc019SAndroid Build Coastguard Worker struct 181*d83cc019SAndroid Build Coastguard Worker { 182*d83cc019SAndroid Build Coastguard Worker unsigned pad0:5; 183*d83cc019SAndroid Build Coastguard Worker unsigned clipper_viewport_state_ptr:27; 184*d83cc019SAndroid Build Coastguard Worker } clip6; 185*d83cc019SAndroid Build Coastguard Worker 186*d83cc019SAndroid Build Coastguard Worker 187*d83cc019SAndroid Build Coastguard Worker float viewport_xmin; 188*d83cc019SAndroid Build Coastguard Worker float viewport_xmax; 189*d83cc019SAndroid Build Coastguard Worker float viewport_ymin; 190*d83cc019SAndroid Build Coastguard Worker float viewport_ymax; 191*d83cc019SAndroid Build Coastguard Worker }; 192*d83cc019SAndroid Build Coastguard Worker 193*d83cc019SAndroid Build Coastguard Worker struct gen6_blend_state 194*d83cc019SAndroid Build Coastguard Worker { 195*d83cc019SAndroid Build Coastguard Worker struct { 196*d83cc019SAndroid Build Coastguard Worker unsigned dest_blend_factor:5; 197*d83cc019SAndroid Build Coastguard Worker unsigned source_blend_factor:5; 198*d83cc019SAndroid Build Coastguard Worker unsigned pad3:1; 199*d83cc019SAndroid Build Coastguard Worker unsigned blend_func:3; 200*d83cc019SAndroid Build Coastguard Worker unsigned pad2:1; 201*d83cc019SAndroid Build Coastguard Worker unsigned ia_dest_blend_factor:5; 202*d83cc019SAndroid Build Coastguard Worker unsigned ia_source_blend_factor:5; 203*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 204*d83cc019SAndroid Build Coastguard Worker unsigned ia_blend_func:3; 205*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 206*d83cc019SAndroid Build Coastguard Worker unsigned ia_blend_enable:1; 207*d83cc019SAndroid Build Coastguard Worker unsigned blend_enable:1; 208*d83cc019SAndroid Build Coastguard Worker } blend0; 209*d83cc019SAndroid Build Coastguard Worker 210*d83cc019SAndroid Build Coastguard Worker struct { 211*d83cc019SAndroid Build Coastguard Worker unsigned post_blend_clamp_enable:1; 212*d83cc019SAndroid Build Coastguard Worker unsigned pre_blend_clamp_enable:1; 213*d83cc019SAndroid Build Coastguard Worker unsigned clamp_range:2; 214*d83cc019SAndroid Build Coastguard Worker unsigned pad0:4; 215*d83cc019SAndroid Build Coastguard Worker unsigned x_dither_offset:2; 216*d83cc019SAndroid Build Coastguard Worker unsigned y_dither_offset:2; 217*d83cc019SAndroid Build Coastguard Worker unsigned dither_enable:1; 218*d83cc019SAndroid Build Coastguard Worker unsigned alpha_test_func:3; 219*d83cc019SAndroid Build Coastguard Worker unsigned alpha_test_enable:1; 220*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 221*d83cc019SAndroid Build Coastguard Worker unsigned logic_op_func:4; 222*d83cc019SAndroid Build Coastguard Worker unsigned logic_op_enable:1; 223*d83cc019SAndroid Build Coastguard Worker unsigned pad2:1; 224*d83cc019SAndroid Build Coastguard Worker unsigned write_disable_b:1; 225*d83cc019SAndroid Build Coastguard Worker unsigned write_disable_g:1; 226*d83cc019SAndroid Build Coastguard Worker unsigned write_disable_r:1; 227*d83cc019SAndroid Build Coastguard Worker unsigned write_disable_a:1; 228*d83cc019SAndroid Build Coastguard Worker unsigned pad3:1; 229*d83cc019SAndroid Build Coastguard Worker unsigned alpha_to_coverage_dither:1; 230*d83cc019SAndroid Build Coastguard Worker unsigned alpha_to_one:1; 231*d83cc019SAndroid Build Coastguard Worker unsigned alpha_to_coverage:1; 232*d83cc019SAndroid Build Coastguard Worker } blend1; 233*d83cc019SAndroid Build Coastguard Worker }; 234*d83cc019SAndroid Build Coastguard Worker 235*d83cc019SAndroid Build Coastguard Worker struct gen6_color_calc_state 236*d83cc019SAndroid Build Coastguard Worker { 237*d83cc019SAndroid Build Coastguard Worker struct { 238*d83cc019SAndroid Build Coastguard Worker unsigned alpha_test_format:1; 239*d83cc019SAndroid Build Coastguard Worker unsigned pad0:14; 240*d83cc019SAndroid Build Coastguard Worker unsigned round_disable:1; 241*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_ref:8; 242*d83cc019SAndroid Build Coastguard Worker unsigned stencil_ref:8; 243*d83cc019SAndroid Build Coastguard Worker } cc0; 244*d83cc019SAndroid Build Coastguard Worker 245*d83cc019SAndroid Build Coastguard Worker union { 246*d83cc019SAndroid Build Coastguard Worker float alpha_ref_f; 247*d83cc019SAndroid Build Coastguard Worker struct { 248*d83cc019SAndroid Build Coastguard Worker unsigned ui:8; 249*d83cc019SAndroid Build Coastguard Worker unsigned pad0:24; 250*d83cc019SAndroid Build Coastguard Worker } alpha_ref_fi; 251*d83cc019SAndroid Build Coastguard Worker } cc1; 252*d83cc019SAndroid Build Coastguard Worker 253*d83cc019SAndroid Build Coastguard Worker float constant_r; 254*d83cc019SAndroid Build Coastguard Worker float constant_g; 255*d83cc019SAndroid Build Coastguard Worker float constant_b; 256*d83cc019SAndroid Build Coastguard Worker float constant_a; 257*d83cc019SAndroid Build Coastguard Worker }; 258*d83cc019SAndroid Build Coastguard Worker 259*d83cc019SAndroid Build Coastguard Worker struct gen6_depth_stencil_state 260*d83cc019SAndroid Build Coastguard Worker { 261*d83cc019SAndroid Build Coastguard Worker struct { 262*d83cc019SAndroid Build Coastguard Worker unsigned pad0:3; 263*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_pass_depth_pass_op:3; 264*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_pass_depth_fail_op:3; 265*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_fail_op:3; 266*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_func:3; 267*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_enable:1; 268*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 269*d83cc019SAndroid Build Coastguard Worker unsigned stencil_write_enable:1; 270*d83cc019SAndroid Build Coastguard Worker unsigned stencil_pass_depth_pass_op:3; 271*d83cc019SAndroid Build Coastguard Worker unsigned stencil_pass_depth_fail_op:3; 272*d83cc019SAndroid Build Coastguard Worker unsigned stencil_fail_op:3; 273*d83cc019SAndroid Build Coastguard Worker unsigned stencil_func:3; 274*d83cc019SAndroid Build Coastguard Worker unsigned stencil_enable:1; 275*d83cc019SAndroid Build Coastguard Worker } ds0; 276*d83cc019SAndroid Build Coastguard Worker 277*d83cc019SAndroid Build Coastguard Worker struct { 278*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_write_mask:8; 279*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_test_mask:8; 280*d83cc019SAndroid Build Coastguard Worker unsigned stencil_write_mask:8; 281*d83cc019SAndroid Build Coastguard Worker unsigned stencil_test_mask:8; 282*d83cc019SAndroid Build Coastguard Worker } ds1; 283*d83cc019SAndroid Build Coastguard Worker 284*d83cc019SAndroid Build Coastguard Worker struct { 285*d83cc019SAndroid Build Coastguard Worker unsigned pad0:26; 286*d83cc019SAndroid Build Coastguard Worker unsigned depth_write_enable:1; 287*d83cc019SAndroid Build Coastguard Worker unsigned depth_test_func:3; 288*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 289*d83cc019SAndroid Build Coastguard Worker unsigned depth_test_enable:1; 290*d83cc019SAndroid Build Coastguard Worker } ds2; 291*d83cc019SAndroid Build Coastguard Worker }; 292*d83cc019SAndroid Build Coastguard Worker 293*d83cc019SAndroid Build Coastguard Worker struct brw_cc_unit_state 294*d83cc019SAndroid Build Coastguard Worker { 295*d83cc019SAndroid Build Coastguard Worker struct 296*d83cc019SAndroid Build Coastguard Worker { 297*d83cc019SAndroid Build Coastguard Worker unsigned pad0:3; 298*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_pass_depth_pass_op:3; 299*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_pass_depth_fail_op:3; 300*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_fail_op:3; 301*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_func:3; 302*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_enable:1; 303*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 304*d83cc019SAndroid Build Coastguard Worker unsigned stencil_write_enable:1; 305*d83cc019SAndroid Build Coastguard Worker unsigned stencil_pass_depth_pass_op:3; 306*d83cc019SAndroid Build Coastguard Worker unsigned stencil_pass_depth_fail_op:3; 307*d83cc019SAndroid Build Coastguard Worker unsigned stencil_fail_op:3; 308*d83cc019SAndroid Build Coastguard Worker unsigned stencil_func:3; 309*d83cc019SAndroid Build Coastguard Worker unsigned stencil_enable:1; 310*d83cc019SAndroid Build Coastguard Worker } cc0; 311*d83cc019SAndroid Build Coastguard Worker 312*d83cc019SAndroid Build Coastguard Worker 313*d83cc019SAndroid Build Coastguard Worker struct 314*d83cc019SAndroid Build Coastguard Worker { 315*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_ref:8; 316*d83cc019SAndroid Build Coastguard Worker unsigned stencil_write_mask:8; 317*d83cc019SAndroid Build Coastguard Worker unsigned stencil_test_mask:8; 318*d83cc019SAndroid Build Coastguard Worker unsigned stencil_ref:8; 319*d83cc019SAndroid Build Coastguard Worker } cc1; 320*d83cc019SAndroid Build Coastguard Worker 321*d83cc019SAndroid Build Coastguard Worker 322*d83cc019SAndroid Build Coastguard Worker struct 323*d83cc019SAndroid Build Coastguard Worker { 324*d83cc019SAndroid Build Coastguard Worker unsigned logicop_enable:1; 325*d83cc019SAndroid Build Coastguard Worker unsigned pad0:10; 326*d83cc019SAndroid Build Coastguard Worker unsigned depth_write_enable:1; 327*d83cc019SAndroid Build Coastguard Worker unsigned depth_test_function:3; 328*d83cc019SAndroid Build Coastguard Worker unsigned depth_test:1; 329*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_write_mask:8; 330*d83cc019SAndroid Build Coastguard Worker unsigned bf_stencil_test_mask:8; 331*d83cc019SAndroid Build Coastguard Worker } cc2; 332*d83cc019SAndroid Build Coastguard Worker 333*d83cc019SAndroid Build Coastguard Worker 334*d83cc019SAndroid Build Coastguard Worker struct 335*d83cc019SAndroid Build Coastguard Worker { 336*d83cc019SAndroid Build Coastguard Worker unsigned pad0:8; 337*d83cc019SAndroid Build Coastguard Worker unsigned alpha_test_func:3; 338*d83cc019SAndroid Build Coastguard Worker unsigned alpha_test:1; 339*d83cc019SAndroid Build Coastguard Worker unsigned blend_enable:1; 340*d83cc019SAndroid Build Coastguard Worker unsigned ia_blend_enable:1; 341*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 342*d83cc019SAndroid Build Coastguard Worker unsigned alpha_test_format:1; 343*d83cc019SAndroid Build Coastguard Worker unsigned pad2:16; 344*d83cc019SAndroid Build Coastguard Worker } cc3; 345*d83cc019SAndroid Build Coastguard Worker 346*d83cc019SAndroid Build Coastguard Worker struct 347*d83cc019SAndroid Build Coastguard Worker { 348*d83cc019SAndroid Build Coastguard Worker unsigned pad0:5; 349*d83cc019SAndroid Build Coastguard Worker unsigned cc_viewport_state_offset:27; /* Offset from GENERAL_STATE_BASE */ 350*d83cc019SAndroid Build Coastguard Worker } cc4; 351*d83cc019SAndroid Build Coastguard Worker 352*d83cc019SAndroid Build Coastguard Worker struct 353*d83cc019SAndroid Build Coastguard Worker { 354*d83cc019SAndroid Build Coastguard Worker unsigned pad0:2; 355*d83cc019SAndroid Build Coastguard Worker unsigned ia_dest_blend_factor:5; 356*d83cc019SAndroid Build Coastguard Worker unsigned ia_src_blend_factor:5; 357*d83cc019SAndroid Build Coastguard Worker unsigned ia_blend_function:3; 358*d83cc019SAndroid Build Coastguard Worker unsigned statistics_enable:1; 359*d83cc019SAndroid Build Coastguard Worker unsigned logicop_func:4; 360*d83cc019SAndroid Build Coastguard Worker unsigned pad1:11; 361*d83cc019SAndroid Build Coastguard Worker unsigned dither_enable:1; 362*d83cc019SAndroid Build Coastguard Worker } cc5; 363*d83cc019SAndroid Build Coastguard Worker 364*d83cc019SAndroid Build Coastguard Worker struct 365*d83cc019SAndroid Build Coastguard Worker { 366*d83cc019SAndroid Build Coastguard Worker unsigned clamp_post_alpha_blend:1; 367*d83cc019SAndroid Build Coastguard Worker unsigned clamp_pre_alpha_blend:1; 368*d83cc019SAndroid Build Coastguard Worker unsigned clamp_range:2; 369*d83cc019SAndroid Build Coastguard Worker unsigned pad0:11; 370*d83cc019SAndroid Build Coastguard Worker unsigned y_dither_offset:2; 371*d83cc019SAndroid Build Coastguard Worker unsigned x_dither_offset:2; 372*d83cc019SAndroid Build Coastguard Worker unsigned dest_blend_factor:5; 373*d83cc019SAndroid Build Coastguard Worker unsigned src_blend_factor:5; 374*d83cc019SAndroid Build Coastguard Worker unsigned blend_function:3; 375*d83cc019SAndroid Build Coastguard Worker } cc6; 376*d83cc019SAndroid Build Coastguard Worker 377*d83cc019SAndroid Build Coastguard Worker struct { 378*d83cc019SAndroid Build Coastguard Worker union { 379*d83cc019SAndroid Build Coastguard Worker float f; 380*d83cc019SAndroid Build Coastguard Worker uint8_t ub[4]; 381*d83cc019SAndroid Build Coastguard Worker } alpha_ref; 382*d83cc019SAndroid Build Coastguard Worker } cc7; 383*d83cc019SAndroid Build Coastguard Worker }; 384*d83cc019SAndroid Build Coastguard Worker 385*d83cc019SAndroid Build Coastguard Worker struct brw_sf_unit_state 386*d83cc019SAndroid Build Coastguard Worker { 387*d83cc019SAndroid Build Coastguard Worker struct thread0 thread0; 388*d83cc019SAndroid Build Coastguard Worker struct thread1 thread1; 389*d83cc019SAndroid Build Coastguard Worker struct thread2 thread2; 390*d83cc019SAndroid Build Coastguard Worker struct thread3 thread3; 391*d83cc019SAndroid Build Coastguard Worker 392*d83cc019SAndroid Build Coastguard Worker struct 393*d83cc019SAndroid Build Coastguard Worker { 394*d83cc019SAndroid Build Coastguard Worker unsigned pad0:10; 395*d83cc019SAndroid Build Coastguard Worker unsigned stats_enable:1; 396*d83cc019SAndroid Build Coastguard Worker unsigned nr_urb_entries:7; 397*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 398*d83cc019SAndroid Build Coastguard Worker unsigned urb_entry_allocation_size:5; 399*d83cc019SAndroid Build Coastguard Worker unsigned pad2:1; 400*d83cc019SAndroid Build Coastguard Worker unsigned max_threads:6; 401*d83cc019SAndroid Build Coastguard Worker unsigned pad3:1; 402*d83cc019SAndroid Build Coastguard Worker } thread4; 403*d83cc019SAndroid Build Coastguard Worker 404*d83cc019SAndroid Build Coastguard Worker struct 405*d83cc019SAndroid Build Coastguard Worker { 406*d83cc019SAndroid Build Coastguard Worker unsigned front_winding:1; 407*d83cc019SAndroid Build Coastguard Worker unsigned viewport_transform:1; 408*d83cc019SAndroid Build Coastguard Worker unsigned pad0:3; 409*d83cc019SAndroid Build Coastguard Worker unsigned sf_viewport_state_offset:27; /* Offset from GENERAL_STATE_BASE */ 410*d83cc019SAndroid Build Coastguard Worker } sf5; 411*d83cc019SAndroid Build Coastguard Worker 412*d83cc019SAndroid Build Coastguard Worker struct 413*d83cc019SAndroid Build Coastguard Worker { 414*d83cc019SAndroid Build Coastguard Worker unsigned pad0:9; 415*d83cc019SAndroid Build Coastguard Worker unsigned dest_org_vbias:4; 416*d83cc019SAndroid Build Coastguard Worker unsigned dest_org_hbias:4; 417*d83cc019SAndroid Build Coastguard Worker unsigned scissor:1; 418*d83cc019SAndroid Build Coastguard Worker unsigned disable_2x2_trifilter:1; 419*d83cc019SAndroid Build Coastguard Worker unsigned disable_zero_pix_trifilter:1; 420*d83cc019SAndroid Build Coastguard Worker unsigned point_rast_rule:2; 421*d83cc019SAndroid Build Coastguard Worker unsigned line_endcap_aa_region_width:2; 422*d83cc019SAndroid Build Coastguard Worker unsigned line_width:4; 423*d83cc019SAndroid Build Coastguard Worker unsigned fast_scissor_disable:1; 424*d83cc019SAndroid Build Coastguard Worker unsigned cull_mode:2; 425*d83cc019SAndroid Build Coastguard Worker unsigned aa_enable:1; 426*d83cc019SAndroid Build Coastguard Worker } sf6; 427*d83cc019SAndroid Build Coastguard Worker 428*d83cc019SAndroid Build Coastguard Worker struct 429*d83cc019SAndroid Build Coastguard Worker { 430*d83cc019SAndroid Build Coastguard Worker unsigned point_size:11; 431*d83cc019SAndroid Build Coastguard Worker unsigned use_point_size_state:1; 432*d83cc019SAndroid Build Coastguard Worker unsigned subpixel_precision:1; 433*d83cc019SAndroid Build Coastguard Worker unsigned sprite_point:1; 434*d83cc019SAndroid Build Coastguard Worker unsigned pad0:10; 435*d83cc019SAndroid Build Coastguard Worker unsigned aa_line_distance_mode:1; 436*d83cc019SAndroid Build Coastguard Worker unsigned trifan_pv:2; 437*d83cc019SAndroid Build Coastguard Worker unsigned linestrip_pv:2; 438*d83cc019SAndroid Build Coastguard Worker unsigned tristrip_pv:2; 439*d83cc019SAndroid Build Coastguard Worker unsigned line_last_pixel_enable:1; 440*d83cc019SAndroid Build Coastguard Worker } sf7; 441*d83cc019SAndroid Build Coastguard Worker 442*d83cc019SAndroid Build Coastguard Worker }; 443*d83cc019SAndroid Build Coastguard Worker 444*d83cc019SAndroid Build Coastguard Worker struct gen6_scissor_rect 445*d83cc019SAndroid Build Coastguard Worker { 446*d83cc019SAndroid Build Coastguard Worker unsigned xmin:16; 447*d83cc019SAndroid Build Coastguard Worker unsigned ymin:16; 448*d83cc019SAndroid Build Coastguard Worker unsigned xmax:16; 449*d83cc019SAndroid Build Coastguard Worker unsigned ymax:16; 450*d83cc019SAndroid Build Coastguard Worker }; 451*d83cc019SAndroid Build Coastguard Worker 452*d83cc019SAndroid Build Coastguard Worker struct brw_gs_unit_state 453*d83cc019SAndroid Build Coastguard Worker { 454*d83cc019SAndroid Build Coastguard Worker struct thread0 thread0; 455*d83cc019SAndroid Build Coastguard Worker struct thread1 thread1; 456*d83cc019SAndroid Build Coastguard Worker struct thread2 thread2; 457*d83cc019SAndroid Build Coastguard Worker struct thread3 thread3; 458*d83cc019SAndroid Build Coastguard Worker 459*d83cc019SAndroid Build Coastguard Worker struct 460*d83cc019SAndroid Build Coastguard Worker { 461*d83cc019SAndroid Build Coastguard Worker unsigned pad0:8; 462*d83cc019SAndroid Build Coastguard Worker unsigned rendering_enable:1; /* for Ironlake */ 463*d83cc019SAndroid Build Coastguard Worker unsigned pad4:1; 464*d83cc019SAndroid Build Coastguard Worker unsigned stats_enable:1; 465*d83cc019SAndroid Build Coastguard Worker unsigned nr_urb_entries:7; 466*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 467*d83cc019SAndroid Build Coastguard Worker unsigned urb_entry_allocation_size:5; 468*d83cc019SAndroid Build Coastguard Worker unsigned pad2:1; 469*d83cc019SAndroid Build Coastguard Worker unsigned max_threads:5; 470*d83cc019SAndroid Build Coastguard Worker unsigned pad3:2; 471*d83cc019SAndroid Build Coastguard Worker } thread4; 472*d83cc019SAndroid Build Coastguard Worker 473*d83cc019SAndroid Build Coastguard Worker struct 474*d83cc019SAndroid Build Coastguard Worker { 475*d83cc019SAndroid Build Coastguard Worker unsigned sampler_count:3; 476*d83cc019SAndroid Build Coastguard Worker unsigned pad0:2; 477*d83cc019SAndroid Build Coastguard Worker unsigned sampler_state_pointer:27; 478*d83cc019SAndroid Build Coastguard Worker } gs5; 479*d83cc019SAndroid Build Coastguard Worker 480*d83cc019SAndroid Build Coastguard Worker 481*d83cc019SAndroid Build Coastguard Worker struct 482*d83cc019SAndroid Build Coastguard Worker { 483*d83cc019SAndroid Build Coastguard Worker unsigned max_vp_index:4; 484*d83cc019SAndroid Build Coastguard Worker unsigned pad0:12; 485*d83cc019SAndroid Build Coastguard Worker unsigned svbi_post_inc_value:10; 486*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 487*d83cc019SAndroid Build Coastguard Worker unsigned svbi_post_inc_enable:1; 488*d83cc019SAndroid Build Coastguard Worker unsigned svbi_payload:1; 489*d83cc019SAndroid Build Coastguard Worker unsigned discard_adjaceny:1; 490*d83cc019SAndroid Build Coastguard Worker unsigned reorder_enable:1; 491*d83cc019SAndroid Build Coastguard Worker unsigned pad2:1; 492*d83cc019SAndroid Build Coastguard Worker } gs6; 493*d83cc019SAndroid Build Coastguard Worker }; 494*d83cc019SAndroid Build Coastguard Worker 495*d83cc019SAndroid Build Coastguard Worker 496*d83cc019SAndroid Build Coastguard Worker struct brw_vs_unit_state 497*d83cc019SAndroid Build Coastguard Worker { 498*d83cc019SAndroid Build Coastguard Worker struct thread0 thread0; 499*d83cc019SAndroid Build Coastguard Worker struct thread1 thread1; 500*d83cc019SAndroid Build Coastguard Worker struct thread2 thread2; 501*d83cc019SAndroid Build Coastguard Worker struct thread3 thread3; 502*d83cc019SAndroid Build Coastguard Worker 503*d83cc019SAndroid Build Coastguard Worker struct 504*d83cc019SAndroid Build Coastguard Worker { 505*d83cc019SAndroid Build Coastguard Worker unsigned pad0:10; 506*d83cc019SAndroid Build Coastguard Worker unsigned stats_enable:1; 507*d83cc019SAndroid Build Coastguard Worker unsigned nr_urb_entries:7; 508*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 509*d83cc019SAndroid Build Coastguard Worker unsigned urb_entry_allocation_size:5; 510*d83cc019SAndroid Build Coastguard Worker unsigned pad2:1; 511*d83cc019SAndroid Build Coastguard Worker unsigned max_threads:6; 512*d83cc019SAndroid Build Coastguard Worker unsigned pad3:1; 513*d83cc019SAndroid Build Coastguard Worker } thread4; 514*d83cc019SAndroid Build Coastguard Worker 515*d83cc019SAndroid Build Coastguard Worker struct 516*d83cc019SAndroid Build Coastguard Worker { 517*d83cc019SAndroid Build Coastguard Worker unsigned sampler_count:3; 518*d83cc019SAndroid Build Coastguard Worker unsigned pad0:2; 519*d83cc019SAndroid Build Coastguard Worker unsigned sampler_state_pointer:27; 520*d83cc019SAndroid Build Coastguard Worker } vs5; 521*d83cc019SAndroid Build Coastguard Worker 522*d83cc019SAndroid Build Coastguard Worker struct 523*d83cc019SAndroid Build Coastguard Worker { 524*d83cc019SAndroid Build Coastguard Worker unsigned vs_enable:1; 525*d83cc019SAndroid Build Coastguard Worker unsigned vert_cache_disable:1; 526*d83cc019SAndroid Build Coastguard Worker unsigned pad0:30; 527*d83cc019SAndroid Build Coastguard Worker } vs6; 528*d83cc019SAndroid Build Coastguard Worker }; 529*d83cc019SAndroid Build Coastguard Worker 530*d83cc019SAndroid Build Coastguard Worker 531*d83cc019SAndroid Build Coastguard Worker struct brw_wm_unit_state 532*d83cc019SAndroid Build Coastguard Worker { 533*d83cc019SAndroid Build Coastguard Worker struct thread0 thread0; 534*d83cc019SAndroid Build Coastguard Worker struct thread1 thread1; 535*d83cc019SAndroid Build Coastguard Worker struct thread2 thread2; 536*d83cc019SAndroid Build Coastguard Worker struct thread3 thread3; 537*d83cc019SAndroid Build Coastguard Worker 538*d83cc019SAndroid Build Coastguard Worker struct { 539*d83cc019SAndroid Build Coastguard Worker unsigned stats_enable:1; 540*d83cc019SAndroid Build Coastguard Worker unsigned depth_buffer_clear:1; 541*d83cc019SAndroid Build Coastguard Worker unsigned sampler_count:3; 542*d83cc019SAndroid Build Coastguard Worker unsigned sampler_state_pointer:27; 543*d83cc019SAndroid Build Coastguard Worker } wm4; 544*d83cc019SAndroid Build Coastguard Worker 545*d83cc019SAndroid Build Coastguard Worker struct 546*d83cc019SAndroid Build Coastguard Worker { 547*d83cc019SAndroid Build Coastguard Worker unsigned enable_8_pix:1; 548*d83cc019SAndroid Build Coastguard Worker unsigned enable_16_pix:1; 549*d83cc019SAndroid Build Coastguard Worker unsigned enable_32_pix:1; 550*d83cc019SAndroid Build Coastguard Worker unsigned enable_con_32_pix:1; 551*d83cc019SAndroid Build Coastguard Worker unsigned enable_con_64_pix:1; 552*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 553*d83cc019SAndroid Build Coastguard Worker 554*d83cc019SAndroid Build Coastguard Worker /* These next four bits are for Ironlake+ */ 555*d83cc019SAndroid Build Coastguard Worker unsigned fast_span_coverage_enable:1; 556*d83cc019SAndroid Build Coastguard Worker unsigned depth_buffer_clear:1; 557*d83cc019SAndroid Build Coastguard Worker unsigned depth_buffer_resolve_enable:1; 558*d83cc019SAndroid Build Coastguard Worker unsigned hierarchical_depth_buffer_resolve_enable:1; 559*d83cc019SAndroid Build Coastguard Worker 560*d83cc019SAndroid Build Coastguard Worker unsigned legacy_global_depth_bias:1; 561*d83cc019SAndroid Build Coastguard Worker unsigned line_stipple:1; 562*d83cc019SAndroid Build Coastguard Worker unsigned depth_offset:1; 563*d83cc019SAndroid Build Coastguard Worker unsigned polygon_stipple:1; 564*d83cc019SAndroid Build Coastguard Worker unsigned line_aa_region_width:2; 565*d83cc019SAndroid Build Coastguard Worker unsigned line_endcap_aa_region_width:2; 566*d83cc019SAndroid Build Coastguard Worker unsigned early_depth_test:1; 567*d83cc019SAndroid Build Coastguard Worker unsigned thread_dispatch_enable:1; 568*d83cc019SAndroid Build Coastguard Worker unsigned program_uses_depth:1; 569*d83cc019SAndroid Build Coastguard Worker unsigned program_computes_depth:1; 570*d83cc019SAndroid Build Coastguard Worker unsigned program_uses_killpixel:1; 571*d83cc019SAndroid Build Coastguard Worker unsigned legacy_line_rast: 1; 572*d83cc019SAndroid Build Coastguard Worker unsigned transposed_urb_read_enable:1; 573*d83cc019SAndroid Build Coastguard Worker unsigned max_threads:7; 574*d83cc019SAndroid Build Coastguard Worker } wm5; 575*d83cc019SAndroid Build Coastguard Worker 576*d83cc019SAndroid Build Coastguard Worker float global_depth_offset_constant; 577*d83cc019SAndroid Build Coastguard Worker float global_depth_offset_scale; 578*d83cc019SAndroid Build Coastguard Worker 579*d83cc019SAndroid Build Coastguard Worker /* for Ironlake only */ 580*d83cc019SAndroid Build Coastguard Worker struct { 581*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 582*d83cc019SAndroid Build Coastguard Worker unsigned grf_reg_count_1:3; 583*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 584*d83cc019SAndroid Build Coastguard Worker unsigned kernel_start_pointer_1:26; 585*d83cc019SAndroid Build Coastguard Worker } wm8; 586*d83cc019SAndroid Build Coastguard Worker 587*d83cc019SAndroid Build Coastguard Worker struct { 588*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 589*d83cc019SAndroid Build Coastguard Worker unsigned grf_reg_count_2:3; 590*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 591*d83cc019SAndroid Build Coastguard Worker unsigned kernel_start_pointer_2:26; 592*d83cc019SAndroid Build Coastguard Worker } wm9; 593*d83cc019SAndroid Build Coastguard Worker 594*d83cc019SAndroid Build Coastguard Worker struct { 595*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 596*d83cc019SAndroid Build Coastguard Worker unsigned grf_reg_count_3:3; 597*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 598*d83cc019SAndroid Build Coastguard Worker unsigned kernel_start_pointer_3:26; 599*d83cc019SAndroid Build Coastguard Worker } wm10; 600*d83cc019SAndroid Build Coastguard Worker }; 601*d83cc019SAndroid Build Coastguard Worker 602*d83cc019SAndroid Build Coastguard Worker struct brw_sampler_default_color { 603*d83cc019SAndroid Build Coastguard Worker float color[4]; 604*d83cc019SAndroid Build Coastguard Worker }; 605*d83cc019SAndroid Build Coastguard Worker 606*d83cc019SAndroid Build Coastguard Worker struct gen5_sampler_default_color { 607*d83cc019SAndroid Build Coastguard Worker uint8_t ub[4]; 608*d83cc019SAndroid Build Coastguard Worker float f[4]; 609*d83cc019SAndroid Build Coastguard Worker uint16_t hf[4]; 610*d83cc019SAndroid Build Coastguard Worker uint16_t us[4]; 611*d83cc019SAndroid Build Coastguard Worker int16_t s[4]; 612*d83cc019SAndroid Build Coastguard Worker uint8_t b[4]; 613*d83cc019SAndroid Build Coastguard Worker }; 614*d83cc019SAndroid Build Coastguard Worker 615*d83cc019SAndroid Build Coastguard Worker struct brw_sampler_state 616*d83cc019SAndroid Build Coastguard Worker { 617*d83cc019SAndroid Build Coastguard Worker 618*d83cc019SAndroid Build Coastguard Worker struct 619*d83cc019SAndroid Build Coastguard Worker { 620*d83cc019SAndroid Build Coastguard Worker unsigned shadow_function:3; 621*d83cc019SAndroid Build Coastguard Worker unsigned lod_bias:11; 622*d83cc019SAndroid Build Coastguard Worker unsigned min_filter:3; 623*d83cc019SAndroid Build Coastguard Worker unsigned mag_filter:3; 624*d83cc019SAndroid Build Coastguard Worker unsigned mip_filter:2; 625*d83cc019SAndroid Build Coastguard Worker unsigned base_level:5; 626*d83cc019SAndroid Build Coastguard Worker unsigned min_mag_neq:1; 627*d83cc019SAndroid Build Coastguard Worker unsigned lod_preclamp:1; 628*d83cc019SAndroid Build Coastguard Worker unsigned default_color_mode:1; 629*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 630*d83cc019SAndroid Build Coastguard Worker unsigned disable:1; 631*d83cc019SAndroid Build Coastguard Worker } ss0; 632*d83cc019SAndroid Build Coastguard Worker 633*d83cc019SAndroid Build Coastguard Worker struct 634*d83cc019SAndroid Build Coastguard Worker { 635*d83cc019SAndroid Build Coastguard Worker unsigned r_wrap_mode:3; 636*d83cc019SAndroid Build Coastguard Worker unsigned t_wrap_mode:3; 637*d83cc019SAndroid Build Coastguard Worker unsigned s_wrap_mode:3; 638*d83cc019SAndroid Build Coastguard Worker unsigned cube_control_mode:1; 639*d83cc019SAndroid Build Coastguard Worker unsigned pad:2; 640*d83cc019SAndroid Build Coastguard Worker unsigned max_lod:10; 641*d83cc019SAndroid Build Coastguard Worker unsigned min_lod:10; 642*d83cc019SAndroid Build Coastguard Worker } ss1; 643*d83cc019SAndroid Build Coastguard Worker 644*d83cc019SAndroid Build Coastguard Worker 645*d83cc019SAndroid Build Coastguard Worker struct 646*d83cc019SAndroid Build Coastguard Worker { 647*d83cc019SAndroid Build Coastguard Worker unsigned pad:5; 648*d83cc019SAndroid Build Coastguard Worker unsigned default_color_pointer:27; 649*d83cc019SAndroid Build Coastguard Worker } ss2; 650*d83cc019SAndroid Build Coastguard Worker 651*d83cc019SAndroid Build Coastguard Worker struct 652*d83cc019SAndroid Build Coastguard Worker { 653*d83cc019SAndroid Build Coastguard Worker unsigned non_normalized_coord:1; 654*d83cc019SAndroid Build Coastguard Worker unsigned pad:12; 655*d83cc019SAndroid Build Coastguard Worker unsigned address_round:6; 656*d83cc019SAndroid Build Coastguard Worker unsigned max_aniso:3; 657*d83cc019SAndroid Build Coastguard Worker unsigned chroma_key_mode:1; 658*d83cc019SAndroid Build Coastguard Worker unsigned chroma_key_index:2; 659*d83cc019SAndroid Build Coastguard Worker unsigned chroma_key_enable:1; 660*d83cc019SAndroid Build Coastguard Worker unsigned monochrome_filter_width:3; 661*d83cc019SAndroid Build Coastguard Worker unsigned monochrome_filter_height:3; 662*d83cc019SAndroid Build Coastguard Worker } ss3; 663*d83cc019SAndroid Build Coastguard Worker }; 664*d83cc019SAndroid Build Coastguard Worker 665*d83cc019SAndroid Build Coastguard Worker struct gen7_sampler_state 666*d83cc019SAndroid Build Coastguard Worker { 667*d83cc019SAndroid Build Coastguard Worker struct 668*d83cc019SAndroid Build Coastguard Worker { 669*d83cc019SAndroid Build Coastguard Worker unsigned aniso_algorithm:1; 670*d83cc019SAndroid Build Coastguard Worker unsigned lod_bias:13; 671*d83cc019SAndroid Build Coastguard Worker unsigned min_filter:3; 672*d83cc019SAndroid Build Coastguard Worker unsigned mag_filter:3; 673*d83cc019SAndroid Build Coastguard Worker unsigned mip_filter:2; 674*d83cc019SAndroid Build Coastguard Worker unsigned base_level:5; 675*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 676*d83cc019SAndroid Build Coastguard Worker unsigned lod_preclamp:1; 677*d83cc019SAndroid Build Coastguard Worker unsigned default_color_mode:1; 678*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 679*d83cc019SAndroid Build Coastguard Worker unsigned disable:1; 680*d83cc019SAndroid Build Coastguard Worker } ss0; 681*d83cc019SAndroid Build Coastguard Worker 682*d83cc019SAndroid Build Coastguard Worker struct 683*d83cc019SAndroid Build Coastguard Worker { 684*d83cc019SAndroid Build Coastguard Worker unsigned cube_control_mode:1; 685*d83cc019SAndroid Build Coastguard Worker unsigned shadow_function:3; 686*d83cc019SAndroid Build Coastguard Worker unsigned pad:4; 687*d83cc019SAndroid Build Coastguard Worker unsigned max_lod:12; 688*d83cc019SAndroid Build Coastguard Worker unsigned min_lod:12; 689*d83cc019SAndroid Build Coastguard Worker } ss1; 690*d83cc019SAndroid Build Coastguard Worker 691*d83cc019SAndroid Build Coastguard Worker struct 692*d83cc019SAndroid Build Coastguard Worker { 693*d83cc019SAndroid Build Coastguard Worker unsigned pad:5; 694*d83cc019SAndroid Build Coastguard Worker unsigned default_color_pointer:27; 695*d83cc019SAndroid Build Coastguard Worker } ss2; 696*d83cc019SAndroid Build Coastguard Worker 697*d83cc019SAndroid Build Coastguard Worker struct 698*d83cc019SAndroid Build Coastguard Worker { 699*d83cc019SAndroid Build Coastguard Worker unsigned r_wrap_mode:3; 700*d83cc019SAndroid Build Coastguard Worker unsigned t_wrap_mode:3; 701*d83cc019SAndroid Build Coastguard Worker unsigned s_wrap_mode:3; 702*d83cc019SAndroid Build Coastguard Worker unsigned pad:1; 703*d83cc019SAndroid Build Coastguard Worker unsigned non_normalized_coord:1; 704*d83cc019SAndroid Build Coastguard Worker unsigned trilinear_quality:2; 705*d83cc019SAndroid Build Coastguard Worker unsigned address_round:6; 706*d83cc019SAndroid Build Coastguard Worker unsigned max_aniso:3; 707*d83cc019SAndroid Build Coastguard Worker unsigned chroma_key_mode:1; 708*d83cc019SAndroid Build Coastguard Worker unsigned chroma_key_index:2; 709*d83cc019SAndroid Build Coastguard Worker unsigned chroma_key_enable:1; 710*d83cc019SAndroid Build Coastguard Worker unsigned pad0:6; 711*d83cc019SAndroid Build Coastguard Worker } ss3; 712*d83cc019SAndroid Build Coastguard Worker }; 713*d83cc019SAndroid Build Coastguard Worker 714*d83cc019SAndroid Build Coastguard Worker struct brw_clipper_viewport 715*d83cc019SAndroid Build Coastguard Worker { 716*d83cc019SAndroid Build Coastguard Worker float xmin; 717*d83cc019SAndroid Build Coastguard Worker float xmax; 718*d83cc019SAndroid Build Coastguard Worker float ymin; 719*d83cc019SAndroid Build Coastguard Worker float ymax; 720*d83cc019SAndroid Build Coastguard Worker }; 721*d83cc019SAndroid Build Coastguard Worker 722*d83cc019SAndroid Build Coastguard Worker struct brw_cc_viewport 723*d83cc019SAndroid Build Coastguard Worker { 724*d83cc019SAndroid Build Coastguard Worker float min_depth; 725*d83cc019SAndroid Build Coastguard Worker float max_depth; 726*d83cc019SAndroid Build Coastguard Worker }; 727*d83cc019SAndroid Build Coastguard Worker 728*d83cc019SAndroid Build Coastguard Worker struct brw_sf_viewport 729*d83cc019SAndroid Build Coastguard Worker { 730*d83cc019SAndroid Build Coastguard Worker struct { 731*d83cc019SAndroid Build Coastguard Worker float m00; 732*d83cc019SAndroid Build Coastguard Worker float m11; 733*d83cc019SAndroid Build Coastguard Worker float m22; 734*d83cc019SAndroid Build Coastguard Worker float m30; 735*d83cc019SAndroid Build Coastguard Worker float m31; 736*d83cc019SAndroid Build Coastguard Worker float m32; 737*d83cc019SAndroid Build Coastguard Worker } viewport; 738*d83cc019SAndroid Build Coastguard Worker 739*d83cc019SAndroid Build Coastguard Worker /* scissor coordinates are inclusive */ 740*d83cc019SAndroid Build Coastguard Worker struct { 741*d83cc019SAndroid Build Coastguard Worker int16_t xmin; 742*d83cc019SAndroid Build Coastguard Worker int16_t ymin; 743*d83cc019SAndroid Build Coastguard Worker int16_t xmax; 744*d83cc019SAndroid Build Coastguard Worker int16_t ymax; 745*d83cc019SAndroid Build Coastguard Worker } scissor; 746*d83cc019SAndroid Build Coastguard Worker }; 747*d83cc019SAndroid Build Coastguard Worker 748*d83cc019SAndroid Build Coastguard Worker struct gen6_sf_viewport { 749*d83cc019SAndroid Build Coastguard Worker float m00; 750*d83cc019SAndroid Build Coastguard Worker float m11; 751*d83cc019SAndroid Build Coastguard Worker float m22; 752*d83cc019SAndroid Build Coastguard Worker float m30; 753*d83cc019SAndroid Build Coastguard Worker float m31; 754*d83cc019SAndroid Build Coastguard Worker float m32; 755*d83cc019SAndroid Build Coastguard Worker }; 756*d83cc019SAndroid Build Coastguard Worker 757*d83cc019SAndroid Build Coastguard Worker struct gen7_sf_clip_viewport { 758*d83cc019SAndroid Build Coastguard Worker struct { 759*d83cc019SAndroid Build Coastguard Worker float m00; 760*d83cc019SAndroid Build Coastguard Worker float m11; 761*d83cc019SAndroid Build Coastguard Worker float m22; 762*d83cc019SAndroid Build Coastguard Worker float m30; 763*d83cc019SAndroid Build Coastguard Worker float m31; 764*d83cc019SAndroid Build Coastguard Worker float m32; 765*d83cc019SAndroid Build Coastguard Worker } viewport; 766*d83cc019SAndroid Build Coastguard Worker 767*d83cc019SAndroid Build Coastguard Worker unsigned pad0[2]; 768*d83cc019SAndroid Build Coastguard Worker 769*d83cc019SAndroid Build Coastguard Worker struct { 770*d83cc019SAndroid Build Coastguard Worker float xmin; 771*d83cc019SAndroid Build Coastguard Worker float xmax; 772*d83cc019SAndroid Build Coastguard Worker float ymin; 773*d83cc019SAndroid Build Coastguard Worker float ymax; 774*d83cc019SAndroid Build Coastguard Worker } guardband; 775*d83cc019SAndroid Build Coastguard Worker 776*d83cc019SAndroid Build Coastguard Worker float pad1[4]; 777*d83cc019SAndroid Build Coastguard Worker }; 778*d83cc019SAndroid Build Coastguard Worker 779*d83cc019SAndroid Build Coastguard Worker struct brw_vertex_element_state 780*d83cc019SAndroid Build Coastguard Worker { 781*d83cc019SAndroid Build Coastguard Worker struct 782*d83cc019SAndroid Build Coastguard Worker { 783*d83cc019SAndroid Build Coastguard Worker unsigned src_offset:11; 784*d83cc019SAndroid Build Coastguard Worker unsigned pad:5; 785*d83cc019SAndroid Build Coastguard Worker unsigned src_format:9; 786*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 787*d83cc019SAndroid Build Coastguard Worker unsigned valid:1; 788*d83cc019SAndroid Build Coastguard Worker unsigned vertex_buffer_index:5; 789*d83cc019SAndroid Build Coastguard Worker } ve0; 790*d83cc019SAndroid Build Coastguard Worker 791*d83cc019SAndroid Build Coastguard Worker struct 792*d83cc019SAndroid Build Coastguard Worker { 793*d83cc019SAndroid Build Coastguard Worker unsigned dst_offset:8; 794*d83cc019SAndroid Build Coastguard Worker unsigned pad:8; 795*d83cc019SAndroid Build Coastguard Worker unsigned vfcomponent3:4; 796*d83cc019SAndroid Build Coastguard Worker unsigned vfcomponent2:4; 797*d83cc019SAndroid Build Coastguard Worker unsigned vfcomponent1:4; 798*d83cc019SAndroid Build Coastguard Worker unsigned vfcomponent0:4; 799*d83cc019SAndroid Build Coastguard Worker } ve1; 800*d83cc019SAndroid Build Coastguard Worker }; 801*d83cc019SAndroid Build Coastguard Worker 802*d83cc019SAndroid Build Coastguard Worker struct brw_urb_immediate { 803*d83cc019SAndroid Build Coastguard Worker unsigned opcode:4; 804*d83cc019SAndroid Build Coastguard Worker unsigned offset:6; 805*d83cc019SAndroid Build Coastguard Worker unsigned swizzle_control:2; 806*d83cc019SAndroid Build Coastguard Worker unsigned pad:1; 807*d83cc019SAndroid Build Coastguard Worker unsigned allocate:1; 808*d83cc019SAndroid Build Coastguard Worker unsigned used:1; 809*d83cc019SAndroid Build Coastguard Worker unsigned complete:1; 810*d83cc019SAndroid Build Coastguard Worker unsigned response_length:4; 811*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 812*d83cc019SAndroid Build Coastguard Worker unsigned msg_target:4; 813*d83cc019SAndroid Build Coastguard Worker unsigned pad1:3; 814*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 815*d83cc019SAndroid Build Coastguard Worker }; 816*d83cc019SAndroid Build Coastguard Worker 817*d83cc019SAndroid Build Coastguard Worker /* Instruction format for the execution units: 818*d83cc019SAndroid Build Coastguard Worker */ 819*d83cc019SAndroid Build Coastguard Worker 820*d83cc019SAndroid Build Coastguard Worker struct brw_instruction 821*d83cc019SAndroid Build Coastguard Worker { 822*d83cc019SAndroid Build Coastguard Worker struct 823*d83cc019SAndroid Build Coastguard Worker { 824*d83cc019SAndroid Build Coastguard Worker unsigned opcode:7; 825*d83cc019SAndroid Build Coastguard Worker unsigned pad:1; 826*d83cc019SAndroid Build Coastguard Worker unsigned access_mode:1; 827*d83cc019SAndroid Build Coastguard Worker unsigned mask_control:1; 828*d83cc019SAndroid Build Coastguard Worker unsigned dependency_control:2; 829*d83cc019SAndroid Build Coastguard Worker unsigned compression_control:2; /* gen6: quater control */ 830*d83cc019SAndroid Build Coastguard Worker unsigned thread_control:2; 831*d83cc019SAndroid Build Coastguard Worker unsigned predicate_control:4; 832*d83cc019SAndroid Build Coastguard Worker unsigned predicate_inverse:1; 833*d83cc019SAndroid Build Coastguard Worker unsigned execution_size:3; 834*d83cc019SAndroid Build Coastguard Worker /** 835*d83cc019SAndroid Build Coastguard Worker * Conditional Modifier for most instructions. On Gen6+, this is also 836*d83cc019SAndroid Build Coastguard Worker * used for the SEND instruction's Message Target/SFID. 837*d83cc019SAndroid Build Coastguard Worker */ 838*d83cc019SAndroid Build Coastguard Worker unsigned destreg__conditionalmod:4; 839*d83cc019SAndroid Build Coastguard Worker unsigned acc_wr_control:1; 840*d83cc019SAndroid Build Coastguard Worker unsigned cmpt_control:1; 841*d83cc019SAndroid Build Coastguard Worker unsigned debug_control:1; 842*d83cc019SAndroid Build Coastguard Worker unsigned saturate:1; 843*d83cc019SAndroid Build Coastguard Worker } header; 844*d83cc019SAndroid Build Coastguard Worker 845*d83cc019SAndroid Build Coastguard Worker union { 846*d83cc019SAndroid Build Coastguard Worker struct 847*d83cc019SAndroid Build Coastguard Worker { 848*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_file:2; 849*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_type:3; 850*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_file:2; 851*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_type:3; 852*d83cc019SAndroid Build Coastguard Worker unsigned src1_reg_file:2; 853*d83cc019SAndroid Build Coastguard Worker unsigned src1_reg_type:3; 854*d83cc019SAndroid Build Coastguard Worker unsigned pad:1; 855*d83cc019SAndroid Build Coastguard Worker unsigned dest_subreg_nr:5; 856*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_nr:8; 857*d83cc019SAndroid Build Coastguard Worker unsigned dest_horiz_stride:2; 858*d83cc019SAndroid Build Coastguard Worker unsigned dest_address_mode:1; 859*d83cc019SAndroid Build Coastguard Worker } da1; 860*d83cc019SAndroid Build Coastguard Worker 861*d83cc019SAndroid Build Coastguard Worker struct 862*d83cc019SAndroid Build Coastguard Worker { 863*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_file:2; 864*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_type:3; 865*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_file:2; 866*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_type:3; 867*d83cc019SAndroid Build Coastguard Worker unsigned src1_reg_file:2; /* 0x00000c00 */ 868*d83cc019SAndroid Build Coastguard Worker unsigned src1_reg_type:3; /* 0x00007000 */ 869*d83cc019SAndroid Build Coastguard Worker unsigned pad:1; 870*d83cc019SAndroid Build Coastguard Worker int dest_indirect_offset:10; /* offset against the deref'd address reg */ 871*d83cc019SAndroid Build Coastguard Worker unsigned dest_subreg_nr:3; /* subnr for the address reg a0.x */ 872*d83cc019SAndroid Build Coastguard Worker unsigned dest_horiz_stride:2; 873*d83cc019SAndroid Build Coastguard Worker unsigned dest_address_mode:1; 874*d83cc019SAndroid Build Coastguard Worker } ia1; 875*d83cc019SAndroid Build Coastguard Worker 876*d83cc019SAndroid Build Coastguard Worker struct 877*d83cc019SAndroid Build Coastguard Worker { 878*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_file:2; 879*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_type:3; 880*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_file:2; 881*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_type:3; 882*d83cc019SAndroid Build Coastguard Worker unsigned src1_reg_file:2; 883*d83cc019SAndroid Build Coastguard Worker unsigned src1_reg_type:3; 884*d83cc019SAndroid Build Coastguard Worker unsigned pad:1; 885*d83cc019SAndroid Build Coastguard Worker unsigned dest_writemask:4; 886*d83cc019SAndroid Build Coastguard Worker unsigned dest_subreg_nr:1; 887*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_nr:8; 888*d83cc019SAndroid Build Coastguard Worker unsigned dest_horiz_stride:2; 889*d83cc019SAndroid Build Coastguard Worker unsigned dest_address_mode:1; 890*d83cc019SAndroid Build Coastguard Worker } da16; 891*d83cc019SAndroid Build Coastguard Worker 892*d83cc019SAndroid Build Coastguard Worker struct 893*d83cc019SAndroid Build Coastguard Worker { 894*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_file:2; 895*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_type:3; 896*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_file:2; 897*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_type:3; 898*d83cc019SAndroid Build Coastguard Worker unsigned pad0:6; 899*d83cc019SAndroid Build Coastguard Worker unsigned dest_writemask:4; 900*d83cc019SAndroid Build Coastguard Worker int dest_indirect_offset:6; 901*d83cc019SAndroid Build Coastguard Worker unsigned dest_subreg_nr:3; 902*d83cc019SAndroid Build Coastguard Worker unsigned dest_horiz_stride:2; 903*d83cc019SAndroid Build Coastguard Worker unsigned dest_address_mode:1; 904*d83cc019SAndroid Build Coastguard Worker } ia16; 905*d83cc019SAndroid Build Coastguard Worker 906*d83cc019SAndroid Build Coastguard Worker struct { 907*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_file:2; 908*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_type:3; 909*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_file:2; 910*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_type:3; 911*d83cc019SAndroid Build Coastguard Worker unsigned src1_reg_file:2; 912*d83cc019SAndroid Build Coastguard Worker unsigned src1_reg_type:3; 913*d83cc019SAndroid Build Coastguard Worker unsigned pad:1; 914*d83cc019SAndroid Build Coastguard Worker 915*d83cc019SAndroid Build Coastguard Worker int jump_count:16; 916*d83cc019SAndroid Build Coastguard Worker } branch_gen6; 917*d83cc019SAndroid Build Coastguard Worker 918*d83cc019SAndroid Build Coastguard Worker struct { 919*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_file:1; 920*d83cc019SAndroid Build Coastguard Worker unsigned flag_subreg_nr:1; 921*d83cc019SAndroid Build Coastguard Worker unsigned flag_reg_nr:1; 922*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 923*d83cc019SAndroid Build Coastguard Worker unsigned src0_abs:1; 924*d83cc019SAndroid Build Coastguard Worker unsigned src0_negate:1; 925*d83cc019SAndroid Build Coastguard Worker unsigned src1_abs:1; 926*d83cc019SAndroid Build Coastguard Worker unsigned src1_negate:1; 927*d83cc019SAndroid Build Coastguard Worker unsigned src2_abs:1; 928*d83cc019SAndroid Build Coastguard Worker unsigned src2_negate:1; 929*d83cc019SAndroid Build Coastguard Worker unsigned src_reg_type:2; 930*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_type:2; 931*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 932*d83cc019SAndroid Build Coastguard Worker unsigned nib_ctrl:1; 933*d83cc019SAndroid Build Coastguard Worker unsigned pad2:1; 934*d83cc019SAndroid Build Coastguard Worker unsigned dest_writemask:4; 935*d83cc019SAndroid Build Coastguard Worker unsigned dest_subreg_nr:3; 936*d83cc019SAndroid Build Coastguard Worker unsigned dest_reg_nr:8; 937*d83cc019SAndroid Build Coastguard Worker } da3src; 938*d83cc019SAndroid Build Coastguard Worker 939*d83cc019SAndroid Build Coastguard Worker uint32_t ud; 940*d83cc019SAndroid Build Coastguard Worker } bits1; 941*d83cc019SAndroid Build Coastguard Worker 942*d83cc019SAndroid Build Coastguard Worker 943*d83cc019SAndroid Build Coastguard Worker union { 944*d83cc019SAndroid Build Coastguard Worker struct 945*d83cc019SAndroid Build Coastguard Worker { 946*d83cc019SAndroid Build Coastguard Worker unsigned src0_subreg_nr:5; 947*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_nr:8; 948*d83cc019SAndroid Build Coastguard Worker unsigned src0_abs:1; 949*d83cc019SAndroid Build Coastguard Worker unsigned src0_negate:1; 950*d83cc019SAndroid Build Coastguard Worker unsigned src0_address_mode:1; 951*d83cc019SAndroid Build Coastguard Worker unsigned src0_horiz_stride:2; 952*d83cc019SAndroid Build Coastguard Worker unsigned src0_width:3; 953*d83cc019SAndroid Build Coastguard Worker unsigned src0_vert_stride:4; 954*d83cc019SAndroid Build Coastguard Worker unsigned flag_subreg_nr:1; 955*d83cc019SAndroid Build Coastguard Worker unsigned flag_reg_nr:1; 956*d83cc019SAndroid Build Coastguard Worker unsigned pad:5; 957*d83cc019SAndroid Build Coastguard Worker } da1; 958*d83cc019SAndroid Build Coastguard Worker 959*d83cc019SAndroid Build Coastguard Worker struct 960*d83cc019SAndroid Build Coastguard Worker { 961*d83cc019SAndroid Build Coastguard Worker int src0_indirect_offset:10; 962*d83cc019SAndroid Build Coastguard Worker unsigned src0_subreg_nr:3; 963*d83cc019SAndroid Build Coastguard Worker unsigned src0_abs:1; 964*d83cc019SAndroid Build Coastguard Worker unsigned src0_negate:1; 965*d83cc019SAndroid Build Coastguard Worker unsigned src0_address_mode:1; 966*d83cc019SAndroid Build Coastguard Worker unsigned src0_horiz_stride:2; 967*d83cc019SAndroid Build Coastguard Worker unsigned src0_width:3; 968*d83cc019SAndroid Build Coastguard Worker unsigned src0_vert_stride:4; 969*d83cc019SAndroid Build Coastguard Worker unsigned flag_subreg_nr:1; 970*d83cc019SAndroid Build Coastguard Worker unsigned flag_reg_nr:1; 971*d83cc019SAndroid Build Coastguard Worker unsigned pad:5; 972*d83cc019SAndroid Build Coastguard Worker } ia1; 973*d83cc019SAndroid Build Coastguard Worker 974*d83cc019SAndroid Build Coastguard Worker struct 975*d83cc019SAndroid Build Coastguard Worker { 976*d83cc019SAndroid Build Coastguard Worker unsigned src0_swz_x:2; 977*d83cc019SAndroid Build Coastguard Worker unsigned src0_swz_y:2; 978*d83cc019SAndroid Build Coastguard Worker unsigned src0_subreg_nr:1; 979*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_nr:8; 980*d83cc019SAndroid Build Coastguard Worker unsigned src0_abs:1; 981*d83cc019SAndroid Build Coastguard Worker unsigned src0_negate:1; 982*d83cc019SAndroid Build Coastguard Worker unsigned src0_address_mode:1; 983*d83cc019SAndroid Build Coastguard Worker unsigned src0_swz_z:2; 984*d83cc019SAndroid Build Coastguard Worker unsigned src0_swz_w:2; 985*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 986*d83cc019SAndroid Build Coastguard Worker unsigned src0_vert_stride:4; 987*d83cc019SAndroid Build Coastguard Worker unsigned flag_subreg_nr:1; 988*d83cc019SAndroid Build Coastguard Worker unsigned flag_reg_nr:1; 989*d83cc019SAndroid Build Coastguard Worker unsigned pad1:5; 990*d83cc019SAndroid Build Coastguard Worker } da16; 991*d83cc019SAndroid Build Coastguard Worker 992*d83cc019SAndroid Build Coastguard Worker struct 993*d83cc019SAndroid Build Coastguard Worker { 994*d83cc019SAndroid Build Coastguard Worker unsigned src0_swz_x:2; 995*d83cc019SAndroid Build Coastguard Worker unsigned src0_swz_y:2; 996*d83cc019SAndroid Build Coastguard Worker int src0_indirect_offset:6; 997*d83cc019SAndroid Build Coastguard Worker unsigned src0_subreg_nr:3; 998*d83cc019SAndroid Build Coastguard Worker unsigned src0_abs:1; 999*d83cc019SAndroid Build Coastguard Worker unsigned src0_negate:1; 1000*d83cc019SAndroid Build Coastguard Worker unsigned src0_address_mode:1; 1001*d83cc019SAndroid Build Coastguard Worker unsigned src0_swz_z:2; 1002*d83cc019SAndroid Build Coastguard Worker unsigned src0_swz_w:2; 1003*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 1004*d83cc019SAndroid Build Coastguard Worker unsigned src0_vert_stride:4; 1005*d83cc019SAndroid Build Coastguard Worker unsigned flag_subreg_nr:1; 1006*d83cc019SAndroid Build Coastguard Worker unsigned flag_reg_nr:1; 1007*d83cc019SAndroid Build Coastguard Worker unsigned pad1:5; 1008*d83cc019SAndroid Build Coastguard Worker } ia16; 1009*d83cc019SAndroid Build Coastguard Worker 1010*d83cc019SAndroid Build Coastguard Worker /* Extended Message Descriptor for Ironlake (Gen5) SEND instruction. 1011*d83cc019SAndroid Build Coastguard Worker * 1012*d83cc019SAndroid Build Coastguard Worker * Does not apply to Gen6+. The SFID/message target moved to bits 1013*d83cc019SAndroid Build Coastguard Worker * 27:24 of the header (destreg__conditionalmod); EOT is in bits3. 1014*d83cc019SAndroid Build Coastguard Worker */ 1015*d83cc019SAndroid Build Coastguard Worker struct 1016*d83cc019SAndroid Build Coastguard Worker { 1017*d83cc019SAndroid Build Coastguard Worker unsigned pad:26; 1018*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1019*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 1020*d83cc019SAndroid Build Coastguard Worker unsigned sfid:4; 1021*d83cc019SAndroid Build Coastguard Worker } send_gen5; /* for Ironlake only */ 1022*d83cc019SAndroid Build Coastguard Worker 1023*d83cc019SAndroid Build Coastguard Worker struct { 1024*d83cc019SAndroid Build Coastguard Worker unsigned src0_rep_ctrl:1; 1025*d83cc019SAndroid Build Coastguard Worker unsigned src0_swizzle:8; 1026*d83cc019SAndroid Build Coastguard Worker unsigned src0_subreg_nr:3; 1027*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_nr:8; 1028*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 1029*d83cc019SAndroid Build Coastguard Worker unsigned src1_rep_ctrl:1; 1030*d83cc019SAndroid Build Coastguard Worker unsigned src1_swizzle:8; 1031*d83cc019SAndroid Build Coastguard Worker unsigned src1_subreg_nr_low:2; 1032*d83cc019SAndroid Build Coastguard Worker } da3src; 1033*d83cc019SAndroid Build Coastguard Worker 1034*d83cc019SAndroid Build Coastguard Worker uint32_t ud; 1035*d83cc019SAndroid Build Coastguard Worker } bits2; 1036*d83cc019SAndroid Build Coastguard Worker 1037*d83cc019SAndroid Build Coastguard Worker union 1038*d83cc019SAndroid Build Coastguard Worker { 1039*d83cc019SAndroid Build Coastguard Worker struct 1040*d83cc019SAndroid Build Coastguard Worker { 1041*d83cc019SAndroid Build Coastguard Worker unsigned src1_subreg_nr:5; 1042*d83cc019SAndroid Build Coastguard Worker unsigned src1_reg_nr:8; 1043*d83cc019SAndroid Build Coastguard Worker unsigned src1_abs:1; 1044*d83cc019SAndroid Build Coastguard Worker unsigned src1_negate:1; 1045*d83cc019SAndroid Build Coastguard Worker unsigned src1_address_mode:1; 1046*d83cc019SAndroid Build Coastguard Worker unsigned src1_horiz_stride:2; 1047*d83cc019SAndroid Build Coastguard Worker unsigned src1_width:3; 1048*d83cc019SAndroid Build Coastguard Worker unsigned src1_vert_stride:4; 1049*d83cc019SAndroid Build Coastguard Worker unsigned pad0:7; 1050*d83cc019SAndroid Build Coastguard Worker } da1; 1051*d83cc019SAndroid Build Coastguard Worker 1052*d83cc019SAndroid Build Coastguard Worker struct 1053*d83cc019SAndroid Build Coastguard Worker { 1054*d83cc019SAndroid Build Coastguard Worker unsigned src1_swz_x:2; 1055*d83cc019SAndroid Build Coastguard Worker unsigned src1_swz_y:2; 1056*d83cc019SAndroid Build Coastguard Worker unsigned src1_subreg_nr:1; 1057*d83cc019SAndroid Build Coastguard Worker unsigned src1_reg_nr:8; 1058*d83cc019SAndroid Build Coastguard Worker unsigned src1_abs:1; 1059*d83cc019SAndroid Build Coastguard Worker unsigned src1_negate:1; 1060*d83cc019SAndroid Build Coastguard Worker unsigned src1_address_mode:1; 1061*d83cc019SAndroid Build Coastguard Worker unsigned src1_swz_z:2; 1062*d83cc019SAndroid Build Coastguard Worker unsigned src1_swz_w:2; 1063*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 1064*d83cc019SAndroid Build Coastguard Worker unsigned src1_vert_stride:4; 1065*d83cc019SAndroid Build Coastguard Worker unsigned pad2:7; 1066*d83cc019SAndroid Build Coastguard Worker } da16; 1067*d83cc019SAndroid Build Coastguard Worker 1068*d83cc019SAndroid Build Coastguard Worker struct 1069*d83cc019SAndroid Build Coastguard Worker { 1070*d83cc019SAndroid Build Coastguard Worker int src1_indirect_offset:10; 1071*d83cc019SAndroid Build Coastguard Worker unsigned src1_subreg_nr:3; 1072*d83cc019SAndroid Build Coastguard Worker unsigned src1_abs:1; 1073*d83cc019SAndroid Build Coastguard Worker unsigned src1_negate:1; 1074*d83cc019SAndroid Build Coastguard Worker unsigned src1_address_mode:1; 1075*d83cc019SAndroid Build Coastguard Worker unsigned src1_horiz_stride:2; 1076*d83cc019SAndroid Build Coastguard Worker unsigned src1_width:3; 1077*d83cc019SAndroid Build Coastguard Worker unsigned src1_vert_stride:4; 1078*d83cc019SAndroid Build Coastguard Worker unsigned pad1:7; 1079*d83cc019SAndroid Build Coastguard Worker } ia1; 1080*d83cc019SAndroid Build Coastguard Worker 1081*d83cc019SAndroid Build Coastguard Worker struct 1082*d83cc019SAndroid Build Coastguard Worker { 1083*d83cc019SAndroid Build Coastguard Worker unsigned src1_swz_x:2; 1084*d83cc019SAndroid Build Coastguard Worker unsigned src1_swz_y:2; 1085*d83cc019SAndroid Build Coastguard Worker int src1_indirect_offset:6; 1086*d83cc019SAndroid Build Coastguard Worker unsigned src1_subreg_nr:3; 1087*d83cc019SAndroid Build Coastguard Worker unsigned src1_abs:1; 1088*d83cc019SAndroid Build Coastguard Worker unsigned src1_negate:1; 1089*d83cc019SAndroid Build Coastguard Worker unsigned src1_address_mode:1; 1090*d83cc019SAndroid Build Coastguard Worker unsigned src1_swz_z:2; 1091*d83cc019SAndroid Build Coastguard Worker unsigned src1_swz_w:2; 1092*d83cc019SAndroid Build Coastguard Worker unsigned pad1:1; 1093*d83cc019SAndroid Build Coastguard Worker unsigned src1_vert_stride:4; 1094*d83cc019SAndroid Build Coastguard Worker unsigned pad2:7; 1095*d83cc019SAndroid Build Coastguard Worker } ia16; 1096*d83cc019SAndroid Build Coastguard Worker 1097*d83cc019SAndroid Build Coastguard Worker 1098*d83cc019SAndroid Build Coastguard Worker struct 1099*d83cc019SAndroid Build Coastguard Worker { 1100*d83cc019SAndroid Build Coastguard Worker int jump_count:16; /* note: signed */ 1101*d83cc019SAndroid Build Coastguard Worker unsigned pop_count:4; 1102*d83cc019SAndroid Build Coastguard Worker unsigned pad0:12; 1103*d83cc019SAndroid Build Coastguard Worker } if_else; 1104*d83cc019SAndroid Build Coastguard Worker 1105*d83cc019SAndroid Build Coastguard Worker /* This is also used for gen7 IF/ELSE instructions */ 1106*d83cc019SAndroid Build Coastguard Worker struct 1107*d83cc019SAndroid Build Coastguard Worker { 1108*d83cc019SAndroid Build Coastguard Worker /* Signed jump distance to the ip to jump to if all channels 1109*d83cc019SAndroid Build Coastguard Worker * are disabled after the break or continue. It should point 1110*d83cc019SAndroid Build Coastguard Worker * to the end of the innermost control flow block, as that's 1111*d83cc019SAndroid Build Coastguard Worker * where some channel could get re-enabled. 1112*d83cc019SAndroid Build Coastguard Worker */ 1113*d83cc019SAndroid Build Coastguard Worker int jip:16; 1114*d83cc019SAndroid Build Coastguard Worker 1115*d83cc019SAndroid Build Coastguard Worker /* Signed jump distance to the location to resume execution 1116*d83cc019SAndroid Build Coastguard Worker * of this channel if it's enabled for the break or continue. 1117*d83cc019SAndroid Build Coastguard Worker */ 1118*d83cc019SAndroid Build Coastguard Worker int uip:16; 1119*d83cc019SAndroid Build Coastguard Worker } break_cont; 1120*d83cc019SAndroid Build Coastguard Worker 1121*d83cc019SAndroid Build Coastguard Worker int JIP; /* used by Gen6 CALL instructions; Gen7 JMPI */ 1122*d83cc019SAndroid Build Coastguard Worker 1123*d83cc019SAndroid Build Coastguard Worker /** 1124*d83cc019SAndroid Build Coastguard Worker * \defgroup SEND instructions / Message Descriptors 1125*d83cc019SAndroid Build Coastguard Worker * 1126*d83cc019SAndroid Build Coastguard Worker * @{ 1127*d83cc019SAndroid Build Coastguard Worker */ 1128*d83cc019SAndroid Build Coastguard Worker 1129*d83cc019SAndroid Build Coastguard Worker /** 1130*d83cc019SAndroid Build Coastguard Worker * Generic Message Descriptor for Gen4 SEND instructions. The structs 1131*d83cc019SAndroid Build Coastguard Worker * below expand function_control to something specific for their 1132*d83cc019SAndroid Build Coastguard Worker * message. Due to struct packing issues, they duplicate these bits. 1133*d83cc019SAndroid Build Coastguard Worker * 1134*d83cc019SAndroid Build Coastguard Worker * See the G45 PRM, Volume 4, Table 14-15. 1135*d83cc019SAndroid Build Coastguard Worker */ 1136*d83cc019SAndroid Build Coastguard Worker struct { 1137*d83cc019SAndroid Build Coastguard Worker unsigned function_control:16; 1138*d83cc019SAndroid Build Coastguard Worker unsigned response_length:4; 1139*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1140*d83cc019SAndroid Build Coastguard Worker unsigned msg_target:4; 1141*d83cc019SAndroid Build Coastguard Worker unsigned pad1:3; 1142*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1143*d83cc019SAndroid Build Coastguard Worker } generic; 1144*d83cc019SAndroid Build Coastguard Worker 1145*d83cc019SAndroid Build Coastguard Worker /** 1146*d83cc019SAndroid Build Coastguard Worker * Generic Message Descriptor for Gen5-7 SEND instructions. 1147*d83cc019SAndroid Build Coastguard Worker * 1148*d83cc019SAndroid Build Coastguard Worker * See the Sandybridge PRM, Volume 2 Part 2, Table 8-15. (Sadly, most 1149*d83cc019SAndroid Build Coastguard Worker * of the information on the SEND instruction is missing from the public 1150*d83cc019SAndroid Build Coastguard Worker * Ironlake PRM.) 1151*d83cc019SAndroid Build Coastguard Worker * 1152*d83cc019SAndroid Build Coastguard Worker * The table claims that bit 31 is reserved/MBZ on Gen6+, but it lies. 1153*d83cc019SAndroid Build Coastguard Worker * According to the SEND instruction description: 1154*d83cc019SAndroid Build Coastguard Worker * "The MSb of the message description, the EOT field, always comes from 1155*d83cc019SAndroid Build Coastguard Worker * bit 127 of the instruction word"...which is bit 31 of this field. 1156*d83cc019SAndroid Build Coastguard Worker */ 1157*d83cc019SAndroid Build Coastguard Worker struct { 1158*d83cc019SAndroid Build Coastguard Worker unsigned function_control:19; 1159*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1160*d83cc019SAndroid Build Coastguard Worker unsigned response_length:5; 1161*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1162*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 1163*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1164*d83cc019SAndroid Build Coastguard Worker } generic_gen5; 1165*d83cc019SAndroid Build Coastguard Worker 1166*d83cc019SAndroid Build Coastguard Worker struct { 1167*d83cc019SAndroid Build Coastguard Worker unsigned opcode:1; 1168*d83cc019SAndroid Build Coastguard Worker unsigned requester_type:1; 1169*d83cc019SAndroid Build Coastguard Worker unsigned pad:2; 1170*d83cc019SAndroid Build Coastguard Worker unsigned resource_select:1; 1171*d83cc019SAndroid Build Coastguard Worker unsigned pad1:11; 1172*d83cc019SAndroid Build Coastguard Worker unsigned response_length:4; 1173*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1174*d83cc019SAndroid Build Coastguard Worker unsigned msg_target:4; 1175*d83cc019SAndroid Build Coastguard Worker unsigned pad2:3; 1176*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1177*d83cc019SAndroid Build Coastguard Worker } thread_spawner; 1178*d83cc019SAndroid Build Coastguard Worker 1179*d83cc019SAndroid Build Coastguard Worker struct { 1180*d83cc019SAndroid Build Coastguard Worker unsigned opcode:1; 1181*d83cc019SAndroid Build Coastguard Worker unsigned requester_type:1; 1182*d83cc019SAndroid Build Coastguard Worker unsigned pad0:2; 1183*d83cc019SAndroid Build Coastguard Worker unsigned resource_select:1; 1184*d83cc019SAndroid Build Coastguard Worker unsigned pad1:14; 1185*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1186*d83cc019SAndroid Build Coastguard Worker unsigned response_length:5; 1187*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1188*d83cc019SAndroid Build Coastguard Worker unsigned pad2:2; 1189*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1190*d83cc019SAndroid Build Coastguard Worker } thread_spawner_gen5; 1191*d83cc019SAndroid Build Coastguard Worker 1192*d83cc019SAndroid Build Coastguard Worker /** G45 PRM, Volume 4, Section 6.1.1.1 */ 1193*d83cc019SAndroid Build Coastguard Worker struct { 1194*d83cc019SAndroid Build Coastguard Worker unsigned function:4; 1195*d83cc019SAndroid Build Coastguard Worker unsigned int_type:1; 1196*d83cc019SAndroid Build Coastguard Worker unsigned precision:1; 1197*d83cc019SAndroid Build Coastguard Worker unsigned saturate:1; 1198*d83cc019SAndroid Build Coastguard Worker unsigned data_type:1; 1199*d83cc019SAndroid Build Coastguard Worker unsigned pad0:8; 1200*d83cc019SAndroid Build Coastguard Worker unsigned response_length:4; 1201*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1202*d83cc019SAndroid Build Coastguard Worker unsigned msg_target:4; 1203*d83cc019SAndroid Build Coastguard Worker unsigned pad1:3; 1204*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1205*d83cc019SAndroid Build Coastguard Worker } math; 1206*d83cc019SAndroid Build Coastguard Worker 1207*d83cc019SAndroid Build Coastguard Worker /** Ironlake PRM, Volume 4 Part 1, Section 6.1.1.1 */ 1208*d83cc019SAndroid Build Coastguard Worker struct { 1209*d83cc019SAndroid Build Coastguard Worker unsigned function:4; 1210*d83cc019SAndroid Build Coastguard Worker unsigned int_type:1; 1211*d83cc019SAndroid Build Coastguard Worker unsigned precision:1; 1212*d83cc019SAndroid Build Coastguard Worker unsigned saturate:1; 1213*d83cc019SAndroid Build Coastguard Worker unsigned data_type:1; 1214*d83cc019SAndroid Build Coastguard Worker unsigned snapshot:1; 1215*d83cc019SAndroid Build Coastguard Worker unsigned pad0:10; 1216*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1217*d83cc019SAndroid Build Coastguard Worker unsigned response_length:5; 1218*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1219*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 1220*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1221*d83cc019SAndroid Build Coastguard Worker } math_gen5; 1222*d83cc019SAndroid Build Coastguard Worker 1223*d83cc019SAndroid Build Coastguard Worker /** G45 PRM, Volume 4, Section 4.8.1.1.1 [DevBW] and [DevCL] */ 1224*d83cc019SAndroid Build Coastguard Worker struct { 1225*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1226*d83cc019SAndroid Build Coastguard Worker unsigned sampler:4; 1227*d83cc019SAndroid Build Coastguard Worker unsigned return_format:2; 1228*d83cc019SAndroid Build Coastguard Worker unsigned msg_type:2; 1229*d83cc019SAndroid Build Coastguard Worker unsigned response_length:4; 1230*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1231*d83cc019SAndroid Build Coastguard Worker unsigned msg_target:4; 1232*d83cc019SAndroid Build Coastguard Worker unsigned pad1:3; 1233*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1234*d83cc019SAndroid Build Coastguard Worker } sampler; 1235*d83cc019SAndroid Build Coastguard Worker 1236*d83cc019SAndroid Build Coastguard Worker /** G45 PRM, Volume 4, Section 4.8.1.1.2 [DevCTG] */ 1237*d83cc019SAndroid Build Coastguard Worker struct { 1238*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1239*d83cc019SAndroid Build Coastguard Worker unsigned sampler:4; 1240*d83cc019SAndroid Build Coastguard Worker unsigned msg_type:4; 1241*d83cc019SAndroid Build Coastguard Worker unsigned response_length:4; 1242*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1243*d83cc019SAndroid Build Coastguard Worker unsigned msg_target:4; 1244*d83cc019SAndroid Build Coastguard Worker unsigned pad1:3; 1245*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1246*d83cc019SAndroid Build Coastguard Worker } sampler_g4x; 1247*d83cc019SAndroid Build Coastguard Worker 1248*d83cc019SAndroid Build Coastguard Worker /** Ironlake PRM, Volume 4 Part 1, Section 4.11.1.1.3 */ 1249*d83cc019SAndroid Build Coastguard Worker struct { 1250*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1251*d83cc019SAndroid Build Coastguard Worker unsigned sampler:4; 1252*d83cc019SAndroid Build Coastguard Worker unsigned msg_type:4; 1253*d83cc019SAndroid Build Coastguard Worker unsigned simd_mode:2; 1254*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 1255*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1256*d83cc019SAndroid Build Coastguard Worker unsigned response_length:5; 1257*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1258*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 1259*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1260*d83cc019SAndroid Build Coastguard Worker } sampler_gen5; 1261*d83cc019SAndroid Build Coastguard Worker 1262*d83cc019SAndroid Build Coastguard Worker struct { 1263*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1264*d83cc019SAndroid Build Coastguard Worker unsigned sampler:4; 1265*d83cc019SAndroid Build Coastguard Worker unsigned msg_type:5; 1266*d83cc019SAndroid Build Coastguard Worker unsigned simd_mode:2; 1267*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1268*d83cc019SAndroid Build Coastguard Worker unsigned response_length:5; 1269*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1270*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 1271*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1272*d83cc019SAndroid Build Coastguard Worker } sampler_gen7; 1273*d83cc019SAndroid Build Coastguard Worker 1274*d83cc019SAndroid Build Coastguard Worker struct brw_urb_immediate urb; 1275*d83cc019SAndroid Build Coastguard Worker 1276*d83cc019SAndroid Build Coastguard Worker struct { 1277*d83cc019SAndroid Build Coastguard Worker unsigned opcode:4; 1278*d83cc019SAndroid Build Coastguard Worker unsigned offset:6; 1279*d83cc019SAndroid Build Coastguard Worker unsigned swizzle_control:2; 1280*d83cc019SAndroid Build Coastguard Worker unsigned pad:1; 1281*d83cc019SAndroid Build Coastguard Worker unsigned allocate:1; 1282*d83cc019SAndroid Build Coastguard Worker unsigned used:1; 1283*d83cc019SAndroid Build Coastguard Worker unsigned complete:1; 1284*d83cc019SAndroid Build Coastguard Worker unsigned pad0:3; 1285*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1286*d83cc019SAndroid Build Coastguard Worker unsigned response_length:5; 1287*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1288*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 1289*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1290*d83cc019SAndroid Build Coastguard Worker } urb_gen5; 1291*d83cc019SAndroid Build Coastguard Worker 1292*d83cc019SAndroid Build Coastguard Worker struct { 1293*d83cc019SAndroid Build Coastguard Worker unsigned opcode:3; 1294*d83cc019SAndroid Build Coastguard Worker unsigned offset:11; 1295*d83cc019SAndroid Build Coastguard Worker unsigned swizzle_control:1; 1296*d83cc019SAndroid Build Coastguard Worker unsigned complete:1; 1297*d83cc019SAndroid Build Coastguard Worker unsigned per_slot_offset:1; 1298*d83cc019SAndroid Build Coastguard Worker unsigned pad0:2; 1299*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1300*d83cc019SAndroid Build Coastguard Worker unsigned response_length:5; 1301*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1302*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 1303*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1304*d83cc019SAndroid Build Coastguard Worker } urb_gen7; 1305*d83cc019SAndroid Build Coastguard Worker 1306*d83cc019SAndroid Build Coastguard Worker struct { 1307*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1308*d83cc019SAndroid Build Coastguard Worker unsigned search_path_index:3; 1309*d83cc019SAndroid Build Coastguard Worker unsigned lut_subindex:2; 1310*d83cc019SAndroid Build Coastguard Worker unsigned message_type:2; 1311*d83cc019SAndroid Build Coastguard Worker unsigned pad0:4; 1312*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1313*d83cc019SAndroid Build Coastguard Worker } vme_gen6; 1314*d83cc019SAndroid Build Coastguard Worker 1315*d83cc019SAndroid Build Coastguard Worker struct { 1316*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1317*d83cc019SAndroid Build Coastguard Worker unsigned pad0:5; 1318*d83cc019SAndroid Build Coastguard Worker unsigned message_type:2; 1319*d83cc019SAndroid Build Coastguard Worker unsigned pad1:4; 1320*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1321*d83cc019SAndroid Build Coastguard Worker } cre_gen75; 1322*d83cc019SAndroid Build Coastguard Worker 1323*d83cc019SAndroid Build Coastguard Worker /** 965 PRM, Volume 4, Section 5.10.1.1: Message Descriptor */ 1324*d83cc019SAndroid Build Coastguard Worker struct { 1325*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1326*d83cc019SAndroid Build Coastguard Worker unsigned msg_control:4; 1327*d83cc019SAndroid Build Coastguard Worker unsigned msg_type:2; 1328*d83cc019SAndroid Build Coastguard Worker unsigned target_cache:2; 1329*d83cc019SAndroid Build Coastguard Worker unsigned response_length:4; 1330*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1331*d83cc019SAndroid Build Coastguard Worker unsigned msg_target:4; 1332*d83cc019SAndroid Build Coastguard Worker unsigned pad1:3; 1333*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1334*d83cc019SAndroid Build Coastguard Worker } dp_read; 1335*d83cc019SAndroid Build Coastguard Worker 1336*d83cc019SAndroid Build Coastguard Worker /** G45 PRM, Volume 4, Section 5.10.1.1.2 */ 1337*d83cc019SAndroid Build Coastguard Worker struct { 1338*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1339*d83cc019SAndroid Build Coastguard Worker unsigned msg_control:3; 1340*d83cc019SAndroid Build Coastguard Worker unsigned msg_type:3; 1341*d83cc019SAndroid Build Coastguard Worker unsigned target_cache:2; 1342*d83cc019SAndroid Build Coastguard Worker unsigned response_length:4; 1343*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1344*d83cc019SAndroid Build Coastguard Worker unsigned msg_target:4; 1345*d83cc019SAndroid Build Coastguard Worker unsigned pad1:3; 1346*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1347*d83cc019SAndroid Build Coastguard Worker } dp_read_g4x; 1348*d83cc019SAndroid Build Coastguard Worker 1349*d83cc019SAndroid Build Coastguard Worker /** Ironlake PRM, Volume 4 Part 1, Section 5.10.2.1.2. */ 1350*d83cc019SAndroid Build Coastguard Worker struct { 1351*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1352*d83cc019SAndroid Build Coastguard Worker unsigned msg_control:4; 1353*d83cc019SAndroid Build Coastguard Worker unsigned msg_type:2; 1354*d83cc019SAndroid Build Coastguard Worker unsigned target_cache:2; 1355*d83cc019SAndroid Build Coastguard Worker unsigned pad0:3; 1356*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1357*d83cc019SAndroid Build Coastguard Worker unsigned response_length:5; 1358*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1359*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 1360*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1361*d83cc019SAndroid Build Coastguard Worker } dp_read_gen5; 1362*d83cc019SAndroid Build Coastguard Worker 1363*d83cc019SAndroid Build Coastguard Worker /** G45 PRM, Volume 4, Section 5.10.1.1.2. For both Gen4 and G45. */ 1364*d83cc019SAndroid Build Coastguard Worker struct { 1365*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1366*d83cc019SAndroid Build Coastguard Worker unsigned msg_control:3; 1367*d83cc019SAndroid Build Coastguard Worker unsigned last_render_target:1; 1368*d83cc019SAndroid Build Coastguard Worker unsigned msg_type:3; 1369*d83cc019SAndroid Build Coastguard Worker unsigned send_commit_msg:1; 1370*d83cc019SAndroid Build Coastguard Worker unsigned response_length:4; 1371*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1372*d83cc019SAndroid Build Coastguard Worker unsigned msg_target:4; 1373*d83cc019SAndroid Build Coastguard Worker unsigned pad1:3; 1374*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1375*d83cc019SAndroid Build Coastguard Worker } dp_write; 1376*d83cc019SAndroid Build Coastguard Worker 1377*d83cc019SAndroid Build Coastguard Worker /** Ironlake PRM, Volume 4 Part 1, Section 5.10.2.1.2. */ 1378*d83cc019SAndroid Build Coastguard Worker struct { 1379*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1380*d83cc019SAndroid Build Coastguard Worker unsigned msg_control:3; 1381*d83cc019SAndroid Build Coastguard Worker unsigned last_render_target:1; 1382*d83cc019SAndroid Build Coastguard Worker unsigned msg_type:3; 1383*d83cc019SAndroid Build Coastguard Worker unsigned send_commit_msg:1; 1384*d83cc019SAndroid Build Coastguard Worker unsigned pad0:3; 1385*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1386*d83cc019SAndroid Build Coastguard Worker unsigned response_length:5; 1387*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1388*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 1389*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1390*d83cc019SAndroid Build Coastguard Worker } dp_write_gen5; 1391*d83cc019SAndroid Build Coastguard Worker 1392*d83cc019SAndroid Build Coastguard Worker /** 1393*d83cc019SAndroid Build Coastguard Worker * Message for the Sandybridge Sampler Cache or Constant Cache Data Port. 1394*d83cc019SAndroid Build Coastguard Worker * 1395*d83cc019SAndroid Build Coastguard Worker * See the Sandybridge PRM, Volume 4 Part 1, Section 3.9.2.1.1. 1396*d83cc019SAndroid Build Coastguard Worker **/ 1397*d83cc019SAndroid Build Coastguard Worker struct { 1398*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1399*d83cc019SAndroid Build Coastguard Worker unsigned msg_control:5; 1400*d83cc019SAndroid Build Coastguard Worker unsigned msg_type:3; 1401*d83cc019SAndroid Build Coastguard Worker unsigned pad0:3; 1402*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1403*d83cc019SAndroid Build Coastguard Worker unsigned response_length:5; 1404*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1405*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 1406*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1407*d83cc019SAndroid Build Coastguard Worker } gen6_dp_sampler_const_cache; 1408*d83cc019SAndroid Build Coastguard Worker 1409*d83cc019SAndroid Build Coastguard Worker /** 1410*d83cc019SAndroid Build Coastguard Worker * Message for the Sandybridge Render Cache Data Port. 1411*d83cc019SAndroid Build Coastguard Worker * 1412*d83cc019SAndroid Build Coastguard Worker * Most fields are defined in the Sandybridge PRM, Volume 4 Part 1, 1413*d83cc019SAndroid Build Coastguard Worker * Section 3.9.2.1.1: Message Descriptor. 1414*d83cc019SAndroid Build Coastguard Worker * 1415*d83cc019SAndroid Build Coastguard Worker * "Slot Group Select" and "Last Render Target" are part of the 1416*d83cc019SAndroid Build Coastguard Worker * 5-bit message control for Render Target Write messages. See 1417*d83cc019SAndroid Build Coastguard Worker * Section 3.9.9.2.1 of the same volume. 1418*d83cc019SAndroid Build Coastguard Worker */ 1419*d83cc019SAndroid Build Coastguard Worker struct { 1420*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1421*d83cc019SAndroid Build Coastguard Worker unsigned msg_control:5; 1422*d83cc019SAndroid Build Coastguard Worker unsigned msg_type:4; 1423*d83cc019SAndroid Build Coastguard Worker unsigned send_commit_msg:1; 1424*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 1425*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1426*d83cc019SAndroid Build Coastguard Worker unsigned response_length:5; 1427*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1428*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 1429*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1430*d83cc019SAndroid Build Coastguard Worker } gen6_dp; 1431*d83cc019SAndroid Build Coastguard Worker 1432*d83cc019SAndroid Build Coastguard Worker /** 1433*d83cc019SAndroid Build Coastguard Worker * Message for any of the Gen7 Data Port caches. 1434*d83cc019SAndroid Build Coastguard Worker * 1435*d83cc019SAndroid Build Coastguard Worker * Most fields are defined in BSpec volume 5c.2 Data Port / Messages / 1436*d83cc019SAndroid Build Coastguard Worker * Data Port Messages / Message Descriptor. Once again, "Slot Group 1437*d83cc019SAndroid Build Coastguard Worker * Select" and "Last Render Target" are part of the 6-bit message 1438*d83cc019SAndroid Build Coastguard Worker * control for Render Target Writes. 1439*d83cc019SAndroid Build Coastguard Worker */ 1440*d83cc019SAndroid Build Coastguard Worker struct { 1441*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index:8; 1442*d83cc019SAndroid Build Coastguard Worker unsigned msg_control:6; 1443*d83cc019SAndroid Build Coastguard Worker unsigned msg_type:4; 1444*d83cc019SAndroid Build Coastguard Worker unsigned category:1; 1445*d83cc019SAndroid Build Coastguard Worker unsigned header_present:1; 1446*d83cc019SAndroid Build Coastguard Worker unsigned response_length:5; 1447*d83cc019SAndroid Build Coastguard Worker unsigned msg_length:4; 1448*d83cc019SAndroid Build Coastguard Worker unsigned pad2:2; 1449*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread:1; 1450*d83cc019SAndroid Build Coastguard Worker } gen7_dp; 1451*d83cc019SAndroid Build Coastguard Worker /** @} */ 1452*d83cc019SAndroid Build Coastguard Worker 1453*d83cc019SAndroid Build Coastguard Worker struct { 1454*d83cc019SAndroid Build Coastguard Worker unsigned src1_subreg_nr_high:1; 1455*d83cc019SAndroid Build Coastguard Worker unsigned src1_reg_nr:8; 1456*d83cc019SAndroid Build Coastguard Worker unsigned pad0:1; 1457*d83cc019SAndroid Build Coastguard Worker unsigned src2_rep_ctrl:1; 1458*d83cc019SAndroid Build Coastguard Worker unsigned src2_swizzle:8; 1459*d83cc019SAndroid Build Coastguard Worker unsigned src2_subreg_nr:3; 1460*d83cc019SAndroid Build Coastguard Worker unsigned src2_reg_nr:8; 1461*d83cc019SAndroid Build Coastguard Worker unsigned pad1:2; 1462*d83cc019SAndroid Build Coastguard Worker } da3src; 1463*d83cc019SAndroid Build Coastguard Worker 1464*d83cc019SAndroid Build Coastguard Worker int d; 1465*d83cc019SAndroid Build Coastguard Worker unsigned ud; 1466*d83cc019SAndroid Build Coastguard Worker float f; 1467*d83cc019SAndroid Build Coastguard Worker } bits3; 1468*d83cc019SAndroid Build Coastguard Worker }; 1469*d83cc019SAndroid Build Coastguard Worker 1470*d83cc019SAndroid Build Coastguard Worker struct brw_compact_instruction { 1471*d83cc019SAndroid Build Coastguard Worker struct { 1472*d83cc019SAndroid Build Coastguard Worker unsigned opcode:7; /* 0- 6 */ 1473*d83cc019SAndroid Build Coastguard Worker unsigned debug_control:1; /* 7- 7 */ 1474*d83cc019SAndroid Build Coastguard Worker unsigned control_index:5; /* 8-12 */ 1475*d83cc019SAndroid Build Coastguard Worker unsigned data_type_index:5; /* 13-17 */ 1476*d83cc019SAndroid Build Coastguard Worker unsigned sub_reg_index:5; /* 18-22 */ 1477*d83cc019SAndroid Build Coastguard Worker unsigned acc_wr_control:1; /* 23-23 */ 1478*d83cc019SAndroid Build Coastguard Worker unsigned conditionalmod:4; /* 24-27 */ 1479*d83cc019SAndroid Build Coastguard Worker unsigned flag_subreg_nr:1; /* 28-28 */ 1480*d83cc019SAndroid Build Coastguard Worker unsigned cmpt_ctrl:1; /* 29-29 */ 1481*d83cc019SAndroid Build Coastguard Worker unsigned src0_index:2; /* 30-31 */ 1482*d83cc019SAndroid Build Coastguard Worker } dw0; 1483*d83cc019SAndroid Build Coastguard Worker 1484*d83cc019SAndroid Build Coastguard Worker struct { 1485*d83cc019SAndroid Build Coastguard Worker unsigned src0_index:3; /* 32-24 */ 1486*d83cc019SAndroid Build Coastguard Worker unsigned src1_index:5; /* 35-39 */ 1487*d83cc019SAndroid Build Coastguard Worker unsigned dst_reg_nr:8; /* 40-47 */ 1488*d83cc019SAndroid Build Coastguard Worker unsigned src0_reg_nr:8; /* 48-55 */ 1489*d83cc019SAndroid Build Coastguard Worker unsigned src1_reg_nr:8; /* 56-63 */ 1490*d83cc019SAndroid Build Coastguard Worker } dw1; 1491*d83cc019SAndroid Build Coastguard Worker }; 1492*d83cc019SAndroid Build Coastguard Worker 1493*d83cc019SAndroid Build Coastguard Worker #endif 1494