On Thu, Dec 22, 2011 at 9:35 AM, Vadim Girlin <vadimgir...@gmail.com> wrote: > If glUniform1i and friends are going to dump data directly in > driver-allocated, the pointers have to be updated when the storage > moves. This should fix the regressions seen with commit 7199096. > > I'm not sure if this is the only place that needs this treatment. I'm > a little uncertain about the various functions in st_glsl_to_tgsi that > modify the TGSI IR and try to propagate changes about that up to the > gl_program. That seems sketchy to me. > > Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> > > v2: > > Revalidate when shader_program is not NULL. > Update the pointers for all _LinkedShaders. > Init glsl_to_tgsi_visitor::shader_program to NULL in the > get_pixel_transfer_visitor & get_bitmap_visitor. > > Signed-off-by: Vadim Girlin <vadimgir...@gmail.com> > --- > > Based on the patch from Ian Romanick: > http://lists.freedesktop.org/archives/mesa-dev/2011-November/014675.html > > Fixes uniform regressions with r600g (and probably other drivers) > after commit 719909698c67c287a393d2380278e7b7495ae018
Are there any objections to pushing this patch? Alex > > Tested on evergreen with r600.tests: no regressions. > > src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 25 +++++++++++++++++++++++++ > 1 files changed, 25 insertions(+), 0 deletions(-) > > diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > index 77aa0d1..fce92bb 100644 > --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > @@ -3708,6 +3708,7 @@ get_pixel_transfer_visitor(struct st_fragment_program > *fp, > /* Copy attributes of the glsl_to_tgsi_visitor in the original shader. */ > v->ctx = original->ctx; > v->prog = prog; > + v->shader_program = NULL; > v->glsl_version = original->glsl_version; > v->native_integers = original->native_integers; > v->options = original->options; > @@ -3837,6 +3838,7 @@ get_bitmap_visitor(struct st_fragment_program *fp, > /* Copy attributes of the glsl_to_tgsi_visitor in the original shader. */ > v->ctx = original->ctx; > v->prog = prog; > + v->shader_program = NULL; > v->glsl_version = original->glsl_version; > v->native_integers = original->native_integers; > v->options = original->options; > @@ -4550,6 +4552,15 @@ st_translate_program( > t->pointSizeOutIndex = -1; > t->prevInstWrotePointSize = GL_FALSE; > > + if (program->shader_program) { > + for (i = 0; i < program->shader_program->NumUserUniformStorage; i++) { > + struct gl_uniform_storage *const storage = > + &program->shader_program->UniformStorage[i]; > + > + _mesa_uniform_detach_all_driver_storage(storage); > + } > + } > + > /* > * Declare input attributes. > */ > @@ -4776,6 +4787,20 @@ st_translate_program( > t->insn[t->labels[i].branch_target]); > } > > + if (program->shader_program) { > + /* This has to be done last. Any operation the can cause > + * prog->ParameterValues to get reallocated (e.g., anything that adds a > + * program constant) has to happen before creating this linkage. > + */ > + for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) { > + if (program->shader_program->_LinkedShaders[i] == NULL) > + continue; > + > + _mesa_associate_uniform_storage(ctx, program->shader_program, > + > program->shader_program->_LinkedShaders[i]->Program->Parameters); > + } > + } > + > out: > if (t) { > FREE(t->insn); > -- > 1.7.7.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