From 6149c0af3a1df94344f78fadb2a1dee77ff42fbd Mon Sep 17 00:00:00 2001 From: Pavel Krajcevski Date: Wed, 4 Sep 2013 20:21:56 -0400 Subject: [PATCH] Add PVR tests If cmake was able to find Imagination's PVR library, then it'd be nice to make sure that our decompressor matches theirs. We incur a bit of overhead by adding .pvr files into git, but hopefully this cost will be beneficial to actually figuring out how things are working... --- PVRTCEncoder/test/CMakeLists.txt | 30 ++++++++ PVRTCEncoder/test/DecompTestPVR.cpp | 106 ++++++++++++++++++++++++++++ PVRTCEncoder/test/data/gradient.pvr | Bin 0 -> 579 bytes PVRTCEncoder/test/data/gray.pvr | Bin 0 -> 2115 bytes PVRTCEncoder/test/data/white.pvr | Bin 0 -> 579 bytes 5 files changed, 136 insertions(+) create mode 100644 PVRTCEncoder/test/DecompTestPVR.cpp create mode 100644 PVRTCEncoder/test/data/gradient.pvr create mode 100644 PVRTCEncoder/test/data/gray.pvr create mode 100644 PVRTCEncoder/test/data/white.pvr diff --git a/PVRTCEncoder/test/CMakeLists.txt b/PVRTCEncoder/test/CMakeLists.txt index c5c4cf0..079b186 100644 --- a/PVRTCEncoder/test/CMakeLists.txt +++ b/PVRTCEncoder/test/CMakeLists.txt @@ -69,3 +69,33 @@ FOREACH(TEST ${TESTS}) ADD_TEST(${TEST_NAME} ${TEST_NAME}) ENDFOREACH() +# Test the decompressor against the included PVR Texture library.... +IF(PVRTEXLIB_FOUND) + + SET(TEST_NAME TestDecompVersusPVRLib) + + # Copy the .pvr files that we will use for testing... + SET(TEST_IMAGES + gradient white gray + ) + FOREACH(IMAGE ${TEST_IMAGES}) + FILE(COPY + ${FasTC_SOURCE_DIR}/PVRTCEncoder/test/data/${IMAGE}.pvr + DESTINATION ${CMAKE_BINARY_DIR} + USE_SOURCE_PERMISSIONS + ) + ENDFOREACH() + + # Make sure to include the PVR library headers... + INCLUDE_DIRECTORIES( ${PVRTEXLIB_INCLUDE_DIRS} ) + + # The cpp file to compile for the test + ADD_EXECUTABLE(${TEST_NAME} DecompTestPVR.cpp) + + # Libraries that we need... + TARGET_LINK_LIBRARIES(${TEST_NAME} PVRTCEncoder) + TARGET_LINK_LIBRARIES(${TEST_NAME} gtest_main) + TARGET_LINK_LIBRARIES(${TEST_NAME} ${PVRTEXLIB_LIBRARIES} ) + + ADD_TEST(${TEST_NAME} ${TEST_NAME}) +ENDIF(PVRTEXLIB_FOUND) diff --git a/PVRTCEncoder/test/DecompTestPVR.cpp b/PVRTCEncoder/test/DecompTestPVR.cpp new file mode 100644 index 0000000..0e0c21d --- /dev/null +++ b/PVRTCEncoder/test/DecompTestPVR.cpp @@ -0,0 +1,106 @@ +/* FasTC + * Copyright (c) 2013 University of North Carolina at Chapel Hill. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for educational, research, and non-profit purposes, without + * fee, and without a written agreement is hereby granted, provided that the + * above copyright notice, this paragraph, and the following four paragraphs + * appear in all copies. + * + * Permission to incorporate this software into commercial products may be + * obtained by contacting the authors or the Office of Technology Development + * at the University of North Carolina at Chapel Hill . + * + * This software program and documentation are copyrighted by the University of + * North Carolina at Chapel Hill. The software program and documentation are + * supplied "as is," without any accompanying services from the University of + * North Carolina at Chapel Hill or the authors. The University of North + * Carolina at Chapel Hill and the authors do not warrant that the operation of + * the program will be uninterrupted or error-free. The end-user understands + * that the program was developed for research purposes and is advised not to + * rely exclusively on the program for any reason. + * + * IN NO EVENT SHALL THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL OR THE + * AUTHORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF + * THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF NORTH CAROLINA + * AT CHAPEL HILL OR THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL AND THE AUTHORS SPECIFICALLY + * DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND ANY + * STATUTORY WARRANTY OF NON-INFRINGEMENT. THE SOFTWARE PROVIDED HEREUNDER IS ON + * AN "AS IS" BASIS, AND THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL AND + * THE AUTHORS HAVE NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS. + * + * Please send all BUG REPORTS to . + * + * The authors may be contacted via: + * + * Pavel Krajcevski + * Dept of Computer Science + * 201 S Columbia St + * Frederick P. Brooks, Jr. Computer Science Bldg + * Chapel Hill, NC 27599-3175 + * USA + * + * + */ + +#include "gtest/gtest.h" + +// This is the PVR library header +#include "PVRTextureUtilities.h" + +// This is our library header +#include "PVRTCCompressor.h" + +#include "TestUtils.h" + +class ImageTester { +public: + ImageTester(const char *filename) { + pvrtexture::CPVRTexture pvrTex(filename); + + const uint8 *data = static_cast(pvrTex.getDataPtr()); + ASSERT_TRUE(data); + + const pvrtexture::CPVRTextureHeader &hdr = pvrTex.getHeader(); + const uint32 w = hdr.getWidth(); + const uint32 h = hdr.getHeight(); + + uint32 *outPixels = new uint32[w * h]; + + DecompressionJob dcj(data, reinterpret_cast(outPixels), w, h); + PVRTCC::Decompress(dcj, PVRTCC::eWrapMode_Wrap); + + bool result = pvrtexture::Transcode(pvrTex, + pvrtexture::PVRStandard8PixelType, + ePVRTVarTypeUnsignedByte, + ePVRTCSpacelRGB); + EXPECT_TRUE(result); + + uint32 *libPixels = static_cast(pvrTex.getDataPtr()); + + for(int i = 0; i < w*h; i++) { + EXPECT_EQ(PixelPrinter(libPixels[i]), PixelPrinter(outPixels[i])); + } + + delete outPixels; + } +}; + +TEST(Decompressor, DecompressGradient) { + ImageTester("gradient.pvr"); +} + +TEST(Decompressor, DecompressWhite) { + ImageTester("white.pvr"); +} + +TEST(Decompressor, DecompressGray) { + ImageTester("gray.pvr"); +} diff --git a/PVRTCEncoder/test/data/gradient.pvr b/PVRTCEncoder/test/data/gradient.pvr new file mode 100644 index 0000000000000000000000000000000000000000..ffbc204f533f70021d4ebd92d5b5882148fc7111 GIT binary patch literal 579 zcmZ8eF=*RB6t!t7H6*QC5-6dx9nPiTKwQvZ0zm|_#9$LTxOhp2bZMc*Llf+&kS>|z zP?EI?o|460+^G=7Xi$S_1vwLu8cW|6mT<5f*=P{8iF&7G>O1b<-FxpJ|G1URt6L$0 zV4<5EJR?kJ_`i9doL5K<&EM2)7w3G?LGcMPF5oM|PyyBVD^CFfruzJt`c4Q0kScyf z02!1w{@;D#%hcaGrFs7X6q?udQUlZ?!KMoM5+5CsoU%I?drs=)J%T%p8s1B%d8C#U z(n$!U$K!y-@2&&;01_D#B8Y)5JaPm6fi8)qZqg*Wm28`TEW@y7+Xq^rP$fg{MF^<_@HdxjZ8+ELC*HW z(+_6GTPE%A)CFboUgXKpc{y19V3#+%p+og`kG`vS#SC71*f4Of^-eP^Y?M1O4Y3I} zZWp_30#XVdd>&Puhc?5I`<+>L-nizf)9K74~^2J;V_yGM)SdFIWSrd LjFtl>L-nizf`9-2{~x7CW;g%<1r4hr literal 0 HcmV?d00001