Fix nested swizzles. Actually fetch the destination contents

instead of input.
This commit is contained in:
Zack Rusin 2007-10-25 09:03:53 -04:00
parent 1d26e9c447
commit 1d17cb721a
2 changed files with 9 additions and 4 deletions

View file

@ -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);

View file

@ -34,6 +34,7 @@
#define STORAGE_H
#include <map>
#include <set>
#include <vector>
namespace llvm {
@ -103,6 +104,8 @@ private:
int m_idx;
int m_numConsts;
std::map<int, bool > m_destWriteMap;
};
#endif