etnaviv: Don't try to use the index buffer if size is zero

If info->index_size is zero, info->index will point to uninitialized
memory.

Fatal signal 11 (SIGSEGV), code 2, fault addr 0xab5d07a3 in tid 20456 (surfaceflinger)

lst: Remove useless indexbuf conditional in the index_size != 0 case.

Fixes: 330d0607ed ("gallium: remove pipe_index_buffer and set_index_buffer")
Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
This commit is contained in:
Tomeu Vizoso 2017-05-19 12:40:44 +02:00 committed by Lucas Stach
parent d529d5ff16
commit 106b2786b6
1 changed files with 13 additions and 11 deletions

View File

@ -178,24 +178,26 @@ etna_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
/* Upload a user index buffer. */
unsigned index_offset = 0;
struct pipe_resource *indexbuf = info->has_user_indices ? NULL : info->index.resource;
if (info->index_size && info->has_user_indices &&
!util_upload_index_buffer(pctx, info, &indexbuf, &index_offset)) {
BUG("Index buffer upload failed.");
return;
}
struct pipe_resource *indexbuf = NULL;
if (info->index_size) {
indexbuf = info->has_user_indices ? NULL : info->index.resource;
if (info->has_user_indices &&
!util_upload_index_buffer(pctx, info, &indexbuf, &index_offset)) {
BUG("Index buffer upload failed.");
return;
}
if (info->index_size && indexbuf) {
ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.bo = etna_resource(indexbuf)->bo;
ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.offset = index_offset;
ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.flags = ETNA_RELOC_READ;
ctx->index_buffer.FE_INDEX_STREAM_CONTROL = translate_index_size(info->index_size);
ctx->dirty |= ETNA_DIRTY_INDEX_BUFFER;
}
if (info->index_size && !ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.bo) {
BUG("Unsupported or no index buffer");
return;
if (!ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.bo) {
BUG("Unsupported or no index buffer");
return;
}
}
struct etna_shader_key key = {};