On 09/18/2013 01:18 PM, Eric Anholt wrote: > The rescale_texcoord(), if it does something, will return just the > GLSL-sized coordinate, leaving out the 3rd and 4th components where we > were storing our projected shadow compare and the texture projector. > Deref the shadow compare before using the shared rescale-the-coordinate > code to fix the problem. > > Fixes piglit tex-shadow2drect.shader_test and txp-shadow2drect.shader_test > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=69525 > NOTE: This is a candidate for stable branches. > --- > src/mesa/drivers/dri/i965/brw_fs_fp.cpp | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_fs_fp.cpp > b/src/mesa/drivers/dri/i965/brw_fs_fp.cpp > index 68531e3..0594948 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_fp.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_fp.cpp > @@ -490,15 +490,15 @@ fs_visitor::emit_fragment_program_code() > ir_constant_data junk_data; > ir->coordinate = new(mem_ctx) ir_constant(coordinate_type, > &junk_data); > > - coordinate = rescale_texcoord(ir, coordinate, > - fpi->TexSrcTarget == > TEXTURE_RECT_INDEX, > - fpi->TexSrcUnit, fpi->TexSrcUnit); > - > if (fpi->TexShadow) { > shadow_c = regoffset(coordinate, 2); > ir->shadow_comparitor = new(mem_ctx) ir_constant(0.0f); > } > > + coordinate = rescale_texcoord(ir, coordinate, > + fpi->TexSrcTarget == > TEXTURE_RECT_INDEX, > + fpi->TexSrcUnit, fpi->TexSrcUnit); > + > fs_inst *inst; > if (brw->gen >= 7) { > inst = emit_texture_gen7(ir, dst, coordinate, shadow_c, lod, > dpdy, sample_index); >
Pulling out the shadow comparitor first seems obviously correct. I'm still concerned that rescale_texcoord() might not work since the SamplerUnits change, though. It would be nice to use textureSize instead of this state var uniform stuff. --Ken _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
