summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2010-04-02 15:56:34 -0400
committerZack Rusin <[email protected]>2010-04-02 15:56:34 -0400
commit557b75248a3ebc6daabe3c2b69ac24d409aaa1e0 (patch)
tree0ac15b07718374521a1d85cfe41eed475aa96880 /src/gallium
parentab5c09738760bc1b665b9809eaf921f4ac27057e (diff)
draw llvm: fix translation of formats with variable components
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/auxiliary/draw/draw_llvm_translate.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/draw/draw_llvm_translate.c b/src/gallium/auxiliary/draw/draw_llvm_translate.c
index bc17d3861aa..b29ebdec3a9 100644
--- a/src/gallium/auxiliary/draw/draw_llvm_translate.c
+++ b/src/gallium/auxiliary/draw/draw_llvm_translate.c
@@ -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;
}