[Mesa-dev] [PATCH] i965: fix bogus swizzle in brw_cubemap_normalize

Chris Forbes chrisf at ijw.co.nz
Mon Sep 30 02:19:26 PDT 2013


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 <chrisf at ijw.co.nz>
Cc: "9.2" <mesa-stable at lists.freedesktop.org>
---
 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 46155fb..949414c 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);
-- 
1.8.4



More information about the mesa-dev mailing list