diff options
author | Ilia Mirkin <[email protected]> | 2014-07-06 02:06:04 -0400 |
---|---|---|
committer | Ilia Mirkin <[email protected]> | 2014-07-24 08:26:42 -0400 |
commit | 0ddc28b026688df79e54d3af1d7914ff04b12fed (patch) | |
tree | aaac5a3fc5a799000d2624a45615be5a1d5fb969 /src | |
parent | 4eef537960dff2fbdafe7946143c1a99d7ba7036 (diff) |
nvc0/ir: support 2d constbuf indexing
Signed-off-by: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
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 cc4808c0010..f010767e18a 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp @@ -1610,6 +1610,20 @@ NVC0LoweringPass::visit(Instruction *i) i->op = OP_VFETCH; assert(prog->getType() != Program::TYPE_FRAGMENT); // INTERP } + } else if (i->src(0).getFile() == FILE_MEMORY_CONST) { + if (i->src(0).isIndirect(1)) { + Value *ptr; + if (i->src(0).isIndirect(0)) + ptr = bld.mkOp3v(OP_INSBF, TYPE_U32, bld.getSSA(), + i->getIndirect(0, 1), bld.mkImm(0x1010), + i->getIndirect(0, 0)); + else + ptr = bld.mkOp2v(OP_SHL, TYPE_U32, bld.getSSA(), + i->getIndirect(0, 1), bld.mkImm(16)); + i->setIndirect(0, 1, NULL); + i->setIndirect(0, 0, ptr); + i->subOp = NV50_IR_SUBOP_LDC_IS; + } } break; case OP_ATOM: |