From f9303a2eaa1b1efb9cf25be57e7e3b3cdc42465a Mon Sep 17 00:00:00 2001 From: Jeremy Ong Date: Sat, 31 Jul 2021 17:22:51 -0600 Subject: [PATCH 1/3] Add runtime RenderDoc support for Windows dx12/vulkan via --enableRenderDoc option - RenderDoc is disabled when building the monolithic build - The installation path is inferred on Windows, but may be overridden on Windows/Linux via the ATOM_RENDERDOC_PATH environment variable - Linux support may work, but I have no means to test it - Android support shouldn't be difficult to add, but requires a renderdoc_android.cmake file that understands how the RenderDoc package is distributed as part of the Android toolchain Signed-off-by: Jeremy Ong --- Gems/Atom/RHI/Code/CMakeLists.txt | 23 +++++++ Gems/Atom/RHI/Code/Include/Atom/RHI/Factory.h | 26 +++++++- .../Atom/RHI/Code/Include/Atom/RHI/RHIUtils.h | 3 + .../Code/Platform/Linux/renderdoc_linux.cmake | 36 ++++++++++ .../Platform/Windows/renderdoc_windows.cmake | 38 +++++++++++ Gems/Atom/RHI/Code/Source/RHI/Factory.cpp | 65 +++++++++++++++++++ Gems/Atom/RHI/Code/Source/RHI/RHIUtils.cpp | 12 ++++ 7 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 Gems/Atom/RHI/Code/Platform/Linux/renderdoc_linux.cmake create mode 100644 Gems/Atom/RHI/Code/Platform/Windows/renderdoc_windows.cmake diff --git a/Gems/Atom/RHI/Code/CMakeLists.txt b/Gems/Atom/RHI/Code/CMakeLists.txt index 8e1ae3bdf0..82b80e5151 100644 --- a/Gems/Atom/RHI/Code/CMakeLists.txt +++ b/Gems/Atom/RHI/Code/CMakeLists.txt @@ -10,6 +10,23 @@ ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${P include(${pal_dir}/AtomRHITests_traits_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) +set(RENDERDOC_CMAKE ${CMAKE_CURRENT_SOURCE_DIR}/${pal_dir}/renderdoc_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) +if(EXISTS ${RENDERDOC_CMAKE}) + include(${RENDERDOC_CMAKE}) +endif() + +if(TARGET "3rdParty::renderdoc") + message(STATUS "Renderdoc found") + set(USE_RENDERDOC_DEFINE "USE_RENDERDOC") + set(RENDERDOC_BUILD_DEPENDENCY "3rdParty::renderdoc") + set(RENDERDOC_API_DEPENDENCY "3rdParty::renderdoc_api") +else() + message(STATUS "Renderdoc missing") + set(USE_RENDERDOC_DEFINE "") + set(RENDERDOC_BUILD_DEPENDENCY "") + set(RENDERDOC_API_DEPENDENCY "") +endif() + ly_add_target( NAME Atom_RHI.Reflect STATIC NAMESPACE Gem @@ -43,6 +60,12 @@ ly_add_target( AZ::AzCore AZ::AzFramework Gem::Atom_RHI.Reflect + ${RENDERDOC_BUILD_DEPENDENCY} + PUBLIC + ${RENDERDOC_API_DEPENDENCY} + COMPILE_DEFINITIONS + PUBLIC + ${USE_RENDERDOC_DEFINE} ) ly_add_target( diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/Factory.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/Factory.h index a9f9120e8d..24f09c6580 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/Factory.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/Factory.h @@ -11,6 +11,11 @@ #include #include +#if defined(USE_RENDERDOC) +#include +#include +#endif + namespace AZ { namespace RHI @@ -66,7 +71,7 @@ namespace AZ public: AZ_TYPE_INFO(Factory, "{2C0231FD-DD11-4154-A4F5-177181E26D8E}"); - Factory() = default; + Factory(); virtual ~Factory() = default; // Note that you have to delete these for safety reasons, you will trip a static_assert if you do not @@ -93,6 +98,25 @@ namespace AZ /// Access the global factory instance. static Factory& Get(); +#if defined(USE_RENDERDOC) +#if defined(AZ_PLATFORM_WINDOWS) + static const char* RENDERDOC_MODULE = "renderdoc.dll"; +#elif defined(AZ_PLATFORM_LINUX) + static const char* RENDERDOC_MODULE = "librenderdoc.so"; +#elif defined(AZ_PLATFORM_ANDROID) + static const char* RENDERDOC_MODULE = "libVkLayer_GLES_RenderDoc.so" +#else + static const char* RENDERDOC_MODULE = nullptr; +#endif + + /// Access the RenderDoc API pointer if available. + /// The availability of the render doc API at runtime depends on the following: + /// - You must not be building a packaged game/product (LY_MONOLITHIC_GAME not enabled in CMake) + /// - A valid renderdoc installation was found, either by auto-discovery, or by supplying ATOM_RENDERDOC_PATH as an environment variable + /// - The module loaded successfully at runtime, and the API function pointer was retrieved successfully + static RENDERDOC_API_1_1_2* GetRenderDocAPI(); +#endif + /// Returns the name of the Factory. virtual Name GetName() = 0; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/RHIUtils.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/RHIUtils.h index 68d92a77bb..73e8e1ad56 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/RHIUtils.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/RHIUtils.h @@ -37,6 +37,9 @@ namespace AZ //! If multiple values exist it will return the last one AZStd::string GetCommandLineValue(const AZStd::string& commandLineOption); + //! Returns true if the command line option is set + bool QueryCommandLineOption(const AZStd::string& commandLineOption); + //! Returns if the current bakcend is a null renderer bool IsNullRenderer(); } diff --git a/Gems/Atom/RHI/Code/Platform/Linux/renderdoc_linux.cmake b/Gems/Atom/RHI/Code/Platform/Linux/renderdoc_linux.cmake new file mode 100644 index 0000000000..0faccf80ec --- /dev/null +++ b/Gems/Atom/RHI/Code/Platform/Linux/renderdoc_linux.cmake @@ -0,0 +1,36 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +# Prevent bundling the renderdoc dll with a packaged title +if(NOT LY_MONOLITHIC_GAME) + if(DEFINED ENV{"ATOM_RENDERDOC_PATH"}) + set(RENDERDOC_PATH ENV{"ATOM_RENDERDOC_PATH"}) + endif() + + if(RENDERDOC_PATH) + # Normalize file path + file(TO_CMAKE_PATH "${RENDERDOC_PATH}" RENDERDOC_PATH) + + if(EXISTS "${RENDERDOC_PATH}/librenderdoc.so") + ly_add_external_target( + NAME renderdoc + VERSION + 3RDPARTY_ROOT_DIRECTORY ${RENDERDOC_PATH} + INCLUDE_DIRECTORIES "." + RUNTIME_DEPENDENCIES "${RENDERDOC_PATH}/librenderdoc.so" + ) + + ly_add_external_target( + NAME renderdoc_api + VERSION + 3RDPARTY_ROOT_DIRECTORY ${RENDERDOC_PATH} + INCLUDE_DIRECTORIES "." + ) + endif() + endif() +endif() \ No newline at end of file diff --git a/Gems/Atom/RHI/Code/Platform/Windows/renderdoc_windows.cmake b/Gems/Atom/RHI/Code/Platform/Windows/renderdoc_windows.cmake new file mode 100644 index 0000000000..499321b2ab --- /dev/null +++ b/Gems/Atom/RHI/Code/Platform/Windows/renderdoc_windows.cmake @@ -0,0 +1,38 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +# Prevent bundling the renderdoc dll with a packaged title +if(NOT LY_MONOLITHIC_GAME) + # Common installation path for renderdoc path + set(RENDERDOC_PATH "C:/Program Files/RenderDoc") + if(DEFINED ENV{"ATOM_RENDERDOC_PATH"}) + set(RENDERDOC_PATH ENV{"ATOM_RENDERDOC_PATH"}) + endif() + + if(RENDERDOC_PATH) + # Normalize file path + file(TO_CMAKE_PATH "${RENDERDOC_PATH}" RENDERDOC_PATH) + + if(EXISTS "${RENDERDOC_PATH}/renderdoc.dll") + ly_add_external_target( + NAME renderdoc + VERSION + 3RDPARTY_ROOT_DIRECTORY ${RENDERDOC_PATH} + INCLUDE_DIRECTORIES "." + RUNTIME_DEPENDENCIES "${RENDERDOC_PATH}/renderdoc.dll" + ) + + ly_add_external_target( + NAME renderdoc_api + VERSION + 3RDPARTY_ROOT_DIRECTORY ${RENDERDOC_PATH} + INCLUDE_DIRECTORIES "." + ) + endif() + endif() +endif() \ No newline at end of file diff --git a/Gems/Atom/RHI/Code/Source/RHI/Factory.cpp b/Gems/Atom/RHI/Code/Source/RHI/Factory.cpp index 974d63f88b..8e4a96158f 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/Factory.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/Factory.cpp @@ -11,6 +11,15 @@ #include #include +#if defined(USE_RENDERDOC) +#include +#include + +static AZStd::unique_ptr s_renderDocModule; +static RENDERDOC_API_1_1_2* s_renderDocApi = nullptr; +#endif + + namespace AZ { namespace RHI @@ -30,6 +39,48 @@ namespace AZ return AZ_CRC("RHIPlatformService", 0xfff2cea4); } + Factory::Factory() + { +#if defined(USE_RENDERDOC) + // If RenderDoc is requested, we need to load the library as early as possible (before device queries/factories are made) + bool enableRenderDoc = RHI::QueryCommandLineOption("enableRenderDoc"); + + if (enableRenderDoc && RENDERDOC_MODULE && !s_renderDocModule) + { + s_renderDocModule = DynamicModuleHandle::Create(RENDERDOC_MODULE); + if (s_renderDocModule) + { + if (s_renderDocModule->Load(false)) + { + pRENDERDOC_GetAPI renderDocGetAPI = s_renderDocModule->GetFunction("RENDERDOC_GetAPI"); + if (renderDocGetAPI) + { + if (!renderDocGetAPI(eRENDERDOC_API_Version_1_1_2, reinterpret_cast(&s_renderDocApi))) + { + s_renderDocApi = nullptr; + } + } + + if (s_renderDocApi) + { + // Prevent RenderDoc from handling any exceptions that may interfere with the O3DE exception handler + s_renderDocApi->UnloadCrashHandler(); + } + else + { + AZ_Printf("RHISystem", "RenderDoc module loaded but failed to retrieve API function pointer.\n"); + } + } + else + { + AZ_Printf("RHISystem", "RenderDoc module requested but module failed to load.\n"); + } + } + } +#endif // defined(USE_RENDERDOC) + + } + void Factory::Register(Factory* instance) { Interface::Register(instance); @@ -58,6 +109,13 @@ namespace AZ ResourceInvalidateBus::ClearQueuedEvents(); Interface::Unregister(instance); + +#if defined(USE_RENDERDOC) + if (s_renderDocModule) + { + s_renderDocModule->Unload(); + } +#endif } bool Factory::IsReady() @@ -71,5 +129,12 @@ namespace AZ AZ_Assert(factory, "RHI::Factory is not connected to a platform. Call IsReady() to get the status of the platform. A null de-reference is imminent."); return *factory; } + +#if defined(USE_RENDERDOC) + RENDERDOC_API_1_1_2* Factory::GetRenderDocAPI() + { + return s_renderDocApi; + } +#endif } } diff --git a/Gems/Atom/RHI/Code/Source/RHI/RHIUtils.cpp b/Gems/Atom/RHI/Code/Source/RHI/RHIUtils.cpp index 8df5e5b5be..bc4cde9406 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/RHIUtils.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/RHIUtils.cpp @@ -122,5 +122,17 @@ namespace AZ } return commandLineValue; } + + bool QueryCommandLineOption(const AZStd::string& commandLineOption) + { + const AzFramework::CommandLine* commandLine = nullptr; + AzFramework::ApplicationRequests::Bus::BroadcastResult(commandLine, &AzFramework::ApplicationRequests::GetApplicationCommandLine); + + if (commandLine) + { + return commandLine->HasSwitch(commandLineOption); + } + return false; + } } } From 06cef942a957d2805170b2c377561e4875365137 Mon Sep 17 00:00:00 2001 From: Jeremy Ong Date: Sat, 31 Jul 2021 18:30:49 -0600 Subject: [PATCH 2/3] PALify RenderDoc module name Signed-off-by: Jeremy Ong --- Gems/Atom/RHI/Code/CMakeLists.txt | 3 +++ Gems/Atom/RHI/Code/Include/Atom/RHI/Factory.h | 11 ----------- .../Platform/Android/Atom_RHI_Traits_Android.h | 10 ++++++++++ .../Platform/Android/Atom_RHI_Traits_Platform.h | 10 ++++++++++ .../Platform/Android/platform_android_files.cmake | 12 ++++++++++++ .../Source/Platform/Linux/Atom_RHI_Traits_Linux.h | 10 ++++++++++ .../Source/Platform/Linux/Atom_RHI_Traits_Platform.h | 10 ++++++++++ .../Source/Platform/Linux/platform_linux_files.cmake | 12 ++++++++++++ .../Code/Source/Platform/Mac/Atom_RHI_Traits_Mac.h | 8 ++++++++ .../Source/Platform/Mac/Atom_RHI_Traits_Platform.h | 10 ++++++++++ .../Source/Platform/Mac/platform_mac_files.cmake | 12 ++++++++++++ .../Platform/Windows/Atom_RHI_Traits_Platform.h | 10 ++++++++++ .../Platform/Windows/Atom_RHI_Traits_Windows.h | 10 ++++++++++ .../Platform/Windows/platform_windows_files.cmake | 12 ++++++++++++ .../Source/Platform/iOS/Atom_RHI_Traits_Platform.h | 10 ++++++++++ .../Code/Source/Platform/iOS/Atom_RHI_Traits_iOS.h | 8 ++++++++ .../Source/Platform/iOS/platform_ios_files.cmake | 12 ++++++++++++ Gems/Atom/RHI/Code/Source/RHI/Factory.cpp | 5 +++-- 18 files changed, 162 insertions(+), 13 deletions(-) create mode 100644 Gems/Atom/RHI/Code/Source/Platform/Android/Atom_RHI_Traits_Android.h create mode 100644 Gems/Atom/RHI/Code/Source/Platform/Android/Atom_RHI_Traits_Platform.h create mode 100644 Gems/Atom/RHI/Code/Source/Platform/Android/platform_android_files.cmake create mode 100644 Gems/Atom/RHI/Code/Source/Platform/Linux/Atom_RHI_Traits_Linux.h create mode 100644 Gems/Atom/RHI/Code/Source/Platform/Linux/Atom_RHI_Traits_Platform.h create mode 100644 Gems/Atom/RHI/Code/Source/Platform/Linux/platform_linux_files.cmake create mode 100644 Gems/Atom/RHI/Code/Source/Platform/Mac/Atom_RHI_Traits_Mac.h create mode 100644 Gems/Atom/RHI/Code/Source/Platform/Mac/Atom_RHI_Traits_Platform.h create mode 100644 Gems/Atom/RHI/Code/Source/Platform/Mac/platform_mac_files.cmake create mode 100644 Gems/Atom/RHI/Code/Source/Platform/Windows/Atom_RHI_Traits_Platform.h create mode 100644 Gems/Atom/RHI/Code/Source/Platform/Windows/Atom_RHI_Traits_Windows.h create mode 100644 Gems/Atom/RHI/Code/Source/Platform/Windows/platform_windows_files.cmake create mode 100644 Gems/Atom/RHI/Code/Source/Platform/iOS/Atom_RHI_Traits_Platform.h create mode 100644 Gems/Atom/RHI/Code/Source/Platform/iOS/Atom_RHI_Traits_iOS.h create mode 100644 Gems/Atom/RHI/Code/Source/Platform/iOS/platform_ios_files.cmake diff --git a/Gems/Atom/RHI/Code/CMakeLists.txt b/Gems/Atom/RHI/Code/CMakeLists.txt index 82b80e5151..892216c53f 100644 --- a/Gems/Atom/RHI/Code/CMakeLists.txt +++ b/Gems/Atom/RHI/Code/CMakeLists.txt @@ -7,6 +7,7 @@ # ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}) +ly_get_list_relative_pal_filename(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLATFORM_NAME}) include(${pal_dir}/AtomRHITests_traits_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) @@ -50,9 +51,11 @@ ly_add_target( NAMESPACE Gem FILES_CMAKE atom_rhi_public_files.cmake + ${pal_source_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake INCLUDE_DIRECTORIES PRIVATE Source + ${pal_source_dir} PUBLIC Include BUILD_DEPENDENCIES diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/Factory.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/Factory.h index 24f09c6580..11f28e7a94 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/Factory.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/Factory.h @@ -13,7 +13,6 @@ #if defined(USE_RENDERDOC) #include -#include #endif namespace AZ @@ -99,16 +98,6 @@ namespace AZ static Factory& Get(); #if defined(USE_RENDERDOC) -#if defined(AZ_PLATFORM_WINDOWS) - static const char* RENDERDOC_MODULE = "renderdoc.dll"; -#elif defined(AZ_PLATFORM_LINUX) - static const char* RENDERDOC_MODULE = "librenderdoc.so"; -#elif defined(AZ_PLATFORM_ANDROID) - static const char* RENDERDOC_MODULE = "libVkLayer_GLES_RenderDoc.so" -#else - static const char* RENDERDOC_MODULE = nullptr; -#endif - /// Access the RenderDoc API pointer if available. /// The availability of the render doc API at runtime depends on the following: /// - You must not be building a packaged game/product (LY_MONOLITHIC_GAME not enabled in CMake) diff --git a/Gems/Atom/RHI/Code/Source/Platform/Android/Atom_RHI_Traits_Android.h b/Gems/Atom/RHI/Code/Source/Platform/Android/Atom_RHI_Traits_Android.h new file mode 100644 index 0000000000..2f9b2b7c00 --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/Android/Atom_RHI_Traits_Android.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AZ_TRAIT_RENDERDOC_MODULE "libVkLayer_GLES_RenderDoc.so" diff --git a/Gems/Atom/RHI/Code/Source/Platform/Android/Atom_RHI_Traits_Platform.h b/Gems/Atom/RHI/Code/Source/Platform/Android/Atom_RHI_Traits_Platform.h new file mode 100644 index 0000000000..6af80df81e --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/Android/Atom_RHI_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include "Atom_RHI_Traits_Android.h" diff --git a/Gems/Atom/RHI/Code/Source/Platform/Android/platform_android_files.cmake b/Gems/Atom/RHI/Code/Source/Platform/Android/platform_android_files.cmake new file mode 100644 index 0000000000..167afec34d --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/Android/platform_android_files.cmake @@ -0,0 +1,12 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + Atom_RHI_Traits_Platform.h + Atom_RHI_Traits_Android.h +) diff --git a/Gems/Atom/RHI/Code/Source/Platform/Linux/Atom_RHI_Traits_Linux.h b/Gems/Atom/RHI/Code/Source/Platform/Linux/Atom_RHI_Traits_Linux.h new file mode 100644 index 0000000000..35219a5d57 --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/Linux/Atom_RHI_Traits_Linux.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AZ_TRAIT_RENDERDOC_MODULE "librenderdoc.so" diff --git a/Gems/Atom/RHI/Code/Source/Platform/Linux/Atom_RHI_Traits_Platform.h b/Gems/Atom/RHI/Code/Source/Platform/Linux/Atom_RHI_Traits_Platform.h new file mode 100644 index 0000000000..2c2c28a96f --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/Linux/Atom_RHI_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include "Atom_RHI_Traits_Linux.h" diff --git a/Gems/Atom/RHI/Code/Source/Platform/Linux/platform_linux_files.cmake b/Gems/Atom/RHI/Code/Source/Platform/Linux/platform_linux_files.cmake new file mode 100644 index 0000000000..c31e71cd20 --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/Linux/platform_linux_files.cmake @@ -0,0 +1,12 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + Atom_RHI_Traits_Platform.h + Atom_RHI_Traits_Linux.h +) diff --git a/Gems/Atom/RHI/Code/Source/Platform/Mac/Atom_RHI_Traits_Mac.h b/Gems/Atom/RHI/Code/Source/Platform/Mac/Atom_RHI_Traits_Mac.h new file mode 100644 index 0000000000..03320d1dd8 --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/Mac/Atom_RHI_Traits_Mac.h @@ -0,0 +1,8 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once diff --git a/Gems/Atom/RHI/Code/Source/Platform/Mac/Atom_RHI_Traits_Platform.h b/Gems/Atom/RHI/Code/Source/Platform/Mac/Atom_RHI_Traits_Platform.h new file mode 100644 index 0000000000..ae990ab471 --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/Mac/Atom_RHI_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include "Atom_RHI_Traits_Mac.h" diff --git a/Gems/Atom/RHI/Code/Source/Platform/Mac/platform_mac_files.cmake b/Gems/Atom/RHI/Code/Source/Platform/Mac/platform_mac_files.cmake new file mode 100644 index 0000000000..2d4ecd8b4f --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/Mac/platform_mac_files.cmake @@ -0,0 +1,12 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + Atom_RHI_Traits_Platform.h + Atom_RHI_Traits_Mac.h +) diff --git a/Gems/Atom/RHI/Code/Source/Platform/Windows/Atom_RHI_Traits_Platform.h b/Gems/Atom/RHI/Code/Source/Platform/Windows/Atom_RHI_Traits_Platform.h new file mode 100644 index 0000000000..6e19903677 --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/Windows/Atom_RHI_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include "Atom_RHI_Traits_Windows.h" diff --git a/Gems/Atom/RHI/Code/Source/Platform/Windows/Atom_RHI_Traits_Windows.h b/Gems/Atom/RHI/Code/Source/Platform/Windows/Atom_RHI_Traits_Windows.h new file mode 100644 index 0000000000..82358784a3 --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/Windows/Atom_RHI_Traits_Windows.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AZ_TRAIT_RENDERDOC_MODULE "renderdoc.dll" diff --git a/Gems/Atom/RHI/Code/Source/Platform/Windows/platform_windows_files.cmake b/Gems/Atom/RHI/Code/Source/Platform/Windows/platform_windows_files.cmake new file mode 100644 index 0000000000..fc282d0163 --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/Windows/platform_windows_files.cmake @@ -0,0 +1,12 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + Atom_RHI_Traits_Platform.h + Atom_RHI_Traits_Windows.h +) diff --git a/Gems/Atom/RHI/Code/Source/Platform/iOS/Atom_RHI_Traits_Platform.h b/Gems/Atom/RHI/Code/Source/Platform/iOS/Atom_RHI_Traits_Platform.h new file mode 100644 index 0000000000..c39f94db8b --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/iOS/Atom_RHI_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include "Atom_RHI_Traits_iOS.h" diff --git a/Gems/Atom/RHI/Code/Source/Platform/iOS/Atom_RHI_Traits_iOS.h b/Gems/Atom/RHI/Code/Source/Platform/iOS/Atom_RHI_Traits_iOS.h new file mode 100644 index 0000000000..03320d1dd8 --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/iOS/Atom_RHI_Traits_iOS.h @@ -0,0 +1,8 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once diff --git a/Gems/Atom/RHI/Code/Source/Platform/iOS/platform_ios_files.cmake b/Gems/Atom/RHI/Code/Source/Platform/iOS/platform_ios_files.cmake new file mode 100644 index 0000000000..d487385fa6 --- /dev/null +++ b/Gems/Atom/RHI/Code/Source/Platform/iOS/platform_ios_files.cmake @@ -0,0 +1,12 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + Atom_RHI_Traits_Platform.h + Atom_RHI_Traits_iOS.h +) diff --git a/Gems/Atom/RHI/Code/Source/RHI/Factory.cpp b/Gems/Atom/RHI/Code/Source/RHI/Factory.cpp index 8e4a96158f..3162a71e34 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/Factory.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/Factory.cpp @@ -14,6 +14,7 @@ #if defined(USE_RENDERDOC) #include #include +#include static AZStd::unique_ptr s_renderDocModule; static RENDERDOC_API_1_1_2* s_renderDocApi = nullptr; @@ -45,9 +46,9 @@ namespace AZ // If RenderDoc is requested, we need to load the library as early as possible (before device queries/factories are made) bool enableRenderDoc = RHI::QueryCommandLineOption("enableRenderDoc"); - if (enableRenderDoc && RENDERDOC_MODULE && !s_renderDocModule) + if (enableRenderDoc && AZ_TRAIT_RENDERDOC_MODULE && !s_renderDocModule) { - s_renderDocModule = DynamicModuleHandle::Create(RENDERDOC_MODULE); + s_renderDocModule = DynamicModuleHandle::Create(AZ_TRAIT_RENDERDOC_MODULE); if (s_renderDocModule) { if (s_renderDocModule->Load(false)) From af0d7575560afe90991f27bc797bf8f5d014d29f Mon Sep 17 00:00:00 2001 From: Jeremy Ong Date: Mon, 2 Aug 2021 09:50:24 -0600 Subject: [PATCH 3/3] Remove CMake status message when not compiling with RenderDoc Signed-off-by: Jeremy Ong --- Gems/Atom/RHI/Code/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Gems/Atom/RHI/Code/CMakeLists.txt b/Gems/Atom/RHI/Code/CMakeLists.txt index 892216c53f..eeb8f73bac 100644 --- a/Gems/Atom/RHI/Code/CMakeLists.txt +++ b/Gems/Atom/RHI/Code/CMakeLists.txt @@ -17,12 +17,11 @@ if(EXISTS ${RENDERDOC_CMAKE}) endif() if(TARGET "3rdParty::renderdoc") - message(STATUS "Renderdoc found") + message(STATUS "Renderdoc found, adding as runtime dependency") set(USE_RENDERDOC_DEFINE "USE_RENDERDOC") set(RENDERDOC_BUILD_DEPENDENCY "3rdParty::renderdoc") set(RENDERDOC_API_DEPENDENCY "3rdParty::renderdoc_api") else() - message(STATUS "Renderdoc missing") set(USE_RENDERDOC_DEFINE "") set(RENDERDOC_BUILD_DEPENDENCY "") set(RENDERDOC_API_DEPENDENCY "")