From 0d7fc10bcd2efb2f96d684b3273b4e0c0b0afef0 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Mon, 30 Sep 2013 22:10:17 +1300 Subject: [PATCH] i965: fix bogus swizzle in brw_cubemap_normalize When used with a cube array in VS, failed assertion in ir_validate: Assignment count of LHS write mask channels enabled not matching RHS vector size (3 LHS, 4 RHS). To fix this, swizzle the RHS correctly for the writemask. This showed up in the ARB_texture_gather tests, which exercise cube arrays in the VS. Signed-off-by: Chris Forbes Cc: "9.2" Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/brw_cubemap_normalize.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_cubemap_normalize.cpp b/src/mesa/drivers/dri/i965/brw_cubemap_normalize.cpp index 46155fb43af..949414cc954 100644 --- a/src/mesa/drivers/dri/i965/brw_cubemap_normalize.cpp +++ b/src/mesa/drivers/dri/i965/brw_cubemap_normalize.cpp @@ -92,10 +92,12 @@ brw_cubemap_normalize_visitor::visit_leave(ir_texture *ir) /* coordinate.xyz *= expr */ assign = new(mem_ctx) ir_assignment( new(mem_ctx) ir_dereference_variable(var), - new(mem_ctx) ir_expression(ir_binop_mul, - ir->coordinate->type, - new(mem_ctx) ir_dereference_variable(var), - expr)); + new(mem_ctx) ir_swizzle( + new(mem_ctx) ir_expression(ir_binop_mul, + ir->coordinate->type, + new(mem_ctx) ir_dereference_variable(var), + expr), + 0, 1, 2, 0, 3)); assign->write_mask = WRITEMASK_XYZ; base_ir->insert_before(assign); ir->coordinate = new(mem_ctx) ir_dereference_variable(var); -- 2.30.2