Mesa (master): swr/rast: Added in-place building to SCATTERPS
Tim Rowley
torowley at kemper.freedesktop.org
Fri May 25 16:00:09 UTC 2018
Module: Mesa
Branch: master
Commit: cfe75cc7b5acbf0692baff07a516ff4efe7fa968
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cfe75cc7b5acbf0692baff07a516ff4efe7fa968
Author: Alok Hota <alok.hota at intel.com>
Date: Fri May 25 10:19:43 2018 -0500
swr/rast: Added in-place building to SCATTERPS
SCATTERPS previously assumed it was being used with an existing basic
block
Reviewed-by: Bruce Cherniak <bruce.cherniak at intel.com>
---
.../drivers/swr/rasterizer/jitter/builder_mem.cpp | 29 +++++++++++++++-------
1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp
index 6e17888f83..77c2095ea9 100644
--- a/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp
+++ b/src/gallium/drivers/swr/rasterizer/jitter/builder_mem.cpp
@@ -617,17 +617,28 @@ namespace SwrJit
Value* pIsUndef = ICMP_EQ(pIndex, C(32));
- // Split current block
- BasicBlock* pPostLoop = pCurBB->splitBasicBlock(cast<Instruction>(pIsUndef)->getNextNode());
+ // Split current block or create new one if building inline
+ BasicBlock* pPostLoop;
+ if (pCurBB->getTerminator())
+ {
+ pPostLoop = pCurBB->splitBasicBlock(cast<Instruction>(pIsUndef)->getNextNode());
- // Remove unconditional jump created by splitBasicBlock
- pCurBB->getTerminator()->eraseFromParent();
+ // Remove unconditional jump created by splitBasicBlock
+ pCurBB->getTerminator()->eraseFromParent();
- // Add terminator to end of original block
- IRB()->SetInsertPoint(pCurBB);
+ // Add terminator to end of original block
+ IRB()->SetInsertPoint(pCurBB);
- // Add conditional branch
- COND_BR(pIsUndef, pPostLoop, pLoop);
+ // Add conditional branch
+ COND_BR(pIsUndef, pPostLoop, pLoop);
+ }
+ else
+ {
+ pPostLoop = BasicBlock::Create(mpJitMgr->mContext, "PostScatter_Loop", pFunc);
+
+ // Add conditional branch
+ COND_BR(pIsUndef, pPostLoop, pLoop);
+ }
// Add loop basic block contents
IRB()->SetInsertPoint(pLoop);
@@ -642,7 +653,7 @@ namespace SwrJit
Value* pOffsetElem = LOADV(pOffsetsArrayPtr, { pIndexPhi });
// GEP to this offset in dst
- Value* pCurDst = GEP(pDst, pOffsetElem);
+ Value* pCurDst = GEP(pDst, pOffsetElem, mInt8PtrTy);
pCurDst = POINTER_CAST(pCurDst, PointerType::get(pSrcTy, 0));
STORE(pSrcElem, pCurDst);
More information about the mesa-commit
mailing list