diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7d987f8..a2f9295 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -103,6 +103,10 @@ jobs: working-directory: ${{ github.workspace }} run: cmake --build out\build\${{ matrix.build_type }} + - name: 'Clean up' + working-directory: ${{ github.workspace }} + run: Remove-Item -Path out -Recurse -Force + - if: matrix.arch != 'amd64_arm64' name: 'Configure CMake (Spectre)' working-directory: ${{ github.workspace }} @@ -112,3 +116,16 @@ jobs: name: 'Build (Spectre)' working-directory: ${{ github.workspace }} run: cmake --build out\build\${{ matrix.build_type }} + + - if: matrix.arch != 'amd64_arm64' + name: 'Clean up' + working-directory: ${{ github.workspace }} + run: Remove-Item -Path out -Recurse -Force + + - name: 'Configure CMake (DLL)' + working-directory: ${{ github.workspace }} + run: cmake --preset=${{ matrix.build_type }} -DBUILD_SHARED_LIBS=ON + + - name: 'Build (DLL)' + working-directory: ${{ github.workspace }} + run: cmake --build out\build\${{ matrix.build_type }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6ba900c..8285c6e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -154,3 +154,18 @@ jobs: - name: 'Build' working-directory: ${{ github.workspace }} run: cmake --build out\build\${{ matrix.build_type }} + + - name: 'Clean up' + working-directory: ${{ github.workspace }} + run: Remove-Item -Path out -Recurse -Force + + - name: 'Configure CMake (DLL)' + working-directory: ${{ github.workspace }} + run: > + cmake --preset=${{ matrix.build_type }} -DBUILD_TESTING=ON -DBUILD_TOOLS=OFF -DBUILD_SAMPLE=OFF -DENABLE_LIBJPEG_SUPPORT=ON -DENABLE_LIBPNG_SUPPORT=ON + -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake" -DVCPKG_MANIFEST_DIR="${{ github.workspace }}/build" + -DVCPKG_TARGET_TRIPLET="${env:VCPKG_DEFAULT_TRIPLET}" -DBUILD_SHARED_LIBS=ON + + - name: 'Build (DLL)' + working-directory: ${{ github.workspace }} + run: cmake --build out\build\${{ matrix.build_type }} diff --git a/.github/workflows/wsl.yml b/.github/workflows/wsl.yml index 17629d5..44206fa 100644 --- a/.github/workflows/wsl.yml +++ b/.github/workflows/wsl.yml @@ -74,3 +74,22 @@ jobs: - name: 'Build' working-directory: ${{ github.workspace }} run: cmake --build out/build/${{ matrix.build_type }} + + - name: 'Clean up' + working-directory: ${{ github.workspace }} + run: rm -rf out + + - name: 'Configure CMake (-shared)' + working-directory: ${{ github.workspace }} + run: > + cmake --preset=${{ matrix.build_type }} -DENABLE_OPENEXR_SUPPORT=ON -DENABLE_LIBJPEG_SUPPORT=ON -DENABLE_LIBPNG_SUPPORT=ON + -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake" -DVCPKG_MANIFEST_DIR="${{ github.workspace }}/build" + -DVCPKG_TARGET_TRIPLET="x64-linux" -DBUILD_SHARED_LIBS=ON + + env: + CC: gcc-${{ matrix.gcc }} + CXX: g++-${{ matrix.gcc }} + + - name: 'Build (-shared)' + working-directory: ${{ github.workspace }} + run: cmake --build out/build/${{ matrix.build_type }} diff --git a/Auxiliary/DirectXTexEXR.cpp b/Auxiliary/DirectXTexEXR.cpp index e95b859..2c2adc6 100644 --- a/Auxiliary/DirectXTexEXR.cpp +++ b/Auxiliary/DirectXTexEXR.cpp @@ -513,8 +513,8 @@ HRESULT DirectX::SaveToEXRFile(const Image& image, const wchar_t* szFile) try { - const int width = static_cast(image.width); - const int height = static_cast(image.height); + const auto width = static_cast(image.width); + const auto height = static_cast(image.height); #ifdef _WIN32 Imf::RgbaOutputFile file(stream, Imf::Header(width, height), Imf::WRITE_RGBA); @@ -529,7 +529,7 @@ HRESULT DirectX::SaveToEXRFile(const Image& image, const wchar_t* szFile) } else { - const uint64_t bytes = image.width * image.height; + const auto bytes = static_cast(image.width) * static_cast(image.height); if (bytes > static_cast(UINT32_MAX)) { diff --git a/Auxiliary/DirectXTexEXR.h b/Auxiliary/DirectXTexEXR.h index d0d9417..7808bb2 100644 --- a/Auxiliary/DirectXTexEXR.h +++ b/Auxiliary/DirectXTexEXR.h @@ -14,13 +14,15 @@ namespace DirectX { - HRESULT __cdecl GetMetadataFromEXRFile( + DIRECTX_TEX_API HRESULT __cdecl GetMetadataFromEXRFile( _In_z_ const wchar_t* szFile, _Out_ TexMetadata& metadata); - HRESULT __cdecl LoadFromEXRFile( + DIRECTX_TEX_API HRESULT __cdecl LoadFromEXRFile( _In_z_ const wchar_t* szFile, _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); - HRESULT __cdecl SaveToEXRFile(_In_ const Image& image, _In_z_ const wchar_t* szFile); + DIRECTX_TEX_API HRESULT __cdecl SaveToEXRFile( + _In_ const Image& image, + _In_z_ const wchar_t* szFile); } diff --git a/Auxiliary/DirectXTexJPEG.h b/Auxiliary/DirectXTexJPEG.h index 396a957..e76af96 100644 --- a/Auxiliary/DirectXTexJPEG.h +++ b/Auxiliary/DirectXTexJPEG.h @@ -18,16 +18,16 @@ namespace DirectX { - HRESULT __cdecl GetMetadataFromJPEGFile( + DIRECTX_TEX_API HRESULT __cdecl GetMetadataFromJPEGFile( _In_z_ const wchar_t* szFile, _Out_ TexMetadata& metadata); - HRESULT __cdecl LoadFromJPEGFile( + DIRECTX_TEX_API HRESULT __cdecl LoadFromJPEGFile( _In_z_ const wchar_t* szFile, _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); - HRESULT __cdecl SaveToJPEGFile( + DIRECTX_TEX_API HRESULT __cdecl SaveToJPEGFile( _In_ const Image& image, _In_z_ const wchar_t* szFile); } diff --git a/Auxiliary/DirectXTexPNG.h b/Auxiliary/DirectXTexPNG.h index d6e2ee2..1a33dd5 100644 --- a/Auxiliary/DirectXTexPNG.h +++ b/Auxiliary/DirectXTexPNG.h @@ -18,16 +18,16 @@ namespace DirectX { - HRESULT __cdecl GetMetadataFromPNGFile( + DIRECTX_TEX_API HRESULT __cdecl GetMetadataFromPNGFile( _In_z_ const wchar_t* szFile, _Out_ TexMetadata& metadata); - HRESULT __cdecl LoadFromPNGFile( + DIRECTX_TEX_API HRESULT __cdecl LoadFromPNGFile( _In_z_ const wchar_t* szFile, _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); - HRESULT __cdecl SaveToPNGFile( + DIRECTX_TEX_API HRESULT __cdecl SaveToPNGFile( _In_ const Image& image, _In_z_ const wchar_t* szFile); } diff --git a/Auxiliary/DirectXTexXbox.h b/Auxiliary/DirectXTexXbox.h index 9f75866..f034c07 100644 --- a/Auxiliary/DirectXTexXbox.h +++ b/Auxiliary/DirectXTexXbox.h @@ -58,7 +58,7 @@ namespace Xbox constexpr XboxTileMode c_XboxTileModeLinear = XG_TILE_MODE_LINEAR; #endif - class XboxImage + class DIRECTX_TEX_API XboxImage { public: XboxImage() noexcept @@ -97,40 +97,40 @@ namespace Xbox //--------------------------------------------------------------------------------- // Image I/O - HRESULT __cdecl GetMetadataFromDDSMemory( + DIRECTX_TEX_API HRESULT __cdecl GetMetadataFromDDSMemory( _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, _Out_ DirectX::TexMetadata& metadata, _Out_ bool& isXbox); - HRESULT __cdecl GetMetadataFromDDSFile( + DIRECTX_TEX_API HRESULT __cdecl GetMetadataFromDDSFile( _In_z_ const wchar_t* szFile, _Out_ DirectX::TexMetadata& metadata, _Out_ bool& isXbox); - HRESULT __cdecl GetMetadataFromDDSMemoryEx( + DIRECTX_TEX_API HRESULT __cdecl GetMetadataFromDDSMemoryEx( _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, _Out_ DirectX::TexMetadata& metadata, _Out_ bool& isXbox, _Out_opt_ DirectX::DDSMetaData* ddPixelFormat); - HRESULT __cdecl GetMetadataFromDDSFileEx( + DIRECTX_TEX_API HRESULT __cdecl GetMetadataFromDDSFileEx( _In_z_ const wchar_t* szFile, _Out_ DirectX::TexMetadata& metadata, _Out_ bool& isXbox, _Out_opt_ DirectX::DDSMetaData* ddPixelFormat); - HRESULT __cdecl LoadFromDDSMemory( + DIRECTX_TEX_API HRESULT __cdecl LoadFromDDSMemory( _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, _Out_opt_ DirectX::TexMetadata* metadata, _Out_ XboxImage& image); - HRESULT __cdecl LoadFromDDSFile( + DIRECTX_TEX_API HRESULT __cdecl LoadFromDDSFile( _In_z_ const wchar_t* szFile, _Out_opt_ DirectX::TexMetadata* metadata, _Out_ XboxImage& image); - HRESULT __cdecl LoadFromDDSMemoryEx( + DIRECTX_TEX_API HRESULT __cdecl LoadFromDDSMemoryEx( _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, _Out_opt_ DirectX::TexMetadata* metadata, _Out_opt_ DirectX::DDSMetaData* ddPixelFormat, _Out_ XboxImage& image); - HRESULT __cdecl LoadFromDDSFileEx( + DIRECTX_TEX_API HRESULT __cdecl LoadFromDDSFileEx( _In_z_ const wchar_t* szFile, _Out_opt_ DirectX::TexMetadata* metadata, _Out_opt_ DirectX::DDSMetaData* ddPixelFormat, _Out_ XboxImage& image); - HRESULT __cdecl SaveToDDSMemory(_In_ const XboxImage& xbox, _Out_ DirectX::Blob& blob); - HRESULT __cdecl SaveToDDSFile(_In_ const XboxImage& xbox, _In_z_ const wchar_t* szFile); + DIRECTX_TEX_API HRESULT __cdecl SaveToDDSMemory(_In_ const XboxImage& xbox, _Out_ DirectX::Blob& blob); + DIRECTX_TEX_API HRESULT __cdecl SaveToDDSFile(_In_ const XboxImage& xbox, _In_z_ const wchar_t* szFile); #ifdef __cpp_lib_byte inline HRESULT __cdecl GetMetadataFromDDSMemory( @@ -168,27 +168,27 @@ namespace Xbox //--------------------------------------------------------------------------------- // Xbox Texture Tiling / Detiling (requires XG DLL to be present at runtime) - HRESULT __cdecl Tile(_In_ const DirectX::Image& srcImage, _Out_ XboxImage& xbox, _In_ XboxTileMode mode = c_XboxTileModeInvalid); - HRESULT __cdecl Tile( + DIRECTX_TEX_API HRESULT __cdecl Tile(_In_ const DirectX::Image& srcImage, _Out_ XboxImage& xbox, _In_ XboxTileMode mode = c_XboxTileModeInvalid); + DIRECTX_TEX_API HRESULT __cdecl Tile( _In_ const DirectX::Image* srcImages, _In_ size_t nimages, _In_ const DirectX::TexMetadata& metadata, _Out_ XboxImage& xbox, _In_ XboxTileMode mode = c_XboxTileModeInvalid); - HRESULT __cdecl Detile(_In_ const XboxImage& xbox, _Out_ DirectX::ScratchImage& image); + DIRECTX_TEX_API HRESULT __cdecl Detile(_In_ const XboxImage& xbox, _Out_ DirectX::ScratchImage& image); //--------------------------------------------------------------------------------- // Direct3D 11.X functions #if defined(_XBOX_ONE) && defined(_TITLE) && defined(__d3d11_x_h__) - HRESULT __cdecl CreateTexture( + DIRECTX_TEX_API HRESULT __cdecl CreateTexture( _In_ ID3D11DeviceX* d3dDevice, _In_ const XboxImage& xbox, _Outptr_opt_ ID3D11Resource** ppResource, _Outptr_ void** grfxMemory); - HRESULT __cdecl CreateShaderResourceView( + DIRECTX_TEX_API HRESULT __cdecl CreateShaderResourceView( _In_ ID3D11DeviceX* d3dDevice, _In_ const XboxImage& xbox, _Outptr_opt_ ID3D11ShaderResourceView** ppSRV, _Outptr_ void** grfxMemory); - void __cdecl FreeTextureMemory(_In_ ID3D11DeviceX* d3dDevice, _In_opt_ void* grfxMemory); + DIRECTX_TEX_API void __cdecl FreeTextureMemory(_In_ ID3D11DeviceX* d3dDevice, _In_opt_ void* grfxMemory); #endif @@ -197,17 +197,17 @@ namespace Xbox #if ((defined(_XBOX_ONE) && defined(_TITLE)) || defined(_GAMING_XBOX)) && (defined(__d3d12_x_h__) || defined(__XBOX_D3D12_X__)) - HRESULT __cdecl CreateTexture( + DIRECTX_TEX_API HRESULT __cdecl CreateTexture( _In_ ID3D12Device* d3dDevice, _In_ const XboxImage& xbox, _Outptr_opt_ ID3D12Resource** ppResource, _Outptr_ void** grfxMemory); - void __cdecl FreeTextureMemory(_In_ ID3D12Device* d3dDevice, _In_opt_ void* grfxMemory); + DIRECTX_TEX_API void __cdecl FreeTextureMemory(_In_ ID3D12Device* d3dDevice, _In_opt_ void* grfxMemory); #endif //--------------------------------------------------------------------------------- // DDS helper functions - HRESULT __cdecl EncodeDDSHeader( + DIRECTX_TEX_API HRESULT __cdecl EncodeDDSHeader( const XboxImage& xbox, _Out_writes_bytes_(maxsize) uint8_t* pDestination, _In_ size_t maxsize) noexcept; diff --git a/CMakeLists.txt b/CMakeLists.txt index 3aa992c..fdac758 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -222,11 +222,19 @@ if(BUILD_DX11 AND WIN32 AND (NOT (XBOX_CONSOLE_TARGET STREQUAL "durango"))) endif() endif() -add_library(${PROJECT_NAME} ${LIBRARY_SOURCES} ${LIBRARY_HEADERS}) - if(WIN32 AND BUILD_SHARED_LIBS) - target_compile_definitions(${PROJECT_NAME} PRIVATE DIRECTX_TEX_EXPORT) - target_compile_definitions(${PROJECT_NAME} INTERFACE DIRECTX_TEX_IMPORT) + message(STATUS "Build library as a DLL") + + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/build/DirectXTex.rc.in" + "${CMAKE_CURRENT_BINARY_DIR}/DirectXTex.rc" @ONLY) + + add_library(${PROJECT_NAME} SHARED ${LIBRARY_SOURCES} ${LIBRARY_HEADERS} "${CMAKE_CURRENT_BINARY_DIR}/DirectXTex.rc") + + target_compile_definitions(${PROJECT_NAME} PRIVATE DIRECTX_TEX_EXPORT) + target_compile_definitions(${PROJECT_NAME} INTERFACE DIRECTX_TEX_IMPORT) +else() + add_library(${PROJECT_NAME} ${LIBRARY_SOURCES} ${LIBRARY_HEADERS}) endif() if(BUILD_DX11 AND WIN32) diff --git a/build/DirectXTex-GitHub-CMake-Xbox-Dev17.yml b/build/DirectXTex-GitHub-CMake-Xbox-Dev17.yml index 86fedb7..1a24708 100644 --- a/build/DirectXTex-GitHub-CMake-Xbox-Dev17.yml +++ b/build/DirectXTex-GitHub-CMake-Xbox-Dev17.yml @@ -152,3 +152,23 @@ jobs: inputs: cwd: '' cmakeArgs: --build out4 -v --config RelWithDebInfo + - task: CMake@1 + displayName: 'CMake (MSVC): Config x64 (Xbox Series X|S, DLL)' + inputs: + cwd: '' + cmakeArgs: '-G "$(VS_GENERATOR)" -A x64 -B out5 -DCMAKE_SYSTEM_VERSION=$(WIN10_SDK) -DBUILD_XBOX_EXTS_SCARLETT=ON -DBUILD_SAMPLE=OFF -DBUILD_SHARED_LIBS=ON' + - task: CMake@1 + displayName: 'CMake (MSVC): Build x64 Debug (Xbox Series X|S, DLL)' + inputs: + cwd: '' + cmakeArgs: --build out5 -v --config Debug + - task: CMake@1 + displayName: 'CMake (MSVC): Config x64 (Xbox One, DLL)' + inputs: + cwd: '' + cmakeArgs: '-G "$(VS_GENERATOR)" -A x64 -B out6 -DCMAKE_SYSTEM_VERSION=$(WIN10_SDK) -DBUILD_XBOX_EXTS_XBOXONE=ON -DBUILD_SAMPLE=OFF -DBUILD_SHARED_LIBS=ON' + - task: CMake@1 + displayName: 'CMake (MSVC): Build x64 Debug (Xbox One, DLL)' + inputs: + cwd: '' + cmakeArgs: --build out6 -v --config Debug diff --git a/build/DirectXTex.rc.in b/build/DirectXTex.rc.in new file mode 100644 index 0000000..270a038 --- /dev/null +++ b/build/DirectXTex.rc.in @@ -0,0 +1,34 @@ +#include + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "Microsoft Corp" + VALUE "FileDescription", "DirectXTex texture processing library" + VALUE "FileVersion", "1.0.0.0" + VALUE "InternalName", "directxtex.dll" + VALUE "LegalCopyright", "Copyright (c) Microsoft Corp." + VALUE "OriginalFilename", "directxtex.dll" + VALUE "ProductName", "DirectXTex" + VALUE "ProductVersion", "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/build/versioninfo.ps1 b/build/versioninfo.ps1 index 156ec89..9cd0772 100644 --- a/build/versioninfo.ps1 +++ b/build/versioninfo.ps1 @@ -7,5 +7,5 @@ param( [string]$version ) $versionComma = $version.Replace(".", ",") -$files = 'Texassemble\texassemble.rc', 'Texconv\Texconv.rc', 'Texdiag\texdiag.rc' +$files = 'Texassemble\texassemble.rc', 'Texconv\Texconv.rc', 'Texdiag\texdiag.rc', 'build\DirectXTex.rc.in' foreach ($file in $files) { (Get-Content $file).replace('1,0,0,0', $versionComma).replace('1.0.0.0', $version) | Set-Content $file }