diff --git a/tests/d3d11/meson.build b/tests/d3d11/meson.build new file mode 100644 index 00000000..91bb7381 --- /dev/null +++ b/tests/d3d11/meson.build @@ -0,0 +1,3 @@ +test_d3d11_deps = [ dxvk_dep, dxgi_dep, d3d11_dep ] + +executable('d3d11-triangle', files('test_d3d11_triangle.cpp'), dependencies : test_d3d11_deps, install : true) \ No newline at end of file diff --git a/tests/d3d11/test_d3d11_triangle.cpp b/tests/d3d11/test_d3d11_triangle.cpp new file mode 100644 index 00000000..4cca16ce --- /dev/null +++ b/tests/d3d11/test_d3d11_triangle.cpp @@ -0,0 +1,115 @@ +#include + +#include +#include + +using namespace dxvk; + +class TriangleApp { + +public: + + TriangleApp(HINSTANCE instance, HWND window) { + if (FAILED(CreateDXGIFactory(__uuidof(IDXGIFactory), + reinterpret_cast(&m_factory)))) + throw DxvkError("Failed to create DXGI factory"); + + if (FAILED(m_factory->EnumAdapters(0, &m_adapter))) + throw DxvkError("Failed to enumerate DXGI adapter"); + + HRESULT status = D3D11CreateDevice( + m_adapter.ptr(), + D3D_DRIVER_TYPE_UNKNOWN, + nullptr, 0, + nullptr, 0, 0, + &m_device, + &m_featureLevel, + &m_context); + + if (FAILED(status)) + throw DxvkError("Failed to create D3D11 device"); + } + + ~TriangleApp() { + + } + + void run() { + + } + +private: + + Com m_factory; + Com m_adapter; + Com m_device; + Com m_context; + + D3D_FEATURE_LEVEL m_featureLevel; + +}; + +LRESULT CALLBACK WindowProc(HWND hWnd, + UINT message, + WPARAM wParam, + LPARAM lParam); + +int WINAPI WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) { + HWND hWnd; + WNDCLASSEXW wc; + ZeroMemory(&wc, sizeof(WNDCLASSEX)); + wc.cbSize = sizeof(WNDCLASSEX); + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = WindowProc; + wc.hInstance = hInstance; + wc.hCursor = LoadCursor(nullptr, IDC_ARROW); + wc.hbrBackground = (HBRUSH)COLOR_WINDOW; + wc.lpszClassName = L"WindowClass1"; + RegisterClassExW(&wc); + + hWnd = CreateWindowExW(0, + L"WindowClass1", + L"Our First Windowed Program", + WS_OVERLAPPEDWINDOW, + 300, 300, + 640, 480, + nullptr, + nullptr, + hInstance, + nullptr); + ShowWindow(hWnd, nCmdShow); + + MSG msg; + + TriangleApp app(hInstance, hWnd); + + try { + while (true) { + if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + + if (msg.message == WM_QUIT) + return msg.wParam; + } else { + app.run(); + } + } + } catch (const dxvk::DxvkError& e) { + Logger::err(e.message()); + return msg.wParam; + } +} + +LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { + switch (message) { + case WM_CLOSE: + PostQuitMessage(0); + return 0; + } + + return DefWindowProc(hWnd, message, wParam, lParam); +} diff --git a/tests/dxgi/meson.build b/tests/dxgi/meson.build index b1e48450..97424c98 100644 --- a/tests/dxgi/meson.build +++ b/tests/dxgi/meson.build @@ -1,5 +1,3 @@ test_dxgi_deps = [ dxvk_dep, dxgi_dep ] -executable('dxgi-factory', files('test_dxgi_factory.cpp'), - link_with : util_lib, - dependencies : test_dxgi_deps) \ No newline at end of file +executable('dxgi-factory', files('test_dxgi_factory.cpp'), dependencies : test_dxgi_deps, install: true) \ No newline at end of file diff --git a/tests/dxvk/meson.build b/tests/dxvk/meson.build index 91b61d1b..4b02c274 100644 --- a/tests/dxvk/meson.build +++ b/tests/dxvk/meson.build @@ -1,3 +1,3 @@ test_dxvk_deps = [ dxvk_dep ] -executable('dxvk-triangle', files('test_dxvk_triangle.cpp'), dependencies: test_dxvk_deps) \ No newline at end of file +executable('dxvk-triangle', files('test_dxvk_triangle.cpp'), dependencies: test_dxvk_deps, install: true) \ No newline at end of file diff --git a/tests/meson.build b/tests/meson.build index 742b376d..485409d6 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -1,2 +1,3 @@ +subdir('d3d11') subdir('dxgi') subdir('dxvk') \ No newline at end of file