From 051601607098449f60aae6ee50c072a1647ca72e Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 15 Jun 2017 14:59:16 +0100 Subject: [PATCH] Follow-up commit to b7f893b5 with minor fixes/tweaks * Moved the AMD project under an IHV folder * Moved the AMD headers from the D3D11 project to the AMD project, and added the GPUPerfAPI headers there too. * Set the counterID inside the CounterDescription for AMD counters * Add an extra search path for the GPUPerfAPI dlls, which will be inside distributed builds soon. --- renderdoc.sln | 5 +- renderdoc/api/replay/replay_enums.h | 37 ++++++++++ renderdoc/driver/d3d11/d3d11_counters.cpp | 2 +- .../driver/d3d11/renderdoc_d3d11.vcxproj | 3 - .../d3d11/renderdoc_d3d11.vcxproj.filters | 12 ---- renderdoc/driver/ihv/amd/AMD.vcxproj | 17 ++++- renderdoc/driver/ihv/amd/AMD.vcxproj.filters | 67 ++++++++++++++++--- renderdoc/driver/ihv/amd/amd_counters.cpp | 14 +++- renderdoc/driver/ihv/amd/amd_counters.h | 5 ++ 9 files changed, 130 insertions(+), 32 deletions(-) diff --git a/renderdoc.sln b/renderdoc.sln index c3792e463..495a68dc3 100644 --- a/renderdoc.sln +++ b/renderdoc.sln @@ -75,6 +75,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "d3d9", "renderdoc\driver\d3 EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AMD", "renderdoc\driver\ihv\amd\AMD.vcxproj", "{5DE5A561-548A-4DD7-90F0-06A2B39EAE9A}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IHV", "IHV", "{4DA2F3E3-9A65-45DD-A69B-82C7757D4904}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Development|x64 = Development|x64 @@ -245,6 +247,7 @@ Global {88C5DAC6-30A0-4CFD-AF51-540A977D1F3F} = {864A44B0-5612-451A-857F-41E3EF785EF6} {9E6B10A2-84B4-434D-ABDB-43BE4EA650F4} = {864A44B0-5612-451A-857F-41E3EF785EF6} {44044776-9469-4079-B587-ABFFF6574AA4} = {864A44B0-5612-451A-857F-41E3EF785EF6} - {5DE5A561-548A-4DD7-90F0-06A2B39EAE9A} = {864A44B0-5612-451A-857F-41E3EF785EF6} + {5DE5A561-548A-4DD7-90F0-06A2B39EAE9A} = {4DA2F3E3-9A65-45DD-A69B-82C7757D4904} + {4DA2F3E3-9A65-45DD-A69B-82C7757D4904} = {864A44B0-5612-451A-857F-41E3EF785EF6} EndGlobalSection EndGlobal diff --git a/renderdoc/api/replay/replay_enums.h b/renderdoc/api/replay/replay_enums.h index 0912d5706..1b75f0e40 100644 --- a/renderdoc/api/replay/replay_enums.h +++ b/renderdoc/api/replay/replay_enums.h @@ -2899,12 +2899,49 @@ enum class GPUCounter : uint32_t FirstAMD = 1000000, FirstIntel = 2000000, + LastAMD = FirstIntel - 1, FirstNvidia = 3000000, + LastIntel = FirstNvidia - 1, + + LastNvidia = 4000000, }; ITERABLE_OPERATORS(GPUCounter); +DOCUMENT(R"(Check whether or not this is an AMD private counter. + +:param GPUCounter c: The counter. +:return: ``True`` if it is an AMD private counter, ``False`` if it's not. +:rtype: bool +)"); +inline constexpr bool IsAMDCounter(GPUCounter c) +{ + return c >= GPUCounter::FirstAMD && c <= GPUCounter::LastAMD; +} + +DOCUMENT(R"(Check whether or not this is an Intel private counter. + +:param GPUCounter c: The counter. +:return: ``True`` if it is an Intel private counter, ``False`` if it's not. +:rtype: bool +)"); +inline constexpr bool IsIntelCounter(GPUCounter c) +{ + return c >= GPUCounter::FirstIntel && c <= GPUCounter::LastIntel; +} + +DOCUMENT(R"(Check whether or not this is an Nvidia private counter. + +:param GPUCounter c: The counter. +:return: ``True`` if it is an Nvidia private counter, ``False`` if it's not. +:rtype: bool +)"); +inline constexpr bool IsNvidiaCounter(GPUCounter c) +{ + return c >= GPUCounter::FirstNvidia && c <= GPUCounter::LastNvidia; +} + DOCUMENT(R"(The unit that GPU counter data is returned in. .. data:: Absolute diff --git a/renderdoc/driver/d3d11/d3d11_counters.cpp b/renderdoc/driver/d3d11/d3d11_counters.cpp index 6b91b7b22..bb9af5203 100644 --- a/renderdoc/driver/d3d11/d3d11_counters.cpp +++ b/renderdoc/driver/d3d11/d3d11_counters.cpp @@ -68,7 +68,7 @@ vector D3D11DebugManager::EnumerateCounters() { for(uint32_t i = 0; i < m_pAMDCounters->GetNumCounters(); i++) { - ret.push_back(static_cast(static_cast(GPUCounter::FirstAMD) + i)); + ret.push_back(MakeAMDCounter(i)); } } diff --git a/renderdoc/driver/d3d11/renderdoc_d3d11.vcxproj b/renderdoc/driver/d3d11/renderdoc_d3d11.vcxproj index 2bf2751df..e81b1b174 100644 --- a/renderdoc/driver/d3d11/renderdoc_d3d11.vcxproj +++ b/renderdoc/driver/d3d11/renderdoc_d3d11.vcxproj @@ -122,9 +122,6 @@ - - - diff --git a/renderdoc/driver/d3d11/renderdoc_d3d11.vcxproj.filters b/renderdoc/driver/d3d11/renderdoc_d3d11.vcxproj.filters index 52030023c..2ac751a66 100644 --- a/renderdoc/driver/d3d11/renderdoc_d3d11.vcxproj.filters +++ b/renderdoc/driver/d3d11/renderdoc_d3d11.vcxproj.filters @@ -19,9 +19,6 @@ {069c5202-e850-427b-9353-250795a60436} - - {b92bf274-f255-4c2f-bc1f-dbd1807643a5} - {7b0b6261-46cb-4feb-8958-8252d6349ae4} @@ -137,15 +134,6 @@ official - - official\amd - - - official\amd - - - official\amd - PCH diff --git a/renderdoc/driver/ihv/amd/AMD.vcxproj b/renderdoc/driver/ihv/amd/AMD.vcxproj index b4252272d..1900d625a 100644 --- a/renderdoc/driver/ihv/amd/AMD.vcxproj +++ b/renderdoc/driver/ihv/amd/AMD.vcxproj @@ -47,7 +47,7 @@ $(SolutionDir)$(Platform)\$(Configuration)\obj\$(ProjectName)\ - + WIN64;%(PreprocessorDefinitions) @@ -97,6 +97,21 @@ + + + + + + + + + + + + + + + diff --git a/renderdoc/driver/ihv/amd/AMD.vcxproj.filters b/renderdoc/driver/ihv/amd/AMD.vcxproj.filters index 9dedfb9dd..6d508e35d 100644 --- a/renderdoc/driver/ihv/amd/AMD.vcxproj.filters +++ b/renderdoc/driver/ihv/amd/AMD.vcxproj.filters @@ -1,27 +1,72 @@  - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + {db3f483b-32db-4d57-bf48-4f0ef2322be0} - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd + + {345b73a2-79ed-4c89-8f45-b8aa2d211a7f} - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + {ef917fc9-3eef-4565-9fbe-e1d3e02460e6} + + + {310145c9-318c-4c14-ac19-1bb04a050349} - Source Files + Counters - Header Files + Counters + + + official\DXExt + + + official\DXExt + + + official\DXExt + + + official\GPUPerfAPI + + + official\GPUPerfAPI + + + official\GPUPerfAPI + + + official\GPUPerfAPI + + + official\GPUPerfAPI + + + official\GPUPerfAPI + + + official\GPUPerfAPI + + + official\GPUPerfAPI + + + official\GPUPerfAPI + + + official\GPUPerfAPI + + + official\GPUPerfAPI + + + official\GPUPerfAPI \ No newline at end of file diff --git a/renderdoc/driver/ihv/amd/amd_counters.cpp b/renderdoc/driver/ihv/amd/amd_counters.cpp index 7d4a89aa5..a0d4879fd 100644 --- a/renderdoc/driver/ihv/amd/amd_counters.cpp +++ b/renderdoc/driver/ihv/amd/amd_counters.cpp @@ -105,11 +105,18 @@ AMDCounters::AMDCounters() : m_pGPUPerfAPI(NULL) bool AMDCounters::Init(void *pContext) { - HMODULE module = LoadLibraryA("GPUPerfAPIDX11-x64.dll"); + // first try in the location it will be in distributed builds + HMODULE module = LoadLibraryA("plugins/amd/counters/GPUPerfAPIDX11-x64.dll"); - if(module == 0) + // if that failed then try checking for it just in the default search path + if(module == NULL) { - RDCERR( + module = LoadLibraryA("GPUPerfAPIDX11-x64.dll"); + } + + if(module == NULL) + { + RDCWARN( "AMD GPU performance counters could not be initialized successfully. " "Are you missing the DLLs?"); @@ -218,6 +225,7 @@ vector AMDCounters::EnumerateCounters() } internalDesc.internalIndex = i; + internalDesc.desc.counterID = MakeAMDCounter(i); counters.push_back(internalDesc); } diff --git a/renderdoc/driver/ihv/amd/amd_counters.h b/renderdoc/driver/ihv/amd/amd_counters.h index 4ce5b343e..c8b374a7e 100644 --- a/renderdoc/driver/ihv/amd/amd_counters.h +++ b/renderdoc/driver/ihv/amd/amd_counters.h @@ -29,6 +29,11 @@ class GPUPerfAPI; +inline constexpr GPUCounter MakeAMDCounter(int index) +{ + return GPUCounter((int)GPUCounter::FirstAMD + index); +} + class AMDCounters { public: