etnaviv: reset indexed rendering information when not rendering indexed
authorWladimir J. van der Laan <laanwj@gmail.com>
Fri, 14 Jul 2017 11:26:24 +0000 (13:26 +0200)
committerLucas Stach <l.stach@pengutronix.de>
Fri, 14 Jul 2017 15:19:42 +0000 (17:19 +0200)
A dangling bo object would result in memory corruption while loading a
level in ioquake3_opengl2.

Fixes: 330d0607ed60 (gallium: remove pipe_index_buffer and set_index_buffer)
Suggested-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Wladimir J. van der Laan <laanwj@gmail.com>
Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
src/gallium/drivers/etnaviv/etnaviv_context.c

index e7590954c74844e04f80c356a47ae8e8a5dab941..2ca09ce3219f79c33a3ee2cf1552cd8709aef48b 100644 (file)
@@ -192,13 +192,18 @@ etna_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
       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 (!ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.bo) {
          BUG("Unsupported or no index buffer");
          return;
       }
+   } else {
+      ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.bo = 0;
+      ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.offset = 0;
+      ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR.flags = 0;
+      ctx->index_buffer.FE_INDEX_STREAM_CONTROL = 0;
    }
+   ctx->dirty |= ETNA_DIRTY_INDEX_BUFFER;
 
    struct etna_shader_key key = {};
    struct etna_surface *cbuf = etna_surface(pfb->cbufs[0]);