Mesa (master): i965: Set the variable type when dereferencing an array.

Eric Anholt anholt at kemper.freedesktop.org
Tue Sep 28 16:38:04 UTC 2010


Module: Mesa
Branch: master
Commit: 07fc8eed8f0398063d87acf3a7ee392da4184822
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=07fc8eed8f0398063d87acf3a7ee392da4184822

Author: Eric Anholt <eric at anholt.net>
Date:   Mon Sep 27 22:19:51 2010 -0700

i965: Set the variable type when dereferencing an array.

We don't set the type on the array virtual reg as a whole, so here's
the right place.

Fixes:
glsl1-GLSL 1.20 arrays
glsl1-temp array with constant indexing, fragment shader
glsl1-temp array with swizzled variable indexing

---

 src/mesa/drivers/dri/i965/brw_fs.cpp |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 78c1bc6..3b56340 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -613,6 +613,21 @@ fs_visitor::visit(ir_dereference_array *ir)
       element_size = ir->type->vector_elements;
    } else {
       element_size = type_size(ir->type);
+      switch (ir->type->base_type) {
+      case GLSL_TYPE_UINT:
+	 this->result.type = BRW_REGISTER_TYPE_UD;
+	 break;
+      case GLSL_TYPE_INT:
+      case GLSL_TYPE_BOOL:
+	 this->result.type = BRW_REGISTER_TYPE_D;
+	 break;
+      case GLSL_TYPE_FLOAT:
+	 this->result.type = BRW_REGISTER_TYPE_F;
+	 break;
+      default:
+	 /* deref producing struct, no need to tweak type yet. */
+	 break;
+      }
    }
 
    if (index) {




More information about the mesa-commit mailing list