diff options
author | Chris Forbes <[email protected]> | 2013-09-30 22:10:17 +1300 |
---|---|---|
committer | Chris Forbes <[email protected]> | 2013-10-03 07:54:53 +1300 |
commit | 0d7fc10bcd2efb2f96d684b3273b4e0c0b0afef0 (patch) | |
tree | 04105027f89020ef6769e2100f6bacdb202cefc5 /src/mesa/drivers/dri/i965 | |
parent | 4e4c32ba11598818583ad0aa689339297ddf1c74 (diff) |
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 <[email protected]>
Cc: "9.2" <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_cubemap_normalize.cpp | 10 |
1 files 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); |