Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/jp7677/dxvk-nvapi.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Peters <jp7677@gmail.com>2022-06-06 19:51:25 +0300
committerJens Peters <jp7677@gmail.com>2022-06-08 01:12:07 +0300
commitaad8e8bbd049bc45138ae6ca341f76919f797044 (patch)
tree3311481473ad4ee857cc21143d0c6b776b51a362
parentaa83ae9be28fabdddb815614484ebb20349a20c7 (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.
-rw-r--r--src/meson.build10
-rw-r--r--src/nvapi.cpp3
-rw-r--r--src/nvapi_d3d.cpp2
-rw-r--r--src/nvapi_d3d12.cpp2
-rw-r--r--src/nvapi_disp.cpp2
-rw-r--r--src/nvapi_drs.cpp7
-rw-r--r--src/nvapi_globals.cpp6
-rw-r--r--src/nvapi_globals.h11
-rw-r--r--src/nvapi_gpu.cpp2
-rw-r--r--src/nvapi_interface.cpp10
-rw-r--r--src/nvapi_static.h16
-rw-r--r--src/nvapi_sys.cpp2
-rw-r--r--tests/meson.build17
-rw-r--r--tests/mock_factory.h (renamed from tests/mock_factory.cpp)7
-rw-r--r--tests/nvapi_d3d.cpp5
-rw-r--r--tests/nvapi_d3d11.cpp5
-rw-r--r--tests/nvapi_d3d11_mocks.h (renamed from tests/nvapi_d3d11_mocks.cpp)6
-rw-r--r--tests/nvapi_d3d12.cpp6
-rw-r--r--tests/nvapi_d3d12_mocks.h (renamed from tests/nvapi_d3d12_mocks.cpp)6
-rw-r--r--tests/nvapi_d3d_mocks.h (renamed from tests/nvapi_d3d_mocks.cpp)8
-rw-r--r--tests/nvapi_drs.cpp4
-rw-r--r--tests/nvapi_sysinfo.cpp5
-rw-r--r--tests/nvapi_sysinfo_mocks.h (renamed from tests/nvapi_sysinfo_mocks.cpp)10
-rw-r--r--tests/nvapi_tests.cpp27
-rw-r--r--tests/nvapi_tests_private.h6
-rw-r--r--tests/resource_factory_util.cpp8
-rw-r--r--tests/resource_factory_util.h41
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);