handle INT op, still require high level handle of integer to be correct

This commit is contained in:
Zou Nan hai 2007-09-27 16:17:24 +08:00
parent 35a0634e35
commit b1e549d176

View file

@ -12,6 +12,7 @@ GLboolean brw_wm_is_glsl(struct gl_fragment_program *fp)
struct prog_instruction *inst = &fp->Base.Instructions[i];
switch (inst->Opcode) {
case OPCODE_IF:
case OPCODE_INT:
case OPCODE_ENDIF:
case OPCODE_CAL:
case OPCODE_BRK:
@ -170,6 +171,24 @@ static void emit_abs( struct brw_wm_compile *c,
brw_set_saturate(p, 0);
}
static void emit_mov_int( struct brw_wm_compile *c,
struct prog_instruction *inst)
{
int i;
struct brw_compile *p = &c->func;
GLuint mask = inst->DstReg.WriteMask;
brw_set_saturate(p, inst->SaturateMode != SATURATE_OFF);
for (i = 0; i < 4; i++) {
if (mask & (1<<i)) {
struct brw_reg src, dst;
dst = retype(get_dst_reg(c, inst, i, 1), BRW_REGISTER_TYPE_D);
src = retype(get_src_reg(c, &inst->SrcReg[0], i, 1), BRW_REGISTER_TYPE_D);
brw_MOV(p, dst, src);
}
}
brw_set_saturate(p, 0);
}
static void emit_mov( struct brw_wm_compile *c,
struct prog_instruction *inst)
{
@ -1107,6 +1126,9 @@ static void brw_wm_emit_glsl(struct brw_wm_compile *c)
case OPCODE_LRP:
emit_lrp(c, inst);
break;
case OPCODE_INT:
emit_mov_int(c, inst);
break;
case OPCODE_MOV:
emit_mov(c, inst);
break;