[Mesa-dev] [PATCH 05/13] ir_to_mesa: fix shadow2DArray comparison

Marek Olšák maraeo at gmail.com
Mon Sep 5 14:44:07 PDT 2011


The depth should be in W.
---
 src/mesa/program/ir_to_mesa.cpp |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 9813c4a..f705dc7 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2156,6 +2156,8 @@ ir_to_mesa_visitor::visit(ir_texture *ir)
       break;
    }
 
+   const glsl_type *sampler_type = ir->sampler->type;
+
    if (ir->projector) {
       if (opcode == OPCODE_TEX) {
 	 /* Slot the projector in as the last component of the coord. */
@@ -2187,6 +2189,10 @@ ir_to_mesa_visitor::visit(ir_texture *ir)
 	    tmp_src = get_temp(glsl_type::vec4_type);
 	    dst_reg tmp_dst = dst_reg(tmp_src);
 
+	    /* Projective division not allowed for shadow2DArray. */
+	    assert(sampler_type->sampler_dimensionality != GLSL_SAMPLER_DIM_2D ||
+	           !sampler_type->sampler_array);
+
 	    tmp_dst.writemask = WRITEMASK_Z;
 	    emit(ir, OPCODE_MOV, tmp_dst, this->result);
 
@@ -2211,7 +2217,12 @@ ir_to_mesa_visitor::visit(ir_texture *ir)
        * coord.
        */
       ir->shadow_comparitor->accept(this);
-      coord_dst.writemask = WRITEMASK_Z;
+      if (sampler_type->sampler_dimensionality == GLSL_SAMPLER_DIM_2D &&
+          sampler_type->sampler_array) {
+         coord_dst.writemask = WRITEMASK_W;
+      } else {
+         coord_dst.writemask = WRITEMASK_Z;
+      }
       emit(ir, OPCODE_MOV, coord_dst, this->result);
       coord_dst.writemask = WRITEMASK_XYZW;
    }
@@ -2235,8 +2246,6 @@ ir_to_mesa_visitor::visit(ir_texture *ir)
 						   this->shader_program,
 						   this->prog);
 
-   const glsl_type *sampler_type = ir->sampler->type;
-
    switch (sampler_type->sampler_dimensionality) {
    case GLSL_SAMPLER_DIM_1D:
       inst->tex_target = (sampler_type->sampler_array)
-- 
1.7.4.1



More information about the mesa-dev mailing list