Note my encoder used clamp addressing for both encoding and decoding but PVRTexTool used wrap (not that it matters with this image). Here's the .pvr file for testpat.
|BC1: 47.991 Y PSNR|
|PVRTexTool "Best Quality": 41.943 Y PSNR|
|Experimental encoder (bounding box, precomputed tables, 1x1 block LS): 44.914 Y PSNR:|
|BC1: 43.293 Y PSNR, .997308 Y SSIM|
|PVRTexTool "Best Quality": 40.440 Y PSNR, .996007 Y SSIM|
|Experimental encoder: 42.891 Y PSNR, .997021 Y SSIM|
|BC1: 37.757 Y PSNR, .984543 Y SSIM|
|BC1 (AMD Compressonator quality=1): 37.306 Y PSNR, .978997 Y SSIM|
|PVRTexTool "Best Quality": 36.762 Y PSNR, .976023 Y SSIM|
|Experimental encoder: 37.314 Y PSNR, .9812 Y SSIM|
"Y" is REC 709 Luma, SSIM was computed using OpenCV. The images marked "BC1" were compressed using crunch (uber quality, perceptual mode), which is a bit better than AMD Compressonator's output.