 /**************************************************************************
 * 
 * Copyright 2005 Tungsten Graphics, Inc., Cedar Park, Texas.
 * All Rights Reserved.
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sub license, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice (including the
 * next paragraph) shall be included in all copies or substantial portions
 * of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 * 
 **************************************************************************/

#ifndef BRW_STRUCTS_H
#define BRW_STRUCTS_H

/* Command packets:
 */
struct header 
{
   GLuint length:16; 
   GLuint opcode:16; 
} bits;


union header_union
{
   struct header bits;
   GLuint dword;
};

struct brw_3d_control
{   
   struct 
   {
      GLuint length:8;
      GLuint notify_enable:1;
      GLuint pad:3;
      GLuint wc_flush_enable:1; 
      GLuint depth_stall_enable:1; 
      GLuint operation:2; 
      GLuint opcode:16; 
   } header;
   
   struct
   {
      GLuint pad:2;
      GLuint dest_addr_type:1; 
      GLuint dest_addr:29; 
   } dest;
   
   GLuint dword2;   
   GLuint dword3;   
};


struct brw_3d_primitive
{
   struct
   {
      GLuint length:8; 
      GLuint pad:2;
      GLuint topology:5; 
      GLuint indexed:1; 
      GLuint opcode:16; 
   } header;

   GLuint verts_per_instance;  
   GLuint start_vert_location;  
   GLuint instance_count;  
   GLuint start_instance_location;  
   GLuint base_vert_location;  
};

/* These seem to be passed around as function args, so it works out
 * better to keep them as #defines:
 */
#define BRW_FLUSH_READ_CACHE           0x1
#define BRW_FLUSH_STATE_CACHE          0x2
#define BRW_INHIBIT_FLUSH_RENDER_CACHE 0x4
#define BRW_FLUSH_SNAPSHOT_COUNTERS    0x8

struct brw_mi_flush
{
   GLuint flags:4;
   GLuint pad:12;
   GLuint opcode:16;
};

struct brw_vf_statistics
{
   GLuint statistics_enable:1;
   GLuint pad:15;
   GLuint opcode:16;
};



struct brw_binding_table_pointers
{
   struct header header;
   GLuint vs; 
   GLuint gs; 
   GLuint clp; 
   GLuint sf; 
   GLuint wm; 
};


struct brw_blend_constant_color
{
   struct header header;
   GLfloat blend_constant_color[4];  
};


struct brw_depthbuffer
{
   union header_union header;
   
   union {
      struct {
	 GLuint pitch:18; 
	 GLuint format:3; 
	 GLuint pad:4;
	 GLuint depth_offset_disable:1; 
	 GLuint tile_walk:1; 
	 GLuint tiled_surface:1; 
	 GLuint pad2:1;
	 GLuint surface_type:3; 
      } bits;
      GLuint dword;
   } dword1;
   
   GLuint dword2_base_addr; 
 
   union {
      struct {
	 GLuint pad:1;
	 GLuint mipmap_layout:1; 
	 GLuint lod:4; 
	 GLuint width:13; 
	 GLuint height:13; 
      } bits;
      GLuint dword;
   } dword3;

   union {
      struct {
	 GLuint pad:12;
	 GLuint min_array_element:9; 
	 GLuint depth:11; 
      } bits;
      GLuint dword;
   } dword4;
};

struct brw_drawrect
{
   struct header header;
   GLuint xmin:16; 
   GLuint ymin:16; 
   GLuint xmax:16; 
   GLuint ymax:16; 
   GLuint xorg:16;  
   GLuint yorg:16;  
};




struct brw_global_depth_offset_clamp
{
   struct header header;
   GLfloat depth_offset_clamp;  
};

struct brw_indexbuffer
{   
   union {
      struct
      {
	 GLuint length:8; 
	 GLuint index_format:2; 
	 GLuint cut_index_enable:1; 
	 GLuint pad:5; 
	 GLuint opcode:16; 
      } bits;
      GLuint dword;

   } header;

   GLuint buffer_start; 
   GLuint buffer_end; 
};


struct brw_line_stipple
{   
   struct header header;
  
   struct
   {
      GLuint pattern:16; 
      GLuint pad:16;
   } bits0;
   
   struct
   {
      GLuint repeat_count:9; 
      GLuint pad:7;
      GLuint inverse_repeat_count:16; 
   } bits1;
};


struct brw_pipelined_state_pointers
{
   struct header header;
   
   struct {
      GLuint pad:5;
      GLuint offset:27; 
   } vs;
   
   struct
   {
      GLuint enable:1;
      GLuint pad:4;
      GLuint offset:27; 
   } gs;
   
   struct
   {
      GLuint enable:1;
      GLuint pad:4;
      GLuint offset:27; 
   } clp;
   
   struct
   {
      GLuint pad:5;
      GLuint offset:27; 
   } sf;

   struct
   {
      GLuint pad:5;
      GLuint offset:27; 
   } wm;
   
   struct
   {
      GLuint pad:5;
      GLuint offset:27; /* KW: check me! */
   } cc;
};


struct brw_polygon_stipple_offset
{
   struct header header;

   struct {
      GLuint y_offset:5; 
      GLuint pad:3;
      GLuint x_offset:5; 
      GLuint pad0:19;
   } bits0;
};



