[Mesa-dev] [PATCH] gallium: Mute arrays for several meta like callbacks.
Marek Olšák
maraeo at gmail.com
Tue Feb 6 22:25:22 UTC 2018
You probably want to add new ST_PIPELINE_xxx. See how state filtering
works with ST_PIPELINE_CLEAR.
Marek
On Tue, Feb 6, 2018 at 9:18 PM, <Mathias.Froehlich at gmx.net> wrote:
> From: Mathias Fröhlich <Mathias.Froehlich at 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.Froehlich at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list