From: Mathias Fröhlich <mathias.froehl...@gmx.net>

Hi Brian,

I think you are right the _mesa_set_drawing_arrays better belong into
the state tracker. You mean like the below?
I added also two other callbacks that lookes suspicious to me.
I just sent the single patch in question out of the series of three.
Tested with piglit quick on radeonsi, classic swrast and i965
without regressions.

best and thanks
Mathias


Set the _DrawArray pointer to NULL when calling into the Drivers
Bitmap/CopyPixels/DrawAtlasBitmaps/DrawPixels/DrawTex hooks.
This fixes an assert that gets uncovered with the following
patch gets applied.

v2: Mute from within the state tracker instead of generic mesa.

Signed-off-by: Mathias Fröhlich <mathias.froehl...@web.de>
---
 src/mesa/state_tracker/st_cb_bitmap.c     | 7 +++++++
 src/mesa/state_tracker/st_cb_drawpixels.c | 7 +++++++
 src/mesa/state_tracker/st_cb_drawtex.c    | 4 ++++
 3 files changed, 18 insertions(+)

diff --git a/src/mesa/state_tracker/st_cb_bitmap.c 
b/src/mesa/state_tracker/st_cb_bitmap.c
index a5c7ed0ee6..a1e35994de 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -36,6 +36,7 @@
 #include "main/dlist.h"
 #include "main/macros.h"
 #include "main/pbo.h"
+#include "main/varray.h"
 #include "program/program.h"
 #include "program/prog_print.h"
 
@@ -613,6 +614,9 @@ st_Bitmap(struct gl_context *ctx, GLint x, GLint y,
    assert(width > 0);
    assert(height > 0);
 
+   /* Prevent st_atom_array from accessing stale draw array data */
+   _mesa_set_drawing_arrays(ctx, NULL);
+
    st_invalidate_readpix_cache(st);
 
    if (!st->bitmap.vs) {
@@ -675,6 +679,9 @@ st_DrawAtlasBitmaps(struct gl_context *ctx,
    struct pipe_vertex_buffer vb = {0};
    unsigned i;
 
+   /* Prevent st_atom_array from accessing stale draw array data */
+   _mesa_set_drawing_arrays(ctx, NULL);
+
    if (!st->bitmap.vs) {
       init_bitmap_state(st);
    }
diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c 
b/src/mesa/state_tracker/st_cb_drawpixels.c
index ff3eb9b614..73108812da 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -45,6 +45,7 @@
 #include "main/texformat.h"
 #include "main/teximage.h"
 #include "main/texstore.h"
+#include "main/varray.h"
 #include "main/glformats.h"
 #include "program/program.h"
 #include "program/prog_print.h"
@@ -1142,6 +1143,9 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y,
    /* Mesa state should be up to date by now */
    assert(ctx->NewState == 0x0);
 
+   /* Prevent st_atom_array from accessing stale draw array data */
+   _mesa_set_drawing_arrays(ctx, NULL);
+
    _mesa_update_draw_buffer_bounds(ctx, ctx->DrawBuffer);
 
    st_flush_bitmap_cache(st);
@@ -1509,6 +1513,9 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint 
srcy,
    GLint readX, readY, readW, readH;
    struct gl_pixelstore_attrib pack = ctx->DefaultPacking;
 
+   /* Prevent st_atom_array from accessing stale draw array data */
+   _mesa_set_drawing_arrays(ctx, NULL);
+
    _mesa_update_draw_buffer_bounds(ctx, ctx->DrawBuffer);
 
    st_flush_bitmap_cache(st);
diff --git a/src/mesa/state_tracker/st_cb_drawtex.c 
b/src/mesa/state_tracker/st_cb_drawtex.c
index 01c5757a73..0df0ab4713 100644
--- a/src/mesa/state_tracker/st_cb_drawtex.c
+++ b/src/mesa/state_tracker/st_cb_drawtex.c
@@ -17,6 +17,7 @@
 #include "main/macros.h"
 #include "main/teximage.h"
 #include "main/framebuffer.h"
+#include "main/varray.h"
 #include "program/program.h"
 #include "program/prog_print.h"
 
@@ -117,6 +118,9 @@ st_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, 
GLfloat z,
    struct pipe_vertex_element velements[2 + MAX_TEXTURE_UNITS];
    unsigned offset;
 
+   /* Prevent st_atom_array from accessing stale draw array data */
+   _mesa_set_drawing_arrays(ctx, NULL);
+
    st_flush_bitmap_cache(st);
    st_invalidate_readpix_cache(st);
 
-- 
2.14.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to