From: Chris Forbes Date: Mon, 30 Sep 2013 09:10:17 +0000 (+1300) Subject: i965: fix bogus swizzle in brw_cubemap_normalize X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0d7fc10bcd2efb2f96d684b3273b4e0c0b0afef0;p=mesa.git 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 --- 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);