struct brw_polygon_stipple
{
   struct header header;
   GLuint stipple[32];
};



struct brw_pipeline_select
{
   struct
   {
      GLuint pipeline_select:1;   
      GLuint pad:15;
      GLuint opcode:16;   
   } header;
};


struct brw_pipe_control
{
   struct
   {
      GLuint length:8;
      GLuint notify_enable:1;
      GLuint pad:2;
      GLuint instruction_state_cache_flush_enable:1;
      GLuint write_cache_flush_enable:1;
      GLuint depth_stall_enable:1;
      GLuint post_sync_operation:2;

      GLuint opcode:16;
   } header;

   struct
   {
      GLuint pad:2;
      GLuint dest_addr_type:1;
      GLuint dest_addr:29;
   } bits1;

   GLuint data0;
   GLuint data1;
};


struct brw_urb_fence
{
   struct
   {
      GLuint length:8;   
      GLuint vs_realloc:1;   
      GLuint gs_realloc:1;   
      GLuint clp_realloc:1;   
      GLuint sf_realloc:1;   
      GLuint vfe_realloc:1;   
      GLuint cs_realloc:1;   
      GLuint pad:2;
      GLuint opcode:16;   
   } header;

   struct
   {
      GLuint vs_fence:10;  
      GLuint gs_fence:10;  
      GLuint clp_fence:10;  
      GLuint pad:2;
   } bits0;

   struct
   {
      GLuint sf_fence:10;  
      GLuint vf_fence:10;  
      GLuint cs_fence:10;  
      GLuint pad:2;
   } bits1;
};

struct brw_constant_buffer_state /* previously brw_command_streamer */
{
   struct header header;

   struct
   {
      GLuint nr_urb_entries:3;   
      GLuint pad:1;
      GLuint urb_entry_size:5;   
      GLuint pad0:23;
   } bits0;
};

struct brw_constant_buffer
{
   struct
   {
      GLuint length:8;   
      GLuint valid:1;   
      GLuint pad:7;
      GLuint opcode:16;   
   } header;

   struct
   {
      GLuint buffer_length:6;   
      GLuint buffer_address:26;  
   } bits0;
};

struct brw_state_base_address
{
   struct header header;

   struct
   {
      GLuint modify_enable:1;
      GLuint pad:4;
      GLuint general_state_address:27;  
   } bits0;

   struct
   {
      GLuint modify_enable:1;
      GLuint pad:4;
      GLuint surface_state_address:27;  
   } bits1;

   struct
   {
      GLuint modify_enable:1;
      GLuint pad:4;
      GLuint indirect_object_state_address:27;  
   } bits2;

   struct
   {
      GLuint modify_enable:1;
      GLuint pad:11;
      GLuint general_state_upper_bound:20;  
   } bits3;

   struct
   {
      GLuint modify_enable:1;
      GLuint pad:11;
      GLuint indirect_object_state_upper_bound:20;  
   } bits4;
};

struct brw_state_prefetch
{
   struct header header;

   struct
   {
      GLuint prefetch_count:3;   
      GLuint pad:3;
      GLuint prefetch_pointer:26;  
   } bits0;
};

struct brw_system_instruction_pointer
{
   struct header header;

   struct
   {
      GLuint pad:4;
      GLuint system_instruction_pointer:28;  
   } bits0;
};




/* State structs for the various fixed function units:
 */


struct thread0
{
   GLuint pad0:1;
   GLuint grf_reg_count:3; 
   GLuint pad1:2;
   GLuint kernel_start_pointer:26; 
};

struct thread1
{
   GLuint ext_halt_exception_enable:1; 
   GLuint sw_exception_enable:1; 
   GLuint mask_stack_exception_enable:1; 
   GLuint timeout_exception_enable:1; 
   GLuint illegal_op_exception_enable:1; 
   GLuint pad0:3;
   GLuint depth_coef_urb_read_offset:6;	/* WM only */
   GLuint pad1:2;
   GLuint floating_point_mode:1; 
   GLuint thread_priority:1; 
   GLuint binding_table_entry_count:8; 
   GLuint pad3:5;
   GLuint single_program_flow:1; 
};

struct thread2
{
   GLuint per_thread_scratch_space:4; 
   GLuint pad0:6;
   GLuint scratch_space_base_pointer:22; 
};

   
struct thread3
{
   GLuint dispatch_grf_start_reg:4; 
   GLuint urb_entry_read_offset:6; 
   GLuint pad0:1;
   GLuint urb_entry_read_length:6; 
   GLuint pad1:1;
   GLuint const_urb_entry_read_offset:6; 
   GLuint pad2:1;
   GLuint const_urb_entry_read_length:6; 
   GLuint pad3:1;
};



struct brw_clip_unit_state
{
   struct thread0 thread0;
   struct thread1 thread1;
   struct thread2 thread2;
   struct thread3 thread3;

   struct
   {
      GLuint pad0:9;
      GLuint gs_output_stats:1; /* not always */
      GLuint stats_enable:1; 
      GLuint nr_urb_entries:7; 
      GLuint pad1:1;
      GLuint urb_entry_allocation_size:5; 
      GLuint pad2:1;
      GLuint max_threads:6; 	/* may be less */
      GLuint pad3:1;
   } thread4;   
      
