From 3fb3c1eefed9ed239dc69e63aed36f9e012ab1d7 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn <chuckw@microsoft.com> Date: Mon, 16 Sep 2024 15:54:46 -0700 Subject: [PATCH 01/11] Refactor command-line tools to use shared header --- CMakeLists.txt | 13 +- Common/CmdLineHelpers.h | 356 +++++++ {DDSView => Common}/directx.ico | Bin {Texassemble => Common}/settings.manifest | 0 DDSView/DDSView.rc | 2 +- Texassemble/Texassemble_Desktop_2019.vcxproj | 17 +- .../Texassemble_Desktop_2019.vcxproj.filters | 5 +- .../Texassemble_Desktop_2019_Win10.vcxproj | 23 +- ...ssemble_Desktop_2019_Win10.vcxproj.filters | 5 +- Texassemble/Texassemble_Desktop_2022.vcxproj | 17 +- .../Texassemble_Desktop_2022.vcxproj.filters | 5 +- .../Texassemble_Desktop_2022_Win10.vcxproj | 23 +- ...ssemble_Desktop_2022_Win10.vcxproj.filters | 5 +- Texassemble/directx.ico | Bin 25214 -> 0 bytes Texassemble/texassemble.cpp | 352 +------ Texassemble/texassemble.rc | 2 +- Texconv/Texconv.rc | 2 +- Texconv/Texconv_Desktop_2019.vcxproj | 17 +- Texconv/Texconv_Desktop_2019.vcxproj.filters | 5 +- Texconv/Texconv_Desktop_2019_Win10.vcxproj | 23 +- ...Texconv_Desktop_2019_Win10.vcxproj.filters | 5 +- Texconv/Texconv_Desktop_2022.vcxproj | 17 +- Texconv/Texconv_Desktop_2022.vcxproj.filters | 5 +- Texconv/Texconv_Desktop_2022_Win10.vcxproj | 23 +- ...Texconv_Desktop_2022_Win10.vcxproj.filters | 5 +- Texconv/directx.ico | Bin 25214 -> 0 bytes Texconv/settings.manifest | 21 - Texconv/texconv.cpp | 400 +------- Texdiag/directx.ico | Bin 25214 -> 0 bytes Texdiag/settings.manifest | 21 - Texdiag/texdiag.cpp | 958 ++++++------------ Texdiag/texdiag.rc | 2 +- Texdiag/texdiag_Desktop_2019.vcxproj | 17 +- Texdiag/texdiag_Desktop_2019.vcxproj.filters | 5 +- Texdiag/texdiag_Desktop_2019_Win10.vcxproj | 23 +- ...texdiag_Desktop_2019_Win10.vcxproj.filters | 5 +- Texdiag/texdiag_Desktop_2022.vcxproj | 17 +- Texdiag/texdiag_Desktop_2022.vcxproj.filters | 5 +- Texdiag/texdiag_Desktop_2022_Win10.vcxproj | 23 +- ...texdiag_Desktop_2022_Win10.vcxproj.filters | 5 +- 40 files changed, 956 insertions(+), 1473 deletions(-) create mode 100644 Common/CmdLineHelpers.h rename {DDSView => Common}/directx.ico (100%) rename {Texassemble => Common}/settings.manifest (100%) delete mode 100644 Texassemble/directx.ico delete mode 100644 Texconv/directx.ico delete mode 100644 Texconv/settings.manifest delete mode 100644 Texdiag/directx.ico delete mode 100644 Texdiag/settings.manifest diff --git a/CMakeLists.txt b/CMakeLists.txt index 82091ef2..102b4861 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -404,8 +404,10 @@ if(BUILD_TOOLS AND WIN32) add_executable(texassemble Texassemble/texassemble.cpp Texassemble/texassemble.rc - Texassemble/settings.manifest + Common/CmdLineHelpers.h + Common/settings.manifest Texassemble/AnimatedGif.cpp) + target_include_directories(texassemble PRIVATE Common) target_compile_features(texassemble PRIVATE cxx_std_17) target_link_libraries(texassemble PRIVATE ${PROJECT_NAME} ole32.lib version.lib) source_group(texassemble REGULAR_EXPRESSION Texassemble/*.*) @@ -416,9 +418,11 @@ if(BUILD_TOOLS AND BUILD_DX11 AND WIN32) add_executable(texconv Texconv/texconv.cpp Texconv/texconv.rc - Texconv/settings.manifest + Common/CmdLineHelpers.h + Common/settings.manifest Texconv/ExtendedBMP.cpp Texconv/PortablePixMap.cpp) + target_include_directories(texconv PRIVATE Common) target_compile_features(texconv PRIVATE cxx_std_17) target_link_libraries(texconv PRIVATE ${PROJECT_NAME} ole32.lib shell32.lib version.lib) source_group(texconv REGULAR_EXPRESSION Texconv/*.*) @@ -429,7 +433,9 @@ if(BUILD_TOOLS AND WIN32) add_executable(texdiag Texdiag/texdiag.cpp Texdiag/texdiag.rc - Texdiag/settings.manifest) + Common/CmdLineHelpers.h + Common/settings.manifest) + target_include_directories(texdiag PRIVATE Common) target_compile_features(texdiag PRIVATE cxx_std_17) target_link_libraries(texdiag PRIVATE ${PROJECT_NAME} ole32.lib version.lib) source_group(texdiag REGULAR_EXPRESSION Texdiag/*.*) @@ -497,6 +503,7 @@ if(BUILD_SAMPLE AND BUILD_DX11 AND WIN32) target_include_directories(ddsview PRIVATE ${COMPILED_DDSVIEW_SHADERS}) if(NOT USE_PREBUILT_SHADERS) + #TODO: DIRECTX_FXC_TOOL add_custom_command( OUTPUT "${COMPILED_DDSVIEW_SHADERS}/ddsview_ps1D.inc" MAIN_DEPENDENCY "${PROJECT_SOURCE_DIR}/DDSView/hlsl.cmd" diff --git a/Common/CmdLineHelpers.h b/Common/CmdLineHelpers.h new file mode 100644 index 00000000..f81c3c78 --- /dev/null +++ b/Common/CmdLineHelpers.h @@ -0,0 +1,356 @@ +//-------------------------------------------------------------------------------------- +// File: CmdLineHelpers.h +// +// Command-line tool shared functions +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +//-------------------------------------------------------------------------------------- + +#pragma once + +#if __cplusplus < 201703L +#error Requires C++17 (and /Zc:__cplusplus with MSVC) +#endif + +namespace Helpers +{ + inline HANDLE safe_handle(HANDLE h) noexcept { return (h == INVALID_HANDLE_VALUE) ? nullptr : h; } + + struct find_closer { void operator()(HANDLE h) noexcept { assert(h != INVALID_HANDLE_VALUE); if (h) FindClose(h); } }; + + using ScopedFindHandle = std::unique_ptr<void, find_closer>; + +#ifdef _PREFAST_ +#pragma prefast(disable : 26018, "Only used with static internal arrays") +#endif + + struct SConversion + { + std::wstring szSrc; + std::wstring szFolder; + }; + + template<typename T> + struct SValue + { + const wchar_t* name; + T value; + }; + + template<typename T> + T LookupByName(const wchar_t *pName, const SValue<T> *pArray) + { + while (pArray->name) + { + if (!_wcsicmp(pName, pArray->name)) + return pArray->value; + + pArray++; + } + + return static_cast<T>(0); + } + + template<typename T> + const wchar_t* LookupByValue(T value, const SValue<T> *pArray) + { + while (pArray->name) + { + if (value == pArray->value) + return pArray->name; + + pArray++; + } + + return L""; + } + + void PrintFormat(DXGI_FORMAT Format, const SValue<DXGI_FORMAT>* pFormatList) + { + for (auto pFormat = pFormatList; pFormat->name; pFormat++) + { + if (pFormat->value == Format) + { + wprintf(L"%ls", pFormat->name); + return; + } + } + + wprintf(L"*UNKNOWN*"); + } + + void PrintFormat(DXGI_FORMAT Format, const SValue<DXGI_FORMAT>* pFormatList1, const SValue<DXGI_FORMAT>* pFormatList2) + { + for (auto pFormat = pFormatList1; pFormat->name; pFormat++) + { + if (pFormat->value == Format) + { + wprintf(L"%ls", pFormat->name); + return; + } + } + + for (auto pFormat = pFormatList2; pFormat->name; pFormat++) + { + if (pFormat->value == Format) + { + wprintf(L"%ls", pFormat->name); + return; + } + } + + wprintf(L"*UNKNOWN*"); + } + + template<typename T> + void PrintList(size_t cch, const SValue<T> *pValue) + { + while (pValue->name) + { + const size_t cchName = wcslen(pValue->name); + + if (cch + cchName + 2 >= 80) + { + wprintf(L"\n "); + cch = 6; + } + + wprintf(L"%ls ", pValue->name); + cch += cchName + 2; + pValue++; + } + + wprintf(L"\n"); + } + + void PrintLogo(bool versionOnly, _In_z_ const wchar_t* name, _In_z_ const wchar_t* desc) + { + wchar_t version[32] = {}; + + wchar_t appName[_MAX_PATH] = {}; + if (GetModuleFileNameW(nullptr, appName, _MAX_PATH)) + { + const DWORD size = GetFileVersionInfoSizeW(appName, nullptr); + if (size > 0) + { + auto verInfo = std::make_unique<uint8_t[]>(size); + if (GetFileVersionInfoW(appName, 0, size, verInfo.get())) + { + LPVOID lpstr = nullptr; + UINT strLen = 0; + if (VerQueryValueW(verInfo.get(), L"\\StringFileInfo\\040904B0\\ProductVersion", &lpstr, &strLen)) + { + wcsncpy_s(version, reinterpret_cast<const wchar_t*>(lpstr), strLen); + } + } + } + } + + if (!*version || wcscmp(version, L"1.0.0.0") == 0) + { + swprintf_s(version, L"%03d (library)", DIRECTX_TEX_VERSION); + } + + if (versionOnly) + { + wprintf(L"%ls version %ls\n", name, version); + } + else + { + wprintf(L"%ls Version %ls\n", desc, version); + wprintf(L"Copyright (C) Microsoft Corp.\n"); + #ifdef _DEBUG + wprintf(L"*** Debug build ***\n"); + #endif + wprintf(L"\n"); + } + } + + void SearchForFiles(const std::filesystem::path& path, std::list<SConversion>& files, bool recursive, const wchar_t* folder) + { + // Process files + WIN32_FIND_DATAW findData = {}; + ScopedFindHandle hFile(safe_handle(FindFirstFileExW(path.c_str(), + FindExInfoBasic, &findData, + FindExSearchNameMatch, nullptr, + FIND_FIRST_EX_LARGE_FETCH))); + if (hFile) + { + for (;;) + { + if (!(findData.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY))) + { + SConversion conv = {}; + conv.szSrc = path.parent_path().append(findData.cFileName).native(); + if (folder) + { + conv.szFolder = folder; + } + files.push_back(conv); + } + + if (!FindNextFileW(hFile.get(), &findData)) + break; + } + } + + // Process directories + if (recursive) + { + auto searchDir = path.parent_path().append(L"*"); + + hFile.reset(safe_handle(FindFirstFileExW(searchDir.c_str(), + FindExInfoBasic, &findData, + FindExSearchLimitToDirectories, nullptr, + FIND_FIRST_EX_LARGE_FETCH))); + if (!hFile) + return; + + for (;;) + { + if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + if (findData.cFileName[0] != L'.') + { + auto subfolder = (folder) + ? (std::wstring(folder) + std::wstring(findData.cFileName) + std::filesystem::path::preferred_separator) + : (std::wstring(findData.cFileName) + std::filesystem::path::preferred_separator); + + auto subdir = path.parent_path().append(findData.cFileName).append(path.filename().c_str()); + + SearchForFiles(subdir, files, recursive, subfolder.c_str()); + } + } + + if (!FindNextFileW(hFile.get(), &findData)) + break; + } + } + } + + void ProcessFileList(std::wifstream& inFile, std::list<SConversion>& files) + { + std::list<SConversion> flist; + std::set<std::wstring> excludes; + + for (;;) + { + std::wstring fname; + std::getline(inFile, fname); + if (!inFile) + break; + + if (fname[0] == L'#') + { + // Comment + } + else if (fname[0] == L'-') + { + if (flist.empty()) + { + wprintf(L"WARNING: Ignoring the line '%ls' in -flist\n", fname.c_str()); + } + else + { + std::filesystem::path path(fname.c_str() + 1); + auto& npath = path.make_preferred(); + if (wcspbrk(fname.c_str(), L"?*") != nullptr) + { + std::list<SConversion> removeFiles; + SearchForFiles(npath, removeFiles, false, nullptr); + + for (auto& it : removeFiles) + { + std::wstring name = it.szSrc; + std::transform(name.begin(), name.end(), name.begin(), towlower); + excludes.insert(name); + } + } + else + { + std::wstring name = npath.c_str(); + std::transform(name.begin(), name.end(), name.begin(), towlower); + excludes.insert(name); + } + } + } + else if (wcspbrk(fname.c_str(), L"?*") != nullptr) + { + std::filesystem::path path(fname.c_str()); + SearchForFiles(path.make_preferred(), flist, false, nullptr); + } + else + { + SConversion conv = {}; + std::filesystem::path path(fname.c_str()); + conv.szSrc = path.make_preferred().native(); + flist.push_back(conv); + } + } + + inFile.close(); + + if (!excludes.empty()) + { + // Remove any excluded files + for (auto it = flist.begin(); it != flist.end();) + { + std::wstring name = it->szSrc; + std::transform(name.begin(), name.end(), name.begin(), towlower); + auto item = it; + ++it; + if (excludes.find(name) != excludes.end()) + { + flist.erase(item); + } + } + } + + if (flist.empty()) + { + wprintf(L"WARNING: No file names found in -flist\n"); + } + else + { + files.splice(files.end(), flist); + } + } + + const wchar_t* GetErrorDesc(HRESULT hr) + { + static wchar_t desc[1024] = {}; + + LPWSTR errorText = nullptr; + + const DWORD result = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER, + nullptr, static_cast<DWORD>(hr), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), reinterpret_cast<LPWSTR>(&errorText), 0, nullptr); + + *desc = 0; + + if (result > 0 && errorText) + { + swprintf_s(desc, L": %ls", errorText); + + size_t len = wcslen(desc); + if (len >= 1) + { + desc[len - 1] = 0; + } + + if (errorText) + LocalFree(errorText); + + for (wchar_t* ptr = desc; *ptr != 0; ++ptr) + { + if (*ptr == L'\r' || *ptr == L'\n') + { + *ptr = L' '; + } + } + } + + return desc; + } +} \ No newline at end of file diff --git a/DDSView/directx.ico b/Common/directx.ico similarity index 100% rename from DDSView/directx.ico rename to Common/directx.ico diff --git a/Texassemble/settings.manifest b/Common/settings.manifest similarity index 100% rename from Texassemble/settings.manifest rename to Common/settings.manifest diff --git a/DDSView/DDSView.rc b/DDSView/DDSView.rc index 49efb346..c1986b18 100644 --- a/DDSView/DDSView.rc +++ b/DDSView/DDSView.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_MAIN_ICON ICON "directx.ico" +IDI_MAIN_ICON ICON "..\Common\directx.ico" #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// diff --git a/Texassemble/Texassemble_Desktop_2019.vcxproj b/Texassemble/Texassemble_Desktop_2019.vcxproj index 7b6a3228..bfb1435d 100644 --- a/Texassemble/Texassemble_Desktop_2019.vcxproj +++ b/Texassemble/Texassemble_Desktop_2019.vcxproj @@ -134,7 +134,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -159,7 +159,7 @@ <Optimization>Disabled</Optimization> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -183,7 +183,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -210,7 +210,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -237,7 +237,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -264,7 +264,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -298,7 +298,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest" /> + <Manifest Include="..\Common\settings.manifest" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> diff --git a/Texassemble/Texassemble_Desktop_2019.vcxproj.filters b/Texassemble/Texassemble_Desktop_2019.vcxproj.filters index 1dc8bda3..b06f1951 100644 --- a/Texassemble/Texassemble_Desktop_2019.vcxproj.filters +++ b/Texassemble/Texassemble_Desktop_2019.vcxproj.filters @@ -16,8 +16,11 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest"> + <Manifest Include="..\Common\settings.manifest"> <Filter>Resource Files</Filter> </Manifest> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> + </ItemGroup> </Project> \ No newline at end of file diff --git a/Texassemble/Texassemble_Desktop_2019_Win10.vcxproj b/Texassemble/Texassemble_Desktop_2019_Win10.vcxproj index db3158ed..e3000243 100644 --- a/Texassemble/Texassemble_Desktop_2019_Win10.vcxproj +++ b/Texassemble/Texassemble_Desktop_2019_Win10.vcxproj @@ -191,7 +191,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -216,7 +216,7 @@ <Optimization>Disabled</Optimization> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -240,7 +240,7 @@ <Optimization>Disabled</Optimization> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -263,7 +263,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -290,7 +290,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -316,7 +316,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -342,7 +342,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -369,7 +369,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -395,7 +395,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -428,7 +428,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest" /> + <Manifest Include="..\Common\settings.manifest" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> diff --git a/Texassemble/Texassemble_Desktop_2019_Win10.vcxproj.filters b/Texassemble/Texassemble_Desktop_2019_Win10.vcxproj.filters index 1dc8bda3..b06f1951 100644 --- a/Texassemble/Texassemble_Desktop_2019_Win10.vcxproj.filters +++ b/Texassemble/Texassemble_Desktop_2019_Win10.vcxproj.filters @@ -16,8 +16,11 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest"> + <Manifest Include="..\Common\settings.manifest"> <Filter>Resource Files</Filter> </Manifest> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> + </ItemGroup> </Project> \ No newline at end of file diff --git a/Texassemble/Texassemble_Desktop_2022.vcxproj b/Texassemble/Texassemble_Desktop_2022.vcxproj index 4f576ca9..1da5d713 100644 --- a/Texassemble/Texassemble_Desktop_2022.vcxproj +++ b/Texassemble/Texassemble_Desktop_2022.vcxproj @@ -134,7 +134,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -159,7 +159,7 @@ <Optimization>Disabled</Optimization> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -183,7 +183,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -210,7 +210,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -237,7 +237,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -264,7 +264,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -298,7 +298,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest" /> + <Manifest Include="..\Common\settings.manifest" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> diff --git a/Texassemble/Texassemble_Desktop_2022.vcxproj.filters b/Texassemble/Texassemble_Desktop_2022.vcxproj.filters index 1dc8bda3..b06f1951 100644 --- a/Texassemble/Texassemble_Desktop_2022.vcxproj.filters +++ b/Texassemble/Texassemble_Desktop_2022.vcxproj.filters @@ -16,8 +16,11 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest"> + <Manifest Include="..\Common\settings.manifest"> <Filter>Resource Files</Filter> </Manifest> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> + </ItemGroup> </Project> \ No newline at end of file diff --git a/Texassemble/Texassemble_Desktop_2022_Win10.vcxproj b/Texassemble/Texassemble_Desktop_2022_Win10.vcxproj index ac95131c..bf8a75b5 100644 --- a/Texassemble/Texassemble_Desktop_2022_Win10.vcxproj +++ b/Texassemble/Texassemble_Desktop_2022_Win10.vcxproj @@ -191,7 +191,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -216,7 +216,7 @@ <Optimization>Disabled</Optimization> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -240,7 +240,7 @@ <Optimization>Disabled</Optimization> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -263,7 +263,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -290,7 +290,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -316,7 +316,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -342,7 +342,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -369,7 +369,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -395,7 +395,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -428,7 +428,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest" /> + <Manifest Include="..\Common\settings.manifest" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> diff --git a/Texassemble/Texassemble_Desktop_2022_Win10.vcxproj.filters b/Texassemble/Texassemble_Desktop_2022_Win10.vcxproj.filters index 1dc8bda3..b06f1951 100644 --- a/Texassemble/Texassemble_Desktop_2022_Win10.vcxproj.filters +++ b/Texassemble/Texassemble_Desktop_2022_Win10.vcxproj.filters @@ -16,8 +16,11 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest"> + <Manifest Include="..\Common\settings.manifest"> <Filter>Resource Files</Filter> </Manifest> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> + </ItemGroup> </Project> \ No newline at end of file diff --git a/Texassemble/directx.ico b/Texassemble/directx.ico deleted file mode 100644 index bc43c1b2085df668dffff26d80adcb0ef73f23a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25214 zcmeI5cVLg#_xSHS39<K{N$gl5#7Ky}cWYMBBC$)UXj7z0)oe>q)lv}=A(BYsjRYY` zH7TWNZ8b`*#-_&kz0UJaROjc@&v*Uvdp<p$_wzh=oO|xMXWe`9F~(+c8ZWN`Mz3Mn zjakgy&CT(A*~yrvyem+^@m$qr%#S$@<qh?6n23DF<jbw)GoN!9lTcF2JD!JSGiHEC zR(UrQQOTISRkF(SOt~?gv&y@fVJ^lL8(>UTaG(n_2(TGm{_PcFOh|~~Ux5GdBRM&l zyS@?YKO>^Qtc#yK@=u5{>Hq1KU{6RG^@qxdybhWe6!5z*iT1>iBLf2i0)G1;F)?^# zV8BFP|K>v)#c5rObN$+f-L4fz{=Pz5qICr&I2w9ZA=o!DF>ZWtf_-8F&HR|vwHA+S zP{nE~FzDAF;&|;H84$z(0_?9pt3dI%xLlFpBZEgyw2$=+&#I6b7nfMqGcq#Jo?s8G z>p4OzD5~12M`UDVKydKL!F9QFDK%(Ci${(KPDs!KRM7WnalYOj`aV1;F?cLL!o&HH zo}QYR=;fsCL<R=iy?Ad`puD%YxAE}gMPOpE6R#s983XTq6TKZ3Mg)6X^*pTi<Kw*J zsKA@>!B+pF9>D>DqtX+7<Kp7HXelys&091Q>fufKQRxlhe0_a0Thhkeyn_+~CQ{y; z@%qw|zKo3Ya1I_BkPwiRKHirPap3Byuh&#)kYKk51iqc_c<t-$cpq6II5=oz(8RaX zgMGbyedEB@Di8JSi3tfoZ>QV6y=gx#&M~CO@L-E!DDMq{D4+R$L?E-5kdTxfq^}{V z_R1Ab1$!d>rj4h4Uq|aorEn_P6QL)?y&bKD>Y%L(3D6A!c{^J1u&ALu1T$YC<mDKw zb0(RB?Mb|E5SKZoP-`L>vv07zrvnFZ+<fWBBQmstFWqVf-o~0pXGXz9ggRTzr>6(= z!6P&>)SF>b!Oc5So1q~)?>!?cSoAO+&WTntd<gaikx*xd1o@n^ic=v-dw@>R!`nNv zb#2Msz{^zdR)W)mg`~cvLSh3i$ZcKETGtOj<9V&ceSNL5>O1SQ2iYm_>+2vv)?4oO zVC(vAY5ksR*Xy~GfAJGJWQn3*@5$vY`SjS>tb2wrQ&nCi8&h8I$gKQ&N0Pbn&r|Ns z+#hqdaeu&FKT?f~#+=o=|F8FCeJ+oD%)E!_J-;Oi|Mae(jjQ$Vf6F~YoBEUflJ)&_ zc%9Yf=kU%NPuBRd#+x;Mp}5lH8GVvzPM@>rmqkwr$#2osBDh1(xKXzm@PDpn(hw@6 zeq|K<#EB}>vtFboCR*Y;vjmT-B^+XuGRWN^>Z^9p8fl4fb;E-bf`WL~8fkG}p5Y@$ zP8^Fw*5^c(l4}y|bt4hD`dOu8Kw?lXmB6Erv$|-*gU0Jy>)DbHBfTQIkcZ>rkhY$Y zYgBZ2ObkdzXj%n$40YxiS;=bE!lBM8h{v<Ayqxs80*WLMb)Yr$c@+x8`i>OP=SUTm z$VuN!v4jLmNU+3_Cm%yCkv3Arik1$wunc}XJ(c0{{Dt-ziX=%H@1<g{f(qsex;*Ww z9gta09v<E*QBuc)ubX$A@u=Xdf+uDCSSNmhq_aa11tI^O!NS{D#UT_5@^(fD#61%{ zsX+}?R{Xm58>lQ$VViZO@cg#p!Lh#i_pB~&XL-tMg_ozop8jWHRfS|$MhI-21%{>l zcaT+1@5$6Xo7s-GscmZ?+L!jJ_EZ7D4fx;T^R!Gpw8Ns%AkH-?5WY#P8yP${JRm(K zS7cz_$bfV-*cw=Fl%=vlCyw%tgTtyMjIxwcVB#oCQHBR6r8qIyk?Yb^>qf5f3iVA- zAMcsls{#|3T9+A88mBf;%8SH#J@6kn@@)RdfMnP7^blunj}YfI3C0!~Zfxo4##YzU z*a8yuImCGs-<>>?UBiPYANjz4RQhl2&Kywd&#$ArJ_zgwz6R2OFM++l9$*)+6W9(U z0b2n(unC9*Vt^=MEf5ZT28;&+0Y4zrW-|+bQ%+7M8Q2C)=D8QJ-`Uxu06TyfAl}8r zyvO}g_Uxt--@oO)2MEiS&3xzTYPJB$IdYhGl&MQQ@%)YgR`NbIS1$7~Up})vcW(0o z_w+n@%%{9Nls~`OQ?Q_k;{HqV;^rqHjOUXjN|=2mOPZ(d?#9mVI~6LJ!{y4E3mzV3 zFlDb-s$@!m&l68ivxIVa=x=q|vgU4$8pb<kPV-%rDrO61_g1ZHp4O{pW|b*p?r^^Z z9Iso~JoWW8k=3f1drg{{r!88Tr)}DpJ1tupY2V&#_3<%jetssPe0ftJ2Sd7aF%LR- zHW%BrHPXGiiD=NkNY9=ou~{?Ip1x<}q)5Mh=3ejK<{oz$Fu;7-v7@oKZf)e1SIii2 z+|j9%k$?abOB<I54m9`py@@h1YLrQ!{q(+l&5uKenrQm@Li>6Bbz|?*!+1lFd*jC& znKa2%D^kSB<jF?fdB^+|6lCPR_slQvzH9DrmwEF{#LF+6fJTjsEL>=Q<lP>vw{)q= z;8~V0Hxe3Z9<5wyRt+C+rh~tPhnut+GmNZXZ!-8T8#kIe>(&`bNHCA$;*4zBVjgbV zWMunxb9U`oBfEAP*|W#UzJ2C0-(>%OGoL;lfBm(&#<vvede^Lpv4FOG^2C@&kBoWv z(3t!8jk$Bjn433^`T1vKu3tCir=M`}el+I71&oHX#+*50%<<#KeEY32v~T9mH-@p= z=)<;mud&g-ZR=KJi;p+9s3>C#3p2K5%ZzR2Oyfi!PV`}W;|-NU#+iPz-MwqF^E*3z zI6=pp{LTa9OingAKKQ_7A2!T5*QsL)+`erJf^RNpnw_~X#&4FWDR%X$$unh&ae;q| zef5<o%lk6leP^n2uYCEksYhEid9HizoM~|Hp7G^<cKEa{<9?Cf-7+#vlb9G&qE#zX z3?3^0Uv@cs*bL$Q2+B_cKfkx%Hno|vej7HJ@uyCi5a`_U)mP18%FX=b6ILg7#sB)% zf5?cjlcr3cIs4z}xm~+n{f3MfKV=%l=gs?Y!NR|-)2vy$Ui|~cYul7vuyDzeB}<q7 zWsOcP+O_N6_m$C;rp=s9%S)Fo%e?-)MvE4mI(6^ftFNLnefGQsOP77Vl553^&p-dO z3T@hS>eQ)Svvx1^={H2Xn73fbvX!gC!opTj<&PEGv}x0#1xnhlWzQG-zCsr>W`C#^ zR<B;IHGW^ARjXEhe%{{Ro=t`i?a7$OT7y{fS!j6V+BK`geqW(gQ$N4@l`2&#Q10== zhyjX`MWl~DiHKMi{>KVknl{zawu<WyU%c^X(O^Yr(zF?~K3M$V=SS<bhgB<|8+4bJ zP3xB`Rm!DkMsn=AYj+;K{?aQTG-djGbJm|ZedCE$VdaWt&&JTQX+uwnm%W*?G3w-x z*MFHaSm$`sJ8#X+Ncrl@U8_RaujRY6Y*@t@mx>v?;$xzYUAT7V>6n+`q4B|!LsGZI zT)2KuE397mc~%E4{e8+i<t~=7duv=w)S+{9zzF&WjCyO_t(1glI@Ahbt3J=<jBfso zs=5{`c5{15l6~WbbVmn$`t~0@G$bu4KKjtPD_S9Z<%*?CtPyncuUj=w$>LX!rtVJO z92b3n4j#>Uv3s8Z18?r4fv9iK{Rj=#g|ArZVAgK_HA?3#S+4EXwA4L26F0?tt0M^P z^kVNpM-$^?Hf-1sv;XwvhfhPlSh~P!ziXo!rE?XmNQI-@_ogHz#2#Y=le=|oosqIB zHYR3cyghN}srwP3%N^yrb!}d~OwL^SOO~tL;lvJbvd5gea^vanff?H<9vesL)T1}& ze(>qCr3>cKftJscD~D_DB1MaLID2&ap5%nDFI>6(^UptQ+z=hJ(Vo2L%bOu{=gj|j z>5>n1g;Ksk-rPA|v$+<is9kK|of!A+g$ozX9Xk*e6`hd$<*kr$lizyp{do%)&YMa3 zm%BFh$e%Y?j%-d&u7&C1VCpt|^tUHZ9{cvtfkWTyKKky!p<~{dIAz+*4;Rdvo>{&? zzC5{HU2Mjdw`{ErX(?MaMjg`9-yZwn!LZ>229F#)cKoF2vp<|Y%~8H!!Tfo1(}B&H zg2gI-w|5Iv$6`8g?A)dM!w0<7|CJ#DBSy1;W=^4eVDH9-3Kh)n=)ky?EPi&cJ$6GB z7v+Dty?8*MzJ2@k?>}Vhw3#y|QU0};n^Y@Y5R7tWceWYllC_Q|!$wh2RAFXs=u~&_ z)vH(EfJrl^jkn5otW%f@7Di6_%AMG`DK<K4Lv(Cx%m#Sr?xWY+adq$BZ|sywW3_x> zZ#n=YXq2;1@iVj@4G+X6Y_`Y8z?^p<4QR&Iu2;bLv07eU>)oVI39CZBl7sfxH%5a= zOx)IOyS61J#99?z)5t*g{v!gkxV$#BW0N9Up+vEaU2)OTiu=aIy+_khQ<67Z6@FQS z=xEpLl_8Gu+Ch;bMatGZnq)N|6%}jWd$YsUgJ161rWLMT|0SZOceCz&9pxoxXvYR6 z%a(ih=uVJPLPp1JyIH&@ykS*1cHzp6hr^q;>)y+1USz^+z1zb&2UB;!{fbTO)+05G z6e(KEQDNi0@6X@w(X>;qewpRzpm&dQmCx?jYgO0~vuV$uLN3_~Dl^f;R(taCnvMNB zWi?L+K||ZOuGJy4LQMR&n<cZ^Y|aJB7KdH;?AIGP{UU)UDd6A$ALwjh2H0>ci z@o2GJE>2X)M}>piQ;&A8*wC+2pI?iMyy>X$ouZVuw|HTegNrj2iq^V%l;S>qZC-f3 zxX9FJ6;k%xESoPk3yvDu3Ky%@wsYCKO<TSA+u~FR0;SF!zDwJFqFmwpdGqATsWoyI zDO#*zy+0{Vg*S%|A2_J(trNvd!c6({=FXMVHG4L9uf~m9{;_rK?aenQ3?DaaP|dQ+ z8wKbhcP_W8bsPD&?9%i1$T*&ZroKIS__!V&n>6<F@~U0CdcAs${QbLh>G>DMsYHzl zLx=Y6-L*Ma*RI{T{-(6{GU3gsZ@v~782IwbFAuOTN7sM%?`yB?HD=710R#T7*gyN0 zWe4d!xjd$qk*qiiPUuv9PR@+Ogy5j+Gq%(Jk6Zm3x67i(e=TnH*M2JGH`{<jU<;4{ zsQ(!YtOiyAD*^RCKLSPr!+{~d%RnE%2k-(s0k(2XVL(HI@8N6iz`siZB7l`ZSKhS% z67e-R0#U$Z-rMmB=kPlYpEL=-^CZ6DYVJLGzaQT-37<2PcfORloHwt@Pa7}ueF^^P z7x<+~g$kL6rAnEvixo33QT9^l(k6l5$MGN6;ftm4oXGD@+`n>jGq>?G7vcl9rvA5; zE1Qe>KM55pnkV>~8TgrdvHKr1Zfw@$M+iRU5u(}Bw5j=tcY<$_fe-m5K3lT-lpQ)4 zd;R*RGyQyrPbyuzT7Ku(l<@@DAKSGvmFeduKH_$KiuKf6gb$;>=uXOSZQk6((zd+x zlKB!}W;;G@EboVd<JZ*5!I%aAq8@(a<^KIGe>4#v^g&>tk&z=!96o9i{;m3+AJNvE z_`zZ7qfVS?meF?t{p=q+*a&{hWqhrUj8~>lH}~+JBJf{}ft$>oYnJutV*>H7pW=5$ zQvQ(ote<}R%m<Z-2qXAdrx!0af-m=o--53+Ui;p>*<4j0G%?Z0wr%E?-EL;!7fVWt z+5XW-M)1YH<NMv+yUl%m@4|0QkBv3%`2N)xXIbV(_u!uSpAU#o;cprIErYN38z1z_ zm0x|(^XHBE;RlBwiZ5oq|K1q<JA-d)(ulgGrWykdX6H_VD@0eo*MPghFE-#{R>9$m z78$c(fid{@X2=j@!zZ^*n`WGnl8iGxq4TwC#u-1>>9fy_%j3t!1z*+$-_MD;a9Og% zxZ=mU;wNXP?`-($E{xZi_&^SDcftS9NgMeXTXxzn@XIeI7wr_`Irr?@rYQBw;Cq(C zH?6=uC;U}|d#xKcj0b&q>o@#fKl=5<xAi-6#I)yK8~kyPv13gS+V&wf@FIN;<h={L zKM3EvKmPbg{Ptn^;e#2+IO>I*K5gFq@=NpK#fxSNc<c4g<oVy09z0@f(3EL2-v84= z?b~-BjQ92a>^XDi&j0WaMR2?*FgAGFtoaK*Ui7iUWPetwb<?Ka-aZ|=^u&RCf9}Vh zeEP|vkDq-MY2o8jvzpf%PkVPBI68RRjCo6!efH@mzZPiWQ?qjUGMBF24e2s)bkNk9 zAKiSg{PX7uG^||GePrs%%eNm7ql35KUHR>mM=L)6bWvsx4Xc$ddnO_B*u{+d@4Ynm zwYMf8i8_D#$%@ZEaUj{eo?DrtN%rXQAFj~Az)=%I?dy(Tp}=PgtYJ2(TcPlQok{i$ z;pea4f4A?D$=}38hW&8m)}!T%=W7p5Jc}1Bma+?zFydmy!&e7{#;;!+v3B3NYfqQW z<#U_Ho;mXtF1CBmj;(QrF5mcQ@>dZNYop>4zW!;+!nw2bdnK1#`3e_1us3;2%*l&C zo;$W`_1c)Nd%u`I^Mg4v`0nfB?2;=_!J>D*PmEuC{D;%WkEL%o96EWzTT^GL;or@# zqKlKWYw`Sri|yI8F6`Lx<EPL5{K9}?qh1S|_CAJw|CVmqaUq;@<}GqzQ{?JZUmiPs z{@NQa_8K^FMDUCtk)bWCyQxK=v%ovsq9Ve>BO(s|aOK{_E*(4f96JR=erS(IrQEV- z&t3LZ{JJ&aYu3kX+;He(#xEhgTelxPezXu~YgEP6)xFUE^=rachp&s<n!0)8cb7Bn zKMrW!eZ*i0Fs5Cd;syGp#jOhu3yX+JyRdi1*4Tp=uitvurlVysjd|6->V-W?3DFT$ z-~3LIVn>rVM@O7Jce7=yj!NHG#|?O)*3q35Si3g*Oo6<G@9f>aIX?by{f4bN>vtJ9 zF|bdu6lQ2+?BTLGa^x?1VAuA<BUqDdt<P9^lLGq;PuaO`Yigg|#>twk?`u@|X`T65 zUUd}MmHd4^4l}ssDO~G9jVcXWcggxL0TdYd&VdsJb3;j|TzSgWuG6qZr)Qsq0u$eu zJhGX4sq!8rOO&f#$FKQsK2vgB$fOAa+W9qTP`7d8CT%)&c&@VJ=gZ^Xe0|K&LH)b- z?%n%OK5L==Lx&C-GNgCcKh(8eum|vezwhwZc1jYmN^KO4lWzpnKFNxaui^I!U?DIC zP#Z;K<Pq2oE3qdAp+9}GG1Qh&`ymv47q2mG;?W1O5r$!3T*7upELzm;Ar=_NJ3r#z z5$N*}?23D}YMC>{oX=w;d`4_}BX+_8exF5$-$wu6MxSQ@b!m4o@$GbMh|$;>n;JGW zt!OjV-`_~DUS=n{S%@{ys$JWhL}%a8SS~t0347u??=}AXgt%e?`ahJi5xk#=KG=*s zv61pG(r<J0<O+>5Pnci?U9S553~^z3>n-zm>Qp0h=9m!G{hxns>Fqnn`48x$ui7o> z>k`E1e?foAjveL+dRpVcmw7&luGxyNpNqaaMLhE$`nw@^gr$$sJytweb+YPXVxd+% z7@cL%B~~n0<G<({gKjtI7)$5Ura>PXY!t&7bhpVy8#daop_6Rrf7`5C#)%lR)5(*@ z>6>qiGjU&M^p`7r=Dc;w<h*prI1>j}{h1eCpC7%K9le{4F&3qsE8{PT4lGOgY}jn& zu^C*Mll<6170`bk)TxBMkeir(UHWc>j`XLkGGoS=meljbPQc+YJ&9cx!qyu_eET)} z91<OEDq;(jW)Gk#asPL*ALcWzk;LbFLvJ7Ev^;wo@2lPL|F8dX3at6Ft8S|fox4B# zP~OeAVY^N*^zP|+Q=;(8pZPax-!-&<FMUxg|9dl*gx7DoeBR2JUgSCN(&29{Sk|EF z#K{Z4=(A=`sqBSb8#!gss?|eY9Y4Qs_cbM*auk?8YT5_yj0^g>W0%frN@p|9x#tXh zJ7ngHdX3w4SX05(#T0yZ@SxY<|D;(Juhwg7=F3^;jX?v43=96~(|%Qb)~xZUHahT? z0dsqdnKXNGCHiYpYwU=CH;d<*HEKeQ%8F3S7E_0RZga`=VRLtVT(hQ4x3F?Wik9`P z=y>E`zXo+`S9d%iqZ>Z(cW2-7^6g~To+Cn>-(4Bv{Ah)-En-pW!fIH}*v_zzc`+lz z`K7@j&XbQMyWW0sHvcCJ9>DNbnIZMj1_3tX#=rkFSF>i#T#6Sjo}1PS0VM%9pc0@c zsEep~eRc!%yOzrZI0OGzmlGZ5%AGrR@$A{NS95W3Y3l6k+#ML?<m5C8cmsHwGOAvJ zGoMH4cb>ZeO#mHNF+j(n?fs8l@PkchU8PEuyyeQ3^C(fGgnzZ-#Rp9+S8mCQYSp&y zXwcxh?_0IHbftUuJNE|;eDrkWNVz|D?4zH?jk|N?wb!m}89MaDqF%lB4Qkvtx^UjS zvl-J^5bgyu2Fd|ChyNpU5)u;P#Kuf+cX#*lWy+LkHl=v++41Gd?KxAm>J@3&P^2}s zRkv<}Zp1bs{HhV#NkoySP8Ie}1z%O<qmM)uFBbMm<=A`gU0*e9*dcTr3P(>hnSp>W zP#VYq*nt1?r8MU_O|~XYniM5=SATA~a_{dhRqDW<a^)UM_39#x8;i7SC+K<%-=SD- z<Ai-*2hQ`c_7}2sp*v@~we`gpB4J^|UarWRHG*#~cS1uS#=rUI$$`zA$ARo*K<A?- zPyqOk=R)yTSg>G$YljXU%1@|PZNS#@<+opTcfb3na%Fi^tCmRp`XVh`3b6||8(tO} zjdA|gTMpbm_&{U{+ce9UJ8+JS6xpyr@clVX5%&kUv1ZM^mE*=8u2;G8a`<W#xT`r< z{GW~?3vcdD@JtSzM2}?^D^CB$&F$o!N|oe(&6@JCc5QiFx2{ONdJg)xYUSXae#E_p z4I>mf!NE7P*>zEVQMxPs8#jvB?IKA@!alhJwrvyQ7sCFz^)2nAk1h>u-`>s`-b5y} z1^-fj3-E7UnfN<%?kH!ME?p|FuT*LANe_=}KZE-%PfxiE&)nz!sA^St%DX33s>p*n zb>x1dM)E}0K=<w<0|yE*9tZ!=m?5$Nw^Qd~?OF%j75`nk1UpV-?_S4UpLI-(<y=_U zt&slxQy4=CNOu5q4F8gsvT)}>Q?7pf`gz1utoZ2}clX=Z!1G4Mijv{sA@IH2D^*G! z7A-0d3Ko>Bg$l`0H#a%Syxf7GIG-V$!EmhOz(B!X70y5iXC6eBv9GASuk*kdo~ES8 zlP|xNr)g<ItVkp^)iEx{aU&|~{`-Rmr!og2;NAxKTVBe-{m79c*+-2URcb@!${(I6 zSMK&DcX#;-{H}uYb#T6!Kfm0~lSgjm%qd4)U1cTDv%!5G^gq*}fjnx`L^xOCSkJG% zDxCRn%)|8QBDy9%{ZyW;UM-xxkc+^1*1`>F|A=EoPxtQ^&RdA=-YwYL))?LyFhJ+w zP4L(CplkY1<r4Ti0omuzpI<1VMvd`@+}y65D_vSHfcKB!eHlEjf%A127da0^+icPY z{5gXl{XY9l-XAkYQkylCyNZ9CHX=QG2)>15J&eaGfBS7~T|fEoL*a~xaF#?q9x*~b zWNs4StskNJBgOx~0TG=K9Ru&quU>sCutNu354xsRE~#w&&6P=emmNEH<oU$UujO8M z_rs^a{S0_>en`%P_mA1K$pvR;`3Ah-1w7#u&UXmsGo<5{D>9DXtA-4bAK;(ISu#o2 zGw+14vF9Q(ZJKa?Mh+mOrXsT%^zJSG@cUb=gDtG@pLXt)$5~@geuBS<OG?^;1($rP zR9TMh?hWFqAAYkIGHLIMyeVdPcaJz$wyYd4R!mOh%`2y}XP2{1PI3lF18)?jl!MOB zUw<u}m638(Zt>)a48D0&rXxdA;C;>}$<t0a`?_N@XpjhW7UtkFb8rdVm-p=}eypeb z=(gfN{wTd}-I6)Sj>#@$>s4^J#-QV1Z3uKB&MGTkfBi6ait0JlajK`EU7+B?rfsfu z)vCSnb-8jkkAVA8=>9#p9|!M~;G70v$Ve&0owY}NRXF=2#i)!H5HOY3fA~Qn;F%wh zr;n9~R3B%}0lI;+O|lQ&JjBOG3bt)4PK=kcJkpqUMsi<r_^|9{4A*pBEB<=)PGuBx zbR#0-{@^xk;xp|hwKbmEOLU!m+_-Ut65ZYH2jTaF$Q913$zkaI9iX_+0!o0B6K&&% z3cjg@e*r321;EytgIVa>)Xtr)IUq(a^1=&5LHf&MbTenRWEpF_c8L<=j4ZM-UTvom zb<u$G#)Aj4^vDs%7+BMfbsgv&u$E=hCb3VM0y|`X2i(<OQk&1ZsOlP7xpL2aWy{`4 zhv)YrUpS8^c*c?lj0B3q6HdrI&Q1xw^fUZ(Qn?J^1N4NCUg!HN_~kt1t##0`qsWUd z3TM?MjWr#J-Y$#|F*=7o{Uqj>U!(|ibq;$2Z!)jTjvkeL%!A6M$0}1<7n~E5JK^CE zU-tKp&Rhp-w_2CVdwYcnE50gIM)pDbeaMwP(4A<xyaE(%+Ekp7-v&N32M-Eo!Gtqn zVje%XgjPZN)j4Pl42G9yFIpt&@W(wrKau9m<q0(ZiS@7&Td5xO$%b8Lz|oq=M~@^2 z^~wWSfz}w_xO-QY!au3&*UMGb?_<`$Q~KuYn}m-Z{jIC3>o~R9LEc)&GupN-xy{}E z_}-EwWe>F9jjY)U-t&OwKpxh!4VoI{q=60w8E4L)7Xz-Gdz0++TN<$D0DhPV-PXc0 z7kqu?2|D3E<4;FF3`3U`LcZGIhv#XahE`sn6ziZibJ(6XhTXU!A0R_hR;`lj*c^`) zf9$6dbLU<!UZ~I<^*6xZ;-QF&6?^WfP(f0P7nhyLO3rqQ9lSpVUIb9y;#|JGnAcwy zgFR!SqlG;VF(*%oxpqwqe4CrTD}zHD`X74zy3D|~Oo8?{u$3-(dC5xbjE3lt?8s7c z;)H|t)YCa6-s8A~H)rvrDC>)}a?*e6R{0cNaSFO~wousr5m~W9hWPu(LjUgIuYR1_ zSgF#iUC?HGks`7k-eLbwwu5sNFazicAauo<@fmCagDuZKj2PyYGlXK$0V+!iGX`(Q z&;xu%Gq&Z(($pF?BmvsIjGa*!xnxrwWPI!sIo1$36Q6R7NBQ#jadE~b;#{CKzz&~> z{yvS(%^69Hf7Fip<fWIs%9ShEtDvsFsIgbA8oLAh6AKrXMDXWatt5l*4qzkj0q_z~ z1<1iS8@z3%Oc8?&G4b&Ze$u|dg|ml(29}<zkFnVQ)8L^Y*dK1lA}8dDg*#)_Inyz- z$0g>{B{9f<om0+9N)GJ5@~o8ste?&3J<fZ|)7V&t4T~R<G<x(Ya_?RPbvMA+t5rLg zgl)D3{5K;vx3G4V{wct2KxNQ!U<`l}B21b%sSH6L8f+SipL9(iPdJY$m2?cuLAz6@ zq%Cr!4*eHW+?CGCFO;$5uj&xR{hM!u{WWpMM$+}+gYJI~pKjwTuLx&bg>$ST*h-eq zgZ=c~#EDn)=g&V0)HNnxw$!L`X)AM_z#MaKSrWisaZU#I0Q)lU#D6V4fD#uLzp!{5 za{-;Lb^ZPKmTb)f?iHAWTHI?uXE&fAzq9eqWPy$WyMtsuaZ$Xn0qY=}hCr9)%x^k# za20*WnO%nu!8#TN*5B3O;Jcji3CWZ}Cb3SP`*!HRu|NTdMefIe|7LL82J8a91XLF& z=zOpPDQ^IcfINT=o8RIkbd5z%WV*_e5<p3yFrd#WCtWk|oRt+Pcp?upt`6R>(*H7e zW*>GDXO@LC%kntOhn_X-S05B#;=$W*KPp<Z=ydR}uJli=SMO;&^`o&FHh_N&II(ML z$xvMbItQwQ4+2MkLqG!X7ElLpMdq5IATh`b&IddA1Uyx@<py#AS$OL>3Nsg_u#+oe zyLLck&%zhli;TU5-sW7kJXT*+?IyMT)F)McT77BtN0A**(I3P<-pQi>)`ku5$Kj)_ zN4~9NeX88ib*nNo33z@Eh*%4|#c~+f01N}l1J2l^20pd$SKS7VD%YJe!6kDHYHyU~ z8|R6o9eB+^wtkI{xQ)JkqPkjrX|=u8_UqHfVT0>DC?8>aYb@izm@$t_mMj^J9;>YM z-`uq6<v92*68`7RghXcIMnFKe0J@fyZ@vP)0geL4GoKf7Zw%yM{02Xl*t|nFg5xt@ z2WK6N>N&;V9pD_aynv1TK6b?cX#Y_C25dts9-y|L#x&G^QX5eHAdSVm|Gr2_h+KR1 z)w`ujmwr7*jvVfae?s%--^M|QweaC;*6$kle;qhI&qv8T?*-BU<)80>uYpB?@=!L_ z&#cAgZ6mc$tug3W_-zA}pUNu!Ko9iyczl$##EdR$97f{-%!L(`LGE&P1LGWjROdqd zX>iwZob28EC*o&;=m1o!G4U;1#>XSCBC&tMa^#TJ%mMpLvK~;GqrComKGL-u4|E6e zW82tNAFEzcnXa-$aaX+cx4u(-r7|D+$r*O>1b@z-%MfJh^c_278+`K%aRE_)7ewPT z&{VLs1$ku6f%?+u?>(J59j{QKLLX2^l(R3^y!q?|=59SYK8!W63i~Gvydr?-*Fu&& z+L`&yvW@UTY%0H14=H|%ui~ws&-z~N%nKJBHV<}<%KjpZp$=nEyLl92n9JJV4-Sur z4+!>_V6O-=MOfRMrE$!G#`Rd&ku6%JRI664HK<$mPi&JWUG0o93R`6rJhYNISP2j5 z7}N&UG3Z**^{jGfKH#Oc40eenFI6ugGcDbubXQQjK<#X`w^etk-=Ol9b(>{x6l08V zjIdf|3~kK8Hsl<R+yw_gmW$reWkP($S`QkVB+mD~pWll5_3L|SEY_mGw|B0%)~%1l zz=Pq8`wRTW<>0>(JhR52>md{v0hC5oaJIyOpW>axFIl*&j#U|ion|A}U_%BPbdkY! zG1!vqxjE(oz9I+0vi-X=hT%L<MF)ma{t9-yV9SW!;R|amU{9TI-~M_>Kfe*3J9lQH zEU{qIF~qcJu`HhW(^~j%C3f8B@X%-A`Z@3k5CXIW^0Q8D>I10m&*Bxuo5n2A-^%aE zA*aw#$>r}a1!&6^JZ#7kGjpb8E3jwyn=wFPL3+vn=41?WHV0q%AnWlL=Go#Sja6dL z?(p|dCyv~H`0(Kj>{t9ZG-=W?p<~C}QLL9R=74-9`G`4~0?s{v%E;E7ue~PZr~Jw@ zS#*CMcYO!X+t5#i=}+yY4uB_+i}q~DMS~nP*fSPC>AGNT7Xa@njJ*-{Ij1ANv6nwY z9-YRY{iRwp%a6F*u;If+&6_Xggl3H$J9hjbjuP9ZP4q^1V-2>*GUi|!w%kkfSqXXM zij83V<P+gclfzcbwELgQNF4(>SaJsXkvAiqz<CL<4A8hmJs>w=*{|3HzZnDkMsALf zV<Y6wNd4eonT2jX3IE?m9z8-n;sYJ&)2C1OIdkS{*udg_<(;f6s%g_6aUDC}U@l|@ z`siKOP*29-&KR;`UmIc{27Wfm`|5+Jyi^&ZJfpbln!S2eT(I4};TK)|YImspq_Q{& zXaFEI95$2AgUSHr%39~xMC2d|`9abi-j9KIenJ-AN3LA=@wvC6MT?IoOqfth{ax_? zO$;b&4AHGyFN;U-MZiZ3kY%H=iF~k$^3$giYlA$eU&o;SSJoI5cjjIBrYyQg^_tqP zs_WF|P`#(RL~SP3*LeUN{aC(``g6odbZ&FN_x14s7eKdT*z+0C@vgVG?DF&5J#ys8 z*5Tpd#g+DewQjTU&bmi7YE(6*efzIs;nUUBW4}TMW1o4WmpMP_u=~*?znKSUZd9)0 zJLO}22Y{Q}97=oDb82%O1XN$E&SR58ngGg6hFF%tu2I>P1072~pUi?@-yj38uzoY} z-wroycy@k|9wQemT2%4!<;$wVHP-p3`0F^L{QdjJckOzf{5uI_46|uxF!N9sIg*bt zIHMaa|4V&HT@NbL!QBPk()GF;*a@iJs=TA)P~3GKSz}OMssm(aojDC2EZMQ6y>jQ4 z>Covb?iYv=U1Oi*RGm6E*0yRj51y}e=+GgRIqF9ICGJ`C5Z$WPg!pdVe%5(d#a;zD zjq(a(@S^>^IuGb}gYGr>riM70jo3gb^rXrw)p2TXsO_z`>+i>*e5Lk@&QndG6#B9* z{4y1~??vvNCH{8_zWJec?K|;)e#__1o$Gz_<Vjt#f64b*ct3xSY1?+nrWanw*a)A7 zA%Ewg&j+(Ez3Hz2;~*zb40|m$WKBM7_m{v$X`iL5xAI$Uj$}Z6(dWmZ^P{?D0<;JK z?-?35fKN{nBRG#Qc)C`tJNCwnSI(R{vko!+65y_U^Ot=8Jl@a$j%m~8jZHmzT!;t1 z2<ZC(_Q)_~awEo39A3>0f97S5e8FQO5D8A|7i<J{9@LLhUsTtF;=CJBJ2sWF+rfJS zct?SEGWz8^WaVk%x`%7jxVou9gO8_8n^yhAi4zzR7ViHR-#m|d)^B*JUtE_iX$k1h zb=b2D;is|8Z##I@hjFxK&Zn?8LcvFEZyiGv5W{cvMb&;)KO&2#Qj|~NmoFLrKJZS5 z9!HSRCy;OZYScIq)v#d@`-T-VanA$(>c0K$n$5!XukPrEYOx(Ue8yb-9K&27i)AMI zF&N$WK7D_|Sk|b_M{aQDTgXM07+@o?3E09r&VyS#l7e1Ig~!vN_cze{2y^&N&6+op zYS&)>S*uoUHgDcsG9x2H*XlFe{|c{v`aY&rs}~r@#*N*&-HpQTUyHtug0EtbQ_;{b znt6#P-V=-7iDS(t09$}0<gmt=QsC`W%6vuH{m8NXb?V&RUZcj=C@-(Us#h~*OukH> zQJ3vc_0&Jb`}gJ7`T2EXZG0Y&FR>NdVk=|Wg6+G7dD)8Jl*pL2Vb5+y?{nT=cJq5L z@4iB}rvoWIJ|`2syh5XD)#7N>@Pe#SrL}^tQ+53<+`0ctS^0b1{>gK!+TP8Yb;E9& zy{S!`O<UTvJDk*^!<C(#J3mP2-1+J5jvXJQv~Pc9XRB66IfrlG(x}k~8|u{Q^Hzff z#aFCY@q9={an@(WTjk7uiQoUp82(jRa8dU?3luNKPeF0jwW;tQ<BjD=+X#pU#`x<! zIWsROgaA9wPeIVeozHwE1zhh_Gw=R?{dZ%um~plK{q>&3&A-2AamoMo9rQvnQMB&h zm8{Rt-Opw|XWcXOnQ>Y4z%YEQ&)k(xro2TW$328+=p<*k3;$^ay;D%>$($Ki?p1m1 z1~dcy8_sDd1zm_w=H*@l&=^N~z#|j%x4zSFn4#9$hAgV{_@7;RzQ@hYEr+|idvRhb zo_aQ^Sg~T=3KuTizfhq<0R;;d9GNd)zL9zJ<{iqJtA6Z3bz%?1m)<G^ii>i}KgI(Z z+UPrb%a$#R`;o^zs$RXJYZ^BWO>NU=-`U>1&)p0Ry!CkE#K(`PPJNs)efsSaAt4u% z#*g1WuV25ICZ3)%vSrKm3V5`o?`l9nAd55k`PWxwzfSlQxqJ5PS>?lq4ae-MRcq_D zMvbnD#sS$sA~(ko_tSGr#P#``4%V3;>nsZX<K^YcuSZXsl=`Bd-$L+smEM{HrGf0g zU(!PR=6s2BP*70*f&Kb<C)KSRdeO`4@?(t`>A4t<<>?s)Y;$Yx8K1(6pR#wOduY$j zz_9-!#BDBwg<V@ZW=vx4T)8IbywJDuiu$L2z(M;4oR=<Ln*XDA?b?1>t5)JI^w~Z1 z@B{SRL+rPU=)ObX@iY3uItzkrZJo)%_qWbM=~*25wf5(Ae^SpHfQ$XT_YU|}tHz%# zaqgChgVNzQm-fA7%a+{i<NAM9x$^d_`1*RT<0^K;e(VHt!z2hgyvbRCuZTU6x5cJn zZ^t<Z{LiQOy$^}ulg}jND9It{aYxV4=y?HriRAh74`<?_bkMnY#t%C7GiT1^m@;XS zTT121u@|sGF4FI5Y(VnbggiGPe@DpK5%O_lHT1u!{p%jIo(-EgQ63P3{2m{23OctA z{6Mab?BXogJ?&rjo54ZppmPCV`qRJiq%{xp@3MID;)03nx1EB{$FPUUvy->zm%n`? z+1L{<NIa=N{&Zjb>B;z_-(YK5F=^)DDf~z-m@HvGnfxmucS#!Ie@|f_JdJ&x``W+a z!CWXmWb&l03rmXY*duG#Zj)Z7%;~QgH@SVn!jatg;Wj-FLEOZZzCA%y<AP&&CZ|lu zfwR`bgW<y^jaYIQY(Da(#K!)MJF%|*;QA5qq66%u-Piqgd|~BDT^E^aQ{{s#G&D5# zHV==_$oG@=*sopb+ZCVF+P~5mpT=Ss4`;)rDg6&p8Ze%8;$BaQ0beG5w*dR5Ec|K3 z4Di?UQP!Wb!zlX!^_32HiBITxFkPF(xOH8sjB;7!?Ok(kxpHTci7Sw|DAnoTiM<wU zPnLRCoKfTN;82P7I??tpXt08Q$p@4)pbNGk`D2d#XTE9NgLCZCka_D(9BCSHk)8Ol z<kDI4L1k2?oXoSSQl&Bb;CHoy-)GJ>7Q(~`Ic#Fsr`0_;YhRc>7|z>EE!yoy`$Jh@ zF&dL#U66Ap<jXnY78=9TI3sa%^4+8a<M$_~F%8*tQqP)kS2>v}6N)5Ot{k=-n>z_x z{0sUYM&B@put<d*I>%n3#&_7S*S%@-<D?G#YdkCv-=#TmEi3M+eQL~B_un<P%s!*F z56AqI_a@{J3VDUrey7T6)fdpe)OJtL^qtHdxuTYDwv2uQ0FBLAbYQ>5u<pt4bHsbu z<IhK2#uGY_TPNj#oZw@{n>6mK<JWTl;Ojy?@)CtyNJ(RTlILj2YSkC2v*^G4j@q?< zBA-<3_*&{usbBROFcPQ_6b8t}6T>>U_Jx(s^icplAc`y+xKYDijZAV1t$4Z%xR!;c zUGNJQA}bC;$J^lYlz58j3)NYwJL%tp^Sux4_-f?KT74(d-)2B#%rk)gz%yDv$7g3O z7;|p=)V(+DzYtIy`jbm2o$yN*;@hXOM#(dk2hjeh?lb6q8#?Q8NXX-7{Wop;O9DPj zH2ufYSJuAB4t^^=RszZsC=YQ$2U&3$<#COv(kFS9k^|6ve)1lr5i(;kaW?X2g}>P( zPgPE;tX6%&9O!=8<Dj6&YCkCbiOpY$M{cb{&abBr#X-lv9Z(#!|2{xT)+c{=$ciOe z{H?J$jWa6G0pxB<dFW4mrI0fzYl&}=+w0i>QhANMu=a~MBX@K7@LOubDF1C~-TDAI zzY>X`s{3?VIK<HB2LQra$nzAN?&ZVt&-Q$D??>Z=%4@`C_3VhQ4PBqzp#yoE5`m2P z20CPDoLl#<bgzM!|JlBM_n|3x-6YZkVJnDjb$a5ZxfPJcT0Qvol4{8Yzz5baOL ztaR7A;-axijg_%qX2q>FMhq?L(SI*s6!R2}9*m;>4C1BM-XF4>++>agm0@TmPi+1A z!^uIG4fxw%pl4?y1C-w6Ig2y<`qnzuzLeI=-wH}|#%<%=f)iu2;&$je3m5cGcJL$j zRa#TF8#EcjIgLHEFRHuQ6C-A`ioMcm{DGcq{0*@3_V(@1#^9fl$1UV`Ng?>hN#npO ze|7&*b%4s3tg*A^b#JaD`bzoIk`wT~6?fA;J1q~6g;}Q_%!@BJ(q`-#-FLh0=XZ6C zk57O*HZ9|~ba0HH-^UtD`Uo0zLFX2P53I9AdM-zCP(7$^s%%mD#_wEn=15=q*0rJQ z(~=SJ7Jur{A+MERkQJ`%-;&2J$I%gwp;c<VdP!>2s$EV0*0ru?O>g3Hr&bXg9nD&( z4(+ou50(!2_+tkSstZq_7ILIT<x4aATm^&zF9Ry44Ew(1Ka1g<ke;1zVXZY|ESniq z2J!xjK0cQ}YTS5?+SO{?XLfJh*8BLp70({`XY3aZMQ&9C2Un$o>LJBJ`4C>?Z-7a4 z=)Qpdb^$7{R8IK-&-51kx?q?2Q9qJ)E}-9T5m(&as8N{O)oR;6-?#oo=Gvm0HvM7~ zI$d!HV7@$wt>%OuY<j*($HlmFa(3nw`qFshPC#+cHKX#n29QSqUTTak4@0M&VqINB zM}FnwlQekXKyUiic!o9azsDi0LWQ#InMEa_bCzRkkAi3Q{78P<als}a@7vPPI`-$| zxk`iOz-XWg{qpw=<O}50cj%sr(EaPWb$6;=P2UB6Pxn8=A==-6WdbsDC2M68a-#z= z>-yM+{EY*dijAalY9nB$uSD*8HjBT*Ad$#W{)U3s(LINt-w%vCwN9P5&pLH#rnbHM z7k@SO=kd_FP=1K*-1&4Qd!vhqBh5$lFJlfP;f)yDkH=oKLz^V-JBjn{;oX<$ku+jp zhw&4>@$&j%yO-BIwX1h<hFDd_^L_j~zr(6jskgRa!^IogwL51=kMOq<WIM8I2mHa` zTaaDM^B(X@L(cC<#(l$cTK)Rxl55snvA%x&c4}9j!M^=Z`hFh2HSX@^H`J~j7}vP* zs?9B1?%&?F?Uj@c9e&vh>}k{H>h7jZzu8`=&Ki65>SNWORGT)lUl;oR%{qI&UHvT~ zHVqw2eL$GzED?uf?D7x?D7}<V|CCpG|1Yl)>MA7T?<kz5-3)-f%G0O6gqW#S&GUaR z)QzWq`*I;3;D#P=h%MI|d$tudF_}zRz~!%6QT}_oWy@L#-rirF=-Bae#^}+vAIzNj z%g-NweEaD9`RA4d1jLpvQpB<if8PdmUEqh8PF1URo;+S5zgEb%b>z38i^zu+a$x05 zM8r=oHETAH`jxWUP#%bF)TrBuk|i_98y0e6h1^gfC)Ya9Lo7kauNCq_g`8QrwRP*= zzW)B&hQ?J)O8@>PlZzBNMGmr%t19HI$^aTAZ&b+t6>@il98)1zRmd+Da&P5)WaO19 zrAw=w;SyKA{9EKP3%RM*UO)M<LJq5tqblSL3;Dr94y}+YYxyqZsS3Hg^2xAaY+IPJ z{0)@UDA<L(XCV*Q()Z-l3c0UBuvW-nb=U;xJ@pgFmlg7W<@*mmJV*Wd@kNSU+DiQu z+6MB1yj#njCJ$H0s}*u`tsnq7yh2W`kb5lT9E;A2&TUMwVz<>MN&<8rMP(iNxz@Q0 za(pct)bi1gljKAT`Ont8=-hHHuuW8j3YXSUN9{XpL-joQzt7GFkxy*-OyuthInqKd zwskHeW6YS_%3~XRd{W5)mxa_Nr(4K5cGy8`kEnfu%}2hmkQ*%I{tEfeLN2$Q?9$~7 z=PJv`HElYcoNpnw+o8);pQ}y79FSuy<Wmbd&O-jOkb5lT6AO9avf0Py3$;@=@_(GL zx<!i<<bex0&|;l+(DM+Svmx)?+T$Z{*`g^q(L&z1oT^**;=8R{)q(!j72BXe!{u$- z{7mk*kPB_`0lCSR4pqAN0pvFe`Qh??_3F3Q`ug_M^^#Rz?=e0;jXr7H_B1(iLhiDV z*DmD13pwyYp1Y8@E;~IvPt#X-<@x99X8n#RS~SnhTD4|;?(ctKbBh*Nb~JB(cW09( zS9jE@^HoBXD#1Gk4Jz^bx*7S!CE0ax!4T(4vy82{aLfmA0yOGb07wGxzYP2S27k=9 R57E|HlAXKCS=U$O{{if+y9)pS diff --git a/Texassemble/texassemble.cpp b/Texassemble/texassemble.cpp index d3cf3f21..82b7b470 100644 --- a/Texassemble/texassemble.cpp +++ b/Texassemble/texassemble.cpp @@ -76,11 +76,17 @@ #include "DirectXTexPNG.h" #endif +#include "CmdLineHelpers.h" + +using namespace Helpers; using namespace DirectX; using Microsoft::WRL::ComPtr; namespace { + const wchar_t* g_ToolName = L"texassemble"; + const wchar_t* g_Description = L"Microsoft (R) DirectX Texture Assembler [DirectXTex]"; + enum COMMANDS : uint32_t { CMD_CUBE = 1, @@ -137,22 +143,11 @@ namespace static_assert(OPT_MAX <= 32, "dwOptions is a unsigned int bitfield"); - struct SConversion - { - std::wstring szSrc; - }; - - struct SValue - { - const wchar_t* name; - uint32_t value; - }; - ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// - const SValue g_pCommands[] = + const SValue<uint32_t> g_pCommands[] = { { L"cube", CMD_CUBE }, { L"volume", CMD_VOLUME }, @@ -177,7 +172,7 @@ namespace { nullptr, 0 } }; - const SValue g_pOptions[] = + const SValue<uint32_t> g_pOptions[] = { { L"r", OPT_RECURSIVE }, { L"flist", OPT_FILELIST }, @@ -206,9 +201,9 @@ namespace { nullptr, 0 } }; -#define DEFFMT(fmt) { L## #fmt, DXGI_FORMAT_ ## fmt } + #define DEFFMT(fmt) { L## #fmt, DXGI_FORMAT_ ## fmt } - const SValue g_pFormats[] = + const SValue<DXGI_FORMAT> g_pFormats[] = { // List does not include _TYPELESS or depth/stencil formats DEFFMT(R32G32B32A32_FLOAT), @@ -285,7 +280,7 @@ namespace { nullptr, DXGI_FORMAT_UNKNOWN } }; - const SValue g_pFormatAliases[] = + const SValue<DXGI_FORMAT> g_pFormatAliases[] = { { L"RGBA", DXGI_FORMAT_R8G8B8A8_UNORM }, { L"BGRA", DXGI_FORMAT_B8G8R8A8_UNORM }, @@ -297,7 +292,7 @@ namespace { nullptr, DXGI_FORMAT_UNKNOWN } }; - const SValue g_pFilters[] = + const SValue<uint32_t> g_pFilters[] = { { L"POINT", TEX_FILTER_POINT }, { L"LINEAR", TEX_FILTER_LINEAR }, @@ -320,21 +315,21 @@ namespace { nullptr, TEX_FILTER_DEFAULT } }; -#define CODEC_DDS 0xFFFF0001 -#define CODEC_TGA 0xFFFF0002 -#define CODEC_HDR 0xFFFF0005 + #define CODEC_DDS 0xFFFF0001 + #define CODEC_TGA 0xFFFF0002 + #define CODEC_HDR 0xFFFF0005 -#ifdef USE_OPENEXR -#define CODEC_EXR 0xFFFF0006 -#endif -#ifdef USE_LIBJPEG -#define CODEC_JPEG 0xFFFF0007 -#endif -#ifdef USE_LIBPNG -#define CODEC_PNG 0xFFFF0008 -#endif + #ifdef USE_OPENEXR + #define CODEC_EXR 0xFFFF0006 + #endif + #ifdef USE_LIBJPEG + #define CODEC_JPEG 0xFFFF0007 + #endif + #ifdef USE_LIBPNG + #define CODEC_PNG 0xFFFF0008 + #endif - const SValue g_pExtFileTypes[] = + const SValue<uint32_t> g_pExtFileTypes[] = { { L".BMP", WIC_CODEC_BMP }, #ifdef USE_LIBJPEG @@ -363,7 +358,7 @@ namespace { nullptr, CODEC_DDS } }; - const SValue g_pFeatureLevels[] = // valid feature levels for -fl for maximimum size + const SValue<uint32_t> g_pFeatureLevels[] = // valid feature levels for -fl for maximimum size { { L"9.1", 2048 }, { L"9.2", 2048 }, @@ -378,7 +373,7 @@ namespace { nullptr, 0 }, }; - const SValue g_pFeatureLevelsCube[] = // valid feature levels for -fl for maximum cubemap size + const SValue<uint32_t> g_pFeatureLevelsCube[] = // valid feature levels for -fl for maximum cubemap size { { L"9.1", 512 }, { L"9.2", 512 }, @@ -393,7 +388,7 @@ namespace { nullptr, 0 }, }; - const SValue g_pFeatureLevelsArray[] = // valid feature levels for -fl for maximum array size + const SValue<uint32_t> g_pFeatureLevelsArray[] = // valid feature levels for -fl for maximum array size { { L"9.1", 1 }, { L"9.2", 1 }, @@ -408,7 +403,7 @@ namespace { nullptr, 0 }, }; - const SValue g_pFeatureLevelsVolume[] = // valid feature levels for -fl for maximum depth size + const SValue<uint32_t> g_pFeatureLevelsVolume[] = // valid feature levels for -fl for maximum depth size { { L"9.1", 256 }, { L"9.2", 256 }, @@ -438,183 +433,6 @@ HRESULT LoadAnimatedGif(const wchar_t* szFile, namespace { - inline HANDLE safe_handle(HANDLE h) noexcept { return (h == INVALID_HANDLE_VALUE) ? nullptr : h; } - - struct find_closer { void operator()(HANDLE h) noexcept { assert(h != INVALID_HANDLE_VALUE); if (h) FindClose(h); } }; - - using ScopedFindHandle = std::unique_ptr<void, find_closer>; - -#ifdef _PREFAST_ -#pragma prefast(disable : 26018, "Only used with static internal arrays") -#endif - - uint32_t LookupByName(const wchar_t *pName, const SValue *pArray) - { - while (pArray->name) - { - if (!_wcsicmp(pName, pArray->name)) - return pArray->value; - - pArray++; - } - - return 0; - } - - void SearchForFiles(const std::filesystem::path& path, std::list<SConversion>& files, bool recursive) - { - // Process files - WIN32_FIND_DATAW findData = {}; - ScopedFindHandle hFile(safe_handle(FindFirstFileExW(path.c_str(), - FindExInfoBasic, &findData, - FindExSearchNameMatch, nullptr, - FIND_FIRST_EX_LARGE_FETCH))); - if (hFile) - { - for (;;) - { - if (!(findData.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY))) - { - SConversion conv = {}; - conv.szSrc = path.parent_path().append(findData.cFileName).native(); - files.push_back(conv); - } - - if (!FindNextFileW(hFile.get(), &findData)) - break; - } - } - - // Process directories - if (recursive) - { - auto searchDir = path.parent_path().append(L"*"); - - hFile.reset(safe_handle(FindFirstFileExW(searchDir.c_str(), - FindExInfoBasic, &findData, - FindExSearchLimitToDirectories, nullptr, - FIND_FIRST_EX_LARGE_FETCH))); - if (!hFile) - return; - - for (;;) - { - if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - if (findData.cFileName[0] != L'.') - { - auto subdir = path.parent_path().append(findData.cFileName).append(path.filename().c_str()); - - SearchForFiles(subdir, files, recursive); - } - } - - if (!FindNextFileW(hFile.get(), &findData)) - break; - } - } - } - - void ProcessFileList(std::wifstream& inFile, std::list<SConversion>& files) - { - std::list<SConversion> flist; - std::set<std::wstring> excludes; - - for (;;) - { - std::wstring fname; - std::getline(inFile, fname); - if (!inFile) - break; - - if (fname[0] == L'#') - { - // Comment - } - else if (fname[0] == L'-') - { - if (flist.empty()) - { - wprintf(L"WARNING: Ignoring the line '%ls' in -flist\n", fname.c_str()); - } - else - { - std::filesystem::path path(fname.c_str() + 1); - auto& npath = path.make_preferred(); - if (wcspbrk(fname.c_str(), L"?*") != nullptr) - { - std::list<SConversion> removeFiles; - SearchForFiles(npath, removeFiles, false); - - for (auto& it : removeFiles) - { - std::wstring name = it.szSrc; - std::transform(name.begin(), name.end(), name.begin(), towlower); - excludes.insert(name); - } - } - else - { - std::wstring name = npath.c_str(); - std::transform(name.begin(), name.end(), name.begin(), towlower); - excludes.insert(name); - } - } - } - else if (wcspbrk(fname.c_str(), L"?*") != nullptr) - { - std::filesystem::path path(fname.c_str()); - SearchForFiles(path.make_preferred(), flist, false); - } - else - { - SConversion conv = {}; - std::filesystem::path path(fname.c_str()); - conv.szSrc = path.make_preferred().native(); - flist.push_back(conv); - } - } - - inFile.close(); - - if (!excludes.empty()) - { - // Remove any excluded files - for (auto it = flist.begin(); it != flist.end();) - { - std::wstring name = it->szSrc; - std::transform(name.begin(), name.end(), name.begin(), towlower); - auto item = it; - ++it; - if (excludes.find(name) != excludes.end()) - { - flist.erase(item); - } - } - } - - if (flist.empty()) - { - wprintf(L"WARNING: No file names found in -flist\n"); - } - else - { - files.splice(files.end(), flist); - } - } - - void PrintFormat(DXGI_FORMAT Format) - { - for (auto pFormat = g_pFormats; pFormat->name; pFormat++) - { - if (static_cast<DXGI_FORMAT>(pFormat->value) == Format) - { - wprintf(L"%ls", pFormat->name); - break; - } - } - } - void PrintInfo(const TexMetadata& info) { wprintf(L" (%zux%zu", info.width, info.height); @@ -629,7 +447,7 @@ namespace wprintf(L",%zu", info.arraySize); wprintf(L" "); - PrintFormat(info.format); + PrintFormat(info.format, g_pFormats); switch (info.dimension) { @@ -674,109 +492,9 @@ namespace wprintf(L")"); } - void PrintList(size_t cch, const SValue *pValue) - { - while (pValue->name) - { - const size_t cchName = wcslen(pValue->name); - - if (cch + cchName + 2 >= 80) - { - wprintf(L"\n "); - cch = 6; - } - - wprintf(L"%ls ", pValue->name); - cch += cchName + 2; - pValue++; - } - - wprintf(L"\n"); - } - - void PrintLogo(bool versionOnly) - { - wchar_t version[32] = {}; - - wchar_t appName[_MAX_PATH] = {}; - if (GetModuleFileNameW(nullptr, appName, _MAX_PATH)) - { - const DWORD size = GetFileVersionInfoSizeW(appName, nullptr); - if (size > 0) - { - auto verInfo = std::make_unique<uint8_t[]>(size); - if (GetFileVersionInfoW(appName, 0, size, verInfo.get())) - { - LPVOID lpstr = nullptr; - UINT strLen = 0; - if (VerQueryValueW(verInfo.get(), L"\\StringFileInfo\\040904B0\\ProductVersion", &lpstr, &strLen)) - { - wcsncpy_s(version, reinterpret_cast<const wchar_t*>(lpstr), strLen); - } - } - } - } - - if (!*version || wcscmp(version, L"1.0.0.0") == 0) - { - swprintf_s(version, L"%03d (library)", DIRECTX_TEX_VERSION); - } - - if (versionOnly) - { - wprintf(L"texassemble version %ls\n", version); - } - else - { - wprintf(L"Microsoft (R) DirectX Texture Assembler [DirectXTex] Version %ls\n", version); - wprintf(L"Copyright (C) Microsoft Corp.\n"); - #ifdef _DEBUG - wprintf(L"*** Debug build ***\n"); - #endif - wprintf(L"\n"); - } - } - - const wchar_t* GetErrorDesc(HRESULT hr) - { - static wchar_t desc[1024] = {}; - - LPWSTR errorText = nullptr; - - const DWORD result = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER, - nullptr, static_cast<DWORD>(hr), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), reinterpret_cast<LPWSTR>(&errorText), 0, nullptr); - - *desc = 0; - - if (result > 0 && errorText) - { - swprintf_s(desc, L": %ls", errorText); - - size_t len = wcslen(desc); - if (len >= 1) - { - desc[len - 1] = 0; - } - - if (errorText) - LocalFree(errorText); - - for (wchar_t* ptr = desc; *ptr != 0; ++ptr) - { - if (*ptr == L'\r' || *ptr == L'\n') - { - *ptr = L' '; - } - } - } - - return desc; - } - void PrintUsage() { - PrintLogo(false); + PrintLogo(false, g_ToolName, g_Description); static const wchar_t* const s_usage = L"Usage: texassemble <command> <options> [--] <files>\n" @@ -1059,7 +777,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) { if (!_wcsicmp(argv[1], L"--version")) { - PrintLogo(true); + PrintLogo(true, g_ToolName, g_Description); return 0; } else if (!_wcsicmp(argv[1], L"--help")) @@ -1118,7 +836,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) } else if (!_wcsicmp(pArg, L"--version")) { - PrintLogo(true); + PrintLogo(true, g_ToolName, g_Description); return 0; } else if (!_wcsicmp(pArg, L"--help")) @@ -1372,7 +1090,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) { const size_t count = conversion.size(); std::filesystem::path path(pArg); - SearchForFiles(path.make_preferred(), conversion, (dwOptions & (1 << OPT_RECURSIVE)) != 0); + SearchForFiles(path.make_preferred(), conversion, (dwOptions & (1 << OPT_RECURSIVE)) != 0, nullptr); if (conversion.size() <= count) { wprintf(L"No matching files found for %ls\n", pArg); @@ -1395,7 +1113,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) } if (~dwOptions & (1 << OPT_NOLOGO)) - PrintLogo(false); + PrintLogo(false, g_ToolName, g_Description); switch (dwCommand) { diff --git a/Texassemble/texassemble.rc b/Texassemble/texassemble.rc index 4000de9d..48cca03a 100644 --- a/Texassemble/texassemble.rc +++ b/Texassemble/texassemble.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_MAIN_ICON ICON "directx.ico" +IDI_MAIN_ICON ICON "..\Common\directx.ico" #ifdef APSTUDIO_INVOKED diff --git a/Texconv/Texconv.rc b/Texconv/Texconv.rc index e030300b..98116cf0 100644 --- a/Texconv/Texconv.rc +++ b/Texconv/Texconv.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_MAIN_ICON ICON "directx.ico" +IDI_MAIN_ICON ICON "..\Common\directx.ico" #ifdef APSTUDIO_INVOKED diff --git a/Texconv/Texconv_Desktop_2019.vcxproj b/Texconv/Texconv_Desktop_2019.vcxproj index 40df01bc..2bd5c9b7 100644 --- a/Texconv/Texconv_Desktop_2019.vcxproj +++ b/Texconv/Texconv_Desktop_2019.vcxproj @@ -135,7 +135,7 @@ <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -161,7 +161,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -186,7 +186,7 @@ <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> @@ -214,7 +214,7 @@ <Optimization>MaxSpeed</Optimization> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> @@ -242,7 +242,7 @@ <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -270,7 +270,7 @@ <Optimization>MaxSpeed</Optimization> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -305,7 +305,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest" /> + <Manifest Include="..\Common\settings.manifest" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> diff --git a/Texconv/Texconv_Desktop_2019.vcxproj.filters b/Texconv/Texconv_Desktop_2019.vcxproj.filters index b665e63f..b463e031 100644 --- a/Texconv/Texconv_Desktop_2019.vcxproj.filters +++ b/Texconv/Texconv_Desktop_2019.vcxproj.filters @@ -17,8 +17,11 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest"> + <Manifest Include="..\Common\settings.manifest"> <Filter>Resource Files</Filter> </Manifest> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> + </ItemGroup> </Project> \ No newline at end of file diff --git a/Texconv/Texconv_Desktop_2019_Win10.vcxproj b/Texconv/Texconv_Desktop_2019_Win10.vcxproj index d4697168..a7c1ab9e 100644 --- a/Texconv/Texconv_Desktop_2019_Win10.vcxproj +++ b/Texconv/Texconv_Desktop_2019_Win10.vcxproj @@ -192,7 +192,7 @@ <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -218,7 +218,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -243,7 +243,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -267,7 +267,7 @@ <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> @@ -295,7 +295,7 @@ <Optimization>MaxSpeed</Optimization> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> @@ -322,7 +322,7 @@ <Optimization>MaxSpeed</Optimization> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> @@ -349,7 +349,7 @@ <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -377,7 +377,7 @@ <Optimization>MaxSpeed</Optimization> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -404,7 +404,7 @@ <Optimization>MaxSpeed</Optimization> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -438,7 +438,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest" /> + <Manifest Include="..\Common\settings.manifest" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> diff --git a/Texconv/Texconv_Desktop_2019_Win10.vcxproj.filters b/Texconv/Texconv_Desktop_2019_Win10.vcxproj.filters index b665e63f..b463e031 100644 --- a/Texconv/Texconv_Desktop_2019_Win10.vcxproj.filters +++ b/Texconv/Texconv_Desktop_2019_Win10.vcxproj.filters @@ -17,8 +17,11 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest"> + <Manifest Include="..\Common\settings.manifest"> <Filter>Resource Files</Filter> </Manifest> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> + </ItemGroup> </Project> \ No newline at end of file diff --git a/Texconv/Texconv_Desktop_2022.vcxproj b/Texconv/Texconv_Desktop_2022.vcxproj index a37a6d4f..e16024ee 100644 --- a/Texconv/Texconv_Desktop_2022.vcxproj +++ b/Texconv/Texconv_Desktop_2022.vcxproj @@ -135,7 +135,7 @@ <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -161,7 +161,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -186,7 +186,7 @@ <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> @@ -214,7 +214,7 @@ <Optimization>MaxSpeed</Optimization> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> @@ -242,7 +242,7 @@ <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -270,7 +270,7 @@ <Optimization>MaxSpeed</Optimization> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -305,7 +305,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest" /> + <Manifest Include="..\Common\settings.manifest" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> diff --git a/Texconv/Texconv_Desktop_2022.vcxproj.filters b/Texconv/Texconv_Desktop_2022.vcxproj.filters index b665e63f..b463e031 100644 --- a/Texconv/Texconv_Desktop_2022.vcxproj.filters +++ b/Texconv/Texconv_Desktop_2022.vcxproj.filters @@ -17,8 +17,11 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest"> + <Manifest Include="..\Common\settings.manifest"> <Filter>Resource Files</Filter> </Manifest> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> + </ItemGroup> </Project> \ No newline at end of file diff --git a/Texconv/Texconv_Desktop_2022_Win10.vcxproj b/Texconv/Texconv_Desktop_2022_Win10.vcxproj index 24e5c889..a661212c 100644 --- a/Texconv/Texconv_Desktop_2022_Win10.vcxproj +++ b/Texconv/Texconv_Desktop_2022_Win10.vcxproj @@ -192,7 +192,7 @@ <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -218,7 +218,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -243,7 +243,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -267,7 +267,7 @@ <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> @@ -295,7 +295,7 @@ <Optimization>MaxSpeed</Optimization> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> @@ -322,7 +322,7 @@ <Optimization>MaxSpeed</Optimization> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> @@ -349,7 +349,7 @@ <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -377,7 +377,7 @@ <Optimization>MaxSpeed</Optimization> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -404,7 +404,7 @@ <Optimization>MaxSpeed</Optimization> <OpenMPSupport>true</OpenMPSupport> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> @@ -438,7 +438,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest" /> + <Manifest Include="..\Common\settings.manifest" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> diff --git a/Texconv/Texconv_Desktop_2022_Win10.vcxproj.filters b/Texconv/Texconv_Desktop_2022_Win10.vcxproj.filters index b665e63f..b463e031 100644 --- a/Texconv/Texconv_Desktop_2022_Win10.vcxproj.filters +++ b/Texconv/Texconv_Desktop_2022_Win10.vcxproj.filters @@ -17,8 +17,11 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest"> + <Manifest Include="..\Common\settings.manifest"> <Filter>Resource Files</Filter> </Manifest> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> + </ItemGroup> </Project> \ No newline at end of file diff --git a/Texconv/directx.ico b/Texconv/directx.ico deleted file mode 100644 index bc43c1b2085df668dffff26d80adcb0ef73f23a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25214 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 R57E|HlAXKCS=U$O{{if+y9)pS diff --git a/Texconv/settings.manifest b/Texconv/settings.manifest deleted file mode 100644 index 544e45d4..00000000 --- a/Texconv/settings.manifest +++ /dev/null @@ -1,21 +0,0 @@ -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" > - <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> - <application> - <!-- Windows Vista --> - <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> - <!-- Windows 7 --> - <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> - <!-- Windows 8 --> - <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> - <!-- Windows 8.1 --> - <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> - <!-- Windows 10 / Windows 11 --> - <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> - </application> - </compatibility> - <asmv3:application> - <asmv3:windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> - <ws2:longPathAware>true</ws2:longPathAware> - </asmv3:windowsSettings> - </asmv3:application> -</assembly> diff --git a/Texconv/texconv.cpp b/Texconv/texconv.cpp index c8962347..784d6f62 100644 --- a/Texconv/texconv.cpp +++ b/Texconv/texconv.cpp @@ -82,12 +82,24 @@ #include "DirectXTexXbox.h" #endif +#include "CmdLineHelpers.h" + +using namespace Helpers; using namespace DirectX; using namespace DirectX::PackedVector; using Microsoft::WRL::ComPtr; namespace { + const wchar_t* g_ToolName = L"texconv"; +#if defined(USE_XBOX_EXTS) && defined(_USE_SCARLETT) + const wchar_t* g_Description = L"Microsoft (R) DirectX Texture Converter for Microsoft GDKX for Xbox Series X|S"; +#elif defined(USE_XBOX_EXTS) + const wchar_t* g_Description = L"Microsoft (R) DirectX Texture Converter for Microsoft GDKX for Xbox One"; +#else + const wchar_t* g_Description = L"Microsoft (R) DirectX Texture Converter [DirectXTex]"; +#endif + enum OPTIONS : uint64_t { OPT_RECURSIVE = 1, @@ -177,19 +189,6 @@ namespace static_assert(OPT_MAX <= 64, "dwOptions is a unsigned int bitfield"); - struct SConversion - { - std::wstring szSrc; - std::wstring szFolder; - }; - - template<typename T> - struct SValue - { - const wchar_t* name; - T value; - }; - const SValue<uint64_t> g_pOptions[] = { { L"r", OPT_RECURSIVE }, @@ -259,9 +258,9 @@ namespace { nullptr, 0 } }; -#define DEFFMT(fmt) { L## #fmt, DXGI_FORMAT_ ## fmt } + #define DEFFMT(fmt) { L## #fmt, DXGI_FORMAT_ ## fmt } - const SValue<uint32_t> g_pFormats[] = + const SValue<DXGI_FORMAT> g_pFormats[] = { // List does not include _TYPELESS or depth/stencil formats DEFFMT(R32G32B32A32_FLOAT), @@ -389,7 +388,7 @@ namespace { nullptr, 0 } }; - const SValue<uint32_t> g_pReadOnlyFormats[] = + const SValue<DXGI_FORMAT> g_pReadOnlyFormats[] = { DEFFMT(R32G32B32A32_TYPELESS), DEFFMT(R32G32B32_TYPELESS), @@ -481,39 +480,39 @@ namespace { nullptr, 0 }, }; -#define CODEC_DDS 0xFFFF0001 -#define CODEC_TGA 0xFFFF0002 -#define CODEC_HDP 0xFFFF0003 -#define CODEC_JXR 0xFFFF0004 -#define CODEC_HDR 0xFFFF0005 -#define CODEC_PPM 0xFFFF0006 -#define CODEC_PFM 0xFFFF0007 + #define CODEC_DDS 0xFFFF0001 + #define CODEC_TGA 0xFFFF0002 + #define CODEC_HDP 0xFFFF0003 + #define CODEC_JXR 0xFFFF0004 + #define CODEC_HDR 0xFFFF0005 + #define CODEC_PPM 0xFFFF0006 + #define CODEC_PFM 0xFFFF0007 -#ifdef USE_OPENEXR -#define CODEC_EXR 0xFFFF0008 -#endif -#ifdef USE_LIBJPEG -#define CODEC_JPEG 0xFFFF0009 -#endif -#ifdef USE_LIBPNG -#define CODEC_PNG 0xFFFF000A -#endif + #ifdef USE_OPENEXR + #define CODEC_EXR 0xFFFF0008 + #endif + #ifdef USE_LIBJPEG + #define CODEC_JPEG 0xFFFF0009 + #endif + #ifdef USE_LIBPNG + #define CODEC_PNG 0xFFFF000A + #endif const SValue<uint32_t> g_pSaveFileTypes[] = // valid formats to write to { { L"bmp", WIC_CODEC_BMP }, -#ifdef USE_LIBJPEG + #ifdef USE_LIBJPEG { L"jpg", CODEC_JPEG }, { L"jpeg", CODEC_JPEG }, -#else + #else { L"jpg", WIC_CODEC_JPEG }, { L"jpeg", WIC_CODEC_JPEG }, -#endif -#ifdef USE_LIBPNG + #endif + #ifdef USE_LIBPNG { L"png", CODEC_PNG }, -#else + #else { L"png", WIC_CODEC_PNG }, -#endif + #endif { L"dds", CODEC_DDS }, { L"ddx", CODEC_DDS }, { L"tga", CODEC_TGA }, @@ -587,222 +586,11 @@ HRESULT __cdecl SaveToPortablePixMapHDR( namespace { - inline HANDLE safe_handle(HANDLE h) noexcept { return (h == INVALID_HANDLE_VALUE) ? nullptr : h; } - - struct find_closer { void operator()(HANDLE h) noexcept { assert(h != INVALID_HANDLE_VALUE); if (h) FindClose(h); } }; - - using ScopedFindHandle = std::unique_ptr<void, find_closer>; - constexpr static bool ispow2(size_t x) { return ((x != 0) && !(x & (x - 1))); } -#ifdef _PREFAST_ -#pragma prefast(disable : 26018, "Only used with static internal arrays") -#endif - - template<typename T> - T LookupByName(const wchar_t *pName, const SValue<T> *pArray) - { - while (pArray->name) - { - if (!_wcsicmp(pName, pArray->name)) - return pArray->value; - - pArray++; - } - - return 0; - } - - template<typename T> - const wchar_t* LookupByValue(T value, const SValue<T> *pArray) - { - while (pArray->name) - { - if (value == pArray->value) - return pArray->name; - - pArray++; - } - - return L""; - } - - void SearchForFiles(const std::filesystem::path& path, std::list<SConversion>& files, bool recursive, const wchar_t* folder) - { - // Process files - WIN32_FIND_DATAW findData = {}; - ScopedFindHandle hFile(safe_handle(FindFirstFileExW(path.c_str(), - FindExInfoBasic, &findData, - FindExSearchNameMatch, nullptr, - FIND_FIRST_EX_LARGE_FETCH))); - if (hFile) - { - for (;;) - { - if (!(findData.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY))) - { - SConversion conv = {}; - conv.szSrc = path.parent_path().append(findData.cFileName).native(); - if (folder) - { - conv.szFolder = folder; - } - files.push_back(conv); - } - - if (!FindNextFileW(hFile.get(), &findData)) - break; - } - } - - // Process directories - if (recursive) - { - auto searchDir = path.parent_path().append(L"*"); - - hFile.reset(safe_handle(FindFirstFileExW(searchDir.c_str(), - FindExInfoBasic, &findData, - FindExSearchLimitToDirectories, nullptr, - FIND_FIRST_EX_LARGE_FETCH))); - if (!hFile) - return; - - for (;;) - { - if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - if (findData.cFileName[0] != L'.') - { - auto subfolder = (folder) - ? (std::wstring(folder) + std::wstring(findData.cFileName) + std::filesystem::path::preferred_separator) - : (std::wstring(findData.cFileName) + std::filesystem::path::preferred_separator); - - auto subdir = path.parent_path().append(findData.cFileName).append(path.filename().c_str()); - - SearchForFiles(subdir, files, recursive, subfolder.c_str()); - } - } - - if (!FindNextFileW(hFile.get(), &findData)) - break; - } - } - } - - void ProcessFileList(std::wifstream& inFile, std::list<SConversion>& files) - { - std::list<SConversion> flist; - std::set<std::wstring> excludes; - - for (;;) - { - std::wstring fname; - std::getline(inFile, fname); - if (!inFile) - break; - - if (fname[0] == L'#') - { - // Comment - } - else if (fname[0] == L'-') - { - if (flist.empty()) - { - wprintf(L"WARNING: Ignoring the line '%ls' in -flist\n", fname.c_str()); - } - else - { - std::filesystem::path path(fname.c_str() + 1); - auto& npath = path.make_preferred(); - if (wcspbrk(fname.c_str(), L"?*") != nullptr) - { - std::list<SConversion> removeFiles; - SearchForFiles(npath, removeFiles, false, nullptr); - - for (auto& it : removeFiles) - { - std::wstring name = it.szSrc; - std::transform(name.begin(), name.end(), name.begin(), towlower); - excludes.insert(name); - } - } - else - { - std::wstring name = npath.c_str(); - std::transform(name.begin(), name.end(), name.begin(), towlower); - excludes.insert(name); - } - } - } - else if (wcspbrk(fname.c_str(), L"?*") != nullptr) - { - std::filesystem::path path(fname.c_str()); - SearchForFiles(path.make_preferred(), flist, false, nullptr); - } - else - { - SConversion conv = {}; - std::filesystem::path path(fname.c_str()); - conv.szSrc = path.make_preferred().native(); - flist.push_back(conv); - } - } - - inFile.close(); - - if (!excludes.empty()) - { - // Remove any excluded files - for (auto it = flist.begin(); it != flist.end();) - { - std::wstring name = it->szSrc; - std::transform(name.begin(), name.end(), name.begin(), towlower); - auto item = it; - ++it; - if (excludes.find(name) != excludes.end()) - { - flist.erase(item); - } - } - } - - if (flist.empty()) - { - wprintf(L"WARNING: No file names found in -flist\n"); - } - else - { - files.splice(files.end(), flist); - } - } - - void PrintFormat(DXGI_FORMAT Format) - { - for (auto pFormat = g_pFormats; pFormat->name; pFormat++) - { - if (static_cast<DXGI_FORMAT>(pFormat->value) == Format) - { - wprintf(L"%ls", pFormat->name); - return; - } - } - - for (auto pFormat = g_pReadOnlyFormats; pFormat->name; pFormat++) - { - if (static_cast<DXGI_FORMAT>(pFormat->value) == Format) - { - wprintf(L"%ls", pFormat->name); - return; - } - } - - wprintf(L"*UNKNOWN*"); - } - void PrintInfo(const TexMetadata& info, bool isXbox) { wprintf(L" (%zux%zu", info.width, info.height); @@ -817,7 +605,7 @@ namespace wprintf(L",%zu", info.arraySize); wprintf(L" "); - PrintFormat(info.format); + PrintFormat(info.format, g_pFormats, g_pReadOnlyFormats); switch (info.dimension) { @@ -867,75 +655,6 @@ namespace wprintf(L")"); } - void PrintList(size_t cch, const SValue<uint32_t> *pValue) - { - while (pValue->name) - { - const size_t cchName = wcslen(pValue->name); - - if (cch + cchName + 2 >= 80) - { - wprintf(L"\n "); - cch = 6; - } - - wprintf(L"%ls ", pValue->name); - cch += cchName + 2; - pValue++; - } - - wprintf(L"\n"); - } - - void PrintLogo(bool versionOnly) - { - wchar_t version[32] = {}; - - wchar_t appName[_MAX_PATH] = {}; - if (GetModuleFileNameW(nullptr, appName, _MAX_PATH)) - { - const DWORD size = GetFileVersionInfoSizeW(appName, nullptr); - if (size > 0) - { - auto verInfo = std::make_unique<uint8_t[]>(size); - if (GetFileVersionInfoW(appName, 0, size, verInfo.get())) - { - LPVOID lpstr = nullptr; - UINT strLen = 0; - if (VerQueryValueW(verInfo.get(), L"\\StringFileInfo\\040904B0\\ProductVersion", &lpstr, &strLen)) - { - wcsncpy_s(version, reinterpret_cast<const wchar_t*>(lpstr), strLen); - } - } - } - } - - if (!*version || wcscmp(version, L"1.0.0.0") == 0) - { - swprintf_s(version, L"%03d (library)", DIRECTX_TEX_VERSION); - } - - if (versionOnly) - { - wprintf(L"texconv version %ls\n", version); - } - else - { - #if defined(USE_XBOX_EXTS) && defined(_USE_SCARLETT) - wprintf(L"Microsoft (R) DirectX Texture Converter for Microsoft GDKX for Xbox Series X|S [Version %ls]\n", version); - #elif defined(USE_XBOX_EXTS) - wprintf(L"Microsoft (R) DirectX Texture Converter for Microsoft GDKX for Xbox One [Version %ls]\n", version); - #else - wprintf(L"Microsoft (R) DirectX Texture Converter [DirectXTex] Version %ls\n", version); - #endif - wprintf(L"Copyright (C) Microsoft Corp.\n"); - #ifdef _DEBUG - wprintf(L"*** Debug build ***\n"); - #endif - wprintf(L"\n"); - } - } - _Success_(return) bool GetDXGIFactory(_Outptr_ IDXGIFactory1** pFactory) { @@ -964,7 +683,7 @@ namespace void PrintUsage() { - PrintLogo(false); + PrintLogo(false, g_ToolName, g_Description); static const wchar_t* const s_usage = L"Usage: texconv <options> [--] <files>\n" @@ -1105,43 +824,6 @@ namespace } } - const wchar_t* GetErrorDesc(HRESULT hr) - { - static wchar_t desc[1024] = {}; - - LPWSTR errorText = nullptr; - - const DWORD result = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER, - nullptr, static_cast<DWORD>(hr), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), reinterpret_cast<LPWSTR>(&errorText), 0, nullptr); - - *desc = 0; - - if (result > 0 && errorText) - { - swprintf_s(desc, L": %ls", errorText); - - size_t len = wcslen(desc); - if (len >= 1) - { - desc[len - 1] = 0; - } - - if (errorText) - LocalFree(errorText); - - for (wchar_t* ptr = desc; *ptr != 0; ++ptr) - { - if (*ptr == L'\r' || *ptr == L'\n') - { - *ptr = L' '; - } - } - } - - return desc; - } - _Success_(return) bool CreateDevice(int adapter, _Outptr_ ID3D11Device** pDevice) { @@ -1544,7 +1226,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) } else if (!_wcsicmp(pArg,L"--version")) { - PrintLogo(true); + PrintLogo(true, g_ToolName, g_Description); return 0; } else if (!_wcsicmp(pArg, L"--help")) @@ -2152,7 +1834,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) } if (~dwOptions & (uint64_t(1) << OPT_NOLOGO)) - PrintLogo(false); + PrintLogo(false, g_ToolName, g_Description); auto fileTypeName = LookupByValue(FileType, g_pSaveFileTypes); diff --git a/Texdiag/directx.ico b/Texdiag/directx.ico deleted file mode 100644 index bc43c1b2085df668dffff26d80adcb0ef73f23a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25214 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 R57E|HlAXKCS=U$O{{if+y9)pS diff --git a/Texdiag/settings.manifest b/Texdiag/settings.manifest deleted file mode 100644 index 544e45d4..00000000 --- a/Texdiag/settings.manifest +++ /dev/null @@ -1,21 +0,0 @@ -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" > - <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> - <application> - <!-- Windows Vista --> - <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> - <!-- Windows 7 --> - <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> - <!-- Windows 8 --> - <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> - <!-- Windows 8.1 --> - <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> - <!-- Windows 10 / Windows 11 --> - <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> - </application> - </compatibility> - <asmv3:application> - <asmv3:windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> - <ws2:longPathAware>true</ws2:longPathAware> - </asmv3:windowsSettings> - </asmv3:application> -</assembly> diff --git a/Texdiag/texdiag.cpp b/Texdiag/texdiag.cpp index 4a8d5302..cbbc0b78 100644 --- a/Texdiag/texdiag.cpp +++ b/Texdiag/texdiag.cpp @@ -72,627 +72,354 @@ #include "DirectXTexPNG.h" #endif -using namespace DirectX; - -enum COMMANDS : uint32_t -{ - CMD_INFO = 1, - CMD_ANALYZE, - CMD_COMPARE, - CMD_DIFF, - CMD_DUMPBC, - CMD_DUMPDDS, - CMD_MAX -}; - -enum OPTIONS : uint32_t -{ - OPT_RECURSIVE = 1, - OPT_FORMAT, - OPT_FILTER, - OPT_DDS_DWORD_ALIGN, - OPT_DDS_BAD_DXTN_TAILS, - OPT_DDS_PERMISSIVE, - OPT_DDS_IGNORE_MIPS, - OPT_OUTPUTFILE, - OPT_TOLOWER, - OPT_OVERWRITE, - OPT_FILETYPE, - OPT_NOLOGO, - OPT_TYPELESS_UNORM, - OPT_TYPELESS_FLOAT, - OPT_EXPAND_LUMINANCE, - OPT_TARGET_PIXELX, - OPT_TARGET_PIXELY, - OPT_DIFF_COLOR, - OPT_THRESHOLD, - OPT_FILELIST, - OPT_MAX -}; - -static_assert(OPT_MAX <= 32, "dwOptions is a unsigned int bitfield"); - -struct SConversion -{ - std::wstring szSrc; -}; - -struct SValue -{ - const wchar_t* name; - uint32_t value; -}; - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -const SValue g_pCommands[] = -{ - { L"info", CMD_INFO }, - { L"analyze", CMD_ANALYZE }, - { L"compare", CMD_COMPARE }, - { L"diff", CMD_DIFF }, - { L"dumpbc", CMD_DUMPBC }, - { L"dumpdds", CMD_DUMPDDS }, - { nullptr, 0 } -}; - -const SValue g_pOptions[] = -{ - { L"r", OPT_RECURSIVE }, - { L"f", OPT_FORMAT }, - { L"if", OPT_FILTER }, - { L"dword", OPT_DDS_DWORD_ALIGN }, - { L"badtails", OPT_DDS_BAD_DXTN_TAILS }, - { L"permissive", OPT_DDS_PERMISSIVE }, - { L"ignoremips", OPT_DDS_IGNORE_MIPS }, - { L"nologo", OPT_NOLOGO }, - { L"o", OPT_OUTPUTFILE }, - { L"l", OPT_TOLOWER }, - { L"y", OPT_OVERWRITE }, - { L"ft", OPT_FILETYPE }, - { L"tu", OPT_TYPELESS_UNORM }, - { L"tf", OPT_TYPELESS_FLOAT }, - { L"xlum", OPT_EXPAND_LUMINANCE }, - { L"targetx", OPT_TARGET_PIXELX }, - { L"targety", OPT_TARGET_PIXELY }, - { L"c", OPT_DIFF_COLOR }, - { L"t", OPT_THRESHOLD }, - { L"flist", OPT_FILELIST }, - { nullptr, 0 } -}; - -#define DEFFMT(fmt) { L## #fmt, DXGI_FORMAT_ ## fmt } - -const SValue g_pFormats[] = -{ - // List does not include _TYPELESS, depth/stencil, or BC formats - DEFFMT(R32G32B32A32_FLOAT), - DEFFMT(R32G32B32A32_UINT), - DEFFMT(R32G32B32A32_SINT), - DEFFMT(R32G32B32_FLOAT), - DEFFMT(R32G32B32_UINT), - DEFFMT(R32G32B32_SINT), - DEFFMT(R16G16B16A16_FLOAT), - DEFFMT(R16G16B16A16_UNORM), - DEFFMT(R16G16B16A16_UINT), - DEFFMT(R16G16B16A16_SNORM), - DEFFMT(R16G16B16A16_SINT), - DEFFMT(R32G32_FLOAT), - DEFFMT(R32G32_UINT), - DEFFMT(R32G32_SINT), - DEFFMT(R10G10B10A2_UNORM), - DEFFMT(R10G10B10A2_UINT), - DEFFMT(R11G11B10_FLOAT), - DEFFMT(R8G8B8A8_UNORM), - DEFFMT(R8G8B8A8_UNORM_SRGB), - DEFFMT(R8G8B8A8_UINT), - DEFFMT(R8G8B8A8_SNORM), - DEFFMT(R8G8B8A8_SINT), - DEFFMT(R16G16_FLOAT), - DEFFMT(R16G16_UNORM), - DEFFMT(R16G16_UINT), - DEFFMT(R16G16_SNORM), - DEFFMT(R16G16_SINT), - DEFFMT(R32_FLOAT), - DEFFMT(R32_UINT), - DEFFMT(R32_SINT), - DEFFMT(R8G8_UNORM), - DEFFMT(R8G8_UINT), - DEFFMT(R8G8_SNORM), - DEFFMT(R8G8_SINT), - DEFFMT(R16_FLOAT), - DEFFMT(R16_UNORM), - DEFFMT(R16_UINT), - DEFFMT(R16_SNORM), - DEFFMT(R16_SINT), - DEFFMT(R8_UNORM), - DEFFMT(R8_UINT), - DEFFMT(R8_SNORM), - DEFFMT(R8_SINT), - DEFFMT(A8_UNORM), - DEFFMT(R9G9B9E5_SHAREDEXP), - DEFFMT(R8G8_B8G8_UNORM), - DEFFMT(G8R8_G8B8_UNORM), - DEFFMT(B5G6R5_UNORM), - DEFFMT(B5G5R5A1_UNORM), - - // DXGI 1.1 formats - DEFFMT(B8G8R8A8_UNORM), - DEFFMT(B8G8R8X8_UNORM), - DEFFMT(R10G10B10_XR_BIAS_A2_UNORM), - DEFFMT(B8G8R8A8_UNORM_SRGB), - DEFFMT(B8G8R8X8_UNORM_SRGB), - - // DXGI 1.2 formats - DEFFMT(AYUV), - DEFFMT(Y410), - DEFFMT(Y416), - DEFFMT(YUY2), - DEFFMT(Y210), - DEFFMT(Y216), - DEFFMT(B4G4R4A4_UNORM), - - // D3D11on12 format - { L"A4B4G4R4_UNORM", DXGI_FORMAT(191) }, - - { nullptr, DXGI_FORMAT_UNKNOWN } -}; - -const SValue g_pFormatAliases[] = -{ - { L"RGBA", DXGI_FORMAT_R8G8B8A8_UNORM }, - { L"BGRA", DXGI_FORMAT_B8G8R8A8_UNORM }, - { L"BGR", DXGI_FORMAT_B8G8R8X8_UNORM }, +#include "CmdLineHelpers.h" - { L"FP16", DXGI_FORMAT_R16G16B16A16_FLOAT }, - { L"FP32", DXGI_FORMAT_R32G32B32A32_FLOAT }, - - { nullptr, DXGI_FORMAT_UNKNOWN } -}; - -const SValue g_pReadOnlyFormats[] = -{ - DEFFMT(R32G32B32A32_TYPELESS), - DEFFMT(R32G32B32_TYPELESS), - DEFFMT(R16G16B16A16_TYPELESS), - DEFFMT(R32G32_TYPELESS), - DEFFMT(R32G8X24_TYPELESS), - DEFFMT(D32_FLOAT_S8X24_UINT), - DEFFMT(R32_FLOAT_X8X24_TYPELESS), - DEFFMT(X32_TYPELESS_G8X24_UINT), - DEFFMT(R10G10B10A2_TYPELESS), - DEFFMT(R8G8B8A8_TYPELESS), - DEFFMT(R16G16_TYPELESS), - DEFFMT(R32_TYPELESS), - DEFFMT(D32_FLOAT), - DEFFMT(R24G8_TYPELESS), - DEFFMT(D24_UNORM_S8_UINT), - DEFFMT(R24_UNORM_X8_TYPELESS), - DEFFMT(X24_TYPELESS_G8_UINT), - DEFFMT(R8G8_TYPELESS), - DEFFMT(R16_TYPELESS), - DEFFMT(R8_TYPELESS), - DEFFMT(BC1_TYPELESS), - DEFFMT(BC1_UNORM), - DEFFMT(BC1_UNORM_SRGB), - DEFFMT(BC2_TYPELESS), - DEFFMT(BC2_UNORM), - DEFFMT(BC2_UNORM_SRGB), - DEFFMT(BC3_TYPELESS), - DEFFMT(BC3_UNORM), - DEFFMT(BC3_UNORM_SRGB), - DEFFMT(BC4_TYPELESS), - DEFFMT(BC4_UNORM), - DEFFMT(BC4_SNORM), - DEFFMT(BC5_TYPELESS), - DEFFMT(BC5_UNORM), - DEFFMT(BC5_SNORM), - - // DXGI 1.1 formats - DEFFMT(B8G8R8A8_TYPELESS), - DEFFMT(B8G8R8X8_TYPELESS), - DEFFMT(BC6H_TYPELESS), - DEFFMT(BC6H_UF16), - DEFFMT(BC6H_SF16), - DEFFMT(BC7_TYPELESS), - DEFFMT(BC7_UNORM), - DEFFMT(BC7_UNORM_SRGB), - - // DXGI 1.2 formats - DEFFMT(AI44), - DEFFMT(IA44), - DEFFMT(P8), - DEFFMT(A8P8), - DEFFMT(NV12), - DEFFMT(P010), - DEFFMT(P016), - DEFFMT(420_OPAQUE), - DEFFMT(NV11), - - // DXGI 1.3 formats - { L"P208", DXGI_FORMAT(130) }, - { L"V208", DXGI_FORMAT(131) }, - { L"V408", DXGI_FORMAT(132) }, - - // Xbox-specific formats - { L"R10G10B10_7E3_A2_FLOAT (Xbox)", DXGI_FORMAT(116) }, - { L"R10G10B10_6E4_A2_FLOAT (Xbox)", DXGI_FORMAT(117) }, - { L"D16_UNORM_S8_UINT (Xbox)", DXGI_FORMAT(118) }, - { L"R16_UNORM_X8_TYPELESS (Xbox)", DXGI_FORMAT(119) }, - { L"X16_TYPELESS_G8_UINT (Xbox)", DXGI_FORMAT(120) }, - { L"R10G10B10_SNORM_A2_UNORM (Xbox)", DXGI_FORMAT(189) }, - { L"R4G4_UNORM (Xbox)", DXGI_FORMAT(190) }, - - { nullptr, DXGI_FORMAT_UNKNOWN } -}; - -const SValue g_pFilters[] = -{ - { L"POINT", TEX_FILTER_POINT }, - { L"LINEAR", TEX_FILTER_LINEAR }, - { L"CUBIC", TEX_FILTER_CUBIC }, - { L"FANT", TEX_FILTER_FANT }, - { L"BOX", TEX_FILTER_BOX }, - { L"TRIANGLE", TEX_FILTER_TRIANGLE }, - { L"POINT_DITHER", TEX_FILTER_POINT | TEX_FILTER_DITHER }, - { L"LINEAR_DITHER", TEX_FILTER_LINEAR | TEX_FILTER_DITHER }, - { L"CUBIC_DITHER", TEX_FILTER_CUBIC | TEX_FILTER_DITHER }, - { L"FANT_DITHER", TEX_FILTER_FANT | TEX_FILTER_DITHER }, - { L"BOX_DITHER", TEX_FILTER_BOX | TEX_FILTER_DITHER }, - { L"TRIANGLE_DITHER", TEX_FILTER_TRIANGLE | TEX_FILTER_DITHER }, - { L"POINT_DITHER_DIFFUSION", TEX_FILTER_POINT | TEX_FILTER_DITHER_DIFFUSION }, - { L"LINEAR_DITHER_DIFFUSION", TEX_FILTER_LINEAR | TEX_FILTER_DITHER_DIFFUSION }, - { L"CUBIC_DITHER_DIFFUSION", TEX_FILTER_CUBIC | TEX_FILTER_DITHER_DIFFUSION }, - { L"FANT_DITHER_DIFFUSION", TEX_FILTER_FANT | TEX_FILTER_DITHER_DIFFUSION }, - { L"BOX_DITHER_DIFFUSION", TEX_FILTER_BOX | TEX_FILTER_DITHER_DIFFUSION }, - { L"TRIANGLE_DITHER_DIFFUSION", TEX_FILTER_TRIANGLE | TEX_FILTER_DITHER_DIFFUSION }, - { nullptr, TEX_FILTER_DEFAULT } -}; - -#define CODEC_DDS 0xFFFF0001 -#define CODEC_TGA 0xFFFF0002 -#define CODEC_HDR 0xFFFF0005 - -#ifdef USE_OPENEXR -#define CODEC_EXR 0xFFFF0006 -#endif -#ifdef USE_LIBJPEG -#define CODEC_JPEG 0xFFFF0007 -#endif -#ifdef USE_LIBPNG -#define CODEC_PNG 0xFFFF0008 -#endif - -const SValue g_pDumpFileTypes[] = -{ - { L"bmp", WIC_CODEC_BMP }, -#ifdef USE_LIBJPEG - { L"jpg", CODEC_JPEG }, - { L"jpeg", CODEC_JPEG }, -#else - { L"jpg", WIC_CODEC_JPEG }, - { L"jpeg", WIC_CODEC_JPEG }, -#endif -#ifdef USE_LIBPNG - { L"png", CODEC_PNG }, -#else - { L"png", WIC_CODEC_PNG }, -#endif - { L"tga", CODEC_TGA }, - { L"hdr", CODEC_HDR }, - { L"tif", WIC_CODEC_TIFF }, - { L"tiff", WIC_CODEC_TIFF }, - { L"jxr", WIC_CODEC_WMP }, -#ifdef USE_OPENEXR - { L"exr", CODEC_EXR }, -#endif - { nullptr, CODEC_DDS } -}; - -const SValue g_pExtFileTypes[] = -{ - { L".bmp", WIC_CODEC_BMP }, -#ifdef USE_LIBJPEG - { L".jpg", CODEC_JPEG }, - { L".jpeg", CODEC_JPEG }, -#else - { L".jpg", WIC_CODEC_JPEG }, - { L".jpeg", WIC_CODEC_JPEG }, -#endif -#ifdef USE_LIBPNG - { L".png", CODEC_PNG }, -#else - { L".png", WIC_CODEC_PNG }, -#endif - { L".dds", CODEC_DDS }, - { L".tga", CODEC_TGA }, - { L".hdr", CODEC_HDR }, - { L".tif", WIC_CODEC_TIFF }, - { L".tiff", WIC_CODEC_TIFF }, - { L".wdp", WIC_CODEC_WMP }, - { L".hdp", WIC_CODEC_WMP }, - { L".jxr", WIC_CODEC_WMP }, -#ifdef USE_OPENEXR - { L"exr", CODEC_EXR }, -#endif - { nullptr, CODEC_DDS } -}; - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// +using namespace Helpers; +using namespace DirectX; namespace { - inline HANDLE safe_handle(HANDLE h) noexcept { return (h == INVALID_HANDLE_VALUE) ? nullptr : h; } - - struct find_closer { void operator()(HANDLE h) noexcept { assert(h != INVALID_HANDLE_VALUE); if (h) FindClose(h); } }; - - using ScopedFindHandle = std::unique_ptr<void, find_closer>; - -#ifdef _PREFAST_ -#pragma prefast(disable : 26018, "Only used with static internal arrays") -#endif + const wchar_t* g_ToolName = L"texdiag"; + const wchar_t* g_Description = L"Microsoft (R) DirectX Texture Diagnostic Tool [DirectXTex]"; - uint32_t LookupByName(const wchar_t *pName, const SValue *pArray) + enum COMMANDS : uint32_t { - while (pArray->name) - { - if (!_wcsicmp(pName, pArray->name)) - return pArray->value; - - pArray++; - } - - return 0; - } + CMD_INFO = 1, + CMD_ANALYZE, + CMD_COMPARE, + CMD_DIFF, + CMD_DUMPBC, + CMD_DUMPDDS, + CMD_MAX + }; - const wchar_t* LookupByValue(uint32_t pValue, const SValue *pArray) + enum OPTIONS : uint32_t { - while (pArray->name) - { - if (pValue == pArray->value) - return pArray->name; + OPT_RECURSIVE = 1, + OPT_FORMAT, + OPT_FILTER, + OPT_DDS_DWORD_ALIGN, + OPT_DDS_BAD_DXTN_TAILS, + OPT_DDS_PERMISSIVE, + OPT_DDS_IGNORE_MIPS, + OPT_OUTPUTFILE, + OPT_TOLOWER, + OPT_OVERWRITE, + OPT_FILETYPE, + OPT_NOLOGO, + OPT_TYPELESS_UNORM, + OPT_TYPELESS_FLOAT, + OPT_EXPAND_LUMINANCE, + OPT_TARGET_PIXELX, + OPT_TARGET_PIXELY, + OPT_DIFF_COLOR, + OPT_THRESHOLD, + OPT_FILELIST, + OPT_MAX + }; - pArray++; - } + static_assert(OPT_MAX <= 32, "dwOptions is a unsigned int bitfield"); - return L""; - } + ////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////// - void SearchForFiles(const std::filesystem::path& path, std::list<SConversion>& files, bool recursive) + const SValue<uint32_t> g_pCommands[] = { - // Process files - WIN32_FIND_DATAW findData = {}; - ScopedFindHandle hFile(safe_handle(FindFirstFileExW(path.c_str(), - FindExInfoBasic, &findData, - FindExSearchNameMatch, nullptr, - FIND_FIRST_EX_LARGE_FETCH))); - if (hFile) - { - for (;;) - { - if (!(findData.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY))) - { - SConversion conv = {}; - conv.szSrc = path.parent_path().append(findData.cFileName).native(); - files.push_back(conv); - } - - if (!FindNextFileW(hFile.get(), &findData)) - break; - } - } - - // Process directories - if (recursive) - { - auto searchDir = path.parent_path().append(L"*"); - - hFile.reset(safe_handle(FindFirstFileExW(searchDir.c_str(), - FindExInfoBasic, &findData, - FindExSearchLimitToDirectories, nullptr, - FIND_FIRST_EX_LARGE_FETCH))); - if (!hFile) - return; - - for (;;) - { - if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - if (findData.cFileName[0] != L'.') - { - auto subdir = path.parent_path().append(findData.cFileName).append(path.filename().c_str()); - - SearchForFiles(subdir, files, recursive); - } - } - - if (!FindNextFileW(hFile.get(), &findData)) - break; - } - } - } + { L"info", CMD_INFO }, + { L"analyze", CMD_ANALYZE }, + { L"compare", CMD_COMPARE }, + { L"diff", CMD_DIFF }, + { L"dumpbc", CMD_DUMPBC }, + { L"dumpdds", CMD_DUMPDDS }, + { nullptr, 0 } + }; - void ProcessFileList(std::wifstream& inFile, std::list<SConversion>& files) + const SValue<uint32_t> g_pOptions[] = { - std::list<SConversion> flist; - std::set<std::wstring> excludes; - - for (;;) - { - std::wstring fname; - std::getline(inFile, fname); - if (!inFile) - break; - - if (fname[0] == L'#') - { - // Comment - } - else if (fname[0] == L'-') - { - if (flist.empty()) - { - wprintf(L"WARNING: Ignoring the line '%ls' in -flist\n", fname.c_str()); - } - else - { - std::filesystem::path path(fname.c_str() + 1); - auto& npath = path.make_preferred(); - if (wcspbrk(fname.c_str(), L"?*") != nullptr) - { - std::list<SConversion> removeFiles; - SearchForFiles(npath, removeFiles, false); - - for (auto& it : removeFiles) - { - std::wstring name = it.szSrc; - std::transform(name.begin(), name.end(), name.begin(), towlower); - excludes.insert(name); - } - } - else - { - std::wstring name = npath.c_str(); - std::transform(name.begin(), name.end(), name.begin(), towlower); - excludes.insert(name); - } - } - } - else if (wcspbrk(fname.c_str(), L"?*") != nullptr) - { - std::filesystem::path path(fname.c_str()); - SearchForFiles(path.make_preferred(), flist, false); - } - else - { - SConversion conv = {}; - std::filesystem::path path(fname.c_str()); - conv.szSrc = path.make_preferred().native(); - flist.push_back(conv); - } - } - - inFile.close(); + { L"r", OPT_RECURSIVE }, + { L"f", OPT_FORMAT }, + { L"if", OPT_FILTER }, + { L"dword", OPT_DDS_DWORD_ALIGN }, + { L"badtails", OPT_DDS_BAD_DXTN_TAILS }, + { L"permissive", OPT_DDS_PERMISSIVE }, + { L"ignoremips", OPT_DDS_IGNORE_MIPS }, + { L"nologo", OPT_NOLOGO }, + { L"o", OPT_OUTPUTFILE }, + { L"l", OPT_TOLOWER }, + { L"y", OPT_OVERWRITE }, + { L"ft", OPT_FILETYPE }, + { L"tu", OPT_TYPELESS_UNORM }, + { L"tf", OPT_TYPELESS_FLOAT }, + { L"xlum", OPT_EXPAND_LUMINANCE }, + { L"targetx", OPT_TARGET_PIXELX }, + { L"targety", OPT_TARGET_PIXELY }, + { L"c", OPT_DIFF_COLOR }, + { L"t", OPT_THRESHOLD }, + { L"flist", OPT_FILELIST }, + { nullptr, 0 } + }; - if (!excludes.empty()) - { - // Remove any excluded files - for (auto it = flist.begin(); it != flist.end();) - { - std::wstring name = it->szSrc; - std::transform(name.begin(), name.end(), name.begin(), towlower); - auto item = it; - ++it; - if (excludes.find(name) != excludes.end()) - { - flist.erase(item); - } - } - } + #define DEFFMT(fmt) { L## #fmt, DXGI_FORMAT_ ## fmt } - if (flist.empty()) - { - wprintf(L"WARNING: No file names found in -flist\n"); - } - else - { - files.splice(files.end(), flist); - } - } + const SValue<DXGI_FORMAT> g_pFormats[] = + { + // List does not include _TYPELESS, depth/stencil, or BC formats + DEFFMT(R32G32B32A32_FLOAT), + DEFFMT(R32G32B32A32_UINT), + DEFFMT(R32G32B32A32_SINT), + DEFFMT(R32G32B32_FLOAT), + DEFFMT(R32G32B32_UINT), + DEFFMT(R32G32B32_SINT), + DEFFMT(R16G16B16A16_FLOAT), + DEFFMT(R16G16B16A16_UNORM), + DEFFMT(R16G16B16A16_UINT), + DEFFMT(R16G16B16A16_SNORM), + DEFFMT(R16G16B16A16_SINT), + DEFFMT(R32G32_FLOAT), + DEFFMT(R32G32_UINT), + DEFFMT(R32G32_SINT), + DEFFMT(R10G10B10A2_UNORM), + DEFFMT(R10G10B10A2_UINT), + DEFFMT(R11G11B10_FLOAT), + DEFFMT(R8G8B8A8_UNORM), + DEFFMT(R8G8B8A8_UNORM_SRGB), + DEFFMT(R8G8B8A8_UINT), + DEFFMT(R8G8B8A8_SNORM), + DEFFMT(R8G8B8A8_SINT), + DEFFMT(R16G16_FLOAT), + DEFFMT(R16G16_UNORM), + DEFFMT(R16G16_UINT), + DEFFMT(R16G16_SNORM), + DEFFMT(R16G16_SINT), + DEFFMT(R32_FLOAT), + DEFFMT(R32_UINT), + DEFFMT(R32_SINT), + DEFFMT(R8G8_UNORM), + DEFFMT(R8G8_UINT), + DEFFMT(R8G8_SNORM), + DEFFMT(R8G8_SINT), + DEFFMT(R16_FLOAT), + DEFFMT(R16_UNORM), + DEFFMT(R16_UINT), + DEFFMT(R16_SNORM), + DEFFMT(R16_SINT), + DEFFMT(R8_UNORM), + DEFFMT(R8_UINT), + DEFFMT(R8_SNORM), + DEFFMT(R8_SINT), + DEFFMT(A8_UNORM), + DEFFMT(R9G9B9E5_SHAREDEXP), + DEFFMT(R8G8_B8G8_UNORM), + DEFFMT(G8R8_G8B8_UNORM), + DEFFMT(B5G6R5_UNORM), + DEFFMT(B5G5R5A1_UNORM), + + // DXGI 1.1 formats + DEFFMT(B8G8R8A8_UNORM), + DEFFMT(B8G8R8X8_UNORM), + DEFFMT(R10G10B10_XR_BIAS_A2_UNORM), + DEFFMT(B8G8R8A8_UNORM_SRGB), + DEFFMT(B8G8R8X8_UNORM_SRGB), + + // DXGI 1.2 formats + DEFFMT(AYUV), + DEFFMT(Y410), + DEFFMT(Y416), + DEFFMT(YUY2), + DEFFMT(Y210), + DEFFMT(Y216), + DEFFMT(B4G4R4A4_UNORM), + + // D3D11on12 format + { L"A4B4G4R4_UNORM", DXGI_FORMAT(191) }, + + { nullptr, DXGI_FORMAT_UNKNOWN } + }; - void PrintFormat(DXGI_FORMAT Format) + const SValue<DXGI_FORMAT> g_pFormatAliases[] = { - for (auto pFormat = g_pFormats; pFormat->name; pFormat++) - { - if (static_cast<DXGI_FORMAT>(pFormat->value) == Format) - { - wprintf(L"%ls", pFormat->name); - return; - } - } + { L"RGBA", DXGI_FORMAT_R8G8B8A8_UNORM }, + { L"BGRA", DXGI_FORMAT_B8G8R8A8_UNORM }, + { L"BGR", DXGI_FORMAT_B8G8R8X8_UNORM }, - for (auto pFormat = g_pReadOnlyFormats; pFormat->name; pFormat++) - { - if (static_cast<DXGI_FORMAT>(pFormat->value) == Format) - { - wprintf(L"%ls", pFormat->name); - return; - } - } + { L"FP16", DXGI_FORMAT_R16G16B16A16_FLOAT }, + { L"FP32", DXGI_FORMAT_R32G32B32A32_FLOAT }, - wprintf(L"*UNKNOWN*"); - } + { nullptr, DXGI_FORMAT_UNKNOWN } + }; - void PrintList(size_t cch, const SValue *pValue) + const SValue<DXGI_FORMAT> g_pReadOnlyFormats[] = { - while (pValue->name) - { - const size_t cchName = wcslen(pValue->name); + DEFFMT(R32G32B32A32_TYPELESS), + DEFFMT(R32G32B32_TYPELESS), + DEFFMT(R16G16B16A16_TYPELESS), + DEFFMT(R32G32_TYPELESS), + DEFFMT(R32G8X24_TYPELESS), + DEFFMT(D32_FLOAT_S8X24_UINT), + DEFFMT(R32_FLOAT_X8X24_TYPELESS), + DEFFMT(X32_TYPELESS_G8X24_UINT), + DEFFMT(R10G10B10A2_TYPELESS), + DEFFMT(R8G8B8A8_TYPELESS), + DEFFMT(R16G16_TYPELESS), + DEFFMT(R32_TYPELESS), + DEFFMT(D32_FLOAT), + DEFFMT(R24G8_TYPELESS), + DEFFMT(D24_UNORM_S8_UINT), + DEFFMT(R24_UNORM_X8_TYPELESS), + DEFFMT(X24_TYPELESS_G8_UINT), + DEFFMT(R8G8_TYPELESS), + DEFFMT(R16_TYPELESS), + DEFFMT(R8_TYPELESS), + DEFFMT(BC1_TYPELESS), + DEFFMT(BC1_UNORM), + DEFFMT(BC1_UNORM_SRGB), + DEFFMT(BC2_TYPELESS), + DEFFMT(BC2_UNORM), + DEFFMT(BC2_UNORM_SRGB), + DEFFMT(BC3_TYPELESS), + DEFFMT(BC3_UNORM), + DEFFMT(BC3_UNORM_SRGB), + DEFFMT(BC4_TYPELESS), + DEFFMT(BC4_UNORM), + DEFFMT(BC4_SNORM), + DEFFMT(BC5_TYPELESS), + DEFFMT(BC5_UNORM), + DEFFMT(BC5_SNORM), + + // DXGI 1.1 formats + DEFFMT(B8G8R8A8_TYPELESS), + DEFFMT(B8G8R8X8_TYPELESS), + DEFFMT(BC6H_TYPELESS), + DEFFMT(BC6H_UF16), + DEFFMT(BC6H_SF16), + DEFFMT(BC7_TYPELESS), + DEFFMT(BC7_UNORM), + DEFFMT(BC7_UNORM_SRGB), + + // DXGI 1.2 formats + DEFFMT(AI44), + DEFFMT(IA44), + DEFFMT(P8), + DEFFMT(A8P8), + DEFFMT(NV12), + DEFFMT(P010), + DEFFMT(P016), + DEFFMT(420_OPAQUE), + DEFFMT(NV11), + + // DXGI 1.3 formats + { L"P208", DXGI_FORMAT(130) }, + { L"V208", DXGI_FORMAT(131) }, + { L"V408", DXGI_FORMAT(132) }, + + // Xbox-specific formats + { L"R10G10B10_7E3_A2_FLOAT (Xbox)", DXGI_FORMAT(116) }, + { L"R10G10B10_6E4_A2_FLOAT (Xbox)", DXGI_FORMAT(117) }, + { L"D16_UNORM_S8_UINT (Xbox)", DXGI_FORMAT(118) }, + { L"R16_UNORM_X8_TYPELESS (Xbox)", DXGI_FORMAT(119) }, + { L"X16_TYPELESS_G8_UINT (Xbox)", DXGI_FORMAT(120) }, + { L"R10G10B10_SNORM_A2_UNORM (Xbox)", DXGI_FORMAT(189) }, + { L"R4G4_UNORM (Xbox)", DXGI_FORMAT(190) }, + + { nullptr, DXGI_FORMAT_UNKNOWN } + }; - if (cch + cchName + 2 >= 80) - { - wprintf(L"\n "); - cch = 6; - } + const SValue<uint32_t> g_pFilters[] = + { + { L"POINT", TEX_FILTER_POINT }, + { L"LINEAR", TEX_FILTER_LINEAR }, + { L"CUBIC", TEX_FILTER_CUBIC }, + { L"FANT", TEX_FILTER_FANT }, + { L"BOX", TEX_FILTER_BOX }, + { L"TRIANGLE", TEX_FILTER_TRIANGLE }, + { L"POINT_DITHER", TEX_FILTER_POINT | TEX_FILTER_DITHER }, + { L"LINEAR_DITHER", TEX_FILTER_LINEAR | TEX_FILTER_DITHER }, + { L"CUBIC_DITHER", TEX_FILTER_CUBIC | TEX_FILTER_DITHER }, + { L"FANT_DITHER", TEX_FILTER_FANT | TEX_FILTER_DITHER }, + { L"BOX_DITHER", TEX_FILTER_BOX | TEX_FILTER_DITHER }, + { L"TRIANGLE_DITHER", TEX_FILTER_TRIANGLE | TEX_FILTER_DITHER }, + { L"POINT_DITHER_DIFFUSION", TEX_FILTER_POINT | TEX_FILTER_DITHER_DIFFUSION }, + { L"LINEAR_DITHER_DIFFUSION", TEX_FILTER_LINEAR | TEX_FILTER_DITHER_DIFFUSION }, + { L"CUBIC_DITHER_DIFFUSION", TEX_FILTER_CUBIC | TEX_FILTER_DITHER_DIFFUSION }, + { L"FANT_DITHER_DIFFUSION", TEX_FILTER_FANT | TEX_FILTER_DITHER_DIFFUSION }, + { L"BOX_DITHER_DIFFUSION", TEX_FILTER_BOX | TEX_FILTER_DITHER_DIFFUSION }, + { L"TRIANGLE_DITHER_DIFFUSION", TEX_FILTER_TRIANGLE | TEX_FILTER_DITHER_DIFFUSION }, + { nullptr, TEX_FILTER_DEFAULT } + }; - wprintf(L"%ls ", pValue->name); - cch += cchName + 2; - pValue++; - } + #define CODEC_DDS 0xFFFF0001 + #define CODEC_TGA 0xFFFF0002 + #define CODEC_HDR 0xFFFF0005 - wprintf(L"\n"); - } + #ifdef USE_OPENEXR + #define CODEC_EXR 0xFFFF0006 + #endif + #ifdef USE_LIBJPEG + #define CODEC_JPEG 0xFFFF0007 + #endif + #ifdef USE_LIBPNG + #define CODEC_PNG 0xFFFF0008 + #endif - void PrintLogo(bool versionOnly) + const SValue<uint32_t> g_pDumpFileTypes[] = { - wchar_t version[32] = {}; - - wchar_t appName[_MAX_PATH] = {}; - if (GetModuleFileNameW(nullptr, appName, _MAX_PATH)) - { - const DWORD size = GetFileVersionInfoSizeW(appName, nullptr); - if (size > 0) - { - auto verInfo = std::make_unique<uint8_t[]>(size); - if (GetFileVersionInfoW(appName, 0, size, verInfo.get())) - { - LPVOID lpstr = nullptr; - UINT strLen = 0; - if (VerQueryValueW(verInfo.get(), L"\\StringFileInfo\\040904B0\\ProductVersion", &lpstr, &strLen)) - { - wcsncpy_s(version, reinterpret_cast<const wchar_t*>(lpstr), strLen); - } - } - } - } - - if (!*version || wcscmp(version, L"1.0.0.0") == 0) - { - swprintf_s(version, L"%03d (library)", DIRECTX_TEX_VERSION); - } + { L"bmp", WIC_CODEC_BMP }, + #ifdef USE_LIBJPEG + { L"jpg", CODEC_JPEG }, + { L"jpeg", CODEC_JPEG }, + #else + { L"jpg", WIC_CODEC_JPEG }, + { L"jpeg", WIC_CODEC_JPEG }, + #endif + #ifdef USE_LIBPNG + { L"png", CODEC_PNG }, + #else + { L"png", WIC_CODEC_PNG }, + #endif + { L"tga", CODEC_TGA }, + { L"hdr", CODEC_HDR }, + { L"tif", WIC_CODEC_TIFF }, + { L"tiff", WIC_CODEC_TIFF }, + { L"jxr", WIC_CODEC_WMP }, + #ifdef USE_OPENEXR + { L"exr", CODEC_EXR }, + #endif + { nullptr, CODEC_DDS } + }; - if (versionOnly) - { - wprintf(L"texdiag version %ls\n", version); - } - else - { - wprintf(L"Microsoft (R) DirectX Texture Diagnostic Tool [DirectXTex] Version %ls\n", version); - wprintf(L"Copyright (C) Microsoft Corp.\n"); - #ifdef _DEBUG - wprintf(L"*** Debug build ***\n"); - #endif - wprintf(L"\n"); - } - } + const SValue<uint32_t> g_pExtFileTypes[] = + { + { L".bmp", WIC_CODEC_BMP }, + #ifdef USE_LIBJPEG + { L".jpg", CODEC_JPEG }, + { L".jpeg", CODEC_JPEG }, + #else + { L".jpg", WIC_CODEC_JPEG }, + { L".jpeg", WIC_CODEC_JPEG }, + #endif + #ifdef USE_LIBPNG + { L".png", CODEC_PNG }, + #else + { L".png", WIC_CODEC_PNG }, + #endif + { L".dds", CODEC_DDS }, + { L".tga", CODEC_TGA }, + { L".hdr", CODEC_HDR }, + { L".tif", WIC_CODEC_TIFF }, + { L".tiff", WIC_CODEC_TIFF }, + { L".wdp", WIC_CODEC_WMP }, + { L".hdp", WIC_CODEC_WMP }, + { L".jxr", WIC_CODEC_WMP }, + #ifdef USE_OPENEXR + { L"exr", CODEC_EXR }, + #endif + { nullptr, CODEC_DDS } + }; void PrintUsage() { - PrintLogo(false); + PrintLogo(false, g_ToolName, g_Description); static const wchar_t* const s_usage = L"Usage: texdiag <command> <options> [--] <files>\n" @@ -749,43 +476,6 @@ namespace PrintList(15, g_pDumpFileTypes); } - const wchar_t* GetErrorDesc(HRESULT hr) - { - static wchar_t desc[1024] = {}; - - LPWSTR errorText = nullptr; - - const DWORD result = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER, - nullptr, static_cast<DWORD>(hr), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), reinterpret_cast<LPWSTR>(&errorText), 0, nullptr); - - *desc = 0; - - if (result > 0 && errorText) - { - swprintf_s(desc, L": %ls", errorText); - - size_t len = wcslen(desc); - if (len >= 1) - { - desc[len - 1] = 0; - } - - if (errorText) - LocalFree(errorText); - - for(wchar_t* ptr = desc; *ptr != 0; ++ptr) - { - if (*ptr == L'\r' || *ptr == L'\n') - { - *ptr = L' '; - } - } - } - - return desc; - } - HRESULT LoadImage( const wchar_t *fileName, uint32_t dwOptions, @@ -1053,7 +743,7 @@ namespace void Print(DXGI_FORMAT fmt) { wprintf(L"\t Compression - "); - PrintFormat(fmt); + PrintFormat(fmt, g_pFormats, g_pReadOnlyFormats); wprintf(L"\n\t Total blocks - %zu\n", blocks); switch (fmt) @@ -3340,7 +3030,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) { if (!_wcsicmp(argv[1], L"--version")) { - PrintLogo(true); + PrintLogo(true, g_ToolName, g_Description); return 0; } else if (!_wcsicmp(argv[1], L"--help")) @@ -3384,7 +3074,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) } else if (!_wcsicmp(pArg, L"--version")) { - PrintLogo(true); + PrintLogo(true, g_ToolName, g_Description); return 0; } else if (!_wcsicmp(pArg, L"--help")) @@ -3585,7 +3275,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) { const size_t count = conversion.size(); std::filesystem::path path(pArg); - SearchForFiles(path.make_preferred(), conversion, (dwOptions & (1 << OPT_RECURSIVE)) != 0); + SearchForFiles(path.make_preferred(), conversion, (dwOptions & (1 << OPT_RECURSIVE)) != 0, nullptr); if (conversion.size() <= count) { wprintf(L"No matching files found for %ls\n", pArg); @@ -3608,7 +3298,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) } if (~dwOptions & (1 << OPT_NOLOGO)) - PrintLogo(false); + PrintLogo(false, g_ToolName, g_Description); switch (dwCommand) { @@ -3903,7 +3593,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) wprintf(L" mipLevels = %zu\n", info.mipLevels); wprintf(L" arraySize = %zu\n", info.arraySize); wprintf(L" format = "); - PrintFormat(info.format); + PrintFormat(info.format, g_pFormats, g_pReadOnlyFormats); wprintf(L"\n dimension = "); switch (info.dimension) { @@ -4069,7 +3759,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) } wprintf(L"Compression: "); - PrintFormat(info.format); + PrintFormat(info.format, g_pFormats, g_pReadOnlyFormats); wprintf(L"\n"); if (info.depth > 1) diff --git a/Texdiag/texdiag.rc b/Texdiag/texdiag.rc index 81f37844..180658be 100644 --- a/Texdiag/texdiag.rc +++ b/Texdiag/texdiag.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_MAIN_ICON ICON "directx.ico" +IDI_MAIN_ICON ICON "..\Common\directx.ico" #ifdef APSTUDIO_INVOKED diff --git a/Texdiag/texdiag_Desktop_2019.vcxproj b/Texdiag/texdiag_Desktop_2019.vcxproj index 33ca8f40..717a25df 100644 --- a/Texdiag/texdiag_Desktop_2019.vcxproj +++ b/Texdiag/texdiag_Desktop_2019.vcxproj @@ -134,7 +134,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -159,7 +159,7 @@ <Optimization>Disabled</Optimization> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -183,7 +183,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -210,7 +210,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -237,7 +237,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -264,7 +264,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -297,7 +297,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest" /> + <Manifest Include="..\Common\settings.manifest" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> diff --git a/Texdiag/texdiag_Desktop_2019.vcxproj.filters b/Texdiag/texdiag_Desktop_2019.vcxproj.filters index b4b97edd..80ea3674 100644 --- a/Texdiag/texdiag_Desktop_2019.vcxproj.filters +++ b/Texdiag/texdiag_Desktop_2019.vcxproj.filters @@ -15,8 +15,11 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest"> + <Manifest Include="..\Common\settings.manifest"> <Filter>Resource Files</Filter> </Manifest> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> + </ItemGroup> </Project> \ No newline at end of file diff --git a/Texdiag/texdiag_Desktop_2019_Win10.vcxproj b/Texdiag/texdiag_Desktop_2019_Win10.vcxproj index aace29f3..b4c0e481 100644 --- a/Texdiag/texdiag_Desktop_2019_Win10.vcxproj +++ b/Texdiag/texdiag_Desktop_2019_Win10.vcxproj @@ -191,7 +191,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -216,7 +216,7 @@ <Optimization>Disabled</Optimization> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -240,7 +240,7 @@ <Optimization>Disabled</Optimization> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -263,7 +263,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -290,7 +290,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -316,7 +316,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -342,7 +342,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -369,7 +369,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -395,7 +395,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -427,7 +427,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest" /> + <Manifest Include="..\Common\settings.manifest" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> diff --git a/Texdiag/texdiag_Desktop_2019_Win10.vcxproj.filters b/Texdiag/texdiag_Desktop_2019_Win10.vcxproj.filters index b4b97edd..80ea3674 100644 --- a/Texdiag/texdiag_Desktop_2019_Win10.vcxproj.filters +++ b/Texdiag/texdiag_Desktop_2019_Win10.vcxproj.filters @@ -15,8 +15,11 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest"> + <Manifest Include="..\Common\settings.manifest"> <Filter>Resource Files</Filter> </Manifest> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> + </ItemGroup> </Project> \ No newline at end of file diff --git a/Texdiag/texdiag_Desktop_2022.vcxproj b/Texdiag/texdiag_Desktop_2022.vcxproj index 8dd21987..52bb996b 100644 --- a/Texdiag/texdiag_Desktop_2022.vcxproj +++ b/Texdiag/texdiag_Desktop_2022.vcxproj @@ -134,7 +134,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -159,7 +159,7 @@ <Optimization>Disabled</Optimization> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -183,7 +183,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -210,7 +210,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -237,7 +237,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -264,7 +264,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -297,7 +297,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest" /> + <Manifest Include="..\Common\settings.manifest" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> diff --git a/Texdiag/texdiag_Desktop_2022.vcxproj.filters b/Texdiag/texdiag_Desktop_2022.vcxproj.filters index b4b97edd..80ea3674 100644 --- a/Texdiag/texdiag_Desktop_2022.vcxproj.filters +++ b/Texdiag/texdiag_Desktop_2022.vcxproj.filters @@ -15,8 +15,11 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest"> + <Manifest Include="..\Common\settings.manifest"> <Filter>Resource Files</Filter> </Manifest> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> + </ItemGroup> </Project> \ No newline at end of file diff --git a/Texdiag/texdiag_Desktop_2022_Win10.vcxproj b/Texdiag/texdiag_Desktop_2022_Win10.vcxproj index b9867769..cef646da 100644 --- a/Texdiag/texdiag_Desktop_2022_Win10.vcxproj +++ b/Texdiag/texdiag_Desktop_2022_Win10.vcxproj @@ -191,7 +191,7 @@ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -216,7 +216,7 @@ <Optimization>Disabled</Optimization> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -240,7 +240,7 @@ <Optimization>Disabled</Optimization> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -263,7 +263,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -290,7 +290,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -316,7 +316,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ControlFlowGuard>Guard</ControlFlowGuard> <SDLCheck>true</SDLCheck> @@ -342,7 +342,7 @@ <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -369,7 +369,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -395,7 +395,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FloatingPointModel>Fast</FloatingPointModel> - <AdditionalIncludeDirectories>..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;..\DirectXTex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;PROFILE;_CONSOLE;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -427,7 +427,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest" /> + <Manifest Include="..\Common\settings.manifest" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> diff --git a/Texdiag/texdiag_Desktop_2022_Win10.vcxproj.filters b/Texdiag/texdiag_Desktop_2022_Win10.vcxproj.filters index b4b97edd..80ea3674 100644 --- a/Texdiag/texdiag_Desktop_2022_Win10.vcxproj.filters +++ b/Texdiag/texdiag_Desktop_2022_Win10.vcxproj.filters @@ -15,8 +15,11 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <Manifest Include="settings.manifest"> + <Manifest Include="..\Common\settings.manifest"> <Filter>Resource Files</Filter> </Manifest> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\Common\CmdLineHelpers.h" /> + </ItemGroup> </Project> \ No newline at end of file From 62c47b0195652b42f29ecf1659ce4997a9bb8551 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn <chuckw@microsoft.com> Date: Mon, 16 Sep 2024 16:31:37 -0700 Subject: [PATCH 02/11] Update DDSView hlsl.cmd to match recent changes to CompileShaders --- CMakeLists.txt | 21 +++------- Common/CmdLineHelpers.h | 2 +- DDSView/DDSView_Desktop_2019.vcxproj | 7 +++- DDSView/DDSView_Desktop_2019.vcxproj.filters | 2 +- DDSView/DDSView_Desktop_2022.vcxproj | 7 +++- DDSView/DDSView_Desktop_2022.vcxproj.filters | 2 +- DDSView/{ddsview.fx => ddsview.hlsl} | 0 DDSView/hlsl.cmd | 40 +++++++++++++------- Texassemble/texassemble.cpp | 2 + Texconv/texconv.cpp | 2 + Texdiag/texdiag.cpp | 2 + 11 files changed, 51 insertions(+), 36 deletions(-) rename DDSView/{ddsview.fx => ddsview.hlsl} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 102b4861..84b34336 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -483,33 +483,22 @@ endif() if(BUILD_SAMPLE AND BUILD_DX11 AND WIN32) list(APPEND TOOL_EXES ddsview) - if(NOT COMPILED_DDSVIEW_SHADERS) - if(USE_PREBUILT_SHADERS) - message(FATAL_ERROR "ERROR: Using prebuilt shaders requires the COMPILED_DDSVIEW_SHADERS variable is set") - endif() - set(COMPILED_DDSVIEW_SHADERS ${CMAKE_CURRENT_BINARY_DIR}/Shaders/Compiled) - file(MAKE_DIRECTORY ${COMPILED_DDSVIEW_SHADERS}) - else() - file(TO_CMAKE_PATH ${COMPILED_DDSVIEW_SHADERS} COMPILED_DDSVIEW_SHADERS) - endif() - add_executable(ddsview WIN32 DDSView/ddsview.cpp DDSView/ddsview.rc - ${COMPILED_DDSVIEW_SHADERS}/ddsview_ps1D.inc) + ${COMPILED_SHADERS}/ddsview_ps1D.inc) target_link_libraries(ddsview PRIVATE ${PROJECT_NAME} d3d11.lib ole32.lib) source_group(ddsview REGULAR_EXPRESSION DDSView/*.*) - target_include_directories(ddsview PRIVATE ${COMPILED_DDSVIEW_SHADERS}) + target_include_directories(ddsview PRIVATE ${COMPILED_SHADERS}) if(NOT USE_PREBUILT_SHADERS) - #TODO: DIRECTX_FXC_TOOL add_custom_command( - OUTPUT "${COMPILED_DDSVIEW_SHADERS}/ddsview_ps1D.inc" + OUTPUT "${COMPILED_SHADERS}/ddsview_ps1D.inc" MAIN_DEPENDENCY "${PROJECT_SOURCE_DIR}/DDSView/hlsl.cmd" - DEPENDS "${PROJECT_SOURCE_DIR}/DDSView/ddsview.fx" + DEPENDS "DDSView/ddsview.hlsl" COMMENT "Generating HLSL shaders for DDSView..." - COMMAND COMMAND ${CMAKE_COMMAND} -E env CompileShadersOutput="${COMPILED_DDSVIEW_SHADERS}" hlsl.cmd > "${COMPILED_DDSVIEW_SHADERS}/hlsl.log" + COMMAND ${CMAKE_COMMAND} -E env CompileShadersOutput="${COMPILED_SHADERS}" $<$<BOOL:${DIRECTX_FXC_TOOL}>:LegacyShaderCompiler=${DIRECTX_FXC_TOOL}> hlsl.cmd > "${COMPILED_SHADERS}/hlsl_ddsview.log" WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/DDSView" USES_TERMINAL) endif() diff --git a/Common/CmdLineHelpers.h b/Common/CmdLineHelpers.h index f81c3c78..2cf26b18 100644 --- a/Common/CmdLineHelpers.h +++ b/Common/CmdLineHelpers.h @@ -353,4 +353,4 @@ namespace Helpers return desc; } -} \ No newline at end of file +} diff --git a/DDSView/DDSView_Desktop_2019.vcxproj b/DDSView/DDSView_Desktop_2019.vcxproj index 62d6a7a4..b8b0a6f4 100644 --- a/DDSView/DDSView_Desktop_2019.vcxproj +++ b/DDSView/DDSView_Desktop_2019.vcxproj @@ -291,7 +291,7 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <None Include="ddsview.fx" /> + <None Include="ddsview.hlsl" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> @@ -300,10 +300,13 @@ <_ATGFXCPath>$(WindowsSDK_ExecutablePath_x64.Split(';')[0])</_ATGFXCPath> <_ATGFXCPath>$(_ATGFXCPath.Replace("x64",""))</_ATGFXCPath> <_ATGFXCPath Condition="'$(_ATGFXCPath)' != '' and !HasTrailingSlash('$(_ATGFXCPath)')">$(_ATGFXCPath)\</_ATGFXCPath> + <_ATGFXCVer>$([System.Text.RegularExpressions.Regex]::Match($(_ATGFXCPath), `10\.0\.\d+\.0`))</_ATGFXCVer> + <_ATGFXCVer Condition="'$(_ATGFXCVer)' != '' and !HasTrailingSlash('$(_ATGFXCVer)')">$(_ATGFXCVer)\</_ATGFXCVer> </PropertyGroup> - <Exec Condition="!Exists('Shaders/ddsview_vs.inc')" WorkingDirectory="$(ProjectDir)" Command="hlsl" EnvironmentVariables="WindowsSdkVerBinPath=$(_ATGFXCPath)" LogStandardErrorAsError="true" /> + <Exec Condition="!Exists('Shaders/ddsview_vs.inc')" WorkingDirectory="$(ProjectDir)" Command="hlsl" EnvironmentVariables="WindowsSdkVerBinPath=$(_ATGFXCPath);WindowsSDKVersion=$(_ATGFXCVer);CompileShadersOutput=$(ProjectDir)\Shaders" LogStandardErrorAsError="true" /> <PropertyGroup> <_ATGFXCPath /> + <_ATGFXCVer /> </PropertyGroup> </Target> <Target Name="ATGDeleteShaders" AfterTargets="Clean"> diff --git a/DDSView/DDSView_Desktop_2019.vcxproj.filters b/DDSView/DDSView_Desktop_2019.vcxproj.filters index ab6eee79..32c0bff0 100644 --- a/DDSView/DDSView_Desktop_2019.vcxproj.filters +++ b/DDSView/DDSView_Desktop_2019.vcxproj.filters @@ -15,6 +15,6 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <None Include="ddsview.fx" /> + <None Include="ddsview.hlsl" /> </ItemGroup> </Project> \ No newline at end of file diff --git a/DDSView/DDSView_Desktop_2022.vcxproj b/DDSView/DDSView_Desktop_2022.vcxproj index bfdb2b86..b7c27906 100644 --- a/DDSView/DDSView_Desktop_2022.vcxproj +++ b/DDSView/DDSView_Desktop_2022.vcxproj @@ -291,7 +291,7 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <None Include="ddsview.fx" /> + <None Include="ddsview.hlsl" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets" /> @@ -300,10 +300,13 @@ <_ATGFXCPath>$(WindowsSDK_ExecutablePath_x64.Split(';')[0])</_ATGFXCPath> <_ATGFXCPath>$(_ATGFXCPath.Replace("x64",""))</_ATGFXCPath> <_ATGFXCPath Condition="'$(_ATGFXCPath)' != '' and !HasTrailingSlash('$(_ATGFXCPath)')">$(_ATGFXCPath)\</_ATGFXCPath> + <_ATGFXCVer>$([System.Text.RegularExpressions.Regex]::Match($(_ATGFXCPath), `10\.0\.\d+\.0`))</_ATGFXCVer> + <_ATGFXCVer Condition="'$(_ATGFXCVer)' != '' and !HasTrailingSlash('$(_ATGFXCVer)')">$(_ATGFXCVer)\</_ATGFXCVer> </PropertyGroup> - <Exec Condition="!Exists('Shaders/ddsview_vs.inc')" WorkingDirectory="$(ProjectDir)" Command="hlsl" EnvironmentVariables="WindowsSdkVerBinPath=$(_ATGFXCPath)" LogStandardErrorAsError="true" /> + <Exec Condition="!Exists('Shaders/ddsview_vs.inc')" WorkingDirectory="$(ProjectDir)" Command="hlsl" EnvironmentVariables="WindowsSdkVerBinPath=$(_ATGFXCPath);WindowsSDKVersion=$(_ATGFXCVer);CompileShadersOutput=$(ProjectDir)\Shaders" LogStandardErrorAsError="true" /> <PropertyGroup> <_ATGFXCPath /> + <_ATGFXCVer /> </PropertyGroup> </Target> <Target Name="ATGDeleteShaders" AfterTargets="Clean"> diff --git a/DDSView/DDSView_Desktop_2022.vcxproj.filters b/DDSView/DDSView_Desktop_2022.vcxproj.filters index ab6eee79..32c0bff0 100644 --- a/DDSView/DDSView_Desktop_2022.vcxproj.filters +++ b/DDSView/DDSView_Desktop_2022.vcxproj.filters @@ -15,6 +15,6 @@ </ResourceCompile> </ItemGroup> <ItemGroup> - <None Include="ddsview.fx" /> + <None Include="ddsview.hlsl" /> </ItemGroup> </Project> \ No newline at end of file diff --git a/DDSView/ddsview.fx b/DDSView/ddsview.hlsl similarity index 100% rename from DDSView/ddsview.fx rename to DDSView/ddsview.hlsl diff --git a/DDSView/hlsl.cmd b/DDSView/hlsl.cmd index aefdc0f8..80a01f22 100644 --- a/DDSView/hlsl.cmd +++ b/DDSView/hlsl.cmd @@ -5,16 +5,25 @@ rem Licensed under the MIT License. setlocal set error=0 +if %PROCESSOR_ARCHITECTURE%.==ARM64. (set FXCARCH=arm64) else (if %PROCESSOR_ARCHITECTURE%.==AMD64. (set FXCARCH=x64) else (set FXCARCH=x86)) + set FXCOPTS=/nologo /WX /Ges /Qstrip_reflect /Qstrip_debug -set PCFXC="%WindowsSdkVerBinPath%x86\fxc.exe" +if defined LegacyShaderCompiler goto fxcviaenv +set PCFXC="%WindowsSdkVerBinPath%%FXCARCH%\fxc.exe" if exist %PCFXC% goto continue -set PCFXC="%WindowsSdkBinPath%%WindowsSDKVersion%\x86\fxc.exe" +set PCFXC="%WindowsSdkBinPath%%WindowsSDKVersion%\%FXCARCH%\fxc.exe" if exist %PCFXC% goto continue -set PCFXC="%WindowsSdkDir%bin\%WindowsSDKVersion%\x86\fxc.exe" +set PCFXC="%WindowsSdkDir%bin\%WindowsSDKVersion%\%FXCARCH%\fxc.exe" if exist %PCFXC% goto continue set PCFXC=fxc.exe +goto continue + +:fxcviaenv +set PCFXC="%LegacyShaderCompiler%" +if not exist %PCFXC% goto needfxc +goto continue :continue if not defined CompileShadersOutput set CompileShadersOutput=Shaders @@ -23,45 +32,50 @@ set StrTrim=%StrTrim: ##=% set CompileShadersOutput=%StrTrim:##=% @if not exist "%CompileShadersOutput%" mkdir "%CompileShadersOutput%" - -set FXC=%PCFXC% ddsview.fx %FXCOPTS% /EVS /Tvs_4_1 /Fh%CompileShadersOutput%\ddsview_vs.inc +set FXC=%PCFXC% ddsview.hlsl %FXCOPTS% /EVS /Tvs_4_1 /Fh%CompileShadersOutput%\ddsview_vs.inc echo %FXC% %FXC% @if ERRORLEVEL 1 goto error -set FXC=%PCFXC% ddsview.fx %FXCOPTS% /EPS_1D /Tps_4_1 /Fh%CompileShadersOutput%\ddsview_ps1D.inc +set FXC=%PCFXC% ddsview.hlsl %FXCOPTS% /EPS_1D /Tps_4_1 /Fh%CompileShadersOutput%\ddsview_ps1D.inc echo %FXC% %FXC% @if ERRORLEVEL 1 goto error -set FXC=%PCFXC% ddsview.fx %FXCOPTS% /EPS_1DArray /Tps_4_1 /Fh%CompileShadersOutput%\ddsview_ps1Darray.inc +set FXC=%PCFXC% ddsview.hlsl %FXCOPTS% /EPS_1DArray /Tps_4_1 /Fh%CompileShadersOutput%\ddsview_ps1Darray.inc echo %FXC% %FXC% @if ERRORLEVEL 1 goto error -set FXC=%PCFXC% ddsview.fx %FXCOPTS% /EPS_2D /Tps_4_1 /Fh%CompileShadersOutput%\ddsview_ps2D.inc +set FXC=%PCFXC% ddsview.hlsl %FXCOPTS% /EPS_2D /Tps_4_1 /Fh%CompileShadersOutput%\ddsview_ps2D.inc echo %FXC% %FXC% @if ERRORLEVEL 1 goto error -set FXC=%PCFXC% ddsview.fx %FXCOPTS% /EPS_2DArray /Tps_4_1 /Fh%CompileShadersOutput%\ddsview_ps2Darray.inc +set FXC=%PCFXC% ddsview.hlsl %FXCOPTS% /EPS_2DArray /Tps_4_1 /Fh%CompileShadersOutput%\ddsview_ps2Darray.inc echo %FXC% %FXC% @if ERRORLEVEL 1 goto error -set FXC=%PCFXC% ddsview.fx %FXCOPTS% /EPS_3D /Tps_4_1 /Fh%CompileShadersOutput%\ddsview_ps3D.inc +set FXC=%PCFXC% ddsview.hlsl %FXCOPTS% /EPS_3D /Tps_4_1 /Fh%CompileShadersOutput%\ddsview_ps3D.inc echo %FXC% %FXC% @if ERRORLEVEL 1 goto error -set FXC=%PCFXC% ddsview.fx %FXCOPTS% /EPS_Cube /Tps_4_1 /Fh%CompileShadersOutput%\ddsview_psCube.inc +set FXC=%PCFXC% ddsview.hlsl %FXCOPTS% /EPS_Cube /Tps_4_1 /Fh%CompileShadersOutput%\ddsview_psCube.inc echo %FXC% %FXC% @if ERRORLEVEL 1 goto error @echo --- Shaders built ok --- -@goto end +endlocal +exit /b 0 + :error @echo --- ERROR: Shader build failed --- exit /b 1 -:end \ No newline at end of file + +:needfxc +echo ERROR: CompileShaders requires FXC.EXE +exit /b 1 +:end diff --git a/Texassemble/texassemble.cpp b/Texassemble/texassemble.cpp index 82b7b470..e9695a1e 100644 --- a/Texassemble/texassemble.cpp +++ b/Texassemble/texassemble.cpp @@ -280,6 +280,8 @@ namespace { nullptr, DXGI_FORMAT_UNKNOWN } }; + #undef DEFFMT + const SValue<DXGI_FORMAT> g_pFormatAliases[] = { { L"RGBA", DXGI_FORMAT_R8G8B8A8_UNORM }, diff --git a/Texconv/texconv.cpp b/Texconv/texconv.cpp index 784d6f62..1dce6b3d 100644 --- a/Texconv/texconv.cpp +++ b/Texconv/texconv.cpp @@ -444,6 +444,8 @@ namespace { nullptr, DXGI_FORMAT_UNKNOWN } }; + #undef DEFFMT + const SValue<uint32_t> g_pFilters[] = { { L"POINT", TEX_FILTER_POINT }, diff --git a/Texdiag/texdiag.cpp b/Texdiag/texdiag.cpp index cbbc0b78..fccf3435 100644 --- a/Texdiag/texdiag.cpp +++ b/Texdiag/texdiag.cpp @@ -325,6 +325,8 @@ namespace { nullptr, DXGI_FORMAT_UNKNOWN } }; + #undef DEFFMT + const SValue<uint32_t> g_pFilters[] = { { L"POINT", TEX_FILTER_POINT }, From 4b409a959cd9a45592f0283bf2d2d638cc649d82 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn <chuckw@microsoft.com> Date: Mon, 16 Sep 2024 17:03:33 -0700 Subject: [PATCH 03/11] Fix MinGW pipeline --- build/DirectXTex-GitHub-MinGW.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/build/DirectXTex-GitHub-MinGW.yml b/build/DirectXTex-GitHub-MinGW.yml index 996aaa3e..c9c6441f 100644 --- a/build/DirectXTex-GitHub-MinGW.yml +++ b/build/DirectXTex-GitHub-MinGW.yml @@ -63,6 +63,7 @@ variables: WIN11_SDK: '10.0.22000.0' URL_MINGW32: https://github.com/brechtsanders/winlibs_mingw/releases/download/12.2.0-14.0.6-10.0.0-ucrt-r2/winlibs-i686-posix-dwarf-gcc-12.2.0-llvm-14.0.6-mingw-w64ucrt-10.0.0-r2.zip HASH_MINGW32: 'fcd1e11b896190da01c83d5b5fb0d37b7c61585e53446c2dab0009debc3915e757213882c35e35396329338de6f0222ba012e23a5af86932db45186a225d1272' + CompiledShaderOutput: $(Build.BinariesDirectory)\Shaders jobs: - job: MINGW32_BUILD @@ -156,7 +157,7 @@ jobs: displayName: CMake (MinGW32) inputs: cwd: '$(Build.SourcesDirectory)' - cmakeArgs: -B out -DCMAKE_BUILD_TYPE="Debug" -DDIRECTX_ARCH=x86 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x86-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.SourcesDirectory)\DirectXTex\Shaders\Compiled -DCOMPILED_DDSVIEW_SHADERS=$(Build.SourcesDirectory)\DDSView\Shaders + cmakeArgs: -B out -DCMAKE_BUILD_TYPE="Debug" -DDIRECTX_ARCH=x86 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x86-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.BinariesDirectory)\Shaders - task: CMake@1 displayName: CMake (MinGW32) Build inputs: @@ -166,7 +167,7 @@ jobs: displayName: CMake (MinGW32) w/ OpenEXR inputs: cwd: '$(Build.SourcesDirectory)' - cmakeArgs: -B out2 -DCMAKE_BUILD_TYPE="Debug" -DENABLE_OPENEXR_SUPPORT=ON -DBUILD_TESTING=OFF -DDIRECTX_ARCH=x86 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x86-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.SourcesDirectory)\DirectXTex\Shaders\Compiled -DCOMPILED_DDSVIEW_SHADERS=$(Build.SourcesDirectory)\DDSView\Shaders + cmakeArgs: -B out2 -DCMAKE_BUILD_TYPE="Debug" -DENABLE_OPENEXR_SUPPORT=ON -DBUILD_TESTING=OFF -DDIRECTX_ARCH=x86 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x86-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.BinariesDirectory)\Shaders - task: CMake@1 displayName: CMake (MinGW32) Build w/ OpenEXR inputs: @@ -176,7 +177,7 @@ jobs: displayName: CMake (MinGW32) w/ libjpeg inputs: cwd: '$(Build.SourcesDirectory)' - cmakeArgs: -B out3 -DCMAKE_BUILD_TYPE="Debug" -DENABLE_LIBJPEG_SUPPORT=ON -DBUILD_TESTING=OFF -DDIRECTX_ARCH=x86 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x86-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.SourcesDirectory)\DirectXTex\Shaders\Compiled -DCOMPILED_DDSVIEW_SHADERS=$(Build.SourcesDirectory)\DDSView\Shaders + cmakeArgs: -B out3 -DCMAKE_BUILD_TYPE="Debug" -DENABLE_LIBJPEG_SUPPORT=ON -DBUILD_TESTING=OFF -DDIRECTX_ARCH=x86 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x86-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.BinariesDirectory)\Shaders - task: CMake@1 displayName: CMake (MinGW32) Build w/ libjpeg inputs: @@ -186,7 +187,7 @@ jobs: displayName: CMake (MinGW32) w/ libpng inputs: cwd: '$(Build.SourcesDirectory)' - cmakeArgs: -B out4 -DCMAKE_BUILD_TYPE="Debug" -DENABLE_LIBPNG_SUPPORT=ON -DBUILD_TESTING=OFF -DDIRECTX_ARCH=x86 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x86-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.SourcesDirectory)\DirectXTex\Shaders\Compiled -DCOMPILED_DDSVIEW_SHADERS=$(Build.SourcesDirectory)\DDSView\Shaders + cmakeArgs: -B out4 -DCMAKE_BUILD_TYPE="Debug" -DENABLE_LIBPNG_SUPPORT=ON -DBUILD_TESTING=OFF -DDIRECTX_ARCH=x86 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x86-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.BinariesDirectory)\Shaders - task: CMake@1 displayName: CMake (MinGW32) Build w/ libpng inputs: @@ -274,7 +275,7 @@ jobs: displayName: CMake (MinGW-W64) inputs: cwd: '$(Build.SourcesDirectory)' - cmakeArgs: -B out -DCMAKE_BUILD_TYPE="Debug" -DDIRECTX_ARCH=x64 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x64-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.SourcesDirectory)\DirectXTex\Shaders\Compiled -DCOMPILED_DDSVIEW_SHADERS=$(Build.SourcesDirectory)\DDSView\Shaders + cmakeArgs: -B out -DCMAKE_BUILD_TYPE="Debug" -DDIRECTX_ARCH=x64 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x64-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.BinariesDirectory)\Shaders - task: CMake@1 displayName: CMake (MinGW-W64) Build inputs: @@ -284,7 +285,7 @@ jobs: displayName: CMake (MinGW-W64) w/ OpenEXR inputs: cwd: '$(Build.SourcesDirectory)' - cmakeArgs: -B out2 -DCMAKE_BUILD_TYPE="Debug" -DENABLE_OPENEXR_SUPPORT=ON -DBUILD_TESTING=OFF -DDIRECTX_ARCH=x64 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x64-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.SourcesDirectory)\DirectXTex\Shaders\Compiled -DCOMPILED_DDSVIEW_SHADERS=$(Build.SourcesDirectory)\DDSView\Shaders + cmakeArgs: -B out2 -DCMAKE_BUILD_TYPE="Debug" -DENABLE_OPENEXR_SUPPORT=ON -DBUILD_TESTING=OFF -DDIRECTX_ARCH=x64 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x64-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.BinariesDirectory)\Shaders - task: CMake@1 displayName: CMake (MinGW-W64) Build w/ OpenEXR inputs: @@ -294,7 +295,7 @@ jobs: displayName: CMake (MinGW-W64) w/ libjpeg inputs: cwd: '$(Build.SourcesDirectory)' - cmakeArgs: -B out3 -DCMAKE_BUILD_TYPE="Debug" -DENABLE_LIBJPEG_SUPPORT=ON -DBUILD_TESTING=OFF -DDIRECTX_ARCH=x64 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x64-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.SourcesDirectory)\DirectXTex\Shaders\Compiled -DCOMPILED_DDSVIEW_SHADERS=$(Build.SourcesDirectory)\DDSView\Shaders + cmakeArgs: -B out3 -DCMAKE_BUILD_TYPE="Debug" -DENABLE_LIBJPEG_SUPPORT=ON -DBUILD_TESTING=OFF -DDIRECTX_ARCH=x64 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x64-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.BinariesDirectory)\Shaders - task: CMake@1 displayName: CMake (MinGW-W64) Build w/ libjpeg inputs: @@ -304,7 +305,7 @@ jobs: displayName: CMake (MinGW-W64) w/ libpng inputs: cwd: '$(Build.SourcesDirectory)' - cmakeArgs: -B out4 -DCMAKE_BUILD_TYPE="Debug" -DENABLE_LIBPNG_SUPPORT=ON -DBUILD_TESTING=OFF -DDIRECTX_ARCH=x64 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x64-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.SourcesDirectory)\DirectXTex\Shaders\Compiled -DCOMPILED_DDSVIEW_SHADERS=$(Build.SourcesDirectory)\DDSView\Shaders + cmakeArgs: -B out4 -DCMAKE_BUILD_TYPE="Debug" -DENABLE_LIBPNG_SUPPORT=ON -DBUILD_TESTING=OFF -DDIRECTX_ARCH=x64 -DCMAKE_TOOLCHAIN_FILE="$(VCPKG_CMAKE_DIR)" -DCMAKE_CXX_COMPILER="g++.exe" -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x64-mingw-static -DUSE_PREBUILT_SHADERS=ON -DCOMPILED_SHADERS=$(Build.BinariesDirectory)\Shaders - task: CMake@1 displayName: CMake (MinGW-W64) Build w/ libpng inputs: From 07c8ee11e387a314780615f41cf9d3d99fcd030c Mon Sep 17 00:00:00 2001 From: Chuck Walbourn <chuckw@microsoft.com> Date: Mon, 16 Sep 2024 17:07:56 -0700 Subject: [PATCH 04/11] Fix again --- build/DirectXTex-GitHub-MinGW.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/DirectXTex-GitHub-MinGW.yml b/build/DirectXTex-GitHub-MinGW.yml index c9c6441f..027ea39b 100644 --- a/build/DirectXTex-GitHub-MinGW.yml +++ b/build/DirectXTex-GitHub-MinGW.yml @@ -63,7 +63,7 @@ variables: WIN11_SDK: '10.0.22000.0' URL_MINGW32: https://github.com/brechtsanders/winlibs_mingw/releases/download/12.2.0-14.0.6-10.0.0-ucrt-r2/winlibs-i686-posix-dwarf-gcc-12.2.0-llvm-14.0.6-mingw-w64ucrt-10.0.0-r2.zip HASH_MINGW32: 'fcd1e11b896190da01c83d5b5fb0d37b7c61585e53446c2dab0009debc3915e757213882c35e35396329338de6f0222ba012e23a5af86932db45186a225d1272' - CompiledShaderOutput: $(Build.BinariesDirectory)\Shaders + CompileShadersOutput: $(Build.BinariesDirectory)\Shaders jobs: - job: MINGW32_BUILD From fb1739fd5f0b59d1be9c4d5a8dacf238d9364b27 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn <chuckw@microsoft.com> Date: Mon, 16 Sep 2024 21:31:04 -0700 Subject: [PATCH 05/11] Code review --- Common/CmdLineHelpers.h | 17 ++++++++++++++--- Texassemble/texassemble.cpp | 1 - Texconv/texconv.cpp | 1 - Texdiag/texdiag.cpp | 1 - 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Common/CmdLineHelpers.h b/Common/CmdLineHelpers.h index 2cf26b18..714f47a8 100644 --- a/Common/CmdLineHelpers.h +++ b/Common/CmdLineHelpers.h @@ -13,6 +13,17 @@ #error Requires C++17 (and /Zc:__cplusplus with MSVC) #endif +#include <algorithm> +#include <cstdio> +#include <cwchar> +#include <filesystem> +#include <fstream> +#include <list> +#include <memory> +#include <set> +#include <string> + + namespace Helpers { inline HANDLE safe_handle(HANDLE h) noexcept { return (h == INVALID_HANDLE_VALUE) ? nullptr : h; } @@ -39,7 +50,7 @@ namespace Helpers }; template<typename T> - T LookupByName(const wchar_t *pName, const SValue<T> *pArray) + T LookupByName(const wchar_t _In_z_ *pName, const SValue<T> *pArray) { while (pArray->name) { @@ -167,7 +178,7 @@ namespace Helpers } } - void SearchForFiles(const std::filesystem::path& path, std::list<SConversion>& files, bool recursive, const wchar_t* folder) + void SearchForFiles(const std::filesystem::path& path, std::list<SConversion>& files, bool recursive, _In_opt_z_ const wchar_t* folder) { // Process files WIN32_FIND_DATAW findData = {}; @@ -342,7 +353,7 @@ namespace Helpers if (errorText) LocalFree(errorText); - for (wchar_t* ptr = desc; *ptr != 0; ++ptr) + for(wchar_t* ptr = desc; *ptr != 0; ++ptr) { if (*ptr == L'\r' || *ptr == L'\n') { diff --git a/Texassemble/texassemble.cpp b/Texassemble/texassemble.cpp index e9695a1e..86e4c71b 100644 --- a/Texassemble/texassemble.cpp +++ b/Texassemble/texassemble.cpp @@ -44,7 +44,6 @@ #include <locale> #include <memory> #include <new> -#include <set> #include <string> #include <tuple> #include <utility> diff --git a/Texconv/texconv.cpp b/Texconv/texconv.cpp index 1dce6b3d..feae09aa 100644 --- a/Texconv/texconv.cpp +++ b/Texconv/texconv.cpp @@ -45,7 +45,6 @@ #include <locale> #include <memory> #include <new> -#include <set> #include <string> #include <tuple> diff --git a/Texdiag/texdiag.cpp b/Texdiag/texdiag.cpp index fccf3435..cdbafdd3 100644 --- a/Texdiag/texdiag.cpp +++ b/Texdiag/texdiag.cpp @@ -44,7 +44,6 @@ #include <locale> #include <memory> #include <new> -#include <set> #include <string> #include <tuple> #include <vector> From 9c396182d807441affe31ba73d3b8889b45c5016 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn <chuckw@microsoft.com> Date: Mon, 16 Sep 2024 23:53:16 -0700 Subject: [PATCH 06/11] Moved D3DX12.h to Common --- CMakeLists.txt | 10 +++++----- {DirectXTex => Common}/d3dx12.h | 0 DDSView/DDSView.rc | 2 +- DirectXTex/DirectXTex_Desktop_2019.vcxproj | 12 +++++------ .../DirectXTex_Desktop_2019_Win10.vcxproj | 20 +++++++++---------- ...ectXTex_Desktop_2019_Win10.vcxproj.filters | 2 +- DirectXTex/DirectXTex_Desktop_2022.vcxproj | 12 +++++------ .../DirectXTex_Desktop_2022_Win10.vcxproj | 20 +++++++++---------- ...ectXTex_Desktop_2022_Win10.vcxproj.filters | 2 +- DirectXTex/DirectXTex_GDK_2019.vcxproj | 20 +++++++++---------- .../DirectXTex_GDK_2019.vcxproj.filters | 6 +++--- DirectXTex/DirectXTex_GDK_2022.vcxproj | 20 +++++++++---------- .../DirectXTex_GDK_2022.vcxproj.filters | 6 +++--- DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj | 10 +++++----- .../DirectXTex_GXDK_PC_2019.vcxproj.filters | 6 +++--- DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj | 10 +++++----- .../DirectXTex_GXDK_PC_2022.vcxproj.filters | 6 +++--- DirectXTex/DirectXTex_Windows10_2022.vcxproj | 14 ++++++------- .../DirectXTex_Windows10_2022.vcxproj.filters | 2 +- README.md | 4 ++++ Texassemble/texassemble.rc | 2 +- Texconv/Texconv.rc | 2 +- Texdiag/texdiag.rc | 2 +- 23 files changed, 97 insertions(+), 93 deletions(-) rename {DirectXTex => Common}/d3dx12.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 84b34336..4b7f1539 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -143,7 +143,6 @@ elseif((BUILD_XBOX_EXTS_XBOXONE OR BUILD_XBOX_EXTS_SCARLETT) AND WIN32) Auxiliary/DirectXTexXboxTile.cpp) endif() - if(BUILD_DX11 AND WIN32 AND (NOT (XBOX_CONSOLE_TARGET STREQUAL "durango"))) set(SHADER_SOURCES DirectXTex/Shaders/BC6HEncode.hlsl @@ -160,7 +159,7 @@ if(BUILD_DX12) list(APPEND LIBRARY_SOURCES DirectXTex/DirectXTexD3D12.cpp) if(NOT (DEFINED XBOX_CONSOLE_TARGET)) - list(APPEND LIBRARY_SOURCES DirectXTex/d3dx12.h) + list(APPEND LIBRARY_SOURCES Common/d3dx12.h) endif() endif() @@ -407,7 +406,6 @@ if(BUILD_TOOLS AND WIN32) Common/CmdLineHelpers.h Common/settings.manifest Texassemble/AnimatedGif.cpp) - target_include_directories(texassemble PRIVATE Common) target_compile_features(texassemble PRIVATE cxx_std_17) target_link_libraries(texassemble PRIVATE ${PROJECT_NAME} ole32.lib version.lib) source_group(texassemble REGULAR_EXPRESSION Texassemble/*.*) @@ -422,7 +420,6 @@ if(BUILD_TOOLS AND BUILD_DX11 AND WIN32) Common/settings.manifest Texconv/ExtendedBMP.cpp Texconv/PortablePixMap.cpp) - target_include_directories(texconv PRIVATE Common) target_compile_features(texconv PRIVATE cxx_std_17) target_link_libraries(texconv PRIVATE ${PROJECT_NAME} ole32.lib shell32.lib version.lib) source_group(texconv REGULAR_EXPRESSION Texconv/*.*) @@ -435,13 +432,16 @@ if(BUILD_TOOLS AND WIN32) Texdiag/texdiag.rc Common/CmdLineHelpers.h Common/settings.manifest) - target_include_directories(texdiag PRIVATE Common) target_compile_features(texdiag PRIVATE cxx_std_17) target_link_libraries(texdiag PRIVATE ${PROJECT_NAME} ole32.lib version.lib) source_group(texdiag REGULAR_EXPRESSION Texdiag/*.*) list(APPEND TOOL_EXES texdiag) endif() +foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME}) + target_include_directories(${t} PRIVATE Common) +endforeach() + if(BUILD_TOOLS AND WIN32) if(ENABLE_OPENEXR_SUPPORT) foreach(t IN LISTS TOOL_EXES) diff --git a/DirectXTex/d3dx12.h b/Common/d3dx12.h similarity index 100% rename from DirectXTex/d3dx12.h rename to Common/d3dx12.h diff --git a/DDSView/DDSView.rc b/DDSView/DDSView.rc index c1986b18..ebcaf050 100644 --- a/DDSView/DDSView.rc +++ b/DDSView/DDSView.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_MAIN_ICON ICON "..\Common\directx.ico" +IDI_MAIN_ICON ICON "..\\Common\\directx.ico" #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// diff --git a/DirectXTex/DirectXTex_Desktop_2019.vcxproj b/DirectXTex/DirectXTex_Desktop_2019.vcxproj index 61e78836..9d7a6f66 100644 --- a/DirectXTex/DirectXTex_Desktop_2019.vcxproj +++ b/DirectXTex/DirectXTex_Desktop_2019.vcxproj @@ -141,7 +141,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -168,7 +168,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -195,7 +195,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -221,7 +221,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -249,7 +249,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -275,7 +275,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> diff --git a/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj b/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj index 23c1d402..4cdc5fb8 100644 --- a/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj +++ b/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj @@ -196,7 +196,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -223,7 +223,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -250,7 +250,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -277,7 +277,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -303,7 +303,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -330,7 +330,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -358,7 +358,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -384,7 +384,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -411,7 +411,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -437,12 +437,12 @@ </None> </ItemGroup> <ItemGroup> + <ClInclude Include="..\Common\d3dx12.h" /> <CLInclude Include="BC.h" /> <ClCompile Include="BC.cpp" /> <ClCompile Include="BC4BC5.cpp" /> <ClCompile Include="BC6HBC7.cpp" /> <ClInclude Include="BCDirectCompute.h" /> - <ClInclude Include="d3dx12.h" /> <CLInclude Include="DDS.h" /> <ClInclude Include="filters.h" /> <CLInclude Include="scoped.h" /> diff --git a/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj.filters b/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj.filters index d8bca586..18d2b226 100644 --- a/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj.filters +++ b/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj.filters @@ -36,7 +36,7 @@ <CLInclude Include="scoped.h"> <Filter>Source Files</Filter> </CLInclude> - <ClInclude Include="d3dx12.h"> + <ClInclude Include="..\Common\d3dx12.h"> <Filter>Source Files</Filter> </ClInclude> </ItemGroup> diff --git a/DirectXTex/DirectXTex_Desktop_2022.vcxproj b/DirectXTex/DirectXTex_Desktop_2022.vcxproj index 06e10cdb..d79c3dc3 100644 --- a/DirectXTex/DirectXTex_Desktop_2022.vcxproj +++ b/DirectXTex/DirectXTex_Desktop_2022.vcxproj @@ -141,7 +141,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -168,7 +168,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -195,7 +195,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -221,7 +221,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -249,7 +249,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -275,7 +275,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> diff --git a/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj b/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj index a753d606..85d2ddc1 100644 --- a/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj +++ b/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj @@ -196,7 +196,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -223,7 +223,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -250,7 +250,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -277,7 +277,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -303,7 +303,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -330,7 +330,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -358,7 +358,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -384,7 +384,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -411,7 +411,7 @@ <PreprocessorDefinitions>_UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -437,12 +437,12 @@ </None> </ItemGroup> <ItemGroup> + <ClInclude Include="..\Common\d3dx12.h" /> <CLInclude Include="BC.h" /> <ClCompile Include="BC.cpp" /> <ClCompile Include="BC4BC5.cpp" /> <ClCompile Include="BC6HBC7.cpp" /> <ClInclude Include="BCDirectCompute.h" /> - <ClInclude Include="d3dx12.h" /> <CLInclude Include="DDS.h" /> <ClInclude Include="filters.h" /> <CLInclude Include="scoped.h" /> diff --git a/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj.filters b/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj.filters index d8bca586..18d2b226 100644 --- a/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj.filters +++ b/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj.filters @@ -36,7 +36,7 @@ <CLInclude Include="scoped.h"> <Filter>Source Files</Filter> </CLInclude> - <ClInclude Include="d3dx12.h"> + <ClInclude Include="..\Common\d3dx12.h"> <Filter>Source Files</Filter> </ClInclude> </ItemGroup> diff --git a/DirectXTex/DirectXTex_GDK_2019.vcxproj b/DirectXTex/DirectXTex_GDK_2019.vcxproj index a896fb51..814ed5a2 100644 --- a/DirectXTex/DirectXTex_GDK_2019.vcxproj +++ b/DirectXTex/DirectXTex_GDK_2019.vcxproj @@ -239,7 +239,7 @@ <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <Optimization>MaxSpeed</Optimization> <PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -265,7 +265,7 @@ <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <Optimization>MaxSpeed</Optimization> <PreprocessorDefinitions>NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -292,7 +292,7 @@ <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <Optimization>MaxSpeed</Optimization> <PreprocessorDefinitions>NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -318,7 +318,7 @@ <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <Optimization>MaxSpeed</Optimization> <PreprocessorDefinitions>NDEBUG;_LIB;PROFILE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -344,7 +344,7 @@ <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <Optimization>MaxSpeed</Optimization> <PreprocessorDefinitions>NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;PROFILE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -371,7 +371,7 @@ <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <Optimization>MaxSpeed</Optimization> <PreprocessorDefinitions>NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;PROFILE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -394,7 +394,7 @@ </Link> <ClCompile> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PrecompiledHeader>Use</PrecompiledHeader> <MinimalRebuild>false</MinimalRebuild> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -419,7 +419,7 @@ </Link> <ClCompile> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PrecompiledHeader>Use</PrecompiledHeader> <MinimalRebuild>false</MinimalRebuild> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -444,7 +444,7 @@ </Link> <ClCompile> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PrecompiledHeader>Use</PrecompiledHeader> <MinimalRebuild>false</MinimalRebuild> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -462,8 +462,8 @@ </FXCompile> </ItemDefinitionGroup> <ItemGroup> + <ClInclude Include="..\Common\d3dx12.h" /> <ClInclude Include="BC.h" /> - <ClInclude Include="d3dx12.h" /> <ClInclude Include="DDS.h" /> <ClInclude Include="DirectXTex.h" /> <ClInclude Include="DirectXTexP.h" /> diff --git a/DirectXTex/DirectXTex_GDK_2019.vcxproj.filters b/DirectXTex/DirectXTex_GDK_2019.vcxproj.filters index b9cc3abf..dea8b959 100644 --- a/DirectXTex/DirectXTex_GDK_2019.vcxproj.filters +++ b/DirectXTex/DirectXTex_GDK_2019.vcxproj.filters @@ -35,12 +35,12 @@ <ClInclude Include="scoped.h"> <Filter>Source Files</Filter> </ClInclude> - <ClInclude Include="d3dx12.h"> - <Filter>Source Files</Filter> - </ClInclude> <ClInclude Include="..\Auxiliary\DirectXTexXbox.h"> <Filter>Auxiliary</Filter> </ClInclude> + <ClInclude Include="..\Common\d3dx12.h"> + <Filter>Source Files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="DirectXTex.inl"> diff --git a/DirectXTex/DirectXTex_GDK_2022.vcxproj b/DirectXTex/DirectXTex_GDK_2022.vcxproj index 52a37fda..f9c878df 100644 --- a/DirectXTex/DirectXTex_GDK_2022.vcxproj +++ b/DirectXTex/DirectXTex_GDK_2022.vcxproj @@ -239,7 +239,7 @@ <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <Optimization>MaxSpeed</Optimization> <PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -265,7 +265,7 @@ <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <Optimization>MaxSpeed</Optimization> <PreprocessorDefinitions>NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -292,7 +292,7 @@ <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <Optimization>MaxSpeed</Optimization> <PreprocessorDefinitions>NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -318,7 +318,7 @@ <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <Optimization>MaxSpeed</Optimization> <PreprocessorDefinitions>NDEBUG;_LIB;PROFILE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -344,7 +344,7 @@ <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <Optimization>MaxSpeed</Optimization> <PreprocessorDefinitions>NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;PROFILE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -371,7 +371,7 @@ <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <Optimization>MaxSpeed</Optimization> <PreprocessorDefinitions>NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;PROFILE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -394,7 +394,7 @@ </Link> <ClCompile> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PrecompiledHeader>Use</PrecompiledHeader> <MinimalRebuild>false</MinimalRebuild> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -419,7 +419,7 @@ </Link> <ClCompile> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PrecompiledHeader>Use</PrecompiledHeader> <MinimalRebuild>false</MinimalRebuild> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -444,7 +444,7 @@ </Link> <ClCompile> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PrecompiledHeader>Use</PrecompiledHeader> <MinimalRebuild>false</MinimalRebuild> <WarningLevel>EnableAllWarnings</WarningLevel> @@ -462,8 +462,8 @@ </FXCompile> </ItemDefinitionGroup> <ItemGroup> + <ClInclude Include="..\Common\d3dx12.h" /> <ClInclude Include="BC.h" /> - <ClInclude Include="d3dx12.h" /> <ClInclude Include="DDS.h" /> <ClInclude Include="DirectXTex.h" /> <ClInclude Include="DirectXTexP.h" /> diff --git a/DirectXTex/DirectXTex_GDK_2022.vcxproj.filters b/DirectXTex/DirectXTex_GDK_2022.vcxproj.filters index b9cc3abf..dea8b959 100644 --- a/DirectXTex/DirectXTex_GDK_2022.vcxproj.filters +++ b/DirectXTex/DirectXTex_GDK_2022.vcxproj.filters @@ -35,12 +35,12 @@ <ClInclude Include="scoped.h"> <Filter>Source Files</Filter> </ClInclude> - <ClInclude Include="d3dx12.h"> - <Filter>Source Files</Filter> - </ClInclude> <ClInclude Include="..\Auxiliary\DirectXTexXbox.h"> <Filter>Auxiliary</Filter> </ClInclude> + <ClInclude Include="..\Common\d3dx12.h"> + <Filter>Source Files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="DirectXTex.inl"> diff --git a/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj b/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj index a0fc2541..20056345 100644 --- a/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj +++ b/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj @@ -107,7 +107,7 @@ <PreprocessorDefinitions>_USE_GXDK;USE_XBOX_EXTS;_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -135,7 +135,7 @@ <PreprocessorDefinitions>_USE_GXDK;USE_XBOX_EXTS;_USE_SCARLETT;_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -162,7 +162,7 @@ <PreprocessorDefinitions>_USE_GXDK;USE_XBOX_EXTS;_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -190,7 +190,7 @@ <PreprocessorDefinitions>_USE_GXDK;USE_XBOX_EXTS;_USE_SCARLETT;_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -211,6 +211,7 @@ </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="..\Auxiliary\DirectXTexXbox.h" /> + <ClInclude Include="..\Common\d3dx12.h" /> <CLInclude Include="BC.h" /> <ClCompile Include="..\Auxiliary\DirectXTexXboxDDS.cpp" /> <ClCompile Include="..\Auxiliary\DirectXTexXboxDetile.cpp" /> @@ -220,7 +221,6 @@ <ClCompile Include="BC4BC5.cpp" /> <ClCompile Include="BC6HBC7.cpp" /> <ClInclude Include="BCDirectCompute.h" /> - <ClInclude Include="d3dx12.h" /> <CLInclude Include="DDS.h" /> <ClInclude Include="filters.h" /> <CLInclude Include="scoped.h" /> diff --git a/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj.filters b/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj.filters index b8a9acf4..e076b712 100644 --- a/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj.filters +++ b/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj.filters @@ -39,12 +39,12 @@ <CLInclude Include="scoped.h"> <Filter>Source Files</Filter> </CLInclude> - <ClInclude Include="d3dx12.h"> - <Filter>Source Files</Filter> - </ClInclude> <ClInclude Include="..\Auxiliary\DirectXTexXbox.h"> <Filter>Auxiliary</Filter> </ClInclude> + <ClInclude Include="..\Common\d3dx12.h"> + <Filter>Source Files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="BC.cpp"> diff --git a/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj b/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj index 531e781a..36d69f0f 100644 --- a/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj +++ b/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj @@ -107,7 +107,7 @@ <PreprocessorDefinitions>_USE_GXDK;USE_XBOX_EXTS;_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -135,7 +135,7 @@ <PreprocessorDefinitions>_USE_GXDK;USE_XBOX_EXTS;_USE_SCARLETT;_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -162,7 +162,7 @@ <PreprocessorDefinitions>_USE_GXDK;USE_XBOX_EXTS;_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -190,7 +190,7 @@ <PreprocessorDefinitions>_USE_GXDK;USE_XBOX_EXTS;_USE_SCARLETT;_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <SDLCheck>true</SDLCheck> <ConformanceMode>true</ConformanceMode> @@ -211,6 +211,7 @@ </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="..\Auxiliary\DirectXTexXbox.h" /> + <ClInclude Include="..\Common\d3dx12.h" /> <CLInclude Include="BC.h" /> <ClCompile Include="..\Auxiliary\DirectXTexXboxDDS.cpp" /> <ClCompile Include="..\Auxiliary\DirectXTexXboxDetile.cpp" /> @@ -220,7 +221,6 @@ <ClCompile Include="BC4BC5.cpp" /> <ClCompile Include="BC6HBC7.cpp" /> <ClInclude Include="BCDirectCompute.h" /> - <ClInclude Include="d3dx12.h" /> <CLInclude Include="DDS.h" /> <ClInclude Include="filters.h" /> <CLInclude Include="scoped.h" /> diff --git a/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj.filters b/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj.filters index 4b1d4d70..c04634fa 100644 --- a/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj.filters +++ b/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj.filters @@ -39,12 +39,12 @@ <CLInclude Include="scoped.h"> <Filter>Source Files</Filter> </CLInclude> - <ClInclude Include="d3dx12.h"> - <Filter>Source Files</Filter> - </ClInclude> <ClInclude Include="..\Auxiliary\DirectXTexXbox.h"> <Filter>Auxiliary</Filter> </ClInclude> + <ClInclude Include="..\Common\d3dx12.h"> + <Filter>Source Files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="BC.cpp"> diff --git a/DirectXTex/DirectXTex_Windows10_2022.vcxproj b/DirectXTex/DirectXTex_Windows10_2022.vcxproj index d5c7f386..e985e55e 100644 --- a/DirectXTex/DirectXTex_Windows10_2022.vcxproj +++ b/DirectXTex/DirectXTex_Windows10_2022.vcxproj @@ -57,9 +57,9 @@ <ClCompile Include="DirectXTexWIC.cpp" /> </ItemGroup> <ItemGroup> + <ClInclude Include="..\Common\d3dx12.h" /> <ClInclude Include="BC.h" /> <ClInclude Include="BCDirectCompute.h" /> - <ClInclude Include="d3dx12.h" /> <ClInclude Include="DDS.h" /> <ClInclude Include="DirectXTex.h" /> <ClInclude Include="DirectXTexP.h" /> @@ -195,7 +195,7 @@ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <WarningLevel>EnableAllWarnings</WarningLevel> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> @@ -221,7 +221,7 @@ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <WarningLevel>EnableAllWarnings</WarningLevel> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> @@ -245,7 +245,7 @@ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <WarningLevel>EnableAllWarnings</WarningLevel> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> @@ -271,7 +271,7 @@ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <WarningLevel>EnableAllWarnings</WarningLevel> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> @@ -295,7 +295,7 @@ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <WarningLevel>EnableAllWarnings</WarningLevel> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> @@ -320,7 +320,7 @@ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> <WarningLevel>EnableAllWarnings</WarningLevel> <PrecompiledHeaderFile>DirectXTexP.h</PrecompiledHeaderFile> - <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <AdditionalOptions>/Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions> diff --git a/DirectXTex/DirectXTex_Windows10_2022.vcxproj.filters b/DirectXTex/DirectXTex_Windows10_2022.vcxproj.filters index caccf470..d52dd196 100644 --- a/DirectXTex/DirectXTex_Windows10_2022.vcxproj.filters +++ b/DirectXTex/DirectXTex_Windows10_2022.vcxproj.filters @@ -115,7 +115,7 @@ <ClInclude Include="scoped.h"> <Filter>Source Files</Filter> </ClInclude> - <ClInclude Include="d3dx12.h"> + <ClInclude Include="..\Common\d3dx12.h"> <Filter>Source Files</Filter> </ClInclude> </ItemGroup> diff --git a/README.md b/README.md index 7b8800a1..e34d0f62 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,10 @@ These components are designed to work without requiring any content from the leg + Contains optional source files for the DirectXTex library, such as adapter loading functions using the OpenEXR library, Xbox texture tiling extensions, etc. +* ``Common\`` + + + Contains shared source headers used by the DirectXTex library and tools. + * ``Texconv\`` + This DirectXTex sample is an implementation of the [texconv](https://github.com/Microsoft/DirectXTex/wiki/Texconv) command-line texture utility from the DirectX SDK utilizing DirectXTex rather than D3DX. diff --git a/Texassemble/texassemble.rc b/Texassemble/texassemble.rc index 48cca03a..fdb26fb2 100644 --- a/Texassemble/texassemble.rc +++ b/Texassemble/texassemble.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_MAIN_ICON ICON "..\Common\directx.ico" +IDI_MAIN_ICON ICON "..\\Common\\directx.ico" #ifdef APSTUDIO_INVOKED diff --git a/Texconv/Texconv.rc b/Texconv/Texconv.rc index 98116cf0..32d12fca 100644 --- a/Texconv/Texconv.rc +++ b/Texconv/Texconv.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_MAIN_ICON ICON "..\Common\directx.ico" +IDI_MAIN_ICON ICON "..\\Common\\directx.ico" #ifdef APSTUDIO_INVOKED diff --git a/Texdiag/texdiag.rc b/Texdiag/texdiag.rc index 180658be..4cba3166 100644 --- a/Texdiag/texdiag.rc +++ b/Texdiag/texdiag.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_MAIN_ICON ICON "..\Common\directx.ico" +IDI_MAIN_ICON ICON "..\\Common\\directx.ico" #ifdef APSTUDIO_INVOKED From 2ab174c9fe2f5faac009e0a2ced963c5959c2e49 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn <chuckw@microsoft.com> Date: Tue, 17 Sep 2024 00:34:57 -0700 Subject: [PATCH 07/11] Sync --- Common/CmdLineHelpers.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Common/CmdLineHelpers.h b/Common/CmdLineHelpers.h index 714f47a8..1e5d8e23 100644 --- a/Common/CmdLineHelpers.h +++ b/Common/CmdLineHelpers.h @@ -26,6 +26,10 @@ namespace Helpers { + struct handle_closer { void operator()(HANDLE h) { if (h) CloseHandle(h); } }; + + using ScopedHandle = std::unique_ptr<void, handle_closer>; + inline HANDLE safe_handle(HANDLE h) noexcept { return (h == INVALID_HANDLE_VALUE) ? nullptr : h; } struct find_closer { void operator()(HANDLE h) noexcept { assert(h != INVALID_HANDLE_VALUE); if (h) FindClose(h); } }; From 154b14fc549ab531410e9fe812cf776047c74971 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn <chuckw@microsoft.com> Date: Tue, 17 Sep 2024 10:33:12 -0700 Subject: [PATCH 08/11] Code review --- Common/CmdLineHelpers.h | 6 +++++- Texassemble/texassemble.cpp | 1 + Texconv/texconv.cpp | 1 + Texdiag/texdiag.cpp | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Common/CmdLineHelpers.h b/Common/CmdLineHelpers.h index 1e5d8e23..b3af3ee5 100644 --- a/Common/CmdLineHelpers.h +++ b/Common/CmdLineHelpers.h @@ -23,6 +23,10 @@ #include <set> #include <string> +#ifndef TOOL_VERSION +#error Define TOOL_VERSION before including this header +#endif + namespace Helpers { @@ -164,7 +168,7 @@ namespace Helpers if (!*version || wcscmp(version, L"1.0.0.0") == 0) { - swprintf_s(version, L"%03d (library)", DIRECTX_TEX_VERSION); + swprintf_s(version, L"%03d (library)", TOOL_VERSION); } if (versionOnly) diff --git a/Texassemble/texassemble.cpp b/Texassemble/texassemble.cpp index 86e4c71b..91a9f543 100644 --- a/Texassemble/texassemble.cpp +++ b/Texassemble/texassemble.cpp @@ -75,6 +75,7 @@ #include "DirectXTexPNG.h" #endif +#define TOOL_VERSION DIRECTX_TEX_VERSION #include "CmdLineHelpers.h" using namespace Helpers; diff --git a/Texconv/texconv.cpp b/Texconv/texconv.cpp index feae09aa..e096cc13 100644 --- a/Texconv/texconv.cpp +++ b/Texconv/texconv.cpp @@ -81,6 +81,7 @@ #include "DirectXTexXbox.h" #endif +#define TOOL_VERSION DIRECTX_TEX_VERSION #include "CmdLineHelpers.h" using namespace Helpers; diff --git a/Texdiag/texdiag.cpp b/Texdiag/texdiag.cpp index cdbafdd3..c8a8e214 100644 --- a/Texdiag/texdiag.cpp +++ b/Texdiag/texdiag.cpp @@ -71,6 +71,7 @@ #include "DirectXTexPNG.h" #endif +#define TOOL_VERSION DIRECTX_TEX_VERSION #include "CmdLineHelpers.h" using namespace Helpers; From 7bef0abb4babe580662983ac0f762d5675af511d Mon Sep 17 00:00:00 2001 From: Chuck Walbourn <chuckw@microsoft.com> Date: Tue, 17 Sep 2024 10:59:18 -0700 Subject: [PATCH 09/11] Fix /analyze error --- ScreenGrab/ScreenGrab12.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/ScreenGrab/ScreenGrab12.cpp b/ScreenGrab/ScreenGrab12.cpp index 7f4024b4..eee5f60a 100644 --- a/ScreenGrab/ScreenGrab12.cpp +++ b/ScreenGrab/ScreenGrab12.cpp @@ -811,6 +811,7 @@ namespace if (FAILED(hr)) return hr; + _Analysis_assume_(*pStaging); assert(*pStaging); // Transition the resource if necessary From f5a7c8a8af7057bb6e6ae6dca97be263727c11da Mon Sep 17 00:00:00 2001 From: Chuck Walbourn <chuckw@microsoft.com> Date: Tue, 17 Sep 2024 11:23:37 -0700 Subject: [PATCH 10/11] CMake cleanup --- CMakeLists.txt | 5 +++++ CMakePresets.json | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b7f1539..b6753e06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -510,6 +510,10 @@ if(directxmath_FOUND) endforeach() endif() +if(TOOL_EXES) + message("INFO: Building tools: ${TOOL_EXES}") +endif() + if(MSVC) foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME}) target_compile_options(${t} PRIVATE /Wall /GR-) @@ -570,6 +574,7 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") endif() if(ENABLE_CODE_ANALYSIS) + message(STATUS "Building with Code Analysis (PREFIX)") foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME}) target_compile_options(${t} PRIVATE /analyze /WX) endforeach() diff --git a/CMakePresets.json b/CMakePresets.json index c2581beb..7d21b962 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -353,7 +353,8 @@ { "name": "x64-Debug-ICX" , "description": "Intel oneAPI Compiler (Debug) with DX12", "inherits": [ "base", "x64", "Debug", "IntelLLVM" ] }, { "name": "x64-Release-ICX" , "description": "Intel oneAPI Compiler (Release) with DX12", "inherits": [ "base", "x64", "Release", "IntelLLVM" ] }, - { "name": "x64-Fuzzing" , "description": "MSVC for x64 (Release) with ASan", "inherits": [ "base", "x64", "Release", "MSVC", "Fuzzing" ] } + { "name": "x64-Fuzzing" , "description": "MSVC for x64 (Release) with ASan", "inherits": [ "base", "x64", "Release", "MSVC", "Fuzzing" ] }, + { "name": "x64-Analyze" , "description": "MSVC for x64 (Debug) with DX12 using /analyze", "inherits": [ "base", "x64", "Debug", "MSVC" ], "cacheVariables": { "ENABLE_CODE_ANALYSIS": true } } ], "testPresets": [ { "name": "x64-Debug" , "configurePreset": "x64-Debug" }, From 06e51411ef5ca47b7a2045fecb42bf6b5bd1a5ef Mon Sep 17 00:00:00 2001 From: Chuck Walbourn <chuckw@microsoft.com> Date: Tue, 17 Sep 2024 11:49:09 -0700 Subject: [PATCH 11/11] CMake update --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b6753e06..8999965e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -511,7 +511,7 @@ if(directxmath_FOUND) endif() if(TOOL_EXES) - message("INFO: Building tools: ${TOOL_EXES}") + message(STATUS "Building tools: ${TOOL_EXES}") endif() if(MSVC)