summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/llvm/llvmtgsi.cpp
diff options
context:
space:
mode:
authorZack Rusin <zack@tungstengraphics.com>2007-10-29 10:59:24 -0400
committerZack Rusin <zack@tungstengraphics.com>2007-10-30 05:15:05 -0400
commitb0f3b5910ebd0737600ab7b1fdc135d74f2617f4 (patch)
tree2e4ebcc7f6d13ea151aac92cd3f19741a0bf0845 /src/mesa/pipe/llvm/llvmtgsi.cpp
parent8b2f997af572dd3aca00c4888adf2b0a60656331 (diff)
Enable immediates in TGSI and work with them in LLVM code.
Enables immediates by default in the TGSI translation code and adds code handling it in llvm tgsi translation.
Diffstat (limited to 'src/mesa/pipe/llvm/llvmtgsi.cpp')
-rw-r--r--src/mesa/pipe/llvm/llvmtgsi.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/mesa/pipe/llvm/llvmtgsi.cpp b/src/mesa/pipe/llvm/llvmtgsi.cpp
index 4611ac1766..ec38c695b9 100644
--- a/src/mesa/pipe/llvm/llvmtgsi.cpp
+++ b/src/mesa/pipe/llvm/llvmtgsi.cpp
@@ -164,9 +164,23 @@ translate_declaration(llvm::Module *module,
static void
-translate_immediate(llvm::Module *module,
+translate_immediate(Storage *storage,
struct tgsi_full_immediate *imm)
{
+ float vec[4];
+ int i;
+ for (i = 0; i < imm->Immediate.Size - 1; ++i) {
+ switch( imm->Immediate.DataType ) {
+ case TGSI_IMM_FLOAT32:
+ vec[i] = imm->u.ImmediateFloat32[i].Float;
+ break;
+ default:
+ assert( 0 );
+ }
+ }
+ printf("-------------- VEC = %f %f %f %f\n",
+ vec[0], vec[1], vec[2], vec[3]);
+ storage->addImmediate(vec);
}
static void
@@ -200,6 +214,8 @@ translate_instruction(llvm::Module *module,
val = storage->tempElement(src->SrcRegister.Index);
} else if (src->SrcRegister.File == TGSI_FILE_OUTPUT) {
val = storage->outputElement(src->SrcRegister.Index, indIdx);
+ } else if (src->SrcRegister.File == TGSI_FILE_IMMEDIATE) {
+ val = storage->immediateElement(src->SrcRegister.Index);
} else {
fprintf(stderr, "ERROR: not supported llvm source %d\n", src->SrcRegister.File);
return;
@@ -679,7 +695,7 @@ tgsi_to_llvm(struct gallivm_prog *prog, const struct tgsi_token *tokens)
break;
case TGSI_TOKEN_TYPE_IMMEDIATE:
- translate_immediate(mod,
+ translate_immediate(&storage,
&parse.FullToken.FullImmediate);
break;