Skip to content

Fix compressed to compressed texture conversion leaving leaked memory and threads #335

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,57 @@ message("Building Compressonator version ${PROJECT_VERSION_MAJOR}.${PROJECT_VERS
# ------------------------------
include(cmake/helperfunctions.cmake)

# ----------------------------------
# Check the target architecture
# ----------------------------------
################################################################################
# Figure out build type and target platform
################################################################################

include(CheckCCompilerFlag)

# See what CPU we appear to be targeting...
macro(check_cpu _CDEFS _NAME _VALUE)
check_c_source_compiles(
"
#if ( ${_CDEFS} )
int main(int argc, char **argv) { int yup = 1; return 0; }
#else
#error Not targeting this CPU architecture.
#endif
"
${_VALUE}
)

if(${_VALUE})
if(AMD_COMPRESSONATOR_CHOSE_CPU)
message(STATUS "We appear to see two different CPU architectures!")
message(STATUS "We saw '${AMD_COMPRESSONATOR_CPU}' and '${_NAME}'.")
message(FATAL_ERROR "Please fix this before continuing.")
endif()
set(AMD_COMPRESSONATOR_CHOSE_CPU TRUE)
set(AMD_COMPRESSONATOR_CPU ${_NAME})
add_compile_definitions(${_VALUE}=1)
endif()
endmacro(check_cpu)

check_cpu(
"defined(__i386__) || defined(__i686__) || defined(_M_IX86) || defined(i386)"
"x86" AMD_COMPRESSONATOR_X86
)

check_cpu("defined(__x86_64__) || defined(_M_X64)" "amd64" AMD_COMPRESSONATOR_AMD64)

check_cpu("defined(__EMSCRIPTEN__)" "emscripten" AMD_COMPRESSONATOR_EMSCRIPTEN)

check_cpu("defined(__arm__)" "arm" AMD_COMPRESSONATOR_ARM)

check_cpu("defined(__arm64__) || defined(__aarch64__)" "arm64" AMD_COMPRESSONATOR_ARM64)

if (NOT AMD_COMPRESSONATOR_CHOSE_CPU)
message(FATAL_ERROR "We don't support this architecture yet")
endif()


# ------------------------------
# Common compiler options
Expand Down
162 changes: 83 additions & 79 deletions build/sdk/cmp_core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -72,82 +72,86 @@

# Core SIMD options

# SSE
add_library(CMP_Core_SSE OBJECT)
target_sources(
CMP_Core_SSE
PRIVATE
${COMPRESSONATOR_ROOT_PATH}/cmp_core/source/core_simd_sse.cpp
)

target_include_directories(
CMP_Core_SSE
PRIVATE
${COMPRESSONATOR_ROOT_PATH}/cmp_core/source
${COMPRESSONATOR_ROOT_PATH}/cmp_core/shaders
)

if (UNIX)
target_compile_options(CMP_Core_SSE PRIVATE -march=nehalem)
endif()

set_target_properties(CMP_Core_SSE PROPERTIES
FOLDER ${PROJECT_FOLDER_SDK_LIBS}
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

# AVX
add_library(CMP_Core_AVX OBJECT)
target_sources(
CMP_Core_AVX
PRIVATE
${COMPRESSONATOR_ROOT_PATH}/cmp_core/source/core_simd_avx.cpp
)
target_include_directories(
CMP_Core_AVX
PRIVATE
${COMPRESSONATOR_ROOT_PATH}/cmp_core/source
${COMPRESSONATOR_ROOT_PATH}/cmp_core/shaders
)

if (WIN32)
target_compile_options(CMP_Core_AVX PRIVATE /arch:AVX2)
else()
target_compile_options(CMP_Core_AVX PRIVATE -march=haswell)
endif()

set_target_properties(CMP_Core_AVX PROPERTIES
FOLDER ${PROJECT_FOLDER_SDK_LIBS}
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

# AVX-512
add_library(CMP_Core_AVX512 OBJECT)
target_sources(
CMP_Core_AVX512
PRIVATE
${COMPRESSONATOR_ROOT_PATH}/cmp_core/source/core_simd_avx512.cpp
)
target_include_directories(
CMP_Core_AVX512
PRIVATE
${COMPRESSONATOR_ROOT_PATH}/cmp_core/source
${COMPRESSONATOR_ROOT_PATH}/cmp_core/shaders
)

if (WIN32)
target_compile_options(CMP_Core_AVX512 PRIVATE /arch:AVX-512)
else()
target_compile_options(CMP_Core_AVX512 PRIVATE -march=knl)
endif()

set_target_properties(CMP_Core_AVX512 PROPERTIES
FOLDER ${PROJECT_FOLDER_SDK_LIBS}
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

# Link SIMD libraries to CMP_Core
target_link_libraries(CMP_Core PRIVATE CMP_Core_SSE CMP_Core_AVX CMP_Core_AVX512)
# Metallicafan212: Actually check for support before linking it
# This fixes ARM builds
if(AMD_COMPRESSONATOR_AMD64 OR AMD_COMPRESSONATOR_X86)
# SSE
add_library(CMP_Core_SSE OBJECT)
target_sources(
CMP_Core_SSE
PRIVATE
${COMPRESSONATOR_ROOT_PATH}/cmp_core/source/core_simd_sse.cpp
)

target_include_directories(
CMP_Core_SSE
PRIVATE
${COMPRESSONATOR_ROOT_PATH}/cmp_core/source
${COMPRESSONATOR_ROOT_PATH}/cmp_core/shaders
)

if (UNIX)
target_compile_options(CMP_Core_SSE PRIVATE -march=nehalem)
endif()

set_target_properties(CMP_Core_SSE PROPERTIES
FOLDER ${PROJECT_FOLDER_SDK_LIBS}
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

# AVX
add_library(CMP_Core_AVX OBJECT)
target_sources(
CMP_Core_AVX
PRIVATE
${COMPRESSONATOR_ROOT_PATH}/cmp_core/source/core_simd_avx.cpp
)
target_include_directories(
CMP_Core_AVX
PRIVATE
${COMPRESSONATOR_ROOT_PATH}/cmp_core/source
${COMPRESSONATOR_ROOT_PATH}/cmp_core/shaders
)

if (WIN32)
target_compile_options(CMP_Core_AVX PRIVATE /arch:AVX2)
else()
target_compile_options(CMP_Core_AVX PRIVATE -march=haswell)
endif()

set_target_properties(CMP_Core_AVX PROPERTIES
FOLDER ${PROJECT_FOLDER_SDK_LIBS}
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

# AVX-512
add_library(CMP_Core_AVX512 OBJECT)
target_sources(
CMP_Core_AVX512
PRIVATE
${COMPRESSONATOR_ROOT_PATH}/cmp_core/source/core_simd_avx512.cpp
)
target_include_directories(
CMP_Core_AVX512
PRIVATE
${COMPRESSONATOR_ROOT_PATH}/cmp_core/source
${COMPRESSONATOR_ROOT_PATH}/cmp_core/shaders
)

if (WIN32)
target_compile_options(CMP_Core_AVX512 PRIVATE /arch:AVX-512)
else()
target_compile_options(CMP_Core_AVX512 PRIVATE -march=knl)
endif()

set_target_properties(CMP_Core_AVX512 PROPERTIES
FOLDER ${PROJECT_FOLDER_SDK_LIBS}
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

# Link SIMD libraries to CMP_Core
target_link_libraries(CMP_Core PRIVATE CMP_Core_SSE CMP_Core_AVX CMP_Core_AVX512)
endif()
6 changes: 6 additions & 0 deletions cmp_compressonatorlib/compressonator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,12 @@ CMP_ERROR CMP_API CMP_ConvertTexture(CMP_Texture* pSourceTexture,
}
RESTORE_FP_EXCEPTIONS;

SAFE_DELETE(pCodecIn);
SAFE_DELETE(pCodecOut);
SAFE_DELETE(pSrcBuffer);
SAFE_DELETE(pTempBuffer);
SAFE_DELETE(pDestBuffer);

return GetError(err2);
}
}
Expand Down
82 changes: 43 additions & 39 deletions cmp_core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,42 +66,46 @@ set_target_properties(CMP_Core PROPERTIES FOLDER ${PROJECT_FOLDER_SDK_LIBS})

# Core SIMD options

# SSE
add_library(CMP_Core_SSE STATIC)
target_sources(CMP_Core_SSE PRIVATE source/core_simd_sse.cpp)
target_include_directories(CMP_Core_SSE PRIVATE source shaders)

if (UNIX)
target_compile_options(CMP_Core_SSE PRIVATE -march=nehalem)
endif()

set_target_properties(CMP_Core_SSE PROPERTIES FOLDER ${PROJECT_FOLDER_SDK_LIBS})

# AVX
add_library(CMP_Core_AVX STATIC)
target_sources(CMP_Core_AVX PRIVATE source/core_simd_avx.cpp)
target_include_directories(CMP_Core_AVX PRIVATE source shaders)

if (WIN32)
target_compile_options(CMP_Core_AVX PRIVATE /arch:AVX2)
else()
target_compile_options(CMP_Core_AVX PRIVATE -march=haswell)
endif()

set_target_properties(CMP_Core_AVX PROPERTIES FOLDER ${PROJECT_FOLDER_SDK_LIBS})

# AVX-512
add_library(CMP_Core_AVX512 STATIC)
target_sources(CMP_Core_AVX512 PRIVATE source/core_simd_avx512.cpp)
target_include_directories(CMP_Core_AVX512 PRIVATE source shaders)

if (WIN32)
target_compile_options(CMP_Core_AVX512 PRIVATE /arch:AVX-512)
else()
target_compile_options(CMP_Core_AVX512 PRIVATE -march=knl)
endif()

set_target_properties(CMP_Core_AVX512 PROPERTIES FOLDER ${PROJECT_FOLDER_SDK_LIBS})

# Link SIMD libraries to CMP_Core
target_link_libraries(CMP_Core PRIVATE CMP_Core_SSE CMP_Core_AVX CMP_Core_AVX512)
# Metallicafan212: Actually check for support before linking it
# This fixes ARM builds
if(AMD_COMPRESSONATOR_AMD64 OR AMD_COMPRESSONATOR_X86)
# SSE
add_library(CMP_Core_SSE STATIC)
target_sources(CMP_Core_SSE PRIVATE source/core_simd_sse.cpp)
target_include_directories(CMP_Core_SSE PRIVATE source shaders)

if (UNIX)
target_compile_options(CMP_Core_SSE PRIVATE -march=nehalem)
endif()

set_target_properties(CMP_Core_SSE PROPERTIES FOLDER ${PROJECT_FOLDER_SDK_LIBS})

# AVX
add_library(CMP_Core_AVX STATIC)
target_sources(CMP_Core_AVX PRIVATE source/core_simd_avx.cpp)
target_include_directories(CMP_Core_AVX PRIVATE source shaders)

if (WIN32)
target_compile_options(CMP_Core_AVX PRIVATE /arch:AVX2)
else()
target_compile_options(CMP_Core_AVX PRIVATE -march=haswell)
endif()

set_target_properties(CMP_Core_AVX PROPERTIES FOLDER ${PROJECT_FOLDER_SDK_LIBS})

# AVX-512
add_library(CMP_Core_AVX512 STATIC)
target_sources(CMP_Core_AVX512 PRIVATE source/core_simd_avx512.cpp)
target_include_directories(CMP_Core_AVX512 PRIVATE source shaders)

if (WIN32)
target_compile_options(CMP_Core_AVX512 PRIVATE /arch:AVX-512)
else()
target_compile_options(CMP_Core_AVX512 PRIVATE -march=knl)
endif()

set_target_properties(CMP_Core_AVX512 PROPERTIES FOLDER ${PROJECT_FOLDER_SDK_LIBS})

# Link SIMD libraries to CMP_Core
target_link_libraries(CMP_Core PRIVATE CMP_Core_SSE CMP_Core_AVX CMP_Core_AVX512)
endif()
Loading