   struct
   {
      GLuint pad0:13;
      GLuint clip_mode:3; 
      GLuint userclip_enable_flags:8; 
      GLuint userclip_must_clip:1; 
      GLuint pad1:1;
      GLuint guard_band_enable:1; 
      GLuint viewport_z_clip_enable:1; 
      GLuint viewport_xy_clip_enable:1; 
      GLuint vertex_position_space:1; 
      GLuint api_mode:1; 
      GLuint pad2:1;
   } clip5;
   
   struct
   {
      GLuint pad0:5;
      GLuint clipper_viewport_state_ptr:27; 
   } clip6;

   
   GLfloat viewport_xmin;  
   GLfloat viewport_xmax;  
   GLfloat viewport_ymin;  
   GLfloat viewport_ymax;  
};



struct brw_cc_unit_state
{
   struct
   {
      GLuint pad0:3;
      GLuint bf_stencil_pass_depth_pass_op:3; 
      GLuint bf_stencil_pass_depth_fail_op:3; 
      GLuint bf_stencil_fail_op:3; 
      GLuint bf_stencil_func:3; 
      GLuint bf_stencil_enable:1; 
      GLuint pad1:2;
      GLuint stencil_write_enable:1; 
      GLuint stencil_pass_depth_pass_op:3; 
      GLuint stencil_pass_depth_fail_op:3; 
      GLuint stencil_fail_op:3; 
      GLuint stencil_func:3; 
      GLuint stencil_enable:1; 
   } cc0;

   
   struct
   {
      GLuint bf_stencil_ref:8; 
      GLuint stencil_write_mask:8; 
      GLuint stencil_test_mask:8; 
      GLuint stencil_ref:8; 
   } cc1;

   
   struct
   {
      GLuint logicop_enable:1; 
      GLuint pad0:10;
      GLuint depth_write_enable:1; 
      GLuint depth_test_function:3; 
      GLuint depth_test:1; 
      GLuint bf_stencil_write_mask:8; 
      GLuint bf_stencil_test_mask:8; 
   } cc2;

   
   struct
   {
      GLuint pad0:8;
      GLuint alpha_test_func:3; 
      GLuint alpha_test:1; 
      GLuint blend_enable:1; 
      GLuint ia_blend_enable:1; 
      GLuint pad1:1;
      GLuint alpha_test_format:1;
      GLuint pad2:16;
   } cc3;
   
   struct
   {
      GLuint pad0:5; 
      GLuint cc_viewport_state_offset:27; 
   } cc4;
   
   struct
   {
      GLuint pad0:2;
      GLuint ia_dest_blend_factor:5; 
      GLuint ia_src_blend_factor:5; 
      GLuint ia_blend_function:3; 
      GLuint statistics_enable:1; 
      GLuint logicop_func:4; 
      GLuint pad1:11;
      GLuint dither_enable:1; 
   } cc5;

   struct
   {
      GLuint clamp_post_alpha_blend:1; 
      GLuint clamp_pre_alpha_blend:1; 
      GLuint clamp_range:2; 
      GLuint pad0:11;
      GLuint y_dither_offset:2; 
      GLuint x_dither_offset:2; 
      GLuint dest_blend_factor:5; 
      GLuint src_blend_factor:5; 
      GLuint blend_function:3; 
   } cc6;

   struct {
      union {
	 GLfloat f;  
	 GLubyte ub[4];
      } alpha_ref;
   } cc7;
};



struct brw_sf_unit_state
{
   struct thread0 thread0;
   struct thread1 thread1;
   struct thread2 thread2;
   struct thread3 thread3;

   struct
   {
      GLuint pad0:10;
      GLuint stats_enable:1; 
      GLuint nr_urb_entries:7; 
      GLuint pad1:1;
      GLuint urb_entry_allocation_size:5; 
      GLuint pad2:1;
      GLuint max_threads:6; 
      GLuint pad3:1;
   } thread4;   

   struct
   {
      GLuint front_winding:1; 
      GLuint viewport_transform:1; 
      GLuint pad0:3;
      GLuint sf_viewport_state_offset:27; 
   } sf5;
   
   struct
   {
      GLuint pad0:9;
      GLuint dest_org_vbias:4; 
      GLuint dest_org_hbias:4; 
      GLuint scissor:1; 
      GLuint disable_2x2_trifilter:1; 
      GLuint disable_zero_pix_trifilter:1; 
      GLuint point_rast_rule:2; 
      GLuint line_endcap_aa_region_width:2; 
      GLuint line_width:4; 
      GLuint fast_scissor_disable:1; 
      GLuint cull_mode:2; 
      GLuint aa_enable:1; 
   } sf6;

   struct
   {
      GLuint point_size:11; 
      GLuint use_point_size_state:1; 
      GLuint subpixel_precision:1; 
      GLuint sprite_point:1; 
      GLuint pad0:11;
      GLuint trifan_pv:2; 
      GLuint linestrip_pv:2; 
      GLuint tristrip_pv:2; 
      GLuint line_last_pixel_enable:1; 
   } sf7;

};


