From: Zack Rusin Date: Thu, 25 Oct 2007 13:03:53 +0000 (-0400) Subject: Fix nested swizzles. Actually fetch the destination contents X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1d17cb721afaa53317614af90488a45c26e083e3;p=mesa.git Fix nested swizzles. Actually fetch the destination contents instead of input. --- diff --git a/src/mesa/pipe/llvm/storage.cpp b/src/mesa/pipe/llvm/storage.cpp index 10729171989..cba719a8bec 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 a844d1c30f6..ebdfcdefd60 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