From 1d17cb721afaa53317614af90488a45c26e083e3 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Thu, 25 Oct 2007 09:03:53 -0400 Subject: Fix nested swizzles. Actually fetch the destination contents instead of input. --- src/mesa/pipe/llvm/storage.cpp | 10 ++++++---- src/mesa/pipe/llvm/storage.h | 3 +++ 2 files changed, 9 insertions(+), 4 deletions(-) (limited to 'src/mesa/pipe') diff --git a/src/mesa/pipe/llvm/storage.cpp b/src/mesa/pipe/llvm/storage.cpp index 1072917198..cba719a8be 100644 --- a/src/mesa/pipe/llvm/storage.cpp +++ b/src/mesa/pipe/llvm/storage.cpp @@ -212,7 +212,9 @@ void Storage::setTempElement(int idx, llvm::Value *val, int mask) void Storage::store(int dstIdx, llvm::Value *val, int mask) { if (mask != TGSI_WRITEMASK_XYZW) { - llvm::Value *templ = m_dstCache[dstIdx]; + llvm::Value *templ = 0; + if (m_destWriteMap[dstIdx]) + templ = outputElement(dstIdx); val = maskWrite(val, mask, templ); } @@ -222,7 +224,7 @@ void Storage::store(int dstIdx, llvm::Value *val, int mask) m_block); StoreInst *st = new StoreInst(val, getElem, false, m_block); st->setAlignment(8); - //m_dstCache[dstIdx] = st; + m_destWriteMap[dstIdx] = true; } llvm::Value *Storage::maskWrite(llvm::Value *src, int mask, llvm::Value *templ) @@ -308,7 +310,7 @@ llvm::Value * Storage::outputElement(int idx, llvm::Value *indIdx ) GetElementPtrInst *getElem = 0; if (indIdx) { - getElem = new GetElementPtrInst(m_IN, + getElem = new GetElementPtrInst(m_OUT, BinaryOperator::create(Instruction::Add, indIdx, constantInt(idx), @@ -317,7 +319,7 @@ llvm::Value * Storage::outputElement(int idx, llvm::Value *indIdx ) name("output_ptr"), m_block); } else { - getElem = new GetElementPtrInst(m_IN, + getElem = new GetElementPtrInst(m_OUT, constantInt(idx), name("output_ptr"), m_block); diff --git a/src/mesa/pipe/llvm/storage.h b/src/mesa/pipe/llvm/storage.h index a844d1c30f..ebdfcdefd6 100644 --- a/src/mesa/pipe/llvm/storage.h +++ b/src/mesa/pipe/llvm/storage.h @@ -34,6 +34,7 @@ #define STORAGE_H #include +#include #include namespace llvm { @@ -103,6 +104,8 @@ private: int m_idx; int m_numConsts; + + std::map m_destWriteMap; }; #endif -- cgit v1.2.3