struct brw_gs_unit_state
{
   struct thread0 thread0;
   struct thread1 thread1;
   struct thread2 thread2;
   struct thread3 thread3;

   struct
   {
      GLuint pad0:10;
      GLuint stats_enable:1; 
      GLuint nr_urb_entries:7; 
      GLuint pad1:1;
      GLuint urb_entry_allocation_size:5; 
      GLuint pad2:1;
      GLuint max_threads:1; 
      GLuint pad3:6;
   } thread4;   
      
   struct
   {
      GLuint sampler_count:3; 
      GLuint pad0:2;
      GLuint sampler_state_pointer:27; 
   } gs5;

   
   struct
   {
      GLuint max_vp_index:4; 
      GLuint pad0:26;
      GLuint reorder_enable:1; 
      GLuint pad1:1;
   } gs6;
};


struct brw_vs_unit_state
{
   struct thread0 thread0;
   struct thread1 thread1;
   struct thread2 thread2;
   struct thread3 thread3;
   
   struct
   {
      GLuint pad0:10;
      GLuint stats_enable:1; 
      GLuint nr_urb_entries:7; 
      GLuint pad1:1;
      GLuint urb_entry_allocation_size:5; 
      GLuint pad2:1;
      GLuint max_threads:4; 
      GLuint pad3:3;
   } thread4;   

   struct
   {
      GLuint sampler_count:3; 
      GLuint pad0:2;
      GLuint sampler_state_pointer:27; 
   } vs5;

   struct
   {
      GLuint vs_enable:1; 
      GLuint vert_cache_disable:1; 
      GLuint pad0:30;
   } vs6;
};


struct brw_wm_unit_state
{
   struct thread0 thread0;
   struct thread1 thread1;
   struct thread2 thread2;
   struct thread3 thread3;
   
   struct {
      GLuint stats_enable:1; 
      GLuint pad0:1;
      GLuint sampler_count:3; 
      GLuint sampler_state_pointer:27; 
   } wm4;
   
   struct
   {
      GLuint enable_8_pix:1; 
      GLuint enable_16_pix:1; 
      GLuint enable_32_pix:1; 
      GLuint pad0:7;
      GLuint legacy_global_depth_bias:1; 
      GLuint line_stipple:1; 
      GLuint depth_offset:1; 
      GLuint polygon_stipple:1; 
      GLuint line_aa_region_width:2; 
      GLuint line_endcap_aa_region_width:2; 
      GLuint early_depth_test:1; 
      GLuint thread_dispatch_enable:1; 
      GLuint program_uses_depth:1; 
      GLuint program_computes_depth:1; 
      GLuint program_uses_killpixel:1; 
      GLuint legacy_line_rast: 1; 
      GLuint pad1:1; 
      GLuint max_threads:6; 
      GLuint pad2:1;
   } wm5;
   
   GLfloat global_depth_offset_constant;  
   GLfloat global_depth_offset_scale;   
};

struct brw_sampler_default_color {
   GLfloat color[4];
};

struct brw_sampler_state
{
   
   struct
   {
      GLuint shadow_function:3; 
      GLuint lod_bias:11; 
      GLuint min_filter:3; 
      GLuint mag_filter:3; 
      GLuint mip_filter:2; 
      GLuint base_level:5; 
      GLuint pad:1;
      GLuint lod_preclamp:1; 
      GLuint default_color_mode:1; 
      GLuint pad0:1;
      GLuint disable:1; 
   } ss0;

   struct
   {
      GLuint r_wrap_mode:3; 
      GLuint t_wrap_mode:3; 
      GLuint s_wrap_mode:3; 
      GLuint pad:3;
      GLuint max_lod:10; 
      GLuint min_lod:10; 
   } ss1;

   
   struct
   {
      GLuint pad:5;
      GLuint default_color_pointer:27; 
   } ss2;
   
   struct
   {
      GLuint pad:19;
      GLuint max_aniso:3; 
      GLuint chroma_key_mode:1; 
      GLuint chroma_key_index:2; 
      GLuint chroma_key_enable:1; 
      GLuint monochrome_filter_width:3; 
      GLuint monochrome_filter_height:3; 
   } ss3;
};


struct brw_clipper_viewport
{
   GLfloat xmin;  
   GLfloat xmax;  
   GLfloat ymin;  
   GLfloat ymax;  
};

struct brw_cc_viewport
{
   GLfloat min_depth;  
   GLfloat max_depth;  
};

struct brw_sf_viewport
{
   struct {
      GLfloat m00;  
      GLfloat m11;  
      GLfloat m22;  
      GLfloat m30;  
      GLfloat m31;  
      GLfloat m32;  
   } viewport;

   struct {
      GLshort xmin;
      GLshort ymin;
      GLshort xmax;
      GLshort ymax;
   } scissor;
};

/* Documented in the subsystem/shared-functions/sampler chapter...
 */
