mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 04:58:05 +02:00
mesa: Use a new, more specific hook for shader uniform changes.
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 <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
85e8e9e000
commit
174d44a9c4
4 changed files with 19 additions and 2 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -399,6 +399,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);
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue