From ebf9c9c045e7a191e73373eaf553af10070b3641 Mon Sep 17 00:00:00 2001 From: walbourn Date: Tue, 18 Oct 2022 23:28:47 -0700 Subject: [PATCH 1/8] [directxmesh, directxtex, directxtk, directxtk12, uvatlas] updated for October 2022 releases --- ports/directxmesh/portfile.cmake | 14 +- ports/directxmesh/vcpkg.json | 2 +- ports/directxtex/enable_openexr_support.patch | 764 ++++++++++++++++-- ports/directxtex/portfile.cmake | 66 +- ports/directxtex/vcpkg.json | 3 +- ports/directxtk/portfile.cmake | 22 +- ports/directxtk/vcpkg.json | 2 +- ports/directxtk12/portfile.cmake | 22 +- ports/directxtk12/vcpkg.json | 2 +- ports/uvatlas/portfile.cmake | 14 +- ports/uvatlas/vcpkg.json | 2 +- 11 files changed, 751 insertions(+), 162 deletions(-) diff --git a/ports/directxmesh/portfile.cmake b/ports/directxmesh/portfile.cmake index 18ca6d6f0f669e..f1670f221f8f03 100644 --- a/ports/directxmesh/portfile.cmake +++ b/ports/directxmesh/portfile.cmake @@ -1,10 +1,12 @@ +set(DIRECTXMESH_TAG oct2022) + vcpkg_check_linkage(ONLY_STATIC_LIBRARY) vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO Microsoft/DirectXMesh - REF jul2022 - SHA512 a356aaa85c3af745cdef2126a999a12e4e99d28a71564eeb56463afc3a99cc74e0bfa8505da90170224855cea897af34be3ea28dde3f5c3841f6fcb93f7b5e25 + REF ${DIRECTXMESH_TAG} + SHA512 05bc2460a35ecb13c766d2e66546cfc5b589f22a60ce236730ce865eba2fe57caffae6b730bad2491c9c89bc3472e5f7437d197c8bb9f9f80a055707681943a1 HEAD_REF main ) @@ -35,9 +37,9 @@ vcpkg_cmake_config_fixup(CONFIG_PATH share/directxmesh) if((VCPKG_HOST_IS_WINDOWS) AND (VCPKG_TARGET_ARCHITECTURE MATCHES x64)) vcpkg_download_distfile( MESHCONVERT_EXE - URLS "https://github.com/Microsoft/DirectXMesh/releases/download/jul2022/meshconvert.exe" - FILENAME "meshconvert-jul2022.exe" - SHA512 881de2e574c129c1a91f36d93c268ebc2b28d4809d4d6b79f075d3cd728cf7cfdd22541e06a764c35ea2be89666769daf3b98fdcaf1b9334a52ff6672f51705a + URLS "https://github.com/Microsoft/DirectXMesh/releases/download/${DIRECTXMESH_TAG}/meshconvert.exe" + FILENAME "meshconvert-${DIRECTXMESH_TAG}.exe" + SHA512 471f39dffca6b2fcfb439e94c9fbec3721bf8792635cdf67a0ec3e136445d83dc9d0abdfa3908b2f2aea969fb69e8bc8391eababc92305060a04a577e960a591 ) file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/directxmesh/") @@ -46,7 +48,7 @@ if((VCPKG_HOST_IS_WINDOWS) AND (VCPKG_TARGET_ARCHITECTURE MATCHES x64)) ${MESHCONVERT_EXE} DESTINATION ${CURRENT_PACKAGES_DIR}/tools/directxmesh/) - file(RENAME ${CURRENT_PACKAGES_DIR}/tools/directxmesh/meshconvert-jul2022.exe ${CURRENT_PACKAGES_DIR}/tools/directxmesh/meshconvert.exe) + file(RENAME ${CURRENT_PACKAGES_DIR}/tools/directxmesh/meshconvert-${DIRECTXMESH_TAG}.exe ${CURRENT_PACKAGES_DIR}/tools/directxmesh/meshconvert.exe) elseif((VCPKG_TARGET_IS_WINDOWS) AND (NOT VCPKG_TARGET_IS_UWP)) diff --git a/ports/directxmesh/vcpkg.json b/ports/directxmesh/vcpkg.json index 036871dbc4fcc7..8d1e553cea023c 100644 --- a/ports/directxmesh/vcpkg.json +++ b/ports/directxmesh/vcpkg.json @@ -1,6 +1,6 @@ { "name": "directxmesh", - "version-date": "2022-07-29", + "version-date": "2022-10-17", "description": "DirectXMesh geometry processing library", "homepage": "https://github.com/Microsoft/DirectXMesh", "documentation": "https://github.com/microsoft/DirectXMesh/wiki", diff --git a/ports/directxtex/enable_openexr_support.patch b/ports/directxtex/enable_openexr_support.patch index 97c067c0882c04..bdd7e9941570b7 100644 --- a/ports/directxtex/enable_openexr_support.patch +++ b/ports/directxtex/enable_openexr_support.patch @@ -1,87 +1,677 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index fc0a3e8..7447741 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -156,7 +156,7 @@ target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11) - - if(ENABLE_OPENEXR_SUPPORT) - find_package(OpenEXR REQUIRED) -- target_include_directories(${PROJECT_NAME} PRIVATE ${OPENEXR_INCLUDE_DIRS}/OpenEXR) -+ target_link_libraries(${PROJECT_NAME} PRIVATE OpenEXR::OpenEXR) - endif() - - if ((${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16") AND (NOT MINGW)) -@@ -299,6 +299,7 @@ if(MSVC) - endif() - - if((MSVC_VERSION GREATER_EQUAL 1928) AND (CMAKE_SIZEOF_VOID_P EQUAL 8) -+ AND NOT ENABLE_OPENEXR_SUPPORT - AND ((NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0))) - foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME}) - target_compile_options(${t} PRIVATE "$<$>:/guard:ehcont>") -diff --git a/DirectXTexEXR.cpp b/DirectXTexEXR.cpp -index 17bd171..825cfe4 100644 ---- a/DirectXTex/DirectXTexEXR.cpp -+++ b/DirectXTex/DirectXTexEXR.cpp -@@ -8,7 +8,7 @@ - //-------------------------------------------------------------------------------------- - - //Uncomment if you add DirectXTexEXR to your copy of the DirectXTex library --//#include "DirectXTexP.h" -+#include "DirectXTexP.h" - - #include "DirectXTexEXR.h" - -@@ -57,7 +57,7 @@ using namespace DirectX; - using PackedVector::XMHALF4; - - // Comment out this first anonymous namespace if you add the include of DirectXTexP.h above --#ifdef WIN32 -+#if 0 - namespace - { - struct handle_closer { void operator()(HANDLE h) noexcept { assert(h != INVALID_HANDLE_VALUE); if (h) CloseHandle(h); } }; -@@ -161,7 +161,7 @@ namespace - return result.QuadPart >= m_EOF; - } - -- Imf::Int64 tellg() override -+ uint64_t tellg() override - { - const LARGE_INTEGER dist = {}; - LARGE_INTEGER result; -@@ -169,10 +169,10 @@ namespace - { - throw com_exception(HRESULT_FROM_WIN32(GetLastError())); - } -- return static_cast(result.QuadPart); -+ return static_cast(result.QuadPart); - } - -- void seekg(Imf::Int64 pos) override -+ void seekg(uint64_t pos) override - { - LARGE_INTEGER dist; - dist.QuadPart = static_cast(pos); -@@ -213,7 +213,7 @@ namespace - } - } - -- Imf::Int64 tellp() override -+ uint64_t tellp() override - { - const LARGE_INTEGER dist = {}; - LARGE_INTEGER result; -@@ -221,10 +221,10 @@ namespace - { - throw com_exception(HRESULT_FROM_WIN32(GetLastError())); - } -- return static_cast(result.QuadPart); -+ return static_cast(result.QuadPart); - } - -- void seekp(Imf::Int64 pos) override -+ void seekp(uint64_t pos) override - { - LARGE_INTEGER dist; - dist.QuadPart = static_cast(pos); +diff --git a/DirectXTex/DirectXTexEXR.cpp b/DirectXTex/DirectXTexEXR.cpp +new file mode 100644 +index 0000000..537fb9c +--- /dev/null ++++ b/DirectXTex/DirectXTexEXR.cpp +@@ -0,0 +1,636 @@ ++//-------------------------------------------------------------------------------------- ++// File: DirectXTexEXR.cpp ++// ++// DirectXTex Auxillary functions for using the OpenEXR library ++// ++// Copyright (c) Microsoft Corporation. ++// Licensed under the MIT License. ++//-------------------------------------------------------------------------------------- ++ ++//Uncomment if you add DirectXTexEXR to your copy of the DirectXTex library ++#include "DirectXTexP.h" ++ ++#include "DirectXTexEXR.h" ++ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++// ++// Requires the OpenEXR library and ZLIB ++// ++ ++#ifdef __clang__ ++#pragma clang diagnostic ignored "-Wswitch-enum" ++ ++#pragma clang diagnostic push ++#pragma clang diagnostic ignored "-Wdeprecated-declarations" ++#pragma clang diagnostic ignored "-Wdeprecated-dynamic-exception-spec" ++#pragma clang diagnostic ignored "-Wfloat-equal" ++#pragma clang diagnostic ignored "-Wimplicit-int-conversion" ++#pragma clang diagnostic ignored "-Wlanguage-extension-token" ++#pragma clang diagnostic ignored "-Wold-style-cast" ++#pragma clang diagnostic ignored "-Wreserved-id-macro" ++#pragma clang diagnostic ignored "-Wshadow-field-in-constructor" ++#pragma clang diagnostic ignored "-Wsign-conversion" ++#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" ++#endif ++ ++#pragma warning(push) ++#pragma warning(disable : 4244 4996) ++#include ++#include ++#pragma warning(pop) ++ ++#ifdef __clang__ ++#pragma clang diagnostic pop ++#endif ++ ++static_assert(sizeof(Imf::Rgba) == 8, "Mismatch size"); ++ ++using namespace DirectX; ++using PackedVector::XMHALF4; ++ ++// Comment out this first anonymous namespace if you add the include of DirectXTexP.h above ++#if 0 ++namespace ++{ ++ struct handle_closer { void operator()(HANDLE h) noexcept { assert(h != INVALID_HANDLE_VALUE); if (h) CloseHandle(h); } }; ++ ++ using ScopedHandle = std::unique_ptr; ++ ++ inline HANDLE safe_handle(HANDLE h) noexcept { return (h == INVALID_HANDLE_VALUE) ? nullptr : h; } ++ ++ class auto_delete_file ++ { ++ public: ++ auto_delete_file(HANDLE hFile) noexcept : m_handle(hFile) {} ++ ++ auto_delete_file(const auto_delete_file&) = delete; ++ auto_delete_file& operator=(const auto_delete_file&) = delete; ++ ++ auto_delete_file(auto_delete_file&&) = delete; ++ auto_delete_file& operator=(auto_delete_file&&) = delete; ++ ++ ~auto_delete_file() ++ { ++ if (m_handle) ++ { ++ FILE_DISPOSITION_INFO info = {}; ++ info.DeleteFile = TRUE; ++ std::ignore = SetFileInformationByHandle(m_handle, FileDispositionInfo, &info, sizeof(info)); ++ } ++ } ++ ++ void clear() noexcept { m_handle = nullptr; } ++ ++ private: ++ HANDLE m_handle; ++ }; ++} ++#endif ++ ++#ifdef _WIN32 ++namespace ++{ ++ class com_exception : public std::exception ++ { ++ public: ++ com_exception(HRESULT hr) noexcept : result(hr) {} ++ ++ const char* what() const noexcept override ++ { ++ static char s_str[64] = {}; ++ sprintf_s(s_str, "Failure with HRESULT of %08X", static_cast(result)); ++ return s_str; ++ } ++ ++ HRESULT get_result() const noexcept { return result; } ++ ++ private: ++ HRESULT result; ++ }; ++ ++ class InputStream : public Imf::IStream ++ { ++ public: ++ InputStream(HANDLE hFile, const char fileName[]) : ++ IStream(fileName), m_hFile(hFile) ++ { ++ const LARGE_INTEGER dist = {}; ++ LARGE_INTEGER result; ++ if (!SetFilePointerEx(m_hFile, dist, &result, FILE_END)) ++ { ++ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); ++ } ++ ++ m_EOF = result.QuadPart; ++ ++ if (!SetFilePointerEx(m_hFile, dist, nullptr, FILE_BEGIN)) ++ { ++ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); ++ } ++ } ++ ++ InputStream(const InputStream&) = delete; ++ InputStream& operator = (const InputStream&) = delete; ++ ++ InputStream(InputStream&&) = delete; ++ InputStream& operator=(InputStream&&) = delete; ++ ++ bool read(char c[], int n) override ++ { ++ DWORD bytesRead; ++ if (!ReadFile(m_hFile, c, static_cast(n), &bytesRead, nullptr)) ++ { ++ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); ++ } ++ ++ const LARGE_INTEGER dist = {}; ++ LARGE_INTEGER result; ++ if (!SetFilePointerEx(m_hFile, dist, &result, FILE_CURRENT)) ++ { ++ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); ++ } ++ ++ return result.QuadPart >= m_EOF; ++ } ++ ++ uint64_t tellg() override ++ { ++ const LARGE_INTEGER dist = {}; ++ LARGE_INTEGER result; ++ if (!SetFilePointerEx(m_hFile, dist, &result, FILE_CURRENT)) ++ { ++ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); ++ } ++ return static_cast(result.QuadPart); ++ } ++ ++ void seekg(uint64_t pos) override ++ { ++ LARGE_INTEGER dist; ++ dist.QuadPart = static_cast(pos); ++ if (!SetFilePointerEx(m_hFile, dist, nullptr, FILE_BEGIN)) ++ { ++ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); ++ } ++ } ++ ++ void clear() override ++ { ++ SetLastError(0); ++ } ++ ++ private: ++ HANDLE m_hFile; ++ LONGLONG m_EOF; ++ }; ++ ++ class OutputStream : public Imf::OStream ++ { ++ public: ++ OutputStream(HANDLE hFile, const char fileName[]) : ++ OStream(fileName), m_hFile(hFile) {} ++ ++ OutputStream(const OutputStream&) = delete; ++ OutputStream& operator = (const OutputStream&) = delete; ++ ++ OutputStream(OutputStream&&) = delete; ++ OutputStream& operator=(OutputStream&&) = delete; ++ ++ void write(const char c[], int n) override ++ { ++ DWORD bytesWritten; ++ if (!WriteFile(m_hFile, c, static_cast(n), &bytesWritten, nullptr)) ++ { ++ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); ++ } ++ } ++ ++ uint64_t tellp() override ++ { ++ const LARGE_INTEGER dist = {}; ++ LARGE_INTEGER result; ++ if (!SetFilePointerEx(m_hFile, dist, &result, FILE_CURRENT)) ++ { ++ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); ++ } ++ return static_cast(result.QuadPart); ++ } ++ ++ void seekp(uint64_t pos) override ++ { ++ LARGE_INTEGER dist; ++ dist.QuadPart = static_cast(pos); ++ if (!SetFilePointerEx(m_hFile, dist, nullptr, FILE_BEGIN)) ++ { ++ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); ++ } ++ } ++ ++ private: ++ HANDLE m_hFile; ++ }; ++} ++#endif // _WIN32 ++ ++ ++//===================================================================================== ++// Entry-points ++//===================================================================================== ++ ++//------------------------------------------------------------------------------------- ++// Obtain metadata from EXR file on disk ++//------------------------------------------------------------------------------------- ++_Use_decl_annotations_ ++HRESULT DirectX::GetMetadataFromEXRFile(const wchar_t* szFile, TexMetadata& metadata) ++{ ++ if (!szFile) ++ return E_INVALIDARG; ++ ++#ifdef _WIN32 ++ char fileName[MAX_PATH] = {}; ++ const int result = WideCharToMultiByte(CP_UTF8, 0, szFile, -1, fileName, MAX_PATH, nullptr, nullptr); ++ if (result <= 0) ++ { ++ *fileName = 0; ++ } ++ ++#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) ++ ScopedHandle hFile(safe_handle(CreateFile2( ++ szFile, ++ GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, ++ nullptr))); ++#else ++ ScopedHandle hFile(safe_handle(CreateFileW( ++ szFile, ++ GENERIC_READ, FILE_SHARE_READ, ++ nullptr, ++ OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, ++ nullptr))); ++#endif ++ if (!hFile) ++ { ++ return HRESULT_FROM_WIN32(GetLastError()); ++ } ++ ++ InputStream stream(hFile.get(), fileName); ++#else ++ std::wstring wFileName(szFile); ++ std::string fileName(wFileName.cbegin(), wFileName.cend()); ++#endif ++ ++ HRESULT hr = S_OK; ++ ++ try ++ { ++#ifdef _WIN32 ++ Imf::RgbaInputFile file(stream); ++#else ++ Imf::RgbaInputFile file(fileName.c_str()); ++#endif ++ ++ const auto dw = file.dataWindow(); ++ ++ const int width = dw.max.x - dw.min.x + 1; ++ const int height = dw.max.y - dw.min.y + 1; ++ ++ if (width < 1 || height < 1) ++ return E_FAIL; ++ ++ metadata.width = static_cast(width); ++ metadata.height = static_cast(height); ++ metadata.depth = metadata.arraySize = metadata.mipLevels = 1; ++ metadata.format = DXGI_FORMAT_R16G16B16A16_FLOAT; ++ metadata.dimension = TEX_DIMENSION_TEXTURE2D; ++ } ++#ifdef _WIN32 ++ catch (const com_exception& exc) ++ { ++#ifdef _DEBUG ++ OutputDebugStringA(exc.what()); ++#endif ++ hr = exc.get_result(); ++ } ++#endif ++#if defined(_WIN32) && defined(_DEBUG) ++ catch (const std::exception& exc) ++ { ++ OutputDebugStringA(exc.what()); ++ hr = E_FAIL; ++ } ++#else ++ catch (const std::exception&) ++ { ++ hr = E_FAIL; ++ } ++#endif ++ catch (...) ++ { ++ hr = E_UNEXPECTED; ++ } ++ ++ return hr; ++} ++ ++ ++//------------------------------------------------------------------------------------- ++// Load a EXR file from disk ++//------------------------------------------------------------------------------------- ++_Use_decl_annotations_ ++HRESULT DirectX::LoadFromEXRFile(const wchar_t* szFile, TexMetadata* metadata, ScratchImage& image) ++{ ++ if (!szFile) ++ return E_INVALIDARG; ++ ++ image.Release(); ++ ++ if (metadata) ++ { ++ memset(metadata, 0, sizeof(TexMetadata)); ++ } ++ ++#ifdef _WIN32 ++ char fileName[MAX_PATH] = {}; ++ const int result = WideCharToMultiByte(CP_UTF8, 0, szFile, -1, fileName, MAX_PATH, nullptr, nullptr); ++ if (result <= 0) ++ { ++ *fileName = 0; ++ } ++ ++#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) ++ ScopedHandle hFile(safe_handle(CreateFile2( ++ szFile, ++ GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, ++ nullptr))); ++#else ++ ScopedHandle hFile(safe_handle(CreateFileW( ++ szFile, ++ GENERIC_READ, FILE_SHARE_READ, ++ nullptr, ++ OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, ++ nullptr))); ++#endif ++ if (!hFile) ++ { ++ return HRESULT_FROM_WIN32(GetLastError()); ++ } ++ ++ InputStream stream(hFile.get(), fileName); ++#else ++ std::wstring wFileName(szFile); ++ std::string fileName(wFileName.cbegin(), wFileName.cend()); ++#endif ++ ++ HRESULT hr = S_OK; ++ ++ try ++ { ++#ifdef _WIN32 ++ Imf::RgbaInputFile file(stream); ++#else ++ Imf::RgbaInputFile file(fileName.c_str()); ++#endif ++ ++ auto const dw = file.dataWindow(); ++ ++ const int width = dw.max.x - dw.min.x + 1; ++ const int height = dw.max.y - dw.min.y + 1; ++ ++ if (width < 1 || height < 1) ++ return E_FAIL; ++ ++ if (metadata) ++ { ++ metadata->width = static_cast(width); ++ metadata->height = static_cast(height); ++ metadata->depth = metadata->arraySize = metadata->mipLevels = 1; ++ metadata->format = DXGI_FORMAT_R16G16B16A16_FLOAT; ++ metadata->dimension = TEX_DIMENSION_TEXTURE2D; ++ } ++ ++ hr = image.Initialize2D(DXGI_FORMAT_R16G16B16A16_FLOAT, ++ static_cast(width), static_cast(height), 1u, 1u); ++ if (FAILED(hr)) ++ return hr; ++ ++ file.setFrameBuffer(reinterpret_cast(image.GetPixels()) - dw.min.x - dw.min.y * width, 1, static_cast(width)); ++ file.readPixels(dw.min.y, dw.max.y); ++ } ++#ifdef _WIN32 ++ catch (const com_exception& exc) ++ { ++#ifdef _DEBUG ++ OutputDebugStringA(exc.what()); ++#endif ++ hr = exc.get_result(); ++ } ++#endif ++#if defined(_WIN32) && defined(_DEBUG) ++ catch (const std::exception& exc) ++ { ++ OutputDebugStringA(exc.what()); ++ hr = E_FAIL; ++ } ++#else ++ catch (const std::exception&) ++ { ++ hr = E_FAIL; ++ } ++#endif ++ catch (...) ++ { ++ hr = E_UNEXPECTED; ++ } ++ ++ if (FAILED(hr)) ++ { ++ image.Release(); ++ } ++ ++ return hr; ++} ++ ++ ++//------------------------------------------------------------------------------------- ++// Save a EXR file to disk ++//------------------------------------------------------------------------------------- ++_Use_decl_annotations_ ++HRESULT DirectX::SaveToEXRFile(const Image& image, const wchar_t* szFile) ++{ ++ if (!szFile) ++ return E_INVALIDARG; ++ ++ if (!image.pixels) ++ return E_POINTER; ++ ++ if (image.width > INT32_MAX || image.height > INT32_MAX) ++ return /* HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) */ static_cast(0x80070032L); ++ ++ switch (image.format) ++ { ++ case DXGI_FORMAT_R16G16B16A16_FLOAT: ++ if ((image.rowPitch % 8) > 0) ++ return E_FAIL; ++ break; ++ ++ case DXGI_FORMAT_R32G32B32A32_FLOAT: ++ case DXGI_FORMAT_R32G32B32_FLOAT: ++ break; ++ ++ default: ++ return /* HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) */ static_cast(0x80070032L); ++ } ++ ++#ifdef _WIN32 ++ char fileName[MAX_PATH] = {}; ++ const int result = WideCharToMultiByte(CP_UTF8, 0, szFile, -1, fileName, MAX_PATH, nullptr, nullptr); ++ if (result <= 0) ++ { ++ *fileName = 0; ++ } ++ // Create file and write header ++#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) ++ ScopedHandle hFile(safe_handle(CreateFile2( ++ szFile, ++ GENERIC_WRITE, 0, CREATE_ALWAYS, ++ nullptr))); ++#else ++ ScopedHandle hFile(safe_handle(CreateFileW( ++ szFile, ++ GENERIC_WRITE, 0, ++ nullptr, ++ CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, ++ nullptr))); ++#endif ++ if (!hFile) ++ { ++ return HRESULT_FROM_WIN32(GetLastError()); ++ } ++ ++ auto_delete_file delonfail(hFile.get()); ++ ++ OutputStream stream(hFile.get(), fileName); ++#else ++ std::wstring wFileName(szFile); ++ std::string fileName(wFileName.cbegin(), wFileName.cend()); ++#endif ++ ++ HRESULT hr = S_OK; ++ ++ try ++ { ++ const int width = static_cast(image.width); ++ const int height = static_cast(image.height); ++ ++#ifdef _WIN32 ++ Imf::RgbaOutputFile file(stream, Imf::Header(width, height), Imf::WRITE_RGBA); ++#else ++ Imf::RgbaOutputFile file(fileName.c_str(), Imf::Header(width, height), Imf::WRITE_RGBA); ++#endif ++ ++ if (image.format == DXGI_FORMAT_R16G16B16A16_FLOAT) ++ { ++ file.setFrameBuffer(reinterpret_cast(image.pixels), 1, image.rowPitch / 8); ++ file.writePixels(height); ++ } ++ else ++ { ++ const uint64_t bytes = image.width * image.height; ++ ++ if (bytes > UINT32_MAX) ++ { ++ return /* HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW) */ static_cast(0x80070216L); ++ } ++ ++ std::unique_ptr temp(new (std::nothrow) XMHALF4[static_cast(bytes)]); ++ if (!temp) ++ return E_OUTOFMEMORY; ++ ++ file.setFrameBuffer(reinterpret_cast(temp.get()), 1, image.width); ++ ++ auto sPtr = image.pixels; ++ auto dPtr = temp.get(); ++ if (image.format == DXGI_FORMAT_R32G32B32A32_FLOAT) ++ { ++ for (int j = 0; j < height; ++j) ++ { ++ auto srcPtr = reinterpret_cast(sPtr); ++ auto destPtr = dPtr; ++ for (int k = 0; k < width; ++k, ++srcPtr, ++destPtr) ++ { ++ const XMVECTOR v = XMLoadFloat4(srcPtr); ++ PackedVector::XMStoreHalf4(destPtr, v); ++ } ++ ++ sPtr += image.rowPitch; ++ dPtr += width; ++ ++ file.writePixels(1); ++ } ++ } ++ else ++ { ++ assert(image.format == DXGI_FORMAT_R32G32B32_FLOAT); ++ ++ for (int j = 0; j < height; ++j) ++ { ++ auto srcPtr = reinterpret_cast(sPtr); ++ auto destPtr = dPtr; ++ for (int k = 0; k < width; ++k, ++srcPtr, ++destPtr) ++ { ++ XMVECTOR v = XMLoadFloat3(srcPtr); ++ v = XMVectorSelect(g_XMIdentityR3, v, g_XMSelect1110); ++ PackedVector::XMStoreHalf4(destPtr, v); ++ } ++ ++ sPtr += image.rowPitch; ++ dPtr += width; ++ ++ file.writePixels(1); ++ } ++ } ++ } ++ } ++#ifdef _WIN32 ++ catch (const com_exception& exc) ++ { ++#ifdef _DEBUG ++ OutputDebugStringA(exc.what()); ++#endif ++ hr = exc.get_result(); ++ } ++#endif ++#if defined(_WIN32) && defined(_DEBUG) ++ catch (const std::exception& exc) ++ { ++ OutputDebugStringA(exc.what()); ++ hr = E_FAIL; ++ } ++#else ++ catch (const std::exception&) ++ { ++ hr = E_FAIL; ++ } ++#endif ++ catch (...) ++ { ++ hr = E_UNEXPECTED; ++ } ++ ++ if (FAILED(hr)) ++ return hr; ++ ++#ifdef _WIN32 ++ delonfail.clear(); ++#endif ++ ++ return S_OK; ++} +diff --git a/DirectXTex/DirectXTexEXR.h b/DirectXTex/DirectXTexEXR.h +new file mode 100644 +index 0000000..bec66e8 +--- /dev/null ++++ b/DirectXTex/DirectXTexEXR.h +@@ -0,0 +1,26 @@ ++//-------------------------------------------------------------------------------------- ++// File: DirectXTexEXR.h ++// ++// DirectXTex Auxillary functions for using the OpenEXR library ++// ++// Copyright (c) Microsoft Corporation. ++// Licensed under the MIT License. ++//-------------------------------------------------------------------------------------- ++ ++#pragma once ++ ++#include "DirectXTex.h" ++ ++ ++namespace DirectX ++{ ++ HRESULT __cdecl GetMetadataFromEXRFile( ++ _In_z_ const wchar_t* szFile, ++ _Out_ TexMetadata& metadata); ++ ++ HRESULT __cdecl LoadFromEXRFile( ++ _In_z_ const wchar_t* szFile, ++ _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); ++ ++ HRESULT __cdecl SaveToEXRFile(_In_ const Image& image, _In_z_ const wchar_t* szFile); ++} +-- +2.37.1.windows.1 + diff --git a/ports/directxtex/portfile.cmake b/ports/directxtex/portfile.cmake index d007dd07db9385..ebda728e2213b0 100644 --- a/ports/directxtex/portfile.cmake +++ b/ports/directxtex/portfile.cmake @@ -1,37 +1,29 @@ +set(DIRECTXTEX_TAG oct2022) +set(DIRECTXTEX_HASH e90f7b18cf088a090f33f95759367d96e7b13e52f8db0688422d924405c4cada6a8d230fe829f832886f9ce85eb068d1c187f212a36f47d90f4fb3e171c55607) + vcpkg_check_linkage(ONLY_STATIC_LIBRARY) if(VCPKG_TARGET_IS_MINGW) message(NOTICE "Building ${PORT} for MinGW requires the HLSL Compiler fxc.exe also be in the PATH. See https://aka.ms/windowssdk.") endif() -vcpkg_from_github( - OUT_SOURCE_PATH SOURCE_PATH - REPO Microsoft/DirectXTex - REF jul2022 - SHA512 21b21dfff8bbedabfcb7d3694d750370304382ce0a9847c4ff3c153a3b6a6c5b61fc4051eb95b210e186107092488572757c43e1ca37319e763d49b0bca49dd4 - HEAD_REF main -) - if("openexr" IN_LIST FEATURES) - vcpkg_download_distfile( - DIRECTXTEX_EXR_HEADER - URLS "https://raw.githubusercontent.com/wiki/Microsoft/DirectXTex/DirectXTexEXR.h" - FILENAME "DirectXTexEXR-3.h" - SHA512 b4c75fa0e3365d63beba0ba471f0ded124b2f0e20f2c11cef76a88e6af1582889abcf5aa2ec74270d7b9bde7f7b4bc36fd17f030357b4139d8c83c35060344be + vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO Microsoft/DirectXTex + REF ${DIRECTXTEX_TAG} + SHA512 ${DIRECTXTEX_HASH} + HEAD_REF main + PATCHES enable_openexr_support.patch ) - - vcpkg_download_distfile( - DIRECTXTEX_EXR_SOURCE - URLS "https://raw.githubusercontent.com/wiki/Microsoft/DirectXTex/DirectXTexEXR.cpp" - FILENAME "DirectXTexEXR-3.cpp" - SHA512 9192cfea01654b1537b444cc6e3369de2f721959ad749551ad06ba92a12fa61e12f2169cf412788b0156220bb8bacf531160f924a4744e43e875163463586620 +else() + vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO Microsoft/DirectXTex + REF ${DIRECTXTEX_TAG} + SHA512 ${DIRECTXTEX_HASH} + HEAD_REF main ) - - file(COPY ${DIRECTXTEX_EXR_HEADER} DESTINATION "${SOURCE_PATH}/DirectXTex") - file(COPY ${DIRECTXTEX_EXR_SOURCE} DESTINATION "${SOURCE_PATH}/DirectXTex") - file(RENAME "${SOURCE_PATH}/DirectXTex/DirectXTexEXR-3.h" "${SOURCE_PATH}/DirectXTex/DirectXTexEXR.h") - file(RENAME "${SOURCE_PATH}/DirectXTex/DirectXTexEXR-3.cpp" "${SOURCE_PATH}/DirectXTex/DirectXTexEXR.cpp") - vcpkg_apply_patches(SOURCE_PATH "${SOURCE_PATH}" PATCHES enable_openexr_support.patch) endif() vcpkg_check_features( @@ -67,23 +59,23 @@ vcpkg_cmake_config_fixup(CONFIG_PATH share/directxtex) if((VCPKG_HOST_IS_WINDOWS) AND (VCPKG_TARGET_ARCHITECTURE MATCHES x64) AND (NOT ("openexr" IN_LIST FEATURES))) vcpkg_download_distfile( TEXASSEMBLE_EXE - URLS "https://github.com/Microsoft/DirectXTex/releases/download/jul2022/texassemble.exe" - FILENAME "texassemble-jul2022.exe" - SHA512 72b47e30f810481f2af00cf45eb5789ae78c3ce0cc385f8168a74f178798cefa69b837060fe0ff4cf8dedaf8d1e489bbf4b3e1453c821df478636aca73f89b43 + URLS "https://github.com/Microsoft/DirectXTex/releases/download/${DIRECTXTEX_TAG}/texassemble.exe" + FILENAME "texassemble-${DIRECTXTEX_TAG}.exe" + SHA512 cdf2394c83900fa09f4d8c127863223891fb713090c18407fd83581fdd3e476292cfca4e5accaaa66310d62e03c2836bddac37e508aecb1c2a2346d35eecf08b ) vcpkg_download_distfile( TEXCONV_EXE - URLS "https://github.com/Microsoft/DirectXTex/releases/download/jul2022/texconv.exe" - FILENAME "texconv-jul2022.exe" - SHA512 6fe66d90a33510005f3dcc0190aef4e0139d077ee7aeeef015b1e9204149384d46d02e0d9274b68e6f4299b64d3c4eb57fc4bfa6bfefc317699e624ae332abb6 + URLS "https://github.com/Microsoft/DirectXTex/releases/download/${DIRECTXTEX_TAG}/texconv.exe" + FILENAME "texconv-${DIRECTXTEX_TAG}.exe" + SHA512 d2c5899a2b4abea5e975699326143f198c04808f9ac5b19c0580618601ed671b12eaef846938142bfa22eb7338ad7fabbdaadff76bc1776f543ecbd33b8d2586 ) vcpkg_download_distfile( TEXDIAG_EXE - URLS "https://github.com/Microsoft/DirectXTex/releases/download/jul2022/texdiag.exe" - FILENAME "texdiag-jul2022.exe" - SHA512 804a361293b5350d722604f5150a72751e1c25642986a505e83e0b33be8f53535ea42b6adbbc0b0b88e16d494012e9d02150c60e0ce0115fba30a84e7c2a14bd + URLS "https://github.com/Microsoft/DirectXTex/releases/download/${DIRECTXTEX_TAG}/texdiag.exe" + FILENAME "texdiag-${DIRECTXTEX_TAG}.exe" + SHA512 99e9073c6a22b54b56337dfaa18c6723febe6ca65b1e8b53a64dadee149e06111511115bf06aca95ad4b30a5cc24da9d7b526260f7c58e38740a38ff7a6e007b ) file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/directxtex/") @@ -94,9 +86,9 @@ if((VCPKG_HOST_IS_WINDOWS) AND (VCPKG_TARGET_ARCHITECTURE MATCHES x64) AND (NOT ${TEXDIAG_EXE} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/directxtex/") - file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtex/texassemble-jul2022.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtex/texassemble.exe") - file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtex/texconv-jul2022.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtex/texconv.exe") - file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtex/texdiag-jul2022.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtex/texadiag.exe") + file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtex/texassemble-${DIRECTXTEX_TAG}.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtex/texassemble.exe") + file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtex/texconv-${DIRECTXTEX_TAG}.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtex/texconv.exe") + file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtex/texdiag-${DIRECTXTEX_TAG}.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtex/texadiag.exe") elseif((VCPKG_TARGET_IS_WINDOWS) AND (NOT VCPKG_TARGET_IS_UWP)) diff --git a/ports/directxtex/vcpkg.json b/ports/directxtex/vcpkg.json index 0ede01f7f26641..67197309630cd8 100644 --- a/ports/directxtex/vcpkg.json +++ b/ports/directxtex/vcpkg.json @@ -1,7 +1,6 @@ { "name": "directxtex", - "version-date": "2022-07-29", - "port-version": 1, + "version-date": "2022-10-17", "description": "DirectXTex texture processing library", "homepage": "https://github.com/Microsoft/DirectXTex", "documentation": "https://github.com/microsoft/DirectXTex/wiki", diff --git a/ports/directxtk/portfile.cmake b/ports/directxtk/portfile.cmake index f1ef0c55a96118..00de7603821c3d 100644 --- a/ports/directxtk/portfile.cmake +++ b/ports/directxtk/portfile.cmake @@ -1,3 +1,5 @@ +set(DIRECTXTK_TAG oct2022) + vcpkg_check_linkage(ONLY_STATIC_LIBRARY) if(VCPKG_TARGET_IS_MINGW) @@ -7,8 +9,8 @@ endif() vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO Microsoft/DirectXTK - REF jul2022 - SHA512 1f16d682e2ed7d177ec7ab0f5ecbcfd11f85478eff52db781403c6c1dca8945521da3a5fd926ea46a4d319c94bc0f21eacea7b456da4283ccac21614e3338f58 + REF ${DIRECTXTK_TAG} + SHA512 59cdfb0e7c3ca121ffc4935f93702b67b66dc000920de915b1589b74a192b015aa46e42438f6a2e68da344001ec69896691cf343eae3379cec272feeeb2ee02c HEAD_REF main ) @@ -37,16 +39,16 @@ vcpkg_cmake_config_fixup(CONFIG_PATH share/directxtk) if((VCPKG_HOST_IS_WINDOWS) AND (VCPKG_TARGET_ARCHITECTURE MATCHES x64)) vcpkg_download_distfile( MAKESPRITEFONT_EXE - URLS "https://github.com/Microsoft/DirectXTK/releases/download/jul2022/MakeSpriteFont.exe" - FILENAME "makespritefont-jul2022.exe" - SHA512 fd039070fad3dee3fe146d2cd4950f599f680cb4abd370e7c21bedeb8c0a970455ad2eac463fc6d198505b6bbdabebfcc453bf74c317f6a10bf2e2f9a0bfc418 + URLS "https://github.com/Microsoft/DirectXTK/releases/download/${DIRECTXTK_TAG}/MakeSpriteFont.exe" + FILENAME "makespritefont-${DIRECTXTK_TAG}.exe" + SHA512 1a55c1fe22f10c883fad4c263437a5d5084275f4303863afc7c1cc871221364d189963f248b7b338f002fac1ae7fda40352a7ef6c96bfdc1ffded2f53c187c32 ) vcpkg_download_distfile( XWBTOOL_EXE - URLS "https://github.com/Microsoft/DirectXTK/releases/download/jul2022/XWBTool.exe" - FILENAME "xwbtool-jul2022.exe" - SHA512 6276e17241afc8c0b82789b99667577394eedf001fa2d4b3acdfac847744c3ac5ec9a8072a1e3e9f247386711232aab93f066a0689f4f9f7d84744dc3862ea05 + URLS "https://github.com/Microsoft/DirectXTK/releases/download/${DIRECTXTK_TAG}/XWBTool.exe" + FILENAME "xwbtool-${DIRECTXTK_TAG}.exe" + SHA512 ab14800b36a7e40785c0e8b88e08e3d6e0ab8f25711093633ce66e0c123cb5eef72ac7e6a3ce714ad6b6881d54c04149ba64101f768b5dd40c48f52b41514abc ) file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/directxtk/") @@ -56,8 +58,8 @@ if((VCPKG_HOST_IS_WINDOWS) AND (VCPKG_TARGET_ARCHITECTURE MATCHES x64)) ${XWBTOOL_EXE} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/directxtk/") - file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtk/makespritefont-jul2022.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtk/makespritefont.exe") - file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtk/xwbtool-jul2022.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtk/xwbtool.exe") + file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtk/makespritefont-${DIRECTXTK_TAG}.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtk/makespritefont.exe") + file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtk/xwbtool-${DIRECTXTK_TAG}.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtk/xwbtool.exe") elseif(NOT VCPKG_TARGET_IS_UWP) diff --git a/ports/directxtk/vcpkg.json b/ports/directxtk/vcpkg.json index b0e0e6ed55ec19..daa954c2827ae5 100644 --- a/ports/directxtk/vcpkg.json +++ b/ports/directxtk/vcpkg.json @@ -1,6 +1,6 @@ { "name": "directxtk", - "version-date": "2022-07-29", + "version-date": "2022-10-17", "description": "A collection of helper classes for writing DirectX 11.x code in C++.", "homepage": "https://github.com/Microsoft/DirectXTK", "documentation": "https://github.com/microsoft/DirectXTK/wiki", diff --git a/ports/directxtk12/portfile.cmake b/ports/directxtk12/portfile.cmake index 92bf31c2359f41..922c135ddbf378 100644 --- a/ports/directxtk12/portfile.cmake +++ b/ports/directxtk12/portfile.cmake @@ -1,10 +1,12 @@ +set(DIRECTXTK_TAG oct2022) + vcpkg_check_linkage(ONLY_STATIC_LIBRARY) vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO Microsoft/DirectXTK12 - REF jul2022 - SHA512 54e58e181fec16f6bc9b27ad9e8267bc23601912f18759d99b278c4086cc0979ff18fe80db8ee7cbb9dfa7e38d0c892b665f005ffbb60f9d0ccdbe69093b6b5d + REF ${DIRECTXTK_TAG} + SHA512 f9117e3e2119cf54dd003efa04a3a803558c4326a884c604ff3502e488b40e4372d226d3070d509b8e462fdddd3b23fae3b3aebd1ebfa74d99e01b2f4bfac312 HEAD_REF main ) @@ -27,16 +29,16 @@ vcpkg_cmake_config_fixup(CONFIG_PATH share/directxtk12) if((VCPKG_HOST_IS_WINDOWS) AND (VCPKG_TARGET_ARCHITECTURE MATCHES x64)) vcpkg_download_distfile( MAKESPRITEFONT_EXE - URLS "https://github.com/Microsoft/DirectXTK12/releases/download/jul2022/MakeSpriteFont.exe" - FILENAME "makespritefont-jul2022.exe" - SHA512 fd039070fad3dee3fe146d2cd4950f599f680cb4abd370e7c21bedeb8c0a970455ad2eac463fc6d198505b6bbdabebfcc453bf74c317f6a10bf2e2f9a0bfc418 + URLS "https://github.com/Microsoft/DirectXTK12/releases/download/${DIRECTXTK_TAG}/MakeSpriteFont.exe" + FILENAME "makespritefont-${DIRECTXTK_TAG}.exe" + SHA512 1a55c1fe22f10c883fad4c263437a5d5084275f4303863afc7c1cc871221364d189963f248b7b338f002fac1ae7fda40352a7ef6c96bfdc1ffded2f53c187c32 ) vcpkg_download_distfile( XWBTOOL_EXE - URLS "https://github.com/Microsoft/DirectXTK12/releases/download/jul2022/XWBTool.exe" - FILENAME "xwbtool-jul2022.exe" - SHA512 6276e17241afc8c0b82789b99667577394eedf001fa2d4b3acdfac847744c3ac5ec9a8072a1e3e9f247386711232aab93f066a0689f4f9f7d84744dc3862ea05 + URLS "https://github.com/Microsoft/DirectXTK12/releases/download/${DIRECTXTK_TAG}/XWBTool.exe" + FILENAME "xwbtool-${DIRECTXTK_TAG}.exe" + SHA512 ab14800b36a7e40785c0e8b88e08e3d6e0ab8f25711093633ce66e0c123cb5eef72ac7e6a3ce714ad6b6881d54c04149ba64101f768b5dd40c48f52b41514abc ) file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/directxtk12/") @@ -46,8 +48,8 @@ if((VCPKG_HOST_IS_WINDOWS) AND (VCPKG_TARGET_ARCHITECTURE MATCHES x64)) ${XWBTOOL_EXE} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/directxtk12/") - file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtk12/makespritefont-jul2022.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtk12/makespritefont.exe") - file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtk12/xwbtool-jul2022.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtk12/xwbtool.exe") + file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtk12/makespritefont-${DIRECTXTK_TAG}.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtk12/makespritefont.exe") + file(RENAME "${CURRENT_PACKAGES_DIR}/tools/directxtk12/xwbtool-${DIRECTXTK_TAG}.exe" "${CURRENT_PACKAGES_DIR}/tools/directxtk12/xwbtool.exe") endif() file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") diff --git a/ports/directxtk12/vcpkg.json b/ports/directxtk12/vcpkg.json index 2438d31f7ad719..bad1ca2566d433 100644 --- a/ports/directxtk12/vcpkg.json +++ b/ports/directxtk12/vcpkg.json @@ -1,6 +1,6 @@ { "name": "directxtk12", - "version-date": "2022-07-29", + "version-date": "2022-10-17", "description": "A collection of helper classes for writing DirectX 12 code in C++.", "homepage": "https://github.com/Microsoft/DirectXTK12", "documentation": "https://github.com/microsoft/DirectXTK12/wiki", diff --git a/ports/uvatlas/portfile.cmake b/ports/uvatlas/portfile.cmake index 84c1e5cc81368e..72a68002d50045 100644 --- a/ports/uvatlas/portfile.cmake +++ b/ports/uvatlas/portfile.cmake @@ -1,10 +1,12 @@ +set(UVATLAS_TAG oct2022) + vcpkg_check_linkage(ONLY_STATIC_LIBRARY) vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO Microsoft/UVAtlas - REF jul2022 - SHA512 fe857766d598c73badba6eda3128775f9195d0a1a7658e9b48a77dd631da4bbd31ab946bc98f8e9b229a6bc99a785ac3da693cb655be0f6a1393ad176e26b688 + REF ${UVATLAS_TAG} + SHA512 d6c6428ee7d19888cf5b50bff328fa55dec13a8e660f65eab4e4a4538cbf57282d75fbfd079880fa322522d5fd5db10dcb42d62c1b57f76cf04f0843d4b52705 HEAD_REF main PATCHES openexr.patch @@ -37,9 +39,9 @@ vcpkg_cmake_config_fixup(CONFIG_PATH share/uvatlas) if((VCPKG_HOST_IS_WINDOWS) AND (VCPKG_TARGET_ARCHITECTURE MATCHES x64) AND (NOT ("eigen" IN_LIST FEATURES))) vcpkg_download_distfile( UVATLASTOOL_EXE - URLS "https://github.com/Microsoft/UVAtlas/releases/download/jul2022/uvatlastool.exe" - FILENAME "uvatlastool-jul2022.exe" - SHA512 3c1f7d25f10a85895d75d4102e127af857c4eae1bb3773b84e0f48e30ba9be517469b1a7504c6859e5b75481fea427052af21f3491f6993bf3dc360829c086b8 + URLS "https://github.com/Microsoft/UVAtlas/releases/download/${UVATLAS_TAG}/uvatlastool.exe" + FILENAME "uvatlastool-${UVATLAS_TAG}.exe" + SHA512 7ee673db394a83762d6227faa9e643fafeb2ef3e1be1fdfff363f04f3e5d826ff2d314530f6372357fac8a01d284e6861cc3a88ce81f3bd7baa71303d68e3c86 ) file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/uvatlas/") @@ -48,7 +50,7 @@ if((VCPKG_HOST_IS_WINDOWS) AND (VCPKG_TARGET_ARCHITECTURE MATCHES x64) AND (NOT ${UVATLASTOOL_EXE} DESTINATION ${CURRENT_PACKAGES_DIR}/tools/uvatlas/) - file(RENAME ${CURRENT_PACKAGES_DIR}/tools/uvatlas/uvatlastool-jul2022.exe ${CURRENT_PACKAGES_DIR}/tools/uvatlas/uvatlastool.exe) + file(RENAME ${CURRENT_PACKAGES_DIR}/tools/uvatlas/uvatlastool-${UVATLAS_TAG}.exe ${CURRENT_PACKAGES_DIR}/tools/uvatlas/uvatlastool.exe) elseif((VCPKG_TARGET_IS_WINDOWS) AND (NOT VCPKG_TARGET_IS_UWP)) diff --git a/ports/uvatlas/vcpkg.json b/ports/uvatlas/vcpkg.json index 4bdbb8d40e2770..6740078be8c503 100644 --- a/ports/uvatlas/vcpkg.json +++ b/ports/uvatlas/vcpkg.json @@ -1,6 +1,6 @@ { "name": "uvatlas", - "version-date": "2022-07-30", + "version-date": "2022-10-17", "port-version": 1, "description": "UVAtlas isochart texture atlas", "homepage": "https://github.com/Microsoft/UVAtlas", From 82d84afcf981ad41f9c5981ad39a873b8e60a069 Mon Sep 17 00:00:00 2001 From: walbourn Date: Tue, 18 Oct 2022 23:29:46 -0700 Subject: [PATCH 2/8] Updated baseline --- versions/baseline.json | 12 ++++++------ versions/d-/directxmesh.json | 5 +++++ versions/d-/directxtex.json | 5 +++++ versions/d-/directxtk.json | 5 +++++ versions/d-/directxtk12.json | 5 +++++ versions/u-/uvatlas.json | 5 +++++ 6 files changed, 31 insertions(+), 6 deletions(-) diff --git a/versions/baseline.json b/versions/baseline.json index 888ca87a0b218d..db71b960e5221b 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -1929,7 +1929,7 @@ "port-version": 0 }, "directxmesh": { - "baseline": "2022-07-29", + "baseline": "2022-10-17", "port-version": 0 }, "directxsdk": { @@ -1937,15 +1937,15 @@ "port-version": 5 }, "directxtex": { - "baseline": "2022-07-29", - "port-version": 1 + "baseline": "2022-10-17", + "port-version": 0 }, "directxtk": { - "baseline": "2022-07-29", + "baseline": "2022-10-17", "port-version": 0 }, "directxtk12": { - "baseline": "2022-07-29", + "baseline": "2022-10-17", "port-version": 0 }, "dirent": { @@ -7641,7 +7641,7 @@ "port-version": 2 }, "uvatlas": { - "baseline": "2022-07-30", + "baseline": "2022-10-17", "port-version": 1 }, "uvw": { diff --git a/versions/d-/directxmesh.json b/versions/d-/directxmesh.json index 43901d14ba0d3b..fc123be8bf5a06 100644 --- a/versions/d-/directxmesh.json +++ b/versions/d-/directxmesh.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "f2254f431933140ed94dc8aa57109322a212217c", + "version-date": "2022-10-17", + "port-version": 0 + }, { "git-tree": "8a526999086b61e5dc7c587245ae5982ec93c0e5", "version-date": "2022-07-29", diff --git a/versions/d-/directxtex.json b/versions/d-/directxtex.json index 1d95320708aa16..a8de895e33f21e 100644 --- a/versions/d-/directxtex.json +++ b/versions/d-/directxtex.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "1fe41195c9354b2ff902cb14994bbd76109d7645", + "version-date": "2022-10-17", + "port-version": 0 + }, { "git-tree": "b72dbe4138eac6fea28e42828e2fc2a7ed99259b", "version-date": "2022-07-29", diff --git a/versions/d-/directxtk.json b/versions/d-/directxtk.json index 0015152854e09f..eb45e6dff951c1 100644 --- a/versions/d-/directxtk.json +++ b/versions/d-/directxtk.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "29b7fdf1ce9b66105a1bfa329e5309afe8505dc7", + "version-date": "2022-10-17", + "port-version": 0 + }, { "git-tree": "88703e36f97fb7bb6ea188832dc8b114a32e5a3f", "version-date": "2022-07-29", diff --git a/versions/d-/directxtk12.json b/versions/d-/directxtk12.json index 22c8a5dacf67db..fbaea888c21cab 100644 --- a/versions/d-/directxtk12.json +++ b/versions/d-/directxtk12.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "ab664013d6d38eec729d66e97dc9c60490725186", + "version-date": "2022-10-17", + "port-version": 0 + }, { "git-tree": "0c42e95e0d216b600b858046a75d0bc80c0cb410", "version-date": "2022-07-29", diff --git a/versions/u-/uvatlas.json b/versions/u-/uvatlas.json index c8df6e2b0e1151..a0142d85aeefb3 100644 --- a/versions/u-/uvatlas.json +++ b/versions/u-/uvatlas.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "4a79053413187152bb68f0f3e39f3fc46b79d4d8", + "version-date": "2022-10-17", + "port-version": 1 + }, { "git-tree": "b8e6b720b8515e7b966c76785e54d31f97d32261", "version-date": "2022-07-30", From f80450dee0eee26246fd2fdf310a0bc21b942674 Mon Sep 17 00:00:00 2001 From: walbourn Date: Wed, 19 Oct 2022 00:17:10 -0700 Subject: [PATCH 3/8] UVatlas can use port 0 --- ports/uvatlas/vcpkg.json | 1 - 1 file changed, 1 deletion(-) diff --git a/ports/uvatlas/vcpkg.json b/ports/uvatlas/vcpkg.json index 6740078be8c503..f16b92a16eea14 100644 --- a/ports/uvatlas/vcpkg.json +++ b/ports/uvatlas/vcpkg.json @@ -1,7 +1,6 @@ { "name": "uvatlas", "version-date": "2022-10-17", - "port-version": 1, "description": "UVAtlas isochart texture atlas", "homepage": "https://github.com/Microsoft/UVAtlas", "documentation": "https://github.com/Microsoft/UVAtlas/wiki", From f455d9a55c73dc6eb086e004fe9c33a9faf08cda Mon Sep 17 00:00:00 2001 From: walbourn Date: Wed, 19 Oct 2022 00:17:47 -0700 Subject: [PATCH 4/8] Update baseline --- versions/baseline.json | 2 +- versions/u-/uvatlas.json | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/versions/baseline.json b/versions/baseline.json index db71b960e5221b..5df75e132b0781 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -7642,7 +7642,7 @@ }, "uvatlas": { "baseline": "2022-10-17", - "port-version": 1 + "port-version": 0 }, "uvw": { "baseline": "2.12.1", diff --git a/versions/u-/uvatlas.json b/versions/u-/uvatlas.json index a0142d85aeefb3..987ede639b3928 100644 --- a/versions/u-/uvatlas.json +++ b/versions/u-/uvatlas.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "d2385783dc5930f93f8ef1eea64a8818f301e3ae", + "version-date": "2022-10-17", + "port-version": 0 + }, { "git-tree": "4a79053413187152bb68f0f3e39f3fc46b79d4d8", "version-date": "2022-10-17", From ec428cbf6b9021bdce7043204d91f45e5e0424f2 Mon Sep 17 00:00:00 2001 From: walbourn Date: Wed, 19 Oct 2022 10:56:41 -0700 Subject: [PATCH 5/8] Removed extra entry --- versions/u-/uvatlas.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/versions/u-/uvatlas.json b/versions/u-/uvatlas.json index 987ede639b3928..09cfa86122708a 100644 --- a/versions/u-/uvatlas.json +++ b/versions/u-/uvatlas.json @@ -5,11 +5,6 @@ "version-date": "2022-10-17", "port-version": 0 }, - { - "git-tree": "4a79053413187152bb68f0f3e39f3fc46b79d4d8", - "version-date": "2022-10-17", - "port-version": 1 - }, { "git-tree": "b8e6b720b8515e7b966c76785e54d31f97d32261", "version-date": "2022-07-30", From c18a83c769f2d9411878fe38bff2f7f512a7f310 Mon Sep 17 00:00:00 2001 From: walbourn Date: Sat, 22 Oct 2022 14:50:20 -0700 Subject: [PATCH 6/8] Moved EXR support for DirectXTex upstream per feedback --- ports/directxtex/portfile.cmake | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/ports/directxtex/portfile.cmake b/ports/directxtex/portfile.cmake index ebda728e2213b0..373e0e8b33035d 100644 --- a/ports/directxtex/portfile.cmake +++ b/ports/directxtex/portfile.cmake @@ -1,5 +1,4 @@ set(DIRECTXTEX_TAG oct2022) -set(DIRECTXTEX_HASH e90f7b18cf088a090f33f95759367d96e7b13e52f8db0688422d924405c4cada6a8d230fe829f832886f9ce85eb068d1c187f212a36f47d90f4fb3e171c55607) vcpkg_check_linkage(ONLY_STATIC_LIBRARY) @@ -7,24 +6,13 @@ if(VCPKG_TARGET_IS_MINGW) message(NOTICE "Building ${PORT} for MinGW requires the HLSL Compiler fxc.exe also be in the PATH. See https://aka.ms/windowssdk.") endif() -if("openexr" IN_LIST FEATURES) - vcpkg_from_github( - OUT_SOURCE_PATH SOURCE_PATH - REPO Microsoft/DirectXTex - REF ${DIRECTXTEX_TAG} - SHA512 ${DIRECTXTEX_HASH} - HEAD_REF main - PATCHES enable_openexr_support.patch +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO Microsoft/DirectXTex + REF oct2022b + SHA512 48db2d88f84cda0692e887d5b26fb6051649eae2f9699803170926a9660abaf836f567b2dacdf4900a7a041c22e936d612615247825e256f840808e5ae497e4d + HEAD_REF main ) -else() - vcpkg_from_github( - OUT_SOURCE_PATH SOURCE_PATH - REPO Microsoft/DirectXTex - REF ${DIRECTXTEX_TAG} - SHA512 ${DIRECTXTEX_HASH} - HEAD_REF main - ) -endif() vcpkg_check_features( OUT_FEATURE_OPTIONS FEATURE_OPTIONS From 270e5daa652618e8d1e4ae02dfffa5c5338ef664 Mon Sep 17 00:00:00 2001 From: walbourn Date: Sat, 22 Oct 2022 14:50:42 -0700 Subject: [PATCH 7/8] Update baseline --- versions/d-/directxtex.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions/d-/directxtex.json b/versions/d-/directxtex.json index a8de895e33f21e..e62dc040592a91 100644 --- a/versions/d-/directxtex.json +++ b/versions/d-/directxtex.json @@ -1,7 +1,7 @@ { "versions": [ { - "git-tree": "1fe41195c9354b2ff902cb14994bbd76109d7645", + "git-tree": "f130ec70f8a382d9b6f5ee6313819c9562ea3d81", "version-date": "2022-10-17", "port-version": 0 }, From f5b2fb587b68e3cc96a61293b58016e2ecd14033 Mon Sep 17 00:00:00 2001 From: Billy O'Neal Date: Fri, 28 Oct 2022 21:23:29 -0700 Subject: [PATCH 8/8] Remove no longer used patch. --- ports/directxtex/enable_openexr_support.patch | 677 ------------------ versions/d-/directxtex.json | 2 +- 2 files changed, 1 insertion(+), 678 deletions(-) delete mode 100644 ports/directxtex/enable_openexr_support.patch diff --git a/ports/directxtex/enable_openexr_support.patch b/ports/directxtex/enable_openexr_support.patch deleted file mode 100644 index bdd7e9941570b7..00000000000000 --- a/ports/directxtex/enable_openexr_support.patch +++ /dev/null @@ -1,677 +0,0 @@ -diff --git a/DirectXTex/DirectXTexEXR.cpp b/DirectXTex/DirectXTexEXR.cpp -new file mode 100644 -index 0000000..537fb9c ---- /dev/null -+++ b/DirectXTex/DirectXTexEXR.cpp -@@ -0,0 +1,636 @@ -+//-------------------------------------------------------------------------------------- -+// File: DirectXTexEXR.cpp -+// -+// DirectXTex Auxillary functions for using the OpenEXR library -+// -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+//-------------------------------------------------------------------------------------- -+ -+//Uncomment if you add DirectXTexEXR to your copy of the DirectXTex library -+#include "DirectXTexP.h" -+ -+#include "DirectXTexEXR.h" -+ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+// -+// Requires the OpenEXR library and ZLIB -+// -+ -+#ifdef __clang__ -+#pragma clang diagnostic ignored "-Wswitch-enum" -+ -+#pragma clang diagnostic push -+#pragma clang diagnostic ignored "-Wdeprecated-declarations" -+#pragma clang diagnostic ignored "-Wdeprecated-dynamic-exception-spec" -+#pragma clang diagnostic ignored "-Wfloat-equal" -+#pragma clang diagnostic ignored "-Wimplicit-int-conversion" -+#pragma clang diagnostic ignored "-Wlanguage-extension-token" -+#pragma clang diagnostic ignored "-Wold-style-cast" -+#pragma clang diagnostic ignored "-Wreserved-id-macro" -+#pragma clang diagnostic ignored "-Wshadow-field-in-constructor" -+#pragma clang diagnostic ignored "-Wsign-conversion" -+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" -+#endif -+ -+#pragma warning(push) -+#pragma warning(disable : 4244 4996) -+#include -+#include -+#pragma warning(pop) -+ -+#ifdef __clang__ -+#pragma clang diagnostic pop -+#endif -+ -+static_assert(sizeof(Imf::Rgba) == 8, "Mismatch size"); -+ -+using namespace DirectX; -+using PackedVector::XMHALF4; -+ -+// Comment out this first anonymous namespace if you add the include of DirectXTexP.h above -+#if 0 -+namespace -+{ -+ struct handle_closer { void operator()(HANDLE h) noexcept { assert(h != INVALID_HANDLE_VALUE); if (h) CloseHandle(h); } }; -+ -+ using ScopedHandle = std::unique_ptr; -+ -+ inline HANDLE safe_handle(HANDLE h) noexcept { return (h == INVALID_HANDLE_VALUE) ? nullptr : h; } -+ -+ class auto_delete_file -+ { -+ public: -+ auto_delete_file(HANDLE hFile) noexcept : m_handle(hFile) {} -+ -+ auto_delete_file(const auto_delete_file&) = delete; -+ auto_delete_file& operator=(const auto_delete_file&) = delete; -+ -+ auto_delete_file(auto_delete_file&&) = delete; -+ auto_delete_file& operator=(auto_delete_file&&) = delete; -+ -+ ~auto_delete_file() -+ { -+ if (m_handle) -+ { -+ FILE_DISPOSITION_INFO info = {}; -+ info.DeleteFile = TRUE; -+ std::ignore = SetFileInformationByHandle(m_handle, FileDispositionInfo, &info, sizeof(info)); -+ } -+ } -+ -+ void clear() noexcept { m_handle = nullptr; } -+ -+ private: -+ HANDLE m_handle; -+ }; -+} -+#endif -+ -+#ifdef _WIN32 -+namespace -+{ -+ class com_exception : public std::exception -+ { -+ public: -+ com_exception(HRESULT hr) noexcept : result(hr) {} -+ -+ const char* what() const noexcept override -+ { -+ static char s_str[64] = {}; -+ sprintf_s(s_str, "Failure with HRESULT of %08X", static_cast(result)); -+ return s_str; -+ } -+ -+ HRESULT get_result() const noexcept { return result; } -+ -+ private: -+ HRESULT result; -+ }; -+ -+ class InputStream : public Imf::IStream -+ { -+ public: -+ InputStream(HANDLE hFile, const char fileName[]) : -+ IStream(fileName), m_hFile(hFile) -+ { -+ const LARGE_INTEGER dist = {}; -+ LARGE_INTEGER result; -+ if (!SetFilePointerEx(m_hFile, dist, &result, FILE_END)) -+ { -+ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); -+ } -+ -+ m_EOF = result.QuadPart; -+ -+ if (!SetFilePointerEx(m_hFile, dist, nullptr, FILE_BEGIN)) -+ { -+ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); -+ } -+ } -+ -+ InputStream(const InputStream&) = delete; -+ InputStream& operator = (const InputStream&) = delete; -+ -+ InputStream(InputStream&&) = delete; -+ InputStream& operator=(InputStream&&) = delete; -+ -+ bool read(char c[], int n) override -+ { -+ DWORD bytesRead; -+ if (!ReadFile(m_hFile, c, static_cast(n), &bytesRead, nullptr)) -+ { -+ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); -+ } -+ -+ const LARGE_INTEGER dist = {}; -+ LARGE_INTEGER result; -+ if (!SetFilePointerEx(m_hFile, dist, &result, FILE_CURRENT)) -+ { -+ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); -+ } -+ -+ return result.QuadPart >= m_EOF; -+ } -+ -+ uint64_t tellg() override -+ { -+ const LARGE_INTEGER dist = {}; -+ LARGE_INTEGER result; -+ if (!SetFilePointerEx(m_hFile, dist, &result, FILE_CURRENT)) -+ { -+ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); -+ } -+ return static_cast(result.QuadPart); -+ } -+ -+ void seekg(uint64_t pos) override -+ { -+ LARGE_INTEGER dist; -+ dist.QuadPart = static_cast(pos); -+ if (!SetFilePointerEx(m_hFile, dist, nullptr, FILE_BEGIN)) -+ { -+ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); -+ } -+ } -+ -+ void clear() override -+ { -+ SetLastError(0); -+ } -+ -+ private: -+ HANDLE m_hFile; -+ LONGLONG m_EOF; -+ }; -+ -+ class OutputStream : public Imf::OStream -+ { -+ public: -+ OutputStream(HANDLE hFile, const char fileName[]) : -+ OStream(fileName), m_hFile(hFile) {} -+ -+ OutputStream(const OutputStream&) = delete; -+ OutputStream& operator = (const OutputStream&) = delete; -+ -+ OutputStream(OutputStream&&) = delete; -+ OutputStream& operator=(OutputStream&&) = delete; -+ -+ void write(const char c[], int n) override -+ { -+ DWORD bytesWritten; -+ if (!WriteFile(m_hFile, c, static_cast(n), &bytesWritten, nullptr)) -+ { -+ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); -+ } -+ } -+ -+ uint64_t tellp() override -+ { -+ const LARGE_INTEGER dist = {}; -+ LARGE_INTEGER result; -+ if (!SetFilePointerEx(m_hFile, dist, &result, FILE_CURRENT)) -+ { -+ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); -+ } -+ return static_cast(result.QuadPart); -+ } -+ -+ void seekp(uint64_t pos) override -+ { -+ LARGE_INTEGER dist; -+ dist.QuadPart = static_cast(pos); -+ if (!SetFilePointerEx(m_hFile, dist, nullptr, FILE_BEGIN)) -+ { -+ throw com_exception(HRESULT_FROM_WIN32(GetLastError())); -+ } -+ } -+ -+ private: -+ HANDLE m_hFile; -+ }; -+} -+#endif // _WIN32 -+ -+ -+//===================================================================================== -+// Entry-points -+//===================================================================================== -+ -+//------------------------------------------------------------------------------------- -+// Obtain metadata from EXR file on disk -+//------------------------------------------------------------------------------------- -+_Use_decl_annotations_ -+HRESULT DirectX::GetMetadataFromEXRFile(const wchar_t* szFile, TexMetadata& metadata) -+{ -+ if (!szFile) -+ return E_INVALIDARG; -+ -+#ifdef _WIN32 -+ char fileName[MAX_PATH] = {}; -+ const int result = WideCharToMultiByte(CP_UTF8, 0, szFile, -1, fileName, MAX_PATH, nullptr, nullptr); -+ if (result <= 0) -+ { -+ *fileName = 0; -+ } -+ -+#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) -+ ScopedHandle hFile(safe_handle(CreateFile2( -+ szFile, -+ GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, -+ nullptr))); -+#else -+ ScopedHandle hFile(safe_handle(CreateFileW( -+ szFile, -+ GENERIC_READ, FILE_SHARE_READ, -+ nullptr, -+ OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, -+ nullptr))); -+#endif -+ if (!hFile) -+ { -+ return HRESULT_FROM_WIN32(GetLastError()); -+ } -+ -+ InputStream stream(hFile.get(), fileName); -+#else -+ std::wstring wFileName(szFile); -+ std::string fileName(wFileName.cbegin(), wFileName.cend()); -+#endif -+ -+ HRESULT hr = S_OK; -+ -+ try -+ { -+#ifdef _WIN32 -+ Imf::RgbaInputFile file(stream); -+#else -+ Imf::RgbaInputFile file(fileName.c_str()); -+#endif -+ -+ const auto dw = file.dataWindow(); -+ -+ const int width = dw.max.x - dw.min.x + 1; -+ const int height = dw.max.y - dw.min.y + 1; -+ -+ if (width < 1 || height < 1) -+ return E_FAIL; -+ -+ metadata.width = static_cast(width); -+ metadata.height = static_cast(height); -+ metadata.depth = metadata.arraySize = metadata.mipLevels = 1; -+ metadata.format = DXGI_FORMAT_R16G16B16A16_FLOAT; -+ metadata.dimension = TEX_DIMENSION_TEXTURE2D; -+ } -+#ifdef _WIN32 -+ catch (const com_exception& exc) -+ { -+#ifdef _DEBUG -+ OutputDebugStringA(exc.what()); -+#endif -+ hr = exc.get_result(); -+ } -+#endif -+#if defined(_WIN32) && defined(_DEBUG) -+ catch (const std::exception& exc) -+ { -+ OutputDebugStringA(exc.what()); -+ hr = E_FAIL; -+ } -+#else -+ catch (const std::exception&) -+ { -+ hr = E_FAIL; -+ } -+#endif -+ catch (...) -+ { -+ hr = E_UNEXPECTED; -+ } -+ -+ return hr; -+} -+ -+ -+//------------------------------------------------------------------------------------- -+// Load a EXR file from disk -+//------------------------------------------------------------------------------------- -+_Use_decl_annotations_ -+HRESULT DirectX::LoadFromEXRFile(const wchar_t* szFile, TexMetadata* metadata, ScratchImage& image) -+{ -+ if (!szFile) -+ return E_INVALIDARG; -+ -+ image.Release(); -+ -+ if (metadata) -+ { -+ memset(metadata, 0, sizeof(TexMetadata)); -+ } -+ -+#ifdef _WIN32 -+ char fileName[MAX_PATH] = {}; -+ const int result = WideCharToMultiByte(CP_UTF8, 0, szFile, -1, fileName, MAX_PATH, nullptr, nullptr); -+ if (result <= 0) -+ { -+ *fileName = 0; -+ } -+ -+#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) -+ ScopedHandle hFile(safe_handle(CreateFile2( -+ szFile, -+ GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, -+ nullptr))); -+#else -+ ScopedHandle hFile(safe_handle(CreateFileW( -+ szFile, -+ GENERIC_READ, FILE_SHARE_READ, -+ nullptr, -+ OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, -+ nullptr))); -+#endif -+ if (!hFile) -+ { -+ return HRESULT_FROM_WIN32(GetLastError()); -+ } -+ -+ InputStream stream(hFile.get(), fileName); -+#else -+ std::wstring wFileName(szFile); -+ std::string fileName(wFileName.cbegin(), wFileName.cend()); -+#endif -+ -+ HRESULT hr = S_OK; -+ -+ try -+ { -+#ifdef _WIN32 -+ Imf::RgbaInputFile file(stream); -+#else -+ Imf::RgbaInputFile file(fileName.c_str()); -+#endif -+ -+ auto const dw = file.dataWindow(); -+ -+ const int width = dw.max.x - dw.min.x + 1; -+ const int height = dw.max.y - dw.min.y + 1; -+ -+ if (width < 1 || height < 1) -+ return E_FAIL; -+ -+ if (metadata) -+ { -+ metadata->width = static_cast(width); -+ metadata->height = static_cast(height); -+ metadata->depth = metadata->arraySize = metadata->mipLevels = 1; -+ metadata->format = DXGI_FORMAT_R16G16B16A16_FLOAT; -+ metadata->dimension = TEX_DIMENSION_TEXTURE2D; -+ } -+ -+ hr = image.Initialize2D(DXGI_FORMAT_R16G16B16A16_FLOAT, -+ static_cast(width), static_cast(height), 1u, 1u); -+ if (FAILED(hr)) -+ return hr; -+ -+ file.setFrameBuffer(reinterpret_cast(image.GetPixels()) - dw.min.x - dw.min.y * width, 1, static_cast(width)); -+ file.readPixels(dw.min.y, dw.max.y); -+ } -+#ifdef _WIN32 -+ catch (const com_exception& exc) -+ { -+#ifdef _DEBUG -+ OutputDebugStringA(exc.what()); -+#endif -+ hr = exc.get_result(); -+ } -+#endif -+#if defined(_WIN32) && defined(_DEBUG) -+ catch (const std::exception& exc) -+ { -+ OutputDebugStringA(exc.what()); -+ hr = E_FAIL; -+ } -+#else -+ catch (const std::exception&) -+ { -+ hr = E_FAIL; -+ } -+#endif -+ catch (...) -+ { -+ hr = E_UNEXPECTED; -+ } -+ -+ if (FAILED(hr)) -+ { -+ image.Release(); -+ } -+ -+ return hr; -+} -+ -+ -+//------------------------------------------------------------------------------------- -+// Save a EXR file to disk -+//------------------------------------------------------------------------------------- -+_Use_decl_annotations_ -+HRESULT DirectX::SaveToEXRFile(const Image& image, const wchar_t* szFile) -+{ -+ if (!szFile) -+ return E_INVALIDARG; -+ -+ if (!image.pixels) -+ return E_POINTER; -+ -+ if (image.width > INT32_MAX || image.height > INT32_MAX) -+ return /* HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) */ static_cast(0x80070032L); -+ -+ switch (image.format) -+ { -+ case DXGI_FORMAT_R16G16B16A16_FLOAT: -+ if ((image.rowPitch % 8) > 0) -+ return E_FAIL; -+ break; -+ -+ case DXGI_FORMAT_R32G32B32A32_FLOAT: -+ case DXGI_FORMAT_R32G32B32_FLOAT: -+ break; -+ -+ default: -+ return /* HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) */ static_cast(0x80070032L); -+ } -+ -+#ifdef _WIN32 -+ char fileName[MAX_PATH] = {}; -+ const int result = WideCharToMultiByte(CP_UTF8, 0, szFile, -1, fileName, MAX_PATH, nullptr, nullptr); -+ if (result <= 0) -+ { -+ *fileName = 0; -+ } -+ // Create file and write header -+#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) -+ ScopedHandle hFile(safe_handle(CreateFile2( -+ szFile, -+ GENERIC_WRITE, 0, CREATE_ALWAYS, -+ nullptr))); -+#else -+ ScopedHandle hFile(safe_handle(CreateFileW( -+ szFile, -+ GENERIC_WRITE, 0, -+ nullptr, -+ CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, -+ nullptr))); -+#endif -+ if (!hFile) -+ { -+ return HRESULT_FROM_WIN32(GetLastError()); -+ } -+ -+ auto_delete_file delonfail(hFile.get()); -+ -+ OutputStream stream(hFile.get(), fileName); -+#else -+ std::wstring wFileName(szFile); -+ std::string fileName(wFileName.cbegin(), wFileName.cend()); -+#endif -+ -+ HRESULT hr = S_OK; -+ -+ try -+ { -+ const int width = static_cast(image.width); -+ const int height = static_cast(image.height); -+ -+#ifdef _WIN32 -+ Imf::RgbaOutputFile file(stream, Imf::Header(width, height), Imf::WRITE_RGBA); -+#else -+ Imf::RgbaOutputFile file(fileName.c_str(), Imf::Header(width, height), Imf::WRITE_RGBA); -+#endif -+ -+ if (image.format == DXGI_FORMAT_R16G16B16A16_FLOAT) -+ { -+ file.setFrameBuffer(reinterpret_cast(image.pixels), 1, image.rowPitch / 8); -+ file.writePixels(height); -+ } -+ else -+ { -+ const uint64_t bytes = image.width * image.height; -+ -+ if (bytes > UINT32_MAX) -+ { -+ return /* HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW) */ static_cast(0x80070216L); -+ } -+ -+ std::unique_ptr temp(new (std::nothrow) XMHALF4[static_cast(bytes)]); -+ if (!temp) -+ return E_OUTOFMEMORY; -+ -+ file.setFrameBuffer(reinterpret_cast(temp.get()), 1, image.width); -+ -+ auto sPtr = image.pixels; -+ auto dPtr = temp.get(); -+ if (image.format == DXGI_FORMAT_R32G32B32A32_FLOAT) -+ { -+ for (int j = 0; j < height; ++j) -+ { -+ auto srcPtr = reinterpret_cast(sPtr); -+ auto destPtr = dPtr; -+ for (int k = 0; k < width; ++k, ++srcPtr, ++destPtr) -+ { -+ const XMVECTOR v = XMLoadFloat4(srcPtr); -+ PackedVector::XMStoreHalf4(destPtr, v); -+ } -+ -+ sPtr += image.rowPitch; -+ dPtr += width; -+ -+ file.writePixels(1); -+ } -+ } -+ else -+ { -+ assert(image.format == DXGI_FORMAT_R32G32B32_FLOAT); -+ -+ for (int j = 0; j < height; ++j) -+ { -+ auto srcPtr = reinterpret_cast(sPtr); -+ auto destPtr = dPtr; -+ for (int k = 0; k < width; ++k, ++srcPtr, ++destPtr) -+ { -+ XMVECTOR v = XMLoadFloat3(srcPtr); -+ v = XMVectorSelect(g_XMIdentityR3, v, g_XMSelect1110); -+ PackedVector::XMStoreHalf4(destPtr, v); -+ } -+ -+ sPtr += image.rowPitch; -+ dPtr += width; -+ -+ file.writePixels(1); -+ } -+ } -+ } -+ } -+#ifdef _WIN32 -+ catch (const com_exception& exc) -+ { -+#ifdef _DEBUG -+ OutputDebugStringA(exc.what()); -+#endif -+ hr = exc.get_result(); -+ } -+#endif -+#if defined(_WIN32) && defined(_DEBUG) -+ catch (const std::exception& exc) -+ { -+ OutputDebugStringA(exc.what()); -+ hr = E_FAIL; -+ } -+#else -+ catch (const std::exception&) -+ { -+ hr = E_FAIL; -+ } -+#endif -+ catch (...) -+ { -+ hr = E_UNEXPECTED; -+ } -+ -+ if (FAILED(hr)) -+ return hr; -+ -+#ifdef _WIN32 -+ delonfail.clear(); -+#endif -+ -+ return S_OK; -+} -diff --git a/DirectXTex/DirectXTexEXR.h b/DirectXTex/DirectXTexEXR.h -new file mode 100644 -index 0000000..bec66e8 ---- /dev/null -+++ b/DirectXTex/DirectXTexEXR.h -@@ -0,0 +1,26 @@ -+//-------------------------------------------------------------------------------------- -+// File: DirectXTexEXR.h -+// -+// DirectXTex Auxillary functions for using the OpenEXR library -+// -+// Copyright (c) Microsoft Corporation. -+// Licensed under the MIT License. -+//-------------------------------------------------------------------------------------- -+ -+#pragma once -+ -+#include "DirectXTex.h" -+ -+ -+namespace DirectX -+{ -+ HRESULT __cdecl GetMetadataFromEXRFile( -+ _In_z_ const wchar_t* szFile, -+ _Out_ TexMetadata& metadata); -+ -+ HRESULT __cdecl LoadFromEXRFile( -+ _In_z_ const wchar_t* szFile, -+ _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); -+ -+ HRESULT __cdecl SaveToEXRFile(_In_ const Image& image, _In_z_ const wchar_t* szFile); -+} --- -2.37.1.windows.1 - diff --git a/versions/d-/directxtex.json b/versions/d-/directxtex.json index e62dc040592a91..c3a5c79aef58ae 100644 --- a/versions/d-/directxtex.json +++ b/versions/d-/directxtex.json @@ -1,7 +1,7 @@ { "versions": [ { - "git-tree": "f130ec70f8a382d9b6f5ee6313819c9562ea3d81", + "git-tree": "e6122779b24211d1cc9fe1a8c8ea36c81ceb4179", "version-date": "2022-10-17", "port-version": 0 },