[Mesa-dev] [PATCH] i965: Rewrite ir_tex to ir_txl with lod 0 for vertex shaders

Ian Romanick idr at freedesktop.org
Wed Apr 15 14:47:01 PDT 2015


On 04/15/2015 12:41 PM, Kristian Høgsberg wrote:
> The ir_tex opcode turns into a sample or sample_c message, which will try to
> compute derivatives to determine the lod. This produces garbage for
> non-fragment shaders where the sample coordinates don't correspond to
> subspans.
> 
> We fix this by rewriting the opcode from ir_tex to ir_txl and setting the
> lod to 0.

This seems logical, but... why the heck hasn't this been a problem
before?  Is this some weirdness of just BSW?  Should we perhaps only do
this on BSW?

> https://bugs.freedesktop.org/show_bug.cgi?id=89457

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89457

That allows the bin/bugzilla_mesa.sh script to find it for generating
release notes.

> Signed-off-by: Kristian Høgsberg <krh at bitplanet.net>
> ---
>  src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> index 0049b2d..4e99366 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> @@ -1839,6 +1839,15 @@ fs_visitor::emit_texture_gen7(ir_texture_opcode op, fs_reg dst,
>        offset_value.file != BAD_FILE && offset_value.file != IMM;
>     bool coordinate_done = false;
>  
> +   /* The sampler can only meaningfully compute LOD for fragment shader
> +    * messages. For all other stages, we change the opcode to ir_txl and
> +    * hardcode the LOD to 0.
> +    */
> +   if (stage != MESA_SHADER_FRAGMENT && op == ir_tex) {
> +      op = ir_txl;
> +      lod = fs_reg(0.0f);
> +   }
> +
>     /* Set up the LOD info */
>     switch (op) {
>     case ir_tex:
> 



More information about the mesa-dev mailing list