[Mesa-dev] [PATCH 2/3] gallium: rework some utilities functions to support 2d indexing

Vincent Lejeune vljn at ovi.com
Mon Nov 21 14:01:19 PST 2011


   This patch adds a 2d ureg_src constructor, and add a field in
   st_src_reg inside glsl_to_tgsi that hold potential 2d index.
   2d indexing is required at least for uniform buffer object
   support
---
 src/gallium/auxiliary/tgsi/tgsi_ureg.h     |   12 ++++++++++++
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp |    8 ++++++--
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.h b/src/gallium/auxiliary/tgsi/tgsi_ureg.h
index 8f5f22e..4e4fce6 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.h
@@ -998,6 +998,18 @@ ureg_src_register(unsigned file,
 }
 
 static INLINE struct ureg_src
+ureg_src_register2d(unsigned file,
+                  unsigned index, unsigned index2d)
+{
+   struct ureg_src src = ureg_src_register(file,index);
+
+   src.Dimension = 1;
+   src.DimensionIndex = index2d;
+
+   return src;
+}
+
+static INLINE struct ureg_src
 ureg_src( struct ureg_dst dst )
 {
    struct ureg_src src;
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 35fd1ff..235a074 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -94,7 +94,7 @@ static int swizzle_for_size(int size);
  */
 class st_src_reg {
 public:
-   st_src_reg(gl_register_file file, int index, const glsl_type *type)
+   st_src_reg(gl_register_file file, int index, const glsl_type *type, int index2d = 0)
    {
       this->file = file;
       this->index = index;
@@ -105,9 +105,10 @@ public:
       this->negate = 0;
       this->type = type ? type->base_type : GLSL_TYPE_ERROR;
       this->reladdr = NULL;
+      this->index2d = index2d;
    }
 
-   st_src_reg(gl_register_file file, int index, int type)
+   st_src_reg(gl_register_file file, int index, int type, int index2d = 0)
    {
       this->type = type;
       this->file = file;
@@ -115,6 +116,7 @@ public:
       this->swizzle = SWIZZLE_XYZW;
       this->negate = 0;
       this->reladdr = NULL;
+      this->index2d = index2d;
    }
 
    st_src_reg()
@@ -125,12 +127,14 @@ public:
       this->swizzle = 0;
       this->negate = 0;
       this->reladdr = NULL;
+      this->index2d = 0;
    }
 
    explicit st_src_reg(st_dst_reg reg);
 
    gl_register_file file; /**< PROGRAM_* from Mesa */
    int index; /**< temporary index, VERT_ATTRIB_*, FRAG_ATTRIB_*, etc. */
+   int index2d;
    GLuint swizzle; /**< SWIZZLE_XYZWONEZERO swizzles from Mesa. */
    int negate; /**< NEGATE_XYZW mask from mesa */
    int type; /** GLSL_TYPE_* from GLSL IR (enum glsl_base_type) */
-- 
1.7.7.3



More information about the mesa-dev mailing list