struct brw_surface_state
{
   struct {
      GLuint cube_pos_z:1; 
      GLuint cube_neg_z:1; 
      GLuint cube_pos_y:1; 
      GLuint cube_neg_y:1; 
      GLuint cube_pos_x:1; 
      GLuint cube_neg_x:1; 
      GLuint pad:4;
      GLuint mipmap_layout_mode:1; 
      GLuint vert_line_stride_ofs:1; 
      GLuint vert_line_stride:1; 
      GLuint color_blend:1; 
      GLuint writedisable_blue:1; 
      GLuint writedisable_green:1; 
      GLuint writedisable_red:1; 
      GLuint writedisable_alpha:1; 
      GLuint surface_format:9; 
      GLuint data_return_format:1; 
      GLuint pad0:1;
      GLuint surface_type:3; 
   } ss0;
   
   struct {
      GLuint base_addr;  
   } ss1;
   
   struct {
      GLuint pad:2;
      GLuint mip_count:4; 
      GLuint width:13; 
      GLuint height:13; 
   } ss2;

   struct {
      GLuint tile_walk:1; 
      GLuint tiled_surface:1; 
      GLuint pad:1; 
      GLuint pitch:18; 
      GLuint depth:11; 
   } ss3;
   
   struct {
      GLuint pad:19;
      GLuint min_array_elt:9; 
      GLuint min_lod:4; 
   } ss4;
};



struct brw_vertex_buffer_state
{
   struct {
      GLuint pitch:11; 
      GLuint pad:15;
      GLuint access_type:1; 
      GLuint vb_index:5; 
   } vb0;
   
   GLuint start_addr; 
   GLuint max_index;   
#if 1
   GLuint instance_data_step_rate; /* not included for sequential/random vertices? */
#endif
};

#define BRW_VBP_MAX 17

struct brw_vb_array_state {
   struct header header;
   struct brw_vertex_buffer_state vb[BRW_VBP_MAX];
};


struct brw_vertex_element_state
{
   struct
   {
      GLuint src_offset:11; 
      GLuint pad:5;
      GLuint src_format:9; 
      GLuint pad0:1;
      GLuint valid:1; 
      GLuint vertex_buffer_index:5; 
   } ve0;
   
   struct
   {
      GLuint dst_offset:8; 
      GLuint pad:8;
      GLuint vfcomponent3:4; 
      GLuint vfcomponent2:4; 
      GLuint vfcomponent1:4; 
      GLuint vfcomponent0:4; 
   } ve1;
};

#define BRW_VEP_MAX 18

struct brw_vertex_element_packet {
   struct header header;
   struct brw_vertex_element_state ve[BRW_VEP_MAX]; /* note: less than _TNL_ATTRIB_MAX */
};


struct brw_urb_immediate {
   GLuint opcode:4;
   GLuint offset:6;
   GLuint swizzle_control:2; 
   GLuint pad:1;
   GLuint allocate:1;
   GLuint used:1;
   GLuint complete:1;
   GLuint response_length:4;
   GLuint msg_length:4;
   GLuint msg_target:4;
   GLuint pad1:3;
   GLuint end_of_thread:1;
};

/* Instruction format for the execution units:
 */
 
struct brw_instruction
{
   struct 
   {
      GLuint opcode:7;
      GLuint pad:1;
      GLuint access_mode:1;
      GLuint mask_control:1;
      GLuint dependency_control:2;
      GLuint compression_control:2; /* gen6: quater control */
      GLuint thread_control:2;
      GLuint predicate_control:4;
      GLuint predicate_inverse:1;
      GLuint execution_size:3;
      /**
       * Conditional Modifier for most instructions.  On Gen6+, this is also
       * used for the SEND instruction's Message Target/SFID.
       */
      GLuint destreg__conditionalmod:4;
      GLuint acc_wr_control:1;
      GLuint cmpt_control:1;
      GLuint debug_control:1;
      GLuint saturate:1;
   } header;

   union {
      struct
      {
	 GLuint dest_reg_file:2;	/* 0x00000003 */
	 GLuint dest_reg_type:3;	/* 0x0000001c */
	 GLuint src0_reg_file:2;	/* 0x00000060 */
	 GLuint src0_reg_type:3;	/* 0x00000380 */
	 GLuint src1_reg_file:2;	/* 0x00000c00 */
	 GLuint src1_reg_type:3;	/* 0x00007000 */
	 GLuint pad:1;			/* 0x00008000 */
	 GLuint dest_subreg_nr:5;	/* 0x001f0000 */
	 GLuint dest_reg_nr:8;		/* 0x1f700000 */
	 GLuint dest_horiz_stride:2;	/* 0x60000000 */
	 GLuint dest_address_mode:1;	/* 0x80000000 */
      } da1; /* direct align1 */

      struct
      {
	 GLuint dest_reg_file:2;
	 GLuint dest_reg_type:3;
	 GLuint src0_reg_file:2;
	 GLuint src0_reg_type:3;
	 GLuint src1_reg_file:2;	/* 0x00000c00 */
	 GLuint src1_reg_type:3;	/* 0x00007000 */
	 GLuint pad:1;
	 GLint dest_indirect_offset:10;	/* offset against the deref'd address reg */
	 GLuint dest_subreg_nr:3; /* subnr for the address reg a0.x */
	 GLuint dest_horiz_stride:2;
	 GLuint dest_address_mode:1;
      } ia1; /* indirect align1 */

