diff options
author | Ilia Mirkin <imirkin@alum.mit.edu> | 2016-05-29 12:42:49 -0400 |
---|---|---|
committer | Ilia Mirkin <imirkin@alum.mit.edu> | 2016-06-06 20:49:29 -0400 |
commit | 704bc0f0e98f3bbdef33cad12646d4e1bf01e8aa (patch) | |
tree | ecac8a3b25184756337e8409eeedcc8a160c1eb7 /src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp | |
parent | f64c36e2d7cdf14a43cde7963729a926e613dc4c (diff) |
nvc0: add support for VOTE tgsi opcodes
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Diffstat (limited to 'src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp')
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp index a43d7b1296a..ef02dbb4c63 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp @@ -2788,23 +2788,26 @@ CodeEmitterGM107::emitMEMBAR() void CodeEmitterGM107::emitVOTE() { - int subOp; + assert(insn->src(0).getFile() == FILE_PREDICATE); - assert(insn->src(0).getFile() == FILE_PREDICATE && - insn->def(1).getFile() == FILE_PREDICATE); - - switch (insn->subOp) { - case NV50_IR_SUBOP_VOTE_ANY: subOp = 1; break; - default: - assert(insn->subOp == NV50_IR_SUBOP_VOTE_ALL); - subOp = 0; - break; + int r = -1, p = -1; + for (int i = 0; insn->defExists(i); i++) { + if (insn->def(i).getFile() == FILE_GPR) + r = i; + else if (insn->def(i).getFile() == FILE_PREDICATE) + p = i; } emitInsn (0x50d80000); - emitField(0x30, 2, subOp); - emitGPR (0x00, insn->def(0)); - emitPRED (0x2d, insn->def(1)); + emitField(0x30, 2, insn->subOp); + if (r >= 0) + emitGPR (0x00, insn->def(r)); + else + emitGPR (0x00); + if (p >= 0) + emitPRED (0x2d, insn->def(p)); + else + emitPRED (0x2d); emitField(0x2a, 1, insn->src(0).mod == Modifier(NV50_IR_MOD_NOT)); emitPRED (0x27, insn->src(0)); } |