What is "not perfect" about it? It looks good to me. Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Marek On Thu, Feb 8, 2018 at 7:55 PM, <mathias.froehl...@gmx.net> wrote: > From: Mathias Fröhlich <mathias.froehl...@gmx.net> > > Hi Marek, > > you mean like this? > Well, not perfect but that survives piglit quick on radeonsi then. > > Please review > > 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 when the following > patch gets applied. > > v2: Mute from within the state tracker instead of generic mesa. > v3: Avoid evaluating _DrawArrays from within st_validate_state. > > Signed-off-by: Mathias Fröhlich <mathias.froehl...@web.de> > --- > src/mesa/state_tracker/st_atom.c | 10 ++++++++++ > src/mesa/state_tracker/st_atom.h | 3 +++ > src/mesa/state_tracker/st_cb_bitmap.c | 4 ++-- > src/mesa/state_tracker/st_cb_drawpixels.c | 4 ++-- > src/mesa/state_tracker/st_cb_drawtex.c | 2 +- > 5 files changed, 18 insertions(+), 5 deletions(-) > > diff --git a/src/mesa/state_tracker/st_atom.c > b/src/mesa/state_tracker/st_atom.c > index 253b508164..b597c62632 100644 > --- a/src/mesa/state_tracker/st_atom.c > +++ b/src/mesa/state_tracker/st_atom.c > @@ -203,6 +203,16 @@ void st_validate_state( struct st_context *st, enum > st_pipeline pipeline ) > pipeline_mask = ST_PIPELINE_CLEAR_STATE_MASK; > break; > > + case ST_PIPELINE_META: > + if (st->gfx_shaders_may_be_dirty) { > + check_program_state(st); > + st->gfx_shaders_may_be_dirty = false; > + } > + > + st_manager_validate_framebuffers(st); > + pipeline_mask = ST_PIPELINE_META_STATE_MASK; > + break; > + > case ST_PIPELINE_UPDATE_FRAMEBUFFER: > st_manager_validate_framebuffers(st); > pipeline_mask = ST_PIPELINE_UPDATE_FB_STATE_MASK; > diff --git a/src/mesa/state_tracker/st_atom.h > b/src/mesa/state_tracker/st_atom.h > index f9711d5393..68388a5674 100644 > --- a/src/mesa/state_tracker/st_atom.h > +++ b/src/mesa/state_tracker/st_atom.h > @@ -44,6 +44,7 @@ struct st_context; > enum st_pipeline { > ST_PIPELINE_RENDER, > ST_PIPELINE_CLEAR, > + ST_PIPELINE_META, > ST_PIPELINE_UPDATE_FRAMEBUFFER, > ST_PIPELINE_COMPUTE, > }; > @@ -149,6 +150,8 @@ enum { > #define ST_PIPELINE_CLEAR_STATE_MASK (ST_NEW_FB_STATE | \ > ST_NEW_SCISSOR | \ > ST_NEW_WINDOW_RECTANGLES) > +#define ST_PIPELINE_META_STATE_MASK (ST_PIPELINE_RENDER_STATE_MASK & \ > + ~ST_NEW_VERTEX_ARRAYS) > /* For ReadPixels, ReadBuffer, GetSamplePosition: */ > #define ST_PIPELINE_UPDATE_FB_STATE_MASK (ST_NEW_FB_STATE) > > diff --git a/src/mesa/state_tracker/st_cb_bitmap.c > b/src/mesa/state_tracker/st_cb_bitmap.c > index 0a30ffa0f3..c41ed2ba02 100644 > --- a/src/mesa/state_tracker/st_cb_bitmap.c > +++ b/src/mesa/state_tracker/st_cb_bitmap.c > @@ -626,7 +626,7 @@ st_Bitmap(struct gl_context *ctx, GLint x, GLint y, > if ((st->dirty | ctx->NewDriverState) & ~ST_NEW_CONSTANTS & > ST_PIPELINE_RENDER_STATE_MASK || > st->gfx_shaders_may_be_dirty) { > - st_validate_state(st, ST_PIPELINE_RENDER); > + st_validate_state(st, ST_PIPELINE_META); > } > > if (UseBitmapCache && accum_bitmap(ctx, x, y, width, height, unpack, > bitmap)) > @@ -681,7 +681,7 @@ st_DrawAtlasBitmaps(struct gl_context *ctx, > > st_flush_bitmap_cache(st); > > - st_validate_state(st, ST_PIPELINE_RENDER); > + st_validate_state(st, ST_PIPELINE_META); > st_invalidate_readpix_cache(st); > > sv = st_create_texture_sampler_view(pipe, stObj->pt); > diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c > b/src/mesa/state_tracker/st_cb_drawpixels.c > index ddf6926332..471eb19661 100644 > --- a/src/mesa/state_tracker/st_cb_drawpixels.c > +++ b/src/mesa/state_tracker/st_cb_drawpixels.c > @@ -1147,7 +1147,7 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y, > st_flush_bitmap_cache(st); > st_invalidate_readpix_cache(st); > > - st_validate_state(st, ST_PIPELINE_RENDER); > + st_validate_state(st, ST_PIPELINE_META); > > /* Limit the size of the glDrawPixels to the max texture size. > * Strictly speaking, that's not correct but since we don't handle > @@ -1514,7 +1514,7 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint > srcy, > st_flush_bitmap_cache(st); > st_invalidate_readpix_cache(st); > > - st_validate_state(st, ST_PIPELINE_RENDER); > + st_validate_state(st, ST_PIPELINE_META); > > if (type == GL_DEPTH_STENCIL) { > /* XXX make this more efficient */ > diff --git a/src/mesa/state_tracker/st_cb_drawtex.c > b/src/mesa/state_tracker/st_cb_drawtex.c > index 01c5757a73..f18925ecfe 100644 > --- a/src/mesa/state_tracker/st_cb_drawtex.c > +++ b/src/mesa/state_tracker/st_cb_drawtex.c > @@ -120,7 +120,7 @@ st_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, > GLfloat z, > st_flush_bitmap_cache(st); > st_invalidate_readpix_cache(st); > > - st_validate_state(st, ST_PIPELINE_RENDER); > + st_validate_state(st, ST_PIPELINE_META); > > /* determine if we need vertex color */ > if (ctx->FragmentProgram._Current->info.inputs_read & VARYING_BIT_COL0) > -- > 2.14.3 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev