103b705cfSriastradh /************************************************************************** 203b705cfSriastradh * 303b705cfSriastradh * Copyright 2005 Tungsten Graphics, Inc., Cedar Park, Texas. 403b705cfSriastradh * All Rights Reserved. 503b705cfSriastradh * 603b705cfSriastradh * Permission is hereby granted, free of charge, to any person obtaining a 703b705cfSriastradh * copy of this software and associated documentation files (the 803b705cfSriastradh * "Software"), to deal in the Software without restriction, including 903b705cfSriastradh * without limitation the rights to use, copy, modify, merge, publish, 1003b705cfSriastradh * distribute, sub license, and/or sell copies of the Software, and to 1103b705cfSriastradh * permit persons to whom the Software is furnished to do so, subject to 1203b705cfSriastradh * the following conditions: 1303b705cfSriastradh * 1403b705cfSriastradh * The above copyright notice and this permission notice (including the 1503b705cfSriastradh * next paragraph) shall be included in all copies or substantial portions 1603b705cfSriastradh * of the Software. 1703b705cfSriastradh * 1803b705cfSriastradh * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1903b705cfSriastradh * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2003b705cfSriastradh * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2103b705cfSriastradh * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 2203b705cfSriastradh * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2303b705cfSriastradh * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2403b705cfSriastradh * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2503b705cfSriastradh * 2603b705cfSriastradh **************************************************************************/ 2703b705cfSriastradh 2803b705cfSriastradh#ifndef BRW_STRUCTS_H 2903b705cfSriastradh#define BRW_STRUCTS_H 3003b705cfSriastradh 3103b705cfSriastradh/* Command packets: 3203b705cfSriastradh */ 3303b705cfSriastradhstruct header 3403b705cfSriastradh{ 3503b705cfSriastradh unsigned int length:16; 3603b705cfSriastradh unsigned int opcode:16; 3703b705cfSriastradh}; 3803b705cfSriastradh 3903b705cfSriastradh 4003b705cfSriastradhunion header_union 4103b705cfSriastradh{ 4203b705cfSriastradh struct header bits; 4303b705cfSriastradh unsigned int dword; 4403b705cfSriastradh}; 4503b705cfSriastradh 4603b705cfSriastradhstruct brw_3d_control 4703b705cfSriastradh{ 4803b705cfSriastradh struct 4903b705cfSriastradh { 5003b705cfSriastradh unsigned int length:8; 5103b705cfSriastradh unsigned int notify_enable:1; 5203b705cfSriastradh unsigned int pad:3; 5303b705cfSriastradh unsigned int wc_flush_enable:1; 5403b705cfSriastradh unsigned int depth_stall_enable:1; 5503b705cfSriastradh unsigned int operation:2; 5603b705cfSriastradh unsigned int opcode:16; 5703b705cfSriastradh } header; 5803b705cfSriastradh 5903b705cfSriastradh struct 6003b705cfSriastradh { 6103b705cfSriastradh unsigned int pad:2; 6203b705cfSriastradh unsigned int dest_addr_type:1; 6303b705cfSriastradh unsigned int dest_addr:29; 6403b705cfSriastradh } dest; 6503b705cfSriastradh 6603b705cfSriastradh unsigned int dword2; 6703b705cfSriastradh unsigned int dword3; 6803b705cfSriastradh}; 6903b705cfSriastradh 7003b705cfSriastradh 7103b705cfSriastradhstruct brw_3d_primitive 7203b705cfSriastradh{ 7303b705cfSriastradh struct 7403b705cfSriastradh { 7503b705cfSriastradh unsigned int length:8; 7603b705cfSriastradh unsigned int pad:2; 7703b705cfSriastradh unsigned int topology:5; 7803b705cfSriastradh unsigned int indexed:1; 7903b705cfSriastradh unsigned int opcode:16; 8003b705cfSriastradh } header; 8103b705cfSriastradh 8203b705cfSriastradh unsigned int verts_per_instance; 8303b705cfSriastradh unsigned int start_vert_location; 8403b705cfSriastradh unsigned int instance_count; 8503b705cfSriastradh unsigned int start_instance_location; 8603b705cfSriastradh unsigned int base_vert_location; 8703b705cfSriastradh}; 8803b705cfSriastradh 8903b705cfSriastradh/* These seem to be passed around as function args, so it works out 9003b705cfSriastradh * better to keep them as #defines: 9103b705cfSriastradh */ 9203b705cfSriastradh#define BRW_FLUSH_READ_CACHE 0x1 9303b705cfSriastradh#define BRW_FLUSH_STATE_CACHE 0x2 9403b705cfSriastradh#define BRW_INHIBIT_FLUSH_RENDER_CACHE 0x4 9503b705cfSriastradh#define BRW_FLUSH_SNAPSHOT_COUNTERS 0x8 9603b705cfSriastradh 9703b705cfSriastradhstruct brw_mi_flush 9803b705cfSriastradh{ 9903b705cfSriastradh unsigned int flags:4; 10003b705cfSriastradh unsigned int pad:12; 10103b705cfSriastradh unsigned int opcode:16; 10203b705cfSriastradh}; 10303b705cfSriastradh 10403b705cfSriastradhstruct brw_vf_statistics 10503b705cfSriastradh{ 10603b705cfSriastradh unsigned int statistics_enable:1; 10703b705cfSriastradh unsigned int pad:15; 10803b705cfSriastradh unsigned int opcode:16; 10903b705cfSriastradh}; 11003b705cfSriastradh 11103b705cfSriastradh 11203b705cfSriastradh 11303b705cfSriastradhstruct brw_binding_table_pointers 11403b705cfSriastradh{ 11503b705cfSriastradh struct header header; 11603b705cfSriastradh unsigned int vs; 11703b705cfSriastradh unsigned int gs; 11803b705cfSriastradh unsigned int clp; 11903b705cfSriastradh unsigned int sf; 12003b705cfSriastradh unsigned int wm; 12103b705cfSriastradh}; 12203b705cfSriastradh 12303b705cfSriastradh 12403b705cfSriastradhstruct brw_blend_constant_color 12503b705cfSriastradh{ 12603b705cfSriastradh struct header header; 12703b705cfSriastradh float blend_constant_color[4]; 12803b705cfSriastradh}; 12903b705cfSriastradh 13003b705cfSriastradh 13103b705cfSriastradhstruct brw_depthbuffer 13203b705cfSriastradh{ 13303b705cfSriastradh union header_union header; 13403b705cfSriastradh 13503b705cfSriastradh union { 13603b705cfSriastradh struct { 13703b705cfSriastradh unsigned int pitch:18; 13803b705cfSriastradh unsigned int format:3; 13903b705cfSriastradh unsigned int pad:4; 14003b705cfSriastradh unsigned int depth_offset_disable:1; 14103b705cfSriastradh unsigned int tile_walk:1; 14203b705cfSriastradh unsigned int tiled_surface:1; 14303b705cfSriastradh unsigned int pad2:1; 14403b705cfSriastradh unsigned int surface_type:3; 14503b705cfSriastradh } bits; 14603b705cfSriastradh unsigned int dword; 14703b705cfSriastradh } dword1; 14803b705cfSriastradh 14903b705cfSriastradh unsigned int dword2_base_addr; 15003b705cfSriastradh 15103b705cfSriastradh union { 15203b705cfSriastradh struct { 15303b705cfSriastradh unsigned int pad:1; 15403b705cfSriastradh unsigned int mipmap_layout:1; 15503b705cfSriastradh unsigned int lod:4; 15603b705cfSriastradh unsigned int width:13; 15703b705cfSriastradh unsigned int height:13; 15803b705cfSriastradh } bits; 15903b705cfSriastradh unsigned int dword; 16003b705cfSriastradh } dword3; 16103b705cfSriastradh 16203b705cfSriastradh union { 16303b705cfSriastradh struct { 16403b705cfSriastradh unsigned int pad:12; 16503b705cfSriastradh unsigned int min_array_element:9; 16603b705cfSriastradh unsigned int depth:11; 16703b705cfSriastradh } bits; 16803b705cfSriastradh unsigned int dword; 16903b705cfSriastradh } dword4; 17003b705cfSriastradh}; 17103b705cfSriastradh 17203b705cfSriastradhstruct brw_drawrect 17303b705cfSriastradh{ 17403b705cfSriastradh struct header header; 17503b705cfSriastradh unsigned int xmin:16; 17603b705cfSriastradh unsigned int ymin:16; 17703b705cfSriastradh unsigned int xmax:16; 17803b705cfSriastradh unsigned int ymax:16; 17903b705cfSriastradh unsigned int xorg:16; 18003b705cfSriastradh unsigned int yorg:16; 18103b705cfSriastradh}; 18203b705cfSriastradh 18303b705cfSriastradh 18403b705cfSriastradh 18503b705cfSriastradh 18603b705cfSriastradhstruct brw_global_depth_offset_clamp 18703b705cfSriastradh{ 18803b705cfSriastradh struct header header; 18903b705cfSriastradh float depth_offset_clamp; 19003b705cfSriastradh}; 19103b705cfSriastradh 19203b705cfSriastradhstruct brw_indexbuffer 19303b705cfSriastradh{ 19403b705cfSriastradh union { 19503b705cfSriastradh struct 19603b705cfSriastradh { 19703b705cfSriastradh unsigned int length:8; 19803b705cfSriastradh unsigned int index_format:2; 19903b705cfSriastradh unsigned int cut_index_enable:1; 20003b705cfSriastradh unsigned int pad:5; 20103b705cfSriastradh unsigned int opcode:16; 20203b705cfSriastradh } bits; 20303b705cfSriastradh unsigned int dword; 20403b705cfSriastradh 20503b705cfSriastradh } header; 20603b705cfSriastradh 20703b705cfSriastradh unsigned int buffer_start; 20803b705cfSriastradh unsigned int buffer_end; 20903b705cfSriastradh}; 21003b705cfSriastradh 21103b705cfSriastradh 21203b705cfSriastradhstruct brw_line_stipple 21303b705cfSriastradh{ 21403b705cfSriastradh struct header header; 21503b705cfSriastradh 21603b705cfSriastradh struct 21703b705cfSriastradh { 21803b705cfSriastradh unsigned int pattern:16; 21903b705cfSriastradh unsigned int pad:16; 22003b705cfSriastradh } bits0; 22103b705cfSriastradh 22203b705cfSriastradh struct 22303b705cfSriastradh { 22403b705cfSriastradh unsigned int repeat_count:9; 22503b705cfSriastradh unsigned int pad:7; 22603b705cfSriastradh unsigned int inverse_repeat_count:16; 22703b705cfSriastradh } bits1; 22803b705cfSriastradh}; 22903b705cfSriastradh 23003b705cfSriastradh 23103b705cfSriastradhstruct brw_pipelined_state_pointers 23203b705cfSriastradh{ 23303b705cfSriastradh struct header header; 23403b705cfSriastradh 23503b705cfSriastradh struct { 23603b705cfSriastradh unsigned int pad:5; 23703b705cfSriastradh unsigned int offset:27; 23803b705cfSriastradh } vs; 23903b705cfSriastradh 24003b705cfSriastradh struct 24103b705cfSriastradh { 24203b705cfSriastradh unsigned int enable:1; 24303b705cfSriastradh unsigned int pad:4; 24403b705cfSriastradh unsigned int offset:27; 24503b705cfSriastradh } gs; 24603b705cfSriastradh 24703b705cfSriastradh struct 24803b705cfSriastradh { 24903b705cfSriastradh unsigned int enable:1; 25003b705cfSriastradh unsigned int pad:4; 25103b705cfSriastradh unsigned int offset:27; 25203b705cfSriastradh } clp; 25303b705cfSriastradh 25403b705cfSriastradh struct 25503b705cfSriastradh { 25603b705cfSriastradh unsigned int pad:5; 25703b705cfSriastradh unsigned int offset:27; 25803b705cfSriastradh } sf; 25903b705cfSriastradh 26003b705cfSriastradh struct 26103b705cfSriastradh { 26203b705cfSriastradh unsigned int pad:5; 26303b705cfSriastradh unsigned int offset:27; 26403b705cfSriastradh } wm; 26503b705cfSriastradh 26603b705cfSriastradh struct 26703b705cfSriastradh { 26803b705cfSriastradh unsigned int pad:5; 26903b705cfSriastradh unsigned int offset:27; /* KW: check me! */ 27003b705cfSriastradh } cc; 27103b705cfSriastradh}; 27203b705cfSriastradh 27303b705cfSriastradh 27403b705cfSriastradhstruct brw_polygon_stipple_offset 27503b705cfSriastradh{ 27603b705cfSriastradh struct header header; 27703b705cfSriastradh 27803b705cfSriastradh struct { 27903b705cfSriastradh unsigned int y_offset:5; 28003b705cfSriastradh unsigned int pad:3; 28103b705cfSriastradh unsigned int x_offset:5; 28203b705cfSriastradh unsigned int pad0:19; 28303b705cfSriastradh } bits0; 28403b705cfSriastradh}; 28503b705cfSriastradh 28603b705cfSriastradh 28703b705cfSriastradh 28803b705cfSriastradhstruct brw_polygon_stipple 28903b705cfSriastradh{ 29003b705cfSriastradh struct header header; 29103b705cfSriastradh unsigned int stipple[32]; 29203b705cfSriastradh}; 29303b705cfSriastradh 29403b705cfSriastradh 29503b705cfSriastradh 29603b705cfSriastradhstruct brw_pipeline_select 29703b705cfSriastradh{ 29803b705cfSriastradh struct 29903b705cfSriastradh { 30003b705cfSriastradh unsigned int pipeline_select:1; 30103b705cfSriastradh unsigned int pad:15; 30203b705cfSriastradh unsigned int opcode:16; 30303b705cfSriastradh } header; 30403b705cfSriastradh}; 30503b705cfSriastradh 30603b705cfSriastradh 30703b705cfSriastradhstruct brw_pipe_control 30803b705cfSriastradh{ 30903b705cfSriastradh struct 31003b705cfSriastradh { 31103b705cfSriastradh unsigned int length:8; 31203b705cfSriastradh unsigned int notify_enable:1; 31303b705cfSriastradh unsigned int pad:2; 31403b705cfSriastradh unsigned int instruction_state_cache_flush_enable:1; 31503b705cfSriastradh unsigned int write_cache_flush_enable:1; 31603b705cfSriastradh unsigned int depth_stall_enable:1; 31703b705cfSriastradh unsigned int post_sync_operation:2; 31803b705cfSriastradh 31903b705cfSriastradh unsigned int opcode:16; 32003b705cfSriastradh } header; 32103b705cfSriastradh 32203b705cfSriastradh struct 32303b705cfSriastradh { 32403b705cfSriastradh unsigned int pad:2; 32503b705cfSriastradh unsigned int dest_addr_type:1; 32603b705cfSriastradh unsigned int dest_addr:29; 32703b705cfSriastradh } bits1; 32803b705cfSriastradh 32903b705cfSriastradh unsigned int data0; 33003b705cfSriastradh unsigned int data1; 33103b705cfSriastradh}; 33203b705cfSriastradh 33303b705cfSriastradh 33403b705cfSriastradhstruct brw_urb_fence 33503b705cfSriastradh{ 33603b705cfSriastradh struct 33703b705cfSriastradh { 33803b705cfSriastradh unsigned int length:8; 33903b705cfSriastradh unsigned int vs_realloc:1; 34003b705cfSriastradh unsigned int gs_realloc:1; 34103b705cfSriastradh unsigned int clp_realloc:1; 34203b705cfSriastradh unsigned int sf_realloc:1; 34303b705cfSriastradh unsigned int vfe_realloc:1; 34403b705cfSriastradh unsigned int cs_realloc:1; 34503b705cfSriastradh unsigned int pad:2; 34603b705cfSriastradh unsigned int opcode:16; 34703b705cfSriastradh } header; 34803b705cfSriastradh 34903b705cfSriastradh struct 35003b705cfSriastradh { 35103b705cfSriastradh unsigned int vs_fence:10; 35203b705cfSriastradh unsigned int gs_fence:10; 35303b705cfSriastradh unsigned int clp_fence:10; 35403b705cfSriastradh unsigned int pad:2; 35503b705cfSriastradh } bits0; 35603b705cfSriastradh 35703b705cfSriastradh struct 35803b705cfSriastradh { 35903b705cfSriastradh unsigned int sf_fence:10; 36003b705cfSriastradh unsigned int vf_fence:10; 36103b705cfSriastradh unsigned int cs_fence:10; 36203b705cfSriastradh unsigned int pad:2; 36303b705cfSriastradh } bits1; 36403b705cfSriastradh}; 36503b705cfSriastradh 36603b705cfSriastradhstruct brw_constant_buffer_state /* previously brw_command_streamer */ 36703b705cfSriastradh{ 36803b705cfSriastradh struct header header; 36903b705cfSriastradh 37003b705cfSriastradh struct 37103b705cfSriastradh { 37203b705cfSriastradh unsigned int nr_urb_entries:3; 37303b705cfSriastradh unsigned int pad:1; 37403b705cfSriastradh unsigned int urb_entry_size:5; 37503b705cfSriastradh unsigned int pad0:23; 37603b705cfSriastradh } bits0; 37703b705cfSriastradh}; 37803b705cfSriastradh 37903b705cfSriastradhstruct brw_constant_buffer 38003b705cfSriastradh{ 38103b705cfSriastradh struct 38203b705cfSriastradh { 38303b705cfSriastradh unsigned int length:8; 38403b705cfSriastradh unsigned int valid:1; 38503b705cfSriastradh unsigned int pad:7; 38603b705cfSriastradh unsigned int opcode:16; 38703b705cfSriastradh } header; 38803b705cfSriastradh 38903b705cfSriastradh struct 39003b705cfSriastradh { 39103b705cfSriastradh unsigned int buffer_length:6; 39203b705cfSriastradh unsigned int buffer_address:26; 39303b705cfSriastradh } bits0; 39403b705cfSriastradh}; 39503b705cfSriastradh 39603b705cfSriastradhstruct brw_state_base_address 39703b705cfSriastradh{ 39803b705cfSriastradh struct header header; 39903b705cfSriastradh 40003b705cfSriastradh struct 40103b705cfSriastradh { 40203b705cfSriastradh unsigned int modify_enable:1; 40303b705cfSriastradh unsigned int pad:4; 40403b705cfSriastradh unsigned int general_state_address:27; 40503b705cfSriastradh } bits0; 40603b705cfSriastradh 40703b705cfSriastradh struct 40803b705cfSriastradh { 40903b705cfSriastradh unsigned int modify_enable:1; 41003b705cfSriastradh unsigned int pad:4; 41103b705cfSriastradh unsigned int surface_state_address:27; 41203b705cfSriastradh } bits1; 41303b705cfSriastradh 41403b705cfSriastradh struct 41503b705cfSriastradh { 41603b705cfSriastradh unsigned int modify_enable:1; 41703b705cfSriastradh unsigned int pad:4; 41803b705cfSriastradh unsigned int indirect_object_state_address:27; 41903b705cfSriastradh } bits2; 42003b705cfSriastradh 42103b705cfSriastradh struct 42203b705cfSriastradh { 42303b705cfSriastradh unsigned int modify_enable:1; 42403b705cfSriastradh unsigned int pad:11; 42503b705cfSriastradh unsigned int general_state_upper_bound:20; 42603b705cfSriastradh } bits3; 42703b705cfSriastradh 42803b705cfSriastradh struct 42903b705cfSriastradh { 43003b705cfSriastradh unsigned int modify_enable:1; 43103b705cfSriastradh unsigned int pad:11; 43203b705cfSriastradh unsigned int indirect_object_state_upper_bound:20; 43303b705cfSriastradh } bits4; 43403b705cfSriastradh}; 43503b705cfSriastradh 43603b705cfSriastradhstruct brw_state_prefetch 43703b705cfSriastradh{ 43803b705cfSriastradh struct header header; 43903b705cfSriastradh 44003b705cfSriastradh struct 44103b705cfSriastradh { 44203b705cfSriastradh unsigned int prefetch_count:3; 44303b705cfSriastradh unsigned int pad:3; 44403b705cfSriastradh unsigned int prefetch_pointer:26; 44503b705cfSriastradh } bits0; 44603b705cfSriastradh}; 44703b705cfSriastradh 44803b705cfSriastradhstruct brw_system_instruction_pointer 44903b705cfSriastradh{ 45003b705cfSriastradh struct header header; 45103b705cfSriastradh 45203b705cfSriastradh struct 45303b705cfSriastradh { 45403b705cfSriastradh unsigned int pad:4; 45503b705cfSriastradh unsigned int system_instruction_pointer:28; 45603b705cfSriastradh } bits0; 45703b705cfSriastradh}; 45803b705cfSriastradh 45903b705cfSriastradh 46003b705cfSriastradh 46103b705cfSriastradh 46203b705cfSriastradh/* State structs for the various fixed function units: 46303b705cfSriastradh */ 46403b705cfSriastradh 46503b705cfSriastradh 46603b705cfSriastradhstruct thread0 46703b705cfSriastradh{ 46803b705cfSriastradh unsigned int pad0:1; 46903b705cfSriastradh unsigned int grf_reg_count:3; 47003b705cfSriastradh unsigned int pad1:2; 47103b705cfSriastradh unsigned int kernel_start_pointer:26; 47203b705cfSriastradh}; 47303b705cfSriastradh 47403b705cfSriastradhstruct thread1 47503b705cfSriastradh{ 47603b705cfSriastradh unsigned int ext_halt_exception_enable:1; 47703b705cfSriastradh unsigned int sw_exception_enable:1; 47803b705cfSriastradh unsigned int mask_stack_exception_enable:1; 47903b705cfSriastradh unsigned int timeout_exception_enable:1; 48003b705cfSriastradh unsigned int illegal_op_exception_enable:1; 48103b705cfSriastradh unsigned int pad0:3; 48203b705cfSriastradh unsigned int depth_coef_urb_read_offset:6; /* WM only */ 48303b705cfSriastradh unsigned int pad1:2; 48403b705cfSriastradh unsigned int floating_point_mode:1; 48503b705cfSriastradh unsigned int thread_priority:1; 48603b705cfSriastradh unsigned int binding_table_entry_count:8; 48703b705cfSriastradh unsigned int pad3:5; 48803b705cfSriastradh unsigned int single_program_flow:1; 48903b705cfSriastradh}; 49003b705cfSriastradh 49103b705cfSriastradhstruct thread2 49203b705cfSriastradh{ 49303b705cfSriastradh unsigned int per_thread_scratch_space:4; 49403b705cfSriastradh unsigned int pad0:6; 49503b705cfSriastradh unsigned int scratch_space_base_pointer:22; 49603b705cfSriastradh}; 49703b705cfSriastradh 49803b705cfSriastradh 49903b705cfSriastradhstruct thread3 50003b705cfSriastradh{ 50103b705cfSriastradh unsigned int dispatch_grf_start_reg:4; 50203b705cfSriastradh unsigned int urb_entry_read_offset:6; 50303b705cfSriastradh unsigned int pad0:1; 50403b705cfSriastradh unsigned int urb_entry_read_length:6; 50503b705cfSriastradh unsigned int pad1:1; 50603b705cfSriastradh unsigned int const_urb_entry_read_offset:6; 50703b705cfSriastradh unsigned int pad2:1; 50803b705cfSriastradh unsigned int const_urb_entry_read_length:6; 50903b705cfSriastradh unsigned int pad3:1; 51003b705cfSriastradh}; 51103b705cfSriastradh 51203b705cfSriastradh 51303b705cfSriastradh 51403b705cfSriastradhstruct brw_clip_unit_state 51503b705cfSriastradh{ 51603b705cfSriastradh struct thread0 thread0; 51703b705cfSriastradh struct thread1 thread1; 51803b705cfSriastradh struct thread2 thread2; 51903b705cfSriastradh struct thread3 thread3; 52003b705cfSriastradh 52103b705cfSriastradh struct 52203b705cfSriastradh { 52303b705cfSriastradh unsigned int pad0:9; 52403b705cfSriastradh unsigned int gs_output_stats:1; /* not always */ 52503b705cfSriastradh unsigned int stats_enable:1; 52603b705cfSriastradh unsigned int nr_urb_entries:7; 52703b705cfSriastradh unsigned int pad1:1; 52803b705cfSriastradh unsigned int urb_entry_allocation_size:5; 52903b705cfSriastradh unsigned int pad2:1; 53003b705cfSriastradh unsigned int max_threads:6; /* may be less */ 53103b705cfSriastradh unsigned int pad3:1; 53203b705cfSriastradh } thread4; 53303b705cfSriastradh 53403b705cfSriastradh struct 53503b705cfSriastradh { 53603b705cfSriastradh unsigned int pad0:13; 53703b705cfSriastradh unsigned int clip_mode:3; 53803b705cfSriastradh unsigned int userclip_enable_flags:8; 53903b705cfSriastradh unsigned int userclip_must_clip:1; 54003b705cfSriastradh unsigned int pad1:1; 54103b705cfSriastradh unsigned int guard_band_enable:1; 54203b705cfSriastradh unsigned int viewport_z_clip_enable:1; 54303b705cfSriastradh unsigned int viewport_xy_clip_enable:1; 54403b705cfSriastradh unsigned int vertex_position_space:1; 54503b705cfSriastradh unsigned int api_mode:1; 54603b705cfSriastradh unsigned int pad2:1; 54703b705cfSriastradh } clip5; 54803b705cfSriastradh 54903b705cfSriastradh struct 55003b705cfSriastradh { 55103b705cfSriastradh unsigned int pad0:5; 55203b705cfSriastradh unsigned int clipper_viewport_state_ptr:27; 55303b705cfSriastradh } clip6; 55403b705cfSriastradh 55503b705cfSriastradh 55603b705cfSriastradh float viewport_xmin; 55703b705cfSriastradh float viewport_xmax; 55803b705cfSriastradh float viewport_ymin; 55903b705cfSriastradh float viewport_ymax; 56003b705cfSriastradh}; 56103b705cfSriastradh 56203b705cfSriastradh 56303b705cfSriastradh 56403b705cfSriastradhstruct brw_cc_unit_state 56503b705cfSriastradh{ 56603b705cfSriastradh struct 56703b705cfSriastradh { 56803b705cfSriastradh unsigned int pad0:3; 56903b705cfSriastradh unsigned int bf_stencil_pass_depth_pass_op:3; 57003b705cfSriastradh unsigned int bf_stencil_pass_depth_fail_op:3; 57103b705cfSriastradh unsigned int bf_stencil_fail_op:3; 57203b705cfSriastradh unsigned int bf_stencil_func:3; 57303b705cfSriastradh unsigned int bf_stencil_enable:1; 57403b705cfSriastradh unsigned int pad1:2; 57503b705cfSriastradh unsigned int stencil_write_enable:1; 57603b705cfSriastradh unsigned int stencil_pass_depth_pass_op:3; 57703b705cfSriastradh unsigned int stencil_pass_depth_fail_op:3; 57803b705cfSriastradh unsigned int stencil_fail_op:3; 57903b705cfSriastradh unsigned int stencil_func:3; 58003b705cfSriastradh unsigned int stencil_enable:1; 58103b705cfSriastradh } cc0; 58203b705cfSriastradh 58303b705cfSriastradh 58403b705cfSriastradh struct 58503b705cfSriastradh { 58603b705cfSriastradh unsigned int bf_stencil_ref:8; 58703b705cfSriastradh unsigned int stencil_write_mask:8; 58803b705cfSriastradh unsigned int stencil_test_mask:8; 58903b705cfSriastradh unsigned int stencil_ref:8; 59003b705cfSriastradh } cc1; 59103b705cfSriastradh 59203b705cfSriastradh 59303b705cfSriastradh struct 59403b705cfSriastradh { 59503b705cfSriastradh unsigned int logicop_enable:1; 59603b705cfSriastradh unsigned int pad0:10; 59703b705cfSriastradh unsigned int depth_write_enable:1; 59803b705cfSriastradh unsigned int depth_test_function:3; 59903b705cfSriastradh unsigned int depth_test:1; 60003b705cfSriastradh unsigned int bf_stencil_write_mask:8; 60103b705cfSriastradh unsigned int bf_stencil_test_mask:8; 60203b705cfSriastradh } cc2; 60303b705cfSriastradh 60403b705cfSriastradh 60503b705cfSriastradh struct 60603b705cfSriastradh { 60703b705cfSriastradh unsigned int pad0:8; 60803b705cfSriastradh unsigned int alpha_test_func:3; 60903b705cfSriastradh unsigned int alpha_test:1; 61003b705cfSriastradh unsigned int blend_enable:1; 61103b705cfSriastradh unsigned int ia_blend_enable:1; 61203b705cfSriastradh unsigned int pad1:1; 61303b705cfSriastradh unsigned int alpha_test_format:1; 61403b705cfSriastradh unsigned int pad2:16; 61503b705cfSriastradh } cc3; 61603b705cfSriastradh 61703b705cfSriastradh struct 61803b705cfSriastradh { 61903b705cfSriastradh unsigned int pad0:5; 62003b705cfSriastradh unsigned int cc_viewport_state_offset:27; 62103b705cfSriastradh } cc4; 62203b705cfSriastradh 62303b705cfSriastradh struct 62403b705cfSriastradh { 62503b705cfSriastradh unsigned int pad0:2; 62603b705cfSriastradh unsigned int ia_dest_blend_factor:5; 62703b705cfSriastradh unsigned int ia_src_blend_factor:5; 62803b705cfSriastradh unsigned int ia_blend_function:3; 62903b705cfSriastradh unsigned int statistics_enable:1; 63003b705cfSriastradh unsigned int logicop_func:4; 63103b705cfSriastradh unsigned int pad1:11; 63203b705cfSriastradh unsigned int dither_enable:1; 63303b705cfSriastradh } cc5; 63403b705cfSriastradh 63503b705cfSriastradh struct 63603b705cfSriastradh { 63703b705cfSriastradh unsigned int clamp_post_alpha_blend:1; 63803b705cfSriastradh unsigned int clamp_pre_alpha_blend:1; 63903b705cfSriastradh unsigned int clamp_range:2; 64003b705cfSriastradh unsigned int pad0:11; 64103b705cfSriastradh unsigned int y_dither_offset:2; 64203b705cfSriastradh unsigned int x_dither_offset:2; 64303b705cfSriastradh unsigned int dest_blend_factor:5; 64403b705cfSriastradh unsigned int src_blend_factor:5; 64503b705cfSriastradh unsigned int blend_function:3; 64603b705cfSriastradh } cc6; 64703b705cfSriastradh 64803b705cfSriastradh struct { 64903b705cfSriastradh union { 65003b705cfSriastradh float f; 65103b705cfSriastradh unsigned char ub[4]; 65203b705cfSriastradh } alpha_ref; 65303b705cfSriastradh } cc7; 65403b705cfSriastradh}; 65503b705cfSriastradh 65603b705cfSriastradh 65703b705cfSriastradh 65803b705cfSriastradhstruct brw_sf_unit_state 65903b705cfSriastradh{ 66003b705cfSriastradh struct thread0 thread0; 66103b705cfSriastradh struct { 66203b705cfSriastradh unsigned int pad0:7; 66303b705cfSriastradh unsigned int sw_exception_enable:1; 66403b705cfSriastradh unsigned int pad1:3; 66503b705cfSriastradh unsigned int mask_stack_exception_enable:1; 66603b705cfSriastradh unsigned int pad2:1; 66703b705cfSriastradh unsigned int illegal_op_exception_enable:1; 66803b705cfSriastradh unsigned int pad3:2; 66903b705cfSriastradh unsigned int floating_point_mode:1; 67003b705cfSriastradh unsigned int thread_priority:1; 67103b705cfSriastradh unsigned int binding_table_entry_count:8; 67203b705cfSriastradh unsigned int pad4:5; 67303b705cfSriastradh unsigned int single_program_flow:1; 67403b705cfSriastradh } sf1; 67503b705cfSriastradh 67603b705cfSriastradh struct thread2 thread2; 67703b705cfSriastradh struct thread3 thread3; 67803b705cfSriastradh 67903b705cfSriastradh struct 68003b705cfSriastradh { 68103b705cfSriastradh unsigned int pad0:10; 68203b705cfSriastradh unsigned int stats_enable:1; 68303b705cfSriastradh unsigned int nr_urb_entries:7; 68403b705cfSriastradh unsigned int pad1:1; 68503b705cfSriastradh unsigned int urb_entry_allocation_size:5; 68603b705cfSriastradh unsigned int pad2:1; 68703b705cfSriastradh unsigned int max_threads:6; 68803b705cfSriastradh unsigned int pad3:1; 68903b705cfSriastradh } thread4; 69003b705cfSriastradh 69103b705cfSriastradh struct 69203b705cfSriastradh { 69303b705cfSriastradh unsigned int front_winding:1; 69403b705cfSriastradh unsigned int viewport_transform:1; 69503b705cfSriastradh unsigned int pad0:3; 69603b705cfSriastradh unsigned int sf_viewport_state_offset:27; 69703b705cfSriastradh } sf5; 69803b705cfSriastradh 69903b705cfSriastradh struct 70003b705cfSriastradh { 70103b705cfSriastradh unsigned int pad0:9; 70203b705cfSriastradh unsigned int dest_org_vbias:4; 70303b705cfSriastradh unsigned int dest_org_hbias:4; 70403b705cfSriastradh unsigned int scissor:1; 70503b705cfSriastradh unsigned int disable_2x2_trifilter:1; 70603b705cfSriastradh unsigned int disable_zero_pix_trifilter:1; 70703b705cfSriastradh unsigned int point_rast_rule:2; 70803b705cfSriastradh unsigned int line_endcap_aa_region_width:2; 70903b705cfSriastradh unsigned int line_width:4; 71003b705cfSriastradh unsigned int fast_scissor_disable:1; 71103b705cfSriastradh unsigned int cull_mode:2; 71203b705cfSriastradh unsigned int aa_enable:1; 71303b705cfSriastradh } sf6; 71403b705cfSriastradh 71503b705cfSriastradh struct 71603b705cfSriastradh { 71703b705cfSriastradh unsigned int point_size:11; 71803b705cfSriastradh unsigned int use_point_size_state:1; 71903b705cfSriastradh unsigned int subpixel_precision:1; 72003b705cfSriastradh unsigned int sprite_point:1; 72103b705cfSriastradh unsigned int pad0:11; 72203b705cfSriastradh unsigned int trifan_pv:2; 72303b705cfSriastradh unsigned int linestrip_pv:2; 72403b705cfSriastradh unsigned int tristrip_pv:2; 72503b705cfSriastradh unsigned int line_last_pixel_enable:1; 72603b705cfSriastradh } sf7; 72703b705cfSriastradh 72803b705cfSriastradh}; 72903b705cfSriastradh 73003b705cfSriastradh 73103b705cfSriastradhstruct brw_gs_unit_state 73203b705cfSriastradh{ 73303b705cfSriastradh struct thread0 thread0; 73403b705cfSriastradh struct thread1 thread1; 73503b705cfSriastradh struct thread2 thread2; 73603b705cfSriastradh struct thread3 thread3; 73703b705cfSriastradh 73803b705cfSriastradh struct 73903b705cfSriastradh { 74003b705cfSriastradh unsigned int pad0:10; 74103b705cfSriastradh unsigned int stats_enable:1; 74203b705cfSriastradh unsigned int nr_urb_entries:7; 74303b705cfSriastradh unsigned int pad1:1; 74403b705cfSriastradh unsigned int urb_entry_allocation_size:5; 74503b705cfSriastradh unsigned int pad2:1; 74603b705cfSriastradh unsigned int max_threads:1; 74703b705cfSriastradh unsigned int pad3:6; 74803b705cfSriastradh } thread4; 74903b705cfSriastradh 75003b705cfSriastradh struct 75103b705cfSriastradh { 75203b705cfSriastradh unsigned int sampler_count:3; 75303b705cfSriastradh unsigned int pad0:2; 75403b705cfSriastradh unsigned int sampler_state_pointer:27; 75503b705cfSriastradh } gs5; 75603b705cfSriastradh 75703b705cfSriastradh 75803b705cfSriastradh struct 75903b705cfSriastradh { 76003b705cfSriastradh unsigned int max_vp_index:4; 76103b705cfSriastradh unsigned int pad0:26; 76203b705cfSriastradh unsigned int reorder_enable:1; 76303b705cfSriastradh unsigned int pad1:1; 76403b705cfSriastradh } gs6; 76503b705cfSriastradh}; 76603b705cfSriastradh 76703b705cfSriastradh 76803b705cfSriastradhstruct brw_vs_unit_state 76903b705cfSriastradh{ 77003b705cfSriastradh struct thread0 thread0; 77103b705cfSriastradh struct thread1 thread1; 77203b705cfSriastradh struct thread2 thread2; 77303b705cfSriastradh struct thread3 thread3; 77403b705cfSriastradh 77503b705cfSriastradh struct 77603b705cfSriastradh { 77703b705cfSriastradh unsigned int pad0:10; 77803b705cfSriastradh unsigned int stats_enable:1; 77903b705cfSriastradh unsigned int nr_urb_entries:7; 78003b705cfSriastradh unsigned int pad1:1; 78103b705cfSriastradh unsigned int urb_entry_allocation_size:5; 78203b705cfSriastradh unsigned int pad2:1; 78303b705cfSriastradh unsigned int max_threads:4; 78403b705cfSriastradh unsigned int pad3:3; 78503b705cfSriastradh } thread4; 78603b705cfSriastradh 78703b705cfSriastradh struct 78803b705cfSriastradh { 78903b705cfSriastradh unsigned int sampler_count:3; 79003b705cfSriastradh unsigned int pad0:2; 79103b705cfSriastradh unsigned int sampler_state_pointer:27; 79203b705cfSriastradh } vs5; 79303b705cfSriastradh 79403b705cfSriastradh struct 79503b705cfSriastradh { 79603b705cfSriastradh unsigned int vs_enable:1; 79703b705cfSriastradh unsigned int vert_cache_disable:1; 79803b705cfSriastradh unsigned int pad0:30; 79903b705cfSriastradh } vs6; 80003b705cfSriastradh}; 80103b705cfSriastradh 80203b705cfSriastradh 80303b705cfSriastradhstruct brw_wm_unit_state 80403b705cfSriastradh{ 80503b705cfSriastradh struct thread0 thread0; 80603b705cfSriastradh struct thread1 thread1; 80703b705cfSriastradh struct thread2 thread2; 80803b705cfSriastradh struct thread3 thread3; 80903b705cfSriastradh 81003b705cfSriastradh struct { 81103b705cfSriastradh unsigned int stats_enable:1; 81203b705cfSriastradh unsigned int pad0:1; 81303b705cfSriastradh unsigned int sampler_count:3; 81403b705cfSriastradh unsigned int sampler_state_pointer:27; 81503b705cfSriastradh } wm4; 81603b705cfSriastradh 81703b705cfSriastradh struct 81803b705cfSriastradh { 81903b705cfSriastradh unsigned int enable_8_pix:1; 82003b705cfSriastradh unsigned int enable_16_pix:1; 82103b705cfSriastradh unsigned int enable_32_pix:1; 82203b705cfSriastradh unsigned int pad0:7; 82303b705cfSriastradh unsigned int legacy_global_depth_bias:1; 82403b705cfSriastradh unsigned int line_stipple:1; 82503b705cfSriastradh unsigned int depth_offset:1; 82603b705cfSriastradh unsigned int polygon_stipple:1; 82703b705cfSriastradh unsigned int line_aa_region_width:2; 82803b705cfSriastradh unsigned int line_endcap_aa_region_width:2; 82903b705cfSriastradh unsigned int early_depth_test:1; 83003b705cfSriastradh unsigned int thread_dispatch_enable:1; 83103b705cfSriastradh unsigned int program_uses_depth:1; 83203b705cfSriastradh unsigned int program_computes_depth:1; 83303b705cfSriastradh unsigned int program_uses_killpixel:1; 83403b705cfSriastradh unsigned int legacy_line_rast: 1; 83503b705cfSriastradh unsigned int transposed_urb_read:1; 83603b705cfSriastradh unsigned int max_threads:7; 83703b705cfSriastradh } wm5; 83803b705cfSriastradh 83903b705cfSriastradh float global_depth_offset_constant; 84003b705cfSriastradh float global_depth_offset_scale; 84103b705cfSriastradh 84203b705cfSriastradh struct { 84303b705cfSriastradh unsigned int pad0:1; 84403b705cfSriastradh unsigned int grf_reg_count_1:3; 84503b705cfSriastradh unsigned int pad1:2; 84603b705cfSriastradh unsigned int kernel_start_pointer_1:26; 84703b705cfSriastradh } wm8; 84803b705cfSriastradh 84903b705cfSriastradh struct { 85003b705cfSriastradh unsigned int pad0:1; 85103b705cfSriastradh unsigned int grf_reg_count_2:3; 85203b705cfSriastradh unsigned int pad1:2; 85303b705cfSriastradh unsigned int kernel_start_pointer_2:26; 85403b705cfSriastradh } wm9; 85503b705cfSriastradh 85603b705cfSriastradh struct { 85703b705cfSriastradh unsigned int pad0:1; 85803b705cfSriastradh unsigned int grf_reg_count_3:3; 85903b705cfSriastradh unsigned int pad1:2; 86003b705cfSriastradh unsigned int kernel_start_pointer_3:26; 86103b705cfSriastradh } wm10; 86203b705cfSriastradh}; 86303b705cfSriastradh 86403b705cfSriastradhstruct brw_wm_unit_state_padded { 86503b705cfSriastradh struct brw_wm_unit_state state; 86603b705cfSriastradh char pad[64 - sizeof(struct brw_wm_unit_state)]; 86703b705cfSriastradh}; 86803b705cfSriastradh 86903b705cfSriastradh/* The hardware supports two different modes for border color. The 87003b705cfSriastradh * default (OpenGL) mode uses floating-point color channels, while the 87103b705cfSriastradh * legacy mode uses 4 bytes. 87203b705cfSriastradh * 87303b705cfSriastradh * More significantly, the legacy mode respects the components of the 87403b705cfSriastradh * border color for channels not present in the source, (whereas the 87503b705cfSriastradh * default mode will ignore the border color's alpha channel and use 87603b705cfSriastradh * alpha==1 for an RGB source, for example). 87703b705cfSriastradh * 87803b705cfSriastradh * The legacy mode matches the semantics specified by the Render 87903b705cfSriastradh * extension. 88003b705cfSriastradh */ 88103b705cfSriastradhstruct brw_sampler_default_border_color { 88203b705cfSriastradh float color[4]; 88303b705cfSriastradh}; 88403b705cfSriastradh 88503b705cfSriastradhstruct brw_sampler_legacy_border_color { 88603b705cfSriastradh uint8_t color[4]; 88703b705cfSriastradh}; 88803b705cfSriastradh 88903b705cfSriastradhstruct brw_sampler_state 89003b705cfSriastradh{ 89103b705cfSriastradh 89203b705cfSriastradh struct 89303b705cfSriastradh { 89403b705cfSriastradh unsigned int shadow_function:3; 89503b705cfSriastradh unsigned int lod_bias:11; 89603b705cfSriastradh unsigned int min_filter:3; 89703b705cfSriastradh unsigned int mag_filter:3; 89803b705cfSriastradh unsigned int mip_filter:2; 89903b705cfSriastradh unsigned int base_level:5; 90003b705cfSriastradh unsigned int pad:1; 90103b705cfSriastradh unsigned int lod_preclamp:1; 90203b705cfSriastradh unsigned int border_color_mode:1; 90303b705cfSriastradh unsigned int pad0:1; 90403b705cfSriastradh unsigned int disable:1; 90503b705cfSriastradh } ss0; 90603b705cfSriastradh 90703b705cfSriastradh struct 90803b705cfSriastradh { 90903b705cfSriastradh unsigned int r_wrap_mode:3; 91003b705cfSriastradh unsigned int t_wrap_mode:3; 91103b705cfSriastradh unsigned int s_wrap_mode:3; 91203b705cfSriastradh unsigned int pad:3; 91303b705cfSriastradh unsigned int max_lod:10; 91403b705cfSriastradh unsigned int min_lod:10; 91503b705cfSriastradh } ss1; 91603b705cfSriastradh 91703b705cfSriastradh 91803b705cfSriastradh struct 91903b705cfSriastradh { 92003b705cfSriastradh unsigned int pad:5; 92103b705cfSriastradh unsigned int border_color_pointer:27; 92203b705cfSriastradh } ss2; 92303b705cfSriastradh 92403b705cfSriastradh struct 92503b705cfSriastradh { 92603b705cfSriastradh unsigned int pad:19; 92703b705cfSriastradh unsigned int max_aniso:3; 92803b705cfSriastradh unsigned int chroma_key_mode:1; 92903b705cfSriastradh unsigned int chroma_key_index:2; 93003b705cfSriastradh unsigned int chroma_key_enable:1; 93103b705cfSriastradh unsigned int monochrome_filter_width:3; 93203b705cfSriastradh unsigned int monochrome_filter_height:3; 93303b705cfSriastradh } ss3; 93403b705cfSriastradh}; 93503b705cfSriastradh 93603b705cfSriastradh 93703b705cfSriastradhstruct brw_clipper_viewport 93803b705cfSriastradh{ 93903b705cfSriastradh float xmin; 94003b705cfSriastradh float xmax; 94103b705cfSriastradh float ymin; 94203b705cfSriastradh float ymax; 94303b705cfSriastradh}; 94403b705cfSriastradh 94503b705cfSriastradhstruct brw_cc_viewport 94603b705cfSriastradh{ 94703b705cfSriastradh float min_depth; 94803b705cfSriastradh float max_depth; 94903b705cfSriastradh}; 95003b705cfSriastradh 95103b705cfSriastradhstruct brw_sf_viewport 95203b705cfSriastradh{ 95303b705cfSriastradh struct { 95403b705cfSriastradh float m00; 95503b705cfSriastradh float m11; 95603b705cfSriastradh float m22; 95703b705cfSriastradh float m30; 95803b705cfSriastradh float m31; 95903b705cfSriastradh float m32; 96003b705cfSriastradh } viewport; 96103b705cfSriastradh 96203b705cfSriastradh struct { 96303b705cfSriastradh short xmin; 96403b705cfSriastradh short ymin; 96503b705cfSriastradh short xmax; 96603b705cfSriastradh short ymax; 96703b705cfSriastradh } scissor; 96803b705cfSriastradh}; 96903b705cfSriastradh 97003b705cfSriastradh/* Documented in the subsystem/shared-functions/sampler chapter... 97103b705cfSriastradh */ 97203b705cfSriastradhstruct brw_surface_state 97303b705cfSriastradh{ 97403b705cfSriastradh struct { 97503b705cfSriastradh unsigned int cube_pos_z:1; 97603b705cfSriastradh unsigned int cube_neg_z:1; 97703b705cfSriastradh unsigned int cube_pos_y:1; 97803b705cfSriastradh unsigned int cube_neg_y:1; 97903b705cfSriastradh unsigned int cube_pos_x:1; 98003b705cfSriastradh unsigned int cube_neg_x:1; 98103b705cfSriastradh unsigned int pad:3; 98203b705cfSriastradh unsigned int render_cache_read_mode:1; 98303b705cfSriastradh unsigned int mipmap_layout_mode:1; 98403b705cfSriastradh unsigned int vert_line_stride_ofs:1; 98503b705cfSriastradh unsigned int vert_line_stride:1; 98603b705cfSriastradh unsigned int color_blend:1; 98703b705cfSriastradh unsigned int writedisable_blue:1; 98803b705cfSriastradh unsigned int writedisable_green:1; 98903b705cfSriastradh unsigned int writedisable_red:1; 99003b705cfSriastradh unsigned int writedisable_alpha:1; 99103b705cfSriastradh unsigned int surface_format:9; 99203b705cfSriastradh unsigned int data_return_format:1; 99303b705cfSriastradh unsigned int pad0:1; 99403b705cfSriastradh unsigned int surface_type:3; 99503b705cfSriastradh } ss0; 99603b705cfSriastradh 99703b705cfSriastradh struct { 99803b705cfSriastradh unsigned int base_addr; 99903b705cfSriastradh } ss1; 100003b705cfSriastradh 100103b705cfSriastradh struct { 100203b705cfSriastradh unsigned int render_target_rotation:2; 100303b705cfSriastradh unsigned int mip_count:4; 100403b705cfSriastradh unsigned int width:13; 100503b705cfSriastradh unsigned int height:13; 100603b705cfSriastradh } ss2; 100703b705cfSriastradh 100803b705cfSriastradh struct { 100903b705cfSriastradh unsigned int tile_walk:1; 101003b705cfSriastradh unsigned int tiled_surface:1; 101103b705cfSriastradh unsigned int pad:1; 101203b705cfSriastradh unsigned int pitch:18; 101303b705cfSriastradh unsigned int depth:11; 101403b705cfSriastradh } ss3; 101503b705cfSriastradh 101603b705cfSriastradh struct { 101703b705cfSriastradh unsigned int pad:19; 101803b705cfSriastradh unsigned int min_array_elt:9; 101903b705cfSriastradh unsigned int min_lod:4; 102003b705cfSriastradh } ss4; 102103b705cfSriastradh 102203b705cfSriastradh struct { 102303b705cfSriastradh unsigned int pad:20; 102403b705cfSriastradh unsigned int y_offset:4; 102503b705cfSriastradh unsigned int pad2:1; 102603b705cfSriastradh unsigned int x_offset:7; 102703b705cfSriastradh } ss5; 102803b705cfSriastradh}; 102903b705cfSriastradh 103003b705cfSriastradh 103103b705cfSriastradh 103203b705cfSriastradhstruct brw_vertex_buffer_state 103303b705cfSriastradh{ 103403b705cfSriastradh struct { 103503b705cfSriastradh unsigned int pitch:11; 103603b705cfSriastradh unsigned int pad:15; 103703b705cfSriastradh unsigned int access_type:1; 103803b705cfSriastradh unsigned int vb_index:5; 103903b705cfSriastradh } vb0; 104003b705cfSriastradh 104103b705cfSriastradh unsigned int start_addr; 104203b705cfSriastradh unsigned int max_index; 104303b705cfSriastradh#if 1 104403b705cfSriastradh unsigned int instance_data_step_rate; /* not included for sequential/random vertices? */ 104503b705cfSriastradh#endif 104603b705cfSriastradh}; 104703b705cfSriastradh 104803b705cfSriastradh#define BRW_VBP_MAX 17 104903b705cfSriastradh 105003b705cfSriastradhstruct brw_vb_array_state { 105103b705cfSriastradh struct header header; 105203b705cfSriastradh struct brw_vertex_buffer_state vb[BRW_VBP_MAX]; 105303b705cfSriastradh}; 105403b705cfSriastradh 105503b705cfSriastradh 105603b705cfSriastradhstruct brw_vertex_element_state 105703b705cfSriastradh{ 105803b705cfSriastradh struct 105903b705cfSriastradh { 106003b705cfSriastradh unsigned int src_offset:11; 106103b705cfSriastradh unsigned int pad:5; 106203b705cfSriastradh unsigned int src_format:9; 106303b705cfSriastradh unsigned int pad0:1; 106403b705cfSriastradh unsigned int valid:1; 106503b705cfSriastradh unsigned int vertex_buffer_index:5; 106603b705cfSriastradh } ve0; 106703b705cfSriastradh 106803b705cfSriastradh struct 106903b705cfSriastradh { 107003b705cfSriastradh unsigned int dst_offset:8; 107103b705cfSriastradh unsigned int pad:8; 107203b705cfSriastradh unsigned int vfcomponent3:4; 107303b705cfSriastradh unsigned int vfcomponent2:4; 107403b705cfSriastradh unsigned int vfcomponent1:4; 107503b705cfSriastradh unsigned int vfcomponent0:4; 107603b705cfSriastradh } ve1; 107703b705cfSriastradh}; 107803b705cfSriastradh 107903b705cfSriastradh#define BRW_VEP_MAX 18 108003b705cfSriastradh 108103b705cfSriastradhstruct brw_vertex_element_packet { 108203b705cfSriastradh struct header header; 108303b705cfSriastradh struct brw_vertex_element_state ve[BRW_VEP_MAX]; /* note: less than _TNL_ATTRIB_MAX */ 108403b705cfSriastradh}; 108503b705cfSriastradh 108603b705cfSriastradh 108703b705cfSriastradhstruct brw_urb_immediate { 108803b705cfSriastradh unsigned int opcode:4; 108903b705cfSriastradh unsigned int offset:6; 109003b705cfSriastradh unsigned int swizzle_control:2; 109103b705cfSriastradh unsigned int pad:1; 109203b705cfSriastradh unsigned int allocate:1; 109303b705cfSriastradh unsigned int used:1; 109403b705cfSriastradh unsigned int complete:1; 109503b705cfSriastradh unsigned int response_length:4; 109603b705cfSriastradh unsigned int msg_length:4; 109703b705cfSriastradh unsigned int msg_target:4; 109803b705cfSriastradh unsigned int pad1:3; 109903b705cfSriastradh unsigned int end_of_thread:1; 110003b705cfSriastradh}; 110103b705cfSriastradh 110203b705cfSriastradh/* Instruction format for the execution units: 110303b705cfSriastradh */ 110403b705cfSriastradh 110503b705cfSriastradhstruct brw_instruction 110603b705cfSriastradh{ 110703b705cfSriastradh struct 110803b705cfSriastradh { 110903b705cfSriastradh unsigned int opcode:7; 111003b705cfSriastradh unsigned int pad:1; 111103b705cfSriastradh unsigned int access_mode:1; 111203b705cfSriastradh unsigned int mask_control:1; 111303b705cfSriastradh unsigned int dependency_control:2; 111403b705cfSriastradh unsigned int compression_control:2; 111503b705cfSriastradh unsigned int thread_control:2; 111603b705cfSriastradh unsigned int predicate_control:4; 111703b705cfSriastradh unsigned int predicate_inverse:1; 111803b705cfSriastradh unsigned int execution_size:3; 111903b705cfSriastradh unsigned int destreg__conditonalmod:4; /* destreg - send, conditionalmod - others */ 112003b705cfSriastradh unsigned int pad0:2; 112103b705cfSriastradh unsigned int debug_control:1; 112203b705cfSriastradh unsigned int saturate:1; 112303b705cfSriastradh } header; 112403b705cfSriastradh 112503b705cfSriastradh union { 112603b705cfSriastradh struct 112703b705cfSriastradh { 112803b705cfSriastradh unsigned int dest_reg_file:2; 112903b705cfSriastradh unsigned int dest_reg_type:3; 113003b705cfSriastradh unsigned int src0_reg_file:2; 113103b705cfSriastradh unsigned int src0_reg_type:3; 113203b705cfSriastradh unsigned int src1_reg_file:2; 113303b705cfSriastradh unsigned int src1_reg_type:3; 113403b705cfSriastradh unsigned int pad:1; 113503b705cfSriastradh unsigned int dest_subreg_nr:5; 113603b705cfSriastradh unsigned int dest_reg_nr:8; 113703b705cfSriastradh unsigned int dest_horiz_stride:2; 113803b705cfSriastradh unsigned int dest_address_mode:1; 113903b705cfSriastradh } da1; 114003b705cfSriastradh 114103b705cfSriastradh struct 114203b705cfSriastradh { 114303b705cfSriastradh unsigned int dest_reg_file:2; 114403b705cfSriastradh unsigned int dest_reg_type:3; 114503b705cfSriastradh unsigned int src0_reg_file:2; 114603b705cfSriastradh unsigned int src0_reg_type:3; 114703b705cfSriastradh unsigned int pad:6; 114803b705cfSriastradh int dest_indirect_offset:10; /* offset against the deref'd address reg */ 114903b705cfSriastradh unsigned int dest_subreg_nr:3; /* subnr for the address reg a0.x */ 115003b705cfSriastradh unsigned int dest_horiz_stride:2; 115103b705cfSriastradh unsigned int dest_address_mode:1; 115203b705cfSriastradh } ia1; 115303b705cfSriastradh 115403b705cfSriastradh struct 115503b705cfSriastradh { 115603b705cfSriastradh unsigned int dest_reg_file:2; 115703b705cfSriastradh unsigned int dest_reg_type:3; 115803b705cfSriastradh unsigned int src0_reg_file:2; 115903b705cfSriastradh unsigned int src0_reg_type:3; 116003b705cfSriastradh unsigned int src1_reg_file:2; 116103b705cfSriastradh unsigned int src1_reg_type:3; 116203b705cfSriastradh unsigned int pad0:1; 116303b705cfSriastradh unsigned int dest_writemask:4; 116403b705cfSriastradh unsigned int dest_subreg_nr:1; 116503b705cfSriastradh unsigned int dest_reg_nr:8; 116603b705cfSriastradh unsigned int pad1:2; 116703b705cfSriastradh unsigned int dest_address_mode:1; 116803b705cfSriastradh } da16; 116903b705cfSriastradh 117003b705cfSriastradh struct 117103b705cfSriastradh { 117203b705cfSriastradh unsigned int dest_reg_file:2; 117303b705cfSriastradh unsigned int dest_reg_type:3; 117403b705cfSriastradh unsigned int src0_reg_file:2; 117503b705cfSriastradh unsigned int src0_reg_type:3; 117603b705cfSriastradh unsigned int pad0:6; 117703b705cfSriastradh unsigned int dest_writemask:4; 117803b705cfSriastradh int dest_indirect_offset:6; 117903b705cfSriastradh unsigned int dest_subreg_nr:3; 118003b705cfSriastradh unsigned int pad1:2; 118103b705cfSriastradh unsigned int dest_address_mode:1; 118203b705cfSriastradh } ia16; 118303b705cfSriastradh } bits1; 118403b705cfSriastradh 118503b705cfSriastradh 118603b705cfSriastradh union { 118703b705cfSriastradh struct 118803b705cfSriastradh { 118903b705cfSriastradh unsigned int src0_subreg_nr:5; 119003b705cfSriastradh unsigned int src0_reg_nr:8; 119103b705cfSriastradh unsigned int src0_abs:1; 119203b705cfSriastradh unsigned int src0_negate:1; 119303b705cfSriastradh unsigned int src0_address_mode:1; 119403b705cfSriastradh unsigned int src0_horiz_stride:2; 119503b705cfSriastradh unsigned int src0_width:3; 119603b705cfSriastradh unsigned int src0_vert_stride:4; 119703b705cfSriastradh unsigned int flag_reg_nr:1; 119803b705cfSriastradh unsigned int pad:6; 119903b705cfSriastradh } da1; 120003b705cfSriastradh 120103b705cfSriastradh struct 120203b705cfSriastradh { 120303b705cfSriastradh int src0_indirect_offset:10; 120403b705cfSriastradh unsigned int src0_subreg_nr:3; 120503b705cfSriastradh unsigned int src0_abs:1; 120603b705cfSriastradh unsigned int src0_negate:1; 120703b705cfSriastradh unsigned int src0_address_mode:1; 120803b705cfSriastradh unsigned int src0_horiz_stride:2; 120903b705cfSriastradh unsigned int src0_width:3; 121003b705cfSriastradh unsigned int src0_vert_stride:4; 121103b705cfSriastradh unsigned int flag_reg_nr:1; 121203b705cfSriastradh unsigned int pad:6; 121303b705cfSriastradh } ia1; 121403b705cfSriastradh 121503b705cfSriastradh struct 121603b705cfSriastradh { 121703b705cfSriastradh unsigned int src0_swz_x:2; 121803b705cfSriastradh unsigned int src0_swz_y:2; 121903b705cfSriastradh unsigned int src0_subreg_nr:1; 122003b705cfSriastradh unsigned int src0_reg_nr:8; 122103b705cfSriastradh unsigned int src0_abs:1; 122203b705cfSriastradh unsigned int src0_negate:1; 122303b705cfSriastradh unsigned int src0_address_mode:1; 122403b705cfSriastradh unsigned int src0_swz_z:2; 122503b705cfSriastradh unsigned int src0_swz_w:2; 122603b705cfSriastradh unsigned int pad0:1; 122703b705cfSriastradh unsigned int src0_vert_stride:4; 122803b705cfSriastradh unsigned int flag_reg_nr:1; 122903b705cfSriastradh unsigned int pad1:6; 123003b705cfSriastradh } da16; 123103b705cfSriastradh 123203b705cfSriastradh struct 123303b705cfSriastradh { 123403b705cfSriastradh unsigned int src0_swz_x:2; 123503b705cfSriastradh unsigned int src0_swz_y:2; 123603b705cfSriastradh int src0_indirect_offset:6; 123703b705cfSriastradh unsigned int src0_subreg_nr:3; 123803b705cfSriastradh unsigned int src0_abs:1; 123903b705cfSriastradh unsigned int src0_negate:1; 124003b705cfSriastradh unsigned int src0_address_mode:1; 124103b705cfSriastradh unsigned int src0_swz_z:2; 124203b705cfSriastradh unsigned int src0_swz_w:2; 124303b705cfSriastradh unsigned int pad0:1; 124403b705cfSriastradh unsigned int src0_vert_stride:4; 124503b705cfSriastradh unsigned int flag_reg_nr:1; 124603b705cfSriastradh unsigned int pad1:6; 124703b705cfSriastradh } ia16; 124803b705cfSriastradh 124903b705cfSriastradh } bits2; 125003b705cfSriastradh 125103b705cfSriastradh union 125203b705cfSriastradh { 125303b705cfSriastradh struct 125403b705cfSriastradh { 125503b705cfSriastradh unsigned int src1_subreg_nr:5; 125603b705cfSriastradh unsigned int src1_reg_nr:8; 125703b705cfSriastradh unsigned int src1_abs:1; 125803b705cfSriastradh unsigned int src1_negate:1; 125903b705cfSriastradh unsigned int pad:1; 126003b705cfSriastradh unsigned int src1_horiz_stride:2; 126103b705cfSriastradh unsigned int src1_width:3; 126203b705cfSriastradh unsigned int src1_vert_stride:4; 126303b705cfSriastradh unsigned int pad0:7; 126403b705cfSriastradh } da1; 126503b705cfSriastradh 126603b705cfSriastradh struct 126703b705cfSriastradh { 126803b705cfSriastradh unsigned int src1_swz_x:2; 126903b705cfSriastradh unsigned int src1_swz_y:2; 127003b705cfSriastradh unsigned int src1_subreg_nr:1; 127103b705cfSriastradh unsigned int src1_reg_nr:8; 127203b705cfSriastradh unsigned int src1_abs:1; 127303b705cfSriastradh unsigned int src1_negate:1; 127403b705cfSriastradh unsigned int pad0:1; 127503b705cfSriastradh unsigned int src1_swz_z:2; 127603b705cfSriastradh unsigned int src1_swz_w:2; 127703b705cfSriastradh unsigned int pad1:1; 127803b705cfSriastradh unsigned int src1_vert_stride:4; 127903b705cfSriastradh unsigned int pad2:7; 128003b705cfSriastradh } da16; 128103b705cfSriastradh 128203b705cfSriastradh struct 128303b705cfSriastradh { 128403b705cfSriastradh int src1_indirect_offset:10; 128503b705cfSriastradh unsigned int src1_subreg_nr:3; 128603b705cfSriastradh unsigned int src1_abs:1; 128703b705cfSriastradh unsigned int src1_negate:1; 128803b705cfSriastradh unsigned int pad0:1; 128903b705cfSriastradh unsigned int src1_horiz_stride:2; 129003b705cfSriastradh unsigned int src1_width:3; 129103b705cfSriastradh unsigned int src1_vert_stride:4; 129203b705cfSriastradh unsigned int flag_reg_nr:1; 129303b705cfSriastradh unsigned int pad1:6; 129403b705cfSriastradh } ia1; 129503b705cfSriastradh 129603b705cfSriastradh struct 129703b705cfSriastradh { 129803b705cfSriastradh unsigned int src1_swz_x:2; 129903b705cfSriastradh unsigned int src1_swz_y:2; 130003b705cfSriastradh int src1_indirect_offset:6; 130103b705cfSriastradh unsigned int src1_subreg_nr:3; 130203b705cfSriastradh unsigned int src1_abs:1; 130303b705cfSriastradh unsigned int src1_negate:1; 130403b705cfSriastradh unsigned int pad0:1; 130503b705cfSriastradh unsigned int src1_swz_z:2; 130603b705cfSriastradh unsigned int src1_swz_w:2; 130703b705cfSriastradh unsigned int pad1:1; 130803b705cfSriastradh unsigned int src1_vert_stride:4; 130903b705cfSriastradh unsigned int flag_reg_nr:1; 131003b705cfSriastradh unsigned int pad2:6; 131103b705cfSriastradh } ia16; 131203b705cfSriastradh 131303b705cfSriastradh 131403b705cfSriastradh struct 131503b705cfSriastradh { 131603b705cfSriastradh int jump_count:16; /* note: signed */ 131703b705cfSriastradh unsigned int pop_count:4; 131803b705cfSriastradh unsigned int pad0:12; 131903b705cfSriastradh } if_else; 132003b705cfSriastradh 132103b705cfSriastradh struct { 132203b705cfSriastradh unsigned int function:4; 132303b705cfSriastradh unsigned int int_type:1; 132403b705cfSriastradh unsigned int precision:1; 132503b705cfSriastradh unsigned int saturate:1; 132603b705cfSriastradh unsigned int data_type:1; 132703b705cfSriastradh unsigned int pad0:8; 132803b705cfSriastradh unsigned int response_length:4; 132903b705cfSriastradh unsigned int msg_length:4; 133003b705cfSriastradh unsigned int msg_target:4; 133103b705cfSriastradh unsigned int pad1:3; 133203b705cfSriastradh unsigned int end_of_thread:1; 133303b705cfSriastradh } math; 133403b705cfSriastradh 133503b705cfSriastradh struct { 133603b705cfSriastradh unsigned int binding_table_index:8; 133703b705cfSriastradh unsigned int sampler:4; 133803b705cfSriastradh unsigned int return_format:2; 133903b705cfSriastradh unsigned int msg_type:2; 134003b705cfSriastradh unsigned int response_length:4; 134103b705cfSriastradh unsigned int msg_length:4; 134203b705cfSriastradh unsigned int msg_target:4; 134303b705cfSriastradh unsigned int pad1:3; 134403b705cfSriastradh unsigned int end_of_thread:1; 134503b705cfSriastradh } sampler; 134603b705cfSriastradh 134703b705cfSriastradh struct brw_urb_immediate urb; 134803b705cfSriastradh 134903b705cfSriastradh struct { 135003b705cfSriastradh unsigned int binding_table_index:8; 135103b705cfSriastradh unsigned int msg_control:4; 135203b705cfSriastradh unsigned int msg_type:2; 135303b705cfSriastradh unsigned int target_cache:2; 135403b705cfSriastradh unsigned int response_length:4; 135503b705cfSriastradh unsigned int msg_length:4; 135603b705cfSriastradh unsigned int msg_target:4; 135703b705cfSriastradh unsigned int pad1:3; 135803b705cfSriastradh unsigned int end_of_thread:1; 135903b705cfSriastradh } dp_read; 136003b705cfSriastradh 136103b705cfSriastradh struct { 136203b705cfSriastradh unsigned int binding_table_index:8; 136303b705cfSriastradh unsigned int msg_control:3; 136403b705cfSriastradh unsigned int pixel_scoreboard_clear:1; 136503b705cfSriastradh unsigned int msg_type:3; 136603b705cfSriastradh unsigned int send_commit_msg:1; 136703b705cfSriastradh unsigned int response_length:4; 136803b705cfSriastradh unsigned int msg_length:4; 136903b705cfSriastradh unsigned int msg_target:4; 137003b705cfSriastradh unsigned int pad1:3; 137103b705cfSriastradh unsigned int end_of_thread:1; 137203b705cfSriastradh } dp_write; 137303b705cfSriastradh 137403b705cfSriastradh struct { 137503b705cfSriastradh unsigned int pad:16; 137603b705cfSriastradh unsigned int response_length:4; 137703b705cfSriastradh unsigned int msg_length:4; 137803b705cfSriastradh unsigned int msg_target:4; 137903b705cfSriastradh unsigned int pad1:3; 138003b705cfSriastradh unsigned int end_of_thread:1; 138103b705cfSriastradh } generic; 138203b705cfSriastradh 138303b705cfSriastradh unsigned int ud; 138403b705cfSriastradh } bits3; 138503b705cfSriastradh}; 138603b705cfSriastradh 138703b705cfSriastradh/* media pipeline */ 138803b705cfSriastradh 138903b705cfSriastradhstruct brw_vfe_state { 139003b705cfSriastradh struct { 139103b705cfSriastradh unsigned int per_thread_scratch_space:4; 139203b705cfSriastradh unsigned int pad3:3; 139303b705cfSriastradh unsigned int extend_vfe_state_present:1; 139403b705cfSriastradh unsigned int pad2:2; 139503b705cfSriastradh unsigned int scratch_base:22; 139603b705cfSriastradh } vfe0; 139703b705cfSriastradh 139803b705cfSriastradh struct { 139903b705cfSriastradh unsigned int debug_counter_control:2; 140003b705cfSriastradh unsigned int children_present:1; 140103b705cfSriastradh unsigned int vfe_mode:4; 140203b705cfSriastradh unsigned int pad2:2; 140303b705cfSriastradh unsigned int num_urb_entries:7; 140403b705cfSriastradh unsigned int urb_entry_alloc_size:9; 140503b705cfSriastradh unsigned int max_threads:7; 140603b705cfSriastradh } vfe1; 140703b705cfSriastradh 140803b705cfSriastradh struct { 140903b705cfSriastradh unsigned int pad4:4; 141003b705cfSriastradh unsigned int interface_descriptor_base:28; 141103b705cfSriastradh } vfe2; 141203b705cfSriastradh}; 141303b705cfSriastradh 141403b705cfSriastradhstruct brw_vld_state { 141503b705cfSriastradh struct { 141603b705cfSriastradh unsigned int pad6:6; 141703b705cfSriastradh unsigned int scan_order:1; 141803b705cfSriastradh unsigned int intra_vlc_format:1; 141903b705cfSriastradh unsigned int quantizer_scale_type:1; 142003b705cfSriastradh unsigned int concealment_motion_vector:1; 142103b705cfSriastradh unsigned int frame_predict_frame_dct:1; 142203b705cfSriastradh unsigned int top_field_first:1; 142303b705cfSriastradh unsigned int picture_structure:2; 142403b705cfSriastradh unsigned int intra_dc_precision:2; 142503b705cfSriastradh unsigned int f_code_0_0:4; 142603b705cfSriastradh unsigned int f_code_0_1:4; 142703b705cfSriastradh unsigned int f_code_1_0:4; 142803b705cfSriastradh unsigned int f_code_1_1:4; 142903b705cfSriastradh } vld0; 143003b705cfSriastradh 143103b705cfSriastradh struct { 143203b705cfSriastradh unsigned int pad2:9; 143303b705cfSriastradh unsigned int picture_coding_type:2; 143403b705cfSriastradh unsigned int pad:21; 143503b705cfSriastradh } vld1; 143603b705cfSriastradh 143703b705cfSriastradh struct { 143803b705cfSriastradh unsigned int index_0:4; 143903b705cfSriastradh unsigned int index_1:4; 144003b705cfSriastradh unsigned int index_2:4; 144103b705cfSriastradh unsigned int index_3:4; 144203b705cfSriastradh unsigned int index_4:4; 144303b705cfSriastradh unsigned int index_5:4; 144403b705cfSriastradh unsigned int index_6:4; 144503b705cfSriastradh unsigned int index_7:4; 144603b705cfSriastradh } desc_remap_table0; 144703b705cfSriastradh 144803b705cfSriastradh struct { 144903b705cfSriastradh unsigned int index_8:4; 145003b705cfSriastradh unsigned int index_9:4; 145103b705cfSriastradh unsigned int index_10:4; 145203b705cfSriastradh unsigned int index_11:4; 145303b705cfSriastradh unsigned int index_12:4; 145403b705cfSriastradh unsigned int index_13:4; 145503b705cfSriastradh unsigned int index_14:4; 145603b705cfSriastradh unsigned int index_15:4; 145703b705cfSriastradh } desc_remap_table1; 145803b705cfSriastradh}; 145903b705cfSriastradh 146003b705cfSriastradhstruct brw_interface_descriptor { 146103b705cfSriastradh struct { 146203b705cfSriastradh unsigned int grf_reg_blocks:4; 146303b705cfSriastradh unsigned int pad:2; 146403b705cfSriastradh unsigned int kernel_start_pointer:26; 146503b705cfSriastradh } desc0; 146603b705cfSriastradh 146703b705cfSriastradh struct { 146803b705cfSriastradh unsigned int pad:7; 146903b705cfSriastradh unsigned int software_exception:1; 147003b705cfSriastradh unsigned int pad2:3; 147103b705cfSriastradh unsigned int maskstack_exception:1; 147203b705cfSriastradh unsigned int pad3:1; 147303b705cfSriastradh unsigned int illegal_opcode_exception:1; 147403b705cfSriastradh unsigned int pad4:2; 147503b705cfSriastradh unsigned int floating_point_mode:1; 147603b705cfSriastradh unsigned int thread_priority:1; 147703b705cfSriastradh unsigned int single_program_flow:1; 147803b705cfSriastradh unsigned int pad5:1; 147903b705cfSriastradh unsigned int const_urb_entry_read_offset:6; 148003b705cfSriastradh unsigned int const_urb_entry_read_len:6; 148103b705cfSriastradh } desc1; 148203b705cfSriastradh 148303b705cfSriastradh struct { 148403b705cfSriastradh unsigned int pad:2; 148503b705cfSriastradh unsigned int sampler_count:3; 148603b705cfSriastradh unsigned int sampler_state_pointer:27; 148703b705cfSriastradh } desc2; 148803b705cfSriastradh 148903b705cfSriastradh struct { 149003b705cfSriastradh unsigned int binding_table_entry_count:5; 149103b705cfSriastradh unsigned int binding_table_pointer:27; 149203b705cfSriastradh } desc3; 149303b705cfSriastradh}; 149403b705cfSriastradh 149503b705cfSriastradhstruct gen6_blend_state 149603b705cfSriastradh{ 149703b705cfSriastradh struct { 149803b705cfSriastradh unsigned int dest_blend_factor:5; 149903b705cfSriastradh unsigned int source_blend_factor:5; 150003b705cfSriastradh unsigned int pad3:1; 150103b705cfSriastradh unsigned int blend_func:3; 150203b705cfSriastradh unsigned int pad2:1; 150303b705cfSriastradh unsigned int ia_dest_blend_factor:5; 150403b705cfSriastradh unsigned int ia_source_blend_factor:5; 150503b705cfSriastradh unsigned int pad1:1; 150603b705cfSriastradh unsigned int ia_blend_func:3; 150703b705cfSriastradh unsigned int pad0:1; 150803b705cfSriastradh unsigned int ia_blend_enable:1; 150903b705cfSriastradh unsigned int blend_enable:1; 151003b705cfSriastradh } blend0; 151103b705cfSriastradh 151203b705cfSriastradh struct { 151303b705cfSriastradh unsigned int post_blend_clamp_enable:1; 151403b705cfSriastradh unsigned int pre_blend_clamp_enable:1; 151503b705cfSriastradh unsigned int clamp_range:2; 151603b705cfSriastradh unsigned int pad0:4; 151703b705cfSriastradh unsigned int x_dither_offset:2; 151803b705cfSriastradh unsigned int y_dither_offset:2; 151903b705cfSriastradh unsigned int dither_enable:1; 152003b705cfSriastradh unsigned int alpha_test_func:3; 152103b705cfSriastradh unsigned int alpha_test_enable:1; 152203b705cfSriastradh unsigned int pad1:1; 152303b705cfSriastradh unsigned int logic_op_func:4; 152403b705cfSriastradh unsigned int logic_op_enable:1; 152503b705cfSriastradh unsigned int pad2:1; 152603b705cfSriastradh unsigned int write_disable_b:1; 152703b705cfSriastradh unsigned int write_disable_g:1; 152803b705cfSriastradh unsigned int write_disable_r:1; 152903b705cfSriastradh unsigned int write_disable_a:1; 153003b705cfSriastradh unsigned int pad3:1; 153103b705cfSriastradh unsigned int alpha_to_coverage_dither:1; 153203b705cfSriastradh unsigned int alpha_to_one:1; 153303b705cfSriastradh unsigned int alpha_to_coverage:1; 153403b705cfSriastradh } blend1; 153503b705cfSriastradh}; 153603b705cfSriastradh 153703b705cfSriastradhstruct gen6_color_calc_state 153803b705cfSriastradh{ 153903b705cfSriastradh struct { 154003b705cfSriastradh unsigned int alpha_test_format:1; 154103b705cfSriastradh unsigned int pad0:14; 154203b705cfSriastradh unsigned int round_disable:1; 154303b705cfSriastradh unsigned int bf_stencil_ref:8; 154403b705cfSriastradh unsigned int stencil_ref:8; 154503b705cfSriastradh } cc0; 154603b705cfSriastradh 154703b705cfSriastradh union { 154803b705cfSriastradh float alpha_ref_f; 154903b705cfSriastradh struct { 155003b705cfSriastradh unsigned int ui:8; 155103b705cfSriastradh unsigned int pad0:24; 155203b705cfSriastradh } alpha_ref_fi; 155303b705cfSriastradh } cc1; 155403b705cfSriastradh 155503b705cfSriastradh float constant_r; 155603b705cfSriastradh float constant_g; 155703b705cfSriastradh float constant_b; 155803b705cfSriastradh float constant_a; 155903b705cfSriastradh}; 156003b705cfSriastradh 156103b705cfSriastradhstruct gen6_depth_stencil_state 156203b705cfSriastradh{ 156303b705cfSriastradh struct { 156403b705cfSriastradh unsigned int pad0:3; 156503b705cfSriastradh unsigned int bf_stencil_pass_depth_pass_op:3; 156603b705cfSriastradh unsigned int bf_stencil_pass_depth_fail_op:3; 156703b705cfSriastradh unsigned int bf_stencil_fail_op:3; 156803b705cfSriastradh unsigned int bf_stencil_func:3; 156903b705cfSriastradh unsigned int bf_stencil_enable:1; 157003b705cfSriastradh unsigned int pad1:2; 157103b705cfSriastradh unsigned int stencil_write_enable:1; 157203b705cfSriastradh unsigned int stencil_pass_depth_pass_op:3; 157303b705cfSriastradh unsigned int stencil_pass_depth_fail_op:3; 157403b705cfSriastradh unsigned int stencil_fail_op:3; 157503b705cfSriastradh unsigned int stencil_func:3; 157603b705cfSriastradh unsigned int stencil_enable:1; 157703b705cfSriastradh } ds0; 157803b705cfSriastradh 157903b705cfSriastradh struct { 158003b705cfSriastradh unsigned int bf_stencil_write_mask:8; 158103b705cfSriastradh unsigned int bf_stencil_test_mask:8; 158203b705cfSriastradh unsigned int stencil_write_mask:8; 158303b705cfSriastradh unsigned int stencil_test_mask:8; 158403b705cfSriastradh } ds1; 158503b705cfSriastradh 158603b705cfSriastradh struct { 158703b705cfSriastradh unsigned int pad0:26; 158803b705cfSriastradh unsigned int depth_write_enable:1; 158903b705cfSriastradh unsigned int depth_test_func:3; 159003b705cfSriastradh unsigned int pad1:1; 159103b705cfSriastradh unsigned int depth_test_enable:1; 159203b705cfSriastradh } ds2; 159303b705cfSriastradh}; 159403b705cfSriastradh 159503b705cfSriastradhstruct gen7_surface_state 159603b705cfSriastradh{ 159703b705cfSriastradh struct { 159803b705cfSriastradh unsigned int cube_pos_z:1; 159903b705cfSriastradh unsigned int cube_neg_z:1; 160003b705cfSriastradh unsigned int cube_pos_y:1; 160103b705cfSriastradh unsigned int cube_neg_y:1; 160203b705cfSriastradh unsigned int cube_pos_x:1; 160303b705cfSriastradh unsigned int cube_neg_x:1; 160403b705cfSriastradh unsigned int pad2:2; 160503b705cfSriastradh unsigned int render_cache_read_write:1; 160603b705cfSriastradh unsigned int pad1:1; 160703b705cfSriastradh unsigned int surface_array_spacing:1; 160803b705cfSriastradh unsigned int vert_line_stride_ofs:1; 160903b705cfSriastradh unsigned int vert_line_stride:1; 161003b705cfSriastradh unsigned int tile_walk:1; 161103b705cfSriastradh unsigned int tiled_surface:1; 161203b705cfSriastradh unsigned int horizontal_alignment:1; 161303b705cfSriastradh unsigned int vertical_alignment:2; 161403b705cfSriastradh unsigned int surface_format:9; /**< BRW_SURFACEFORMAT_x */ 161503b705cfSriastradh unsigned int pad0:1; 161603b705cfSriastradh unsigned int is_array:1; 161703b705cfSriastradh unsigned int surface_type:3; /**< BRW_SURFACE_1D/2D/3D/CUBE */ 161803b705cfSriastradh } ss0; 161903b705cfSriastradh 162003b705cfSriastradh struct { 162103b705cfSriastradh unsigned int base_addr; 162203b705cfSriastradh } ss1; 162303b705cfSriastradh 162403b705cfSriastradh struct { 162503b705cfSriastradh unsigned int width:14; 162603b705cfSriastradh unsigned int pad1:2; 162703b705cfSriastradh unsigned int height:14; 162803b705cfSriastradh unsigned int pad0:2; 162903b705cfSriastradh } ss2; 163003b705cfSriastradh 163103b705cfSriastradh struct { 163203b705cfSriastradh unsigned int pitch:18; 163303b705cfSriastradh unsigned int pad:3; 163403b705cfSriastradh unsigned int depth:11; 163503b705cfSriastradh } ss3; 163603b705cfSriastradh 163703b705cfSriastradh struct { 163803b705cfSriastradh unsigned int multisample_position_palette_index:3; 163903b705cfSriastradh unsigned int num_multisamples:3; 164003b705cfSriastradh unsigned int multisampled_surface_storage_format:1; 164103b705cfSriastradh unsigned int render_target_view_extent:11; 164203b705cfSriastradh unsigned int min_array_elt:11; 164303b705cfSriastradh unsigned int rotation:2; 164403b705cfSriastradh unsigned int pad0:1; 164503b705cfSriastradh } ss4; 164603b705cfSriastradh 164703b705cfSriastradh struct { 164803b705cfSriastradh unsigned int mip_count:4; 164903b705cfSriastradh unsigned int min_lod:4; 165003b705cfSriastradh unsigned int pad1:12; 165103b705cfSriastradh unsigned int y_offset:4; 165203b705cfSriastradh unsigned int pad0:1; 165303b705cfSriastradh unsigned int x_offset:7; 165403b705cfSriastradh } ss5; 165503b705cfSriastradh 165603b705cfSriastradh struct { 165703b705cfSriastradh unsigned int pad; /* Multisample Control Surface stuff */ 165803b705cfSriastradh } ss6; 165903b705cfSriastradh 166003b705cfSriastradh struct { 166103b705cfSriastradh unsigned int resource_min_lod:12; 166203b705cfSriastradh unsigned int pad0:4; 166303b705cfSriastradh unsigned int shader_chanel_select_a:3; 166403b705cfSriastradh unsigned int shader_chanel_select_b:3; 166503b705cfSriastradh unsigned int shader_chanel_select_g:3; 166603b705cfSriastradh unsigned int shader_chanel_select_r:3; 166703b705cfSriastradh unsigned int alpha_clear_color:1; 166803b705cfSriastradh unsigned int blue_clear_color:1; 166903b705cfSriastradh unsigned int green_clear_color:1; 167003b705cfSriastradh unsigned int red_clear_color:1; 167103b705cfSriastradh } ss7; 167203b705cfSriastradh}; 167303b705cfSriastradh 167403b705cfSriastradhstruct gen7_sampler_state 167503b705cfSriastradh{ 167603b705cfSriastradh struct 167703b705cfSriastradh { 167803b705cfSriastradh unsigned int aniso_algorithm:1; 167903b705cfSriastradh unsigned int lod_bias:13; 168003b705cfSriastradh unsigned int min_filter:3; 168103b705cfSriastradh unsigned int mag_filter:3; 168203b705cfSriastradh unsigned int mip_filter:2; 168303b705cfSriastradh unsigned int base_level:5; 168403b705cfSriastradh unsigned int pad1:1; 168503b705cfSriastradh unsigned int lod_preclamp:1; 168603b705cfSriastradh unsigned int default_color_mode:1; 168703b705cfSriastradh unsigned int pad0:1; 168803b705cfSriastradh unsigned int disable:1; 168903b705cfSriastradh } ss0; 169003b705cfSriastradh 169103b705cfSriastradh struct 169203b705cfSriastradh { 169303b705cfSriastradh unsigned int cube_control_mode:1; 169403b705cfSriastradh unsigned int shadow_function:3; 169503b705cfSriastradh unsigned int pad:4; 169603b705cfSriastradh unsigned int max_lod:12; 169703b705cfSriastradh unsigned int min_lod:12; 169803b705cfSriastradh } ss1; 169903b705cfSriastradh 170003b705cfSriastradh struct 170103b705cfSriastradh { 170203b705cfSriastradh unsigned int pad:5; 170303b705cfSriastradh unsigned int default_color_pointer:27; 170403b705cfSriastradh } ss2; 170503b705cfSriastradh 170603b705cfSriastradh struct 170703b705cfSriastradh { 170803b705cfSriastradh unsigned int r_wrap_mode:3; 170903b705cfSriastradh unsigned int t_wrap_mode:3; 171003b705cfSriastradh unsigned int s_wrap_mode:3; 171103b705cfSriastradh unsigned int pad:1; 171203b705cfSriastradh unsigned int non_normalized_coord:1; 171303b705cfSriastradh unsigned int trilinear_quality:2; 171403b705cfSriastradh unsigned int address_round:6; 171503b705cfSriastradh unsigned int max_aniso:3; 171603b705cfSriastradh unsigned int chroma_key_mode:1; 171703b705cfSriastradh unsigned int chroma_key_index:2; 171803b705cfSriastradh unsigned int chroma_key_enable:1; 171903b705cfSriastradh unsigned int pad0:6; 172003b705cfSriastradh } ss3; 172103b705cfSriastradh}; 172203b705cfSriastradh 172303b705cfSriastradh#endif 1724