diff options
author | Jens Peters <jp7677@gmail.com> | 2022-06-06 19:51:25 +0300 |
---|---|---|
committer | Jens Peters <jp7677@gmail.com> | 2022-06-08 01:12:07 +0300 |
commit | aad8e8bbd049bc45138ae6ca341f76919f797044 (patch) | |
tree | 3311481473ad4ee857cc21143d0c6b776b51a362 | |
parent | aa83ae9be28fabdddb815614484ebb20349a20c7 (diff) |
build: Use smaller compile unitscompile-units
Handle the nvapi static/global fields as extern which allows us to properly compile all cpp files separately.
Move test declarations into header files for allowing separate cpp file compiling also for tests.
27 files changed, 164 insertions, 70 deletions
diff --git a/src/meson.build b/src/meson.build index e4648fe..cad67a3 100644 --- a/src/meson.build +++ b/src/meson.build @@ -14,6 +14,16 @@ nvapi_src = files([ 'd3d/nvapi_d3d_instance.cpp', 'd3d11/nvapi_d3d11_device.cpp', 'd3d12/nvapi_d3d12_device.cpp', + 'nvapi_globals.cpp', + 'nvapi.cpp', + 'nvapi_d3d.cpp', + 'nvapi_d3d11.cpp', + 'nvapi_d3d12.cpp', + 'nvapi_disp.cpp', + 'nvapi_drs.cpp', + 'nvapi_gpu.cpp', + 'nvapi_mosaic.cpp', + 'nvapi_sys.cpp', 'nvapi_interface.cpp', ]) diff --git a/src/nvapi.cpp b/src/nvapi.cpp index eaed5ae..8a3af7e 100644 --- a/src/nvapi.cpp +++ b/src/nvapi.cpp @@ -1,5 +1,5 @@ #include "nvapi_private.h" -#include "nvapi_static.h" +#include "nvapi_globals.h" #include "util/util_statuscode.h" #include "util/util_error.h" #include "util/util_string.h" @@ -7,6 +7,7 @@ #include "util/util_log.h" #include "../version.h" +static auto initializationMutex = std::mutex{}; extern "C" { using namespace dxvk; diff --git a/src/nvapi_d3d.cpp b/src/nvapi_d3d.cpp index 92723f4..d0ff031 100644 --- a/src/nvapi_d3d.cpp +++ b/src/nvapi_d3d.cpp @@ -1,5 +1,5 @@ #include "nvapi_private.h" -#include "nvapi_static.h" +#include "nvapi_globals.h" #include "util/util_statuscode.h" extern "C" { diff --git a/src/nvapi_d3d12.cpp b/src/nvapi_d3d12.cpp index af30805..88714f6 100644 --- a/src/nvapi_d3d12.cpp +++ b/src/nvapi_d3d12.cpp @@ -1,5 +1,5 @@ #include "nvapi_private.h" -#include "nvapi_static.h" +#include "nvapi_globals.h" #include "d3d12/nvapi_d3d12_device.h" #include "util/util_statuscode.h" #include "util/util_op_code.h" diff --git a/src/nvapi_disp.cpp b/src/nvapi_disp.cpp index 00f6d9b..020f9f7 100644 --- a/src/nvapi_disp.cpp +++ b/src/nvapi_disp.cpp @@ -1,5 +1,5 @@ #include "nvapi_private.h" -#include "nvapi_static.h" +#include "nvapi_globals.h" #include "util/util_statuscode.h" #include "util/util_string.h" diff --git a/src/nvapi_drs.cpp b/src/nvapi_drs.cpp index f382509..f5d399c 100644 --- a/src/nvapi_drs.cpp +++ b/src/nvapi_drs.cpp @@ -1,8 +1,11 @@ -#include "../inc/NvApiDriverSettings.c" #include "nvapi_private.h" -#include "nvapi_static.h" +#include "../inc/NvApiDriverSettings.c" #include "util/util_statuscode.h" +static auto drs = 1U; +static auto nvapiDrsSession = reinterpret_cast<NvDRSSessionHandle>(&drs); +static auto nvapiDrsProfile = reinterpret_cast<NvDRSProfileHandle>(&drs); + extern "C" { using namespace dxvk; diff --git a/src/nvapi_globals.cpp b/src/nvapi_globals.cpp new file mode 100644 index 0000000..12544c3 --- /dev/null +++ b/src/nvapi_globals.cpp @@ -0,0 +1,6 @@ +#include "nvapi_globals.h" + +uint64_t initializationCount = 0ULL; +std::unique_ptr<dxvk::ResourceFactory> resourceFactory; +std::unique_ptr<dxvk::NvapiAdapterRegistry> nvapiAdapterRegistry; +std::unique_ptr<dxvk::NvapiD3dInstance> nvapiD3dInstance; diff --git a/src/nvapi_globals.h b/src/nvapi_globals.h new file mode 100644 index 0000000..025c1e8 --- /dev/null +++ b/src/nvapi_globals.h @@ -0,0 +1,11 @@ +#pragma once + +#include "nvapi_private.h" +#include "resource_factory.h" +#include "sysinfo/nvapi_adapter_registry.h" +#include "d3d/nvapi_d3d_instance.h" + +extern uint64_t initializationCount; +extern std::unique_ptr<dxvk::ResourceFactory> resourceFactory; +extern std::unique_ptr<dxvk::NvapiAdapterRegistry> nvapiAdapterRegistry; +extern std::unique_ptr<dxvk::NvapiD3dInstance> nvapiD3dInstance; diff --git a/src/nvapi_gpu.cpp b/src/nvapi_gpu.cpp index 973cc67..bebf8f9 100644 --- a/src/nvapi_gpu.cpp +++ b/src/nvapi_gpu.cpp @@ -1,5 +1,5 @@ #include "nvapi_private.h" -#include "nvapi_static.h" +#include "nvapi_globals.h" #include "util/util_statuscode.h" #include "util/util_string.h" diff --git a/src/nvapi_interface.cpp b/src/nvapi_interface.cpp index 4e6e67c..bbb5a12 100644 --- a/src/nvapi_interface.cpp +++ b/src/nvapi_interface.cpp @@ -1,13 +1,5 @@ +#include "nvapi_private.h" #include "../inc/nvapi_interface.h" -#include "nvapi.cpp" -#include "nvapi_sys.cpp" -#include "nvapi_mosaic.cpp" -#include "nvapi_disp.cpp" -#include "nvapi_drs.cpp" -#include "nvapi_gpu.cpp" -#include "nvapi_d3d.cpp" -#include "nvapi_d3d11.cpp" -#include "nvapi_d3d12.cpp" #include "util/util_string.h" #include "util/util_log.h" diff --git a/src/nvapi_static.h b/src/nvapi_static.h deleted file mode 100644 index 8fc51a6..0000000 --- a/src/nvapi_static.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "resource_factory.h" -#include "sysinfo/nvapi_adapter_registry.h" -#include "d3d/nvapi_d3d_instance.h" - -static std::unique_ptr<dxvk::ResourceFactory> resourceFactory; -static std::unique_ptr<dxvk::NvapiAdapterRegistry> nvapiAdapterRegistry; -static std::unique_ptr<dxvk::NvapiD3dInstance> nvapiD3dInstance; - -static uint32_t drs = 1; -static NvDRSSessionHandle nvapiDrsSession = reinterpret_cast<NvDRSSessionHandle>(&drs); -static NvDRSProfileHandle nvapiDrsProfile = reinterpret_cast<NvDRSProfileHandle>(&drs); - -static auto initializationMutex = std::mutex{}; -static auto initializationCount = 0ULL; diff --git a/src/nvapi_sys.cpp b/src/nvapi_sys.cpp index ab68442..3549d9e 100644 --- a/src/nvapi_sys.cpp +++ b/src/nvapi_sys.cpp @@ -1,5 +1,5 @@ #include "nvapi_private.h" -#include "nvapi_static.h" +#include "nvapi_globals.h" #include "util/util_statuscode.h" #include "../version.h" diff --git a/tests/meson.build b/tests/meson.build index fa0b633..12b2cef 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -14,11 +14,26 @@ nvapi_src = files([ '../src/resource_factory.cpp', '../src/d3d11/nvapi_d3d11_device.cpp', '../src/d3d12/nvapi_d3d12_device.cpp', + '../src/nvapi_globals.cpp', + '../src/nvapi.cpp', + '../src/nvapi_d3d.cpp', + '../src/nvapi_d3d11.cpp', + '../src/nvapi_d3d12.cpp', + '../src/nvapi_disp.cpp', + '../src/nvapi_drs.cpp', + '../src/nvapi_gpu.cpp', + '../src/nvapi_mosaic.cpp', + '../src/nvapi_sys.cpp', ]) nvapi_tests_src = files([ 'main.cpp', - 'nvapi_tests.cpp', + 'resource_factory_util.cpp', + 'nvapi_d3d.cpp', + 'nvapi_d3d11.cpp', + 'nvapi_d3d12.cpp', + 'nvapi_drs.cpp', + 'nvapi_sysinfo.cpp', 'nvapi_system.cpp', ]) diff --git a/tests/mock_factory.cpp b/tests/mock_factory.h index 4bc1576..1e93c04 100644 --- a/tests/mock_factory.cpp +++ b/tests/mock_factory.h @@ -1,3 +1,10 @@ +#pragma once + +#include "nvapi_tests_private.h" +#include "../src/resource_factory.h" + +using namespace dxvk; + class MockFactory : public ResourceFactory { public: diff --git a/tests/nvapi_d3d.cpp b/tests/nvapi_d3d.cpp index 3dc023a..fcd5cd7 100644 --- a/tests/nvapi_d3d.cpp +++ b/tests/nvapi_d3d.cpp @@ -1,4 +1,9 @@ +#include "nvapi_tests_private.h" +#include "resource_factory_util.h" +#include "nvapi_d3d_mocks.h" + using namespace trompeloeil; +using namespace dxvk; TEST_CASE("D3D methods succeed", "[.d3d]") { UnknownMock unknown; diff --git a/tests/nvapi_d3d11.cpp b/tests/nvapi_d3d11.cpp index 824f6d3..72ac94b 100644 --- a/tests/nvapi_d3d11.cpp +++ b/tests/nvapi_d3d11.cpp @@ -1,4 +1,9 @@ +#include "nvapi_tests_private.h" +#include "nvapi_d3d_mocks.h" +#include "nvapi_d3d11_mocks.h" + using namespace trompeloeil; +using namespace dxvk; TEST_CASE("D3D11 methods succeed", "[.d3d11]") { D3D11DxvkDeviceMock device; diff --git a/tests/nvapi_d3d11_mocks.cpp b/tests/nvapi_d3d11_mocks.h index 5145c7d..4127a0b 100644 --- a/tests/nvapi_d3d11_mocks.cpp +++ b/tests/nvapi_d3d11_mocks.h @@ -1,4 +1,10 @@ +#pragma once + +#include "nvapi_tests_private.h" +#include "../src/dxvk/dxvk_interfaces.h" + using namespace trompeloeil; +using namespace dxvk; class ID3D11DxvkDevice : public ID3D11Device, public ID3D11VkExtDevice1 {}; diff --git a/tests/nvapi_d3d12.cpp b/tests/nvapi_d3d12.cpp index 9912c59..364ebb8 100644 --- a/tests/nvapi_d3d12.cpp +++ b/tests/nvapi_d3d12.cpp @@ -1,4 +1,10 @@ +#include "nvapi_tests_private.h" +#include "resource_factory_util.h" +#include "nvapi_sysinfo_mocks.h" +#include "nvapi_d3d12_mocks.h" + using namespace trompeloeil; +using namespace dxvk; TEST_CASE("D3D12 methods succeed", "[.d3d12]") { D3D12Vkd3dDeviceMock device; diff --git a/tests/nvapi_d3d12_mocks.cpp b/tests/nvapi_d3d12_mocks.h index feb884b..a7a24aa 100644 --- a/tests/nvapi_d3d12_mocks.cpp +++ b/tests/nvapi_d3d12_mocks.h @@ -1,4 +1,10 @@ +#pragma once + +#include "nvapi_tests_private.h" +#include "../src/vkd3d-proton/vkd3d-proton_interfaces.h" + using namespace trompeloeil; +using namespace dxvk; class ID3D12Vkd3dDevice : public ID3D12Device, public ID3D12DeviceExt {}; diff --git a/tests/nvapi_d3d_mocks.cpp b/tests/nvapi_d3d_mocks.h index e645907..13acf5f 100644 --- a/tests/nvapi_d3d_mocks.cpp +++ b/tests/nvapi_d3d_mocks.h @@ -1,4 +1,10 @@ +#pragma once + +#include "nvapi_tests_private.h" +#include "../src/d3d/lfx.h" + using namespace trompeloeil; +using namespace dxvk; class UnknownMock : public mock_interface<IUnknown> { MAKE_MOCK2(QueryInterface, HRESULT(REFIID, void**), override); @@ -10,4 +16,4 @@ class LfxMock : public mock_interface<Lfx> { IMPLEMENT_CONST_MOCK0(IsAvailable); IMPLEMENT_MOCK0(WaitAndBeginFrame); IMPLEMENT_MOCK1(SetTargetFrameTime); -};
\ No newline at end of file +}; diff --git a/tests/nvapi_drs.cpp b/tests/nvapi_drs.cpp index 6dabd43..d37b856 100644 --- a/tests/nvapi_drs.cpp +++ b/tests/nvapi_drs.cpp @@ -1,3 +1,7 @@ +#include "nvapi_tests_private.h" +#include "../inc/NvApiDriverSettings.h" + +using namespace dxvk; using namespace trompeloeil; TEST_CASE("DRS methods succeed", "[.drs]") { diff --git a/tests/nvapi_sysinfo.cpp b/tests/nvapi_sysinfo.cpp index 04690d1..a91a682 100644 --- a/tests/nvapi_sysinfo.cpp +++ b/tests/nvapi_sysinfo.cpp @@ -1,4 +1,9 @@ +#include "nvapi_tests_private.h" +#include "resource_factory_util.h" +#include "nvapi_sysinfo_mocks.h" + using namespace trompeloeil; +using namespace dxvk; TEST_CASE("GetInterfaceVersionString returns OK", "[.sysinfo]") { NvAPI_ShortString desc; diff --git a/tests/nvapi_sysinfo_mocks.cpp b/tests/nvapi_sysinfo_mocks.h index 09f4841..ee0db72 100644 --- a/tests/nvapi_sysinfo_mocks.cpp +++ b/tests/nvapi_sysinfo_mocks.h @@ -1,4 +1,12 @@ +#pragma once + +#include "nvapi_tests_private.h" +#include "../src/dxvk/dxvk_interfaces.h" +#include "../src/sysinfo/vulkan.h" +#include "../src/sysinfo/nvml.h" + using namespace trompeloeil; +using namespace dxvk; class DXGIFactory1Mock : public mock_interface<IDXGIFactory1> { MAKE_MOCK2(QueryInterface, HRESULT(REFIID, void**), override); @@ -30,8 +38,8 @@ class DXGIDxvkAdapterMock : public mock_interface<IDXGIDxvkAdapter> { IMPLEMENT_MOCK2(EnumOutputs); IMPLEMENT_MOCK1(GetDesc); IMPLEMENT_MOCK2(CheckInterfaceSupport); - IMPLEMENT_MOCK2(GetVulkanHandles); IMPLEMENT_MOCK1(GetDesc1); + IMPLEMENT_MOCK2(GetVulkanHandles); }; class DXGIOutputMock : public mock_interface<IDXGIOutput> { diff --git a/tests/nvapi_tests.cpp b/tests/nvapi_tests.cpp deleted file mode 100644 index 8ed3275..0000000 --- a/tests/nvapi_tests.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#pragma GCC diagnostic ignored "-Wnon-virtual-dtor" -#pragma GCC diagnostic ignored "-Wunused-parameter" -#pragma GCC diagnostic ignored "-Wunused-but-set-variable" - -#include "../inc/catch.hpp" -#include "../inc/catch2/trompeloeil.hpp" -#include "../src/nvapi_d3d.cpp" -#include "../src/nvapi_d3d11.cpp" -#include "../src/nvapi_d3d12.cpp" -#include "../src/nvapi_drs.cpp" -#include "../src/nvapi.cpp" -#include "../src/nvapi_sys.cpp" -#include "../src/nvapi_gpu.cpp" -#include "../src/nvapi_disp.cpp" -#include "../src/nvapi_mosaic.cpp" - -#include "nvapi_sysinfo_mocks.cpp" -#include "nvapi_d3d_mocks.cpp" -#include "resource_factory_util.cpp" -#include "nvapi_d3d11_mocks.cpp" -#include "nvapi_d3d12_mocks.cpp" - -#include "nvapi_d3d.cpp" -#include "nvapi_d3d11.cpp" -#include "nvapi_d3d12.cpp" -#include "nvapi_drs.cpp" -#include "nvapi_sysinfo.cpp" diff --git a/tests/nvapi_tests_private.h b/tests/nvapi_tests_private.h new file mode 100644 index 0000000..75d1952 --- /dev/null +++ b/tests/nvapi_tests_private.h @@ -0,0 +1,6 @@ +#pragma GCC diagnostic ignored "-Wnon-virtual-dtor" + +#include "../src/nvapi_private.h" +#include "../src/nvapi_globals.h" +#include "../inc/catch.hpp" +#include "../inc/catch2/trompeloeil.hpp" diff --git a/tests/resource_factory_util.cpp b/tests/resource_factory_util.cpp index a50d8f4..cfa15c8 100644 --- a/tests/resource_factory_util.cpp +++ b/tests/resource_factory_util.cpp @@ -1,10 +1,4 @@ -#include "mock_factory.cpp" - -void ResetResourceFactory() { - resourceFactory.reset(); - nvapiAdapterRegistry.reset(); - initializationCount = 0ULL; -} +#include "resource_factory_util.h" void SetupResourceFactory( std::unique_ptr<DXGIFactory1Mock> dxgiFactory, diff --git a/tests/resource_factory_util.h b/tests/resource_factory_util.h new file mode 100644 index 0000000..9a3e4fa --- /dev/null +++ b/tests/resource_factory_util.h @@ -0,0 +1,41 @@ +#pragma once + +#include "nvapi_tests_private.h" +#include "nvapi_d3d_mocks.h" +#include "nvapi_sysinfo_mocks.h" +#include "mock_factory.h" + +void SetupResourceFactory( + std::unique_ptr<DXGIFactory1Mock> dxgiFactory, + std::unique_ptr<Vulkan> vulkan, + std::unique_ptr<Nvml> nvml, + std::unique_ptr<Lfx> lfx); + +[[nodiscard]] std::array<std::unique_ptr<expectation>, 17> ConfigureDefaultTestEnvironment( + DXGIFactory1Mock& dxgiFactory, + VulkanMock& vulkan, + NvmlMock& nvml, + LfxMock& lfx, + DXGIDxvkAdapterMock& adapter, + DXGIOutputMock& output); + +[[nodiscard]] std::array<std::unique_ptr<expectation>, 29> ConfigureExtendedTestEnvironment( + DXGIFactory1Mock& dxgiFactory, + VulkanMock& vulkan, + NvmlMock& nvml, + LfxMock& lfx, + DXGIDxvkAdapterMock& adapter1, + DXGIDxvkAdapterMock& adapter2, + DXGIOutputMock& output1, + DXGIOutputMock& output2, + DXGIOutputMock& output3); + +void ConfigureGetPhysicalDeviceProperties2( + VkPhysicalDeviceProperties2* props, + std::function<void( + VkPhysicalDeviceProperties*, + VkPhysicalDeviceIDProperties*, + VkPhysicalDevicePCIBusInfoPropertiesEXT*, + VkPhysicalDeviceDriverPropertiesKHR*, + VkPhysicalDeviceFragmentShadingRatePropertiesKHR*)> + configure); |