diff --git a/Source/GmmLib/CMakeLists.txt b/Source/GmmLib/CMakeLists.txt index a3f902e..4eadbef 100644 --- a/Source/GmmLib/CMakeLists.txt +++ b/Source/GmmLib/CMakeLists.txt @@ -39,6 +39,13 @@ if(NOT DEFINED PATCH_VERSION) set(PATCH_VERSION 0) endif() +if(NOT DEFINED GMMLIB_API_PATCH_VERSION) + set(GMMLIB_API_PATCH_VERSION ${PATCH_VERSION}) +endif() + +message(STATUS "API version: ${GMMLIB_API_MAJOR_VERSION}.${GMMLIB_API_MINOR_VERSION}.${GMMLIB_API_PATCH_VERSION}") +message(STATUS "Package version: ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}") + if(NOT DEFINED BS_USE_OSDM_BUILD_SYSTEM) if(DEFINED ENV{BS_USE_OSDM_BUILD_SYSTEM}) set(BS_USE_OSDM_BUILD_SYSTEM "$ENV{BS_USE_OSDM_BUILD_SYSTEM}") @@ -393,7 +400,7 @@ target_link_libraries( ${GMM_LIB_DLL_NAME} ) else() set_target_properties(${GMM_LIB_DLL_NAME} PROPERTIES OUTPUT_NAME "igdgmm") - set_target_properties(${GMM_LIB_DLL_NAME} PROPERTIES VERSION ${GMMLIB_API_MAJOR_VERSION}.${GMMLIB_API_MINOR_VERSION}.${PATCH_VERSION}) + set_target_properties(${GMM_LIB_DLL_NAME} PROPERTIES VERSION ${GMMLIB_API_MAJOR_VERSION}.${GMMLIB_API_MINOR_VERSION}.${GMMLIB_API_PATCH_VERSION}) set_target_properties(${GMM_LIB_DLL_NAME} PROPERTIES SOVERSION ${GMMLIB_API_MAJOR_VERSION}) set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) @@ -471,6 +478,11 @@ if(UNIX) configure_file(${BS_DIR_GMMLIB}/igdgmm.h.in ${CMAKE_BINARY_DIR}/igdgmm.h) configure_file(${BS_DIR_GMMLIB}/igdgmm.pc.in ${CMAKE_BINARY_DIR}/igdgmm.pc @ONLY) + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp/postinst "/sbin/ldconfig\n") + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp/postrm "/sbin/ldconfig\n") + file(COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/postinst DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + file(COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/postrm DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + install(TARGETS ${GMM_LIB_DLL_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT gmmlib NAMELINK_SKIP) install(TARGETS ${GMM_LIB_DLL_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT gmmlib-devel NAMELINK_ONLY) @@ -525,10 +537,13 @@ if(UNIX) set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel") set(CPACK_DEBIAN_COMPRESSION_TYPE "xz") + set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_BINARY_DIR}/postinst;${CMAKE_CURRENT_BINARY_DIR}/postrm") set(CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64") set(CPACK_RPM_PACKAGE_RELEASE 1) set(CPACK_RPM_COMPRESSION_TYPE "xz") + set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/postinst") + set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/postrm") if(CMAKE_VERSION VERSION_GREATER 3.6 OR CMAKE_VERSION VERSION_EQUAL 3.6) set(CPACK_DEBIAN_GMMLIB_FILE_NAME "intel-gmmlib_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") @@ -550,7 +565,7 @@ if(UNIX) endif() set(CPACK_DEBIAN_GMMLIB-DEVEL_PACKAGE_DEPENDS "intel-gmmlib(=${CPACK_PACKAGE_VERSION})") - set(CPACK_RPM_GMMLIB-DEVEL_PACKAGE_REQUIRES "intel-gmmlib(=${CPACK_PACKAGE_VERSION})") + set(CPACK_RPM_GMMLIB-DEVEL_PACKAGE_REQUIRES "intel-gmmlib = ${CPACK_PACKAGE_VERSION}") set(CPACK_COMPONENT_INSTALL ON) set(CPACK_DEB_COMPONENT_INSTALL ON) diff --git a/Source/GmmLib/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h b/Source/GmmLib/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h index 7df363c..7d70657 100755 --- a/Source/GmmLib/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h +++ b/Source/GmmLib/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h @@ -127,7 +127,11 @@ DEFINE_RESOURCE_USAGE( CM_RESOURCE_USAGE_L1_Enabled_SurfaceState ) // DEFINE_RESOURCE_USAGE( MP_RESOURCE_USAGE_BEGIN ) DEFINE_RESOURCE_USAGE( MP_RESOURCE_USAGE_DEFAULT ) +DEFINE_RESOURCE_USAGE( MP_RESOURCE_USAGE_DEFAULT_FF ) +DEFINE_RESOURCE_USAGE( MP_RESOURCE_USAGE_DEFAULT_RCS ) DEFINE_RESOURCE_USAGE( MP_RESOURCE_USAGE_SurfaceState ) +DEFINE_RESOURCE_USAGE( MP_RESOURCE_USAGE_SurfaceState_FF ) +DEFINE_RESOURCE_USAGE( MP_RESOURCE_USAGE_SurfaceState_RCS ) DEFINE_RESOURCE_USAGE( MP_RESOURCE_USAGE_AGE3_SurfaceState ) DEFINE_RESOURCE_USAGE( MP_RESOURCE_USAGE_EDRAM_SurfaceState ) DEFINE_RESOURCE_USAGE( MP_RESOURCE_USAGE_EDRAM_AGE3_SurfaceState ) @@ -171,6 +175,7 @@ DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_SURFACE_CURR_ENCODE ) DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_SURFACE_REF_ENCODE ) DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_SURFACE_MV_DATA_ENCODE ) DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE ) +DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE_FF ) DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_SURFACE_HME_DOWNSAMPLED_ENCODE_DST ) DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_SURFACE_ME_DISTORTION_ENCODE ) DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_SURFACE_BRC_ME_DISTORTION_ENCODE ) @@ -250,6 +255,8 @@ DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_HUC_VIRTUAL_ADDR_REGION_BUFFER_CODEC ) DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_SIZE_STREAMOUT_CODEC ) DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_COMPRESSED_HEADER_BUFFER_CODEC ) DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_PROBABILITY_DELTA_BUFFER_CODEC ) +DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_TILE_RECORD_BUFFER_CODEC ) +DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_TILE_SIZE_STAS_BUFFER_CODEC ) DEFINE_RESOURCE_USAGE( GMM_RESOURCE_USAGE_END_CODEC ) // OCL Usages diff --git a/Source/GmmLib/GlobalInfo/GmmInfo.cpp b/Source/GmmLib/GlobalInfo/GmmInfo.cpp index 22e753f..e203855 100644 --- a/Source/GmmLib/GlobalInfo/GmmInfo.cpp +++ b/Source/GmmLib/GlobalInfo/GmmInfo.cpp @@ -140,13 +140,17 @@ extern "C" GMM_STATUS GMM_STDCALL GmmCreateSingletonContext(const PLATFORM Platf ///////////////////////////////////////////////////////////////////////////////////// extern "C" void GMM_STDCALL GmmDestroySingletonContext(void) { - __GMM_ASSERTPTR(pGmmGlobalContext, VOIDRETURN); - int32_t ContextRefCount = GmmLib::Context::DecrementRefCount(); - if(!ContextRefCount && pGmmGlobalContext) + GMM_STATUS SyncLockStatus = GmmLib::Context::LockSingletonContextSyncMutex(); + if(SyncLockStatus == GMM_SUCCESS) { - pGmmGlobalContext->DestroyContext(); - delete pGmmGlobalContext; - pGmmGlobalContext = NULL; + int32_t ContextRefCount = GmmLib::Context::DecrementRefCount(); + if(!ContextRefCount && pGmmGlobalContext) + { + pGmmGlobalContext->DestroyContext(); + delete pGmmGlobalContext; + pGmmGlobalContext = NULL; + } + GmmLib::Context::UnlockSingletonContextSyncMutex(); } } diff --git a/Source/GmmLib/Platform/GmmGen10Platform.cpp b/Source/GmmLib/Platform/GmmGen10Platform.cpp index 004e158..c4a049c 100644 --- a/Source/GmmLib/Platform/GmmGen10Platform.cpp +++ b/Source/GmmLib/Platform/GmmGen10Platform.cpp @@ -507,4 +507,7 @@ GmmLib::PlatformInfoGen10::PlatformInfoGen10(PLATFORM &Platform) Data.SurfaceMaxSize = GMM_GBYTE(256); Data.MaxGpuVirtualAddressBitsPerResource = 38; Data.HiZPixelsPerByte = 2; + + Data.ReconMaxHeight = Data.Texture2DSurface.MaxHeight; // Reconstructed surfaces require more height and width for higher resolutions. + Data.ReconMaxWidth = Data.Texture2DSurface.MaxWidth; } diff --git a/Source/GmmLib/Platform/GmmGen11Platform.cpp b/Source/GmmLib/Platform/GmmGen11Platform.cpp index b5ba5da..faef7c1 100644 --- a/Source/GmmLib/Platform/GmmGen11Platform.cpp +++ b/Source/GmmLib/Platform/GmmGen11Platform.cpp @@ -31,6 +31,9 @@ GmmLib::PlatformInfoGen11::PlatformInfoGen11(PLATFORM &Platform) Data.SurfaceMaxSize = GMM_GBYTE(16384); Data.MaxGpuVirtualAddressBitsPerResource = 44; + //Override the Height VP9 VdEnc requirement for Gen11 8k resolution. + Data.ReconMaxHeight = GMM_KBYTE(32); + //Override CCS MaxPitch requirement if(GFX_GET_CURRENT_PRODUCT(Data.Platform) == IGFX_ICELAKE) { diff --git a/Source/GmmLib/Platform/GmmGen8Platform.cpp b/Source/GmmLib/Platform/GmmGen8Platform.cpp index c8d6737..2beec14 100644 --- a/Source/GmmLib/Platform/GmmGen8Platform.cpp +++ b/Source/GmmLib/Platform/GmmGen8Platform.cpp @@ -432,4 +432,7 @@ GmmLib::PlatformInfoGen8::PlatformInfoGen8(PLATFORM &Platform) Data.MaxSLMSize = GMM_KBYTE(384); Data.HiZPixelsPerByte = 2; -} \ No newline at end of file + + Data.ReconMaxHeight = Data.Texture2DSurface.MaxHeight; // Reconstructed surfaces require more height and width for higher resolutions. + Data.ReconMaxWidth = Data.Texture2DSurface.MaxWidth; +} diff --git a/Source/GmmLib/Platform/GmmGen9Platform.cpp b/Source/GmmLib/Platform/GmmGen9Platform.cpp index 0020658..2e41592 100644 --- a/Source/GmmLib/Platform/GmmGen9Platform.cpp +++ b/Source/GmmLib/Platform/GmmGen9Platform.cpp @@ -491,4 +491,7 @@ GmmLib::PlatformInfoGen9::PlatformInfoGen9(PLATFORM &Platform) } Data.HiZPixelsPerByte = 2; + + Data.ReconMaxHeight = Data.Texture2DSurface.MaxHeight; // Reconstructed surfaces require more height and width for higher resolutions. + Data.ReconMaxWidth = Data.Texture2DSurface.MaxWidth; } diff --git a/Source/GmmLib/Resource/GmmRestrictions.cpp b/Source/GmmLib/Resource/GmmRestrictions.cpp index b86b873..b6a41d2 100644 --- a/Source/GmmLib/Resource/GmmRestrictions.cpp +++ b/Source/GmmLib/Resource/GmmRestrictions.cpp @@ -205,6 +205,11 @@ void GmmLib::GmmTextureCalc::GetGenericRestrictions(GMM_TEXTURE_INFO *pTexInfo, { *pBuff = pPlatformResource->Texture2DLinearSurface; } + if(GmmIsReconstructableSurface(pTexInfo->Format)) + { + pBuff->MaxHeight = pPlatformResource->ReconMaxHeight; + pBuff->MaxWidth = pPlatformResource->ReconMaxWidth; + } } } if(pTexInfo->Flags.Gpu.RenderTarget || @@ -231,6 +236,11 @@ void GmmLib::GmmTextureCalc::GetGenericRestrictions(GMM_TEXTURE_INFO *pTexInfo, { *pBuff = pPlatformResource->Texture2DLinearSurface; } + if(GmmIsReconstructableSurface(pTexInfo->Format)) + { + pBuff->MaxHeight = pPlatformResource->ReconMaxHeight; + pBuff->MaxWidth = pPlatformResource->ReconMaxWidth; + } } } if(pTexInfo->Flags.Gpu.Depth) diff --git a/Source/GmmLib/Utility/GmmUtility.cpp b/Source/GmmLib/Utility/GmmUtility.cpp index 8cddd29..2ca11e1 100644 --- a/Source/GmmLib/Utility/GmmUtility.cpp +++ b/Source/GmmLib/Utility/GmmUtility.cpp @@ -285,6 +285,46 @@ uint8_t GMM_STDCALL GmmIsPlanar(GMM_RESOURCE_FORMAT Format) return Status; } +//============================================================================= +// Function: +// GmmIsReconstructableSurface +// +// Description: +// Checks if format is GmmIsReconstructableSurface +// +// Arguments: