Chris Forbes <[email protected]> writes:

> gather4_c's argument layout is straightforward -- refz just goes on the
> end.
>
> gather4_po_c's layout however -- the array index is replaced with refz.
>
> Signed-off-by: Chris Forbes <[email protected]>

> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp 
> b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> index 20221d9..7aa8368 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> @@ -2341,7 +2341,7 @@ vec4_visitor::visit(ir_texture *ir)
>                    src_reg(0)));
>        }
>        /* Load the shadow comparitor */
> -      if (ir->shadow_comparitor && ir->op != ir_txd) {
> +      if (ir->shadow_comparitor && ir->op != ir_txd && (ir->op != ir_tg4 || 
> !has_nonconstant_offset)) {
>        emit(MOV(dst_reg(MRF, param_base + 1, ir->shadow_comparitor->type,
>                         WRITEMASK_X),
>                 shadow_comparitor));
> @@ -2406,9 +2406,18 @@ vec4_visitor::visit(ir_texture *ir)
>           inst->mlen += 2;
>        }
>        } else if (ir->op == ir_tg4 && has_nonconstant_offset) {
> -         emit(MOV(dst_reg(MRF, param_base + 1, glsl_type::ivec2_type, 
> WRITEMASK_XY),
> -                  offset_value));
> -         inst->mlen++;
> +         if (ir->shadow_comparitor) {
> +            emit(MOV(dst_reg(MRF, param_base + 1,
> +                             ir->shadow_comparitor->type, WRITEMASK_X),
> +                     shadow_comparitor));
> +            emit(MOV(dst_reg(MRF, param_base + 1, glsl_type::ivec2_type, 
> WRITEMASK_YZ),
> +                     offset_value));
> +            inst->mlen++;
> +         } else {
> +            emit(MOV(dst_reg(MRF, param_base + 1, glsl_type::ivec2_type, 
> WRITEMASK_XY),
> +                     offset_value));
> +            inst->mlen++;
> +         }
>        }
>     }

I don't think this code ends up working out.  I'm looking at the 4x2
tables and I see:

              0.x  0.y  0.z  0.w   1.x   1.y  1.z  1.w
sample_c:     u    v    r    ai    ref
sample_po_c:  u    v    r    ref   offu  offv

You're writing the shadow comparitor to 1.x instead of 0.w, and the
offset to 1.yz instead of 1.xy.

Are there tests for these cases?

Attachment: pgpBigZlxU26z.pgp
Description: PGP signature

_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to