Module: Mesa Branch: master Commit: 7f257abc1bdd153b3981efffc3f201e1ea5fe843 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7f257abc1bdd153b3981efffc3f201e1ea5fe843
Author: Samuel Pitoiset <samuel.pitoi...@gmail.com> Date: Mon Jun 13 17:13:28 2016 +0200 nvc0/ir: clamp the UBO index for compute on Kepler We already check that the address is not "too far", but we should also clamp the UBO index in order to avoid looking at the wrong place in the driver cb. This is a pretty rare situation though. Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu> Cc: "12.0" <mesa-sta...@lists.freedesktop.org> --- src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp index cb82216..71013eb 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp @@ -2183,7 +2183,15 @@ NVC0LoweringPass::handleLDST(Instruction *i) int8_t fileIndex = i->getSrc(0)->reg.fileIndex - 1; Value *ind = i->getIndirect(0, 1); - // TODO: clamp the offset to the maximum number of const buf. + if (ind) { + // Clamp the UBO index when an indirect access is used to avoid + // loading information from the wrong place in the driver cb. + ind = bld.mkOp2v(OP_MIN, TYPE_U32, ind, + bld.mkOp2v(OP_ADD, TYPE_U32, bld.getSSA(), + ind, bld.loadImm(NULL, fileIndex)), + bld.loadImm(NULL, 12)); + } + if (i->src(0).isIndirect(1)) { Value *offset = bld.loadImm(NULL, i->getSrc(0)->reg.data.offset + typeSizeof(i->sType)); Value *ptr = loadUboInfo64(ind, fileIndex * 16); _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit