On Sun, Feb 21, 2016 at 9:28 AM, Samuel Pitoiset <[email protected]> wrote: > Signed-off-by: Samuel Pitoiset <[email protected]> > --- > .../drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp | 35 > +++++++++++++++------- > 1 file changed, 25 insertions(+), 10 deletions(-) > > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp > b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp > index 7042246..8e6dfad 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp > @@ -1781,11 +1781,14 @@ CodeEmitterNVC0::emitSTORE(const Instruction *i) > case FILE_MEMORY_GLOBAL: opc = 0x90000000; break; > case FILE_MEMORY_LOCAL: opc = 0xc8000000; break; > case FILE_MEMORY_SHARED: > - opc = 0xc8000000; > - if (i->subOp == NV50_IR_SUBOP_STORE_UNLOCKED) > - opc |= (1 << 26); > - else > - opc |= (1 << 24); > + if (i->subOp == NV50_IR_SUBOP_STORE_UNLOCKED) { > + if (targ->getChipset() >= NVISA_GK104_CHIPSET) > + opc = 0xb8000000; > + else > + opc = 0xcc000000; > + } else { > + opc = 0xc9000000; > + } > break; > default: > assert(!"invalid memory file"); > @@ -1795,6 +1798,15 @@ CodeEmitterNVC0::emitSTORE(const Instruction *i) > code[0] = 0x00000005; > code[1] = opc; > > + if (targ->getChipset() >= NVISA_GK104_CHIPSET) { > + // Unlocked store on shared memory can fail. > + if (i->src(0).getFile() == FILE_MEMORY_SHARED && > + i->subOp == NV50_IR_SUBOP_STORE_UNLOCKED) { > + assert(i->defExists(0)); > + defId(i->def(0), 8); > + } > + } > + > setAddressByFile(i->src(0)); > srcId(i->src(1), 14); > srcId(i->src(0).getIndirect(0), 20); > @@ -1818,11 +1830,14 @@ CodeEmitterNVC0::emitLOAD(const Instruction *i) > case FILE_MEMORY_GLOBAL: opc = 0x80000000; break; > case FILE_MEMORY_LOCAL: opc = 0xc0000000; break; > case FILE_MEMORY_SHARED: > - opc = 0xc0000000; > - if (i->subOp == NV50_IR_SUBOP_LOAD_LOCKED) > - opc |= (1 << 26); > - else > - opc |= (1 << 24); > + if (i->subOp == NV50_IR_SUBOP_LOAD_LOCKED) { > + if (targ->getChipset() >= NVISA_GK104_CHIPSET) > + opc = 0xa8000000; > + else > + opc = 0xc4000000; > + } else { > + opc = 0xc1000000; > + } > break; > case FILE_MEMORY_CONST: > if (!i->src(0).isIndirect(0) && typeSizeof(i->dType) == 4) {
I think this is a problem with your earlier patches, not this one, but I would have expected load locked to emit its pdst somewhere as well. It doesn't seem to do that. Good thing it's usually $p0 :) With that fixed [with a separate patch, probably Cc'd to 11.2 stable], this is Reviewed-by: Ilia Mirkin <[email protected]> -ilia _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
