Re: [Mesa-dev] [PATCH 4/9] st/mesa: skip updates of states that have no effect
On Mon, Jul 18, 2016 at 3:31 PM, Ilia Mirkinwrote: > On Mon, Jul 18, 2016 at 9:11 AM, Marek Olšák wrote: >> From: Marek Olšák >> >> --- >> src/mesa/state_tracker/st_atom.c | 15 ++- >> src/mesa/state_tracker/st_atom.h | 22 ++ >> 2 files changed, 28 insertions(+), 9 deletions(-) >> >> diff --git a/src/mesa/state_tracker/st_atom.c >> b/src/mesa/state_tracker/st_atom.c >> index 5843d2a..77f1ec3 100644 >> --- a/src/mesa/state_tracker/st_atom.c >> +++ b/src/mesa/state_tracker/st_atom.c >> @@ -107,6 +107,7 @@ static void check_attrib_edgeflag(struct st_context *st) >> >> void st_validate_state( struct st_context *st, enum st_pipeline pipeline ) >> { >> + struct gl_context *ctx = st->ctx; >> uint64_t dirty, pipeline_mask; >> uint32_t dirty_lo, dirty_hi; >> >> @@ -117,11 +118,23 @@ void st_validate_state( struct st_context *st, enum >> st_pipeline pipeline ) >> /* Get pipeline state. */ >> switch (pipeline) { >> case ST_PIPELINE_RENDER: >> - check_attrib_edgeflag(st); >> + if (st->ctx->API != API_OPENGL_CORE) > > I think that should be == API_OPENGL_COMPAT. Pretty sure ES doesn't > have it either. Thanks. Fixed locally. Marek ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 4/9] st/mesa: skip updates of states that have no effect
On Mon, Jul 18, 2016 at 9:11 AM, Marek Olšákwrote: > From: Marek Olšák > > --- > src/mesa/state_tracker/st_atom.c | 15 ++- > src/mesa/state_tracker/st_atom.h | 22 ++ > 2 files changed, 28 insertions(+), 9 deletions(-) > > diff --git a/src/mesa/state_tracker/st_atom.c > b/src/mesa/state_tracker/st_atom.c > index 5843d2a..77f1ec3 100644 > --- a/src/mesa/state_tracker/st_atom.c > +++ b/src/mesa/state_tracker/st_atom.c > @@ -107,6 +107,7 @@ static void check_attrib_edgeflag(struct st_context *st) > > void st_validate_state( struct st_context *st, enum st_pipeline pipeline ) > { > + struct gl_context *ctx = st->ctx; > uint64_t dirty, pipeline_mask; > uint32_t dirty_lo, dirty_hi; > > @@ -117,11 +118,23 @@ void st_validate_state( struct st_context *st, enum > st_pipeline pipeline ) > /* Get pipeline state. */ > switch (pipeline) { > case ST_PIPELINE_RENDER: > - check_attrib_edgeflag(st); > + if (st->ctx->API != API_OPENGL_CORE) I think that should be == API_OPENGL_COMPAT. Pretty sure ES doesn't have it either. > + check_attrib_edgeflag(st); > + >check_program_state(st); >st_manager_validate_framebuffers(st); > >pipeline_mask = ST_PIPELINE_RENDER_STATE_MASK; > + > + /* Don't update states that have no effect. */ > + if (!ctx->TessCtrlProgram._Current) > + pipeline_mask &= ~ST_NEW_TCS_RESOURCES; > + if (!ctx->TessEvalProgram._Current) > + pipeline_mask &= ~ST_NEW_TES_RESOURCES; > + if (!ctx->GeometryProgram._Current) > + pipeline_mask &= ~ST_NEW_GS_RESOURCES; > + if (!ctx->Transform.ClipPlanesEnabled) > + pipeline_mask &= ~ST_NEW_CLIP_STATE; >break; > case ST_PIPELINE_COMPUTE: >pipeline_mask = ST_PIPELINE_COMPUTE_STATE_MASK; > diff --git a/src/mesa/state_tracker/st_atom.h > b/src/mesa/state_tracker/st_atom.h > index 871afc6..961c395 100644 > --- a/src/mesa/state_tracker/st_atom.h > +++ b/src/mesa/state_tracker/st_atom.h > @@ -99,30 +99,36 @@ enum { > ST_NEW_CLIP_STATE | \ > ST_NEW_RASTERIZER) > > -#define ST_NEW_TESSCTRL_PROGRAM (ST_NEW_TCS_STATE | \ > - ST_NEW_TCS_SAMPLER_VIEWS | \ > +#define ST_NEW_TCS_RESOURCES(ST_NEW_TCS_SAMPLER_VIEWS | \ > ST_NEW_TCS_IMAGES | \ > ST_NEW_TCS_CONSTANTS | \ > ST_NEW_TCS_UBOS | \ > ST_NEW_TCS_ATOMICS | \ > ST_NEW_TCS_SSBOS) > > -#define ST_NEW_TESSEVAL_PROGRAM (ST_NEW_TES_STATE | \ > - ST_NEW_TES_SAMPLER_VIEWS | \ > +#define ST_NEW_TESSCTRL_PROGRAM (ST_NEW_TCS_STATE | \ > + ST_NEW_TCS_RESOURCES) > + > +#define ST_NEW_TES_RESOURCES(ST_NEW_TES_SAMPLER_VIEWS | \ > ST_NEW_TES_IMAGES | \ > ST_NEW_TES_CONSTANTS | \ > ST_NEW_TES_UBOS | \ > ST_NEW_TES_ATOMICS | \ > - ST_NEW_TES_SSBOS | \ > + ST_NEW_TES_SSBOS) > + > +#define ST_NEW_TESSEVAL_PROGRAM (ST_NEW_TES_STATE | \ > + ST_NEW_TES_RESOURCES | \ > ST_NEW_RASTERIZER) > > -#define ST_NEW_GEOMETRY_PROGRAM (ST_NEW_GS_STATE | \ > - ST_NEW_GS_SAMPLER_VIEWS | \ > +#define ST_NEW_GS_RESOURCES (ST_NEW_GS_SAMPLER_VIEWS | \ > ST_NEW_GS_IMAGES | \ > ST_NEW_GS_CONSTANTS | \ > ST_NEW_GS_UBOS | \ > ST_NEW_GS_ATOMICS | \ > - ST_NEW_GS_SSBOS | \ > + ST_NEW_GS_SSBOS) > + > +#define ST_NEW_GEOMETRY_PROGRAM (ST_NEW_GS_STATE | \ > + ST_NEW_GS_RESOURCES | \ > ST_NEW_RASTERIZER) > > #define ST_NEW_FRAGMENT_PROGRAM (ST_NEW_FS_STATE | \ > -- > 2.7.4 > > ___ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 4/9] st/mesa: skip updates of states that have no effect
From: Marek Olšák--- src/mesa/state_tracker/st_atom.c | 15 ++- src/mesa/state_tracker/st_atom.h | 22 ++ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/mesa/state_tracker/st_atom.c b/src/mesa/state_tracker/st_atom.c index 5843d2a..77f1ec3 100644 --- a/src/mesa/state_tracker/st_atom.c +++ b/src/mesa/state_tracker/st_atom.c @@ -107,6 +107,7 @@ static void check_attrib_edgeflag(struct st_context *st) void st_validate_state( struct st_context *st, enum st_pipeline pipeline ) { + struct gl_context *ctx = st->ctx; uint64_t dirty, pipeline_mask; uint32_t dirty_lo, dirty_hi; @@ -117,11 +118,23 @@ void st_validate_state( struct st_context *st, enum st_pipeline pipeline ) /* Get pipeline state. */ switch (pipeline) { case ST_PIPELINE_RENDER: - check_attrib_edgeflag(st); + if (st->ctx->API != API_OPENGL_CORE) + check_attrib_edgeflag(st); + check_program_state(st); st_manager_validate_framebuffers(st); pipeline_mask = ST_PIPELINE_RENDER_STATE_MASK; + + /* Don't update states that have no effect. */ + if (!ctx->TessCtrlProgram._Current) + pipeline_mask &= ~ST_NEW_TCS_RESOURCES; + if (!ctx->TessEvalProgram._Current) + pipeline_mask &= ~ST_NEW_TES_RESOURCES; + if (!ctx->GeometryProgram._Current) + pipeline_mask &= ~ST_NEW_GS_RESOURCES; + if (!ctx->Transform.ClipPlanesEnabled) + pipeline_mask &= ~ST_NEW_CLIP_STATE; break; case ST_PIPELINE_COMPUTE: pipeline_mask = ST_PIPELINE_COMPUTE_STATE_MASK; diff --git a/src/mesa/state_tracker/st_atom.h b/src/mesa/state_tracker/st_atom.h index 871afc6..961c395 100644 --- a/src/mesa/state_tracker/st_atom.h +++ b/src/mesa/state_tracker/st_atom.h @@ -99,30 +99,36 @@ enum { ST_NEW_CLIP_STATE | \ ST_NEW_RASTERIZER) -#define ST_NEW_TESSCTRL_PROGRAM (ST_NEW_TCS_STATE | \ - ST_NEW_TCS_SAMPLER_VIEWS | \ +#define ST_NEW_TCS_RESOURCES(ST_NEW_TCS_SAMPLER_VIEWS | \ ST_NEW_TCS_IMAGES | \ ST_NEW_TCS_CONSTANTS | \ ST_NEW_TCS_UBOS | \ ST_NEW_TCS_ATOMICS | \ ST_NEW_TCS_SSBOS) -#define ST_NEW_TESSEVAL_PROGRAM (ST_NEW_TES_STATE | \ - ST_NEW_TES_SAMPLER_VIEWS | \ +#define ST_NEW_TESSCTRL_PROGRAM (ST_NEW_TCS_STATE | \ + ST_NEW_TCS_RESOURCES) + +#define ST_NEW_TES_RESOURCES(ST_NEW_TES_SAMPLER_VIEWS | \ ST_NEW_TES_IMAGES | \ ST_NEW_TES_CONSTANTS | \ ST_NEW_TES_UBOS | \ ST_NEW_TES_ATOMICS | \ - ST_NEW_TES_SSBOS | \ + ST_NEW_TES_SSBOS) + +#define ST_NEW_TESSEVAL_PROGRAM (ST_NEW_TES_STATE | \ + ST_NEW_TES_RESOURCES | \ ST_NEW_RASTERIZER) -#define ST_NEW_GEOMETRY_PROGRAM (ST_NEW_GS_STATE | \ - ST_NEW_GS_SAMPLER_VIEWS | \ +#define ST_NEW_GS_RESOURCES (ST_NEW_GS_SAMPLER_VIEWS | \ ST_NEW_GS_IMAGES | \ ST_NEW_GS_CONSTANTS | \ ST_NEW_GS_UBOS | \ ST_NEW_GS_ATOMICS | \ - ST_NEW_GS_SSBOS | \ + ST_NEW_GS_SSBOS) + +#define ST_NEW_GEOMETRY_PROGRAM (ST_NEW_GS_STATE | \ + ST_NEW_GS_RESOURCES | \ ST_NEW_RASTERIZER) #define ST_NEW_FRAGMENT_PROGRAM (ST_NEW_FS_STATE | \ -- 2.7.4 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev