         // }
 
     } else {
-        std::cerr << "ERROR: GPUImage::download(): shapes do not match" << std::endl;
+        std::cerr << "ERROR: GPUImage::download(): shapes do not match."
+            << "required: [" << __height << ", " << __width << ", " << __depth << "][" << __itemSize << "], passed: "
+            << "[" << img.height << ", " << img.width << ", " << img.depth << "][" << img.itemSize << "]" << std::endl;
         return; // TODO: throw exception
     }
 }

            __width*__depth*__itemSize, __height, cudaMemcpyDeviceToDevice));

    } else {
        std::cerr << "ERROR: GPUImage::copyFrom(): image shapes do not match" << std::endl;
        throw std::exception();
    }
}

        // TODO: add support for asynchronous copy

    } else {

        std::cerr << "ERROR: GPUImage::upload(): shapes do not match."
            << "required: [" << __height << ", " << __width << ", " << __depth << "][" << __itemSize << "], passed: "
            << "[" << img.height << ", " << img.width << ", " << img.depth << "][" << img.itemSize << "]" << std::endl;

        return; // TODO: throw exception
    }
}
