diff options
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); |