      struct
      {
	 GLuint dest_reg_file:2;
	 GLuint dest_reg_type:3;
	 GLuint src0_reg_file:2;
	 GLuint src0_reg_type:3;
	 GLuint src1_reg_file:2;
	 GLuint src1_reg_type:3;
	 GLuint pad0:1;
	 GLuint dest_writemask:4;
	 GLuint dest_subreg_nr:1;
	 GLuint dest_reg_nr:8;
	 GLuint dest_horiz_stride:2;
	 GLuint dest_address_mode:1;
      } da16; /* direct align16 */

      struct
      {
	 GLuint dest_reg_file:2;
	 GLuint dest_reg_type:3;
	 GLuint src0_reg_file:2;
	 GLuint src0_reg_type:3;
	 GLuint pad0:6;
	 GLuint dest_writemask:4;
	 GLint dest_indirect_offset:6;
	 GLuint dest_subreg_nr:3;
	 GLuint dest_horiz_stride:2;
	 GLuint dest_address_mode:1;
      } ia16; /* indirect align16 */

      struct
      {
	 GLuint dest_reg_file:1; /* used in Gen6, deleted in Gen7 */
	 GLuint flag_subreg_nr:1;
	 GLuint flag_reg_nr:1;   /* not in Gen6. Add in Gen7 */
	 GLuint pad1:1; /* reserved */
	 GLuint src0_modifier:2;
	 GLuint src1_modifier:2;
	 GLuint src2_modifier:2;
	 GLuint src_reg_type:2;
	 GLuint dest_reg_type:2;
	 GLuint pad2:1; /* reserved */
	 GLuint nib_ctrl:1;
	 GLuint pad3:1; /* reserved */
	 GLuint dest_writemask:4;
	 GLuint dest_subreg_nr:3;
	 GLuint dest_reg_nr:8;
      } da3src;

      struct
      {
	 GLuint pad:16;
	 GLint JIP:16;
      } branch; /* conditional branch JIP for Gen6 only */
   } bits1;


   union {
      struct
      {
	 GLuint src0_subreg_nr:5;	/* 0x0000001f */
	 GLuint src0_reg_nr:8;		/* 0x00001fe0 */
	 GLuint src0_abs:1;		/* 0x00002000 */
	 GLuint src0_negate:1;		/* 0x00004000 */
	 GLuint src0_address_mode:1;	/* 0x00008000 */
	 GLuint src0_horiz_stride:2;	/* 0x00030000 */
	 GLuint src0_width:3;		/* 0x001c0000 */
	 GLuint src0_vert_stride:4;	/* 0x01e00000 */
	 GLuint flag_subreg_nr:1;	/* 0x02000000 */
	 GLuint flag_reg_nr:1;		/* 0x04000000 */
	 GLuint pad:5;			/* 0xf8000000 */
      } da1; /* direct align1 */

      struct
      {
	 GLint src0_indirect_offset:10;
	 GLuint src0_subreg_nr:3;
	 GLuint src0_abs:1;
	 GLuint src0_negate:1;
	 GLuint src0_address_mode:1;
	 GLuint src0_horiz_stride:2;
	 GLuint src0_width:3;
	 GLuint src0_vert_stride:4;
	 GLuint flag_subreg_nr:1;
	 GLuint flag_reg_nr:1;
	 GLuint pad:5;	
      } ia1; /* indirect align1 */

      struct
      {
	 GLuint src0_swz_x:2;
	 GLuint src0_swz_y:2;
	 GLuint src0_subreg_nr:1;
	 GLuint src0_reg_nr:8;
	 GLuint src0_abs:1;
	 GLuint src0_negate:1;
	 GLuint src0_address_mode:1;
	 GLuint src0_swz_z:2;
	 GLuint src0_swz_w:2;
	 GLuint pad0:1;
	 GLuint src0_vert_stride:4;
	 GLuint flag_subreg_nr:1;
	 GLuint flag_reg_nr:1;
	 GLuint pad1:5;
      } da16; /* direct align16 */

      struct
      {
	 GLuint src0_swz_x:2;
	 GLuint src0_swz_y:2;
	 GLint src0_indirect_offset:6;
	 GLuint src0_subreg_nr:3;
	 GLuint src0_abs:1;
	 GLuint src0_negate:1;
	 GLuint src0_address_mode:1;
	 GLuint src0_swz_z:2;
	 GLuint src0_swz_w:2;
	 GLuint pad0:1;
	 GLuint src0_vert_stride:4;
	 GLuint flag_subreg_nr:1;
	 GLuint flag_reg_nr:1;
	 GLuint pad1:5;
      } ia16; /* indirect align16 */

      struct
      {
	 GLuint src0_rep_ctrl:1;
	 GLuint src0_swizzle:8;
	 GLuint src0_subreg_nr:3;
	 GLuint src0_reg_nr:8;
	 GLuint pad0:1; /* reserved */
	 GLuint src1_rep_ctrl:1;
	 GLuint src1_swizzle:8;
	 GLuint src1_subreg_nr_low:2; /* src1_subreg_nr spans on two DWORDs */
      } da3src;

       struct 
       {
           GLuint pad:26;
           GLuint end_of_thread:1;
           GLuint pad1:1;
           GLuint sfid:4;
       } send_gen5;  /* for GEN5 only */
       struct 
       {
           GLuint pad:26;
           GLuint msg_ext:6;
       } msg_ext;
   } bits2;

   union
   {
      struct
      {
	 GLuint src1_subreg_nr:5;
	 GLuint src1_reg_nr:8;
	 GLuint src1_abs:1;
	 GLuint src1_negate:1;
	 GLuint src1_address_mode:1;
	 GLuint src1_horiz_stride:2;
	 GLuint src1_width:3;
	 GLuint src1_vert_stride:4;
	 GLuint pad0:7;
      } da1; /* direct align1 */

      struct
      {
	 GLuint src1_swz_x:2;
	 GLuint src1_swz_y:2;
	 GLuint src1_subreg_nr:1;
	 GLuint src1_reg_nr:8;
	 GLuint src1_abs:1;
	 GLuint src1_negate:1;
	 GLuint src1_address_mode:1;
	 GLuint src1_swz_z:2;
	 GLuint src1_swz_w:2;
	 GLuint pad1:1;
	 GLuint src1_vert_stride:4;
	 GLuint pad2:7;
      } da16; /* direct align16 */

      struct
      {
	 GLint  src1_indirect_offset:10;
	 GLuint src1_subreg_nr:3;
	 GLuint src1_abs:1;
	 GLuint src1_negate:1;
	 GLuint src1_address_mode:1;
	 GLuint src1_horiz_stride:2;
	 GLuint src1_width:3;
	 GLuint src1_vert_stride:4;
	 GLuint pad1:7;	
      } ia1; /* indirect align1 */

      struct
      {
	 GLuint src1_swz_x:2;
	 GLuint src1_swz_y:2;
	 GLint  src1_indirect_offset:6;
	 GLuint src1_subreg_nr:3;
	 GLuint src1_abs:1;
	 GLuint src1_negate:1;
	 GLuint src1_address_mode:1;
	 GLuint src1_swz_z:2;
	 GLuint src1_swz_w:2;
	 GLuint pad1:1;
	 GLuint src1_vert_stride:4;
	 GLuint pad2:7;
      } ia16; /* indirect align16 */

      struct
      {
	 GLuint src1_subreg_nr_high:1; /* src1_subreg_nr spans on two DWORDs */
	 GLuint src1_reg_nr:8;
	 GLuint pad0:1; /* reserved */
	 GLuint src2_rep_ctrl:1;
	 GLuint src2_swizzle:8;
	 GLuint src2_subreg_nr:3;
	 GLuint src2_reg_nr:8;
	 GLuint pad1:2; /* reserved */
      } da3src;

      struct
      {
	 GLint JIP:16; /* Gen7 bspec: both the JIP and UIP are signed 16-bit numbers */
	 GLint UIP:16;
      } branch_2_offset; /* for Gen6, Gen7 2-offsets branch; for Gen7 1-offset branch */

      GLint JIP; /* used by Gen6 CALL instructions; Gen7 JMPI */

      struct {
	 GLuint function:4;
	 GLuint int_type:1;
	 GLuint precision:1;
	 GLuint saturate:1;
	 GLuint data_type:1;
	 GLuint pad0:8;
	 GLuint response_length:4;
	 GLuint msg_length:4;
	 GLuint msg_target:4;
	 GLuint pad1:3;
	 GLuint end_of_thread:1;
      } math;

      struct {
	 GLuint binding_table_index:8;
	 GLuint sampler:4;
	 GLuint return_format:2; 
	 GLuint msg_type:2;   
	 GLuint response_length:4;
	 GLuint msg_length:4;
	 GLuint msg_target:4;
	 GLuint pad1:3;
	 GLuint end_of_thread:1;
      } sampler;

      struct brw_urb_immediate urb;

      struct {
	 GLuint binding_table_index:8;
	 GLuint msg_control:4;  
	 GLuint msg_type:2;  
	 GLuint target_cache:2;    
	 GLuint response_length:4;
	 GLuint msg_length:4;
	 GLuint msg_target:4;
	 GLuint pad1:3;
	 GLuint end_of_thread:1;
      } dp_read;

      struct {
	 GLuint binding_table_index:8;
	 GLuint msg_control:3;
	 GLuint pixel_scoreboard_clear:1;
	 GLuint msg_type:3;    
	 GLuint send_commit_msg:1;
	 GLuint response_length:4;
	 GLuint msg_length:4;
	 GLuint msg_target:4;
	 GLuint pad1:3;
	 GLuint end_of_thread:1;
      } dp_write;

      struct {
	  GLuint opcode:1;
          GLuint requester_type:1;
          GLuint pad:2;
          GLuint resource_select:1;
          GLuint pad1:11;
          GLuint response_length:4;
          GLuint msg_length:4;
          GLuint msg_target:4;
          GLuint pad2:3;
          GLuint end_of_thread:1;
      } thread_spawner;

      struct {
	 GLuint pad:16;
	 GLuint response_length:4;
	 GLuint msg_length:4;
	 GLuint msg_target:4;
	 GLuint pad1:3;
	 GLuint end_of_thread:1;
      } generic;

       struct {
           GLuint function:4;
           GLuint int_type:1;
           GLuint precision:1;
           GLuint saturate:1;
           GLuint data_type:1;
           GLuint snapshot:1;
           GLuint pad0:10;
           GLuint header_present:1;
           GLuint response_length:5;
           GLuint msg_length:4;
           GLuint pad1:2;
           GLuint end_of_thread:1;
       } math_gen5;

       struct {
           GLuint opcode:4;
           GLuint offset:6;
           GLuint swizzle_control:2; 
           GLuint pad:1;
           GLuint allocate:1;
           GLuint used:1;
           GLuint complete:1;
           GLuint pad0:3;
           GLuint header_present:1;
           GLuint response_length:5;
           GLuint msg_length:4;
           GLuint pad1:2;
           GLuint end_of_thread:1;
       } urb_gen5;

       struct {
           GLuint binding_table_index:8;
           GLuint sampler:4;
           GLuint msg_type:4;
           GLuint simd_mode:2;
           GLuint pad0:1;
           GLuint header_present:1;
           GLuint response_length:5;
           GLuint msg_length:4;
           GLuint pad1:2;
           GLuint end_of_thread:1;
       } sampler_gen5;

       struct {
           GLuint binding_table_index:8;
           GLuint sampler:4;
           GLuint msg_type:5;
           GLuint simd_mode:2;
           GLuint header_present:1;
           GLuint response_length:5;
           GLuint msg_length:4;
           GLuint pad1:2;
           GLuint end_of_thread:1;
       } sampler_gen7;

       struct {
           GLuint binding_table_index:8;
           GLuint msg_control:4;  
           GLuint msg_type:2;  
           GLuint target_cache:2;    
           GLuint pad0:3;
           GLuint header_present:1;
           GLuint response_length:5;
           GLuint msg_length:4;
           GLuint pad1:2;
           GLuint end_of_thread:1;
       } dp_read_gen5;

      /**
       * Message for the Sandybridge Sampler Cache or Constant Cache Data Port.
       *
       * See the Sandybridge PRM, Volume 4 Part 1, Section 3.9.2.1.1.
       **/
      struct {
	 GLuint binding_table_index:8;
	 GLuint msg_control:5;
	 GLuint msg_type:3;
	 GLuint pad0:3;
	 GLuint header_present:1;
	 GLuint response_length:5;
	 GLuint msg_length:4;
	 GLuint pad1:2;
	 GLuint end_of_thread:1;
      } gen6_dp_sampler_const_cache;

       struct {
           GLuint binding_table_index:8;
           GLuint msg_control:3;
           GLuint pixel_scoreboard_clear:1;
           GLuint msg_type:3;    
           GLuint send_commit_msg:1;
           GLuint pad0:3;
           GLuint header_present:1;
           GLuint response_length:5;
           GLuint msg_length:4;
           GLuint pad1:2;
           GLuint end_of_thread:1;
       } dp_write_gen5;

       struct {
           GLuint binding_table_index:8;
           GLuint msg_control:5;
           GLuint msg_type:4;    
           GLuint send_commit_msg:1;
           GLuint pad0:1;
           GLuint header_present:1;
           GLuint response_length:5;
           GLuint msg_length:4;
           GLuint pad1:2;
           GLuint end_of_thread:1;
       } dp_write_gen6;

       struct {
           GLuint binding_table_index:8;
           GLuint msg_control:5;
           GLuint msg_type:4;    
           GLuint send_commit_msg:1; /* ignore on read message */
           GLuint pad0:1;
           GLuint header_present:1;
           GLuint response_length:5;
           GLuint msg_length:4;
           GLuint pad1:2;
           GLuint end_of_thread:1;
       } dp_gen6;

       struct {
           GLuint binding_table_index:8;
           GLuint msg_control:6;
           GLuint msg_type:4;    
           GLuint category:1;
           GLuint header_present:1;
           GLuint response_length:5;
           GLuint msg_length:4;
           GLuint pad1:2;
           GLuint end_of_thread:1;
       } dp_gen7;

       struct {
           GLuint opcode:1;
           GLuint requester_type:1;
           GLuint pad0:2;
           GLuint resource_select:1;
           GLuint pad1:14;
           GLuint header_present:1;
           GLuint response_length:5;
           GLuint msg_length:4;
           GLuint pad2:2;
           GLuint end_of_thread:1;
       } thread_spawner_gen5;

       struct {
           GLuint binding_table_index:8;
           GLuint search_path_index:3;
           GLuint lut_subindex:2;
           GLuint message_type:2;
           GLuint pad0:4;
           GLuint header_present:1;
       } vme_gen6;
       struct {
           GLuint binding_table_index:8;
	   GLuint pad0:5;
           GLuint message_type:2;
           GLuint pad1:4;
           GLuint header_present:1;
       } cre_gen75;
       struct {
           GLuint pad:19;
           GLuint header_present:1;
           GLuint response_length:5;
           GLuint msg_length:4;
           GLuint pad1:2;
           GLuint end_of_thread:1;
       } generic_gen5;

      GLuint ud;
      GLint id;
      GLfloat fd;
   } bits3;

   char *first_reloc_target, *second_reloc_target; // first for JIP, second for UIP
   GLint first_reloc_offset, second_reloc_offset; // in number of instructions
};


#endif
