Fix nested conditionals
authorZack Rusin <zack@tungstengraphics.com>
Thu, 25 Oct 2007 11:52:59 +0000 (07:52 -0400)
committerZack Rusin <zack@tungstengraphics.com>
Thu, 25 Oct 2007 13:04:41 +0000 (09:04 -0400)
progs/vpglsl/nestedifs.glsl [new file with mode: 0644]
progs/vpglsl/nestedswizzle.glsl [new file with mode: 0644]
progs/vpglsl/vp-tris.c
src/mesa/pipe/llvm/storage.cpp
src/mesa/pipe/llvm/storage.h

diff --git a/progs/vpglsl/nestedifs.glsl b/progs/vpglsl/nestedifs.glsl
new file mode 100644 (file)
index 0000000..abb235c
--- /dev/null
@@ -0,0 +1,13 @@
+
+void main() {
+   gl_Position = gl_Vertex;
+    if (gl_Position.x < 0.5) {
+       if (gl_Position.y < 0.20) {
+           gl_FrontColor = vec4(1.0, 0.0, 0.0, 1.0);
+       } else {
+           gl_FrontColor = vec4(0.0, 1.0, 0.0, 1.0);
+       }
+        gl_FrontColor.y = 1.0;
+    } else
+       gl_FrontColor = gl_Color;
+}
diff --git a/progs/vpglsl/nestedswizzle.glsl b/progs/vpglsl/nestedswizzle.glsl
new file mode 100644 (file)
index 0000000..a3adb3d
--- /dev/null
@@ -0,0 +1,9 @@
+
+void main() {
+   gl_Position = gl_Vertex;
+   gl_FrontColor = gl_Color;
+   if (gl_Position.x < 0.5) {
+      gl_FrontColor.y = 1.0;
+   }
+   gl_FrontColor.xzw = vec3(0, 0, 1);
+}
index 1d1b639b561a0f3219fde9c6ccda649b712f0f6a..3c2830773a3d6998c7ba633807691bfcd1257fc0 100644 (file)
@@ -54,7 +54,7 @@ static void read_shader(GLuint shader, const char *filename)
    }
 
    n = fread(buffer, 1, max, f);
-   printf("fslight: read %d bytes from shader file %s\n", n, filename);
+   printf("vp-tris: read %d bytes from shader file %s\n", n, filename);
    if (n > 0) {
       buffer[n] = 0;
       load_and_compile_shader(shader, buffer);
index 603053c0e8fed684ab88e7a6deb09fb4cd3744a8..1072917198974f225989ddd017e26e1d17e99dc9 100644 (file)
@@ -123,9 +123,6 @@ llvm::ConstantInt *Storage::constantInt(int idx)
 
 llvm::Value *Storage::inputElement(int idx, llvm::Value *indIdx)
 {
-   if (!indIdx && m_inputs.find(idx) != m_inputs.end()) {
-      return m_inputs[idx];
-   }
    GetElementPtrInst *getElem = 0;
 
    if (indIdx) {
@@ -147,7 +144,6 @@ llvm::Value *Storage::inputElement(int idx, llvm::Value *indIdx)
    LoadInst *load = new LoadInst(getElem, name("input"),
                                  false, m_block);
    load->setAlignment(8);
-   m_inputs[idx] = load;
 
    return load;
 }
@@ -155,9 +151,6 @@ llvm::Value *Storage::inputElement(int idx, llvm::Value *indIdx)
 llvm::Value *Storage::constElement(int idx, llvm::Value *indIdx)
 {
    m_numConsts = ((idx + 1) > m_numConsts) ? (idx + 1) : m_numConsts;
-   if (!indIdx && m_consts.find(idx) != m_consts.end()) {
-      return m_consts[idx];
-   }
 
    GetElementPtrInst *getElem = 0;
 
@@ -178,7 +171,6 @@ llvm::Value *Storage::constElement(int idx, llvm::Value *indIdx)
    LoadInst *load = new LoadInst(getElem, name("const"),
                                  false, m_block);
    load->setAlignment(8);
-   m_consts[idx] = load;
    return load;
 }
 
@@ -334,7 +326,6 @@ llvm::Value * Storage::outputElement(int idx, llvm::Value *indIdx )
    LoadInst *load = new LoadInst(getElem, name("output"),
                                  false, m_block);
    load->setAlignment(8);
-   m_inputs[idx] = load;
 
    return load;
 }
index dd5de35073c09a8243d11e2931943af878745c5a..a844d1c30f65312465253d4ef7bc1db2bb8ef4e0 100644 (file)
@@ -47,7 +47,6 @@ namespace llvm {
 
 class Storage
 {
-   typedef std::map<int, llvm::LoadInst*> LoadMap;
 public:
    Storage(llvm::BasicBlock *block,
            llvm::Value *out,
@@ -75,9 +74,11 @@ public:
    void store(int dstIdx, llvm::Value *val, int mask);
 
    int numConsts() const;
+
 private:
    llvm::Value *maskWrite(llvm::Value *src, int mask, llvm::Value *templ);
    const char *name(const char *prefix);
+
 private:
    llvm::BasicBlock *m_block;
    llvm::Value *m_OUT;
@@ -89,8 +90,6 @@ private:
    std::vector<llvm::Value*>         m_temps;
    std::vector<llvm::Value*>         m_addrs;
    std::vector<llvm::Value*>         m_dstCache;
-   LoadMap                           m_inputs;
-   LoadMap                           m_consts;
 
    llvm::VectorType *m_floatVecType;
    llvm::VectorType *m_intVecType;