diff --git a/tests/dxvk/meson.build b/tests/dxvk/meson.build deleted file mode 100644 index 4b02c274a..000000000 --- a/tests/dxvk/meson.build +++ /dev/null @@ -1,3 +0,0 @@ -test_dxvk_deps = [ dxvk_dep ] - -executable('dxvk-triangle', files('test_dxvk_triangle.cpp'), dependencies: test_dxvk_deps, install: true) \ No newline at end of file diff --git a/tests/dxvk/test_dxvk_triangle.cpp b/tests/dxvk/test_dxvk_triangle.cpp deleted file mode 100644 index cacbb03de..000000000 --- a/tests/dxvk/test_dxvk_triangle.cpp +++ /dev/null @@ -1,301 +0,0 @@ -#include -#include -#include -#include - -#include -#include - -#include -#include - -namespace dxvk { - Logger Logger::s_instance("dxvk-triangle.log"); -} - -using namespace dxvk; - -const uint32_t vsCode[] = { - 0x07230203,0x00010000,0x00080001,0x00000024,0x00000000,0x00020011,0x00000001,0x0006000b, - 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, - 0x0007000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000d,0x0000001b,0x00030003, - 0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x0000000b, - 0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x0000000b,0x00000000,0x505f6c67, - 0x7469736f,0x006e6f69,0x00070006,0x0000000b,0x00000001,0x505f6c67,0x746e696f,0x657a6953, - 0x00000000,0x00070006,0x0000000b,0x00000002,0x435f6c67,0x4470696c,0x61747369,0x0065636e, - 0x00070006,0x0000000b,0x00000003,0x435f6c67,0x446c6c75,0x61747369,0x0065636e,0x00030005, - 0x0000000d,0x00000000,0x00060005,0x0000001b,0x565f6c67,0x65747265,0x646e4978,0x00007865, - 0x00050005,0x0000001e,0x65646e69,0x6c626178,0x00000065,0x00050048,0x0000000b,0x00000000, - 0x0000000b,0x00000000,0x00050048,0x0000000b,0x00000001,0x0000000b,0x00000001,0x00050048, - 0x0000000b,0x00000002,0x0000000b,0x00000003,0x00050048,0x0000000b,0x00000003,0x0000000b, - 0x00000004,0x00030047,0x0000000b,0x00000002,0x00040047,0x0000001b,0x0000000b,0x0000002a, - 0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020, - 0x00040017,0x00000007,0x00000006,0x00000004,0x00040015,0x00000008,0x00000020,0x00000000, - 0x0004002b,0x00000008,0x00000009,0x00000001,0x0004001c,0x0000000a,0x00000006,0x00000009, - 0x0006001e,0x0000000b,0x00000007,0x00000006,0x0000000a,0x0000000a,0x00040020,0x0000000c, - 0x00000003,0x0000000b,0x0004003b,0x0000000c,0x0000000d,0x00000003,0x00040015,0x0000000e, - 0x00000020,0x00000001,0x0004002b,0x0000000e,0x0000000f,0x00000000,0x0004002b,0x00000008, - 0x00000010,0x00000003,0x0004001c,0x00000011,0x00000007,0x00000010,0x0004002b,0x00000006, - 0x00000012,0x00000000,0x0004002b,0x00000006,0x00000013,0x3f000000,0x0004002b,0x00000006, - 0x00000014,0x3f800000,0x0007002c,0x00000007,0x00000015,0x00000012,0x00000013,0x00000012, - 0x00000014,0x0004002b,0x00000006,0x00000016,0xbf000000,0x0007002c,0x00000007,0x00000017, - 0x00000013,0x00000016,0x00000012,0x00000014,0x0007002c,0x00000007,0x00000018,0x00000016, - 0x00000016,0x00000012,0x00000014,0x0006002c,0x00000011,0x00000019,0x00000015,0x00000017, - 0x00000018,0x00040020,0x0000001a,0x00000001,0x0000000e,0x0004003b,0x0000001a,0x0000001b, - 0x00000001,0x00040020,0x0000001d,0x00000007,0x00000011,0x00040020,0x0000001f,0x00000007, - 0x00000007,0x00040020,0x00000022,0x00000003,0x00000007,0x00050036,0x00000002,0x00000004, - 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000001d,0x0000001e,0x00000007, - 0x0004003d,0x0000000e,0x0000001c,0x0000001b,0x0003003e,0x0000001e,0x00000019,0x00050041, - 0x0000001f,0x00000020,0x0000001e,0x0000001c,0x0004003d,0x00000007,0x00000021,0x00000020, - 0x00050041,0x00000022,0x00000023,0x0000000d,0x0000000f,0x0003003e,0x00000023,0x00000021, - 0x000100fd,0x00010038 -}; - -const uint32_t fsCode[] = { - 0x07230203,0x00010000,0x00080001,0x0000000c,0x00000000,0x00020011,0x00000001,0x0006000b, - 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, - 0x0006000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000009,0x00030010,0x00000004, - 0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000, - 0x00040005,0x00000009,0x6f6c6f63,0x00000072,0x00040047,0x00000009,0x0000001e,0x00000000, - 0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020, - 0x00040017,0x00000007,0x00000006,0x00000004,0x00040020,0x00000008,0x00000003,0x00000007, - 0x0004003b,0x00000008,0x00000009,0x00000003,0x0004002b,0x00000006,0x0000000a,0x3f800000, - 0x0007002c,0x00000007,0x0000000b,0x0000000a,0x0000000a,0x0000000a,0x0000000a,0x00050036, - 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0003003e,0x00000009, - 0x0000000b,0x000100fd,0x00010038 -}; - -class TriangleApp { - -public: - - TriangleApp(HINSTANCE instance, HWND window) - : m_dxvkInstance (new DxvkInstance()), - m_dxvkAdapter (m_dxvkInstance->enumAdapters().at(0)), - m_dxvkDevice (m_dxvkAdapter->createDevice(getDeviceFeatures())), - m_dxvkSurface (m_dxvkAdapter->createSurface(instance, window)), - m_dxvkSwapchain (m_dxvkDevice->createSwapchain(m_dxvkSurface, - DxvkSwapchainProperties { - VkSurfaceFormatKHR { VK_FORMAT_B8G8R8A8_SRGB, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR }, - VK_PRESENT_MODE_FIFO_KHR, - VkExtent2D { 640, 480 }, - })), - m_dxvkContext (m_dxvkDevice->createContext()) { - - DxvkInputAssemblyState iaState; - iaState.primitiveTopology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; - iaState.primitiveRestart = VK_FALSE; - m_dxvkContext->setInputAssemblyState(iaState); - - m_dxvkContext->setInputLayout(0, nullptr, 0, nullptr); - - DxvkRasterizerState rsState; - rsState.enableDepthClamp = VK_FALSE; - rsState.enableDiscard = VK_FALSE; - rsState.polygonMode = VK_POLYGON_MODE_FILL; - rsState.cullMode = VK_CULL_MODE_BACK_BIT; - rsState.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE; - rsState.depthBiasEnable = VK_FALSE; - rsState.depthBiasConstant = 0.0f; - rsState.depthBiasClamp = 0.0f; - rsState.depthBiasSlope = 0.0f; - m_dxvkContext->setRasterizerState(rsState); - - DxvkMultisampleState msState; - msState.sampleMask = 0xffffffff; - msState.enableAlphaToCoverage = VK_FALSE; - msState.enableAlphaToOne = VK_FALSE; - msState.enableSampleShading = VK_FALSE; - msState.minSampleShading = 0.0f; - m_dxvkContext->setMultisampleState(msState); - - DxvkDepthStencilState dsState; - dsState.enableDepthTest = VK_FALSE; - dsState.enableDepthWrite = VK_FALSE; - dsState.enableDepthBounds = VK_FALSE; - dsState.enableStencilTest = VK_FALSE; - dsState.depthCompareOp = VK_COMPARE_OP_ALWAYS; - dsState.stencilOpFront = VkStencilOpState(); - dsState.stencilOpBack = VkStencilOpState(); - dsState.depthBoundsMin = 0.0f; - dsState.depthBoundsMax = 1.0f; - m_dxvkContext->setDepthStencilState(dsState); - - DxvkLogicOpState loState; - loState.enableLogicOp = VK_FALSE; - loState.logicOp = VK_LOGIC_OP_NO_OP; - m_dxvkContext->setLogicOpState(loState); - - DxvkBlendMode blendMode; - blendMode.enableBlending = VK_FALSE; - blendMode.colorSrcFactor = VK_BLEND_FACTOR_ONE; - blendMode.colorDstFactor = VK_BLEND_FACTOR_ZERO; - blendMode.colorBlendOp = VK_BLEND_OP_ADD; - blendMode.alphaSrcFactor = VK_BLEND_FACTOR_ONE; - blendMode.alphaDstFactor = VK_BLEND_FACTOR_ZERO; - blendMode.alphaBlendOp = VK_BLEND_OP_ADD; - blendMode.writeMask = VK_COLOR_COMPONENT_R_BIT - | VK_COLOR_COMPONENT_G_BIT - | VK_COLOR_COMPONENT_B_BIT - | VK_COLOR_COMPONENT_A_BIT; - - for (uint32_t i = 0; i < DxvkLimits::MaxNumRenderTargets; i++) - m_dxvkContext->setBlendMode(i, blendMode); - - m_dxvkVertexShader = m_dxvkDevice->createShader( - VK_SHADER_STAGE_VERTEX_BIT, 0, nullptr, - SpirvCodeBuffer(_countof(vsCode), vsCode)); - - m_dxvkFragmentShader = m_dxvkDevice->createShader( - VK_SHADER_STAGE_FRAGMENT_BIT, 0, nullptr, - SpirvCodeBuffer(_countof(fsCode), fsCode)); - } - - ~TriangleApp() { - - } - - void run() { - auto sync1 = m_dxvkDevice->createSemaphore(); - auto sync2 = m_dxvkDevice->createSemaphore(); - - auto fb = m_dxvkSwapchain->getFramebuffer(sync1); - auto fbSize = fb->size(); - - m_dxvkContext->beginRecording( - m_dxvkDevice->createCommandList()); - m_dxvkContext->bindFramebuffer(fb); - - VkViewport viewport; - viewport.x = 0.0f; - viewport.y = 0.0f; - viewport.width = 640.0f; - viewport.height = 480.0f; - viewport.minDepth = 0.0f; - viewport.maxDepth = 1.0f; - - VkRect2D scissor; - scissor.offset.x = 0; - scissor.offset.y = 0; - scissor.extent.width = 640; - scissor.extent.height = 480; - - m_dxvkContext->setViewports(1, &viewport, &scissor); - - m_dxvkContext->bindShader( - VK_SHADER_STAGE_VERTEX_BIT, - m_dxvkVertexShader); - - m_dxvkContext->bindShader( - VK_SHADER_STAGE_FRAGMENT_BIT, - m_dxvkFragmentShader); - - VkClearAttachment clearAttachment; - clearAttachment.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - clearAttachment.colorAttachment = 0; - clearAttachment.clearValue.color.float32[0] = 0.0f; - clearAttachment.clearValue.color.float32[1] = 0.0f; - clearAttachment.clearValue.color.float32[2] = 0.0f; - clearAttachment.clearValue.color.float32[3] = 1.0f; - - VkClearRect clearArea; - clearArea.rect = VkRect2D { { 0, 0 }, fbSize.width, fbSize.height }; - clearArea.baseArrayLayer = 0; - clearArea.layerCount = fbSize.layers; - - m_dxvkContext->clearRenderTarget( - clearAttachment, - clearArea); - m_dxvkContext->draw(3, 1, 0, 0); - - auto fence = m_dxvkDevice->submitCommandList( - m_dxvkContext->endRecording(), sync1, sync2); - m_dxvkSwapchain->present(sync2); - m_dxvkDevice->waitForIdle(); - } - - - VkPhysicalDeviceFeatures getDeviceFeatures() const { - VkPhysicalDeviceFeatures features; - std::memset(&features, 0, sizeof(features)); - return features; - } - -private: - - Rc m_dxvkInstance; - Rc m_dxvkAdapter; - Rc m_dxvkDevice; - Rc m_dxvkSurface; - Rc m_dxvkSwapchain; - Rc m_dxvkContext; - - Rc m_dxvkVertexShader; - Rc m_dxvkFragmentShader; - -}; - -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/meson.build b/tests/meson.build index 096cbfdd1..81c295e8a 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -1,4 +1,3 @@ subdir('d3d11') subdir('dxbc') subdir('dxgi') -subdir('dxvk') \ No newline at end of file