nv50/ir/gk110: add 64/128-bit fetch/export support
authorIlia Mirkin <imirkin@alum.mit.edu>
Fri, 14 Mar 2014 10:20:36 +0000 (06:20 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Tue, 18 Mar 2014 09:56:55 +0000 (05:56 -0400)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp
src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp

index 7c60837eb6835a5d6578817489a185fa5b65cd08..d248a1a8c1b77a3d70444c99f7c9e2fad5c5448e 100644 (file)
@@ -1217,10 +1217,12 @@ CodeEmitterGK110::emitPFETCH(const Instruction *i)
 void
 CodeEmitterGK110::emitVFETCH(const Instruction *i)
 {
+   unsigned int size = typeSizeof(i->dType);
    uint32_t offset = i->src(0).get()->reg.data.offset;
 
    code[0] = 0x00000002 | (offset << 23);
    code[1] = 0x7ec00000 | (offset >> 9);
+   code[1] |= (size / 4 - 1) << 18;
 
 #if 0
    if (i->perPatch)
@@ -1239,10 +1241,12 @@ CodeEmitterGK110::emitVFETCH(const Instruction *i)
 void
 CodeEmitterGK110::emitEXPORT(const Instruction *i)
 {
+   unsigned int size = typeSizeof(i->dType);
    uint32_t offset = i->src(0).get()->reg.data.offset;
 
    code[0] = 0x00000002 | (offset << 23);
    code[1] = 0x7f000000 | (offset >> 9);
+   code[1] |= (size / 4 - 1) << 18;
 
 #if 0
    if (i->perPatch)
index 1f3932ed7592f404115afc87e17de82654f53d5a..10a5fe2e062288325caa9476236b443ea2651ec1 100644 (file)
@@ -361,13 +361,6 @@ TargetNVC0::isAccessSupported(DataFile file, DataType ty) const
       return typeSizeof(ty) <= 8;
    if (ty == TYPE_B96)
       return false;
-   if (getChipset() >= 0xf0) {
-      // XXX: find wide vfetch/export
-      if (ty == TYPE_B128)
-         return false;
-      if (ty == TYPE_U64)
-         return false;
-   }
    return true;
 }