diff options
Diffstat (limited to 'src/mesa/drivers')
| -rw-r--r-- | src/mesa/drivers/dri/i965/brw_vs_emit.c | 22 | 
1 files changed, 21 insertions, 1 deletions
| diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c index 7c09222281..72cd36a603 100644 --- a/src/mesa/drivers/dri/i965/brw_vs_emit.c +++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c @@ -1190,6 +1190,23 @@ post_vs_emit( struct brw_vs_compile *c,     brw_set_src1(end_inst, brw_imm_d(offset * 16));  } +static uint32_t +get_predicate(uint32_t swizzle) +{ +   switch (swizzle) { +   case SWIZZLE_XXXX: +      return BRW_PREDICATE_ALIGN16_REPLICATE_X; +   case SWIZZLE_YYYY: +      return BRW_PREDICATE_ALIGN16_REPLICATE_Y; +   case SWIZZLE_ZZZZ: +      return BRW_PREDICATE_ALIGN16_REPLICATE_Z; +   case SWIZZLE_WWWW: +      return BRW_PREDICATE_ALIGN16_REPLICATE_W; +   default: +      _mesa_problem(NULL, "Unexpected predicate: 0x%08x\n", swizzle); +      return BRW_PREDICATE_NORMAL; +   } +}  /* Emit the vertex program instructions here.   */ @@ -1394,7 +1411,10 @@ void brw_vs_emit(struct brw_vs_compile *c )  	 break;        case OPCODE_IF:  	 assert(if_depth < MAX_IF_DEPTH); -         if_inst[if_depth++] = brw_IF(p, BRW_EXECUTE_8); +	 if_inst[if_depth] = brw_IF(p, BRW_EXECUTE_8); +	 if_inst[if_depth]->header.predicate_control = +	    get_predicate(inst->DstReg.CondSwizzle); +	 if_depth++;  	 break;        case OPCODE_ELSE:  	 if_inst[if_depth-1] = brw_ELSE(p, if_inst[if_depth-1]); | 
