r600g: Swizzle vertex data only once.

Vertex data swizzles are already done in the vertex shader. Doing them twice
breaks BGRA vertex arrays for example.
This commit is contained in:
Henri Verbeet 2010-11-17 00:29:02 +01:00
parent b6e2c32626
commit 7d0f45563d
2 changed files with 4 additions and 35 deletions

View file

@ -636,38 +636,4 @@ out_unknown:
return ~0;
}
static INLINE uint32_t r600_translate_vertex_data_swizzle(enum pipe_format format)
{
const struct util_format_description *desc = util_format_description(format);
unsigned i;
uint32_t word3;
assert(format);
if (desc->layout != UTIL_FORMAT_LAYOUT_PLAIN) {
fprintf(stderr, "r600: Bad format %s in %s:%d\n",
util_format_short_name(format), __FUNCTION__, __LINE__);
return 0;
}
word3 = 0;
for (i = 0; i < desc->nr_channels; i++) {
switch (i) {
case 0:
word3 |= S_03000C_DST_SEL_X(desc->swizzle[0]);
break;
case 1:
word3 |= S_03000C_DST_SEL_Y(desc->swizzle[1]);
break;
case 2:
word3 |= S_03000C_DST_SEL_Z(desc->swizzle[2]);
break;
case 3:
word3 |= S_03000C_DST_SEL_W(desc->swizzle[3]);
break;
}
}
return word3;
}
#endif

View file

@ -1276,7 +1276,10 @@ void evergreen_draw(struct pipe_context *ctx, const struct pipe_draw_info *info)
word2 = format | S_030008_STRIDE(vertex_buffer->stride);
word3 = r600_translate_vertex_data_swizzle(rctx->vertex_elements->hw_format[i]);
word3 = S_03000C_DST_SEL_X(V_03000C_SQ_SEL_X) |
S_03000C_DST_SEL_Y(V_03000C_SQ_SEL_Y) |
S_03000C_DST_SEL_Z(V_03000C_SQ_SEL_Z) |
S_03000C_DST_SEL_W(V_03000C_SQ_SEL_W);
r600_pipe_state_add_reg(rstate, R_030000_RESOURCE0_WORD0, offset, 0xFFFFFFFF, rbuffer->bo);
r600_pipe_state_add_reg(rstate, R_030004_RESOURCE0_WORD1, rbuffer->size - offset - 1, 0xFFFFFFFF, NULL);