trivial/point no longer hardlocks.
struct r300_texture* tex;
int i;
- BEGIN_CS((5 * fb->nr_cbufs) + (fb->zsbuf ? 5 : 0) + 4);
+ BEGIN_CS((6 * fb->nr_cbufs) + (fb->zsbuf ? 5 : 0) + 4);
for (i = 0; i < fb->nr_cbufs; i++) {
tex = (struct r300_texture*)fb->cbufs[i]->texture;
OUT_CS_REG_SEQ(R300_RB3D_COLOROFFSET0 + (4 * i), 1);
r300->dirty_state &= ~R300_NEW_RASTERIZER;
}
+ if (r300->dirty_state & R300_NEW_RS_BLOCK) {
+ r300_emit_rs_block_state(r300, r300->rs_block);
+ r300->dirty_state &= ~R300_NEW_RS_BLOCK;
+ }
+
if (r300->dirty_state & R300_NEW_SCISSOR) {
r300_emit_scissor_state(r300, r300->scissor_state);
r300->dirty_state &= ~R300_NEW_SCISSOR;
r300->vertex_info.vap_prog_stream_cntl_ext[i >> 1] |=
(R300_VAP_SWIZZLE_XYZW << (i & 1 ? 16 : 0));
}
+ /* Set the last vector. */
+ i--;
r300->vertex_info.vap_prog_stream_cntl[i >> 1] |= (R300_LAST_VEC <<
(i & 1 ? 16 : 0));
R500_RS_INST_COL_ADDR(fp_offset);
fp_offset++;
}
-
- rs->inst_count = MAX2(col_count, tex_count);
} else {
for (i = 0; i < vinfo->num_attribs; i++) {
memory_pos = tab[vinfo->attrib[i].src_index] * 4;
R300_RS_SEL_Q(R300_RS_SEL_K1);
}
- for (i = 0; i < 8; i++)
- debug_printf("ip %d: 0x%x\n", i, rs->ip[i]);
-
for (i = 0; i < tex_count; i++) {
rs->inst[i] |= R300_RS_INST_TEX_ID(i) | R300_RS_INST_TEX_CN_WRITE |
R300_RS_INST_TEX_ADDR(fp_offset);
R300_RS_INST_COL_ADDR(fp_offset);
fp_offset++;
}
-
- for (i = 0; i < 8; i++)
- debug_printf("inst %d: 0x%x\n", i, rs->inst[i]);
}
rs->count = (tex_count * 4) | (col_count << R300_IC_COUNT_SHIFT) |
R300_HIRES_EN;
rs->inst_count = MAX2(MAX2(col_count - 1, tex_count - 1), 0);
-
- debug_printf("count: 0x%x, inst_count: 0x%x\n", rs->count, rs->inst_count);
}
void r300_update_derived_state(struct r300_context* r300)
switch (type) {
case EMIT_1F:
case EMIT_1F_PSIZE:
- return R300_DATA_TYPE_FLOAT_1 | R300_SIGNED;
+ return R300_DATA_TYPE_FLOAT_1;
break;
case EMIT_2F:
- return R300_DATA_TYPE_FLOAT_2 | R300_SIGNED;
+ return R300_DATA_TYPE_FLOAT_2;
break;
case EMIT_3F:
- return R300_DATA_TYPE_FLOAT_3 | R300_SIGNED;
+ return R300_DATA_TYPE_FLOAT_3;
break;
case EMIT_4F:
- return R300_DATA_TYPE_FLOAT_4 | R300_SIGNED;
+ return R300_DATA_TYPE_FLOAT_4;
break;
case EMIT_4UB:
return R300_DATA_TYPE_BYTE;
r300_emit_rs_block_state(r300, &r300_rs_block_clear_state);
}
- BEGIN_CS(99 + (caps->has_tcl ? 9 : 0));
+ BEGIN_CS(97 + (caps->has_tcl ? 9 : 0));
/* Flush PVS. */
OUT_CS_REG(R300_VAP_PVS_STATE_FLUSH_REG, 0x0);
OUT_CS_REG(R300_VAP_CNTL_STATUS, R300_VC_NO_SWAP |
R300_VAP_TCL_BYPASS);
}
- OUT_CS_REG(R300_VAP_PROG_STREAM_CNTL_0, 0x0);
/* XXX magic number not in r300_reg */
OUT_CS_REG(R300_VAP_PSC_SGN_NORM_CNTL, 0xAAAAAAAA);
/* XXX point tex stuffing */