diff options
| author | Eric Anholt <eric@anholt.net> | 2009-12-16 14:45:50 -0800 | 
|---|---|---|
| committer | Eric Anholt <eric@anholt.net> | 2009-12-22 14:20:26 -0800 | 
| commit | 1c96e85c9d6b8c636b0636f3320d1057ab5357b3 (patch) | |
| tree | 5db260c75369343174d014330f6f49b57d06cb88 | |
| parent | b08ed4f5955ef72309b6e20d865faf6d925c8c6e (diff) | |
intel: Replace IS_IGDNG checks with intel->is_ironlake or needs_ff_sync.
Saves ~480 bytes of code.
24 files changed, 108 insertions, 62 deletions
| diff --git a/src/mesa/drivers/dri/i965/brw_clip.c b/src/mesa/drivers/dri/i965/brw_clip.c index dbd10a5297..af1d975de9 100644 --- a/src/mesa/drivers/dri/i965/brw_clip.c +++ b/src/mesa/drivers/dri/i965/brw_clip.c @@ -50,6 +50,7 @@  static void compile_clip_prog( struct brw_context *brw,  			     struct brw_clip_prog_key *key )  { +   struct intel_context *intel = &brw->intel;     struct brw_clip_compile c;     const GLuint *program;     GLuint program_size; @@ -65,14 +66,13 @@ static void compile_clip_prog( struct brw_context *brw,     c.func.single_program_flow = 1;     c.key = *key; -   c.need_ff_sync = BRW_IS_IGDNG(brw);     /* Need to locate the two positions present in vertex + header.      * These are currently hardcoded:      */     c.header_position_offset = ATTR_SIZE; -   if (BRW_IS_IGDNG(brw)) +   if (intel->is_ironlake)         delta = 3 * REG_SIZE;     else         delta = REG_SIZE; @@ -85,7 +85,7 @@ static void compile_clip_prog( struct brw_context *brw,     c.nr_attrs = brw_count_bits(c.key.attrs); -   if (BRW_IS_IGDNG(brw)) +   if (intel->is_ironlake)         c.nr_regs = (c.nr_attrs + 1) / 2 + 3;  /* are vertices packed, or reg-aligned? */     else         c.nr_regs = (c.nr_attrs + 1) / 2 + 1;  /* are vertices packed, or reg-aligned? */ @@ -143,7 +143,8 @@ static void compile_clip_prog( struct brw_context *brw,   */  static void upload_clip_prog(struct brw_context *brw)  { -   GLcontext *ctx = &brw->intel.ctx; +   struct intel_context *intel = &brw->intel; +   GLcontext *ctx = &intel->ctx;     struct brw_clip_prog_key key;     memset(&key, 0, sizeof(key)); @@ -160,7 +161,7 @@ static void upload_clip_prog(struct brw_context *brw)     /* _NEW_TRANSFORM */     key.nr_userclip = brw_count_bits(ctx->Transform.ClipPlanesEnabled); -   if (BRW_IS_IGDNG(brw)) +   if (intel->is_ironlake)         key.clip_mode = BRW_CLIPMODE_KERNEL_CLIP;     else         key.clip_mode = BRW_CLIPMODE_NORMAL; diff --git a/src/mesa/drivers/dri/i965/brw_clip.h b/src/mesa/drivers/dri/i965/brw_clip.h index 1c6825510a..d71bac7f61 100644 --- a/src/mesa/drivers/dri/i965/brw_clip.h +++ b/src/mesa/drivers/dri/i965/brw_clip.h @@ -118,7 +118,6 @@ struct brw_clip_compile {     GLuint header_position_offset;     GLuint offset[VERT_ATTRIB_MAX]; -   GLboolean need_ff_sync;  };  #define ATTR_SIZE  (4*4) diff --git a/src/mesa/drivers/dri/i965/brw_clip_line.c b/src/mesa/drivers/dri/i965/brw_clip_line.c index fa9648f50f..59727af88d 100644 --- a/src/mesa/drivers/dri/i965/brw_clip_line.c +++ b/src/mesa/drivers/dri/i965/brw_clip_line.c @@ -46,6 +46,7 @@  static void brw_clip_line_alloc_regs( struct brw_clip_compile *c )  { +   struct intel_context *intel = &c->func.brw->intel;     GLuint i = 0,j;     /* Register usage is static, precompute here: @@ -85,7 +86,7 @@ static void brw_clip_line_alloc_regs( struct brw_clip_compile *c )        i++;     } -   if (c->need_ff_sync) { +   if (intel->needs_ff_sync) {        c->reg.ff_sync = retype(brw_vec1_grf(i, 0), BRW_REGISTER_TYPE_UD);        i++;     } diff --git a/src/mesa/drivers/dri/i965/brw_clip_state.c b/src/mesa/drivers/dri/i965/brw_clip_state.c index 234b3744bf..28ed634631 100644 --- a/src/mesa/drivers/dri/i965/brw_clip_state.c +++ b/src/mesa/drivers/dri/i965/brw_clip_state.c @@ -74,6 +74,7 @@ static dri_bo *  clip_unit_create_from_key(struct brw_context *brw,  			  struct brw_clip_unit_key *key)  { +   struct intel_context *intel = &brw->intel;     struct brw_clip_unit_state clip;     dri_bo *bo; @@ -105,7 +106,7 @@ clip_unit_create_from_key(struct brw_context *brw,        /* Although up to 16 concurrent Clip threads are allowed on IGDNG,          * only 2 threads can output VUEs at a time.         */ -      if (BRW_IS_IGDNG(brw)) +      if (intel->is_ironlake)           clip.thread4.max_threads = 16 - 1;                else           clip.thread4.max_threads = 2 - 1; diff --git a/src/mesa/drivers/dri/i965/brw_clip_tri.c b/src/mesa/drivers/dri/i965/brw_clip_tri.c index cf79224be4..ec15e9a697 100644 --- a/src/mesa/drivers/dri/i965/brw_clip_tri.c +++ b/src/mesa/drivers/dri/i965/brw_clip_tri.c @@ -51,6 +51,7 @@ static void release_tmps( struct brw_clip_compile *c )  void brw_clip_tri_alloc_regs( struct brw_clip_compile *c,   			      GLuint nr_verts )  { +   struct intel_context *intel = &c->func.brw->intel;     GLuint i = 0,j;     /* Register usage is static, precompute here: @@ -78,7 +79,7 @@ void brw_clip_tri_alloc_regs( struct brw_clip_compile *c,        for (j = 0; j < 3; j++) {  	 GLuint delta = c->nr_attrs*16 + 32; -         if (BRW_IS_IGDNG(c->func.brw)) +         if (intel->is_ironlake)               delta = c->nr_attrs * 16 + 32 * 3;  	 brw_MOV(&c->func, byte_offset(c->reg.vertex[j], delta), brw_imm_f(0)); @@ -119,7 +120,7 @@ void brw_clip_tri_alloc_regs( struct brw_clip_compile *c,        i++;     } -   if (c->need_ff_sync) { +   if (intel->needs_ff_sync) {        c->reg.ff_sync = retype(brw_vec1_grf(i, 0), BRW_REGISTER_TYPE_UD);        i++;     } diff --git a/src/mesa/drivers/dri/i965/brw_clip_util.c b/src/mesa/drivers/dri/i965/brw_clip_util.c index 5a73abdfee..091ebfc34c 100644 --- a/src/mesa/drivers/dri/i965/brw_clip_util.c +++ b/src/mesa/drivers/dri/i965/brw_clip_util.c @@ -359,7 +359,9 @@ void brw_clip_init_clipmask( struct brw_clip_compile *c )  void brw_clip_ff_sync(struct brw_clip_compile *c)  { -    if (c->need_ff_sync) { +    struct intel_context *intel = &c->func.brw->intel; + +    if (intel->needs_ff_sync) {          struct brw_compile *p = &c->func;          struct brw_instruction *need_ff_sync; @@ -388,7 +390,9 @@ void brw_clip_ff_sync(struct brw_clip_compile *c)  void brw_clip_init_ff_sync(struct brw_clip_compile *c)  { -    if (c->need_ff_sync) { +    struct intel_context *intel = &c->func.brw->intel; + +    if (intel->needs_ff_sync) {  	struct brw_compile *p = &c->func;          brw_MOV(p, c->reg.ff_sync, brw_imm_ud(0)); diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c index 7c796dae93..2c9902c90f 100644 --- a/src/mesa/drivers/dri/i965/brw_draw_upload.c +++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c @@ -527,7 +527,7 @@ static void brw_emit_vertices(struct brw_context *brw)        OUT_RELOC(input->bo,  		I915_GEM_DOMAIN_VERTEX, 0,  		input->offset); -      if (BRW_IS_IGDNG(brw)) { +      if (intel->is_ironlake) {  	 OUT_RELOC(input->bo,  		   I915_GEM_DOMAIN_VERTEX, 0,  		   input->bo->size - 1); @@ -563,7 +563,7 @@ static void brw_emit_vertices(struct brw_context *brw)  		(format << BRW_VE0_FORMAT_SHIFT) |  		(0 << BRW_VE0_SRC_OFFSET_SHIFT)); -      if (BRW_IS_IGDNG(brw)) +      if (intel->is_ironlake)            OUT_BATCH((comp0 << BRW_VE1_COMPONENT_0_SHIFT) |                      (comp1 << BRW_VE1_COMPONENT_1_SHIFT) |                      (comp2 << BRW_VE1_COMPONENT_2_SHIFT) | diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c index 7ceabba288..67673e9911 100644 --- a/src/mesa/drivers/dri/i965/brw_eu_emit.c +++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c @@ -252,9 +252,10 @@ static void brw_set_math_message( struct brw_context *brw,  				  GLboolean saturate,  				  GLuint dataType )  { +   struct intel_context *intel = &brw->intel;     brw_set_src1(insn, brw_imm_d(0)); -   if (BRW_IS_IGDNG(brw)) { +   if (intel->is_ironlake) {         insn->bits3.math_igdng.function = function;         insn->bits3.math_igdng.int_type = integer_type;         insn->bits3.math_igdng.precision = low_precision; @@ -319,9 +320,10 @@ static void brw_set_urb_message( struct brw_context *brw,  				 GLuint offset,  				 GLuint swizzle_control )  { +    struct intel_context *intel = &brw->intel;      brw_set_src1(insn, brw_imm_d(0)); -    if (BRW_IS_IGDNG(brw)) { +    if (intel->is_ironlake) {          insn->bits3.urb_igdng.opcode = 0;	/* ? */          insn->bits3.urb_igdng.offset = offset;          insn->bits3.urb_igdng.swizzle_control = swizzle_control; @@ -358,9 +360,10 @@ static void brw_set_dp_write_message( struct brw_context *brw,  				      GLuint response_length,  				      GLuint end_of_thread )  { +   struct intel_context *intel = &brw->intel;     brw_set_src1(insn, brw_imm_d(0)); -   if (BRW_IS_IGDNG(brw)) { +   if (intel->is_ironlake) {         insn->bits3.dp_write_igdng.binding_table_index = binding_table_index;         insn->bits3.dp_write_igdng.msg_control = msg_control;         insn->bits3.dp_write_igdng.pixel_scoreboard_clear = pixel_scoreboard_clear; @@ -395,9 +398,10 @@ static void brw_set_dp_read_message( struct brw_context *brw,  				      GLuint response_length,  				      GLuint end_of_thread )  { +   struct intel_context *intel = &brw->intel;     brw_set_src1(insn, brw_imm_d(0)); -   if (BRW_IS_IGDNG(brw)) { +   if (intel->is_ironlake) {         insn->bits3.dp_read_igdng.binding_table_index = binding_table_index;         insn->bits3.dp_read_igdng.msg_control = msg_control;         insn->bits3.dp_read_igdng.msg_type = msg_type; @@ -433,10 +437,11 @@ static void brw_set_sampler_message(struct brw_context *brw,                                      GLuint header_present,                                      GLuint simd_mode)  { +   struct intel_context *intel = &brw->intel;     assert(eot == 0);     brw_set_src1(insn, brw_imm_d(0)); -   if (BRW_IS_IGDNG(brw)) { +   if (intel->is_ironlake) {        insn->bits3.sampler_igdng.binding_table_index = binding_table_index;        insn->bits3.sampler_igdng.sampler = sampler;        insn->bits3.sampler_igdng.msg_type = msg_type; @@ -648,10 +653,11 @@ struct brw_instruction *brw_IF(struct brw_compile *p, GLuint execute_size)  struct brw_instruction *brw_ELSE(struct brw_compile *p,   				 struct brw_instruction *if_insn)  { +   struct intel_context *intel = &p->brw->intel;     struct brw_instruction *insn;     GLuint br = 1; -   if (BRW_IS_IGDNG(p->brw)) +   if (intel->is_ironlake)        br = 2;     if (p->single_program_flow) { @@ -690,9 +696,10 @@ struct brw_instruction *brw_ELSE(struct brw_compile *p,  void brw_ENDIF(struct brw_compile *p,   	       struct brw_instruction *patch_insn)  { +   struct intel_context *intel = &p->brw->intel;     GLuint br = 1; -   if (BRW_IS_IGDNG(p->brw)) +   if (intel->is_ironlake)        br = 2;      if (p->single_program_flow) { @@ -803,10 +810,11 @@ struct brw_instruction *brw_DO(struct brw_compile *p, GLuint execute_size)  struct brw_instruction *brw_WHILE(struct brw_compile *p,                                     struct brw_instruction *do_insn)  { +   struct intel_context *intel = &p->brw->intel;     struct brw_instruction *insn;     GLuint br = 1; -   if (BRW_IS_IGDNG(p->brw)) +   if (intel->is_ironlake)        br = 2;     if (p->single_program_flow) @@ -846,10 +854,11 @@ struct brw_instruction *brw_WHILE(struct brw_compile *p,  void brw_land_fwd_jump(struct brw_compile *p,   		       struct brw_instruction *jmp_insn)  { +   struct intel_context *intel = &p->brw->intel;     struct brw_instruction *landing = &p->store[p->nr_insn];     GLuint jmpi = 1; -   if (BRW_IS_IGDNG(p->brw)) +   if (intel->is_ironlake)         jmpi = 2;     assert(jmp_insn->header.opcode == BRW_OPCODE_JMPI); diff --git a/src/mesa/drivers/dri/i965/brw_gs.c b/src/mesa/drivers/dri/i965/brw_gs.c index 610b6c35e2..1bc3eccf49 100644 --- a/src/mesa/drivers/dri/i965/brw_gs.c +++ b/src/mesa/drivers/dri/i965/brw_gs.c @@ -47,6 +47,7 @@  static void compile_gs_prog( struct brw_context *brw,  			     struct brw_gs_prog_key *key )  { +   struct intel_context *intel = &brw->intel;     struct brw_gs_compile c;     const GLuint *program;     GLuint program_size; @@ -54,13 +55,12 @@ static void compile_gs_prog( struct brw_context *brw,     memset(&c, 0, sizeof(c));     c.key = *key; -   c.need_ff_sync = BRW_IS_IGDNG(brw);     /* Need to locate the two positions present in vertex + header.      * These are currently hardcoded:      */     c.nr_attrs = brw_count_bits(c.key.attrs); -   if (BRW_IS_IGDNG(brw)) +   if (intel->is_ironlake)         c.nr_regs = (c.nr_attrs + 1) / 2 + 3;  /* are vertices packed, or reg-aligned? */     else         c.nr_regs = (c.nr_attrs + 1) / 2 + 1;  /* are vertices packed, or reg-aligned? */ diff --git a/src/mesa/drivers/dri/i965/brw_gs.h b/src/mesa/drivers/dri/i965/brw_gs.h index 010c1c2352..813b8d447a 100644 --- a/src/mesa/drivers/dri/i965/brw_gs.h +++ b/src/mesa/drivers/dri/i965/brw_gs.h @@ -63,7 +63,6 @@ struct brw_gs_compile {     GLuint nr_attrs;     GLuint nr_regs;     GLuint nr_bytes; -   GLboolean need_ff_sync;  };  #define ATTR_SIZE  (4*4) diff --git a/src/mesa/drivers/dri/i965/brw_gs_emit.c b/src/mesa/drivers/dri/i965/brw_gs_emit.c index 0fc5b02c61..a81b972ef4 100644 --- a/src/mesa/drivers/dri/i965/brw_gs_emit.c +++ b/src/mesa/drivers/dri/i965/brw_gs_emit.c @@ -122,12 +122,14 @@ static void brw_gs_ff_sync(struct brw_gs_compile *c, int num_prim)  void brw_gs_quads( struct brw_gs_compile *c, struct brw_gs_prog_key *key )  { +   struct intel_context *intel = &c->func.brw->intel; +     brw_gs_alloc_regs(c, 4);     /* Use polygons for correct edgeflag behaviour. Note that vertex 3      * is the PV for quads, but vertex 0 for polygons:      */ -   if (c->need_ff_sync) +   if (intel->needs_ff_sync)  	   brw_gs_ff_sync(c, 1);     if (key->pv_first) {        brw_gs_emit_vue(c, c->reg.vertex[0], 0, ((_3DPRIM_POLYGON << 2) | R02_PRIM_START)); @@ -145,9 +147,11 @@ void brw_gs_quads( struct brw_gs_compile *c, struct brw_gs_prog_key *key )  void brw_gs_quad_strip( struct brw_gs_compile *c, struct brw_gs_prog_key *key )  { +   struct intel_context *intel = &c->func.brw->intel; +     brw_gs_alloc_regs(c, 4); -   if (c->need_ff_sync) +   if (intel->needs_ff_sync)  	   brw_gs_ff_sync(c, 1);           if (key->pv_first) {        brw_gs_emit_vue(c, c->reg.vertex[0], 0, ((_3DPRIM_POLYGON << 2) | R02_PRIM_START)); @@ -165,9 +169,11 @@ void brw_gs_quad_strip( struct brw_gs_compile *c, struct brw_gs_prog_key *key )  void brw_gs_tris( struct brw_gs_compile *c )  { +   struct intel_context *intel = &c->func.brw->intel; +     brw_gs_alloc_regs(c, 3); -   if (c->need_ff_sync) +   if (intel->needs_ff_sync)  	   brw_gs_ff_sync(c, 1);           brw_gs_emit_vue(c, c->reg.vertex[0], 0, ((_3DPRIM_TRILIST << 2) | R02_PRIM_START));     brw_gs_emit_vue(c, c->reg.vertex[1], 0, (_3DPRIM_TRILIST << 2)); @@ -176,9 +182,11 @@ void brw_gs_tris( struct brw_gs_compile *c )  void brw_gs_lines( struct brw_gs_compile *c )  { +   struct intel_context *intel = &c->func.brw->intel; +     brw_gs_alloc_regs(c, 2); -   if (c->need_ff_sync) +   if (intel->needs_ff_sync)  	   brw_gs_ff_sync(c, 1);           brw_gs_emit_vue(c, c->reg.vertex[0], 0, ((_3DPRIM_LINESTRIP << 2) | R02_PRIM_START));     brw_gs_emit_vue(c, c->reg.vertex[1], 1, ((_3DPRIM_LINESTRIP << 2) | R02_PRIM_END)); @@ -186,9 +194,11 @@ void brw_gs_lines( struct brw_gs_compile *c )  void brw_gs_points( struct brw_gs_compile *c )  { +   struct intel_context *intel = &c->func.brw->intel; +     brw_gs_alloc_regs(c, 1); -   if (c->need_ff_sync) +   if (intel->needs_ff_sync)  	   brw_gs_ff_sync(c, 1);           brw_gs_emit_vue(c, c->reg.vertex[0], 1, ((_3DPRIM_POINTLIST << 2) | R02_PRIM_START | R02_PRIM_END));  } diff --git a/src/mesa/drivers/dri/i965/brw_gs_state.c b/src/mesa/drivers/dri/i965/brw_gs_state.c index ed9d2ffe60..1af5790a67 100644 --- a/src/mesa/drivers/dri/i965/brw_gs_state.c +++ b/src/mesa/drivers/dri/i965/brw_gs_state.c @@ -72,6 +72,7 @@ gs_unit_populate_key(struct brw_context *brw, struct brw_gs_unit_key *key)  static dri_bo *  gs_unit_create_from_key(struct brw_context *brw, struct brw_gs_unit_key *key)  { +   struct intel_context *intel = &brw->intel;     struct brw_gs_unit_state gs;     dri_bo *bo; @@ -98,7 +99,7 @@ gs_unit_create_from_key(struct brw_context *brw, struct brw_gs_unit_key *key)     else        gs.thread4.max_threads = 0; -   if (BRW_IS_IGDNG(brw)) +   if (intel->is_ironlake)        gs.thread4.rendering_enable = 1;     if (INTEL_DEBUG & DEBUG_STATS) diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c index 4b0d598336..6cb2da28e6 100644 --- a/src/mesa/drivers/dri/i965/brw_misc_state.c +++ b/src/mesa/drivers/dri/i965/brw_misc_state.c @@ -212,7 +212,7 @@ static void emit_depthbuffer(struct brw_context *brw)  {     struct intel_context *intel = &brw->intel;     struct intel_region *region = brw->state.depth_region; -   unsigned int len = (BRW_IS_G4X(brw) || BRW_IS_IGDNG(brw)) ? 6 : 5; +   unsigned int len = (BRW_IS_G4X(brw) || intel->is_ironlake) ? 6 : 5;     if (region == NULL) {        BEGIN_BATCH(len, IGNORE_CLIPRECTS); @@ -223,7 +223,7 @@ static void emit_depthbuffer(struct brw_context *brw)        OUT_BATCH(0);        OUT_BATCH(0); -      if (BRW_IS_G4X(brw) || BRW_IS_IGDNG(brw)) +      if (BRW_IS_G4X(brw) || intel->is_ironlake)           OUT_BATCH(0);        ADVANCE_BATCH(); @@ -262,7 +262,7 @@ static void emit_depthbuffer(struct brw_context *brw)  		((region->height - 1) << 19));        OUT_BATCH(0); -      if (BRW_IS_G4X(brw) || BRW_IS_IGDNG(brw)) +      if (BRW_IS_G4X(brw) || intel->is_ironlake)           OUT_BATCH(0);        ADVANCE_BATCH(); @@ -512,7 +512,7 @@ static void upload_state_base_address( struct brw_context *brw )     /* Output the structure (brw_state_base_address) directly to the      * batchbuffer, so we can emit relocations inline.      */ -   if (BRW_IS_IGDNG(brw)) { +   if (intel->is_ironlake) {         BEGIN_BATCH(8, IGNORE_CLIPRECTS);         OUT_BATCH(CMD_STATE_BASE_ADDRESS << 16 | (8 - 2));         OUT_BATCH(1); /* General state base address */ diff --git a/src/mesa/drivers/dri/i965/brw_sf_emit.c b/src/mesa/drivers/dri/i965/brw_sf_emit.c index 3eae41ee74..bb08055e3b 100644 --- a/src/mesa/drivers/dri/i965/brw_sf_emit.c +++ b/src/mesa/drivers/dri/i965/brw_sf_emit.c @@ -149,6 +149,7 @@ static void copy_colors( struct brw_sf_compile *c,  static void do_flatshade_triangle( struct brw_sf_compile *c )  {     struct brw_compile *p = &c->func; +   struct intel_context *intel = &p->brw->intel;     struct brw_reg ip = brw_ip_reg();     GLuint nr = brw_count_bits(c->key.attrs & VERT_RESULT_COLOR_BITS);     GLuint jmpi = 1; @@ -161,7 +162,7 @@ static void do_flatshade_triangle( struct brw_sf_compile *c )     if (c->key.primitive == SF_UNFILLED_TRIS)        return; -   if (BRW_IS_IGDNG(p->brw)) +   if (intel->is_ironlake)         jmpi = 2;     brw_push_insn_state(p); @@ -187,6 +188,7 @@ static void do_flatshade_triangle( struct brw_sf_compile *c )  static void do_flatshade_line( struct brw_sf_compile *c )  {     struct brw_compile *p = &c->func; +   struct intel_context *intel = &p->brw->intel;     struct brw_reg ip = brw_ip_reg();     GLuint nr = brw_count_bits(c->key.attrs & VERT_RESULT_COLOR_BITS);     GLuint jmpi = 1; @@ -199,7 +201,7 @@ static void do_flatshade_line( struct brw_sf_compile *c )     if (c->key.primitive == SF_UNFILLED_TRIS)        return; -   if (BRW_IS_IGDNG(p->brw)) +   if (intel->is_ironlake)         jmpi = 2;     brw_push_insn_state(p); diff --git a/src/mesa/drivers/dri/i965/brw_sf_state.c b/src/mesa/drivers/dri/i965/brw_sf_state.c index bb69435ec0..09223b7cfb 100644 --- a/src/mesa/drivers/dri/i965/brw_sf_state.c +++ b/src/mesa/drivers/dri/i965/brw_sf_state.c @@ -165,6 +165,7 @@ static dri_bo *  sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,  			dri_bo **reloc_bufs)  { +   struct intel_context *intel = &brw->intel;     struct brw_sf_unit_state sf;     dri_bo *bo;     int chipset_max_threads; @@ -177,7 +178,7 @@ sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,     sf.thread3.dispatch_grf_start_reg = 3; -   if (BRW_IS_IGDNG(brw)) +   if (intel->is_ironlake)         sf.thread3.urb_entry_read_offset = 3;     else         sf.thread3.urb_entry_read_offset = 1; @@ -187,10 +188,10 @@ sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,     sf.thread4.nr_urb_entries = key->nr_urb_entries;     sf.thread4.urb_entry_allocation_size = key->sfsize - 1; -   /* Each SF thread produces 1 PUE, and there can be up to 24(Pre-IGDNG) or  -    * 48(IGDNG) threads  +   /* Each SF thread produces 1 PUE, and there can be up to 24 (Pre-Ironlake) or +    * 48 (Ironlake) threads.      */ -   if (BRW_IS_IGDNG(brw)) +   if (intel->is_ironlake)        chipset_max_threads = 48;     else        chipset_max_threads = 24; diff --git a/src/mesa/drivers/dri/i965/brw_tex_layout.c b/src/mesa/drivers/dri/i965/brw_tex_layout.c index e59e52ed86..64a9535282 100644 --- a/src/mesa/drivers/dri/i965/brw_tex_layout.c +++ b/src/mesa/drivers/dri/i965/brw_tex_layout.c @@ -49,7 +49,7 @@ GLboolean brw_miptree_layout(struct intel_context *intel,     switch (mt->target) {     case GL_TEXTURE_CUBE_MAP: -      if (IS_IGDNG(intel->intelScreen->deviceID)) { +      if (intel->is_ironlake) {            GLuint align_h = 2, align_w = 4;            GLuint level;            GLuint x = 0; diff --git a/src/mesa/drivers/dri/i965/brw_urb.c b/src/mesa/drivers/dri/i965/brw_urb.c index 8c6f4355a6..e1e8a90ca7 100644 --- a/src/mesa/drivers/dri/i965/brw_urb.c +++ b/src/mesa/drivers/dri/i965/brw_urb.c @@ -113,6 +113,7 @@ static GLboolean check_urb_layout( struct brw_context *brw )   */  static void recalculate_urb_fence( struct brw_context *brw )  { +   struct intel_context *intel = &brw->intel;     GLuint csize = brw->curbe.total_size;     GLuint vsize = brw->vs.prog_data->urb_entry_size;     GLuint sfsize = brw->sf.prog_data->urb_entry_size; @@ -146,7 +147,7 @@ static void recalculate_urb_fence( struct brw_context *brw )        brw->urb.constrained = 0; -      if (BRW_IS_IGDNG(brw)) { +      if (intel->is_ironlake) {           brw->urb.nr_vs_entries = 128;           brw->urb.nr_sf_entries = 48;           if (check_urb_layout(brw)) { diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c index 27aac8b54a..21d2fec707 100644 --- a/src/mesa/drivers/dri/i965/brw_vs_emit.c +++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c @@ -67,6 +67,7 @@ static void release_tmps( struct brw_vs_compile *c )   */  static void brw_vs_alloc_regs( struct brw_vs_compile *c )  { +   struct intel_context *intel = &c->func.brw->intel;     GLuint i, reg = 0, mrf;     int attributes_in_vue; @@ -141,7 +142,7 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )     c->first_output = reg;     c->first_overflow_output = 0; -   if (BRW_IS_IGDNG(c->func.brw)) +   if (intel->is_ironlake)         mrf = 8;     else         mrf = 4; @@ -238,7 +239,7 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )      */     attributes_in_vue = MAX2(c->nr_outputs, c->nr_inputs); -   if (BRW_IS_IGDNG(c->func.brw)) +   if (intel->is_ironlake)         c->prog_data.urb_entry_size = (attributes_in_vue + 6 + 3) / 4;     else         c->prog_data.urb_entry_size = (attributes_in_vue + 2 + 3) / 4; @@ -1113,6 +1114,7 @@ static void emit_swz( struct brw_vs_compile *c,  static void emit_vertex_write( struct brw_vs_compile *c)  {     struct brw_compile *p = &c->func; +   struct intel_context *intel = &p->brw->intel;     struct brw_reg m0 = brw_message_reg(0);     struct brw_reg pos = c->regs[PROGRAM_OUTPUT][VERT_RESULT_HPOS];     struct brw_reg ndc; @@ -1195,8 +1197,8 @@ static void emit_vertex_write( struct brw_vs_compile *c)     brw_set_access_mode(p, BRW_ALIGN_1);     brw_MOV(p, offset(m0, 2), ndc); -   if (BRW_IS_IGDNG(p->brw)) { -       /* There are 20 DWs (D0-D19) in VUE vertex header on IGDNG */ +   if (intel->is_ironlake) { +       /* There are 20 DWs (D0-D19) in VUE vertex header on Ironlake */         brw_MOV(p, offset(m0, 3), pos); /* a portion of vertex header */         /* m4, m5 contain the distances from vertex to the user clip planeXXX.           * Seems it is useless for us. @@ -1359,6 +1361,7 @@ void brw_vs_emit(struct brw_vs_compile *c )  #define MAX_LOOP_DEPTH 32     struct brw_compile *p = &c->func;     struct brw_context *brw = p->brw; +   struct intel_context *intel = &brw->intel;     const GLuint nr_insns = c->vp->program.Base.NumInstructions;     GLuint insn, if_depth = 0, loop_depth = 0;     GLuint end_offset = 0; @@ -1592,7 +1595,7 @@ void brw_vs_emit(struct brw_vs_compile *c )              loop_depth--; -	    if (BRW_IS_IGDNG(brw)) +	    if (intel->is_ironlake)  	       br = 2;              inst0 = inst1 = brw_WHILE(p, loop_inst[loop_depth]); diff --git a/src/mesa/drivers/dri/i965/brw_vs_state.c b/src/mesa/drivers/dri/i965/brw_vs_state.c index 7285466645..fdc55aa1b2 100644 --- a/src/mesa/drivers/dri/i965/brw_vs_state.c +++ b/src/mesa/drivers/dri/i965/brw_vs_state.c @@ -82,6 +82,7 @@ vs_unit_populate_key(struct brw_context *brw, struct brw_vs_unit_key *key)  static dri_bo *  vs_unit_create_from_key(struct brw_context *brw, struct brw_vs_unit_key *key)  { +   struct intel_context *intel = &brw->intel;     struct brw_vs_unit_state vs;     dri_bo *bo;     int chipset_max_threads; @@ -98,7 +99,7 @@ vs_unit_create_from_key(struct brw_context *brw, struct brw_vs_unit_key *key)      */     vs.thread1.single_program_flow = 0; -   if (BRW_IS_IGDNG(brw)) +   if (intel->is_ironlake)        vs.thread1.binding_table_entry_count = 0; /* hardware requirement */     else        vs.thread1.binding_table_entry_count = key->nr_surfaces; @@ -109,7 +110,7 @@ vs_unit_create_from_key(struct brw_context *brw, struct brw_vs_unit_key *key)     vs.thread3.urb_entry_read_offset = 0;     vs.thread3.const_urb_entry_read_offset = key->curbe_offset * 2; -   if (BRW_IS_IGDNG(brw)) { +   if (intel->is_ironlake) {        switch (key->nr_urb_entries) {        case 8:        case 12: @@ -145,7 +146,7 @@ vs_unit_create_from_key(struct brw_context *brw, struct brw_vs_unit_key *key)     vs.thread4.urb_entry_allocation_size = key->urb_size - 1; -   if (BRW_IS_IGDNG(brw)) +   if (intel->is_ironlake)        chipset_max_threads = 72;     else if (BRW_IS_G4X(brw))        chipset_max_threads = 32; diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c b/src/mesa/drivers/dri/i965/brw_wm_emit.c index 5390fd2584..bcaa793de1 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_emit.c +++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c @@ -830,6 +830,7 @@ void emit_tex(struct brw_wm_compile *c,  	      GLboolean shadow)  {     struct brw_compile *p = &c->func; +   struct intel_context *intel = &p->brw->intel;     struct brw_reg dst_retyped;     GLuint cur_mrf = 2, response_length;     GLuint i, nr_texcoords; @@ -873,7 +874,7 @@ void emit_tex(struct brw_wm_compile *c,     }     /* Pre-Ironlake, the 8-wide sampler always took u,v,r. */ -   if (!BRW_IS_IGDNG(p->brw) && c->dispatch_width == 8) +   if (!intel->is_ironlake && c->dispatch_width == 8)        nr_texcoords = 3;     /* For shadow comparisons, we have to supply u,v,r. */ @@ -891,7 +892,7 @@ void emit_tex(struct brw_wm_compile *c,     /* Fill in the shadow comparison reference value. */     if (shadow) { -      if (BRW_IS_IGDNG(p->brw)) { +      if (intel->is_ironlake) {  	 /* Fill in the cube map array index value. */  	 brw_MOV(p, brw_message_reg(cur_mrf), brw_imm_f(0));  	 cur_mrf += mrf_per_channel; @@ -904,7 +905,7 @@ void emit_tex(struct brw_wm_compile *c,        cur_mrf += mrf_per_channel;     } -   if (BRW_IS_IGDNG(p->brw)) { +   if (intel->is_ironlake) {        if (shadow)  	 msg_type = BRW_SAMPLER_MESSAGE_SAMPLE_COMPARE_IGDNG;        else @@ -944,6 +945,7 @@ void emit_txb(struct brw_wm_compile *c,  	      GLuint sampler)  {     struct brw_compile *p = &c->func; +   struct intel_context *intel = &p->brw->intel;     GLuint msgLength;     GLuint msg_type;     GLuint mrf_per_channel; @@ -955,8 +957,8 @@ void emit_txb(struct brw_wm_compile *c,      * undefined, and trust the execution mask to keep the undefined pixels      * from mattering.      */ -   if (c->dispatch_width == 16 || !BRW_IS_IGDNG(p->brw)) { -      if (BRW_IS_IGDNG(p->brw)) +   if (c->dispatch_width == 16 || !intel->is_ironlake) { +      if (intel->is_ironlake)  	 msg_type = BRW_SAMPLER_MESSAGE_SAMPLE_BIAS_IGDNG;        else  	 msg_type = BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS; @@ -1160,6 +1162,7 @@ void emit_fb_write(struct brw_wm_compile *c,  {     struct brw_compile *p = &c->func;     struct brw_context *brw = p->brw; +   struct intel_context *intel = &brw->intel;     GLuint nr = 2;     GLuint channel; @@ -1174,7 +1177,7 @@ void emit_fb_write(struct brw_wm_compile *c,     brw_push_insn_state(p);     for (channel = 0; channel < 4; channel++) { -      if (c->dispatch_width == 16 && (BRW_IS_G4X(brw) || BRW_IS_IGDNG(brw))) { +      if (c->dispatch_width == 16 && (BRW_IS_G4X(brw) || intel->is_ironlake)) {  	 /* By setting the high bit of the MRF register number, we indicate  	  * that we want COMPR4 mode - instead of doing the usual destination  	  * + 1 for the second half we get destination + 4. diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c b/src/mesa/drivers/dri/i965/brw_wm_glsl.c index e8c2cb66ec..f294387c80 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c +++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c @@ -1826,6 +1826,7 @@ get_argument_regs(struct brw_wm_compile *c,  static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)  { +   struct intel_context *intel = &brw->intel;  #define MAX_IF_DEPTH 32  #define MAX_LOOP_DEPTH 32      struct brw_instruction *if_inst[MAX_IF_DEPTH], *loop_inst[MAX_LOOP_DEPTH]; @@ -2096,7 +2097,7 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)                    struct brw_instruction *inst0, *inst1;                    GLuint br = 1; -                  if (BRW_IS_IGDNG(brw)) +                  if (intel->is_ironlake)                       br = 2;                    loop_depth--; diff --git a/src/mesa/drivers/dri/i965/brw_wm_state.c b/src/mesa/drivers/dri/i965/brw_wm_state.c index f89ed9bce7..fe795fadf8 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_state.c @@ -71,7 +71,7 @@ wm_unit_populate_key(struct brw_context *brw, struct brw_wm_unit_key *key)        key->max_threads = 1;     else {        /* WM maximum threads is number of EUs times number of threads per EU. */ -      if (BRW_IS_IGDNG(brw)) +      if (intel->is_ironlake)           key->max_threads = 12 * 6;        else if (BRW_IS_G4X(brw))  	 key->max_threads = 10 * 5; @@ -140,6 +140,7 @@ static dri_bo *  wm_unit_create_from_key(struct brw_context *brw, struct brw_wm_unit_key *key,  			dri_bo **reloc_bufs)  { +   struct intel_context *intel = &brw->intel;     struct brw_wm_unit_state wm;     dri_bo *bo; @@ -150,7 +151,7 @@ wm_unit_create_from_key(struct brw_context *brw, struct brw_wm_unit_key *key,     wm.thread1.depth_coef_urb_read_offset = 1;     wm.thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754; -   if (BRW_IS_IGDNG(brw)) +   if (intel->is_ironlake)        wm.thread1.binding_table_entry_count = 0; /* hardware requirement */     else        wm.thread1.binding_table_entry_count = key->nr_surfaces; @@ -170,7 +171,7 @@ wm_unit_create_from_key(struct brw_context *brw, struct brw_wm_unit_key *key,     wm.thread3.const_urb_entry_read_length = key->curb_entry_read_length;     wm.thread3.const_urb_entry_read_offset = key->curbe_offset * 2; -   if (BRW_IS_IGDNG(brw))  +   if (intel->is_ironlake)        wm.wm4.sampler_count = 0; /* hardware requirement */     else        wm.wm4.sampler_count = (key->sampler_count + 1) / 4; diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c index c616d32ebb..234f99a00e 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -620,6 +620,11 @@ intelInitContext(struct intel_context *intel,     else        intel->gen = 2; +   if (IS_IGDNG(intel->intelScreen->deviceID)) { +      intel->is_ironlake = GL_TRUE; +      intel->needs_ff_sync = GL_TRUE; +   } +     /* Dri stuff */     intel->hHWContext = driContextPriv->hHWContext;     intel->driFd = sPriv->fd; diff --git a/src/mesa/drivers/dri/intel/intel_context.h b/src/mesa/drivers/dri/intel/intel_context.h index 481202c971..f7d9016d71 100644 --- a/src/mesa/drivers/dri/intel/intel_context.h +++ b/src/mesa/drivers/dri/intel/intel_context.h @@ -176,6 +176,8 @@ struct intel_context      * Generation number of the hardware: 2 is 8xx, 3 is 9xx pre-965, 4 is 965.      */     int gen; +   GLboolean needs_ff_sync; +   GLboolean is_ironlake;     struct intel_region *front_region;     struct intel_region *back_region; | 
