From: Michel Dänzer Date: Fri, 1 Feb 2013 17:49:07 +0000 (+0100) Subject: radeonsi: Fix draws using user index buffer. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a8a5055f2dea1960898763d17f28043577c3e64e;p=mesa.git radeonsi: Fix draws using user index buffer. Was broken since commit bf469f4edc60bd1c5fd770cb231b8d5ab801427f ('gallium: add void *user_buffer in pipe_index_buffer'). Fixes 11 piglit tests and lots of missing geometry e.g. in TORCS. NOTE: This is a candidate for the 9.1 branch. --- diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c index ef94eae5261..3704410c9bf 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.c +++ b/src/gallium/drivers/radeonsi/si_state_draw.c @@ -524,10 +524,8 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info) struct pipe_index_buffer ib = {}; uint32_t cp_coher_cntl; - if ((!info->count && (info->indexed || !info->count_from_stream_output)) || - (info->indexed && !rctx->index_buffer.buffer)) { + if (!info->count && (info->indexed || !info->count_from_stream_output)) return; - } if (!rctx->ps_shader || !rctx->vs_shader) return; @@ -538,13 +536,14 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info) if (info->indexed) { /* Initialize the index buffer struct. */ pipe_resource_reference(&ib.buffer, rctx->index_buffer.buffer); + ib.user_buffer = rctx->index_buffer.user_buffer; ib.index_size = rctx->index_buffer.index_size; ib.offset = rctx->index_buffer.offset + info->start * ib.index_size; /* Translate or upload, if needed. */ r600_translate_index_buffer(rctx, &ib, info->count); - if (ib.user_buffer) { + if (ib.user_buffer && !ib.buffer) { r600_upload_index_buffer(rctx, &ib, info->count); }