i965: Add support for gen6 reladdr VS constant loading.

This commit is contained in:
Eric Anholt
2010-12-09 09:42:05 -08:00
parent 15566183a6
commit 3a3b1bd722
2 changed files with 17 additions and 11 deletions
+1 -1
View File
@@ -1771,7 +1771,7 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p,
/* M1.0 is block offset 0, M1.4 is block offset 1, all other
* fields ignored.
*/
brw_ADD(p, retype(brw_message_reg(1), BRW_REGISTER_TYPE_UD),
brw_ADD(p, retype(brw_message_reg(1), BRW_REGISTER_TYPE_D),
addr_reg, brw_imm_d(offset));
brw_pop_insn_state(p);
+16 -10
View File
@@ -1102,14 +1102,14 @@ get_reladdr_constant(struct brw_vs_compile *c,
{
const struct prog_src_register *src = &inst->SrcReg[argIndex];
struct brw_compile *p = &c->func;
struct brw_context *brw = p->brw;
struct intel_context *intel = &brw->intel;
struct brw_reg const_reg = c->current_const[argIndex].reg;
struct brw_reg addrReg = c->regs[PROGRAM_ADDRESS][0];
struct brw_reg byte_addr_reg = retype(get_tmp(c), BRW_REGISTER_TYPE_D);
struct brw_reg addr_reg = c->regs[PROGRAM_ADDRESS][0];
uint32_t offset;
assert(argIndex < 3);
assert(c->func.brw->intel.gen < 6); /* FINISHME */
/* Can't reuse a reladdr constant load. */
c->current_const[argIndex].index = -1;
@@ -1118,15 +1118,21 @@ get_reladdr_constant(struct brw_vs_compile *c,
src->Index, argIndex, c->current_const[argIndex].reg.nr);
#endif
brw_MUL(p, byte_addr_reg, addrReg, brw_imm_ud(16));
if (intel->gen >= 6) {
offset = src->Index;
} else {
struct brw_reg byte_addr_reg = retype(get_tmp(c), BRW_REGISTER_TYPE_D);
brw_MUL(p, byte_addr_reg, addr_reg, brw_imm_d(16));
addr_reg = byte_addr_reg;
offset = 16 * src->Index;
}
/* fetch the first vec4 */
brw_dp_READ_4_vs_relative(p,
const_reg, /* writeback dest */
byte_addr_reg, /* address register */
16 * src->Index, /* byte offset */
SURF_INDEX_VERT_CONST_BUFFER /* binding table index */
);
const_reg,
addr_reg,
offset,
SURF_INDEX_VERT_CONST_BUFFER);
return const_reg;
}