From 9fac26e6a643139f3e83ba3f7af4f94a2b1fcb8d Mon Sep 17 00:00:00 2001 From: Qing Tao <55564570+VickyAtAZ@users.noreply.github.com> Date: Fri, 27 Aug 2021 10:09:58 -0700 Subject: [PATCH] Update o3de to use new packages of ISPCTexComp and squish-ccr (#3556) Update package name and hash Add compressor names. Update ImageProcessingAtom unit tests. Removed some unused test assets under ImageProcessingAtom Enalbe ISPC to all the platforms. Better error message with compression/decompression Add temp folder to git ignore added ispccompressor for all platform. valid it with linux Update windows package hashes. Removed AZ_TRAIT_IMAGEPROCESSING_USE_ISPC_TEXTURE_COMPRESSOR Minor refactor with image processing unit tests. Signed-off-by: qingtao --- .../AzCore/std/function/function_base.h | 1 + .../ImageProcessingAtom/Code/CMakeLists.txt | 1 + .../Atom/ImageProcessing/ImageObject.h | 1 - .../Code/Source/Compressors/CTSquisher.cpp | 5 + .../Code/Source/Compressors/CTSquisher.h | 1 + .../Code/Source/Compressors/Compressor.cpp | 10 +- .../Code/Source/Compressors/Compressor.h | 1 + .../Code/Source/Compressors/ETC2.cpp | 5 + .../Code/Source/Compressors/ETC2.h | 3 +- .../Compressors/ISPCTextureCompressor.cpp | 5 + .../Compressors/ISPCTextureCompressor.h | 4 +- .../Code/Source/Compressors/PVRTC.cpp | 5 + .../Code/Source/Compressors/PVRTC.h | 1 + .../Source/Converters/ConvertPixelFormat.cpp | 22 +- .../Code/Source/ImageBuilderComponent.cpp | 2 +- .../Code/Source/ImageLoader/QtImageLoader.cpp | 1 + .../Android/ImageProcessing_Traits_Android.h | 1 - .../Linux/ImageProcessing_Traits_Linux.h | 1 - .../Platform/Mac/ImageProcessing_Traits_Mac.h | 1 - .../Windows/ImageProcessing_Traits_Windows.h | 1 - .../Platform/Windows/platform_windows.cmake | 8 - .../Windows/platform_windows_files.cmake | 2 - .../Platform/iOS/ImageProcessing_Traits_iOS.h | 1 - .../Code/Source/Processing/ImageConvert.cpp | 2 +- .../Code/Source/Processing/ImageConvert.h | 2 +- .../Code/Source/Processing/ImageObjectImpl.h | 4 - .../Code/Tests/ImageProcessing_Test.cpp | 255 ++++++++---------- .../Code/Tests/TestAssets/.gitignore | 1 + .../Code/Tests/TestAssets/BlackWhite.png | 3 - .../Code/Tests/TestAssets/LatLong_cm.png | 3 - .../TestAssets/Lenstexture_dirtyglass.tif | 3 - .../abandoned_sanatorium_staircase_cm.exr | 3 - .../Code/Tests/TestAssets/red.png | 3 - .../road_in_tenerife_mountain_cm.exr | 3 - .../Code/Tests/TestAssets/sunset_cm.exr | 3 - .../temp/128x128_RGBA8.tga.streamingimage | Bin 28861 -> 0 bytes .../Tests/TestAssets/workshop_iblskyboxcm.exr | 3 + .../Code/imageprocessing_files.cmake | 2 + .../Linux/BuiltInPackages_linux.cmake | 3 +- .../Platform/Linux/squish-ccr_linux.cmake | 9 - .../Platform/Mac/BuiltInPackages_mac.cmake | 4 +- .../Platform/Mac/squish-ccr_mac.cmake | 9 - .../Windows/BuiltInPackages_windows.cmake | 3 +- .../Platform/Windows/squish-ccr_windows.cmake | 9 - 44 files changed, 173 insertions(+), 237 deletions(-) create mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/.gitignore delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/BlackWhite.png delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/LatLong_cm.png delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/Lenstexture_dirtyglass.tif delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/abandoned_sanatorium_staircase_cm.exr delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/red.png delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/road_in_tenerife_mountain_cm.exr delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/sunset_cm.exr delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/temp/128x128_RGBA8.tga.streamingimage create mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/workshop_iblskyboxcm.exr delete mode 100644 cmake/3rdParty/Platform/Linux/squish-ccr_linux.cmake delete mode 100644 cmake/3rdParty/Platform/Mac/squish-ccr_mac.cmake delete mode 100644 cmake/3rdParty/Platform/Windows/squish-ccr_windows.cmake diff --git a/Code/Framework/AzCore/AzCore/std/function/function_base.h b/Code/Framework/AzCore/AzCore/std/function/function_base.h index 32892a4c03..b39a5cf81b 100644 --- a/Code/Framework/AzCore/AzCore/std/function/function_base.h +++ b/Code/Framework/AzCore/AzCore/std/function/function_base.h @@ -10,6 +10,7 @@ #ifndef AZSTD_FUNCTION_BASE_HEADER #define AZSTD_FUNCTION_BASE_HEADER +#include #include #include #include diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/CMakeLists.txt b/Gems/Atom/Asset/ImageProcessingAtom/Code/CMakeLists.txt index 233ead9dea..6227d74d7e 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/CMakeLists.txt +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/CMakeLists.txt @@ -66,6 +66,7 @@ ly_add_target( 3rdParty::PVRTexTool 3rdParty::squish-ccr 3rdParty::tiff + 3rdParty::ISPCTexComp 3rdParty::ilmbase Legacy::CryCommon AZ::AzFramework diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Include/Atom/ImageProcessing/ImageObject.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Include/Atom/ImageProcessing/ImageObject.h index 561dee5880..5796a0c84d 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Include/Atom/ImageProcessing/ImageObject.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Include/Atom/ImageProcessing/ImageObject.h @@ -70,7 +70,6 @@ namespace ImageProcessingAtom virtual AZ::u32 GetPixelCount(AZ::u32 mip) const = 0; virtual AZ::u32 GetWidth(AZ::u32 mip) const = 0; virtual AZ::u32 GetHeight(AZ::u32 mip) const = 0; - virtual bool IsCubemap() const = 0; virtual AZ::u32 GetMipCount() const = 0; //get pixel data buffer diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/CTSquisher.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/CTSquisher.cpp index bfe5e283b5..709bce4c54 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/CTSquisher.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/CTSquisher.cpp @@ -141,6 +141,11 @@ namespace ImageProcessingAtom ColorSpace CTSquisher::GetSupportedColorSpace([[maybe_unused]] EPixelFormat compressFormat) const { return ColorSpace::autoSelect; + } + + const char* CTSquisher::GetName() const + { + return "CTSquisher"; } EPixelFormat CTSquisher::GetSuggestedUncompressedFormat(EPixelFormat compressedfmt, EPixelFormat uncompressedfmt) const diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/CTSquisher.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/CTSquisher.h index 77865a596e..1e4aaf3f31 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/CTSquisher.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/CTSquisher.h @@ -27,6 +27,7 @@ namespace ImageProcessingAtom EPixelFormat GetSuggestedUncompressedFormat(EPixelFormat compressedfmt, EPixelFormat uncompressedfmt) const override; ColorSpace GetSupportedColorSpace(EPixelFormat compressFormat) const final; + const char* GetName() const final; private: static CryTextureSquisher::ECodingPreset GetCompressPreset(EPixelFormat compressFmt, EPixelFormat uncompressFmt); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/Compressor.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/Compressor.cpp index 99205edb01..2cd7ff0e9b 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/Compressor.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/Compressor.cpp @@ -10,22 +10,15 @@ #include #include #include - -// this is required for the AZ_TRAIT_IMAGEPROCESSING_USE_ISPC_TEXTURE_COMPRESSOR define -#include - -#if AZ_TRAIT_IMAGEPROCESSING_USE_ISPC_TEXTURE_COMPRESSOR #include -#endif namespace ImageProcessingAtom { - ICompressorPtr ICompressor::FindCompressor(EPixelFormat fmt, ColorSpace colorSpace, bool isCompressing) + ICompressorPtr ICompressor::FindCompressor(EPixelFormat fmt, [[maybe_unused]] ColorSpace colorSpace, bool isCompressing) { // The ISPC texture compressor is able to compress BC1, BC3, BC6H and BC7 formats, and all of the ASTC formats. // Note: The ISPC texture compressor is only able to compress images that are a multiple of the compressed format's blocksize. // Another limitation is that the compressor requires LDR source images to be in sRGB colorspace. -#if AZ_TRAIT_IMAGEPROCESSING_USE_ISPC_TEXTURE_COMPRESSOR if (ISPCCompressor::IsCompressedPixelFormatSupported(fmt)) { if ((isCompressing && ISPCCompressor::IsSourceColorSpaceSupported(colorSpace, fmt)) || (!isCompressing && ISPCCompressor::DoesSupportDecompress(fmt))) @@ -33,7 +26,6 @@ namespace ImageProcessingAtom return ICompressorPtr(new ISPCCompressor()); } } -#endif if (CTSquisher::IsCompressedPixelFormatSupported(fmt)) { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/Compressor.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/Compressor.h index 4eb04590a5..dff71e59db 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/Compressor.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/Compressor.h @@ -48,6 +48,7 @@ namespace ImageProcessingAtom virtual IImageObjectPtr DecompressImage(IImageObjectPtr srcImage, EPixelFormat fmtDst) const = 0; virtual EPixelFormat GetSuggestedUncompressedFormat(EPixelFormat compressedfmt, EPixelFormat uncompressedfmt) const = 0; virtual ColorSpace GetSupportedColorSpace(EPixelFormat compressFormat) const = 0; + virtual const char* GetName() const = 0; //find compressor for specified compressed pixel format. isCompressing to indicate if it's for compressing or decompressing static ICompressorPtr FindCompressor(EPixelFormat fmt, ColorSpace colorSpace, bool isCompressing); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.cpp index 0c3d6dca3d..73108d5502 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.cpp @@ -111,6 +111,11 @@ namespace ImageProcessingAtom { return ColorSpace::autoSelect; } + + const char* ETC2Compressor::GetName() const + { + return "ETC2Compressor"; + } IImageObjectPtr ETC2Compressor::CompressImage(IImageObjectPtr srcImage, EPixelFormat fmtDst, const CompressOption* compressOption) const diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.h index 7e5354a185..9ab5a164a5 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.h @@ -24,7 +24,8 @@ namespace ImageProcessingAtom IImageObjectPtr DecompressImage(IImageObjectPtr srcImage, EPixelFormat fmtDst) const override; EPixelFormat GetSuggestedUncompressedFormat(EPixelFormat compressedfmt, EPixelFormat uncompressedfmt) const override; - virtual ColorSpace GetSupportedColorSpace(EPixelFormat compressFormat) const final; + ColorSpace GetSupportedColorSpace(EPixelFormat compressFormat) const final; + const char* GetName() const final; }; } // namespace ImageProcessingAtom diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ISPCTextureCompressor.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ISPCTextureCompressor.cpp index be6eb9511d..5e96c7274d 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ISPCTextureCompressor.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ISPCTextureCompressor.cpp @@ -111,6 +111,11 @@ namespace ImageProcessingAtom return ColorSpace::autoSelect; } + const char* ISPCCompressor::GetName() const + { + return "ISPCCompressor"; + } + IImageObjectPtr ISPCCompressor::CompressImage(IImageObjectPtr sourceImage, EPixelFormat destinationFormat, const CompressOption* compressOption) const { // Used to find the profile setters, depending on the image quality diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ISPCTextureCompressor.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ISPCTextureCompressor.h index 8652b60b68..2ab0dfc833 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ISPCTextureCompressor.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ISPCTextureCompressor.h @@ -28,7 +28,9 @@ namespace ImageProcessingAtom ColorSpace GetSupportedColorSpace(EPixelFormat compressFormat) const final; IImageObjectPtr CompressImage(IImageObjectPtr sourceImage, EPixelFormat destinationFormat, const CompressOption* compressOption) const final; - IImageObjectPtr DecompressImage(IImageObjectPtr sourceImage, EPixelFormat destinationFormat) const final; + IImageObjectPtr DecompressImage(IImageObjectPtr sourceImage, EPixelFormat destinationFormat) const final; + const char* GetName() const final; + EPixelFormat GetSuggestedUncompressedFormat(EPixelFormat compressedfmt, EPixelFormat uncompressedfmt) const final; }; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.cpp index 7e11a83cae..0002ff4678 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.cpp @@ -107,6 +107,11 @@ namespace ImageProcessingAtom return ColorSpace::autoSelect; } + const char* PVRTCCompressor::GetName() const + { + return "PVRTCCompressor"; + } + bool PVRTCCompressor::DoesSupportDecompress([[maybe_unused]] EPixelFormat fmtDst) { return true; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.h index 86e31286b6..cedd6d6643 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.h @@ -25,5 +25,6 @@ namespace ImageProcessingAtom EPixelFormat GetSuggestedUncompressedFormat(EPixelFormat compressedfmt, EPixelFormat uncompressedfmt) const override; ColorSpace GetSupportedColorSpace(EPixelFormat compressFormat) const final; + const char* GetName() const final; }; } // namespace ImageProcessingAtom diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Converters/ConvertPixelFormat.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Converters/ConvertPixelFormat.cpp index 004f17c33d..8f851b46d1 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Converters/ConvertPixelFormat.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Converters/ConvertPixelFormat.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include @@ -97,9 +98,18 @@ namespace ImageProcessingAtom else { IImageObjectPtr dstImage = nullptr; + const PixelFormatInfo* compressedInfo = CPixelFormats::GetInstance().GetPixelFormatInfo(compressedFmt); if (isSrcUncompressed) { + AZ::u64 startTime = AZStd::GetTimeUTCMilliSecond(); dstImage = compressor->CompressImage(Get(), fmtDst, &m_compressOption); + AZ::u64 endTime = AZStd::GetTimeUTCMilliSecond(); + [[maybe_unused]] double processTime = static_cast(endTime - startTime) / 1000.0; + if (dstImage) + { + AZ_TracePrintf("Image Processing", "Image [%dx%d] was compressed to [%s] format by [%s] in %.3f seconds\n", + Get()->GetWidth(0), Get()->GetHeight(0), compressedInfo->szName, compressor->GetName(), processTime); + } } else { @@ -107,11 +117,13 @@ namespace ImageProcessingAtom } Set(dstImage); - } - - if (Get() == nullptr) - { - AZ_Error("Image Processing", false, "The selected compressor failed to compress this image"); + + if (dstImage == nullptr) + { + AZ_Error("Image Processing", false, "Failed to use [%s] to %s [%s] format", compressor->GetName(), + isSrcUncompressed ? "compress" : "decompress", + compressedInfo->szName); + } } } } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageBuilderComponent.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageBuilderComponent.cpp index 40d1429f4b..c688b0b20c 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageBuilderComponent.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageBuilderComponent.cpp @@ -74,7 +74,7 @@ namespace ImageProcessingAtom builderDescriptor.m_busId = azrtti_typeid(); builderDescriptor.m_createJobFunction = AZStd::bind(&ImageBuilderWorker::CreateJobs, &m_imageBuilder, AZStd::placeholders::_1, AZStd::placeholders::_2); builderDescriptor.m_processJobFunction = AZStd::bind(&ImageBuilderWorker::ProcessJob, &m_imageBuilder, AZStd::placeholders::_1, AZStd::placeholders::_2); - builderDescriptor.m_version = 23; // [ATOM-14022] + builderDescriptor.m_version = 24; // [SPEC-7821] builderDescriptor.m_analysisFingerprint = ImageProcessingAtom::BuilderSettingManager::Instance()->GetAnalysisFingerprint(); m_imageBuilder.BusConnect(builderDescriptor.m_busId); AssetBuilderSDK::AssetBuilderBus::Broadcast(&AssetBuilderSDK::AssetBuilderBusTraits::RegisterBuilderInformation, builderDescriptor); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageLoader/QtImageLoader.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageLoader/QtImageLoader.cpp index 3ac36b8b17..4124eebcd4 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageLoader/QtImageLoader.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageLoader/QtImageLoader.cpp @@ -28,6 +28,7 @@ namespace ImageProcessingAtom QImage qimage(filename.c_str()); if (qimage.isNull()) { + AZ_Error("ImageProcessing", false, "Failed to load [%s] via QImage", filename.c_str()); return NULL; } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Android/ImageProcessing_Traits_Android.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Android/ImageProcessing_Traits_Android.h index 22d0061573..0bd7ba3732 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Android/ImageProcessing_Traits_Android.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Android/ImageProcessing_Traits_Android.h @@ -13,4 +13,3 @@ #define AZ_TRAIT_IMAGEPROCESSING_PVRTEXLIB_USE_WINDLL_IMPORT 0 #define AZ_TRAIT_IMAGEPROCESSING_SQUISH_DO_NOT_USE_FASTCALL 0 #define AZ_TRAIT_IMAGEPROCESSING_USE_BASE10_BYTE_PREFIX 0 -#define AZ_TRAIT_IMAGEPROCESSING_USE_ISPC_TEXTURE_COMPRESSOR 0 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Linux/ImageProcessing_Traits_Linux.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Linux/ImageProcessing_Traits_Linux.h index 19b7621f8a..43e8a2b3f9 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Linux/ImageProcessing_Traits_Linux.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Linux/ImageProcessing_Traits_Linux.h @@ -13,4 +13,3 @@ #define AZ_TRAIT_IMAGEPROCESSING_PVRTEXLIB_USE_WINDLL_IMPORT 0 #define AZ_TRAIT_IMAGEPROCESSING_SQUISH_DO_NOT_USE_FASTCALL 1 #define AZ_TRAIT_IMAGEPROCESSING_USE_BASE10_BYTE_PREFIX 0 -#define AZ_TRAIT_IMAGEPROCESSING_USE_ISPC_TEXTURE_COMPRESSOR 0 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Mac/ImageProcessing_Traits_Mac.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Mac/ImageProcessing_Traits_Mac.h index a494f7ace7..2704fb0185 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Mac/ImageProcessing_Traits_Mac.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Mac/ImageProcessing_Traits_Mac.h @@ -13,4 +13,3 @@ #define AZ_TRAIT_IMAGEPROCESSING_PVRTEXLIB_USE_WINDLL_IMPORT 0 #define AZ_TRAIT_IMAGEPROCESSING_SQUISH_DO_NOT_USE_FASTCALL 1 #define AZ_TRAIT_IMAGEPROCESSING_USE_BASE10_BYTE_PREFIX 1 -#define AZ_TRAIT_IMAGEPROCESSING_USE_ISPC_TEXTURE_COMPRESSOR 0 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Windows/ImageProcessing_Traits_Windows.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Windows/ImageProcessing_Traits_Windows.h index 3fdd1ddf66..e8d25c2dad 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Windows/ImageProcessing_Traits_Windows.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Windows/ImageProcessing_Traits_Windows.h @@ -13,4 +13,3 @@ #define AZ_TRAIT_IMAGEPROCESSING_PVRTEXLIB_USE_WINDLL_IMPORT 1 #define AZ_TRAIT_IMAGEPROCESSING_SQUISH_DO_NOT_USE_FASTCALL 0 #define AZ_TRAIT_IMAGEPROCESSING_USE_BASE10_BYTE_PREFIX 0 -#define AZ_TRAIT_IMAGEPROCESSING_USE_ISPC_TEXTURE_COMPRESSOR 1 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Windows/platform_windows.cmake b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Windows/platform_windows.cmake index ca8dad1013..5cd1fb5a22 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Windows/platform_windows.cmake +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Windows/platform_windows.cmake @@ -6,11 +6,3 @@ # # -# windows requires the 3rd Party ISPCTexComp library. - -ly_associate_package(PACKAGE_NAME ISPCTexComp-2021.3-rev1-windows TARGETS ISPCTexComp PACKAGE_HASH 324fb051a549bc96571530e63c01e18a4c860db45317734d86276fe27a45f6dd) - -set(LY_BUILD_DEPENDENCIES - PUBLIC - 3rdParty::ISPCTexComp - ) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Windows/platform_windows_files.cmake b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Windows/platform_windows_files.cmake index bb3cd74557..f404a9ef60 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Windows/platform_windows_files.cmake +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Windows/platform_windows_files.cmake @@ -9,6 +9,4 @@ set(FILES ImageProcessing_Traits_Platform.h ImageProcessing_Traits_Windows.h - ../../Compressors/ISPCTextureCompressor.cpp - ../../Compressors/ISPCTextureCompressor.h ) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/iOS/ImageProcessing_Traits_iOS.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/iOS/ImageProcessing_Traits_iOS.h index a494f7ace7..2704fb0185 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/iOS/ImageProcessing_Traits_iOS.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/iOS/ImageProcessing_Traits_iOS.h @@ -13,4 +13,3 @@ #define AZ_TRAIT_IMAGEPROCESSING_PVRTEXLIB_USE_WINDLL_IMPORT 0 #define AZ_TRAIT_IMAGEPROCESSING_SQUISH_DO_NOT_USE_FASTCALL 1 #define AZ_TRAIT_IMAGEPROCESSING_USE_BASE10_BYTE_PREFIX 1 -#define AZ_TRAIT_IMAGEPROCESSING_USE_ISPC_TEXTURE_COMPRESSOR 0 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.cpp index 3f28e89334..a1093ffc37 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.cpp @@ -869,7 +869,7 @@ namespace ImageProcessingAtom return process; } - void ImageConvertProcess::CreateIBLCubemap(AZ::Uuid presetUUID, const char* fileNameSuffix, IImageObjectPtr cubemapImage) + void ImageConvertProcess::CreateIBLCubemap(AZ::Uuid presetUUID, const char* fileNameSuffix, IImageObjectPtr& cubemapImage) { const AZStd::string& platformId = m_input->m_platform; AZStd::string_view filePath; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.h index db34c46e2a..190e68ca31 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.h @@ -161,7 +161,7 @@ namespace ImageProcessingAtom bool FillCubemapMipmaps(); //IBL cubemap generation, this creates a separate ImageConvertProcess - void CreateIBLCubemap(AZ::Uuid presetUUID, const char* fileNameSuffix, IImageObjectPtr cubemapImage); + void CreateIBLCubemap(AZ::Uuid presetUUID, const char* fileNameSuffix, IImageObjectPtr& cubemapImage); //convert color space to linear with pixel format rgba32f bool ConvertToLinear(); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageObjectImpl.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageObjectImpl.h index c4cbd13fea..c8b8ced496 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageObjectImpl.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageObjectImpl.h @@ -36,10 +36,6 @@ namespace ImageProcessingAtom AZ::u32 GetWidth(AZ::u32 mip) const override; AZ::u32 GetHeight(AZ::u32 mip) const override; AZ::u32 GetMipCount() const override; - bool IsCubemap() const override - { - return false; - }; void GetImagePointer(AZ::u32 mip, AZ::u8*& pMem, AZ::u32& pitch) const override; AZ::u32 GetMipBufSize(AZ::u32 mip) const override; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp index 20aa1e927d..fa1b092e6b 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp @@ -71,11 +71,6 @@ using namespace ImageProcessingAtom; namespace UnitTest { - namespace - { - static const char* s_gemFolder; - } - // Expose AZ::AssetManagerComponent::Reflect function for testing class MyAssetManagerComponent : public AZ::AssetManagerComponent @@ -125,6 +120,8 @@ namespace UnitTest AZStd::unique_ptr m_jsonSystemComponent; AZStd::vector> m_assetHandlers; AZStd::string m_gemFolder; + AZStd::string m_outputRootFolder; + AZStd::string m_outputFolder; void SetUp() override { @@ -172,7 +169,7 @@ namespace UnitTest AzQtComponents::PrepareQtPaths(); m_gemFolder = AZ::Test::GetEngineRootPath() + "/Gems/Atom/Asset/ImageProcessingAtom/"; - s_gemFolder = m_gemFolder.c_str(); + m_outputFolder = m_gemFolder + AZStd::string("Code/Tests/TestAssets/temp/"); m_defaultSettingFolder = m_gemFolder + AZStd::string("Config/"); m_testFileFolder = m_gemFolder + AZStd::string("Code/Tests/TestAssets/"); @@ -185,7 +182,7 @@ namespace UnitTest void TearDown() override { m_gemFolder = AZStd::string(); - s_gemFolder = ""; + m_outputFolder = AZStd::string(); m_defaultSettingFolder = AZStd::string(); m_testFileFolder = AZStd::string(); @@ -226,16 +223,16 @@ namespace UnitTest Image_512X288_RGB8_Tga, Image_1024X1024_RGB8_Tif, Image_UpperCase_Tga, - Image_512x512_Normal_Tga, + Image_512x512_Normal_Tga, // QImage doesn't support loading this file. Image_128x128_Transparent_Tga, Image_237x177_RGB_Jpg, Image_GreyScale_Png, - Image_BlackWhite_Png, Image_Alpha8_64x64_Mip7_Dds, Image_BGRA_64x64_Mip7_Dds, Image_Luminance8bpp_66x33_dds, Image_BGR_64x64_dds, - Image_Sunset_4096x2048_R16G16B16A16F_exr + Image_defaultprobe_cm_1536x256_64bits_tif, + Image_workshop_iblskyboxcm_exr }; //image file names for testing @@ -258,17 +255,29 @@ namespace UnitTest m_imagFileNameMap[Image_128x128_Transparent_Tga] = m_testFileFolder + "128x128_RGBA8.tga"; m_imagFileNameMap[Image_237x177_RGB_Jpg] = m_testFileFolder + "237x177_RGB.jpg"; m_imagFileNameMap[Image_GreyScale_Png] = m_testFileFolder + "greyscale.png"; - m_imagFileNameMap[Image_BlackWhite_Png] = m_testFileFolder + "BlackWhite.png"; m_imagFileNameMap[Image_Alpha8_64x64_Mip7_Dds] = m_testFileFolder + "Alpha8_64x64_Mip7.dds"; m_imagFileNameMap[Image_BGRA_64x64_Mip7_Dds] = m_testFileFolder + "BGRA_64x64_MIP7.dds"; m_imagFileNameMap[Image_Luminance8bpp_66x33_dds] = m_testFileFolder + "Luminance8bpp_66x33.dds"; m_imagFileNameMap[Image_BGR_64x64_dds] = m_testFileFolder + "RGBA_64x64.dds"; - m_imagFileNameMap[Image_Sunset_4096x2048_R16G16B16A16F_exr] = m_testFileFolder + "sunset_cm.exr"; + m_imagFileNameMap[Image_defaultprobe_cm_1536x256_64bits_tif] = m_testFileFolder + "defaultProbe_cm.tif"; + m_imagFileNameMap[Image_workshop_iblskyboxcm_exr] = m_testFileFolder + "workshop_iblskyboxcm.exr"; } public: + void SetOutputSubFolder(const char* subFolderName) + { + if (subFolderName) + { + m_outputFolder = m_outputRootFolder + "/" + subFolderName; + } + else + { + m_outputFolder = m_outputRootFolder; + } + } + //helper function to save an image object to a file through QtImage - static void SaveImageToFile([[maybe_unused]] const IImageObjectPtr imageObject, [[maybe_unused]] const AZStd::string imageName, [[maybe_unused]] AZ::u32 maxMipCnt = 100) + void SaveImageToFile([[maybe_unused]] const IImageObjectPtr imageObject, [[maybe_unused]] const AZStd::string imageName, [[maybe_unused]] AZ::u32 maxMipCnt = 100) { #ifndef DEBUG_OUTPUT_IMAGES return; @@ -278,12 +287,12 @@ namespace UnitTest return; } - //create the directory if it's not exist - AZStd::string outputDir = s_gemFolder + AZStd::string("Code/Tests/TestAssets/Output/"); - QDir dir(outputDir.data()); - if (!dir.exists()) + // create dir if it doesn't exist + QDir dir; + QDir outputDir(m_outputFolder.c_str()); + if (!outputDir.exists()) { - dir.mkpath("."); + dir.mkpath(m_outputFolder.c_str()); } //save origin file pixel format so we could use it to generate name later @@ -303,12 +312,13 @@ namespace UnitTest finalImage->GetImagePointer(mip, imageBuf, pitch); uint32 width = finalImage->GetWidth(mip); uint32 height = finalImage->GetHeight(mip); + uint32 originalSize = imageObject->GetMipBufSize(mip); //generate file name char filePath[2048]; - azsprintf(filePath, "%s%s_%s_mip%d_%dx%d.png", outputDir.data(), imageName.c_str() + azsprintf(filePath, "%s%s_%s_mip%d_%dx%d_%d.png", m_outputFolder.data(), imageName.c_str() , CPixelFormats::GetInstance().GetPixelFormatInfo(originPixelFormat)->szName - , mip, width, height); + , mip, width, height, originalSize); QImage qimage(imageBuf, width, height, pitch, QImage::Format_RGBA8888); qimage.save(filePath); @@ -385,7 +395,7 @@ namespace UnitTest } - static bool CompareDDSImage(const QString& imagePath1, const QString& imagePath2, QString& output) + bool CompareDDSImage(const QString& imagePath1, const QString& imagePath2, QString& output) { IImageObjectPtr image1, alphaImage1, image2, alphaImage2; @@ -530,15 +540,7 @@ namespace UnitTest TEST_F(ImageProcessingTest, TestCubemapLayouts) { { - IImageObjectPtr srcImage(LoadImageFromFile(m_imagFileNameMap[Image_Sunset_4096x2048_R16G16B16A16F_exr])); - ImageToProcess imageToProcess(srcImage); - imageToProcess.ConvertCubemapLayout(CubemapLayoutHorizontalCross); - ASSERT_TRUE(imageToProcess.Get()->GetWidth(0) * 3 == imageToProcess.Get()->GetHeight(0) * 4); - SaveImageToFile(imageToProcess.Get(), "LatLong", 1); - } - - { - IImageObjectPtr srcImage(LoadImageFromFile(m_testFileFolder + "defaultProbe_cm.tif")); + IImageObjectPtr srcImage(LoadImageFromFile(m_imagFileNameMap[Image_defaultprobe_cm_1536x256_64bits_tif])); ImageToProcess imageToProcess(srcImage); imageToProcess.ConvertCubemapLayout(CubemapLayoutVertical); @@ -635,12 +637,8 @@ namespace UnitTest ASSERT_TRUE(img != nullptr); ASSERT_TRUE(img->GetPixelFormat() == ePixelFormat_B8G8R8); - // Exr files - img = IImageObjectPtr(LoadImageFromFile(m_imagFileNameMap[Image_Sunset_4096x2048_R16G16B16A16F_exr])); - ASSERT_TRUE(img != nullptr); - img = IImageObjectPtr(LoadImageFromFile(m_testFileFolder + "abandoned_sanatorium_staircase_cm.exr")); - ASSERT_TRUE(img != nullptr); - img = IImageObjectPtr(LoadImageFromFile(m_testFileFolder + "road_in_tenerife_mountain_cm.exr")); + // Exr file + img = IImageObjectPtr(LoadImageFromFile(m_imagFileNameMap[Image_workshop_iblskyboxcm_exr])); ASSERT_TRUE(img != nullptr); } @@ -783,39 +781,36 @@ namespace UnitTest ASSERT_TRUE(dstImage3->CompareImage(dstImage1)); } - TEST_F(ImageProcessingTest, DISABLED_TestConvertPVRTC) + TEST_F(ImageProcessingTest, TestConvertFormatCompressed) { - //source image - AZStd::string inputFile; - inputFile = "../AutomatedTesting/Objects/ParticleAssets/ShowRoom/showroom_pipe_blue_001_ddna.tif"; - - IImageObjectPtr srcImage(LoadImageFromFile(inputFile)); - ImageToProcess imageToProcess(srcImage); - - for (EPixelFormat pixelFormat = ePixelFormat_PVRTC2; pixelFormat <= ePixelFormat_ETC2a;) - { - imageToProcess.Set(srcImage); - imageToProcess.ConvertFormat(pixelFormat); - SaveImageToFile(imageToProcess.Get(), "Compressor", 1); - - //next format - pixelFormat = EPixelFormat(pixelFormat + 1); - } - } - - TEST_F(ImageProcessingTest, DISABLED_TestConvertFormat) - { - EPixelFormat pixelFormat; IImageObjectPtr srcImage; //images to be tested - static const int imageCount = 5; + static const int imageCount = 4; ImageFeature images[imageCount] = { Image_20X16_RGBA8_Png, - Image_32X32_16bit_F_Tif, - Image_32X32_32bit_F_Tif, - Image_512x512_Normal_Tga, - Image_128x128_Transparent_Tga }; + Image_237x177_RGB_Jpg, + Image_128x128_Transparent_Tga, + Image_defaultprobe_cm_1536x256_64bits_tif}; + + // collect all compressed pixel formats + AZStd::vector compressedFormats; + for (uint32 i = 0; i < ePixelFormat_Count; i++) + { + EPixelFormat pixelFormat = (EPixelFormat)i; + auto formatInfo = CPixelFormats::GetInstance().GetPixelFormatInfo(pixelFormat); + if (formatInfo->bCompressed) + { + // exclude astc formats until we add astc compressor to all platforms + // exclude pvrtc formats (deprecating) + if (!IsASTCFormat(pixelFormat) + && pixelFormat != ePixelFormat_PVRTC2 && pixelFormat != ePixelFormat_PVRTC4 + && !IsETCFormat(pixelFormat)) // skip ETC since it's very slow + { + compressedFormats.push_back(pixelFormat); + } + } + } for (int imageIdx = 0; imageIdx < imageCount; imageIdx++) { @@ -827,42 +822,37 @@ namespace UnitTest ImageToProcess imageToProcess(srcImage); //test ConvertFormat functions against all the pixel formats - for (pixelFormat = ePixelFormat_R8G8B8A8; pixelFormat < ePixelFormat_Unknown;) + for (EPixelFormat pixelFormat : compressedFormats) { + // + if (!CPixelFormats::GetInstance().IsImageSizeValid(pixelFormat, srcImage->GetWidth(0), srcImage->GetHeight(0), false)) + { + continue; + } + + auto formatInfo = CPixelFormats::GetInstance().GetPixelFormatInfo(pixelFormat); imageToProcess.Set(srcImage); imageToProcess.ConvertFormat(pixelFormat); + if (!imageToProcess.Get()) + { + AZ_Warning("test", false, "unsupported format: %s", formatInfo->szName); + continue; + } ASSERT_TRUE(imageToProcess.Get()); + ASSERT_TRUE(imageToProcess.Get()->GetPixelFormat() == pixelFormat); - //if the format is compressed and there is no compressor for it, it won't be converted to the expected format - if (ICompressor::FindCompressor(pixelFormat, ImageProcessingAtom::ColorSpace::autoSelect, true) == nullptr - && !CPixelFormats::GetInstance().IsPixelFormatUncompressed(pixelFormat)) - { - ASSERT_TRUE(imageToProcess.Get()->GetPixelFormat() != pixelFormat); - } - else - { - //validate the size and it may not working for some uncompressed format - if (!CPixelFormats::GetInstance().IsImageSizeValid( - pixelFormat, srcImage->GetWidth(0), srcImage->GetHeight(0), false)) - { - ASSERT_TRUE(imageToProcess.Get()->GetPixelFormat() != pixelFormat); - } - else - { - ASSERT_TRUE(imageToProcess.Get()->GetPixelFormat() == pixelFormat); + // Get compressor name + ColorSpace sourceColorSpace = srcImage->HasImageFlags(EIF_SRGBRead) ? ColorSpace::sRGB : ColorSpace::linear; + ICompressorPtr compressor = ICompressor::FindCompressor(pixelFormat, sourceColorSpace, true); - //save the image to a file so we can check the visual result - SaveImageToFile(imageToProcess.Get(), imageName, 1); + //save the image to a file so we can check the visual result + AZStd::string outputName = AZStd::string::format("%s_%s", imageName.c_str(), compressor->GetName()); + SaveImageToFile(imageToProcess.Get(), outputName, 1); - //convert back to an uncompressed format and expect it will be successful - imageToProcess.ConvertFormat(ePixelFormat_R8G8B8A8); - ASSERT_TRUE(imageToProcess.Get()->GetPixelFormat() == ePixelFormat_R8G8B8A8); - } - } - - //next pixel format - pixelFormat = EPixelFormat(pixelFormat + 1); + //convert back to an uncompressed format and expect it will be successful + imageToProcess.ConvertFormat(ePixelFormat_R8G8B8A8); + ASSERT_TRUE(imageToProcess.Get()->GetPixelFormat() == ePixelFormat_R8G8B8A8); } } } @@ -932,42 +922,6 @@ namespace UnitTest #endif //AZ_TOOLS_EXPAND_FOR_RESTRICTED_PLATFORMS } - TEST_F(ImageProcessingTest, DISABLED_TestCubemap) - { - //load builder presets - auto outcome = BuilderSettingManager::Instance()->LoadConfigFromFolder(m_defaultSettingFolder); - ASSERT_TRUE(outcome.IsSuccess()); - - const AZStd::string outputFolder = m_gemFolder + AZStd::string("Code/Tests/TestAssets/temp/"); - AZStd::string inputFile; - AZStd::vector outProducts; - - inputFile = m_testFileFolder + "defaultProbe_cm.tif"; - - ImageConvertProcess* process = CreateImageConvertProcess(inputFile, outputFolder, "pc", outProducts); - - if (process != nullptr) - { - int step = 0; - while (!process->IsFinished()) - { - process->UpdateProcess(); - step++; - } - - //get process result - ASSERT_TRUE(process->IsSucceed()); - - SaveImageToFile(process->GetOutputImage(), "cubemap", 100); - SaveImageToFile(process->GetOutputIBLSpecularCubemap(), "iblspecularcubemap", 100); - SaveImageToFile(process->GetOutputIBLDiffuseCubemap(), "ibldiffusecubemap", 100); - SaveImageToFile(process->GetOutputAlphaImage(), "alpha", 1); - process->GetAppendOutputProducts(outProducts); - - delete process; - } - } - //test image conversion for builder TEST_F(ImageProcessingTest, TestBuilderImageConvertor) { @@ -975,12 +929,11 @@ namespace UnitTest auto outcome = BuilderSettingManager::Instance()->LoadConfigFromFolder(m_defaultSettingFolder); ASSERT_TRUE(outcome.IsSuccess()); - const AZStd::string outputFolder = m_gemFolder + AZStd::string("Code/Tests/TestAssets/temp/"); AZStd::string inputFile; AZStd::vector outProducts; inputFile = m_imagFileNameMap[Image_128x128_Transparent_Tga]; - ImageConvertProcess* process = CreateImageConvertProcess(inputFile, outputFolder, "pc", outProducts, m_context.get()); + ImageConvertProcess* process = CreateImageConvertProcess(inputFile, m_outputFolder, "pc", outProducts, m_context.get()); if (process != nullptr) { @@ -1004,30 +957,38 @@ namespace UnitTest } } - - //test image loading function for output dds files - TEST_F(ImageProcessingTest, DISABLED_TestLoadDdsImage) + TEST_F(ImageProcessingTest, TestIblSkyboxPreset) { - IImageObjectPtr originImage, alphaImage; - AZStd::string inputFolder = "../AutomatedTesting/Cache/pc/engineassets/texturemsg/"; + //load builder presets + auto outcome = BuilderSettingManager::Instance()->LoadConfigFromFolder(m_defaultSettingFolder); + ASSERT_TRUE(outcome.IsSuccess()); + AZStd::string inputFile; + AZStd::vector outProducts; - inputFile = "E:/Javelin_NWLYDev/dev/Cache/Assets/pc/assets/textures/blend_maps/moss/jav_moss_ddn.dds"; + inputFile = m_imagFileNameMap[Image_workshop_iblskyboxcm_exr]; + ImageConvertProcess* process = CreateImageConvertProcess(inputFile, m_outputFolder, "pc", outProducts, m_context.get()); - IImageObjectPtr newImage = IImageObjectPtr(DdsLoader::LoadImageFromFileLegacy(inputFile)); - if (newImage->HasImageFlags(EIF_AttachedAlpha)) + if (process != nullptr) { - if (newImage->HasImageFlags(EIF_Splitted)) - { - alphaImage = IImageObjectPtr(DdsLoader::LoadImageFromFileLegacy(inputFile + ".a")); - } - else - { - alphaImage = IImageObjectPtr(DdsLoader::LoadAttachedImageFromDdsFileLegacy(inputFile, newImage)); - } - } + process->ProcessAll(); - SaveImageToFile(newImage, "jav_moss_ddn", 10); + //get process result + ASSERT_TRUE(process->IsSucceed()); + + auto specularImage = process->GetOutputIBLSpecularCubemap(); + auto diffuseImage = process->GetOutputIBLDiffuseCubemap(); + ASSERT_TRUE(process->GetOutputImage()); + ASSERT_TRUE(specularImage); + ASSERT_TRUE(diffuseImage); + + // output converted result if save image is enabled + SaveImageToFile(process->GetOutputImage(), "ibl_skybox", 10); + SaveImageToFile(specularImage, "ibl_specular", 10); + SaveImageToFile(diffuseImage, "ibl_diffuse", 10); + + delete process; + } } TEST_F(ImageProcessingTest, DISABLED_CompareOutputImage) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/.gitignore b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/.gitignore new file mode 100644 index 0000000000..de16d18e9c --- /dev/null +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/.gitignore @@ -0,0 +1 @@ +[Tt]emp/** diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/BlackWhite.png b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/BlackWhite.png deleted file mode 100644 index dfe856790a..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/BlackWhite.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:969c6597a6346c5ff8ae24b4ae143bacbeed2944dd139ddef9b440483dbe4c02 -size 8866921 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/LatLong_cm.png b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/LatLong_cm.png deleted file mode 100644 index 729868e8c0..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/LatLong_cm.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ef6c54d5fa8dd3906d07eb4d3a4d664e82d957103e4bfbcaa951e3722348300d -size 749794 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/Lenstexture_dirtyglass.tif b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/Lenstexture_dirtyglass.tif deleted file mode 100644 index 090991ec7a..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/Lenstexture_dirtyglass.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:265ae231486dc6d5d61aa2416b0010ea743722f7238660faeed9edacd46e8a6b -size 6303186 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/abandoned_sanatorium_staircase_cm.exr b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/abandoned_sanatorium_staircase_cm.exr deleted file mode 100644 index f4612e45dc..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/abandoned_sanatorium_staircase_cm.exr +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a559d4b21606d663bc9c7f9d8086646770f5e383c2214e6d3be0b192abbc6888 -size 7736382 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/red.png b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/red.png deleted file mode 100644 index 800faddee4..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/red.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:37d146db3de179add861ee86d2316ef1dd413cdb0b02448b3b95bf0023f44bae -size 613 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/road_in_tenerife_mountain_cm.exr b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/road_in_tenerife_mountain_cm.exr deleted file mode 100644 index 358f4a3fcb..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/road_in_tenerife_mountain_cm.exr +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:95ec8e752ba10edb8242a9bb8cc78e5b85fe2861268cf95e06942e2a10ef243c -size 7484335 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/sunset_cm.exr b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/sunset_cm.exr deleted file mode 100644 index d1179b96de..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/sunset_cm.exr +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:da49114be7305fad10121f92cdf6f153ebb3bc302edc662f2ed75cd45306ab7f -size 50364729 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/temp/128x128_RGBA8.tga.streamingimage b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/temp/128x128_RGBA8.tga.streamingimage deleted file mode 100644 index 6826f2a76e90456d281de0067934c304f03e7704..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28861 zcmeHQ3tW^{`u=7>gqhS)F|TcyC?QT0t9U^I)HJX_6Q@DM85C0xF|Pp{Fp65bqKFqn z&_+md(Gf2VhJTiH`xB$RzipQpT2}qph=4Is zKB-p+%XF^>2llUseGU&3aiO1O9LSt$vwHB2{sDtG>5oU$n0~m67BP3UX20_k(ZFQ= z_@$OtcYadae%+fF{xL6fS*M|jAs17k;;UZUl9sY)klmSkNjP82g_;Adwt8}lCA&-H z6Iw(Z7xHENtd-yCKC(Gf`|9E~b@L;VZKwI-wL*r8E`>gJ+>Q$^+dK1e>gV(Bk8m4$ z@9(dFbmNn=i$2EV2XaUMetX3P(c7~wTsT-dtmh`>$*)iMZkra;F;x}w*nM#ScXml- zj~(YYzh{zPiB(+4YY{nXY{1%e8;hrPn(lRUkgs}xXxZ_1d-gi$w{Gjk1Krzid-mfo z%Pu{gG_$~WeS9ZB_soX6-IlNV^x(KL_e*=Ud;Bo>=S?2#sz3YWPd)ixv>h%qbU>8L z6C5HOS!mm5s<)q4#YAXc9`yXG5577YdN*SRjyLB*-x#FW@Z^h*UjCa?KT-VtrPD&5 zdF92O7SCy|3unZJnC|3cJ;BF?T)LNj|Iy<-&xJe_`M0u1kK@rHT_=9@?xV+XerS12 zbl?+wF@%ulw> z3w>*~Xx`s(R7jGiyS~UqAZ7B*>q~5nO+}e&GDd@6`LYj;cS|J0qosj*7VWPdBcZxTFKA1=`*=LBBbo*DfyEqi5VYN{n&9k?p|Q<)&Am` zO&fgQbr0}L8Ps`*?W{>348Y6($dj0)q*Fn) zEf?A)-O~4oEe~?8Unjk9lgU0>nojncl3v!7^f22dq?i4H(mORNJz9Rb^!80jPh+Yl zb8q_xN)NJ{80ewpmrD;_eX{0rzD-F_TJc9|KFDf9dbIp<>BUV-@6?p^)GvRO^dPGV z>Cy7brN`_;6Wl|Uo~-#CTK*{M@w!b&kCtC9J+!z9>Cw`J^k`{9db~mtJ|E`tTSUA+ zrGN7D)}P!rIl0$Vy#G`4pP1{>80Am9e?r#!r`LOOp8u!MfAT2je?H=Ierv8fEiaGl zvZK6>ddlkL)cO$>i7n!27UA5OxZbaPG2&=J>+tGtcBFgSTc=34pK8Wn^QW3e{&e%` zpKezEOtbG#K3j>0&%KtNK2u*mCTd2EvSZq)PX?{H;u=m3|JffA=b!5ApNi2O``8e6 zaCNZa=D>At4{XG(IRD%H+sFN_?QKQC(F6URa6qY4@@+Z(tdy~v{GjW-$pE) z?-psrEw~XAN+(JqaJlfY$Nhb#wrIq*^gaR7NNYQL-v!QA{O9*i_rL>w8&5+2rXHFx zMq)kiH0R$?`t~sgCmc{JjrGqp1D5x5=xR^6p6?|&_ST*&eH{i7HuGEm+U8hQ{-quw z!bUz%GO(jR_#NO+nCEl3m!9#TQ0na3B<}nQ=j2~HEY*5`AIA}=FLrkDBdp;owY{W? zr!SV;3s{-R=Q`W_f8!J0BC;zzU&S|c;P`NUYKvs{z8YS_`JZ;#)=F=cM@;(SFLt%! z|Fv(yUJGutvC7>+?7#7H%ovFi4k$t3^UaUNr(NwM@CUk!`#BbTzxE2l^~GDogP*(i z{n|^;q6so54s?qHUN{z=cBO}Cfozby((J~K?gxDU|JfaY`CM_ZkNZsQ0In&7dtul zEx>FW-;k>t(EjehbDbO_1pR5)!nsKjKDBg`3RtP(EuFcBp!?wu^h1@{;J}Ue#${X5 zPHTVsxBCyK->I+$_G!uaZ@dt5y`>W%{I9V`bN`Kn{mwJ{1-}E@6x>L?dPuO}`eHYU zUyp(tYr((JpLw~GH$2dOsgH>I-(0*^GT~+Lf5lm3+jW6VS)V7FGD6S?Zm8?Q4oYLO zWOlH?KldhK@Exo1pSA~lFLwV{!1E_C`_FN=?Mm&B;y5*b=A3Z;6(?$s88hPaIoSUs z;rdE#^vH&Tqz}ULG#1^&VFKTN^gb&1hu{HshY8G?bZU`I{zC=*5VaM1i837nS%0ZCLcE(Oc4xi$pZ8zJ_v%KzMQ!qJBTBY- zu=h8b-I^E7n{|!xYc$sv5BW>MyfpAF*l&HF+Z*nTf9fwI@Z?v>{tr1&e;SM2Br$Ik z0QYquKF!5$;zi;2q6wD|aPCU{Cr@Mkz<%&hS95VsZtXnq4SSCqp5spZWoU(Xz~zoQ zGJx>L`ON;0hm;FAdlAzIE6&uy-b?L$t>>?s2mcR$KV=lV--_wr`=Y&{|M11`O7OXO za>AzT`fkIF5c4#461o#a2@9%{*7@Y_}xh5l4&5|MA5c8*%$@keRG1HK#cF_EJk@$GKq zTVY=i_aom$c_W?!-!G^F7m&X$%5w|%WSHa!6weG~`at$%G~`JaO znFTjy!v3khp%3D$Mez6V4>v;W2P^BhinpyO5aK~}ROE2N`Rgek=pi~e?|2B|Pd2f9 zplaSz;mZ14ZeJGT|HXyC(1(4SiElg3iVL#@{yEvg?f+H@~|PxmAK#Fw#XtK{&lS0z+v z4QmCQO!}b#{$PO_`G7Q;{EG(sr@Up}P5eI(e+8_YuVQ>td;mQxF$ZGf_hE%4jwh z4gO0U_#Z71{CSaHG0qF^z=C}%;J*W7uFnL&jBmZ$+Nq3x|Kaf0;9tLx;itmw2LnqB zGk||McASogn?-e^~N;>XknJ`)cl&8S^9@ zZ@%}{ObqaOeq5EZI9I~g`j_p>=m8vGrL0=Y@wMPT!_JSehOqf=@BGttzI48d&(+pd z8FsHsvE%4|no2Eq|C*5RMbh(N{#^B?c*^gS@0Xn~BKt4@%-s7fFzF-s*L{`G_#}Ts z{2$%K@Qh_og%kg~-($EJ;)i-}ttoYyz^~qQ_?xbv+Y}ST_@;P4?PL3G>wOpelYQZG zlXpkfPJCEuO{Twy?(Fu?T45%>RL}>+hfkel_Fb3?wyFzKhENba^MY{tEruz!l*2E9V6O8|y`kUs}@+q<6m3$kyV zFFmbi{(=0dLGLF0{utw*`p*np{Z-ucQ5#+qdBJ{xC3WA=hz!hh68JFarDDD|E^^u` zXA$vda1(QU-6m(uZDOpyuSSnq1ipa~!zdKNaRK6+{p)9O{V1`oaNWKdix$`4`ydYfjJ?s#60+hH#Z%%x zbRhI0q{S)n2XkvHOkSP9e{c&S9@N4gbP?a_?UQR`AwJ;`C_l)0*dM?@tb5sE4Xl}c zoNVIKg8JQR*_GM5*|)2^xh41%@;SX+F<}Vwp(?DUVDBI_X@WcXhn7b$9s`tbS~x@C zpY+#&1I1aS4-+Mnufg6G7mH@Z1pP2kLirf!!>um`{~@`E_-c?Vr1jr{@6G!i$es*x zsRVqF6e0Rh|H>U;@4q#FzxDkd(ue6L=)=wIY-5QendFHz>9luB!58ei^X2nJ#9!Hd zhHHvaSF3U0AKBRo^6xX21w=s~YIELWeA4&=^w%zp*edW(@f7FBM*3w7Snvlp{}q?4 zY;$lc_ydXu6&0>_H@bNu9+3Yg{_VKe2D{8!(C82BIRCWKGg`N`^6%o{-mca4>4LqR zk>3sP<-UgaC;wvbkjtY2+|9(lbJy$+fb!%S;P=+emd_7<(-nNm^(%?*n=Jz{9wU4t z5BJ0MyH;J4k-DL=lkdM z$Fkn$i~aWRQM`bAH(4sckF140zAF7hY^=$2{S^2CUlboeXGO_Q@C|zw`~mphord<1 z73S^m2hfMub+fm^-{+ahzd|2krw3&v5#KC7h>acjSHjF6sNw$=El3|$2>u`;At6@6 z-N^RdV$+x(%D5%z8FA?`R{q^vyRR8_{bozjm!hH~`KZ3`?Sg=Xe7;DppZx~f!7n{e z4}RCiqP^-)%SgNrp!{P5k05t*;PzR$qX?Je-@4QCT9}0LAJT`av*bUn1g<|fM-SMF z|Bm9x#6YqSx!hIC*R}Q)*)n^VO2z;A_WpDHH~5O3uv3iumrhImASC+~_%EyJQcnEe zxsVP2pJ$}}k@z(3%S!SHZgp!8#+!h(1sfT^Rr79y0LNw|W!}O|A4ivMFRhxP9R)`PfJnUn)U;JwEsSBK_>Vm{^f}G zZw!R}Kj2@E194*%=0LR5^T3~cUE(cStLrx<^ge_ObY$;0ThjXyKEIFR$8^Ep6TWrH zz1;}3le~oM?`)bb>0uJ>tMMv#aF9xouL-e;`b#Xtd8V2Fa=!L+eEh-f4K*We&|{xd zz6!b`%qGD;%{2Zb{=Pay{I4+6d<5a*oUEh)z%;)=`2B_Jgm#)wAe<0R=O>wIKAZ5k z!Aw7BzU3WYpJ##bM|{Hln4T6_lKnIO5f9pn3ex7`kMzNaPv57BJjOrhSB&$4edCYT zLx``rp{#we`xPg`Gc&_`_r)L0mlFO&$J%9x_k=GVbYI!>dP+;0Pa#}ma)*Ct7ewQ0 z!VNXoQzU<%4nH4XMfkto-~XI`-3zukRr1sqByR=yxO+7?$z!CA$GEC7hzGH;mk)z% z{82tk_|qJQUq?Pb_`@ZPPs*gqa5#OL+ zBXTT}=<(OcfBS#tKX@R+R{lrMWqe!t-;~7k!^;1G4;XIb{{Xw*%767`VCVzo_l*A! zWs*%P|2zC!O2l%RjXUuVIx6m71^G~cM*fchtVwAjUW4gKB(U`WgOZ z@c*i~HM5}(!lyUcKlmYiA^U%0U{y-X>oVB?AbW*EE{_`{@Hxur|JNt7cB}v2`#!bH zf~@}kVsX`-K&S-e`^5L1(yE(*igrO(|KD&YC#+?8O3TZ9Xt{$c?7x9tLng#a{Nukr z{y*vuYGC{_8xP_?A|f`{{7vu*kM-R=X?#fb`qd%gubZdU|L@;SSm9~)|GGu2z0vNGxwmc`x3V$+Q?zD$ z3h^Ha;OqT>Z!!M$`l6!QZ-8I$N%4xu& zz|g0?=hjj>=uuylGd=LSV-V$kQU~x~hjhtNhWwx6Kk|V``|rOE*K^p7VCzKka9XXl z{?>lU7qVmz%6Cj*VX?O^%970?-8{)2K!3=&B4F@M_5vJQr~`i!x_Mgjzf5iLiUDu| z73|^9!2`GGA zCEy$U()mROv-#Ct;0yLj<3G8)yT??2*lX3DQ8fN*0sfMwp&k6wcvK2Px2+()9fN56 zM|>aKM&~;Q(R{dEUSzoPIq~l}tN&rg&D36dWkZ+*?eU0zQdha2uU%c@08I8FkxKvj z^MQL>yZ5kOM*N$?VuSBjlt@m6C_Lk<)}J$(Xuv1?+o=#A&-LdeSgxKgiw)&kUmT6`o{|m>p7&=p#$M1^*%B{|O1| zzsg|zS-pk)FBStpDaHTF-Y! zt}hxtm|>d#AwCy`=a`@$vuOT@_}sKWz(JIsU^c*TKzGd)*spyIC)pdafAy5tf)%76#0Tyd8`v{MVaeX@P4hn$6}6UL z%^4deWkON|8}B&D^&$)A3NcI*=SVuZ3Dhwk90lKfuhiU zKinDBFD;Gq%T1v#ih1MOP2!j4BLNMoV_@IVADW*aes`|iO!^T+>$ikI({CXDXVLtx zR3SH9Jxu(!Ppc_9lPPtR8)_~SPD`Wlkkn0YXt>!H`rtUL4E|Cql^ggvlx{l8h70{G zmg@iT_)v$A(%QNT@5AXL_-d`)k~S}S()_Qk!jf?Bo02U%!%xEA$DA8c ze$t!#AMt;37xV%A(|ix%kJric#_W^cG~Z*Yh)qb3gMUCf)f1pSAwHx7+KV5=d$oGp zK&C$w@6oLG?#%Rq_(Hg^?IK>M@VqfZ@b_xOdoec>^S?jxZROqiZO;u@Irdn_AuE2~ z4t(}o6GQhafFJh=*-)W?OWWS3iY=*t3rIA07!arBR)LHxH*8;W=Yb2TrI67(TM$Pd7G-a^JF z$w&Hd=zWG?Uv?wJEw9LY@gs(<`f&9q^h1$WNbA4E|IIJk`Ubv`R!I30u+egD)&77N z(hF(+SS-mi*Hv*ZI$V9ako+wt-fFJD3x9ES?Ip@5#JRkZzbDp3cTWeO(g%=Cl!(81oF#K8*7jUb<{z#5fG zX#;=n{94oY-jp6#kK1$ZD`!9C54zjr+zgCK%b@#{KY00BX77|A5P##mn0?dxNnqd! zO2#L}2RGRFx@ioPd}QxC7BNivAOZd)6MV;{6_S4-zE24LA-$0DN8 zV?GJyZ!G^D`Y%b@MpVoJE6%Cq?mi)*!^g*>@Cc~7^kv=2@ zG5#r^C%z*Gv3ByWPzRM?cg8o1@0NyM&1HHs`~~r!kf>2T#p#N@&1e2)d$;o3)c2$L zfs9kMj#-j%$q5%AJy5>TT;Mx{o)7wsBb^zaqz_Uk#AI)V>HR^k@nLL#S6j(sh7?o9+c90DDl646WM=yA&rN{z@P6B_`gi~1o$?eDHId`m#AJ# zytQ6g`YHH-JEM-~pNQ|T4h#G{pT~Nefd9exKacq~!j}$mA0_MST}ZzOpD)sWv=W%^ zNBE0fqz}=I-^xVgq0K2dJAo-*(^V#_K3dE4f#SCoeCI4={8K(m{$SPgk}ap84^-bl zc;OhvFY!%y>X0A#CV!!HWtjPQwQ8W0Ve0SNh6K&i;Jd;6tq|WeDy0&?)I$4Z8uPiP zc>Vt#7jsKeUViBQ;&z>ElC_h3NgvG62X`CdFGh$DilX{PeIR|6xaAd38p!m4@)huJ zoIR5GPcNi+0sA+;8xH(-dLh+IO5BRgYv#1Y{n84_KE%M;?*hl9UlRO9UcGV0>Qy7B z#bne8`jKZ==4S}}U#9vJ;%i@a8^Qi*{6To#e*e??&IQq=KZN&xNc`8kSnAmQMoRb@lW|0(gW3!$tBQ_ zaXzHqI*UdXGn(lG`E%ks()UNcE9PocqaWe>rItVPjr2j&SrlAkF@Nhq{S9-6e@8y| zEBrfd^Q%5$ZYA=C)s6brPV~d{w1SK)PPi-SgQ9t681lhFtABXeiTF+{6#N71Ke!L$ zTZk9HlZLe|2>{>ZFNp7$F^q4DACj%b=7p2n2>jE0H`g=IykZ9P_cY!>_*bUC)5dq& z+Zk7AK9cNz!+hrdb4QgAAiiUCjQ`^y6@v(W@LuZ6sreh6t$5=CZU^{xA^$_|>*KYg z4=!{+u98=#%|1PBmw|Vo=Mn!)Ca2`@-1fbdUuAqqN#9-Ds(k2u$^IjUGktJ|JcP&g zC;rFzki5tT6aAclw`zRIK6I59zK<<1@_+4rwf23$=3 z;bH$H6aA2qc5DOF2W$Z8VVh}!{a)@$@uJ?W9OwxC5zk3p@Llik!u&h=JE`8R3?9h% zr~VReEv}z9tPREc%YuF&-cKLhcI3=G8CS@Eh{1nM2;-mpsdy`|oU0N1eO(ULtBB8} ziHvWWFMSw)Ncx2Kcg73+J6qf1#tQ!5neIpJZ;j%Fe1M)u{7>=|{DBX>k9JFgDs*59 z{6Vz9uXc+iF~AM{!~RJgZLLP>-I4K6@@jP!-p#(`W8=0e7s8-h*-jMvg{7g|ne2!B zxeX`l*5e_6`)m36cVGW#{$S5-pPq5-{YHP$S-g3AOaapm-mFyibYOf_f8^o7zz%|c zza;2K&tiU<^D5YP`eh-Wn-S4DO#w_FpIHOD=B?_ThE}ApaxG<>v9@ zhcNyr{t%y`L!ck}4bE1q9)xzo2Iqr9d!kb5NqpA}eByk~2zSPR7V%lhD~I)?8lxR8MRZ{Kdr*DyZ+ zUE}w^oByAC9>tG`^9cuT^K|%&M*Zl(Wt!F&Z{VG9Bhn9NyHz7+7H3@PivBF-jY@av zs+VViZ|dKze7&;I)6D(}W4vd6svq^T^)RKJu zeZimdh(GPf!1iol7zf0iq6?!_Z81qeHKj_WqgZ?P;qzr8?V;*?zR4uGoKEpC^8MAlq*=$$h+x z_Mara%=RBna>xE-;OYI?ev_fD!hU0|`Wfsu!+uiXej1Bzhz;9+Lh(k44F}KR_Xu3> zB$?U!sMKtK-v599&!h4_kNrQF3SwF@K8%Jj9IMyQ!t-fAS7JZfuY1TL#~u4|&3V%F zFxDTrSRo|&^|RT2tmvp5ciNA)XCd}uVZY7Ec@=|5-jB7cKdK(!?Q_`v+T~bLqWxBz z#x>CXy2#@pxL=}0m*j^5;)Sy*lKNj#}&vEIGZF_Otd8Rc9U#q5UZ3 zyV-uExD&#DH1X|2Y(LulvR%Udvztf!h5d(Cd}D9oY3vt`NI${$n_b!fzPm}2=jfjb zr~QN<&tdW}pS9SX_LnRl$o3CZ49b$x{(>oO9`29Y3TF=eQElUG)sIK*Mfm*+|FyQ( z<1cZno_{>-(`a}}9^aqs_gM^n%~-MD^;R7AbDS0AH9-C!vRJ+TIYU4c^+)~Zv_Iz% z_T%)~jQtwo>-8o5`vz=8`QF}h=B=oMtS$J0ew>5mSIs@~U3<41{dfjp%@*XqmD{={ z3-$D+Y`@JZbMJGfB@yvebMzY8Pw^p>ucl}@_E*)K_D*5)FQ1j;u110F!k5^73F1eC zdTRe>*dKv)S4MWy)yBO?vU0UCwx|rm-a94)th`pLfv9$xm@}i>`%B;((*l_KTt1d z(sGuPY}5}+m+h;WqsR6@lQBcs53;k*=BL6@KWf_eCaWht9)kLC90+rw`teq$$bYC& z5GZ~wDd5X?nFj_5{#T`va|LOr|7lCuXfzn2`(W`OB^=IO2id=b1zr7Ag_-Ji$$qI| zK%WU$)CG6D7ImVI_(l2d?_aO+-AJ1+w37FD{(f0(m}!6I$E@Cc{khkd zQT^=hScbR5e-NHc#g8a~ApcACkP1;{H*ZtY0FqawR)>mTL@^fr2pbF@9?#BZ^=)tB ze26E{Pek!6`s3uha-qJl>K{}epVG3lEOj-t^EDl(i=GY>>eU_a;eYS?lzUq7QLRLa z^{y(2zyJ1ess~N-=u&Q9Vj2HNW3&f^h5V%d#P7CQ zRL>#{BK-$6l7R5J z>|d!I+X?bveV+Uu%6kmyVZd0=r+5x=4W~9TT%CC%gx2#dC#imCbqsb>>S_I+ucq~R zs^`V}8W!w-ZGYTu;CY`!%WPUt#|YbW|IB`Ss+ZYNwbp?88TI*0wmwe&kJdlmpTyQb zZ@~Wns>gQ)Mm>!!_>2uzt8Jg_7Ujrv3ErZ+cKqCYYnu|AFUYOF`{ zwFq{rR^wOuvA)Pj>aqUFajEC9o=jMm$bX0b!OH2Qz*xW3R%$FITD#=%FT6L_tkGjV zSyR1*%?EclynGg|7Zto+l6wmE1ltk+XuT-Om#q&`{KI;&=4E@<9~A$ve5{djb5A>u zXnOvznbYA3Nqr}Fw(3KO2=jB8&!_wf^&RHF^=G&o_a}MxOlFw+gVt-#ti${b)@K|y z-=Ot7<8=d@pN&I4L-VoKN7#I9XRO#@xUIZ(l*ZfjE?vq`3%GI*n@=HsPV;NVEX%*KofZ2pS!RY_jGa>pDdKjpI| zf5BqNi}|RkdG>=z{=JxQru9cF-VsCd3*YF`eoVuBF6kGRZ@7w<{eh&uY$rG>P_jWKo+_f6#V|>^=sqN>e z51M&o0LJ4gb!>ZjUf=>3>-*S^?mOvkho`uce8_)2jt`^#=@TXNJR0xpsFAt#omy76 zujWPMyV!qv^SUsX$Mc;p>nYE_HP*%#Lh*c;^11lFzbo73l-53MU(F2UqbBXi0AW0G zYS(J#t{Nny5u*6PE;qV)Q~#(`>d^RRv|p}WPgg#z;O5rt=Iq{+z2sSj{?{TuC<$csbkzUI2Q*KO z-E`@|>X$B1|A(qosKE+O=y8@imWbce5v?^~K1x|Hy}+^ghk=R zkuPxCu!~~KXLozk^-v#`o%ZmQ@ci+m&Uk+hbl3&1txyk;kNZjCZ@&~_Jx0&F(D|lB z%-=3}#_Ph4=+dEh|4yvpHk3@scSuPhk%S*u$r0jsBn@!Yf1CGKgL z2s^YeDBFLVXqIj6bs@C8t9{sXwNhGrVaLQ*7q=koi$8cU9(Ub4B>2qZztAlF)aw5M D1ff2g diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/workshop_iblskyboxcm.exr b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/workshop_iblskyboxcm.exr new file mode 100644 index 0000000000..72937bd6d0 --- /dev/null +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/workshop_iblskyboxcm.exr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:010165af78bdafe61dad187b250598fa670325428271f5bcf9bd4d839f4cc1c0 +size 20114684 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/imageprocessing_files.cmake b/Gems/Atom/Asset/ImageProcessingAtom/Code/imageprocessing_files.cmake index e8bc033f08..55ccdf1d89 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/imageprocessing_files.cmake +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/imageprocessing_files.cmake @@ -129,6 +129,8 @@ set(FILES Source/Compressors/CryTextureSquisher/ColorBlockRGBA4x4s.h Source/Compressors/CryTextureSquisher/ColorBlockRGBA4x4c.h Source/Compressors/CryTextureSquisher/ColorTypes.h + Source/Compressors/ISPCTextureCompressor.cpp + Source/Compressors/ISPCTextureCompressor.h Source/Thumbnail/ImageThumbnail.cpp Source/Thumbnail/ImageThumbnail.h Source/Thumbnail/ImageThumbnailSystemComponent.cpp diff --git a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake index 7df364121b..ba63ef5d64 100644 --- a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake +++ b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake @@ -9,7 +9,6 @@ # shared by other platforms: ly_associate_package(PACKAGE_NAME ilmbase-2.3.0-rev4-multiplatform TARGETS ilmbase PACKAGE_HASH 97547fdf1fbc4d81b8ccf382261f8c25514ed3b3c4f8fd493f0a4fa873bba348) ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev11-multiplatform TARGETS assimplib PACKAGE_HASH 1a9113788b893ef4a2ee63ac01eb71b981a92894a5a51175703fa225f5804dec) -ly_associate_package(PACKAGE_NAME squish-ccr-20150601-rev3-multiplatform TARGETS squish-ccr PACKAGE_HASH c878c6c0c705e78403c397d03f5aa7bc87e5978298710e14d09c9daf951a83b3) ly_associate_package(PACKAGE_NAME ASTCEncoder-2017_11_14-rev2-multiplatform TARGETS ASTCEncoder PACKAGE_HASH c240ffc12083ee39a5ce9dc241de44d116e513e1e3e4cc1d05305e7aa3bdc326) ly_associate_package(PACKAGE_NAME md5-2.0-multiplatform TARGETS md5 PACKAGE_HASH 29e52ad22c78051551f78a40c2709594f0378762ae03b417adca3f4b700affdf) ly_associate_package(PACKAGE_NAME RapidJSON-1.1.0-rev1-multiplatform TARGETS RapidJSON PACKAGE_HASH 2f5e26ecf86c3b7a262753e7da69ac59928e78e9534361f3d00c1ad5879e4023) @@ -45,5 +44,7 @@ ly_associate_package(PACKAGE_NAME DirectXShaderCompilerDxc-1.6.2104-o3de-rev3-li ly_associate_package(PACKAGE_NAME SPIRVCross-2021.04.29-rev1-linux TARGETS SPIRVCross PACKAGE_HASH 7889ee5460a688e9b910c0168b31445c0079d363affa07b25d4c8aeb608a0b80) ly_associate_package(PACKAGE_NAME azslc-1.7.23-rev2-linux TARGETS azslc PACKAGE_HASH 1ba84d8321a566d35a1e9aa7400211ba8e6d1c11c08e4be3c93e6e74b8f7aef1) ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev1-linux TARGETS zlib PACKAGE_HASH 6418e93b9f4e6188f3b62cbd3a7822e1c4398a716e786d1522b809a727d08ba9) +ly_associate_package(PACKAGE_NAME squish-ccr-deb557d-rev1-linux TARGETS squish-ccr PACKAGE_HASH 85fecafbddc6a41a27c5f59ed4a5dfb123a94cb4666782cf26e63c0a4724c530) +ly_associate_package(PACKAGE_NAME ISPCTexComp-36b80aa-rev1-linux TARGETS ISPCTexComp PACKAGE_HASH 065fd12abe4247dde247330313763cf816c3375c221da030bdec35024947f259) diff --git a/cmake/3rdParty/Platform/Linux/squish-ccr_linux.cmake b/cmake/3rdParty/Platform/Linux/squish-ccr_linux.cmake deleted file mode 100644 index 80a0776765..0000000000 --- a/cmake/3rdParty/Platform/Linux/squish-ccr_linux.cmake +++ /dev/null @@ -1,9 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(SQUISH-CCR_LIBS ${BASE_PATH}/lib/Linux/Release/libsquish-ccr.a) \ No newline at end of file diff --git a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake index 353956a495..be89612c1b 100644 --- a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake +++ b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake @@ -9,7 +9,6 @@ # shared by other platforms: ly_associate_package(PACKAGE_NAME ilmbase-2.3.0-rev4-multiplatform TARGETS ilmbase PACKAGE_HASH 97547fdf1fbc4d81b8ccf382261f8c25514ed3b3c4f8fd493f0a4fa873bba348) ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev11-multiplatform TARGETS assimplib PACKAGE_HASH 1a9113788b893ef4a2ee63ac01eb71b981a92894a5a51175703fa225f5804dec) -ly_associate_package(PACKAGE_NAME squish-ccr-20150601-rev3-multiplatform TARGETS squish-ccr PACKAGE_HASH c878c6c0c705e78403c397d03f5aa7bc87e5978298710e14d09c9daf951a83b3) ly_associate_package(PACKAGE_NAME ASTCEncoder-2017_11_14-rev2-multiplatform TARGETS ASTCEncoder PACKAGE_HASH c240ffc12083ee39a5ce9dc241de44d116e513e1e3e4cc1d05305e7aa3bdc326) ly_associate_package(PACKAGE_NAME md5-2.0-multiplatform TARGETS md5 PACKAGE_HASH 29e52ad22c78051551f78a40c2709594f0378762ae03b417adca3f4b700affdf) ly_associate_package(PACKAGE_NAME RapidJSON-1.1.0-rev1-multiplatform TARGETS RapidJSON PACKAGE_HASH 2f5e26ecf86c3b7a262753e7da69ac59928e78e9534361f3d00c1ad5879e4023) @@ -43,3 +42,6 @@ ly_associate_package(PACKAGE_NAME OpenSSL-1.1.1b-rev1-mac ly_associate_package(PACKAGE_NAME qt-5.15.2-rev5-mac TARGETS Qt PACKAGE_HASH 9d25918351898b308ded3e9e571fff6f26311b2071aeafd00dd5b249fdf53f7e) ly_associate_package(PACKAGE_NAME libsamplerate-0.2.1-rev2-mac TARGETS libsamplerate PACKAGE_HASH b912af40c0ac197af9c43d85004395ba92a6a859a24b7eacd920fed5854a97fe) ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev1-mac TARGETS zlib PACKAGE_HASH 7fd8a77b3598423d9d6be5f8c60d52aecf346ab4224f563a5282db283aa0da02) +ly_associate_package(PACKAGE_NAME squish-ccr-deb557d-rev1-mac TARGETS squish-ccr PACKAGE_HASH 155bfbfa17c19a9cd2ef025de14c5db598f4290045d5b0d83ab58cb345089a77) +ly_associate_package(PACKAGE_NAME ISPCTexComp-36b80aa-rev1-mac TARGETS ISPCTexComp PACKAGE_HASH 8a4e93277b8face6ea2fd57c6d017bdb55643ed3d6387110bc5f6b3b884dd169) + diff --git a/cmake/3rdParty/Platform/Mac/squish-ccr_mac.cmake b/cmake/3rdParty/Platform/Mac/squish-ccr_mac.cmake deleted file mode 100644 index 740e630570..0000000000 --- a/cmake/3rdParty/Platform/Mac/squish-ccr_mac.cmake +++ /dev/null @@ -1,9 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(SQUISH-CCR_LIBS ${BASE_PATH}/lib/Mac/Release/libsquish-ccr.a) \ No newline at end of file diff --git a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake index 2aded62bcd..2655b7247f 100644 --- a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake @@ -9,7 +9,6 @@ # shared by other platforms: ly_associate_package(PACKAGE_NAME ilmbase-2.3.0-rev4-multiplatform TARGETS ilmbase PACKAGE_HASH 97547fdf1fbc4d81b8ccf382261f8c25514ed3b3c4f8fd493f0a4fa873bba348) ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev11-multiplatform TARGETS assimplib PACKAGE_HASH 1a9113788b893ef4a2ee63ac01eb71b981a92894a5a51175703fa225f5804dec) -ly_associate_package(PACKAGE_NAME squish-ccr-20150601-rev3-multiplatform TARGETS squish-ccr PACKAGE_HASH c878c6c0c705e78403c397d03f5aa7bc87e5978298710e14d09c9daf951a83b3) ly_associate_package(PACKAGE_NAME ASTCEncoder-2017_11_14-rev2-multiplatform TARGETS ASTCEncoder PACKAGE_HASH c240ffc12083ee39a5ce9dc241de44d116e513e1e3e4cc1d05305e7aa3bdc326) ly_associate_package(PACKAGE_NAME md5-2.0-multiplatform TARGETS md5 PACKAGE_HASH 29e52ad22c78051551f78a40c2709594f0378762ae03b417adca3f4b700affdf) ly_associate_package(PACKAGE_NAME RapidJSON-1.1.0-rev1-multiplatform TARGETS RapidJSON PACKAGE_HASH 2f5e26ecf86c3b7a262753e7da69ac59928e78e9534361f3d00c1ad5879e4023) @@ -51,3 +50,5 @@ ly_associate_package(PACKAGE_NAME civetweb-1.8-rev1-windows ly_associate_package(PACKAGE_NAME OpenSSL-1.1.1b-rev2-windows TARGETS OpenSSL PACKAGE_HASH 9af1c50343f89146b4053101a7aeb20513319a3fe2f007e356d7ce25f9241040) ly_associate_package(PACKAGE_NAME Crashpad-0.8.0-rev1-windows TARGETS Crashpad PACKAGE_HASH d162aa3070147bc0130a44caab02c5fe58606910252caf7f90472bd48d4e31e2) ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev1-windows TARGETS zlib PACKAGE_HASH 6fb46a0ef8c8614cde3517b50fca47f2a6d1fd059b21f3b8ff13e635ca7f2fa6) +ly_associate_package(PACKAGE_NAME squish-ccr-deb557d-rev1-windows TARGETS squish-ccr PACKAGE_HASH 5c3d9fa491e488ccaf802304ad23b932268a2b2846e383f088779962af2bfa84) +ly_associate_package(PACKAGE_NAME ISPCTexComp-36b80aa-rev1-windows TARGETS ISPCTexComp PACKAGE_HASH b6fa6ea28a2808a9a5524c72c37789c525925e435770f2d94eb2d387360fa2d0) diff --git a/cmake/3rdParty/Platform/Windows/squish-ccr_windows.cmake b/cmake/3rdParty/Platform/Windows/squish-ccr_windows.cmake deleted file mode 100644 index fb94cb6969..0000000000 --- a/cmake/3rdParty/Platform/Windows/squish-ccr_windows.cmake +++ /dev/null @@ -1,9 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(SQUISH-CCR_LIBS ${BASE_PATH}/lib/Windows/Release/squish-ccr.lib) \ No newline at end of file