From d15d40fec667ee0e3190a4904bde0f26eb497a7a Mon Sep 17 00:00:00 2001 From: Jeremy Ong Date: Fri, 13 Aug 2021 01:14:06 -0600 Subject: [PATCH] Add Windows PIX runtime support Signed-off-by: Jeremy Ong --- .gitignore | 1 + .../AzCore/AzCore/Debug/Profiler.cpp | 19 +++++++++++++++++++ Code/Framework/AzCore/AzCore/Debug/Profiler.h | 5 +---- Code/Framework/AzCore/CMakeLists.txt | 10 ++++++++++ Gems/Atom/RHI/DX12/Code/CMakeLists.txt | 9 --------- .../Source/Platform/Android/PAL_android.cmake | 1 - .../Source/Platform/Linux/PAL_linux.cmake | 1 - .../Code/Source/Platform/Mac/PAL_mac.cmake | 1 - .../Source/Platform/Windows/PAL_windows.cmake | 12 ------------ .../Code/Source/Platform/iOS/PAL_ios.cmake | 1 - .../3rdParty/FindPIX.cmake | 9 ++++----- .../Platform/Windows/pix_windows.cmake | 2 +- cmake/3rdParty/cmake_files.cmake | 1 + cmake/Platform/Android/PAL_android.cmake | 2 ++ cmake/Platform/Linux/PAL_linux.cmake | 2 ++ cmake/Platform/Mac/PAL_mac.cmake | 2 ++ cmake/Platform/Windows/PAL_windows.cmake | 2 ++ cmake/Platform/iOS/PAL_ios.cmake | 2 ++ 18 files changed, 47 insertions(+), 35 deletions(-) rename Gems/Atom/RHI/DX12/3rdParty/Findpix.cmake => cmake/3rdParty/FindPIX.cmake (59%) rename {Gems/Atom/RHI/DX12 => cmake}/3rdParty/Platform/Windows/pix_windows.cmake (98%) diff --git a/.gitignore b/.gitignore index b73c89b1d9..e41b92498f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ .vscode/ __pycache__ AssetProcessorTemp/** +CMakeUserPresets.json [Bb]uild/** [Oo]ut/** [Cc]ache/ diff --git a/Code/Framework/AzCore/AzCore/Debug/Profiler.cpp b/Code/Framework/AzCore/AzCore/Debug/Profiler.cpp index e6b7a80707..eda7330cfc 100644 --- a/Code/Framework/AzCore/AzCore/Debug/Profiler.cpp +++ b/Code/Framework/AzCore/AzCore/Debug/Profiler.cpp @@ -18,6 +18,12 @@ #include #include +#ifdef USE_PIX +#include +#include +#endif + + namespace AZ { namespace Debug @@ -495,6 +501,10 @@ namespace AZ ProfilerRegister* ProfilerRegister::TimerCreateAndStart(const char* systemName, const char* name, ProfilerSection * section, const char* function, int line) { +#if defined(USE_PIX) + PIXBeginEvent(PIX_COLOR(0, 0, 1), "%s:%s", name, function); +#endif + AZStd::chrono::system_clock::time_point start = AZStd::chrono::system_clock::now(); ProfilerRegister* reg = CreateRegister(systemName, name, function, line, ProfilerRegister::PRT_TIME); AZStd::chrono::system_clock::time_point end = AZStd::chrono::system_clock::now(); @@ -537,6 +547,11 @@ namespace AZ void ProfilerRegister::TimerStart(ProfilerSection* section) { ProfilerRegister* reg = this; + +#if defined(USE_PIX) + PIXBeginEvent(PIX_COLOR(0, 0, 1), "%s:%s", reg->m_name, reg->m_function); +#endif + if (reg->m_isActive) { section->m_register = reg; @@ -555,6 +570,10 @@ namespace AZ //========================================================================= void ProfilerRegister::TimerStop() { +#if defined(USE_PIX) + PIXEndEvent(); +#endif + AZStd::chrono::system_clock::time_point end = AZStd::chrono::system_clock::now(); ProfilerSection* section = m_threadData->m_stack.back(); AZStd::chrono::microseconds elapsedTime = end - section->m_start; diff --git a/Code/Framework/AzCore/AzCore/Debug/Profiler.h b/Code/Framework/AzCore/AzCore/Debug/Profiler.h index 243a8da0b0..6dcdcfdddc 100644 --- a/Code/Framework/AzCore/AzCore/Debug/Profiler.h +++ b/Code/Framework/AzCore/AzCore/Debug/Profiler.h @@ -5,8 +5,7 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#ifndef AZCORE_PROFILER_H -#define AZCORE_PROFILER_H 1 +#pragma once #include #include @@ -615,5 +614,3 @@ namespace AZ } } // namespace AZ -#endif // AZCORE_PROFILER_H -#pragma once diff --git a/Code/Framework/AzCore/CMakeLists.txt b/Code/Framework/AzCore/CMakeLists.txt index ea7cc27af5..ab9596e2b2 100644 --- a/Code/Framework/AzCore/CMakeLists.txt +++ b/Code/Framework/AzCore/CMakeLists.txt @@ -19,6 +19,12 @@ if(LY_RAD_TELEMETRY_ENABLED) set(AZ_CORE_RADTELEMETRY_BUILD_DEPENDENCIES 3rdParty::RadTelemetry) endif() +if(PAL_TRAIT_PROF_PIX_SUPPORTED AND LY_PIX_ENABLED) + set(LY_PIX_PATH "${LY_3RDPARTY_PATH}/winpixeventruntime" CACHE PATH "Path to the Windows Pix Event Runtime.") + set(AZ_CORE_PIX_BUILD_DEPENDENCIES 3rdParty::pix) + set(AZ_CORE_PIX_BUILD_DEFINES "USE_PIX") +endif() + ly_add_target( NAME AzCore STATIC NAMESPACE AZ @@ -45,6 +51,10 @@ ly_add_target( 3rdParty::zstd 3rdParty::cityhash ${AZ_CORE_RADTELEMETRY_BUILD_DEPENDENCIES} + ${AZ_CORE_PIX_BUILD_DEPENDENCIES} + COMPILE_DEFINITIONS + PUBLIC + ${AZ_CORE_PIX_BUILD_DEFINES} ) ly_add_source_properties( SOURCES diff --git a/Gems/Atom/RHI/DX12/Code/CMakeLists.txt b/Gems/Atom/RHI/DX12/Code/CMakeLists.txt index a16b958c66..8670efa7e6 100644 --- a/Gems/Atom/RHI/DX12/Code/CMakeLists.txt +++ b/Gems/Atom/RHI/DX12/Code/CMakeLists.txt @@ -12,10 +12,8 @@ ly_get_list_relative_pal_filename(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Sourc include(${pal_source_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # PAL_TRAIT_ATOM_RHI_DX12_SUPPORTED if(PAL_TRAIT_PIX_AVAILABLE) - set(USE_PIX_DEFINE "USE_PIX") set(PIX_BUILD_DEPENDENCY "3rdParty::pix") else() - set(USE_PIX_DEFINE "") set(PIX_BUILD_DEPENDENCY "") endif() @@ -94,9 +92,6 @@ ly_add_target( AZ::AzCore ${PIX_BUILD_DEPENDENCY} Gem::Atom_RHI.Reflect - COMPILE_DEFINITIONS - PRIVATE - ${USE_PIX_DEFINE} ) ly_add_target( @@ -124,7 +119,6 @@ ly_add_target( ${PIX_BUILD_DEPENDENCY} COMPILE_DEFINITIONS PRIVATE - ${USE_PIX_DEFINE} ${USE_NSIGHT_AFTERMATH_DEFINE} ) @@ -149,9 +143,6 @@ ly_add_target( Gem::Atom_RHI_DX12.Reflect Gem::Atom_RHI_DX12.Private.Static ${PIX_BUILD_DEPENDENCY} - COMPILE_DEFINITIONS - PRIVATE - ${USE_PIX_DEFINE} ) if(PAL_TRAIT_BUILD_HOST_TOOLS) diff --git a/Gems/Atom/RHI/DX12/Code/Source/Platform/Android/PAL_android.cmake b/Gems/Atom/RHI/DX12/Code/Source/Platform/Android/PAL_android.cmake index 240ec6941c..8becd70f81 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/Platform/Android/PAL_android.cmake +++ b/Gems/Atom/RHI/DX12/Code/Source/Platform/Android/PAL_android.cmake @@ -7,5 +7,4 @@ # set(PAL_TRAIT_ATOM_RHI_DX12_SUPPORTED FALSE) -set(PAL_TRAIT_PIX_AVAILABLE FALSE) set(PAL_TRAIT_AFTERMATH_AVAILABLE FALSE) diff --git a/Gems/Atom/RHI/DX12/Code/Source/Platform/Linux/PAL_linux.cmake b/Gems/Atom/RHI/DX12/Code/Source/Platform/Linux/PAL_linux.cmake index 240ec6941c..8becd70f81 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/Platform/Linux/PAL_linux.cmake +++ b/Gems/Atom/RHI/DX12/Code/Source/Platform/Linux/PAL_linux.cmake @@ -7,5 +7,4 @@ # set(PAL_TRAIT_ATOM_RHI_DX12_SUPPORTED FALSE) -set(PAL_TRAIT_PIX_AVAILABLE FALSE) set(PAL_TRAIT_AFTERMATH_AVAILABLE FALSE) diff --git a/Gems/Atom/RHI/DX12/Code/Source/Platform/Mac/PAL_mac.cmake b/Gems/Atom/RHI/DX12/Code/Source/Platform/Mac/PAL_mac.cmake index 240ec6941c..8becd70f81 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/Platform/Mac/PAL_mac.cmake +++ b/Gems/Atom/RHI/DX12/Code/Source/Platform/Mac/PAL_mac.cmake @@ -7,5 +7,4 @@ # set(PAL_TRAIT_ATOM_RHI_DX12_SUPPORTED FALSE) -set(PAL_TRAIT_PIX_AVAILABLE FALSE) set(PAL_TRAIT_AFTERMATH_AVAILABLE FALSE) diff --git a/Gems/Atom/RHI/DX12/Code/Source/Platform/Windows/PAL_windows.cmake b/Gems/Atom/RHI/DX12/Code/Source/Platform/Windows/PAL_windows.cmake index a7e4015659..b885e53ec0 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/Platform/Windows/PAL_windows.cmake +++ b/Gems/Atom/RHI/DX12/Code/Source/Platform/Windows/PAL_windows.cmake @@ -21,18 +21,6 @@ endif() set(PAL_TRAIT_PIX_AVAILABLE FALSE) unset(pix3_header CACHE) -file(TO_CMAKE_PATH "$ENV{ATOM_PIX_PATH}" ATOM_PIX_PATH_CMAKE_FORMATTED) -find_file(pix3_header - pix3.h - PATHS - "${ATOM_PIX_PATH_CMAKE_FORMATTED}/Include/WinPixEventRuntime" -) - -mark_as_advanced(pix3_header) -if(pix3_header) - set(PAL_TRAIT_PIX_AVAILABLE TRUE) -endif() - set(PAL_TRAIT_AFTERMATH_AVAILABLE FALSE) unset(aftermath_header CACHE) file(TO_CMAKE_PATH "$ENV{ATOM_AFTERMATH_PATH}" ATOM_AFTERMATH_PATH_CMAKE_FORMATTED) diff --git a/Gems/Atom/RHI/DX12/Code/Source/Platform/iOS/PAL_ios.cmake b/Gems/Atom/RHI/DX12/Code/Source/Platform/iOS/PAL_ios.cmake index 240ec6941c..8becd70f81 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/Platform/iOS/PAL_ios.cmake +++ b/Gems/Atom/RHI/DX12/Code/Source/Platform/iOS/PAL_ios.cmake @@ -7,5 +7,4 @@ # set(PAL_TRAIT_ATOM_RHI_DX12_SUPPORTED FALSE) -set(PAL_TRAIT_PIX_AVAILABLE FALSE) set(PAL_TRAIT_AFTERMATH_AVAILABLE FALSE) diff --git a/Gems/Atom/RHI/DX12/3rdParty/Findpix.cmake b/cmake/3rdParty/FindPIX.cmake similarity index 59% rename from Gems/Atom/RHI/DX12/3rdParty/Findpix.cmake rename to cmake/3rdParty/FindPIX.cmake index b8e7118953..4bce14312d 100644 --- a/Gems/Atom/RHI/DX12/3rdParty/Findpix.cmake +++ b/cmake/3rdParty/FindPIX.cmake @@ -6,15 +6,14 @@ # # -file(TO_CMAKE_PATH "$ENV{ATOM_PIX_PATH}" ATOM_PIX_PATH_CMAKE_FORMATTED) +if(LY_PIX_ENABLED) + file(TO_CMAKE_PATH "${LY_PIX_PATH}" PIX_PATH) + message(STATUS "PIX PATH ${PIX_PATH}") -if(EXISTS "${ATOM_PIX_PATH_CMAKE_FORMATTED}/include/WinPixEventRuntime/pix3.h") ly_add_external_target( NAME pix + 3RDPARTY_ROOT_DIRECTORY "${PIX_PATH}" VERSION - 3RDPARTY_ROOT_DIRECTORY ${ATOM_PIX_PATH_CMAKE_FORMATTED} INCLUDE_DIRECTORIES include ) endif() - - diff --git a/Gems/Atom/RHI/DX12/3rdParty/Platform/Windows/pix_windows.cmake b/cmake/3rdParty/Platform/Windows/pix_windows.cmake similarity index 98% rename from Gems/Atom/RHI/DX12/3rdParty/Platform/Windows/pix_windows.cmake rename to cmake/3rdParty/Platform/Windows/pix_windows.cmake index 54d419d1c2..aba65d9627 100644 --- a/Gems/Atom/RHI/DX12/3rdParty/Platform/Windows/pix_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/pix_windows.cmake @@ -11,4 +11,4 @@ if(LY_MONOLITHIC_GAME) else() set(PIX_LIBS ${BASE_PATH}/bin/x64/WinPixEventRuntime.lib) set(PIX_RUNTIME_DEPENDENCIES ${BASE_PATH}/bin/x64/WinPixEventRuntime.dll) -endif() +endif() \ No newline at end of file diff --git a/cmake/3rdParty/cmake_files.cmake b/cmake/3rdParty/cmake_files.cmake index 99e83da4fe..cf56031db6 100644 --- a/cmake/3rdParty/cmake_files.cmake +++ b/cmake/3rdParty/cmake_files.cmake @@ -9,6 +9,7 @@ set(FILES BuiltInPackages.cmake FindOpenGLInterface.cmake + FindPIX.cmake FindRadTelemetry.cmake FindVkValidation.cmake FindWwise.cmake diff --git a/cmake/Platform/Android/PAL_android.cmake b/cmake/Platform/Android/PAL_android.cmake index 8a7c6406b7..1ef36b1af6 100644 --- a/cmake/Platform/Android/PAL_android.cmake +++ b/cmake/Platform/Android/PAL_android.cmake @@ -18,6 +18,8 @@ ly_set(PAL_TRAIT_BUILD_UNITY_EXCLUDE_EXTENSIONS) ly_set(PAL_TRAIT_BUILD_EXCLUDE_ALL_TEST_RUNS_FROM_IDE TRUE) ly_set(PAL_TRAIT_BUILD_CPACK_SUPPORTED FALSE) +ly_set(PAL_TRAIT_PROF_PIX_SUPPORTED FALSE) + # Test library support ly_set(PAL_TRAIT_TEST_GOOGLE_TEST_SUPPORTED FALSE) ly_set(PAL_TRAIT_TEST_GOOGLE_BENCHMARK_SUPPORTED FALSE) diff --git a/cmake/Platform/Linux/PAL_linux.cmake b/cmake/Platform/Linux/PAL_linux.cmake index c137538ac0..528bb5794c 100644 --- a/cmake/Platform/Linux/PAL_linux.cmake +++ b/cmake/Platform/Linux/PAL_linux.cmake @@ -18,6 +18,8 @@ ly_set(PAL_TRAIT_BUILD_UNITY_EXCLUDE_EXTENSIONS) ly_set(PAL_TRAIT_BUILD_EXCLUDE_ALL_TEST_RUNS_FROM_IDE FALSE) ly_set(PAL_TRAIT_BUILD_CPACK_SUPPORTED FALSE) +ly_set(PAL_TRAIT_PROF_PIX_SUPPORTED FALSE) + # Test library support ly_set(PAL_TRAIT_TEST_GOOGLE_TEST_SUPPORTED TRUE) ly_set(PAL_TRAIT_TEST_GOOGLE_BENCHMARK_SUPPORTED TRUE) diff --git a/cmake/Platform/Mac/PAL_mac.cmake b/cmake/Platform/Mac/PAL_mac.cmake index 7ddb4a1b5e..b415daf44a 100644 --- a/cmake/Platform/Mac/PAL_mac.cmake +++ b/cmake/Platform/Mac/PAL_mac.cmake @@ -18,6 +18,8 @@ ly_set(PAL_TRAIT_BUILD_UNITY_EXCLUDE_EXTENSIONS ".mm") ly_set(PAL_TRAIT_BUILD_EXCLUDE_ALL_TEST_RUNS_FROM_IDE FALSE) ly_set(PAL_TRAIT_BUILD_CPACK_SUPPORTED FALSE) +ly_set(PAL_TRAIT_PROF_PIX_SUPPORTED FALSE) + # Test library support ly_set(PAL_TRAIT_TEST_GOOGLE_TEST_SUPPORTED TRUE) ly_set(PAL_TRAIT_TEST_GOOGLE_BENCHMARK_SUPPORTED TRUE) diff --git a/cmake/Platform/Windows/PAL_windows.cmake b/cmake/Platform/Windows/PAL_windows.cmake index f4fa2e676a..f329425cd3 100644 --- a/cmake/Platform/Windows/PAL_windows.cmake +++ b/cmake/Platform/Windows/PAL_windows.cmake @@ -18,6 +18,8 @@ ly_set(PAL_TRAIT_BUILD_UNITY_EXCLUDE_EXTENSIONS) ly_set(PAL_TRAIT_BUILD_EXCLUDE_ALL_TEST_RUNS_FROM_IDE FALSE) ly_set(PAL_TRAIT_BUILD_CPACK_SUPPORTED TRUE) +ly_set(PAL_TRAIT_PROF_PIX_SUPPORTED TRUE) + # Test library support ly_set(PAL_TRAIT_TEST_GOOGLE_TEST_SUPPORTED TRUE) ly_set(PAL_TRAIT_TEST_GOOGLE_BENCHMARK_SUPPORTED TRUE) diff --git a/cmake/Platform/iOS/PAL_ios.cmake b/cmake/Platform/iOS/PAL_ios.cmake index 3da4a13ed2..e1c4b6d37e 100644 --- a/cmake/Platform/iOS/PAL_ios.cmake +++ b/cmake/Platform/iOS/PAL_ios.cmake @@ -18,6 +18,8 @@ ly_set(PAL_TRAIT_BUILD_UNITY_EXCLUDE_EXTENSIONS ".mm") ly_set(PAL_TRAIT_BUILD_EXCLUDE_ALL_TEST_RUNS_FROM_IDE TRUE) ly_set(PAL_TRAIT_BUILD_CPACK_SUPPORTED FALSE) +ly_set(PAL_TRAIT_PROF_PIX_SUPPORTED FALSE) + # Test library support ly_set(PAL_TRAIT_TEST_GOOGLE_TEST_SUPPORTED FALSE) ly_set(PAL_TRAIT_TEST_GOOGLE_BENCHMARK_SUPPORTED FALSE)