[Mesa-dev] [PATCH] i965/gen4: Fix fragment program rectangle texture shadow compares.

Kenneth Graunke kenneth at whitecape.org
Wed Sep 18 18:30:04 PDT 2013


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


More information about the mesa-dev mailing list