diff options
author | marha <marha@users.sourceforge.net> | 2012-02-13 08:47:19 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-02-13 08:47:19 +0100 |
commit | eaa70945cb3f1a432b8c505ecede9ebc7769f36d (patch) | |
tree | 8e44ff4da739e384a2c6a34c1b42ecfb8e212344 /mesalib/src/mesa/state_tracker/st_atom_sampler.c | |
parent | 474621addc25cb22865c54b70ffbec07c82eb04c (diff) | |
download | vcxsrv-eaa70945cb3f1a432b8c505ecede9ebc7769f36d.tar.gz vcxsrv-eaa70945cb3f1a432b8c505ecede9ebc7769f36d.tar.bz2 vcxsrv-eaa70945cb3f1a432b8c505ecede9ebc7769f36d.zip |
libX11 libxcb mesa xserver mkfontscale git update 13 feb 2012
Diffstat (limited to 'mesalib/src/mesa/state_tracker/st_atom_sampler.c')
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_atom_sampler.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/mesalib/src/mesa/state_tracker/st_atom_sampler.c b/mesalib/src/mesa/state_tracker/st_atom_sampler.c index 8845fed51..ee69fc390 100644 --- a/mesalib/src/mesa/state_tracker/st_atom_sampler.c +++ b/mesalib/src/mesa/state_tracker/st_atom_sampler.c @@ -233,29 +233,33 @@ update_fragment_samplers(struct st_context *st) const struct gl_context *ctx = st->ctx; struct gl_fragment_program *fprog = ctx->FragmentProgram._Current; GLuint su; + GLuint samplers_used = fprog->Base.SamplersUsed; + GLuint old_max = st->state.num_samplers; st->state.num_samplers = 0; /* loop over sampler units (aka tex image units) */ - for (su = 0; su < ctx->Const.MaxTextureImageUnits; su++) { + for (su = 0; su < ctx->Const.MaxTextureImageUnits; su++, samplers_used >>= 1) { struct pipe_sampler_state *sampler = st->state.samplers + su; - - if (fprog->Base.SamplersUsed & (1 << su)) { + if (samplers_used & 1) { GLuint texUnit; - texUnit = fprog->Base.SamplerUnits[su]; + texUnit = fprog->Base.SamplerUnits[su]; - convert_sampler(st, sampler, texUnit); + convert_sampler(st, sampler, texUnit); st->state.num_samplers = su + 1; /*printf("%s su=%u non-null\n", __FUNCTION__, su);*/ cso_single_sampler(st->cso_context, su, sampler); } - else { + else if (samplers_used != 0 || su < old_max) { /*printf("%s su=%u null\n", __FUNCTION__, su);*/ cso_single_sampler(st->cso_context, su, NULL); + } else { + /* if we've reset all the old views and we have no more new ones */ + break; } } |