[Mesa-dev] [PATCH] i965/Gen4: Zero extra coordinates for ir_tex

Kenneth Graunke kenneth at whitecape.org
Sun Jul 14 09:30:04 PDT 2013


On 07/13/2013 11:37 PM, Chris Forbes wrote:
> We always emit U,V,R coordinates for this message, but the sampler gets
> very angry if pass garbage in the R coordinate for at least some
> texture formats.
>
> Fill the remaining coordinates with zero instead.
>
> Fixes broken rendering on GM45 in Source games.
>
> NOTE: This is a candidate for stable branches.
>
> Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
> ---
>   src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 4 ++++
>   1 file changed, 4 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> index fc7ae58..15d1c6a 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> @@ -891,6 +891,10 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate,
>   	 emit(MOV(fs_reg(MRF, base_mrf + mlen + i), coordinate));
>   	 coordinate.reg_offset++;
>         }
> +      /* zero the others. */
> +      for (int i = ir->coordinate->type->vector_elements; i<3; i++) {
> +         emit(MOV(fs_reg(MRF, base_mrf + mlen + i), fs_reg(0.0f)));
> +      }
>         /* gen4's SIMD8 sampler always has the slots for u,v,r present. */
>         mlen += 3;
>      } else if (ir->op == ir_txd) {
>

It just occurred to me that this probably also fixes:
https://bugs.freedesktop.org/show_bug.cgi?id=65236

Still haven't pulled out my GM45 to test, though.


More information about the mesa-dev mailing list