gallium/util: Save and restore vertex buffer state in util_gen_mipmap.
authorStuart Abercrombie <sabercrombie@chromium.org>
Fri, 29 Jun 2012 23:31:24 +0000 (16:31 -0700)
committerMarek Olšák <maraeo@gmail.com>
Wed, 4 Jul 2012 01:48:29 +0000 (03:48 +0200)
Calling glGenerateMipmap could overwrite vertex buffer state, leading
 to incorrect rendering or crashes depending on the Gallium driver.

This was happening on WebGL Conformance test texture-size.

Before 784dd51198433e5c299da4a7742c68d21d68d1c1 this was covered up
by redundant vertex buffer validation.

Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Signed-off-by: Marek Olšák <maraeo@gmail.com>
src/gallium/auxiliary/util/u_gen_mipmap.c

index 82474cd7bad848bf29916e1db0780d6e59e390b2..2ff1af70a5939d65470d2245127e128d7f7dfee3 100644 (file)
@@ -1556,6 +1556,7 @@ util_gen_mipmap(struct gen_mipmap_state *ctx,
    cso_save_geometry_shader(ctx->cso);
    cso_save_viewport(ctx->cso);
    cso_save_vertex_elements(ctx->cso);
+   cso_save_vertex_buffers(ctx->cso);
 
    /* bind our state */
    cso_set_blend(ctx->cso, &ctx->blend);
@@ -1679,4 +1680,5 @@ util_gen_mipmap(struct gen_mipmap_state *ctx,
    cso_restore_viewport(ctx->cso);
    cso_restore_vertex_elements(ctx->cso);
    cso_restore_stream_outputs(ctx->cso);
+   cso_restore_vertex_buffers(ctx->cso);
 }