r300-gallium: Cleanup PSC for HW TCL.

Still dies in assert, but at least it's not my assert anymore. :3
This commit is contained in:
Corbin Simpson 2009-05-11 09:57:57 -07:00
parent f38a02212f
commit e9f8b7f1b9

View file

@ -162,26 +162,40 @@ static void r300_vs_tab_routes(struct r300_context* r300,
static void r300_vertex_psc(struct r300_context* r300,
struct r300_vertex_format* vformat)
{
struct r300_screen* r300screen = r300_screen(r300->context.screen);
struct vertex_info* vinfo = &vformat->vinfo;
int* tab = vformat->vs_tab;
uint32_t temp;
int i;
int i, attrib_count;
debug_printf("r300: attrib count: %d\n", vinfo->num_attribs);
for (i = 0; i < vinfo->num_attribs; i++) {
debug_printf("r300: attrib: offset %d, interp %d, size %d,"
" tab %d\n", vinfo->attrib[i].src_index,
vinfo->attrib[i].interp_mode, vinfo->attrib[i].emit,
tab[i]);
/* Vertex shaders have no semantics on their inputs,
* so PSC should just route stuff based on their info,
* and not on attrib information. */
if (r300screen->caps->has_tcl) {
attrib_count = r300->vs->info.num_inputs;
debug_printf("r300: routing %d attribs in psc for vs\n",
attrib_count);
} else {
attrib_count = vinfo->num_attribs;
debug_printf("r300: attrib count: %d\n", attrib_count);
for (i = 0; i < attrib_count; i++) {
debug_printf("r300: attrib: offset %d, interp %d, size %d,"
" tab %d\n", vinfo->attrib[i].src_index,
vinfo->attrib[i].interp_mode, vinfo->attrib[i].emit,
tab[i]);
}
}
for (i = 0; i < vinfo->num_attribs; i++) {
for (i = 0; i < attrib_count; i++) {
/* Make sure we have a proper destination for our attribute */
assert(tab[i] != -1);
/* Add the attribute to the PSC table. */
temp = translate_vertex_data_type(vinfo->attrib[i].emit) |
(tab[i] << R300_DST_VEC_LOC_SHIFT);
temp = r300screen->caps->has_tcl ?
R300_DATA_TYPE_FLOAT_4 :
translate_vertex_data_type(vinfo->attrib[i].emit);
temp |= tab[i] << R300_DST_VEC_LOC_SHIFT;
if (i & 1) {
vformat->vap_prog_stream_cntl[i >> 1] &= 0x0000ffff;
vformat->vap_prog_stream_cntl[i >> 1] |= temp << 16;
@ -206,7 +220,6 @@ static void r300_vertex_psc(struct r300_context* r300,
/* Update the vertex format. */
static void r300_update_vertex_format(struct r300_context* r300)
{
struct r300_screen* r300screen = r300_screen(r300->context.screen);
struct r300_vertex_format vformat;
int i;