浏览代码

i965: Remove bad constant buffer constant-reg-already-loaded optimization.

Thanks to branching, the state of c->current_const[i].index at the point
of emitting constant loads for this instruction may not match the actual
constant currently loaded in the reg at runtime.  Fixes a regression in my
GLSL program for idr's class since b58b3a786a.
tags/intel_2009q2_rc3
Eric Anholt 16 年前
父节点
当前提交
c30f23c123
共有 1 个文件被更改,包括 11 次插入13 次删除
  1. 11
    13
      src/mesa/drivers/dri/i965/brw_wm_glsl.c

+ 11
- 13
src/mesa/drivers/dri/i965/brw_wm_glsl.c 查看文件

@@ -294,23 +294,21 @@ static void fetch_constants(struct brw_wm_compile *c,
if (src->File == PROGRAM_STATE_VAR ||
src->File == PROGRAM_CONSTANT ||
src->File == PROGRAM_UNIFORM) {
if (c->current_const[i].index != src->Index) {
c->current_const[i].index = src->Index;
c->current_const[i].index = src->Index;

#if 0
printf(" fetch const[%d] for arg %d into reg %d\n",
src->Index, i, c->current_const[i].reg.nr);
printf(" fetch const[%d] for arg %d into reg %d\n",
src->Index, i, c->current_const[i].reg.nr);
#endif

/* need to fetch the constant now */
brw_dp_READ_4(p,
c->current_const[i].reg, /* writeback dest */
1, /* msg_reg */
src->RelAddr, /* relative indexing? */
16 * src->Index, /* byte offset */
SURF_INDEX_FRAG_CONST_BUFFER/* binding table index */
);
}
/* need to fetch the constant now */
brw_dp_READ_4(p,
c->current_const[i].reg, /* writeback dest */
1, /* msg_reg */
src->RelAddr, /* relative indexing? */
16 * src->Index, /* byte offset */
SURF_INDEX_FRAG_CONST_BUFFER/* binding table index */
);
}
}
}

正在加载...
取消
保存