draw llvm: fix translation of formats with variable components
authorZack Rusin <zackr@vmware.com>
Fri, 2 Apr 2010 19:56:34 +0000 (15:56 -0400)
committerZack Rusin <zackr@vmware.com>
Fri, 2 Apr 2010 19:56:34 +0000 (15:56 -0400)
src/gallium/auxiliary/draw/draw_llvm_translate.c

index bc17d3861aa3308f530783801a5e4192fa327c22..b29ebdec3a9bf332076056fa0b137e70f7bddc25 100644 (file)
@@ -428,6 +428,12 @@ fetch(LLVMBuilderRef builder,
    int offset = 0;
    LLVMValueRef res = LLVMConstNull(
       LLVMVectorType(LLVMFloatType(), 4));
+   LLVMValueRef defaults[4];
+
+   defaults[0] = LLVMConstReal(LLVMFloatType(), 0);
+   defaults[1] = LLVMConstReal(LLVMFloatType(), 0);
+   defaults[2] = LLVMConstReal(LLVMFloatType(), 0);
+   defaults[3] = LLVMConstReal(LLVMFloatType(), 1);
 
    for (i = 0; i < nr_components; ++i) {
       LLVMValueRef src_index = LLVMConstInt(LLVMInt32Type(), offset, 0);
@@ -447,6 +453,13 @@ fetch(LLVMBuilderRef builder,
                                    dst_index, "");
       offset += val_size;
    }
+   for (; i < 4; ++i) {
+      LLVMValueRef dst_index = LLVMConstInt(LLVMInt32Type(), i, 0);
+      res = LLVMBuildInsertElement(builder,
+                                   res,
+                                   defaults[i],
+                                   dst_index, "");
+   }
    return res;
 }