[Mesa-dev] [PATCH] i965/fs: Fix ir_txs in emit_texture_gen4_simd16().

Jordan Justen jordan.l.justen at intel.com
Fri Jun 26 15:36:55 PDT 2015


Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>

On 2015-06-22 11:18:55, Kenneth Graunke wrote:
> We were not emitting the LOD, which led to message lengths of 1 instead
> of 3.  Setting has_lod makes us emit the LOD, but I had to make changes
> to avoid emitting the non-existent coordinate as well.
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91022
> Cc: mesa-stable at lists.freedesktop.org
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/brw_fs_visitor.cpp |    7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> index 4770838..12253e4 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> @@ -247,7 +247,7 @@ fs_visitor::emit_texture_gen4_simd16(ir_texture_opcode op, fs_reg dst,
>                                       uint32_t sampler)
>  {
>     fs_reg message(MRF, 2, BRW_REGISTER_TYPE_F, dispatch_width);
> -   bool has_lod = op == ir_txl || op == ir_txb || op == ir_txf;
> +   bool has_lod = op == ir_txl || op == ir_txb || op == ir_txf || op == ir_txs;
>  
>     if (has_lod && shadow_c.file != BAD_FILE)
>        no16("TXB and TXL with shadow comparison unsupported in SIMD16.");
> @@ -264,14 +264,15 @@ fs_visitor::emit_texture_gen4_simd16(ir_texture_opcode op, fs_reg dst,
>     fs_reg msg_end = offset(message, vector_elements);
>  
>     /* Messages other than sample and ld require all three components */
> -   if (has_lod || shadow_c.file != BAD_FILE) {
> +   if (vector_elements > 0 && (has_lod || shadow_c.file != BAD_FILE)) {
>        for (int i = vector_elements; i < 3; i++) {
>           bld.MOV(offset(message, i), fs_reg(0.0f));
>        }
> +      msg_end = offset(message, 3);
>     }
>  
>     if (has_lod) {
> -      fs_reg msg_lod = retype(offset(message, 3), op == ir_txf ?
> +      fs_reg msg_lod = retype(msg_end, op == ir_txf ?
>                                BRW_REGISTER_TYPE_UD : BRW_REGISTER_TYPE_F);
>        bld.MOV(msg_lod, lod);
>        msg_end = offset(msg_lod, 1);
> -- 
> 1.7.10.4
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list