https://bugs.freedesktop.org/show_bug.cgi?id=96408
Bug ID: 96408
Summary: [PERF] SSO: dirty all stages when only one is updated.
Trigger extra validations.
Product: Mesa
Version: git
Hardware: Other
OS: All
Status: NEW
Severity: normal
Priority: medium
Component: Mesa core
Assignee: mesa-dev@lists.freedesktop.org
Reporter: gregory.hain...@gmail.com
QA Contact: mesa-dev@lists.freedesktop.org
Hello,
Profile my app (PCSX2), I found that NEW_VERTEX_PROGRAM validation is often
called whereas my program barely switch the vertex shader.
It was detected on Gallium Nouveau but it could impact others (gallium) drivers
Potential issue 1:
_mesa_UseProgramStages (aka glUseProgramStages) will always call
_mesa_use_shader_program which call in turn ctx->Driver.UseProgram
If I'm correct it is allowed to attach a stage to any pipeline (i.e. not bound
pipeline). In this case, it doesn't make sense to call UseProgram.
Potential issue 2:
ctx->Driver.UseProgram (aka st_use_program in gallium word) will dirty all
stages (see code below). I'm not sure it is mandatory. It feels like the API
need to be extended with an st_use_program_stage.
static void
st_use_program(struct gl_context *ctx, struct gl_shader_program *shProg)
{
struct st_context *st = st_context(ctx);
st->dirty.st |= ST_NEW_FRAGMENT_PROGRAM;
st->dirty.st |= ST_NEW_VERTEX_PROGRAM;
st->dirty.st |= ST_NEW_GEOMETRY_PROGRAM;
st->dirty.st |= ST_NEW_TESSCTRL_PROGRAM;
st->dirty.st |= ST_NEW_TESSEVAL_PROGRAM;
st->dirty_cp.st |= ST_NEW_COMPUTE_PROGRAM;
}
Potential issue 3:
I don't know if we need to revalidate everything when the pipeline is switched.
In order to reduce pipeline validate one could create severals pipeline that
contains same programs.
Example:
pipe0 contains VS and FS0
pipe1 contains VS and FS1
Do we need to revalidate all the VS resources, if pipe1 is bound after pipe0?
Any opinions ?
Gregory
--
You are receiving this mail because:
You are the assignee for the bug.
You are the QA Contact for the bug.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev