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?
pgpBigZlxU26z.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
