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_gk110.cpp | |
parent | f64c36e2d7cdf14a43cde7963729a926e613dc4c (diff) | |
download | external_mesa3d-704bc0f0e98f3bbdef33cad12646d4e1bf01e8aa.zip external_mesa3d-704bc0f0e98f3bbdef33cad12646d4e1bf01e8aa.tar.gz external_mesa3d-704bc0f0e98f3bbdef33cad12646d4e1bf01e8aa.tar.bz2 |
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_gk110.cpp')
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp index 80e0990..501d4af 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp @@ -1481,16 +1481,31 @@ CodeEmitterGK110::emitFlow(const Instruction *i) void CodeEmitterGK110::emitVOTE(const Instruction *i) { - assert(i->src(0).getFile() == FILE_PREDICATE && - i->def(1).getFile() == FILE_PREDICATE); + assert(i->src(0).getFile() == FILE_PREDICATE); code[0] = 0x00000002; code[1] = 0x86c00000 | (i->subOp << 19); emitPredicate(i); - defId(i->def(0), 2); - defId(i->def(1), 48); + unsigned rp = 0; + for (int d = 0; i->defExists(d); d++) { + if (i->def(d).getFile() == FILE_PREDICATE) { + assert(!(rp & 2)); + rp |= 2; + defId(i->def(d), 48); + } else if (i->def(d).getFile() == FILE_GPR) { + assert(!(rp & 1)); + rp |= 1; + defId(i->def(d), 2); + } else { + assert(!"Unhandled def"); + } + } + if (!(rp & 1)) + code[0] |= 255 << 2; + if (!(rp & 2)) + code[1] |= 7 << 16; if (i->src(0).mod == Modifier(NV50_IR_MOD_NOT)) code[1] |= 1 << 13; srcId(i->src(0), 42); |