On 24 August 2012 03:06, Kenneth Graunke <kenn...@whitecape.org> wrote:
> Gallium drivers and i965 don't require special notification when > sampler uniforms change. They simply see the _NEW_TEXTURE and adjust > their indirection tables. These drivers don't want ProgramStringNotify: > it simply causes pointless recompiles. > > Unfortunately, i915 still requires shader recompiles and needs > ProgramStringNotify. Rather than trying to fix that, simply change the > hook to a new, more specific one: ShaderUniformChange. On i915, this > translates to ProgramStringNotify; others simply ignore it. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > I don't feel qualified to review this one. I've already commented on 1, 3, 5, 7, 8, and 9. The others (2, 4, and 6) are: Reviewed-by: Paul Berry <stereotype...@gmail.com> > --- > src/mesa/drivers/dri/i915/i915_fragprog.c | 8 ++++++++ > src/mesa/main/dd.h | 7 +++++++ > src/mesa/main/ff_fragment_shader.cpp | 3 ++- > src/mesa/main/uniform_query.cpp | 3 ++- > 4 files changed, 19 insertions(+), 2 deletions(-) > > Killing the ProgramStringNotify calls is what fixes Cogs. > This also should help Gallium: st/mesa doesn't need nor want this. > > diff --git a/src/mesa/drivers/dri/i915/i915_fragprog.c > b/src/mesa/drivers/dri/i915/i915_fragprog.c > index 5b7e93e..7a6e067 100644 > --- a/src/mesa/drivers/dri/i915/i915_fragprog.c > +++ b/src/mesa/drivers/dri/i915/i915_fragprog.c > @@ -1303,6 +1303,13 @@ i915ProgramStringNotify(struct gl_context * ctx, > return true; > } > > +static void > +i915SamplerUniformChange(struct gl_context *ctx, > + GLenum target, struct gl_program *prog) > +{ > + i915ProgramStringNotify(ctx, target, prog); > +} > + > void > i915_update_program(struct gl_context *ctx) > { > @@ -1456,4 +1463,5 @@ i915InitFragProgFuncs(struct dd_function_table > *functions) > functions->DeleteProgram = i915DeleteProgram; > functions->IsProgramNative = i915IsProgramNative; > functions->ProgramStringNotify = i915ProgramStringNotify; > + functions->SamplerUniformChange = i915SamplerUniformChange; > } > diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h > index 226897b..153e819 100644 > --- a/src/mesa/main/dd.h > +++ b/src/mesa/main/dd.h > @@ -396,6 +396,13 @@ struct dd_function_table { > GLboolean (*ProgramStringNotify)(struct gl_context *ctx, GLenum target, > struct gl_program *prog); > > + /** > + * Notify driver that the sampler uniforms for the current program have > + * changed. On some drivers, this may require shader recompiles. > + */ > + void (*SamplerUniformChange)(struct gl_context *ctx, GLenum target, > + struct gl_program *prog); > + > /** Query if program can be loaded onto hardware */ > GLboolean (*IsProgramNative)(struct gl_context *ctx, GLenum target, > struct gl_program *prog); > diff --git a/src/mesa/main/ff_fragment_shader.cpp > b/src/mesa/main/ff_fragment_shader.cpp > index f743ce1..e850d47 100644 > --- a/src/mesa/main/ff_fragment_shader.cpp > +++ b/src/mesa/main/ff_fragment_shader.cpp > @@ -1363,7 +1363,8 @@ create_new_program(struct gl_context *ctx, struct > state_key *key) > _mesa_associate_uniform_storage(ctx, p.shader_program, fp->Parameters); > > _mesa_update_shader_textures_used(p.shader_program, fp); > - (void) ctx->Driver.ProgramStringNotify(ctx, fp->Target, fp); > + if (ctx->Driver.SamplerUniformChange) > + ctx->Driver.SamplerUniformChange(ctx, fp->Target, fp); > > if (!p.shader_program->LinkStatus) > _mesa_problem(ctx, "Failed to link fixed function fragment shader: > %s\n", > diff --git a/src/mesa/main/uniform_query.cpp > b/src/mesa/main/uniform_query.cpp > index 816c277..bddb8f9 100644 > --- a/src/mesa/main/uniform_query.cpp > +++ b/src/mesa/main/uniform_query.cpp > @@ -809,7 +809,8 @@ _mesa_uniform(struct gl_context *ctx, struct > gl_shader_program *shProg, > sizeof(shProg->SamplerUnits)); > > _mesa_update_shader_textures_used(shProg, prog); > - (void) ctx->Driver.ProgramStringNotify(ctx, prog->Target, > prog); > + if (ctx->Driver.SamplerUniformChange) > + ctx->Driver.SamplerUniformChange(ctx, prog->Target, prog); > } > } > } > -- > 1.7.11.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev