[Mesa-dev] [PATCH 15/19] i965: Throw out guts of struct brw_instruction.

Matt Turner mattst88 at gmail.com
Fri Jun 13 23:14:16 PDT 2014


---
 src/mesa/drivers/dri/i965/brw_structs.h | 630 +-------------------------------
 1 file changed, 1 insertion(+), 629 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_structs.h b/src/mesa/drivers/dri/i965/brw_structs.h
index 803dc6e..385bb3c 100644
--- a/src/mesa/drivers/dri/i965/brw_structs.h
+++ b/src/mesa/drivers/dri/i965/brw_structs.h
@@ -786,635 +786,7 @@ struct brw_urb_immediate {
 
 struct brw_instruction
 {
-   struct
-   {
-      unsigned opcode:7;
-      unsigned pad:1;
-      unsigned access_mode:1;
-      unsigned mask_control:1;
-      unsigned dependency_control:2;
-      unsigned compression_control:2; /* gen6: quarter control */
-      unsigned thread_control:2;
-      unsigned predicate_control:4;
-      unsigned predicate_inverse:1;
-      unsigned execution_size:3;
-      /**
-       * Conditional Modifier for most instructions.  On Gen6+, this is also
-       * used for the SEND instruction's Message Target/SFID.
-       */
-      unsigned destreg__conditionalmod:4;
-      unsigned acc_wr_control:1;
-      unsigned cmpt_control:1;
-      unsigned debug_control:1;
-      unsigned saturate:1;
-   } header;
-
-   union {
-      struct
-      {
-	 unsigned dest_reg_file:2;
-	 unsigned dest_reg_type:3;
-	 unsigned src0_reg_file:2;
-	 unsigned src0_reg_type:3;
-	 unsigned src1_reg_file:2;
-	 unsigned src1_reg_type:3;
-         unsigned nibctrl:1; /* gen7+ */
-	 unsigned dest_subreg_nr:5;
-	 unsigned dest_reg_nr:8;
-	 unsigned dest_horiz_stride:2;
-	 unsigned dest_address_mode:1;
-      } da1;
-
-      struct
-      {
-	 unsigned dest_reg_file:2;
-	 unsigned dest_reg_type:3;
-	 unsigned src0_reg_file:2;
-	 unsigned src0_reg_type:3;
-	 unsigned src1_reg_file:2;        /* 0x00000c00 */
-	 unsigned src1_reg_type:3;        /* 0x00007000 */
-         unsigned nibctrl:1; /* gen7+ */
-	 int dest_indirect_offset:10;	/* offset against the deref'd address reg */
-	 unsigned dest_subreg_nr:3; /* subnr for the address reg a0.x */
-	 unsigned dest_horiz_stride:2;
-	 unsigned dest_address_mode:1;
-      } ia1;
-
-      struct
-      {
-	 unsigned dest_reg_file:2;
-	 unsigned dest_reg_type:3;
-	 unsigned src0_reg_file:2;
-	 unsigned src0_reg_type:3;
-	 unsigned src1_reg_file:2;
-	 unsigned src1_reg_type:3;
-         unsigned nibctrl:1; /* gen7+ */
-	 unsigned dest_writemask:4;
-	 unsigned dest_subreg_nr:1;
-	 unsigned dest_reg_nr:8;
-	 unsigned dest_horiz_stride:2;
-	 unsigned dest_address_mode:1;
-      } da16;
-
-      struct
-      {
-	 unsigned dest_reg_file:2;
-	 unsigned dest_reg_type:3;
-	 unsigned src0_reg_file:2;
-	 unsigned src0_reg_type:3;
-         unsigned src1_reg_file:2;
-         unsigned src1_reg_type:3;
-         unsigned nibctrl:1; /* gen7+ */
-	 unsigned dest_writemask:4;
-	 int dest_indirect_offset:6;
-	 unsigned dest_subreg_nr:3;
-	 unsigned dest_horiz_stride:2;
-	 unsigned dest_address_mode:1;
-      } ia16;
-
-      struct {
-	 unsigned dest_reg_file:2;
-	 unsigned dest_reg_type:3;
-	 unsigned src0_reg_file:2;
-	 unsigned src0_reg_type:3;
-	 unsigned src1_reg_file:2;
-	 unsigned src1_reg_type:3;
-	 unsigned pad:1;
-
-	 int jump_count:16;
-      } branch_gen6;
-
-      struct {
-         unsigned dest_reg_file:1; /* gen6, not gen7+ */
-	 unsigned flag_subreg_num:1;
-         unsigned flag_reg_nr:1; /* gen7+ */
-         unsigned pad0:1;
-	 unsigned src0_abs:1;
-	 unsigned src0_negate:1;
-	 unsigned src1_abs:1;
-	 unsigned src1_negate:1;
-	 unsigned src2_abs:1;
-	 unsigned src2_negate:1;
-         unsigned src_type:2; /* gen7+ */
-         unsigned dst_type:2; /* gen7+ */
-         unsigned pad1:1;
-         unsigned nibctrl:1; /* gen7+ */
-         unsigned pad2:1;
-	 unsigned dest_writemask:4;
-	 unsigned dest_subreg_nr:3;
-	 unsigned dest_reg_nr:8;
-      } da3src;
-
-      uint32_t ud;
-   } bits1;
-
-
-   union {
-      struct
-      {
-	 unsigned src0_subreg_nr:5;
-	 unsigned src0_reg_nr:8;
-	 unsigned src0_abs:1;
-	 unsigned src0_negate:1;
-	 unsigned src0_address_mode:1;
-	 unsigned src0_horiz_stride:2;
-	 unsigned src0_width:3;
-	 unsigned src0_vert_stride:4;
-	 unsigned flag_subreg_nr:1;
-         unsigned flag_reg_nr:1; /* gen7+ */
-	 unsigned pad:5;
-      } da1;
-
-      struct
-      {
-	 int src0_indirect_offset:10;
-	 unsigned src0_subreg_nr:3;
-	 unsigned src0_abs:1;
-	 unsigned src0_negate:1;
-	 unsigned src0_address_mode:1;
-	 unsigned src0_horiz_stride:2;
-	 unsigned src0_width:3;
-	 unsigned src0_vert_stride:4;
-	 unsigned flag_subreg_nr:1;
-         unsigned flag_reg_nr:1; /* gen7+ */
-	 unsigned pad:5;
-      } ia1;
-
-      struct
-      {
-	 unsigned src0_swz_x:2;
-	 unsigned src0_swz_y:2;
-	 unsigned src0_subreg_nr:1;
-	 unsigned src0_reg_nr:8;
-	 unsigned src0_abs:1;
-	 unsigned src0_negate:1;
-	 unsigned src0_address_mode:1;
-	 unsigned src0_swz_z:2;
-	 unsigned src0_swz_w:2;
-	 unsigned pad0:1;
-	 unsigned src0_vert_stride:4;
-	 unsigned flag_subreg_nr:1;
-         unsigned flag_reg_nr:1; /* gen7+ */
-	 unsigned pad1:5;
-      } da16;
-
-      struct
-      {
-	 unsigned src0_swz_x:2;
-	 unsigned src0_swz_y:2;
-	 int src0_indirect_offset:6;
-	 unsigned src0_subreg_nr:3;
-	 unsigned src0_abs:1;
-	 unsigned src0_negate:1;
-	 unsigned src0_address_mode:1;
-	 unsigned src0_swz_z:2;
-	 unsigned src0_swz_w:2;
-	 unsigned pad0:1;
-	 unsigned src0_vert_stride:4;
-	 unsigned flag_subreg_nr:1;
-         unsigned flag_reg_nr:1; /* gen7+ */
-	 unsigned pad1:5;
-      } ia16;
-
-      /* Extended Message Descriptor for Ironlake (Gen5) SEND instruction.
-       *
-       * Does not apply to Gen6+.  The SFID/message target moved to bits
-       * 27:24 of the header (destreg__conditionalmod); EOT is in bits3.
-       */
-       struct
-       {
-           unsigned pad:26;
-           unsigned end_of_thread:1;
-           unsigned pad1:1;
-           unsigned sfid:4;
-       } send_gen5;  /* for Ironlake only */
-
-      struct {
-	 unsigned src0_rep_ctrl:1;
-	 unsigned src0_swizzle:8;
-	 unsigned src0_subreg_nr:3;
-	 unsigned src0_reg_nr:8;
-	 unsigned pad0:1;
-	 unsigned src1_rep_ctrl:1;
-	 unsigned src1_swizzle:8;
-	 unsigned src1_subreg_nr_low:2;
-      } da3src;
-
-      uint32_t ud;
-   } bits2;
-
-   union
-   {
-      struct
-      {
-	 unsigned src1_subreg_nr:5;
-	 unsigned src1_reg_nr:8;
-	 unsigned src1_abs:1;
-	 unsigned src1_negate:1;
-	 unsigned src1_address_mode:1;
-	 unsigned src1_horiz_stride:2;
-	 unsigned src1_width:3;
-	 unsigned src1_vert_stride:4;
-	 unsigned pad0:7;
-      } da1;
-
-      struct
-      {
-	 unsigned src1_swz_x:2;
-	 unsigned src1_swz_y:2;
-	 unsigned src1_subreg_nr:1;
-	 unsigned src1_reg_nr:8;
-	 unsigned src1_abs:1;
-	 unsigned src1_negate:1;
-	 unsigned src1_address_mode:1;
-	 unsigned src1_swz_z:2;
-	 unsigned src1_swz_w:2;
-	 unsigned pad1:1;
-	 unsigned src1_vert_stride:4;
-	 unsigned pad2:7;
-      } da16;
-
-      struct
-      {
-	 int  src1_indirect_offset:10;
-	 unsigned src1_subreg_nr:3;
-	 unsigned src1_abs:1;
-	 unsigned src1_negate:1;
-	 unsigned src1_address_mode:1;
-	 unsigned src1_horiz_stride:2;
-	 unsigned src1_width:3;
-	 unsigned src1_vert_stride:4;
-	 unsigned pad1:7;
-      } ia1;
-
-      struct
-      {
-	 unsigned src1_swz_x:2;
-	 unsigned src1_swz_y:2;
-	 int  src1_indirect_offset:6;
-	 unsigned src1_subreg_nr:3;
-	 unsigned src1_abs:1;
-	 unsigned src1_negate:1;
-	 unsigned pad0:1;
-	 unsigned src1_swz_z:2;
-	 unsigned src1_swz_w:2;
-	 unsigned pad1:1;
-	 unsigned src1_vert_stride:4;
-	 unsigned pad2:7;
-      } ia16;
-
-
-      struct
-      {
-	 int  jump_count:16;	/* note: signed */
-	 unsigned  pop_count:4;
-	 unsigned  pad0:12;
-      } if_else;
-
-      /* This is also used for gen7 IF/ELSE instructions */
-      struct
-      {
-	 /* Signed jump distance to the ip to jump to if all channels
-	  * are disabled after the break or continue.  It should point
-	  * to the end of the innermost control flow block, as that's
-	  * where some channel could get re-enabled.
-	  */
-	 int jip:16;
-
-	 /* Signed jump distance to the location to resume execution
-	  * of this channel if it's enabled for the break or continue.
-	  */
-	 int uip:16;
-      } break_cont;
-
-      /**
-       * \defgroup SEND instructions / Message Descriptors
-       *
-       * @{
-       */
-
-      /**
-       * Generic Message Descriptor for Gen4 SEND instructions.  The structs
-       * below expand function_control to something specific for their
-       * message.  Due to struct packing issues, they duplicate these bits.
-       *
-       * See the G45 PRM, Volume 4, Table 14-15.
-       */
-      struct {
-	 unsigned function_control:16;
-	 unsigned response_length:4;
-	 unsigned msg_length:4;
-	 unsigned msg_target:4;
-	 unsigned pad1:3;
-	 unsigned end_of_thread:1;
-      } generic;
-
-      /**
-       * Generic Message Descriptor for Gen5-7 SEND instructions.
-       *
-       * See the Sandybridge PRM, Volume 2 Part 2, Table 8-15.  (Sadly, most
-       * of the information on the SEND instruction is missing from the public
-       * Ironlake PRM.)
-       *
-       * The table claims that bit 31 is reserved/MBZ on Gen6+, but it lies.
-       * According to the SEND instruction description:
-       * "The MSb of the message description, the EOT field, always comes from
-       *  bit 127 of the instruction word"...which is bit 31 of this field.
-       */
-      struct {
-	 unsigned function_control:19;
-	 unsigned header_present:1;
-	 unsigned response_length:5;
-	 unsigned msg_length:4;
-	 unsigned pad1:2;
-	 unsigned end_of_thread:1;
-      } generic_gen5;
-
-      /** G45 PRM, Volume 4, Section 6.1.1.1 */
-      struct {
-	 unsigned function:4;
-	 unsigned int_type:1;
-	 unsigned precision:1;
-	 unsigned saturate:1;
-	 unsigned data_type:1;
-	 unsigned pad0:8;
-	 unsigned response_length:4;
-	 unsigned msg_length:4;
-	 unsigned msg_target:4;
-	 unsigned pad1:3;
-	 unsigned end_of_thread:1;
-      } math;
-
-      /** Ironlake PRM, Volume 4 Part 1, Section 6.1.1.1 */
-      struct {
-	 unsigned function:4;
-	 unsigned int_type:1;
-	 unsigned precision:1;
-	 unsigned saturate:1;
-	 unsigned data_type:1;
-	 unsigned snapshot:1;
-	 unsigned pad0:10;
-	 unsigned header_present:1;
-	 unsigned response_length:5;
-	 unsigned msg_length:4;
-	 unsigned pad1:2;
-	 unsigned end_of_thread:1;
-      } math_gen5;
-
-      /** G45 PRM, Volume 4, Section 4.8.1.1.1 [DevBW] and [DevCL] */
-      struct {
-	 unsigned binding_table_index:8;
-	 unsigned sampler:4;
-	 unsigned return_format:2;
-	 unsigned msg_type:2;
-	 unsigned response_length:4;
-	 unsigned msg_length:4;
-	 unsigned msg_target:4;
-	 unsigned pad1:3;
-	 unsigned end_of_thread:1;
-      } sampler;
-
-      /** G45 PRM, Volume 4, Section 4.8.1.1.2 [DevCTG] */
-      struct {
-         unsigned binding_table_index:8;
-         unsigned sampler:4;
-         unsigned msg_type:4;
-         unsigned response_length:4;
-         unsigned msg_length:4;
-         unsigned msg_target:4;
-         unsigned pad1:3;
-         unsigned end_of_thread:1;
-      } sampler_g4x;
-
-      /** Ironlake PRM, Volume 4 Part 1, Section 4.11.1.1.3 */
-      struct {
-	 unsigned binding_table_index:8;
-	 unsigned sampler:4;
-	 unsigned msg_type:4;
-	 unsigned simd_mode:2;
-	 unsigned pad0:1;
-	 unsigned header_present:1;
-	 unsigned response_length:5;
-	 unsigned msg_length:4;
-	 unsigned pad1:2;
-	 unsigned end_of_thread:1;
-      } sampler_gen5;
-
-      struct {
-	 unsigned binding_table_index:8;
-	 unsigned sampler:4;
-	 unsigned msg_type:5;
-	 unsigned simd_mode:2;
-	 unsigned header_present:1;
-	 unsigned response_length:5;
-	 unsigned msg_length:4;
-	 unsigned pad1:2;
-	 unsigned end_of_thread:1;
-      } sampler_gen7;
-
-      struct brw_urb_immediate urb;
-
-      struct {
-	 unsigned opcode:4;
-	 unsigned offset:6;
-	 unsigned swizzle_control:2;
-	 unsigned pad:1;
-	 unsigned allocate:1;
-	 unsigned used:1;
-	 unsigned complete:1;
-	 unsigned pad0:3;
-	 unsigned header_present:1;
-	 unsigned response_length:5;
-	 unsigned msg_length:4;
-	 unsigned pad1:2;
-	 unsigned end_of_thread:1;
-      } urb_gen5;
-
-      struct {
-	 unsigned opcode:3;
-	 unsigned offset:11;
-	 unsigned swizzle_control:1;
-	 unsigned complete:1;
-	 unsigned per_slot_offset:1;
-	 unsigned pad0:2;
-	 unsigned header_present:1;
-	 unsigned response_length:5;
-	 unsigned msg_length:4;
-	 unsigned pad1:2;
-	 unsigned end_of_thread:1;
-      } urb_gen7;
-
-      /** 965 PRM, Volume 4, Section 5.10.1.1: Message Descriptor */
-      struct {
-	 unsigned binding_table_index:8;
-	 unsigned msg_control:4;
-	 unsigned msg_type:2;
-	 unsigned target_cache:2;
-	 unsigned response_length:4;
-	 unsigned msg_length:4;
-	 unsigned msg_target:4;
-	 unsigned pad1:3;
-	 unsigned end_of_thread:1;
-      } dp_read;
-
-      /** G45 PRM, Volume 4, Section 5.10.1.1.2 */
-      struct {
-	 unsigned binding_table_index:8;
-	 unsigned msg_control:3;
-	 unsigned msg_type:3;
-	 unsigned target_cache:2;
-	 unsigned response_length:4;
-	 unsigned msg_length:4;
-	 unsigned msg_target:4;
-	 unsigned pad1:3;
-	 unsigned end_of_thread:1;
-      } dp_read_g4x;
-
-      /** Ironlake PRM, Volume 4 Part 1, Section 5.10.2.1.2. */
-      struct {
-	 unsigned binding_table_index:8;
-	 unsigned msg_control:3;
-	 unsigned msg_type:3;
-	 unsigned target_cache:2;
-	 unsigned pad0:3;
-	 unsigned header_present:1;
-	 unsigned response_length:5;
-	 unsigned msg_length:4;
-	 unsigned pad1:2;
-	 unsigned end_of_thread:1;
-      } dp_read_gen5;
-
-      /** G45 PRM, Volume 4, Section 5.10.1.1.2.  For both Gen4 and G45. */
-      struct {
-	 unsigned binding_table_index:8;
-	 unsigned msg_control:3;
-	 unsigned last_render_target:1;
-	 unsigned msg_type:3;
-	 unsigned send_commit_msg:1;
-	 unsigned response_length:4;
-	 unsigned msg_length:4;
-	 unsigned msg_target:4;
-	 unsigned pad1:3;
-	 unsigned end_of_thread:1;
-      } dp_write;
-
-      /** Ironlake PRM, Volume 4 Part 1, Section 5.10.2.1.2. */
-      struct {
-	 unsigned binding_table_index:8;
-	 unsigned msg_control:3;
-	 unsigned last_render_target:1;
-	 unsigned msg_type:3;
-	 unsigned send_commit_msg:1;
-	 unsigned pad0:3;
-	 unsigned header_present:1;
-	 unsigned response_length:5;
-	 unsigned msg_length:4;
-	 unsigned pad1:2;
-	 unsigned end_of_thread:1;
-      } dp_write_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 {
-	 unsigned binding_table_index:8;
-	 unsigned msg_control:5;
-	 unsigned msg_type:3;
-	 unsigned pad0:3;
-	 unsigned header_present:1;
-	 unsigned response_length:5;
-	 unsigned msg_length:4;
-	 unsigned pad1:2;
-	 unsigned end_of_thread:1;
-      } gen6_dp_sampler_const_cache;
-
-      /**
-       * Message for the Sandybridge Render Cache Data Port.
-       *
-       * Most fields are defined in the Sandybridge PRM, Volume 4 Part 1,
-       * Section 3.9.2.1.1: Message Descriptor.
-       *
-       * "Slot Group Select" and "Last Render Target" are part of the
-       * 5-bit message control for Render Target Write messages.  See
-       * Section 3.9.9.2.1 of the same volume.
-       */
-      struct {
-	 unsigned binding_table_index:8;
-	 unsigned msg_control:3;
-	 unsigned slot_group_select:1;
-	 unsigned last_render_target:1;
-	 unsigned msg_type:4;
-	 unsigned send_commit_msg:1;
-	 unsigned pad0:1;
-	 unsigned header_present:1;
-	 unsigned response_length:5;
-	 unsigned msg_length:4;
-	 unsigned pad1:2;
-	 unsigned end_of_thread:1;
-      } gen6_dp;
-
-      /**
-       * Message for any of the Gen7 Data Port caches.
-       *
-       * Most fields are defined in the Ivybridge PRM, Volume 4 Part 1,
-       * section 3.9.2.1.1 "Message Descriptor".  Once again, "Slot Group
-       * Select" and "Last Render Target" are part of the 6-bit message
-       * control for Render Target Writes (section 3.9.11.2).
-       */
-      struct {
-	 unsigned binding_table_index:8;
-	 unsigned msg_control:3;
-	 unsigned slot_group_select:1;
-	 unsigned last_render_target:1;
-	 unsigned msg_control_pad:1;
-	 unsigned msg_type:4;
-	 unsigned pad1:1;
-	 unsigned header_present:1;
-	 unsigned response_length:5;
-	 unsigned msg_length:4;
-	 unsigned pad2:2;
-	 unsigned end_of_thread:1;
-      } gen7_dp;
-
-      /**
-       * Message for the Gen7 Pixel Interpolator.
-       *
-       * Defined in the Ivybridge PRM, Volume 4 Part 2,
-       * section 4.1.1.1.
-       */
-      struct {
-         unsigned msg_data:8;
-         unsigned pad1:3;
-         unsigned slot_group:1;
-         unsigned msg_type:2;
-         unsigned interpolation_mode:1;
-         unsigned pad2:1;
-         unsigned simd_mode:1;
-         unsigned pad3:1;
-         unsigned response_length:5;
-         unsigned msg_length:4;
-         unsigned pad4:2;
-         unsigned end_of_thread:1;
-      } gen7_pi;
-      /** @} */
-
-      struct {
-	 unsigned src1_subreg_nr_high:1;
-	 unsigned src1_reg_nr:8;
-	 unsigned pad0:1;
-	 unsigned src2_rep_ctrl:1;
-	 unsigned src2_swizzle:8;
-	 unsigned src2_subreg_nr:3;
-	 unsigned src2_reg_nr:8;
-	 unsigned pad1:2;
-      } da3src;
-
-      int d;
-      unsigned ud;
-      float f;
-   } bits3;
+   uint64_t data[2];
 };
 
 struct brw_compact_instruction {
-- 
1.8.3.2



More information about the mesa-dev mailing list